Identificação de Indicadores de Malware em Linux

CompTIABeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá técnicas fundamentais para identificar potenciais indicadores de malware em um sistema Linux. Através de uma série de exercícios práticos, você utilizará utilitários de linha de comando padrão para investigar sinais comuns de comprometimento, adquirindo habilidades práticas em monitoramento de sistema e análise forense básica.

Você começará observando atividades suspeitas de processos, aprendendo a identificar picos incomuns de CPU e memória que podem sinalizar um processo malicioso. Em seguida, focará no sistema de arquivos para detectar criações e modificações inesperadas de arquivos, um indicador chave de atividade não autorizada. Finalmente, praticará a análise de logs do sistema para encontrar entradas anômalas que possam indicar uma violação de segurança.

Observar Atividade Suspeita de Processos para Picos de CPU e Memória

Nesta etapa, você aprenderá a usar utilitários padrão do Linux para monitorar processos do sistema em busca de picos incomuns de uso de CPU e memória. Um consumo repentino e alto de recursos é um indicador comum de software malicioso (malware), um processo comprometido ou uma aplicação com mau funcionamento. Usaremos o comando top para monitoramento em tempo real e a ferramenta stress para simular com segurança um cenário de alta carga. Todos os comandos serão executados a partir do seu diretório ~/project.

Primeiro, você precisa instalar o utilitário stress, pois ele não está incluído no sistema base. Usaremos o gerenciador de pacotes apt-get. O primeiro comando atualiza sua lista de pacotes e o segundo instala o stress.

sudo apt-get update
sudo apt-get install stress -y

Após a conclusão da instalação, vamos estabelecer uma linha de base visualizando os processos atuais no sistema. O comando top fornece uma visão dinâmica e em tempo real do sistema em execução.

top

Você verá uma interface em tela cheia que se atualiza continuamente. Preste atenção às colunas %CPU (uso de CPU) e %MEM (uso de memória). Em condições normais, esses valores devem ser relativamente baixos para a maioria dos processos. Pressione a tecla q para sair do top e retornar ao seu prompt de comando.

top - 16:20:42 up 10 min,  1 user,  load average: 0.00, 0.01, 0.00
Tasks: 100 total,   1 running,  99 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1987.2 total,    845.5 free,    450.1 used,    691.6 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   1355.2 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
      1 root      20   0  169404  13120   8484 S   0.0   0.6   0:01.55 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd
...

Agora, vamos simular um processo suspeito que consome uma grande quantidade de CPU. Usaremos stress para iniciar um worker que realizará cálculos intensivos de CPU por 60 segundos. O & no final executa o comando em segundo plano, permitindo que você continue usando o terminal.

stress --cpu 1 --timeout 60 &

Você verá um ID de processo (PID) para o trabalho em segundo plano. Agora, execute top rapidamente novamente para observar o efeito.

top

Desta vez, você deverá ver o processo stress no topo da lista ou próximo a ele, com seu valor de %CPU próximo a 100.0. É exatamente isso que você procuraria ao caçar um processo que está consumindo toda a CPU. Após 60 segundos, o processo stress será encerrado automaticamente. Pressione q para sair do top.

Em seguida, vamos simular um processo que consome uma grande quantidade de memória. Este comando iniciará um worker que alocará 256 Megabytes de memória e a manterá por 60 segundos.

stress --vm 1 --vm-bytes 256M --timeout 60 &

Novamente, execute top imediatamente para ver o impacto.

top

Na saída do top, localize o processo stress. Desta vez, seu %CPU será baixo, mas seu valor de %MEM será significativamente maior do que outros processos, demonstrando um vazamento de memória ou um ataque intensivo em memória. Esta técnica ajuda você a identificar o consumo anômalo de recursos que justifica uma investigação mais aprofundada. Pressione q para sair.

Detectar Criações e Modificações Inesperadas de Arquivos

