Módulo 10 - Roteiro 2

Tarefas

No final deste módulo você deve submeter em um ÚNICO arquivo PDF os seguintes prints:

  • Atividade 10.6: passo 7.
  • Atividade 10.7: passo 9.
  • Atividade 10.8: passo 8.
  • Atividade 10.9: passo 12.
  • Atividade 10.10: passo 12.  

Atividade 10.6 – Explorando um Hypervisor Tipo 2 no Kali Linux

Nesta atividade, vamos usar o Kali Linux para explorar o Virtual Box, que é um Hypervisor Tipo 2.

Vamos começar inicializando nosso Kali Linux.

1) Na barra de tarefas superior, clique no botão “Aplicativos” --> “Aplicações habituais” --> “Sistema” --> “Oracle VM Virtualbox”.

2) Veja que abriu uma janela nova com o VirtualBox. Clique em “Arquivo” --> “Preferências...”.

3) Na nova janela aberta, veja que na aba “Geral”, a pasta padrão em “Pasta Padrão para Máquinas” é:

/home/aluno/VirtualBox VMs

4) A Biblioteca de Autenticação VRDP (VirtualBox Remote Desktop Protocol) é um componente do VirtualBox que fornece mecanismos de autenticação para conexões de desktop remoto com máquinas virtuais do VirtualBox. Ela permite que você se conecte e controle de forma segura a interface de desktop de uma máquina virtual remotamente pela rede. A opção padrão selecionada é “VBoxAuth”.

5) Na coluna da esquerda, clique em “Entrada” e na aba da direita em “Gerenciador do VirtualBox”, veja os comandos de Gerenciamento de VirtualBox e seus atalhos.

6) Agora clique na aba “Máquina Virtual” e veja os comandos de Máquina Virtual e seus atalhos.

7) Na coluna da esquerda, clique em “Idioma” e na aba da direita veja os idiomas disponíveis (NÃO SE ESQUEÇA DE PRINTAR ESTE PASSO!). Note que está em “Padrão”, isso pega o idioma do sistema operacional, neste caso o português.

8) Na coluna da esquerda, clique em “Tela” e na aba da direita veja os ajustes da interface gráfico que podem ser feitos:

  • Tamanho Máximo da Tela do Sistema Convidado
  • Fator de Escalonamento
  • Recursos Estendidos
  • Escalonamento de Fontes

9) Clique em “OK” para fechar a janela “VirtualBox - Preferências”. Não saia do VirtualBox, continuaremos na próxima Atividade.

Parabéns! Agora você conhece as principais abas do VirtualBox!  

Atividade 10.7 – Criando uma VM em um Hypervisor Tipo 2 no Kali Linux

Nesta atividade, vamos usar o Kali Linux para criar uma VM que contenha o Debian netinst no VirtualBox que exploramos na Atividade anterior.

O Debian netinst é uma imagem mínima de instalação que contém apenas o necessário para iniciar a instalação e baixar os pacotes adicionais durante o processo. Isso permite que você selecione e instale apenas os componentes necessários para o seu sistema, resultando em uma distribuição Debian mais leve e personalizada. Vamos continuar a Atividade anterior que já tem o VirtualBox aberto.

1) Volte ao VirtualBox, feche a janela que conta com a mensagem “Não foi possível enumerar os dispositivos USB...” e clique em “Novo”.

2) Insira o nome “DebianNetinst”.

3) No campo “Imagem ISO”, clique em “Outro” e na coluna da esquerda navegue pelas pastas “Outros locais” --> “Computador” --> “curso” --> selecione a imagem baixada com 2 cliques “debian-12.5.0-amd64-netinst.iso”.

4) Clique em “Próximo(N)”.

5) No campo “Nome do Usuário”, mude o nome para “DebianNetinst”, visualize que a senha padrão é “changeme” e clique em “Próximo(N)”.

6) Aloque 512MB de “Memória Base” e clique em “Próximo(N)”.

7) Na próxima janela, modifique o “Tamanho do Disco” para 10.22 GB e clique em “Próximo(N)”.

8) Leia todo o sumário que aparece e clique em “Finalizar”.

