あなたのケーキを食べて、それも食べますか? UNC2891 の概要

Example SLAPSTICK decoded log (fabricated) news

Mandiant Advanced Practices チームは以前、攻撃者がマネージド サービス プロバイダーを侵害して金融および専門コンサルティング業界の標的へのアクセスを取得したUNC1945 操作の概要を提供する脅威研究のブログ投稿を公開しました。

それ以来、Mandiant はいくつかの侵入を調査し、現在 UNC2891 として追跡されている、この攻撃者に関係があると思われる脅威クラスターへの侵入を特定しました。これらの調査を通じて、Mandiant は、以前に UNC1945 で使用されていたものに加えて、UNC2891 で使用されている追加の技術、マルウェア、およびユーティリティを発見しました。これらの脅威クラスター間の重大な重複を特定したにもかかわらず、Mandiant はそれらが同じアクターによるものであるとは判断していません。

  • UNC2891 への侵入は、金銭的な動機によるものと思われ、場合によっては、攻撃者がほとんど検出されないまま数年に及ぶこともありました。
  • UNC2891 は、主に TINYSHELL および SLAPSTICK バックドアを備えた Oracle Solaris ベースのシステムを標的にすることで、Unix および Linux 環境での流暢さと専門知識を示しました。
  • Mandiant は、UNC2891 が高度な OPSEC で動作し、公開および非公開のマルウェア、ユーティリティ、およびスクリプトを利用して証拠を削除し、対応の取り組みを妨げていることを確認しました。
  • Mandiant は、UNC2891 が被害者のネットワークに隠されたままであった Oracle Solaris システムのこれまで知られていなかったルートキットを発見しました。これを CAKETAP と名付けました。
  • CAKETAP の 1 つの亜種は、被害者の現金自動預け払い機 (ATM) スイッチング ネットワークを通過するメッセージを操作しました。これは、不正な銀行カードを使用して複数の銀行で不正な現金引き出しを実行する大規模な操作の一部として利用されたと考えられています。

SLAPSTICK および TINYSHELL バックドアの広範な使用

過去の UNC1945 の侵入と同様に、Mandiant は、UNC2891 が、SLAPSTICK として追跡している Pluggable Authentication Module (PAM) ベースのバックドアを広範囲に使用して、資格情報の収集を支援し、被害者のネットワーク内の侵害されたマシンへのバックドア アクセスを提供することを観察しました。以前のブログ投稿で詳しく説明したように SLAPSTICK は、ハードコードされた魔法のパスワードを使用して、感染したシステムに永続的なバックドア アクセスを提供し、認証の試行と対応するパスワードを暗号化されたログ ファイルに記録します。これは、UNC2891 の資格情報の収集とラテラル ムーブメントの活動に大いに役立つと予想されますが、Mandiant のインシデント レスポンダーに貴重な情報を提供することにもなりました。 SLAPSTICK のログ ファイルはしばしばタイムスタンプ処理されますが、Mandiant はそれらをデコードし、バックドアが提供する魔法のパスワードを使用して、攻撃者の横方向の動きの活動の一部を追跡することができました。

Example SLAPSTICK decoded log (fabricated)
図 1: SLAPSTICK でデコードされたログの例 (捏造)

SLAPSTICK と並んで、UNC2891 は、公開されているTINYSHELL バックドアのカスタム バリアントをインストールすることがよくありました。 UNC2891 TINYSHELL バックドアは、外部の暗号化された構成ファイルを利用し、いくつかの亜種には、基本認証を使用して HTTP プロキシ経由で通信する機能などの追加機能が含まれていました。グループが Unix および Linux ベースのシステムに精通していることに合わせて、UNC2891 は、systemd (SYSTEMD)、ネーム サービス キャッシュ デーモン (NCSD)、 Linux at デーモン (ATD)。

表 1: 観測された TINYSHELL ファイル パス

TINYSHELL バックドア ファイル パス

TINYSHELL 構成ファイルのパス

/usr/lib/libhelpx.so.1

/usr/lib/systemd/systemd-helper

/usr/sbin/nscd

/usr/lib/libatdcf.so

/usr/lib/libnscd.so.1

/usr/lib/libsystemdcf.so

