Back to Intelligence

Manic, Grandoreiro, and ToxicPanda 2.0 Banking Trojans: Detection and Defense Guide for SOC Teams

SA
Security Arsenal Team
August 23, 2026
11 min read

Threat researchers have put three active banking trojan operations under the microscope this cycle: Manic, a banking trojan with full spyware capabilities; a persistent Grandoreiro campaign continuing to hammer financial institutions and their customers across Latin America and Europe; and ToxicPanda 2.0, an upgraded Android banking trojan with an expanded target list and improved evasion. For SOC teams defending organizations with exposure to LATAM or European financial ecosystems — or any workforce with mobile banking usage — this is a live detection problem, not a theoretical one.

Banking trojans remain one of the highest-ROI criminal operations because they sit directly adjacent to monetization: credentials, session tokens, OTP interception, and account takeover. What makes this trio noteworthy is the convergence of capabilities. Manic blurs the line between banking malware and commercial-grade spyware. Grandoreiro demonstrates that takedowns and arrests have failed to kill a resilient, operator-driven franchise. ToxicPanda 2.0 shows Android banking malware maturing rapidly, expanding from its original targeting footprint into a broader set of financial apps across Europe and beyond.

If your organization has employees, customers, or partners in the affected regions — or handles financial transactions from mobile devices — the detection content below should be operationalized this week.

Technical Analysis

Manic: Banking Trojan with Spyware-Grade Capability

Manic distinguishes itself from commodity banking malware by bundling classic credential-theft and banking-overlay functionality with spyware features: keylogging, screen capture, clipboard monitoring, and data exfiltration of harvested information to attacker-controlled infrastructure. From a defender's standpoint, this means a Manic infection is not just a fraud event — it is a full endpoint compromise with potential exposure of anything typed, copied, or displayed on the victim machine. Treat confirmed Manic infections as incidents requiring credential resets and host reimaging, not simple malware remediation.

Grandoreiro: The Campaign That Refuses to Die

Grandoreiro has been a fixture of the LATAM threat landscape for years, and despite law enforcement actions against its operators, campaigns persist across Brazil, Mexico, Spain, Portugal, and other Spanish- and Portuguese-speaking markets. The current campaign follows the well-established playbook:

  • Delivery: Phishing emails in Spanish/Portuguese, typically themed around invoices, tax documents, court notifications, or bank alerts, carrying malicious ZIP archives or links to ZIP downloads.
  • Execution chain: The ZIP contains an MSI installer or loader that stages the Grandoreiro DLL payload, often executed via legitimate Windows binaries (living-off-the-land techniques) and frequently side-loaded or invoked through rundll32/regsvr32.
  • Persistence: Registry Run keys or startup folder entries under user-writable paths (AppData, ProgramData).
  • C2 behavior: Grandoreiro historically uses domain generation algorithms and Outlook-based data staging in some variants, and monitors for banking/financial site visits to trigger overlay and credential-harvesting modules.
  • Operator-driven model: Grandoreiro often includes remote access capability, letting human operators interact with live sessions during banking activity — meaning detection speed directly affects fraud loss.

ToxicPanda 2.0: Android Banking Malware Expands Its Reach

ToxicPanda emerged as an Android banking trojan and version 2.0 represents a meaningful upgrade: an expanded target list covering more banking and financial applications, improved obfuscation, and refined overlay/injection techniques to steal credentials and bypass second-factor controls. Like most modern Android bankers, ToxicPanda abuses the Accessibility Services API to read screen content, intercept OTPs, perform gestures on the victim's behalf, and grant itself additional permissions — the single most reliable behavioral signature for this malware class.

Distribution typically follows smishing (SMS phishing) and malicious APK sideloading from third-party sites rather than the official Play Store, which makes mobile device management (MDM) policy enforcement a primary control.

Exploitation Status

All three operations represent confirmed, active, in-the-wild campaigns as reported by SecurityWeek. These are not proof-of-concept or theoretical threats. No CVEs are associated with this activity — the initial access vectors are social engineering and sideloading, which is precisely why user-facing controls and behavioral detection matter more than patching here.

Detection & Response

The detections below focus on behaviors that are consistent across these campaigns and the broader banking trojan class: phishing-delivered archive execution, LOLBin-based payload staging, user-context persistence, and suspicious script interpreters spawned from user-writable paths. Tune thresholds to your environment before production deployment.

YAML
---
title: Suspicious Payload Execution from User-Writable Directory via LOLBin
id: 3f9a1b27-6c4d-4e58-9a71-2b8d4f6c1a90
status: experimental
description: Detects rundll32, regsvr32, or msiexec executing payloads from AppData/ProgramData/Temp, consistent with Grandoreiro and Manic staging chains delivered via phishing ZIP archives.
references:
  - https://attack.mitre.org/techniques/T1218/
  - https://www.securityweek.com/banking-trojans-manic-grandoreiro-toxicpanda-2-0-in-the-spotlight/