9) Veja que uma máquina virtual chamada “DebianNetinst” foi criada na coluna da esquerda (NÃO SE ESQUEÇA DE PRINTAR ESTE PASSO!). Não há necessidade de rodar o DebianNetinst na VM.

10) Pronto! Agora você criou uma máquina virtual que rodará a imagem do Debian Netinst para ser instalado! Você pode reproduzir esses passos para fazer essa instalação no seu computador pessoal!

Parabéns! Agora você sabe como adicionar uma imagem de Sistema Operacional para que seja usado no VirtualBox!  

Atividade 10.8 – Explorando uma UEFI/BIOS por simulação

Nesta atividade, vamos usar o navegador Mozilla Firefox no seu computador pessoal para acessar um recurso da Lenovo que permite usar dezenas de UEFI/BIOS dos equipamentos da Lenovo de forma simulada.

1) No seu computador pessoal abra o seu navegador de preferência e acesse o seguinte dite:

https://download.lenovo.com/bsco/index.html#/

2) Clique em “Launch Simulator” e selecione o aparelho “Laptops”.

3) Selecione “Lenovo Laptops”.

4) Selecione “Lenovo Slim Pro 9 16IRP8 (83C0)” --> “Graphics Interface Mode”.

5) Veja que agora a BIOS foi inicializada de forma simulada. Veja as informações do campo “Information”. Aqui temos:

  • Nome do produto
  • Versão da BIOS
  • CPU
  • Memória do sistema
  • Secure Boot

6) Clique no campo da esquerda “Configuration”. Veja a configuração do sistema, como o tempo, data, rede WLAN, Graphics Device, Intel(R) Virtualization Technology, Always On USB, Charge in Battery Mode, System Performance Mode, etc.

7) Clique no campo da esquerda “Security”. Veja a configuração de segurança da BIOS: Set Hard Disk Password, Intel Platform Trust Technology, Device Guard, Secure Boot, Reset to Setup Mode e Restore Factory Keys.

8) Clique no campo da esquerda “Boot”. Veja a configuração de Boot da BIOS: USB Boot, PXE Boot to LAN, IPV4 PXE First, EFI, Windows Boot Manager e EFI PXE Network (NÃO SE ESQUEÇA DE PRINTAR ESTE PASSO!).

9) Finalmente, clique em “Exit” --> “Exit Discarding Changes” para sair sem salvar mudanças e clique em “Yes”. Feche o navegador.

Parabéns! Nesta atividade você aprendeu os principais campos de uma BIOS/UEFI com interface gráfica. No mundo real, quase todos os componentes que exploramos estarão presentes na UEFI do seu computador.  

Atividade 10.9 – Implementação do Full Disk Encryption em uma partição no Kali Linux

Nesta atividade, vamos usar o Kali Linux para implementar o FDE em uma partição de 100M que criaremos no Kali Linux. Vamos dar continuidade a Atividade anterior.

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) Vamos explorar o armazenamento na nossa máquina virtual (o tamanho dos discos pode mudar um pouco). Escreva o seguinte comando:

┌──(aluno㉿kali)-[~]
└─$ fdisk -l
Disk /dev/sda: 22 GiB, 23622320128 bytes, 46137344 sectors
Disk model: Amazon Elastic Block Store              
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 9FFA977A-4F2F-44A0-BCAC-15A77352798A

Device           Start      End  Sectors  Size Type
/dev/sda1  262144 46137310 45875167 21,9G Linux filesystem
/dev/sda2   2048     8191     6144    3M BIOS boot
/dev/sda3   8192   262143   253952  124M EFI System

Partition table entries are not in disk order.


Disk /dev/sdb: 2 GiB, 2147483648 bytes, 4194304 sectors
Disk model: Amazon Elastic Block Store              
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xf8a2dbef

Device         Boot  Start    End Sectors  Size Id Type
/dev/sdb1        2048 206847  204800  100M 83 Linux

3) Trabalharemos no disco /dev/sdb. Veja que o seguinte comando mostra as partições presentes no nosso disco:

┌──(root㉿kali)-[~]
└─# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.41.2).                                                                      
Changes will remain in memory only, until you decide to write them.                                        
Be careful before using the write command.

