Back to Intelligence

Armored Likho 'Still Toolkit' Rust Espionage + Storm-3121 Passkey AiTM Phishing: OTX Pulse Analysis — Credential Theft Detection Pack

SA
Security Arsenal Team
September 12, 2026
11 min read

Two fresh AlienVault OTX pulses converge on a single theme: credential and identity theft at scale. One campaign deploys a brand-new Rust-based espionage toolkit against Russian government, technology, and education targets; the other exploits enterprise trust in passkey rollouts to seize cloud accounts through adversary-in-the-middle phishing. Together they represent the current state of the art in identity compromise — endpoint surveillance on one side, cloud session hijacking on the other.


Threat Summary

These pulses reveal two parallel but complementary threats to enterprise identity:

Campaign 1 — Armored Likho 'Still Toolkit' (May 2026 – present): The Armored Likho cyber-espionage group (also tracked with the 'Eagle Werewolf' cluster) is running a targeted operation against private individuals and organizations across Russia — including major corporations, public sector entities, IT companies, and educational institutions. Initial access is achieved through fake donation service applications that socially engineer victims into executing malware. The attackers deploy a newly identified toolkit written in Rust, comprising at least three components:

  • Still Sync — data synchronization/exfiltration module
  • Still Audio — audio surveillance module enabling microphone eavesdropping
  • AquilaRAT — remote access trojan providing operator control, including a Telegram stealer capability

The choice of Rust provides cross-platform flexibility, strong AV evasion characteristics, and complicates reverse engineering. The toolkit's emphasis on audio eavesdropping and Telegram credential theft indicates an intelligence-collection mission targeting communications — consistent with espionage rather than financially motivated theft.

Campaign 2 — Storm-3121 / Storm-3032 Passkey-Themed Social Engineering (May 2026 – present): A separate operation exploits enterprise passkey adoption campaigns. Attackers impersonate IT helpdesk staff via phone calls and SMS (vishing/smishing), directing victims to phishing sites that convincingly mimic Microsoft sign-in pages under the pretext of 'setting up your passkey.' Using adversary-in-the-middle (AiTM) phishing and device code authentication flow abuse, attackers capture credentials and session tokens, then establish durable persistence by registering unauthorized passkeys/authentication methods on the compromised account — effectively converting a one-time phish into permanent account access that survives password resets. Data exfiltration from cloud resources follows.

Collective objective: Both campaigns target the identity layer. Armored Likho steals messaging credentials and surveils victims at the endpoint; Storm-3121/3032 seizes cloud identities and converts them into persistent access. Any organization undergoing a passkey/FIDO2 rollout or with exposure to Telegram-based communications should treat both as immediately relevant.


Threat Actor / Malware Profile

Armored Likho — Still Toolkit (Still Sync, Still Audio, AquilaRAT)

AttributeDetail
ActorArmored Likho (Eagle Werewolf cluster) — cyber-espionage
DistributionFake donation service applications (trojanized installers) delivered via social engineering
LanguageRust — chosen for AV evasion, cross-platform builds, and reverse-engineering friction
Payload behaviorModular espionage: file/data synchronization (Still Sync), microphone capture and audio recording (Still Audio), full remote access (AquilaRAT), Telegram session/credential theft
C2 communicationAquilaRAT maintains operator channels; Telegram stealer artifacts indicate abuse of legitimate Telegram API infrastructure for exfiltration/C2 blending
PersistenceRAT component establishes survivable access; expected mechanisms include Run keys, scheduled tasks, and masqueraded binaries in user-writable directories (e.g., %APPDATA%)
Anti-analysisRust compilation (stripped symbols, non-standard calling conventions), social-engineering lure disguised as legitimate donation software, modular staged deployment
TargetsRussian government, major corporations, IT sector, educational institutions, private individuals

Storm-3121 / Storm-3032 — Passkey-Themed AiTM Phishing

AttributeDetail
ActorStorm-3121, Storm-3032 (Microsoft tracking designations)
DistributionVishing (phone) and smishing (SMS) impersonating IT helpdesk; victims directed to lookalike 'passkey setup' portals
Phishing infrastructureDomains mimicking Microsoft sign-in with passkey/setup themes: setupmypasskey.com, passkeyhelpdesk.com, oskeysync.com, myconnectkey.com, etc.
TechniqueAdversary-in-the-middle (AiTM) session token theft; abuse of OAuth device code flow to trick victims into authenticating attacker-controlled sessions
PersistenceRegistration of unauthorized passkeys / FIDO2 security keys / authentication methods on victim accounts — survives password resets and re-enrollment
ObjectiveCloud account compromise, data exfiltration, durable identity persistence

