3月17日(土)に開催された、第10回北海道情報セキュリティ勉強会(せきゅぽろ)に参加しました。
今回のテーマは「バイナリ解析」。
昔、お仕事の関係でどうしても必要になった事があったなあ、くらいの前提知識での参加です。
OSS/Java/.NETプログラマが意識すべきバイナリ解析の素養
eagle0wl(いーぐるおうる)さんのお話。
リバースエンジニアリングの歴史(前半)
90% は知らない事でした。
途中、eagle0wlさんの
「この話、たぶん20代は全然わからないよね、ついていけないよね」
という言葉に
「もしかしたら、私は20代なのではないか、そうか、私は20代(ry」
と軽く錯覚するくらいに、初めて聞く事ばかりでした。
でも、リバースエンジニアリングがどのような動機から発展していったのか、現在どのような形になっているか、背景のわからない私でも置いてけぼりにされず、想像がつくように話してくれていたので全然飽きませんでした。
根本的なところで、まっちゃさんが紹介してくれた本「プログラマのための硬派なコンピュータ学―知っておきたいハードウェアとソフトウェアの基礎」は読んでおくと良いのかもなぁ。
ちなみに新人の時に一番最初に読んだのは「コンピュータはなぜ動くのか~知っておきたいハードウエア&ソフトウエアの基礎知識~」でした。ちょっとわかってきた今読み返すべき本かもしれないと、せきゅぽろに行った事で気がつきました。
リバースエンジニアリングの現状(後半)
スマートフォンアプリに使われている言語は、逆コンパイルがとても簡単。
つまり、何の対策もしないで公開しているアプリは、簡単に逆コンパイル・解析される可能性がある、ということ。
解析されて技術を盗まれるだけではなく、マルウェアを含めて再梱包して(配布元を偽って)配布されてしまう可能性もある。
実際、Androidマーケットに酷似した偽サイトで悪意あるパッケージをインストールさせようとしていた事例もあったようです。
対策は、完璧ではないにしろ「難読化」。
ただ、難読化は学術として研究はされてきたけれど、現実的に使用できるレベルになっているものが少ないとのこと(価格、パフォーマンス)。
実際に使っているアプリケーションで、難読化のためにどこまでパフォーマンスやコストを犠牲にできるか?
ものを作る側としてはトレードオフになり、悩ましいところ。
eagle0wlさんはそれに関する一つの提案として「プラットフォーマーが難読化を義務づけるべき」というお話をされていました。
難読化ツールを無償で配布する、マーケットで配布するときに難読化されていないアプリはアウトにする、コンパイラに難読化オプションをつける etc.
昔(前半の歴史をふまえて)と比べて、現在は規模や影響範囲が全然違う。
技術が発達してきたからこそ、守るべきものも考えなければいけないのだな。
普段、企業向けのアプリやサービスを作る事がほとんどだったので、逆コンパイルの危険性についてはそこまでシビアに考えた事がなかったです。ただ、最近はスマートフォンのアプリを作る機会もないとはいえない状況なので「自分が作るものは簡単に逆コンパイル・解析される可能性があるものなんだ」という事は頭に入れておこうと思いました。
ほんとうに時間があっという間だった!
おやつ
私がせきゅぽろに参加するようになったきっかけである(!)おやつタイム。
60人分のケーキがずらり並ぶ姿をみることができるのは、札幌ではせきゅぽろだけ!
懇親会
懇親会では、はじめまして!をたくさん言う事ができました。
「あれ?前に別の勉強会でもお会いしましたよね。」というつながりができていくのも嬉しいです。
また次回もよろしくお願いします!