Posted: 1 Min ReadJapanese
Original Post: English

SolarWinds攻撃:検出を逃れるステルス型攻撃

SolarWinds攻撃のフォローアップ分析シリーズの第1回目では、攻撃者がどのようにしてセキュリティソフトを無効化し、検知を回避したかを見ていきます。

SolarWinds攻撃で使用されたツールを分析していて印象的なのは、攻撃者が自らの存在に気づかれないように細心の注意を払っていることです。ステルス性に高いソフトウェアサプライチェーン攻撃では、通常は危険と認識されない信頼できる提供元からの署名のあるソフトウェアを悪用します。ただし、この攻撃者はこの隠れ蓑だけでは満足せず、他の手段も使って検出を逃れようとしました。

まず、トロイの木馬化したSolarWinds Orionのアップデートを使用してSunburstバックドア(Backdoor.Sunburst)を配信し、14日後に実行するように設定しました。つまり、この期間が経過するまで攻撃を開始しないよう設定したのです。

このような期間を設定したのは、最初の攻撃のログエントリが次のアクティビティを開始する前に削除されるのを見込み、それによって、2つの不正なアクティビティが関連付けられないようにするためと推測されます。マネージドセキュリティサービスプロバイダ(MSSP)を含め、多くの組織がストレージのコスト削減と検索の簡略化のために1週間ほどでセキュリティログを削除しています。

Sunburstではマシンの現在のWindowsドメインも調査されます。ドメインに文字列「test」やラボシステムに関連すると思われる「swdev.local」、「apac.lab」をはじめとする13の特定ドメインのいずれかが含まれている場合、攻撃は実行されません。  すべてのドメインのリストは付録Aを参照してください。

セキュリティソフトウェアと調査システムの回避

攻撃はトロイの木馬化されたSolarWindsのOrionソフトウェアで始まりました。攻撃者はOrionを改変してSunburstバックドアをコンピュータに配信しました。Sunburstは第1段階のマルウェアで、感染したコンピュータを偵察し、セキュリティツールのチェックを行い、必要に応じて第2段階のペイロードを配信するように設計されています。

メインのSunburstコードはSolarWindows.Orion.Core.BusinessLayerという名前のクラスに含まれ、最初にインスタンス化されるとUpdateというメンバー関数が呼び出されます。この関数名は偽装のためコードによって更新は実行されませんが、その代わりにセキュリティソフトウェアが無効化され、セキュリティ調査システムが回避され、攻撃者の利益にならないシステムでの実行が防止されます。この関数にはプロセス名のリスト、ドライバファイル名のリスト、プロセスとサービス名の組み合わせのリストの3つのリストが含まれています。これらの名前はすべて、FNV1A アルゴリズムを使ってハッシュ化し、タイムスタンプを装った変数名を使用することで、コード内で難読化されています。

この関数は以下を実行します。

  • 実行中のプロセスのリストの取得
  • プロセスのリストの項目とプロセス名の一致の確認
  • インストールされているすべてのドライバのリストの取得
  • ドライバのリストの項目とドライバ名の一致の確認
  • 一致する項目が確認された場合、この不正なコードではそれ以上のアクションは実行されません。

このプロセスとドライバのリストにはセキュリティ調査システムで一般的に実行されるツールが含まれているため、検出を逃れるためにこれらのシステムでは実行しないように設計されているものと推測されます。すべてのセキュリティツールのリストは付録Aに記載されています。このリストには以下のようなさまざまなセキュリティソフトウェアプログラムに関連する名称も含まれています。

  • セキュリティソフトウェアのプロセス名
    • AVG/AVAST
    • Panda
    • Kaspersky
    • Tanium
  • ドライバ名
    • CyberArk - cybkerneltracker.sys
    • Altiris Symantec - atrsdfw.sys(Ghostプレインストールブート環境ドライバ)
    • Raytheon Cyber Solutions - eaw.sys
    • CJSC Returnil Software - rvsavd.sys
    • Verasys Digital Guardian - dgdmk.sys
    • Sentinel One – sentinelmonitor.sys
    • Hexis Cyber Solutions - hexisfsmonitor.sys
    • Dell SecureWorks - groundling32.sys, groundling64.sys
    • SAFE-Cyberdefense - safe-agent.sys
    • Cybereason – crexecprev.sys
    • Absolute - psepfilter.sys, cve.sys
    • Bromium - brfilter.sys, brcow_x_x_x_x.sys
    • LogRhythm - lragentmf.sys
    • OESIS OPSwat - libwamf.sys

