2.5 Comparando arquivos

Lição 20/50 | Tempo de Estudo: 15 Min

A comparação de arquivos pode parecer irrelevante, mas administradores de sistemas, engenheiros de rede, PenTester, técnicos de suporte de TI e muitos outros profissionais com orientação técnica contam com essa habilidade com bastante frequência.

Daremos uma olhada em algumas ferramentas que podem ajudar a simplificar o processo frequentemente tedioso, mas importantes para comparação de arquivos.


comm


A ferramenta comm é muito útil para comparar arquivos line-by-line, principalmente quando os dados já estão pré-ordenados. No contexto do Blue Team, onde a análise de logs, listas de IPs, ou registros de sistemas é comum, o comm pode auxiliá-lo a identificar discrepâncias e pontos de atenção.

Ele gera três colunas de deslocamento de espaço: a primeira contém linhas que são exclusivas do primeiro arquivo ou argumento; a segunda contém linhas que são exclusivas do segundo arquivo ou argumento; e a terceira coluna contém linhas que são compartilhadas por ambos os arquivos. A opção `-n`, onde “n” é 1, 2 ou 3, pode ser usada para suprimir uma ou mais colunas, dependendo da necessidade.  A seguir, apresento alguns exemplos práticos de uso do comando comm com ênfase em cenários típicos de segurança.

Cenário 1: Lista de IPs


- Arquivo: suspeitos.txt
    - Cada linha representa um IP suspeito.
    - Conteúdo:

vim suspeitos.txt
192.168.1.100
10.0.0.5
172.16.0.1
192.168.1.101


- Arquivo: autorizados.txt
    - Cada linha representa um IP autorizado.
    - Conteúdo:

vim autorizados.txt
192.168.1.101
192.168.1.102
10.0.0.5
192.168.1.103


O comando comm exige que os arquivos estejam ordenados. Vamos ordenar o arquivo  de IPs suspeitos e outro de IPs autorizados:


sort suspeitos.txt -o suspeitos_sorted.txt
sort autorizados.txt -o autorizados_sorted.txt


Observação: Após ordenar via sort, os comandos do comm funcionarão corretamente para detectar quais IPs estão presentes exclusivamente em um arquivo ou na interseção entre ambos.

Exemplo 1: Encontrar IPs Exclusivos na Lista de Suspeitos

Para identificar quais IPs aparecem apenas no arquivo de suspeitos e não no autorizado, use:


comm -23 suspeitos_ord.txt autorizados_ord.txt
172.16.0.1
192.168.1.100


- -2: Suprime as linhas somente no segundo arquivo (autorizados).
- -3: Suprime as linhas comuns aos dois arquivos.

Exemplo 2: Encontrar IPs presente nos dois arquivos

Para saber quais IPs estão tanto na lista de suspeitos quanto na autorizada, útil para identificar possíveis falsos positivos ou erros de categorização:


comm -12 suspeitos_ord.txt autorizados_ord.txt
10.0.0.5
192.168.1.101


- -1: Suprime as linhas somente no primeiro arquivo.
- -2: Suprime as linhas somente no segundo arquivo. Ou, alternativamente, usando a combinação para ficar apenas a coluna comum.






Cenário 2: Comparando Logs de Acesso ou de Sistema

Imaginem que você queira comparar dois logs de sistema para identificar entradas únicas que possam indicar tentativas de acesso suspeitas.

Arquivo: log_dia1.txt
    - Conteúdo:

vim log_dia1.txt
2025-03-24 08:45:01 Login successful user:admin
2025-03-24 09:10:22 Attempt failed user:guest
2025-03-24 10:05:33 File accessed: /etc/passwd
2025-03-24 11:22:10 Login successful user:john


- Arquivo: log_dia2.txt
    - Conteúdo:

vim log_dia2.txt

2025-03-25 08:45:01 Login successful user:admin
2025-03-25 09:15:00 Attempt failed user:guest
2025-03-25 10:05:33 File accessed: /etc/passwd
2025-03-25 12:00:00 Login successful user:maria


