Módulo 1 - Roteiro 1

Tarefas

No final destas atividades você deve submeter em um ÚNICO arquivo PDF (conforme regras) os seguintes prints:

  • Atividade 1.1: passo 9.
  • Atividade 1.2: passo 9.
  • Atividade 1.3: passo 4.
  • Atividade 1.4: passo 9.
  • Atividade 1.5: passo 8.

Atividade 1.1 – Comparando integridade de arquivos de texto no Kali Linux

Nesta atividade, vamos explorar alguns comandos do Kali Linux para comparar arquivos de texto, que previamente foram copiados, e descobrir se houve manipulação mediante o cálculo da diferença entre eles (checksum).

Inicie a VM Kali Linux, lembre-se que o usuário é aluno e a senha é aluno.

  1. Clique no botão superior esquerdo “Aplicativos” --> “Aplicações habituais” --> “Acessórios” --> “Editor de Texto” para abrir o Mousepad e insira o seguinte texto:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam eget ligula eu lectus lobortis condimentum. Aliquam nonummy auctor massa. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla at risus. Quisque purus magna, auctor et, sagittis ac, posuere eu, lectus. Nam mattis, felis ut adipiscing.
  1. Salve o texto na pasta “Arquivo --> Salvar como --> Documentos” com o nome “Texto.txt”. Feche o editor Mousepad.
  2. Abra o Terminal Emulator (presente no meu inferior da Área de Trabalho) e execute o seguinte comando (com senha “aluno”) para ser super usuário:
┌──(aluno㉿kali)-[~]
└─$ sudo -i
[sudo] senha para aluno:
  1. Navegue até a pasta “Documentos” e veja que o arquivo “Texto.txt” está presente com o seguinte comando:
┌──(root㉿kali)-[~]
└─# cd /home/aluno/Documentos/

┌──(root㉿kali)-[/home/aluno/Documentos]
└─# ls
Texto.txt
  1. Copie o arquivo “Texto.txt” no arquivo “Texto_copia.txt” na mesma pasta e verifique que realmente foi copiado:
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# cp Texto.txt Texto_copia.txt

┌──(root㉿kali)-[/home aluno/Documentos]
└─# ls
Texto_copia.txt  Texto.txt
  1. Verifique se há diferença entre os arquivos:
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# diff Texto.txt Texto_copia.txt

Veja que o comando mostrado acima não tem retorno, ou seja, não há diferença entre os arquivos.

  1. Abra o arquivo “Texto_copia.txt”:
┌──(root㉿kali)-[/home aluno/Documentos]
└─# nano Texto_copia.txt
  1. Modifique a primeira letra “L” por “P”:
Porem ipsum dolor sit amet, consectetur adipiscing elit. Etiam eget ligula eu lectus lobortis condimentum. Aliquam nonummy auctor massa. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla at risus. Quisque purus magna, auctor et, sagittis ac, posuere eu, lectus. Nam mattis, felis ut adipiscing.

Salve o arquivo modificado com “Ctrl+X”, “s” e “Enter”

  1. Agora, verificaremos a diferença entre os arquivos (NÃO SE ESQUEÇA DE PRINTAR A CONCLUSÃO DESTE PASSO!):
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# diff Texto.txt Texto_copia.txt
1c1
< Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam eget ligula eu lectus lobortis condimentum. Aliquam nonummy auctor massa. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla at risus. Quisque purus magna, auctor et, sagittis ac, posuere eu, lectus. Nam mattis, felis ut adipiscing.
\ Nenhum caractere de nova linha no final do arquivo
---
> Porem ipsum dolor sit amet, consectetur adipiscing elit. Etiam eget ligula eu lectus lobortis condimentum. Aliquam nonummy auctor massa. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla at risus. Quisque purus magna, auctor et, sagittis ac, posuere eu, lectus. Nam mattis, felis ut adipiscing.

A saída do comando mostrado acima é:

  • 1c1: Indica que a diferença começa na linha 1 do arquivo original (Texto.txt).
  • <: Indica a linha no arquivo original (Texto.txt). Neste caso, a linha original começa com "Lorem ipsum dolor sit amet..."
  • ---: Divide a linha original da linha modificada.
  • >: Indica a linha no arquivo modificado (Texto_copia.txt). Neste caso, a linha modificada começa com "Porem ipsum dolor sit amet..."
  • Portanto, a diferença encontrada está na primeira linha do arquivo, onde a palavra "Lorem" foi substituída por "Porem".

  • Não apague os arquivos usados. Feche o editor Mousepad e o Terminal.

Parabéns! Agora, você sabe como verificar se um arquivo de texto copiado foi modificado ou não!  

