Finding the Unknown Unknowns, Part 4 (NilePhish,
SneakyChef, Muddy Water, and a bonus unc)

Oct 20, 2025 by StrikeReady Labs 8 minutes

Be sure to read parts 1, 2, and 3 of this series for a bit of background. In this article, we highlight how our threat analysts have surfaced recent interesting threats, and the techniques that worked equally well to uncover the focused operations. These are four unrelated clusters of activity, but the discovery methodology was similar for each.

Targeted threat hunt activity can often require sharp attention to a mundane task, such as scrolling through large sorted lists of file names, waiting for one to pop out -- very similar to being a macrodata refinement specialist.

This blog will cover four such activities, that led to the discoveries of the APT threats:

  • LINXA.zip, NilePhish, targeting Yemen, from August 2025

  • Möhüm duýduryş.doc, SweetSpecter, targeting CIS countries, from August 2025

  • Middle East and Maritime Economy.doc, MuddyWater, targeting Oman, from October 2025

  • Riga2025.pptm, unknown actor, targeting Bosnia and Herzegovina, from June 2025


One of our most useful daily hunts is looking at any new LNK file in our telemetry - both surfaced from customers as well as VT, although this blog only leverages publicly available samples. The count of new files is low. Each can be eyeballed.

First up, we see a phish that is associated with NilePhish, a campaign reported on in 2017 by Citizen Lab, originally targeting Egyptian NGOs. In this case, a Yemeni ISP was targeted in August of 2025 with New-logins-to-LINXA-SMS-P2P.docx.lnk (85cf58f89479740b47690d83393aea0d)


Figure 1: NilePhish … phish

Figure 1: NilePhish … phish


The LNK first identifies itself by looking for files in . named .lnk with a size 0x0006A2B6, or 434870 bytes. It carves a file out of itself, xor’s each byte by 0x12, reads from an offset, and runs it. This is a bizarre amount of work to do to launch an empty decoy file, Document.docx 4c390cbf4581ea236778f9526af72b47, considering the actual next stage is hosted on an unobfuscated url in the powershell.


Figure 2: NilePhish lnk executed content

Figure 2: NilePhish lnk executed content


Below is an example PHP script that emulates this same file carving behavior.


Figure 3: PHP script to decode the decoy docx from inside the lnk

Figure 3: PHP script to decode the decoy docx from inside the lnk


The next stage, available in the appendix, was hosted on a temporarily compromised major Syrian webhosting provider. The powershell downloaded has hallmarks of being created with GenAI. Leveraging this somewhat localized victim as a second stage for execution likely provided little operational benefit, and was leveraged for unknown purposes.


Figure 4: second stage powershell

Figure 4: second stage powershell


From here, we can see the three next stages, upupload.co/share3dbfvjkkjdfikww/taskhostw.exe, upupload.co/share3dbfvjkkjdfikww/f4ea3535-b9cd-4ae1-a963-5cd704ae5f0a, and upupload.co/share3dbfvjkkjdfikww/b3Vsh. taskhostw is the legit autoit binary, f4ea is a compiled autoit script, and b3VshIW an obfuscated base64 script.

Many analysts use parsers from https://www.clamav.net/ to speed up their work, and in this case, you could dump the unreadable autoit script by running something like clamscan --leave-temps --tempdir=. f4ea3535-b9cd-4ae1-a963-5cd704ae5f0a.


Figure 5: decompiled autoit script

Figure 5: decompiled autoit script


Reading the autoit script, one can notice that reads the b3VshIW file, and replaces 0x2A (*) with 0x41 (A). The script eventually decodes the obfuscated base64 to an exe named exe_stager.exe, described as Op Agent. This is a sharpc2 sample that beacons to soartire.net

Pivoting on this unique-looking obfuscation inside autoit, we can make our way to https://topsupload.com/FMfcgzGxTNtmNvfMwjWXnnhBbPTnQGK/ZkDuGZBpDh, and the powershell that calls it e7906e4dd22e651087a8bacce7a688dd.We can carve the payload as above, and we are left with d1685aed0c3703545f4ca0cb2cfac17a, which also beacons to soartire.net. Lastly, Emerging Threats and/or Proofpoint, link both of those domains, via urlquery, to UNK_NilePhish.


The next sample, Möhüm duýduryş.doc, was discovered by a hunt that watches for office documents that contain an XOR. While macros have fallen out of favor, due to broad based improvements championed by one particular threat researcher at Microsoft, they are still leveraged on a smaller scale by crime and APT actors alike. Combining frequency analysis with linguistic or country-based submissions will easily surface interesting threats to the top, although it may also cause some interesting threats to be brushed away. In this case, the macro containing the string xor , and the submitter being from Turkmenistan was a good indicator that this was an interesting sample.


Figure 6: unique xor function found in sneakychef files

Figure 6: unique xor function found in sneakychef files


The act of XOR-ing strings, all these years later, is still a solid indicator for surfacing targeted threats.

The document leverages dll sideloading through Calibre ebook reader to load its payload. Pivoting on indicators in the macro, as well as the same sideloader, leads us to Проект Доп соглашения к Договору_2025.doc eef9fe0c9619b75b9553243fd19709e4, uploaded from Kazakstan. The document drops a payload to disk, and registered a scheduled task in a very particular way.

schtasks -CreAte -sC minute -mo 2 -tn "MicrosoftEdgeUpdateTaskMachineUA{73444F9E-3124-440E-972P-9239645R6BB2}" -tr "\"C:\ProgramData\USOShared\Logs\ebook-edit.exe\""

