悪魔的なデバッグの詳細に関する決定的な一式文書 – パート 1: PDB パスとマルウェア

マルウェア作成者の頭の中はどうなっているのだろうと思ったことはありませんか?彼らはどのようにツールを構築していますか?彼らは開発プロジェクトをどのように組織していますか?彼らはどのような種類のコンピュータとソフトウェアを使用していますか?私たちは、マルウェアのデバッグ情報を調査することで、これらの質問のいくつかに答えました。

マルウェアの開発者は、フォルダやコード プロジェクトにわかりやすい名前を付けており、多くの場合、開発中のマルウェアの機能を説明しています。したがって、シンボルのデバッグ情報を使用してマルウェア プロジェクトをコンパイルすると、これらのわかりやすい名前がPDB パスに表示されます。誰もがオリジン ストーリーを好みます。デバッグ情報は、マルウェア開発環境への洞察を与えてくれます。これは、マルウェアの一部がどこでどのように生まれたかについての小さいながらも重要な鍵穴です。新たに発見した洞察を使用して、PDB パスやその他のデバッグの詳細に基づいて、悪意のあるアクティビティを検出できます。

PDB パス、マルウェアとの関係、およびそれらが防御と攻撃の両方の操作でどのように役立つかについて、ツイートにヒントを得たマルチパート シリーズのパート 1 へようこそ。

ヒューマンコンピュータ規約

デジタルストレージシステムは私たちの世界に革命をもたらしましたが、保存されたデータを利用して効率的に取得するには、賢明に整理する必要があります.ユーザーはディレクトリを慎重に構成し、ファイルとフォルダに一意でわかりやすい名前を付けます。多くの場合、ユーザーはコンテンツに基づいてフォルダやファイルに名前を付けます。コンピュータは、データの種類、役割、および目的に基づいてデータにラベルを付け、注釈を付けることをユーザーに強制します。この人間とコンピューターの慣習は、ほとんどのデジタル コンテンツが、マルウェア ファイルを含む多くのファイルに存在する何らかの記述的な表面領域、または記述的な「機能」を持っていることを意味します。

FireEye はさまざまな角度から検出とハンティングに取り組んでいますが、FireEye の Advanced Practices チームでは、「弱いシグナル」に柔軟に対応することがよくあります。私たちは、単独では悪ではないマルウェアの機能を探すのが好きですが、有用であるほど一般的ではない、または独自のものです。ファイルオブジェクトやプロセスなどのデータのサブセットに奇妙または斬新な機能があることを示す「弱いシグナル」となる条件付きルールを作成します。これらの機能は、多くの場合、攻撃者の方法または手口の偶発的な結果であり、それぞれがマルウェア開発者または侵入オペレーターによって行われた意図的な選択を表しています。これらの機能のすべてがそこにあることを意図したわけではなく、防御側が気付くことを意図したものではありませんでした.これは特に、コンパイル プロセスの結果として記述できる PDB パスに当てはまります。これは、開発環境を記述するマルウェアに残されたツールマークです。

PDB

「シンボル ファイル」とも呼ばれるプログラム データベース (PDB) ファイルは、プログラムの個々のビルドに関するデバッグ情報を格納するためにコンパイル時に生成されます。 PDB には、シンボル、アドレス、関数とリソースの名前、およびプログラムをデバッグして例外またはエラーの正確な原因を見つけるのに役立つその他の情報が格納されます。

マルウェアはソフトウェアであり、マルウェア開発者はソフトウェア開発者です。他のソフトウェア開発者と同様に、マルウェアの作成者は多くの場合、コードをデバッグする必要があり、開発プロセスの一環として PDB を作成することになります。マルウェアのデバッグに時間を費やさないと、マルウェアが被害者のホストで正しく機能しないか、マルウェアとリモートで正常に通信できなくなるリスクがあります。

PDB パスはどのように作成されるか (鳥と PDB ?)

しかし、PDB はどのように作成され、プログラムに接続されるのでしょうか?悪名高い「スミラー」であるマルウェア開発者兼ブロガーの目を通して、1 つの PDB パスの形成を調べてみましょう。

Smiller には多くのプログラミング プロジェクトがあり、コンピューター上で適切にラベル付けされたフォルダー構造にそれらを整理しています。このプロジェクトは、HTML アプリケーション (HTA) ファイルに埋め込まれたシェルコード ローダー用であり、開発者は非常に論理的にフォルダーに格納します。

D:smillerprojectssuper_evil_stuffshellcode

 

HTML アプリケーション (HTA) ファイル内にシェルコードとランチャー実行可能ファイルを埋め込む単純な「テスト」プロジェクト コード ファイル「Program.cs」

図 1: シンプルな「テスト」プロジェクト コード ファイル「Program.cs」。HTML アプリケーション (HTA) ファイル内にシェルコードとランチャー実行可能ファイルが埋め込まれています。

 

悪意のある Visual Studio ソリューションの HtaDotnet と、それに対応する「Test」プロジェクト フォルダー (Windows エクスプローラーで表示)。フォルダとファイルの名前は、それらの機能を示唆しています

図 2: 悪意のある Visual Studio ソリューションの HtaDotnet と、それに対応する「Test」プロジェクト フォルダー (Windows エクスプローラーで表示)フォルダとファイルの名前は、それらの機能を示唆しています

次に、マルウェアの作成者は、Visual Studio の「テスト」プロジェクトをデフォルトの「デバッグ」構成でコンパイルし (図 3)、Test.exe と Test.pdb をサブフォルダーに書き出します (図 4)。

 

デフォルトのコンパイル構成の Visual Studio 出力

図 3: デフォルトのコンパイル構成の Visual Studio 出力

 

Test.exe と Test.pdb は、コード プロジェクト フォルダーの既定のサブフォルダーに書き込まれます。

図 4: Test.exe と Test.pdb は、コード プロジェクト フォルダーの既定のサブフォルダーに書き込まれます。

Test.pdb ファイル (図 5) には、ソース コード ファイルの元のパスへの参照と、デバッグに使用するその他のバイナリ情報が含まれています。

 

Test.pdb には、バイナリ デバッグ情報と、デバッグに使用する元のソース コード ファイルへの参照が含まれています。

図 5: Test.pdb には、バイナリ デバッグ情報と、デバッグに使用する元のソース コード ファイルへの参照が含まれています。

コンパイル中、リンカ プログラムは、デバッグ情報のタイプを指定するエントリをIMAGE_DEBUG_DIRECTORYに追加することにより、PDB ファイルをビルドされた実行可能ファイルに関連付けます。この場合、デバッグ タイプは CodeView であるため、PDB パスはファイルの IMAGE_DEBUG_TYPE_CODEVIEW 部分に埋め込まれます。これにより、デバッガーは Test.exe のデバッグ中に正しい PDB ファイル Test.pdb を見つけることができます。

 

PEview ユーティリティに示されている Test.exe。これにより、実行可能ファイルの IMAGE_DEBUG_TYPE_CODEVIEW セクションから PDB パスが簡単に解析されます。

図 6: PEview ユーティリティで表示された Test.exe。これにより、実行可能ファイルの IMAGE_DEBUG_TYPE_CODEVIEW セクションから PDB パスが簡単に解析されます。

CodeView デバッグ情報の PDB パス

CodeView 構造体

デバッグ情報の正確な形式は、コンパイラとリンカ、およびソフトウェア開発ツールの最新性によって異なる場合があります。 CodeView デバッグ情報は、次の構造の IMAGE_DEBUG_TYPE_CODEVIEW に格納されます。

タイプ

説明

DWORD

「RSDS」ヘッダー

GUID

