前回に引き続き、NDSS'06のワークショップの内容についてお話したいと思います。

「dark spyrit」登場

 今回紹介するのは、ニュージーランド出身のBarnaby Jackによるプレゼンテーションです。皆にBarnsと呼ばれていますが、「dark spyrit」というハンドル名の方が分かりやすいかもしれません。世界屈指のセキュリティ研究者として多方面で活躍しており、eEyeではSenior Research Engineerとして様々なセキュリティ・テクノロジーの研究や脆弱性解析等に携わっています。また、様々な脆弱性の発見者でもあり、重要なものには「MS03-039のRPC DCOM脆弱性」などがあります。

 彼は、「Phrack 55」にてWindows NTシステムのバッファ・オーバーフロー攻略に関するペーパー(http://www.phrack.org/phrack/55/P55-15)を初めて世に出した人物としても知られています。私もちょうどそのころ、Windows 9xカーネルにおけるバッファ・オーバーフロー攻略についてリサーチを行っていましたので、Phrack 55で彼のペーパーを読んだ時は衝撃を受けました。また彼は、昨年の「BlackHat 2005 USA」にて、WindowsシステムにおけるRing 0でのバッファ・オーバーフロー攻略に関する発表を行っています。ペーパー(PDFファイル)がリリースされていますので、興味のある方は読んでみてください。

スレッド型リアルタイムOSが“標的”

 さて今回の彼の発表は、組み込みシステムの攻略に関する話題です。攻略といっても色々ありますが、この発表では、バッファ・オーバーフローに代表される「マシン・コードが実行可能な脆弱性」に対する攻略にフォーカスしています。

 組み込みシステムの攻略は、そのシステムのファームウエアの実装によりいくつかのアプローチがありますが、今回の彼の発表は、組み込みシステムで一般的に最も利用されているスレッド型リアルタイムOSで動作する組み込みシステムの攻略です。スレッド型リアルタイムOSとは、WindowsやUNIXのような汎用OSとは異なり、タスクごとにメモリー空間が独立していない組み込みシステム向けのOSです。μcLinuxやVxWorks、μITRON等がスレッド型リアルタイムOSの代表例であり、リアルタイム性が保証され、非常に軽量・コンパクトです。

 組み込みシステムでも最近はWindowsやLinux等が用いられる事がありますが、そのような組み込みシステムの攻略は既に確立されている方法で十分可能です。スレッド型リアルタイムOSが動作している組み込みシステムでは攻略方法が大きく異なり、まだまだ十分なリサーチがなされていません。

 私は、2001年から組み込みシステムの攻略に関するリサーチを進めており、2005年11月に開催された「PacSec.JP/Core03」にて、「JTAGエミュレータを利用したリアルタイムOSベースの組み込みシステムのExploit」というタイトルでプレゼンテーションを行いました。この発表では、メモリ・マネージメント機能が搭載されていないCPU(ARM7TDMI)とスレッド型リアルタイムOSで動作しているルーターにおける、バッファ・オーバーフロー攻撃についてお話しました。

ルーターの乗っ取りに成功

 私の発表では、バッファ・オーバーフローでコードを実行させ、ルーターが持っているイーサーネット・コントローラ等のハードウエアを直接制御し、パケット送信やLEDの制御などが可能である事を示しました。しかし、このような手法は攻撃コードの作成が難解かつ非常に手間がかかり、しかもコードがかなり長くなる上、場合によってはハードウエアのリバース・エンジニアリングが必要になってきます。従って、攻撃手法の脅威としては「実用的かどうかギリギリ」といったところでした。

 しかし、昨年末に彼がこのリサーチに加わり、攻撃の脅威は非常に大きなものである事が示されました。彼は、ファームウエアを解析する事により、ルーターのフラッシュに書き込まれている設定データを上書きする機能を攻撃コードから利用する事に成功しました。

 さらに、改造版のファームウエアのアップロードと実行に成功し、このルーター経由でダウンロードしたexeファイルをリアルタイムにバックドア・プログラムに書き換え、ルーターの内側にあるWindowsホストを完全に制御する事に成功しました。会場ではデモも行われ、組み込みシステムのバッファオーバーフロー脆弱性が現実の脅威として示されました。

 この組み込みシステムに存在する脆弱性の脅威と開発側が留意すべき注意点については、後日、IT Proの記事にて詳しく解説したいと思います。