/var/ntp/ntpstats/1

表 2: デコードされた TINYSHELL 構成の例 (systemd バリアント)

デコードされた構成の例

pm_systemd_mag <32文字列>

systemd_nme <システム ID>

pm_systemd_adr <C2 IPアドレス/ドメイン>

pm_systemd_prt <443 または 53>

pm_systemd_tme 300

systemd_non1 なし

systemd_non2 なし

systemd_non3 なし

systemd_non4 なし

systemd の亜種の場合、UNC2891 は TINYSHELL バックドアの永続化のために systemd サービス ユニット ファイルも利用していました。

表 3: TINYSHELL 永続化に使用されるサービス ユニット ファイル

/usr/lib/systemd/system/systemd-helper.service

[単位]

Description=ハードウェア データベースの再構築

[サービス]

タイプ=フォーク

ExecStart=/lib/systemd/systemd-helper

[インストール]

WantedBy=マルチユーザー.ターゲット

分析された構成に基づいて、UNC2891 はマルチホップ構造で TINYSHELL バックドアを構成し、侵害された複数の内部サーバーをコマンド アンド コントロールに利用していました。あるケースでは、Mandiant は、攻撃者がさまざまな TINYSHELL 亜種を連鎖させて、ネットワーク制限のあるネットワーク セグメント内のサーバーへのリモート アクセスを取得したことを示唆する証拠を発見しました。

TINYSHELL 接続のネットワークを隠しておくために、UNC2891 はルートキットをインストールして構成し、これらの接続をネットワーク接続関連の API から除外しました (CAKETAP ルートキットの詳細については、読み続けてください)。 UNC2891 は、外部のコマンド アンド コントロール チャネルに動的 DNS ドメインを使用する TINYSHELL バックドアを備えたリモート アクセス可能なシステムを構成しました。これらのドメインはホストごとに作成され、複数回使用されることはありませんでした。サブドメインは、侵害されたマシンのホスト名に似ている場合がありました。 Mandiant は、これらの動的 DNS ドメインのパッシブ DNS データを収集できませんでした。これは、UNC2891 が、ネットワークへのアクセスが必要な短い期間、IP 解決を有効にした可能性が高いことを示唆しています。被害者の 1 人では、これらの TINYSHELL バックドアは、ポート 53 および 443 で TCP を使用して通信を実行するように構成されていました。これは、アウトバウンド ネットワーク保護をバイパスし、既存のトラフィックに溶け込み、検出を回避するためのメカニズムである可能性があります。

UNC2891 で使用される TINYSHELL コマンドとコントロールの例
図 2: UNC2891 で使用される TINYSHELL コマンドと制御の例

STEELHOUND、STEELCORGI、および環境変数のキーイング

UNC2891 は、実行時に取得した環境変数の値から ChaCha20 キーを導出することにより、埋め込まれたペイロードを復号化する STEELCORGI インメモリ ドロッパーを頻繁に利用していました。多くの場合、Mandiant は、埋め込まれたペイロードを復号化するために必要な環境変数を回復できませんでした。ただし、解読できた限られたサンプルでは、UNC2891 は、SUN4ME という名前で開発されたと思われる広範なツールキットのさまざまなバージョンを展開していました。 SUN4ME には、ネットワークの偵察、ホストの列挙、既知の脆弱性の悪用、ログ消去、ファイル操作、および一般的なシェル ユーティリティのためのツールが含まれています。 Yoroi は以前、UNC1945 での STEELCORGI の使用に関するブログ投稿に続いて、このツールキットに関する情報を 公開しました。

Mandiant は、同様のインメモリ ドロッパーを利用する UNC2891 を発見しました。このドロッパーは、環境変数を使用して埋め込まれたペイロードを復号化しましたが、代わりに RC4 暗号化に依存していました。これを STEELHOUND と名付けました。 STEELHOUND は、埋め込まれたペイロードのドロッパーとして機能するだけでなく、ターゲット バイナリを暗号化し、それ自体のコピーとファイルの終わりの構成と共にディスクに書き込むことで、新しいペイロードを暗号化することもできます。

ウイングフックとウイングクラック

