バイナリ解析実践の動機
・プログラムのセキュリティ機能に興味があったから。
・昔からコンピュータへの侵入の仕組みが気になっていたから。
・CTFに出題されるところだから。
・暇だったから。
バイナリ解析とは?
コンピュータのプログラム実行ファイルから、もとのソースコードを解析する作業を総括して呼びます。「逆行する工学」という意味を込めて、リバースエンジニアリングとも表現します。ただしい表現とは言えないかもですが、「逆プログラミング」といったところでしょうか。
商用のプログラムは、当然ながら利益を追求するためにプログラマーが良質なソフトを作り上げます。本来であれば、商用ソフトのソースコードは公開されません。みんなが真似すると利益が落ちるからです。
ですが商用で販売された実行ファイルそれ自体も、暗号化されていようが当然ながらソースコードが存在するわけです。ソースコードがなければソフトウェアにはなり得ません。一見むずかしそうですが、不可能ではありません。解析する技術が存在しています。
悪い人は技術を悪用してしまいます。海賊版のソフト的なものを売ってしまうでしょう。ですが善意であれば、ソフトの弱い部分を見つけて、修正する助けになるのです。
バッファオーバーフロー
プログラムの脆弱性のなかで、とりわけ有名なのが「バッファオーバーフロー」。
CやC++でのプログラミング経験がおありでしたら、「バッファオーバーフロー」という概念を聞いたことがあると思います。僕も昔聞いたときには「?」でした。C自体が難解であるのに、メモリやらポインタやらで混迷していました。
コンピュータが高性能といっても、データを一時的に格納するメモリには限界があります。本来規定されているデータ容量を上回るデータ入力があると、メモリの一部で「データ漏れ」を起こします。この「データ漏れ」から、本来規定されていないメモリのアドレスにあるコードを実行されてしまいます。実行されるコードにより、下手をしたらターミナルを乗っ取られて「侵入」を許すことになる。
すごく簡単にいえば、このような仕組みです。よく知られているので、バッファオーバーフローが起きないような仕組みが出来上がっています。
今後
・コンピュータへの侵入メカニズムについて、バイナリ解析で得た知識をもとに掘り下げたい。
・CTFの問題を解きながら、知識をアウトプットしたい。
参考文献
語郎