FFRIエンジニアブログ

株式会社FFRIセキュリティのエンジニアが執筆する技術者向けブログです

Nullcon Berlin 2025 の登壇経緯・所感

はじめに

こんにちは。基礎技術研究部の中川です。9 月にベルリンで行われた Nullcon Berlin 2025 に登壇してきました。この記事では、登壇に至るまでの経緯や発表内容、そして実際に参加して感じたことを主に紹介します。

Nullcon について

Nullcon は 2010 年から続くアジア最大のセキュリティカンファレンスです。運営しているのはインドのセキュリティ企業である Payatu Technologies Pvt Ltd. です。そのためインドを中心に定期的に関連イベントが開催されています。過去の開催場所としてはゴア、バンガロール、ハイデラバードなどがあるようです。近年はベルリンでも開催されており、今年で 4 回目でした。

インドで開催されている Nullcon Goa と比べると、Nullcon Berlin はかなり規模が小さいように感じました。たとえば Nullcon Goa 2023 の参加者は 2,900 人以上だったそうですが、Nullcon Berlin の参加者は、私の体感値では 100 人程度だっと思われます。(オープニングセッションで具体的な数字の案内があったものの、正確な数値は失念してしまいました。) 直前に参加していた Black Hat USA と比較すると、だいぶこじんまりとした、小規模なワークショップといった印象でした。

会場の様子 1
会場の様子 2
スピーカーバッジ

参加者はやはりヨーロッパ圏の人が多かったのですが、中国から来ている方も何人かいました。ちなみに日本から参加していたのは私だけだったようで、カンファレンス中に日本語を話す機会は一度もありませんでした。

発表以外にも、会場では同時並行で以下のようなイベントが開催されていました。

  • Live Bug Bounty
  • CTF & Lock Picking
  • Firmware Security Village

私は参加していませんが、CTF イベントはオンラインとオンサイトを組み合わせたハイブリッド形式で実施されていたようです。オンサイトで参加していた上位入賞チームには、最終日に表彰と記念品が贈呈されていました。また、企業スポンサーのブースも規模は小さいながら存在しており、各社の製品について詳しく話を聞くことができる場となっていました。

小規模だったこともあり、ネットワーキングパーティーでも周りの方と話しかけやすかったです。SNS 上でつながっていた方が一人だけいて、それ以外のつながりはまったくない状態で参加したのですが、多くの方と接点を持てました。

発表した内容について

今回は、非常にシンプルでありながらも強力な macOS の脆弱性 CVE-2025-24204 の詳細を発表しました。

Why Is Process Isolation Indispensable? Stealing All macOS Sensitive Info with a Single Vulnerability

この脆弱性の根本原因は至ってシンプルで、gcore と呼ばれるコアファイルを作成するバイナリに com.apple.system-task-ports.read というエンタイトルメント*1が付与されていたことです。このエンタイトルメントを悪用することで、以下の 3 つが可能であることを示しました。

  • ユーザーのログインパスワードなしで login keychain*2の中身をダンプ
  • Transparency Consent and Control (TCC) のプライバシー機構のバイパス
  • iOS アプリの復号*3

ソースコードや技術的な詳細については、すべて GitHub (FFRI/CVE-2025-24204) に公開していますので、興味のある方はそちらをご覧ください。

登壇に至るまで

今回の脆弱性発見は、本当に偶然から始まりました。私は普段、X でセキュリティの最新情報をキャッチアップしています。ある日、何気なくタイムラインを眺めていたところ、「Microsoft が ProcDump for Mac というツールを公開した」という記事を目にしました。

参考: Microsoft Tech Community – ProcDump 1.0 for Mac

この記事を読んだとき、私は「ProcDump for Mac って利用できる場面がかなり限定されるのでは」と感じました。というのも、macOS には System Integrity Protection (SIP) というセキュリティ機構がデフォルトで有効になっており、プロセス間隔離が実現されています。たとえ root 権限であっても、通常は他のプロセスのメモリを読み取ることはできません。ProcDump はプロセスのメモリダンプを作成するツールですから、SIP が有効であればほとんど機能しないはずだと考えたのです。

そこで ProcDump の GitHub ページを確認し、「利用するにはまず SIP を無効化する必要がある」や、「ダンプ対象のプロセスに com.apple.security.get-task-allow のエンタイトルメントを付与せよ」といった記述が README にあるだろうと期待しました。ところが、実際にはそうした記述は一切ありませんでした。