これらの調査中に、Mandiant は WINGHOOK および WINGCRACK と名付けたキーロガー マルウェアのファミリも発見しました。

  • WINGHOOK は、Linux および Unix ベースのオペレーティング システム用のキーロガーです。これは、ユーザー入力の処理に使用される 2 つの一般的な関数であるread関数とfgets関数をフックする共有ライブラリ (SO ファイル) としてパッケージ化されています。キャプチャされたデータは、ディレクトリ/var/tmp/にエンコードされた形式で保存され、ファイル名は.zmanDwで始まります。
  • WINGCRACK は、WINGHOOK からのエンコードされたキーログ データを含むファイルの内容をデコードして表示できるユーティリティです。マルウェアの作成者は、これらのエンコードされたファイルを「schwing」ファイルと呼んでいるようです。

観測されたユーティリティ

Mandiant は以前、UNC1945 が侵入中にさまざまなパブリックおよびプライベート ツールを大量に使用していることを確認しており、これは UNC2891 にも当てはまりました。 Mandiant は、UNC2891 によって利用された追加のユーティリティを発見しました。

  • BINBASH は、グループ ID とユーザー ID を「root」または指定された値に設定した後にシェルを実行する単純な ELF ユーティリティです。 BINBASHは、ソース コードをコンパイルしたものと思われます。
  • WIPERIGHT は、Linux および Unix ベースのシステムで特定のログ エントリをクリアする ELF ユーティリティです。 lastlog、utmp/utmpx、wtmp/wtmpx、および pacct ログで特定のユーザーに関連付けられているエントリを削除できます。利用可能なソース コードに由来するようであり、おそらくより新しいバージョンです。
  • MIGLOGCLEANER は、Linux および Unix ベースのシステムでログを消去したり、ログから特定の文字列を削除したりするもう 1 つの ELF ユーティリティです。 GitHub で公開されています

攻撃者の間では珍しいように見えますが、UNC2891 は頻繁に uuencoding スキームを使用して、マルウェア バイナリや、広範なホスト列挙スクリプトからの出力を含むファイルなどのファイルをエンコードおよびデコードしていました。攻撃者は、uuencoding および uudecoding 機能を実行する単純な Perl ラッパー スクリプトを頻繁に利用していました。

ケーキタップ

CAKETAP は、UNC2891 が Oracle Solaris を実行する主要なサーバー インフラストラクチャに展開したカーネル モジュール ルートキットです。 CAKETAP は、ネットワーク接続、プロセス、およびファイルを隠すことができます。初期化中に、ロードされたモジュールのリストから自身を削除し、以前にロードされたモジュールでlast_module_idを更新して、その存在を隠します。

関数ipcl_get_next_connおよびipモジュールのいくつかの関数にフックがインストールされます。これにより、CAKETAP はアクターが構成した IP アドレスまたはポート (ローカルまたはリモート) に一致するすべての接続を除外できます。

Solaris システムで実行されている CAKETAP を識別する 1 つの方法は、このフックの存在を確認することです。以下は、フックされたipcl_get_next_conn関数を識別するためのコマンドの例を示しています (注: mdbコマンドには、システムで特別な権限が必要な場合があります)。

root@solaris:~# echo ‘ipcl_get_next_conn::dis -n 0 ; ::やめる | mdb -k

クリーンな SPARC Solaris システムの出力は、次のようになります。

ipcl_get_next_conn: %sp を保存、-0xb0、%sp

フックされた関数は、次のようにsethi命令で始まります (定数0x11971c00は、CAKETAP がロードされる場所に応じてインスタンスごとに変わります)。

ipcl_get_next_conn: sethi %hi(0x11971c00), %g1

追加のフックがmkdirat (make directory at) およびgetdents64 (get directory entry) システム コールにインストールされます。 CAKETAP はmkdiratフックを使用して、シグナル文字列を含むパスからコマンドを受け取ります。コマンドには、ネットワーク フィルターの構成、その構成の表示または更新、およびそれ自体の再表示が含まれます。 getdents64フックにより、CAKETAP は秘密のシグナル文字列を含むファイル システム上のファイルまたはディレクトリを隠すことができます。表 4 には、CAKETAP フックのシグナル文字列が含まれています。

表 4: CAKETAP フックで観測されたシークレット

