Back to Intelligence

ZeroDayRAT Exposed: How Mass-Market Stalkerware Bypasses MFA

SA
Security Arsenal Team
February 24, 2026
7 min read

ZeroDayRAT Exposed: How Mass-Market Stalkerware Bypasses MFA

Imagine if a stranger could not only track your every move but also read your text messages in real-time. They wouldn't just know where you are; they would have the keys to reset your passwords and bypass the multi-factor authentication (MFA) protecting your bank accounts and email. This isn't a dystopian movie plot—it is the reality of ZeroDayRAT, a new strain of commercial spyware bringing state-level surveillance capabilities to the mass market.

ZeroDayRAT represents a dangerous evolution in the "Stalkerware" ecosystem. While once the domain of complex nation-state actors, these tools are now being packaged and sold to anyone with a grudge or a credit card. By harvesting SIM data, GPS location, and SMS previews, this malware provides attackers with everything they need to perform devastating account takeovers. At Security Arsenal, we are analyzing this threat to help you understand why SMS-based MFA is no longer safe enough and how to hunt for these intrusions.

The Anatomy of a Digital Stalker

ZeroDayRAT functions as a textbook example of invasive surveillanceware. Once installed on a victim's device—often disguised as a legitimate utility app or via social engineering—it immediately begins exfiltrating sensitive data to a command-and-control (C2) server.

The danger lies in the correlation of data points. Location data alone is a privacy violation. SMS logs alone are a security risk. But when combined, they create a perfect storm for social engineering and authentication bypass.

The Attack Vector: Bypassing MFA

The most alarming capability of ZeroDayRAT is its ability to render SMS-based MFA ineffective. Here is the attacker's playbook:

  1. Interception: The malware monitors incoming SMS messages. When a bank or service sends an One-Time Password (OTP), the malware reads it instantly before the user even unlocks their screen.
  2. Contextual Social Engineering: With access to location data, the attacker knows exactly where the victim is. If they need to manipulate the victim (e.g., calling a bank to pretend to be the user), they can answer "security questions" based on the victim's real-time physical location ("I'm currently at the coffee shop on Main St").
  3. Account Takeover: Using the intercepted OTP and the contextual data, the attacker resets passwords and locks the victim out of their own digital life.

This is not a brute-force attack; it is a precise, surgical strike facilitated by malware that lives inside the trusted perimeter of the user's device.

Technical Analysis: TTPs and Infrastructure

Commercial spyware like ZeroDayRAT often relies on heavy obfuscation to avoid detection. Our analysis indicates the use of custom packing layers to hide the malicious payload from static analysis engines. Once running, the RAT requests invasive permissions that typical utility apps would never need, such as:

  • READ_SMS and RECEIVE_SMS
  • ACCESS_FINE_LOCATION and ACCESS_COARSE_LOCATION
  • READ_PHONE_STATE (to harvest IMSI and SIM serial numbers)

The communication with the C2 server is typically encrypted using standard protocols (like HTTPS) to blend in with normal web traffic, making network detection challenging without SSL inspection.

Detection and Threat Hunting

Detecting ZeroDayRAT requires a multi-layered approach. Since the malware hides within legitimate-looking applications, behavioral analysis is key. Security teams must monitor for unusual data exfiltration patterns and suspicious permission requests.

Hunting for Suspicious Process Activity (KQL)

For organizations utilizing Microsoft Sentinel or Defender for Endpoint, the following KQL query can help identify mobile devices exhibiting signs of spyware-like behavior, such as processes requesting both SMS and Location permissions in a short timeframe.

Script / Code
DeviceProcessEvents
| where Timestamp > ago(7d)
| where ActionType in ("Created", "ProcessCreation")
| where InitiatingProcessFileName hasAny ("com.android.", "com.system.") 
// Targeting generic package names often used in spoofing
| extend ParsedFields = parse_(AdditionalFields)
| mv-expand ParsedFields
| where ParsedFields.Name == "RequestedPermissions"
| where ParsedFields.Value has_any ("READ_SMS", "RECEIVE_SMS", "ACCESS_FINE_LOCATION")
| project DeviceName, InitiatingProcessFileName, ParsedFields.Value, Timestamp
| summarize count() by DeviceName, InitiatingProcessFileName, bin(Timestamp, 5m)
| where count_ > 3 // Threshold for multiple sensitive permission requests

Analyzing Network Traffic for C2 Beacons (Python)

If you have access to network logs or PCAP files, you can use Python to analyze the timing and payload size of outbound connections. Spyware often sends "heartbeat" signals at regular intervals. This script looks for high-frequency connections to the same external IP.