16 バイトのグローバル一意識別子

DWORD

「年齢」(リビジョンの増分)

バイト

PDB パス、null で終了

図 7: CodeView デバッグ ディレクトリ情報の構造

完全な PDB パスと部分的な PDB パス

通常、CodeView PDB パスには 2 つのバケットがあります。それらは完全修飾ディレクトリ パスであり、部分修飾パスであり、PDB ファイルの名前のみを指定します。どちらの場合も、デバッガーがプログラムの正しい PDB を見つけられるように、拡張子が .pdb の PDB ファイルの名前が含まれています。

部分的に修飾された PDB パスは、次のような PDB ファイル名のみをリストします。

テスト.pdb

完全修飾PDB パスは通常、次のようなボリューム ドライブ文字と PDB ファイル名へのディレクトリ パスで始まります。

D:smillerprojectssuper_evil_stuffshellcodeTestobjDebugTest.pdb

通常、ネイティブ Windows 実行可能ファイルは、部分修飾された PDB パスを使用します。これは、デバッグ PDB ファイルの多くがMicrosoft パブリック シンボル サーバーで公開されているためです。そのため、シンボル パス(PDB パス) では完全修飾パスは不要です。この調査では、主に完全修飾 PDB パスを調べます。

マルウェアの PDB パスの調査

APT41 への無数の接続を持つOperation Shadowhammerでは、1 つのサンプルに単純でわかりやすい PDB パス「 D:C++AsusShellCodeReleaseAsusShellCode.pdb 」がありました。

ネーミングは完全に理にかなっています。このマルウェアは、Asus Corporation のソフトウェアになりすますことを目的としており、マルウェアの役割はシェルコードでした。マルウェアの開発者は、マルウェア自体の機能と役割にちなんでプロジェクトに名前を付けました。

デジタル データの性質が開発者にこれらの命名規則を強制することを受け入れるならば、これらの規則は他の攻撃者、マルウェア ファミリ、および侵入操作にも当てはまると考えました。 FireEye の Advanced Practices チームは、侵入セットの一見無害な機能を取り上げて、これらの機能の良い点、悪い点、醜い点を判断するのが大好きです。何が正常で何が異常か?世界的に普及しているものと希少なものは何ですか?マルウェアの作成者は、マルウェア以外の開発者が行っていることとは異なり、何を行っていますか?どのような仮定を立てて測定できますか?

好奇心に任せて、CodeView デバッグ情報構造を正規表現に適合させ (図 8)、Yara ルールを開発して (図 9)、データ セットを調査しました。これにより、共通点を特定し、PDB パス文字列内の機能のみに基づいて、どの攻撃者とマルウェア ファミリが「検出可能」であるかを確認できました。

 

特定のキーワードを含めるための、実行可能ファイル内の PDB7 デバッグ情報の Perl 互換正規表現 (PCRE) 適応

図 8: Perl 互換の正規表現 (PCRE) による、実行可能ファイル内の PDB7 デバッグ情報の適応による特定のキーワードの組み込み

 

キーワードに一致する PDB ファイルを含む実行可能ファイルを検索するテンプレート Yara ルール

図 9: キーワードに一致する PDB ファイルを含む実行可能ファイルを検索するテンプレート Yara ルール

PDB パス ショーケース: マルウェアの命名規則

インシデント対応とマルウェア コーパスで 1,000 万以上のサンプルを調査したところ、さまざまなソース、被害者、影響を受けた地域、影響を受けた業界、攻撃者の動機を超えていると思われる一般的な PDB パス キーワードが多数見つかりました。マルウェア開発者の共通点の広範な範囲を明確にするために、いくつかのより強力なキーワードと PDB パスの例を詳しく説明し、少なくとも 1 つのサンプルに該当するキーワードが含まれている代表的なマルウェア ファミリと脅威グループを示します。

パスの例と、表されたマルウェア ファミリおよびグループは、すべてのデータ セットから選択したものであり、必ずしも相互に相関、クラスタ化、または関連しているわけではないことに注意してください。これは、キーワードを含む PDB パスが広く存在すること、およびマルウェア開発者が、起源、標的、および動機に関係なく、命名に同じ単語を使用することが多いことを説明することを目的としています。この共通性により、マルウェアの表面領域が拡大し、検出とハンティングの新しい機会がもたらされると考えています。

PDBパスキーワードの普及率

xFFDebugMy SourceHashDumpReleaseinjectLsa.pdb

キーワード

観察された家族とグループ

PDB パスの例

アンチ

RUNBACK、HANDSTAMP、LOKIBOT、NETWIRE、DARKMOON、PHOTO、RAWHIDE、DUCKFAT、HIGHNOON、DEEPOCEAN、SOGU、CANNOFODDER
APT10、APT24、APT41、UNC589、UNC824、UNC969、UNC765

H:RbDoorAnti_winmmAppInitAppInitReleaseAppInit.pdb

攻撃

MINIASP、SANNY、DIRTCHEAP、ORCUSRAT
APT1、UNC776、UNC251。 UNC1131

E:CAttackmini_asp-0615attackMiniAsp3ReleaseMiniAsp.pdb

バックドア

パックマン、サウンドウェーブ、フォト、ワイナラック、デュアルガン

APT41、APT34、APT37、UNC52、UNC1131、APT40

Y:Hackbackdoor-exe-attacktempUAC_Elevatedwin32UAC_Elevated.pdb

練る

SCREENBIND、SEEGAP、CABLECAR、UPDATESEE、SEEDOOR、TURNEDUP、CABROCK、YABROD、FOXHOLE

UNC373、UNC510、UNC875、APT36、APT33、APT5、UNC822

C:Documents and Settingsss桌面tlsscrbindbindReleasebind.pdb

バイパス

POSHC2、FIRESHADOW、FLOWERPOT、RYUK、HAYMAKER、UPCONTROL、PHOTO、BEACON、SOGU

APT10、APT34、APT21、UNC1289、UNC1450

C:Documents and SettingsAdministrator桌面BypassUAC.VS2010ReleaseGo.pdb

ダウンローダ

SPICYBEAN、GOOSEDOWN、ANTFARM、BUGJUICE、ENFAL、SOURFACE、KASPER、ELMER、TWOBALL、KIBBLEBITS

APT28、UNC1354、UNC1077、UNC27、UNC653、UNC1180、UNC1031

Z:projectsvs 2012Inst DWN and DWN XPdownloader_dll_http_mtfsReleasedownloader_dll_http_mtfs.pdb

スポイト

シタデル、フィドルログ、スウィフトキック、ケイスライス、フォームブック、エモテット、サニー、フィドルウッド、ダークニューロン、ウルスニフ、ランオフ

UNC776、UNC1095、APT29、APT36、UNC964、UNC1437、UNC849

D:TaskDDE AttackDropper_OriginalReleaseDropper.pdb

搾取する

トリックボット、ランバック、パンチアウト、カナート、オゾンラット

UNC1030、APT39、APT34、FIN6

w:modulesexploitslittletoolsagent_wrapperrelease
12345678901234567890123456789012345678wrapper3.pdb

火災の影

UNC1172、APT39、UNC822

D:WorkProjectVShouseAppleApple_20180115ReleaseFakeRun.pdb

くそ

トリックボット、シリアル、クリプトナイト、スーパーマン

APT17、UNC208、UNC276

E:CODEProject Files110505_LEVNOhardCODEAnyRat Fuck All’sUIbinFuckAll.pdb

ハック

PHOTO、KILLDEVIL、NETWIRE、PACMAN、BADSIGN、TRESOCHO、BADGUEST、GH0ST、VIPSHELL

