
vérifications de sécurité linux
Kit de détection, suppression et durcissement anti-mineur de cryptomonnaie pour serveurs Linux.
Conçu à partir d'une réponse à incident réelle — détecte les mineurs qui se cachent de
ps,top,htopetbtopen utilisant des techniques rootkit.
git clone https://gitlab.com/abdom.seada/security-checks.git
cd security-checks
sudo bash setup.sh
🔀 Branche :
master— Cet outil se trouve sur la branchemaster. D'autres scripts de sécurité pourront être ajoutés sur des branches séparées à l'avenir.
⚠️ Exécutez
setup.shune fois juste après le clonage — ne pas le faire est la cause n°1 d'erreurs.
sudo bash setup.sh
setup.sh gère tout automatiquement :
Sortie attendue en cas de succès :
✅ Configuration terminée — toutes les vérifications réussies !
Prochaines étapes :
sudo ./miner-hunter scan # Analyse sécurisée en lecture seule
sudo ./miner-hunter full # Analyse → Tue → Durcit
💡 Pourquoi est-ce nécessaire ? Linux n'exécute pas un fichier sans le flag
+x. Git et les transferts SCP suppriment ce flag.setup.shcorrige tous les fichiers en une seule fois — y compris les moduleslib/dont dépend le script principal.
sudo ./miner-hunter scan # ✅ Sécurisé — lecture seule, aucune modification
sudo ./miner-hunter full # ⚠️ Pipeline complet : Analyse → Tue → Durcit
sudo ./miner-hunter scan --dry-run # 👁️ Mode aperçu — montre ce qui serait fait
| Option | Description |
|---|---|
Situations réelles et exactement quoi exécuter dans chaque cas.
top n'affiche rien »C'est le symptôme classique d'un rootkit. Le mineur se cache des outils espace utilisateur mais ne peut pas se cacher des compteurs de performance matériels.
# Étape 1 : Lancez d'abord une analyse sécurisée — confirmez ce qui est présent avant de toucher à quoi que ce soit
sudo ./miner-hunter scan
Ce que vous verrez si un mineur est présent :
🚨 [CRITIQUE] Anomalie CPU : 97 % CPU utilisateur mais top montre au maximum 2 % par processus
🚨 [CRITIQUE] perf a détecté 4 threads cachés consommant environ 94 % du CPU total
🚨 [CRITIQUE] Connexion active vers 185.x.x.x:9200 (port minier connu)
🚨 [CRITIQUE] Faux thread noyau PID=3421 NOM=[kworker/0:1] EXE=/tmp/.x/miner
# Étape 2 : Tuez le mineur et bloquez son pool
sudo ./miner-hunter kill
# Étape 3 : Durcissez le serveur pour qu'il ne puisse pas revenir
sudo ./miner-hunter harden
Vous avez remarqué quelque chose de suspect — trafic sortant inhabituel, une tâche cron que vous n'avez pas créée, un processus avec un nom étrange — mais vous n'êtes pas certain.
# Lancez une analyse complète — totalement sécurisée, lecture seule, aucune modification
sudo ./miner-hunter scan
# Puis lisez le rapport structuré
sudo ./miner-hunter report
Le rapport dans /root/miner_evidence_*/report.txt classe chaque résultat par sévérité :
[CRITIQUE] → passez immédiatement à kill[ATTENTION] → examinez manuellement avant d'agirLe mineur possède un mécanisme de persistance — une tâche cron, un service systemd, une entrée PM2 ou une porte dérobée dans un profil shell qui le relance après l'avoir tué.
sudo ./miner-hunter scan
Recherchez ces éléments dans la sortie :
⚠️ [ATTENTION] Entrée cron suspecte : * * * * * /tmp/.x/update
🚨 [CRITIQUE] Service systemd malveillant : /etc/systemd/system/update-check.service
🚨 [CRITIQUE] Processus PM2 'app-worker' a 8432 redémarrages — probable boucle de relance du mineur
🚨 [CRITIQUE] Porte dérobée dans le profil shell détectée dans /root/.bashrc
# kill supprime TOUS les artefacts de persistance — pas seulement le processus en cours
sudo ./miner-hunter kill
# Puis durcissez pour installer le watchdog afin d'être alerté si quelque chose se relance
sudo ./miner-hunter harden
💡 Après
kill, le watchdog cron s'exécute toutes les 5 minutes et journalise dans/var/log/miner_hunter/watchdog_alerts.log— vous saurez immédiatement si quelque chose revient.
Durcissement proactif avant le déploiement — pas de mineur, pas d'incident, juste verrouiller les choses.
# Exécutez harden seul — scan ou kill n'est pas nécessaire
sudo ./miner-hunter harden
Cela va :
sshd/usr/bin (sommes MD5 — pour détecter plus tard les binaires falsifiés)Après kill, l'étape de vérification rapporte que le mineur est peut-être toujours actif :
⚠️ LE MINEUR A PEUT-ÊTRE RÉAPPARU
CPU : 89 % | Connexions minage : 1
Les blocages du pare-feu sont en place — le mineur ne peut pas atteindre le pool
Envisagez un REDÉMARRAGE ou une RÉINSTALLATION DU SYSTÈME
# 1. Les blocages du pare-feu sont déjà en place — le mineur NE PEUT PAS atteindre son pool
# Confirmez que les blocages sont actifs :
iptables -L OUTPUT -n | grep DROP
# 2. Lancez une seconde analyse pour voir ce qui a survécu
sudo ./miner-hunter scan
# 3. Vérifiez la présence d'un rootkit sous forme de module noyau cachant le processus
lsmod | grep -iE 'diamorphine|reptile|kovid|rootkit'
# 4. Un taint non nul = des modules noyau hors arbre chargés (indicateur de rootkit)
cat /proc/sys/kernel/tainted
Si la valeur de taint du noyau est non nulle ou si un module rootkit connu apparaît — le mineur a un contrôle au niveau du noyau. La voie la plus sûre à ce stade est une réinstallation complète du système d'exploitation à partir d'un instantané connu comme propre.
Après harden, le watchdog cron est déjà installé. Voici comment l'utiliser :
# Surveillez le journal d'alerte en temps réel
tail -f /var/log/miner_hunter/watchdog_alerts.log
# Confirmez que la tâche cron watchdog est enregistrée
cat /etc/cron.d/miner-watchdog
# Vérifiez les modifications des binaires de /usr/bin depuis votre baseline
md5sum --check /var/lib/miner_hunter/usrbin_baseline.md5 --quiet
Toute sortie de la dernière commande signifie qu'un binaire système a été modifié après votre baseline — enquêtez immédiatement.
| Technique | Ce qu'elle détecte |
|---|---|
Profilage PMC matériel perf | Consommateurs CPU cachés — les rootkits ne peuvent pas falsifier les compteurs matériels |
Lorsque vous exécutez sudo ./miner-hunter kill, voici la séquence exacte :
DROP sont appliquées avant de tuer, afin que le mineur ne puisse pas se reconnecter même s'il réapparaîtSIGKILLperf et vérifie /proc/net/tcp pour confirmer que le CPU a chuté et que les connexions ont disparusecurity-checks/ ← racine du dépôt (branche master)
├── miner-hunter # Point d'entrée — c'est ce que vous exécutez
├── setup.sh # ⚙️ Configuration initiale — exécutez une fois après le clonage
├── lib/
│ ├── common.sh # Utilitaires partagés : journalisation, couleurs, aides
│ ├── detect_hidden.sh # Détection de processus cachés et rootkits
│ ├── detect_cpu.sh # Profilage CPU via perf & /proc
│ ├── detect_network.sh # Détection de connexions à des pools miniers
│ ├── detect_persistence.sh # Détection de mécanismes de persistance
│ ├── kill_miner.sh # Suppression de processus et d'artefacts
│ └── harden.sh # Durcissement post-incident
├── README.md
└── LICENSE
Chaque exécution génère :
Cet outil a été construit lors d'une réponse à incident active contre un mineur de cryptomonnaie qui :
next pour se fondre parmi les processus Next.js sur un serveur Node.jskthreadd — un véritable nom de thread noyau/proc/PID/exe → (deleted))ps, top, htop et btopperfMIT
| Étape | Ce qu'elle fait |
|---|
| ✅ Permissions | chmod +x sur miner-hunter et tous les scripts lib/*.sh |
| ✅ Répertoires | Crée /var/log/miner_hunter/ et /var/lib/miner_hunter/ (root uniquement, 700) |
| ✅ Dépendances | Vérie perf, mpstat, iptables, fail2ban, bc, strings — installe automatiquement les manquants |
| ✅ Auto-test | Exécute ./miner-hunter --version pour confirmer que tout est bien câblé |
| Commande | Description | Modifie le système ? |
|---|
scan | Analyse de détection complète — processus cachés, CPU, réseau, persistance | ❌ Non |
kill | Tue les mineurs identifiés, bloque les IPs des pools, supprime les artefacts | ⚠️ Oui |
harden | Durcissement post-incident — SSH, pare-feu, watchdog, baseline d'intégrité | ⚠️ Oui |
full | Exécute scan → kill → harden avec des invites de confirmation entre les phases | ⚠️ Oui |
report | Affiche le dernier rapport d'analyse | ❌ Non |
-d, --dry-run| Prévisualise toutes les actions sans appliquer de changements |
-e, --evidence DIR | Sauvegarde les preuves dans un répertoire personnalisé au lieu de /root/miner_evidence_* |
-h, --help | Affiche l'aide |
-v, --version | Affiche la version |
| Technique | Ce qu'elle détecte |
|---|
Comparaison /proc vs ps | Processus invisibles pour les outils espace utilisateur |
| Détournement LD_PRELOAD | Bibliothèques partagées malveillantes hookant libc pour cacher des processus |
| Rootkits modules noyau | Diamorphine, Reptile, Kovid et autres rootkits connus |
| Faux threads noyau | Mineurs se faisant passer pour [kworker], [kthreadd], [kswapd] |
| Binaires système modifiés | ps, top, ls, ss, netstat remplacés |
Échantillonnage delta /proc | Comptabilité CPU directe au niveau noyau par PID |
| Détection d'anomalie CPU | CPU %user élevé sans processus visible pour l'expliquer |
| Technique | Ce qu'elle détecte |
|---|
Lecture directe /proc/net/tcp | Connexions actives — contourne les ss/netstat hookés |
| Détection de ports miniers | Ports 3333, 4444, 5555, 7777, 9200, 14433, 14444, 45560 |
| Résolution de domaines miniers | Résout les domaines de pools connus et recoupe avec les connexions actives |
| Mappage socket-à-PID | Retrouve quel processus possède chaque connexion minière |
| Emplacement | Ce qui est vérifié |
|---|
| Cron | /etc/cron*, /var/spool/cron/, tous les crontabs utilisateurs |
| Systemd | Tous les fichiers d'unités et minuteries pour des entrées suspectes |
| Règles Udev | Exécution déclenchée par le matériel lors d'événements de périphérique |
| PM2 | Entrées du gestionnaire de processus Node.js avec des compteurs de redémarrage extrêmes |
| Profils shell | .bashrc, .bash_profile, /etc/profile, /etc/profile.d/* |
| SSH | Tous les fichiers authorized_keys de tous les utilisateurs |
| Webshells | Fichiers PHP dans les répertoires de projets Node.js |
| Configs XMRig | config.json dans les emplacements courants de dépôt de mineur |
| Action | Détail |
|---|
| Persistance du pare-feu | Service systemd pour restaurer les blocages iptables des mineurs à chaque redémarrage |
| Audit SSH | Vérifie PermitRootLogin, PasswordAuthentication, MaxAuthTries — affiche les valeurs recommandées |
| Vérification Fail2ban | Vérifie que la prison sshd est active et rapporte les IPs actuellement bannies |
| Watchdog mineur | Tâche cron toutes les 5 min — vérifie l'anomalie CPU, LD_PRELOAD, ports miniers, webshells PHP |
Baseline /usr/bin | Calcule les sommes MD5 de tous les binaires dans /usr/bin pour une future détection de falsification |
| Prérequis | Détail |
|---|
| OS | Linux — testé sur Ubuntu 24.04 LTS, Debian 13 |
| Privilèges | Doit être exécuté en tant que root (sudo) |
| Installé automatiquement par setup.sh | perf, mpstat (sysstat), bc, strings (binutils) |
| Recommandé | fail2ban — signalé si manquant, pas installé automatiquement |
| Requis (non installé automatiquement) | iptables — doit être présent pour les phases kill/harden |
| Sortie | Emplacement | Contenu |
|---|
| Répertoire de preuves | /root/miner_evidence_YYYYMMDD_HHMMSS/ | Binaires capturés, rapports perf, configurations du mineur |
| Fichier de journal | /var/log/miner_hunter/run_YYYYMMDD_HHMMSS.log | Journal d'exécution complet avec horodatage |
| Rapport | evidence_dir/report.txt | Résumé structuré des résultats avec sévérités |
| Alertes watchdog | /var/log/miner_hunter/watchdog_alerts.log | Alertes continues après harden |
| Baseline d'intégrité | /var/lib/miner_hunter/usrbin_baseline.md5 | Sommes de contrôle de /usr/bin après harden |