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.
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.
- 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.
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.
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
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:
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.
diffO 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.103Usando 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.103A 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.
vimdiffvimdiff 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