Sécurisation rsync contre ransomware

Bambusa29

Chevalier Jedi
10 Avril 2022
284
128
83
Bonjour tout le monde,

J'utilise rsync en incrémental sous OMV6 pour faire mes backup toutes les nuits.
Concrètement le contenu de A (accessible depuis Windows) est synchronisé vers B (en lecture seule depuis Windows. Seul le NAS a un accés en écriture à B).
Jusqu'ici je pensais être à l'abris du ranconnage (les extensions de fichiers sont modifiés) du coté B (seule les modifications sont copiés et pas d'effacement sur la destination).
J'ai vu que parfois le ransomware ne modifiait pas l'extension du fichier et donc dans ce cas rsync risque d’écraser mon bakcup en considérent que les fichiers ont changés.

Je pensais faire un script simple qui effectue un test de checksum sur 2 ou 3 fichiers 'leurre" (jpg, test, pdf) avant de lancer la commande rsync en automatique toute les nuits.
Sinon lancer rsync manuellement régulièrement...

Qu'avez vous mis en place comme système pour blinder rsync et éviter de propager un ranconnage sur votre backup ?

Dans le même ordre d'idées pour protéger tous mes médias de ranconnage dans Jellyfin, j'ai fais deux scripts très simple pour verrouiller et déverrouiller toutes modifications de mes médias (l'ajout reste possible mais pas la modifications). Par défaut c'est vérouiller et quand je souhaite effacer un média, je deverouille.
 
J'ai passé mon après midi à conditionner le lancement de rsync avec la comparaison du hash de 3 fichiers témoins.
Si un seul de ces fichiers a été altéré, le script "rsync" n'est pas lancé.
Cela fonctionne !!

Du coup j'ai viré les taches rsync et je passe par la table générale du "cron" de l'interface d'OMV pour lancer un script qui conditionne le lancement des scripts rsync à proprement parlé.
 

Pièces jointes

  • protect01.jpg
    protect01.jpg
    148.9 KB · Affichages: 22
  • protect02.jpg
    protect02.jpg
    206.2 KB · Affichages: 22
J'ai une triple protections sur le NAS :

+ une vérification lors du lancement de rsync
+ une tache qui tourne continuellement et qui surveille l'intégrité des fichiers dans un partage SMB fictif accessible en GUEST.
+ Des partage SMB dont le contenu est verrouillé à l'altération par défaut.

- Le script qui tourne en tache de fond surveille un partage SMB non protégé et en GUEST, si altération du hash des fichiers dedans -> production d'un fichier jeton qui bloquera le processus de sauvegarde journalier.
- Le script de sauvegarde journalier vérifie donc la présence de ce fichier jeton + fait un test ponctuel dans le partage SMB
- J'ai des scripts de verrouillage/déverrouillage en altération (sudo rm * ne fonctionne pas sur ce type de protection) de mes partages Media, Docs...

Quelques scripts :

Sauvegarde protégée d'un de mes partages :

Bash:
#!/bin/sh

# Repertoires divers
DIRECTORY="/srv/disk1/scripts"
RSYNC_HASH=$DIRECTORY"/rsync.chk"
CHK_RESULT=$DIRECTORY"/result_rsync"
SCRIPT=$DIRECTORY"/rsync-rsyncin.sh"
DEBLOCAGE_RSYNC=$DIRECTORY"/deprotectRSyncOut_backup.sh"
BLOCAGE_RSYNC=$DIRECTORY"/protectRSyncOut_backup.sh"
FILE_RANSOMWARE=$DIRECTORY"/checkAll_ranson.oups"

# verifie les cheksum
sha1sum -c $RSYNC_HASH 1>$CHK_RESULT 2>/dev/null
sed -i -e "s/.chec/Echec/g" $CHK_RESULT
#result=`sha1sum -c --strict $RSYNC_HASH`
#echo $result

if ( grep -q "Echec\|FAILED" $CHK_RESULT ) || [ -f $FILE_RANSOMWARE ] ; then
    # fichiers hash alterés !!
    echo "ALERT : fichiers alteres : blocage de rsync (RsyncIn)"
else
    echo "lancement rsync (RSyncIn)..."
    $DEBLOCAGE_RSYNC
    $SCRIPT
    $BLOCAGE_RSYNC
fi

Tache de fond qui scan le partage SMB GUEST fictif :
Bash:
#!/bin/sh

# Repertoires divers
DIRECTORY="/srv/disk1/scripts"
RSYNC_HASH=$DIRECTORY"/checkAll.chk"
CHK_RESULT=$DIRECTORY"/result_checkAll"
BODY="Alerte !!!!\n\nLes fichiers du partage oups sont alteres\n"
FILE_RANSOMWARE=$DIRECTORY"/checkAll_ranson.oups"
PROTECT_ALL=$DIRECTORY"/protectAll.sh"

while true
do

# verifie les cheksums
sha1sum -c $RSYNC_HASH 1>$CHK_RESULT 2>/dev/null
sed -i -e "s/.chec/Echec/g" $CHK_RESULT
#result=`sha1sum -c --strict $RSYNC_HASH`
#echo $result

if ( grep -q "Echec\|FAILED" $CHK_RESULT ) ; then
    # fichiers hash alterés !!
    echo "ALERT : ransonware detecte dans le partage Oups"
    # envoi un email
    echo $BODY | mail -s "ALERTE Ransonware !!!" root
    touch $FILE_RANSOMWARE
    $PROTECT_ALL
    exit 0
else
    # attend 30s
    sleep 30
fi
done

Les fichiers contenant les HASH :

Code:
6d28771c111cc9fae54afe9c889750002d164747  /srv/disk1/oups/rsync.pdf
8a4fc855afe7d7151ebfc38f7f5623b2aa16d523  /srv/disk1/oups/rsync.txt
7fa4271ea339c308965f971df249c9fbdb8a0f0f  /srv/disk1/oups/rsync.png

Le blocage / deblocage (même principe) des partages avec mises à jour du statut des protections dans mon tableau de bord Homer :

Code:
#!/bin/bash
##########################################################
# Script de de-protection contre effacement Documents PRO
##########################################################
cd /srv/disk1/data/RSyncIn
chattr -i -R *
lsattr -d *
cd /srv/disk1/scripts
sed -i -e "s/RSyncIn:1/RSyncIn:0/g" statusAR
$(/usr/bin/php statusARHomer.php) 1>/dev/null

L'état de mes protections avec Homer (la page se rafraichi tous les 5 minutes) : ici j'ai débloqué le partage ou j'ai mes documents de travail :
protect.png
 
Dernière édition:
Je suis en train de développer un tableau de bord sous la forme d'un site web en PHP pour configurer la sécurité de mon NAS de façon simple.

Je ne trouve pas très pratique de devoir me connecter à l'interface d'OMV ou en SSH pour lancer mes scripts, de devoir bricoler un truc avec
Homer pour voir l'état de mes protections actives....

J'ai utilisé nginx pour héberger le site car sous Docker c'est galère pour accéder au système de fichiers (les fichiers crons, mes scripts, faire des 'ps' pour voir si un process tourne....etc).

La j'ai une vue globale et je peux configurer génériquement la sécurité (sans refaire le même script x fois) de mon NAS. J'ai commencé ce weekend mais ca avance assez vite :). Il me reste encore néanmoins beaucoup de taff 😅

En gros "Vert" c'est actif ou ca tourne,
Rouge c'est arrêté ou inactif,
et Gris/Bleu c'est un fonctionnement spécial

PS : pour l'image du menu "taches CRON", il me manque encore la récupération des taches "userdefined" de l'interface d'OMV (le cron est géré un peu différemment avec OMV et est "bridé").


secuNAS01.png

secuNAS02.png

secuNAS03.png
 
  • J'aime
Réactions: Nincha