<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>y0sh1mitsu&apos;s blog</title><description>No description</description><link>https://y0sh1mitsu.github.io/</link><language>en</language><item><title>How are Prefetch created?</title><link>https://y0sh1mitsu.github.io/posts/how-are-prefetch-created/</link><guid isPermaLink="true">https://y0sh1mitsu.github.io/posts/how-are-prefetch-created/</guid><description>A little research about the Windows Prefetcher mecanism</description><pubDate>Wed, 17 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In the world of DFIR, the &lt;strong&gt;Prefetch file (.pf)&lt;/strong&gt; is a long-time companion. It’s one of the first digital forensics artifacts we analyze on a Windows workstation to confirm program execution, obtain a timestamp, determine run counts and so on... During many trainings, we’re taught a simple rule of thumb:&lt;/p&gt;
&lt;p&gt;:::note
&lt;em&gt;&quot;An application needs to run for about 10 seconds to generate a valid Prefetch file.&quot;&lt;/em&gt;
:::&lt;/p&gt;
&lt;p&gt;I applied this rule without ever questioning it. I knew it worked, but I didn’t truly understand the reasoning behind it. &lt;strong&gt;Why 10 seconds? Why not instantly? What is the operating system actually doing during that delay? And where did this technology originally come from?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This article documents this small research project.&lt;/p&gt;
&lt;h1&gt;The Genesis: Solving the &quot;Seek&quot; Penalty&lt;/h1&gt;
&lt;p&gt;The Prefetch mechanism is a fundamental innovation within Microsoft Windows operating systems, first officially introduced with &lt;strong&gt;Windows XP&lt;/strong&gt;. Its technical origin is rooted in the patent &lt;a href=&quot;https://patentimages.storage.googleapis.com/fe/e5/6d/f69b888fbc57a1/US6633968.pdf&quot;&gt;US 6,633,968 B2, filed by Arthur Zwiegincew and James E. Walsh of Microsoft in 2003&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The initial challenge was simple yet crucial for perceived user performance: &lt;strong&gt;how to reduce the latency time during the startup of applications and the operating system?&lt;/strong&gt; This slowness stemmed from hard page faults, where the system had to interrupt its work and wait for the necessary data blocks (pages) to be transferred, slowly, from the hard drive to RAM. The patented solution involves detecting and analyzing &quot;&lt;strong&gt;Scenarios&lt;/strong&gt;&quot; of disk access (such as launching a program) to create Scenario files (.pf files).&lt;/p&gt;
&lt;p&gt;These files contain the ordered list of pages that will be requested. Thanks to this prefetching mechanism, the system proactively loads these pages into RAM before they are requested, thereby converting long disk access delays into fast soft page faults, ensuring significantly better system responsiveness.&lt;/p&gt;
&lt;p&gt;This flowchart illustrates the iterative process of managing and prefetching memory pages: when the system detects a Scenario, it checks for the existence of a pre-existing Scenario file to either analyze and create a new file (the bottom path) or open the existing file and load the corresponding pages into RAM (the right path) to prevent hard page faults:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./prefetch_scheme.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;p style=&quot;text-align:center;&quot;&amp;gt;Flowchart of the Memory Page Prefetching Method upon Detection of a Page Fault Scenario (U.S. Patent 6,633,968 B2)&amp;lt;/p&amp;gt;&lt;/p&gt;
&lt;h1&gt;The Evolution of the prefetching mecanism in Windows&lt;/h1&gt;
&lt;p&gt;The Prefetching mechanism has evolved significantly since its introduction in &lt;strong&gt;Windows XP&lt;/strong&gt;. The initial Prefetch feature focused on monitoring and logging hard page faults during system boot and application launch in order to create scenario files and improve startup performance.&lt;/p&gt;
&lt;p&gt;This technology was renamed to &lt;strong&gt;SuperFetch&lt;/strong&gt; with &lt;strong&gt;Windows Vista&lt;/strong&gt;. SuperFetch did not replace the original Prefetcher service. Instead, it expanded it by adopting a more strategic and adaptive approach. Building on the existing mechanism, SuperFetch analyzes long-term usage patterns and proactively loads frequently used applications and data into RAM to improve responsiveness.&lt;/p&gt;
&lt;p&gt;In newer versions of &lt;strong&gt;Windows 10 and in Windows 11&lt;/strong&gt;, the SuperFetch service was  renamed &lt;strong&gt;SysMain&lt;/strong&gt;. The core functionality remains essentially the same, focusing on dynamic prefetching and intelligent memory management. Microsoft has not provided an official explanation for the name change, so it is reasonable to assume that it was done to align the service with the modern Windows system architecture.&lt;/p&gt;
&lt;h1&gt;How a Prefetch is Born&lt;/h1&gt;
&lt;p&gt;To understand the lifecycle of a Prefetch file, we must look beyond the disk. Windows Internals states that when an application launches, the kernel memory manager monitors page faults for the first 10 seconds. But how does this telemetry become a &lt;code&gt;.pf&lt;/code&gt; file?&lt;/p&gt;
&lt;h2&gt;1. \KernelObjects\PrefetchTracesReady&lt;/h2&gt;
&lt;p&gt;Windows Internals explains that the &lt;code&gt;svchost.exe&lt;/code&gt; instance responsible for the &lt;strong&gt;SysMain&lt;/strong&gt; service will wait for a notification from the kernel, &lt;code&gt;\KernelObjects\PrefetchTracesReady&lt;/code&gt;, to inform it that it can now request the data.&lt;/p&gt;
&lt;p&gt;​To observe this, I attached &lt;strong&gt;WinDbg&lt;/strong&gt; to the relevant &lt;code&gt;svchost&lt;/code&gt; instance. The stack trace reveals a call to &lt;code&gt;ntdll!NtWaitForMultipleObjects&lt;/code&gt; (https://ntdoc.m417z.com/ntwaitformultipleobjects), indicating the thread is suspended until specific objects enter a signaled state:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;0:001&amp;gt; k
 # Child-SP          RetAddr               Call Site
00 000000e1`bcf7d178 00007ffd`4ebfdf83     ntdll!NtWaitForMultipleObjects+0x14
01 000000e1`bcf7d180 00007ffd`398cd9ce     KERNELBASE!WaitForMultipleObjectsEx+0x123
02 000000e1`bcf7d470 00007ffd`398ed592     sysmain!PfSvcMainThreadWorker+0xf6a
03 000000e1`bcf7faa0 00007ffd`3990006f     sysmain!PfSvcMainThread+0x22
04 000000e1`bcf7fae0 00007ff7`36da259d     sysmain!SysMtServiceMain+0x10f
05 000000e1`bcf7fb20 00007ffd`4fb17627     svchost!ServiceStarter+0x3cd
06 000000e1`bcf7fc30 00007ffd`5053e8d7     sechost!ScSvcctrlThreadA+0x27
07 000000e1`bcf7fc60 00007ffd`5142c53c     KERNEL32!BaseThreadInitThunk+0x17
08 000000e1`bcf7fc90 00000000`00000000     ntdll!RtlUserThreadStart+0x2c
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;​By inspecting the thread&apos;s registers and resolving the handles in the wait array, I confirmed the presence of the kernel event &lt;code&gt;\KernelObjects\PrefetchTracesReady&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;0:001&amp;gt; r
rax=000000000000005b rbx=0000000000000007 rcx=0000000000000007
rdx=000000e1bcf7fa10 rsi=0000000000000000 rdi=0000000000000007
rip=00007ffd51502714 rsp=000000e1bcf7d178 rbp=000000e1bcf7d570
 r8=0000000000000001  r9=0000000000000000 r10=0000000000000007
r11=0000000000000007 r12=000000e1bcf7fa10 r13=000000e1bc813000
r14=0000000000000000 r15=0000000000000000
iopl=0         nv up ei pl zr na po nc
cs=0033  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000244
ntdll!NtWaitForMultipleObjects+0x14:
00007ffd`51502714 c3              ret
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;0:001&amp;gt; dq rdx L7
000000e1`bcf7fa10  00000000`000001c8 00000000`000001c4
000000e1`bcf7fa20  00000000`00000150 00000000`000001e4
000000e1`bcf7fa30  00000000`000002b4 00000000`000002dc
000000e1`bcf7fa40  00000000`00000210
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;:001&amp;gt; !handle 2b4 7
Handle 2b4
  Type         	Event
  Attributes   	0x10
  GrantedAccess	0x120001:
         ReadControl,Synch
         QueryState
  HandleCount  	2
  PointerCount 	63826
  Name         	\KernelObjects\PrefetchTracesReady
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here, consider this event as the starter&apos;s pistol. Once the kernel&apos;s 10-second timer expires, it signals this event to the SysMain service to indicate: &lt;strong&gt;“The trace is ready, come and get it!”&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;2. NtQuerySystemInformation&lt;/h2&gt;
&lt;p&gt;Then, once the SysMain service knows that the data is available, we can read again in Windows Internals that it makes a call to the internal syscall &lt;a href=&quot;https://ntdoc.m417z.com/ntquerysysteminformation&quot;&gt;NtQuerySystemInformation&lt;/a&gt; for requesting the trace data.&lt;/p&gt;
&lt;p&gt;To observe the precise moment when trace data is exchanged, I established a kernel debugging session using &lt;a href=&quot;https://github.com/4d61726b/VirtualKD-Redux&quot;&gt;VirtualKD-Redux&lt;/a&gt; and a Windows 11 VM on VMware Workstation Pro.&lt;/p&gt;
&lt;p&gt;At the same time, thanks to my friend Adams, I stumbled upon &lt;a href=&quot;https://www.geoffchappell.com/studies/windows/km/ntoskrnl/api/pf/prefetch/superfetch.htm&quot;&gt;Geoff Chappell&apos;s website&lt;/a&gt;, which is a gold mine of information on undocumented structures. I discovered that there was one for the Prefetch mechanism (&lt;strong&gt;SUPERFETCH_INFORMATION&lt;/strong&gt;) which helped me a lot. To filter the noise, I focused on the first argument of &lt;code&gt;NtQuerySystemInformation&lt;/code&gt;, which defines the information class requested. On x64 systems, this first parameter is passed via the &lt;code&gt;RCX&lt;/code&gt; register so we need to check for the value &lt;code&gt;0x38&lt;/code&gt; (&lt;strong&gt;SystemSuperfetchInformation&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;After identifying the &lt;code&gt;EPROCESS&lt;/code&gt; address for the right &lt;code&gt;svchost.exe&lt;/code&gt; instance, I switched the debugger context and set a conditional breakpoint:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kd&amp;gt; .process /i /p &amp;lt;EPROCESS&amp;gt;
kd&amp;gt; bp /p &amp;lt;EPROCESS&amp;gt; nt!NtQuerySystemInformation &quot;.if (@rcx == 0x38) {.echo &apos;--- CLASS 0x38 DETECTED ---&apos;; r rdx, r8} .else {gc}&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Upon launching &lt;strong&gt;MSPaint.exe&lt;/strong&gt; to trigger a Prefetch scenario, the breakpoint was hit. To allow the kernel to populate the buffer with the trace data, I executed a &lt;code&gt;gu&lt;/code&gt; command to step out of the function and return to the caller.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1: kd&amp;gt; gu
nt!KiSystemServiceCopyEnd+0x28:
fffff806`df4b5658 65ff0425b82e0000 inc     dword ptr gs:[2EB8h]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once the call completed, I inspected the structure pointed to by &lt;code&gt;RDX&lt;/code&gt;. The signature &lt;code&gt;43 68 75 6b&lt;/code&gt; (&quot;Chuk&quot;) confirmed the presence of the &lt;strong&gt;SUPERFETCH_INFORMATION&lt;/strong&gt; container and that the data transfer was successful:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kd&amp;gt; db 000000bad817d118 L20
000000ba`d817d118  01 00 00 00 43 68 75 6b-01 00 00 00 00 00 00 00  ....Chuk........
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;By dumping the memory buffer (the pointer found within the structure at offset +0x10), the raw &quot;blueprint&quot; of the Prefetch file was revealed. This data confirm the Windows Internals following statement:&lt;/p&gt;
&lt;p&gt;:::note
&lt;em&gt;&quot;The trace assembled in the kernel notes faults taken on the NTFS master file table (MFT) metadata file (if the application accesses files or directories on NTFS volumes), referenced files, and referenced directories.&quot;&lt;/em&gt;
:::&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1: kd&amp;gt; db 000001cd00040000 L1000
000001cd`00040000  00 00 00 00 08 00 24 00-4c 00 4f 00 47 00 46 00  ......$.L.O.G.F.
000001cd`00040010  49 00 4c 00 45 00 00 00-04 00 24 00 4d 00 46 00  I.L.E.....$.M.F.
000001cd`00040020  54 00 00 00 0f 00 48 00-41 00 52 00 44 00 44 00  T.....H.A.R.D.D.
000001cd`00040030  49 00 53 00 4b 00 56 00-4f 00 4c 00 55 00 4d 00  I.S.K.V.O.L.U.M.
000001cd`00040040  45 00 31 00 0f 00 48 00-41 00 52 00 44 00 44 00  E.1...H.A.R.D.D.
000001cd`00040050  49 00 53 00 4b 00 56 00-4f 00 4c 00 55 00 4d 00  I.S.K.V.O.L.U.M.
000001cd`00040060  45 00 34 00 0f 00 48 00-41 00 52 00 44 00 44 00  E.4...H.A.R.D.D.
000001cd`00040070  49 00 53 00 4b 00 56 00-4f 00 4c 00 55 00 4d 00  I.S.K.V.O.L.U.M.
000001cd`00040080  45 00 33 00 07 00 57 00-49 00 4e 00 44 00 4f 00  E.3...W.I.N.D.O.
000001cd`00040090  57 00 53 00 08 00 53 00-59 00 53 00 54 00 45 00  W.S...S.Y.S.T.E.
000001cd`000400a0  4d 00 33 00 32 00 50 00-09 00 4e 00 54 00 44 00  M.3.2.P...N.T.D.
000001cd`000400b0  4c 00 4c 00 2e 00 44 00-4c 00 4c 00 09 00 43 00  L.L...D.L.L...C.
000001cd`000400c0  5f 00 38 00 35 00 30 00-2e 00 4e 00 4c 00 53 00  _.8.5.0...N.L.S.
000001cd`000400d0  0a 00 4c 00 5f 00 49 00-4e 00 54 00 4c 00 2e 00  ..L._.I.N.T.L...
000001cd`000400e0  4e 00 4c 00 53 00 53 00-0a 00 43 00 5f 00 31 00  N.L.S.S...C._.1.
000001cd`000400f0  32 00 35 00 32 00 2e 00-4e 00 4c 00 53 00 4c 00  2.5.2...N.L.S.L.
000001cd`00040100  03 00 57 00 45 00 52 00-06 00 44 00 45 00 56 00  ..W.E.R...D.E.V.
000001cd`00040110  49 00 43 00 45 00 00 00-0f 00 48 00 41 00 52 00  I.C.E.....H.A.R.
000001cd`00040120  44 00 44 00 49 00 53 00-4b 00 56 00 4f 00 4c 00  D.D.I.S.K.V.O.L.
000001cd`00040130  55 00 4d 00 45 00 32 00-0b 00 53 00 56 00 43 00  U.M.E.2...S.V.C.
000001cd`00040140  48 00 4f 00 53 00 54 00-2e 00 45 00 58 00 45 00  H.O.S.T...E.X.E.
000001cd`00040150  0c 00 4b 00 45 00 52 00-4e 00 45 00 4c 00 33 00  ..K.E.R.N.E.L.3.
000001cd`00040160  32 00 2e 00 44 00 4c 00-4c 00 4c 00 0e 00 4b 00  2...D.L.L.L...K.
000001cd`00040170  45 00 52 00 4e 00 45 00-4c 00 42 00 41 00 53 00  E.R.N.E.L.B.A.S.
000001cd`00040180  45 00 2e 00 44 00 4c 00-4c 00 4c 00 0a 00 4c 00  E...D.L.L.L...L.
...
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Writing the Prefetch to the disk&lt;/h2&gt;
&lt;p&gt;Once SysMain has collected the kernel data, the service processes the trace data, combines it with the previously collected data, and then writes it to a file located in the folder you all know: &lt;code&gt;%SystemRoot%\Prefetch&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In order to track the writing of a Prefetch, I used ProcMon and launched Zoom:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./procmon_zoom.jpg&quot; alt=&quot;&quot; /&gt;
&amp;lt;p style=&quot;text-align:center;&quot;&amp;gt;Procmon&amp;lt;/p&amp;gt;&lt;/p&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;In summary, this research has shown that the Windows Prefetcher originated from a 2003 patent aimed at solving the &quot;seek penalty&quot; of hard drives. Over two decades, this mechanism has evolved through versions of Windows, transforming from a simple boot optimizer into the modern SysMain service.&lt;/p&gt;
&lt;p&gt;By following the informations left in &lt;strong&gt;Windows Internals&lt;/strong&gt;, we were able to observe the step-by-step creation of a Prefetch file: from the kernel&apos;s 10-second monitoring window and the signaling of the &lt;code&gt;PrefetchTracesReady&lt;/code&gt; event, to the final data exchange via the &lt;code&gt;NtQuerySystemInformation&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ultimately, the &lt;strong&gt;.pf&lt;/strong&gt; files on our disks are the persistent results of this complex dance between the Memory Manager and user-mode services, ensuring that the most critical data is always ready in RAM before we even ask for it.&lt;/p&gt;
</content:encoded></item><item><title>From Alert to Insight: The Art of Incident Classification</title><link>https://y0sh1mitsu.github.io/posts/qualify-an-incident/</link><guid isPermaLink="true">https://y0sh1mitsu.github.io/posts/qualify-an-incident/</guid><description>A short guide for those wishing to classify an incident</description><pubDate>Mon, 26 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Introduction&lt;/h1&gt;
&lt;p&gt;During my career in incident response, I have had the opportunity to qualify a wide range of security incidents, from isolated malware infections to large-scale compromises. Through these experiences, and with the support of colleagues, I have gained valuable insights and practical advice that continue to shape my approach. This post shares those insights with practitioners facing similar challenges.&lt;/p&gt;
&lt;p&gt;A well-executed incident qualification sets the tone for the entire response process. It clarifies the initial scope and improves evidence collection and technical analysis. A correct qualification helps align teams, reduces redundant work, and allows for faster containment and remediation.&lt;/p&gt;
&lt;p&gt;One important mindset during incident qualification is to avoid accepting initial input without verification. In many investigations, early reports from users or stakeholders are incomplete, misunderstood, or sometimes incorrect. A useful reference here is the medical drama House MD, where Dr. House insists that &quot;everybody lies.&quot; In cybersecurity, this usually results from stress, assumptions, or missing context rather than bad intent. Still, it often distorts the first version of events.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./house-doctor.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;Acquire Context&lt;/h1&gt;
&lt;p&gt;The first step usually involves gathering contextual information. Begin by asking for the date and time when the first suspicion appeared.&lt;/p&gt;
&lt;p&gt;Make sure to agree on a consistent time reference, such as UTC. This is especially important if the client operates across multiple time zones. Then ask how the incident was detected. The answer might be an EDR alert, a curious system administrator, or a Managed Security Service Provider (MSSP). This gives early insight into how much visibility and detection capability the organization has.&lt;/p&gt;
&lt;p&gt;Next, ask what has been observed since the first detection. This question is essential. In some cases, the attacker may still be active and attempting to escalate privileges. Accurate and timely information at this stage can make the difference between fast containment and a much larger compromise.&lt;/p&gt;
&lt;p&gt;It is also important to ask about business impact. Find out what the company does, and what tools or systems are needed for employees to do their work. This can include business applications, communication tools, or access to shared files.  If the incident affects multiple environments, but one involves operational technology that is halting a factory and incurring substantial financial loss, then investigative efforts must prioritize containment and recovery in that area. The prioritization of DFIR tasks is often dictated by business continuity needs.&lt;/p&gt;
&lt;p&gt;An often overlooked but critical question involves recent changes in the affected perimeter. Were there updates, migrations, or AV changes? This helps filter out potential false positives * &lt;strong&gt;Insert your favorite antivirus update that has triggered false alarms on an entire network&lt;/strong&gt; * and flags risks like compromised software supply chains. Incidents like SolarWinds and 3CX have shown that legitimate updates can be used as backdoors by Threat Actors. Changes like these can also result in assets being unintentionally exposed to the internet during a migration.&lt;/p&gt;
&lt;p&gt;Also ask to list any remedial actions taken by the customer: Assets physically turned off, network link cut, deployment of RMM tools, etc...&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./S7Owqd.gif&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;When you can&apos;t investigate on RAM dump for the 7786678th time because everything has been turned off&lt;/em&gt;&lt;/p&gt;
&lt;h1&gt;Ask about the perimeter impacted&lt;/h1&gt;
&lt;p&gt;Once the contextual information is gathered, the next focus is the assets identified by the client as impacted. At this stage, it&apos;s critical to capture technical and environmental metadata that will support both collection and triage phases. The following information should be requested:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Asset Name:&lt;/strong&gt; to establish a list across impacted systems.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operating System:&lt;/strong&gt; essential for evaluating compatibility with potential forensic tools or EDR deployment. Unsupported OS versions can delay investigation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Role:&lt;/strong&gt; whether it&apos;s a file server, print server, workstation, etc. This helps prioritize based on criticality.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Geolocation:&lt;/strong&gt; useful for correlating timestamps if multiple time zones are involved, or if deploying on-site responders is considered.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Physical or Virtual:&lt;/strong&gt; impacts both how to collect (and the possibility of snapshot collection in case of VMs) and how to isolate.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Antivirus Presence and Vendor:&lt;/strong&gt; helps assess protection gaps, identify false positives, or show possible threat actor activity on the console.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IP Address:&lt;/strong&gt; to enable quick lookup in logs, SIEM, or network maps.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next, determine whether logging from these assets is centralized. This is crucial. Too often, responders encounter assets with local log rotation set to just one hour, rendering retrospective analysis impossible. In the case of long-term compromises like APTs, an organization might discover that they can’t confirm the initial access date because logs beyond a certain point no longer exist.&lt;/p&gt;
&lt;p&gt;It is equally important to ask whether the impacted systems are tied to an authentication service, especially in environments where identity is a common attack vector. Determine the type (e.g., Active Directory, local accounts, federated identity, SAML, etc.), how many domains exist, and what trust relationships are configured. This influences the logs to request (Kerberos, VPN, AD events, etc.) and helps map out lateral movement potential. In the context of cloud investigation, always asking for the type of license can give an idea of which logs are available and for how long.&lt;/p&gt;
&lt;p&gt;Also, gather details on the security controls in place on the impacted perimeter. This includes the presence of multi-factor authentication (MFA), endpoint detection and response (EDR) deployment, hardening practices, allowlisting, and segmentation. These elements are key to quickly assessing the maturity of the environment and the capabilities of the threat actor. For example, an attacker who manages to bypass EDR and MFA likely demonstrates a higher level of sophistication than one who fails at the first hurdle. Understanding which defenses were in place and whether they were effective or circumvented allows responders to estimate the adversary’s skill level and adjust investigation depth and containment urgency accordingly.&lt;/p&gt;
&lt;p&gt;Another key topic is resilience. Are the systems backed up? If yes, are those backups tested and isolated from impacted domains? It’s not uncommon to discover backups that are either untested, outdated, or encrypted because they were part of the same trust zone targeted by ransomware. The answer here directly informs both containment and reconstruction strategies, including the establishment of a trustworthy pivot date (the earliest point at which systems can be considered uncompromised).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./angry-nervos.gif&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;When the CISO discovers that the backup plan isn&apos;t functional&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Finally, a description of the surrounding network is required:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Firewall presence and configuration / logging&lt;/li&gt;
&lt;li&gt;Proxy logging&lt;/li&gt;
&lt;li&gt;DMZ &amp;amp; VLAN segmentation...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ask about the Internet exposure, contrary to popular belief, phishing is not the primary cause of compromise in most cases observed during field operations. Many initial accesses stem from vulnerable perimeter assets: outdated Citrix, Ivanti, or Fortinet appliances, exposed RDP endpoints, etc. Understanding the exposure and protections in place around these assets often provides crucial context in tracing the initial breach path.&lt;/p&gt;
&lt;p&gt;A quick win here is to ask for the external IP address of the impacted perimeter. This enables rapid verification using platforms like Censys or Shodan to determine what services and ports are publicly exposed, which can reveal misconfigurations or forgotten services vulnerable to exploitation.&lt;/p&gt;
&lt;p&gt;Another key area to explore is the historical context of the perimeter in question. Ask whether there have been prior incidents affecting the same assets or environment. Sometimes an earlier event, poorly scoped, misclassified, or superficially investigated, can turn out to be the initial foothold of a threat actor who later resurfaces with elevated access and a clearer understanding of the environment. There are numerous real-world examples where credentials, defensive posture, or internal mappings were resold or reused in subsequent attacks.&lt;/p&gt;
&lt;p&gt;Similarly, ask for the results of any recent perimeter penetration tests. Unfortunately, penetration test results are often underutilized by customers. A vulnerability may have been reported as critical, but not fixed due to time or resource constraints. Identifying these known weaknesses, especially those that have not been corrected, can shed light on how an attacker gained access to the system, and which weaknesses can still be exploited.&lt;/p&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;There is no single model for qualifying security incidents. While frameworks and checklists are useful for avoiding blind spots, the process itself must remain flexible and context-driven. With experience, the flow of questions and validations becomes more natural. Patterns become easier to recognize, and your instincts improve as you learn how to read between the lines.&lt;/p&gt;
&lt;p&gt;Each case refines your approach. Over time, incident qualification becomes more intuitive, almost like muscle memory. The goal is not to ask every possible question, but to identify the most relevant ones based on the situation. Knowing what to ask, when to ask it, and how to verify the answers is what enables a fast, reliable, and focused response.&lt;/p&gt;
&lt;p&gt;The ultimate aim is simple. Build the most accurate and complete understanding of the situation, even when chaos is unfolding around you. That is the foundation for every effective response.&lt;/p&gt;
</content:encoded></item><item><title>Respond to a TA2541 intrusion</title><link>https://y0sh1mitsu.github.io/posts/ta2541/</link><guid isPermaLink="true">https://y0sh1mitsu.github.io/posts/ta2541/</guid><description>Reproduce and Respond to a TA2541 intrusion case with the help of Velociraptor.</description><pubDate>Sat, 09 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Introduction&lt;/h1&gt;
&lt;p&gt;Last month, I discovered a report on a threat group known as TA2541. In this report by &lt;a href=&quot;https://www.proofpoint.com/us/blog/threat-insight/charting-ta2541s-flight&quot;&gt;Proofpoint&lt;/a&gt;, researchers have detailed the capabilities of this threat actor, highlighting its tactics and potential motivations.&lt;/p&gt;
&lt;p&gt;In this article, I review the main findings of the report and discuss how to mimic this TA by replaying its infection chain. In addition, I will analyze the infection from a DFIR perspective and examine possible response strategies.&lt;/p&gt;
&lt;h1&gt;Emulation Part&lt;/h1&gt;
&lt;p&gt;For the purpose of this article, I have emulated the following infection chain:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./1_infection-chain.svg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Figure 1 - TA2541 Infection chain&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Initial Compromise with email&lt;/h2&gt;
&lt;p&gt;In this infection chain, the initial stage typically involves a phishing email that contains a PDF document as an attachment. The PDF file is crafted to deceive the victim into clicking on a Google Drive link, which ultimately results in the download of a malicious VBS.&lt;/p&gt;
&lt;p&gt;Once executed, the VBS initiates a sequence of malicious actions, allowing the threat actor to establish a foothold in the victim&apos;s environment.&lt;/p&gt;
&lt;p&gt;In this infection, the threat actor utilizes the &quot;double extension&quot; technique to trick users who might overlook file extensions. For instance, they could name a file as follows: &lt;strong&gt;&lt;code&gt;charters details.pdf.vbs&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;For demonstration purposes, I created a phishing e-mail containing a PDF file as an attachment and sent it to my mailbox. The PDF file contained a link to a Google Drive folder in which I temporarily hosted the malicious VBS.&lt;/p&gt;
&lt;h2&gt;Stage 1 - VBS&lt;/h2&gt;
&lt;p&gt;To emulate this stage, I replicated the script mentioned in the Proofpoint report, and then substituted the TA&apos;s Paste.ee link with the one I provided. The link I used had the content of stage 2 of the attack.&lt;/p&gt;
&lt;p&gt;The analysis of this script will be revisited in a subsequent section of the article as part of my DFIR investigation.&lt;/p&gt;
&lt;h2&gt;Stage 2 - PowerShell &amp;amp; AsyncRAT&lt;/h2&gt;
&lt;p&gt;The second stage is a PowerShell script, this script allows to compile an embedded AsyncRAT payload in a byte array and inject them with a &lt;a href=&quot;https://github.com/NYAN-x-CAT/CSharp-RunPE&quot;&gt;RunPE&lt;/a&gt; technique in the memory land of a process. You can find it on this &lt;a href=&quot;https://app.any.run/tasks/5f25a741-686d-4db3-920d-07b97b6e20c3/&quot;&gt;AnyRun&lt;/a&gt; task.&lt;/p&gt;
&lt;p&gt;It also drops a VBS to establish a persistence in the startup folder.&lt;/p&gt;
&lt;p&gt;To emulate this part, I went to AsyncRAT&apos;s github repo: &lt;a href=&quot;https://github.com/NYAN-x-CAT/AsyncRAT-C-Sharp&quot;&gt;https://github.com/NYAN-x-CAT/AsyncRAT-C-Sharp&lt;/a&gt; and generated a payload that I encoded to integrate into the script in place of the TA payload. We&apos;ll talk about the encoding and analysis of this script in the following section.&lt;/p&gt;
&lt;p&gt;With the complete infection chain, I launched it by simulating the behavior of a user who receives the phishing e-mail and clicks on the first VBScript file on a GDrive link.&lt;/p&gt;
&lt;h1&gt;Respond Part&lt;/h1&gt;
&lt;p&gt;Now, let&apos;s assume the role of an Incident Responder who has been called in to investigate a computer incident detected by a Security Operations Center (SOC) due to a possible connection to IP address 192.168.1.38, possibly a C2 AsyncRAT, reported by a network intrusion detection system (NIDS). The user of the affected system informs you that he has not noticed any suspicious behavior.&lt;/p&gt;
&lt;p&gt;I&apos;ve deployed a Velociraptor agent in server/client mode (like an EDR), which allows me to see what&apos;s currently happening on the system and perform live forensic analysis.&lt;/p&gt;
&lt;p&gt;To begin my investigation, I did a hunt to retrieve the list of processes running on the machine, network connections, user activity (Proof of Execution, Browser History and Download History), and I also looked for persistence traces on the system.&lt;/p&gt;
&lt;h2&gt;Process list&lt;/h2&gt;
&lt;p&gt;I used Velociraptor&apos;s &lt;strong&gt;&lt;code&gt;Generic.System.Pstree&lt;/code&gt;&lt;/strong&gt; artifact to list all running processes on the current system. This is a quick win, as you can immediately see a suspicious call sequence, a suspicious process name or a process launched from a suspicious path.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./5_pstree.png&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;Figure 2 - Process list&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As this is a case of process injection, there&apos;s nothing wrong with the system if you rely on the process list alone. That&apos;s why I switched to network connection analysis.&lt;/p&gt;
&lt;h2&gt;Network Connexion&lt;/h2&gt;
&lt;p&gt;To analyze network connections, I used the &lt;strong&gt;&lt;code&gt;Windows.Network.NetstatEnriched&lt;/code&gt;&lt;/strong&gt; artifact, which gives me a netstat command on the system but enriched with process name and path, authenticode information or network connection details.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./6_netstat.png&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;Figure 3 - Network Activity&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I noticed that a process called &lt;strong&gt;&lt;code&gt;RegSvcs.exe&lt;/code&gt;&lt;/strong&gt; located in &lt;strong&gt;&lt;code&gt;&quot;C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegSvcs.exe&quot;&lt;/code&gt;&lt;/strong&gt; was establishing a network connection with the possible AsyncRAT C2. After researching the purpose of &lt;strong&gt;&lt;code&gt;Regsvcs.exe&lt;/code&gt;&lt;/strong&gt;, it turned out to be a tool called NET Services Installation to perform the following actions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Load and register an assembly;&lt;/li&gt;
&lt;li&gt;Generate, register and install a type library in the specified COM+ application;&lt;/li&gt;
&lt;li&gt;Configure the services you have programmatically added to your class.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To be honest, I didn&apos;t know whether this behavior could be caused by a legitimate action. To find out whether it was a process infected by code injection, I analyzed it with the Hollow Hunts tool and, if the result was positive, scanned it with a YARA rule detecting an AsyncRAT payload.&lt;/p&gt;
&lt;h2&gt;Process scan&lt;/h2&gt;
&lt;h3&gt;Hollows Hunter&lt;/h3&gt;
&lt;p&gt;Hollows Hunter is a tool from &lt;a href=&quot;https://github.com/hasherezade/hollows_hunter&quot;&gt;hasherezade&lt;/a&gt;. It analyzes all running processes, recognizing a variety of potentially malicious implants (replaced/implanted PEs, shellcodes, hooks, memory patches).&lt;/p&gt;
&lt;p&gt;Running it via the &lt;strong&gt;&lt;code&gt;Windows.Memory.HollowsHunter&lt;/code&gt;&lt;/strong&gt; artifact on the &lt;strong&gt;&lt;code&gt;RegSvcs.exe&lt;/code&gt;&lt;/strong&gt; process, which looks legitimate at first glance, you can see that the tool reports that a PE has been implanted in this process via code injection.&lt;/p&gt;
&lt;p&gt;This confirms the suspicion, so all that remains is to identify it with YARA and dump the injected PE for analysis.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./12_hollowhunter.png&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;Figure 4 - Hollows Hunter output&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;YARA&lt;/h3&gt;
&lt;p&gt;Using the Windows.Detection.Yara.Process artifact, I pointed a YARA rule created by &lt;a href=&quot;https://github.com/IrishIRL/yara-rules/blob/main/RAT_AsyncRAT.yara&quot;&gt;IrishIRL&lt;/a&gt; to detect AsyncRAT, and it turns out that this rule matched with the &lt;strong&gt;&lt;code&gt;RegSvcs.exe&lt;/code&gt;&lt;/strong&gt; process.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./13_yara.png&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;Figure 5 - AsyncRAT Yara rule match RegSvcs.exe&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I&apos;ve now been able to tell that this was a true positive, but now we need to find out how this process got infected by finding the root cause.&lt;/p&gt;
&lt;p&gt;I then relied on the user activities I collected earlier with my hunt query.&lt;/p&gt;
&lt;h2&gt;User Activity&lt;/h2&gt;
&lt;h3&gt;Evidence of download&lt;/h3&gt;
&lt;p&gt;The &lt;strong&gt;&lt;code&gt;Windows.Analysis.EvidenceOfDownload&lt;/code&gt;&lt;/strong&gt; artifact allows you to search the directory provided for any file whose Alternative Data Stream (ADS) is named &lt;code&gt;Zone.Identifier&lt;/code&gt;, then lists it. It lists all files with a &lt;code&gt;ZoneId&lt;/code&gt; equal to 3 or 4, calculates the file&apos;s hash value and prints the contents of the &lt;code&gt;Zone.Identifier&lt;/code&gt; stream, as it may contain useful information in certain cases.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./7_evidence_of_download.png&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;Figure 6 - Evidence of Download&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We can see that a VBS with a double extension has been downloaded from Google Drive into the user&apos;s download directory. Thanks to the &lt;a href=&quot;https://docs.velociraptor.app/docs/gui/vfs/&quot;&gt;Virtual Filesystem&lt;/a&gt; provided by Velociraptor, which allows me to download any file on the system, I was able to proceed with its analysis:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./2_stage1.png&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;Figure 7 - Content of the VBS&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This script is obfuscated, and includes a variable named &lt;strong&gt;&lt;code&gt;JAVA&lt;/code&gt;&lt;/strong&gt; which contains a reversed PowerShell command. This command will be reversed to its original form using the &lt;strong&gt;&lt;code&gt;StrReverse&lt;/code&gt;&lt;/strong&gt; function and saved in the &lt;strong&gt;&lt;code&gt;Everything&lt;/code&gt;&lt;/strong&gt; variable.&lt;/p&gt;
&lt;p&gt;Here is the PowerShell command once it is reversed:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./3_reversed-command.png&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;Figure 8 - Reversed command&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;By reading and decoding it, the script use &lt;strong&gt;&lt;code&gt;Invoke-WebRequest&lt;/code&gt;&lt;/strong&gt; cmdlet to download the contents of a PowerShell script on Paste.ee, places it and then executes it in &lt;strong&gt;&lt;code&gt;&quot;C:\Users\Public&quot;&lt;/code&gt;&lt;/strong&gt; under the name &lt;strong&gt;&lt;code&gt;RemoteFramework64.PS1&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Going back to the Velociraptor&apos;s Virtual Filesystem, it turns out that &lt;strong&gt;&lt;code&gt;RemoteFramework64.PS1&lt;/code&gt;&lt;/strong&gt; is still present on the system. So I downloaded it and analyzed it:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./4_stage2.png&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;Figure 9 - Content of the stage 2 PowerShell script&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You can see that it&apos;s a PowerShell script used to compile a payload and then inject it using a RunPE technique into &lt;strong&gt;&lt;code&gt;RegSvcs.exe&lt;/code&gt;&lt;/strong&gt; , so it&apos;s this script that&apos;s causing the alert issued by the SOC.&lt;/p&gt;
&lt;p&gt;The AsyncRAT payload, the VBS used to perform persistence and the code responsible for injecting the process are stored in byte arrays.&lt;/p&gt;
&lt;p&gt;To be able to read them, I had to read the Decompress function, which decompresses them to make them usable. It turns out that they are compressed with gzip and then transformed into comma-separated decimals. In this case, the CyberChef solution helped me to read them in clear.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./Cyberchef.png&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;Figure 10 - Cyberchef Recipe&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;All that remains is to analyze the user&apos;s web history to find out when he downloaded the script from Google Drive, and why not make sure there are no other persistent files on the system.&lt;/p&gt;
&lt;h3&gt;Web History&lt;/h3&gt;
&lt;p&gt;Using the artifact &lt;strong&gt;&lt;code&gt;Windows.Applications.Chrome.History&lt;/code&gt;&lt;/strong&gt; I was able to obtain a view of the user&apos;s web history. Using this history, you can see that the user went to his Gmail inbox, consulted an e-mail named &lt;strong&gt;&lt;code&gt;URGENT RFQ // Aircraft Parts - REF 678876&lt;/code&gt;&lt;/strong&gt; and then pivoted to Google Drive with the page title &lt;strong&gt;&lt;code&gt;charters details.pdf.vbs - Google Drive&lt;/code&gt;&lt;/strong&gt; and the link to download the file. This is the page for download the stage 1 script, and it tells us that the root cause is a phishing e-mail.&lt;/p&gt;
&lt;p&gt;We&apos;ll ask the user for further explanation, so that we can view the e-mail and retrieve its headers.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./8_history1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./9_history2.png&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;Figures 11 &amp;amp; 12 - User web history&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Persistence&lt;/h2&gt;
&lt;p&gt;To analyze persistence mechanisms, I used the &lt;strong&gt;&lt;code&gt;Windows.Packs.Persistence&lt;/code&gt;&lt;/strong&gt; artifact pack, as well as the &lt;strong&gt;&lt;code&gt;Windows.System.TaskScheduler&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;Windows.Persistence.Wow64cpu&lt;/code&gt;&lt;/strong&gt; &amp;amp; &lt;strong&gt;&lt;code&gt;Windows.Persistence.PowershellProfile&lt;/code&gt;&lt;/strong&gt; artifacts.&lt;/p&gt;
&lt;p&gt;After examining the various results, we can see that the VBS named &lt;strong&gt;&lt;code&gt;SystemFramework64Bits.vbs&lt;/code&gt;&lt;/strong&gt; placed by the powershell script I analyzed above is present in the startup folder &lt;strong&gt;&lt;code&gt;&quot;C:\Users\y0sh\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup&quot;&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./11_Windows.Sys.StartupItems.png&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;Figure 13 - Content of the Startup Folder&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;By downloading this script with the Velociraptor&apos;s Virtual Filesystem, you can notice that it will launch the PowerShell script (Stage 2) described above after each start-up of the compromised session of the system:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./10_content.png&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;Figure 14 - Content of SystemFramework64Bits.vbs&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Timeline&lt;/h2&gt;
&lt;p&gt;To complete the investigation, it would be prudent to examine both the Master File Table and the USN Journal Analysis log. In this way, an exhaustive chronology can be established of the date and type of malicious files created on the system:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Master File Table (MFT) Analysis:&lt;/strong&gt; The MFT is a crucial component of the NTFS file system, and it contains metadata about each file and directory on the disk. By analyzing the MFT, we can identify file creation timestamps, modification timestamps, and access timestamps. This will enable us to pinpoint the exact times when the malicious files were created, modified, or accessed on the system.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;USN Journal Analysis:&lt;/strong&gt; The USN journal is a feature in Windows operating systems that records changes made to files and directories on an NTFS volume. It maintains a log of these changes, providing valuable information about file creation, modification, and deletion events. By examining the USN journal, we can obtain a comprehensive view of all file-related activities, including those associated with the malicious files involved in the incident.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By combining data from MFT and USN log analysis, you can create a detailed timeline of the attack&apos;s progression, which will help us understand how the malicious files were introduced and propagated through the system.&lt;/p&gt;
&lt;p&gt;I could also talk about the different Event ID&apos;s within EVTX, but to keep the article short for the reader, I&apos;ve decided not to write about this part.&lt;/p&gt;
&lt;p&gt;This chronology will be an essential asset in the incident response process, and will help to formulate an effective plan to mitigate the threat and prevent its recurrence in the future.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type of Action&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Timestamp (UTC+0)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;[WEB HISTORY] Google Mail - Mailbox&lt;/td&gt;
&lt;td&gt;Title: Boîte de réception (1) - REDACTED@gmail.com - Gmail&lt;/td&gt;
&lt;td&gt;2023-07-23T17:05:37Z&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[WEB HISTORY] Google Mail - Suspicious Mail&lt;/td&gt;
&lt;td&gt;Title: URGENT RFQ // Aircraft Parts - REF 678876 - REDACTED@gmail.com - Gmail&lt;/td&gt;
&lt;td&gt;2023-07-23T17:05:56Z&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[WEB HISTORY] Google Drive - Malicious download webpage&lt;/td&gt;
&lt;td&gt;Title: charters details.pdf.vbs - Google Drive&lt;/td&gt;
&lt;td&gt;2023-07-23T17:06:59Z&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[USER ACTIVITY - DOWNLOAD] Download of charter details.vbs&lt;/td&gt;
&lt;td&gt;Path : C:\Users\y0sh\Downloads\charters details.pdf.vbs ZoneId = 3 ReferrerUrl = https://drive.google.com&lt;/td&gt;
&lt;td&gt;2023-07-23T17:08:12Z&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[USN] Presence of RemoteFramework64.PS1&lt;/td&gt;
&lt;td&gt;FullPath : C:\Users\Public\RemoteFramework64.PS1 Reason : FILE_CREATE&lt;/td&gt;
&lt;td&gt;2023-07-23T17:08:32Z&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[PERSISTENCE - STARTUP FOLDER / USN] SystemFramework64Bits.vbs&lt;/td&gt;
&lt;td&gt;OSPath : C:\Users\y0sh\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\SystemFramework64Bits.vbs Reason : FILE_CREATE&lt;/td&gt;
&lt;td&gt;2023-07-23T17:08:34Z&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;I recommend the collaborative incident response platform &lt;a href=&quot;https://dfir-iris.org/&quot;&gt;DFIR-IRIS&lt;/a&gt; to do this more professionally.&lt;/p&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;Thanks to Velociraptor&apos;s innovation and the analysis of forensic artifacts, I was able to unravel the chain of compromise orchestrated by TA2541.&lt;/p&gt;
&lt;p&gt;Velociraptor&apos;s capabilities proved to be essential in dissecting the threat actor&apos;s tactics, enabling us to trace his steps through the various stages of the attack lifecycle. From the initial obfuscated VBS file hosted on Google Drive URLs to the execution of PowerShell and the subsequent deployment of AsyncRAT in memory, we meticulously reconstructed the adversary&apos;s modus operandi.&lt;/p&gt;
&lt;h1&gt;References&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://www.proofpoint.com/us/blog/threat-insight/charting-ta2541s-flight&quot;&gt;https://www.proofpoint.com/us/blog/threat-insight/charting-ta2541s-flight&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.bushidotoken.net/2021/01/analysis-of-netwire-rat-campaign.html&quot;&gt;https://blog.bushidotoken.net/2021/01/analysis-of-netwire-rat-campaign.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/MsftSecIntel/status/1392219299696152578&quot;&gt;https://twitter.com/MsftSecIntel/status/1392219299696152578&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.morphisec.com/revealing-the-snip3-crypter-a-highly-evasive-rat-loader&quot;&gt;https://blog.morphisec.com/revealing-the-snip3-crypter-a-highly-evasive-rat-loader&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.talosintelligence.com/operation-layover-how-we-tracked-attack/&quot;&gt;https://blog.talosintelligence.com/operation-layover-how-we-tracked-attack/&lt;/a&gt;&lt;/p&gt;
</content:encoded></item></channel></rss>