UNC1152、APT40、UNC78、UNC874、UNC52、UNC502、APT33、APT8

C:UsersAlienware.DESKTOP-MKL3QDNDocumentsHackermemorygrabber – IDmemorygrabberobjx86Debugvshost.pdb

隠れる

FRESHAIR、DIRTYWORD、GH0ST、DARKMOON、FIELDGOAL、RAWHIDE、DLLDOOR、TRICKBOT、008S、JAMBOX、SOGU、CANDYSHELL

APT26、APT40、UNC213、APT26、UNC44、UNC53、UNC282

c:winddk01.18002work非表示ポートi386HidePort.pdb

ギアシフト、METASTAGE、FASTPOS、HANDSTAMP、FON、CLASSFON、WATERFAIRY、RATVERMIN

UNC842、UNC1197、UNC1040、UNC969

D:รายงานC++ & D3D & Hook & VB.NET & PROJECTVisual Studio 2010CodeMaster OnlyThInject_Win32_2Inject Win32Inject Win32ReleaseOLT_PBFREE.pdb

注入する

SKNET、KOADIC、ISMAGENT、FULLTRUNK、ZZINJECT、ENFAL、RANSACK、GEARSHIFT、LOCKLOAD、WHIPSNAP、BEACON、CABROCK、HIGHNOON、DETECT、THREESNEAK、FOXHOLE

UNC606、APT10、APT34、APT41、UNC373、APT31、APT34、APT19、APT1、UNC82、UNC1168、UNC1149、UNC575

E:

inject

 

SKNET, KOADIC, ISMAGENT, FULLTRUNK, ZZINJECT, ENFAL, RANSACK, GEARSHIFT, LOCKLOAD, WHIPSNAP, BEACON, CABROCK, HIGHNOON, DETECT, THREESNEAK, FOXHOLE

UNC606, APT10, APT34, APT41, UNC373, APT31, APT34, APT19, APT1, UNC82, UNC1168, UNC1149, UNC575

E:xFFDebugMy SourceHashDumpReleaseinjectLsa.pdb

インストール

FIRESHADOW、SCRAPMINT、BRIGHTCOMB、WINERACK、SLUDGENUDGE、ANCHOR、EXCHAIN、KIBBLEBITS、ENFAL、DANCEPARTY、SLIMEGRIME、DRABCUBE、EXCHAIN、DIMWIT、THREESNEAK、GOOGONE、STEW、LOWLIGHT、QUASIFOUR、CANNONFODDER、EASYCHAIR、ONETOFOUR、DEEPOCEAN、BRIGHTCREST、LUMBERJACKエビルトス、ブライトシアン、北京ダック、サイドビュー、ボスネイル

UNC869、UNC385、UNC228、APT5、UNC229、APT26、APT37、UNC432、APT18、UNC27、APT6、UNC1172、UNC593、UNC451、UNC875、UNC53

i:LIE_SHOUURL_CURUN-AinstallerReleasejet.pdb

キーログ

LIMITLESS、ZZDROP、WAVEKEY、FIDDLEKEYS、SKIDHOOK、HAWKEYE、BEACON、DIZZYLOG、SOUNDWAVE

APT37、UNC82、UNC1095、APT1、APT40

D:TASKProgamsByMe(2015.1~)MyWorkRelative BackdoorKeyLogger_ScreenCap_ManagerReleaseSoundRec.pdb

ペイロード

POSHC2、SHAKTI、LIMITLESS、RANSACK、CATRUNNER、BREAKDANCE、DARKMOON、METERPRETER、DARMA、GAMEFISH、RAWHIDE、LIGHTPOKE

UNC915、UNC632、UNC1149、APT28、UNC878

C:UsersWIN-2-ViHKwdGJ574HDesktopNSAPayloadswindows サービス cppReleaseCppWindowsService.pdb

シェル

SOGU、RANSACK、CARBANAK、BLACKCOFFEE、SIDEWINDER、PHOTO、SHIMSHINE、PILLOWMINT、POSHC2、PI、METASTAGE、GH0ST、VIPSHELL、GAUSS、DRABCUBE、FINDLOCK、NEDDYSHELL、MONOPOD、FIREPIPE、URSNIF、KAYSLICE、DEEPOCEAN、EIGHTONE、DAYJOB、EXCALIBUR、ナイスキャッチ

UNC48、UNC1225、APT17、UNC1149、APT35、UNC251、UNC521、UNC8、UNC849、UNC1428、UNC1374、UNC53、UNC1215、UNC964、UNC1217、APT3、UNC671、UNC757、UNC753、APT10、APT34、APT34、UNC189 UNC1559

E:windowsdropperNewDebugtestShellcode.pdb

寝る

ウルスニフ、カーバナック、ピローミント、シムシャイン、アイスディッド

FIN7

O:misc_srcrelease_priv_aut_v2.2_sleep_DATEmy
srcsdb_test_dllx64Releasesdb_test.pdb

スパイ

DUSTYSKY、OFFTRACK、SCRAPMINT、FINSPY、LOCKLOAD、WINDOLLAR

FIN7、UNC583、UNC822、UNC1120

G:developmentWinspyntsvc32-93-01-05x64Releasentsvcst32.pdb

トロイの木馬

ENFAL、IMMINENTMONITOR、MSRIP、GH0ST、LITRECOLA、DIMWIT

UNC1373、UNC366、APT19、UNC1352、UNC27、APT1、UNC981、UNC581、UNC1559

e:workprojectstrojanclientdlli386Client.pdb

図 10: 観察されたグループとマルウェア ファミリを含む PDB パスの一般的なキーワードの選択と例

PDB パス ショーケース: 疑わしい開発者環境用語

マルウェアを説明するために通常使用されるキーワードは危険信号を発するほど強力ですが、PDB パスには、実行可能ファイルが非エンタープライズ設定でコンパイルされていることを示す可能性のある一般的な用語や機能が他にもあります。たとえば、「Users」ディレクトリを含む PDB パスは、実行可能ファイルが Windows Vista/7/10 でコンパイルされた可能性が高く、「公式」または「商用」開発環境を表していない可能性が高いことを示しています。 「ユーザー」という用語は「シェルコード」よりもはるかに弱いか忠実度が低くなりますが、以下に示すように、これらの用語は実際に多くのマルウェアに存在し、弱い検出信号に使用できます.

PDBパス用語の普及率

学期

観察された家族とグループ

PDB パスの例

ユーザー

ABBEYROAD、AGENTTESLA、ANTFARM、AURORA、BEACON、BLACKDOG、BLACKREMOTE、BLACKSHADESRAT、BREAKDANCE、BROKEYOLK、BUSYFIB、CAMUBOT、CARDCAM、CATNAP、CHILDSPLAY、CITADEL、CROSSWALK、CURVEBALL、DARKCOMET、DARKMOON、DESERTFALCON、DESERTKATZOT、DISPKILL、EM、DIZZELOG、 FIDDLEWOOD、FIVERINGS、FLATTOP、FLUXXY、FOOTMOUSE、FORMBOOK、GOLDENCAT、GROK、GZIPDE、HAWKEYE、HIDDENTEAR、HIGHNOTE、HKDOOR、ICEDID、ICEFOG、ISMAGENT、KASPER、KOADIC、LUKEWARM、LUXNET、MOONRAT、NANOCORE、NETGRAIL、NJRAT、NUTSHELL、 ONETOFOUR、ORCUSRAT、POISONIVY、POSHC2、QUASARRAT、QUICKHOARD、RADMIN、RANSACK、RAWHIDE、REMCOS、REVENGERAT、RYUK、SANDPIPE、SANDTRAP、SCREENTIME、SEEDOOR、SHADOWTECH、SILENTBYTES、SKIDHOOK、SLIMCAT、SLOWROLL、SOGU、SOREGUT、SOURCANDLE、TREASUREH TRENDCLOUD、TRESOCHO、TRICKBOT、TRIK、TROCHILUS、TURNEDUP、TWINSERVE、UPCONTROL、UPDATESEE、URSNIF、WATERFAIRY、XHUNTER、XRAT、ZEUS

