
Script automatizzato di risposta agli incidenti Linux con triage live, acquisizione di memoria (LiME), imaging del disco, scansione YARA e generazione di report HTML.
Risposta agli incidenti su Linux

TuxResponse è uno script di risposta agli incidenti per sistemi Linux scritto in bash. Può automatizzare le attività di risposta agli incidenti sui sistemi Linux e consentirti di triage rapidamente i sistemi, senza compromettere i risultati. Di solito i sistemi aziendali dispongono di qualche tipo di monitoraggio e controllo, ma ci sono eccezioni dovute a IT ombra e immagini non standard distribuite nelle aziende. Ciò che equivale a digitare 10 comandi con test finali di prova, può essere fatto con la pressione di un pulsante.
Testato su:
Scopo principale:
Strumenti esterni nel pacchetto:
INSTALL LiME
function init_lime(){
if [ -f /usr/bin/yum ]; then
yum -y install make kernel-headers kernel-devel gcc
elif [ -f /usr/bin/apt-get ]; then
apt-add-repository universe
apt-get -y install make linux-headers-$(uname -r) gcc
fi
rm -f /tmp/v1.8.1.zip
wget -P/tmp https://github.com/504ensicsLabs/LiME/archive/v1.8.1.zip
unzip /tmp/v1.8.1.zip
rm -f /tmp/v1.8.1.zip
pushd LiME-1.8.1/src
make
mv lime-*.ko /tmp/lime.ko
popd
rm -rf LiME-1.8.1
}
Quando si risponde a incidenti, se si deve installare LiME digitando manualmente tutti i comandi, ciò ti rallenterà significativamente.
1)Info di sistema, IP, Data, Ora, fuso orario locale, ultimo avvio - 'hostnamectl; who -b; uname -a; uptime; ifconfig; date; last reboot'
1)Controlla i filesystem montati -'df -h'
2)Hash degli eseguibili (MD5) - 'find /usr/bin -type f -exec file "{}" \; | grep -i "elf" | cut -f1 -d: | xargs -I "{}" -n 1 md5sum {}'
3)File modificati - 'modified_files_period_select' (chiama una funzione in tuxresponse.sh)
4)Elenca tutte le directory nascoste - 'find / -type d -name "\.*"'
5)File/directory senza nome utente/gruppo - 'find / \( -nouser -o -nogroup \) -exec ls -l {} \; 2>/dev/null'
6)File modificati dai pacchetti -'packaged_files_changed' (chiama una funzione in tuxresponse.sh)
1) Controllo rootkit - esegue 'chkrootkit'
2) Scansione Yara - chiama una funzione in tuxresponse.sh 'yara_select' (scansiona il sistema con tutte le regole YARA Linux disponibili nel repository master)
3) EXIFTool - chiama una funzione in tuxresponse.sh 'exiftool_select' (installa EXIFTool)
1) Elenca i processi in esecuzione - 'ps -axu'
2) Binari cancellati ancora in esecuzione - 'ls -alR /proc/*/exe 2> /dev/null | grep deleted'
3) Connessioni di rete attive (TCP, UDP) - 'ss -tunap | sed "s/[ \t]\+/|/g"'
4) Dump del processo in base al PID - 'dump_process_select' (chiama una funzione in tuxresponse.sh)
1) Inserisci PID da dump: **(questo è il comando eseguito - gcore -a -o "${DUMP_FILE}" ${DUMP_PID} )**
5) Processi in esecuzione da /tmp, /dev - 'ls -alR /proc/*/cwd 2> /dev/null | grep -E "tmp|dev"'
1) Elenca tutte le connessioni di rete attive/socket raw - 'netstat -nalp; netstat -plant'
1) Elenca tutti gli utenti connessi al sistema - 'w'
2) Ottieni utenti con password - 'getent passwd'
1) Controlla il file di cronologia di bash - 'cat ~/.bash_history | nl'
1) Elenca tutti i cron job - 'list_all_crontab' (chiama una funzione in tuxresponse.sh)
2) Elenca tutti i programmi all'avvio/boot - 'list_all_onstartup' (chiama una funzione in tuxresponse.sh)
1) Dump del .bash_history degli utenti - 'cat_all_bash_history' (chiama una funzione in tuxresponse.sh)
2) Trova log con binari all'interno - 'grep [[:cntrl:]] /var/log/*.log'
Questa opzione ti consente di connetterti a un sistema remoto, copiare tutti gli script e gli strumenti e analizzare il sistema.
Questa opzione ti consente di compilare LiME dal sorgente e fare il dump della memoria RAM del sistema. Questo è il modo più semplice poiché l'alternativa sarebbe compilare dal sorgente per tutte le versioni principali del kernel e inserire il LKM.
That option enables you to do a full disk image of the target system using well-known tool - dd. The function is taking source and destination as parameters and inserts them in the following command 'dd if=${IMAGE_IN} | pv | dd of='${IMAGE_OUT}' bs=4K conv=noerror,sync'. If you're investigating remote system, the script is going to copy itself there. Then if the parameter ${TARGET_HOST} is set, then the script is going to download the image to analyst system using this command >> "ssh -p${TARGET_PORT} ${TARGET_USER}@${TARGET_HOST} 'dd if=${IMAGE_IN} bs=4K conv=noerror,sync' | pv | dd of='${IMAGE_OUT}'" (im heavily using pv to make sure progress is tracked)
Tutto ciò che fai viene registrato in file di testo, quindi è facile tornare indietro e guardare l'output. Il bello è che puoi caricarlo nei tuoi strumenti di analisi dei log preferiti e darvi un senso in una fase successiva. Inoltre, puoi usare questa funzione per generare un report HTML e visualizzare l'output generato dai comandi in una forma più leggibile per l'uomo.
Installa i binari necessari per il corretto funzionamento dello script.
1) Dipendenze
2) Yara e regole
3) ExifTool
4) Controllo init
5) chckrootkit
6) LiME
Passaggio di hardening e solidità forense su tuxresponse.sh:
YYYYMMDDTHHMMSSZ) anziché l'ora locale, per una timestamp difendibile.evidence/manifest.txt; le immagini disco ottengono un file .sha256 gemello.modified_files_period_select non usa più touch per creare un file timestamp sul filesystem target (che contaminava atime/mtime di /tmp prima della scansione find). Ora usa find / -xdev -newermt "1 $opt ago".eval ${DD_CMD} in _create_disk_image; il pipeline dd/ssh viene eseguito direttamente e il dispositivo sorgente viene validato con prima dell'uso.Nota: la modalità a menu dipende ancora da
.cmds.sh,.menu_en.sheforensics.sh, che non sono presenti in questo repository. La ricostruzione del catalogo comandi/menu è tracciata come sforzo separato.
^/dev/[a-zA-Z0-9]+$dump_process_select verifica che il PID sia numerico e che /proc/<pid> esista prima di invocare gcore.exec_CMD non usa più eval; i comandi shell-pipeline dal catalogo interno vengono inviati tramite bash -c.set -euo pipefail e le variabili globali inizializzate in anticipo.DISTO → DISTRO nel ramo di rilevamento di Arch Linux (in precedenza rinominato silenziosamente la distribuzione in modo errato).apt-get install netstat → net-tools.evidence/*.txt tramite glob (niente più parsing con ls) e salta il manifest; variabili di output quotate.VERSION='1.1'; il banner stampa la versione.shellcheck -S error è pulito.