鵜飼 裕司/米eEye Digital Security Senior Software Engineer

 本稿では,組み込みシステムのセキュリティ脆弱性に焦点を当てます。一口にセキュリティ脆弱性と言っても,その種類はさまざまです。「SQLインジェクション」「クロスサイト・スクリプティング」「バッファ・オーバーフロー」「ディレクトリ・トラバーサル」など,非常に多くの種類があり,それぞれ,システムに対する攻撃方法や攻撃難易度,影響などが異なります。

 そのなかで,システムに対して最も深刻な影響を与えるとされるものは「マシンコード実行型」に分類される脆弱性です。代表的なものとしては,「バッファ・オーバーフロー脆弱性」や「フォーマット・ストリング脆弱性」などが挙げられます。

 これらの攻撃は,いずれもターゲット・システム上で動作している特定プロセスの処理を“横取り”し,攻撃者が用意した「shell(egg)コード」と呼ばれるネイティブ・マシンコードを実行するというものです。理論的には,そのプロセスの動作権限で可能なことは何でもできます。例えば,シェルを起動するコードを実行させれば,攻撃者は対象プロセスの権限でリモートからシェルを利用できるようになります。つまり,ターゲット・システムを事実上乗っ取ることができます。

 マシンコード実行型の脆弱性に対する攻撃は,他の脆弱性に対する攻撃とは異なり,プラットフォームに依存します。ネイティブ・マシンコードで作成されたshellコードを実行させるためです。攻撃コードはCPUに依存します。加えてshellコードでは,OSが提供するサービス(システム・コールなど)を利用できないと事実上何もできませんので,攻撃コードはOSにも依存します。

 他の脆弱性に対する攻撃はプラットフォームに依存せず,その基本的な攻撃手法は組み込みシステムでもWindowsでもUNIXでも全く同じであり,脅威は比較的簡単に分析できます。しかし,組み込みシステムにおいてマシンコード実行型の脆弱性が攻略できるか否かについては,まだ十分に検証されていません。マシンコード実行型の脆弱性は,システムに対して最も深刻な影響を与えるものであり,かつ,影響範囲も広いので,その脅威を的確に分析することが重要な課題となります。

 とはいえ,容易な作業ではありません。マシンコード実行型の脆弱性を攻略する場合は,通常,システムの脆弱性を細かく解析する必要があるからです。対象がWindowsやUNIXなどのシステムの場合には,そのシステムにデバッガなどをインストールし,メモリーやレジスタの内容を確認しながら攻撃コードを作成することができます。

 ところが,組み込みシステムの場合にはそうはいきません。組み込みシステムは,一見したところ単なる“箱”であり,CRTもキーボードもなく,デバッガもインストールできません。ですので,開発用の特殊な環境がないと,攻撃コードの記述は不可能のように思えます。しかし実際には,いくつかの条件さえ満たせば,脆弱性の攻略は十分に可能です。本稿では,組み込み向けRISC CPUとして広く利用されているARMアーキテクチャのCPUが搭載された組み込み機器を例に,その脅威を分析したいと思います。(第3回へ続く)

 「Security Tech」は,米eEye Digital SecurityのSenior Software Engineerである鵜飼裕司氏による技術コラムです。鵜飼氏はMicrosoft製品のセキュリティ脆弱性(セキュリティ・ホール)を多数発見していることでも知られるセキュリティの専門家です。
 本コラムでは,あるテーマについて数回にわたって技術解説記事を執筆していただきます。1回目のテーマは,「組み込みシステムのセキュリティ」。全8回にわたって,組み込みシステムにおけるセキュリティ脆弱性の脅威の実際と,開発サイドに求められる組み込み機器独特の防衛策について解説していただきます。
 なお,鵜飼氏には「ITpro Watcher」も執筆していただいております。こちらのほうも,併せてお読みいただければ幸いです。(編集部より)