多くのサードパーティ製セキュリティ プラットフォームは、Apple のコード署名 API を適切に実装できていないため、マルウェアが署名済みソフトウェアを装う可能性があります。
この「コード署名バイパス」は、Oktaのエンジニアであるジョシュ・ピッツ氏によって発見されました。同氏は2018年2月に初めてこの脆弱性を発見し、2018年6月12日に公表しました。この脆弱性は、FacebookやGoogleを含む多数のセキュリティプラットフォームに影響を与えており、少なくともmacOSメーカーからの回答についてピッツ氏が述べた内容によれば、Appleは責任を認めていません。
コードサイニングとは、開発者またはソフトウェア会社がアプリケーションにデジタル署名を埋め込むことで、そのアプリケーションが自社によって開発され、第三者によって改変されていないことを証明することです。コードサイニングは、ソフトウェアが信頼できるソースから提供されていることを保証します。ほとんどのセキュリティソフトウェアは、インストールを許可する前に、アプリが正当であることを確認するためにコードサイニング検証を使用しています。
ピッツ氏によると、いくつかのmacOSセキュリティスイートの場合、コード署名チェックが不適切に使用されており、特定の実行ファイルが、セキュリティソフトウェアがチェックしない悪意のあるモジュールの束とバンドルされたアプリの一部に対して有効な署名を提示できる可能性があるという。
偽造IDと怠惰な警備員
まるで大学のバーの光景が再現されたようだ。偽造IDを持つ学生は、特定のバーには徹底した検査体制を敷いていない警備員がいることを知っており、気づかれずに通り抜けたいときはそこに向かう。
macOS のセキュリティの場合、ID の検査を怠ると、大量のマルウェアが検出されずにすり抜けてしまう可能性があります。攻撃者が FAT ファイルに含めることができるものはすべて使用される可能性があります。
ピッツ氏は、コード署名チェックを悪用するには、いくつかの条件が必要だと述べた。
- 最初の項目として i386、x86_64、または PPC 用にフォーマットされた、適切に署名された Mach-O ファイルを含む FAT/ユニバーサル ファイル形式の実行可能ファイル。
- x86_64 macOS システム用にアドホック署名され、i386 でコンパイルされた悪意のあるバイナリ。
- ヘッダー ファイル内の CPU_TYPE は、無効な形式、またはターゲット マシンのチップセットにネイティブでない形式に設定されている必要があります。
「適切な SecRequirementRef と SecCSFlags を渡さないと、コード署名 API (SecCodeCheckValidity) は Fat/Universal ファイルの最初のバイナリをチェックして実行ファイルに署名した人物 (例: Apple) を確認し、暗号署名によって改ざんがないか確認します。その後、API は Fat/Universal ファイル内の後続の各バイナリをチェックしてチーム識別子が一致していることを確認し、暗号署名が含まれていることで改ざんがないか確認しますが、CA の信頼ルートはチェックしません」と Pitts 氏は投稿で述べています。
参照: クイック用語集: マルウェア (Tech Pro Research)
FAT 実行可能ファイル内の特定のファイルをフォーマットすることは重要です。i386 はコード署名 API に問題を引き起こすためです。コード署名 API は、「コード署名チェックにはネイティブ CPU アーキテクチャ (x86_64) を優先し、x86_64 の場合はデフォルトで署名されていないコードをチェックします。」
つまり、正しく動作する実行ファイルは適切に署名されているように見え、そこに含まれるマルウェアを何の罰も受けずに実行できることになります。
Apple の対応は正しいのでしょうか?
ピッツ氏がAppleにこの脆弱性について報告したところ、Appleは「サードパーティの開発者はSecStaticCodeCheckValidity APIでkSecCSCheckAllArchitecturesとkSecCSStrictValidateを使用するべきだ」と述べ、同社がその要件を反映するように開発者向けドキュメントを更新すると伝えた。
ピッツ氏はこれに対しアップル社に、フラグとコードデザインの厳密なチェックの両方を回避し、開発者がそれらのフラグを含めた場合でもエクスプロイトを機能させることが可能であると伝え、概念実証を提供した。
ピッツ氏によれば、「Appleは、これは直接対処すべきセキュリティ問題ではないと述べた」とのことで、開発者は「意味のある結果を提示したいのであれば、ユニバーサルバイナリ内のすべてのIDが同じであることを確認するための追加作業を行う必要がある」と再び述べている。
Pitts 氏の開示タイムラインを見ると、Apple 社はエクスプロイトの責任を受け入れようとせず、コード署名 API を不適切に使用した開発者に責任を転嫁しているように見えますが、Apple の推奨フラグを有効にしてもエクスプロイトを実行できるのであれば、開発者の問題ではないようです。
現時点では、Pitts氏の記事を読んで、お使いのウイルス対策ソフトウェアが影響を受けているかどうかを確認する以外に、できる対策はあまりありません。影響を受けている場合は、最新のアップデートをインストールして、修正プログラムがリリースされた際に適用できるようにし、macOS App Storeなどの信頼できるソース以外からのアプリのインストールは避けてください。
テクノロジーリーダーにとっての重要なポイント:
- サードパーティの macOS セキュリティ ソフトウェアのコード署名処理に欠陥があり、悪意のあるアプリが適切に署名されているかのように偽装できる可能性があります。
- Appleは、サードパーティによるAPIの実装方法に問題があるとしていますが、解決策の提案だけでは解決には至っていません。最新のウイルス対策アップデートをインストールし、信頼できないソースからのアプリをインストールしないことで、macOSシステムのセキュリティを確保してください。
こちらもご覧ください
- Macの生産性を高める10のテクニック(無料PDF)(TechRepublic)
- 愚かなmacOSのセキュリティ欠陥により、誰でも管理者権限を取得できる(ZDNet)
- AppleのmacOS 10.14 Mojaveにはセキュリティとプライバシーに関する大きなアップデートが含まれています。そのリストはこちらです(TechRepublic)
- 新たなmacOSバックドアがOceanLotus脅威グループと関連していることが判明(ZDNet)
- ハッカーがAppleのセキュアエンクレーブを解読し、iOSモバイルセキュリティの重要部分を破壊したと主張(TechRepublic)