Atividade 1.2 – Comparando integridade de arquivos genéricos, ou bonários no Kali Linux

Nesta atividade, vamos explorar alguns comandos do Kali Linux para comparar arquivos genéricos (Word, PDF, imagens, etc), que previamente foram copiados, e descobrir se houve manipulação mediante o cálculo da diferença entre eles.

Vamos começar inicializando a VM Kali Linux.

Usando o terminal, instale o aplicativo kolourpaint:

┌──(aluno㉿kali)-[~]
└─$ sudo apt install kolourpaint
  1. Abra o Terminal e insira o seguinte comando para abrir o programa “Kolourpaint” com o usuário “aluno”:
┌──(aluno㉿kali)-[~]
└─$ kolourpaint
  1. No programa “kolourpaint”, selecione algumas das cores e fique à vontade para pintar no quadro branco com a Caneta usando diferentes cores.
  2. Ao acabar de pintar, clique em “Arquivo” --> “Salvar como” com o nome “Imagem1” na pasta “Documentos” e clique em “Salvar”.
  3. Repita o passo anterior salvando com o nome “Imagem1_copia”.
  4. Ainda no programa “kolourpaint”, clique em alguma das cores e pinte somente um ponto a mais na figura criada no passo 4 (nada além disso).
  5. Clique em “Arquivo” --> “Salvar como” com o nome “Imagem2” e clique em “Salvar”. Feche o programa “kolourpaint”.
  6. Volte ao Terminal e verifique que os arquivos de imagem estão presentes:
┌──(aluno㉿kali)-[~]
└─$ cd /home/aluno/Documentos

┌──(aluno㉿kali)-[~/Documentos]
└─$ ls
Imagem1_copia.png  Imagem1.png  Imagem2.png  Texto_copia.txt  Texto.txt
  1. Agora, vamos comparar os arquivos (que são iguais) “Imagem1.png” e “Imagem1_copia.png”:
┌──(root㉿kali)-[ ~/Documentos]
└─# cmp Imagem1.png Imagem1_copia.png

Veja que o comando mostrado acima não tem retorno, ou seja, não há diferença entre os arquivos.

  1. Agora, vamos comparar os arquivos (que são diferentes) “Imagem1.png” e “Imagem2.png” (NÃO SE ESQUEÇA DE PRINTAR A CONCLUSÃO DESTE PASSO!):
┌──(aluno㉿kali)-[~/Documentos]
└─$ cmp Imagem1.png Imagem2.png 
Imagem1.png e Imagem2.png são diferentes: byte 58, linha 3

O comando mostrado acima conta com os seguintes parâmetros (no seu caso pode haver diferença na quantidade de bytes):

  • Imagem1.png Imagem2.png são diferentes: Isso indica que há uma diferença entre os dois arquivos.
  • byte 58: Indica que a diferença foi encontrada no byte número 58 dos arquivos.
  • line 3: Indica que a diferença foi encontrada na linha 3 dos arquivos. No contexto de arquivos binários, "linha" pode se referir a um número de byte específico, não necessariamente a uma linha de texto visível.

  • Feche o Terminal. Não apague os arquivos usados.

Parabéns! Agora, você sabe como verificar se um arquivo genérico (como imagens) copiado foi modificado ou não!  

Atividade 1.3 – Verificando integridade de arquivos com função Hash no Kali Linux

Nesta atividade, vamos explorar o uso do comando MD5SUM do Kali Linux para comparar arquivos genéricos (Word, PDF, imagens, etc), que previamente foram copiados, e descobrir se houve manipulação mediante o cálculo da diferença entre eles.

Vamos começar inicializando a VM Kali Linux.

  1. Abra o Terminal e execute o seguinte comando para ser super usuário:
┌──(aluno㉿kali)-[~]
└─$ sudo -i
[sudo] senha para aluno:
  1. Navegue até a pasta “Documentos” com o seguinte comando:
┌──(root㉿kali)-[~]
└─# cd /home/aluno/Documentos/
  1. Verifique que os arquivos criados nas Atividades 1.1 e 1.2 estão presentes:
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# ls
Imagem1_copia.png  Imagem1.png  Imagem2.png  Texto_copia.txt  Texto.txt
  1. Calcule o Hash com o algoritmo MD5 de todos os arquivos. Os resultados dos caracteres hexadecimais serão diferentes na sua tentativa (NÃO SE ESQUEÇA DE PRINTAR A CONCLUSÃO DESTE PASSO!):
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# md5sum Imagem1.png 
ffee4a00274267c6dfd27f0607f6b345  Imagem1.png

┌──(root㉿kali)-[/home/aluno/Documentos]
└─# md5sum Imagem1_copia.png
ffee4a00274267c6dfd27f0607f6b345  Imagem1_copia.png