ひみつ

使用法

.caahGss187

mkdirat フック シグナル文字列

.zaahGss187

getdents64 フック シグナル文字列

mkdiratフックにより、UNC2891 は、これらのシステム コールを利用するシェル コマンド (mkdir の場合は mkdir など) を発行することで、侵害されたサーバーへの既存のバックドア アクセスを介して CAKETAP を制御および構成できるようになりました。シグナル文字列に追加された 1 文字は、実行されるコマンドを示します。次のコマンドが観察されました。

表 5: 観測された CAKETAP コマンド

指示

関数

空の

CAKETAP モジュールをロードされたモジュールのリストに追加して戻します

M

getdents64フックのシグナル文字列を変更します

ネットワーク フィルターを追加します (<IP>p<PORT> の形式)。

ネットワーク フィルタを削除する

P

現在のスレッドの TTY をgetdents64フックによってフィルタリングされないように設定します

p

すべての TTY がgetdents64フックによってフィルタリングされるように設定する

S

現在の構成を表示します

たとえば、新しいネットワーク フィルタを構成して現在の構成を表示するには、次のコマンドを使用できます。

  • mkdir /some/path/.caahGss187I192.168.1.10p80 – 192.168.1.10:80 のネットワーク フィルターを追加します。
  • mkdir /some/path/.caahGss187S – 現在の構成を表示します

getdents64フィルター出力にインストールされたフックは、ディレクトリ コンテンツ内のシグナル文字列の存在を隠します。

Mandiant は、UNC2891 がモジュール名ipstatを持つ CAKETAP を攻撃者が作成したディレクトリからロードすることを確認しました。これらのディレクトリは多くの場合、 /varディレクトリ ツリー内のどこかに常駐していました。

CAKETAP 不正取引

ある被害者の ATM スイッチ サーバーからのメモリ フォレンジックにより、カードとピンの検証に関連する特定のメッセージを傍受する追加のネットワーク フック機能を備えた CAKETAP の亜種が明らかになりました。この CAKETAP の亜種が、不正な銀行カードを使用して不正な取引を実行する操作の一部として使用されたことを示す証拠があります。

この CAKETAP の亜種は、Payment Hardware Security Module (HSM) 宛ての特定のメッセージを標的にしていました。この追加のネットワーク フックは、いくつかの機能を実行します。

  1. カード確認メッセージの操作:
    CAKETAP は、特定の送信メッセージのモードを変更して、カードの検証を無効にしました。これにより、HSM は適切なカード検証を実行せず、代わりに有効な応答を生成しました。不正な銀行カードは、CAKETAP の「マーカー」として機能するプライマリ アカウント番号 (PAN) およびその他のパラメーターを使用するカスタム アルゴリズムを使用して、検証メッセージを生成しました。 CAKETAP は送信メッセージを調べ、アルゴリズムと一致する場合、CAKETAP はカードが不正であると識別し、次のステップで使用するために PAN をメモリに保存しました。
  2. PIN 検証メッセージの再生:
    CAKETAP は、特定の条件に一致する送信 PIN 検証メッセージを調べ、不正なカードを反映したプライマリ アカウント番号 (PAN) を持つメッセージを特定しました。メッセージが不正なカードに対するものでない場合、正規の ATM PIN 検証を中断しないように、メッセージを内部に保存し、変更せずに送信します。ただし、不正なカードの場合、CAKETAP はメッセージの内容を以前に保存したメッセージのデータに置き換えます。これは事実上、不正なカードの PIN 検証を回避するリプレイ攻撃でした。

Mandiant の調査結果に基づいて、CAKETAP は UNC2891 によって大規模な操作の一部として利用され、不正な銀行カードを使用して複数の銀行の ATM 端末から不正な現金引き出しを実行することに成功したと考えられます。

結論

UNC2891 は高レベルの OPSEC を維持し、検出を回避するためにいくつかの手法を採用しています。攻撃者はスキルと経験を駆使して、Unix および Linux 環境によく見られる可視性の低下とセキュリティ対策を最大限に活用します。 Mandiant は、UNC2891 が引き続きこれを利用し、これらのオペレーティング システムを実行するミッション クリティカルなシステムを標的にして、金銭的利益を得るために同様の操作を実行すると予想しています。

