Módulo 6 - Roteiro 1
Tarefas
No final deste módulo você deve submeter em um ÚNICO arquivo PDF os seguintes prints:
- Atividade 6.1: passo 8.
- Atividade 6.2: passo 7.
- Atividade 6.3: passo 8.
- Atividade 6.4: passo 6.
- Atividade 6.5: passo 8.
IMPORTANTE:
Antes de iniciar esta atividade vamos liberar um pouco de espaço no disco da VM Kali Linux e para isso vamos limpar o repositório do apt e configurar o tempo de armazenamento de logs para 1 dia.
┌──(aluno㉿kali)-[~]
└─$ sudo apt clean
└─$ sudo apt autoremove
└─$ sudo journalctl --vacuum-time=1d
Atividade 6.1 – Exemplo de Reuso de Código em Python no Kali Linux
Nesta atividade, vamos usar o Kali Linux para exemplificar um caso de Reuso de Código em Python para o redimensionamento de figuras em processamento de imagens. Vamos começar inicializando nosso Kali Linux.
1) Abra o Terminal e execute o seguinte comando para ser super usuário:
┌──(aluno㉿kali)-[~]
└─$ sudo -i
[sudo] senha para aluno:
2) Navegue até a pasta Documentos:
┌──(root㉿kali)-[~]
└─# cd /home/aluno/Documentos
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# ls
3) Baixe a imagem My_shoe.jpg via Terminal:
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# wget https://upload.wikimedia.org/wikipedia/commons/0/01/My_shoe.jpg
--2024-02-13 17:24:33-- https://upload.wikimedia.org/wikipedia/commons/0/01/My_shoe.jpg
Resolvendo upload.wikimedia.org (upload.wikimedia.org)... 208.80.154.240, 2620:0:861:ed1a::2:b
Conectando-se a upload.wikimedia.org (upload.wikimedia.org)|208.80.154.240|:443... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: 1297035 (1,2M) [image/jpeg]
Salvando em: “My_shoe.jpg”
My_shoe.jpg 100%[==========================================>] 1,24M --.-KB/s em 0,1s
2024-02-13 17:24:33 (8,28 MB/s) - “My_shoe.jpg” salvo [1297035/1297035]
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# ls
My_shoe.jpg
4) Agora, abra o Thunar (clique em “Aplicativos” --> “Gerenciador de arquivos”), navegue até "/home/aluno/Documentos" e com 2 cliques visualize o arquivo My_shoe.jpg. Após a visualização, feche o Visualizador de Imagens.
5) Abra o programa Editor de Texto Mousepad (clique em “Aplicativos” --> “Aplicações habituais” --> “Acessórios” --> “Editor de Texto”) e cole o seguinte código em Python:
from PIL import Image
# Abre uma imagem existente
imagem_original = Image.open("My_shoe.jpg")
# Redimensiona a imagem para 300x300 pixels
imagem_redimensionada = imagem_original.resize((300, 300))
# Salva a imagem redimensionada
imagem_redimensionada.save("My_shoe_redimensionado.jpg")
# Fecha a imagem original
imagem_original.close()
O código mostrado acima faz o reuso de código utilizando componentes de software já testados e validados, em vez de criar funcionalidades do zero. Veja os detalhes do código mostrado acima:
- from PIL import Image: Importa a classe Image da biblioteca Pillow, que é usada para trabalhar com imagens.
- imagem_original = Image.open("My_shoe.jpg"): Abre uma imagem chamada "My_shoe.jpg" no diretório atual. A imagem original é carregada e atribuída à variável imagem_original.
- imagem_redimensionada = imagem_original.resize((300, 300)): O método resize() é chamado na imagem original (imagem_original) para redimensioná-la para uma nova dimensão de 300x300 pixels. O resultado do redimensionamento é atribuído à variável imagem_redimensionada.
- imagem_redimensionada.save("My_shoe_redimensionado.jpg"): Salva a imagem redimensionada no arquivo "My_shoe_redimensionado.jpg" no diretório atual. A imagem redimensionada é escrita no disco com o novo nome.
- imagem_original.close(): Fecha o arquivo da imagem original após ter sido carregado e redimensionado. Isso é uma boa prática para liberar recursos após a manipulação de imagens.
6) Salve o código (clique em “Arquivo” --> “Salvar Como”) na pasta Documentos (/home/aluno/Documentos) com o nome redimensionar_imagem.py. Não se esqueça de mudar a opção “Arquivos de Texto” para “Todos os arquivos”, acima do botão “Salvar”.
7) Feche o Editor de Texto Mousepad e volte ao Terminal. Execute o código criado no passo 5:
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# python redimensionar_imagem.py
8) Neste momento, uma nova imagem do tamanho de 300x300 pixels deve ter sido criada. Confira (NÃO SE ESQUEÇA DE PRINTAR ESTE PASSO!):
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# ls
My_shoe.jpg My_shoe_redimensionado.jpg redimensionar_imagem.py
9) Volte à janela do Thunar e visualize o arquivo My_shoe_redimensionado.jpg. Veja que esse arquivo é muito menor que o arquivo original My_show.jpg.
10) Apague os arquivos usados na pasta Documentos, feche o Thunar e o Terminal:
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# rm *
zsh: sure you want to delete all 3 files in /home/aluno/Documentos [yn]? y
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# ls
Atividade 6.2 – Conhecendo o SDK do Java (JDK) e um IDE no Kali Linux
Nesta atividade, vamos usar o Kali Linux para instalar o SDK do Java, conhecido como Java Development Kit (JDK), e o IDE Netbeans.
Vamos começar inicializando nosso Kali Linux.
1) Abra o Terminal e execute o seguinte comando para ser super usuário:
┌──(aluno㉿kali)-[~]
└─$ sudo -i
[sudo] senha para aluno:
2) No seu laboratório, você terá o JDK funcionando. Verifique a versão do seu JDK (os valores apresentados podem ser diferentes):
┌──(root㉿kali)-[~]
└─# java --version
openjdk 23-ea 2024-09-17
OpenJDK Runtime Environment (build 23-ea+20-Debian-1)
OpenJDK 64-Bit Server VM (build 23-ea+20-Debian-1, mixed mode, sharing)
3) Navegue até a pasta Netbeans do nosso curso:
┌──(root㉿kali)-[~]
└─# cd /curso/netbeans
4) Verifique que o arquivo está presente na pasta Netbeans:
┌──(root㉿kali)-[/home/curso/netbeans]
└─# ls
apache-netbeans_19-1_all.deb
5) Em seguida, instalaremos o arquivo baixado com o comando dpkg:
┌──(root㉿kali)-[/curso/netbeans]
└─# dpkg -i apache-netbeans_19-1_all.deb
Selecionando pacote previamente não selecionado apache-netbeans.
(Lendo banco de dados ... 364754 arquivos e diretórios atualmente instalados).
Preparando para desempacotar apache-netbeans_19-1_all.deb ...
Desempacotando apache-netbeans (19-1) ...
Configurando apache-netbeans (19-1) ...
Processando gatilhos para kali-menu (2025.3.2) ...
Processando gatilhos para desktop-file-utils (0.28-1) ...
Processando gatilhos para hicolor-icon-theme (0.18-2) ...
6) Na barra de tarefas superior, abra o Apache NetBeans (clique em “Aplicativos” --> “Aplicativos habituais” --> “Desenvolvimento” --> “Apache NetBeans”).
7) O NetBeans IDE será aberto. (NÃO SE ESQUEÇA DE PRINTAR ESTE PASSO!)
8) Feche o Apache NetBeans e o Terminal.
Atividade 6.3 – Automação de Tarefas com Python no Kali Linux
Nesta atividade, vamos usar o Python para automatizar tarefas no Kali Linux.
Vamos começar inicializando nosso Kali Linux.
1) Abra o Terminal e execute o seguinte comando para ser super usuário:
┌──(aluno㉿kali)-[~]
└─$ sudo -i
[sudo] senha para aluno:
2) Abra o programa Editor de Texto Mousepad (clique em “Aplicativos” --> “Aplicações habituais” --> “Acessórios” --> “Editor de Texto”) e cole o seguinte código em Python:
import os
import socket
# Função para coletar informações do sistema
def coletar_informacoes_sistema():
hostname = socket.gethostname()
kernel_version = os.uname().release
cpu_info = os.popen('cat /proc/cpuinfo | grep "model name" | uniq').read().strip()
mem_info = os.popen('free -h | grep "Mem.:"').read().strip()
disk_space = os.popen('df -h').read()
informacoes = {
"Hostname": hostname,
"Kernel Version": kernel_version,
"CPU Info": cpu_info,
"Memory Info": mem_info,
"Disk Space": disk_space
}
return informacoes
# Função para gerar um relatório
def gerar_relatorio(informacoes):
relatorio = "Relatório do Sistema Linux\n\n"
for chave, valor in informacoes.items():
relatorio += f"{chave}: {valor}\n"
with open("relatorio_linux.txt", "w") as arquivo:
arquivo.write(relatorio)
if __name__ == "__main__":
informacoes_sistema = coletar_informacoes_sistema()
gerar_relatorio(informacoes_sistema)
print("Relatório gerado com sucesso em 'relatorio_linux.txt'")
Veja os detalhes desse código Python:
- import os: Importa o módulo os, que fornece funções para interagir com o sistema operacional, como acessar comandos do sistema.
- import socket: Importa o módulo socket, que fornece funções para lidar com operações de rede e informações sobre o host.
A seguir, definimos uma função chamada coletar_informacoes_sistema(). Esta função é responsável por coletar informações do sistema Linux. As informações coletadas incluem:
- hostname: O nome do host, obtido usando a função socket.gethostname() do módulo socket.
- kernel_version: A versão do kernel, obtida usando os.uname().release. O uname() é uma chamada de sistema que fornece informações sobre o sistema operacional.
- cpu_info: Informações da CPU obtidas através do comando cat /proc/cpuinfo | grep "model name" | uniq. Isso extrai as informações do arquivo /proc/cpuinfo relacionadas ao modelo da CPU.
- mem_info: Informações de uso de memória obtidas usando o comando free -h | grep "Mem:". Isso exibe as informações de memória do sistema.
- disk_space: Espaço em disco obtido com o comando df -h, que fornece informações sobre o espaço em disco.
As informações coletadas são armazenadas em um dicionário chamado informações, onde as chaves são nomes das informações e os valores são os dados coletados.
- A função coletar_informacoes_sistema() retorna o dicionário informacoes como resultado.
- Em seguida, definimos uma função chamada gerar_relatorio(informacoes). Esta função aceita o dicionário de informações como argumento e gera um relatório formatado.
- O relatório começa com a string "Relatório do Sistema Linux\n\n".
- Usando um loop for, o código percorre o dicionário de informações e formata as chaves e valores em linhas de texto, que são adicionadas ao relatório.
- O relatório é então escrito em um arquivo chamado "relatorio_linux.txt" usando um bloco with open(...). O modo "w" indica que o arquivo será aberto para escrita, e o bloco with garante que o arquivo seja fechado automaticamente após a escrita.
- Por fim, a função principal é protegida pela condição if name == "main". Isso garante que o código dentro do bloco só seja executado se o script for executado diretamente (não quando importado como módulo em outro script).
- Dentro do bloco principal, as informações do sistema são coletadas chamando coletar_informacoes_sistema(), o relatório é gerado chamando gerar_relatorio(informacoes_sistema), e uma mensagem é exibida no console informando que o relatório foi gerado com sucesso.
3) Salve o código (clique em “Arquivo” --> “Salvar Como”) na pasta Documentos (/home/aluno/Documentos) com o nome “dados_linux.py”. Não se esqueça de mudar a opção “Arquivos de Texto” para “Todos os arquivos”, acima do botão “Salvar”.
4) Feche o Mousepad. No Terminal, navegue até a pasta Documentos:
┌──(root㉿kali)-[~]
└─# cd /home/aluno/Documentos/
5) Execute o arquivo Python criado no passo 2:
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# python dados_linux.py
Relatório gerado com sucesso em 'relatorio_linux.txt'
6) Veja que o relatório foi gerado em txt:
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# ls
dados_linux.py relatorio_linux.txt
7) Visualize o relatório com o comando:
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# cat relatorio_linux.txt
8) Veja os principais detalhes de Hardware do seu computador no relatório (NÃO SE ESQUEÇA DE PRINTAR ESTE PASSO!):
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# cat relatorio_linux.txt
Relatório do Sistema Linux
Hostname: kali
Kernel Version: 6.12.38+kali-cloud-amd64
CPU Info: model name : AMD EPYC 7571
Memory Info: Mem.: 3,8Gi 881Mi 924Mi 15Mi 2,3Gi 2,9Gi
Disk Space: Sist. Arq. Tam. Usado Disp. Uso% Montado em
udev 1,9G 0 1,9G 0% /dev
tmpfs 388M 956K 387M 1% /run
/dev/nvme0n1p1 20G 19G 101M 100% /
tmpfs 1,9G 4,0K 1,9G 1% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 1,9G 56K 1,9G 1% /tmp
tmpfs 1,0M 0 1,0M 0% /run/credentials/systemd-journald.service
/dev/nvme0n1p15 124M 294K 124M 1% /boot/efi
tmpfs 1,0M 0 1,0M 0% /run/credentials/serial-getty@ttyS0.service
tmpfs 1,0M 0 1,0M 0% /run/credentials/getty@tty1.service
tmpfs 388M 120K 388M 1% /run/user/0
tmpfs 388M 140K 388M 1% /run/user/1001
A saída do comando apresenta:
- Hostname: O nome do host é "kali", indicando o nome do computador.
- Kernel Version: A versão do kernel é 6.12.38+kali-cloud-amd64, que representa a versão atual do núcleo (kernel) do sistema operacional. Essa versão é otimizada para ambientes em nuvem e arquitetura AMD64, sendo uma compilação específica do Kali Linux.
- CPU Info: Esta seção fornece detalhes sobre o processador utilizado no sistema. No caso, trata-se de um AMD EPYC 7571, um processador de alto desempenho voltado para servidores e ambientes virtuais. Isso sugere que o sistema está rodando em uma infraestrutura de nuvem ou servidor virtual com hardware robusto.
- Memory Info: Esta seção apresenta informações sobre a memória disponível no sistema.
- Disk Space: Mostra o estado dos sistemas de arquivos montados no sistema. As colunas significam: Sist. Arq.: Nome do dispositivo ou tipo de sistema de arquivos. Tam.: Tamanho total do espaço. Usado: Espaço ocupado. Disp.: Espaço disponível. Uso%: Percentual de uso. Montado em: Diretório onde o sistema de arquivos está montado.
- Valores de disco:
- udev: Sistema de arquivos virtual do kernel para gerenciamento dinâmico de dispositivos. Usa 0% do seu espaço alocado de 1,9G.
- tmpfs (/run): Sistema de arquivos temporário armazenado na memória RAM. Usa apenas 956K de 388M, destinado a dados de execução do sistema.
- /dev/nvme0n1p1: Partição principal do disco (provavelmente SSD NVMe) com capacidade total de 20G. Está com 19G usados e apenas 101M livres, resultando em 100% de uso. Esse é um alerta crítico, pois o sistema pode parar de funcionar corretamente se não houver espaço para logs, cache ou atualizações.
- tmpfs (/dev/shm): Área de memória compartilhada (shared memory), com 1,9G de tamanho e uso desprezível (4,0K).
- tmpfs (/run/lock): Usado para travas de recursos entre processos. Com 5,0M, está completamente livre.
- tmpfs (/tmp): Diretório temporário em RAM, útil para segurança e desempenho. Usa apenas 56K de 1,9G.
- tmpfs (credentials): Sistemas de arquivos virtuais pequenos (1,0M) usados pelo systemd para isolar credenciais de serviços específicos. Todos estão vazios.
- /dev/nvme0n1p15: Partição EFI de inicialização, com 124M. Apenas 294K são usados, o que é normal, pois contém apenas arquivos essenciais de boot.
- tmpfs (/run/user/0): Espaço temporário para o usuário root, com 388M de capacidade e uso mínimo (120K).
- tmpfs (/run/user/1001): Espaço temporário para o usuário com ID 1001 (geralmente o primeiro usuário não-root). Também usa apenas 140K do espaço disponível.
9) Apague os arquivos da pasta Documentos e feche e o Terminal:
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# ls
dados_linux.py relatorio_linux.txt
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# rm *
zsh: sure you want to delete all 2 files in /home/aluno/Documentos [yn]? y
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# ls
Atividade 6.4 – Conhecendo o Antivírus ClamAV e sua Assinatura de Malware no Kali Linux
Nesta atividade, vamos explorar o Antivírus ClamAV no Kali Linux para rodar um escaneamento de uma pasta e conhecer a sua base de assinatura de malware.
Vamos começar inicializando nosso Kali Linux.
1) Abra o Terminal e execute o seguinte comando para ser super usuário:
┌──(aluno㉿kali)-[~]
└─$ sudo -i
[sudo] senha para aluno:
2) Veja as opções que podem ser executadas com o comando:
┌──(root㉿kali)-[~]
└─# clambc -h
Clam AntiVirus: Bytecode Testing Tool 1.4.3
By The ClamAV Team: https://www.clamav.net/about.html#credits
(C) 2024 Cisco Systems, Inc.
clambc <file> [function] [param1 ...]
--help -h Show this help
--version -V Show version
--debug Show debug
--force-interpreter -f Force using the interpreter instead of the JIT
--trust-bytecode -t Trust loaded bytecode (default yes)
--info -i Print information about bytecode
--printsrc -p Print bytecode source
--printbcir -c Print IR of bytecode signature
--input -c Input file to run the bytecode on
--trace <level> -T Set bytecode trace level 0..7 (default 7)
--no-trace-showsource -s Don't show source line during tracing
--statistics=bytecode Collect and print bytecode execution statistics
file File to test
**Caution**: You should NEVER run bytecode signatures from untrusted sources.
Doing so may result in arbitrary code execution.
3) Agora, vamos explorar o utilitário sigtool do ClamAV, que é uma ferramenta de linha de comando para trabalhar com assinaturas de vírus e realizar várias operações relacionadas à gestão de assinaturas:
┌──(root㉿kali)-[~]
└─# sigtool -h
Clam AntiVirus: Signature Tool 1.4.3
By The ClamAV Team: https://www.clamav.net/about.html#credits
(C) 2024 Cisco Systems, Inc.
sigtool [options]
--help -h Show this help
--version -V Print version number and exit
--quiet Be quiet, output only error messages
--debug Enable debug messages
--stdout Write to stdout instead of stderr. Does not affect 'debug' messages.
--hex-dump Convert data from stdin to a hex
string and print it on stdout
--md5 [FILES] Generate MD5 checksum from stdin
or MD5 sigs for FILES
--sha1 [FILES] Generate SHA1 checksum from stdin
or SHA1 sigs for FILES
--sha256 [FILES] Generate SHA256 checksum from stdin
or SHA256 sigs for FILES
--mdb [FILES] Generate .mdb (section hash) sigs
--imp [FILES] Generate .imp (import table hash) sigs
--fuzzy-img FILE(S) Generate image fuzzy hash for each file
--html-normalise=FILE Create normalised parts of HTML file
--ascii-normalise=FILE Create normalised text file from ascii source
--utf16-decode=FILE Decode UTF16 encoded files
--info=FILE -i FILE Print database information
--build=NAME [cvd] -b NAME Build a CVD file
--max-bad-sigs=NUMBER Maximum number of mismatched signatures
When building a CVD. Default: 3000
--flevel=FLEVEL Specify a custom flevel.
Default: 213
--cvd-version=NUMBER Specify the version number to use for
the build. Default is to use the value+1
from the current CVD in --datadir.
If no datafile is found the default
behaviour is to prompt for a version
number, this switch will prevent the
prompt. NOTE: If a CVD is found in the
--datadir its version+1 is used and
this value is ignored.
--no-cdiff Don't generate .cdiff file
--unsigned Create unsigned database file (.cud)
--hybrid Create a hybrid (standard and bytecode) database file
--print-certs=FILE Print Authenticode details from a PE
--server=ADDR ClamAV Signing Service address
--datadir=DIR Use DIR as default database directory
--unpack=FILE -u FILE Unpack a CVD/CLD file
--unpack-current=SHORTNAME Unpack local CVD/CLD into cwd
--list-sigs[=FILE] -l[FILE] List signature names
--find-sigs=REGEX -fREGEX Find signatures matching REGEX
--decode-sigs Decode signatures from stdin
--test-sigs=DATABASE TARGET_FILE Test signatures from DATABASE against
TARGET_FILE
--vba=FILE Extract VBA/Word6 macro code
--vba-hex=FILE Extract Word6 macro code with hex values
--diff=OLD NEW -d OLD NEW Create diff for OLD and NEW CVDs
--compare=OLD NEW -c OLD NEW Show diff between OLD and NEW files in
cdiff format
--run-cdiff=FILE -r FILE Execute update script FILE in cwd
--verify-cdiff=DIFF CVD/CLD Verify DIFF against CVD/CLD
--tempdir=DIRECTORY Create temporary files in DIRECTORY
--leave-temps[=yes/no(*)] Do not remove temporary files
O comando mostrado acima contém os seguintes parâmetros:
- --help ou -h: Exibe a ajuda, mostrando uma breve descrição das opções disponíveis e informações gerais sobre o sigtool.
- --version ou -V: Exibe o número da versão do sigtool e encerra a execução.
- --quiet: Suprime a saída padrão, exibindo apenas mensagens de erro.
- --debug: Ativa a saída de mensagens de depuração.
- --stdout: Direciona a saída para a saída padrão (stdout) em vez da saída de erro padrão (stderr). Isso não afeta as mensagens de depuração.
- --hex-dump: Converte dados da entrada padrão (stdin) em uma representação hexadecimal e imprime na saída padrão.
- --md5 [FILES]: Gera somas de verificação MD5 de arquivos ou da entrada padrão. Pode aceitar uma lista de arquivos como argumento.
- --sha1 [FILES]: Gera somas de verificação SHA1 de arquivos ou da entrada padrão.
- --sha256 [FILES]: Gera somas de verificação SHA256 de arquivos ou da entrada padrão.
- --mdb [FILES]: Gera assinaturas .mdb (hash de seção) para arquivos ou da entrada padrão.
- --imp [FILES]: Gera assinaturas .imp (hash da tabela de importação) para arquivos ou da entrada padrão.
- --fuzzy-img FILE(S): Gera um hash de imagem fuzzy para cada arquivo. Pode aceitar uma lista de arquivos como argumento.
- --html-normalise=FILE: Cria partes normalizadas de arquivos HTML.
- --ascii-normalise=FILE: Cria um arquivo de texto normalizado a partir de uma fonte ASCII.
- --utf16-decode=FILE: Decodifica arquivos codificados em UTF16.
- --info=FILE ou -i FILE: Exibe informações sobre um banco de dados.
- **--build=NAME [cvd] ou -b NAME: Constrói um arquivo de banco de dados CVD.
- --max-bad-sigs=NUMBER: Define o número máximo de assinaturas discordantes ao construir um CVD.
- --flevel=FLEVEL: Especifica um nível de flevel personalizado.
- --cvd-version=NUMBER: Especifica a versão do banco de dados ao construir um CVD.
- --no-cdiff: Não gera um arquivo .cdiff.
- --unsigned: Cria um arquivo de banco de dados não assinado (.cud).
- --hybrid: Cria um arquivo de banco de dados híbrido, combinando assinaturas padrão e bytecode.
- --print-certs=FILE: Imprime detalhes Authenticode de um arquivo PE.
- --server=ADDR: Especifica o endereço do serviço de assinatura ClamAV.
- --datadir=DIR: Especifica o diretório padrão para bancos de dados.
- --unpack=FILE ou -u FILE: Desempacota um arquivo CVD/CLD.
- --unpack-current=SHORTNAME: Desempacota o CVD/CLD local no diretório atual.
- --list-sigs[=FILE] ou -l[FILE]: Lista nomes de assinaturas no banco de dados.
- --find-sigs=REGEX ou -fREGEX: Encontra assinaturas que correspondem a um padrão de expressão regular.
- --decode-sigs: Decodifica assinaturas da entrada padrão.
- --test-sigs=DATABASE TARGET_FILE: Testa assinaturas do banco de dados em relação ao arquivo de destino.
- --vba=FILE: Extrai código VBA/Word6 de um arquivo.
- --vba-hex=FILE: Extrai código VBA/Word6 com valores hexadecimais.
- --diff=OLD NEW ou -d OLD NEW: Cria um arquivo diff para bancos de dados antigos e novos.
- --compare=OLD NEW ou -c OLD NEW: Mostra a diferença entre os arquivos antigo e novo no formato cdiff.
- --run-cdiff=FILE ou -r FILE: Executa um script de atualização no diretório atual.
- --verify-cdiff=DIFF CVD/CLD: Verifica um arquivo diff em relação a um CVD/CLD.
- --tempdir=DIRECTORY: Define um diretório específico para arquivos temporários criados durante o processamento, útil em ambientes com restrições de permissão.
- --leave-temps[=yes/no(*)]: Impede a remoção automática de arquivos temporários após o uso, facilitando depuração. O padrão é "no", mas pode ser ativado com --leave-temps=yes.
4) Veja a lista de assinatura de malware que o ClamAV usa (não espere que este comando acabe para continuar com os próximos passos):
┌──(root㉿kali)-[~]
└─# sigtool --list-sigs
BC.Legacy.Exploit.CVE_2010_3333-5.{Exploit-CVE_2010_3333}
BC.Legacy.Exploit.CVE_2011_0090-1.{Exploit-CVE_2011_0090}
BC.Win.Packer.script2exe-6754169-0.{}
BC.Legacy.Exploit.CVE_2011_0086-1.{Exploit-CVE_2011_0086}
BC.Legacy.Exploit.CVE_2011_4373-2
BC.Img.Exploit.CVE_2017_12099-6336630-0.{}
...
5) Conheça uma das vulnerabilidades mostradas na lista de assinatura encurtada no passo anterior abrindo o Mozilla Firefox (clique em “Aplicativos” --> “Navegador web”) e visitando os sites em abas diferentes:
https://nvd.nist.gov/vuln/detail/CVE-2017-12099
https://www.cvedetails.com/cve/CVE-2017-12099/
6) Veja que o ataque efetuado por esse Exploit é o Integer Overflow (NÃO SE ESQUEÇA DE PRINTAR ESTE PASSO!).
7) Pesquise outros Exploits de acordo com o CVE respectivo.
8) Feche o Firefox ESR e o Terminal. Parabéns! Agora você sabe como funcionam os Antimalwares baseados em Assinatura!
Atividade 6.5 – Automação de Tarefas com PowerShell no Windows Server
Nesta atividade, vamos explorar scripts no PowerShell para automatizar tarefas no Windows Server 2022.
Vamos começar inicializando o Windows Server 2022 (cliente) (certifique-se que o nome de usuário é “WINSERVER\Administrator”), com usuário “administrator” e senha “compUFMT123@”.
1) Clique no campo “Type here to search” na barra de tarefas e escreva:
Windows PowerShell
2) Clique no botão “Windows PowerShell”, o Windows PowerShell será aberto.
3) Escreva o seguinte script (copie e cole todo o texto de uma vez só) para coletar informações de sistema e hardware (aperte “Enter” após colar o texto):
# Coleta informações do sistema e hardware
$systemInfo = Get-CimInstance -ClassName Win32_ComputerSystem
$osInfo = Get-CimInstance -ClassName Win32_OperatingSystem
$cpuInfo = Get-CimInstance -ClassName Win32_Processor
$memoryInfo = Get-CimInstance -ClassName Win32_PhysicalMemory
# Exibe informações no console
Write-Host "Informações do Sistema:"
Write-Host "Nome do Computador: $($systemInfo.Name)"
Write-Host "Sistema Operacional: $($osInfo.Caption)"
Write-Host "Arquitetura do Sistema: $($osInfo.OSArchitecture)"
Write-Host "Processador: $($cpuInfo.Name)"
Write-Host "Memória Total: $($memoryInfo.Capacity / 1GB) GB"
4) A saída do script mostrado acima será:
PS C:\Users\Administrator> Write-Host "Informações do Sistema:"
Informações do Sistema:
PS C:\Users\Administrator> Write-Host "Nome do Computador: $($systemInfo.Name)"
Nome do Computador: WINCLIENT
PS C:\Users\Administrator> Write-Host "Sistema Operacional: $($osInfo.Caption)"
Sistema Operacional: Microsoft Windows Server 2022 Datacenter
PS C:\Users\Administrator> Write-Host "Arquitetura do Sistema: $($osInfo.OSArchitecture)"
Arquitetura do Sistema: 64-bit
PS C:\Users\Administrator> Write-Host "Processador: $($cpuInfo.Name)"
Processador: AMD EPYC 7571
PS C:\Users\Administrator> Write-Host "Memória Total: $($memoryInfo.Capacity / 1GB) GB"
O commando mostrado acima mostra os seguintes dados:
- $systemInfo = Get-CimInstance -ClassName Win32_ComputerSystem: Nesta linha, o script usa o cmdlet Get-CimInstance para coletar informações sobre o sistema, como o nome do computador. O resultado é armazenado na variável $systemInfo.
- $osInfo = Get-CimInstance -ClassName Win32_OperatingSystem: Aqui, o script usa Get-CimInstance para coletar informações sobre o sistema operacional, como a versão do sistema operacional. O resultado é armazenado na variável $osInfo.
- $cpuInfo = Get-CimInstance -ClassName Win32_Processor: Nesta linha, o script usa Get-CimInstance para coletar informações sobre a CPU do sistema, como o nome do processador. O resultado é armazenado na variável $cpuInfo.
- $memoryInfo = Get-CimInstance -ClassName Win32_PhysicalMemory: Aqui, o script usa Get-CimInstance para coletar informações sobre a memória física do sistema. O resultado é armazenado na variável $memoryInfo.
- Write-Host "Informações do Sistema:": Esta linha exibe o título "Informações do Sistema" no console usando o cmdlet Write-Host.
- Write-Host "Nome do Computador: $($systemInfo.Name)": Aqui, o script usa Write-Host para exibir o nome do computador, que foi coletado anteriormente e está armazenado na variável $systemInfo.Name.
- Write-Host "Nome do Computador: $($systemInfo.Name)": Este comando exibe o nome do computador. A variável $systemInfo.Name contém o nome do computador, que aqui é "WINCLIENT".
- Write-Host "Sistema Operacional: $($osInfo.Caption)": Este comando exibe o nome do sistema operacional. A variável $osInfo.Caption contém o nome do sistema operacional, que aqui é "Microsoft Windows Server 2022 Datacenter".
- Write-Host "Arquitetura do Sistema: $($osInfo.OSArchitecture)": Este comando exibe a arquitetura do sistema operacional (32-bit ou 64-bit). A variável $osInfo.OSArchitecture contém essa informação, que aqui é "64-bit".
- Write-Host "Processador: $($cpuInfo.Name)": Este comando exibe o nome do processador. A variável $cpuInfo.Name contém o nome do processador, que aqui é "AMD EPYC 7571".
- Write-Host "Memória Total: $($memoryInfo.Capacity / 1GB) GB": Este comando exibe a quantidade total de memória do sistema em gigabytes. A variável $memoryInfo.Capacity contém a quantidade total de memória em bytes. A divisão por 1GB converte essa quantidade para gigabytes. Aqui, a memória total é de 4 GB.
5) Agora, vamos escrever um script que coleta informações sobre eventos do sistema a partir do registro de eventos do Windows e gera um relatório em um arquivo de texto. Escreva o seguinte script (copie e cole todo o texto de uma vez só e aperte “Enter” após colar o texto):
# Coleta informações de eventos de inicialização do sistema
$events = Get-WinEvent -LogName System | Where-Object { $_.Id -eq 6005 -or $_.Id -eq 6006 }
# Caminho para o arquivo de relatório
$reportFile = "C:\Relatorio_Eventos_Inicializacao.txt"
# Gera um relatório e o salva em um arquivo
$events | ForEach-Object {
$eventTime = $_.TimeCreated
$eventMessage = $_.Message
$report = "Data e Hora: $eventTime`nMensagem: $eventMessage`n`n"
$report | Out-File -Append -FilePath $reportFile
}
Write-Host "Relatório de eventos de inicialização do sistema salvo em $reportFile"
6) A saída do script mostrado acima será:
Relatório de eventos de inicialização do sistema salvo em C:\Relatorio_Eventos_Inicializacao.txt
O commando mostrado acima mostra os seguintes dados:
- $events = Get-WinEvent -LogName System | Where-Object { $.Id -eq 6005 -or $.Id -eq 6006 }: Nesta linha, o script usa o cmdlet Get-WinEvent para coletar informações de eventos do log "System" do registro de eventos do Windows. Em seguida, ele usa o cmdlet Where-Object para filtrar os eventos com IDs 6005 (inicialização do sistema) ou 6006 (desligamento do sistema) e armazena esses eventos na variável $events.
- $reportFile = "C:\Relatorio_Eventos_Inicializacao.txt": Nesta linha, o script define o caminho para o arquivo de relatório. Neste caso, o relatório será salvo no diretório raiz do disco C:\ com o nome "Relatorio_Eventos_Inicializacao.txt".
- $events | ForEach-Object {: Esta linha começa um loop ForEach-Object, que irá iterar sobre cada evento armazenado na variável $events.
- $eventTime = $_.TimeCreated: Aqui, o script armazena a data e hora do evento atual na variável $eventTime. A propriedade .TimeCreated contém a data e hora em que o evento ocorreu.
- $eventMessage = $_.Message: O script armazena a mensagem do evento atual na variável $eventMessage. A propriedade .Message contém o texto da mensagem do evento.
- $report = "Data e Hora: $eventTimenMensagem: $eventMessagenn": Nesta linha, o script cria uma string de relatório que combina a data e hora do evento com a mensagem do evento, separadas por uma quebra de linha (n). Além disso, há uma linha em branco (n`) após cada evento no relatório.
- $report | Out-File -Append -FilePath $reportFile: Aqui, o script usa o cmdlet Out-File para escrever a string de relatório no arquivo especificado (em modo de anexação, -Append). Isso garante que os eventos sejam adicionados ao arquivo sem substituir os eventos anteriores, caso o arquivo já exista.
-
Write-Host "Relatório de eventos de inicialização do sistema salvo em $reportFile": Por fim, o script exibe uma mensagem no console usando o cmdlet Write-Host, informando que o relatório de eventos de inicialização do sistema foi salvo no arquivo especificado.
-
Finalmente, na barra de tarefas, abra o “File Explorer”, navegue até o disco C e abra o arquivo “Relatorio_Eventos_Inicializacao.txt”.
- Neste arquivo txt é possível visualizar os logs de quando o seu Windows Server foi inicializado (NÃO SE ESQUEÇA DE PRINTAR ESTE PASSO!).
- Feche o arquivo “Relatorio_Eventos_Inicializacao.txt” e apague esse arquivo (Shift + Del). Feche o “File Explorer” e o “Windows PowerShell”.
Parabéns! Agora você sabe como usar o PowerShell para automatizar algumas tarefas no Windows Server 2022.