Ghidra の公開
2019年3月5日、NSAは高機能なリバースエンジニアリングツールである Ghidra を公開しました。
Ghidra が何をするためのツールかをざっくり言うと、コンピューター上で実行される「実行ファイル」の中身のコード(コンピューターで処理されるコード)を読むためのツールです。
コンピュータープログラムは、
「人間が使うプログラミング言語で書かれたプログラム」
を
「コンパイル・リンク」
という、コンピューターが理解できるコードに変換する処理を行って作成します。リバース・エンジニアリングはこのような通常のソフトウェア作成過程の逆をたどって、人間がすぐには理解できない機械語で表現されている「実行ファイル」から一応人間が理解できるコードやプログラムに逆変換して解析することを言います。
ソフトウェアのリバースエンジニアリングツールとして、hex-rays IDA というツールがあります。業界標準のツールです。機能が限定されたfreeバージョンもありますが、通常は有償バージョンを使用します。
Ghidra は、この hex-rays IDA と同等の機能を持ちます。こんな高機能なリバースエンジニアリングツールがオープンソースで公開されたのです、NSA から。。。
実は Ghidra は Q の投稿に登場します。意味深ですね。。。
なぜ、NSA は Ghidra をオープンソースとして一般公開したのでしょうか?
和多志が Ghidra を最初に使ってみて、すごいな、と思ったことは、Ghidra が当たり前のようにデコンパイル(疑似的ではありますが通常ソフトウェア開発者が使用するプログラミング言語のような表現に変換することです)できることと、Windows実行ファイルの Rich Header を当たり前のように解析してくれるところでした。。。
Ghidra では Rich Header はこのように見えます。
Rich Header
Rich Header は、実は一般的にはあまり知られていません。マイクロソフトが文書化していない技術情報だからです。。。ある人たちがリバースエンジニアリングなどを行い、Rich Header というものがあることがわかるようになりました。
すみません、Rich Header は、Windows実行ファイルの中身の構造の話になるので、分かりづらいと思いますが、端的に言うと以下のようなものになります。
Rich Header は Windows用プログラムをコンパイルする時に、リンカ(リンクを行うプログラム)が収集した情報がエンコードされて格納されたデータの集合体。
Rich Header は DOS Header(プログラムの冒頭に位置する、MS-DOS時代から継承されているプログラムのパラメーターが定義される領域) と PE Header または NT Header(Windowsプログラムの構造に関するパラメーターなどが定義される領域) の間に配置される。
Rich Header はプログラムの動作には寄与しないため、Rich Header がどんな値であっても、また Rich Header があってもなくてもプログラムの動作には影響を及ぼさない。
「Rich Header がどんな値であっても、プログラムの動作には影響しない」
というところが、今回の話題の重要なポイントになります。つまり、Rich Header の改ざんは容易に行えるということを意味します。。。
The devil’s in the Rich header
これは2018年3月8日にロシアのセキュリテイベンダー カスペルスキーが公開した記事です。
概要を説明すると、
平昌2018冬季オリンピックの時期に発生した OlympicDestroyer と呼ばれるサイバー攻撃の背後にいる攻撃者は、北朝鮮サイバー攻撃グループである Lazarus に関連したマルウェアであるかのように見せるため、Lazarus関連のマルウェアが持つ Rich Header と同一の Rich Header を持つマルウェアを OlympicDestroyer のサイバー攻撃で使用した疑いが濃厚である。
といった内容になります。。。
この記事に記載されているマルウェアの Rich Header は、
で確認できました。
このサイトでハッシュ値(ファイルを一意に識別する目的で使用される、ファイルそのものから作成するIDのようなもの)が
3c0d740347b0362331c882c2dee96dbf
の情報を見てみると、Rich Header と実際のコードの間に不整合が生じているという評価が得られます。
manalyzer 便利ですね!
Rich Header の情報が実際の実行コードと矛盾している場合何が考えられるか?
普通にコンパイル・リンクされただけのプログラムであれば、通常 Rich Header とコードの間に不整合が生じるようなことは発生しないと思われますが、もし Rich Header の情報が実際の実行コードと矛盾している場合、考えられるのは、
パッキング(ソフトウェアのコードを実行可能な状態で圧縮することを言います)されたソフトウェアである。(正規プログラムの場合もマルウェアの場合も同様)
Rich Header が改ざんされている。
もし、Rich Header が改ざんされていた場合、別のプログラムと同種のプログラムであるかのように見せかけようとした、などの理由が考えられますが、Rich Header をマルウェアの解析に使用している組織があったとして、攻撃者がその組織を欺こうとした、と見ることもできます。
その場合は、攻撃者はマルウェアを解析している組織が Rich Header を見ていることを知っていたことになります。。。
ちなみに、Olympic Destroyer の場合は、ロシアの "Hades" と呼ばれるサイバー攻撃グループが背後にいると、カスペルスキーは分析しています。
以上のことから、**Rich Header の改ざんは、攻撃グループを偽ってサイバー攻撃を行う手段の一つになりうる**とは言えると思います。。。
本当は、Rich Header だけでなく、様々な手段で、サイバー攻撃が演出されているのではないか?という疑いを持つこともできますね。。。
DeepState とサイバー攻撃グループ
数年前から、和多志は
「(国家によるサイバー攻撃グループとみなされるものも含めて)ほとんどのサイバー攻撃グループは、DeepState に属している」
という仮説を自分の中で持つに至りました。
国家によるサイバー攻撃グループとされているものも、DeepState 全体で考えると「役割」に過ぎず、もしこの見方が妥当だとしたら、「国」という枠組み以上に重要な枠組みが、DeepState vs Anti-DeepState という枠組みではないか、と思います。
技術的な事実は重要ですが、「攻撃」に関する見解を得たいなら、それと同じくらい社会的な「背景」に関する情報が重要だと考えます。
非常にシンプルで仮想的な例ですが、例えば米国人がウクライナでロシア製の AK47 を使って乱射事件を起こしたとします。
技術的な事実だけを見たら、
「AK47 が使用されているからロシアの仕業だ」
という見解を持ちやすいと思いますが、実際には米国人が起こした事件だとすると、この場合は「ロシアの仕業」という見解とは別の見解も持つ必要が出てきます。
「サイバー攻撃」も同じで、「攻撃」に関する見解を得たいとするなら、技術的な側面同様に社会的な背景などは重要な情報になるはずです。そのような情報がなければ、偽旗かどうかの識別はできず、簡単にサイバー攻撃者に欺かれると思います。。。
というより、サイバー攻撃こそ、偽装が簡単に行える分野なので、技術的な情報も含めてあらゆる情報を駆使して分析しなければならないのだと個人的には思います。。。
Q が
「金の流れを追え」
とコメントされているのと同じで、結局、そのサイバー攻撃でどのような効果があって、利益を得たのは誰なのか?という視点が必ず必要だと思います。。。
過去のマルウェアの Rich Header を調べたら、何か発見があるかもしれません。。。
過去のマルウエアで、VirusTotal などに登録されているようなマルウェアの Rich Header を調べたら、何か発見があるかもしれないな、と思います。。。
もし、Rich Header を改ざんすることで、なりすまし攻撃をするという手段が過去にも使われていた場合、もう攻撃者がマルウェアを書き直すことはできませんから、いろいろと興味深い結果が得られるのではないか、と思います。。。
上記のようなことが考えられる中で、再度疑問を投げかけたいと思います。
なぜ、NSA は Ghidra をオープンソースとして一般公開したのでしょうか?
Q も Ghidra について投稿しています。。。