UNC2891 と UNC1945 の間の一部の重複は注目に値しますが、侵入を単一の脅威グループに帰するほど決定的ではありません。たとえば、UNC2891 と UNC1945 の活動の大部分が、複数の脅威アクターにとって共通のリソースであるエンティティによって実行される可能性があります。例。それにもかかわらず、Mandiant は攻撃者に関するこの情報を公開して、詐欺行為に対する認識を高め、防御側が UNC2891 のさらなる操作を明らかにするのを支援します。

子供

次の YARA ルールは、適切なパフォーマンスを確保し、誤検知のリスクを制限するために、組織独自の内部テスト プロセスを通じて最初に検証することなく、運用システムで使用したり、ブロック ルールを通知したりすることを意図したものではありません。これらのルールは、サンプルを特定するためのハンティング作業の開始点として機能することを目的としていますが、マルウェア ファミリが変更された場合、時間の経過とともに調整が必要になる場合があります。

rule TINYSHELL

{

    meta:

        author = "Mandiant "

    strings:

        $sb1 = { C6 00 48 C6 4? ?? 49 C6 4? ?? 49 C6 4? ?? 4C C6 4? ?? 53 C6 4? ?? 45 C6 4? ?? 54 C6 4? ?? 3D C6 4? ?? 46 C6 4? ?? 00 }

        $sb2 = { C6 00 54 C6 4? ?? 4D C6 4? ?? 45 C6 4? ?? 3D C6 4? ?? 52 }

        $ss1 = "fork" ascii fullword wide

        $ss2 = "socket" ascii fullword wide

        $ss3 = "bind" ascii fullword wide

        $ss4 = "listen" ascii fullword wide

        $ss5 = "accept" ascii fullword wide

        $ss6 = "alarm" ascii fullword wide

        $ss7 = "shutdown" ascii fullword wide

        $ss8 = "creat" ascii fullword wide

        $ss9 = "write" ascii fullword wide

        $ss10 = "open" ascii fullword wide

        $ss11 = "read" ascii fullword wide

        $ss12 = "execl" ascii fullword wide

        $ss13 = "gethostbyname" ascii fullword wide

        $ss14 = "connect" ascii fullword wide

    condition:

        uint32(0) == 0x464c457f and 1 of ($sb*) and 10 of ($ss*)

}

rule TINYSHELL_SPARC

{

meta:

author = "Mandiant"

strings:

$sb_xor_1 = { DA 0A 80 0C 82 18 40 0D C2 2A 00 0B 96 02 E0 01 98 03 20 01 82 1B 20 04 80 A0 00 01 82 60 20 00 98 0B 00 01 C2 4A 00 0B 80 A0 60 00 32 BF FF F5 C2 0A 00 0B 81 C3 E0 08 }

$sb_xor_2 = { C6 4A 00 00 80 A0 E0 00 02 40 00 0B C8 0A 00 00 85 38 60 00 C4 09 40 02 84 18 80 04 C4 2A 00 00 82 00 60 01 80 A0 60 04 83 64 60 00 10 6F FF F5 90 02 20 01 81 C3 E0 08 }

condition:

uint32(0) == 0x464C457F and (uint16(0x10) & 0x0200 == 0x0200) and (uint16(0x12) & 0x0200 == 0x0200) and 1 of them

}

rule SLAPSTICK

{

meta:

author = "Mandiant "

strings:

$ss1 = "%Y %b %d %H:%M:%S x00"

$ss2 = "%-23s %-23s %-23sx00"

$ss3 = "%-23s %-23s %-23s %-23s %-23s %sx0ax00"

condition:

(uint32(0) == 0x464c457f) and all of them

}

rule STEELCORGI

{

meta:

author = "Mandiant "

strings:

$s1 = "x00xff/xffpxffrxffoxffcxff/xffsxffexfflxfffxff/xffexffxxffex00"

$s2 = "x00xff/xffvxffaxffrxff/xfflxffixffbxff/xffdxffbxffuxffsxff/xffmxffaxffcxffhxffixffnxffexff-xffixffdx00"

$sb1 = { FE 1B 7A DE 23 D1 E9 A1 1D 7F 9E C1 FD A4 }

$sb2 = { 3B 8D 4F 45 7C 4F 6A 6C D8 2F 1F B2 19 C4 45 6A 6A }

condition:

(uint32(0) == 0x464c457f) and all of them

}

