Laboratórios de hacking
Como criar uma rede Docker isolada para o seu laboratório
Crie uma rede Docker sem acesso à internet, rode o OWASP Juice Shop nela e publique uma cópia para o navegador só em 127.0.0.1.
Estruture um relatório de pentest e escreva um achado que outra pessoa consiga reproduzir, com evidência, impacto, vetor CVSS v4.0 e correção.
Um relatório de pentest é o registro escrito de um teste de segurança autorizado. Ele diz o que foi testado, o que foi encontrado, como um leitor pode confirmar cada achado e o que deve ser mudado. O teste termina quando o testador para de enviar requisições. O relatório é o que o dono do sistema guarda, compartilha com os desenvolvedores e usa para mostrar que o trabalho ficou dentro do escopo combinado.
O NIST SP 800-115, guia técnico sobre testes e avaliações de segurança da informação, cobre o processo inteiro, incluindo a análise dos achados e o desenvolvimento de estratégias de mitigação. O Web Security Testing Guide da OWASP tem um capítulo de Reporting que começa pela estrutura do relatório e por um esquema de nomes para os achados. Leia os dois quando puder. Este artigo foca na parte que você vai escrever primeiro: um relatório claro, com um achado que outra pessoa consiga reproduzir.
Um bug real que ninguém consegue reproduzir raramente é corrigido. Desenvolvedores precisam de passos que possam executar a partir de um estado limpo. Gestores precisam entender o que o risco significa para o negócio. Auditores precisam de prova de que o trabalho respeitou a autorização. Um único documento tem que atender às três leituras.
O relatório também protege quem testou. Um escopo escrito e um registro datado do que foi testado mostram que cada ação ficou dentro da autorização. Sem esse registro, um testador que encontrou uma falha real pode acabar discutindo se o teste era permitido.
Uma estrutura prática tem seis partes:
Cada achado responde às mesmas perguntas, na mesma ordem.
curl -i, com segredos removidos. Numere cada evidência para que os passos possam apontar para ela.Um achado que o leitor não consegue reproduzir só com a página não está pronto, por melhor que seja o título.
O impacto segue a evidência. Se você mostrou que um script rodou no navegador de uma conta de teste no seu próprio laboratório, escreva exatamente isso. Uma frase como "um atacante pode tomar conta de todas as contas" sem demonstração é exagero, e um desenvolvedor vai perceber. Isso também custa credibilidade no achado seguinte. Quando você não verificou algo, diga isso e nomeie o teste que confirmaria.
O resultado de um scanner mostra onde olhar. Antes de ele entrar no relatório, reproduza à mão, registre a requisição e a resposta e confirme o comportamento por conta própria. Você pode citar o scanner como origem da pista. Não cole a saída bruta como prova, porque ela pode estar errada e o leitor não consegue saber quais partes alguém conferiu.
A especificação do CVSS v4.0 define um grupo de métricas Base com dois lados. As métricas de exploração são vetor de ataque (AV), complexidade do ataque (AC), requisitos de ataque (AT), privilégios necessários (PR) e interação do usuário (UI). As métricas de impacto cobrem o sistema vulnerável (VC, VI, VA) e os sistemas subsequentes (SC, SI, SA). Uma string de vetor começa com CVSS:4.0 e lista todas as métricas base.
As faixas qualitativas de severidade são None em 0.0, Low de 0.1 a 3.9, Medium de 4.0 a 6.9, High de 7.0 a 8.9 e Critical de 9.0 a 10.0.
O escore tem quatro variantes conforme os grupos de métricas usados: CVSS-B só com Base, CVSS-BT com Base e Threat, CVSS-BE com Base e Environmental, CVSS-BTE com os três. Um primeiro relatório costuma trazer só o escore Base, então rotule como CVSS-B e não o apresente como avaliação completa de risco.
Use a calculadora oficial em https://www.first.org/cvss/calculator/4.0 para montar o vetor e obter a pontuação. Coloque o vetor no relatório, não só o número, para que o leitor veja quais premissas você usou. A string abaixo mostra apenas o formato. Ela não é a pontuação de nenhum achado do seu laboratório:
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:NPontue o que você verificou. Se o ataque depende de uma condição que você não conseguiu reproduzir, a métrica precisa refletir isso.
As evidências costumam conter cookies de sessão, tokens bearer, senhas e dados pessoais. Remova tudo isso antes de o arquivo sair da sua máquina. Mantenha o nome do cabeçalho e o formato do valor, para que o leitor ainda consiga acompanhar a requisição:
Cookie: session=<REDACTED>
Authorization: Bearer <REDACTED>Não cole um token válido em chat, ticket ou repositório público, e não faça commit de um arquivo que ainda o contenha. Se um segredo foi exposto no seu próprio laboratório, troque-o mesmo assim e registre a troca no relatório.
Você precisa do container OWASP Juice Shop do seu laboratório, rodando na sua própria máquina. Este exercício toca apenas essa instância local em 127.0.0.1. Não execute nenhum destes passos contra um site que você não possui ou para o qual não tem permissão escrita de teste.
Rode:
docker psOlhe a coluna de portas. O mapeamento deve começar com 127.0.0.1, o que significa que só a sua máquina consegue acessar o serviço. Se aparecer 0.0.0.0 ou nenhum endereço, pare o container e inicie de novo com o endereço de loopback na flag de publicação.
docker run -d -p 127.0.0.1:3000:3000 bkimminich/juice-shopDepois confira se o laboratório responde:
curl -i http://127.0.0.1:3000A linha de status deve mostrar um código de resposta de sucesso. Guarde a saída. Ela vai na seção de Escopo como prova do alvo testado.
Escolha um comportamento que você testou no navegador ou com uma única requisição, e que consiga descrever em poucos passos. Mantenha o escopo pequeno. Um achado bem sustentado é mais útil do que oito achados não verificados.
Repita a requisição com curl -i para que os cabeçalhos fiquem visíveis. Troque o caminho pelo que o seu achado usa e salve a saída em um arquivo:
curl -i "http://127.0.0.1:3000/<caminho-testado>" > evidence-01.txtA flag -i mostra os cabeçalhos da resposta antes do corpo. Leia a linha de status, o cabeçalho Content-Type e qualquer cabeçalho do qual o seu achado depende. Depois remova qualquer token ou cookie do arquivo antes de fazer commit.
Crie report.md no repositório do seu laboratório e use este modelo. Troque cada marcador pelo que você observou de fato:
## Scope
- Target: http://127.0.0.1:3000, my own OWASP Juice Shop container
- Authorization: I run this lab on a machine I own
- Dates: <start date> to <end date>
- Out of scope: everything else
## Finding title
<Flaw> in <exact location>
## Steps to reproduce
1. <Start from a clean browser session at http://127.0.0.1:3000>
2. <Exact action or request>
3. <What you see>
## Evidence
<Screenshot file name, or the redacted curl -i output file, matched to the steps>
## Impact
<What you verified. What you did not verify, and the test that would check it.>
## CVSS vector
<CVSS:4.0 vector from the calculator, and its rating>
## Remediation
<The specific fix, and how to check that it works>Veja o que o Git vai registrar antes de fazer commit, para que um arquivo sem redação não entre por engano:
git add report.md
git status
git commit -m 'First lab finding'Confirme o commit com git log --oneline -1. A linha deve mostrar a sua mensagem. Ao terminar, pare o container do laboratório com docker stop <container-name> e rode docker ps para confirmar que ele não aparece mais.
Laboratórios de hacking
Crie uma rede Docker sem acesso à internet, rode o OWASP Juice Shop nela e publique uma cópia para o navegador só em 127.0.0.1.
Laboratórios de hacking
Monte um laboratório que você pode atacar: arquivo de escopo, portas do Docker no loopback, rede isolada, caderno de notas e desmontagem limpa.
Laboratórios de hacking
Rode o OWASP Juice Shop em um contêiner Docker restrito à sua máquina, confirme que ele responde e pare-o sem deixar nada rodando.