An astute analysis of linguistic capitalization would notice strange patterns in the arguments - specifically oddities in capital letters. Similar scheduled task capitalization could be seen in 22573d874ac9ffa785e57d94e243b48d, uploaded from Uzbekistan, and 0287ba0ecc176ae63ea1d1e053654f32 also from Turkmenistan. A further analysis, specifically completing a ctrl-c/ctrl-v, would notice that this same victim set (CIS), and the same schtask capitalization, appeared in the SneakyChef report from Cisco’s Talos, and the associated UNK_SweetSpecter from our friends at Proofpoint.


In our third hunting example, Middle East and Maritime Economy.doc d9619d23098231bec2f17787d1d1b182, was submitted to VT on October 7th 2025. Broadly distributed attacks are easily filterable based on overlaps in filenames, hashes, c2 infra, etc. What is left should be filtered by country submitters to surface filenames in a small enough bucket to make outliers pop. Oman has been a key facilitator of negotiations between Iran and the United States, although recently contaminated Iranian water has been an issue of humanitarian and diplomatic contention. It was also recently compromised, before this activity, in a phish highlighted by ClearSky and Dream Group. It is not unusual to see continued targeting and retargeting of the same victim, and hence it is a valuable input to a sorting algo.

Pivoting on code artifacts is often done on non-malicious components in the execution chain. Looking back at this excellent article from NSFocus, we can see iden.doc 1ee73b17111ab0ffb2f62690310f4ada In this attack, we can see the following delay function, implemented in the word macro.


Figure 7: custom loop code used in some MW spears

Figure 7: custom loop code used in some MW spears


In this case, this loop is going to run 100 x 100 x 100 x 100 times, or 100 million loops. Although that is nothing for a modern CPU, remember that this is inside VB inside word, so the delay added could be a couple seconds. In other samples, the loop is implemented 110 times, in others the variable names change, but the concept is the same. Using this as a pivot point, and leveraging other artifacts about the macro, behavior, or payload, we can link our original sample to these

Sample

md5

Online Seminar.FM.gov.om.doc

3ab16bd1c339fd0727be650104b74dd1
Online Seminar.MFA.gov.ct.tr (2).doc 1de19958e7c2ef14addfb35b43a594ec
DPR for dredging in FreeSpan_16082025.2.doc e73ba93d008affdc4cce0cb4e18ae5c6
AIC_2025.doc 07502104c6884e6151f6e0a53966e199
Transfer receipt #27790.doc 561b2983d558283c446ff674ff6138c3

Figure 8: other MW samples


Lastly, this pivot also brings us to Report.doc adf7606b900fa1d4630f7fd63a585e60,which was seen targeting users at TM Cell in August of 2025, the state owned mobile operator in Turkmenistan.


Figure 9: MW phish against Turkmenistan

Figure 9: MW phish against Turkmenistan



For our last example, in July 2025, an attacker leveraged a suspected compromised account of a Greek law enforcement officer to target the military of Bosnia and Herzegovina with a payload named Riga2025.pptm, hosted on Mega, a download site run by Kim Schmitz.

Sorting documents with macros by name, including some sort of fuzzy algorithm, is necessary to weed out the broadly distributed malware. After that, you would be left with a combination of red teams, students, false positives, and targeted threats. If one were to bucketize the results, it would become clear that the number of new powerpoint files with macros is close to zero on a daily basis.


Figure 10: unc phish against the Bosnian military

Figure 10: unc phish against the Bosnian military


The powerpoint file contains a macro that can be dumped with the aforementioned ClamAV’s sigtool --vba {file}. Examining the macro, we can see rudimentary obfuscation


Figure 11: custom macro obfuscation

Figure 11: custom macro obfuscation


The macro loops through the first four pages, checks shapes that have text, then essentially XOR’s the content by 97, unless the character is a %. In another section, it reads slide 1 by reading activepresentation.slides(1 + 123 - 11 - 23 - 89 * 2 + 89), which had us briefly recalling PEMDAS.

One can observe the content that will be carved visually, below.


Figure 12: PPT decoy content with real payload embedded

Figure 12: PPT decoy content with real payload embedded


The payload ow123msadmasj41.exe dd29118838755821c884a7b03f647610 is dropped into temp and executed. Among other things, it grabs the chrome encrypted_key using the below regex from Chrome\User Data\Local State.


Figure 13: required IDA-esque screenshot

Figure 13: required IDA-esque screenshot


The payload then connects to telegram (api.telegram.org) with the key bot7193072067:AAFtelSAd83tmG-ZwLy9VQv4Z9b1GLr4OXY and chat_id 7908204245

Figure 14: network traffic from payload

Figure 14: network traffic from payload



Our github provides a download of the relevant files mentioned in the blog

Acknowledgements

The authors would like to thank the reviewers, as well as peer vendors, for their comments and corrections. Please get in touch at research@strikeready.com if you have corrections, would like us to use your group name, or would like to collaborate on research.




Related posts

Finding the unknown unknowns, part 1

This is the first article in a series about technical hunting wins that are attainable by all SOC teams.

April 20, 2024 by StrikeReady Labs

6 minutes

Finding the unknown unknowns, part 2 (unc3707)

Customers often have a broad understanding of threat groups they want to track, but not always the tools to build operational workflows to enrich and action results. This blog walks through three simple pivots we can take off your plate.

Oct 28, 2024 by StrikeReady Labs

6 minutes

0day .ICS attack in the wild

Earlier in 2025, an apparent sender from 193.29.58.37 spoofed the Libyan Navy’s Office of Protocol to send a then-zero-day exploit in Zimbra’s Collaboration Suite,
CVE-2025-27915, targeting Brazil’s military.

Sep 30, 2025 by StrikeReady Labs

6 minutes