TA577 phishing campaign uses NTLMv2 handshakes to steal user credentials/hashes.

Intel-Ops
5 min readFeb 29, 2024

--

In this blog post, Intel-Ops will present the finding of our analysis into the infrastructure behind TA577’s recent phishing campaign utilising Impacket to capture NTLMv2 hashes and steal credentials.

Summary of Activity

TA577, are a Russia-based threat group that have been reported to deliver payloads including Qbot, IcedID, SystemBC, SmokeLoader, Ursnif, and Cobalt Strike in ongoing phishing campaigns since 2020. More recently, they have delivered Pikabot and DarkGate malware. This week, it was reported by Deutsche Telekom CERT https://twitter.com/DTCERT/status/1762808435723145366 that TA577 have been sending .HTML files to make outbound SMB connections to file:// URLs to retrieve a file in an attempt to capture NTLMv2 handshakes.

Analysis

We also began with a notification from one of our students that they had observed this activity. This provided us with some initial indicators to begin our analysis with, referred to as true-positive IPs below.

Additionally, reading the Deutche Telecom tweet mentions that the tool Impacket used in this campaign uses 8-character strings.

Our first rule:

services.smb.session_setup_log.target_name:/.*[A-Za-z0–9]{8}.*/ and services.smb.negotiation_log.server_guid:0000000000000000000000000000000041414141414141414141414141414141 and not services.smb.session_setup_log.target_name:workgroup

The above rule looks for the SMB target_name of 8 alphanumeric strings, as reported by Deutsche Telecom and also adds the Server GUID, finally, we remove target_name’s with “workgroup”. This returns 257 results. (Remove the workgroup for all Impacket servers).

Let’s first take a look at the ASN distribution:

Over half are hosted on the GLOBALWAYS ASN. Additionally there’s some ASNs in here we regularly see used by threat actors for malicious activity, e.g. ALEXHOST, STARK-INDUSTRIES, LIMENET, AS-CHOOPA etc.

Now, we can pivot on the true positive IPs which we know have .html communicating files in VirusTotal.

103[.]124[.]104[.]22

104[.]129[.]20[.]167

204[.]44[.]125[.]68

66[.]63[.]188[.]19

89[.]117[.]2[.]33

155[.]94[.]208[.]137 — only IP with a dns.name: shopsportswearamerica[.]com

If we grab the SSH banner hash from these IPs, they are all the same. So we can add this to the hunt rule:

services.smb.session_setup_log.target_name:/.[A-Za-z0–9]{8}./ and services.smb.negotiation_log.server_guid:0000000000000000000000000000000041414141414141414141414141414141 and not services.smb.session_setup_log.target_name:workgroup and services.banner_hashes="sha256:2bf2033dbf501c6d1f063e64b737f30c2ab11dd1fb2e65a7dd4b2a88c71f23e5"

This returns 27 results, capturing the 6 true positive IPs we know have been used in the campaign. So we have 21 new IPs that may be connected. When sorted by ASN we can see our 6 true positive IPs sit in only 2 ASNs.

The other 2 IPs in these ASNs:

103[.]124[.]104[.]76

89[.]117[.]2[.]34 — buysportswearusa[.]com

As you can see .34 IP has a similar domain to 155[.]94[.]208[.]137, a true positive hit. Let’s break these down to dns.names. (The CyberChef recipe to remove the duplicate urls with “www.” and any “ec2” Amazon urls from the Censys report):

files-adcb[.]com

account-office[.]com

activity-check[.]com

appshare-box[.]com

buysportswearusa[.]com

connect-bsigorup[.]com

docusignservice[.]com

google-gsuitecloud[.]com

hash[.]10dsecurity[.]com

info-zapp[.]com

laboratoriosprovets[.]com

levelbrin[.]com

mail2[.]linkindatafile[.]info

mail2[.]networthfundreport[.]info

matrix[.]lakeys[.]net

primrloock[.]org

redenservices[.]com

services-helpdesk[.]com

sevrice-now[.]com

shopsportswearamerica[.]com

test[.]vryno[.]dev

Interesting that a number of the domains have a similar construction e.g. with “-” within the strings. Bear in mind, of the true positives so far, only 1 has an IP with a corresponding dns.name result.

The other two interesting findings:

From the original 257 IPs, there are 11 IPs with the http response response page which says “We’ll back soon..”, on port 80. There are only these 11 IPs with that banner hash in total on the internet.

Hunt rule:

services.smb.session_setup_log.target_name:/.[A-Za-z0–9]{8}./ and services.smb.negotiation_log.server_guid:0000000000000000000000000000000041414141414141414141414141414141 and not services.smb.session_setup_log.target_name:workgroup and services.http.response.body_hashes="sha1:4ad651cad39078157b64b3c2784fc5c78b8bc547"

From the original 257 IPs, there are 35 IPs with a login panel on port 80:

