CTFにおける「バイナリ」とは

CTFでは「バイナリ解析」と呼ばれるジャンルの出題が一般的に行われています。殆ど全ての大会で出題されているといっても過言ではありません。

しかし、入門者の方でこの言葉を聞いてピン!と問題のイメージが浮かぶ人は少ないかもしれません。

それもそのはずです。一般的にITの世界でバイナリといえばまずは2進数のことを指し、これは、意味を広く捉えることが可能な言葉だからです。解釈の余地が大きい言葉、と言えるでしょう。

バイナリ?2進数の問題?ときて、10進数との変換問題かあ、とか思ったりするかもしれませんが、それは違います。そんな単純な計算問題はこの界隈では出題されることはありません。そういったことは学校で学びましょう。

CTFの世界では、バイナリという言葉がより狭い意味で用いられていることが多いです。

具体的には「実行可能形式のデータファイル」のことを指します。

身近な例を挙げると、WindowsにおけるEXEファイル。LinuxにおけるELFファイルなどがあります。その他実行して利用するアプリケーションファイルも、もちろんバイナリファイルの一種です。

CTFでは未知のバイナリファイルを渡されて、それがどういった動作を行うかを、様々なテクニックを用いて調査、把握するという問題が出題されるのです。これを「バイナリ解析」と呼んでいます。

現場でどう役に立つのか?

このバイナリ解析の技術がセキュリティの現場でどう役に立つのかといえば、マルウェア解析に役立てることができます。

CTFのバイナリ解析では、動的解析、静的解析といった手法を用いてバイナリを解析していきますが、マルウェア解析でも同様のアプローチの仕方で解析を行うのです。また、ソフトウェアの脆弱性調査にも役立つでしょう。セキュリティ技術者の道を歩んでいくにあたって、とても有用なスキルといえます。

このような力を育てるために、CTFでは問題としてポピュラーなものとなっているのです。とっつきにくいと思われる方も多いですが、是非とも身に着けておきたいスキルです。

バイナリ解析のイメージをもつ

バイナリ解析のステップ1は、「file」コマンドを用いることです。このコマンドを使うと、そのファイルがGIFファイルやJPEGファイル、はたまたビットマップファイル等等判別することができます。実行可能ファイルの場合は、その旨が返ってきます。

小さい一歩ですが、これで一つ解析できました。この後はどうしていくのでしょうか?

先ほど、「動的解析」と「静的解析」という言葉が出てきました。バイナリ解析のイメージを掴むために、これをもう少しかみ砕いて説明します。

動的解析は、実際に実行してみて解析する手法です。バイナリファイルは実行ファイルですから、実行してみるのが手っ取り早い方法ともいえます。しかし、ただ実行するだけでは答えは得られないため、様々な専用の解析ツールを用いながら実行することになります。

一方、静的解析は、コードを読む解析手法です。しかし実行ファイルはコンパイル済みであるため、ソースコードを得ることはできません。そのため「逆アセンブル」という処理を施して、アセンブリのコードを読むことになります。

アセンブリのコードにアレルギーを示す人も多いですが、読み方のコツさえ掴めば普通のソースコードを読み解くのと、そう大きい技術的な壁はありません。これは「慣れ」の問題が大きいでしょう。

どうでしょう?パズルを解いているように楽しむことはできないでしょうか?

パズルを解く感覚でバイナリ解析を行えば、きっと楽しく学習できるはずです。