重要ポイント
現代のmacOSバイナリには、PIE、ASLR、コード署名などの強力なプラットフォーム緩和技術が標準搭載されています。しかし、最新のアプリケーションが数十年前に策定された POSIX のルールに反した場合、何が起こるのでしょうか。
署名済みOpenSSLラッパーバイナリを分析したところ(Akamai社内で開発したAIリサーチツール「Hallucinator」を使用)、重大なシグナルリエントランシーの脆弱性が確認されました。具体的には、非同期の場合に危険であることが知られているシグナル、標準入出力、メモリプリミティブと、従来のTLS機能が共存していることが判明しました。
環境上の制約により、エンドツーエンドでの脆弱性の悪用を確認することはできませんでしたが、静的および動的証拠から、サービス妨害(DoS)のリスクが高いことが強く示唆され、タイミングが悪ければユーズ・アフター・フリー(UAF)への発展も考えられます。
このブログ記事では、確認された証拠を詳細に分析し、合理的なリスクを検証した上で、セキュリティリーダーがアーキテクチャ上の脅威を評価する際にコンプライアンスチェックリストだけにとらわれてはならない理由を説明します。
対象と証拠の分類
この調査の正当性を確保するため、Akamaiは直接観察したものと、追加のランタイム計測が必要なものを意図的に区別しています。
対象メタデータ
対象:openssl(macOS Mach-Oユニバーサルバイナリ)
SHA-256:5a7d226a379afa156ea96068abd51da74f5f86cd2eb5b6b17ac45ee002d340b4
確認された静的証拠
従来のTLS機能:シンボル情報から、_TLSv1_client_method()の存在が確認されました。
Async-unsafeなプリミティブ:シンボル情報から、_signal()、_fprintf()、_free()の存在が確認されました。
本番環境ポスチャ:コード署名、ハッシュ値、ファイルメタデータから、これがシンセティック・テスト・コードではなく、本物の署名済みmacOSアーティファクトであることが確認されます。
この3つのポイントにより、非常に信憑性の高いリエントランシーの脆弱性のパターンが明らかになり、静的分析に基づく一般的な警告から検証済みのアーキテクチャ上の欠陥へ引き上げられました。
暫定スコア(現時点での証拠に基づく):CVSS v3.1 = 5.1(中)
現時点で正当な主張に対する基本ベクトル案:
CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
暫定スコアが中程度である理由
- 静的な脆弱性であることを示す強力な証拠がありますが、脆弱性悪用チェーンは確認されていません。
- 主な影響は、可用性リスク(ハングアップやクラッシュの可能性)です。
- 現在、悪用は非常に複雑な様相を呈しています。
主な脆弱性:シグナルによって引き起こされる状態の混同
多くの開発者が、ウォッチドッグタイマーを用いた欠陥のある設計パターンを使用しています。タイマーが作動すると、アプリケーションは次の3つの処理を順番に実行しようとします。
イベントを記録する
メモリをクリーンアップする
プログラムを終了する
開発者は、シグナルハンドラ内に手短なfprintf(stderr、「タイムアウト...」)を記述し、続いてfree()を記述します。ユニットテストでは、これは問題なく動作しているようです。
しかし、シグナルハンドラ内のfprintfやfreeなどの関数を呼び出すことは、POSIXの基本的なasync-signal-safetyのルールに違反します。
OpenSSLは、複雑な状態遷移(失敗したTLS接続の切断など)を処理する際、システムのメモリ割り当て機能に大きく依存します。シグナルハンドラは、通常の制御フローに比べて非同期的に実行されます。攻撃者がネットワークパケットのタイミングを調整し、SIGALRMウォッチドッグをトリガーするのに十分な時間だけ応答を遅らせることができれば、シグナルハンドラはOpenSSLのティアダウンを実行中に突然中断します。
セッションのクリーンアップ中にメインスレッドがlibmallocのヒープロックを保持している状態で、fprintfが動的にバッファ領域を割り当てようとすると、プログラムの状態が乱れる可能性があります。この交点が引き起こす実際的で確かなセキュリティ上の影響は、深刻な不安定性、プロセスのハングアップ、非同期DoSです。
触媒:プロトコルダウングレードによる時間延長
メモリクリーンアップ中の微小な競合状態の発生は、非常に難しい問題として知られています。ここで、_TLSv1_client_methodの存在がリスクプロファイルを変化させます。
従来のTLSハンドシェイクは、現代のTLS 1.3実装と比べて、根本的に「ノイズが多く」、負荷が大きくなります。従来の暗号スイートのエラーハンドリングとセッション無効化ロジックでは、OpenSSLの内部構造においてより広範なメモリクリーンアップが必要となります。
能動的に接続をダウングレードさせることにより、攻撃者は必ずしも暗号化を解除しようとしているわけではありません。OpenSSLのステートマシンを、最も古くてレイテンシーの多いコードパスに意図的に移行させようとしているのです。これにより、理論上、ティアダウンの実行時間が延長され、シグナル割り込みの成功率が大幅に高まります。
悪用可能性のギャップ:DoSとUAF
現在の実行環境では、検証中にランタイムが強制終了され(exit 137)、lldbのアタッチが制限されました。これらの制約により、決定的なデッドロックの痕跡を捉えることができず、決定的なUAF脆弱性の悪用を確認することもできませんでした。
- リスクレベル:高(可用性への影響に加え、タイミングによっては完全性に対するリスクの可能性あり)
- 信頼度:脆弱性パターンの存在については中~高レベル、最悪の場合のメモリ破損の影響については中レベル
- 要点:高リスクのリエントランシーパターンを確認しました。署名付きの現代のバイナリは、従来のプロトコルパスと非同期の前提が衝突した場合、重大な脆弱性チェーンを露呈します。
証拠の出力(tmp.txt)において、同じ署名付きMach-Oバイナリには、_signal、_fprintf、_freeに加えて、_TLSv1_client_methodも含まれています。その共存は、技術的に深刻な状態です。従来のTLS対応コードパス、非同期シグナル処理プリミティブ、およびasync-unsafe-adjacentなlibcの使用が組み合わさり、高リスクのリエントランシーパターンを確たるものにしています。
Demo-openssl-glitch % otool -Iv openssl > tmp.txt 2>&1
Demo-openssl-glitch % cat tmp.txt | grep -En "_TLSv1_client_method| _signal| _fprintf| _free"
620:0x0000000100035c1c 3132 _TLSv1_client_method
919:0x0000000100036ecc 3440 _fprintf
922:0x0000000100036efc 3443 _free
923:0x0000000100036f0c 3444 _freeaddrinfo
924:0x0000000100036f1c 3445 _freezero
1004:0x000000010003741c 3527 _signal
#
1138:0x000000010004c318 3132 _TLSv1_client_method
1923:0x000000010004dba0 3445 _freezero
2010:0x000000010004de58 3440 _fprintf
2013:0x000000010004de70 3443 _free
2014:0x000000010004de78 3444 _freeaddrinfo
2048:0x000000010004df88 3527 _signal
CISOの視点:技術的な欠陥をビジネスリスクと解釈する
このような脆弱性は、複雑な環境に対応しているセキュリティリーダーに、標準的なコンプライアンスチェックをすり抜ける4つの特有の課題をもたらします。
「見せかけの故障」と、平均修復時間(MTTR)の急増
「グリーンダッシュボード」という幻想
悪用の手段としての従来の技術的負債
AI脅威増幅機(複雑な攻撃手法の民主化)
「見せかけの故障」と、平均修復時間(MTTR)の急増
通常のバッファオーバーフローは明確なセグメンテーション違反(SIGSEGV)を引き起こし、クラッシュダンプを生成しますが、ヒープロック競合はプロセスのフリーズを引き起こします。故障するわけではなく、単にリクエストに応答しなくなります。標準的なアップタイム監視では、プロセスが「実行中」と表示されることがあるため、インシデント対応が遅れます。エンジニアが調査を行う際、クラッシュログがないと根本原因の特定が非常に困難になり、MTTRが大幅に増加します。
「グリーンダッシュボード」という幻想
このバイナリはデジタル署名されており、位置独立コード(PIE)などの最新のメモリ保護技術を使用しています。標準的なコンプライアンスダッシュボードや基本的な脆弱性スキャンでは、この資産は安全に見えるかもしれません。この脆弱性は、基本的なプラットフォーム緩和技術だけに依存することの危険性を浮き彫りにしています。OSレベルのセキュリティ強化では、POSIXの同時実行性違反に起因する深いアーキテクチャ上の論理的欠陥からシステムを保護することはできません。
悪用の手段としての従来の技術的負債
情報セキュリティチームは、「誰も使用していない」や「Machine-In-the-Middleによる復号のリスクがあるだけ」という前提で、従来のプロトコル(TLS 1.0など)のリスクを許容することが多いです。この調査は、従来の技術的負債が、完全に異なる種類の攻撃を可能にするための武器として積極的に利用される可能性があることを示しています。従来のTLS実装は、暗号化が脆弱であるだけでなく、攻撃者が競合状態の時間を延長し、メモリ破損攻撃を実行するために必要な手段なのです。
AI脅威増幅機(複雑な攻撃手法の民主化)
かつて、POSIXの同時実行性違反を探索し、従来の暗号化のダウングレードと組み合わせることでステートマシンの非同期化を引き起こすことは、優秀な脆弱性研究者の領域でした。現在は、攻撃的なAIツールや大規模言語モデル(LLM)を活用したリバースエンジニアリングの急増により、その参入障壁は大幅に低下しています。
攻撃者は、この目立たないアーキテクチャ上の交点を大規模かつ自動的に探索できるようになりました。これらの脆弱性を検知して武器化するために脅威アクターに課せられる認知的難しさが低下するにつれ、企業にとってマルチステージのロジックの脆弱性を未修正のまま放置することのリスクは急激に高まります。
緩和戦略
この複雑な脆弱性悪用チェーンを無力化するためには、次のことにより、コードレベルの根本原因とアーキテクチャ上の要因の両方に対処する必要があります。
- 安全でないハンドラのリファクタリング
- エッジにおける従来のプロトコルの排除
- ディープ・ライブネス・プローブへのアップグレード
- CTEMとAI検証への進化
安全でないハンドラのリファクタリング(根本原因)
開発者は、シグナルハンドラからasync-signal-unsafeな関数(free、fprintf)を徹底的に排除しなければなりません。「セルフパイプトリック」を義務付け、複雑なティアダウンンロジックを安全にメインのアプリケーション・イベント・ループに委ねます。
エッジにおける従来のプロトコルの排除(触媒)
ローカルのアプリケーション設定に依存してはなりません。外部境界(Webアプリケーションファイアウォール/ロードバランサー)において、TLS 1.2以上の厳格な最低基準を適用し、攻撃者がこれらの微小な競合状態を引き起こすために必要なレイテンシー操作を悪用するのを防ぎます。
ディープ・ライブネス・プローブへのアップグレード(運用レジリエンス)
標準的なアップタイム監視では、ヒープロック競合を検出することはできません。メモリ割り当てとプロセス状態を積極的に検証するシンセティックトランザクションを展開し、デッドロック状態にある「ファントム」プロセスを即座にフラグ付けして再開できるようにします。
CTEMとAI検証への進化(戦略)
従来の静的アプリケーション・セキュリティ・テスト(SAST)では、これらのアーキテクチャ上の交点を見逃してしまいます。AI駆動型の動的テストを継続的な脅威露出管理(CTEM)サイクルに組み込むことで、攻撃者が武器化する前に、マルチステップのロジックチェーンをプロアクティブに特定し、断ち切ります。
タグ