
Script automatizado de resposta a incidentes Linux com triagem ao vivo, aquisição de memória (LiME), imageamento de disco, varredura YARA e geração de relatório HTML.
Resposta a Incidentes Linux

O TuxResponse é um script de resposta a incidentes para sistemas Linux escrito em bash. Ele pode automatizar atividades de resposta a incidentes em sistemas Linux e permitir que você trie sistemas rapidamente, sem comprometer os resultados. Normalmente, sistemas corporativos teriam algum tipo de monitoramento e controle, mas existem exceções devido a TI invisível e imagens não padronizadas implantadas nas empresas. O que equivale a digitar 10 comandos com testes de tentativa e erro, pode ser feito com o apertar de um botão.
Testado em:
Propósito principal:
Ferramentas externas no pacote:
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
}
Ao responder a incidentes, se você precisar instalar o LiME digitando manualmente todos os comando, isso irá atrasá-lo significativamente.
1) Informações do sistema, IP, Data, Hora, fuso horário local, última inicialização - 'hostnamectl; who -b; uname -a; uptime; ifconfig; date; last reboot'
1) Verificar sistemas de arquivos montados - 'df -h'
2) Hash de executáveis (MD5) - 'find /usr/bin -type f -exec file "{}" \; | grep -i "elf" | cut -f1 -d: | xargs -I "{}" -n 1 md5sum {}'
3) Arquivos modificados - 'modified_files_period_select' (chamando uma função em tuxresponse.sh)
4) Listar todos os diretórios ocultos - 'find / -type d -name "\.*"'
5) Arquivos/diretórios sem nome de usuário/grupo - 'find / \( -nouser -o -nogroup \) -exec ls -l {} \; 2>/dev/null'
6) Arquivos alterados de pacotes - 'packaged_files_changed' (chamando uma função em tuxresponse.sh)
1) Verificar rootkits - executa 'chkrootkit'
2) Varredura Yara - chamando uma função tuxresponse.sh 'yara_select' (varre o sistema com todas as regras YARA linux disponíveis no repositório master)
3) EXIFTool - chamando uma função tuxresponse.sh 'exiftool_select' (instala EXIFTool)
1) Listar processos em execução - 'ps -axu'
2) Binários deletados ainda em execução - 'ls -alR /proc/*/exe 2> /dev/null | grep deleted'
3) Conexões de Rede Ativas (TCP, UDP) - 'ss -tunap | sed "s/[ \t]\+/|/g"'
4) Despejar processo baseado no PID - 'dump_process_select' (chamando uma função em tuxresponse.sh)
1) Digite o PID para despejar: **(este é o comando executado - gcore -a -o "${DUMP_FILE}" ${DUMP_PID} )**
5) Processo executando a partir de /tmp, /dev - 'ls -alR /proc/*/cwd 2> /dev/null | grep -E "tmp|dev"'
1) Listar todas as conexões de rede ativas/sockets brutos - 'netstat -nalp; netstat -plant'
1) Listar todos os usuários conectados ao sistema - 'w'
2) Obter usuários com senhas - 'getent passwd'
1) Verificar arquivo de histórico bash - 'cat ~/.bash_history | nl'
1) Listar Todos os Cron Jobs - 'list_all_crontab' (chamando uma função em tuxresponse.sh)
2) Listar Todos os Programas de Inicialização - 'list_all_onstartup' (chamando uma função em tuxresponse.sh)
1) Despejar .bash_history dos usuários - 'cat_all_bash_history' (chamando uma função em tuxresponse.sh)
2) Encontrar logs com binário dentro - 'grep [[:cntrl:]] /var/log/*.log'
Essa opção permite que você se conecte a um sistema remoto, copie todos os scripts e ferramentas e analise o sistema.
Essa opção permite compilar o LiME a partir da fonte e despejar a RAM do sistema. Esta é a maneira mais fácil, já que a alternativa seria compilar a partir da fonte para todas as principais versões do kernel e inserir o LKM.
Essa opção permite criar uma imagem completa do disco do sistema alvo usando a ferramenta conhecida - dd. A função recebe a origem e o destino como parâmetros e os insere no seguinte comando 'dd if=${IMAGE_IN} | pv | dd of='${IMAGE_OUT}' bs=4K conv=noerror,sync'. Se você estiver investigando um sistema remoto, o script se copiará para lá. Então, se o parâmetro ${TARGET_HOST} estiver definido, o script baixará a imagem para o sistema do analista usando este comando >> "ssh -p${TARGET_PORT} ${TARGET_USER}@${TARGET_HOST} 'dd if=${IMAGE_IN} bs=4K conv=noerror,sync' | pv | dd of='${IMAGE_OUT}'" (estou usando muito pv para garantir que o progresso seja rastreado)
Tudo que você faz é registrado em arquivos de texto, facilitando voltar e visualizar a saída. A beleza disso é que você pode enviar para suas ferramentas de análise de logs favoritas e dar sentido a elas posteriormente. Além disso, você pode usar essa função para gerar um relatório HTML e visualizar a saída gerada pelos comandos de uma forma mais legível.
Instalar binários necessários para o funcionamento correto do script.
1) Dependências
2) Yara e regras
3) ExifTool
4) Verificação de inicialização
5) chckrootkit
6) LiME
Passagem de endurecimento e solidez forense em tuxresponse.sh:
YYYYMMDDTHHMMSSZ) em vez de hora local, para carimbo de data/hora defensável.evidence/manifest.txt; imagens de disco recebem um arquivo .sha256 irmão.modified_files_period_select não usa mais touch em um arquivo de carimbo no sistema de arquivos alvo (o que contaminava atime/mtime de /tmp antes da varredura find). Agora usa find / -xdev -newermt "1 $opt ago".eval ${DD_CMD} em _create_disk_image; o pipeline dd/ssh é executado diretamente, e o dispositivo de origem é validado em relação a antes do uso.Nota: o modo orientado por menu ainda depende de
.cmds.sh,.menu_en.sheforensics.sh, que não estão presentes neste repositório. Reconstruir o catálogo de comandos/menu é rastreado como um esforço separado.
^/dev/[a-zA-Z0-9]+$dump_process_select valida que o PID é numérico e que /proc/<pid> existe antes de invocar gcore.exec_CMD não usa mais eval; comandos de pipeline shell do catálogo interno são despachados via bash -c.set -euo pipefail com globals inicializadas de antemão.DISTO → DISTRO no ramo de detecção do Arch Linux (anteriormente renomeava silenciosamente a distribuição).apt-get install netstat → net-tools.evidence/*.txt via glob (sem mais parsing de ls) e pula o manifesto; variáveis de saída entre aspas.VERSION='1.1'; banner exibe a versão.shellcheck -S error está limpo.