<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>NETRESEC Network Security Blog</title>
    <atom:link href="https://www.netresec.com/rss.ashx" rel="self" type="application/rss+xml" />
    <link>https://www.netresec.com/?page=Blog</link>
    <description>Network Security Monitoring and Network Forensics</description>
    <lastBuildDate>Thu, 26 Feb 2026 09:35:00 GMT</lastBuildDate>
    <language>en</language>
    <sy:updatePeriod>daily</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <generator>NETRESEC RSS Engine</generator>
    <copyright>2010-2023</copyright>
    <category>posts</category>
    <ttl>1440</ttl>
    <image>
      <url>https://media.netresec.com/images/Netresec_N_144x144.png</url>
      <title>NETRESEC Network Security Blog</title>
      <link>https://www.netresec.com/?page=Blog</link>
    </image>
    <item>
      <title>CISA mixup of IOC domains</title>
      <link>https://www.netresec.com/?page=Blog&amp;month=2026-02&amp;post=CISA-mixup-of-IOC-domains</link>
      <pubDate>Thu, 26 Feb 2026 09:35:00 GMT</pubDate>
      <dc:creator>Erik Hjelmvik</dc:creator>
      <enclosure url="https://media.netresec.com/images/accesscan-glize_2048x887.webp" type="image/webp" />
      <category>Dynu</category>
      <category>CISA</category>
      <category>IOC</category>
      <category>GTIG</category>
      <category>Mandiant</category>
      <category>glize</category>
      <category>accesscam</category>
      <category>accesscan</category>
      <guid>https://www.netresec.com/?page=Blog&amp;month=2026-02&amp;post=CISA-mixup-of-IOC-domains</guid>
      <description>Googles Threat Intelligence Group (GTIG) and Mandiants recent Disrupting the GRIDTIDE Global Cyber Espionage Campaign report is great and it has lots of good Indicators of Compromise (IOC). Many of these IOCs had already been shared by CISA last year as part of their Alert AA25-141A titled Russian G[...]</description>
      <content:encoded>&lt;p&gt;
				Google's Threat Intelligence Group (GTIG) and Mandiant's recent &lt;a href="https://cloud.google.com/blog/topics/threat-intelligence/disrupting-gridtide-global-espionage-campaign/"&gt;Disrupting the GRIDTIDE Global Cyber Espionage Campaign&lt;/a&gt; report is great and it has lots of good Indicators of Compromise (IOC). Many of these IOCs had already been shared by CISA last year as part of their &lt;a href="https://www.cisa.gov/news-events/cybersecurity-advisories/aa25-141a"&gt;Alert AA25-141A&lt;/a&gt; titled "Russian GRU Targeting Western Logistics Entities and Technology Companies".
				The IOC overlap between these two reports is surprisingly big, provided that the GTIG report covers a Chinese espionage group while the CISA report covers the Russian GRU unit 26165 (aka APT28 / Fancy Bear).
			&lt;/p&gt;&lt;p&gt;
				But some of the domain names in CISA's report from last year are strange. For example, the domain name "accesscan[.]org" doesn't seem to ever have been registered. The GTIG report, however, contains the very similar domain "accesscam[.]org". This accesscam domain is registered to the dynamic DNS provider Dynu Systems, whose services are often &lt;a href="https://threatfox.abuse.ch/asn/398019/"&gt;abused&lt;/a&gt; by malicious actors. Is it possible that there are typos in the IOCs published by CISA? I think so.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/accesscan-glize_2048x887.webp" width="2048" height="887" alt="accesscan glize spelling mistakes" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;
				Another odd domain in CISA's AA25-141A is "glize[.]com", which I suspect is a typo from either "giize[.]com" or "gleeze[.]com". The two latter domains are listed in the GTIG report and both of them also belong to the dynamic DNS provider Dynu Systems. The domain listed in CISA's alert, on the other hand, appears to be a legit website (&lt;a href="https://web.archive.org/web/20241007094326/https://glize.com/"&gt;archived page from 2024&lt;/a&gt;) from the marketing company &lt;a href="https://www.facebook.com/glizecom"&gt;Glize&lt;/a&gt; in Malta.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/glize_520x337.png" alt="Screenshot of Glize's website from 2024" width="520" height="337" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;Glize's website seems to have disappeared sometime in 2025.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Update 2026-02-27&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				The IOC list published by CISA originates from cybersecurity advisory &lt;a href="https://media.defense.gov/2025/May/21/2003719846/-1/-1/0/CSA_RUSSIAN_GRU_TARGET_LOGISTICS.PDF"&gt;157019-25&lt;/a&gt; / &lt;a href="https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Cyber-Security/GRU_Western_Logistics.pdf?__blob=publicationFile&amp;amp;v=3"&gt;PP-25-2107&lt;/a&gt;, which was created as a joint effort by the following 21 organizations:
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/gru-paper-authors-2_1690x720.webp" alt="authors of joint cybersecurity advisory Russian GRU Targeting Western Logistics Entities and Technology Companies" width="1690" height="720" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;ul&gt;&lt;li&gt;United States National Security Agency (NSA)&lt;/li&gt;&lt;li&gt;United States Federal Bureau of Investigation (FBI)&lt;/li&gt;&lt;li&gt;United Kingdom National Cyber Security Centre (NCSC-UK)&lt;/li&gt;&lt;li&gt;Germany Federal Intelligence Service (BND)&lt;/li&gt;&lt;li&gt;Germany Federal Office for Information Security (BSI)&lt;/li&gt;&lt;li&gt;Germany Federal Office for the Protection of the Constitution (BfV)&lt;/li&gt;&lt;li&gt;Czech Republic Military Intelligence (VZ)&lt;/li&gt;&lt;li&gt;Czech Republic National Cyber and Information Security Agency (NÚKIB)&lt;/li&gt;&lt;li&gt;Czech Republic Security Information Service (BIS)&lt;/li&gt;&lt;li&gt;Poland Internal Security Agency (ABW)&lt;/li&gt;&lt;li&gt;Poland Military Counterintelligence Service (SKW)&lt;/li&gt;&lt;li&gt;United States Cybersecurity and Infrastructure Security Agency (CISA)&lt;/li&gt;&lt;li&gt;United States Department of Defense Cyber Crime Center (DC3)&lt;/li&gt;&lt;li&gt;United States Cyber Command (USCYBERCOM)&lt;/li&gt;&lt;li&gt;Australian Signals Directorate’s Australian Cyber Security Centre (ASD’s ACSC)&lt;/li&gt;&lt;li&gt;Canadian Centre for Cyber Security (CCCS)&lt;/li&gt;&lt;li&gt;Danish Defence Intelligence Service (DDIS)&lt;/li&gt;&lt;li&gt;Estonian Foreign Intelligence Service (EFIS)&lt;/li&gt;&lt;li&gt;Estonian National Cyber Security Centre (NCSC-EE)&lt;/li&gt;&lt;li&gt;French Cybersecurity Agency (ANSSI)&lt;/li&gt;&lt;li&gt;Netherlands Defence Intelligence and Security Service (MIVD)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;It is therefore unclear which organization(s) reported the erroneous IOCs as well as who were responsible for verifying them before publication.&lt;/p&gt;&lt;p&gt;In summary, these are the incorrect and correct IOC domains:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Incorrect IOC: &lt;del&gt;*.accesscan[.]org&lt;/del&gt; (not registered)&lt;/li&gt;&lt;li&gt;Correct IOC: *.accesscam[.]org (registered by Dynu Systems)&lt;/li&gt;&lt;li&gt;Incorrect IOC: &lt;del&gt;*.glize[.]com&lt;/del&gt; (legitimate website, now closed)&lt;/li&gt;&lt;li&gt;Correct IOC: *.giize[.]com (registered by Dynu Systems)&lt;/li&gt;&lt;li&gt;Correct IOC: *.gleeze[.]com (registered by Dynu Systems)&lt;/li&gt;&lt;/ul&gt;</content:encoded>
    </item>
    <item>
      <title>njRAT runs MassLogger</title>
      <link>https://www.netresec.com/?page=Blog&amp;month=2026-02&amp;post=njRAT-runs-MassLogger</link>
      <pubDate>Mon, 02 Feb 2026 19:39:00 GMT</pubDate>
      <dc:creator>Erik Hjelmvik</dc:creator>
      <enclosure url="https://media.netresec.com/images/NetworkMinerProfessional_3-1_njRAT_images_523x582.webp" type="image/webp" />
      <category>njRAT</category>
      <category>NetworkMiner Professional</category>
      <category>malware-traffic-analysis.net</category>
      <category>MassLogger</category>
      <guid>https://www.netresec.com/?page=Blog&amp;month=2026-02&amp;post=njRAT-runs-MassLogger</guid>
      <description>njRAT is a remote access trojan that has been around for more than 10 years and still remains one of the most popular RATs among criminal threat actors. This blog post demonstrates how NetworkMiner Professional can be used to decode the njRAT C2 traffic to extract artifacts like screenshots, command[...]</description>
      <content:encoded>&lt;img src="https://media.netresec.com/images/njRAT-purple_2000x1323.webp" alt="njRAT" width="2000" height="1323" style="float: right; margin-left: 5px; max-width: 50%; height:auto" /&gt;&lt;p&gt;
				njRAT is a remote access trojan that has been around for more than 10 years and still remains one of the most popular RATs among criminal threat actors. This blog post demonstrates how &lt;a href="https://www.netresec.com/?page=BuyNetworkMiner"&gt;NetworkMiner Professional&lt;/a&gt; can be used to decode the njRAT C2 traffic to extract artifacts like screenshots, commands and transferred files.
			&lt;/p&gt;&lt;p&gt;
				A PCAP file with njRAT traffic was &lt;a href="https://malware-traffic-analysis.net/2026/01/29/index.html"&gt;published on malware-traffic-analysis.net&lt;/a&gt; last week. After loading this PCAP file, NetworkMiner Professional reveals that the attacker downloaded full resolution screenshots of the victim’s screen.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/NetworkMinerProfessional_3-1_njRAT_images_523x582.webp" alt="Overview of screenshots sent to C2 server" width="523" height="582" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;i&gt;Image: Overview of screenshots sent to C2 server&lt;/i&gt;&lt;/p&gt;&lt;img src="https://media.netresec.com/images/njRAT_Desktop_260129030346.jpg" alt="Screenshot extracted from njRAT traffic by NetworkMiner" width="820" height="460" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;i&gt;Image: Screenshot extracted from njRAT traffic by NetworkMiner&lt;/i&gt;&lt;/p&gt;&lt;p&gt;The file “New Purchase Order and Specifications.exe” in this screenshot is the njRAT binary that was used to infect the PC.&lt;/p&gt;&lt;p&gt;
				A list of njRAT commands sent from the C2 server to the victim can be viewed on NetworkMiner’s Parameters tab by filtering for ”njRAT server command”.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/NetworkMinerProfessional_3-1_Parameters_njRAT_523x479.webp" alt="njRAT commands" width="523" height="479" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;
				The following njRAT commands are present here:
				&lt;ul&gt;&lt;li&gt;CAP = take screenshot&lt;/li&gt;&lt;li&gt;inv = invoke (run) a plugin (dll)&lt;/li&gt;&lt;li&gt;rn = run a tool (executable)&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;
				Additional njRAT commands can be found in our writeup for the &lt;a href="https://netresec.com/?b=2541a39"&gt;Decoding njRAT traffic with NetworkMiner video&lt;/a&gt;, which we published last year.
			&lt;/p&gt;&lt;p&gt;&lt;b&gt;njRAT File Transfers&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				The “inv” and “rn” commands both transfer and execute additional code on the victim machine. The “inv” command typically transfers a DLL file that is used as a plugin, while the “rn” commands sends an executable file. These DLL and EXE files are transferred in gzip compressed format, which is why NetworkMiner extracts them as .gz files.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/NetworkMinerProfessional_3-1_Files_njRAT_516x296.webp" alt="njRAT files extracted from PCAP" width="516" height="296" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;i&gt;Image: Gzip compressed files extracted from njRAT traffic&lt;/i&gt;&lt;/p&gt;&lt;p&gt;
				This oneliner command lists the internal/original file names and corresponding MD5 hashes of the gzip compressed executables sent to the victim PC:
			&lt;/p&gt;&lt;ul style="list-style: none; font-family: Consolas, 'Lucida Console', Monaco, 'Courier New'; background-color: #111111; color: #cccccc; border: 1px solid #999999; padding: 6px; margin: 4px; word-break: break-all" x-ms-format-detection="none"&gt;&lt;li style="color: #ffffff;"&gt;for f in njRAT-rn*.gz; do echo $f; gunzip -c $f | exiftool - | grep Original; gunzip -c $f | md5sum; done&lt;/li&gt;&lt;li&gt;njRAT-rn-260129030403.gz&lt;/li&gt;&lt;li&gt;Original File Name              : Stub.exe&lt;/li&gt;&lt;li&gt;ca819e936f6b913e2b80e9e4766b8e79  -&lt;/li&gt;&lt;li&gt;njRAT-rn-260129030433.gz&lt;/li&gt;&lt;li&gt;Original File Name              : Stub.exe&lt;/li&gt;&lt;li&gt;e422a4ce321be1ed989008d74ddb6351  -&lt;/li&gt;&lt;li&gt;njRAT-rn-260129030451.gz&lt;/li&gt;&lt;li&gt;Original File Name              : CloudServices.exe&lt;/li&gt;&lt;li&gt;fcbb7c0c68afa04139caa55efe580ff5  -&lt;/li&gt;&lt;li&gt;njRAT-rn-260129031041.gz&lt;/li&gt;&lt;li&gt;Original File Name              : Stub.exe&lt;/li&gt;&lt;li&gt;0ae3798c16075a9042c5dbb18bd10a5c  -&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
				The MD5 hashes of the files inside the gzip compressed streams can also be seen on the Parameters tab in NetworkMiner.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/NetworkMinerProfessional_3-1_Parameters_njRAT_md5_516x296.webp" alt="njRAT file MD5 hashes" width="516" height="296" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;b&gt;MassLogger&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				The “CloudServices.exe” executable is a known credential stealer called MassLogger. This particular &lt;a href="https://bazaar.abuse.ch/sample/ea32ac24bd8dbac770beec79fa78d790a6156ceb5ff28d2bdba9b1f28a8b4628/"&gt;MassLogger sample&lt;/a&gt; is hard coded to exfiltrate data in an email to kingsnakeresult@mcnzxz[.]com. The email is sent through the SMTP server cphost14.qhoster[.]net. See the execution of this sample &lt;a href="https://tria.ge/260129-qpr2msg16c"&gt;on Triage&lt;/a&gt; for additional details regarding the MassLogger payload in CloudServices.exe.
			&lt;/p&gt;&lt;p&gt;&lt;b&gt;IOC List&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				njRAT (splitter = "|Ghost|")
				&lt;ul&gt;&lt;li&gt;58f1a46dba84d31257f1e0f8c92c59ec = njRAT sample&lt;/li&gt;&lt;li&gt;104.248.130.195:7492 = njRAT C2 server&lt;/li&gt;&lt;li&gt;burhanalassad.duckdns[.]org:7492 = njRAT C2 server&lt;/li&gt;&lt;li&gt;801a5d1e272399ca14ff7d6da60315ef = sc2.dll&lt;/li&gt;&lt;li&gt;ca819e936f6b913e2b80e9e4766b8e79 = Stub.exe&lt;/li&gt;&lt;li&gt;e422a4ce321be1ed989008d74ddb6351 = Stub.exe&lt;/li&gt;&lt;li&gt;fcbb7c0c68afa04139caa55efe580ff5 = CloudServices.exe&lt;/li&gt;&lt;li&gt;0ae3798c16075a9042c5dbb18bd10a5c = Stub.exe&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;
				MassLogger
				&lt;ul&gt;&lt;li&gt;fcbb7c0c68afa04139caa55efe580ff5&lt;/li&gt;&lt;li&gt;kingsnakeresult@mcnzxz[.]com&lt;/li&gt;&lt;li&gt;cphost14.qhoster.net:587&lt;/li&gt;&lt;li&gt;78.110.166.82:587&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</content:encoded>
    </item>
    <item>
      <title>Decoding malware C2 with CyberChef</title>
      <link>https://www.netresec.com/?page=Blog&amp;month=2026-01&amp;post=Decoding-malware-C2-with-CyberChef</link>
      <pubDate>Tue, 20 Jan 2026 12:10:00 GMT</pubDate>
      <dc:creator>Erik Hjelmvik</dc:creator>
      <enclosure url="https://media.netresec.com/videos/CyberChef-XOR_1280x672.mp4" type="video/mp4" />
      <category>Netresec</category>
      <category>CyberChef</category>
      <category>XOR</category>
      <category>PCAP</category>
      <category>CapLoader</category>
      <category>key007</category>
      <category>PowerShell</category>
      <category>GhostWeaver</category>
      <category>MintsLoader</category>
      <category>finger</category>
      <category>Video</category>
      <category>videotutorial</category>
      <guid>https://www.netresec.com/?page=Blog&amp;month=2026-01&amp;post=Decoding-malware-C2-with-CyberChef</guid>
      <description>This video tutorial demonstrates how malware XOR encrypted and obfuscated C2 traffic can be decoded with CyberChef. The analyzed PCAP files can be downloaded from malware-traffic-analysis.net. CyberChef recipe to decode the reverse shell traffic to 103.27.157.146:4444: From_Hex(Auto) XOR({option:Hex[...]</description>
      <content:encoded>&lt;p&gt;
				This video tutorial demonstrates how malware XOR encrypted and obfuscated C2 traffic can be decoded with &lt;a href="https://github.com/gchq/CyberChef"&gt;CyberChef&lt;/a&gt;.
			&lt;/p&gt;&lt;video width="1280" height="672" controls="true" poster="https://media.netresec.com/images/CyberChef-XOR_1280x672.png" clip="CyberChef-XOR_1280x672" style="clear: both; max-width: 100%; height:auto"&gt;&lt;source src="https://media.netresec.com/videos/CyberChef-XOR_1280x672.mp4" type="video/mp4" /&gt;&lt;source src="https://media.netresec.com/videos/CyberChef-XOR_1280x672.webm" type="video/webm" /&gt;&lt;/video&gt;&lt;p&gt;
				The analyzed PCAP files can be downloaded from &lt;a href="https://malware-traffic-analysis.net/2026/01/08/index.html"&gt;malware-traffic-analysis.net&lt;/a&gt;.
			&lt;/p&gt;&lt;p&gt;CyberChef recipe to decode the reverse shell traffic to 103.27.157.146:4444:&lt;/p&gt;&lt;div style="background-color: #dff0d8; border: 2px solid #b3dba2; padding: 10px; margin: 10px;"&gt;
				From_Hex('Auto')&lt;br /&gt;
				XOR({'option':'Hex','string':'62'},'Standard',false)&lt;br /&gt;
				Find_/_Replace({'option':'Regex','string':'\\r'},'',true,false,true,false)&lt;br /&gt;
				From_HTML_Entity()
			&lt;/div&gt;&lt;p&gt;Decoded data from first "key007" reverse shell session to 103.27.157.146:4444:&lt;/p&gt;&lt;div style="font-family: 'Lucida Console', Consolas, Monaco, 'Courier New'; background-color: #000000; color: #eeeeee; border: 1px solid #999999; padding: 10px; margin: 10px; word-break: break-all; overflow: auto; max-width: 100%" x-ms-format-detection="none"&gt;
				key007&lt;br /&gt;
				Authentication successful&lt;br /&gt;
				furtheringthemagic.com&lt;br /&gt;
				net group "domain computers" /domain&lt;br /&gt;
				The request will be processed at a domain controller for domain furtheringthemagic.com.&lt;br /&gt;&lt;br /&gt;
				Group name     Domain Computers&lt;br /&gt;
				Comment        All workstations and servers joined to the domain&lt;br /&gt;&lt;br /&gt;
				Members&lt;br /&gt;&lt;br /&gt;
				-------​--------​-------​--------​-------​---------​-------​----------​--------​--------&lt;br /&gt;
				DESKTOP-G71S4PF$&lt;br /&gt;
				The command completed successfully.
			&lt;/div&gt;&lt;p&gt;CyberChef recipe to decode obfuscated PowerShell payload from malicious finger service on 64.190.113.206:79:&lt;/p&gt;&lt;div style="background-color: #dff0d8; border: 2px solid #b3dba2; padding: 10px; margin: 10px;"&gt;
				Fork(',','',false)&lt;br /&gt;
				Pad_lines('End',5,',6044')&lt;br /&gt;
				Subtract('Comma')&lt;br /&gt;
				From_Charcode('Space',10)
			&lt;/div&gt;&lt;p&gt;&lt;b&gt;Update 2026-01-21&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				Our classification of the final payload has been updated from AsyncRAT to &lt;a href="https://malpedia.caad.fkie.fraunhofer.de/details/ps1.ghostweaver"&gt;GhostWeaver&lt;/a&gt; thanks to feedback from &lt;a href="https://x.com/DonPasci"&gt;Don Pasci&lt;/a&gt;.
				Don referenced a writeup by Recorded Future's Insikt Group, called &lt;a href="https://www.recordedfuture.com/research/uncovering-mintsloader-with-recorded-future-malware-intelligence-hunting"&gt;Uncovering MintsLoader With Recorded Future Malware Intelligence Hunting&lt;/a&gt;, which states the following:
			&lt;/p&gt;&lt;blockquote&gt;GhostWeaver has periodically been misclassified as AsyncRAT. [...] GhostWeaver and AsyncRAT share certain characteristics within their self-signed X.509 certificates, such as identical expiration dates and serial number lengths; however, these similarities may simply reflect common certificate-generation methods rather than meaningful operational overlap.&lt;/blockquote&gt;&lt;p&gt;We also believe that some of the PowerShell related traffic was caused by &lt;a href="https://malpedia.caad.fkie.fraunhofer.de/details/js.mints_loader"&gt;MintsLoader&lt;/a&gt;.
		&lt;/p&gt;&lt;p&gt;&lt;b&gt;IOC List&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;103.27.157.146:4444 (unknown "key007" reverse shell)&lt;/li&gt;&lt;li&gt;64.190.113.206:79 (finger)&lt;/li&gt;&lt;li&gt;checkifhuman[.]top (finger)&lt;/li&gt;&lt;li&gt;ey267te[.]top (MintsLoader)&lt;/li&gt;&lt;li&gt;64.52.80.153:80 (MintsLoader)&lt;/li&gt;&lt;li&gt;173.232.146.62:25658 (&lt;s&gt;AsyncRAT&lt;/s&gt; GhostWeaver)&lt;/li&gt;&lt;li&gt;08kcbghk807qtl9[.]fun:25658 (&lt;s&gt;AsyncRAT&lt;/s&gt; GhostWeaver)&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Network Forensics Training&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				Check out our &lt;a href="https://www.netresec.com/?page=Training"&gt;network forensic trainings&lt;/a&gt; if you want to learn more about decoding malware C2 traffic.
				I'm teaching a live online &lt;a href="https://www.netresec.com/?page=TrainingIR"&gt;Network Forensics for Incident Response&lt;/a&gt; class on February 23-26.
			&lt;/p&gt;</content:encoded>
    </item>
    <item>
      <title>Latrodectus BackConnect</title>
      <link>https://www.netresec.com/?page=Blog&amp;month=2025-12&amp;post=Latrodectus-BackConnect</link>
      <pubDate>Wed, 10 Dec 2025 13:00:00 GMT</pubDate>
      <dc:creator>Erik Hjelmvik</dc:creator>
      <enclosure url="https://media.netresec.com/images/NetworkMinerProfessional_3-1_Images_BackConnect_523x655.webp" type="image/webp" />
      <category>Latrodectus</category>
      <category>BackConnect</category>
      <category>IcedID</category>
      <category>VNC</category>
      <category>Keyhole</category>
      <category>Reverse shell</category>
      <category>NetworkMiner</category>
      <category>The DFIR Report</category>
      <category>Cyrillic</category>
      <guid>https://www.netresec.com/?page=Blog&amp;month=2025-12&amp;post=Latrodectus-BackConnect</guid>
      <description>This blog post demonstrates how artifacts, such as reverse shell commands and VNC session screenshots, can be extracted from Latrodectus BackConnect C2 traffic with NetworkMiner. I recently learned that the great folks from The DFIR Report have done a writeup covering the Latrodectus backdoor. Their[...]</description>
      <content:encoded>&lt;img src="https://media.netresec.com/images/Latrodectus-BackConnect_2000x2338.webp" alt="Latrodectus BackConnect spider" width="2000" height="2338" style="float: right; margin-left: 10px; max-width: 50%; height:auto" /&gt;&lt;p&gt;This blog post demonstrates how artifacts, such as reverse shell commands and VNC session screenshots, can be extracted from Latrodectus BackConnect C2 traffic with &lt;a href="https://www.netresec.com/?page=NetworkMiner"&gt;NetworkMiner&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;
				I recently learned that the great folks from &lt;a href="https://thedfirreport.com"&gt;The DFIR Report&lt;/a&gt; have done a writeup covering the Latrodectus backdoor. Their report is titled &lt;a href="https://thedfirreport.com/2025/09/29/from-a-single-click-how-lunar-spider-enabled-a-near-two-month-intrusion/"&gt;From a Single Click: How Lunar Spider Enabled a Near Two-Month Intrusion&lt;/a&gt;.
			&lt;/p&gt;&lt;p&gt;
				I found it particularly interesting that the threat actors used &lt;a href="https://malpedia.caad.fkie.fraunhofer.de/details/win.latrodectus"&gt;Latrodectus&lt;/a&gt; to drop a BackConnect RAT to the victim PC. I have verified that this RAT’s Command and Control (C2) traffic is using the exact same &lt;a href="https://netresec.com/?b=22A38f9"&gt;BackConnect C2 protocol&lt;/a&gt; as what would previously be seen in &lt;a href="https://malpedia.caad.fkie.fraunhofer.de/details/win.icedid"&gt;IcedID&lt;/a&gt; and &lt;a href="https://malpedia.caad.fkie.fraunhofer.de/details/win.qakbot"&gt;QakBot&lt;/a&gt; infections.
			&lt;/p&gt;&lt;p&gt;
				This BackConnect RAT supports features such as:
				&lt;ul&gt;&lt;li&gt;Reverse VNC (&lt;a href="https://malpedia.caad.fkie.fraunhofer.de/details/win.keyhole"&gt;Keyhole&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Reverse SOCKS&lt;/li&gt;&lt;li&gt;Reverse shell (cmd.exe or  powershell)&lt;/li&gt;&lt;li&gt;File manager&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;NetworkMiner&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				I immediately recognized the &lt;a href="https://netresec.com/?b=22A38f9"&gt;BackConnect protocol&lt;/a&gt; because I spent many hours reverse engineering that protocol back in 2022. I later spent even more time building a parser for it in 2023. This BackConnect parser was eventually published as part of the &lt;a href="https://netresec.com/?b=23A41e6"&gt;NetworkMiner 2.8.1 release&lt;/a&gt;.
			&lt;/p&gt;&lt;p&gt;
				I was happy to see that NetworkMiner could parse the BackConnect traffic in The DFIR Report’s &lt;a href="https://thedfirreport.com/2025/09/29/from-a-single-click-how-lunar-spider-enabled-a-near-two-month-intrusion/"&gt;Latrodectus case&lt;/a&gt; (#TB28761).
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/NetworkMinerProfessional_3-1_Images_BackConnect_523x655.webp" alt="Images extracted from BackConnect traffic by NetworkMiner Professional 3.1" width="523" height="655" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;
				The only caveat was that I had to use &lt;a href="https://www.netresec.com/?page=BuyNetworkMiner"&gt;NetworkMiner Professional&lt;/a&gt;, because it has a built-in protocol detection feature that detects the BackConnect traffic and applies the correct parser. That feature isn’t included in the free version of NetworkMiner, which is why it doesn’t know what to do with this strange looking TCP traffic to port 443.
			&lt;/p&gt;&lt;p&gt;
				Below are some screenshots extracted with NetworkMiner Professional from the BackConnect reverse VNC traffic.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/VNC_58D23BBC_240513142808.jpg" alt="Keyhole reverse VNC session" width="1024" height="832" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;i&gt;Image: Keyhole reverse VNC session&lt;/i&gt;&lt;/p&gt;&lt;img src="https://media.netresec.com/images/VNC_58D222F7_240513125919_REDACTED.webp" alt="Attacker fails to inspect the file ad_users.txt" width="1024" height="832" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;i&gt;Image: Attacker fails to inspect ad_users.txt&lt;/i&gt;&lt;/p&gt;&lt;img src="https://media.netresec.com/images/VNC_58D23D61_240514162001_REDACTED.webp" alt="Attacker launches additional malware with rundll" width="1024" height="832" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;i&gt;
					Image: Attacker launches additional malware with rundll
				&lt;/i&gt;&lt;/p&gt;&lt;img src="https://media.netresec.com/images/VNC_58D23755_240514163635.jpg" alt="Task Manager in BackConnect VNC session" width="1024" height="832" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;
				The reverse VNC activity spanned a period of over two weeks, which is very impressive for this type of intrusion data set. The threat actors used the BackConnect reverse VNC service to access the machine several times during this period, for example to steal credentials and install additional malware.
			&lt;/p&gt;&lt;p&gt;
				A histogram of interactive BackConnect events, including reverse shell, VNC and file manager sessions, show that the majority of the work was carried out around 12pm UTC.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/BackConnect-working-hours_943x530.webp" alt="BackConnect working hours histogram" width="943" height="530" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;b&gt;Keylog of the Attacker&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				Not only does the BackConnect network traffic from the intrusion allow us to extract screenshots from the VNC traffic. NetworkMiner also extracts the attacker’s hands-on keyboard activity.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/NetworkMinerProfessional_3-1_Parameters_BackConnect_Key-pressed_REDACTED_524x675.webp" alt="Keys pressed by attacker in BackConnect VNC session" width="524" height="675" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;
				The keylog shows that the attacker accidentally typed &lt;nobr&gt;“cd //”&lt;/nobr&gt; instead of &lt;nobr&gt;“cd ..”&lt;/nobr&gt; at one point. Here’s the screenshot that NetworkMiner extracted from the reverse VNC traffic after the attacker had corrected the typo.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/VNC_58D23D61_240514161620.jpg" alt="Command shell in VNC session" width="1024" height="832" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;
				This typo might seem a bit odd, but if you compare the US keyboard layout with the Russian Cyrillic one, then you’ll see that the dot key on the Cyrillic keyboard is at the same place as slash on the US keyboard.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/KB_Russian_1280x427.webp" alt="Russian windows keyboard layout aka JCUKEN for Russian with dot character marked" width="1280" height="427" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;i&gt;
					Image: Russian Windows keyboard layout &lt;a href="https://en.wikipedia.org/wiki/File:KB_Russian.svg"&gt;from Wikipedia&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;
				This reminds me of another BackConnect infection, captured by &lt;a href="https://infosec.exchange/@malware_traffic"&gt;Brad Duncan&lt;/a&gt;, which he named &lt;a href="https://malware-traffic-analysis.net/2023/09/28/index.html"&gt;IcedID (BokBot) infection with Keyhole VNC and Cobalt Strike&lt;/a&gt;. Here’s a screenshot that NetworkMiner extracted from the PCAP file shared by Brad:
			&lt;/p&gt;&lt;a href="https://media.netresec.com/images/VNC_C40394EC_230928155157.jpg"&gt;&lt;img src="https://media.netresec.com/images/VNC_C40394EC_230928155157_520x317.webp" alt="Attacker types фьфящт instead of amazon in BackConnect VNC session" width="520" height="317" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;/a&gt;&lt;p&gt;
				The attacker can be seen typing “фьфящт” into the browser’s address bar in that VNC session. Фьфящт doesn’t mean anything in Russian, but the individual positions on the Russian keyboard corresponds to “amazon” on a standard Latin keyboard layout.
			&lt;/p&gt;&lt;p&gt;&lt;b&gt;Reverse Shell&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				NetworkMiner also extracts commands from BackConnect reverse shell sessions.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/NetworkMinerProfessional_3-1_Parameters_BackConnect_Shell-command_REDACTED2_524x526.webp" alt="Shell commands from BackConnect session displayed in NetworkMiner Professional" width="524" height="526" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;
				This screenshot shows that the attacker sent the following command to the reverse shell:
			&lt;/p&gt;&lt;div style="font-family: 'Lucida Console', Consolas, Monaco, 'Courier New'; background-color: #000000; color: #eeeeee; border: 1px solid #999999; padding: 10px; margin: 10px; overflow: auto; max-width: 100%" x-ms-format-detection="none"&gt;
				rundll32 C:\ProgramData\sys.dll,StartUp471
			&lt;/div&gt;&lt;p&gt;
				This command launched a &lt;a href="https://malpedia.caad.fkie.fraunhofer.de/details/win.cobalt_strike"&gt;Cobalt Strike&lt;/a&gt; implant that connected to avtechupdate[.]com. Analysis of the Cobalt Strike C2 traffic is not in the scope for this blog post though, but the &lt;a href="https://thedfirreport.com/2025/09/29/from-a-single-click-how-lunar-spider-enabled-a-near-two-month-intrusion/"&gt;original writeup&lt;/a&gt; for this lab contains additional details on the Cobalt Strike infection.
			&lt;/p&gt;&lt;p&gt;
				The attacker later issued another rundll command to launch another red-team/penetration testing tool, namely &lt;a href="https://malpedia.caad.fkie.fraunhofer.de/details/win.brute_ratel_c4"&gt;Brute Ratel C4&lt;/a&gt;.
			&lt;/p&gt;&lt;div style="font-family: 'Lucida Console', Consolas, Monaco, 'Courier New'; background-color: #000000; color: #eeeeee; border: 1px solid #999999; padding: 10px; margin: 10px; overflow: auto; max-width: 100%" x-ms-format-detection="none"&gt;
				rundll32 wscadminui.dll, wsca
			&lt;/div&gt;&lt;p&gt;
				This Brute Ratel backdoor connected to C2 servers on erbolsan[.]com and a few other domains (see IOC list). The DFIR Report’s &lt;a href="https://thedfirreport.com/2025/09/29/from-a-single-click-how-lunar-spider-enabled-a-near-two-month-intrusion/"&gt;writeup&lt;/a&gt; contains additional information about that payload as well.
			&lt;/p&gt;&lt;p&gt;&lt;b&gt;About The DFIR Report&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				The DFIR Report provide analysis of cyber intrusions, detailing the tactics, techniques, and procedures used by attackers. They share insights into various attacks, from initial access to execution, and offer private threat briefs and reports for organizations.
			&lt;/p&gt;&lt;p&gt;
				A lab containing Elastic or Splunk data from this infection can be purchased from &lt;a href="https://dfirlabs.thedfirreport.com/store"&gt;The DFIR Report’s store&lt;/a&gt;. Look for the lab titled “The Lunar Tangled Malware Web - Public Case #28761”. The DFIR Report also sell access to a &lt;a href="https://thedfirreport.com/services/threat-intelligence/"&gt;threat intelligence service&lt;/a&gt;, which contains even more detailed lab data from this and other malware infections.
			&lt;/p&gt;&lt;p&gt;
				Netresec is not affiliated with The DFIR Report.
			&lt;/p&gt;&lt;p&gt;&lt;b&gt;IOC List&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				The analyzed infection is from 2024, so these indicators are in no way fresh. They are included here for research purposes and to facilitate retro hunting.
			&lt;/p&gt;&lt;p&gt;
				BackConnect C2 ip:port
				&lt;ul&gt;&lt;li&gt;185.93.221.12:443&lt;/li&gt;&lt;li&gt;193.168.143.196:443&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;
				Latrodectus domains
				&lt;ul&gt;&lt;li&gt;grasmetral[.]com&lt;/li&gt;&lt;li&gt;illoskanawer[.]com&lt;/li&gt;&lt;li&gt;jarkaairbo[.]com&lt;/li&gt;&lt;li&gt;scupolasta[.]store&lt;/li&gt;&lt;li&gt;workspacin[.]cloud&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;
				Cobalt Strike C2 URI
				&lt;ul&gt;&lt;li&gt;hxxps://resources.avtechupdate[.]com/samlss/vm.ico&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;
				Brute Ratel C4 domains
				&lt;ul&gt;&lt;li&gt;dauled[.]com&lt;/li&gt;&lt;li&gt;erbolsan[.]com&lt;/li&gt;&lt;li&gt;kasym500[.]com&lt;/li&gt;&lt;li&gt;kasymdev[.]com&lt;/li&gt;&lt;li&gt;samderat200[.]com&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Network Forensics Training&lt;/b&gt;&lt;/p&gt;&lt;img src="https://media.netresec.com/images/Training_IR_1000x975.webp" alt="Network forensics training for incident response logo" width="1000" height="975" style="float: right; margin-left: 10px; max-width: 30%; height:auto" /&gt;&lt;p&gt;
				Check out our &lt;a href="https://www.netresec.com/?page=Training"&gt;network forensics training&lt;/a&gt; if you want to learn more about analyzing malware traffic in PCAP files.
			&lt;/p&gt;&lt;p&gt;
				I will teach an online &lt;a href="https://www.netresec.com/?page=TrainingIR"&gt;class for incident responders and blue teams&lt;/a&gt; on February 23-26. That class allows a maximum of 15 attendees in order to provide a good environment for taking questions. So don’t miss out on this chance to get your hands dirty with some packet analysis together with me!
			&lt;/p&gt;</content:encoded>
    </item>
    <item>
      <title>NetworkMiner 3.1 Released</title>
      <link>https://www.netresec.com/?page=Blog&amp;month=2025-12&amp;post=NetworkMiner-3-1-Released</link>
      <pubDate>Mon, 01 Dec 2025 08:20:00 GMT</pubDate>
      <dc:creator>Erik Hjelmvik</dc:creator>
      <enclosure url="https://media.netresec.com/images/NetworkMinerProfessional_Credentials_Proxy-Authenticate_526x285.webp" type="image/webp" />
      <category>NetworkMiner</category>
      <category>Proxy-Authenticate</category>
      <category>NetworkMiner Professional</category>
      <category>njRAT</category>
      <category>Redline</category>
      <category>MC-NMF</category>
      <guid>https://www.netresec.com/?page=Blog&amp;month=2025-12&amp;post=NetworkMiner-3-1-Released</guid>
      <description>This NetworkMiner release brings improved extraction of artifacts like usernames, passwords and hostnames from network traffic. We have also made some updates to the user interface and continued our effort to extract even more details from malware C2 traffic. More Artifacts Extracted Usernames and p[...]</description>
      <content:encoded>&lt;img src="https://media.netresec.com/images/NetworkMiner_3-1_707x707.webp" alt="NetworkMiner 3.1 Logo" width="707" height="707" style="float: right; margin-left: 10px; max-width: 30%; height:auto" /&gt;&lt;p&gt;
				This &lt;a href="https://www.netresec.com/?page=NetworkMiner"&gt;NetworkMiner&lt;/a&gt; release brings improved extraction of artifacts like usernames, passwords and hostnames from network traffic. We have also made some updates to the user interface and continued our effort to extract even more details from malware C2 traffic.
			&lt;/p&gt;&lt;p&gt;&lt;b&gt;More Artifacts Extracted&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				Usernames and passwords are now extracted from &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Proxy-Authenticate"&gt;Proxy-Authenticate&lt;/a&gt; headers. NetworkMiner’s username extraction support for SMTP &lt;a href="https://www.ietf.org/archive/id/draft-murchison-sasl-login-00.txt"&gt;AUTH LOGIN&lt;/a&gt; requests has also been improved.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/NetworkMinerProfessional_Credentials_Proxy-Authenticate_526x285.webp" alt="Username and password extracted from Proxy-Authenticate HTTP request" width="526" height="285" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;i&gt;Image: Username and password extracted from HTTP Proxy-Authenticate header&lt;/i&gt;&lt;/p&gt;&lt;p&gt;
				NetworkMiner has several methods for passively identifying host names of clients and servers. We’ve added a few additional hostname sources to this release, such as client hostnames from SMTP EHLO requests and TLS &lt;a href="https://www.rfc-editor.org/rfc/rfc3546#section-3.1"&gt;SNI fields&lt;/a&gt; from &lt;a href="https://en.wikipedia.org/wiki/Remote_Desktop_Protocol"&gt;RDP&lt;/a&gt; traffic.
			&lt;/p&gt;&lt;p&gt;&lt;b&gt;User Interface Improvements&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				The most significant user interface update in the 3.1 release is probably the new “Not in” keyword filter mode. I received this feature request when teaching a &lt;a href="https://www.netresec.com/?page=Training"&gt;network forensics class&lt;/a&gt; (thanks for the great idea Lukas!). This filter mode is the opposite to the default “Exact Phrase” setting.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/NetworkMinerProfessional_3-1_Parameters_HTTP_Not-in_521x479.webp" alt="NetworkMiner Professional with filter Not in HTTP" width="521" height="479" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;i&gt;Image: Parameters extracted from anything but HTTP traffic in Johannes Weber's &lt;a href="https://weberblog.net/the-ultimate-pcap/"&gt;Ultimate PCAP&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;
				The “Not in” filter mode comes in very handy when the information you’re interested in is drowning in a sea of non-relevant, but easily identifiable, data.
			&lt;/p&gt;&lt;p&gt;&lt;b&gt;Malware C2 Traffic&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				NetworkMiner can extract information from various malware Command-and-Control (C2) protocols like Latrodectus/IcedID &lt;a href="https://netresec.com/?b=23A4de6"&gt;BackConnect&lt;/a&gt;, &lt;a href="https://netresec.com/?b=22479d5"&gt;Meterpreter&lt;/a&gt;, &lt;a href="https://netresec.com/?b=2541a39"&gt;njRAT&lt;/a&gt;, &lt;a href="https://malpedia.caad.fkie.fraunhofer.de/details/win.redline_stealer"&gt;Redline Stealer&lt;/a&gt;, &lt;a href="https://malpedia.caad.fkie.fraunhofer.de/details/win.remcos"&gt;Remcos&lt;/a&gt;, &lt;a href="https://malpedia.caad.fkie.fraunhofer.de/details/win.rms"&gt;RMS&lt;/a&gt; and &lt;a href="https://netresec.com/?b=245092b"&gt;StealC&lt;/a&gt;. The free version of NetworkMiner can extract information, such as commands or transferred files, from these malware protocols as long as the C2 server listens on a “standard” port number. But if the C2 server runs on some other port (which often is the case), then &lt;a href="https://www.netresec.com/?page=BuyNetworkMiner"&gt;NetworkMiner Professional&lt;/a&gt;’s Port Independent Protocol Identification (PIPI) feature is required to identify the correct parser for the network traffic.
			&lt;/p&gt;&lt;p&gt;
				Implementing malware C2 protocol parsers is sometimes a thankless task because these protocols tend to get replaced at a much higher rate compared to legitimate network protocols. But it is an important task nevertheless.
			&lt;/p&gt;&lt;p&gt;&lt;b&gt;njRAT&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				A popular malware for which the C2 protocol hasn’t changed much during the past decade is njRAT. In fact, new &lt;a href="https://bazaar.abuse.ch/browse/signature/njRAT/"&gt;njRAT samples&lt;/a&gt; are discovered by security researchers pretty much every day despite it being a 13 years old trojan. NetworkMiner’s njRAT support has therefore been improved in this release. NetworkMiner can extract files that are uploaded or downloaded to/from a PC infected with njRAT. This file extraction feature also includes the ability to extract plugins for specific tasks, such as to run a reverse shell, see camera images or steal passwords. njRAT C2 servers transmit these plugins as gzip compressed DLL files to victim computers when needed.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/NetworkMinerProfessional_Linux_Files_njRAT_519x368.webp" alt="Files extracted from njRAT traffic by NetworkMiner" width="519" height="368" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;i&gt;
					Image: Files extracted from njRAT in PCAP from our &lt;a href="https://www.netresec.com/?page=Training"&gt;network forensics class&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;
				NetworkMiner extracts these gz compressed plugin DLL files to disk. A new feature in the 3.1 release is that it then decompresses the gz data and calculates an MD5 hash of the file contents, but without saving the decompressed data to disk. The MD5 hash of the transferred files are instead displayed on the Parameters tab as seen in this screenshot:
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/NetworkMinerProfessional_Linux_Parameters_njRAT-MD5_519x368.webp" alt="MD5 hashes of njRAT plugin DLLs" width="519" height="368" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;i&gt;Image: MD5 hashes of njRAT plugin DLLs&lt;/i&gt;&lt;/p&gt;&lt;p&gt;
				The following njRAT plugin MD5 hashes can be seen in this screenshot:
				&lt;ul&gt;&lt;li&gt;cef141d894400bc2e0096d1ed0c8f95b (aka inf.dll)&lt;/li&gt;&lt;li&gt;a73edb60b80a2dfa86735d821bea7b19 (aka cam.dll)&lt;/li&gt;&lt;li&gt;a93349ba5e621cfb7a46dc9f401fd998 (aka plg.dll)&lt;/li&gt;&lt;li&gt;11375fb0cee4c06b5cefa2031ee2ed6d (aka pw.dll)&lt;/li&gt;&lt;li&gt;19967e886edcd2f22f8d4a58c8ea3773 (aka sc2.dll)&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;
				See our video &lt;a href="https://netresec.com/?b=2541a39"&gt;Decoding njRAT traffic with NetworkMiner&lt;/a&gt; for a more in-depth demonstration of NetworkMiner’s njRAT parsing features.
			&lt;/p&gt;&lt;p&gt;&lt;b&gt;Redline Stealer&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				Another common malware is &lt;a href="https://malpedia.caad.fkie.fraunhofer.de/details/win.redline_stealer"&gt;Redline Stealer&lt;/a&gt;. It uses a legitimate protocol called &lt;a href="https://learn.microsoft.com/en-us/openspecs/windows_protocols/mc-nmf/"&gt;MC-NMF&lt;/a&gt; to send instructions and exfiltrate data from victim computers. Basic support for the MC-NMF protocol has therefore been added to NetworkMiner 3.1. MC-NMF is also used by legitimate services like Microsoft’s &lt;a href="https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview"&gt;Service Bus&lt;/a&gt;, so as a bonus you can now analyze such traffic with NetworkMiner as well. The MC-NMF protocol has a compression routine called &lt;a href="https://learn.microsoft.com/en-us/openspecs/windows_protocols/mc-nbfse/3caf1ffa-6333-4c5f-8aa7-c06db4748c1b"&gt;MC-NBFSE&lt;/a&gt;, which is utilized by Redline Stealer. NetworkMiner can’t decompress this format, so files are extracted to disk in compressed form.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/NetworkMinerProfessional_Files_Redline-Stealer_511x401.webp" alt="Files extracted by NetworkMiner from Redline Stealer traffic" width="511" height="401" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;i&gt;Image: Files extracted from &lt;a href="https://www.joesandbox.com/analysis/1815055"&gt;Redline execution on Joe Sandbox&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;
				You can probably spot some interesting details in the extracted data even when viewing the NBFSE compressed contents though.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/NetworkMiner_File-Details_Redline-NBFSE_801x804.webp" alt="Contents of files extracted by NetworkMiner from Redline Stealer traffic" width="801" height="804" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;i&gt;Image: NBFSE compressed file contents extracted from &lt;a href="https://www.joesandbox.com/analysis/1815055"&gt;Redline execution on Joe Sandbox&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Bug Fixes&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				NetworkMiner 3.1 also resolves several minor bugs. One of these bugs could cause NetworkMiner to hang when showing file details &lt;a href="https://netresec.com/?b=2542784"&gt;in Linux&lt;/a&gt;. Another resolved bug prevented some IPv6 payload from being parsed correctly if the Ethernet frame contained trailing padding data. The VoIP call metadata extraction has also been improved in &lt;a href="https://www.netresec.com/?page=BuyNetworkMiner"&gt;NetworkMiner Professional&lt;/a&gt;.
			&lt;/p&gt;&lt;p&gt;&lt;b&gt;Upgrading to Version 3.1&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				Users who have purchased NetworkMiner Professional can download version 3.1 from our &lt;a href="https://www.netresec.com/portal/"&gt;customer portal&lt;/a&gt;, or use the “Check for Updates” feature from NetworkMiner's Help menu. Those who instead prefer to use the free and open source version can grab the latest release of NetworkMiner from the &lt;a href="https://www.netresec.com/?page=NetworkMiner"&gt;official NetworkMiner page&lt;/a&gt;.
			&lt;/p&gt;</content:encoded>
    </item>
    <item>
      <title>Optimizing IOC Retention Time</title>
      <link>https://www.netresec.com/?page=Blog&amp;month=2025-11&amp;post=Optimizing-IOC-Retention-Time</link>
      <pubDate>Thu, 06 Nov 2025 12:05:00 GMT</pubDate>
      <dc:creator>Erik Hjelmvik</dc:creator>
      <enclosure url="https://media.netresec.com/images/IOC-Pyramid-of-Pain_2048x1123.webp" type="image/webp" />
      <category>IOC</category>
      <category>NDR</category>
      <category>IDS</category>
      <category>SIEM</category>
      <category>Expiration date</category>
      <category>Pyramid of Pain</category>
      <category>Ghost IOC</category>
      <category>false positive</category>
      <category>last seen</category>
      <category>RFC9424</category>
      <category>lifetime</category>
      <category>lifespan</category>
      <category>ASCII-art</category>
      <guid>https://www.netresec.com/?page=Blog&amp;month=2025-11&amp;post=Optimizing-IOC-Retention-Time</guid>
      <description>Are you importing indicators of compromise (IOC) in the form of domain names and IP addresses into your SIEM, NDR or IDS? If so, have you considered for how long you should keep looking for those IOCs? An IoT botnet study from 2022 found that 90% of C2 servers had a lifetime of less than 5 days and[...]</description>
      <content:encoded>&lt;p&gt;
				Are you importing indicators of compromise (IOC) in the form of domain names and IP addresses into your &lt;a href="https://en.wikipedia.org/wiki/Security_information_and_event_management"&gt;SIEM&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Network_detection_and_response"&gt;NDR&lt;/a&gt; or &lt;a href="https://en.wikipedia.org/wiki/Intrusion_detection_system"&gt;IDS&lt;/a&gt;? If so, have you considered for how long you should keep looking for those IOCs?
			&lt;/p&gt;&lt;p&gt;
				An &lt;a href="https://pure.tudelft.nl/ws/portalfiles/portal/147286793/30_577.pdf"&gt;IoT botnet study&lt;/a&gt; from 2022 found that 90% of C2 servers had a lifetime of less than 5 days and 93% had a lifetime shorter than 14 days. Additionally, a recent &lt;a href="https://censys.com/blog/2025-state-of-the-internet-c2-time-to-live"&gt;writeup from Censys&lt;/a&gt; concludes that the median lifespan of Cobalt Strike C2 servers is 5 days. Both these studies indicate that IP and domain name indicators are short lived, yet many organizations cling on to old IOCs for much longer than so. Monitoring for too many old indicators not only costs money, it can even inhibit detection of real intrusions.
			&lt;/p&gt;&lt;p&gt;&lt;b&gt;Pyramid of Pain&lt;/b&gt;&lt;/p&gt;&lt;p&gt;David J. Bianco's &lt;a href="https://detect-respond.blogspot.com/2013/03/the-pyramid-of-pain.html"&gt;pyramid of pain&lt;/a&gt; illustrates how much pain is caused to an adversary if their malicious actions are hindered by defenders blocking various indicators.&lt;/p&gt;&lt;img src="https://media.netresec.com/images/IOC-Pyramid-of-Pain_2048x1123.webp" alt="IOC Pyramid of Pain" width="2048" height="1123" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;
				Indicators at the bottom of the pyramid are trivial for an adversary to replace, which is why IOCs like hashes and IP addresses tend to be very short lived. The indicator types close to the pyramid’s base are also the ones that typically are shared in threat intel feeds.
			&lt;/p&gt;&lt;p&gt;
				It would be nice to detect adversaries with indicators higher up in David’s pyramid of pain, but it is often difficult to craft reliable detection mechanisms for such indicators. The simple indicators at the bottom, like domains, IPs and hashes, are on the other hand very exact and practical for us defenders to work with. So in this sense the pyramid of pain applies to defenders as well, where indicators at the bottom are trivial to use and the &lt;a href="https://www.rfc-editor.org/rfc/rfc9424.html#name-ioc-types-and-the-pyramid-o"&gt;complexity increases&lt;/a&gt; as we go further up. In this sense the Pyramid of Pain can also be viewed as the “Pyramid of Detection Complexity”.
			&lt;/p&gt;&lt;p&gt;&lt;b&gt;Chasing Ghosts&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Many IOCs are “dead” even before you get them. This IOC delay is particularly noticeable when looking at writeups of malware and botnets published by security researchers, in which the IPs and domain names shared in their IOC lists often haven’t been used for several weeks by the time the report gets published. It’s understandable that it takes time to reverse engineer a new piece of malware, compose a blog post and to get the writeup approved for publishing. Nevertheless, those old IOCs often get picked up, redistributed, and used as if they were fresh indicators. Recorded Future &lt;a href="https://www.recordedfuture.com/research/2022-adversary-infrastructure-report"&gt;observed&lt;/a&gt; a 33-day average lead time between when their scans found a C2 server and when it is reported in other sources. Thirty-three days! Only a very small fraction of those C2 servers can be expected to still be active by the time those IOCs are shared by various threat intel providers. All the other C2 servers are dead indicators, or “Ghost IOCs” as I like to call them. Attempting to detect such Ghost IOCs in live network traffic is a waste of resources.&lt;/p&gt;&lt;p&gt;&lt;b&gt;IOC Costs&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
				Most network intrusion detection systems (IDS) only support a certain number of active rules or signatures, which effectively limits the number of IOCs you can look for. Other products charge the user based on the number of monitored IOCs. As an example, Tostes et al.’s paper covering the &lt;a href="https://arxiv.org/abs/2307.16852"&gt;shelf life of an IOC&lt;/a&gt; says that Azure Sentinel Threat Intelligence charges $2.46 per ingested GB. This type of direct cost can then be compared to the cost of not alerting on a known malicious IOC that has timed out. Simplified comparisons like this typically result in poor and misleading guidance to keep using IOCs for much longer than necessary, often hundreds of days or even perpetually.
			&lt;/p&gt;&lt;p&gt;
				One important factor that is missing in such simplified reasoning is the cost for false positive alerts, which increases significantly when monitoring for ghost IOCs. An IP address that is being used as a botnet C2 server one week might be running a totally legitimate service the next week. The risk for false positives is smaller for domain names compared to IP addresses, but hacked websites is one example where domain names often cause false positive alerts as well. One common cause for such domain IOC false positives is the frequent misuse of hacked websites for malware distribution. Such illicit use is often detected and rectified within a couple of days, in particular when this happens to a website belonging to a medium to large sized company or organization. Alerting on DNS based IOCs for a long time after last confirmed sighting therefore also increases the risk for false positives.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/boy-cry-wolf_1024x1024.webp" alt="The boy who cried wolf" width="1024" height="1024" style="float: right; margin-left: 10px; max-width: 30%; height:auto" /&gt;&lt;p&gt;
				The cost of false positives is difficult to estimate, as it involves the time analysts spend in vain trying to verify if a particular alert was a false positive or not. Too many false positives can also cause &lt;a href="https://www.ibm.com/think/topics/alert-fatigue"&gt;alert fatigue&lt;/a&gt; or &lt;a href="https://www.usenix.org/system/files/sec22-alahmadi.pdf"&gt;alarm burnout&lt;/a&gt;, much in the same way as in Aesop’s ancient fable about the boy who cried wolf.
			&lt;/p&gt;&lt;p&gt;
				This implies that monitoring for too many old IOCs actually increases the risk of real sightings of malicious indicators being missed or overlooked due to alert fatigue. This line of thinking might seem contradictory and is often overlooked in research related to the shelf life of indicators. I would personally prefer to use an IOC scoring model that aims to &lt;a href="https://rp.os3.nl/2019-2020/p55/report.pdf"&gt;reduce the number of false positives&lt;/a&gt; rather than using one that attempts to minimize the direct cost of IOC monitoring.
			&lt;/p&gt;&lt;p&gt;&lt;b&gt;Pruning old IOCs&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://datatracker.ietf.org/doc/rfc9424/"&gt;RFC 9424&lt;/a&gt; states that “IOCs should be removed from detection at the end of their life to reduce the likelihood of false positives”. But how do we know if an IOC has reached end of life?
			&lt;/p&gt;&lt;p&gt;
				I’ve previously mentioned that researchers have found that most C2 servers are used for 5 days or less. The optimal number of days to monitor for an IOC depends on several factors, but in general we’re talking about a couple of weeks since last sighting for an IP address and maybe a little longer for domain names. The obvious exception here is &lt;a href="https://en.wikipedia.org/wiki/Domain_generation_algorithm"&gt;DGA&lt;/a&gt; and &lt;a href="https://blogs.infoblox.com/threat-intelligence/rdgas-the-new-face-of-dgas/"&gt;RDGA&lt;/a&gt; domains, which typically have a lifetime of just 24 hours.
			&lt;/p&gt;&lt;p&gt;
				The research paper &lt;a href="https://arxiv.org/pdf/1902.03914"&gt;Taxonomy driven indicator scoring in MISP threat intelligence platforms&lt;/a&gt; introduces an interesting concept, where a score is calculated for each IOC based on factors like confidence, age and decay rate. The IOC can be considered dead or expired when the score reaches zero or if it goes below a specified threshold. The following graph from the MISP paper shows an example of how the score for an IP address IOC could decay over time.
			&lt;/p&gt;&lt;img src="https://media.netresec.com/images/Taxonomy-MISP-fig8_640x384.png" alt="Figure 8 from MISP paper" width="640" height="384" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;i&gt;Image: Figure 8 from Taxonomy driven indicator scoring in MISP threat intelligence platforms&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Recommendations&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;When publishing IOCs, make sure to also include a date for when it was last confirmed to be active, aka “last seen”.&lt;/li&gt;&lt;li&gt;Ask your threat intel vendor if they can provide a last seen date for each of their indicators, or if they have some other way to determine the freshness of their indicators.&lt;/li&gt;&lt;li&gt;Ensure that the IOCs you monitor for are pruned based on age or freshness to reduce the risk (and cost) for false positives.&lt;/li&gt;&lt;li&gt;Prioritize long lived IOCs over short lived ones, for example by striving to use indicators higher up in the pyramid of pain, but only when this can be done without increasing the false positive rate.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</content:encoded>
    </item>
    <item>
      <title>Online Network Forensics Class</title>
      <link>https://www.netresec.com/?page=Blog&amp;month=2025-10&amp;post=Online-Network-Forensics-Class</link>
      <pubDate>Mon, 20 Oct 2025 05:30:00 GMT</pubDate>
      <dc:creator>Erik Hjelmvik</dc:creator>
      <category>Training</category>
      <category>network forensics</category>
      <category>Incident Response</category>
      <category>PCAP</category>
      <guid>https://www.netresec.com/?page=Blog&amp;month=2025-10&amp;post=Online-Network-Forensics-Class</guid>
      <description>I will teach a live online network forensics training on February 23-26. The full title of the class is Network Forensics for Incident Response, where we will analyze PCAP files containing network traffic from hackers and malware. The training is split into four interactive sessions running from 13:[...]</description>
      <content:encoded>&lt;img src="https://media.netresec.com/images/Training_IR_1000x975.webp" width="1000" height="975" style="max-width: 50%; height:auto; float: right;" alt="Network Forensics for Incident Response" /&gt;&lt;p&gt;
			  I will teach a live online network forensics training on February 23-26. The full title of the class is &lt;a href="https://www.netresec.com/?page=TrainingIR"&gt;Network Forensics for Incident Response&lt;/a&gt;, where we will analyze PCAP files containing network traffic from hackers and malware.
		  &lt;/p&gt;&lt;p&gt;
			  The training is split into four interactive sessions running from 13:00 to 17:00 CET (7am to 11am EDT), so that you have the other half of the day free to either practice what you learned in class or catch up with your normal job routine. The number of attendees is limited in order to provide a good environment for taking questions. A maximum of 15 attendees will be accepted. The registration will be closed once we reach this attendee limit.
		  &lt;/p&gt;&lt;p&gt;
			  📅 Dates: February 23-26 (4 days)&lt;br /&gt;
			  ⏲️ Time: 13:00 to 17:00 CET (7am to 11am EDT)&lt;br /&gt;
			  💸 Price: € 920 EUR per student (828 EUR if registering before January 31)
		  &lt;/p&gt;&lt;p&gt;
			  The target audience is blue teams, incident responders and SOC analysts. The training has also been greatly appreciated by law enforcement digital forensics investigators who have taken it in the past.
		  &lt;/p&gt;&lt;p&gt;&lt;b&gt;Training Content&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
			  We will analyze a 14 GB PCAP data set captured on an Internet connected network with multiple clients, an AD server, a web server, an android tablet and some embedded devices. As you’ve probably guessed, the capture files contain traffic from multiple intrusions by various attackers, including APT style attackers and botnet operators. The initial attack vectors are using techniques like exploitation of web vulnerabilities, spear phishing, a supply chain attack and a man-on-the-side attack! In this training you'll get hands-on experience analyzing PCAP files containing C2 and backdoor protocols, such as Cobalt Strike, TrickBot, njRAT and Meterpreter.
		  &lt;/p&gt;&lt;p&gt;
			  See our &lt;a href="https://www.netresec.com/?page=TrainingIR"&gt;training page&lt;/a&gt; for more info about the “Network Forensics for Incident Response” class.
		  &lt;/p&gt;&lt;p&gt;
			  To sign up for the class, simply send an email to &lt;a href="mailto:sales@netresec.com"&gt;sales@netresec.com&lt;/a&gt; with your name and invoice address. We will then send you a PayPal payment link that you can use to complete your training registration.
		  &lt;/p&gt;&lt;p&gt;
			  Hope to see you there!
		  &lt;/p&gt;&lt;img src="https://www.netresec.com/images/PCAP_T-shirt_200x192.jpg" alt="Erik H" /&gt;&lt;p&gt;
			  Cheers,&lt;br /&gt;
			  Erik Hjelmvik&lt;br /&gt;&lt;i&gt;Creator of NetworkMiner and founder of Netresec&lt;/i&gt;&lt;/p&gt;</content:encoded>
    </item>
    <item>
      <title>Gh0stKCP Protocol</title>
      <link>https://www.netresec.com/?page=Blog&amp;month=2025-09&amp;post=Gh0stKCP-Protocol</link>
      <pubDate>Wed, 24 Sep 2025 09:40:00 GMT</pubDate>
      <dc:creator>Erik Hjelmvik</dc:creator>
      <enclosure url="https://media.netresec.com/images/Gh0stKCP_1492x839.webp" type="image/webp" />
      <category>Gh0stKCP</category>
      <category>Ghost</category>
      <category>KCP</category>
      <category>PseudoManuscrypt</category>
      <category>Winos4.0</category>
      <category>WinOS</category>
      <category>ValleyRAT</category>
      <category>CapLoader</category>
      <category>YARA</category>
      <category>Suricata</category>
      <category>Silver Fox</category>
      <category>HP-Socket</category>
      <guid>https://www.netresec.com/?page=Blog&amp;month=2025-09&amp;post=Gh0stKCP-Protocol</guid>
      <description>Gh0stKCP is a transport protocol based on KCP, which runs on top of UDP. Gh0stKCP has been used to carry command-and-control (C2) traffic by malware families such as PseudoManuscrypt and ValleyRAT/Winos4.0. @Jane_0sint recently tweeted about ValleyRAT using a new UDP based C2 protocol. I wanted to t[...]</description>
      <content:encoded>&lt;p&gt;
        Gh0stKCP is a transport protocol based on KCP, which runs on top of UDP. Gh0stKCP has been used to carry command-and-control (C2) traffic by malware families such as &lt;a href="https://www.youtube.com/watch?v=uakw2HMGZ-I"&gt;PseudoManuscrypt&lt;/a&gt; and &lt;a href="https://malpedia.caad.fkie.fraunhofer.de/details/win.valley_rat"&gt;ValleyRAT&lt;/a&gt;/&lt;a href="https://unit42.paloaltonetworks.com/espionage-campaign-targets-south-asian-entities/#section5SubHeading42"&gt;Winos4.0&lt;/a&gt;.
      &lt;/p&gt;&lt;img src="https://media.netresec.com/images/Gh0stKCP_1492x839.webp" alt="Gh0stKCP ghost" width="1492" height="839" style="clear: both; max-width: 100%; height:auto;" /&gt;&lt;p&gt;
        @Jane_0sint recently &lt;a href="https://x.com/Jane_0sint/status/1966982647499899210"&gt;tweeted&lt;/a&gt; about ValleyRAT using a new UDP based C2 protocol. I wanted to take a closer look at the protocol, so I downloaded the PCAP from &lt;a href="https://app.any.run/tasks/de6167ca-1728-4e6a-b7b8-65404d49b5f3"&gt;any.run&lt;/a&gt; and opened it with &lt;a href="https://www.netresec.com/?page=CapLoader"&gt;CapLoader&lt;/a&gt;. To my surprise CapLoader claimed that the C2 traffic was using a known protocol called “KCP”.
      &lt;/p&gt;&lt;img src="https://media.netresec.com/images/CapLoader_ValleyRAT-KCP_877x521.webp" alt="ValleyRAT UDP traffic identified as KCP by CapLoader" width="877" height="521" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;
        The protocol detection feature in &lt;a href="https://www.netresec.com/?page=CapLoader"&gt;CapLoader&lt;/a&gt; compares traffic in TCP and UDP sessions to statistical models of known protocols. This means that no protocol specification or RFC is required to identify a protocol. All that is needed is some example traffic to build a protocol model from (see &lt;a href="https://netresec.com/?b=258f641"&gt;this XenoRAT detection video&lt;/a&gt; for a demonstration of this feature).
        In this case CapLoader’s KCP protocol model was built from UDP based C2 traffic from PseudoManuscrypt, which was &lt;a href="https://www.bitsight.com/blog/zero-50k-infections-pseudomanuscrypt-sinkholing-part-1"&gt;reported to have been using KCP&lt;/a&gt;.
      &lt;/p&gt;&lt;p&gt;&lt;b&gt;What is KCP?&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://github.com/skywind3000/kcp/blob/master/README.en.md"&gt;KCP&lt;/a&gt; is a UDP based protocol designed as a low-latency alternative to TCP. The protocol was created by &lt;a href="https://x.com/skywind3000"&gt;Lin Wei&lt;/a&gt; in the early 2010s, primarily to transport p2p voice chat audio in games. The protocol is, however, very generic and can be used to transport basically any type of data.
        The &lt;a href="https://github.com/skywind3000/kcp/blob/master/protocol.txt"&gt;KCP protocol specification&lt;/a&gt; includes the following packet structure:
      &lt;/p&gt;&lt;img src="https://media.netresec.com/images/KCP-packet-structure_1920x1080.webp" alt="KCP packet structure" width="1920" height="1080" style="clear: both; max-width: 70%; height:auto; border: 16px solid #eeeeee; " /&gt;&lt;p&gt;
        The first field “conv” is a 32 bit (4 byte) unique ID for a KCP session. This conversation ID is used to uniquely identify a connection and will remain constant throughout the connection. KCP doesn’t include any handshake mechanism for establishing new sessions, which means that KCP endpoints typically start transmitting payload data already in the first KCP packet.
      &lt;/p&gt;&lt;p&gt;&lt;b&gt;
          The Gh0stKcp Protocol
        &lt;/b&gt;&lt;/p&gt;&lt;p&gt;
        The UDP based KCP C2 protocol used by PseudoManuscrypt as well as the ValleyRAT C2 traffic that CapLoader reported being “KCP” both deviated from the original KCP specification in several ways. For instance, KCP packets have a 24 byte header, which means that packets shorter than 24 bytes can’t be KCP. In fact, the KCP source code actually &lt;a href="https://github.com/skywind3000/kcp/blob/f4f3a89cc632647dabdcb146932d2afd5591e62e/ikcp.c#L766"&gt;ignores UDP packets that carry less than 24 bytes of payload&lt;/a&gt;. Yet, both the PseudoManuscrypt and ValleyRAT UDP C2 traffic initially transmit several 12-byte packets.
      &lt;/p&gt;&lt;img src="https://media.netresec.com/images/Gh0stKCP-transcript_984x502.webp" alt="CapLoader transcript of Gh0stKCP session" width="984" height="502" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;i&gt;Image:Flow transcript of Gh0stKCP traffic in CapLoader&lt;/i&gt;&lt;/p&gt;&lt;p&gt;
        These 12-byte Gh0stKCP handshake packets are generated by an open source library called &lt;a href="https://github.com/ldcsaa/HP-Socket/"&gt;HP-Socket&lt;/a&gt;, which includes a custom Automatic Repeat reQuest (ARQ) handshake mechanism.
        
      &lt;/p&gt;&lt;p&gt;
        The following behavior can be deduced by examining UDP traffic from Valley RAT or by analyzing the UDP handshake mechanism in HP-Socket's &lt;a href="https://github.com/ldcsaa/HP-Socket/blob/dev/Windows/Src/ArqHelper.h"&gt;ArqHelper.h&lt;/a&gt;.
      &lt;/p&gt;&lt;p&gt;
        The client (bot) starts by sending an empty UDP packet to the C2 server, followed by a UDP packet carrying a 12 byte payload structured like this:
      &lt;/p&gt;&lt;div style="font-family: 'Lucida Console', Consolas, Monaco, 'Courier New'; background-color: #000000; color: #eeeeee; border: 1px solid #999999; padding: 10px; margin: 10px; overflow: auto; max-width: 100%" x-ms-format-detection="none"&gt;
        4f bb 01 00 xx xx xx xx 00 00 00 00
      &lt;/div&gt;&lt;p&gt;The first four bytes can be decoded as follows:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;4f bb = Magic bytes&lt;/li&gt;&lt;li&gt;01 = Handshake command&lt;/li&gt;&lt;li&gt;00 = Handshake is not completed&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
        The “xx” bytes represent a KCP conversation ID (conv) proposed by the bot.&lt;!-- Gh0stKCP bots typically use a 32-bit millisecond time value as their proposed conversation ID.--&gt; This initial handshake packet can easily be detected and alerted on with the following Suricata IDS signature:
      &lt;/p&gt;&lt;div style="font-family: 'Lucida Console', Consolas, Monaco, 'Courier New'; background-color: #8a629e; color: #ffffff; border: 0px solid #000000; padding: 10px; margin: 10px; max-width: 100%; word-break: break-all" x-ms-format-detection="none"&gt;
        alert udp $HOME_NET any -&amp;gt; $EXTERNAL_NET any (msg:"Gh0stKCP handshake"; dsize:12; content:"|4f bb 01 00|"; offset:0; depth:4; content:"|00 00 00 00|"; within:8; distance:4; classtype:trojan-activity; reference:url,https://netresec.com/?b=259a5af; sid:1471101; rev:1;)
      &lt;/div&gt;&lt;p&gt;
        The C2 server also transmits a UDP packet containing a 12 byte handshake using the exact same structure as the client. However, the C2 server proposes a 32 bit conversation ID of its own. In “normal” KCP implementations the client and server agree on a single shared conversation ID, but Gh0stKCP actually uses one separate ID for each direction. This allows the server to transmit its handshake packet without having seen the client’s handshake.
      &lt;/p&gt;&lt;div style="font-family: 'Lucida Console', Consolas, Monaco, 'Courier New'; background-color: #000000; color: #eeeeee; border: 1px solid #999999; padding: 10px; margin: 10px; overflow: auto; max-width: 100%" x-ms-format-detection="none"&gt;
        4f bb 01 00 yy yy yy yy 00 00 00 00
      &lt;/div&gt;&lt;p&gt;
        The “yy” bytes represent the C2 server’s 32-bit conversation ID (conv).
      &lt;/p&gt;&lt;p&gt;
        The communicating parties frequently re-transmit this initial handshake packet until they have received a handshake from the other end.
      &lt;/p&gt;&lt;p&gt;
        Upon receiving the other end’s handshake both the bot and C2 server acknowledge the other end’s conversation ID with a UDP packet carrying the following 12 byte payload:
      &lt;/p&gt;&lt;div style="font-family: 'Lucida Console', Consolas, Monaco, 'Courier New'; background-color: #000000; color: #eeeeee; border: 1px solid #999999; padding: 10px; margin: 10px; overflow: auto; max-width: 100%" x-ms-format-detection="none"&gt;
        4f bb 01 00 xx xx xx xx yy yy yy yy
      &lt;/div&gt;&lt;p&gt;
        Where “xx” is the sender’s conversation ID and “yy” is the other end’s conversation ID. After having received the other end’s acknowledgment packet both parties additionally transmit a final ack packet, indicating that the handshake is completed and they will start communicating using KCP. This final ack packet is identical to the previous one, except the fourth byte (handshake complete flag) has changed from 0x00 to 0x01.
      &lt;/p&gt;&lt;div style="font-family: 'Lucida Console', Consolas, Monaco, 'Courier New'; background-color: #000000; color: #eeeeee; border: 1px solid #999999; padding: 10px; margin: 10px; overflow: auto; max-width: 100%" x-ms-format-detection="none"&gt;
        4f bb 01 01 xx xx xx xx yy yy yy yy
      &lt;/div&gt;&lt;p&gt;
        From this point on Gh0stKCP communicates using the KCP protocol, with the exception that each end transmits packets using their own conversation ID rather than a common ID. The KCP traffic that follows can therefore be parsed and inspected in Wireshark with help of a KCP Lua parser, such as CandyMi’s &lt;a href="https://github.com/cfadmin-cn/kcp_dissector/blob/master/kcp_dissector.lua"&gt;kcp_dissector.lua&lt;/a&gt;.
      &lt;/p&gt;&lt;img src="https://media.netresec.com/images/KCP_Wireshark_914x1034.png" alt="Gh0stKCP traffic in Wireshark with Lua script to decode KCP" width="914" height="1034" style="clear: both; max-width: 100%; height:auto" /&gt;&lt;p&gt;&lt;i&gt;
          Image: KCP traffic from &lt;a href="https://app.any.run/tasks/2ec47a05-8e51-4dd1-9dd8-e2c768ed02b1"&gt;ValleyRAT sample any.run&lt;/a&gt; in Wireshark
        &lt;/i&gt;&lt;/p&gt;&lt;p&gt;
        Finally, the Gh0stKCP session is terminated by sending a UDP packet containing the following hard coded 16 bytes:
      &lt;/p&gt;&lt;div style="font-family: 'Lucida Console', Consolas, Monaco, 'Courier New'; background-color: #000000; color: #eeeeee; border: 1px solid #999999; padding: 10px; margin: 10px; overflow: auto; max-width: 100%" x-ms-format-detection="none"&gt;
        be b6 1f eb da 52 46 ba 92 33 59 db bf e6 c8 e4
      &lt;/div&gt;&lt;p&gt;
        This unique byte sequence is defined in HP-Socket as &lt;a href="https://github.com/ldcsaa/HP-Socket/blob/37b9f834a394f3f5747e57ef2602f88259572a52/Windows/Src/SocketHelper.cpp#L40"&gt;s_szUdpCloseNotify&lt;/a&gt;, which can be detected with the following Suricata IDS signature:
      &lt;/p&gt;&lt;div style="font-family: 'Lucida Console', Consolas, Monaco, 'Courier New'; background-color: #8a629e; color: #ffffff; border: 0px solid #000000; padding: 10px; margin: 10px; max-width: 100%; word-break: break-all" x-ms-format-detection="none"&gt;
        alert udp any any -&amp;gt; any any (msg:"Gh0stKCP close"; dsize:16; content:"|be b6 1f eb da 52 46 ba 92 33 59 db bf e6 c8 e4|"; offset:0; depth:16; classtype:trojan-activity; reference:url,https://netresec.com/?b=259a5af; sid:1471102; rev:1;)
      &lt;/div&gt;&lt;p&gt;&lt;b&gt;Hole Punching in NAT Firewalls&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
        The elaborate handshake procedure used by Gh0stKCP introduces a significant delay before the C2 session is established. The handshake takes up to 500ms to complete, which is much slower than a normal TCP 3-way handshake. KCP is typically used because of its low-latency properties, but the handshake routine ruins any chance for quick establishment of Gh0stKCP sessions.
      &lt;/p&gt;&lt;p&gt;
        The intricate ARQ handshake routine does, however, allow for &lt;a href="https://en.wikipedia.org/wiki/UDP_hole_punching"&gt;hole punching&lt;/a&gt; in firewalls, aka “NAT traversal”, which enables the protocol to be used for peer-to-peer communication. This p2p-enabling property could potentially be used to relay C2 communication through one or several bots, even if those bots are behind separate NAT firewalls.
      &lt;/p&gt;&lt;p&gt;&lt;b&gt;Detecting Gh0stKCP with Snort and YARA&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
        CapLoader can detect when the KCP protocol is used. However, only a few security analysts have a CapLoader license. We have therefore decided to release Surucata signatures and a YARA rule that can be used to detect Gh0stKCP.
      &lt;/p&gt;&lt;p&gt;
        The Suricata signatures included in this blog post can also be downloaded from here:&lt;br /&gt;&lt;a href="https://github.com/Netresec/Suricata/blob/main/netresec.rules" style="word-break: break-all"&gt;https://github.com/Netresec/Suricata/blob/main/netresec.rules&lt;/a&gt;&lt;/p&gt;&lt;p&gt;

        Our &lt;a href="https://github.com/Netresec/YARA/blob/main/Gh0stKCP.yar"&gt;Gh0stKCP YARA rule&lt;/a&gt; is based on &lt;a href="https://x.com/stvemillertime"&gt;Steve Miller&lt;/a&gt;’s “RareEquities_KCP” rule, from Mandiant’s 2020 blog post &lt;a href="https://cloud.google.com/blog/topics/threat-intelligence/apt41-initiates-global-intrusion-campaign-using-multiple-exploits/"&gt;APT41 Initiates Global Intrusion Campaign Using Multiple Exploits&lt;/a&gt;. Steve’s original YARA rule provides generic detection of software that uses the &lt;a href="https://github.com/skywind3000/kcp"&gt;original KCP library&lt;/a&gt;. We’ve extended that rule to also look for HP-Socket’s characteristic 16-byte close command.
      &lt;/p&gt;&lt;p&gt;&lt;a href="https://github.com/Netresec/YARA/blob/main/Gh0stKCP.yar" style="word-break: break-all"&gt;https://github.com/Netresec/YARA/blob/main/Gh0stKCP.yar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;IOC List&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
        Many of the IOCs in the list below are old, which is why you might not want to use them for alerting. They are included here primarily for researchers and analysts who wish to perform retrohunting to discover malware samples that use GhostKCP.
      &lt;/p&gt;&lt;p&gt;
        2021 (PseudoManuscrypt)
        &lt;ul&gt;&lt;li&gt;UDP 34.64.183.91:53&lt;/li&gt;&lt;li&gt;UDP 34.97.69.225:53&lt;/li&gt;&lt;li&gt;UDP 160.16.200.77:53&lt;/li&gt;&lt;li&gt;UDP 167.179.89.78:53&lt;/li&gt;&lt;li&gt;UDP 185.116.193.219:53&lt;/li&gt;&lt;li&gt;UDP 198.13.62.186:53&lt;/li&gt;&lt;li&gt;UDP email.yg9[.]me:53&lt;/li&gt;&lt;li&gt;UDP facebook.websmails[.]com:53&lt;/li&gt;&lt;li&gt;UDP google.vrthcobj[.]com:53&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;
        2022 (PseudoManuscrypt)
        &lt;ul&gt;&lt;li&gt;UDP 34.142.181.181:53&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;
        2025 (ValleyRAT / Winos4.0)
        &lt;ul&gt;&lt;li&gt;UDP 27.124.3.234:8443&lt;/li&gt;&lt;li&gt;UDP 43.133.39.217:80&lt;/li&gt;&lt;li&gt;UDP al17[.]tk:80&lt;/li&gt;&lt;li&gt;UDP xiaoxiao.fenghua678.eu[.]cc:8443&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Attribution&lt;/b&gt;&lt;/p&gt;&lt;p&gt;
        Use of ValleyRAT is often attributed to the APT group Silver Fox &lt;nobr&gt;(银狐)&lt;/nobr&gt;, but ValleyRAT and Gh0stKCP could be used by other threat actors as well.
      &lt;/p&gt;</content:encoded>
    </item>
  </channel>
</rss>