侵害の痕跡

マルウェアファミリー

MD5

SHA1

SHA256

STEELCORGI

e5791e4d2b479ff1dfee983ca6221a53

e55514b83135c5804786fa6056c88988ea70e360

95964d669250f0ed161409b93f7a131bfa03ea302575d555d91ab5869391c278

STEELCORGI

0845835e18a3ed4057498250d30a11b1

c28366c3f29226cb2677d391d41e83f9c690caf7

7d587a5f6f36a74dcfbcbaecb2b0547fdf1ecdb034341f4cc7ae489f5b57a11d

STEELCORGI

d985de52b69b60aa08893185029bcb31

a3e75e2f700e449ebb62962b28b7c230790dc25d

cd06246aff527263e409dd779b517157882a1f5f74a84ad78b3b0c44d306bfc3

TINYSHELL

4ff6647c44b0417c80974b806b1fbcc3

fa36f10407ed5a6858bd1475d88dd35927492f52

55397addbea8e5efb8e6493f3bd1e99f9742ff4cfe0f0d3da7e92067904b5194

TINYSHELL

13f6601567523e6a37f131ef2ac4390b

4228d71c042d08840089895bfa6bd594b5299a89

24f459a2752175449939037d6a1da09cac0e414020ce9c48bcef47ec96e3587b

TINYSHELL

4e9967558cd042cac8b12f378db14259

018bfe5b9f34108424dd63365a14ab005e249fdd

5f46a25473b9dda834519093c66cced0e3630378c2a953ebd83f90f3777f2e19

STEELHOUND

a4617c9a4bde94e867f063c28d763766

097d3a15510c48cdb738344bdf00082e546827e8

161a2832baba6ff6f9f1b52ed8facfa1197cfc7947fe58152b3617a258cf52b0

MITRE ATT&CK

  • 発見:
    • T1016:システム ネットワーク構成の検出
    • T1018:リモート システム検出
    • T1049:システム ネットワーク接続の検出
    • T1082:システム情報検出
    • T1083:ファイルとディレクトリの検出
    • T1135:ネットワーク共有の検出
  • 横方向の動き:
    • T1021:リモート サービス
    • T1021.004:SSH
  • 資格情報へのアクセス:
    • T1003:OS クレデンシャルのダンプ
    • T1003.008:/etc/passwd および /etc/shadow
    • T1110:ブルートフォース
    • T1110.001:パスワード推測
    • T1552:セキュリティで保護されていない資格情報
    • T1552.003:バッシュ履歴
    • T1552.004:秘密鍵
    • T1556.003:プラグ可能な認証モジュール
  • コマンドと制御:
    • T1090:プロキシ
    • T1095:非アプリケーション層プロトコル
    • T1105:Ingress ツール転送
    • T1572:プロトコル トンネリング
    • T1573.001:対称暗号
  • 実行:
    • T1053.001:At (Linux)
    • T1059:コマンドおよびスクリプト インタープリター
    • T1059.004:Unix シェル
  • コレクション:
    • T1056.001:キーロギング
    • T1560:収集データのアーカイブ
    • T1560.001:ユーティリティによるアーカイブ
    • T1560.002:ライブラリ経由のアーカイブ
  • 防御回避:
    • T1014:ルートキット
    • T1027:難読化されたファイルまたは情報
    • T1070:ホストでのインジケータの削除
    • T1070.002:Linux または Mac のシステム ログをクリアする
    • T1070.004:ファイルの削除
    • T1070.006:タイムストンプ
    • T1140:ファイルまたは情報の難読化解除/デコード
    • T1480.001:環境キーイング
    • T1548.001:setuid と setgid
    • T1620:リフレクティブ コードの読み込み
  • 持続性:
    • T1543.002:Systemd サービス
    • T1547.006:カーネル モジュールと拡張機能

参考: https ://www.mandiant.com/resources/blog/unc2891-overview

Comments

Copied title and URL