WindiGoのWinboxペイロードの技術分析

WindiGoのWinboxペイロードの技術分析

2021年6月下旬、QRaptorとYandexは、Meris(ラトビア語で疫病を意味する)と名付けられた一連の世界的なDDoS攻撃の背後にあるアクティブなボットネットを発見しました。このボットネットは、1秒間に生成できるリクエストの量が非常に多いことですぐに有名になりました。Cloudflareによると、Merisは1秒あたり17.2Mリクエストのスループットが可能でした。当時、MikroTikデバイスは悪名高く強力なCVE-2018-14847を使用して侵害され、ボット化されていました。ピーク時には、Merisは230,000台以上のデバイスを侵害したと推定されています。

2021年9月、RostelecomはMerisボットネットの一部を「sinkholed」したと発表した。しかし、2022年3月初旬、Impervaは、悪名高いランサムウェアグループREvilが主張したと思われる毎秒2.5Mリクエストに達するDDoS攻撃に関するブログを書きました。Impervaによると、このDDoS攻撃の実行にはMerisボットネットが使用された可能性が高いという。Merisの再登場が予想される中、Merisはシンクホールを生き延びたのだろうか?

Nozomi Networks の研究者は、Merisボットネットの能力の中核を明らかにするためにさらなる分析を行い、点と点を結び始めた。およそ2018年から2021年にかけて、MerisボットネットのバックボーンであるGruptebaボットネットは、数十万台のMikroTikデバイス(ルーター、スイッチャーなど)を感染させ、極悪なインターネットリレーに変えるために使用されてきた。使用されている主なGruptebaモジュールの1つはWindiGo(別名RanaumBot)と呼ばれるもので、MikroTikデバイスの設定に使用される独自のプロトコルであるWinboxペイロードを使用します。WinboxはMerisの根幹であるため、その機能を深く掘り下げることは理にかなっている。このブログでは、WindiGoの技術的な分析と、それがどのようにCVE-2018-14847を悪用してMikroTikルーターにアクセスするか、推奨事項を提供し、ネットワークを保護するために使用できるIoC(Indicators of Compromise)を共有します。

WindiGoポートスキャン

WindiGoを実行すると、Winboxポート(8291/tcp)にアクセス可能なMikroTikデバイスを見つけるためにネットワークをスキャンすることから始まります。WinboxはMikroTikデバイスのコンフィギュレーションに使用されるMikroTik独自のプロトコルであるため、コンフィギュレーションのフロントエンドであるWinboxアプリケーションを使用します。分析を行う中で、以下のサンプルで4つの異なるスキャン動作を確認しました:

  1. c4ea89b8795bd7ee97594ca62e1e9c5189e338ba1765a819cf54bd2f89922768
  2. 5191548b8edf4b98e623f055f5205e2db17aa220c28928b1da1c3a9ba1a75ee0
  3. 9d790a4377414a1e96b329fbf7741e90c8c8099d5e5996d718f663a79bb43037
  4. 7f3f983368989fdd9216cdd6b5a6c6063442cf3dbed5b4055b47b04ccb2fbdbb

最初の亜種は4096個のIPアドレスをランダムにスキャンする。2つ目の亜種は、プライベート・ネットワーク・クラスA、B、Cをスキャンするだけでなく、Internet Assigned Numbers Authority(IANA)が予約したアドレス空間100.64.0.0/10もスキャンします。これは、インターネット・サービス・プロバイダー(ISP)やその他のサービス・プロバイダーのシステムを、その境界内から侵害しようとする試みと思われます。

そのほとんどは、AT&TT-MobileRIPEといった米国や欧州の通信会社やインターネット登録に属するもので、ブラジル、ベトナム、中国の通信会社も標的になっている。興味深いのは、2つのネットワーク・ブロックが際立っていることで、1つ目はアメリカ陸軍情報システム司令部のもの、2つ目はアメリカ国防総省ネットワーク情報センターのものである。

The last variant receives the scan target by fetching /api/request-cidr?uuid=<UUID>on its Command & Control (C2) server. Figures 1,2 and 3 depict the differences in the main scanning loops.

