Back to Intelligence

Operation Poisson: Havoc C2 & RustDesk Fileless Campaign — OTX Pulse Analysis

SA
Security Arsenal Team
July 19, 2026
6 min read

Threat Summary

Security Arsenal is tracking "Operation Poisson," a targeted cybercriminal campaign orchestrated by a French-speaking threat actor. Intelligence from AlienVault OTX reveals a 33-day operation against a French automotive small business and associated individuals. The adversary, named 'Poisson,' executed a high-volume command-and-control (C2) strategy, issuing 339 commands to maintain persistence. The attack chain features a multi-stage fileless approach utilizing a 70-line Python keylogger for credential harvesting and commercial remote access tools (RustDesk) for lateral movement. The campaign leverages free-tier infrastructure, including the Havoc C2 framework and DuckDNS for domain resolution, highlighting a low-cost, high-impact methodology typical of opportunistic yet focused financial theft.

Threat Actor / Malware Profile

Actor: Poisson

  • Origin/Identity: French-speaking adversary.
  • Objective: Harvesting banking and email credentials for financial fraud.
  • Tactics: Uses a mix of legitimate tools (RustDesk, OpenSSH, Tailscale) and custom lightweight scripts (Python keylogger) to evade detection.

Malware & Tools

  1. Havoc C2 (S1229)

    • Type: C2 Framework.
    • Behavior: Used for post-exploitation command execution. The actor utilized this framework to manage the target machine and issue commands.
    • Communication: Connects to C2 infrastructure; in this campaign, tied to dynamic DNS services.
  2. RustDesk

    • Type: Remote Access Tool (RAT).
    • Behavior: Legitimate remote desktop software abused by the actor for direct access to the victim's environment, likely bypassing standard security filters due to its dual-use nature.
  3. Python Keylogger (Custom)

    • Type: Information Stealer.
    • Behavior: A lightweight, 70-line fileless script deployed to capture keystrokes. Likely utilizes libraries like pynput.
    • Persistence: Executed via memory-resident techniques or scheduled tasks to avoid disk scans.

IOC Analysis

The provided indicators of compromise (IOCs) focus on file artifacts and network infrastructure.

  • File Hashes (SHA256): 7 distinct hashes provided. These likely correlate to the RustDesk installers, the Python keyloader script, or payloads delivered via the Havoc framework.
  • Network (Hostname): wawsenti.duckdns.org. This Dynamic DNS hostname serves as the C2 gateway for the Havoc framework or related payload delivery.

Operational Guidance: SOC teams should immediately block the domain wawsenti.duckdns.org at the perimeter and DNS layers. The file hashes should be uploaded to EDR solutions to trigger quarantines. Due to the fileless nature of the Python script, behavioral analysis of Python processes loading keyboard hooks is critical.

Detection Engineering

YAML
---
title: Potential Havoc C2 Agent Activity via DuckDNS
id: 5c7d3a1b-8f9e-4b2a-9c1d-5e6f7a8b9c0d
description: Detects potential network connection to a DuckDNS domain associated with Operation Poisson Havoc C2 infrastructure.
status: experimental
date: 2026/07/19
author: Security Arsenal
references:
    - https://otx.alienvault.com/pulse/636... (Operation Poisson)
tags:
    - attack.command_and_control
    - attack.t1071.001
logsource:
    category: network_connection
    product: windows
detection:
    selection:
        Initiated: 'true'
        DestinationHostname|endswith: '.duckdns.org'
    filter_main_legit:
        DestinationHostname|contains:
            - 'wawsenti' # Specific hostname from pulse
    condition: selection and filter_main_legit
falsepositives:
    - Legitimate use of DuckDNS (rare in enterprise)
level: high
---
title: Python Script Execution with Keystroke Capture Libraries
id: d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a
description: Detects execution of Python scripts attempting to import keylogging libraries, indicative of the Poisson actor's 70-line keylogger.
status: experimental
date: 2026/07/19
author: Security Arsenal
tags:
    - attack.credential_access
    - attack.t1056.001
logsource:
    category: process_creation
    product: windows
detection:
    selection_img:
        Image|endswith: '\python.exe'
    selection_cli:
        CommandLine|contains:
            - 'pynput'
            - 'keyboard'
            - 'pyxhook'
    condition: all of selection_*
falsepositives:
    - Legitimate developer testing of input libraries
level: medium
---
title: Unauthorized RustDesk Remote Access Execution
id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
description: Detects the execution of RustDesk, a remote desktop tool abused by the Poisson actor for C2.
status: experimental
date: 2026/07/19
author: Security Arsenal
tags:
    - attack.command_and_control
    - attack.t1219
logsource:
    category: process_creation
    product: windows
detection:
    selection:
        Image|contains: '\rustdesk'
        Image|endswith: '.exe'
    condition: selection
falsepositives:
    - Authorized use by IT support team
level: high


