Silverlight をインストールするには、ここをクリックします*
Japan変更|サイトマップ
Visual Studio

見落とされがちなリバースエンジニアリングの脅威 知らずにソースコードをばら撒いていませんか?

Visual Studio の開発環境は .NET Framework の進化とともに飛躍的に進歩しており、.NET アプリケーションの開発はより柔軟で、生産性の高いものになっています。

しかし、その陰で常にリスクが存在することも忘れてはなりません。それは、リバース エンジニアリングによるソース コードの流出です。それを防ぐために、Visual Studio には、無償版の難読化ツールが予めバンドルされているそうですが、それは一体どのようなものなのでしょうか。ツールの提供元であるエージーテックの岩沢宏美氏に話を聞きました。

.NET Framework 環境ではリバース エンジニアリングへの配慮が必須

───
少し前から、ソフトウェアのリバース エンジニアリング、すなわち逆コンパイルや逆アセンブルによるソース コード資産の流出というトピックを耳にするようになりました。これは、どういった背景によるものなのでしょうか?
岩沢
リバース エンジニアリングの問題は、.NET や Java が普及するに従い、急速にクローズアップされるようになりました。一言で言えば、.NET や Java という最近のソフトウェアは一昔前のソフトウェアと比べて、リバース エンジニアリングしやすくなっているのです。 しかし、.NET などの開発・実行環境は、ソフトウェアのポータビリティや開発の生産性・柔軟性などの点で、飛躍的な進歩を遂げています。こうした数々のメリットと引き換えに、半ば必然的にリバース エンジニアリングのリスクが高まっているのです。
───
もう少し詳しく、教えていただけるでしょうか?
岩沢
はい。NET Framework で開発されたソフトウェアは、ソース コードをコンパイルすると、MSIL という中間言語に変換されます。この中間言語には柔軟性の高い.NET開発を実現するために、多くのメタデータが含まれています。プログラム情報の記述されたメタデータの存在が、逆コンパイラの精度の高い解析を助け、リバース エンジニアリングを容易にする一因となっているのです。

株式会社エージーテック
プロダクト&プランズ
プロダクトマネージャー
岩沢宏美 氏

───
実際に、.NET Framework アプリケーションの逆コンパイルは、簡単に行うことができるものなのでしょうか?
岩沢

リバース エンジニアリング対策をまったく施していないソフトウェアであれば、比較的簡単に逆コンパイルしてソース コードを生成することができます。極端な言い方をすれば、無防備にバイナリ コードを配布することはバイナリ コードにソース コードを添付して配布するようなものなのです。

.NET でソフトウェアを開発している多くの企業では恐らく、セキュリティや内部統制対応の一環として、ソース コードの管理を厳重に行っていると思います。しかし、リバース エンジニアリング対策を行っていなければ、その効果も半減してしまいます。また、知的財産の保護という観点からも、リバース エンジニアリングのリスクは決して無視できません。

難読化前のリバース エンジニアリングされたソース コード

右の図は.NET アプリケーションを.リバース エンジニアリングした結果である。ソース コードがそのまま復元されており、プログラムの解析を容易に行えることが分かる。

リバース エンジニアリングを阻止する「難読化」の技術

───
では、.NETソフトウェアのリバース エンジニアリングを防ぐ方法は、何かあるのでしょうか?
岩沢
結論から言いますと、逆コンパイルや逆アセンブルを完全に防ぐ方法はありません。しかし、現実問題として「ほぼ不可能」にすることはできます。そのために有効なのが、ソフトウェアの「難読化」という手法です。Visual Studio には、Dotfuscator という難読化ツールの無償版が予めバンドルされています。
───
難読化とは、一体どのような技術なのでしょうか?
岩沢
逆コンパイルの結果生成されるソース コードを、読みにくくする技術です。生成されたソース コードをほとんど解読できないものにすることで、実質的にリバース エンジニアリングの目的を阻止することができるのです。
───
具体的には、どのようにして逆コンパイルの出力結果を読みにくくするのでしょうか?
岩沢