Nesta etapa, você aprenderá a detectar atividades suspeitas no sistema de arquivos, como a criação ou modificação inesperada de arquivos. Atacantes frequentemente criam ou alteram arquivos para estabelecer persistência, armazenar payloads maliciosos ou adulterar configurações do sistema. Usaremos duas ferramentas poderosas de linha de comando: find para buscar arquivos com base em seus tempos de modificação, e inotifywait para realizar o monitoramento em tempo real de eventos de diretório. Todas as operações ocorrerão no seu diretório ~/project.

Primeiro, vamos usar o comando find para localizar arquivos que foram modificados recentemente. Isso é útil para auditorias de segurança periódicas. Vamos criar um arquivo de configuração de exemplo para monitorar.

echo "SERVER_IP=192.168.1.1" > ~/project/app.conf

O comando find pode buscar arquivos com base em vários critérios. Usaremos a flag -mmin, que significa "modificado há minutos". O comando a seguir encontrará todos os arquivos no diretório atual (.) que foram modificados nos últimos 5 minutos.

find . -mmin -5

A saída listará o arquivo que você acabou de criar.

./app.conf

Agora, vamos simular um atacante modificando este arquivo de configuração.

echo "MALICIOUS_PAYLOAD=..." >> ~/project/app.conf

Se você executar o comando find novamente, ele mostrará app.conf mais uma vez porque seu tempo de modificação foi atualizado. Esta é uma maneira simples de identificar alterações recentes. Agora, vamos simular um atacante inserindo um novo arquivo, uma tática comum.

touch ~/project/hidden_script.sh

Execute o comando find mais uma vez.

find . -mmin -5

Agora ele lista tanto o arquivo modificado quanto o recém-criado, demonstrando como você pode identificar rapidamente a atividade recente do sistema de arquivos.

./app.conf
./hidden_script.sh

Embora o find seja útil para auditorias, ele não fornece alertas em tempo real. Para isso, podemos usar inotify-tools. Primeiro, você deve instalar o pacote.

sudo apt-get update
sudo apt-get install -y inotify-tools

O comando principal é inotifywait, que pode monitorar um arquivo ou diretório para eventos específicos. Vamos executá-lo no modo de monitoramento (-m) em nosso diretório ~/project. O & o executará como um processo em segundo plano para que você possa continuar usando seu terminal.

inotifywait -m ~/project &

O comando agora está observando silenciosamente as mudanças. Vamos realizar algumas ações para acioná-lo. Primeiro, crie um arquivo.

echo "new file" > ~/project/new_file.txt

Você verá imediatamente a saída do inotifywait relatando o evento CREATE.

/home/labex/project/ CREATE new_file.txt

Agora, modifique o arquivo.

echo "modified" >> ~/project/new_file.txt

A ferramenta relata um evento MODIFY.

/home/labex/project/ MODIFY new_file.txt

Finalmente, exclua o arquivo.

rm ~/project/new_file.txt

Você verá um evento DELETE. Este feedback em tempo real é inestimável para um Centro de Operações de Segurança (SOC) ou um sistema automatizado de detecção de intrusão.

/home/labex/project/ DELETE new_file.txt

Para parar o processo de monitoramento em segundo plano, você pode usar o comando pkill.

pkill inotifywait

Você usou com sucesso tanto find quanto inotifywait para detectar alterações no sistema de arquivos.

Analisar Logs do Sistema em Busca de Entradas Anômalas

Nesta etapa, você aprenderá a analisar logs do sistema para encontrar evidências de atividades suspeitas. Logs do sistema são registros de eventos que ocorrem no sistema e são uma fonte crítica de informação para monitoramento de segurança e análise forense. Focaremos em logs de autenticação, que rastreiam logins de usuários e escalonamentos de privilégios, e usaremos ferramentas padrão do Linux como grep, tail e journalctl para encontrar entradas anômalas.

A maioria dos logs do sistema em um sistema Linux é armazenada no diretório /var/log. Um dos mais importantes para segurança é /var/log/auth.log, que registra eventos relacionados à autenticação, incluindo logins SSH e uso do comando sudo. Vamos começar visualizando as últimas linhas deste arquivo usando o comando tail. Você precisa de sudo porque este arquivo é protegido.

sudo tail /var/log/auth.log

Você verá uma série de entradas com carimbo de data/hora. O formato geralmente inclui a data, hora, nome do host, o processo que gerou o log e a mensagem do evento.