┌──(root㉿kali)-[/home/aluno/Documentos]
└─# md5sum Imagem2.png 
702f2024904fd727d975210b692d9032  Imagem2.png

┌──(root㉿kali)-[/home/aluno/Documentos]
└─# md5sum Texto.txt  
e21678c114a62e8293e9f87bbd0b9235  Texto.txt

┌──(root㉿kali)-[/home/aluno/Documentos]
└─# md5sum Texto_copia.txt
52ffef02ffe8f762147bc72b53e3bb0f  Texto_copia.txt

Os resultados do passo 4 são:

  • Imagem1.png e Imagem1_copia.png: Ambos os arquivos têm o mesmo hash MD5: ffee4a00274267c6dfd27f0607f6b345. Isso indica que os conteúdos dos arquivos são idênticos.
  • Imagem2.png: O hash MD5 de Imagem2.png é: 702f2024904fd727d975210b692d9032. Isso significa que o conteúdo de Imagem2.png é diferente do conteúdo de Imagem1.png.
  • Texto.txt e Texto_copia.txt: Ambos os arquivos têm diferentes hashes MD5. Texto.txt tem o hash MD5: e21678c114a62e8293e9f87bbd0b9235. Texto_copia.txt tem o hash MD5: 52ffef02ffe8f762147bc72b53e3bb0f. Isso indica que os conteúdos dos arquivos são diferentes..

  • Apague os arquivos usados até agora:

┌──(root㉿kali)-[/home/aluno/Documentos]
└─# rm *
zsh: sure you want to delete all 5 files in /home/aluno/Documentos [yn]? y

┌──(root㉿kali)-[/home/aluno/Documentos]
└─# ls
  1. Feche o Terminal.

Parabéns! Agora, você sabe como comparar arquivos com funções Hash.  

Atividade 1.4 – Cifrando texto para proteger a confidencialidade no Kali Linux

Nesta atividade, vamos explorar os algoritmos ROT13 e a Cifra de César no Kali Linux para preservar a confidencialidade de textos.

Vamos começar inicializando a VM Kali Linux.

  1. Abra o Terminal e execute o seguinte comando para ser super usuário:
┌──(aluno㉿kali)-[~]
└─$ sudo -i
[sudo] senha para aluno:
  1. A cifra ROT13 (rotate by 13 places) é uma cifra de substituição que substitui cada letra do alfabeto por aquela que está 13 posições à frente ou atrás no alfabeto. É uma cifra simétrica, o que significa que cifrar e decifrar usando ROT13 são processos idênticos. Agora, aplicaremos o algoritmo ROT13 em cima de uma mensagem de texto:
┌──(root㉿kali)-[~]
└─# echo "Ciência da Computação-UFMT" | tr 'A-Za-z' 'N-ZA-Mn-za-m'
Pvêapvn qn Pbzchgnçãb-HSZG

Observação: Você pode criar um alias chamado rot13 para o comando tr.

  1. Em seguida, decifre o texto cifrado:
┌──(root㉿kali)-[~]
└─# echo "Pvêapvn qn Pbzchgnçãb-HSZG" | tr 'A-Za-z' 'N-ZA-Mn-za-m'
Ciência da Computação-UFMT
  1. A Cifra de César no Kali Linux pode ser usada para criptografar ou descriptografar mensagens, permitindo que o usuário especifique a quantidade de posições a ser deslocada no alfabeto. Aqui está um exemplo simples de como fazer isso em um script Python. Navegue até a pasta “Documentos” com o seguinte comando:
┌──(root㉿kali)-[~]
└─# cd /home/aluno/Documentos/
  1. Crie o seguinte arquivo:
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# nano cesar_cipher.py
  1. Insira o seguinte texto:
def caesar_cipher(text, shift):
    result = ""
    for char in text:
        if char.isalpha():
            shift_amount = shift % 26
            if char.islower():
                shifted = ord(char) + shift_amount
                if shifted > ord("z"):
                    shifted -= 26
                result += chr(shifted)
            else:
                shifted = ord(char) + shift_amount
                if shifted > ord("Z"):
                    shifted -= 26
                result += chr(shifted)
        else:
            result += char
    return result

def main():
    text = input("Digite o texto a ser cifrado/descifrado: ")
    shift = int(input("Digite a quantidade de posições a ser deslocada: "))
    encrypted_text = caesar_cipher(text, shift)
    print("Texto cifrado/descifrado:", encrypted_text)

if __name__ == "__main__":
    main()