APT5、APT10、APT17、APT33、APT34、APT35、APT36、APT37、APT39、APT40、APT41、FIN6、UNC284、UNC347、UNC373、UNC432、UNC632、UNC718、UNC757、UNC791、UNC824、UNC875、UNC1024、19、1 UNC1152、UNC1197、UNC1289、UNC1295、UNC1340、UNC1352、UNC1354、UNC1374、UNC1406、UNC1450、UNC1486、UNC1507、UNC1516、UNC1534、UNC1545、UNC1562

C:UsersYousefDesktopMergeFilesLoader v0LoaderobjReleaseLoader.pdb

コンソール アプリケーション

Windows アプリケーション

Windowsフォームアプリケーション

(Visual Studio の既定のプロジェクト名)

CROSSWALK、DESERTKATZ、DIZZYLOG、FIREPIPE、HIGHPRIST、HOUDINI、HTRAN、KICKBACK、LUKEWARM、MOONRAT、NIGHTOWL、NJRAT、ORCUSRAT、REDZONE、REVENGERAT、RYUK、SEEDOOR、SLOAD、SOGU、TRICKBOT、TRICKSHOW

APT1、APT34、APT36、FIN6、UNC251、UNC729、UNC1078、UNC1147、UNC1172、UNC1267、UNC1277、UNC1289、UNC1295、UNC1340、UNC1470、UNC1507

D:ProjectsByPassAVConsoleApplication1
ReleaseConsoleApplication1.pdb

新しいフォルダ

HOMEUNIX、KASPER、MOONRAT、NANOCORE、NETWIRE、OZONERAT、POISONIVY、ROW、SKIDHOOK、TRICKBOT、TURNEDUP、URLZONE

APT18、APT33、APT36、UNC53、UNC74、UNC672、UNC718、UNC1030、UNC1289、UNC1340、UNC1559

c:UsersUSADocumentsVisual Studio 2008ProjectsNew Folder (2)kasperReleasekasper.pdb

コピー

DESERTFALCON、KASPER、NJRAT、RYUK、SOGU

UNC124、UNC718、UNC757、UNC1065、UNC1215、UNC1225、UNC1289

D:dll_Mc2.1mc.4.4.2 xorzhudll_Mc – コピーReleaseshellcode.pdb

デスクトップ

AGENTTESLA、AVEO、BEACON、BUSYFIB、CHILDSPLAY、COATHOOK、DESERTKATZ、FIVERINGS、FLATTOP、FORMBOOK、GH0ST、GOLDENCAT、HIGHNOTE、HTRAN、IMMINENTMONITOR、KASPER、KOADIC、LUXNET、MOONRAT、NANOCORE、NETWIRE、NUTSHELL、ORCUSRAT、RANSACK、RUNBACK、 SEEDOOR、SKIDHOOK、SLIMCAT、SLOWROLL、SOGU、TIERNULL、TINYNUKE、TRICKBOT、TRIK、TROCHILUS、TURNEDUP、UPDATESEE、WASHBOARD、WATERFAIRY、XRAT

APT5、APT17、APT26、APT33、APT34、APT35、APT36、APT41、UNC53、UNC276、UNC308、UNC373、UNC534、UNC551、UNC572、UNC672、UNC718、UNC757、UNC791、UNC824、UNC875、UNC1124、UNC115 2 UNC115

C:UsersDevelop_MMDesktopsc_loader
リリースsc_loader.pdb

図 11: PDB パス内の一般的な用語の選択と、観察されたグループおよびマルウェア ファミリと例

PDB パス ショーケース: 異常の調査

キーワードと用語以外に、将来の調査と検出の機会にとって興味深い可能性があるいくつかの珍しい (私たちにとって) 機能を発見しました。

非ASCII文字

ASCII 以外の文字を含む PDB パスでは、データセット内のマルウェアと非マルウェアの比率が高くなります。このシグナルの強さは、当社のマルウェア コーパスとクライアント ベースのデータ バイアスによるものです。ただし、このデータ バイアスが一貫している場合は、PDB パスに非 ASCII 文字が存在することを、実行可能ファイルをさらに精査する必要があるというシグナルとして使用できます。主に ASCII の世界で活動している組織では、これが強力なシグナルになると考えています。以下に、このテクニックのロジックを Yara で表現します。

規則 ConventionEngine_Anomaly_NonAscii
{
メタ:
著者 = “@stvemillertime”
文字列:
$pcre = /RSDS[x00-xFF]{20}[a-zA-Z]:[x00-xFF]{0,500}[^x00-x7F]{1,}[x00 -xFF]{0,500}.pdbx00/
調子:
(uint16(0) == 0x5A4D) および uint32(uint32(0x3C)) == 0x00004550 および $pcre
}

1 つのファイル内の複数のパス

コンパイルされた各プログラムには、1 つの PDB パスのみが必要です。 1 つのオブジェクトに複数の PDB パスが存在することは、オブジェクトにサブファイル実行可能ファイルがあることを示します。このことから、親オブジェクトには他のファイルを「ドロップ」または「インストール」する機能があると推測できます。ドロッパーまたはインストーラーであること自体は悪意のあるものではありませんが、これらの分類をファイル オブジェクトに適用する別の方法を用意しておくと、悪意のあるアクティビティを明らかにするのに役立つ場合があります。この例では、Yara を使用してこの機能を検索することもできます。

規則 ConventionEngine_Anomaly_MultiPDB_Triple
{
メタ:
著者 = “@stvemillertime”
文字列:
$anchor = “RSDS”
$pcre = /RSDS[x00-xFF]{20}[a-zA-Z]:[x00-xFF]{0,200}.pdbx00/
調子:
(uint16(0) == 0x5A4D) および uint32(uint32(0x3C)) == 0x00004550 および #anchor == 3 および #pcre == 3
}

デバッグ セクションの外

ファイルがコンパイルされると、デバッグ情報のエントリは IMAGE_DEBUG_DIRECTORY にあります。 1 つのファイルで複数の PDB パスを確認する場合と同様に、デバッグ ディレクトリを持たない実行可能ファイル内にデバッグ情報が表示される場合、そのファイルにはサブファイル実行可能ファイルが含まれており、ドロッパーまたはインストーラー機能が含まれている可能性が高いと推測できます。このルールでは、 Yara の便利な PE モジュールを使用して、IMAGE_DIRECTORY_ENTRY_DEBUG エントリの相対仮想アドレス (RVA) をチェックします。それがゼロの場合、デバッグ エントリが存在しないと推定できるため、CodeView PDB パスの存在は、サブファイルです。

規則 ConventionEngine_Anomaly_OutsideOfDebug
{
メタ:
著者 = “@stvemillertime”
description = “PDB パスのキーワード、用語、または異常を含む PE ファイルを検索しています。”
文字列:
$anchor = “RSDS”
$pcre = /RSDS[x00-xFF]{20}[a-zA-Z]:[x00-xFF]{0,200}.pdbx00/
調子:
(uint16(0) == 0x5A4D) および uint32(uint32(0x3C)) == 0x00004550 および $anchor および $pcre および pe.data_directories[pe.IMAGE_DIRECTORY_ENTRY_DEBUG].virtual_address == 0
}

無効化された PDB パス

