烏山 雄大,新井 一人,坂 恵理子



ルータやプリンタを狙う組み込み機器の攻撃手法

 次に,FX氏とkim0氏による「Attacking Networked Embedded Systems」の講演について紹介する。

 FX氏はhttp://www.phenoelit.de及びhttp://www.darklab.orgを拠点に活動しているハッカーである。以前は大手ネットワーク機器の会社に勤めていた。そこでネットワーク機器に興味を抱き,現在では米Cisco Systemsのルータに関して卓越した知識を持つ。

 その彼が,ネットワークに接続されたルータやネットワーク・プリンタにも侵入可能だと発表した。それが今回の講演である。FX氏は,ルータやネットワーク・プリンタをNetworked Embeded Systemと呼んでおり,この記事内でもこの表現を利用する。

表5 Embeded Systemを攻撃する際に調査する個所
表6 Embeded Systemでデザイン上の問題を抱えた三つの例
図3 FX氏が挙げたVPN Firewall Brickの問題。内部のファイアウォール管理マネジャ(LSMS管理サーバーのIPアドレスと,LSMS管理サーバーは異なるMACアドレスを組にした偽造ARPリプライ・パケットを外部から送付することで,LSMS管理サーバーファイアウォール間の通信を妨害できる
表7 米Hewlette-Packardのプリンタが抱える問題
 FX氏によると,「たとえEmbeded Systemでも,ぜい弱性を走査したり,実際に弱点を突く方法は一般のサーバー攻撃する場合と何ら変わりはない」と言う。基本的には,表5[拡大表示]に示した個所を丹念に調べていくことが重要だと言っている。そして,このようなデザイン上の問題として表6[拡大表示]の三つの例を挙げた。

代表的な三つの具体例

 VPN Firewall Brickの問題は,外部のインタフェースに対して内部のIPを偽ったARPリプライ・パケットを送付した場合,ARPエントリ・テーブルのMAC値をこの偽パケット記載の値に変更してしまうというものである。このぜい弱性を利用して,偽のARPリプライ・パケットを送り続ければ,内部ネットワークの通信を妨害することが可能になる(図3[拡大表示])。

 この問題はARPテーブルの保持と変更に関する設計に原因がある。ARPテーブルに記載されているエントリにタイムアウトが設定されていない,及び外部からのARPリプライ・パケットを受け付けるという二つのぜい弱性を突いて攻撃している。

 次の米Ascend Communicationsのルータの問題だが,これはUDPの9番ポート(discard)に対して特殊な形式のパケットを送付すると,ルータのIPアドレスやネットマスク,MACアドレス,シリアル・ナンバ,搭載デバイスの種類などのデータが含まれたパケットを返送してくる非公開のDiscoveryプロトコルが存在するという問題である。また,SNMPの書き込み権限を持つコミュニティ名でアクセスすれば,外部からIPアドレスやネットマスク,機器の名前を変更することができるようになる。

 最後の米Hewlette-Packard(HP)のプリンタに関しては,表7[拡大表示]のようにSNMPを利用してパスワードを取得したり,HTTP経由でアクセスする場合にアクセス制御を無効化できるようになっている点が設計上の問題だと指摘した。これは,HPがユーザの利便性を高めるために用意した機能である(一応,セキュリティを保つためにパスワードやアクセスを許可するIPを限定できるなどの設定は備えている)。

 表7の中に示したPJLは,TCPの9100番ポートを利用するHP独自の制御プロトコルである。プリンタのデフォルトの給紙サイズや,操作パネルのロックなどの各種設定を行うことができる。PJLに対するセキュリティとして認証機構を用意しているが,パスワードには最大16文字の英数字だけしか設定できない。仮に8文字のパスワードが設定されている場合でも,外部から1日もあれば総当たりでパスワードを推測(ブルートフォース攻撃)することができる。またSNMPが利用できる場面では,パスワードを取得可能であるため,著しくセキュリティ強度が落ちると報告した。

 PJLを利用すれば,DRAM及びフラッシュ・メモリに格納された(1)プリント・ジョブのスプール,(2)PCLマクロ・ファイル,(3)ファームウエア,(4)プリンタ上のWebサーバーコンテンツ,(5)プリンタ付属品の設定ファイルなど,非常に広い空間をアクセスできる。このため,PJLを悪用されるとプリンタのほぼ全域にアクセス可能となる。

 例えば,HPプリンタをPJLをプロトコル・ベースとしたファイル・サーバーして利用することも可能になる。FX氏は,ファイル・サーバーして利用可能にするツールとして「PFT」とWindowsベースの「Hijetter」をリリースしている(http://www.phenoelit.de/fr/tools.html)。

表8 一部のHPプリンタが搭載しているJava仮想マシンの抱える問題
 加えて,一部のHPプリンタはChaiVMというJava仮想マシンを搭載している(4100,4550,9000シリーズなど)。ChaiVMは非常に不安定で,表8[拡大表示]のような問題を確認したという。FX氏は,これらのぜい弱性を突くツールも作成している。「ChaiPortScan」(ぜい弱性が存在するHPプリンタを探すツール)や「ChaiCrack」(HPプリンタのcrypt関数をクラックするツール)である(http://www.phenoelit.de/fr/tools.html)。

組み込み機器が抱えるぜい弱性

表9 Embeded Systemで入力の正当性チェックを怠った四つ代表例
 FX氏とkim0氏は,この講演においてEmbedded Systemによく見られるぜい弱性として,(1)入力の妥当性チェックがない,(2)フォーマット・ストリングスに関するぜい弱性が多数存在する,(3)バッファ・オーバフローが発生する,(4)クロスサイト・スクリプティングぜい弱性を抱えている,の四つを挙げた。これらのぜい弱性の原因として,システムを安く上げるために搭載するメモリ量を減らすなどを指摘した。メモリ量を減らしたために,システム・リソースに限界が生じやすくなり,サニティ・チェック(入力が正当かどうかのチェック)を省略してしまうのだという。サニティ・チェックを怠った代表例として,表9[拡大表示]の四つを示した。

 一般にEmbeded Systemに対しては,(1)多目的OSに比べて攻撃に対して強い,(2)人間とのプログラム的なインタフェース(例えばシェル)が存在しないため攻撃用ソフトウエアが作成できない,(3)システムのアドレス・マッピングやオブジェクトの配置が不明のため攻撃用ソフトウエアの作成が非常に難しい,(4)攻撃されたとしてもシステムが止まるかリブートさせられる位,という見解を持っている人が多い。しかし,前述の例からも分かる通り,Embeded Systemとはいえ,一般のシステムと変わりはない。むしろ,コストの関係で削られた機能により危険性が増している面がある。例えば,ルータはネットワークの根幹を成す。このため,「ルータが止まる」ことは外部から見ればシステム全体が止まっていることと同義であり,大きな問題と言える。実際,Cisco Systemsのアドバイザリはルータに関するぜい弱性で最悪のものは,ルータ自身が停止(クラッシュ)することだとしている。

Ciscoルータの攻撃手法

 FX氏はCiscoルータが搭載する独自のオペレーティング・システムIOSに対しても攻撃可能だということを実証した。IOSはソースや細部の仕様まで公開していない。また,製品ごとに構成が微妙に異なることから,一般に統括的な攻撃手法を確立するのは難しいとされていた。今回の講演で,FX氏は「Cisco2500シリーズ」に対するものと,「Cisco1000/1600シリーズ」に対する二通りの攻撃方法について説明した。

図4 筆者が検証で使っているCisco1605R/IOS 12.0の場合
図5 米Cisco Systemsのルータが搭載するオペレーティング・システムIOSのメモリ管理機構
図6 図5のHOSTブロックの詳細な構成
図7 IOSの未使用メモリの管理方法
図8 IOSにバッファ・オーバフローを引き起こし攻撃する例
図9 FX氏が実演したIOSに対する攻撃の概要
表10 FX氏が挙げたネットワーク全体を守る四つの方法
 FX氏によると,これまでのぜい弱性情報からIOSではメモリの不正使用がひんぱんに起こり得るものだと判明し,これを利用する方法に着目したという。例えば,TFTPサーバーバッファ・オーバフローである。これは,IOS11.1-11.3が搭載されたCiscoルータの上で動いているTFTPサーバー対して,長いファイル名(700バイト以上)を与えるとルータが再起動するという問題である(http://online.securityfocus.com/bid/5328)。

 ここから入力変数に対する境界チェック(bounce check)に弱い個所があると類推できる。講演では,Cisco1000/1600シリーズに対してTFTPのぜい弱性を突いた攻撃用コードを公開した(http://www.phenoelit.de/fr/tools.htmlの「Ultima Ratio」)。

 では,Cisco1000/1600シリーズに対する攻撃方法の概要を説明しておこう。攻撃は,(1)機種とIOSのバージョンが同じなら動作しているプロセスがロードされるメモリ・アドレスは同じ,(2)使用中メモリと未使用メモリはポインタでつないだブロックで管理している,の二つの特徴を利用している。(1)の特徴は,例えばあるプロセスが0x20F1680番地以降にロードされたとすると,ルータを再起動しても,同じく0x20F1680番地以降にロードされることを示している。Ciscoルータを持っていれば「show memory processor allocating-process」コマンドを実行してみると分かる(図4[拡大表示])。 リブートしても,異なるマシンで試しても,同一機器,同一IOSの場合は毎回同じ値が表示される。この情報から,ターゲットとしているIOSのバージョンで,あるプロセスがメモリのどこに配置されるのかを正確に把握することが可能になる。これは攻撃用コードを作成する場合の大きな助けとなる。

 (2)の特徴はIOSのメモリ管理機構に潜むものだ。IOSのメモリ管理機構は,図5[拡大表示]のような構成になっている。ここでは現在参照されているブロックを「HOSTブロック」と呼ぶ。HOSTブロックは図6[拡大表示]のような構成になっており,このプロセスが利用しているプログラム・コード用のアドレスやデータを置くアドレス,及びプロセスが占有しているメモリのサイズなどを格納している。これら以外にも「NEXTポインタ」と「PREVポインタ」が存在し,それぞれほかのプロセス情報を管理しているブロックに接続する構造になっている。

 「MAGIC(0xAB1234CD)」及び「RED ZONE(0xFD0110DF)」はブロックの初めと終わりを表す識別子である。PIDはプロセスを一意に識別するための番号,PID下の三つはこのプロセスが使っているメモリ領域の先頭アドレスを示している。「NEXTポインタ」は次のメモリ管理ブロックが始まるアドレス,「PREVポインタ」は前のメモリ管理ブロックが始まるアドレスを示す。「ブロック・サイズ」は,このブロックが保持しているメモリ量を,MSB(Most Significant Bit:最上位ビット)はこのブロックが使用中かどうかを判定するフラグになっている。refは「0x01」で埋められている。FXはreference countではないかと考察しているが実際は定かではない。「データ」はプロセスが持っているデータが入っている。

 これらのうち,IOSが正当性のチェックを行っているのはMAGICとPREVポインタ,ブロック・サイズだけである。ほかの部分は書き換えることができる。

 未使用メモリに関しては,図7[拡大表示]のような構造を採る。「MAGIC2」が,未使用メモリを管理しているブロックを示すものである。「FREE NEXTポインタ」と「FREE PREVポインタ」は,それぞれ前後の未使用メモリ管理ブロックの先頭アドレスになっている。このブロックは,IOSによる正当性のチェックは行われないため,自由にアドレスをポイントすることができる。

 メモリ管理用のブロックは連続し,現在のHOSTブロックでバッファ・オーバフローを発生させた場合,次のNEXTブロックの内容を上書きすることが可能になる(図8[拡大表示])。具体的には,HOSTブロックでバッファ・オーバフローを引き起こし,攻撃用コードとともに偽の管理ブロック(Fakeブロック)を送り込む。そして,Fakeブロックで実行されるコード・アドレスを攻撃用コードのアドレスとし,攻撃用コードを実行させる。

 今回,FX氏が用意した検証用コードの場合は,ルータの設定(show running-configなどで表示されるもの)を同時に送り込み,ルータが読み込む設定ファイルを攻撃者が意図するものに変えるというものである(図9[拡大表示])。実際の攻撃コードでは,メモリへの書き込みを抑制している場合に備えてメモリ保護機能を停止させたり,攻撃者が送り込んだ設定ファイルをメモリに書き込む際に生じる遅延を考慮するなどの工夫がなされていた(この部分に関しては省略する)。

ネットワーク機器はすべてがぜい弱

 実際には,この検証用コードは対象のCiscoルータ上でTFTPサービスが動作している必要があり,実際に攻撃に利用するのは難しいと考えられる(通常TFTPサービスは停止させているものがほとんどだろう)。しかし,ルータをはじめとするEmbeded Systemが十分に攻撃対象になることは実証された。通常,ルータはファイアウォールよりも外側に設置されることが多い。今回の講演を教訓に,Embeded Systemセキュリティにより一層注意しなければならない。

 FX氏は,Embeded Systemも含めネットワーク全体を守る方法として表10[拡大表示]の四つを挙げている。これらは,これまでに何回も耳にした教訓だと思う。しかし,実際にはすべての項目が守られいることはまれで,そこに隙が生まれる。FX氏は「ネットワークにつながるすべてのデバイスはぜい弱だということを意識し,この四つの項目を十分に意識することが,セキュリティを守る最善の方法」という言葉で講演を締めくくった。

烏山 雄大,新井 一人,坂 恵理子
筆者は三井物産のセキュリティ・チームGTI PROJECT CENTERに勤務。セキュリティ・コンサルタントとして企業のシステム構築を支援している。ここ数年,毎年BlackHat Briefings USAに参加している。