IT用語/Mirai

Miraiボット(2016-11-07、更新:2016-11-08)


警視庁(@Police)が出している「インターネット観測結果」の平成28年9月期レポートに

「Mirai」ボットに感染した IoT 機器が発信元と考えられるアクセスが増加

とあったので、Miraiボットについて調べてみました。

Google:Mirai ソースコードで探したら、GitHubからダウンロードできました*1
ちなみにファイルをZIPで一括ダウンロードすると、解凍時にバイナリファイルがウィルス扱いされましたのでご注意を。

@Policeのレポートにもあるように、このボットは端末に使われるデフォルトのパスワード(製品出荷時の設定)を狙ってきます。
この手の設定は必ず初期値から変更しましょう。安易なパスワードもNG*2

(例としてscanner.cより一部抜粋。勿論もっと沢山書いてあります) 
   add_auth_entry("\x43\x46\x4F\x4B\x4C", "\x52\x43\x51\x51\x55\x4D\x50\x46", 4);          // admin    password
   add_auth_entry("\x50\x4D\x4D\x56", "\x50\x4D\x4D\x56", 4);                              // root     root
   add_auth_entry("\x50\x4D\x4D\x56", "\x13\x10\x11\x16\x17", 4);                          // root     12345
   add_auth_entry("\x57\x51\x47\x50", "\x57\x51\x47\x50", 3);                              // user     user
   add_auth_entry("\x43\x46\x4F\x4B\x4C", "", 3);                                          // admin    (none)
   add_auth_entry("\x50\x4D\x4D\x56", "\x52\x43\x51\x51", 3);                              // root     pass

ソースコードからボットの大まかな流れというか、気になった点をメモしておきます。

  1. ボットが起動したら、まずは異常を検知することを阻止しておきます。
    watchdog が居たら ioctrlでオフにして 機能停止するとか(main.cより)。
  2. そしてボット自身の存在を隠します。
    自身のファイルを削除(unlink(args[0]))、prctl でプロセス名を変更する等(main.cより)。
  3. その上で外からの入り口を塞いで、感染した機器を復旧できなくするらしい。
    telnet、ssh、http用の入り口を /proc から探して kill してしまう(killer.cより)。
  4. そして、次の感染先を確保。
    ランダムなIPアドレスのポート23、2323へログインを試みる(scanner.cより)。
  5. あとの感染後の攻撃方法はまぁ、その、色々です。
    IP、UDP、TCP、DNS、HTTP等(attack_*.c がいっぱい)。

余談ですが、
ソース読んでて少し懐かしかった?のが、昔仕事で使ったことがある rawソケットです。
ふつうはTCP/UDP/IPとかの設定はOS(カーネル)の領分で、ユーザがプログラミングできる内容は限られます。
ここに直接メスを入れるときに使うのが rawソケットです。
例えば 送信元IPアドレスを自分のIP以外に変えたりもできます。
使うとすれば、ルーターやファイヤウォールの作成等の特別な用途でしょう。・・・あと、このMiraiボットも。

rawソケットやシステム変更等、この手の操作には通常はroot権限が必要です。
なので、

  • root 権限を奪われたら、基本アウト。
    →root 直接ログインの禁止やパスワード管理は重要
  • root 権限、つまり自分のサーバをインターネットに持っていれば*3、通信の偽装(前述の送信元の偽装)とか簡単にできてしまう。
    →認証や暗号化、DoS対策などが必須

まだざっとソースを追ってみただけなのですが、勉強になりました。
やっぱり攻撃する側の視点って為になりますね。


*1 2016-11-08 追記:これ書いた翌日に、@ITでソースコードが解説されてた・・・今日ソース読めばもっと楽できたのに
*2 安易なパスワードの愉快な例は こちら を参照。5秒。
*3 自分用のサーバが月々1000円以下で、お試し期間無料とかで手に入る時代です。全然ハードルは低いです。

  最終更新のRSS