Command (m for help): p
Disk /dev/nvme1n1: 2 GiB, 2147483648 bytes, 4194304 sectors
Disk model: Amazon Elastic Block Store              
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xf8a2dbef

Device         Boot  Start    End Sectors  Size Id Type
/dev/sdb1        2048 206847  204800  100M 83 Linux

4) Agora vamos apagar e criar novamente a partição sdb1 com 100M para aplicar o FDE nela:

Command (m for help): d
Partition deleted

Command (m for help): n
Partition type
   p   primary (2 primary, 0 extended, 2 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (1,3,4, default 1): 
First sector (411648-4194303, default 411648): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (411648-4194303, default 4194303): +100M

Created a new partition 1 of type 'Linux' and of size 100 MiB.

5) Veja como ficaram as partições e salve as configurações:

Command (m for help): p
Disk /dev/sdb: 1 GiB, 2147483648 bytes, 4194304 sectors
Disk model: Amazon Elastic Block Store              
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x407f5a73

Device         Boot  Start    End Sectors  Size Id Type
/dev/sdb1        2048 206847  204800  100M 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

┌──(root㉿kali)-[~]
└─# partprobe /dev/sdb1

6) Execute o seguinte comando para formatar e criptografar a partição sdb1. Use a senha “abcd1234”:

┌──(root㉿kali)-[~]
└─# cryptsetup luksFormat /dev/sdb1

WARNING!
========
Isto vai sobrescrever dados em /dev/sdb1 permanentemente.

Are you sure? (Type 'yes' in capital letters): YES
Digite a senha para /dev/sdb1: 
Verificar senha:

7) Desbloqueie a partição e atribua o nome “Teste” à partição digitando o seguinte comando. Use a senha “abcd1234”:

┌──(root㉿kali)-[~]
└─# cryptsetup luksOpen /dev/sdb1 Teste
Digite a senha para /dev/sdb1:

8) Agora você tem uma partição criptografada aberta e pronta para ser formatada com um sistema de arquivos. Use o seguinte comando para formatar com ext4 a partição “Teste”:

┌──(root㉿kali)-[~]
└─# mkfs.ext4 /dev/mapper/Teste
mke2fs 1.47.2 (1-Jan-2025)
Creating filesystem with 188416 1k blocks and 47104 inodes
Filesystem UUID: 5a8348f9-b7d0-4cf6-8d4d-7dd8e59fe7f0
Superblock backups stored on blocks: 
        8193, 24577, 40961, 57345, 73729

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

9) Agora vamos criar uma pasta vazia para montar nossa partição criptografada:

┌──(root㉿kali)-[~]
└─# mkdir -m 777 /mnt/encrypted

10) Vamos montar nossa partição criptografada para começar a usá-la:

┌──(root㉿kali)-[~]
└─# mount /dev/mapper/Teste /mnt/encrypted

11) Após executar o comando do passo 10, a execução do FDE foi montada no diretório de montagem especificado (/mnt/encrypted neste exemplo). Agora você pode acessar e utilizar a partição criptografada no Kali Linux por meio desse diretório. Lembre-se de desmontar a partição quando não estiver em uso para garantir a segurança dos seus dados:

┌──(root㉿kali)-[~]
└─# umount /mnt/encrypted

12) Note que um Acesso Direto (chamado “Volume de 193MB”) foi criado no Desktop e que você pode acessar essa nova partição por esse meio. Clique 2 vezes no ícone para visualizar a pasta no Thuner (NÃO SE ESQUEÇA DE PRINTAR ESTE PASSO!).

13) Feche o Thuner e o terminal.

Parabéns! Agora você sabe como aplicar o FDE em qualquer partição no Kali Linux!  

Atividade 10.10 – Usando o Ubuntu em um Container Docker no Kali Linux

Nesta atividade vamos rodar um Ubuntu em um Container usando Docker 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 Terminal e verifique se o Docker está rodando corretamente, você deve ter a seguinte saída:

┌──(root㉿kali)-[~]
└─# docker

Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Common Commands:
  run         Create and run a new container from an image
  exec        Execute a command in a running container
  ps          List containers
  build       Build an image from a Dockerfile
  pull        Download an image from a registry
  push        Upload an image to a registry
  images      List images
  login       Authenticate to a registry
  logout      Log out from a registry
  search      Search Docker Hub for images
  version     Show the Docker version information
  info        Display system-wide information