IOC Analysis

The pulse indicators fall into two distinct operational categories:

File hashes (20 total — Armored Likho pulse): MD5 hashes for Still Toolkit samples and AquilaRAT components. MD5s are brittle (trivially altered by recompilation), so treat them as point-in-time detection for known samples. Operationalize by:

  • Pushing all hashes to EDR blocklists and threat intel platforms (MISP, Sentinel TI, Defender custom indicators)
  • Retro-hunting: scan email gateways, proxy logs, and download caches for historical presence of these binaries
  • Pivoting: detonate available samples in a sandbox (ANY.RUN, Joe Sandbox, Hybrid Analysis) to extract SHA-256 variants, dropped file paths, mutexes, and network artifacts that outlive the original MD5

Domains (8 sampled of 19 — Storm-3121/3032 pulse): Passkey-themed phishing domains with highly predictable naming patterns (*passkey*, *keysync*, *oskey*, *setup*hub*). Operationalize by:

  • DNS sinkholing/blocking at the resolver and secure web gateway
  • Alerting on DNS queries and TLS SNI matching these domains retroactively (AiTM victims will have resolved them before any credential submission)
  • Building pattern-based detections for the naming convention itself — the actor will register successor domains; keyword matching on newly observed domains containing passkey, keysync, oskey combined with recent registration dates catches the campaign's evolution
  • Feeding domains into Microsoft Sentinel/Defender threat intelligence indicators with alert action on DeviceNetworkEvents

Tooling to decode/pivot: urlscan.io and VirusTotal for phishing page infrastructure; crt.sh certificate transparency logs for sibling domains on shared certs; Maltego/OTX pulses for actor infrastructure clustering; sandbox detonation for the Rust binaries (note: Rust samples may require longer analysis windows and specific detonation profiles).


Detection Engineering

YAML
---
title: Armored Likho Still Toolkit - Suspicious Audio Capture via Non-Media Process
description: Detects microphone/audio capture initiated by suspicious processes consistent with the Still Audio surveillance module. Legitimate audio tools launched from user-writable or temp paths outside browser/communication apps are high-fidelity signals.
id: 7a3f1c2e-9b4d-4e8a-a1c5-stillaudio01
status: experimental
author: Security Arsenal Threat Intel
references:
  - https://securelist.com/armored-likho-still-toolkit/121033
date: 2026/09/12
logsource:
  category: process_creation
  product: windows
detection:
  selection_audio_tools:
    Image|endswith:
      - '\ffmpeg.exe'
      - '\sox.exe'
      - '\arecord.exe'
      - '\soundrecorder.exe'
    CommandLine|contains:
      - 'dshow'
      - 'audio='
      - 'waveaudio'
      - 'microphone'
  selection_suspicious_path:
    Image|contains:
      - '\AppData\Roaming\'
      - '\AppData\Local\Temp\'
      - '\ProgramData\'
      - '\Users\Public\'
  condition: selection_audio_tools and selection_suspicious_path
falsepositives:
  - Screen recording software installed by users (rare in temp/roaming paths)
level: high
tags:
  - attack.collection
  - attack.t1123
---
title: Armored Likho AquilaRAT - Known Still Toolkit Sample Execution
description: Detects execution of files matching known MD5 hashes of the Armored Likho Still Toolkit (Still Sync, Still Audio, AquilaRAT) published in OTX pulse data.
id: 8b4e2d3f-1c5a-4f9b-b2d6-aquilarat002
status: experimental
author: Security Arsenal Threat Intel
references:
  - https://securelist.com/armored-likho-still-toolkit/121033
date: 2026/09/12
logsource:
  category: process_creation
  product: windows
detection:
  selection_hashes:
    Hashes|contains:
      - 'MD5=c1d1ee16b92e6a138ffa048855f75d7d'
      - 'MD5=17674b250d8b422a50a86c9ff207186d'
      - 'MD5=62801f6223e860a7cca271522e303b2d'
      - 'MD5=68f0365d2fa8c828d012d8859e52a773'
      - 'MD5=4bd7c352ae277b0e38d07beedd4dd507'
      - 'MD5=d4bc09fb10ea2a5dc0bcbeeda5e5afdd'
      - 'MD5=2ca8adbab98ebe305eacf272cf48f5a0'
      - 'MD5=3ac41b097236a7723821848ae31ef141'
  condition: selection_hashes
falsepositives:
  - None expected; these are confirmed malware samples
level: critical
tags:
  - attack.execution
  - attack.t1204
  - attack.t1059