典型的な CodeView セクションでは、「RSDS」ヘッダー、16 バイトの GUID、4 バイトの「age」、そして PDB パス文字列が表示されます。ただし、埋め込まれた PDB パス領域が無効になっているマルウェア サンプルが多数確認されています。この例では、CodeView のデバッグ構造を簡単に確認できます。これは、ヘッダー、GUID、および年齢で構成され、セグメントの最後まで null が続きます。

00147880: 52 53 44 53 18 c8 03 4e 8c 0c 4f 46 be b2 ed 9e : RSDS …N..OF….
00147890: c1 9f a3 f4 01 00 00 00 00 00 00 00 00 00 00 00 : ……………..
001478a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ……
001478b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ……
001478c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ……

CodeView PDB パスを無効にする方法と理由にはいくつかの可能性がありますが、意図的な改ざんの場合、ツールマークを削除する目的で PDB パスを手動で x00 で上書きするのが最も簡単な方法です。 16 進エディタを介して手動で編集および上書きするリスクは、それを行うのが面倒であり、チェックサム エラーなどの他の静的な異常が発生する可能性があることです。

次に簡単な方法は、実行可能ファイルからデバッグ アーティファクトを消去するように設計されたユーティリティを使用することです。この顕著な例の 1 つが「 peupdate 」です。これは、PDB パス情報を削除または作成するだけでなく、チェックサムを再計算し、Rich ヘッダーを削除することもできます。以下に、peupdate を使用して PDB パスをクリアする方法を示します。

 

peupdate を使用してマルウェアのサンプルから PDB パス情報をクリアする

図 12: peupdate を使用してマルウェアのサンプルから PDB パス情報をクリアする

 

PEview ユーティリティに示されているように、peupdate は改ざんされたマルウェアです。 CodeView セクションはまだ存在していますが、PDB パスの値は消去されています。

図 13: PEview ユーティリティに表示された peupdate 改ざんされたマルウェア。 CodeView セクションはまだ存在していますが、PDB パスの値は消去されています。

PDBパスの異常発生率

異常

観察された家族とグループ

非ASCII文字

008S、AGENTTESLA、BADSIGN、ベーグルバイト、BIRDSEED、BLACKCOFFEE、CANNONFODDER、CARDDROP、CEREAL、CHILDSPLAY、COATHOOK、CURVEBALL、DANCEPARTY、DIMWIT、DIZZYLOG、EARTHWORM、EIGHTONE、ELISE、ELKNOT、ENFAL、EXCHAIN、FANNYPACK、FLOWERPOT、FREELOAD、GH0ST、 GINGERYUM、GLASSFLAW、GLOOXMAIL、GOLDENCAT、GOOGHARD、GOOGONE、HANDSTAMP、HELLWOOD、HIGHNOON、ICEFOG、ISHELLYAHOO、JAMBOX、JIMA、KRYPTONITE、LIGHTSERVER、LOCKLOAD、LOKIBOT、LOWLIGHT、METASTAGE、NETWIRE、PACMAN、PARITE、POISONIVY、PIEDPIPER、PINKTRIP、 PLAYNICE、QUASARRAT、REDZONE、SCREENBIND、SHADOWMASK、SHORTLEASH、SIDEWINDER、SLIMEGRIME、SOGU、SUPERMAN、SWEETBASIL、TEMPFUN、TRAVELNET、TROCHILUS、URSNIF、VIPER、VIPSHELL
APT1、APT2、APT3、APT5、APT6、APT9、APT10、APT14、APT17、APT18、APT20、APT21、APT23、APT24、APT24、APT24、APT26、APT31、APT33、APT41、UNC20、UNC27、UNC39、UNC53、UNC74、 UNC78、UNC1040、UNC1078、UNC1172、UNC1486、UNC156、UNC208、UNC229、UNC237、UNC276、UNC293、UNC366、UNC373、UNC451、UNC454、UNC521、UNC542、UNC551、UNC565、UNC565、UNC565、UNC565、UNC565、UNC565、UNC565、UNC565、 UNC969

I:RControl小工具3判断加载着Release判断加载着.pdb

単一ファイル内のマルチパス

AGENTTESLA、BANKSHOT、BEACON、BIRDSEED、BLACKBELT、BRIGHTCOMB、BUGJUICE、CAMUBOT、CARDDROP、CETTRA、CHIPSHOT、COOKIECLOG、CURVEBALL、DARKMOON、DESERTFALCON、DIMWIT、ELISE、EXTRAMAYO、FIDDLELOG、FIDDLEWOOD、FLUXXY、FON、GEARSHIFT、GHOST、HANDSTAMP、 HAWKEYE、HIGHNOON、HIKIT、ICEFOG、IMMINENTMONITOR、ISMAGENT、KASPER、KAZYBOT、LIMITLESS、LOKIBOT、LUMBERJACK、MOONRAT、ORCUSRAT、PLANEDOWN、PLANEPATCH、POSEIDON、POSHC2、PUBNUBRAT、PUPYRAT、QUASARRAT、RABBITHOLE、RATVERMINUK、RAWHIDE、REDTAPE、RYTAPE SAKABOTA、SAMAS、SAMAS、SEEGAP、SEEKEYS、SKIDHOOK、SOGU、SWEETCANDLE、SWEETTEA、TRAVELNET、TRICKBOT、TROCHILUS、UPCONTROL、UPDATESEE、UROBUROS、WASHBOARD、WHITEWALK、WINERACK、XTREMERAT、ZXSHELL

APT1、APT2、APT17、APT5、APT20、APT21、APT26、APT34、APT36、APT37、APT40、APT41、UNC27、UNC53、UNC218、UNC251、UNC432、UNC521、UNC718、UNC776、UNC875、UNC878、UNC969、UNC1040 UNC1065、UNC1092、UNC1095、UNC1166、UNC1183、UNC1289、UNC1374、UNC1443、UNC1450、UNC1495

TRICKBOT の単一サンプル:

D:MyProjectsspreaderReleasespreader_x86.pdb
D:MyProjectsspreaderReleasessExecutor_x86.pdb
D:MyProjectsspreaderReleasescreenLocker_x86.pdb

デバッグ セクションの外側

ABBEYROAD、AGENTTESLA、BEACON、BLACKSHADESRAT、CHIMNEYDIP、CITADEL、COOKIECLOG、COREBOT、CRACKSHOT、DAYJOB、DIRTCHEAP、DIZZYLOG、DUSTYSKY、EARTHWORM、EIGHTONE、ELISE、EXTRAMAYO、FRONTWHEEL、GELCAPSULE、GHOST、HAWKEYE、HIGHNOON、KAYSLICE、LEADPE METASTAGE、METERPRETER、MURKYTOP、NUTSHELL、ORCUSRAT、OUTLOOKDUMP、PACMAN、POISONIVY、PLANEPATCH、PONY、PUPYRAT、RATVERMIN、SAKABOTA、SANDTRAP、SEADADDY、SEEDOOR、SHORTLEASH、SOGU、SOULBOT、TERA、TIXKEYS、UPCONTROL、WHIPSNAP、WHITEWALK、XDOOR、 XTUNNEL

APT5、APT6、APT9、APT10、APT17、APT22、APT24、APT26、APT27、APT29、APT30、APT34、APT35、APT36、APT37、APT40、APT41、UNC20、UNC27、UNC39、UNC53、UNC69、UNC74、UNC105、UNC124、 UNC125、UNC147、UNC213、UNC215、UNC218、UNC227、UNC251、UNC276、UNC282、UNC307、UNC308、UNC347、UNC407、UNC565、UNC583、UNC587、UNC589、UNC631、UNC718、UNC718、UNC775、UNC775、UNC779 UNC875、UNC875、UNC924、UNC1040、UNC1080、UNC1148、UNC1152、UNC1225、UNC1251、UNC1428、UNC1450、UNC1486、UNC1575

