IPv6 Support
Proone is IPv6-ready with full support across all subsystems.Why IPv6?
The decision to prioritize IPv6 reflects both technical advantages and security assumptions:Network Oversight
IPv6 is relatively new—network administrators often overlook IPv6 configuration
Load Balancing
IPv6 offers more load-balancing mechanisms like Router Advertisement (RA) and Routing Header (RH)
Performance
Connections with least latency/congestion complete handshake first
Simplicity
Avoids complexity of checking connectivity per IP version
Dual-Stack Connection Strategy
When connecting to public DoT servers or Heartbeat hosts:Minor Issue: If IPv6 handshake takes slightly longer than IPv4, the instance uses IPv4 even though IPv6 would have completed. This edge case is acceptable given the design assumptions.
IPv6 Subsystem Support
| Subsystem | IPv6 Features |
|---|---|
| Resolv | Supports IPv6 public DoT servers, resolves AAAA records |
| Recon | ICMPv6-based link-local discovery, IPv6 network targeting |
| Heartbeat | Dual-stack connections with IPv6 preference |
| BNE | Exploits IPv6 hosts discovered by Recon |
Design Rationale Summary
Assumptions:- IPv6 configuration often neglected, creating security gaps
- Connections with optimal network conditions complete faster
- IPv6 infrastructure provides better redundancy
- Accepts minor timing edge cases for simplicity
- Skips explicit connectivity checks (uses
getsockname()/gethostinfo()) - Favors IPv6 even when IPv4 might be more stable
Running Lean
Proone is designed to minimize resource consumption on embedded devices.Philosophy
Core Principle: Honoring other processes on the system decreases the chance of detection by system administrators.
Single-Threaded Cooperative Multitasking
Proone uses GNU Pth (Pthsem library) for cooperative multitasking: Benefits:- Restricts CPU usage to one logical thread
- Minimal context switching overhead
- Predictable resource consumption
- No race conditions or locking complexity
Compartmentalized Design
Proone’s architecture is resilient to syscall failures, particularlyENOMEM:
Partial Initialization
Can run with subset of workers if some fail to start
Graceful Degradation
Reduced functionality is better than total failure
No Retries
Assumes resources remain scarce—retrying is futile
Independent Subsystems
Workers don’t depend on each other for initialization
Example Scenarios
Scenario 1: No Heartbeat WorkerBNE Worker Pool Management
The BNE worker pool exemplifies “running lean”:- Maximum 128 workers - Arbitrary limit rarely reached in practice
- Lowest priority - Prevents starvation of vital workers
- Graceful ENOMEM - Stops spawning when memory exhausted
- No cleanup attempts - Accepts current state when resources depleted
Resource Conservation Techniques
| Technique | Implementation | Benefit |
|---|---|---|
| Connection pooling | Resolv keeps DoT connections open | Reduces handshake overhead |
| Minimal dependencies | Only essential libraries (libssh2, mbedtls, zlib, pthsem) | Smaller binary size |
| Data masking | DVault XORs sensitive data | Security without crypto overhead |
| Single-stream BA | Compressed executables in one stream | Maximizes compression ratio |
Ephemeral Presence
Proone makes no attempt to seek permanent residency on infected devices.Rationale
This design choice serves multiple security and operational goals:Hard to Capture
Makes executable difficult to retrieve from infected device
No Forensic Trace
Memory-backed filesystems leave no traces after power cycle
Device Protection
Avoids filling small flash storage on IoT devices
Operational Security
Reduces detection surface for incident responders
Mirai Comparison
Both Mirai and Proone delete executables immediately after process starts: Mirai Approach:- Deletes executable after startup
- Uses any read-writable mount point for upload
- Still capturable from filesystem before deletion
- Can be dumped from memory with development tools
- Deletes executable after startup (same as Mirai)
- Only uses tmpfs and devtmpfs mount points (memory-backed)
- Eliminates traces on non-volatile storage
- Still dumpable from memory, but requires development tools
Memory-Backed Filesystem Strategy
Storage Considerations
Why Memory-Backed Filesystems? Typical embedded device profile:- Small SPI flash memory (often < 16MB)
- Relatively larger RAM (32MB-128MB common)
- Proone binary is large (carries executables for multiple architectures)
Capture Difficulty Comparison
| Scenario | Mirai | Proone |
|---|---|---|
| Before execution | Retrievable from filesystem | Retrievable from tmpfs |
| After execution | Deleted, memory dump needed | Deleted, memory dump needed |
| After reboot | May persist in flash | Completely erased |
| Forensic analysis | Disk forensics possible | No disk traces |
| Capture difficulty | Hard | Very hard |
Historical Context: It would have been nearly impossible to capture the Mirai executable running in the wild due to the self-deletion technique. Proone takes this further by ensuring even the upload location leaves no persistent traces.
Security vs. Persistence Trade-off
Advantages:- Extremely difficult to analyze
- No forensic footprint after power cycle
- Fits better in RAM than flash on IoT devices
- Network administrators cannot easily obtain samples
- No persistence—reboot cleans infection
- Must re-infect devices after power cycles
- Relies on continuous reinfection through network scanning
The trade-off favors operational security over persistence. The design assumes that maintaining low detectability is more valuable than surviving reboots, especially given Proone’s autonomous spreading capability.
Additional Design Principles
Wide Device Compatibility
Proone targets the broadest possible range of Linux devices:Old POSIX standards
Coded to
_POSIX_C_SOURCE=200112L standard for compatibility with old Linux 2.6.x kernelsNo filesystem assumptions
Doesn’t assume
/proc, /sys, or /dev are available (can be disabled on embedded Linux)Minimal Dependencies
Dependencies kept to absolute necessities: Runtime Dependencies:libssh2- SSH brute force vectormbedtls- TLS connections (DoT, Heartbeat protocol)zlib- Binary archive compressionpthsem- Cooperative multitasking
libyaml- Configuration file parsing (hostinfod)mariadb-connector-c- Database backend (hostinfod)
All libraries compiled with default configurations to minimize build complexity and maintain consistency across platforms.
Design Philosophy Summary
IPv6-First
Leverage overlooked IPv6 configurations and modern network features
Resource-Conscious
Minimize footprint to avoid detection and honor system resources
Ephemeral
No persistence—prioritize operational security over survival
Compartmentalized
Independent subsystems allow graceful degradation
Compatible
Support widest range of Linux devices and kernel configurations
Minimal
Only essential dependencies and features
Next Steps
Binary Architecture
Learn about Binary Archive, DVault, and binary recombination
