ボットが発見されたのは今年の初めのことですが、その時点と比べ、最新のアクティビティには大量の変更点が見られます。コマンドアンドコントロール(C2)通信が変わっているほか、拡散のための新たなエクスプロイトが追加されています。中でも特に注目すべき脆弱性は、VMware vSphere、SCO OpenServer、Vesta Control Panel、SMB ベースのエクスプロイトです。これらのエクスプロイトは、初期バージョンのコードには存在しなかったものです。
感染は、標的とするアプリケーションまたはオペレーティングシステムのいずれかの脆弱性のエクスプロイトを成功させることから始まります。ボットが標的とするのは、Linux ベースおよび Windows のオペレーティングシステムです。感染初期段階では、Java ベースのダウンローダも使用されます。使用されるのは、スタンドアロンの Python インタプリタと悪意のあるスクリプトを組み合わせたものと、pyinstaller
このボットは IRC を使用して C2 サーバに接続し、エクスプロイト、分散型サービス妨害攻撃、設定変更、RAT 機能に関連するコマンドを受け付けます。コマンドを受信すると、追加のコードをダウンロードして実行したり、ネットワークトラフィックを傍受してキャプチャしたデータを漏洩させたりします。
ボットは、悪意のあるプロセスを隠すように設計されたユーザモードルートキットと、ユーザが感染したシステムにログインするたびに実行される悪意のあるレジストリエントリをインストールして、システム上の自身の存在を隠します。
コードの大部分は、Monero マイナーの XMRig プログラムのダウンロードと実行に関するものです。また、攻撃者が制御するサーバから JavaScript ベースのマイナーをダウンロードして実行するコードを、感染したシステムの HTML ファイルや PHP ファイルに挿入します。感染したアプリケーションをユーザが開くと、JavaScript ベースの Monero マイナーがブラウザのプロセス空間内で実行されます。
Necro Python ボットを調べると、攻撃者がさまざまな Web アプリケーションにおけるリモートコマンド実行のエクスプロイトについて最新の開発技術を把握し、新しいエクスプロイトをボットに組み込んでいることがわかります。これにより、システムに拡散および感染できる可能性が高まります。ユーザは、オペレーティングシステムだけでなく、すべてのアプリケーションに最新のセキュリティ更新プログラムを定期的に適用する必要があります。
ここでは、サーバサイドのソフトウェアをエクスプロイトして拡散を図る、自己複製機能を持ったポリモーフィック型ボットを取り上げます。小規模オフィスやホームオフィス向けの SOHO ルータを標的とする点で、このボットは Mirai
Necro Python ボットについては、CheckPoint 社が今年 1 月に初めて報告
主なペイロードは、DDoS 攻撃、SOCKS プロキシを使用したネットワークトラフィックのスニッフィングと漏洩、Monero をマイニングするための暗号通貨マイニングソフトウェア XMRig のインストールです。マイニング機能は、JavaScript コードを介して自身を挿入し、スクリプトベースの Monero マイナーコードのダウンロードと起動を行います。
Cisco Secure 製品で悪意のあるアクティビティを調査していたところ、Immunet
Windows システムでの Necro ボットのダウンロードアクティビティ
このコードは、PowerShell 機能を使用して、静的にリンクされている Python
Linux システムの場合、コマンドがわずかに異なっています。シェルコマンドを使用してボットと XMRig Monero マイニングクライアントの亜種をダウンロードしてインストールし、マイニングプールに参加します。Monero マイナーは、非表示のシェルスクリプト(.bootstrap.sh)を作成することでインストールされます。このスクリプトは、Necro のダウンロードサイトから XMRig クライアントをダウンロードします。その後、ファイル名「sshd」が格納されている隠しフォルダ「.2」にクライアントを移動し、適切なパラメータを指定して起動します。
Cisco Secure Endpoint で確認された Linux システムでの Necro アクティビティ
setup.py はある程度難読化されたポリモーフィック型ボットであり、複数の方法で拡散します。
コードを開くと、文字列が難読化されていて、変数、関数、クラス名はランダムに生成されていることがわかります。難読化の解除は比較的簡単です。Necro のポリモーフィックエンジンについては、後で詳しく説明します。
難読化された Necro ボットのコードのスニペット
Necro は、起動するとミューテックスを作成し、感染したシステムでプロセスのインスタンスが複数実行されないようにします。ミューテックス名は「internationalCyberWarefare」です。新しいバージョンでは「internationalCyberWarefareV3」となっています。
ボットは、ネットワーク範囲をランダムに生成してスキャンし、拡散します。10、127、169、172、192、233、234 で始まるローカルに割り当てられているネットワーク範囲は、スキャン試行の対象から除外されます。ボットが起動するとスキャンが開始されますが、C2 サーバから IRC 経由でスキャンコマンドを受信することでも実行できます。
ボットには、スキャンする TCP ポートがハードコードされたリストが含まれています。このリストは、C2 サーバから適切なコマンドを送信すれば拡張することができます。Talos が確認したサンプルの最初のポートリストは、22、80、443、7001、8080、8081、8443 でした。
IP アドレスが生成されると、ボットはリストに記載されたポートに接続して拡散します。拡散方法は 2 種類あります。1 つはハードコードされている SSH ログイン情報のリストを使用してログイン試行が成功した場合にリモートコマンドを発行するという方法です。もう 1 つは、さまざまなアプリケーションや Windows オペレーティングシステムに多数存在する脆弱性を SMB 経由でエクスプロイトするという方法です。
アプリケーションのエクスプロイト
Necro の以前のバージョンは、Web アプリケーションに存在する以下の脆弱性をエクスプロイトしていました。
5 月 11 日と 18 日に確認された最新の亜種には、新たに次のようなエクスプロイトが追加されています。
新たに追加されたエクスプロイトの 1 つ、Vesta Control Panel のコマンドインジェクション
5 月 18 日にリリースされたバージョンには、Python バージョンの EternalBlue(CVE-2017-0144
新しいエクスプロイトが追加されていることから、攻撃者が新しい拡散方法を積極的に開発していることと、公開されている PoC で最新の脆弱性の情報を入手していることがわかります。
5 月 22 日に発見された最新のインスタンスでは、SMB サーバのログイン情報を指定する機能が改善されています。ただし、メインのエクスプロイト機能からは除外されていました。ユーザ名とパスワードは別々の 2 つの配列に格納され、他にも多くのユーザ名とパスワードを保持できるように拡張されています。このサンプルのエクスプロイト機能には EternalBlue と EternalRomance のエクスプロイトは含まれていませんが、SMB(ポート 445)経由で接続してリモートでサービスを作成し、メインのボットファイルをダウンロードして実行しようとします。
この最新のサンプルは、pyinstaller で生成されたものです。以前から確認されている ELF ファイルではなく、PE ファイルとなっています。
ボットには、SSH ログインの試行時に使用されるログイン情報のリストが含まれています。SSH 接続の試行は、Paramiko Python SSH
ハードコードされているログイン情報のリストが、SSH ブルートフォース攻撃に使用される
Windows を認識し、(マイニングのためではなく)拡散するために Windows を使用する Java クラスとは別に、あらゆるオペレーティングシステムで実行可能な、マルチプラットフォームに完全対応した Java クラスを確認しました。マルチプラットフォーム対応ですが、Windows または Linux で実行されているかをチェックします。このクラスは、基盤となるオペレーティングシステムに応じて、ダウンロードサーバから Necro ボットをダウンロードして適切に起動します。
Necro には Java クラスダウンローダも付属している
Windows で実行される場合、Necro は、pyinstaller が作成したサンプルを参照するか、悪意のあるスクリプト setup.py の実行に使用される Python スタンドアロン実行ファイルを参照するように以下のレジストリ値を設定します。この結果、ユーザがシステムにログインしたときや、システムが再起動されたときにボットが実行されるようになります。
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\System explore HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\System explore
ファイル名は「$6829.exe」です。このファイルは、ボットがダウンロードしてインストールするルートキットによって隠しファイル(ファイルの属性が非表示)に設定されるようになっています。
Linux で実行される場合、ボットはまず DNS リゾルバの設定を変更し、Cloudflare DNS サーバ(1.0.0.1 および 1.1.1.1)を参照するようにします。これにより、ローカル DNS サーバのログでアクティビティが検出されるのを回避できる可能性があります。
/etc/rc.local スクリプトを変更し、システムの起動時にボットを起動するコマンドを追加することで、永続性が確保されます。
ボットの作成者は、検出をさらに困難にすることに力を入れているようです。イテレーションとユーザモードルートキットごとにスクリプトコードを変更するポリモーフィックエンジンが追加されています。この変更は、悪意のあるファイル、プロセス、およびレジストリエントリの存在を隠すためのものです。チェックサムベースの検出など初歩的な検出方法には有効な手法ですが、最新の検出エンジンや XDR 製品の場合は効果がありません。
Python には、開発者がコードをバイトコードにコンパイルする前にインタプリタ方式で表示できるモジュールがデフォルトで組み込まれています。ドキュメント化はあまり進んでいませんが、AST モジュールはソースコードから抽象構文ツリーオブジェクトを生成します。実行時にコードを変更できる可能性があり、Necro のポリモーフィックエンジンでも実装されています。
エンジンは、AST モジュールを使用してすべての変数、関数定義、クラス定義を検索し、構文ツリー内の各オブジェクトタイプの名前のリストを作成します。また、AST ノードにアクセスしたときに呼び出されるクラスを実装します。このクラスは ASCII 文字列を検索し、単純な xor 操作で文字列を難読化します。難読化された文字列は zlib で圧縮されてから、エスケープされた文字列に変換されます。この文字列は後で Python で簡単にデコードできます。
難読化されていないポリモーフィックエンジン
上のスクリーンショットはリバースエンジニアリング済みのポリモーフィックエンジンであり、変数名は意味のあるものとなっています。下のスクリーンショットは、難読化されてランダム化された後の同じエンジンです。この難読化手法は、単純なチェックサムベースの検出であれば回避できる可能性があります。ただ、コードはまだ十分に静的であり、エンジン自体にいくつか問題があるため、単純なパターンマッチングで簡単に検出できます。
難読化後のポリモーフィックエンジンのスニペット(上記と同じ)
ポリモーフィックエンジンは、Necro ボットが開始されるたびに実行されます。自身のファイルを読み取り、それをモーフィングして新しい亜種を作り出します。エンジンは、C2 サーバから呼び出すこともできます。
感染したオペレーティングシステムが Windows の場合、ボットはリフレクティブ DLL ロードを可能にするシェルコードを生成します。そして実行中のすべてのプロセスを列挙し、Necro ボットの作成者の手による r77 ルートキット
ルートキットは、まずメモリ内のパケットキャプチャを行う DLL の存在をチェックして潜在的な分析環境を検出し、実行を終了します。その他、Hacker 逆アセンブラエンジンを使用して、次の ntdll.dll 関数のフックを配置します。
プロセス、ファイル、レジストリ値の名前を非表示にするためのルートキットソースコードのデフォルトの文字列は「$6829」です。Necro が使用するルートキット DLL のバイナリバージョンでも変わりません。
このボットの主な機能(DDoS 攻撃の実行以外)は、暗号通貨マイニングソフトウェアをインストールして Monero 暗号通貨をマイニングすることです。XMRig マイナーの亜種をインストールするか、JavaScript コードを挿入して JavaScript ベースのマイナーをスクリプトベースのファイルにダウンロードして実行します。
supportxmr.com マイニングプールのユーザ名として使用されているアドレスは、45iHeQwQaunWXryL9YZ2egJxKvWBtWQUE4PKitu1VwYNUqkhHt6nyCTQb2dbvDRqDPXveNq94DG9uTndKcWLYNoG2uonhgH です。このアドレスは他のマルウェアのサンプルでも使用されています。そうしたサンプルのほとんどは、2020 年に 1 年を通して VirusTotal に送信されてきた AutoIt でコンパイルされたスクリプトを使って開発されています。
XMRig と感染ファイルをダウンロードする機能を使用できるのは、Linux ベースの感染システムのみです。Windows では使用できません。
オペレーティングシステムが Windows でない場合、Necro はファイルシステムをスキャンして、拡張子が .htm、.html、.php、.js のファイルを探します。そして、攻撃者が制御するホストからマイナーローダをダウンロードして実行するコードを追加します。
Necro が、.htm、.html、.js、.php ファイルにコードを挿入
挿入されたコードはランダム化され、ロードされたスクリプトは厳重に難読化されます。難読化を解除すると、マイニングペイロードの最終的な場所である hxxps://cloud-miner[.]de/tkefrep/tkefrep[.]js?tkefrep=bs?nosaj=faster.xmr2 が現れます。
ボットのマイナーローダと JavaScript 部分用の C2 をホストする攻撃者が制御するサーバは、hxxps://ublock-referer[.]dev/ にあります。このサーバは、感染コードで参照されているメインローダの campaign.js もホストしています。
Necro が、感染したサーバの Web サービスアプリケーションによって提供されるランダム化されたコードを挿入
マイナーコードのインストール以外にも、JavaScript ベースのボットには、C2 サーバからコマンドを受け取るための追加機能があります。C2 サーバによって指定された標的でキーストロークを記録してから DoS 攻撃を開始することで、クリップボードからデータを盗むことができます。
ボットは、機能ごとに異なるサーバを使用し、ほとんどのサーバには TOR プロキシを介してアクセスします。最初のダウンロードおよびインストールサーバは例外です。
それ以外のサーバの用途は、IRC C2 通信、設定上の目的、TCP スニファ(ボットの SOCKS5 プロキシを介してプロキシされたトラフィックをスニッフィングする)によって収集されたデータの漏洩です。
Cisco Umbrella で確認された Necro ダウンロードサーバ
bp65pce2vsk7wpvy2fyehel25ovw4v7nve3lknwzta7gtiuy6jm7l4yd.onion.ws の DNS 要求アクティビティ
ボットは、次の DDoS 関連コマンドを受け取ると、ボットマスターによって指定された標的に対して DoS 攻撃を開始します。
以前の Necro の亜種の中には、IRC 通信で使用されるコマンドの構文が若干異なっているものがありました。
ボットには、SOCKS モジュールを使用してキャプチャされたトラフィックをデータ漏洩に使用するサーバにプロキシするスニファが含まれています。スニファは、IP バージョン、プロトコル、送信元および宛先のアドレスとポート、パケットペイロードデータをキャプチャします。スニッフィングを一時停止して再開するコマンドは次のとおりです。
エクスプロイトコマンドは、パラメータなしで実行された場合には主にボットを拡散するために使用されます。拡散コマンドは、C2 サーバからも送信できます。
ボットには、リモートアクセス型トロイの木馬(RAT)に関連した次のコマンドを実行する機能も含まれています。
設定コマンドは、脆弱なシステムのスキャンで使用されるポートのリストを変更するなど、ボットの設定を変更するためのコマンドです。
Talos のハニーポットでは、通常の Monero マイニングのアクティビティ以外にも、Linux ベースの亜種をインストールして Tezos をマイニングする試みが確認されています。この亜種は、これまでは使用されていなかった別のダウンロードサーバ can6dodp[.]servepics[.]com を使用していました。
Talos のハニーポットで観察された Tezos(XTZ)マイニング
ハニーポットテレメトリで確認したサンプルのいくつかで、マイニングペイロードがダウンロードされ、bash を使用して実行された後に、Tezos(XTZ)ウォレット tz1NfDViBuZwi31WHwmJ4PtSsVtNX2yLnhG7 を参照するマイニングコマンドを特定しました。このアクティビティはごくわずかしか確認されておらず、発生期間も 5 月 9 日以降の非常に短い期間だけです。しかし、ボットネットのマイニング機能が新しく更新されたことがわかります。
2021 年 2 月 4 日、Talos は hxxp[:]//193[.]239[.]147[.]224/crytp.exe から PowerShell をダウンロードするアクティビティをエンドポイントテレメトリで確認しました。AutoIT でコンパイルされている実行ファイル「crytp.exe」は、ダウンロードされると、侵入先のマシンに追加のマルウェアをダウンロードしようとします。その際、他の複数の URL に対して HTTP GET 要求を送信します。ダウンロード URL では、x86.dll と x64.dll の 2 つの DLL ルートキットファイルと、bigRANSOM.exe と x64i.exe の 2 つの実行ファイルがホストされています。
bigRANSOM.exe はまた別の AutoIT ベースのファイルであり、Necro 攻撃者がランサムウェアを配布しようとしていた可能性があります。このランサムウェアは、Necro の攻撃者または同グループのメンバーによって開発された可能性があります。AutoIT は、Python ベースの Necro ボットと同じウォレットアドレスを使用するマイナーを作成する主要ツールの 1 つです。ランサムウェアの配布の試みを確認したのは 1 度だけですが、この例から攻撃者が常に新しいペイロードを試していることがわかります。
Necro ボットとその機能の概要
ボットの活動が 5 月の初めに増加し、その際新たなエクスプロイトが追加されていました。主な機能は変わっていません。C2 サーバとの通信には IRC が使用されるほか、DDoS 攻撃を開始するためのコマンド、バックドアコマンド、データの窃取と漏洩のためのコマンドが備わっていました。
攻撃者の主な目的は Monero マイニングです。XMRig の亜種をインストールするか、HTML およびスクリプトファイルにコードを挿入することによって実行されます。挿入するコードには JavaScript マイナーと追加のボット機能が含まれており、マイニングに加わったブラウザを制御して情報を窃取します。
Necro ボットを調べると、攻撃者がさまざまな Web アプリケーションにおけるリモートコマンド実行のエクスプロイトについて最新の開発技術を把握し、新しいエクスプロイトをボットに組み込んでいることがわかります。これにより、システムに拡散および感染できる可能性が高まります。ユーザは、オペレーティングシステムだけでなく、すべてのアプリケーションに最新のセキュリティ更新プログラムを定期的に適用し、感染の兆候がないかログを監視する必要があります。
カバレッジ
今回の脅威は、以下の製品で検出してブロックすることが可能です。
Cisco Secure Endpoint は、この記事で説明したマルウェアの実行を阻止するのに最適です。新規ユーザの方は、こちらから
Cisco Secure Web Appliance の Web スキャンは、悪意のある Web サイトへのアクセスを防止し、上述したような攻撃で使用されるマルウェアを検出します。
Cisco Secure Firewall と Meraki MX
Cisco Secure Malware Analytics は、悪意のあるバイナリを特定し、シスコのすべてのセキュリティ製品に保護機能を組み込みます。
Cisco Umbrella
特定の環境および脅威データに対する追加の保護機能は、Cisco Secure Firewall Management Center から入手できます。
オープンソースの Snort サブスクライバルールセットをお使いであれば、Snort.org
この脅威を検出する目的でリリースされた SID は、57693 ~ 57717 です。
この脅威と、攻撃に関連するツールやマルウェアを検出するために、次の ClamAV シグネチャがリリースされています。
Cisco Secure Endpoint(AMP)ユーザは、Orbital Advanced Search
internationalCyberWarefareV3
internationalCyberWarefare
o4hlcckwlbcy7qhhohqswpqla6wx7c5xmsvk3k4rohknng4nofvgz5id[.]onion:ポート 5870、587
p2l44qilgm433bad5gbszb4mluxuejwkjaaon767m5dzuuc7mjqhcead[.]onion – port 42066
q2p4b6pprex5mvzxm2xdqgo4q3hy2p4if2ljq7fcoavxvab7mpk232id[.]onion – port 52566
3og7wipgh3ruavi7gd6y3uzhcurazasln55hb6hboiavyk6pugkcdpqd[.]onion – port 6697
bp65pce2vsk7wpvy2fyehel25ovw4v7nve3lknwzta7gtiuy6jm7l4yd[.]onion[.]ws
can6dodp[.]servepics[.]com
ublock-referer[.]dev:Javascript ボットローダと Javascript 関連機能用 C2
hxxps://cloud-miner[.]de/tkefrep/tkefrep[.]js?tkefrep=bs?nosaj=faster.xmr2:Javascript ベースの正当なマイナーの URL
pool[.]supportxmr[.]com – 45iHeQwQaunWXryL9YZ2egJxKvWBtWQUE4PKitu1VwYNUqkhHt6nyCTQb2dbvDRqDPXveNq94DG9uTndKcWLYNoG2uonhgH
rx[.]unmineable[.]com – XTZ:tz1NfDViBuZwi31WHwmJ4PtSsVtNX2yLnhG7
hxxp[:]//can6dodp[.]servepics[.]com/setup.py
hxxp[:]//can6dodp[.]servepics[.]com/setup
hxxp[:]//can6dodp[.]servepics[.]com/py.exe
hxxp[:]//can6dodp[.]servepics[.]com/xmrig
hxxp[:]//can6dodp[.]servepics[.]com/xmrig1
hxxp[:]//ngiwge486ln9daoo[.]hopto[.]org/setup.py
hxxp[:]//ngiwge486ln9daoo[.]hopto[.]org/py.exe
hxxp[:]//bp65pce2vsk7wpvy2fyehel25ovw4v7nve3lknwzta7gtiuy6jm7l4yd[.]onion[.]ws/setup.py
hxxp[:]//bp65pce2vsk7wpvy2fyehel25ovw4v7nve3lknwzta7gtiuy6jm7l4yd[.]onion[.]ws/py.exe
c3fe8058ab46bd21d22f920960caae1f3b22a7aeba8d5315fb62461f4e989a7d:5 月 18 日 の setup.py
8797ce228b32d890773d5dbac71cefa505b788cc8b25929be9832db422d8239b:5 月 11 日 の setup.py
bc2126c03f2242013f58b43eb91351fba15d300385252423c52a5b18ece6a54f:setup.py
97ab2092f6b5b1986536a5ba45e487f19c97f52544ff494d43bb1baf31248924:setup.py c3fe8058ab46bd21d22f920960caae1f3b22a7aeba8d5315fb62461f4e989a7d:setup.py
8130717a3d4053e2924a0393086511a41fc7777c045b45bb4f569bcbe69af8be:setup.py
d65e874b247dda9845661734d9e74b921f700983fd46c3626a3197f08a3006bf:setup.py
19c25ce4302050aec3c921dd5cac546e8200a7e951d570b52fe344c421105ea8:5 月 22 日の PE pyinstaller
606258f10519be325c39900504e50d79e551c7a9399efb9b22a7323da3f6aa7a:PE pyinstaller
2b77b93b8e1b8ef8650957d15aaf336cf70a7df184da060f86b9892c54eefb65:ELF pyinstaller
eb8b08e13aba16bd5f0d7c330493be82941210d3a6aa4856858df770f77b747d:ELF pyinstaller
80659cc37cb7fb831866f7d7b0043edc6918a99590bd9122815e18abb68daa35:ELF Pyinstaller
19269ce9a0a44aca9d6b2deed7de71cf576ac611787c2af46819ca2aff44ce2a:64 ビットルートキット DLL
a8bb386fa3a6791e72f5ec6f1dc26359b00d0ee8cb0ce866f452b7fff6dbb319:x86 ルートキット DLL
d58c3694832812bc168834e2b8b3bfcb92f85a9d4523140ad010497baabc2c3d:Java クラスダウンローダ
e884bd4015d1b97227074bcf6cb9e8134b7afcfb6a3db758ca4654088403430a:campaign.js ローダ
d6403b9c069f08939fc2f9669dc7d5165ed66a1cae07788c3b27fffb30e890a0:挿入された/感染した HTML ファイル
9d6171cf28b5a3572587140ef483739a185895ce2b5af3246a78c2c39beed7b8:以前のランサムウェアダウンローダ
9ac075ee8e97c06feaa2e9e46e9e27bfbf69337fb3be9fd3f9478be0e06a6db5:Necro の JavaScript コンポーネントによってダウンロードされた正当な JavaScript マイナー
本稿は 2021 年 06 月 03 日に Talos Group
のブログに投稿された「Necro Python bot adds new exploits and Tezos mining to its bag of tricks 」の抄訳です。