As mentioned in yesterday’s post, several users downloaded a malicious installer that ultimately executed ChainScript. Part of the Hands-On Recon chain involved taking screenshots using PowerShell. The screenshot below shows the relevant code. This becomes particularly interesting from a detection perspective when PowerShell logging is enabled, and the resulting events are collected centrally. As is often the case, Elastic already has a detection rule covering this technique. It looks for PowerShell content containing: CopyFromScreen AND ("System.Drawing.Bitmap" OR "Drawing.Bitmap") A nice example of how relatively simple PowerShell Script Block Logging can expose attacker collection activity. Source: github.com/elastic/detection…
2
7
875
Recently, we responded to a single-host infection that our SOC handed over to us. The user downloaded a malicious "Remote Desktop Connection Manager" - well, actually, a legitimate tool developed by Microsoft- but attackers were now misusing the brand. See the first screenshot, where the user followed a classical malvertising, landing on the site in the second screenshot. After downloading and running the installer (leading to an infection), the attackers had full access to the infected device (and leveraged that access to take screenshots via PowerShell (more on that on another tweet) and use SSH to pivot to the internal network). The RAT was ChainScript, as nicely depicted here. [1] As soon as we took over this case, we began hunting inside the network for traces of lateral movement and/or similar techniques (TTPs, IOCs). Additionally, we found 3 additional infected computers with the same malware, with infections occurring in a short time span.. which was like.. what happened here? It turns out the devices belonged to employees on the same team, and the employee who had the first infection pasted the malicious link in a Teams Chat, encouraging the rest of the team to install the same software from the same malicious site (d'oh). So the saying could not be truer: Trust, but verify. Always download trusted software from legitimate sites; as this example shows, an infection (infections!) can happen within minutes. [1] blackpointcyber.com/blog/cha…
1
10
20
1,889
For the love of the (macOS) game. My new blog post covers a macOS DFIR blind spot: zsh startup files such as .zshrc, .zprofile, and .zshenv can have compiled .zwc counterparts. If the compiled file is newer, zsh may use it instead of the plaintext version, meaning investigators could inspect a benign-looking .zshrc while missing the code that was actually executed. .zwc files are not encrypted, and much of their logic, strings, commands, and control flow can still be recovered. The post demonstrates practical triage with zcompile -t and strings, introduces a static zwc-decompile parser for reconstructing compiled shell logic without executing it, and notes that several common macOS forensic tools do not explicitly collect these compiled startup files. The full blog post here: dfir.ch/posts/compiled_zsh/
1
22
43
2,972
What I learned today: auto_prepend_file auto_prepend_file is a standard PHP configuration directive. It names a file that PHP parses automatically before the script that was actually requested. Point it at a payload, and that payload executes on every single PHP request to the site. .user.ini is how that directive gets set without server access. When PHP runs as FastCGI or PHP-FPM, which is the normal configuration on modern shared and cPanel hosting, PHP reads a per-directory .user.ini file that any account with file-write access can create. No root, no control-panel login, and no server configuration change is required. Write access to the web directory is enough, which is precisely what we encountered on a recent Incident Response engagement. But a .user.ini file does not automatically mean your server is compromised. In our case, we identified several such files in different directories. However, when you find a .user.ini with the content "auto_prepend_file = hpzgadna.php" (spot the random filename?), then you might want to have a closer look. More information here: wpserverguard.com/guides/use…
1
3
954
On a recent Incident response case, we encountered VMkatz. "It extracts Windows secrets - NTLM hashes, DPAPI master keys, Kerberos tickets, cached domain credentials, LSA secrets, NTDS.dit, BitLocker keys - directly from VM memory snapshots and virtual disks, on the NAS, the hypervisor, wherever the VM files are." [1] Defender detected it with the following signature: VirTool:Win64/Vekesz.A The out-of-the-box release from the GitHub page is also heavily flagged, but one could compile (and obfuscate) the code to stay under the radar. In our case, the attacker just disabled real-time monitoring and added an exclusion: Set-MpPreference -DisableRealtimeMonitoring $true Add-MpPreference -ExclusionPath "C:\" And then pointing it to a directory, "and let it find everything", as pointed out in the documentation. ./vmkatz.exe C:\ClusterStorage\CSV01\node-002\ I think monitoring for AV alerts (and exclusions!) could go a long way. The basics make the difference. ☝️ [1] github.com/nikaiw/VMkatz
3
80
446
29,402
Very cool research from my team colleague Evgen Blohm 💪 He uncovered an espionage campaign dubbed Iranopasmigirim, active in June 2026 and targeting Iranian dissidents and activists. The attackers impersonated the “Rise Iran” campaign associated with Reza Pahlavi, using politically themed PDFs and other decoys to convince victims to execute malicious LNK files. Hunting across GitHub, VirusTotal, and related infrastructure revealed multiple earlier lures and development artifacts, including ISO, XLSM, and DOCM files. Part 2 follows mid-October 💙 labs.infoguard.ch/posts/iran…
2
10
1,437
Nice. Notepad++ 8.9.8 introduced a useful security hardening feature around session restoration and UNC paths. If a Notepad++ session contains a path such as "\server\share\file.ps1", either in the automatically restored "session.xml" or in a manually loaded session file, Notepad++ no longer silently accesses that path during session loading. Instead, it warns that opening the file may cause Windows to authenticate to the remote server automatically. This is because accessing a UNC path can invoke the Windows SMB client. Depending on the environment and authentication policy, Windows may be useful for offline password cracking or, where the target environment still permits relayable NTLM authentication, NTLM relay attacks. This does not expose the plaintext password or NT hash directly, but the captured authentication material may be useful for offline password cracking or, in suitable environments, NTLM relay attacks. The new dialog allows users to skip or load the network path once, or configure Notepad++ to always skip or always load network paths referenced by sessions. Source: github.com/notepad-plus-plus…
9
20
2,297
New blog post: Living Inside the Shell: zsh Modules on macOS zsh is much more than a command interpreter. Through its module system, the shell can perform operations that defenders often associate with separate binaries: establish TCP connections, manipulate files, access extended attributes, and more. That creates an interesting detection problem. If your logic mainly looks for tools such as curl, wget, nc, xattr, or rm, or relies heavily on child-process creation, you may only detect one implementation of the behavior. In the post, I look at zsh/net/tcp, zsh/mapfile, and zsh/attr, including a second-stage script executed directly from a socket without first being written to disk. From a DFIR perspective, the interesting part is what still remains visible. Using Apple Endpoint Security telemetry, I show that avoiding the usual utility does not necessarily hide the underlying action. dfir.ch/posts/zsh_modules/
1
11
45
3,380
Microsoft recommends the following mitigations to reduce the impact of this threat: Block web pages from automatically running Flash plugins. 😂 Source: microsoft.com/en-us/security…
4
35
3,461
My new "field note" shows how a seemingly generic Microsoft Defender alert can lead to a much more useful forensic finding when correlated with filesystem artifacts. Defender detected Behavior:Win32/RegDump.SA, attributed to svchost.exe running as SYSTEM. Looking at the MFT around the alert timestamp revealed a suspicious temporary file (see image). Its "regf" header identified it as a Windows Registry hive, and loading it confirmed that it contained a partial SAM hive. Impacket’s RemoteOperations implementation creates temporary hive files using eight random ASCII characters followed by .tmp. This makes the artifact highly consistent with an Impacket-style secretsdump workflow. Correlating the alert timestamp with MFT activity can expose the underlying attacker technique, or at least hint you in the right direction. Full article here: dfir.ch/posts/field_notes_av…
2
33
98
6,660
In a recent incident, we stumbled upon two suspicious drivers created during the compromise window and installed as services. ☝️ One thing I always check during an investigation: newly created services. The System event log, Event ID 7045, is your friend here. Looking at the files, it was immediately obvious that they had Alternate Data Streams (ADS) attached, as shown in the screenshot. Luckily, thanks to our colleagues at Check Point Research, we didn’t have to do all the heavy lifting ourselves. The ADS contained an encrypted binary structure that the driver used as configuration input. The driver itself can be abused to remove defensive technologies from the affected host. The research behind this technique is super interesting. If you have some time over the weekend, give it a read: research.checkpoint.com/2026…
3
26
104
7,748
Someone at BSides Frankfurt asked me this week if I could share the slides from my talk. Of course - and not just those. 🙂 All my conference presentations are available here: github.com/malmoeb/presentat…
2
47
216
9,834
If you're at @bsidesTLL, come join our anti-forensics workshop. I'm offering a 4-hour hands-on training session packed with lessons from years of incident-response work. Techniques you can apply directly in your own investigations.
2
9
1,221
After a fantastic first session at BruCON Spring Training earlier this year, we’re very happy to teach our Anti-Forensics course again - this time at DeepSec in Vienna. It’s been a busy year with plenty of interesting cases, and many of the lessons learned have been incorporated into new slides and practical examples. We’ve also significantly expanded the macOS anti-forensics section. Really looking forward to teaching this one again - and to a full classroom! :) More information here: deepsec.net/schedule.html
1
1
15
1,804
After a bit of tinkering, I was able to replicate the Google Docs attack vector described in the Huntress blog post [1] Attackers can use Google’s “App Scripts” feature (in Docs) to create a clever pretext. Essentially, the attack works as follows: The attacker sent the victim a legitimate Google Docs link that appeared to be a partially encrypted conference/planning document. Embedded in the document was a Google Apps Script that displayed its own HTML sidebar (DecryptPanel.html). This sidebar mimicked a “Document Decryption” feature and awaited an “Access Key” sent separately by the attacker. The decryption was designed to fail intentionally. After entering the supposedly correct key, the Apps Script interface displayed a fake error message and then offered repair/update steps (your classic Click Fix steps). What’s particularly interesting about this vector is that the victim remains entirely on docs.google.com throughout the process. This makes the process appear significantly more trustworthy than a classic phishing page on a third-party domain. Definitely something to look out for. [1] huntress.com/blog/defcon-phi…
2
26
104
7,783
In a recent ISC SANS Diary, @xme 🇧🇪 discussed a malicious ZIP archive that led to Remcos, a pretty common RAT. As Xavier noted, "Most of the files used in this infection path remain undetected by most AVs." [1] PowerShell, AppData, Dynamic DNS, and Run Key as a persistence mechanism. Four of the eight areas I covered in my first blog post, N-IOCs to Rule Them All [2]. The information presented remains relevant, and finding such infections is not as hard as it sounds, even if they might bypass AV rules and signatures. [1] isc.sans.edu/diary/From+a+VH… [2] dfir.ch/posts/n-iocs/
13
42
4,001
I created two blog posts based on my Fantastic Cleartext Passwords talk, which I presented last year at BSides Munich, and I released the first part (Linux) today. The second part (Windows) will be released next week. Even if these techniques are not novel, I still consider them interesting enough to publish and, most importantly, to raise awareness of all the places an attacker could steal your password. Enjoy. Link to the first part: dfir.ch/posts/fantastic_pass…
12
39
3,887
In March, I had the pleasure of attending the course “Advanced Linux Malware Reverse Engineering" with Marion Marschalek (@pinkflawd). Since reverse engineering isn’t my main area of expertise, my brain was completely fried by the end of each evening (I’d end up lying on the hotel bed watching episode after episode of House Hunters 😂). I hadn’t been challenged like that since the EDR Evasion course, about which I wrote a summary on my blog. I’ll most likely write a summary of Marion’s course as well. And today… I solved the ShadowMonarch challenge on HTB! “Your mission is to fully reverse engineer this sophisticated [Linux] backdoor, understand its BPF-based evasion mechanism, reconstruct the activation protocol, and extract all indicators of compromise.” And it was really cool. I solved the challenge using Binary Ninja (coming from an IDA background), which, even though BJ is great, still required me to switch back and forth a bit within the menu at certain points… We learned so much during Marion’s four-day training, and as I was reverse engineering the sample, I had that “aha, I recognize this” feeling so many times. System calls, how to start the analysis, and how to figure out which functions might correspond to which parts of the malware. Really cool! And, manual reversing combined with some AI support is incredibly fast, especially when analyzing BPF bytecode. Thank you so much, Marion, for the extremely cool course! As you can see, you’re a great teacher; I definitely learned a thing or two :)
3
7
28
4,472