このページの本文へ

カスペルスキーのイベントで講演、汚染コンパイラによる被害の実態と対策の難しさ

狙われるコンパイラ……“バックドア入りアプリ量産”のリスクと対策

2019年05月14日 07時00分更新

文● 谷崎朋子 編集● 大塚/TECH.ASCII.jp

  • この記事をはてなブックマークに追加
  • 本文印刷

 どんなアプリケーションやツールでも、脆弱性やバグが悪用されてデータが盗まれたりリモートから不正に操作されたりするリスクはある。これは誰もが理解するところだろう。では、そうした疑いの目をふだん使っているアプリケーションに向けたことはあるだろうか。むしろ日常的に使っているアプリケーションこそ、よほどのことが起きないかぎりは無条件に信頼し、利用しているのが実態ではないだろうか。

 そんな“無条件の信頼”の裏をかく手法がここ数年、標的型攻撃キャンペーンの中で観測されている。アプリケーション開発に使われるコンパイラを改ざんすることで、コンパイルしたプログラムにもれなくバックドアを仕込むという手口だ。

 2019年4月、シンガポールで開催されたカスペルスキー(Kaspersky Labs)主催「Security Analyst Summit 2019(SAS 2019)」の講演で、Kaspersky Labsのヌーシン・シャバブ氏とPS&C Groupのネガール・シャバブ氏が、コンパイラを汚染するこうした攻撃の背景や最新の手口などを解説した。

Kaspersky Labs、GReAT(Global Research & Analysis Team)でシニアセキュリティリサーチャーを務めるヌーシン・シャバブ氏(左)、PS&C Groupでアプリケーションセキュリティコンサルタントを務めるネガール・シャバブ氏

古くからリスクが指摘されていた「汚染コンパイラ」による攻撃

 そもそも汚染コンパイラを利用した攻撃については、UNIX開発者のひとりであるケン・トンプソン氏がおよそ35年前に示唆していた。1983年のチューリング賞受賞記念講演で、トンプソン氏は「プログラムをコンパイルするとき、正規のログイン関数を不正なログイン関数に置き換えるようなコンパイラは作成できる。コンパイラは何度セルフホスティング(バージョンアップなどの目的で自身のソースコードをコンパイルすること)しても、関数を書き換える仕掛けやコンパイラへの細工は問題なく新コンパイラに引き継がれる」と発表。ソフトウェア開発段階でのセキュリティリスクについて言及している。

 それが現実の攻撃として観測された事例として、2015年9月に中国のiOSアプリ開発者が発見した「XcodeGhost」がある。「Xcode」はアップルが開発者向けに提供しているIDE(統合開発環境)だが、それを改ざんしたXcodeGhostを使ってアプリをコンパイルすると、もれなくバックドアが仕込まれたiOSアプリが出来上がるというものだ。その影響を受けたアプリは4000本以上に及び、アップルは当時、「WeChat」「Angry Bird 2」「Baidu Music」といった人気の高い感染アプリ25本を公表して、ユーザーに削除を呼びかけるなどの対応に追われた。

 両氏の説明によると、XcodeGhostは正規のCoreServices(基本的なサービスを含むライブラリ)を不正なCoreServicesに置き換え、Ld.xcspec(ldリンカーが利用する設定情報を含む)には不正なCoreServicesをひも付けてコンパイルされるようにコードを挿入する。これにより、コンパイルされたアプリは起動したiOSデバイスの名前やタイプ、言語、UUIDなどの情報を収集して、攻撃者のC2サーバーへアップロードする仕掛けとなっていた。

汚染コンパイラ「XcodeGhost」で不正アプリが作成される流れ

 さらに2019年1月末、Kaspersky Labsでは新たな汚染コンパイラ攻撃を発見した。同社では、タイのゲーム会社Electronics Extremeや韓国のゲーム会社Zepettoを含む3社のアプリにバックドアが埋め込まれていることを発見し、詳細な調査を実施。その結果、2018年後半に見つかっていた不審なlink.exeが使われていることが分かった。

 link.exeは「Microsoft Visual Studio」のリンカー(複数のコードを紐付けるツール)だが、見つかった不審なリンカーは不正なDLLをロードし、特定のプログラムがコンパイルされたときにのみ、C++のライブラリの1つであるmsvcrt.libに代わって不正なmsvcrt.libとリンクさせる。これにより、いつでもリモートから情報を抜き取るなどの不正操作が可能な、「トロイの木馬化」されたアプリが生成される。

 Kaspersky Labsではアンチウイルス製品を通じて、すでに9万2000以上のシステムでトロイの木馬化されたゲームアプリが実行されていることを確認しているという。

ゲームアプリを「トロイの木馬」化する汚染コンパイラの攻撃手口

 Kaspersky Labsでは断定していないが、違和感なく不正なライブラリが組み込まれていることから、何らかの方法でMicrosoft Visual Studioが不正なものに置き換えられ、コンパイル時の汚染が実行された可能性が高いという。手法は定かではないが、XcodeGhostの件ではアップルのサーバーにアクセスしてXcodeのインストールパッケージ(約3GB)をダウンロードするよりも短時間で済むからと、中国の開発者が自国のファイル共有サーバーにアップロードされたものをダウンロードすることを選択、そのパッケージにXcodeGhostが紛れ込んでいた。ゲーム会社の件でも、非公式サーバーにアップロードされた(汚染された)Microsoft Visual Studioを不用意にダウンロードした可能性が疑われる。

開発環境の汚染を防ぐためにできることは?

 汚染コンパイラを使った攻撃について、ネガール・シャバブ氏は「それなりの技術力や知識が必須で、開発で使われるツール群が多様化していることを考えると、標的を絞って調査、細工して攻撃を実行する標的型攻撃で利用される可能性の方が高いと思う」と述べる。

 そもそも、コンパイラが汚染されていることに気付くことができるのか。「いつも使っているツールが悪意あるものに置き換わっているなんて、通常は疑わないだろう。しかも、紹介したケースでは正規の電子証明書で署名されており、ダウンロード時などにもセキュリティ製品で検知されない可能性がある」(ネガール・シャバブ氏)。

 「たとえば(コンパイラに)ディスアセンブラを使ってバイナリを検証したり、ツールのバージョン情報や証明書などを詳細にチェックすれば発見できるかもしれない。だが使用するツールの多さを考えたら、定期的にチェックを実行するなんて非現実的だ」。対策の難しさをネガール・シャバブ氏は指摘する。

 開発者が自衛のためにできることはあるのだろうか。「正規サイト以外からツールをダウンロードするのは控えること、コンパイルしたアプリに対してライブラリやリンカーの変更など異変の有無をチェックすること、開発環境全体に対して定期的にウイルススキャンをかけること」。開発ライフサイクルにうまくセキュリティを取り入れて、健全な開発環境を保つために取り組むことが今後ますます大切になると、ヌーシン・シャバブ氏は述べた。

「ぱっと見が同じだからといって、その中身も同じとは限らない。“無条件の信頼”からくる思い込みのリスクを体現しようと思って、洋服もメイクもそっくりにした」(シャバブ姉妹)。もうお気づきかもしれないが、2人は双子の姉妹だ

■関連サイト

カテゴリートップへ