内部からの脅威をコードの難読化で抑え込む(2/2 ページ)

» 2005年12月22日 16時43分 公開
[Mark-Fagerholm,japan.linux.com]
前のページへ 1|2       

難読化されていないコードからソースレベル情報が漏洩する

 危険にさらされているのは稼動中のシステムだけではない。企業のソースコードも同様である。ソースコードはデータの宝庫であり、データベース情報、肝心要のアルゴリズム、システム内部の仕組みなど、さまざまな情報を含んでいる。管理の行き届いている環境では、このソースコードにアクセスできるのを開発者だけとし、ユーザーにはバイナリファイルだけを渡して、実行させるのが普通である。

 しかし、.NetアセンブリやJavaアセンブリの性格からして、難読化していないバイナリを配布することは、実はソースコードを配布することとあまり変わらない。逆コンパイラなるものが幾らでも存在し、ほんの数秒で実行可能ファイルからソースコードを再生できるからである。それはまずいと思うなら、何らかの対策が必要となる。

 コードからどんな情報が読み取れるのだろうか。次の表をご覧いただきたい。ここには、バイナリファイルを逆コンパイラで処理した結果を示している。左側は難読化しておかなかった場合、右側はコードを強力に難読化しておいた場合の逆コンパイル結果である。

逆コンパイル出力――難読化されていないコード
string myConnectionString = "Initial Catalog=Northwind;" + "Data Source=localhost;" + "User ID=sa;" + "Password=password";
SqlConnection myConnection = new SqlConnection(myConnectionString);
string mySQL = "INSERT INTO Employees" + "(FirstName,LastName) VALUES " + "('J','Smith')";
SqlCommand myCommand = new SqlCommand(mySQL,myConnection);
myConnection.Open();
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();
逆コンパイル出力――難読化されているコード
This item appears to be obfuscated and can not be translated.
System.NotSupportedException: break at offset 00CE can not be translated into an expression.

 一見して、難読化されていないJavaプログラムや.Netプログラムからは手早く――いつもこれほど簡単とは限らないだろうが――重要情報が読み取れることが分かる。不心得の開発者なら、アプリケーションの内部や、それを支えているネットワークの仕組みまで読み解くことができる。そんな部内者が重要アプリケーションのソースコードを見つけたら、各種プロセスを隅々まで把握し、鍵となる情報がどこにあるかを突き止められるだろう。アプリケーションの弱点を探り出し、それを公開し、販売し、何かの秘密と交換するかもしれない。

 攻撃者がコードを理解すればするほど、セキュリティ上の弱点が発見される危険も大きくなる。だが、難読化を導入してコンテキストを不明にすれば、攻撃者に対する防御壁を1つ追加できる。

 コードの難読化はどう行うのだろうか。Web上で探せば、すぐに10を超える難読化アプリケーションが見つかる。.Netアプリケーションを専門に扱うもの、Javaに特化したもの、そのほかの言語用と、種類はさまざまだが、どれもクラスとメソッドの真の目的を隠すことは同じである。コンテキストを取り去って、ハッカーを混乱させ、迷わせる。

難読化ソリューション

 企業は、アプリケーションの詳細を見られる人間を、知る必要のある少数のグループに限らなければならない。エンドユーザーにすべてを公開してしまうことは、攻撃に利用できる情報を多数の人間に明かすことを意味する。たまたま難読化されていないコードが、復讐に燃える従業員の手に渡ったらどうなるだろう。アプリケーションを逆コンパイルし、そこに悪意ある変更を加え、その変更バージョンを実行する機会を虎視眈々と狙うことになる。極端な場合には、その従業員の隠密の行動によって重要な記録が削除され、不可欠のデータが改竄され、その他企業活動に支障を来すことさえないとは言えない。

 内部からの攻撃には、知的財産の窃盗も含まれる。企業はソフトウェアの開発に多大な投資をしていて、アプリケーションの一部は競争相手にとって大きな価値をもっている。また、不満のある従業員は、アプリケーションの詳細を漏えいすることで、セキュリティを弱体化させ、企業の評判を落とそうと考えるかもしれない。この種の攻撃に高度の技術はいらない。.NetアプリケーションやJavaアプリケーションを実行できるユーザーなら、プログラミングの経験などなくても、どこからかフリーの逆コンパイラを探してきて、ソースコードをながめ、ほかに漏らすことができる。

 のぞこうとする目から社内のソフトウェアを保護する上で、難読化は重要である。情報セキュリティを確保するための重層的システムでは、難読化層が鍵となるだろう。

マーク・ファーゲルホルム氏は、Preemptive Solutionsの財務担当役員(CFO)である。同社は難読化ソリューションとして、.Netアプリケーション用にDotfuscator、Javaアプリケーション用にDashOを製造している。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