2012/03/17は第10回北海道セキュリティ勉強会が開催されたので参加してきた。 今回のお題は「バイナリ解析」。eagle0wl(いーぐるおうる)さんにお話を聞いた。 OSS/Java/.NETプログラマが意識すべきバイナリ解析の素養 歴史 8ビットホビーパソコンの頃は、プログラムの配布はソースコードだった 16ビットコンピュータの頃から、汎用OSが登場。配布はコンパイル済みのバイナリ。 プロテクト技術が誕生 新しいメディアが登場するたびにコピーの技術→プロテクトの繰り返し 「プログラムのための硬派なコンピュータ学」 マルウェアの革新と変化 世界初のコンピュータウィルスBrainは、ソフトウェア会社が不正コピーへの抗議として作成された(世界初は別との説もある) リバースエンジニアは個人としては好奇心の探求が目的。企業としてはファイラー、アンチウィルスソフトなど 2000年頃からウィルス・マルウェアは「お金」が目的に変化した スマートフォンと難読化 Javaや.NETは逆コンパイラによる復元が容易 Javaはビジネスシーンにおいては、サーバーサイドに配置されるWebアプリが主なので、バイナリが出回ることは少ない スマートフォンにおいては、AndroidやWindows PhoneでJavaや.NETが採用されている Androidアプリを逆コンパイル→マルウェアを入れて再梱包が可能 対策の一つとして難読化 ただし現在あまり活用されていない(お金、パフォーマンス) 難読化ツールは悪意あるユーザーにも有効 リバースエンジニアリングの前向きな活用 マイナーなコンパイラの不具合対策 最悪な状況の引継ぎ(ソースコードが存在しないシステムなど) Homebrew 懇親会では講師のeagle0wlさんの隣に座ることができたので、ヨーヨーの話もいろいろ聞いた。 普段から.NETを使っているが、逆コンパイルについては「できる」事は知っていても、受託での業務アプリにおいてはあまり真剣には考えたことはなかった。特にクリティカルな部分は逆コンパイルされても安全な設計を心がけなければならないと再認識した。