Esses arquivos deverão ser ordenados se os logs não estiverem em ordem cronológica ou se houver necessidade de normalizar os dados para comparação.


sort log_dia1.txt -o log_dia1_sorted.txt
sort log_dia2.txt -o log_dia2_sorted.txt


Exemplo 1

Agora, para listar as ocorrências exclusivas do dia 1 (que podem ser indício de atividade atípica):

comm -23 log_dia1_sorted.txt log_dia2_sorted.txt


E, para listar as entradas que aparecem somente no dia 2:


comm -13 log_dia1_sorted.txt log_dia2_sorted.txt


- -1: Suprime as linhas somente no primeiro arquivo.
- -3: Suprime as linhas comuns.

🎬 Olha o VAR:


Cenário 3: Listas de Hashes para Investigação - Incident Response 

Durante uma investigação, é comum ter diferentes listas contendo hashes de arquivos (ex.: hashes extraídos de sistemas comprometidos versus uma base de dados de hashes conhecidos, como de antivírus).

Listas de Hashes para Investigação


Arquivo: hashes_investigacao.txt
    - Exemplo de conteúdo: (hashes extraídos de arquivos suspeitos encontrados durante uma investigação).
    

vim hashes_investigacao.txt
d41d8cd98f00b204e9800998ecf8427e
9e107d9d372bb6826bd81d3542a419d6
e4d909c290d0fb1ca068ffaddf22cbd0


- Arquivo: hashes_conhecidos.txt
    - Conteúdo: hashes de arquivos conhecidos que fazem parte da base de dados ou de antivírus
    

vim hashes_conhecidos.txt
d41d8cd98f00b204e9800998ecf8427e
5eb63bbbe01eeed093cb22bb8f5acdc3


Ordene os arquivos de hashes antes de comparar:

sort hashes_investigacao.txt -o hashes_investigacao_sorted.txt
sort hashes_conhecidos.txt -o hashes_conhecidos_sorted.txt


Para identificar quais hashes foram encontrados durante a investigação, mas que não constam na base de dados dos arquivos conhecidos:


comm -23 hashes_investigacao_sorted.txt hashes_conhecidos_sorted.txt


Essa abordagem facilita o isolamento de arquivos possivelmente maliciosos ou manipulados.

🎬 Chamando o VAR:

Resumo dos Exemplos

- Ordenar arquivos: Uso do sort para garantir a pré-condição do comm.
- Extração de dados exclusivos: Utilizando -23 ou -13 para isolar linhas únicas.
- Comparação de listas (ex.: IPs, logs): Identificação de interseção ou divergência entre duas listas.

Usando esses exemplos práticos, você pode aprimorar a análise e triagem de dados em um ambiente de segurança, ajudando na rápida identificação de anomalias que podem ser indicativos de incidentes de segurança.

Considerações

- Ordenação é fundamental: Sem ela, os resultados podem ser inesperados, pois o comm pressupõe que os arquivos estejam em ordem.
- Combinação de Opções: A combinação das opções (-1, -2, -3) permite extrair exatamente a coluna de dados que interessa ao analista.
- Script Automation: Em um ambiente Blue Team, esses comandos podem ser incorporados em scripts de monitoramento para automatizar a detecção de discrepâncias em logs ou registros de rede.


diff

O comando diff é usado para detectar diferenças entre arquivos, similar ao comando comm. No entanto, diff é muito mais complexo e suporta muitos formatos de saída. Dois dos formatos mais populares incluem o formato de contexto (-c) e o formato unificado (-u). A listagem demonstra a diferença entre os dois formatos:

diff -c suspeitos.txt autorizados.txt

*** suspeitos.txt       2025-03-25 08:27:56.157615000 -0400
--- autorizados.txt     2025-03-25 08:28:41.145615000 -0400
***************
*** 1,4 ****
- 192.168.1.100
- 10.0.0.5
- 172.16.0.1
  192.168.1.101
