
Executive summary (TL;DR)
Most successful breaches today never drop a binary. Attackers weaponize identity, misconfigurations, and built-in tools to move fast and stay invisible: SSO session theft, OAuth consent abuse, over-permissive cloud roles, remote administration utilities, and living-off-the-land binaries (LOLBins). These malware-free intrusions slip past AV and signature-centric controls, compress dwell time from days to hours, and hit impact (data theft, ransomware deployment by built-in tools, cloud resource hijack) before classic detections even wake up.
What is a malware-free intrusion?
A breach that achieves objectives without introducing foreign executables. Instead it uses:
- Stolen credentials / tokens (cookies, refresh tokens, OAuth grants, PATs, API keys).
- Built-in OS and cloud tooling (PowerShell, WMI, PsExec/WinRM,
gcloud/aws/azCLIs, kubectl, SQL clients). - SaaS features (Share links, Inbox rules, OAuth apps, Admin APIs).
- Legitimate remote software already present (AnyDesk, ScreenConnect, RMM agents).
Why it works: Security stacks tuned for “malware = bad binary” miss identity- and behavior-led attacks, especially when the actor blends into business-as-usual.
The attacker’s playbook (end-to-end)
- Recon
- Harvest public OSINT to map org structure and tech stack.
- Enumerate identity fabric: IdP, MFA gaps, OAuth policies, SSO apps, CI/CD, cloud providers.
- Initial access
- Phishing/vishing/deepfake for credentials or session hijack (AitM kits, reverse proxies).
- Password spraying / MFA fatigue / SIM swap for one-time bypass.
- “Legit” OAuth app asking for broad scopes (admin consent fatigue).
- Establish foothold
- Convert creds into long-lived access: refresh tokens, OAuth grants, PATs, service-principal secrets.
- Create inbox rules & persistence in IdP (app consents, new security keys, device registrations).
- Privilege escalation
- Analyze policies to find role misconfigurations; exploit trust between tenants/projects; abuse conditional-access gaps; pivot via service principals, workload identities, GitHub actions, or CI/CD runners.
- Lateral movement
- Use RMM/remote shells already deployed; WMI/WinRM/SSH; cloud assume-role; kubecontext hops; SQL linked servers.
- Mount file shares, exfil via sanctioned SaaS (Drive, OneDrive, S3 pre-signed URLs).
- Actions on objectives
- Quiet exfil; business-email-compromise (BEC); cloud cryptomining; or rapid ransomware using native tools (Volume Shadow Copy deletions, BitLocker/ESXi encrypt via management APIs).
Common failure points you can fix this week
- Phishing-resistant MFA not enforced for admins and service accounts.
- Admin consent allowed for unverified OAuth apps; no review workflow.
- Over-permissive cloud IAM (“:” wildcards, standing admin roles, shared keys).
- No egress controls for privileged hosts; AI/LLM endpoints and RMM domains wide open.
- SIEM blind to identity events (OAuth grants, service-principal changes, token anomalies).
- Endpoint allow-lists missing for PsExec/WMIC/PowerShell/Certutil; ASR rules disabled.
MITRE ATT&CK® mapping (high-probability in malware-free cases)
- Initial Access: T1566 Phishing, T1195 Supply Chain (SaaS/OAuth)
- Execution: T1059 Command & Scripting Interpreter, T1106 Native API
- Persistence: T1136 Create Accounts (Cloud), T1098 Account Manipulation, OAuth grants
- Privilege Escalation: T1548 Abuse Elevation Control, Cloud role abuse
- Defense Evasion: T1078 Valid Accounts, T1112 Reg/Policy Changes, T1562 Impair Defenses
- Credential Access: T1556 Modify Auth Process, T1550 Use of Web Tokens/Cookies
- Discovery/Lateral: T1087 Account Discovery, T1021 Remote Services, T1526 Cloud Discovery
- Exfiltration/Impact: T1567 Exfil via Web Services, T1486 Data Encrypted for Impact
Hardening blueprint (priority-ordered)
1) Identity & SSO
- Enforce FIDO2/passkeys for admins and all high-risk apps; block legacy/basic auth.
- Conditional Access: device + location + risk for token issuance; step-up on privilege.
- Admin consent workflow; allow only verified publishers; govern OAuth scopes.
- Rotate and age-limit service-principal secrets, PATs, API keys; prefer managed identities.
- Session policies: short refresh token lifetimes, continuous access evaluation, token binding where available.
2) Cloud & SaaS
- Adopt least-privilege by design: remove “:”; break-glass accounts with HSM-backed keys.
- Just-In-Time (JIT) elevation via PIM/Access Approval; deny standing admin.
- Guardrails: SCPs/organization policies (AWS/GCP), Azure blueprints, OPA/Gatekeeper for K8s.
- Network egress policy for admin subnets; restrict outbound to IdP, patch repos, ticketing, and known AI endpoints.
3) Endpoint & RMM
- Attack Surface Reduction (ASR) rules: block Office child processes, script abuse, credential theft.
- Constrain PowerShell to Constrained Language Mode for standard users; log ScriptBlock.
- Maintain a golden list of RMM tools and managed tenants; block everything else.
4) Email & BEC defenses
- DMARC reject, DKIM/SPF aligned; external sender tag + VIP warning banners.
- Payment change controls: dual-control + out-of-band voice callbacks (with code words).
5) AI/Agent stack (new battleground)
- Tool allow-lists per agent; deny by default.
- Store agent secrets in a vault with short TTL; rotate on pipeline deploy.
- Sign and track RAG corpora updates; enforce data lineage approvals.
Detection engineering: ready-to-use queries & rules
Tailor table names/fields to your platform; intent is practical patterns.
Microsoft Entra ID / M365 (KQL – Log Analytics)
New risky OAuth consent / app role assignment
AuditLogs
| where OperationName in ("Consent to application", "Add app role assignment grant")
| extend Actor = tostring(InitiatedBy.user.userPrincipalName),
App = tostring(TargetResources[0].displayName),
Scopes = tostring(parse_json(tostring(AdditionalDetails))[0].value)
| where Actor !in ("<expected-automation>@yourorg.com")
| project TimeGenerated, Actor, App, Scopes, Result
Impossible/rare sign-ins for admins
SigninLogs
| where Identity in ("global-admin1@yourorg.com","global-admin2@yourorg.com")
| summarize cnt=count(), Countries=make_set(LocationDetails.countryOrRegion)
by bin(TimeGenerated, 1d), Identity
| where array_length(Countries) > 1
Token minting spikes
IdentityLogonEvents
| summarize tokens=count() by bin(TimeGenerated, 15m), UserId
| join kind=inner (IdentityInfo) on UserId
| where tokens > 3 and AccountRiskLevel in ("medium","high")
Google Workspace (BigQuery – Admin logs)
New third-party OAuth client with broad scopes
SELECT
protopayload_auditlog.authenticationInfo.principalEmail AS actor,
protopayload_auditlog.servicedata.@type AS type,
timestamp
FROM `logs.workspace_admin_*`
WHERE protopayload_auditlog.methodName="google.login.oauth.AddClient"
AND ARRAY_LENGTH(REGEXP_EXTRACT_ALL(protopayload_auditlog.servicedata_json, "(gmail|drive|admin)")) > 0
AWS CloudTrail (CloudWatch Logs Insights)
AssumeRole from unusual ASN/Geo without MFA
fields @timestamp, userIdentity.sessionContext.sessionIssuer.arn as role, sourceIPAddress, userAgent
| filter eventName="AssumeRole" and ispresent(additionalEventData.MFAUsed)=false
| stats count() by role, sourceIPAddress, userAgent, bin(1h)
Key creation outside pipeline accounts
fields @timestamp, userIdentity.arn as actor, requestParameters.userName
| filter eventName="CreateAccessKey"
| filter not like(actor, /ci-cd|automation/)
GCP (Logs Explorer)
Service account key creation
protoPayload.methodName="google.iam.admin.v1.CreateServiceAccountKey"
resource.type="iam_service_account"
Sigma (Windows – LOLBins burst)
title: LOLBins Execution Burst (Malware-Free)
logsource: { product: windows, category: process_creation }
detection:
sel:
Image|endswith:
- '\powershell.exe'
- '\wmic.exe'
- '\psexec.exe'
- '\bitsadmin.exe'
condition: sel
fields: [Image, CommandLine, ParentImage, User]
level: high
Threat hunting playbook (24/72 hours)
Day 0: Contain
- Suspend risky sessions in IdP; revoke refresh tokens; disable new consents temporarily.
- Quarantine high-risk OAuth apps and service principals; rotate secrets.
- Block RMM domains except your approved list.
Day 1: Scope
- Build an identity-centric timeline: who logged in, from where, which apps, what tokens minted, what consents granted.
- Enumerate lateral paths: assume-role chains, kube contexts, SMB shares, SQL linked servers.
- Snapshot cloud IAM for diff-analysis (before/after privileges).
Day 2–3: Eradicate & recover
- Reset trust anchors: SSO signing certs (if suspected), CI/CD credentials, package registries.
- Enforce JIT admin; deploy ASR rules; restrict egress for admin hosts.
- Add detections for your unique stack (custom OAuth scopes, bespoke admin tools).
Red-team simulation ideas (to verify readiness)
- Consent storm: Submit a benign OAuth app and test your admin-consent workflow and detections.
- AitM cookie replay: Attempt SSO session theft against a decoy; validate token revocation speed.
- Service principal pivot: Start from a low-priv SPN and attempt policy abuse to reach data stores.
- RMM misuse drill: Use approved RMM to move laterally; confirm EDR + SIEM highlight operator behavior.
KPIs & board metrics
- % of workforce and 100% of admins on phishing-resistant MFA.
- Mean time to revoke risky OAuth consents or tokens (<60 minutes).
- % of privileged actions performed under JIT elevation (>95%).
- of malware-free detections per quarter caught pre-impact (should trend up).
- % of RMM tools allow-listed and monitored (target: 100%).
The CyberDudeBivash action checklist
- Turn on admin consent workflow + verified publishers only.
- Enforce FIDO2/Passkeys for all admins & service accounts; block legacy auth.
- Kill standing admin; enable PIM/JIT everywhere (cloud + SaaS).
- Ship the detection queries above to your SIEM; alert on first seen OAuth scopes.
- Lock egress from admin hosts; allow only business-critical and monitored endpoints.
- Deploy ASR rules + PowerShell CLM; maintain a strict RMM allow-list.
- Add agent/AI tool allow-lists; vault all secrets with short TTL.
Author: CyberDudeBivash
Powered by: CyberDudeBivash
Links: cyberdudebivash.com | cyberbivash.blogspot.com
Hashtags: #CyberDudeBivash #MalwareFreeIntrusions #IdentitySecurity #OAuth #CloudSecurity #BlueTeam #ThreatHunting #ZeroTrust #SOC #IncidentResponse
Leave a comment