---
title: Storm-3121 Passkey-Themed AiTM Phishing Domain Resolution
description: Detects DNS queries to known Storm-3121/Storm-3032 passkey-themed phishing infrastructure and pattern-matching successor domains. Indicates a victim in an active AiTM or device-code phishing flow.
id: 9c5f3e4a-2d6b-5a0c-c3e7-passkey003
status: experimental
author: Security Arsenal Threat Intel
references:
  - https://www.microsoft.com/en-us/security/blog/2026/09/09/passkey-themed-social-engineering-leads-identity-cloud-compromise/
date: 2026/09/12
logsource:
  category: dns
  product: windows
detection:
  selection_known:
    query|contains:
      - 'setupmypasskey.com'
      - 'validationsetupac.com'
      - 'portalsetuphub.com'
      - 'myconnectkey.com'
      - 'oskeysync.com'
      - 'keysyncos.com'
      - 'oskeyregister.com'
      - 'passkeyhelpdesk.com'
  condition: selection_known
falsepositives:
  - Threat researchers and security tooling validation
level: critical
tags:
  - attack.initial_access
  - attack.t1566
  - attack.t1557
KQL — Microsoft Sentinel / Defender
// Storm-3121 / Storm-3032 Passkey AiTM phishing + unauthorized passkey registration hunt
// Sentinel: correlates endpoint connections to phishing infra with device-code sign-ins and new auth method registration
let PhishingDomains = dynamic([
  "setupmypasskey.com","validationsetupac.com","portalsetuphub.com","myconnectkey.com",
  "oskeysync.com","keysyncos.com","oskeyregister.com","passkeyhelpdesk.com"
]);
let EndpointHits =
    DeviceNetworkEvents
    | where TimeGenerated > ago(14d)
    | where RemoteUrl has_any (PhishingDomains)
    | project EndpointTime=TimeGenerated, DeviceName, AccountName=InitiatingProcessAccountName, RemoteUrl, InitiatingProcessFileName;
let DeviceCodeSignIns =
    SigninLogs
    | where TimeGenerated > ago(14d)
    | where AuthenticationProtocol has "deviceCode" or tostring(AuthenticationDetails) has "device code"
    | project SigninTime=TimeGenerated, UserPrincipalName, IPAddress, AppDisplayName, ResultType, Status;
let NewPasskeyReg =
    AuditLogs
    | where TimeGenerated > ago(14d)
    | where OperationName has_any ("Register security info", "Add FIDO2 security key", "Add passkey")
    | mv-expand TargetResources
    | extend UserPrincipalName = tostring(TargetResources.userPrincipalName)
    | project RegTime=TimeGenerated, UserPrincipalName, OperationName, InitiatedBy = tostring(InitiatedBy.user.userPrincipalName), IPAddress = tostring(InitiatedBy.user.ipAddress);
EndpointHits
| join kind=leftouter (DeviceCodeSignIns) on $left.AccountName contains $right.UserPrincipalName
| join kind=leftouter (NewPasskeyReg) on UserPrincipalName
| project EndpointTime, DeviceName, AccountName, RemoteUrl, SigninTime, IPAddress, RegTime, OperationName
| order by EndpointTime desc
PowerShell
# Security Arsenal - Armored Likho Still Toolkit + Storm-3121 IOC Hunt
# Run elevated on suspect endpoints. Outputs findings to console and hunt_results.txt

$Report = @()

# --- 1. Known Still Toolkit / AquilaRAT MD5 hashes ---
$MaliciousMD5 = @(
    "c1d1ee16b92e6a138ffa048855f75d7d",
    "17674b250d8b422a50a86c9ff207186d",
    "62801f6223e860a7cca271522e303b2d",
    "68f0365d2fa8c828d012d8859e52a773",
    "4bd7c352ae277b0e38d07beedd4dd507",
    "d4bc09fb10ea2a5dc0bcbeeda5e5afdd",
    "2ca8adbab98ebe305eacf272cf48f5a0",
    "3ac41b097236a7723821848ae31ef141"
)

$ScanPaths = @("$env:APPDATA", "$env:LOCALAPPDATA\Temp", "C:\ProgramData", "C:\Users\Public", "$env:USERPROFILE\Downloads")
foreach ($Path in $ScanPaths) {
    if (Test-Path $Path) {
        Get-ChildItem -Path $Path -Recurse -File -Include *.exe,*.dll -ErrorAction SilentlyContinue | ForEach-Object {
            try {
                $Hash = (Get-FileHash -Path $_.FullName -Algorithm MD5 -ErrorAction Stop).Hash.ToLower()
                if ($MaliciousMD5 -contains $Hash) {
                    $Report += "[CRITICAL] Known Still Toolkit sample: $($_.FullName) [MD5: $Hash]"
                }
            } catch {}
        }
    }
}

