ニュース
2003/06/30 00:00:00 更新

.NETの知られざる脅威
あなたの開発した.NETソフトウェアは、リバースエンジニアリングの脅威が存在する

「Windows Server 2003」と「VS.NET2003」のリリースによって、.NET Framework上で動作するソフトウェアは今後ますます増加していくだろう。だがそれらのソフトウェアは、「リバースエンジニアリング」という新たな脅威にさらされることになる。

ソフトウェア開発は.NETで便利に、だが……

 6月25日から、マイクロソフトの「Windows Server 2003」が出荷開始となった。.NET Frameworkを標準搭載したOSの登場である。さらに、その.NET Framework 1.1に対応した開発環境「Visual Studio .NET 2003」(VS .NET)もそろい、今後、ソフトウェアの実行環境は加速度的に.NET Framework上に移行するに違いない。

 .NET Framework上で実行されるソフトウェアは、CLR(Common Language Runtime)で解釈できるMSIL(Microsoft Intermediate Language)という中間言語の形で存在する。VS .NETなどの開発環境では、ソースコードをMSIL形式の中間言語にコンパイルすることで、どのプログラミング言語を使用しても同じクオリティのソフトウェアが作成できるほか、CLRさえ存在すれば、PDAなどを含むさまざまなプラットフォーム上で動作させられるメリットがある。さらに、CLRにより管理された安全なコードを実行するため、ソフトウェアのクラッシュなどにも強くなる。

 しかし、このようにWindowsソフトウェアがCLRという仮想マシン上で実行される中間言語で存在するようになれば、Javaで書かれたソフトウェア同様、リバースエンジニアリングに対する脅威にさらされやすくなる。CLR用のMSIL中間言語は、プログラミング言語やプラットフォームに依存しないシンプルなものにならざるを得ない。中間言語が複雑では実行時のオーバーヘッドが大きくなることからも、そのことは容易に理解できる。

 中間言語がシンプルであるということは、翻れば、逆アセンブルや逆コンパイルが比較的簡単にできてしまうということだ。さらには、逆コンパイルさえ必要なく、MSILをそのまま見ただけで、ソフトウェアで使用しているロジックが丸見えということにもなりかねない。

 実際には、実行ファイルとなるexeファイルはバイナリ形式として存在する。テキスト形式ではないため、中間言語のコードをそのまま見るというわけにはいかない。だが、誰でも入手可能な.NET Framework SDKに含まれているILDASMというツールを使えば、簡単にMSILのコードを見ることができてしまう。また、変数名やメソッド名などは、exeファイルをメモ帳で開けば簡単に見える。プログラミングの際に分かりやすいメソッド名などを使っていれば、どういう処理をしているかが容易に推察できてしまうのだ。

 社内向けにシステムを構築する場合であれば、ソフトウェアの使用者が社員に限られるため、たとえソフトウェアのロジックを見られたところで、さして問題にならないというケースもあるだろう。だが、パッケージソフトとなると話は変わってくる。たとえフリーウェアであっても、著作権はソフトウェアの作者が持っている。いままではソースコードを手に入れるか、多大な労力を払ってリバースエンジニアリングすることでしか見ることができなかった、著作権ひいては特許の源となるソフトウェアロジックが、中間言語の形ではたやすく見られる状況となってしまうのだ。つまり、ソフトウェアの知的財産の保護が難しくなる。

 また、ソフトウェアロジックを容易に見ることができるということは、システムのセキュリティにもかかわる。リバースエンジニアリングによって、クラッキングも容易になるという深刻な脅威と直結するからだ。リバースエンジニアリングを行ってシステムへの侵入方法を見つけ出すというのはよくある話だ。拠点間の接続に安価なインターネットを使用している場合は特に問題となりやすいだろう。

「Dotfuscator」でリバースエンジニアリングの脅威に対抗

 このようなリバースエンジニアリングに対抗する手段として有効なのが、変数やオブジェクトの名前を分かりにくくしたり、紛らわしくする難読化と呼ばれる手法だ。暗号化するという方法もあるが、この場合、ソフトウェアの実行時点で復号化してやる必要があり、オーバーヘッドが発生してしまう。

 難読化は人間の手によって行うことも可能だが、膨大な手間と時間を必要とする。そのため、専用のソフトウェアが存在する。「Crystal Reports」など、開発者向けのツールやソフトウェアコンポーネントを販売していることで知られるエージーテックが発売する、米PreEmptive Solutionsの「Dotfuscator」を利用すれば、難読化を容易に行うことができる。

 エージーテックは1984年4月の設立以来、組み込み用データベースソフト「Pervasive.SQL」などを中心に開発者向け製品を輸入、日本語化して販売を行っている。先ごろ就任のニュースが流れた代表取締役CEOは、業界では知らぬ人はいない、ボーランド前代表取締役社長の安藤由男氏だ。

 Dotfuscatorという名称は、英語のObfuscate――「困惑、混乱させる」の意――に由来している。ここからも察せられるとおり、この製品はリバースエンジニアリングを100%不可能にすることを目的にしたものではない。MSILのコードに、あらゆる手段の難読化を施すことで、リバースエンジニアリングにかかるコストを増大させ、試みるもののやる気を失わせるといったアプローチをとる。

 Dotfuscatorには、Community EditionとProfessional Editionの2種類がある。ライトバージョンとなるCommunity EditionはVS .NET2003にバンドルされており、VS .NETのインストール時に標準でインストールされる。Community Editionは、名前の変更による難読化、特に「 Overload Induction」という特許取得の技術を使った難読化の機能を持っている。だが、パッケージソフトウェアや高度なセキュリティを必要とする企業システムの場合には、別途販売されるProfessional Editionを利用したい。

 Professional Editionには、「制御フローの隠蔽」、「ユーザー文字列の暗号化」、「不要コードの除去」、「拡張 Overload Induction」といった機能が搭載されており、より高度なリバースエンジニアリング対策を講じることができる。VS .NET2003付属のCommunity EditionからProfessional Editionへのアップグレード特典も準備されており、エージーテックのWebサイトを通じて、通常価格29万円のところを24万円で手に入れることができる。

関連リンク
▼Interview:「難読化せずに.NET向けパッケージを出してはいけない」エージーテック鈴木氏
▼レビュー:「Dotfuscator」による難読化の威力を試してみる
▼Windows.NETチャンネル
関連リンク
▼エージーテック

[宮内さとる,ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.