気になったため、macOS Sequoia 上で ProcDump をダウンロードして、適当なプロセスに対して実行してみました。すると驚くべきことに、SIP が有効な状態にもかかわらず、任意のプロセスのメモリをダンプできてしまったのです。

「そんな馬鹿なことが...」と思いながら ProcDump のエンタイトルメントを確認しましたが、特別なものは付与されていませんでした。特別なエンタイトルメントなしで他プロセスのメモリが読めるはずはありません。何かカラクリがあるはずだと考え、Binary Ninja を使って ProcDump の解析を始めました。

デコンパイルしてみると結果は非常にシンプルで、解析には 1 時間もかかりませんでした。ProcDump は内部的に /usr/bin/gcore というツールを popen 関数で呼び出しているだけだったのです。「この gcore が怪しいな」と思い、今度は gcore のエンタイトルメントを調べてみたところ、驚きの事実が判明しました。なんと com.apple.system-task-ports.read が付与されていたのです。私は以前のバージョンの macOS ではこのエンタイトルメントが付与されていなかったことを覚えていたため、この変更は macOS Sequoia から導入されたものだとすぐにわかりました。(ちなみに、Microsoft が ProcDump for Mac を作ったのも、この変更があったからではないかと私は推測しています。)

この時点で「これは脆弱性だ」と確信しました。なぜなら、以下の 2 点が揃っていたからです。

  • gcore はプロセスのメモリをダンプするためのツールである
  • com.apple.system-task-ports.read は、SIP が有効な macOS 上で任意のプロセスのメモリ読み取りを可能にするエンタイトルメントである

つまり gcore がこのエンタイトルメントを持っていることは、SIP が有効な macOS において任意のプロセスについて、そのメモリの内容をすべて読み取れてしまうことを意味します*4

実際に gcore を使えば、プロセスのメモリに含まれる機微な情報を取得できます。例えば Contacts.app を対象にすれば、ユーザーのアドレス帳に含まれるデータをそのままダンプできてしまいます。

macOS では本来、こうした機微な情報へのアクセスには TCC と呼ばれる仕組みが働き、ユーザーの明示的な同意がない限りアクセスは禁じられています。したがって、もしこの同意をスキップしてアクセスできるのであれば、それは脆弱性であることを意味します。

この段階で「この gcore の脆弱性は TCC バイパスに使える」と確信しました。実際に機微な情報を扱うアプリを動かし、そのプロセスを gcore でダンプすれば、TCC の制約を受けずに情報を取得できてしまうからです。

私はすぐに PoC を作成し、Apple へレポートを提出しました。朝に脆弱性を見つけてからレポートを送信するまで、半日程度だったと記憶しています。その後、改めてこの脆弱性の深刻さを考え、さらに他の悪用方法があるのではないかと調査を続けました。その結果が、今回 Nullcon Berlin で発表した内容へとつながっています。

最初は「シンプルすぎてカンファレンストーク向きではないか」と思っていましたが、社内で話してみると想像以上に反響がありました。そこで、Apple 製品のセキュリティを理解しているレビューボードが存在するカンファレンスを探し、その中で Nullcon が目に留まりました。

Nullcon のレビューボードには Apple のリサーチャーをはじめ、Tihmastar さんなど Apple セキュリティ分野の専門家が名を連ねています。また、Nullcon Berlin にはありませんが、Nullcon Goa には iOS/macOS トラックという専用のセッション枠まで設けられています。こうした事情もあり、比較的マイナーな macOS セキュリティの話題でもきちんと評価してもらえるのではないかと考え、Nullcon 向けに CFP を準備して提出しました。

発表の反響

今回の発表は、老舗のセキュリティニュースメディアである Help Net Security の Mirko さん (Director of Content) の目に留まり、なんと取材を受けることになりました。その結果として公開された記事が以下になります。脆弱性発見の経緯から、その影響までを非常にわかりやすくまとめてくれています。

Help Net Security に掲載された記事

私自身は、keychain dump や TCC bypass の方を発表の主題としていたつもりで、iOS アプリの復号手法は正直「おまけ」として紹介した程度でした。ところが実際には、発表後に最も反響が大きかったのは iOS アプリの復号手法の部分でした。レビューパネルの Tihmastar さんからも、その点を評価したとのコメントを後からいただきました。

私は iOS セキュリティについてはそこまで詳しいわけではないのですが、近年の iOS セキュリティは強固になってきており、従来使えていた復号手法が徐々に通用しなくなりつつあります。これは近年出版された学術論文でも指摘されており、例えば以下のように書かれています。

Most modern jailbreak tools only support iOS devices released up until 2017. These supported devices are expected to stop receiving updates from Apple in the coming years

