Linux Forensics
Last updated
Last updated
Use Trickest para construir e automatizar fluxos de trabalho facilmente com as ferramentas comunitárias mais avançadas do mundo. Acesse hoje:
Primeiramente, é recomendado ter um USB com binários e bibliotecas bem conhecidos (você pode apenas pegar o ubuntu e copiar as pastas /bin, /sbin, /lib, e /lib64), então monte o USB e modifique as variáveis de ambiente para usar esses binários:
Uma vez que você tenha configurado o sistema para usar binários bons e conhecidos, você pode começar a extrair algumas informações básicas:
Ao obter as informações básicas, você deve verificar coisas estranhas, como:
Processos root geralmente são executados com PIDS baixos, então se você encontrar um processo root com um PID grande, pode suspeitar
Verifique os logins registrados de usuários sem um shell dentro de /etc/passwd
Verifique os hashes de senha dentro de /etc/shadow
para usuários sem um shell
Para obter a memória do sistema em execução, é recomendado usar LiME. Para compilá-lo, você precisa usar o mesmo kernel que a máquina vítima está usando.
Lembre-se de que você não pode instalar LiME ou qualquer outra coisa na máquina vítima, pois isso fará várias alterações nela
Então, se você tiver uma versão idêntica do Ubuntu, pode usar apt-get install lime-forensics-dkms
Em outros casos, você precisa baixar LiME do github e compilá-lo com os cabeçalhos de kernel corretos. Para obter os cabeçalhos de kernel exatos da máquina vítima, você pode simplesmente copiar o diretório /lib/modules/<versão do kernel>
para sua máquina e, em seguida, compilar LiME usando-os:
LiME suporta 3 formatos:
Raw (cada segmento concatenado)
Padded (igual ao raw, mas com zeros nos bits à direita)
Lime (formato recomendado com metadados)
LiME também pode ser usado para enviar o dump via rede em vez de armazená-lo no sistema usando algo como: path=tcp:4444
Primeiro de tudo, você precisará desligar o sistema. Isso nem sempre é uma opção, pois às vezes o sistema será um servidor de produção que a empresa não pode se dar ao luxo de desligar.
Existem 2 maneiras de desligar o sistema, um desligamento normal e um desligamento "desconectar da tomada". O primeiro permitirá que os processos sejam encerrados normalmente e o sistema de arquivos seja sincronizado, mas também permitirá que o possível malware destrua evidências. A abordagem "desconectar da tomada" pode acarretar alguma perda de informação (não muita informação será perdida, pois já tiramos uma imagem da memória) e o malware não terá oportunidade de fazer nada a respeito. Portanto, se você suspeitar que pode haver um malware, apenas execute o comando sync
no sistema e desconecte da tomada.
É importante notar que antes de conectar seu computador a qualquer coisa relacionada ao caso, você precisa ter certeza de que ele será montado como somente leitura para evitar modificar qualquer informação.
Imagens de uma imagem de disco sem mais dados.
Use Trickest para construir e automatizar fluxos de trabalho facilmente, impulsionados pelas ferramentas comunitárias mais avançadas do mundo. Acesse hoje:
O Linux oferece ferramentas para garantir a integridade dos componentes do sistema, crucial para identificar arquivos potencialmente problemáticos.
Sistemas baseados em RedHat: Use rpm -Va
para uma verificação abrangente.
Sistemas baseados em Debian: dpkg --verify
para verificação inicial, seguido de debsums | grep -v "OK$"
(após instalar debsums
com apt-get install debsums
) para identificar quaisquer problemas.
Leia a página a seguir para aprender sobre ferramentas que podem ser úteis para encontrar malware:
Malware AnalysisPara pesquisar efetivamente programas instalados em sistemas Debian e RedHat, considere aproveitar logs do sistema e bancos de dados juntamente com verificações manuais em diretórios comuns.
Para Debian, inspecione /var/lib/dpkg/status
e /var/log/dpkg.log
para obter detalhes sobre instalações de pacotes, usando grep
para filtrar informações específicas.
Usuários do RedHat podem consultar o banco de dados RPM com rpm -qa --root=/mntpath/var/lib/rpm
para listar pacotes instalados.
Para descobrir software instalado manualmente ou fora desses gerenciadores de pacotes, explore diretórios como /usr/local
, /opt
, /usr/sbin
, /usr/bin
, /bin
, e /sbin
. Combine listagens de diretórios com comandos específicos do sistema para identificar executáveis não associados a pacotes conhecidos, aprimorando sua busca por todos os programas instalados.
Use Trickest para construir e automatizar fluxos de trabalho facilmente, impulsionados pelas ferramentas comunitárias mais avançadas do mundo. Acesse hoje:
Imagine um processo que foi executado de /tmp/exec e depois deletado. É possível extraí-lo
Caminhos onde um malware poderia ser instalado como um serviço:
/etc/inittab: Chama scripts de inicialização como rc.sysinit, direcionando para scripts de inicialização.
/etc/rc.d/ e /etc/rc.boot/: Contêm scripts para inicialização de serviços, sendo o último encontrado em versões mais antigas do Linux.
/etc/init.d/: Usado em certas versões do Linux como Debian para armazenar scripts de inicialização.
Os serviços também podem ser ativados via /etc/inetd.conf ou /etc/xinetd/, dependendo da variante do Linux.
/etc/systemd/system: Um diretório para scripts do gerenciador de sistema e serviços.
/etc/systemd/system/multi-user.target.wants/: Contém links para serviços que devem ser iniciados em um nível de execução multiusuário.
/usr/local/etc/rc.d/: Para serviços personalizados ou de terceiros.
~/.config/autostart/: Para aplicativos de inicialização automática específicos do usuário, que podem ser um esconderijo para malware direcionado ao usuário.
/lib/systemd/system/: Arquivos de unidade padrão do sistema fornecidos por pacotes instalados.
Módulos do kernel Linux, frequentemente utilizados por malware como componentes de rootkit, são carregados na inicialização do sistema. Os diretórios e arquivos críticos para esses módulos incluem:
/lib/modules/$(uname -r): Contém módulos para a versão do kernel em execução.
/etc/modprobe.d: Contém arquivos de configuração para controlar o carregamento de módulos.
/etc/modprobe e /etc/modprobe.conf: Arquivos para configurações globais de módulos.
O Linux emprega vários arquivos para executar automaticamente programas ao fazer login do usuário, potencialmente abrigando malware:
/etc/profile.d/*, /etc/profile, e /etc/bash.bashrc: Executados para qualquer login de usuário.
~/.bashrc, ~/.bash_profile, ~/.profile, e ~/.config/autostart: Arquivos específicos do usuário que são executados ao fazer login.
/etc/rc.local: Executa após todos os serviços do sistema terem sido iniciados, marcando o fim da transição para um ambiente multiusuário.
Sistemas Linux rastreiam atividades de usuários e eventos do sistema através de vários arquivos de log. Esses logs são fundamentais para identificar acessos não autorizados, infecções por malware e outros incidentes de segurança. Os principais arquivos de log incluem:
/var/log/syslog (Debian) ou /var/log/messages (RedHat): Capturam mensagens e atividades em todo o sistema.
/var/log/auth.log (Debian) ou /var/log/secure (RedHat): Registram tentativas de autenticação, logins bem-sucedidos e falhados.
Use grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log
para filtrar eventos de autenticação relevantes.
/var/log/boot.log: Contém mensagens de inicialização do sistema.
/var/log/maillog ou /var/log/mail.log: Registra atividades do servidor de email, útil para rastrear serviços relacionados a email.
/var/log/kern.log: Armazena mensagens do kernel, incluindo erros e avisos.
/var/log/dmesg: Contém mensagens do driver de dispositivo.
/var/log/faillog: Registra tentativas de login falhadas, auxiliando em investigações de violação de segurança.
/var/log/cron: Registra execuções de trabalhos cron.
/var/log/daemon.log: Rastreia atividades de serviços em segundo plano.
/var/log/btmp: Documenta tentativas de login falhadas.
/var/log/httpd/: Contém logs de erro e acesso do Apache HTTPD.
/var/log/mysqld.log ou /var/log/mysql.log: Registra atividades do banco de dados MySQL.
/var/log/xferlog: Registra transferências de arquivos FTP.
/var/log/: Sempre verifique se há logs inesperados aqui.
Os logs do sistema Linux e subsistemas de auditoria podem ser desativados ou excluídos em um incidente de intrusão ou malware. Como os logs em sistemas Linux geralmente contêm algumas das informações mais úteis sobre atividades maliciosas, intrusos rotineiramente os excluem. Portanto, ao examinar os arquivos de log disponíveis, é importante procurar lacunas ou entradas fora de ordem que possam ser uma indicação de exclusão ou adulteração.
O Linux mantém um histórico de comandos para cada usuário, armazenado em:
~/.bash_history
~/.zsh_history
~/.zsh_sessions/*
~/.python_history
~/.*_history
Além disso, o comando last -Faiwx
fornece uma lista de logins de usuários. Verifique-o para logins desconhecidos ou inesperados.
Verifique arquivos que podem conceder privilégios extras:
Revise /etc/sudoers
para privilégios de usuário não antecipados que podem ter sido concedidos.
Revise /etc/sudoers.d/
para privilégios de usuário não antecipados que podem ter sido concedidos.
Examine /etc/groups
para identificar quaisquer associações ou permissões de grupo incomuns.
Examine /etc/passwd
para identificar quaisquer associações ou permissões de grupo incomuns.
Alguns aplicativos também geram seus próprios logs:
SSH: Examine ~/.ssh/authorized_keys e ~/.ssh/known_hosts para conexões remotas não autorizadas.
Gnome Desktop: Verifique ~/.recently-used.xbel para arquivos acessados recentemente via aplicativos Gnome.
Firefox/Chrome: Verifique o histórico do navegador e downloads em ~/.mozilla/firefox ou ~/.config/google-chrome para atividades suspeitas.
VIM: Revise ~/.viminfo para detalhes de uso, como caminhos de arquivos acessados e histórico de pesquisa.
Open Office: Verifique o acesso recente a documentos que pode indicar arquivos comprometidos.
FTP/SFTP: Revise logs em ~/.ftp_history ou ~/.sftp_history para transferências de arquivos que podem ser não autorizadas.
MySQL: Investigue ~/.mysql_history para consultas MySQL executadas, potencialmente revelando atividades não autorizadas no banco de dados.
Less: Analise ~/.lesshst para histórico de uso, incluindo arquivos visualizados e comandos executados.
Git: Examine ~/.gitconfig e projeto .git/logs para alterações em repositórios.
usbrip é um pequeno software escrito em Python 3 puro que analisa arquivos de log do Linux (/var/log/syslog*
ou /var/log/messages*
dependendo da distribuição) para construir tabelas de histórico de eventos USB.
É interessante saber todos os USBs que foram usados e será mais útil se você tiver uma lista autorizada de USBs para encontrar "eventos de violação" (o uso de USBs que não estão dentro dessa lista).
Mais exemplos e informações dentro do github: https://github.com/snovvcrash/usbrip
Use Trickest para construir e automatizar fluxos de trabalho facilmente, impulsionados pelas ferramentas comunitárias mais avançadas do mundo. Acesse hoje:
Examine o /etc/passwd, /etc/shadow e logs de segurança em busca de nomes ou contas incomuns criadas e ou usadas em estreita proximidade com eventos não autorizados conhecidos. Além disso, verifique possíveis ataques de força bruta sudo. Além disso, verifique arquivos como /etc/sudoers e /etc/groups em busca de privilégios inesperados concedidos a usuários. Finalmente, procure contas com sem senhas ou senhas facilmente adivinháveis.
Ao investigar incidentes de malware, a estrutura do sistema de arquivos é uma fonte crucial de informações, revelando tanto a sequência de eventos quanto o conteúdo do malware. No entanto, os autores de malware estão desenvolvendo técnicas para dificultar essa análise, como modificar timestamps de arquivos ou evitar o sistema de arquivos para armazenamento de dados.
Para combater esses métodos anti-forenses, é essencial:
Realizar uma análise de linha do tempo completa usando ferramentas como Autopsy para visualizar linhas do tempo de eventos ou mactime
do Sleuth Kit para dados detalhados de linha do tempo.
Investigar scripts inesperados no $PATH do sistema, que podem incluir scripts shell ou PHP usados por atacantes.
Examinar /dev
em busca de arquivos atípicos, pois tradicionalmente contém arquivos especiais, mas pode abrigar arquivos relacionados a malware.
Procurar arquivos ou diretórios ocultos com nomes como ".. " (ponto ponto espaço) ou "..^G" (ponto ponto controle-G), que podem ocultar conteúdo malicioso.
Identificar arquivos setuid root usando o comando: find / -user root -perm -04000 -print
Isso encontra arquivos com permissões elevadas, que podem ser abusadas por atacantes.
Revisar timestamps de exclusão em tabelas de inode para detectar exclusões em massa de arquivos, possivelmente indicando a presença de rootkits ou trojans.
Inspecionar inodes consecutivos em busca de arquivos maliciosos próximos após identificar um, pois podem ter sido colocados juntos.
Verificar diretórios binários comuns (/bin, /sbin) em busca de arquivos recentemente modificados, pois estes podem ter sido alterados por malware.
Note que um atacante pode modificar o tempo para fazer arquivos parecerem legítimos, mas ele não pode modificar o inode. Se você descobrir que um arquivo indica que foi criado e modificado ao mesmo tempo que o restante dos arquivos na mesma pasta, mas o inode é inesperadamente maior, então os timestamps desse arquivo foram modificados.
Para comparar versões de sistema de arquivos e identificar mudanças, usamos comandos simplificados git diff
:
Para encontrar novos arquivos, compare dois diretórios:
Para conteúdo modificado, liste as alterações ignorando linhas específicas:
Para detectar arquivos deletados:
As opções de filtro (--diff-filter
) ajudam a restringir a mudanças específicas, como arquivos adicionados (A
), excluídos (D
) ou modificados (M
).
A
: Arquivos adicionados
C
: Arquivos copiados
D
: Arquivos excluídos
M
: Arquivos modificados
R
: Arquivos renomeados
T
: Mudanças de tipo (por exemplo, arquivo para symlink)
U
: Arquivos não mesclados
X
: Arquivos desconhecidos
B
: Arquivos quebrados
Livro: Guia de Campo de Forense de Malware para Sistemas Linux: Guias de Campo de Forense Digital
Use Trickest para construir e automatizar fluxos de trabalho facilmente, impulsionados pelas ferramentas comunitárias mais avançadas do mundo. Obtenha Acesso Hoje:
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)