OpenSSLのセキュリティ・ホールを悪用して,Apacheサーバーに感染を広げる「Slapper(Linux.Slapper.Worm.a)」ワームが話題になっている(関連記事)。ワームの出現が確認されたのは米国時間9月13日のこと。発見から既に10日以上経過していることから,その全容が明らかになりつつある。そこで今回のコラムではSlapperワームについて解説したい。

感染対象は限られる

 Slapperワームは,2002年7月末に発見された OpenSSL のセキュリティ・ホールを悪用して感染を拡大する。セキュリティ・ホールが存在するのは OpenSSL 0.9.6d 以前のバージョンである。0.9.6d 以前のOpenSSLでは,SSL ハンドシェイク時にバッファ・オーバーフローが発生する恐れがある(関連記事)。

 Slapperワームに感染する恐れがあるプラットフォームやApacheのバージョンは限られている。OpenSSL 0.9.6d以前のmod_ssl(ApacheでSSL通信可能にするモジュール)を使用していて,かつ下記に該当するプラットフォーム(ディストリビューション)で特定バージョンのApacheを使用している場合のみ感染する(Gentoo Linuxの場合にはApacheのバージョンによらない)。

Gentoo LinuxすべてのApache
RedHat LinuxApache 1.3.6/1.3.9/1.3.12/1.3.19/1.3.20/1.3.23
SuSE LinuxApache 1.3.12/1.3.17/1.3.19/1.3.20/1.3.23
Mandrake Linux Apache 1.3.14/1.3.19/1.3.20/1.3.23
Slackware LinuxApache 1.3.26
Debian LinuxApache 1.3.26

 感染対象とするプラットフォームとApacheのバージョンは,Slapperワームにハード・コーディングされている。そのため上記以外の環境での感染は報告されていない。ただし,ワームのソースはいくつかのサイトで公開されているので,上記以外の環境に感染する亜種が出現する可能性はある(亜種の可能性については後述する)。

Slapperの感染手順

 次に,Slapperの感染手順を簡単に説明する。あるマシンに感染しているSlapperは次の手順で別のマシンに感染を広げる。

(1)感染対象アドレスを決定する

 感染対象とするマシンのIPアドレスは,Slapperのソース・コードに記載されている。具体的には,IPアドレスの最初のオクテットを,以下の162 種類から1つ選択する。

3, 4, 6, 8, 9, 11~22,24~26,28~30,32~35,38,40,43~57,61~68,80,81,128~196,198~220,224~239

 2オクテット目はランダムに選択する。3および4オクテット目は,0から順に255まで1ずつ増やしていく。

(2)セキュリティ・ホールの有無を調べる

 感染対象とするマシンのIPアドレスを決めると,SlapperはHTTP1.1に準拠したリクエストを,対象マシンのTCP 80番ポートに対して送信する。このリクエストは,Webサーバーのログには以下のように記録される(本記事では,「\n」は改行,「\r」は復帰を示すメタ・キャラクタを示している)。

GET / HTTP/1.1\n\r\n\r

 このリクエストに対するWebサーバーからのレスポンスで,そのWebサーバー・マシンでセキュリティ・ホールがあるOpenSSL(mod_ssl)が稼働しているかどうかを確認する。

(3)SSLでExploitコードを送り込む

 確認できたら,ワーム本体であるExploitコードを含んだHTTPリクエストを,SSLが使用するポート(TCP 443番)へ送信する。

(4)対象マシン上でSlapperが動作する

 ExploitコードはOpenSSLのセキュリティ・ホールを悪用して,感染対象マシン上で動作を開始する。まず,自分自身を uuencode し,/tmp/.uubugtraq としてコピーする。コピーされたコードは uudecode され,/tmp/.bugtraq.c として展開される。

 展開されたソース・コード(.bugtraq.c)は,そのマシンのデフォルトのCコンパイラ(gcc)でコンパイルおよびビルドされ,/tmp/.bugtraq という実行ファイルとなる。この実行ファイルがSlapperワームである。Slapperは起動され,再度別のマシンに感染を広げようと試みる。

(5)ワーム同士でP2Pネットワークを形成する

 対象マシン上で動作し始めたSlapperワームは,感染を広げるだけではなく,他のマシンに感染しているワームとの通信を試みる。通信にはUDP 2002番ポートを使用する。通信に成功すると,そのワームは,ワーム同士で形成されたPeer-to-Peer(P2P)ネットワークの一部となる。

 このネットワークを使用すれば,それぞれのワームに任意のUNIXコマンドを実行させたり,特定のパケットを同時に特定アドレスに対して送信したりすることが可能となる。つまり,「TCP フラッド」,「UDP フラッド」,「DNS フラッド」といったDDoS攻撃が可能となる。

