SolarWinds Attacks: Stealthy Attackers Attempted To Evade Detection

In the first of a series of follow-up analysis on the SolarWinds attacks, we take a look at how the attackers disabled security software and avoided detection

As we continue our analysis on the tools used in the SolarWinds attacks, one of the most striking aspects we’ve noticed is how careful the attackers were to avoid drawing attention to themselves. Software supply chain attacks are relatively stealthy to begin with, since signed software from a trusted source is less likely to raise red flags. However, the attackers weren’t content to rely on the cover this provided and also took several other steps to avoid detection.

To begin with, the Sunburst backdoor (Backdoor.Sunburst), which was delivered using a Trojanized update to SolarWinds Orion, sets a delay time of up to 14 days before execution. In other words, no malicious activity will begin until this period has elapsed.

The length of time selected is most likely to increase the likelihood that the log entries of the initial malicious activity have been deleted before any subsequent post-breach activity is initiated, thereby making it difficult to correlate the two sets of malicious events. Many organizations, including even managed security services providers (MSSPs), will often purge their security logs after seven days to minimize storage costs and make searching them easier.

Sunburst will also check the current Windows domain the machine belongs to. If the domain contains the string 'test' or one of 13 additional specific domains that appear related to lab systems such as “swdev.local” and “apac.lab”, the threat will cease to execute.  A full list is in Appendix A.

Avoiding Security Software and Researchers

Attacks begin with a Trojanized version of SolarWinds’ Orion software. The attackers modified Orion in order to deliver the Sunburst backdoor to the computer. Sunburst is first stage malware, designed to perform reconnaissance on the infected computer, perform checks for security tools, and deliver a second stage payload, if required.

The main Sunburst code is contained in a class named SolarWindows.Orion.Core.BusinessLayer that, when first instantiated, calls a member function called Update. The function name is a ruse, as the code does not perform any update, but instead is designed to disable security software, avoid security researcher systems, and possibly avoid running on systems not of interest to the attackers. The function contains three lists – a list of process names, a list of driver filenames, and a list of processes and service name pairs. These names are all obfuscated in the code by hashing them using the FNV1A algorithm and using variable names that masquerade as timestamps.

The function will:

  • Get a list of running processes.
  • Check if the process names match items on the process list
  • Get a list of all installed drivers
  • Check if the driver names match items on the drivers list
  • If a match is found, the malicious code does not perform further actions and returns

This process and driver list contains tools that commonly run on security researcher systems and thus, this functionality appears to be designed not to run on such systems in order to avoid discovery. The full list of security tools can be found in Appendix A. Furthermore, the lists also contained names related to a variety of security software programs including:

  • Security software process names
    • AVG/AVAST
    • Panda
    • Kaspersky
    • Tanium
  • Driver names
    • CyberArk - cybkerneltracker.sys
    • Altiris Symantec - atrsdfw.sys (Ghost Pre-installation boot environment driver)
    • 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

The security vendors on this list have most likely been chosen as the attacker has determined that their products are unlikely be installed at organizations of interest to the attackers. Given the indiscriminate nature of supply chain as a vector, with an estimated 18,000 SolarWinds customers affected, the attackers probably wanted to avoid any risk of detection in organizations that weren’t of interest to them.

Interestingly, the process solarwindsdiagnostics is also blacklisted. Presumably this is included to avoid detection during any SolarWinds testing or troubleshooting.

Disabling security software

Sunburst also attempts to specifically disable some software security services via the registry. This allows Sunburst to perform its malicious actions completely undetected. If the attackers worked quickly and restored the services afterwards, a security administrator would potentially have no record of the activity, nor have even noticed the temporary lack of protection.

SolarWinds Attacks: Stealthy Attackers Attempted To Evade Detection

Figure 1. Example of how Sunburst disables security software. In this case it checks if the CrowdStrike processes csfalconservice or csfalconcontainer are running, and if so, it sets the csagent, csfalconservice, and csdevicecontrol services to be disabled.

This function will:

  • Get a list of running processes
  • Check if the process names match items on the process/services name pair list
  • Disable the security software by modifying its service registry entry
  • After the software has been confirmed to be disabled, usually after a reboot, the malicious code will then contact the command and control (C&C) server and potentially perform further malicious actions

To disable the security software, Sunburst will simply set the products’ service start setting to Disabled. In Windows, this is done by setting the registry keys:

  • HKLM\ SYSTEM\CurrentControlSet\services\<service name>\Start = 4

This will cause the security software not to load at the next reboot.

It should be noted that the attackers do not attempt to disable any Symantec products. Presumably this is because of an anti-tampering feature in Symantec software, which prevents its own service from being disabled.

The process and services pair list include software from the following vendors:

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

Interestingly, the list also included Microsoft Defender, but only the service key permissions are changed.  Currently, this has an unknown effect. In addition, some other unknown products are also included, but were effectively commented out. The attackers may have discovered this technique was ineffective for these products.

Finally, Sunburst will check if api.solarwinds.com resolves to a valid address before continuing.

Low profile threat

The SolarWinds attacks are among the best-planned and adept attacks we have seen in recent years. The attackers have gone to great lengths to both find an effective path into their targeted organizations and, once inside their networks, maintain a low profile. Our analysis of these tools is ongoing and we plan to publish further blogs in the coming weeks.

Protection/Mitigation

Tools associated with these attacks will be detected and blocked on machines running Symantec Endpoint products.

File-based protection:

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

Network-based protection:

  • System Infected: Sunburst Malware Activity

Appendix A

Drivers Avoided

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

Security Tools Avoided

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

Security Software Avoided

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

Domains Avoided

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

Service Disablement List

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