author: Security Arsenal
date: 2026/04/06
tags:
  - attack.defense_evasion
  - attack.t1218.011
  - attack.t1218.010
logsource:
  category: process_creation
  product: windows
detection:
  selection_lolbin:
    Image|endswith:
      - '\rundll32.exe'
      - '\regsvr32.exe'
      - '\msiexec.exe'
  selection_path:
    CommandLine|contains:
      - '\AppData\Local\Temp\'
      - '\AppData\Roaming\'
      - '\ProgramData\'
      - '\Users\Public\'
  filter_software_install:
    ParentImage|endswith:
      - '\msiexec.exe'
    CommandLine|contains:
      - '/i'
  condition: selection_lolbin and selection_path and not filter_software_install
falsepositives:
  - Legitimate software installers staging from ProgramData
  - Enterprise software distribution tools
level: high
---
title: Banking Trojan Persistence via Registry Run Key in User-Writable Path
id: 8c2e5d14-4a6f-4b92-8e37-9d1c3a5f7b02
status: experimental
description: Detects registry Run key persistence pointing to executables or scripts in AppData, ProgramData, or Public folders — a hallmark of Grandoreiro, Manic, and commodity banking trojan persistence.
references:
  - https://attack.mitre.org/techniques/T1547/001/
  - https://www.securityweek.com/banking-trojans-manic-grandoreiro-toxicpanda-2-0-in-the-spotlight/
author: Security Arsenal
date: 2026/04/06
tags:
  - attack.persistence
  - attack.t1547.001
logsource:
  category: registry_set
  product: windows
detection:
  selection_key:
    TargetObject|contains:
      - '\CurrentVersion\Run'
  selection_value:
    Details|contains:
      - '\AppData\'
      - '\ProgramData\'
      - '\Users\Public\'
      - 'regsvr32'
      - 'rundll32'
      - 'powershell'
  condition: selection_key and selection_value
falsepositives:
  - Legitimate user-installed applications registering autostart from AppData (e.g., Teams, Slack, OneDrive)
  - Recommend allowlisting known-good updater paths after baseline
level: high
---
title: Script Interpreter Spawned from Office or Archive-Extracted Content
id: 61b7f3c9-2d8a-4e15-bb46-7c9e2a4d8f31
status: experimental
description: Detects PowerShell, wscript, cscript, or mshta spawned by Office applications, email clients, or archive utilities — a common first-stage execution pattern in phishing-delivered banking trojan campaigns.
references:
  - https://attack.mitre.org/techniques/T1059/
  - https://www.securityweek.com/banking-trojans-manic-grandoreiro-toxicpanda-2-0-in-the-spotlight/
author: Security Arsenal
date: 2026/04/06
tags:
  - attack.execution
  - attack.t1059
  - attack.t1204.002
logsource:
  category: process_creation
  product: windows
detection:
  selection_parent:
    ParentImage|endswith:
      - '\winword.exe'
      - '\excel.exe'
      - '\outlook.exe'
      - '\winrar.exe'
      - '\7z.exe'
      - '\explorer.exe'
  selection_child:
    Image|endswith:
      - '\powershell.exe'
      - '\pwsh.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\mshta.exe'
  condition: selection_parent and selection_child
falsepositives:
  - explorer.exe launching scripts is common for legit admin tooling; alert volume should be reviewed against parent-child pairs and command lines before production
level: medium

The third rule intentionally includes explorer.exe — Grandoreiro victims frequently double-click the loader inside an extracted ZIP, producing explorer-spawned script processes. That is noisier, hence the medium severity; triage on the child command line.

KQL — Microsoft Sentinel / Defender

This query hunts the phishing-to-execution chain across both MDE endpoint telemetry and ingested Syslog/CEF sources:

KQL — Microsoft Sentinel / Defender
// Hunt: Banking trojan staging chain — archive/Office/email parent spawning LOLBin or script child
let LolBins = dynamic(["rundll32.exe","regsvr32.exe","msiexec.exe","mshta.exe","wscript.exe","cscript.exe","powershell.exe"]);
let SuspiciousParents = dynamic(["winword.exe","excel.exe","outlook.exe","winrar.exe","7z.exe","thunderbird.exe"]);
let UserWritable = dynamic([@"\AppData\",@"\ProgramData\",@"\Users\Public\",@"\Temp\"]);
DeviceProcessEvents
| where TimeGenerated > ago(7d)
| where InitiatingProcessFileName in~ (SuspiciousParents)
   or (FileName in~ (LolBins) and ProcessCommandLine has_any (UserWritable))
| project TimeGenerated, DeviceName, AccountName,
          ParentProcess = InitiatingProcessFileName,
          ChildProcess = FileName, ProcessCommandLine,
          SHA256, ReportId
| order by TimeGenerated desc;

// Companion hunt: persistence via Run keys pointing into user-writable paths
DeviceRegistryEvents
| where TimeGenerated > ago(7d)
| where RegistryKey has_any (@"\CurrentVersion\Run", @"\CurrentVersion\RunOnce")
| where RegistryValueData has_any (@"\AppData\", @"\ProgramData\", @"\Users\Public\",
                                    "rundll32", "regsvr32", "powershell", "wscript")
| project TimeGenerated, DeviceName, InitiatingProcessAccountName,
          RegistryKey, RegistryValueName, RegistryValueData
| order by TimeGenerated desc;

For environments ingesting email or proxy telemetry into Sentinel, correlate outbound connections from rundll32/regsvr32 processes to recently-registered or low-reputation domains — Grandoreiro's DGA-style C2 rarely resolves to aged infrastructure:

KQL — Microsoft Sentinel / Defender
// Rare outbound connections from LOLBins — candidate C2 staging
DeviceNetworkEvents
| where TimeGenerated > ago(7d)
| where InitiatingProcessFileName in~ ("rundll32.exe","regsvr32.exe","mshta.exe")
| where RemoteUrl !has_any ("microsoft.com","windows.com","office.com")
| summarize ConnectionCount = count(), Devices = dcount(DeviceId)
          by RemoteUrl, InitiatingProcessFileName
| where Devices <= 3
| order by Devices asc, ConnectionCount desc;

Velociraptor VQL

A hunt artifact to sweep your fleet for banking trojan persistence and staging artifacts in one pass:

VQL — Velociraptor
-- Hunt: Banking trojan persistence and staging indicators (Grandoreiro/Manic class)
-- Combines Run-key audit with suspicious process lineage

LET persistence = SELECT Key.FullPath AS RegKey, Key.Name AS ValueName,
       Key.Data.String AS ValueData
FROM foreach(row={
    SELECT FullPath FROM glob(globs='HKEY_USERS\*\Software\Microsoft\Windows\CurrentVersion\Run*',
                              accessor='registry')
}, query={
    SELECT FullPath, Name, Data FROM glob(globs=FullPath + '\*', accessor='registry')
})
WHERE ValueData =~ '(?i)appdata|programdata|users\\\\public|rundll32|regsvr32|powershell|wscript'

LET suspicious_procs = SELECT Pid, Ppid, Name, Exe, CommandLine, Username, CreateTime
FROM pslist()
WHERE CommandLine =~ '(?i)appdata.*(rundll32|regsvr32|mshta)'
   OR Exe =~ '(?i)\\\\appdata\\\\(local|roaming)\\\\[^\\\\]+\.exe$'

SELECT * FROM persistence
UNION ALL
SELECT NULL AS RegKey, Name AS ValueName, CommandLine AS ValueData,
       Pid, Ppid, Exe, Username, CreateTime FROM suspicious_procs

If your VQL version doesn't support the UNION cleanly, run the two queries as separate artifacts — the persistence sweep alone is worth the collection cycle.

Remediation / Hardening Script

The following PowerShell audits endpoints for the persistence and staging indicators above and applies hardening controls relevant to this threat class:

PowerShell
#requires -RunAsAdministrator
# Banking Trojan Triage & Hardening — Manic / Grandoreiro class threats
# Security Arsenal — run via your RMM or Intune remediation

Write-Host "=== [1] Auditing Run/RunOnce persistence in user-writable paths ===" -ForegroundColor Cyan
$runKeys = @(
  'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run',
  'HKCU:\Software\Microsoft\Windows\CurrentVersion\RunOnce',
  'HKLM:\Software\Microsoft\Windows\CurrentVersion\Run',
  'HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce'
)
$findings = @()
foreach ($key in $runKeys) {
  if (Test-Path $key) {
    Get-ItemProperty -Path $key | ForEach-Object {
      $_.PSObject.Properties | Where-Object {
        $_.Value -match 'AppData|ProgramData|Users\\Public|rundll32|regsvr32|powershell|wscript'
      } | ForEach-Object {
        $findings += [PSCustomObject]@{ Key=$key; Name=$_.Name; Value=$_.Value }
      }
    }
  }
}
if ($findings) { $findings | Format-Table -AutoSize; Write-Warning "Review entries above — suspicious persistence candidates." }
else { Write-Host "No suspicious Run-key entries found." -ForegroundColor Green }

Write-Host "=== [2] Listing recently-created executables in Temp/AppData ===" -ForegroundColor Cyan
$recent = Get-ChildItem -Path "$env:TEMP","$env:LOCALAPPDATA","$env:APPDATA" -Recurse -Include *.exe,*.dll,*.msi,*.js,*.vbs,*.hta -ErrorAction SilentlyContinue |
  Where-Object { $_.CreationTime -gt (Get-Date).AddDays(-14) } |
  Sort-Object CreationTime -Descending | Select-Object -First 25 FullName, CreationTime
$recent | Format-Table -AutoSize

Write-Host "=== [3] Blocking mshta/wscript outbound via Windows Firewall (banker staging mitigation) ===" -ForegroundColor Cyan
$rules = @(
  @{Name='Block-mshta-Outbound';   Exe="$env:SystemRoot\System32\mshta.exe"},
  @{Name='Block-mshta-Outbound32'; Exe="$env:SystemRoot\SysWOW64\mshta.exe"}
)
foreach ($r in $rules) {
  if (-not (Get-NetFirewallRule -DisplayName $r.Name -ErrorAction SilentlyContinue)) {
    New-NetFirewallRule -DisplayName $r.Name -Direction Outbound -Program $r.Exe -Action Block -Profile Any | Out-Null
    Write-Host "Created firewall rule: $($r.Name)" -ForegroundColor Green
  } else { Write-Host "Rule exists: $($r.Name)" }
}

Write-Host "=== [4] Verifying Attack Surface Reduction (ASR) rule status (requires Defender) ===" -ForegroundColor Cyan
# ASR GUIDs: Office child processes, script obfuscation, executable content from email
$asrRules = @{
  'D4F940AB-401B-4EFC-AADC-AD5F3C50688A' = 'Block Office child processes'
  '5BEB7EFE-FD9A-4556-801D-275E5FFC04CC' = 'Block obfuscated scripts'
  'BE9BA2D9-53EA-4CDC-84E5-9B1EEEE46550' = 'Block executable content from email/webmail'
}
foreach ($guid in $asrRules.Keys) {
  $current = (Get-MpPreference).AttackSurfaceReductionRules_Ids
  if ($current -notcontains $guid) {
    Add-MpPreference -AttackSurfaceReductionRules_Ids $guid -AttackSurfaceReductionRules_Actions Enabled
    Write-Host "Enabled ASR: $($asrRules[$guid])" -ForegroundColor Green
  } else { Write-Host "ASR present: $($asrRules[$guid])" }
}
Write-Host "=== Triage complete. Export findings to your case management system. ===" -ForegroundColor Cyan

For Android/ToxicPanda 2.0, the endpoint script isn't the control — MDM policy is. See remediation below.

Remediation

If infection is confirmed (Windows — Manic/Grandoreiro):

  1. Isolate the host from the network immediately. Grandoreiro supports operator-driven interactive sessions; every minute online is potential fraud exposure.
  2. Reset credentials comprehensively. Manic's keylogging and clipboard capture mean any credential used on the host since infection is compromised — banking, email, VPN, IdP. Reset from a known-clean device.
  3. Notify your fraud and treasury teams to review recent transactions from affected users. Banking trojan incidents are financial incidents, not just IT incidents.
  4. Reimage, don't clean. Spyware-grade implants justify full reimaging; persistence hiding beyond Run keys is common.
  5. Preserve evidence first if legal/regulatory notification obligations may apply (memory capture, MFT, USN journal) before reimage.

Preventive hardening (Windows):

  • Enable the Defender ASR rules enumerated in the script above — Office child process blocking and executable-content-from-email rules directly break the documented delivery chains.
  • Block or alert on MSI and script execution from user-writable paths via AppLocker/WDAC.
  • Enforce email filtering that detonates ZIP/MSI attachments and rewrites links to Spanish/Portuguese invoice- and tax-themed lures targeting LATAM/Iberian users.
  • Restrict mshta.exe and unsigned script execution for non-admin users.

Preventive hardening (Android — ToxicPanda 2.0):

  • Enforce MDM policy blocking sideloaded APKs (unknown sources) on all corporate and BYOD-work-profile devices.
  • Alert on any app requesting Accessibility Service permissions that is not on an approved allowlist — this is the single highest-fidelity indicator for Android bankers.
  • Push mobile threat defense (MTD) telemetry into your SIEM; ToxicPanda 2.0's expanded target list means banking apps your employees legitimately use are now in scope.
  • Educate users in affected regions about smishing lures impersonating banks and government agencies.

Organizational:

  • Brief fraud teams on the three families so transaction anomalies get correlated with endpoint alerts rather than handled in silos.
  • Track the campaigns via the source reporting and vendor telemetry updates; Grandoreiro infrastructure rotates, so indicator lists have short half-lives — prioritize behavioral detections over IOC feeds.

Source: SecurityWeek — Banking Trojans Manic, Grandoreiro, ToxicPanda 2.0 in the Spotlight

Related Resources

Security Arsenal Managed SOC Services AlertMonitor Platform Book a SOC Assessment soc-mdr Intel Hub

Is your security operations ready?

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