Shell Ter Labs
Shell Ter Labs
Shell Ter Labs
WEB
Os desafios web vo testar o seu conhecimento em segurana de aplicaes web. Para resolver os
desafios nessa categoria, voc deve entender os conceitos bsicos de como uma aplicao web
funciona, os protocolos usados, os tipos de requisices e configuraes.
Uma das primeiras coisas que voc deve fazer ao se deparar com uma aplicao web "examinar" a
aplicao. Isso significa que voc deve navegar por todos os links para descobrir sobre o que ,
quais funcionalidades possui, quais partes so dinmicas e o que pode ser explorado. Alm disso,
voc deve sempre lembrar de olhar o cdigo fonte da pgina.
Em geral, voc apenas precisa clicar com o boto direito na pgina e escolher "visualizar cdigo
fonte".
Isso ir abrir uma nova aba com o cdigo fonte. Na maioria dos casos, ser necessrio ver em um
formato melhor ou verificar um elemento especifico.
Para fazer isso, apenas clique com o boto direito no elemento e selecione "inspecionar elemento".
Isso ir abrir uma tela com o cdigo fonte, destacando o elemento que voc clicou. Se voc colocar
o ponteiro do mouse sobre os elementos e tags do cdigo fonte, ele ir destacar o elemento referente
na pgina. Voc tambm pode editar elementos HTML, mas estas mudanas s refletem localmente.
O cdigo fonte de uma aplicao pode esconder muitas informaes importantes. Verifique o
cdigo fonte por comentrios que os desenvolvedores possam ter esquecido, veja se voc consegue
pegar alguma informao que no visvel para o usurio final, como inputs escondidos.
Outra coisa que voc deve sempre checar o arquivo robots.txt. Este um arquivo texto que
comumente utilizado por engines de busca, web crawlers e robs de busca. um padro utilizado
por web sites para determinar quais pastas e pginas devem ou no ser indexadas pelos sites de
busca, como o Google. Ento se voc encontrar algo como:
User-agent: *
Disallow: /admin
Disallow: /scripts
Allow: /site
Allow: /misc
Talvez se voc abrir o caminho admin e scripts voc encontre algo interessante.
Cookies tambm devem ser olhados... E ns no estamos falando de comida aqui. :-) Cookies
geralmente so usados para armazenar dados no navegador do usurio, normalmente especfico a
aquele visitante. Web sites so sem estado, ento os cookies fornecem um tipo de memria para os
sites. Pode ser usado para uma variedade de propsitos como: manter voc logado, salvar as
preferncias que voc definiu e lembrar a prxima vez que voc retornar, ajudar os anunciantes a
rastrear seus interesses.
Desenvolvedores devem usar os cookies com cuidado, considerando que cookies podem ser
perigosos se usado incorretamente. Eles podem revelar dados confidnciais e privados de uma
sesso, podem contribuir para burlar as restries de segurana, entre outros. Como os cookies so
armazenados no lado do cliente, eles so vulnerveis a manipulao.
Para entender o conceito de cookies, ns devemos ter um conhecimento bsico do protocolo HTTP.
HTTP (Hyper Text Transfer Protocol) um protocolo orientado a requisio-resposta que
especifica a comunicao entre o navegador e o servidor web.
Para entender cada campo usado pelo cabealho HTTP, leia mais em:
https://pt.wikipedia.org/wiki/Lista_de_campos_de_cabealho_HTTP.
No 1 uma nica pgina requisitada ao servidor com o referenciador (referer) para o host
http://shellterlabs.com/. O servidor, como podemos ver no 2, define um cookie com a flag de
notificao como verdadeira e o tempo em que aquele cookie ir expirar. Quando um usurio
requisita outra pgina, o navegador l o cookie e envia o cabealho com a flag de notificao no
cookie como verdadeira, assim como foi definido anteriormente.
Voc pode dizer: Tudo bem, mas isso apenas uma flag de notificao. O que tem de errado?
Alguns web sites definem restries de segurana no cookie. Ento ns podemos mudar para burlar
alguma autenticao.
Por exemplo:
Aqui ns tentamos acessa a pgina de administrao, mas no permitido. Prestando ateno ao
cookie, existe uma flag ofuscada, aXNhZG1pbj1mYWxzZQ==.
Desta forma, ns precisamos interceptar a requisio, mudar a flag isadmin para verdadeiro, ento
codificar com base64 novamente e encaminhar para o servidor. Com isso possvel dizer para o
servidor web que ns somos o administrador e acessar a pgina requisitada, burlando a restrio.
Em alguns momentos interessante ter uma ferramenta para interceptar as requisies. Estas
ferramentas agem como um proxy entre voc e o web site que voc est navegando. Ela permite que
voc intercepte, inspecione e modifique os cabealhos e parametros HTTP/HTTPS. Isto muito til
durante a anlise da segurana de uma aplicao web.
BurpSuite
Da pgina oficial: "Burp Suit uma plataforma integrada para realizar testes de segurana
em aplicaes web. Suas vrias ferramentas trabalham juntas perfeitamente para suportar o
processo completo de testes, do mapeamento inicial e anlise da superficie de ataque da
aplicao, at encontrar e explorar as vulnerabilidades web.". Existem duas edies: Gratuita
e Profissional. A edio gratuita deve atender as suas necessidades.
Website: https://portswigger.net/burp/
TamperData Plugin
uma extenso gratuita do Mozilla Firefox para rastrear, gravar e modificar requisies
HTTP/HTTPS.
Website: https://addons.mozilla.org/en-US/firefox/addon/tamper-data/
OWASP ZAP
Da pgina oficial: "O OWASP Zed Attack Proxy (ZAP) um das ferramentas gratuitas mais
populares do mundo e ativamente mantida por centenas de voluntrios internacionais. Ele
pode te ajudar a automaticamente encontrar vulnerabilidades em suas aplicaes web
enquanto voc desenvolve e testa suas aplicaes. Ele tambm uma tima ferramenta para
pentesters experientes para utilizar em testes de segurana manuais."
Website: https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project
Para fazer qualquer coisa com o Burp, primeiro voc precisa configurar o seu navegador. Ao
executar a ferramenta, uma porta local aberta no seu sistema (padro 8080), ento voc deve
mudar as configuraes de proxy do seu navegador para usar o endereo de proxy 127.0.0.1 e a
porta 8080. Aps fazer isso, todo o seu trfego ir passar atravs do Burp enquanto voc navega.
Tente voc. Com o Burp rodando, acesse qualquer pgina HTTP no seu navegador configurado.
Voc ir perceber que o seu navegador ficar aguardando a requisio completar. Isso ocorre porque
o Burp interceptou a requisio. You will see that your browser will be waiting the request to
complete. This occurs because Burp intercepted the request.
No Burp, v para a aba Proxy e ento para a sub aba Intercept. Voc ir ver a requisio exibida no
painel principal. Voc pode escolher entre: Encaminhar a requisio, para enviar a requisio para
o destino, Drop, para descartar ou desligar o Intercept para navegar normalmente.
Tente desabilitar o Intercept
Volte para o navegador. Voc ir ver que a requisio foi processada normalmente.
Por favor, acesse: https://support.portswigger.net/customer/portal/articles/1783075-installing-burp-
s-ca-certificate-in-your-browser para instrues em como installar o certificado do Burp no seu
navegador, para que seja possvel navegar em sites HTTPS atravs do Burp.
Enquanto navega, cada requisio feita interceptada pelo Burp (considerando que voc est com o
Intercept habilitado). Na aba Intercept voc pode no s visualizar a requisio como tambm
modificar. Isto uma funcionaliadde bem interessante e que voc ir usar logo logo.
Desafio:
Agora sua vez! Voc aprendeu o suficiente para completar esses simples desafios. V em frente.
Desafio web de introduo 1:
Como ns comentamos anteriormente, existe algo escondido nessa pgina. Voc encontrou?
Complete o desafio!
<!-- Parabns, voc encontrou o comentrio escondido. Aqui est o link para o
prximo desafio: https://shellterlabs.com/pt/welcome/lesson-2/web-application-
basics/hidden-admin/ -->
Voc sabe o que acontece quando um programa instalado ou simplesmente executado? Como um
programa verifica cdigos de validao? Como algum poderia passar por cima destas verificaes?
Como algum poderia entender os detalhes mais obscuros de uma vulnerabilidade de forma a
conseguir explor-la ou corrigi-la. Qual o comportamento de um malware no sistema? As
respostas para estas e muitas outras questes, voc entrar atravs da Engenharia Reversa.
A arte da Engenharia Reversa de Software, mais conhecida como Reversing, trata-se de descobrir
o que est acontecendo com um programa sem ter em mos o cdigo fonte. Isto pode ser alcanado
atravs de uma anlise dinmica ou esttica.
Nesta lio ns apresentaremos apenas o bsico da engenharia reversa, mas suficiente para voc
comear a resolver algumas questes.
Lembre-se:
Quando estiver analisando um malware ou algum exploit, faa em um ambiente controlado, como
uma mquina virtual ou um computador que no seja crtico para voc. Desta forma, se algo sair
fora de controle, ser mais fcil de recuperar!
Existem dois comandos que devem sempre ser usados: file e strings.
file um comando que determina o tipo do arquivo. file executa uma sequncia de testes para tentar
classficar o arquivo. O processo de engenharia reversa depende do tipo de arquivo e de qual
arquitetura (32 bits ou 64 bits) ele foi construdo. Entretanto, voc deve saber que este comando
nem sempre dar o resultado correto. file executa 3 tipos de testes na seguinte ordem: teste de
filesystem, teste do magic number e testes de linguagem. O primeiro teste que for feito com sucesso
ser a sada impressa pelo comando, e estas informaes podem ser falsificadas, principalmente o
magic number. No confie em tudo cegamente.
Aps executar o comando file, podemos ver que se trata de um executvel do tipo ELF, e compilado
para 64 bits.
Leia mais sobre o ELF aqui: http://www.thegeekstuff.com/2012/07/elf-object-file-format/
Voc pode ver tambm muito mais informaes que sero teis durante a engenharia reversa mas
ns no entraremos em detalhe agora.
Como mencionamos, strings vai mostrar todo os caracteres que podem ser exibidos no binrio. Ao
ver esses textos, deve te dar uma ideia do que o binrio foi feito. Voc pode ver mensagens como
"Usurio Correto", "Senha Correta" e tambm "Tente Novamente".
Ento, quando voc digita o usurio ou senha, o programa provavelmente vai verificar o que voc
digitou e ento retornar uma dessas mensagens. O usurio e a senha esto embutidos no cdigo, o
que significa que o usurio e senha corretos j se encontram o binrio. Voc pode encontr-los
apenas olhando para o resultado do comando strings? Caso no, no se preocupe, daqui a pouco ns
iremos ajudar voc a encontrar.
Linguagem Assembly
Uma vez que voc sabe algo sobre o arquivo, hora de mergulhar no executvel e descobrir o que
realmente faz. Disassemblers e debuggers vo ser seus melhores amigos nessa etapa. Mas para
entender o que essas ferramentas esto dizendo, voc primeiro deve aprender a linguagem deles.
Quando voc escreve um software, o processo de compilar ir transformar o cdigo fonte que voc
escreveu nessa linguagem de baixo nvel que pode ser entendida pelos computadores. Linguagens
como C/C++ so diretamente traduzidas para o Assembly, enquanto linguagens como Java e C# so
traduzidas para outras linguagens: Java Bytecode no caso do Java e Microsoft Intermediate
Language (MSIL) no caso do C#. O que vai ser interpretado por suas respectivas mquinas
virtuais.
A ideia por trs da mquina virtual fazer com que o cdigo seja compatvel com qualquer
plataforma, j que o cdigo ser compilado para o cdigo da mquina virtual e apenas interpretado
pela mquina virtual para o computador que estiver.
Nesta lio ns iremos focar em uma linguagem assembly chamada MIPS e IA-64. Essa
linguagem comumente utilizada em sistemas embarcados como roteadores, videogames como
Nintendo 64, Sony Playstation, entre outros.
Para entender at o mais bsico da linguagem assembly, voc precisa primeiro entender o que so
registradores. O conjunto de registradores de cada linguagem assembly pode ser diferente, mas os
conceitos so essencialmente os mesmos. Os registradores so usados em conjunto com as
instrues que ns iremos ver mais tarde.
Alguns dos Registradores de CPU comuns so descritos abaixo:
EIP: Instruction Pointer - Guarda o endereo de memria da prxima instruo a ser
executada. O CPU olha para ele quando precisa saber o que fazer a seguir. Voc ir ver
bastante esse registrador.
ESP: Stack Pointer - Responsvel por guardar a referncia para o topo da pilha. Em outras
palavras, o ltimo item na pilha.
EBP: Base Pointer - utilizado para "caminhar" pela pilha.
EAX: Tambm chamado de "Acumulador", normalmente utilizado para operaes
aritimticas e para guardar resultados.
EBX: o registrador "Base", normalmente utilizado para armazenar dados em geral e
endereos de memria.
ECX: o registrador utilizado para "Contagem". O nome fala por si s. utilizado como
um contador, principalmente para controlar loops/iteraes.
EDX: Este o registrador de dados e utilizado para armazenar o endereo de uma varivel
na memria.
ESI/EDI: Respectivamente "ndice de Origem" and "ndice de Destino" so menos
utilizados do que os registradores anteriores. Normalmente so usados para transferir dados,
com o ESI armazenando o endereo de origem de uma varivel e o EDI armazenando o
endereo de destino. Eles no podem ser acessados a nvel de byte.
O add uma instruo aritmtica responsvel por adicionar dois nmeros e salv-los no registrador.
Por exemplo:
Cdigo C:
A = B + C;
Cdigo MIPS:
add $s0, $s1, $s2
O primeiro registrador $t0 o destino, em outras palavras, o registrador no qual o resultado ser
armazenado. O segundo e terceiro registradores so comparados com menor que:
$t1 < $t2
Lembre-se:
Pulos incondicionais sempre ocorrem. No existem condies a serem verificadas.
Mas ns tambm temos jr, que significa: pule para um endereo contido em um registrador.
j alvo # pulo incodicional para o alvo/rtulo do programa
jr $t3 # pule para o endereo contido em $t3
Siga estes links se voc quiser mergulhar na linguagem MIPS e aprender mais instrues:
http://mescal.imag.fr/membres/vania.marangozova-
martin/TEACHING/NACHOS/NACHOS_DOC/04-MIPSintro.pdf
https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/ # MIPS ISA Programming
http://alumni.cs.ucr.edu/~vladimir/cs161/mips.html
Aps voc aprender um pouco mais, veja se voc capaz de entender o que est acontecendo nesse
programa:
https://shellterlabs.com/en/welcome/lesson-3/art-reverse-engineering/mips/
Ferramentas
Disassemblers pegam os executaveis como entrada e devolvem o cdigo assembly equivalente para
voc. Aqui voc ir testar o seu conhecimento em linguagens assembly. Com o cdigo em suas
mos, voc pode aprender sobre o funcionamento interno da aplicao mas algumas partes podem
no ser analisadas apenas por usar um disassembler ou o cdigo esttico que retorna. Estas so as
partes dinmicas do cdigo, aquelas que realmente existem durante o tempo de execuo. a que
outra ferramenta toma lugar, o: debugger.
Ao executar a aplicao em um debugger, voc ser capaz de capturar o seu fluxo de execuo,
identificar areas interessantes e criar alguns pontos de pausa (breakpoints) com o objetivo de parar a
execuo da aplicao e analisar o estado no momento daquela pausa. Muitos debuggers do a
capacidade de mudar os dados utilizados pela aplicao. Muitos debuggers tambm vm juntos com
disassemblers. Dependendo do propsito no qual voc est realizando a engenharia reversa, voc
pode inclusive mudar o seu cdigo em tempo real.
GDB: GDB, o GNU Project debugger, permite que voc veja o que est "dentro" do
programa enquanto o executa -- ou o que o programa est fazendo no momento que deu
erro. https://www.gnu.org/software/gdb/
OllyDBG: O OllyDbg um debugger 32-bit de nvel assembler para Microsoft
Windows. Com nfase na anlise do cdigo binrio, torna-se particulamente til quando o
cdigo fonte est indisponvel. http://ollydbg.de/
Immunity Debugger: O Immunity Debugger uma nova forma poderosa para escrever
exploits, analisar malwares, e realizar a engenharia reversa em arquivos binrios.
construdo em uma slida interface grfica, a primeira ferramenta de anlise heap da
industria construda especificamente para criaao de heap, e uma API Python grande e bem
suportada para fcil extensibilidade. https://www.immunityinc.com/products/debugger/
IDA: O IDA Disassembler e Debugger um disassembler interativo, programvel,
extensvel, multiprocessador, capaz de rodar em Windows, Linux ou Mac OS X. O IDA se
tornou o padro para anlise de cdigos maliciosos, pesquisa de vulnerabilidade e validao
de softwares comerciais. https://www.hex-rays.com/products/ida/
ObjDump: Do manual objdump exibe informaes sobre um ou mais arquivos. As opes
controlam qual informao em particular deve ser mostrada. Essa informao em grande
parte til para programadores que esto trabalhando nas ferramentas de compilao, opondo-
se a programadores que apenas querem que seu programa compile e funcione.
Radare2: O projeto Radare iniciou como uma ferramenta forense, um editor hexadecimal
capaz de abrir arquivos de disco. Mais tarde, passou a suportar anlise de binrios,
disassemble de cdigo, debug de programas e etc.. https://github.com/radare/radare2
Primeiramente, voc pode tentar apenas executar o binrio seguindo o fluxo normal sem nenhuma
interao. Para fazer isso, apenas digite r ou run.
Ok. Agora o que ns estamos tentando fazer descobrir o que seria o nome de usurio correto.
Um bom ponto de partida seria ler o cdigo assembly desse binrio. Para fazer isso, dentro do GDB
digite disassemble main.
Ao olhar para o cdigo, ns conseguimos identificar em (1) o primeiro retorno do programa, que
deve ser a mensagem de boas vindas. Ento, ns temos outro retorno em (2), que a mensagem de
usurio. Em (3) voc identifica o mtodo scanf, que ir ler o que voc digitar. Agora chegamos na
parte interessante. Voc j digitou o usurio e o programa deve decidir se voc digitou corretamente.
No endereo 0x000000000040069c chamado o mtodo strcmp. E antes de chamar o mtodo, deve
ser definido os 2 parmetros. Esses parmetros so o texto que voc digitou e o usurio a ser
comparado com esse texto. Um copiado para o registrador %rdx, e o outro para o registrador
%eax. Vamos ver se ns conseguimos ler o que so estes registradores durante a execuo.
Para definir o ponto de pausa in GDB, use o comando b *addr. Defina o ponto de pausa e execute
o programa com o comando r.
Quando voc atingir o ponto de pausa, uma mensagem ser exibida e o GDB ir aguardar pela sua
prxima interao. Tudo o que ns precisamos fazer agora ler os valores nesses registradores
atravs dos comandos x/s $rax e x/s $rdx
Agora que ns sabemos o contedo do $rax, user, o que ns digitamos quando fomos
perguntados pelo usurio. Ento, o contedo do $rdx, elliot, que deve ser o usurio que o
programa estava esperando.
Vamos tentar. Digite r para executar o programa novamente, digite o usurio que voc encontrou
no $rdx e quando voc atingir o ponto de pausa, apenas digite c ou continue.
Bom trabalho! Voc pegou o nome correto do usurio. Voc pode prosseguir e realizar o mesmo
para encontrar a senha? Fac esse exerccio mesmo se voc j tenha encontrado atravs do comando
strings anteriormente.
Desafio:
https://shellterlabs.com/en/welcome/lesson-3/art-reverse-engineering/it-rules/
https://shellterlabs.com/en/welcome/lesson-3/art-reverse-engineering/mips/
https://shellterlabs.com/en/welcome/lesson-3/art-reverse-engineering/do-dump/
https://shellterlabs.com/en/welcome/lesson-3/art-reverse-engineering/hnr4-rev101/
Leitura Adicional:
Reversing - Secrets of Reverse Engineering
The Art of Debuggingwith GDB, DDD, and Eclipse
https://www.gitbook.com/book/radare/radare2book/details
https://github.com/pwntester/cheatsheets/blob/master/radare2.md
IDA Pro Book, 2nd Edition
http://mescal.imag.fr/membres/vania.marangozova-
martin/TEACHING/NACHOS/NACHOS_DOC/04-MIPSintro.pdf
https://www.sans.org/reading-room/whitepapers/malicious/basic-reverse-engineering-
immunity-debugger-36982
http://www.thegeekstuff.com/2012/07/elf-object-file-format/
http://www.csee.umbc.edu/portal/help/architecture/aig.pdf
Entendendo a Criptografia
Essa lio deve ser um ponto de partida no mundo da criptografia. Este um tpico profundamente
matemtico e analtico, e na rea de segurana ns o vemos mais como se fosse uma "ferramenta"
de suporte. Ns iremos fornecer uma breve viso geral para que voc possa comear a resolver
questes bsicas nesse assunto. Para resolver os desafios dessa categoria, voc deve se familizarizar
com os mtodos mais populares e o bsico da criptografia clssica.
A palavra Criptografia vem do Grego, sgnificando "escrita escondida", e o que ns vamos comear
a aprender aqui a arte da criptoanlise, que significa, a arte de decifrar.
O principal uso da criptografia na vida real garantir a parte da confidencialidade na trade de
segurana (confidencialidade, integridade, disponibilidade). O que significa proteger seus dados de
serem lidos/acessados por algum que no deveria. Mas, como a maior parte das coisas na vida, ela
pode ser usado para o bem e para o mal.
Quando voc se autentica em um website, voc no quer que ningum observando a rede possa ver
sua senha sendo transmitida ao destino, e a onde o Hyper Text Transfer Protocol Secure (HTTPS)
entra. A camada extra usando SSL/TLS no protocolo HTTP cria uma conexo encriptada entre o
cliente e o servidor, evitando que pessoas possam bibliotar seu trfego e ver suas senhas ou outros
dados sensveis que possam estar sendo trafegados.
Voc tambm usa a criptografia para proteger os dados digitais em seu computador. Se voc carrega
dados sensveis, voc no quer que esse dado seja acessado por estranhos no caso de voc perder ou
ser roubado. Isso tambm se aplica aos smartphones. Hoje em dia, a maioria dos smartphones vm
criptografados por padro, o que significa que se algum tentar acessar o disco do seu celular, ele
no vai ter acesso aos dados. Um caso como esse esteve recentemente na mdia, quando o FBI no
estava conseguindo acessar os dados dos smartphones dos atiradores de San Bernadino [1].
Os criminosos tambm usam muito a criptografia nos conhecidos malwares. Hoje em dia, a maioria
das grandes empresas possuem muitos sistemas de proteo, como Firewalls, IPS e IDS, mas muitas
destas solues no podem fazer muito se no conseguem ler o que est sendo transmitido na rede.
Ento, se voc tentar transmitir um payload atravs da rede, as solues de segurana
provavelmente vo pegar facilmente, mas os atacantes podem dificultar um pouco se a conexo
estiver criptografada.
Em CTFs, no entanto, a grande parte das criptografias de alto nvel no so geralmente usadas. Em
alguns casos, voc vai ver alguns mtodos de criptografia "caseiros", que voc pode reverter, ou
ento alguns mtodos j conhecidos e que tudo o que voc precisa fazer alimentar em alguma
ferramenta online para encontrar a resposta. Normalmente, a parte mais difcil em desafios de
criptografia descobrir que tipo de criptografia est sendo usada. Ns veremos aqui algumas das
tcnicas clssicas e como elas funcionam.
CODIFICAO BSICA
Comeando com realmente bsico, considere a tabela abaixo:
Onde cada letra atribuda a um nmero entre 65 e 90. Essa a representao das letras maisculas
em nmeros decimais. Portanto, qualquer mensagem pode ser reescrita usando nmeros. Por
exemplo:
GO AHEAD AND CRACK IT
equivalente a:
717932657269656832657868326782656775327384
No comeo pode parecer confuso, mas voc deve notar que existem apenas nmeros decimais, sem
letras ou caracteres especiais. Se voc olhar atentamente e dividir os nmeros, vai ficando mais
claro. Separando os dois primeiros nmeros 71, de acordo com a nossa tabela, ele equivalente a G.
O prximo 79, que equivalente a O, e assim por diante. Isso chamado Tabela ASCII [2] e o que
ns fizemos foi a codificao do texto ASCII para a sua respectiva representao decimal e depois
decodificamos de volta a partir do decimal.
Observe que a nossa tabela consiste apenas de letras maisculas. E se ns tambm tivssemos letras
minsculas? Como ficaria a nossa tabela? Tente descobrir.
Neste caso, um nmero decimal estava relacionado com a letra. Outra forma comum de encode que
funciona de forma similar e que voc ver com frequncia so: octal, decimalm hexadecimal e
HTML.
Existem muitos websites que fazem a codificao e decodificao automaticamente para voc. No
entanto, importante saber como funciona e, em alguns CTFs, voc pode estar participando sem
acesso a internet. Para uma tabela de fcil acesso, tente digitar no seu terminal:
$ man ascii
Hora do desafio
Voc percebeu que a nossa tabela contm apenas letras maisculas? E se ns tambm
tivssemos letras minsculas? Como seria a nossa tabela? Tente descobrir.
Voc consegue desenvolver um programa que codifica e decodifica strings no formato octal,
decimal e hexadecimal?
Ganhe alguns pontos: ASCII Encoding
Codificao Base64
Outro famoso mtodo de codificao o chamado base64. Esse mtodo til para codificar
arquivos em um formato ASCII. Ele no um mtodo de criptografia mas muito utilizado para
codificar e transferir dados por no possuir caracteres especiais como %$!; ou qualquer outro
caractere no ASCII, que poderia quebrar alguns softwares.
Esse mtodo consiste em pegar trs bytes, dividir estes bytes em quatro grupos de seis bits. Cada
conjunto de seis bits pode ser de 0 a 63, que , 64 possveis valores (da a origem do nome do
mtodo). Ento, a codificao em base64 utiliza a seguinte tabela:
possvel que ao codificar, voc no consige obter trs bytes. Neste caso, necessrio preencher o
contedo da mensagem. Isso pode ser realizado usando o smbolo de preenchiment =.
Primeiro de tudo, ns precisamos obter os binrios dos caracteres que ns queremos codificar:
Depois disso, ns dividimos cada um destes blocos em pedaos de 6 bits cada, ento todos eles
podem ficar entra 0 at 63, como mencionado anteriormente. After that, we split each of these
blocks in chunks of 6 bits each (1byte), so they can all be on the range from 0 to 63, as we
mentioned earlier.
Outros mtodos similares que voc deve verificar so Base32 e Base16 [3].
Hora do desafio
Voc consegue escrever um programa que codifica e decodifica o texto de/para Base64?
Hora do desafio
Qual a mensagem que gerou o texto cifrado abaixo?
Voc precisa descobrir o valor de deslocamento para decifrar a mensagem.
OHJRPUN PZ NYLHA
Cifra de Vigenre
At agora, ns precisvamos saber apenas que tipo de codificao estava sendo usado para
decodificar para texto plano. Mas, estes so os fceis. Algumas cifras requerem uma chave para
decifrar. Os criptosistemas clssicos tambm so chamados de criptosistemas simtricos porque a
chave utilizada para descriptografar a mesma utilizada para criptografar. As chaves assimtricas,
no entanto, utilizam chaves diferentes para criptografar e descriptografar. Nessa lio ns falaremos
apenas sobre as cifras simtricas, isso siginifica que, para decifrar, voc vai precisar saber a chave
que foi utilizada para cifrar.
"E como eu pego a chave?" Voc deve estar perguntando. Bom, existem muitas formas de fazer na
vida real, como explorar uma vulnerabilidade que te d acesso ao cdigo fonte onde a chave est
gravada (hardcoded), entender o algoritmo de criptografia e encontrar uma falha lgica, ou realizar
um ataque de fora bruta. Em CTFs, quando voc enontra cifras que requerem uma chave,
normalmente a melhor abordagem realizar fora bruta com chaves bvias. Se a chave uma
string, por exemplo, tente algo como 'flag', ou o nome da competio, ou algo que possa estar na
descrio da questo.
Para dar um exemplo de cifra que usa chave, ns iremos mostrar a Cifra de Vigenre. realmente
similar a Cifra de Csar.
Para criptografar o texto, voc vai precisar usar uma tabela vigenre como a seguinte:
Se voc observar, cada linha corresponde a um deslocamento de X do alfabeto. Na Cifra de Csar
ns vimos um deslocamento de X=3, que significa usar a linha 'D'. A Cifra de Vigenre pode usar
todas as linhas da tablea (diferentes rotaes), mas o que vai decidir qual rotao usar a chave.
Pegue a primeira letra da chave e encontre a linha da tabela que comea com aquela letra;
Pegue a primeira letra do texto que voc quer criptografar e encontra a coluna correspondente a ela.
Se voc continuar letra por letra, voc vai perceber que a chave menor que o texto a ser
criptografado, mas isso no um problema. Uma vez que voc pegue o ltimo caractere da chave,
voc vai recomear a partir da primeira letra at voc criptografar todo o seu texto.
Hora do desafio
Voc consegue escrever um programa que criptografa e descriptografa o texto de/para
Vigenre? O programa deve solicitar ao usurio uma chave.
Qual a chave utilizada para gerar o texto abaixo?
Qual a mensagem em texto plano?
DLECYBRXNPKPYXVVOPXSDAICDAIC
Cifra de Substituio
Outro tipo de criptografia a cifra de substituio, que ao invs de usar simples descolocamentos,
utiliza uma permutao aleatria do alfabeto. Para essa lio, ns criamos essa tabela aleatria.
Nesse caso, se ns quisermos criptografar o seguinte texto: In this case, if we want to encrypt the
following text:
Hacking n Roll is great
Ns obteremos:
DKFTMPZ P VIEE MC ZVYKJ
Note que nem sempre essa tcnica ir funcionar, e isso porque voc precisa de um texto
criptografado que tenha quase a mesma frequncia de distribuio das letras. Na flag anterior, ns
temos apenas um Y (E) e dois K (a).
Concluso
Este foi o bsico da criptografia, no tutorial ns mal arranhamos a superficie da criptografia, mas
deve ser um bom ponto de partida para trilhar o seu caminho nessa rea e ganhar alguns pontos em
CTFs.
Agradecimentos
Ns gostaramos de agradecer ao Professor Incio Alves (@icanolargv) pela contribuo durante a
escrita e criao de desafios para essa lio.
Leitura Adicional
dCode.fr
Understanding Cryptography: A Textbook for Students and Practitioners
Applied Cryptography: Protocols, Algorithms and Source Code in C
Break the Code: Cryptography for Beginners
Computer Security: Art and Science (Chapter 9)
Referencias
[1] Why can't the FBI hack into San Bernardino killer's iPhone? Apple's mobile security explained
[2] RFC 20
[3] RFC 4648
[4] Aalgoritmy.net - Caesar Cipher