# --- 2. Phishing domain artifacts in DNS cache ---
$PhishDomains = @("setupmypasskey.com","validationsetupac.com","portalsetuphub.com","myconnectkey.com","oskeysync.com","keysyncos.com","oskeyregister.com","passkeyhelpdesk.com")
$DnsCache = Get-DnsClientCache -ErrorAction SilentlyContinue
foreach ($Domain in $PhishDomains) {
    $Hit = $DnsCache | Where-Object { $_.Entry -like "*$Domain*" }
    if ($Hit) { $Report += "[CRITICAL] DNS cache hit for phishing domain: $Domain" }
}

# --- 3. Persistence: suspicious Run keys and scheduled tasks in user-writable paths ---
$RunKeys = @("HKCU:\Software\Microsoft\Windows\CurrentVersion\Run", "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run")
foreach ($Key in $RunKeys) {
    Get-ItemProperty -Path $Key -ErrorAction SilentlyContinue | ForEach-Object {
        $_.PSObject.Properties | Where-Object {
            $_.Value -match "AppData|Temp|ProgramData|Users\\Public" -and $_.Name -notmatch "^PS"
        } | ForEach-Object { $Report += "[HIGH] Suspicious Run key: $Key\$($_.Name) = $($_.Value)" }
    }
}
Get-ScheduledTask -ErrorAction SilentlyContinue | Where-Object {
    $_.Actions.Execute -match "AppData|Temp|Users\\Public" -and $_.State -ne "Disabled"
} | ForEach-Object { $Report += "[HIGH] Suspicious scheduled task: $($_.TaskName) -> $($_.Actions.Execute)" }

# --- 4. Telegram stealer indicator: non-Telegram processes with Telegram API connections ---
Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue | ForEach-Object {
    $Proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
    if ($Proc -and $Proc.ProcessName -notmatch "telegram|Telegram") {
        $Remote = (Resolve-DnsName -Name $_.RemoteAddress -ErrorAction SilentlyContinue).NameHost
        if ($Remote -match "telegram|t\.me") {
            $Report += "[HIGH] Non-Telegram process '$($Proc.ProcessName)' connected to $Remote from $($Proc.Path)"
        }
    }
}

if ($Report.Count -eq 0) { Write-Output "[CLEAN] No indicators found on $env:COMPUTERNAME" }
else { $Report | ForEach-Object { Write-Output $_ }; $Report | Out-File "hunt_results_$env:COMPUTERNAME.txt" }

Response Priorities

Immediate (0–4 hours)

  • Block all 8 Storm-3121/3032 phishing domains at DNS resolver, secure web gateway, and email filtering layers; push to EDR network indicators
  • Push all 20 Still Toolkit MD5 hashes to EDR/AV blocklists and retro-hunt endpoint telemetry for prior execution
  • Query DNS and proxy logs for historical resolution of phishing domains — any hit is a suspected AiTM victim requiring immediate response
  • Alert on new passkey/FIDO2/authentication method registrations across the tenant for manual review

24 Hours

  • For every user who resolved phishing domains: revoke all sessions and refresh tokens, force credential reset, and audit authentication methods for unauthorized passkeys — remove any not explicitly enrolled by the legitimate user. A password reset alone does NOT evict a registered attacker passkey.
  • Review sign-in logs for device code flow usage; disable device code authentication tenant-wide where not operationally required
  • For endpoints with Still Toolkit hash hits: isolate, acquire memory and disk images, enumerate persistence mechanisms (Run keys, scheduled tasks), and assess whether microphone capture occurred — notify legal/compliance if sensitive conversations may have been intercepted
  • Audit Telegram sessions for affected users; terminate unknown active sessions

1 Week

  • Architectural hardening of passkey rollouts: communicate a canonical enrollment path to all staff; helpdesk will never direct users to external passkey setup links. Publish the internal procedure widely — this kills the lure pretext.
  • Deploy phishing-resistant conditional access: require compliant device + FIDO2 for sensitive apps; restrict device code flow via Conditional Access authentication contexts
  • Implement pattern-based domain detection for successor phishing infrastructure (passkey, keysync, oskey + newly registered domains)
  • For organizations with Russia exposure: brief executives and high-value individuals on the fake donation app lure; tighten application allow-listing to block unauthorized executables in user-writable directories
  • Add detection coverage for audio capture by non-media processes and Rust-compiled binaries executing from %APPDATA%

Related Resources

Security Arsenal Incident Response Managed SOC & MDR Services AlertMonitor Threat Detection From The Dark Side Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.