無効化された PDB パス

HIGHNOON、SANNY、PHOTO、TERA、SOYSAUCE、VIPER、FIDDLEWOOD、BLACKDOG、FLUSHSHOW、NJRAT、LONGCUT

APT41、UNC776、UNC229、UNC177、UNC1267、UNC878、UNC1511

図 14: 観察されたグループとマルウェア ファミリを含む PDB パスの異常の選択と例

PDB パス ショーケース: 異常値、奇妙さ、例外、その他の悪ふざけ

インターネットは奇妙な場所であり、十分な規模で、思いもよらなかったものを見ることになります。規範から逸脱するもの、基準を逸脱するもの、まったく説明を無視するもの。私たちは、PDB パスが特定の方法で見えることを期待していますが、そうではないいくつかのサンプルに出くわしました。その理由は必ずしもわかりません.以下のサンプルの多くは、エラー、破損、難読化、またはさまざまな形式の意図的な操作の結果である可能性があります。ここでデモンストレーションを行っているのは、PDB パスの解析または検出を試みる場合、実際に存在するさまざまなパスを理解し、大量の悪ふざけに備える必要があることを示すためです。これらの各例は、確認済みのマルウェア サンプルからのものです。

シェナニガン

PDB パスの例

ユニコードエラー

テキスト パス: C^UsersDELLDesktopinterne.2.pdb

生のパス: 435E5C55 73657273 5C44454C 4C5C4465 736B746F 705C696E 7465726E 6598322E 706462

テキスト パス: CjUsershacker messanDesktoServer111.pdb

生のパス: 436A5C55 73657273 5C686163 6B657220 6D657373 616E5C44 65736B74 6FA05C53 65727665 72313131 2E706462

宇宙以外の何物でもない

テキスト パス:

Full Raw: 52534453 7A7F54BF BAC9DE45 89DC995F F09D2327 0A000000 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202000

間隔をあけて

テキスト パス: D: .pdb

フル生: 52534453 A7FBBBFE 5C41A545 896EF92F 71CD1F08 01000000 443A5C20 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20 4 2E 7 20 20

Nothin’ but null

テキスト パス: <null バイトのみ>

完全な生: 52534453 97272434 3BACFA42 B2DAEE99 FAB00902 01000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000

ランダムな文字

テキスト パス: Lmd9knkjasdLmd9knkjasLmd9knkAaGc.pdb

ランダムパス

テキスト パス: G:givgLxNzKzUtTcyaxiavDCiubGGiYrcoQNfWgtSsauaXaWyjgmPqd.pdb

ワードスープ

テキスト パス: c:BusymoleculeBlueValleySteelKingenemyHimyard.pdb

混合ダブルス

テキスト パス: C::QQQQQQQQVVVVVVVVVVVVVVVV.pdb

短い

テキスト パス: 1.pdb

いいえ.pdb

テキストパス: a

完全な生: 52534453 ED86CA3D 6C677946 822E668F F48B0F9D 01000000 6100

長くて奇妙で、繰り返される文字

テキストパス: ªªªªªªªªªªªªªªªªªªªªªªªtinjsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaae.pdb

Full Raw: 52534453 DD947C2F 6B32544C 8C3ACB2E C7C39F45 01000000 AAAAAAAA AAAAAAAA AAAAAAAA AAAAAAAA AAAAAAAA 74696E6A 735C6161 61616161 61616161 61616161 61616161 61616161 61616161 61616161 61616161 61616161 61616161 61616161 61616161 61616161 61616161 61616161 61616161 61616161 61616161 61616161 652E7064 6200

わからない

テキスト パス: n:.Lí..×ÖòÒ.

完全未加工: 52534453 5A2D831D CB4DCF1E 4A05F51B 94992AA0 B7CFEE32 6E3AAD4C ED1A1DD7 D6F2D29E 00

スラッシュとドライブ文字なし

テキスト パス: /Users/user/Documents/GitHub/SharpWMI/SharpWMI/obj/Debug/SharpWMI.pdb

ネットワーク共有

テキスト パス:

vmware-host共有フォルダDecrypterDecrypterobjReleaseDecrypter.pdb

非ラテン語のドライブ文字

これはまだ見ていませんが、絵文字をドライブ文字として使用できるようになるのは時間の問題です。

図 15: PDB パスの悪ふざけの選択と例

Nerf Herders と Elite Operators の間

すべての攻撃者が侵入操作に成功したとしても、頂点の攻撃者とその他の攻撃者の間には多くの違いがあります。一部のキャンペーンで適切な OPSEC を使用しているグループが、他のキャンペーンでは不適切な OPSEC を使用している可能性があります。 APT36 には何百もの漏えいした PDB パスがあり、APT30 には最小限の PDB パス フットプリントがあり、APT38 はゴーストです。

PDB パスが存在する場合、PDB パスに存在するキーワード、用語、およびその他の文字列項目の種類はすべて、プロフェッショナリズムと洗練のスペクトル上にあります。一方の端には「 njRAT-FUD 0.3 」と「 1337 h4ckbot 」が表示され、もう一方の端には「 minidionis 」と「 msrstd 」が表示されます。

文字列ベースの検出に対するトレンディな批判は、次のようなものです。彼らはあなたのナイーブで脆弱な署名を難読化し、回避します。」上記の PDB パス キーワード、用語、および例外の表では、正真正銘の APT/FIN グループ、国家が支援する敵対者、および最善を尽くした攻撃者が、時々失敗して、発見のチャンス。

いくつかのより高度な脅威グループのブティック マルウェアの具体的な例をいくつか挙げてみましょう。

方程式グループ

いくつかの Equation Group のサンプルは、完全な PDB パスを示しており、一部のマルウェアが、開発に使用されたワークステーションまたは仮想マシン上でデバッグ モードでコンパイルされたことを示しています。

他の式グループのサンプルには、部分的に修飾された PDB パスがあり、あまり明白ではありません。これらのスタンドアロン PDB 名は、単一の開発者システムに完全修飾 PDB パスを指定する意味がない、より調整されたマルチ開発者環境を反映している可能性があります。代わりに、 リンカーは、ビルドされた実行可能ファイルに PDB ファイル名のみを書き込むように指示されます。それでも、これらの PDB パスはマルウェア サンプルに固有のものです。

  • tdip.pdb
  • volrec.pdb
  • msrstd.pdb

ベライゾン

マルウェアの一部を「バックドア」と見なすことは、ますます時代遅れになっています。マルウェアの一部を「インプラント」と呼ぶことは新たな話題であり、一般大衆は、西側諸国の政府が主張した後もずっと、この新しい命名法を採用している可能性があります。 Regin プラットフォームのこのコンポーネントには、時代を先取りした開発者がいます。

APT29

APT29を忘れないようにしましょう。APT29 の世界規模での大胆な侵入には、多くの場合、創造的手の込んだステルスなマルウェアが関与しています。 APT29 は静かなグループの 1 つですが、何千ものマルウェアの中で、これらの通常は規律あるオペレーターが、次のようないくつかの PDB パスをリークしました。

  • c:UsersdeveloperDesktopunmodified_netimplantminidionisminidionisobjDebugminidionis.pdb
  • C:Projectsnemesis-geminanemesisbincarriersezlzma_x86_exe.pdb

一流の企業が明白なキーワードを使用していない場合でも、検出の機会を表す文字列用語、異常、および一意の値が PDB パスに存在する可能性があります。

