2016年9月以降に発生した複数の大規模なDDoS攻撃。本稿ではその攻撃に用いられたとされるマルウェア「Mirai」のソースコードを読み解き、対策法を紹介します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Miraiは、2016年9月13日夜、米国のセキュリティジャーナリストBrian Krebs氏のWebサイト「Krebs on Security」に対して行われた大規模なDDoS攻撃に使用されたとして話題になったボットネットです(関連記事)。Miraiは主にWebカメラやルーター、デジタルビデオレコーダーなどのIoTデバイスを踏み台としてDDoS攻撃を仕掛けます。
攻撃を受けた後に投稿されたKrebs氏のブログ記事によれば、同サイトを保護していたAkamaiが、ピーク時にはそれまでに経験した最大規模の攻撃の2倍近いトラフィックを観測したそうです。
また、2016年10月21日にTwitterやNetflixなどが利用するDNSサービスへ行われたDDoS攻撃でも、Miraiボットネットが利用されていたのではないかと推定されています(関連記事)。
そしてKrebs氏のサイトへの攻撃後、ハッカーフォーラム上でMiraiのソースコードが公開されたことも大きな話題となりました。このソースコードは後にGitHub上に転載され、誰でも中身を見ることができるようになっています(注1)。
ソースコードが公開された結果、Miraiボットネットはパスワードを工場出荷時のままにしてあるような脆弱(ぜいじゃく)なIoTデバイスを狙い、一般的な辞書攻撃を行って感染を広げていくものだということが分かりました。前述の攻撃時にも、何十万台ものデバイスからボットネットが構成されていたといわれています。
近年さまざまなIoTデバイスが家庭にも普及し、脆弱性のある状態のデバイスが増加したことがこのような大規模DDoS攻撃につながった可能性があります。また通常、これらのIoTデバイスが採用しているアーキテクチャは、個人向けのPCなどとは違い多種多様なのですが、MiraiはARM、ARM7、MIPS、PowerPC、SH4、SPARC、x86とさまざまなアーキテクチャに対応しており、そのことも大規模な感染拡大に一役買ったと考えられます。
本稿では、現在GitHub上に公開されているコードを基に、Miraiボットネットの動作を解説し、家庭や企業のデバイスがこのようなボットネットの一部にされてしまわないための自衛策を再考します。
公開されたMiraiボットネットのソースコードは、大まかに分けると以下の3つの部分で構成されています。
C&Cサーバ部分はGo言語で書かれており、ボットやダウンローダー部分、その他の暗号化ツールなどは主にC言語で書かれています。公開されているリポジトリのディレクトリ構成と照らし合わせると、Miraiの構成は以下のようになります(リスト1)。
├── ForumPost.md // ハッカーフォーラムでソースコードが公開されたときの投稿テキスト ├── ForumPost.txt ├── LICENSE.md ├── README.md ├── dlr // ボットの頒布にwgetやtftpが使えないときに利用するダウンローダー │ ├── build.sh │ ├── main.c │ └── release ├── loader // 3.ダウンローダー │ ├── bins │ ├── build.debug.sh │ ├── build.sh │ └── src ├── mirai //mirai本体 │ ├── bot // 2.ボット部分のコードがあるディレクトリ │ ├── build.sh │ ├── cnc // 1.C&Cサーバ部分のコードがあるディレクトリ │ ├── prompt.txt │ └── tools // 暗号化ツールなど └── scripts // 設定に必要なコマンドやスクリプトなど ├── cross-compile.sh ├── db.sql └── images
Miraiボットネットは、攻撃者が1.のC&Cサーバを通じて2.のボットにコマンドを送り、大量のボットが対象を攻撃するC&C中心型ボットネットです。また、並行してボットは感染できるデバイスがないかをスキャンして、見つけたデバイスの情報をレポートサーバに送り、3.のダウンローダーがボットプログラムを送り込むという動きをしています(図1)。
そこで、まずはC&CサーバのコードからMiraiの動きを読み解いていきます。
Copyright © ITmedia, Inc. All Rights Reserved.