マイクロソフトの近藤和彦氏とエージーテックの岩沢宏美氏のセッションでは、最新のVisual Studio 2010の注目ポイントが紹介され、同時に.NETアプリケーションなどにおけるリバースエンジニアリングの危険性、その対策を紹介するものになった。ソースコードの解析を完全に阻止することはできない。しかしVisual Studio 2010にバンドルされているツールなどで難読化を行うことにより、そのハードルを簡単に上げることが可能だ。
.NETやクラウドなど最新テクノロジーに対応
本セッションではまずマイクロソフトの近藤和彦氏が登壇し、2010年4月リリースのVisual Studio 2010の新機能の中で、ユーザーから反響が大きいものが紹介された。まず、最新の.NETフレームワーク4に対応した。加えて過去の2.0以降の開発を可能にするマルチターゲット機能により、Visual Studio 2005からの過去の資産の保守も可能としている。
同時にWindows 7対応がポイントで、ジャンプリスト、サムネイル、マルチタッチなど、アプリケーションの操作性を向上させる機能を開発出来る。またリッチなWebアプリケーションを開発するため、Silverlightアプリケーションのデザイナー機能が強化されている。
クラウド対応では、Windows Azureアプリケーション開発、高度なデバッグ、クラウド上のアプリケーションやデータの操作を可能にしている。ハードウェア面ではマルチコアの能力をフル活用するための機能が強化された。
一方、ツールの観点では、テスト管理機能が強化されている。たとえばテストの自動化ではロジック単体テストが注目されがちだが、UIとDBロジックの単体を含めた3層アーキテクチャをカバーする自動化に対応している。さらにHyper-Vを活用してテスト環境をイメージ化し、厳密なテスト環境の共有と問題の再現性を向上させている。その他、テストを計画し、実施、追跡する専用ツールが提供され、IDEの操作性もコードの検索性向上やマルチモニターへの対応などにより向上している。
.NETアセンブリに潜む危険性と難読化の有効性
近藤氏によるVisual Studio 2010のポイント解説に続き、エージーテックの岩沢宏美氏が「コード・セキュリティという面ではどうか」と問いかけながら登壇した。つまり逆コンパイラ対策への注意喚起だ。
たとえば.NETアプリケーションの場合、モジュールを.NET Reflectorというツールを使うとコンパイル前のソースコードを、かなりの確度で解析することが出来る。これは、.NETアセンブリが中間言語(MSIL)として生成されるためであり、それはJavaでも同様だ。
実際、近藤氏が行って見せたデモでは、クラス名、メソッド名などがほぼそのまま表れた。開発者はコードを読みやすくする目的で、OpenCustomerDBなど、目的を想像できる名前をつけることが一般的になっている。そのため、解析したソースから構造を推理することは容易だ。さらに読み込むと、DBなどにアクセスするためのパスワードを読み解くことができる場合もある。
そこで岩沢氏が推奨するのが難読化、つまり逆コンパイラの出力を分かり難いものに変換し、プログラムの解析に必要な労力を増やすことだ。その代表的な手法が「名前の変更」で、機能には一切影響しない形でクラス、メソッド、インタフェース、フィールド名などを意味のない名前に変えてしまう。たとえばGetPayroll(int key)をa(int a)という様に。
さらに「オーバーロード誘導」という、引数の型が異なる複数のメソッドをできるだけ同じ名前に変えてしまう手法もある。たとえばGetPayroll(int key)をa(int a)、MakeDeposit(float amt)をa(float a)というように。この結果、解読はほぼ不可能になる。
リバースエンジニアリング対抗ツールをバンドル
実はVisual Studio 2010には、難読化ツール「Dotfuscator」がバンドルされている。起動するには「ツール」メニューから選択すればいい。対象とするアセンブリを指定して条件を設定し、ビルドすれば、難読化を行うことが出来る。ここでパブリックのメソッドやクラスの名前を変えてしまうと外部からの呼び出しが不能になるので、自動的にそれらを対象から除外することも可能だ。
Dotfuscatorには難読化以外の機能も追加されており、改ざんを検出しての強制終了や、利用可能期間を限定するアプリケーションのライフサイクル管理を可能にするモジュールを埋め込むことができる。さらにエンドユーザーの利用状況のデータを取得することも可能だ。
さらに強固な難読化を行いたいのであれば、バンドルされているDotfuscator CE(簡易版)より機能豊富な有償のPRO版を検討してもいい。
例えば.NETアセンブリには、元のソースコードを厳密に反映する命令シーケンスがそのまま残っている。そこでPRO版を使えば、命令シーケンスのブロックを並べ替えたり、偽の制御フローを追加することにより逆コンパイラを混乱させる「制御フローの難読化」が可能になる。さらにパスワードなどを記述した文字列を暗号化することも可能だ。
最後にマイクロソフトの近藤氏が「Visual Studio 2010は、ビジネスの様々なアイデアや戦略の実現をサポートできるように進化している。同時にDotfuscatorのようなツールも活用し、より有益なアプリケーションを開発していただきたい」と締めくくり、合同によるセッションが終了した。
株式会社エージーテック
東京都千代田区神田錦町1-21-1 昭栄神田橋ビル3F
【営業部】03-3293-5230 / sales@agtech.co.jp