A função percorre cada caractere (char) no texto de entrada. Se o caractere for uma letra, ele verifica se é maiúscula ou minúscula e realiza o deslocamento no alfabeto de acordo. Se não for uma letra, o caractere é mantido inalterado.

  1. Aperte “Ctrl+X”, “S” e “Enter” para salvar o arquivo.
  2. Agora, use o script para cifrar o seguinte texto:
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# python3 cesar_cipher.py
Digite o texto a ser cifrado/descifrado: Ciencia da Computacao-UFMT
Digite a quantidade de posições a ser deslocada: 7
Texto cifrado/descifrado: Jplujph kh Jvtwbahjhv-BMTA

O resultado é o texto cifrado “Rkmuobc ny low - Pexnkwoxdkv”.

  1. Finalmente, use o script para decifrar o texto cifrado com deslocamento de -10 unidades (NÃO SE ESQUEÇA DE PRINTAR ESTE PASSO!):
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# python3 cesar_cipher.py
Digite o texto a ser cifrado/descifrado: Jplujph kh Jvtwbahjhv-BMTA
Digite a quantidade de posições a ser deslocada: -7       
Texto cifrado/descifrado: Ciencia da Computacao-UFMT

O resultado é o texto original decifrado!

  1. Apague o arquivo cesar_cipher.py:
┌──(root㉿kali)-[/home/aluno/Documentos]
└─# rm cesar_cipher.py 

┌──(root㉿kali)-[/home/aluno/Documentos]
└─# ls
  1. Feche o Terminal.

Parabéns! Agora você sabe implementar o ROT13 e a Cifra de César no Kali Linux.  

Atividade 1.5 – Controlando fluxo de trabalho via linha de comando no Kali Linux

Nesta atividade, vamos explorar a ferramenta de gerenciamento de tarefas na linha de comando chamada Taskwarrior.

Vamos começar inicializando a VM Kali Linux.

  1. Abra o Terminal e execute o seguinte comando para ser super usuário e instale o Taskwarrrior:
┌──(aluno㉿kali)-[~]
└─$ sudo -i
[sudo] senha para aluno:

┌──(root㉿kali)-[~]
└─# apt install taskwarrior
  1. Crie um diretório para armazenar os dados do Taskwarrior:
┌──(root㉿kali)-[~]
└─# mkdir -p ~/.task
  1. Crie um arquivo de configuração básico dentro desse diretório:
┌──(root㉿kali)-[~]
└─# echo 'data.location=~/.task' > ~/.taskrc
  1. Vamos adicionar 3 tarefas simples:
┌──(root㉿kali)-[~]
└─# task add Comprar leite                  
Created task 1.

┌──(root㉿kali)-[~]
└─# task add Comprar cafe  
Created task 2.

┌──(root㉿kali)-[~]
└─# task add Comprar salgados
Created task 3.
  1. Liste as tarefas (a idade da tarefa “Age” será diferente na sua tentativa):
┌──(root㉿kali)-[~]
└─# task list                

ID Age  Description          Urg 
 1 2min Comprar leite           0
 2 2min Comprar cafe            0
 3 1min Comprar salgados        0

3 tasks
  1. Marque a tarefa 2 como urgente e liste novamente as tarefas:
┌──(root㉿kali)-[~]
└─# task 2 modify +urgent
Modifying task 2 'Comprar cafe'.
Modified 1 task.

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

ID Age  Tags   Description          Urg 
 2 2min urgent Comprar cafe          0.8
 1 3min        Comprar leite           0
 3 2min        Comprar salgados        0

3 tasks
  1. Coloque o prazo de 31 de dezembro de 2036 para a tarefa 3 e liste novamente as tarefas:
┌──(root㉿kali)-[~]
└─# task 3 modify due:2036-12-31
Modifying task 3 'Comprar salgados'.
Modified 1 task.

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

ID Age  Tags   Due        Description          Urg 
 3 3min        2036-12-31 Comprar salgados      2.4
 2 4min urgent            Comprar cafe          0.8
 1 4min                   Comprar leite           0

3 tasks

Veja que um valor de urgência é atribuído para cada tarefa.

  1. Finalmente, configure a tarefa 1 como concluída e veja que ela é apagada ao listar as tarefas (NÃO SE ESQUEÇA DE PRINTAR ESTE PASSO!):
┌──(root㉿kali)-[~]
└─# task 1 done
Completed task 1 'Comprar leite'.
Completed 1 task.
You have more urgent tasks.

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

ID Age  Tags   Due        Description          Urg 
 2 4min        2026-12-31 Comprar salgados      2.4
 1 4min urgent            Comprar cafe          0.8

2 tasks
  1. Feche o Terminal. Parabéns! Agora, você conhece os principais comandos de gestão de fluxo de trabalho via linha de comando com a ferramenta Taskwarrior!