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.sys17097380490166623672
atrsdfw.sys15194901817027173566Altiris Symantec (Ghost Preinstallion boot environment driver)
eaw.sys12718416789200275332Raytheon Cyber Solutions
rvsavd.sys18392881921099771407CJSC Returnil Software
dgdmk.sys3626142665768487764Verdasys
sentinelmonitor.sys12343334044036541897Sentinel
hexisfsmonitor.sys397780960855462669Sentinel One
groundling32.sys6943102301517884811Dell SecureWorks
groundling64.sys13544031715334011032Dell SecureWorks
safe-agent.sys11801746708619571308SAFE-Cyberdefense
crexecprev.sys18159703063075866524Absolute (Palisade Systems)
psepfilter.sys835151375515278827Absolute
cve.sys16570804352575357627Absolute
brfilter.sys1614465773938842903Bromium
brcow_x_x_x_x.sys12679195163651834776Bromium
lragentmf.sys2717025511528702475LogRhythm
libwamf.sys17984632978012874803OESIS OPSwat

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

ToolFNV1A Hash
apimonitor-x642597124982561782591
apimonitor-x862600364143812063535
autopsy6413464308873961738403
autopsy4821863173800309721
autoruns6412969190449276002545
autoruns3320026265773918739
autorunsc6412094027092655598256
autorunsc10657751674541025650
binaryninja11913842725949116895
blacklight5449730069165757263
cff explorer292198192373389586
cutter12790084614253405985
de4dot5219431737322569038
debugview15535773470978271326
diskmon7810436520414958497
dnsd13316211011159594063
dnspy13825071784440082496
dotpeek3214480775929210717493
dotpeek6414482658293117931546
dumpcap8473756179280619170
evidence center3778500091710709090
exeinfope8799118153397725683
fakedns12027963942392743532
fakenet576626207276463000
ffdec7412338704062093516
fiddler682250828679635420
fileinsight13014156621614176974
floss18150909006539876521
gdb10336842116636872171
hiew3213260224381505715848
unknown17956969551821596225
hiew32demo12785322942775634499
idaq648709004393777297355
idaq14256853800858727521
idr8129411991672431889
ildasm15997665423159927228
ilspy10829648878147112121
jd-gui9149947745824492274
lordpe3656637464651387014
officemalscanner3575761800716667678
ollydbg4501656691368064027
pdfstreamdumper10296494671777307979
pe-bear14630721578341374856
pebrowse644088976323439621041
peid9531326785919727076
pe-sieve326461429591783621719
pe-sieve646508141243778577344
pestudio10235971842993272939
peview2478231962306073784
pexplorer9903758755917170407
ppee14710585101020280896
procdump6413611814135072561278
procdump2810460305047003196
processhacker2032008861530788751
procexp6427407921587843457
procexp6491986958834001955
procmon2128122064571842954
prodiscoverbasic10484659978517092504
py2exedecompiler8478833628889826985
r2agent10463926208560207521
rabin27080175711202577138
radare28697424601205169055
ramcapture647775177810774851294
ramcapture16130138450758310172
reflector506634811745884560
regmon18294908219222222902
resourcehacker3588624367609827560
retdec-ar-extractor9555688264681862794
retdec-bin2llvmir5415426428750045503
retdec-bin2pat3642525650883269872
retdec-config13135068273077306806
retdec-fileinfo3769837838875367802
retdec-getsig191060519014405309
retdec-idr2pat1682585410644922036
retdec-llvmir2hll7878537243757499832
retdec-macho-extractor13799353263187722717
retdec-pat2yara1367627386496056834
retdec-stacofin12574535824074203265
retdec-unpacker16990567851129491937
retdec-yarac8994091295115840290
rundotnetdll13876356431472225791
sbiesvc14968320160131875803
scdbg14868920869169964081
scylla_x64106672141413120087
scylla_x8679089792725215063
shellcode_launcher5614586596107908838
solarwindsdiagnostics3869935012404164040
sysmon643538022140597504361
sysmon14111374107076822891
task explorer7982848972385914508
task explorer-x648760312338504300643
tcpdump17351543633914244545
tcpvcon7516148236133302073
tcpview15114163911481793350
vboxservice15457732070353984570
win32_remote16292685861617888592
win64_remotex6410374841591685794123
windbg3045986759481489935
windump17109238199226571972
winhex646827032273910657891
winhex5945487981219695001
winobj8052533790968282297
wireshark17574002783607647274
x32dbg3341747963119755850
x64dbg14193859431895170587
xwforensics17683972236092287897
xwforensics6417439059603042731363

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

VendorProcessFNV1A Hash
Pandapsanhost2532538262737333146
psuaservice4454255944391929578
psuamain6088115528707848728
Kasperskyavp13611051401579634621
avpui18147627057830191163
ksde17633734304611248415
ksdeui13581776705111912829
Taniumtanium7175363135479931834
taniumclient3178468437029279937
taniumdetectengine13599785766252827703
taniumendpointindex6180361713414290679
taniumtracecli8612208440357175863
taniumtracewebsocketclient648408095252303317471
AVG/AVASTaswidsagent2934149816356927366
aswidsagenta13029357933491444455
aswengsrv6195833633417633900
avastavwrapper2760663353550280147
avgsvc3660705254426876796
avgui12709986806548166638
avgsvca3890794756780010537
avgidsagent2797129108883749491
avgsvcx3890769468012566366
avgwdsvcx14095938998438966337
avgadminclientservice11109294216876344399
afwserv1368907909245890092
avastui11818825521849580123
avastsvc8146185202538899243
bccavsvc16423314183614230717

回避されたドメイン

DomainFNV1A Hash
swdev.local1109067043404435916
swdev.dmz15267980678929160412
lab.local8381292265993977266
lab.na3796405623695665524
emea.sales8727477769544302060
cork.lab10734127004244879770
dev.local11073283311104541690
dmz.local4030236413975199654
pci.local7701683279824397773
saas.swi5132256620104998637
lab.rio5942282052525294911
lab.brno4578480846255629462
apac.lab16858955978146406642

サービス無効化のリスト

VendorProcess NamesService Names
Carbon Blackcavpcarbonblack
cbcarbonblackk
cbcomms
cbstream
CrowdStrikecsfalconservicecsagent
csfalconcontainercsdevicecontrol
csfalconservice
FireEyexagtxagt
xagtnotiffe_avk
fekern
feelam
3320767229281015341 (unknown)
ESETekrneamonm
eguiproxyeelam
eguiehdrv
ekrn
2589926981877829912 (unknown)
epfwwfp
ekbdflt
epfw
F-Securefsgk32st17624147599670377042 (unknown)
fswebuid16066651430762394116 (unknown)
fsgk3213655261125244647696 (unknown)
fsma32fsaua
fssm32fsma
fnrb323425260965299690882 (unknown)
fsauafsbts
fsorspfsni
fsav32fsvista
13783346438774742614 (unknown)
2380224015317016190 (unknown)
fses
fsfw
fsdfw
fsaus
fsms
fsdevcon
14243671177281069512 (unknown)
16112751343173365533 (unknown)

Explore Upcoming Events

Find experts in the wild

See what's next