La plupart du temps, les PME et ETI possèdent au moins un NAS contenant toutes les données de l’entreprise. Les NAS sont aussi utilisés à titre personnel pour enregistrer à un seul endroit ses données importantes, photos, scan administratifs, etc.
Ces NAS sont très prisés des pirates, car c’est une cible idéale pour les attaques de ransomware (ou rançongiciels), les données importantes se trouvant sur un support facile à repérer sur un réseau.
Cet article donne les grandes lignes pour mettre en place une surveillance d’un NAS en se basant sur un exemple concret avec un NAS Synology.
Outils utilisés
- NAS Synology
- Rsyslog
- Zabbix
Récupération des données d’accès au NAS
Les NAS Synology ont l’avantage de posséder un système d’exploitation Web nommé DSM (Disk Station Manager). La page web du NAS donne accès à un bureau avec des icônes et des fenêtres permettant une gestion facile du NAS, plutôt que d’utiliser une page web d’administration. Il propose également un gestionnaire de paquet permettant de télécharger et d’installer des composants supplémentaires au NAS.
C’est pas ce biais que nous installons sur ce NAS le paquet « Centre des journaux ». Cette application donne tous les détails d’accès aux fichiers, et permet l’envoi de ces informations sur un serveur syslog.
Centralisation des évènements avec Rsyslog
On prend le relais sur un serveur Linux sur lequel les journaux seront récupérés via syslog, en utilisant le service Rsyslog (système syslog par défaut sur Debian 10).
Voici un fichier de configuration simple permettant cette récupération de journaux dans notre exemple, fichier /etc/rsyslog.d/nas.conf :
$ModLoad imudp
$UDPServerRun 514
$AllowedSender UDP, 192.168.1.100/24
:fromhost-ip, isequal, "192.168.1.100" /var/log/nas/nas.log
Cela permet d’utiliser le protocole de transport UDP sur le port 514 pour la récupération des journaux, depuis une adresse IP précise sur le réseau, ici le NAS possède l’adresse 192.168.1.100.
Voici quelques exemples de journaux enregistrés dans le fichier /var/log/nas/nas.log :
Apr 13 11:14:20 NAS WinFileService Event: create, Path: /PARTAGE_TEST/FICHIER_TEST.txt, File/Folder: File, Size: 0 Bytes, User: John, IP: 192.168.1.50
Apr 13 11:14:20 NAS WinFileService Event: read, Path: /PARTAGE_TEST/EXEMPLE.pdf, File/Folder: File, Size: 1.21 MB Bytes, User: John, IP: 192.168.1.50
Attention : Ces journaux auront tendance à grossir rapidement, selon la fréquence d’utilisation du NAS (lecture et écritures de fichiers, sauvegardes, etc). Il est nécessaire de configurer logrotate pour découper les fichiers de logs et les purger.
Surveillance des accès avec Zabbix
Zabbix est un système de monitoring dont l’agent peut être personnalisé, il va nous permettre ici de récupérer les informations de lectures, écritures, création et suppression de fichier du NAS en analysant le fichier journal.
La configuration suivante est ajoutée à l’agent Zabbix du serveur Linux syslog, permettant de répondre à des clé Zabbix spécifiques de sorte à récupérer le nombre de fichiers lus, écrits, créés et supprimés à l’instant T.
Ces valeurs sont récupérées simplement via les commandes shell egrep et wc. La première commande permet de récupérer les lignes d’un fichier correspondant à un masque précis défini via des expressions régulières, permettant ainsi de ne cibler que les lignes du fichier journal correspondant aux fichiers lus. La seconde commande permet de simplement compter les lignes.
Les clés Zabbix sont créées de sorte à pouvoir récupérer le nombre de fichiers lus, écrits, créés et supprimés, au total, par partage et par IP cliente.
UserParameter=nas.access.discovery,/home/user/scripts/zabbix/zabbix_decouverte_nas.sh
UserParameter=nas.access.readall,egrep "(NAS) ([[:alnum:]]*) Event: read" /var/log/nas/nas.log | wc -l
UserParameter=nas.access.read[*],egrep "(NAS) ([[:alnum:]]*) Event: read, Path: /$1" /var/log/nas/nas.log | wc -l
UserParameter=nas.access.writeall,egrep "(NAS) ([[:alnum:]]*) Event: write" /var/log/nas/nas.log | wc -l
UserParameter=nas.access.write[*],egrep "(NAS) ([[:alnum:]]*) Event: write, Path: /$1" /var/log/nas/nas.log | wc -l
UserParameter=nas.access.createall,egrep "(NAS) ([[:alnum:]]*) Event: create" /var/log/nas/nas.log | wc -l
UserParameter=nas.access.create[*],egrep "(NAS) ([[:alnum:]]*) Event: create, Path: /$1" /var/log/nas/nas.log | wc -l
UserParameter=nas.access.deleteall,egrep "(NAS) ([[:alnum:]]*) Event: delete" /var/log/nas/nas.log | wc -l
UserParameter=nas.access.delete[*],egrep "(NAS) ([[:alnum:]]*) Event: delete, Path: /$1" /var/log/nas/nas.log | wc -l
UserParameter=nas.clients.discovery,/home/user/scripts/zabbix/zabbix_decouverte_nas_ips.sh
UserParameter=nas.clients.read[*],egrep "(NAS) ([[:alnum:]]*) Event: read, Path: (.)* IP: $1" /var/log/nas/nas.log | wc -l
UserParameter=nas.clients.write[*],egrep "(NAS) ([[:alnum:]]*) Event: write, Path: (.)* IP: $1" /var/log/nas/nas.log | wc -l
UserParameter=nas.clients.create[*],egrep "(NAS) ([[:alnum:]]*) Event: create, Path: (.)* IP: $1" /var/log/nas/nas.log | wc -l
UserParameter=nas.clients.delete[*],egrep "(NAS) ([[:alnum:]]*) Event: delete, Path: (.)* IP: $1" /var/log/nas/nas.log | wc -l
Des clés de découvertes Zabbix permettent de définir les partages existants ainsi que les adresses IP clientes concernées. Les tableaux JSON renvoyés par ces clés de découvertes sont générés par des scripts shell.
Le premier script de découverte concerne la récupération des noms des partages. Ce script utilise la commande smbclient, celle-ci utilise le protocole SMB (partage Windows) pour « questionner » le NAS et lui demander les noms des partages :
#!/bin/bash
echo "{"
echo " \"data\": ["
cpt=0
for i in `smbclient -L nas -A /etc/samba/credfile 2> /dev/null | grep Disk | awk '{print $1}'`
do
((cpt+=1))
if [[ $cpt -gt 1 ]]; then
echo " },"
fi
echo " {"
echo " \"{#SHARENAME}\":\"$i\""
done
if [[ $cpt -gt 0 ]]; then
echo " }"
fi
echo " ]"
echo "}"
On utilise le /etc/samba/credfile avec la commande smbclient pour utiliser un identifiant et mot de passe permettant l’accès à tous les partages du NAS.
Le second script concerne la récupération des adresses IP clientes. Ces adresses IP clientes sont présentes dans le fichier journal. Pour faciliter la réponse à la demande de découverte, sans attendre l’aboutissement de la recherche des adresses dans le fichier journal, on fait en sorte de récupérer les adresses IP de façon asynchrone, c’est à dire qu’on met en place une tâche planifiée CRON qui exécutera un script de recherche :
#!/bin/bash
for i in `egrep -o 'IP: ([0-9])*\.([0-9])*\.([0-9])*\.([0-9])*' /var/log/nas/nas.log | awk '{print $2}' | sort | uniq 2> /dev/null`
do
echo Vérification IP $i
if grep "$i" /var/log/nas/ips.txt 2> /dev/null
then
echo IP déjà existante $i
else
echo Ajout IP $i
echo $i >> /var/log/nas/ips.txt
fi
done
Ce script répertorie les adresses IP trouvées dans le fichier /var/log/nas/ips.txt en évitant les doublons.
La tâche CRON peut être paramétrée en ajoutant la ligne suivante par exemple au fichier /etc/crontab :
0 * * * * user /home/user/scripts/zabbix/zabbix_recuperation_nas_ips.sh
Ainsi, le script s’éxecutera toutes les heures.
Le script de découverte renvoi simplement en JSON les adresses IP répertoriées dans ce fichier :
#!/bin/bash
cpt=0
echo "{"
echo " \"data\": ["
while read i
do
((cpt+=1))
if [[ $cpt -gt 1 ]]; then
echo " },"
fi
echo " {"
echo " \"{#CLIENTIP}\":\"$i\""
done < /var/log/nas/ips.txt
if [[ $cpt -gt 0 ]]; then
echo " }"
fi
echo " ]"
echo "}"
La configuration Zabbix pour activer ces découvertes est la suivante concernant les partages réseau :
Sur cette découverte, voici un exemple de prototype d’élément permettant la récupération du nombre de création de fichier sur le NAS sur un partage réseau :
Conclusion
J’ai décrit ici un exemple complet permettant d’avoir une vue précise de ce qu’il se passe sur un NAS.
Les attaques par ransomware étant de plus en plus fréquent, ce contrôle est d’autant plus nécessaire, entre autre, l’utilisation de Zabbix permettant ainsi de s’apercevoir d’utilisations anormales du NAS.
La cyber sécurité étant un domaine demandant une évolution constante pour être performante, il est possible de continuer ces méthodes de contrôle en incluant par exemple fail2ban et automatiser des restrictions d’accès. Cette méthode reste toutefois très sensible, car nécessite de bien maîtriser la configuration optimale qui différenciera une utilisation normale et anormale du NAS, et éviter les blocages de faux positifs, et ralentir le travail des utilisateurs.
En outre, cette méthode de surveillance n’empêche pas la mise en place parallèle des autres système de sécurité, notamment des sauvegardes.
Si besoin, n’hésitez pas à me contacter via la page Me contacter pour approfondir cette méthode de surveillance.