このリストに記載されているセキュリティベンダーは、攻撃の標的にする組織に自社製品がインストールされる可能性が低いと攻撃者が判断したために選ばれた可能性が高いと考えられます。また、サプライチェーンの攻撃ベクトルが無差別であること、そして、SolarWindsの約18,000社の顧客企業が標的になったことから、攻撃者は自分たちに利益にならない組織で検出されるリスクを回避したかったためとも考えられます。

興味深いことに、solarwindsdiagnosticsというプロセスもブラックリストに含まれています。これは、SolarWindsのテスト中やトラブルシューティング中に検出されるのを回避するためと推測されます。

セキュリティソフトウェアの無効化

Sunburstでは、レジストリを介して一部のソフトウェアセキュリティサービスを無効化することも試行されました。これにより、Sunburstは検出されずに攻撃を実行できます。

攻撃者が迅速に行動を起こし、その後サービスを復元すると、セキュリティ管理者はそのアクティビティを記録できず、一時的に保護が解除されていることに気づかないことすらあります。

図 1.Sunburstがセキュリティソフトウェアを無効にする方法の例。この場合、CrowdStrikeのプロセスであるcsfalconserviceまたはcsfalconcontainerを実行しているか調べ、実行している場合はcsagent、csfalconservice、csdevicecontrolのサービスを無効に設定します。
図 1.Sunburstがセキュリティソフトウェアを無効にする方法の例。この場合、CrowdStrikeのプロセスであるcsfalconserviceまたはcsfalconcontainerを実行しているか調べ、実行している場合はcsagent、csfalconservice、csdevicecontrolのサービスを無効に設定します。

この関数は以下を実行します。

  • 実行中のプロセスのリストの取得
  • プロセス/サービス名の組み合わせのリストの項目とプロセス名の一致の確認
  • サービスレジストリのエントリの変更によるセキュリティソフトウェアの無効化
  • ソフトウェアの無効化を確認した後(通常は再起動後)、不正なコードはコマンド&コントロール(C&C)サーバーに接続し、さらに攻撃を実行する可能性があります。

Sunburstでセキュリティソフトウェアを無効にする場合、単純に製品のサービス開始を「無効」に設定します。Windowsでは以下のレジストリキーを設定して無効にします。

  • HKLM\ SYSTEM\CurrentControlSet\services\<サービス名>\Start = 4

この設定によって、次回の再起動時にセキュリティソフトウェアがロードされなくなります。

シマンテック製品は攻撃者によって無効化されることはありません。これは、シマンテックのソフトウェアには改ざん防止機能があり、自らのサービスが無効になるのを防止しているためと推測されます。

プロセスとサービスの組み合わせのリストには、以下のベンダーのソフトウェアが含まれています。

  • CrowdStrike
  • Carbon Black
  • FireEye
  • ESET
  • F-Secure

リストにはMicrosoft Defenderも含まれていますが、興味深いことに、サービスキーのアクセス許可のみが変更されています。  現在、その影響は確認されていません。また、未知の製品も複数含まれていますが、巧妙にコメントアウトされています。攻撃者はその手法がそれらの製品には効果がないと判断したのでしょう。

さらに、Sunburstでは続行前に、api.solarwinds.comが有効なアドレスに解決されるか確認されます。

存在を隠す脅威

SolarWinds攻撃は、近年の攻撃の中でも特に計画的で巧妙です。攻撃者は標的となる組織への有効な侵入経路を見つけ出し、ネットワーク侵入後は検出を回避するためにさまざまなツールを使用しています。これらのツールは現在分析中ですが、今後ブログで公開する予定です。

保護/緩和

こうした攻撃に関連するツールは、シマンテックのエンドポイント製品を実行するマシン上で検出されブロックされます。