現在、iOS アプリを復号する一般的な手法は Jailbreak した iPhone を利用するものです。しかし、将来的にその手法が利用不可となる可能性がある、ということです。そのような状況において、今回私が報告した脆弱性を利用する手法が 1 つの代替手段となる、おそらくその点に注目が集まったのではないかと考えています。

雑感

プレミアムエコノミーに乗るだけでもだいぶ違う

今回は渡航前に腰を痛めていたこともあり、エコノミークラスからプレミアムエコノミーにアップグレードしました。 ルフトハンザ航空のプレミアムエコノミーに搭乗したのですが、かなり快適に過ごせました。アップグレードで得られる利点は主に次の通りです。

  • 前後の座席間隔が広く、フルフラットではないものの、座席を倒して十分にくつろげる
  • ウェルカムドリンクがつき、機内食も若干ではあるがグレードアップする
  • 機内で貸し出される毛布の質が上がる
  • 座席前のディスプレイサイズがエコノミークラスより大きい

特に最初の点が嬉しく、普段は機内でほとんど眠れないのですが、今回は多少眠ることができました。

トランジットに失敗しても落ち着こう

航空券を予約した際、航空会社が提示したフライトプランでは帰りの便のトランジット時間が 1 時間強で、少し余裕がないと感じていました。 嫌な予感が的中し、帰りのベルリン発フランクフルト行きの飛行機が大幅に遅れ、乗り継ぐ予定の便に乗れないことが確定しました。 海外渡航は何度か経験がありましたが、トランジットに失敗したのは初めてで、少し焦りました。

その後、ルフトハンザ航空のアプリ経由で自動的に別の便に振り替えられ、「一安心」と思いきや、よく見ると次の日の便に振り替えられていました。 どうやらその日の羽田行きの便には空きがなく、翌日の便への振り替えになったようです。

空港内で一泊という最悪のケースも覚悟しましたが、流石にそんなことはなく、ルフトハンザ航空からホテルが割り当てられ、幸いなんとかなりました。 この一連の手続きが公式アプリで完結し、空港カウンターに並ばずとも済んだ点は非常に便利でした。

発表を終えて疲れているところでの追加一泊は正直しんどかったのですが、滞在が一日延びたおかげでフランクフルトを軽く観光できたのは良い思い出になりました。

レーマー広場
カール大帝の像
フランクフルト滞在時のディナー

おわりに

今回の発見は本当に偶然の産物で、「棚ぼた脆弱性発見」とも言えるものでした。しかし、Nullcon Berlin という国際的な舞台で発表でき、そしてある程度の反響を得られたことは本当に嬉しく思っています。

Nullcon のファウンダーである Antriksh Shah さんには、Help Net Security の取材につないでくださったり、レビューパネルの Tihmastar さんを紹介していただいたりと、多大なサポートをいただきました。会議中もさまざまな場面で助けていただき、本当に感謝しています。

今回の登壇を通じて、Nullcon に対して非常に良い印象を持ちました。Nullcon で登壇している日本の方はあまり見かけないですが、参加した一人として自信を持って勧めることができるカンファレンスです。次回はインドで開催される、より規模の大きい Nullcon Goa にも CFP を出して、ぜひ発表してみたいと強く感じています。

*1: エンタイトルメントとは実行ファイルのコード署名に含まれる、その実行ファイルに対して付与されている権利・権限になります。詳細は Apple の公式ドキュメントを参照してください。

*2: macOS/iOS に標準で導入されているパスワードマネージャーで、Web サイトのパスワード、証明書、クッキーの暗号化鍵などが含まれます。

*3: iOS アプリは FairPlay と呼ばれる Digital Rights Management (DRM) 技術により保護されており、実行ファイルの一部が暗号化されています。実行ファイルが復号されてから実行されるようになっています。そのため、iOS アプリの解析には、アプリの復号が必要になります。FairPlay で採用されている暗号化方式の実装は Apple によって文書化されていません。また、難読化が施されており、リバースエンジニアリングも困難となっています。

*4: 補足しておくとバイナリに com.apple.system-task-ports.read が付与されているからと言ってすなわち脆弱性とは言えません。例えば com.apple.system-task-ports.read を持つバイナリとして、vmmap があります。vmmap は対象プロセスがマップしているファイル、ロードしているライブラリ、ヒープの利用状況を標準出力に表示するツールですが、これらの情報が表示できたからと言って TCC bypass につながるような悪用はできません。gcore の場合は対象プロセスのメモリをすべて読み取り、コアファイルとして保存できたため脆弱性になっています。