From cde2103207ddfb0e4c2126fa3b8f15fbe84a09a9 Mon Sep 17 00:00:00 2001 From: Willy Date: Tue, 9 Jun 2026 21:20:07 +0200 Subject: [PATCH] Add Lynis/v2/degrade-security-critical.sh --- Lynis/v2/degrade-security-critical.sh | 139 ++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 Lynis/v2/degrade-security-critical.sh diff --git a/Lynis/v2/degrade-security-critical.sh b/Lynis/v2/degrade-security-critical.sh new file mode 100644 index 0000000..b92b01f --- /dev/null +++ b/Lynis/v2/degrade-security-critical.sh @@ -0,0 +1,139 @@ +#!/usr/bin/env bash +# +# degrade-security-critical.sh +# ============================ +# Complément de degrade-security.sh, ciblant cette fois les conditions +# que Lynis classe en WARNINGS (et non en simples suggestions). +# +# /!\ CES MODIFICATIONS OUVRENT REELLEMENT LE SYSTEME : +# - compte supplémentaire avec UID 0 (équivalent root) +# - compte sans mot de passe +# - /etc/shadow lisible par tous +# A N'EXECUTER QUE SUR UNE VM JETABLE, ISOLEE DU RESEAU. +# +# Comme le premier script : sauvegardes, CHANGELOG.txt, restore.sh, +# FICHIERS-MODIFIES.txt dans /root/lynis-demo-backups//. +# +set -euo pipefail + +[[ ${EUID} -ne 0 ]] && { echo "Lancez en root (sudo)." >&2; exit 1; } + +TS="$(date +%Y%m%d-%H%M%S)" +BACKUP_DIR="/root/lynis-demo-backups/${TS}" +CHANGELOG="${BACKUP_DIR}/CHANGELOG.txt" +RESTORE="${BACKUP_DIR}/restore.sh" +MODIFIED="${BACKUP_DIR}/FICHIERS-MODIFIES.txt" +mkdir -p "${BACKUP_DIR}" + +log() { echo "[$(date +%H:%M:%S)] $*" | tee -a "${CHANGELOG}"; } + +backup_file() { + local f="$1" + if [[ -e "${f}" ]]; then + local dest="${BACKUP_DIR}/files${f}" + mkdir -p "$(dirname "${dest}")" + cp -a "${f}" "${dest}" + echo "cp -a -- '${dest}' '${f}'" >> "${RESTORE}" + log "Sauvegarde : ${f}" + else + echo "rm -f -- '${f}'" >> "${RESTORE}" + log "Fichier neuf : ${f} (supprimé à la restauration)" + fi + echo "${f}" >> "${MODIFIED}" +} + +cat > "${RESTORE}" <<'EOF' +#!/usr/bin/env bash +set -euo pipefail +[[ ${EUID} -ne 0 ]] && { echo "Lancez en root." >&2; exit 1; } +echo "Restauration de la configuration d'origine..." +EOF +chmod +x "${RESTORE}" +: > "${MODIFIED}" +log "=== Début de la dégradation CRITIQUE - sauvegardes : ${BACKUP_DIR} ===" + +# ---------------------------------------------------------------------- +# 1. Redémarrage requis -> WARNING KRNL-5830 (le plus fiable) +# ---------------------------------------------------------------------- +backup_file /run/reboot-required +backup_file /run/reboot-required.pkgs +echo "DEMO Lynis - redemarrage requis" > /run/reboot-required +echo "linux-image-demo" > /run/reboot-required.pkgs +log "Reboot : /run/reboot-required créé" + +# ---------------------------------------------------------------------- +# 2. Second compte avec UID 0 -> WARNING AUTH-9216 +# ---------------------------------------------------------------------- +if ! id backdoor0 >/dev/null 2>&1; then + useradd -o -u 0 -g 0 -M -d /root -s /bin/bash backdoor0 + echo "userdel backdoor0 2>/dev/null || true" >> "${RESTORE}" + echo "compte:backdoor0 (UID 0)" >> "${MODIFIED}" + log "Comptes : backdoor0 créé avec UID 0 (équivalent root)" +fi + +# ---------------------------------------------------------------------- +# 3. Compte sans mot de passe -> WARNING AUTH-9216 / AUTH-9204 +# ---------------------------------------------------------------------- +if ! id demoempty >/dev/null 2>&1; then + useradd -m -s /bin/bash demoempty + passwd -d demoempty >/dev/null + echo "userdel -r demoempty 2>/dev/null || true" >> "${RESTORE}" + echo "compte:demoempty (mot de passe vide)" >> "${MODIFIED}" + log "Comptes : demoempty créé sans mot de passe" +fi + +# ---------------------------------------------------------------------- +# 4. /etc/shadow lisible par tous -> permissions critiques +# (on ne sauvegarde QUE le mode, pas le contenu, pour ne pas +# entrer en conflit avec la suppression des comptes ci-dessus) +# ---------------------------------------------------------------------- +SHADOW_MODE="$(stat -c '%a' /etc/shadow)" +chmod o+r /etc/shadow +echo "chmod ${SHADOW_MODE} /etc/shadow" >> "${RESTORE}" +echo "/etc/shadow (droits o+r)" >> "${MODIFIED}" +log "Permissions : /etc/shadow rendu lisible par tous (mode initial ${SHADOW_MODE})" + +# ---------------------------------------------------------------------- +# 5. Aucune synchronisation de temps -> WARNING TIME-3104 +# ---------------------------------------------------------------------- +if systemctl is-enabled systemd-timesyncd >/dev/null 2>&1 \ + || systemctl is-active systemd-timesyncd >/dev/null 2>&1; then + systemctl disable --now systemd-timesyncd >/dev/null 2>&1 || true + echo "systemctl enable --now systemd-timesyncd >/dev/null 2>&1 || true" >> "${RESTORE}" + echo "service:systemd-timesyncd (désactivé)" >> "${MODIFIED}" + log "Temps : systemd-timesyncd désactivé" +fi + +# ---------------------------------------------------------------------- +# 6. Démon de journalisation arrêté -> WARNING LOGG-2130 +# (peut rester silencieux si journald est jugé suffisant par Lynis) +# ---------------------------------------------------------------------- +if systemctl is-active rsyslog >/dev/null 2>&1; then + systemctl disable --now rsyslog >/dev/null 2>&1 || true + echo "systemctl enable --now rsyslog >/dev/null 2>&1 || true" >> "${RESTORE}" + echo "service:rsyslog (désactivé)" >> "${MODIFIED}" + log "Logs : rsyslog désactivé" +fi + +# ---------------------------------------------------------------------- +# 7. (OPTIONNEL) DNS injoignable -> WARNING NETW-2705 +# Casse la résolution DNS pendant la démo : à activer en connaissance +# de cause, décommentez le bloc ci-dessous. +# ---------------------------------------------------------------------- +# backup_file /etc/resolv.conf +# printf 'nameserver 203.0.113.123\n' > /etc/resolv.conf # IP de test non routable +# log "DNS : resolv.conf pointé vers un serveur injoignable" + +# ---------------------------------------------------------------------- +# Fin +# ---------------------------------------------------------------------- +echo 'echo "Restauration terminée. Un reboot est conseillé."' >> "${RESTORE}" +log "=== Dégradation critique terminée ===" +echo +echo "------------------------------------------------------------------" +echo " Éléments modifiés :" +sed 's/^/ - /' "${MODIFIED}" +echo "------------------------------------------------------------------" +echo " Analyse : sudo lynis audit system (voir la section Warnings)" +echo " Tout annuler : sudo ${RESTORE}" +echo "------------------------------------------------------------------" \ No newline at end of file