ファイルベースの保護:

  • Backdoor.Sunburst
  • Backdoor.Sunburst!gen1
  • Backdoor.SuperNova
  • Backdoor.Teardrop

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

  • System Infected: Sunburstマルウェアのアクティビティ

 付録A

回避されたドライバ

DriverFNV1A HashDescription
ybkerneltracker.sys 17097380490166623672
atrsdfw.sys 15194901817027173566 Altiris Symantec (Ghost Preinstallion boot environment driver)
eaw.sys 12718416789200275332 Raytheon Cyber Solutions
rvsavd.sys 18392881921099771407 CJSC Returnil Software
dgdmk.sys 3626142665768487764 Verdasys
sentinelmonitor.sys 12343334044036541897 Sentinel
hexisfsmonitor.sys 397780960855462669 Sentinel One
groundling32.sys 6943102301517884811 Dell SecureWorks
groundling64.sys 13544031715334011032 Dell SecureWorks
safe-agent.sys 11801746708619571308 SAFE-Cyberdefense
crexecprev.sys 18159703063075866524 Absolute (Palisade Systems)
psepfilter.sys 835151375515278827 Absolute
cve.sys 16570804352575357627 Absolute
brfilter.sys 1614465773938842903 Bromium
brcow_x_x_x_x.sys 12679195163651834776 Bromium
lragentmf.sys 2717025511528702475 LogRhythm
libwamf.sys 17984632978012874803 OESIS OPSwat

回避されたセキュリティツール

ToolFNV1A Hash
apimonitor-x64 2597124982561782591
apimonitor-x86 2600364143812063535
autopsy64 13464308873961738403
autopsy 4821863173800309721
autoruns64 12969190449276002545
autoruns 3320026265773918739
autorunsc64 12094027092655598256
autorunsc 10657751674541025650
binaryninja 11913842725949116895
blacklight 5449730069165757263
cff explorer 292198192373389586
cutter 12790084614253405985
de4dot 5219431737322569038
debugview 15535773470978271326
diskmon 7810436520414958497
dnsd 13316211011159594063
dnspy 13825071784440082496
dotpeek32 14480775929210717493
dotpeek64 14482658293117931546
dumpcap 8473756179280619170
evidence center 3778500091710709090
exeinfope 8799118153397725683
fakedns 12027963942392743532
fakenet 576626207276463000
ffdec 7412338704062093516
fiddler 682250828679635420
fileinsight 13014156621614176974
floss 18150909006539876521
gdb 10336842116636872171
hiew32 13260224381505715848
unknown 17956969551821596225
hiew32demo 12785322942775634499
idaq64 8709004393777297355
idaq 14256853800858727521
idr 8129411991672431889
ildasm 15997665423159927228
ilspy 10829648878147112121
jd-gui 9149947745824492274
lordpe 3656637464651387014
officemalscanner 3575761800716667678
ollydbg 4501656691368064027
pdfstreamdumper 10296494671777307979
pe-bear 14630721578341374856
pebrowse64 4088976323439621041
peid 9531326785919727076
pe-sieve32 6461429591783621719
pe-sieve64 6508141243778577344
pestudio 10235971842993272939
peview 2478231962306073784
pexplorer 9903758755917170407
ppee 14710585101020280896
procdump64 13611814135072561278
procdump 2810460305047003196
processhacker 2032008861530788751
procexp64 27407921587843457
procexp 6491986958834001955
procmon 2128122064571842954
prodiscoverbasic 10484659978517092504
py2exedecompiler 8478833628889826985
r2agent 10463926208560207521
rabin2 7080175711202577138
radare2 8697424601205169055
ramcapture64 7775177810774851294
ramcapture 16130138450758310172
reflector 506634811745884560
regmon 18294908219222222902
resourcehacker 3588624367609827560
retdec-ar-extractor 9555688264681862794
retdec-bin2llvmir 5415426428750045503
retdec-bin2pat 3642525650883269872
retdec-config 13135068273077306806
retdec-fileinfo 3769837838875367802
retdec-getsig 191060519014405309
retdec-idr2pat 1682585410644922036
retdec-llvmir2hll 7878537243757499832
retdec-macho-extractor 13799353263187722717
retdec-pat2yara 1367627386496056834
retdec-stacofin 12574535824074203265
retdec-unpacker 16990567851129491937
retdec-yarac 8994091295115840290
rundotnetdll 13876356431472225791
sbiesvc 14968320160131875803
scdbg 14868920869169964081
scylla_x64 106672141413120087
scylla_x86 79089792725215063
shellcode_launcher 5614586596107908838
solarwindsdiagnostics 3869935012404164040
sysmon64 3538022140597504361
sysmon 14111374107076822891
task explorer 7982848972385914508
task explorer-x64 8760312338504300643
tcpdump 17351543633914244545
tcpvcon 7516148236133302073
tcpview 15114163911481793350
vboxservice 15457732070353984570
win32_remote 16292685861617888592
win64_remotex64 10374841591685794123
windbg 3045986759481489935
windump 17109238199226571972
winhex64 6827032273910657891
winhex 5945487981219695001
winobj 8052533790968282297
wireshark 17574002783607647274
x32dbg 3341747963119755850
x64dbg 14193859431895170587
xwforensics 17683972236092287897
xwforensics64 17439059603042731363