コンベンションエンジン

すべての実行可能ファイルからすべての PDB パスを抽出してインデックスを作成し、データを簡単に検索して探索できるようにします。しかし、誰もが簡単にできるわけではないため、研究者やアナリストが悪を検出するために使用できると信じている PDB パスのキーワード、用語、および異常について、100 近くの Yara ルールのクイック コレクションを作成しました。この一連のルールを「ConventionEngine」と名付けました。これは、セキュリティ ベンダーが自社のエリート検出「エンジン」について話すのが好きだという業界のジョークにちなんでいます。なので。

厳密な生産「シグネチャ」の代わりに、これらを「弱いシグナル」または「発見ルール」と考えることができます。これは、アナリストが探し回るためにさまざまなサイズと忠実度の干し草の山を構築することを目的としています。信号対雑音比 (SNR) が低いルールは、ファイル オブジェクトのログ記録またはコンテキスト化のために自動化されたシステムにフィードできますが、SNR が高いルールは、レビューまたは調査のためにアナリストに直接フィードできます。

私たちの敵は人間です。彼らは誤ります。そして、彼らがそうするとき、私たちは彼らを捕まえることができます.その取り組みで誰でも使用できるように、 ConventionEngineルールをリリースできることを嬉しく思います。これらのルールを合わせて、300 を超える名前付きマルウェア ファミリ、数百の名前のないマルウェア ファミリ、39 の異なる APT および FIN 脅威グループ、および 200 を超える UNC (未分類) アクティビティ グループからのサンプルをカバーします。

これらのルールをテンプレートとして、またはさらなる PDB パス検出のアイデアの出発点として使用していただければ幸いです。キーワード、用語、異常を追加する余地は十分にあります。検出、ハンティング、または単にコンテキストのいずれであっても、これらのルールのそれぞれに追加のロジックを調整して追加し、結果として得られる干し草の山のサイズを組織内の目的、運用、およびテクノロジに適したものにする必要があることに注意してください。これらのルールを慎重に実装すれば、分析を強化し、他の場所では見逃されているものを検出できると考えています。

インテリジェンス チーム向けの PDB パス

APT31 で幸運をつかもう

インシデント対応の調査中に、APT31 アカウントが Github でマルウェア ファイルのステージングとマルウェア通信に使用されていることがわかりました。このアカウントを使用する侵入者は、完全なコード パッケージをレポジトリに入れることをためらいませんでした。私たちは、複数のマルウェア エコシステムに関連する実際の PDB ファイルを回復することができました。実際の PDB ファイルを使用して、未加工のマルウェア ソース コードの完全なディレクトリ パスを確認できました。これは、マルウェアの元の開発環境に関するインテリジェンスが大幅に向上したことを示しています。 PDB 自体で見つかったものを使用して、このマルウェア作成者に関連する他のファイルを検索しました。

PDB を使用したマルウェアのソース コードの検索

マルウェア PDB 自体は、思っているよりも簡単に見つけることができます。確かに、作者が親切にもすべてを Github に残してくれることもあります。しかし、他にもいくつかの場合があります。ウイルス対策エージェントまたはエンドポイント検出および応答 (EDR) エージェントによって、マルウェアのソース コードが誤ってフラグ付けされることがあります。マルウェアのソース コードがオープン ディレクトリに残されることがあります。また、マルウェアのソース コードが大規模なマルウェア リポジトリにアップロードされることもあります。

Visual Studio のソリューション ファイルなどを探すか、単純に Yara ルールを使用して、アーカイブ内の一部のコンポーネントが実際に存在する可能性を高めるゼロ以外の検出率またはその他のメタデータを持つアーカイブ内の PDB ファイルを探すことで、マルウェア ソース コードを見つけることができます。悪意のある。

