BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Ghidra - Java 11上で動作するNSAのリバースエンジニアリングツール

Ghidra - Java 11上で動作するNSAのリバースエンジニアリングツール

原文(投稿日:2019/04/02)へのリンク

米国国家安全保障局(NSA)は先頃、リバースエンジニアリングツールGhidraのソースコードを公開した。これにより、サイバーセキュリティの専門家は、コードのないバイナリからでも、アプリケーションを逆アセンブルして調査することが可能になる。

GhidraはOpenJDK 11上で動作し、サーバや組み込みシステムを含む幅広いアーキテクチャに対して、マシンレベルのバイナリ解析をサポートする。セキュリティエンジニアは、マルウェアの動作解析や、あるいはアプリケーションに対するエクスプロイトを開発する目的で、リバースエンジニアリング作業を行う機会が多い。これらのスキルは、NSAのサイバーセキュリティ技術カリキュラムの一部として、ダコタ州立大学など米国内の多くの認定カレッジで教育されている。この知識は市場でもプレミアムを獲得しており、求人情報サイトIndeedのリストによると、平均的なソフトウェア技術者の給与が108,145ドルであるのに対して、平均的なアプリケーションセキュリティエンジニアの給与は140,090ドルとなっている。ソフトウェアセキュリティ産業に興味のある開発者は、SecureNinjaの"Careers In Cybersecurity"を調べてみるとよいだろう。

Ghidraの最初のリリースでは、GitHubプロファイル上ではなく、アプリケーション内のzipファイルに格納されたすべてのコードを公開している。RSAセキュリティカンファレンスでセキュリティ研究者向けにリリースされたセキュリティツールであるため、攻撃者はすかさず、Ghidraツール自体の中にあるリモートコード実行の脆弱性を指摘した。ローンチスクリプトがJavaリモートデバッグを有効にしてGhidraを起動するため、同じネットワーク上にあれば、デバッガをアタッチしてJVM内でコマンドの実行が可能になるというものだ。同じ機能を使えば、別の環境上で、Ghidraをリモートヘッドレス実行することも可能であると思われる。

Ghidraは自動逆コンパイルと制御フロー分析を備えることで、研究者によるプログラム実行の調査と注釈付けを可能にする。視覚化としてはJava Swingの他、jung graphレイアウトライブラリを使用する。研究者がメモリ分析を追跡することで、プログラム内で何が起きているのかを判断することが可能になる。その他に重要な機能は、バージョントラッキングと、注釈付きのバイナリ比較だ。この機能を使うことで、ソフトウェアパッチによる動作中のエクスプロイト修正の可否を分析するなど、プログラムを修正した方法について判断することが可能になる。あるいは、脆弱性の内容が未知であれば、研究者がパッチを逆アセンブルしてその内容を調査し、パッチされていない古いソフトウェアに対して動作するエクスプロイトを開発する場合もある。"Patch Tuesday"の翌日が"Exploit Wednesday"と呼ばれるように、Microsoftのようなメジャーベンダは、この解析結果を事前に受けている可能性が高い。さらにGhidraは、特定のバイナリや攻撃テクニックを理解する必要から、任意の機能をリバースエンジニアリング可能にするために、スクリプトエンジンと緊密に結合している。

"リバースエンジニアリングはプログラムの動作方法を明らかにし、文字列や格納されている値やアルゴリズムを抽出する上で有効な手段"であると、Include SecurityのErik Cabetas氏は説明する。同社は、アプリケーションセキュリティとリバースエンジニアリングを専門とする、アプリケーションセキュリティ企業である。"NSAはおそらく、セキュリティ上の弱点を明確化して、プログラムを深く理解し、自分たちのTailored Access Operationsチームが0デイ攻撃機能を開発する手段として、Ghidraを使用するのでしょう。" そのようなエクスプロイトの例が、2017年に公開されたDOUBLEPULSARだ。

Ghidraの将来的な目的は、研究者がこのツールセットに習熟することで、NSAにとって望ましいキャリアパイプラインを構築することにある。このような将来とそれに伴うメリットに加えて、Cabetas氏は、次のような点を指摘する。"NSAは、Ghidraのメンテナンスと開発を早急に立ち上げるために、機能追加やバグフィックスに資金を提供するべきです。他の官製プロジェクトはこのステップを疎かにしているため、オープンソースコミュニティのコントリビューションを十分に得ることができていません。Ghidraが米国の政府関連部門によるオープンソースリリースの中で、最高のプロファイルのひとつとして数えられるようになるためにも、プロジェクトが活発に生き続けることを願っています。" このようなオープンソースのメンテナンスに対する資金提供は、オープンソースプロジェクト維持のために、これまでに100万ドル以上の資金を提供したTideliftの目標とも通じるものがある。

Ghidraに類似するツールセットは他にもある。最も近いのは、有償ではIDA Pro、オープンソースならばRadare2だ。Ghidraのメリットは、IDA Proとは違って無償であること、Radare2とは違って機能的なGUIを備えていることである。

Ghidraのサポートするバイナリ形式は、x86_64、ARM/AARCH64、PA-RISC、Javaバイトコード、AndroidのDEX、その他多数である。Javaバイトコードは、非決定的なJIT処理後のマシンコードではなく、コンパイル後の中間形式を表現するもので、HotSpot Disassemblerと+PrintAssemblyフラグの使用を必要とする。Javaの最近の改善であるJEP-295の、事前コンパイル(AOT)によって生成されたネイティブバイナリは、解析することができない。

Michael Jenkin氏によるGhidraの使用方法のデモが、YouTubeで公開されている。短縮版がGhidra Ninjaでも参照可能だ。

この記事に星をつける

おすすめ度
スタイル

BT