Management Commands:
  builder     Manage builds
  buildx*     Docker Buildx
  container   Manage containers
  context     Manage contexts
  image       Manage images
  manifest    Manage Docker image manifests and manifest lists
  network     Manage networks
  plugin      Manage plugins
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

Swarm Commands:
  swarm       Manage Swarm

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  import      Import the contents from a tarball to create a filesystem image
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  wait        Block until one or more containers stop, then print their exit codes

Global Options:
      --config string      Location of client config files (default "/root/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides
                           DOCKER_HOST env var and default context set with "docker context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket to connect to
  -l, --log-level string   Set the logging level ("debug", "info", "warn", "error", "fatal")
                           (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

Run 'docker COMMAND --help' for more information on a command.

For more help on how to use Docker, head to https://docs.docker.com/go/guides/

3) Agora vamos ver as imagens que estão disponíveis. Como acabamos de começar a utilização do Docker, deve estar vazia:

┌──(root㉿kali)-[~]
└─# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

4) Em seguida, vamos puxar a imagem do Ubuntu e voltar a listar as imagens disponíveis:

┌──(root㉿kali)-[~]
└─# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
20043066d3d5: Pull complete 
Digest: sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

5) Veja que agora a imagem do Ubuntu é listada!

┌──(root㉿kali)-[~]
└─# docker images     
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       latest    ca2b0f26964c   10 days ago   77.9MB

6) Vamos rodar a imagem do Ubuntu. Com o seguinte comando o container é criado, mas não iniciado:

┌──(root㉿kali)-[~]
└─# docker run ubuntu

7) Para iniciar o container, devemos usar o seguinte comando:

┌──(root㉿kali)-[~]
└─# docker run --name MeuContainer -it ubuntu bash
root@2c6580444ba4:/#

Aqui, “MeuContainer” é apenas como nós queremos nomear o processo de execução, enquanto “-it ubuntu bash” dá o nome do container que estamos rodando. Perceba que abriu uma conexão SSH e que já estamos executando o Ubuntu!

8) Vamos executar o comando “ls” de listagem de pastas no Ubuntu:

┌──(root㉿kali)-[~]
└─# docker run --name MeuContainer -it ubuntu bash
root@2c6580444ba4:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

9) Em paralelo, abra um segundo Terminal no Kali Linux, repita o passo 1 e verifique o principal processo do conteiner:

┌──(aluno㉿kali)-[~]
└─$ sudo -i
[sudo] senha para aluno:

┌──(root㉿kali)-[~]
└─# docker top MeuContainer          
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                40370               40342               0                   16:09               pts/0               00:00:00            bash

10) Ainda no segundo Terminal, vamos ver as estatísticas do container (em tempo real) como utilização de CPU, uso de memória, etc. Escreva “Ctrl + c” para sair após ver as informações:

┌──(root㉿kali)-[~]
└─# docker stats

CONTAINER ID   NAME           CPU %     MEM USAGE / LIMIT   MEM %     NET I/O       BLOCK I/O   PIDS
2c6580444ba4   MeuContainer   0.01%     916KiB / 1.926GiB   0.05%     1.16kB / 0B   0B / 0B     1

11) Feche o segundo Terminal. Volte ao primeiro Terminal, onde está rodando o Ubuntu. Saia do Ubuntu:

root@2c6580444ba4:/# exit
exit

12) Agora vamos parar a execução do Container (NÃO SE ESQUEÇA DE PRINTAR ESTE PASSO!):

┌──(root㉿kali)-[~]
└─# docker stop MeuContainer
MeuContainer

13) Finalmente, vamos a remover os Containers inativos, como o Ubuntu:

┌──(root㉿kali)-[~]
└─# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
2c6580444ba45dcc6ca52159ef009a52f255b63b612cd2a2075ba0a7c1e5f690
fab9028be5b9edd1614c872ee8cb59877b70e51c1dee2c1f28969a08ea24fd81

Total reclaimed space: 8B

14) Feche o Terminal.

Parabéns! Agora você conhece os princípios básicos do Docker no Kali Linux!