kql
// Hunt for Operation Poisson IOCs and Behaviors
// 1. Network Connections to known C2 domains
DeviceNetworkEvents
| where Timestamp > ago(7d)
| where RemoteUrl has "duckdns.org" 
| project Timestamp, DeviceName, InitiatingProcessAccountName, RemoteUrl, RemoteIP

// 2. Process creations matching file hashes
DeviceProcessEvents
| where Timestamp > ago(30d)
| where SHA256 in (
    "0378a5ef51b008aa2d6b76bd44a0bf061339bc3b737a188ec82029444d4d18fe",
    "1f00fd604bb18bbe3081f9ce8d741c4029d2a2125eb8888ac4e0d955938059d6",
    "291cb1fd0f2709b4457447cbb87adacf5c36c1bcb0f8754524024d44174bb195",
    "3b7642b0f84e83a36334c608655c6cb7aae774839a6a3488526b853d89830a60",
    "aa7ea19e34567458b4ee66a7cd274181764984bf32123f756a7fdc64d5857b31",
    "c79091ceae7cd592fc08e4854cda7c1182af762b6b126371cc604debdc995fc7",
    "f06e7e1a4363a01ba2a4fee2e28abdd623abf4194bda373f23ff0e151b5c2b45"
)
| project Timestamp, DeviceName, FolderPath, SHA256, InitiatingProcessCommandLine

// 3. PowerShell or Python spawning child processes typical of fileless attacks
DeviceProcessEvents
| where Timestamp > ago(7d)
| where (ProcessVersionInfoOriginalFileName in ("python.exe", "pythonw.exe") or FileName endswith ".py")
| where ProcessCommandLine has "import"
| summarize count() by DeviceName, ProcessCommandLine, bin(Timestamp, 5m)


powershell
# Operation Poisson IOC Hunter
# Checks for file hashes and Hosts file modifications

$IOC_Hashes = @(
    "0378a5ef51b008aa2d6b76bd44a0bf061339bc3b737a188ec82029444d4d18fe",
    "1f00fd604bb18bbe3081f9ce8d741c4029d2a2125eb8888ac4e0d955938059d6",
    "291cb1fd0f2709b4457447cbb87adacf5c36c1bcb0f8754524024d44174bb195",
    "3b7642b0f84e83a36334c608655c6cb7aae774839a6a3488526b853d89830a60",
    "aa7ea19e34567458b4ee66a7cd274181764984bf32123f756a7fdc64d5857b31",
    "c79091ceae7cd592fc08e4854cda7c1182af762b6b126371cc604debdc995fc7",
    "f06e7e1a4363a01ba2a4fee2e28abdd623abf4194bda373f23ff0e151b5c2b45"
)

Write-Host "[+] Hunting for Operation Poisson File Hashes..."

# Check common user directories and temp
$paths = @("$env:USERPROFILE\Downloads", "$env:USERPROFILE\AppData\Local\Temp", "C:\Windows\Temp")

foreach ($path in $paths) {
    if (Test-Path $path) {
        Get-ChildItem -Path $path -Recurse -ErrorAction SilentlyContinue | ForEach-Object {
            $hash = (Get-FileHash -Path $_.FullName -Algorithm SHA256 -ErrorAction SilentlyContinue).Hash
            if ($hash -in $IOC_Hashes) {
                Write-Host "[!] MALICIOUS FILE FOUND: $($_.FullName) | Hash: $hash" -ForegroundColor Red
            }
        }
    }
}

Write-Host "[+] Checking Hosts file for wawsenti.duckdns.org..."
$hostsPath = "$env:SystemRoot\System32\drivers\etc\hosts"
if (Test-Path $hostsPath) {
    $content = Get-Content $hostsPath
    if ($content -match "wawsenti.duckdns.org") {
        Write-Host "[!] SUSPICIOUS ENTRY FOUND IN HOSTS FILE!" -ForegroundColor Red
        Select-String -Path $hostsPath -Pattern "wawsenti.duckdns.org"
    } else {
        Write-Host "[-] No suspicious hosts entries found."
    }
}

Write-Host "[+] Hunt Complete."

Response Priorities

  • Immediate:

    • Block network access to wawsenti.duckdns.org and all DuckDNS subdomains at the firewall and proxy level.
    • Scan all endpoints for the 7 provided SHA256 file hashes.
    • Isolate any systems showing signs of RustDesk execution where not authorized by IT.
  • 24 Hours:

    • Conduct credential resets for banking and email accounts used on affected endpoints, as the Python keylogger specifically targets these credentials.
    • Review logs for wawsenti.duckdns.org connections to identify the scope of potential data exfiltration.
  • 1 Week:

    • Implement application whitelisting to prevent unauthorized execution of Python scripts and RustDesk.
    • Review VPN and remote access policies to restrict the use of consumer-grade RMM tools like Tailscale and RustDesk.
    • Audit OpenSSH configurations to ensure no unauthorized keys or backdoors were established during the 33-day dwell time.

Related Resources

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

darkwebotx-pulsedarkweb-apthavoc-c2rustdeskoperation-poissonfileless-attackcredential-theft

Is your security operations ready?

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