Symantec Security Response Weblog
Downadup: Playing with Universal Plug and Play」より
January 28,2009 Posted by Eric Chien

注記:当記事は「W32.Downadup」ワーム特集連載の第6回である。

 「Downadup」ワームは複数の感染手段を使っており,その中に「MS08-067」のぜい弱性に対してリモート・プロシジャ・コール(RPC)を仕掛けて遠隔地から感染する手口がある。このぜい弱性を悪用し,感染元パソコンにコネクトバックするシェルコード(ぜい弱性を悪用する攻撃コードの中核部分)を送り込むのだ。この処理は「バックコネクト」と呼ぶ。バックコネクトは,ランダムに選ばれたHTTPポートを経由する。感染元パソコンは,受信したバックコネクト要求に対し,Downadupワーム・ファイル全体を提供するという対応をとる。一方,狙われたパソコン上で動いているシェルコードは,このファイルを受信して実行し,感染に至る。

[画像のクリックで拡大表示]

 ただし多くの家庭では,ルーターなどのゲートウエイ装置を介してインターネットに接続している。デフォルトでは,外部のパソコンから家庭内のパソコンにはじかに接続できない設定である。しかも,ネットワーク・アドレス変換(NAT)機能を使用している。このため,Downadupのシェルコードは,バックコネクトが行えず,感染処理を完了させることができない。

[画像のクリックで拡大表示]

 この問題を回避するため,Downadupは,(1)パソコンとインターネットの間にゲートウエイ装置があるかどうか判断する,(2)ゲートウエイ装置がある場合,同装置のインターネット側IPアドレス(外部に提示されるIPアドレス)を取得する,(3)ゲートウエイ装置の特定のポートに対する着信要求が,内部パソコンに引き渡されることを確認する,という三つの処理を実行する。これは「ポート・フォワーディング」と呼ばれる手法で(関連記事:ポート・フォワーディング),Downadupはユニバーサル・プラグ・アンド・プレイ(UPnP)プロトコルを使用して,これらの処理を実行する(関連記事:UPnPを狙う新たな攻撃、「Webアクセスだけでルーター設定変更の恐れ」)。

 UPnPプロトコルは,家庭内で使用されている一般的なゲートウエイ装置であれば大半が対応している。Downadupは,最初の処理の実行にUPnPの検出プロトコルを使う。同プロトコルはSSDP(simple service discovery protocol)をベースとしており,家庭内ネットワークの全パソコンからそのネットワークにあるゲートウエイ装置を検出できる。

 DownadupはSSDP処理の中でポート「1900/udp」上のマルチキャスト・アドレス「239.255.255.250」にM-SEARCH要求を送信し,応答を待つ。M-SEARCHは「サーチ・ターゲット(ST)」と呼ばれるヘッダーを要求するもので,Downadupが探している装置/サービスの種類を表す。これらの装置やサービスは「URI」で表現される。Downadupが検索するのは,以下の4種類の装置/サービスだ。

(1)urn:schemas-upnp-org:device:InternetGatewayDevice:1
(2)urn:schemas-upnp-org:service:WANIPConnection:1
(3)urn:schemas-upnp-org:service:WANPPPConnection:1
(4)upnp:rootdevice (represents all UPnP devices)

 以下に,M-SEARCH要求パケットの一例を示す。

[画像のクリックで拡大表示]

 ネットワーク上に該当する装置がある場合,この装置は,対応している装置やサービスに関する追加情報をURLで表記し,メッセージに入れて返す。装置が求めているものであると確認できたら,DownadupはUPnP GetStatusInfoコマンドを送信し,この装置が外部のWANインタフェースに接続されているかどうか調べる。これにより,感染元パソコンと外部ネットワークの間にゲートウエイ装置があることが分かり,最初の処理をクリアできる。

 次に,UPnP GetExternalIPAddressコマンドをこのゲートウエイ装置に送信し,外部のIPアドレスを取得することで,第2の条件である外部インタフェースのIPアドレス,つまりインターネット上の外部パソコンから見えるアドレスを入手する。

 最後にDownadupは,ゲートウエイ装置を介して内部の感染元パソコン上で動いている自分自身に向けて,着信要求をポート・フォワーディングする必要がある。このポート・フォワーディング要求では,複数のパラメータが必要となる。今回のケースと関連するのは,ポート・フォワーディングのエントリ,外部監視ポート,内部IPアドレス,転送先ポートである。

 ポート・フォワーディングのエントリは,感染元パソコンのボリューム・シリアル番号とコンピュータ名から生成される。これは独自形式で記述されることが多く,DownadupはGetGenericPortMappingEntryコマンドをゲートウエイ装置に送信し,既存のポートフォワーディングのエントリすべてを列挙し,生成したエントリと一致するものがあるかどうか確認する。エントリが一致すれば,以前Downadup自身が作成したものと想定し, UPnP DeletePortMappingコマンドを使って削除する。

 次に,AddPortMappingリクエストを使って新たなポート・フォワーディングのエントリを加える。Downadupは外部ポート用に80番ポートを使おうとし,内部ポートはランダムに作り出す。この設定変更に失敗したら,さらに2回試行する。ただし,ランダム生成する外部ポートの番号は,1024~10000番に限られる。

[画像のクリックで拡大表示]

 これですべてのプロセスが完了し,外部ネットワークから内部ネットワークへのバックコネクトが実行可能となる。この結果,Downadupは通常の家庭用パソコンに対して,感染処理を完結できる。

 聡明な読者であれば,今回の手順から,Downadupがゲートウエイ装置の背後からほかのパソコンに感染できると一方,それぞれ独立したゲートウエイの背後にあるパソコンは(そのゲートウエイがPRCおよびその他ネットワーク・トラフィックを破棄する限り)引き続き保護されることに気がついただろう。残念ながら,Downadupは別の複製手段を通じてプライベート・ネットワークに入り込むことができる。Downadupがプライベート・ネットワーク内で一度感染してしまえば,活発に活動してローカル・ネットワーク全体に広がる。

 上級ユーザーは,ゲートウエイ装置のマニュアルを調べ,UPnPを無効にしてゲートウエイのセキュリティに対する不要な変更を阻止できるかどうか確認しよう。


Copyrights (C) 2009 Symantec Corporation. All rights reserved.
本記事の内容は執筆時点のものであり,含まれている情報やリンクの正確性,完全性,妥当性について保証するものではありません。
◆この記事は,シマンテックの許可を得て,米国のセキュリティ・ラボの研究員が執筆するブログSecurity Response Weblogの記事を抜粋して日本語化したものです。オリジナルの記事は,「Downadup: Playing with Universal Plug and Play」でお読みいただけます。