--- 1,4 ----
  192.168.1.101
+ 192.168.1.102
+ 10.0.0.5
+ 192.168.1.103

Usando a opção -u:

diff -u suspeitos.txt autorizados.txt

--- suspeitos.txt       2025-03-25 08:27:56.157615000 -0400
+++ autorizados.txt     2025-03-25 08:28:41.145615000 -0400
@@ -1,4 +1,4 @@
-192.168.1.100
-10.0.0.5
-172.16.0.1
 192.168.1.101
+192.168.1.102
+10.0.0.5
+192.168.1.103

A saída usa o indicador “-” para mostrar que a linha aparece no primeiro arquivo, mas não no segundo.
Por outro lado, o indicador “+” mostra que a linha aparece no segundo arquivo, mas não no primeiro.

A diferença mais notável entre esses formatos é que o formato unificado não mostra linhas que correspondem entre arquivos, tornando os resultados mais curtos. Os indicadores têm significado idêntico em ambos os formatos.

vimdiff


vimdiff abre o vim com vários arquivos, um em cada janela. As diferenças entre os arquivos são destacadas, o que facilita a inspeção visual. Existem alguns atalhos que podem ser úteis. Por exemplo:

- do: obtém as alterações da outra janela na atual
- dp: coloca as alterações da janela atual na outra
- ]c: pula para a próxima alteração
- [c: pula para a alteração anterior
- CTRL  w: alterna para a outra janela dividida.


vimdiff suspeitos.txt autorizados.txt




André Albuquerque

André Albuquerque

Designer de Produto
4.00
Perfil

Sessões de Aula

1- 3.1 Netcat 2- 4.1 Introdução a comandos de rede no Linux 3- 5.1 Shell Script 4- Temas abordados 5- Temas Abordados 6- 1.1 Instalação do Linux 7- 1.3 Atividades Pós-Instalação 8- 1.4 Usuário root e Usuário comum 9- 1.2 Utilizando LVM 10- 1.5 Sistemas de Arquivos 11- 1.6 Comandos Básicos 12- 1.7 Procurando Arquivos 13- 1.8 Gerenciando Serviços no Linux 14- 1.9 Encontrando, instalando e removendo tools 15- 2.1 Ambiente do Shell 16- 2.2 Piping e redirecionamento 17- 2.3 Procurando texto e manipulação 18- 2.4 Editando arquivos 19- 2.5 Comparando arquivos 20- 2.6 Gerenciando processos 21- 2.7 Monitorando arquivos e comandos 22- 2.8 Baixando arquivos 23- Slide Módulo 2 24- 3.2 Socat 25- Atuar com Cyber Security 26- 6.1 Uma Introdução ao Docker 27- 4.2 Introdução a Análise de Rede 28- 4.3 Networking 29- 4.4 Portas e Serviços 30- 4.5 Análise com Wireshark 31- 4.6 Análise com tcpdump 32- 5.2 Variáveis 33- 5.3 Argumentos 34- 5.4 Lendo Entrada 35- 5.5 Estruturas condicionais if, else e elif 36- 5. 6 Loops 37- 5.7 Criando Menus 38- 5. 8 Funções 39- Exemplos Práticos 40- 6.2 Instalação do Docker no Windows e Linux. 41- 6.3 Imagens e Containers 42- 6.4 Mais Prática - Gerenciando Containers 43- 6.5 Criar conta/usuário no Docker Hub 44- 6.6 Docker Cleanup - Limpando a Casa 45- 6.7 Volumes Docker 46- 6.8 Redes no Docker - Isolamento e Segurança 47- 4.0 🔒 Fundamentos de Redes para Cybersecurity 48- 🎯 EXERCÍCIOS PRÁTICOS 49- 🎯 Wireshark - EXERCÍCIOS PRÁTICOS 50- 🎯 TcpDump- EXERCÍCIOS PRÁTICOS