機械学習はバイナリ解析を助ける
機械学習を使ってソフトウェアのバイナリから情報を回収することで、理解しやすくてアクセスしやすくなるよ。
― 1 分で読む
目次
ソフトウェアを扱うとき、特に古いプログラムやクローズドソースのやつだと、エンジニアはしばしばコンパイルされたバージョンにしかアクセスできないんだ。このコンパイルされたバージョン、バイナリって呼ばれてるけど、ソースコードにある変数の型みたいな明確な情報がないから分析するのが難しい。これが原因で、開発者やセキュリティ研究者がソフトウェアの動きや問題を見つけるのが大変なんだよね。
このバイナリと戦うために、研究者たちは機械学習の技術を使い始めた。これらの技術は、元のソースコードに通常含まれている欠けてる情報を予測する手助けをしてくれるから、バイナリをもっと理解しやすくしてくれるんだ。
バイナリの複雑な性質
バイナリは、開発者が書くソースコードとは違うんだ。ソースコードは構造があって、変数や関数、型に明確な意味がある。一方、バイナリは機械語でできていて、読み解くのが難しいんだ。この複雑さは、デバッグ情報が最終製品から性能やセキュリティの理由でしばしば削除されるせいでもある。
バイナリを理解するために、エンジニアは逆コンパイラを使う。逆コンパイラは、バイナリを元のソースコードに似た形に戻そうとするんだけど、この変換は完璧じゃなくて、特に変数名や型に関しては読みづらいことが多い。しばしば、逆コンパイラは「uVar1」みたいな一般的な名前を変数に付けて、意味のある情報を伝えられないんだ。
変数回復における機械学習の活用
バイナリの課題に直面して、研究者たちは機械学習を使って欠けてる情報を回復しようとしている。これらのモデルは、逆コンパイルされたコードのパターンを分析して、変数の名前や型がどんなものであるべきかを文脈に基づいて予測するように学習するんだ。
その中の一つがDIRTYっていうモデルで、Transformersっていう機械学習フレームワークを使ってる。DIRTYは、逆コンパイラが生成した出力の変数の名前と型を予測するように設計されてるんだ。逆コンパイルされたコードを見て、変数がどう使われているかを理解することで、DIRTYはその変数が何を表しているかを推測できるんだ。
新しいツールで前の作業を発展させる
以前の取り組みはHex-Raysっていう特定の逆コンパイラに焦点を当ててた。Hex-Raysは効果的なんだけど、高価で、すべての研究者が使えるわけじゃないんだ。そこで、ある研究がDIRTYモデルをGhidraっていう別の逆コンパイラを使って再トレーニングした。Ghidraはオープンソースのツールで、誰でも使えるから、多くの研究者にとってアクセスしやすいオプションなんだ。
以前の研究ではGhidraが特定の情報タイプに苦しんでるって示唆されてたけど、今回の研究ではそれでも役立つ結果を出せることがわかった。Ghidraでうまく機能する部分に焦点を当てることで、研究者たちはDIRTYを新しい設定にうまく適応させることができたんだ。
データ収集と処理
修正されたDIRTYモデルをトレーニングするための新しいデータセットを作るのが重要だった。研究者たちは、さまざまな公開リポジトリからCとC++のコードを集め、バイナリにデバッグ情報が含まれていることを確認した。このデバッグ情報は、変数がどうあるべきかの参照として重要なんだ。
研究者たちはGhidraを使ってこれらのバイナリを処理した。エイリアシング問題にも直面したけど、これは一つの情報が複数の方法で表現されることがあるから、分析を複雑にするんだ。それでも、彼らは効果的にモデルをトレーニングできる包括的なデータセットを作成できたよ。
変数のエイリアシングに対処する
この研究の大きな課題の一つは、変数のエイリアシングに取り組むことだった。この問題は、一つの情報が複数の方法で表されるときに起こる。たとえば、Ghidraがコード内の特定の変数に特定の特徴があるはずだと認識するけど、一般的な名前を付けてしまうと、混乱を招くんだよね。
この問題に対処するために、研究者たちはこれらの問題のある変数をデータセットから除外することを選ばなかった。代わりに、分析中に情報が失われたことを示すために「消失」タイプとしてマークしたんだ。これによって、モデルは利用可能な全データから学習できつつ、情報が失われた場所を追跡できるようにしたんだ。
トレーニングと結果
データセットの準備が整ったら、研究者たちはGhidraの出力を使ってDIRTYモデルをトレーニングした。この新しいモデルのパフォーマンスを、Hex-Raysデータでトレーニングされた元のDIRTYモデルと比較したんだ。研究者たちは、新しいGhidraベースのモデルが変数名や型を予測する際に同じレベルの精度を達成できるかどうかを確認したかった。
結果は、GhidraモデルがHex-Raysモデルと同様に機能することを示した。モデル全体の精度は比較可能だったけど、Ghidraバージョンはデバッグ情報がない変数の型を予測する際により良いパフォーマンスを発揮したよ。
これは重要な結果で、開発された機械学習技術が一つの逆コンパイラだけに留まらないことを示してる。これらの技術をGhidraに適用することで、研究者たちはバイナリの出所が違っても貴重な洞察を得られることを示したんだ。
パフォーマンスに関する観察
パフォーマンスの指標から、Ghidraモデルは特にデバッグ情報のない変数の型を予測するのに効果的だということがわかった。これは、どの逆コンパイラを使っても、これらの変数の挙動に共通のパターンがある可能性を示唆してる。
デバッグ情報が利用可能な変数を見てみると、両方のモデルの結果はほぼ同じだった。この発見は、異なるツール間でDIRTYアーキテクチャの効果をさらに強固にするものだね。
結論
この研究は、DIRTYモデルがGhidra逆コンパイラの出力に適用されたとき、変数名や型を成功裏に予測できることを示している。これはリバースエンジニアリングをより手軽にする重要なステップで、特に商用ツールのHex-Raysを使う手段がない人たちにとっては大事なんだ。
この分野での機械学習技術の適用可能性を広げることで、もっと多くの研究者がGhidraや他のオープンソースツールを使ってプロジェクトに取り組むことを期待している。この成果は学術研究に貢献するだけでなく、ソフトウェアやその内部の仕組みをより深く理解するためのコミュニティの努力もサポートするんだ。
要するに、バイナリから意味のある情報を機械学習を使って回復できる能力は、ソフトウェアの分析、維持、理解の方法を大幅に向上させる可能性があるすごい発展だってことだ。これらの技術を継続的に洗練させ、新しいツールを探ることの重要性が際立ってるね。
タイトル: Revisiting Deep Learning for Variable Type Recovery
概要: Compiled binary executables are often the only available artifact in reverse engineering, malware analysis, and software systems maintenance. Unfortunately, the lack of semantic information like variable types makes comprehending binaries difficult. In efforts to improve the comprehensibility of binaries, researchers have recently used machine learning techniques to predict semantic information contained in the original source code. Chen et al. implemented DIRTY, a Transformer-based Encoder-Decoder architecture capable of augmenting decompiled code with variable names and types by leveraging decompiler output tokens and variable size information. Chen et al. were able to demonstrate a substantial increase in name and type extraction accuracy on Hex-Rays decompiler outputs compared to existing static analysis and AI-based techniques. We extend the original DIRTY results by re-training the DIRTY model on a dataset produced by the open-source Ghidra decompiler. Although Chen et al. concluded that Ghidra was not a suitable decompiler candidate due to its difficulty in parsing and incorporating DWARF symbols during analysis, we demonstrate that straightforward parsing of variable data generated by Ghidra results in similar retyping performance. We hope this work inspires further interest and adoption of the Ghidra decompiler for use in research projects.
著者: Kevin Cao, Kevin Leach
最終更新: 2023-04-07 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2304.03854
ソースPDF: https://arxiv.org/pdf/2304.03854
ライセンス: https://creativecommons.org/licenses/by/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。