Only 1 of the IPs from our subset of 27 have this login panel: 54[.]36[.]229[.]25. None of our true positives have this login panel.

Hunt rule:

services.smb.session_setup_log.target_name:/.[A-Za-z0–9]{8}./ and services.smb.negotiation_log.server_guid:0000000000000000000000000000000041414141414141414141414141414141 and not services.smb.session_setup_log.target_name:workgroup and services.http.response.body_hashes:sha1:acbfa5f3e98deff0c4bbe7f652cfd3af13d57fc7

There are 47 IPs in total on the internet with this login panel:

services.http.response.body_hashes:sha1:acbfa5f3e98deff0c4bbe7f652cfd3af13d57fc7

The true positives either have no http port open/scanned by Censys or return a default Apache page. We can break these results down further by looking for IPs with the SMB matches and IPs running http with a default Apache page and SMB & SSH. It seems of the 6 we know are true positives, 50% have default Apache page and the other 50% don’t have port 80 open/scanned, but some have other ports like Netbios. In our new results we also identify 2 more IP addresses matching on 3 ports: SSH, HTTP, SMB.

And, again, they sit on the same 2 ASNs:

Hunt rule:

services.smb.session_setup_log.target_name:/.[A-Za-z0–9]{8}./ and services.smb.negotiation_log.server_guid:0000000000000000000000000000000041414141414141414141414141414141 and not services.smb.session_setup_log.target_name:workgroup and services.http.response.html_tags="<title>Apache2 Ubuntu Default Page: It works</title>"

After writing this, we saw this post: https://twitter.com/1ZRR4H/status/1762939815715058073 with the following hunt rule for TA577:

same_service(services.smb.negotiation_log.server_guid=”0000000000000000000000000000000041414141414141414141414141414141" and services.smb.negotiation_log.authentication_types=”1.3.6.1.4.1.311.2.2.10" and services.smb.session_setup_log.target_name=/[a-zA-Z0–9]{8}/) and (autonomous_system.asn:142036 or autonomous_system.asn:200019 or autonomous_system.asn:8100 or autonomous_system.asn:207083)

This rule singles out based on ASN and authentication types which we originally used in our hunt rules at the beginning of our searches. The authentication type: 1.3.6.1.4.1.311.2.2.10 is also still found on our 27 IPs in the narrowed rule so rounding by ASNs is really interesting, including the matching domain patterns as not all IPs have a matching domain pattern. We also assessed that these IPs may not have port 80 open or contained a default Apache webpage. However, now that further samples are being submitted to VirusTotal, it appears that these 4 ASNs are standing out as those used by TA577. It looks like you can chop the datasets up many ways and we did so by SSH banner hash, auth types, login panels and ASNs.

We really enjoyed conducting this analysis and comparing findings and results with other researchers.

Results (True Positive Starting IPs — VT communicating .html files)

103[.]124[.]104[.]22

104[.]129[.]20[.]167

204[.]44[.]125[.]68

66[.]63[.]188[.]19

89[.]117[.]2[.]33

155[.]94[.]208[.]137

Cyber Chef Recipe

https://cyberchef.io/#recipe=Find_/_Replace({'option':'Regex','string':'^ec2.*$'},'',true,false,true,false)Find_/_Replace({'option':'Regex','string':'^\\n$'},'',true,false,true,false)Find_/_Replace({'option':'Regex','string':'^www.*$'},'',true,false,true,false)Find_/_Replace({'option':'Regex','string':'^\\n$'},'',true,false,true,false)Defang_URL(true,true,true,'Valid domains and full URLs’)&input=ZG5zLm5hbWVzCmZpbGVzLWFkY2IuY29tCmFjY291bnQtb2ZmaWNlLmNvbQphY3Rpdml0eS1jaGVjay5jb20KYXBwc2hhcmUtYm94LmNvbQpidXlzcG9ydHN3ZWFydXNhLmNvbQpjb25uZWN0LWJzaWdvcnVwLmNvbQpkb2N1c2lnbnNlcnZpY2UuY29tCmdvb2dsZS1nc3VpdGVjbG91ZC5jb20KaGFzaC4xMGRzZWN1cml0eS5jb20KaW5mby16YXBwLmNvbQpsYWJvcmF0b3Jpb3Nwcm92ZXRzLmNvbQpsZXZlbGJyaW4uY29tCm1haWwyLmxpbmtpbmRhdGFmaWxlLmluZm8KbWFpbDIubmV0d29ydGhmdW5kcmVwb3J0LmluZm8KbWF0cml4Lmxha2V5cy5uZXQKcHJpbXJsb29jay5vcmcKcmVkZW5zZXJ2aWNlcy5jb20Kc2VydmljZXMtaGVscGRlc2suY29tCnNldnJpY2Utbm93LmNvbQpzaG9wc3BvcnRzd2VhcmFtZXJpY2EuY29tCnRlc3QudnJ5bm8uZGV2

--

--