回避されたセキュリティソフトウェア

VendorProcessFNV1A Hash
Panda psanhost 2532538262737333146
psuaservice 4454255944391929578
psuamain 6088115528707848728
Kaspersky avp 13611051401579634621
avpui 18147627057830191163
ksde 17633734304611248415
ksdeui 13581776705111912829
Tanium tanium 7175363135479931834
taniumclient 3178468437029279937
taniumdetectengine 13599785766252827703
taniumendpointindex 6180361713414290679
taniumtracecli 8612208440357175863
taniumtracewebsocketclient64 8408095252303317471
AVG/AVAST aswidsagent 2934149816356927366
aswidsagenta 13029357933491444455
aswengsrv 6195833633417633900
avastavwrapper 2760663353550280147
avgsvc 3660705254426876796
avgui 12709986806548166638
avgsvca 3890794756780010537
avgidsagent 2797129108883749491
avgsvcx 3890769468012566366
avgwdsvcx 14095938998438966337
avgadminclientservice 11109294216876344399
afwserv 1368907909245890092
avastui 11818825521849580123
avastsvc 8146185202538899243
bccavsvc 16423314183614230717

回避されたドメイン

DomainFNV1A Hash
swdev.local 1109067043404435916
swdev.dmz 15267980678929160412
lab.local 8381292265993977266
lab.na 3796405623695665524
emea.sales 8727477769544302060
cork.lab 10734127004244879770
dev.local 11073283311104541690
dmz.local 4030236413975199654
pci.local 7701683279824397773
saas.swi 5132256620104998637
lab.rio 5942282052525294911
lab.brno 4578480846255629462
apac.lab 16858955978146406642

サービス無効化のリスト

VendorProcess NamesService Names
Carbon Black cavp carbonblack
cb carbonblackk
cbcomms
cbstream
CrowdStrike csfalconservice csagent
csfalconcontainer csdevicecontrol
csfalconservice
FireEye xagt xagt
xagtnotif fe_avk
fekern
feelam
3320767229281015341 (unknown)
ESET ekrn eamonm
eguiproxy eelam
egui ehdrv
ekrn
2589926981877829912 (unknown)
epfwwfp
ekbdflt
epfw
F-Secure fsgk32st 17624147599670377042 (unknown)
fswebuid 16066651430762394116 (unknown)
fsgk32 13655261125244647696 (unknown)
fsma32 fsaua
fssm32 fsma
fnrb32 3425260965299690882 (unknown)
fsaua fsbts
fsorsp fsni
fsav32 fsvista
13783346438774742614 (unknown)
2380224015317016190 (unknown)
fses
fsfw
fsdfw
fsaus
fsms
fsdevcon
14243671177281069512 (unknown)
16112751343173365533 (unknown)

About the Author

Threat Hunter Team

Symantec

The Threat Hunter Team is a group of security experts within Symantec whose mission is to investigate targeted attacks, drive enhanced protection in Symantec products, and offer analysis that helps customers respond to attacks.

Want to comment on this post?

We encourage you to share your thoughts on your favorite social platform.