難読化には大きく分けて 3 つの方法があります。

 1 つ目は、識別子の名前変更です。これは、プログラムの中に含まれるクラスやメソッド、パラメータなどの名前を、意味のない文字に自動的に変換するものです。例えば、“CalPayroll”のように、その名前から意味や機能が類推できるようなメソッド名を、すべて “a” のような意味のない名前に変換します。これで、ソース コードの可読性はかなり落ちることになります。

 2 つ目は、制御フローの難読化です。プログラムのロジックを保護するために、制御フローを、論理的にはオリジナルと等価でありながら逆コンパイルしにくいものに置き換えてしまうのです。

 3 つ目は、文字列の暗号化です。プログラムの中に静的な文字列データが含まれている場合、その内容がリバース エンジニアリングの格好の材料になることがありますが、これらを暗号化することでソース コードの解読を困難にするわけです。Visual Studio にバンドルされている Dotfuscator にはこのうち識別子の名前変更機能が備わっています。

───
なるほど。ところで、元の識別子の名前を意味のない文字に変換したとしても、時間をかけて解読すれば文字列同士の相関関係は類推できそうな気もするのですが。
岩沢

単純な「 1 対 1 」の名前変換であれば、そうかもしれません。しかし Dotfuscator では、「 1 対多」の名前変換を行います。オーバーロード誘導という機能を利用して、できる限り多くのメソッド名を同じ文字に変換するのです。

難読化後にリバース エンジニアリングされたソース コード

下の図は、Dotfuscator を使い実際に難読化した .NET アプリケーションをリバース エンジニアリングしたものである。先ほどの逆コンパイル結果と異なり、クラス、メソッドなどの識別子名が意味のない名前に変換され、復元されたソース コードの内容は分かり難いものとなっている。

オーバーロード誘導は、Dotfuscator の開発元である米 PreEmptive 社が特許を持つ技術で、ほかの難読化ツールとは明らかに一線を画す機能です。

このように識別子の名前変更を行うだけでも、興味本位によるリバース エンジニアリングに対するハードルを一気にあげることができます。

万全なセキュリティを確保したい場合には、制御フローの難読化、文字列の暗号化などさらに強固な難読化技術が備わった製品版の Dotfuscator もぜひお試しいただきたいと思います。

───
難読化がリバース エンジニアリング防止に有効なことは分かりましたが、元のソース コード内の識別子が変換されたり、文字列が暗号化されたりしてしまっては、ソース コードのメンテナンス性に問題が発生すると思うのですが……。
岩沢

元のソース コードには、一切影響は及びません。難読化の処理はすべて、コンパイル済みのアセンブリに対するポスト コンパイル処理として行われます。従って、従来の開発プロセスにほとんど手を加えることなく難読化を実装することができます。

難読化の仕組み

Visual Studio 2010 でさらに強化された Dotfuscator の機能

───
Visual Studio 2010 にバンドルされている Dotfuscator で新たに追加された機能は何かあるのでしょうか?
岩沢
今回、新たにインストル メンテーションと Runtime Intelligence(RI) という機能が追加されました。これにより、自分でソースコードを書かなくてもアプリケーション利用状況の追跡、バイナリの改ざん検出、アプリケーションの使用期限の管理 (「Self Life」) などの機能をアプリケーションに埋め込むことができるようになりました。
───
その機能は、どういった目的で利用されることを想定しているのでしょうか?
岩沢

手元を離れたアプリケーションの動作を把握したり、管理したりする場合を想定しています。アプリケーションが改ざんされていないか? アプリケーションのどの機能がよく利用されているのか? など、インストル メンテーション機能を使うとアプリケーションの実際の動作状況を把握する事ができます。

アプリケーションの動作状況については、別途、無償と有償の Runtime Intelligence Service ポータル サイトが用意されており、そちらで内容を確認できるようになっています。

この情報はその後の開発や戦略にも役立てることができます。また、これまでは開発者自身が実装していた、評価版や期間限定版などのアプリケーション ライフ サイクルの管理も、手軽に実装することができます。

今後、オフショア開発やソフトウェア製品の海外輸出という流れが進んでいけば、手元を離れたアプリケーションに対する意識はますます高まっていくと考えられます。

Dotfuscator は今後も進化を続ける .NET Framework のテクノロジーを積極的にサポートしながら、.NETアプリケーションを保護し、その価値を高めるためのソリューションを提供していきます。

これまで難読化ツールの存在自体を知らなかった方には、この機会に Visual Studio にバンドルされている無償版の Dotfuscator をぜひお試しいただき、難読化の作業自体が決して難解ではないことを体感していただきたいと思います。

Dotfuscator

製品版 Dotfuscator は(株)エージーテックの Web サイトからお申込みいただけます。

エージーテック

広告バナー

VisualStudio2010 日本語評価版 無償ダウンロード提供中



Microsoft