“高機能”なSlapper

 Slapperの感染報告は,現時点(9月24日)では1万1000件以上にのぼっている。これを多いと見るか少ないと見るかは人それぞれだが,感染数自体は2001年に猛威を振るった「Code Red」に比べると少ない。アンチウイルス・ベンダー各社が設定している,Slapperワームの“危険度”も,それほど高くない。

 しかし,潜在的な危険性は高いと考えられる。その第一の理由が,Slapperが“高機能”なためだ。前述したように,Slapperワームはワーム同士でP2Pネットワークを形成する機能を持つ。あるマシンに感染したワームは,他のすべてのワームに命令を発することができる。ワーム同士が協調してすべての感染マシンを操れるのだ。その結果,DDoS攻撃に限らず,感染マシンを踏み台にしたさまざまな攻撃が可能となる。

 加えて,SlapperはExploitコードを別のマシンに送り込む際にはSSLを使用する。SSLによる通信は暗号化されている。そのため,ネットワーク型のIDS(侵入検知システム)で検知したり,ファイアウオールでフィルタリングしたりすることが困難である。

既に出現している亜種ワーム

 さらに危惧(きぐ)されるのが,亜種の出現である。というのも,Slapperワーム自身が,2002年7月に発見された「Scalper」ワームによく似ており,その亜種といっても過言ではないからだ(Scalperは,2002年6月に見つかったApacheのセキュリティ・ホールを悪用するワーム)。ScalperとSlapperは,どちらもP2Pネットワークを形成する機能を持つ。また,感染対象マシンのIPアドレスの決定方法や感染手順なども酷似している。

 ScalperからSlapperが作られたのと同様に,SlapperからSlapperの亜種が作成されることは容易に予想できる。実際,既に2種類の亜種が確認されている。

  • Linux/Slapper.worm.b(9月22日に米国で発見)
    • P2PネットワークにUDP 4156番を使用する
    • 下記のファイルを作成する
      /tmp/.unlock.c
      /tmp/.update.c
      /tmp/.unlock.uu
      /tmp/httpd
    • 見つかりにくいよう,ワームのプロセス(プログラム)名を「httpd」にしている

  • Linux/Slapper.worm.c(9月23日に米国で発見)
    • P2PネットワークにUDP 1978番を使用する
    • 下記のファイルを作成する
      /tmp/.cinik.c
      /tmp/.cinik.go
      /tmp/.cinik.uu
      /tmp/.cinik

OpenSSL のバージョン・アップが第一の対策

 Slapperワーム対策としては,OpenSSLをバージョン・アップすることが第一である。OpenSSLの最新バージョンは0.9.6g,OpenSSL 0.9.6gに含まれるmod_sslのバージョンは2.8.10-1.3.26である。併せて,Apacheも最新バージョン1.3.26にしておきたい。

 オリジナルのSlapper(Linux.Slapper.Worm.a)に現在感染しているかどうかは,「ps -aef」コマンドで調べられる。現在動作しているプロセスの中に「.bugtraq」が存在すれば,Slapperワームに感染していることになる。

 その場合には,まずは「kill」コマンドで.bugtraqプロセスを停止させる。その後,侵入された“証拠”を保存する(関連記事)。

 そして,(1)ディスクの消去,(2)OS の再インストール,(3)パッチの適用とシステムの要塞(ようさい)化,(4)最新版ソフトウエアの導入,(5)バックアップ・データから,安全とみなせるデータの復旧——といった手順を踏むことになる。

 なお,Slapperが作成するファイル「/tmp/.bugtraq.c」,「/tmp/.bugtraq」,「/tmp/.uubugtraq」の有無を調べることでも,感染しているかどうかを確認できる。

 Linux/Slapper.worm.bおよびLinux/Slapper.worm.cに感染しているかどうかの確認方法や復旧方法も,オリジナルのSlapperの場合と基本的には同じである。ただし,ワームが作成するファイルやP2Pネットワークに使用するポート番号が異なるので注意する必要がある。

 また,Linux/Slapper.worm.bのように,既存のプロセス名と同じプロセス名にする場合がある。psコマンドだけではなく,netstatコマンドでも確認したい。具体的には,「netstat -p」コマンドで, LISTEN 状態のポート番号とその PID/プログラム名を確認する。ワームが使用するポート番号が LISTEN 状態になっている場合には,それに対応するプロセスをkill コマンドで停止する。

すべてのプラットフォームで対応を

 冒頭で紹介したように,Slapperワームが感染するプラットフォームは限定されている。しかし,今後別のプラットフォームに感染する亜種が出現する可能性は十分にある。他のプラットフォームでも,OpenSSLやApacheをはじめとするソフトウエアを最新バージョンにして,セキュリティ・ホールがない状態を維持しなければならない。そのためには,最新のセキュリティ情報を絶えずウオッチすることも必要だ。

 最後に,Slapperワームに関する情報へのリンクをまとめておくので,参考にしていただきたい。


石山和行 (ISHIYAMA Kazuyuki) kazuyuki.ishiyama@lac.co.jp
株式会社ラック セキュアネットサービス事業本部


 IT Proセキュリティ・サイトが提供する「今週のSecurity Check [一般編]」は,その週に起きたUNIX関連およびセキュリティ全般のニュースや動向をまとめた週刊コラムです。セキュリティ・ベンダーである「株式会社ラック」のスタッフの方を執筆陣に迎え,専門家の立場から解説していただきます。