Bhunter - piratage des nœuds de botnet

Les analystes de virus et les chercheurs en sécurité informatique s'efforcent de collecter autant d'échantillons de nouveaux botnets que possible. Ils utilisent les honeypots à leurs propres fins... Mais que faire si l'on souhaite observer le malware en conditions réelles ? Mettre votre serveur ou routeur en danger ? Que faire s'il n'y a pas d'appareil adapté ? Ce sont ces questions qui m'ont incité à créer bhunter, un outil permettant d'accéder aux nœuds du botnet.

Bhunter - piratage des nœuds de botnet

idée centrale

Il existe de nombreuses façons de propager des logiciels malveillants pour étendre les réseaux de zombies : du phishing à l'exploitation de vulnérabilités 0-day. Mais la méthode la plus courante reste le forçage brutal des mots de passe SSH.

L'idée est très simple. Si un nœud de botnet tente de forcer brutalement les mots de passe de votre serveur, il est fort probable que ce nœud lui-même ait été capturé par des mots de passe simples forçant brutalement. Cela signifie que pour y avoir accès, il vous suffit de rendre la pareille.

C'est exactement ainsi que fonctionne Bhunter. Écoute le port 22 (service SSH) et collecte tous les identifiants et mots de passe avec lesquels ils tentent de s'y connecter. Ensuite, à l’aide des mots de passe collectés, il tente de se connecter aux nœuds attaquants.

Algorithme de travail

Le programme peut être divisé en 2 parties principales, qui fonctionnent dans des threads séparés. Le premier est le pot de miel. Traite les tentatives de connexion, collecte les identifiants et les mots de passe uniques (dans ce cas, la paire identifiant + mot de passe est considérée comme un tout) et ajoute également les adresses IP qui ont tenté de se connecter à la file d'attente pour une attaque ultérieure.

La deuxième partie est directement responsable de l'attaque. De plus, l'attaque est effectuée selon deux modes : BurstAttack (attaque en rafale) - identifiants et mots de passe par force brute de la liste générale et SingleShotAttack (attaque en un seul coup) - mots de passe par force brute qui ont été utilisés par le nœud attaqué, mais qui ne l'ont pas encore été. ajouté à la liste générale.

Afin d'avoir au moins une base de données de logins et de mots de passe immédiatement après le lancement, bhunter est initialisé avec une liste du fichier /etc/bhunter/defaultLoginPairs.

Interface

Il existe plusieurs façons de lancer Bhunter :

Tout comme une équipe

sudo bhunter

Avec ce lancement, il est possible de contrôler bhunter via son menu texte : ajouter des logins et mots de passe pour une attaque, exporter une base de données de logins et mots de passe, spécifier une cible pour une attaque. Tous les nœuds piratés peuvent être vus dans le fichier /var/log/bhunter/hacked.log

Utiliser tmux

sudo bhunter-ts # команда запуска bhunter через tmux  
sudo tmux attach -t bhunter # подключаемся к сессии, в которой запущен bhunter

Tmux est un multiplexeur de terminaux, un outil très pratique. Vous permet de créer plusieurs fenêtres dans un seul terminal et de diviser les fenêtres en panneaux. En l'utilisant, vous pouvez quitter le terminal puis vous connecter sans interrompre les processus en cours.

Le script bhunter-ts crée une session tmux et divise la fenêtre en trois panneaux. Le premier, le plus grand, contient un menu texte. Celui en haut à droite contient les journaux du pot de miel, ici vous pouvez voir les messages sur les tentatives de connexion au pot de miel. Le panneau inférieur droit affiche des informations sur la progression de l'attaque sur les nœuds du botnet et sur les piratages réussis.

L'avantage de cette méthode par rapport à la première est que nous pouvons fermer le terminal en toute sécurité et y revenir plus tard, sans que bhunter n'arrête son travail. Pour ceux qui connaissent peu tmux, je suggère cette aide-mémoire.

En tant que service

systemctl enable bhunter
systemctl start bhunter

Dans ce cas, nous activons le démarrage automatique de bhunter au démarrage du système. Dans cette méthode, l'interaction avec bhunter n'est pas fournie et la liste des nœuds piratés peut être obtenue à partir de /var/log/bhunter/hacked.log

Efficacité

En travaillant sur bhunter, j'ai réussi à trouver et à accéder à des appareils complètement différents : raspberry pi, routeurs (surtout mikrotik), serveurs web, et une fois une ferme minière (malheureusement, l'accès à celle-ci se faisait pendant la journée, donc il n'y avait pas d'intérêt histoire ). Voici une capture d'écran du programme, qui montre une liste de nœuds piratés après plusieurs jours de travail :

Bhunter - piratage des nœuds de botnet

Malheureusement, l'efficacité de cet outil n'a pas répondu à mes attentes : bhunter peut essayer les mots de passe des nœuds pendant plusieurs jours sans succès, et peut pirater plusieurs cibles en quelques heures. Mais cela suffit pour un afflux régulier de nouveaux échantillons de botnets.

L'efficacité est influencée par des paramètres tels que : le pays dans lequel se trouve le serveur avec bhunter, l'hébergement et la plage à partir de laquelle l'adresse IP est attribuée. D'après mon expérience, il y a eu un cas où j'ai loué deux serveurs virtuels auprès d'un seul hébergeur, et l'un d'eux a été attaqué par des botnets 2 fois plus souvent.

Bugs que je n'ai pas encore corrigés

Lors de l'attaque d'hôtes infectés, dans certaines situations, il n'est pas possible de déterminer sans ambiguïté si le mot de passe est correct ou non. De tels cas sont enregistrés dans le fichier /var/log/debug.log.

Le module Paramiko, qui sert à fonctionner avec SSH, se comporte parfois mal : il attend indéfiniment une réponse de l'hôte lorsqu'il tente de s'y connecter. J'ai expérimenté des minuteries, mais je n'ai pas obtenu le résultat souhaité

Sur quoi d’autre faut-il travailler ?

Nom du service

Selon la RFC-4253, le client et le serveur échangent les noms des services qui implémentent le protocole SSH avant l'installation. Ce nom est contenu dans le champ « SERVICE NAME », contenu à la fois dans la demande du côté client et dans la réponse du côté serveur. Le champ est une chaîne et sa valeur peut être trouvée à l'aide de Wireshark ou nmap. Voici un exemple pour OpenSSH :

$ nmap -p 22 ***.**.***.** -sV
Starting Nmap ...
PORT   STATE SERVICE VERSION
22/tcp open  ssh     <b>OpenSSH 7.9p1 Debian 10+deb10u2</b> (protocol 2.0)
Nmap done: 1 IP address (1 host up) scanned in 0.47 seconds

Cependant, dans le cas de Paramiko, ce champ contient une chaîne du type « Paramiko Python sshd 2.4.2 », qui peut effrayer les botnets conçus pour « éviter » les pièges. Je pense donc qu’il est nécessaire de remplacer cette ligne par quelque chose de plus neutre.

Autres vecteurs

SSH n'est pas le seul moyen de gestion à distance. Il existe également telnet, rdp. Cela vaut la peine de les regarder de plus près.

extension

Ce serait formidable d'avoir plusieurs pièges dans différents pays et de collecter de manière centralisée les identifiants, les mots de passe et les nœuds piratés dans une base de données commune.

Où télécharger?

Au moment de la rédaction de cet article, seule une version de test est prête, téléchargeable sur dépôt sur Github.

Source: habr.com

Ajouter un commentaire