最初の変形走査ループ
図1.最初の変形スキャン・ループ
図2.第二の走査ループ
第3の変形走査ループ
図3.第3の変形スキャン・ループ

Winbox CVE-2018-14847 のエクスプロイト

スキャンが開始されると、ネットワークデバイスがWinboxポートのTCPハンドシェイクに応答した場合、マルウェアはCVE-2018-14847の悪用を試みます。この脆弱性は、MikroTikデバイス上の任意のファイル読み取りを活用し、user.datファイルとして知られるデバイスユーザーのクレデンシャルストアを取得するために使用されます。サンプルはWinboxパケットをオンザフライで組み立て、パケットデータの大部分はサンプル内でハードコードされ、小さなチャンクだけが動的にパッチされます。図4は、CVE-2018-14847を悪用するためにデバイスに送信される最初のWinboxパケットを示しています。

Winboxパケット
図4.CVE-2018-14847を悪用するためにデバイスに送信される最初のWinboxパケット

図5に見られるように、パストラバーサルは、/flash/rw/store/user.datに簡略化されたアセンブルされたペイロードで明らかになる。

Winboxペイロード
図5.組み立てられたWinboxペイロードの一部。M2'はWinboxのメッセージを示すマジックバリューである。

この脆弱性を悪用すると、クレデンシャル・ストアを含むデバイスのuser.datファイルが流出します。図6に、マルウェアによって取得されたクレデンシャル・ストアを示します。このファイルには、デバイスに登録されたアカウント、ユーザー名、暗号化されたパスワードが含まれています。

抽出されたuser.datファイルを含むWinboxメッセージ
図6.抽出されたuser.datファイルを含むWinboxメッセージの一部

クレデンシャルの復号化  

通常であれば、ハッシュ化された状態からパスワードを取り出すには、辞書攻撃や総当たり攻撃などの追加手順が必要です。しかし、これらの古いMikroTikデバイスでは、パスワードはハッシュ化されずに暗号化されます。まずユーザー名と "static salt "をリンクしてキーを生成し、その結果をハッシュ化してパスワードをXORしたキーを生成する。このスキームの暗号学的な意味合いは省略し、マルウェアの復号化出力に直行する。図7と図8は、復号化関数実行直後の破壊と、スタック上の復号化されたパスワードのキャプチャを示しています。

復号直後の破損
図7.復号化されたパスワードをキャプチャするために、復号化処理の直後に破断する。
図8.復号化されたパスワードはスタック上のローカル変数に保存される。

マルウェアはまた、ユーザー名とパスワードの独自の辞書を含んでいる。この辞書は比較的小さく、24のユーザー名と220のパスワードで構成され、合計でおよそ5,300通りの組み合わせが可能です。これらの静的な認証情報は、パスワードの採取ステップが失敗した場合に使用される。驚くべきことに、図9に示すように、盗まれた認証情報は辞書の一番下に追加されます。つまり、デバイスから盗んだ認証情報を試す前に、マルウェアはまず何千もの静的認証情報を使ってログオンを試みますが、これはかなり非効率的です。

図9.認証情報辞書の最後尾には、一番下の「admin:1234」に収穫された認証情報が含まれている。

スケジュールされたタスク実行

この時点でマルウェアは、パスワード抽出が成功したかどうかに関係なく、デバイスにスケジュールされたタスクを登録しようとする。最初の感染ベクターはWinboxプロトコルを介して発生します。何らかの理由(ユーザー名とパスワードの間違い、ネットワーク通信の失敗など)で感染が失敗すると、マルウェアはSSHにフォールバックし、最後にWeb APIにフォールバックします。いずれにせよ、図10に見られるように、追加されるタスクは常に同じである。

図10.デバイス上に作成されたスケジュール・タスク

MicroTikデバイスの危殆化

このスケジュールされたタスクは、デバイスが起動すると実行され、その後10分ごとに実行される。このタスクは、C2からスクリプトをダウンロードし、デバイス上で実行しようとする。これらのスクリプトは、Telnetやウェブインターフェイスなどの管理サービスを無効にし、SOCKSプロキシを有効にして、デバイスを万能のインターネットリレーに変える。