Script / Code
import pandas as pd
from collections import Counter

# Mock data representing network logs
# In a real scenario, load this from a CSV or Zeek JSON logs
data = [
    {"timestamp": "10:00:01", "src_ip": "192.168.1.5", "dst_ip": "203.0.113.45", "bytes": 512},
    {"timestamp": "10:05:02", "src_ip": "192.168.1.5", "dst_ip": "203.0.113.45", "bytes": 512},
    {"timestamp": "10:10:01", "src_ip": "192.168.1.5", "dst_ip": "203.0.113.45", "bytes": 512},
    {"timestamp": "10:10:15", "src_ip": "192.168.1.5", "dst_ip": "10.0.0.1", "bytes": 1024},
]

df = pd.DataFrame(data)

def find_beacons(df, interval_minutes=5, tolerance_seconds=10):
    # Group by source and destination IP
    groups = df.groupby(["src_ip", "dst_ip"])
    
    potential_beacons = []
    
    for (src, dst), group in groups:
        # Sort by timestamp
        group = group.sort_values("timestamp")
        # Convert to datetime objects for diff calculation
        times = pd.to_datetime(group["timestamp"])
        # Calculate time difference between connections
        diffs = times.diff().dropna()
        
        # Check if intervals are consistent (beaconing)
        # Check if all diffs are close to the target interval
        if len(diffs) > 1:
            avg_diff = diffs.mean()
            # Check consistency (standard deviation should be low)
            if diffs.std().total_seconds() < tolerance_seconds:
                potential_beacons.append({
                    "src_ip": src,
                    "dst_ip": dst,
                    "avg_interval_sec": avg_diff.total_seconds(),
                    "connections": len(group)
                })
    
    return potential_beacons

beacons = find_beacons(df)
for beacon in beacons:
    print(f"Potential C2 Beacon detected: {beacon['src_ip']} -> {beacon['dst_ip']} "
          f"(Interval: {beacon['avg_interval_sec']}s, Count: {beacon['connections']})")

Checking for Known Indicators of Compromise (Bash)

If you have a list of hashes associated with ZeroDayRAT variants, you can automate the checking of your application repositories or downloaded APK files using the following bash script.

Script / Code
#!/bin/bash

# File containing known malicious hashes (SHA256)
IOC_FILE="zerodayrat_iocs.txt"
# Directory to scan
SCAN_DIR="/path/to/apk/repository"

if [ ! -f "$IOC_FILE" ]; then
    echo "IOC file not found."
    exit 1
fi

echo "Scanning $SCAN_DIR for known ZeroDayRAT hashes..."

# Loop through all APK files in the directory
find "$SCAN_DIR" -type f -name "*.apk" | while read -r file; do
    # Generate hash
    file_hash=$(sha256sum "$file" | awk '{print $1}')
    
    # Check against IOC list (case insensitive exact match)
    if grep -qi "$file_hash" "$IOC_FILE"; then
        echo "[ALERT] Malicious file found: $file (Hash: $file_hash)"
    else
        echo "[OK] $file is clean."
    fi
done

Mitigation Strategies

Protecting against ZeroDayRAT requires a shift in mindset from "prevent infection" to "assume breach" and limit impact. Here are specific, actionable steps:

  1. Move Beyond SMS MFA: SMS is not a secure second factor; it is merely a notification mechanism. Adopt FIDO2/WebAuthn hardware keys (like YubiKeys) or authenticator apps (like Microsoft/Google Authenticator) that generate OTPs locally without exposing them to the OS API where malware can read them.

  2. Enforce Mobile Application Management (MAM): For corporate devices, use MAM solutions to prevent unauthorized apps from accessing corporate data. Restrict the ability to install apps from unknown sources (sideloading).

  3. User Education on Social Engineering: Since ZeroDayRAT often begins with a phishing text or a "too good to be true" app download, train users to be skeptical of links received via SMS, even if they appear to come from contacts.

  4. Regular Permission Audits: Encourage users (and enforce via MDM) to regularly review app permissions. If a calculator app asks for Location and SMS access, it should be uninstalled immediately.

Conclusion

ZeroDayRAT is a stark reminder that the barrier to entry for digital espionage is collapsing. The commoditization of spyware means the threat is no longer limited to high-value targets; anyone can become a victim. By moving away from SMS-based authentication and implementing robust threat hunting, we can close the doors that stalkers are trying to kick open.

Stay vigilant, stay secure.

Related Resources

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

socmdrmanaged-socdetectionspywarestalkerwaremfa-bypassmobile-security

Is your security operations ready?

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