ルール PDB_Header_V2
{
メタ:
author=”@stvemillertime”
description = “これは、ヘッダーに基づいて PDB ファイルを検索します。
文字列:
//$string = “Microsoft C/C++ プログラム データベース 2.00”
$hex = {4D696372 6F736F66 7420432F 432B2B20 70726F67 72616D20 64617461 62617365 20322E30 300D0A}
調子:
$hex at 0
ルール PDB_Header_V7
{
メタ:
author=”@stvemillertime”
description = “これは、ヘッダーに基づいて PDB ファイルを検索します。
文字列:
//$string = “Microsoft C/C++ MSF 7.00”
$hex = {4D696372 6F736F66 7420432F 432B2B20 4D534620 372E3030}
調子:
$hex at 0
}

攻撃的なチームの PDB パス

FireEye は、マルウェア サンプルでリークされた PDB パスの一部に基づいて、善意の脅威アクターとレッド チームへの個々の帰属を確認しました。より広範なアナリスト コミュニティは、関連するマルウェア ファミリへのクラスタリングとピボットに PDB パスを使用することが多く、マルウェア開発者の帰属、追跡、追跡のケースを構築します。当然のことながら、レッドチームと攻撃的なオペレーターは、コンパイルプロセス中に残されたアーティファクトに注意し、シンボル生成を有効にしてコンパイルすることを控える必要があります。基本的に、インプラントで適切な OPSEC を実践することを忘れないでください。とはいえ、このアーティファクトを意図的に導入したい場合は、人為的な PDB パスを作成する機会があります。

PDB パスをより「正当」に見せる

マルウェアと非マルウェアの顕著な違いの 1 つは、通常、マルウェアは「エンタープライズ」または「商用」のソフトウェア開発環境で開発されていないことです。ここでの違いは、大規模な開発環境では、ソフトウェア エンジニアが生産性向上ツールを使用して大きなプロジェクトに共同で取り組んでおり、ソフトウェアは自動化された「継続的インテグレーション」(CI) または「継続的デリバリー」(CD) スイートによって絶えず更新および再構築されていることです。ジェンキンスとチームシティ。これは、PDB パスが正規のエンタープライズ ソフトウェア パッケージに存在する場合、CI/CD ビルド サーバー上のコンパイル パスを示すツールマークが含まれていることが多いことを意味します。

CI/CD 環境で構築された正当なソフトウェア実行可能ファイルの PDB パスの例を次に示します。

  • D:JenkinsworkspaceQA_Build_5_19_ServerEx_win32_buildoutputServerExWin32Release_symbolskeysvc.pdb
  • D:bamboo-agent-homexml-databuild-dirMC-MCSQ1-JOB1srcMobilePrintobjx86ReleaseMobilePrint.pdb
  • C:TeamCityBuildAgentwork4c88d7aeacd752BuildReleasecs.pdb

一部のマルウェア開発者が CI/CD ビルド環境を使用しているという事実を無視することはできません。一部の攻撃者やマルウェア作成者が実際に現代のエンタープライズ開発プロセスを採用していることはわかっていますが、この例のようなマルウェア PDB は非常にまれです。

  • c:usersbuilderbamboo~1xml-databuild-~1trm-pa~1agentwindow~1rootkitOutputi386KScan.pdb
Visual Studio でのカスタム PDB パスの指定

PDB ファイルのカスタム パスを指定することは、開発の世界では珍しくありません。攻撃的またはレッドチームのオペレーターは、偽の PDB パスを指定することを希望する場合があり、コンパイラ リンク オプションを使用して簡単に指定できます。

マルウェア作成者の例である「smiller」は、自身の技術を習得して磨きをかけるにつれて、よりステルスなアプローチを採用し、より「正当な」ように見える PDB パスの 1 つを新しいマルウェアのコンパイルに含めることを選択する可能性があります。

次のパスにある smiller のマルウェア プロジェクトの例を見てみましょう。

D:smillerprojectsoffensive_loadersshellcodehellohellol

 

Visual Studio に表示された hellol.cpp コードとデバッグ ビルド情報

図 16: Visual Studio に表示された hellol.cpp コードとデバッグ ビルド情報

デバッグ構成でコンパイルされたこのプロジェクトは、デフォルトで hellol.exe ファイルと hellol.pdb ファイルの両方を以下に配置します。

D:smillerprojectsoffensive_loadersshellcodehellohellolDebug

 

hellol.exe および hellol.pdb は、デバッグ構成のデフォルトによって常駐フォルダーにコンパイルされます。

図 17: hellol.exe と hellol.pdb、デバッグ構成のデフォルトで常駐フォルダーにコンパイル

このプロジェクトのプロパティを変更し、PDB ファイルの生成パスを手動で指定するのは簡単です。 Visual Studio タスクバーから [プロジェクト] > [プロパティ] を選択し、サイド ペインで [リンカー] > [デバッグ] を選択して、[プログラム データベース ファイルの生成] のオプション ボックスに入力します。このオプションは Visual Studio マクロを受け入れるため、PDB パスを偽造またはランダム化するためのスクリプト作成およびカスタム ビルド構成の作成に十分な柔軟性があります。

 

hellol プロジェクト PDB パスのデフォルトを示すプロパティ

図 18: PDB パスのデフォルトを示す hellol プロジェクトのプロパティ

 

hellol プロジェクトのプロパティで、手動で指定された (偽の) PDB パスのパスが表示されるようになりました

図 19: hellol プロジェクトのプロパティに、手動で指定された (偽の) PDB パスのパスが表示されるようになりました

生の ConsoleApplication1.exe を調べると、指定した PDB パスを指定する実行可能ファイルにリンカーがデバッグ情報を含めていることがバイト レベルでわかりますが、これはもちろん実際のものではありません。または、コマンド ラインでビルドする場合は、ビルド コンピューターのファイル構造に依存しない PDB ファイル名を作成できる/PDBALTPATHを指定できます。

 

PEview ユーティリティで表示されるように hellol.exe を再構築すると、実行可能ファイルの IMAGE_DEBUG_TYPE_CODEVIEW ディレクトリに偽の PDB パスが表示されます。

図 20: PEview ユーティリティから見た再構築された hellol.exe。実行可能ファイルの IMAGE_DEBUG_TYPE_CODEVIEW ディレクトリに偽の PDB パスが示されています。

攻撃的またはレッドチームのオペレーターは、意図的にマルウェアに PDB パスを含めることができます。これにより、実行可能ファイルが CI/CD サーバー上でコンパイルされているように見え、マルウェアがレーダーの下を通過するのに役立つ可能性があります。さらに、オペレータは、アナリストを混乱させるために、既知のマルウェア ファミリまたは脅威グループに関連付けられた PDB パスまたは文字列を含めることができます。悪名高い APT33 ペルソナxman_1365_xなど、お気に入りのマルウェア オペレータまたは作成者の 1 人にささやかな敬意を表してはどうでしょうか?それとも、「HomeworkCS1101」を入れて、アクティビティをよりアカデミックに見せますか?なんらかの理由で、PDB 操作を行う必要がある場合、通常は一般的なソフトウェア開発ツールで実行できます。

(マルウェア)名前の栄光と無

PDB パスとマルウェア作成者の命名規則のコンテキストでは、「攻撃」と「防御」の相互依存性 (およびしばしば循環) を認識することが重要です。防御者がマルウェアの一部を「トロイの木馬」と呼んでいるのか、それともマルウェアの作成者がコード プロジェクトを「トロイの木馬」と呼んでいるのか?一部のマルウェアは、以前の作業に触発されています。ある作成者がコード プロジェクトに「MIMIKATZ」と名前を付けると、数年後には派生名を持つ関連するプロジェクトスクリプトが何百も存在します。

定義は異なる場合がありますが、攻撃側と防御側の両方が、マルウェアの機能や役割を、同じ専門用語とインスピレーションの多くを使用して特徴付けていることがわかります。これは「ウイルス」に端を発したものであり、マルウェアの分類法が公に議論されるにつれて、一連の詳細で説明的な用語が増え続けると思われます。私たちがマルウェアについてどのように話したかが、最終的にそれを検出する可能性につながると誰が予想したでしょうか?結局のところ、他の名前のルートキットは悪でしょうか?どこかで、ある学者がマルウェアと言語学の交差点に驚嘆しています。

結論

ここまでで、これはばかげたことだと思っていても、心配しないでください。あなたは良い仲間です。 PDB パスは、確かにファイルの不安定な属性です。実行可能ファイルにこれらのパスが存在するだけでも決して悪いことではありませんが、これらのパスがマルウェアの一部に存在する場合、通常は操作上の軽率な行為を表しています。 PDB パスに基づいてマルウェアを検出するという考え方は、人がかぶっている帽子の種類に基づいて強盗を検出するようなものです。

これまで、マルウェア ファミリをクラスタリングし、マルウェア開発者を追跡するために、主に分析のピボットとして PDB パスを使用することに成功してきました。 PDB パスを全体的に調査し始めたとき、多くのマルウェア作成者がフォルダーとプロジェクト ファイルに同じ命名規則を多く使用していることに気付きました。彼らは、マルウェア自体の機能にちなんでマルウェア プロジェクトに名前を付けていました。また、定期的に、独自の説明的な言葉でプロジェクトにラベルを付けていました。

多くのマルウェア作成者と運用者が、マルウェア自体の機能を記述した PDB パスを漏らし、開発環境への洞察を与えてくれたことを発見しました。さらに、マルウェア開発ファイルと環境の記述子の外に、PDB ファイルが存在する場合、状況に応じて興味深い可能性が高いファイルを特定するのに役立つ異常を特定しました。レッドチームと攻撃的なオペレーターが、ステルスまたは混乱を招く目的で PDB パスを偽造することで、彼らの技術を向上させる余地があります。

私たちは、PDB パスが存在する場合に、そのパスからジュースを絞り出せると楽観的です。約 2200 の名前付きマルウェア ファミリ (41 の APT グループと 10 の FIN グループからのすべてのサンプル、および数百万の他の未分類の実行可能ファイルを含む) の調査では、PDB パスが約 5% の確率でマルウェアに存在することが示されています。本質的に悪意のない機能を使用して、マルウェアの 5 パーセント以上を検出する「バックアップ プラン」を作成できるとしたらどうでしょう。ちょっとクールですね。

PDB パス分類のスケーリングに関する今後の作業

PDB パス キーワード、用語、および異常検出用の ConventionEngine ルール パックは楽しく、他の方法では見逃されていたであろう大量のマルウェアを検出しました。しかし、マルウェアには、そのような明白なキーワードを持たない PDB パスが多数存在するため、手動でチェリー ピッキングを行い、非常に骨の折れるアプローチでは拡張できません。

私たちのブログシリーズの次の部分をお楽しみに! Part Deuxでは、PDB パス機能の一般化と分類のアプローチのためのスケーラブルなソリューションについて説明します。私たちは、データ サイエンスのアプローチにより、ユニークで興味深い値を持つ PDB パスを明らかにし、ルールのない分類ソリューションに移行できるようになると信じています。

推奨される参考資料とリソース

刺激的な研究
デバッグとシンボル
デバッグ ディレクトリと CodeView
デバッグと Visual Studio
PDB ファイル構造
PDB ファイル ツール
コンベンションエンジンのルール

参照: https://www.mandiant.com/resources/blog/definitive-dossier-of-devilish-debug-details-part-one-pdb-paths-malware

Comments

Copied title and URL