
controlli di sicurezza Linux
Toolkit per la rilevazione, rimozione e hardening dei crypto-miner per server Linux.
Costruito da esperienze reali di incident response — rileva i miner che si nascondono da
ps,top,htopebtopusando tecniche rootkit.
git clone https://gitlab.com/abdom.seada/security-checks.git
cd security-checks
sudo bash setup.sh
🔀 Branch:
master— Questo toolkit risiede sul branchmaster. Altri script di sicurezza potrebbero essere aggiunti in branch separati in futuro.
⚠️ Esegui
setup.shuna sola volta subito dopo il clone — saltare questo passaggio è la causa #1 di errori.
sudo bash setup.sh
setup.sh gestisce tutto automaticamente:
Output atteso quando il setup ha successo:
✅ Setup completato — tutti i controlli superati!
Passi successivi:
sudo ./miner-hunter scan # Scansione sicura in sola lettura
sudo ./miner-hunter full # Scansione → Uccisione → Hardening
💡 Perché è necessario? Linux non esegue un file a meno che non abbia il flag
+x. Git e trasferimenti SCP lo rimuovono.setup.shripara tutti i file in un colpo solo — inclusi i modulilib/da cui lo script principale dipende.
sudo ./miner-hunter scan # ✅ Sicura — sola lettura, nessuna modifica
sudo ./miner-hunter full # ⚠️ Pipeline completa: Scansione → Uccisione → Hardening
sudo ./miner-hunter scan --dry-run # 👁️ Modalità anteprima — mostra cosa succederebbe
| Opzione | Descrizione |
|---|---|
-d, --dry-run |
Situazioni reali e cosa eseguire esattamente in ciascuna di esse.
top non mostra nulla"Questo è il classico sintomo di un rootkit. Il miner si nasconde dagli strumenti userspace ma non può nascondersi dai contatori hardware delle prestazioni.
# Passo 1: Esegui prima una scansione sicura — conferma cosa c'è prima di toccare qualsiasi cosa
sudo ./miner-hunter scan
Cosa vedrai se è presente un miner:
🚨 [CRITICO] Anomalia CPU: 97% CPU utente ma top mostra al massimo 2% per processo
🚨 [CRITICO] perf ha rilevato 4 thread nascosti che consumano circa il 94% della CPU totale
🚨 [CRITICO] Connessione attiva verso 185.x.x.x:9200 (porta miner conosciuta)
🚨 [CRITICO] Thread kernel falso PID=3421 NOME=[kworker/0:1] EXE=/tmp/.x/miner
# Passo 2: Uccidi il miner e blocca il suo pool
sudo ./miner-hunter kill
# Passo 3: Applica l'hardening al server per evitare che ritorni
sudo ./miner-hunter harden
Hai notato qualcosa di sospetto — traffico in uscita insolito, un cron job che non hai creato, un processo con un nome strano — ma non sei certo.
# Esegui una scansione completa — completamente sicura, sola lettura, zero modifiche
sudo ./miner-hunter scan
# Poi leggi il report strutturato
sudo ./miner-hunter report
Il report in /root/miner_evidence_*/report.txt categorizza ogni rilevamento per gravità:
[CRITICO] → procedere immediatamente con kill[AVVISO] → rivedere manualmente prima di agireIl miner ha un meccanismo di persistenza — un cron job, un servizio systemd, un'entrata PM2 o un backdoor nei profili shell che lo riavvia dopo che lo uccidi.
sudo ./miner-hunter scan
Cerca queste cose nell'output:
⚠️ [AVVISO] Voce cron sospetta: * * * * * /tmp/.x/update
🚨 [CRITICO] Servizio systemd malevolo: /etc/systemd/system/update-check.service
🚨 [CRITICO] Processo PM2 'app-worker' ha 8432 riavvii — probabile ciclo di riavvio del miner
🚨 [CRITICO] Backdoor nel profilo shell rilevato in /root/.bashrc
# kill rimuove TUTTI gli artefatti di persistenza — non solo il processo in esecuzione
sudo ./miner-hunter kill
# Poi applica l'hardening per installare il watchdog in modo da essere avvisato se qualcosa si riavvia
sudo ./miner-hunter harden
💡 Dopo
kill, il cron watchdog viene eseguito ogni 5 minuti e registra in/var/log/miner_hunter/watchdog_alerts.log— saprai immediatamente se qualcosa ritorna.
Hardening proattivo prima del deploy — nessun miner, nessun incidente, solo blocco del sistema.
# Esegui harden standalone — nessuna scansione o uccisione necessaria
sudo ./miner-hunter harden
Questo farà:
sshd/usr/bin (checksum MD5 — così puoi rilevare in seguito binari manomessi)Dopo kill, il passo di verifica segnala che il miner potrebbe essere ancora in esecuzione:
⚠️ IL MINER POTREBBE ESSERE RIAPPARSO
CPU: 89% | Connessioni miner: 1
I blocchi firewall sono in atto — il miner non può raggiungere il pool
Considera un RIAVVIO o una REINSTALLAZIONE DEL SISTEMA OPERATIVO
# 1. I blocchi firewall sono già in atto — il miner NON PUÒ raggiungere il suo pool
# Conferma che i blocchi siano attivi:
iptables -L OUTPUT -n | grep DROP
# 2. Esegui una seconda scansione per vedere cosa è sopravvissuto
sudo ./miner-hunter scan
# 3. Controlla un rootkit modulo kernel che nasconde il processo
lsmod | grep -iE 'diamorphine|reptile|kovid|rootkit'
# 4. Taint diverso da zero = moduli kernel fuori dagli alberi caricati (indicatore rootkit)
cat /proc/sys/kernel/tainted
Se il valore di taint del kernel è diverso da zero o appare un modulo rootkit conosciuto — il miner ha controllo a livello kernel. La via più sicura a questo punto è una reinstallazione completa del sistema operativo da uno snapshot noto come pulito.
Dopo harden, il watchdog cron è già installato. Ecco come lavorarci:
# Segui il log degli avvisi in tempo reale
tail -f /var/log/miner_hunter/watchdog_alerts.log
# Conferma che il cron job watchdog sia registrato
cat /etc/cron.d/miner-watchdog
# Controlla le modifiche ai binari di /usr/bin dalla baseline
md5sum --check /var/lib/miner_hunter/usrbin_baseline.md5 --quiet
Qualsiasi output dall'ultimo comando significa che un binario di sistema è stato modificato dopo la baseline — indaga immediatamente.
| Tecnica | Cosa rileva |
|---|---|
Profilazione PMC hardware con perf | Consumatori CPU nascosti — i rootkit non possono falsificare i contatori hardware |
Quando esegui sudo ./miner-hunter kill, questa è la sequenza esatta:
DROP applicate prima di uccidere, così il miner non può riconnettersi anche se riappareSIGKILLperf e controlla /proc/net/tcp per confermare che la CPU sia calata e le connessioni sparitesecurity-checks/ ← radice del repo (branch master)
├── miner-hunter # Punto di ingresso — questo è ciò che esegui
├── setup.sh # ⚙️ Setup iniziale — eseguire una volta dopo il clone
├── lib/
│ ├── common.sh # Utility condivise: logging, colori, helper
│ ├── detect_hidden.sh # Rilevamento processi nascosti e rootkit
│ ├── detect_cpu.sh # Profilo CPU tramite perf & /proc
│ ├── detect_network.sh # Rilevamento connessioni pool miner
│ ├── detect_persistence.sh # Rilevamento meccanismi di persistenza
│ ├── kill_miner.sh # Uccisione processi e rimozione artefatti
│ └── harden.sh # Hardening post-incidente
├── README.md
└── LICENSE
Ogni esecuzione produce:
Questo strumento è stato costruito durante una risposta a incidenti attivi contro un crypto miner che:
next per mimetizzarsi con i processi Next.js su un server Node.jskthreadd — un nome di thread kernel reale/proc/PID/exe → (deleted))ps, top, htop e btopperfMIT
| Passaggio | Cosa fa |
|---|
| ✅ Permessi | chmod +x su miner-hunter e tutti gli script lib/*.sh |
| ✅ Directory | Crea /var/log/miner_hunter/ e /var/lib/miner_hunter/ (solo root, 700) |
| ✅ Dipendenze | Controlla perf, mpstat, iptables, fail2ban, bc, strings — installa automaticamente quelle mancanti |
| ✅ Auto-test | Esegue ./miner-hunter --version per confermare che tutto sia configurato correttamente |
| Comando | Descrizione | Modifica il sistema? |
|---|
scan | Scansione di rilevamento completa — processi nascosti, CPU, rete, persistenza | ✅ No |
kill | Uccide i miner identificati, blocca gli IP dei pool, rimuove artefatti | ⚠️ Sì |
harden | Hardening post-incidente — SSH, firewall, watchdog, baseline di integrità | ⚠️ Sì |
full | Esegue scan → kill → harden con richieste di conferma tra le fasi | ⚠️ Sì |
report | Mostra il report della scansione più recente | ✅ No |
| Anteprima di tutte le azioni senza apportare modifiche |
-e, --evidence DIR | Salva le prove in una directory personalizzata invece di /root/miner_evidence_* |
-h, --help | Mostra l'aiuto |
-v, --version | Mostra la versione |
| Tecnica | Cosa rileva |
|---|
Confronto /proc vs ps | Processi invisibili agli strumenti userspace |
| Hijacking LD_PRELOAD | Librerie condivise malevole che hookano libc per nascondere processi |
| Rootkit modulo kernel | Diamorphine, Reptile, Kovid e altri rootkit conosciuti |
| Thread kernel falsi | Miners che si mascherano da [kworker], [kthreadd], [kswapd] |
| Binari di sistema modificati | ps, top, ls, ss, netstat sostituiti |
Campionamento delta /proc | Contabilità CPU diretta a livello kernel per PID |
| Rilevamento anomalia CPU | Alta CPU %user senza un processo visibile che la spieghi |
| Tecnica | Cosa rileva |
|---|
Lettura diretta /proc/net/tcp | Connessioni attive — bypassa ss/netstat hookati |
| Rilevamento porte miner | Porte 3333, 4444, 5555, 7777, 9200, 14433, 14444, 45560 |
| Risoluzione domini miner | Risolve domini pool conosciuti e incrocia con connessioni attive |
| Mapping socket-a-PID | Traccia quale processo possiede ciascuna connessione miner |
| Posizione | Cosa controlla |
|---|
| Cron | /etc/cron*, /var/spool/cron/, tutti i crontab utente |
| Systemd | Tutti i file di unità e timer per voci sospette |
| Regole Udev | Esecuzione attivata da eventi hardware su dispositivi |
| PM2 | Voci del process manager Node.js con conteggi di riavvio estremi |
| Profili shell | .bashrc, .bash_profile, /etc/profile, /etc/profile.d/* |
| SSH | Tutti i file authorized_keys su tutti gli utenti |
| Webshell | File PHP all'interno di directory di progetto Node.js |
| Config XMRig | config.json in posizioni di drop comuni del miner |
| Azione | Dettaglio |
|---|
| Persistenza firewall | Servizio systemd per ripristinare i blocchi iptables dei miner ad ogni riavvio |
| Audit SSH | Controlla PermitRootLogin, PasswordAuthentication, MaxAuthTries — stampa i valori consigliati |
| Controllo Fail2ban | Verifica che la jail sshd sia attiva e segnala gli IP attualmente bannati |
| Watchdog miner | Cron job ogni 5 minuti — controlla anomalia CPU, LD_PRELOAD, porte miner, webshell PHP |
Baseline /usr/bin | Calcola checksum MD5 di tutti i binari in /usr/bin per futura rilevazione di manomissioni |
| Requisito | Dettaglio |
|---|
| SO | Linux — testato su Ubuntu 24.04 LTS, Debian 13 |
| Privilegi | Deve essere eseguito come root (sudo) |
| Installati automaticamente da setup.sh | perf, mpstat (sysstat), bc, strings (binutils) |
| Raccomandato | fail2ban — segnalato se mancante, non installato automaticamente |
| Richiesto (non installato automaticamente) | iptables — deve essere presente per le fasi kill/harden |
| Output | Posizione | Contenuto |
|---|
| Directory prove | /root/miner_evidence_YYYYMMDD_HHMMSS/ | Binari catturati, report perf, config miner |
| File di log | /var/log/miner_hunter/run_YYYYMMDD_HHMMSS.log | Log completo con timestamp dell'esecuzione |
| Report | evidence_dir/report.txt | Sommario strutturato dei rilevamenti con gravità |
| Avvisi watchdog | /var/log/miner_hunter/watchdog_alerts.log | Avvisi continui dopo harden |
| Baseline integrità | /var/lib/miner_hunter/usrbin_baseline.md5 | Checksum di /usr/bin dopo harden |