難読化による防御
.NET Frameworkが利便性のために実装している仕組みによって、逆コンパイルされやすくなること、そのことが知的財産やセキュリティ上の問題になることは当初から認識されていました。このため、.NET Frameworkが初めてリリースされた2002年の翌年から、Visual Studioのすべての製品版にはDotfuscatorという難読化ツールが提供されてきたのです (注2)。
聞き慣れないかもしれませんが、「難読化」は英語ではobfuscateと言い、「意図的に分かりにくくする」という意味を持つ古くからある言葉です。
Visual Studio .NET 2003以降。無償版など、一部のエディションを除きます。
解析の手掛かりになるのは、まずシンボル名です。図1では、ScoreRankという名前空間やProgramというクラス名、CalcRankという関数名がそのまま表示されています。クラスやメソッドに意味のある名前を付けてプログラミングしている限り、それらがプログラムを理解する大きな手掛かりとなります。Visual Studioに付属のDotfuscatorはこうしたシンボルを意味のない短い名前に置き換えます。
しかし、逆コンパイルでソースコードが得られれば、そこで.NET Frameworkの機能が呼び出されたり、「Login」や「パスワード」といった重要な文字列が見つかることで、センシティブな情報を扱う部分であることが突き止められてしまう恐れがあります。
製品版のDotfuscatorは、より実用的な難読化処理を施します。まず、生成された実行コードを論理的に同等な異なる制御フローに置き換えます。通常、コンパイラが生成しないコードになるため、逆コンパイルができなくなるか、できたとしても元の制御フローよりもわかりにくいものになります。上記のサンプルを製品版Dotfuscatorで難読化して、.NET Reflectorで逆コンパイルしたのが図2です。
ここでは、関数内部が逆コンパイルできず、「難読化されたため変換できない」という意味のコメントだけが表示されています。これにより、ソースコードレベルでの理解は難しくなります。
一方、このような難読化を施しても、IL(中間言語)への逆アセンブルを抑止することはできません。前述のような重要な文字列が使われている場所を見つけられてしまうかもしれません。そこで、製品版Dotfuscatorには、文字列の暗号化という機能があります。文字列を暗号化すれば、実行ファイルから元の文字列を検索して見つけだすことはできなくなります(注3)。
文字列が暗号化されたアセンブリは、実行時に文字列復号のためのオーバーヘッドが発生します。そのため、この機能はデフォルトでオフになっています。暗号化が必要なモジュールだけを選択して暗号化してください。
SilverlightやClickOnceへの対応
Dotfuscator製品版では、Silverlightアプリケーションも難読化できます。Silverlightアプリケーション(.xap)の実体は、.NETベースのアセンブリとマニフェストがZIP形式で圧縮されたファイルです。Silverlightでは、ユーザーインターフェイスの定義がXAML形式でリソースに埋め込まれていますが、DotfuscatorではXAPファイルを直接入力ソースとして使用することで、XAML側の定義も自動的に難読化されたアセンブリと一致した名称に加工されます。
アプリケーションの配布を容易にする.NET Frameworkの技術であるClickOnceアプリケーションも難読化できます。配置マニフェストファイル(.application)を指定し、そのプロパティとしてClickOnceを生成する際に使用した証明書ファイル(および証明書パスワード)を設定すれば、自動的に難読化して再署名されたClickOnceアプリケーションが生成されます。
この他、アセンブリの再署名対応、改ざんの検出など、.NET Frameworkの最新技術に対応した難読化を提供しています。
開発プロジェクトへの責任
逆コンパイルなどの解析技術は日々進歩しています。ソースコードを厳重に管理する必要を感じているなら、バイナリからの解析に無防備であってはなりません。「自分のソフトウェアが狙われることはない」という保証はどこにもありません。いったん問題が発生したら、後からこれを回復することは困難であり、結果として企業の信頼を揺るがすことにもなります。アプリケーションに対して十分な難読化を施すことによって、はじめて知的財産の保護や情報セキュリティに対する責任を果たせるのです。
.NETアプリケーション難読化ツール「Dotfuscator」の詳細や最新情報については、エージ―テックのWebサイトを参照してください。また、難読化を体験できる無料評価版をご用意しておりますので、ぜひお試しください。