:do { /system scheduler set U6 interval=00:03:00 } on-error={ :put "U6 not found"}
:do { /system scheduler set U7 interval=00:03:00 } on-error={ :put "U7 not found"}
:do { /ip service disable telnet } on-error={ :put "disable telnet error"}
:do { /ip service disable api } on-error={ :put "disable api error"}
:do { /ip service disable api-ssl } on-error={ :put "disable api-ssl error"}
:do { /ip service set ssh port= } on-error={ :put "set ssh port error"}
:do { /ip socks set enabled=yes } on-error={ :put "socks enable error"}
:do { /ip socks set port=5678 } on-error={ :put "set socks port error"}
:do { /ip firewall filter add action=accept chain=input disabled=no dst-port=5678 protocol=tcp place-before=1 } on-error={ :put "firewall error"}

この時点でゲームオーバーとなり、デバイスは、匿名化された方法で攻撃を実行するために、脅威行為者によって使用される準備が整ったプロキシサーバーとなった。

推薦の言葉

まず、ネットワーク・ルーターやその他のネットワーク・デバイスをインターネットにオープンに接続してはならない。このケースでは、攻撃者はネットワーク境界の内部から侵入しているため、管理インターフェースをユーザーやアプリケーションのネットワークに接続しないことが重要である。このような脅威に対する強固な防御を提供するために、専用の管理ネットワークまたはゼロ・トラスト・ポリシーによる適切なネットワーク・セグメンテーションを使用する。

あなたの環境でMikroTikデバイスを使用している場合、それらが最新であることを確認する必要があります。CVE-2018-14847の脆弱性は、公開直後にMikrotikによって修正されました。デバイスの設定を見直し、強力なパスワードが使用されていることを確認してください。完全にパッチが適用されたデバイスでは、脆弱なパスワードや漏えいしたパスワードから保護されないことを忘れないでください!

最後に、資産管理ツールやIDSを活用して、ネットワーク全体を完全に可視化できるようにする。不審なネットワーク接続や侵入に対してアラートを発することで、少なくとも、深刻な被害をもたらす前に脅威を検知し、緩和するチャンスを得ることができる。これにより、セキュリティ・チームが効果的に脅威に対応できるようになります。

IOC

にゅうしゅつりょくせいぎょそうち 説明
zancetom[.]com C2ドメイン
myfrance[.]xyz C2ドメイン
bestony[.]クラブ C2ドメイン
strtbiz[.]サイト C2ドメイン
cloudsond[.]me C2ドメイン
スペースウッブ[.]テック C2ドメイン
ゲームデート[.]xyz C2ドメイン
fanmusic[.]xyz C2ドメイン
1abcnews[.]xyz C2ドメイン
gamesone[.]xyz C2ドメイン
1abcnews[.]xyz C2ドメイン
ベストメイド[.]xyz C2ドメイン
picsgifs[.]xyz C2ドメイン
my1story[.]xyz C2ドメイン
mobigifs[.]xyz C2ドメイン
mobstore[.]xyz C2ドメイン
myphotos[.]xyz C2ドメイン
onlinegt[.]xyz C2ドメイン
http[:]//<C2_Domain>/api/router-scan-results-rand スキャン結果をC2に送信
http[:]//<C2_Domain>/api/router スキャン結果をC2に送信
http[:]//<C2_Domain>/api/log C2にログを送信
http[:]//<C2_Domain>/poll/<Device_UUID> C2からのフェッチ命令
HKCUSoftware C2サーバー一覧
HKCUSoftware モジュールのバージョン
HKCUSoftware マシンUUID
Globalnbyjrjaxyahi4pq5 処刑ミュータント
Global\4s1s67bwfh4e04sx 処刑ミュータント
c4ea89b8795bd7ee97594ca62e1e9c5189e338ba1765a819cf54bd2f89922768 WindiGoサンプル
5191548b8edf4b98e623f055f5205e2db17aa220c28928b1da1c3a9ba1a75ee0 WindiGoサンプル
9d790a4377414a1e96b329fbf7741e90c8c8099d5e5996d718f663a79bb43037 WindiGoサンプル
7f3f983368989fdd9216cdd6b5a6c6063442cf3dbed5b4055b47b04ccb2fbdbb WindiGoサンプル