Jul 22 10:30:01 labex-vm sudo:    labex : TTY=pts/0 ; PWD=/home/labex/project ; USER=root ; COMMAND=/usr/bin/tail /var/log/auth.log
Jul 22 10:30:01 labex-vm sudo: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
Jul 22 10:30:01 labex-vm sudo: pam_unix(sudo:session): session closed for user root

Agora, vamos simular um evento suspeito comum: uma tentativa de login falha. Atacantes frequentemente tentam adivinhar senhas para nomes de usuário válidos ou comuns. Podemos simular isso tentando fazer SSH em nossa própria máquina (localhost) com um nome de usuário que não existe, como baduser.

ssh baduser@localhost

O sistema solicitará uma senha (você pode usar labex como senha). Como o usuário não existe, qualquer senha falhará. Simplesmente pressione Ctrl+C para cancelar a solicitação de senha e retornar ao terminal. A tentativa de conexão falhará, mas será registrada.

Agora, vamos caçar as evidências. Podemos usar o comando grep para filtrar o arquivo auth.log em busca de linhas que contenham a palavra "Failed". Isso isola rapidamente eventos malsucedidos.

sudo grep "Failed" /var/log/auth.log

A saída agora mostrará claramente a entrada de log para nossa tentativa de login SSH falha, que é um forte indicador de uma potencial tentativa de intrusão.

Jul 22 10:35:15 labex-vm sshd[12345]: Failed password for invalid user baduser from 127.0.0.1 port 54321 ssh2

Sistemas Linux modernos que usam systemd também possuem um sistema de log centralizado gerenciado por journald. O comando journalctl é uma ferramenta poderosa para consultar esses logs. Vamos usá-lo para encontrar o mesmo evento de login falho, buscando por mensagens do processo sshd. Observe que você deve usar sudo para visualizar logs em nível de sistema.

sudo journalctl | grep sshd

Percorra a saída (usando as teclas de seta e pressione q para sair) e você encontrará a mesma entrada "Failed password". Para facilitar ainda mais, você pode filtrar por prioridade da mensagem. Vamos pedir ao journalctl para mostrar apenas entradas com prioridade "error" (err) ou superior para o serviço sshd.

sudo journalctl -p err | grep sshd

Este comando oferece uma visualização muito mais concisa apenas das condições de erro, tornando-o muito eficiente para identificar problemas.

-- Logs begin at ... --
Jul 22 10:35:15 labex-vm sshd[12345]: Failed password for invalid user baduser from 127.0.0.1 port 54321 ssh2
-- End of logs --

Finalmente, você também pode injetar manualmente mensagens nos logs usando o comando logger. Isso é útil para scripts personalizados relatarem eventos de segurança. Vamos criar um alerta personalizado.

logger "SECURITY-ALERT: Unauthorized file access detected in /etc"

Agora, procure por este alerta específico nos logs do sistema.

sudo grep "SECURITY-ALERT" /var/log/syslog

Você verá sua mensagem personalizada, demonstrando como você pode integrar seu próprio monitoramento com o sistema de registro do sistema.

Jul 22 10:40:00 labex-vm labex: SECURITY-ALERT: Unauthorized file access detected in /etc

Você agora aprendeu os conceitos básicos de navegação em logs do sistema para encontrar evidências de atividades anômalas e potencialmente maliciosas.

Resumo

Neste laboratório, você aprendeu técnicas essenciais para identificar indicadores de malware em um sistema Linux. Você praticou como observar atividades suspeitas de processos usando o comando top para monitorar picos anormais de CPU e memória. Para entender como isso se parece em um cenário do mundo real, você usou o utilitário stress para simular um processo de alta carga e comparou seu consumo de recursos com uma linha de base normal do sistema.

O laboratório também abordou como detectar criações e modificações inesperadas de arquivos, que são sinais comuns de um sistema comprometido. Finalmente, você aprendeu a analisar logs do sistema em busca de entradas anômalas, uma habilidade crucial para encontrar evidências de acesso não autorizado, configurações incorretas ou outros eventos relacionados à segurança.