Reaperボットネットに関する簡単なまとめ

f:id:nanashi0x:20171104194235p:plain

Reaperの概要

Reaperは、LinuxベースのOSをターゲットにしているIoTマルウェアである。

主にIoT端末等の埋め込み型システムの脆弱性をエクスプロイトするように作成されたマルウェアだ。

感染した端末はボット化され、Reaper Botnetとして吸収される。

昨年に大流行したMirai Botnetのソースコードを若干踏襲しているようだが、Miraiと違う点もあるようだ。

Miraiは管理者の認証情報をエクスプロイトとして使っていたが、ReaperはHTTPを管理するインターフェースをエクスプロイトする。

Reaperは、2013年から2017年の間に発見された様々な脆弱性をエクスプロイトする(現段階で10個)。

Reaperがエクスプロイトする全ての脆弱性はベンダによってパッチが提供されているのだが、全てのデバイスがアップデートを行なったとは言い切れない。

ある調査によれば、何百万者端末がアップデートを行なっておらず、Reaper感染の危機に晒されているということだ。

※既にNetLabからの詳細にReaperに関してまとめられた記事が出ているので、当記事の最後に補足しておく。

以下は、NetLabから発表された記事に細かな点を付け加えておく。

Reaperの実行について

Reaperが端末に侵入すると、管理者がデバイス状況を知るために必要な情報を参照できなくしてしまう。

例えば、"/var/log"に対して”rm -rf”コマンドを実行してしまう。

他にも、IOCTLをデーモンに送信して、Linuxのデーモンを無効化してしまう。

そうしてデバイスの初期化を行なった後に、Reaperは複数の子プロセスを立ち上げる。

その時に立ち上げる子プロセスを以下に示す。

初期化後に立ち上がるプロセス
  • C&Cサーバーに接続する
  • Statusレポートサーバーを起ち上げ、ポート23番(telnet)をListening状態にする
  • 未使用のサービスを開き、ポート48099番を開く
  • 脆弱な端末をスキャンし始める

この時起ち上げられる子プロセスは、 “6rtr2aur1qtrb”のようにランダムに生成された管理者名で実行される。

Stringの隠蔽

Reaperによって作成された子プロセスは、非常に効果的な方法でStringの隠蔽をする。

メインプロセスはStringの隠蔽をしないのだが、全ての子プロセスは非常にシンプルなスキームを使用する。

そのスキームとは1ビットのXOR(0x22)だ。

メインプロセスが、メモリのヒープ領域にテーブルを割り当て、XOR演算処理されたデータを注入する。

その後、子プロセスがヒープ領域に注入されたデータを参照したい時に、データがデコードされて、数値データ型として参照される。

データの使用が終わった際、データは再び原型に戻される。

以下に画像として示しておく。

f:id:nanashi0x:20171104195257p:plain

コマンド&コントロール

Reaperは、定期的に複数のC&Cサーバーと通信を行う。

以下に示すのは、Reaperが通信するサーバーだ。

Reaperが通信するサーバー
  • weruuoqweiur.com
  • e.hl852.com
  • e.ha859.com
  • 27.102.101.121

C&Cサーバーから送られるコントロールのメッセージとレスポンスは、平文で送られ、ビーコンは以下のフォーマットで送信される。

/rx/hx.php?mac=%s%s&type=%s&port=%s&ver=%s&act=%d

プロトコルは非常にシンプルである。

簡単に説明すると、以下の2つしか機能がない。

ポートスキャン

Reaperの子プロセスは、脆弱な端末をスキャンする。

Reaperは、IPアドレスをランダムに生成するのに加えて、9つのハードコードされたIPアドレスを使用する。(ハードコードされたIPアドレスを使用する理由は解明されていない。)

また、Reaperはこれらのウェルノウンポート番号を対象にスキャンを行う。

80, 81, 82, 83, 84, 88, 1080, 3000, 3749, 8001, 8060, 8080, 8081, 8090, 8443, 8880, 10000

実は、ランダムにスキャンされるように思われているポートは、バイト順交換された表記である。

例えば、8880は0x22b0で、バイト順交換されて0xb022となり、45090と変換される。(このようにバイト順交換される理由も明らかにされていない。)

Reaperの開発者が単純に「めんどくさかった」事から変更しなかったのか、それともシンタックスエラーを起こしているのかは不明である。

IoT端末の中には、ビッグエンディアンを用いる端末も存在する事から、ポート番号のバイト交換をする理由もそこから起因するのかもしれない。

ハードコードされたポート番号は以下になる。

f:id:nanashi0x:20171104195326p:plain

そして、ハードコードされたIPアドレスは以下の9つ。

IPアドレス
  • 217.155.58.226
  • 85.229.43.75
  • 213.185.228.42
  • 218.186.0.186
  • 103.56.233.78
  • 103.245.77.113
  • 116.58.254.40
  • 201.242.171.137
  • 36.85.177.3

エクスプロイト方法

Reaperのスキャンによって脆弱な端末を見つけると、今度はHTTPベースのペイロードを端末に送信する。

現段階では合計で10個の脆弱性が確認されており、それらの脆弱性は全てIoTデバイスにおけるHTTPベースのコントロール・インターフェースに関連している。

以下にReaperがエクスプロイトする脆弱性を示す。

認証無しで遠隔からコマンドを実行する脆弱性

対象: D-Link DIR-600とDIR-300

Exploit URI: POST /command.php HTTP/1.1

対象: D-Link DIR-645

POST /getcfg.php HTTP/1.1

対象: Vacron NVR

GET /board.cgi?cmd=cat%%20/etc/passwd HTTP/1.1

対象: D-Link 850Lワイヤレス・ルーター

POST /hedwig.cgi HTTP/1.1

対象: ReadyNAS Surveillance(ネットワークビデオレコーダー)

GET /upgrade_handle.php?cmd=writeuploaddir&uploaddir=%%27echo+nuuo+123456;%%27 HTTP/1.1

対象: Netgear DGN DSLモデムとルーター

GET /setup.cgi?next_file=netgear.cfg&todo=syscmd&curpath=/&currentsetting.htm=1cmd=echo+dgn+123456 HTTP/1.1

対象: AVTech IP cameras, DVRs and NVRs

GET /cgi-bin/user/Config.cgi?.cab&action=get&category=Account.* HTTP/1.1

カスタムGoAhead HTTP serverのエクスプロイト

対象: CVE-2017-8225を持つカメラ

GET /system.ini?loginuse&loginpas HTTP/1.1

インプット整合性機能の欠如による脆弱性のエクスプロイト

対象: Linksys E1500/E2500

POST /apply.cgi HTTP/1.1

HTTPサーバーヘッダのエクスプロイト

対象: サーバーヘッダ”JAWS/1.0” を使ってカスタムサーバーを動かすDVR

GET /shell?echo+jaws+123456;cat+/proc/cpuinfo HTTP/1.1

ハッシュのサンプル

md5:37798a42df6335cb632f9d8c8430daec

関連記事