O aprendizado encontra a diversão no 2022 SANS Holiday Hack Challenge – prepare-se para um passeio de crackerjack no Pólo Norte enquanto eu frusto o plano sujo de Grinchum e recupero os cinco anéis de ouro
Este é o meu primeiro ano participando do Desafio de hack de férias do SANS E foi uma explosão. Por meio de uma série de 16 desafios que vão do fácil ao difícil, pratiquei a análise de tráfego de rede suspeito e logs do PowerShell, escrevendo Regras Suricata, saindo de um Container Docker, encontrando chaves vazadas para explorar um Pipeline de CI/CD do GitLab e um usuário da AWS, conduzindo Ataques de entidades externas XML, e hackear um contrato inteligente para comprar um token não fungível.
A melhor parte dessa experiência foi que ela me apresentou a novas ferramentas e tecnologias, ampliando ainda mais meu conhecimento de segurança cibernética. Aqui, compartilho alguns destaques da solução dos desafios.
Orientação
Cada participante recebe um avatar para navegar em um ambiente de videogame no navegador definido no Pólo Norte:
Durante a orientação, você recebe uma carteira de criptomoeda que o jogo usa para premiar KringleCoins por completar desafios e que você usa no último desafio para hackear um contrato inteligente. Curiosamente, o jogo acompanha todas as transações KringleCoin em um blockchain Ethereum, o que significa que um registro completo de seu progresso também é armazenado neste blockchain.
Para o primeiro toque do jogo.
1. Anel de Tolkien
Encontrar o anel de Tolkien exigiu flexionar meus músculos de análise de logs.
phishing Wireshark
Primeiro, usei o Wireshark para analisar os dados fornecidos .pcap arquivo que revelou um servidor em adv.epostoday[.]uk baixando o arquivo Ref_Sept24-2020.zip para um computador:
Espiando dentro do arquivo ZIP, encontrei um executável chamado Ref_Sept24-2020.scr que acionou duas detecções no ESET Endpoint Security: BAT/Runner.ES e Generik.TAGTBG. Esse malware eventualmente leva a um executável malicioso em execução na memória chamado config.dll e detectado pela ESET Scanner de Memória Avançado as Win32/Dridex.DD.
Logs de eventos do Windows
Em seguida, analisei os dados fornecidos .evtx arquivo contendo logs do PowerShell com Visualizador de eventos. Embora existam outras ferramentas para analisar os logs do PowerShell, se os invasores souberem como usar binários que vivem fora da terra para permanecer fora do radar, os defensores também devem ser bem versados nas ferramentas nativas fornecidas por um sistema operacional.
Como os logs continham 10,434 eventos, agrupei os eventos por data e, em seguida, executei a ação Localizar para procurar quaisquer eventos contendo o $ personagem. No PowerShell, $ é usado para criar e referenciar variáveis. Encontrei um ataque acontecendo em 24 de dezembro de 2022, quando o invasor executou o seguinte script:
Parece que o invasor encontrou uma receita secreta, trocou o ingrediente secreto de mel para óleo de peixee, em seguida, criou um novo arquivo de receita. Isso acionou um evento com um ID de 4104, que representa a execução de comandos remotos do PowerShell. Portanto, filtrei os eventos por esse ID, ajudando-me a encontrar eventos maliciosos adicionais mais rapidamente.
Regata Suricata
O último exercício para o Tolkien Ring foi escrever quatro regras Suricata para monitorar o tráfego de rede para uma infestação de Dridex:
alert dns $HOME_NET any -> any any (msg:”Pesquisa de DNS ruim conhecida, possível infecção por Dridex”; dns.query; conteúdo:”adv.epostoday.uk”; nocase; sid:1; rev:1;)
alert http 192.185.57.242 any <> any any (msg:”Investigar conexões suspeitas, possível infecção por Dridex”; sid:2; rev:1;)
alert tls any any -> any any (msg:”Investigue certificados inválidos, possível infecção por Dridex”; tls.cert_subject; content:”CN=heardbellith.Icanwepeh.nagoya”; sid:3; rev:1;)
alert http any any -> any any (msg:”Função JavaScript suspeita, possível infecção por Dridex”; file_data; content:”let byteCharacters = atob”; sid:4; rev:1;)
Em ordem, essas regras capturam pesquisas de DNS para adv.epostoday[.]uk, conexões com o endereço IP 192.185.57[.]242, o uso do servidor malicioso hearbellith.Icanwepeh[.]nagoya identificado pelo nome comum (CN) em um certificado TLS e o uso do JavaScript a para B() função para decodificar uma string binária contendo dados codificados em base64 no cliente.
Completar esses três desafios me rendeu o Tolkien Ring:
Para o segundo toque.
2. Anel Élfico
Os desafios mais proeminentes para o Elfen Ring foram Prison Escape e Jolly CI/CD.
Prison Escape
O Prison Escape foi um lembrete severo de que conceder privilégios de root a um usuário em um contêiner Docker é tão bom quanto conceder privilégios de root no sistema host. O desafio era sair do contêiner. Bem, feito facilmente quando você é root:
Como usuário root, listei as tabelas de partição para o dispositivo e, em seguida, montei o sistema de arquivos do host, concedendo-me acesso total ao host. Agora eu poderia procurar a chave, que deve estar localizada no diretório inicial, conforme revelado pelas dicas do jogo:
CI/CD alegre
Embora tenha sido rápido, Jolly CI/CD me levou mais tempo para descobrir. Primeiro, recebemos um repositório Git para clonar por HTTP:
Pela URL, pude ver que o nome do repositório era wordpress.flag.net.internal, então mudei para o repositório e encontrei um site WordPress. Eu verifiquei se o site estava no ar:
Sim, o site era funcional. Eu estava curioso para saber se havia alguma chave vazada no histórico do código-fonte. Se sim, devo ser capaz de enviar edições ao código-fonte. Então eu corri gitlog:
Pelas mensagens de commit, parece um commit foi feito depois de adicionar recursos para corrigir um grito. Hora de conferir o commit pré-whoops:
Excelente, encontrei um .ssh diretório com chaves. Vamos copiar essas chaves e configurar um agente SSH e um usuário Git para ver se posso representar o proprietário dessas chaves:
Agora vamos retornar ao ramo principal e testar se podemos enviar uma alteração trivial ao código-fonte (usando o nano, simplesmente adicionei um espaço a um dos arquivos):
Então, consegui a primeira parte do desafio representando um dos desenvolvedores do WordPress, mas o site ainda funcionou depois do meu push?
Meu push mudou alguma coisa porque agora o site redirecionava para a porta 8080.
Até agora, eu havia ignorado a parte CI/CD do desafio, que deveria ser a chave para completá-lo. O repositório contém um .gitlab-ci.yml arquivo, que fornece a configuração para um pipeline GitLab CI/CD. Toda vez que você envia para o repositório, o sistema CI/CD entra em ação e um GitLab RunnerName executa os scripts neste arquivo YML. Isso é tão bom quanto conseguir a execução remota de código no servidor onde o GitLab Runner está instalado, pensei.
Olhando mais de perto, vi um rsync script copiando todos os arquivos do repositório Git para o diretório no servidor web do qual o site estava sendo servido. No começo, eu tentei usar rsync para reverter o fluxo de dados copiando todos os arquivos do servidor web para o repositório Git, mas sem sucesso.
Depois de muitos testes de hipóteses, finalmente tive meu insight inovador: em vez de tentar “consertar” o site WordPress ou executar scripts maliciosos por meio do sistema de compilação, forneça um site que vaze informações do servidor da web. Lado de dentro index.php (localizado no nível superior do repositório), posso comentar o código que carrega o site WordPress e executar comandos PHP que investigam o servidor web.
Na verdade, posso até executar comandos shell com PHP. eu achei aquilo passar através() trabalhou facilmente.
In index.php, Eu usei // para comentar duas linhas e eu adicionei passthru('ls -la /'); na última linha. Isso cria um site que lista todos os arquivos no diretório raiz do servidor web:
Em seguida, enviei essa alteração para o repositório Git e o sistema GitLab CI/CD cuidou de atualizar o site para mim:
Ah, o Elfen Ring deve estar em bandeira.txt! Repeti os passos anteriores, mas desta vez usando passthru('cat /flag.txt'); revelando o Elfen Ring na próxima vez que solicitei o site:
No terceiro toque.
3. Anel Web
O desafio mais divertido para mim foi Open Boria Mine Door, embora Glamtariel's Fountain fosse interessante ao mesmo tempo em que apresentava enigmas.
Abra a porta da mina de Boria
Em Open Boria Mine Door, fomos presenteados com seis pinos ou mini-desafios para contornar a validação de entrada ou um Política de Segurança de Conteúdo para conectar os tubos de entrada e saída entre os pinos, inclusive combinando as cores dos tubos. Para a maioria dos pinos, usei HTML para escrever uma lista de letras 'o's de conexão. Aqui está minha solução final:
Pino 1
Não houve validação para o Pin 1, então foi uma simples questão de HTML e CSS inline:
<p style=“letter-spacing: -4px; margin: 0; padding: 0;”>oooooooooooooo</p> |
Pino 2
O pino 2 tinha uma política de segurança de conteúdo que não permitia JavaScript, mas permitia CSS embutido, então isso não foi problema para o meu método:
1 2 3 4 5 6 7 8 9 10 11 12 |
<ul style=“list-style: none; line-height:0.5; letter-spacing: -4px; margin: 0; padding: 0;”> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>oooooooooooooo</li> </ul> |
Pino 3
O pino 3 tinha uma política de segurança de conteúdo que não permitia CSS, mas permitia JavaScript embutido, então usei JavaScript para alterar os estilos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<script> document.write(“” + “<ul id=’o’>” + “<li>o</li>” + “<li>oooooooooooooooooooooo</li>” + “<li>o</li><li>o</li><li>o</li><li>o</li>” + “</ul>”); const o = document.getElementById(‘o’); o.style.color = “blue”; o.style.listStyle = “none”; o.style.lineHeight = “0.5”; o.style.letterSpacing = “-4px”; o.style.margin = “0”; o.style.padding = “0”; </script> |
Pino 4
O pino 4 não tinha política de segurança de conteúdo, mas tinha uma função higienInput no lado do cliente que retirava aspas duplas, aspas simples, colchetes de ângulo esquerdo e colchetes de ângulo reto. O truque aqui foi perceber que essa função não foi acionada pelo envio do formulário, mas pelo embaçar evento. Em outras palavras, mover o mouse para longe do campo de entrada acionou o embaçar evento, limpando qualquer entrada. A solução foi enviar o formulário pressionando a tecla Entrar tecla, tomando cuidado para não mover o cursor do mouse fora dos limites do campo de entrada:
1 2 3 4 5 6 7 8 9 10 11 |
<ul style=“list-style: none; line-height:0.5; letter-spacing: -4px; margin: 0; padding: 0;”> <li>o</li> <li>o</li> <li>oooooooooooooo</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li style=“color: blue;”>oooooooooooooo</li> </ul> |
Pino 5
O pino 5 tinha o mesmo higienizar entrada função e ignorar junto com uma política de segurança de conteúdo que proíbe CSS embutido, mas permite JavaScript embutido:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<script> document.write(“” + “<ul id=’o’>” + “<li>o</li>” + “<li>o</li>” + “<li class=’red’>oooooooooooooo</li>” + “<li><span class=’red’>o</span></li>” + “<li><span class=’red’>o</span></li>” + “<li><span class=’red’>o</span>” + “<span class=’blue’> ooooooooooo</span></li>” + “<li><span class=’red’>o</span>” + “<span class=’blue’> oo</span></li>” + “<li><span class=’red’>o</span>” + “<span class=’blue’> oo</span></li>” + “<li><span class=’red’>o</span>” + “<span class=’blue’> oo</span></li>” + “<li>o<span class=’blue’> oo</span></li>” + “<li>o<span class=’blue’> B</span></li>” + “</ul>”); const o = document.getElementById(‘o’); o.style.listStyle = “none”; o.style.lineHeight = “0.5”; o.style.letterSpacing = “-4px”; o.style.margin = “0”; o.style.padding = “0”; o.style.fontSize = “xx-large”; const reds = document.getElementsByClassName(“red”); for (let red of reds) { red.style.color = “red”; } const blues = document.getElementsByClassName(“blue”); for (let blue of blues) { blue.style.color = “blue”; } </script> |
Pino 6
Por fim, o pino 6 não limpou a entrada, mas usou uma política de segurança de conteúdo mais rígida que proíbe CSS e JavaScript embutidos. Minha solução foi usar HTML obsoleto para obter os estilos necessários e usar uma tabela em vez de uma lista:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<table border=“0” frame=“void” rules=“none” cellpadding=“0” cellspacing=“0” width=“100%”> <tr bgcolor=“#00FF00”> <td><font color=“#00FF00” size=“7”>o</font></td> <td><font color=“#00FF00” size=“7”>o</font></td> <td><font color=“#00FF00” size=“7”>o</font></td> <td><font color=“#00FF00” size=“7”>o</font></td> </tr> <tr bgcolor=“red”> <td><font color=“red” size=“5”>o</font></td> <td><font color=“red” size=“5”>o</font></td> <td><font color=“red” size=“5”>o</font></td> <td><font color=“red” size=“5”>o</font></td> </tr> <tr bgcolor=“blue”> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> <td bgcolor=“red”><font color=“red” size=“9”>o</font></td> </tr> <tr bgcolor=“blue”> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> </tr> </table> |
Fonte de Glamtariel
Fonte de Glamtariel foi uma oportunidade de praticar Ataques de Entidade Externa XML (XXE). Descobrir como definir uma entidade XML personalizada, definir uma entidade que solicita um arquivo do servidor e adicionar essa entidade como uma carga a uma solicitação HTTP não foi difícil. A parte mais difícil foi descobrir os enigmas do jogo para adivinhar o caminho para os arquivos que o servidor vazaria. Aqui está o pedido de descoberta revelando a localização do anel de ouro:
Gostaria de oferecer duas lições aprendidas com este desafio. Primeiro, use o Conversor de tipo de conteúdo extensão em Arrotar para converter cargas JSON em XML. Em segundo lugar, tente colocar a carga útil XXE em tags diferentes – demorei muito para descobrir que tudo o que eu precisava fazer era colocar o &xxe; carga útil no tipo de pedido tag em vez do imgDrop tag.
No quarto toque.
4. Anel de nuvem
Jogar para o Cloud Ring foi uma incursão de iniciante na interface de linha de comando (CLI) da Amazon Web Services (AWS).
O ponto alto desse conjunto de desafios foi o uso trufado para encontrar as credenciais da AWS em um repositório Git e, em seguida, explorá-las para autenticar como um usuário da AWS. Um atacante que chega a esta posição pode usar aws eu sou comandos para consultar as políticas que se aplicam ao usuário e, portanto, quais ativos da nuvem podem ser acessados e abusados.
No quinto toque.
5. Anel de Fogo Ardente
A parte mais instrutiva desse conjunto de desafios foi aprender sobre Árvores Merkle para explorar um contrato inteligente e entre na lista de pré-venda para adquirir um token não fungível (NFT). Aqui o desafio era descobrir os valores de prova que, juntamente com o endereço da minha carteira e o valor raiz de uma Merkle Tree, comprovavam minha inclusão na lista de pré-venda.
Depois de algumas tentativas malsucedidas de fornecer valores de prova, percebi que nunca seria capaz de descobrir os valores de prova para o valor raiz fornecido porque não havia como saber todos os valores de folha usados para calculá-lo. Eu precisava alterar o valor da raiz para poder fornecer uma Merkle Tree válida.
utilização Ferramenta do Professor QPetabyte, criei uma Merkle Tree a partir de duas folhas que consistem no endereço da minha carteira e no endereço do BSRS_nft contrato inteligente, que encontrei usando o Blockchain Explorer do jogo no bloco dois da blockchain Ethereum do jogo. A ferramenta gerou o valor raiz desta árvore e o valor de prova para o endereço da minha carteira. Em seguida, usei o Burp para interceptar a solicitação ao servidor e alterei o valor padrão da raiz para poder enviar uma Merkle Tree válida. Aqui está o meu esporte NFT comprado a um preço fixo de 100 KringleCoins:
Realmente um espécime feio.
Final
Um grande obrigado aos organizadores do SANS Holiday Hack Challenge por expandir minha mente de novas maneiras e ajudar a aprofundar meu conhecimento sobre segurança cibernética. Não estou apenas ansioso pelo desafio do próximo ano, mas também estarei experimentando as edições de 2020 e 2021 deste desafio. E se você ainda não participou desse desafio, espero que esses destaques tenham despertado seu interesse.
- Conteúdo com tecnologia de SEO e distribuição de relações públicas. Seja amplificado hoje.
- Platoblockchain. Inteligência Metaverso Web3. Conhecimento Ampliado. Acesse aqui.
- Fonte: https://www.welivesecurity.com/2023/01/09/cracked-it-highlights-kringlecon-5-golden-rings/
- 1
- 10
- 100
- 11
- 202
- 2020
- 2021
- 2022
- 7
- 9
- a
- Capaz
- Sobre
- Acesso
- acessadas
- alcançado
- alcançar
- Açao Social
- adicionado
- Adicional
- endereço
- Depois de
- Agente
- Todos os Produtos
- Permitindo
- Apesar
- Amazon
- Amazon Web Services
- Amazon Web Services (AWS)
- análise
- analisar
- análise
- e
- Aplicar
- Ativos
- ataque
- Tentativas
- autenticar
- avatar
- prêmio
- AWS
- Mau
- Porque
- antes
- ser
- MELHOR
- entre
- Grande
- Bloquear
- blockchain
- Azul
- comprou
- Ramo
- Break
- sair
- Quebra
- avanço
- construir
- comprar
- chamado
- Cuidado
- luta
- certificado
- certificados
- desafiar
- desafios
- alterar
- personagem
- verificar
- cliente
- mais próximo
- Na nuvem
- código
- cor
- comentar
- commit
- comum
- completar
- completando
- computador
- condutor
- Configuração
- CONTATE-NOS
- Conexão de
- Coneções
- Consistindo
- Recipiente
- contém
- conteúdo
- contract
- converter
- copiando
- poderia
- crio
- criado
- cria
- Credenciais
- criptomoedas
- Carteira de Criptomoeda
- APF
- curioso
- personalizadas
- Cíber segurança
- dados,
- Data
- Dezembro
- Aprofundar
- Padrão
- Defensores
- definição
- detectou
- desenvolvedores
- dispositivo
- DID
- morrem
- diferente
- difícil
- descobrir
- dns
- Estivador
- documento
- Porta
- duplo
- ganhou
- facilmente
- Ponto final
- Segurança de endpoint
- entidade
- entrada
- Meio Ambiente
- ethereum
- Blockchain Ethereum
- Mesmo
- Evento
- eventos
- eventualmente
- Executa
- execução
- Exercício
- saída
- vasta experiência
- Explorar
- explorador
- extensão
- externo
- poucos
- campo
- Figura
- Envie o
- Arquivos
- final
- Encontre
- descoberta
- Primeiro nome
- Fixar
- fixado
- fluxo
- florete
- seguinte
- Incursão
- formulário
- formato
- para a frente
- encontrado
- fonte
- Quarto
- da
- cheio
- Diversão
- função
- funcional
- mais distante
- jogo
- Games
- gerado
- ter
- gif
- Git
- GitHub
- dado
- Dourado
- Dourado
- Bom estado, com sinais de uso
- concessão
- cortar
- hacker
- Queijos duros
- ajuda
- SUA PARTICIPAÇÃO FAZ A DIFERENÇA
- Esconder
- Destaques
- destaques
- dicas
- história
- Feriado
- INÍCIO
- esperança
- hospedeiro
- Como funciona o dobrador de carta de canal
- Como Negociar
- HTML
- HTTPS
- identificado
- in
- Em outra
- in-game
- Incluindo
- inclusão
- INFORMAÇÕES
- entrada
- introspecção
- em vez disso
- interesse
- interessante
- Interface
- introduzido
- IP
- Endereço IP
- IT
- JavaScript
- json
- Chave
- chaves
- Kicks
- Saber
- Conhecimento
- Sobrenome
- conduzir
- vazar
- Vazamentos
- aprendido
- aprendizagem
- lições
- Lições Aprendidas
- carta
- Nível
- Li
- Line
- linhas
- Lista
- Listado
- listas
- viver
- cargas
- localizado
- localização
- longo
- muito tempo
- olhar
- procurando
- OLHARES
- pesquisa
- lote
- moldadas
- a Principal
- malwares
- Margem
- correspondente
- Importância
- max-width
- significado
- atende
- Memória
- mensagens
- método
- Microsoft
- mente
- Monitore
- mais
- a maioria
- mover
- em movimento
- Mozilla
- nome
- nano
- nativo
- Navegar
- líquido
- rede
- tráfego de rede
- Novo
- Próximo
- NFT
- não fungível
- token não fungível
- Norte
- oferecer
- ONE
- aberto
- operando
- sistema operativo
- Oportunidade
- ordem
- organizadores
- Outros
- lado de fora
- proprietário
- parte
- Participou
- participando
- caminho
- PHP
- pins
- tubo
- oleoduto
- Lugar
- colocação
- plano
- platão
- Inteligência de Dados Platão
- PlatãoData
- políticas
- Privacidade
- posição
- possível
- PowerShell
- prática
- Pré-venda
- apresentado
- anterior
- preço
- prisão
- privilégios
- sonda
- Problema
- Progresso
- proeminente
- prova
- provou
- fornecer
- fornecido
- fornece
- aquisitivo
- Empurrar
- empurrado
- Links
- rapidamente
- radar
- variando
- perceber
- realizado
- receber
- recebe
- receita
- registro
- Recuperar
- Vermelho
- remoto
- repetido
- repositório
- solicitar
- pedidos
- requeridos
- retorno
- Revelado
- revelando
- reverso
- Viajar
- Anel
- raiz
- regras
- Execute
- corredor
- corrida
- Scripts
- Pesquisar
- Segundo
- segundo
- Segredo
- segurança
- Série
- servir
- Serviços
- conjunto
- Partilhar
- concha
- rede de apoio social
- lado
- simples
- simplesmente
- solteiro
- SIX
- smart
- smart contract
- So
- Suave
- solução
- Resolvendo
- algo
- fonte
- código fonte
- Espaço
- fica
- ficar
- Passos
- Ainda
- armazenadas
- mais rigoroso
- estilo
- enviar
- sucesso
- suspeito
- comutado
- sintaxe
- .
- mesa
- TAG
- tomar
- TD
- Tecnologias
- teste
- ensaio
- A
- A fonte
- Terceiro
- pensamento
- três
- Através da
- tempo
- para
- token
- também
- ferramenta
- ferramentas
- topo
- pista
- tráfego
- Transações
- desencadeado
- para
- atualização
- URL
- usar
- Utilizador
- validação
- valor
- Valores
- via
- Vídeo
- videogame
- Wallet
- maneiras
- web
- servidor web
- serviços web
- Site
- qual
- enquanto
- Largo
- precisarão
- sem
- WordPress
- palavras
- Atividades:
- trabalhou
- seria
- escrever
- escrita
- XML
- ano
- Vocês
- investimentos
- você mesmo
- zefirnet
- Zip