Ir para conteúdo
  • Cadastre-se

Todas Atividades

Atualizada automaticamente     

  1. Ontem
  2. bisao

    Quebra de senha usando PMKID

    poxa, já tem um tempinho que não entram na plataforma 😞
  3. Última semana
  4. No artigo anterior, discutimos como encontrar informações importantes para se comunicar com seu dispositivo. Neste, vamos falar sobre uma abordagem genérica antes de reverter o código do firmware de fato. Objetivos A coisa mais importante durante o processo a partir de agora é saber quais perguntas você quer responder. Se você começa a querer entender tudo, sem focar, no final acaba perdido numa montanha de informações sem sentido. Dê uma de Jack, O Estripador clássico: entenda tudo, mas por partes. Eu normalmente começo procurando o protocolo de comunicação no caso dele não estar documentado. Após isso quero entender geralmente o algoritmo usado para autenticação ou o gerador de senhas ou algo que me dê acesso a dados interessantes que possam ser usados em outros $hardware iguais. Normalmente a segurança de sistemas embarcados não é muito boa nisso: todos os hardware precisam de alguma forma de identificação única presente no firmware. Como você solucionaria o problema pensando em larga escala? Conversando com o seu $sistema A melhor parte e o principal diferencial da análise de hardware é ter o bare metal (o equipamento físico) nas suas mãos. Ter acesso aos sinais eletrônicos, poder medir frequências e VER como o sistema trabalha (adicionar LEDs em todos os circuitos possíveis e adaptar a frequência por exemplo, sempre lindo!) são coisas que fazem o coração palpitar bem mais do que algumas linhas de código. Acredite 😉 Sem muita informação prévia e com alguns equipamentos baratos, é possível obter dados interessantes para a análise. Poderíamos começar a controlar o tráfego de dados usando o analisadores lógicos simples e ao mesmo tempo podemos usar equipamentos mais avançados para medir o consumo de energia no processo de inicialização do hardware com tanta precisão, que poderíamos deduzir possíveis valores de chaves privadas - é pura ciência, física 💚 - e claro que funciona em condições ideais, como aprendemos na escola. Fluxo de dados na PCB Não adianta muito ter dados se você não pode ler, escrever ou transferi-los de alguma maneira. Olhar a placa deve ser suficiente para entender como o fluxo de dados ocorre, simplesmente pensando na posição do CI (Circuito Integrado) e das marcas na PCB, ou seja, na placa. Outra coisa importante: quase todas as plaquinhas têm uma datasheet voando na !nternetz e acessível publicamente, contendo toda a informação técnica (da pinagem, voltagem e o PROTOCOLO DE COMUNICAÇÃO). Sempre vale a pena usar o DuckDuckGo antes de começar a ter dores de cabeça por algo que esta documentado, certo? Vamos começar sem gastar muito $$$: Procure a fonte! Quem esta começando agora pode não ter todas as ferramentas disponíveis ou não ter acesso a uma oficina / laboratório. Por isso, vamos dump o código direto do hardware e abrir mao do contexto - que teríamos no caso da leitura dos dados no hardware - mas economizaremos dinheiro e teremos acesso a toda informação possível do $device. Acesso ao firmware e memória Dumpe o código do CI e o descomprima. Essa é a parte mais fácil e mais difícil de todo o processo, mas para isso você não precisa de nenhum equipamento e pode usar várias ferramentas de graça (algumas inclusive de código aberto). Como eu falei anteriormente, é possível achar na Internet os datasheets (documentação completa, normalmente em PDF) de quase todos os dispositivos. Ache a datasheet para o seu CI e assim não terá necessidade nem de identificar a pinagem nem de reverter o conjunto de instruções necessárias para a comunicação. Algo também importante é saber como parar a comunicação entre o seu CI e os outros pontos de comunicação da placa, pois isso pode interferir na leitura dos dados. Como interromper o fluxo de dados depende bastante do circuito que você esta analizando. Mas eu preciso desoldar? Esse seria o caminho mais óbvio certo? Não quer interferência, desconecte seu CI da placa e vai para o abraço. Esse método te dá controle total sobre o seu CI 🙂 O problema aqui é que esse processo requer experiencia e TEMPO. A ideia deste artigo é para ser algo mais simples e barato, então tente evitar essa situação e pense em ideias mais "criativas". Normalmente é possível conectar os dispositivos num osciloscópio ou voltímetro para monitorar e ter certeza que não há interferência dos sinais de cada pino do CI. Fique atento nos outros componentes, se algum tráfego de dados está ocorrendo (instale por exemplo um monitor na outra porta UART). Se algum tráfego ocorrer, daí não tem outro jeito a não ser desconectar o seu CI - use um fim de semana. 🙂 Assim que o seu CI estiver isolado, conecte ele a qualquer aparelho que "fale" o mesmo protocolo e comece a ler a memória bloco por bloco. Isso pode demorar, por isso aconselho quando começar a leitura, vá a cozinha e faça um café! 🙂 Dumping os dados Criar suas próprias ferramentas pode ser super divertido, mas custa tempo e é bem mais fácil quando você sabe o que está procurando. Por enquanto, podemos usar vários projetos de código aberto disponíveis: Para fazer o dump, flashrom é uma das ferramentas populares. É facil de usar, cheia de bugs mas tem suporte para várias arquiteturas diferentes. Funciona muito bem no Rasperry Pi. 🙂 Normalmente vale a pena usar o comando file para ter uma ideia do tipo de arquivo que você esta lidando. Se ele não te ajudar em nada, tem o famoso binwalk. Os logs do binwalk the darão os endereços importantes. Então agora podemos usar o dd e dividir o seu binário em segmentos específicos. O comando dd precisa dos parâmetros bs (block size), do skip (offset) e o count (que aqui signifca quantos blocos você tem/quer copiar). Normalmente você terá pelo menos 3 blocos: O bootloader.bin: geralmente não esta criptografado pelo fato do microcontrolador não poder descriptografar. O mainkernel.bin: se você tiver sorte será algum kernel Linux. Esse é o firmware que controla o bare metal. 🙂 Geralmente o mais divertido de ler e várias vezes comprimido - use o file novamente para saber como descomprimir. O mainrootfs.bin: para quem entende um pouco de Linux e sistemas BSD, esse é o sistema de arquivos, contendo todos os arquivos com configurações, os binários do sistema, etc. Use novamente o file para verificar se está comprimido. No caso da imagem estar criptografada, é possível quebrá-la utilizando o fcrackzip. No próximo artigo eu vou tentar entrar em detalhes desses três binários - vamos ver se eu acho algum hardware interessante. 🙂
  5. Fernando Mercês

    Quebra de senha usando PMKID

    Talvez o @ncaio ou o @torontux? Dizem que os vizinhos sofrem com eles no wifi. 😝
  6. bisao

    Quebra de senha usando PMKID

    Alguém da comunidade tem mais informações sobre esta falha no WPA/WPA2 ? Encontrei conteúdos mas não entendi como é efetuada a recuperação da senha. Segue os conteúdos que vi: https://thehackernews.com/2018/08/how-to-hack-wifi-password.html https://hashcat.net/forum/thread-7717.html https://www.youtube.com/watch?v=ve_0Qhd0bSM
  7. Saudações, após vários momentos de sangue, suor e lágrimas , e um pouquinho de Stack Overflow finalmente resolvi o meu problema... No código acima o que não estava a funcionar era o formato em que o meu mac_local e o mac_dest não estavam a ser bem empacotados, dai o resultado apresentado pelo pelo wireshark ser completamente diferente do meu MAC real. Isso acontecia porque estava a empacotar um endereço mac com 6 bytes quando na realidade o tamanho da string era 17 bytes (salvo erro), então só apanhava esses 6 bytes logo o mac não era empacotado na totalidade, e como o mac não estava correto ele não fazia o broadcast para a rede, sem broadcast não há resposta. Para resolver isso tive que passar os endereço mac para byte order. Como fazer isso? O código pouco ou até mesmo nada mudou mas deixo o resultado final... Para ver o comportamento dos pacotes enviados deve ser feito através do wireshark ou outra ferramenta que cumpra a mesma função, com filtro "arp". #!/usr/bin/env python3 import struct import socket raw = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(0x0806)) raw.bind(("wlp3s0", socket.htons(0x0806))) mac_local = b'\xff\xff\xff\xff\xff\xff' # mac de quem envia request ip_local = "192.168.1.7" # ip de quem envia request mac_dest = b'\xff\xff\xff\xff\xff\xff' # Endereço broadcast para que seja enviado um reply ip_dest = "192.168.1.2" # ip de quem recebe request # Ethernet Header protocolo = 0x0806 # 0x0806 protocol to ARP ethernet_header = struct.pack("!6s6sH", mac_dest, mac_local, protocolo) # ARP header tipo_hardware = 1 tipo_protocolo = 0x0800 # IPV4 tamanho_endereco_hardware = 6 # Refere ao tamanho do endereço do MAC que é 48 bits == 6 bytes tamanho_endereco_protocolo = 4 # Refere ao tamanho do endereço do ipv4 que é 32 bits == 4 bytes operacao = 1 # 1 = request / 2 = Reply envia_ip = socket.inet_aton(ip_local) destino_ip = socket.inet_aton(ip_dest) arp_addr = struct.pack("!HHBBH6s4s6s4s",tipo_hardware, tipo_protocolo, tamanho_endereco_hardware, tamanho_endereco_protocolo, operacao, mac_local, envia_ip, mac_dest, destino_ip) pacote = ethernet_header + arp_addr # Ciclo de repetição while é opcional cont = 0 while cont < 6: raw.send(pacote) cont +=1
  8. brasillinux20

    Invalid Guardant Doule Found

    PutzGrilo!!! Essa aula 21 foi dasarábias Fernando. Seguindo o que você ensinou consegui desatarraxar o binário rsss... Agora vai começar a briga, vou passar o dia todo tentando descobrir a lógica do danado hehehehe.... Te mandei uma mensagem privada em relação ao seu questionamento acima. Infelizmente não pude postar para o público do fórum mas realmente você é fera na engenharia reversa cara. Se ainda tem alguém na dúvida em colaborar sendo apoiador, posso garantir que o curso vale cada centavo. Já estou ansioso esperando a próxima aula. A propósito, já que você pediu ideias para o futuro do curso de Engenharia Reversa, aí vai a minha: Nos ensine os dois assuntos, Malware e crackeamento de jogos. Grande abraço a todos.
  9. Qualquer coisa que não está bem com o meu MAC e o MAC do destinatário, provavelmente não está a ser devidamente empacotado e eu não percebo porquê, apesar de eu estar a passar o meu mac correto o wireshark, o MAC do destinatário que vai no pacote deveria ser ff:ff:ff:ff:ff:ff:ff e não 30:30:3a:30:30:3a.
  10. Fernando Mercês

    Baixar Torrent pelo Browser

    hahahahaha valeu a dica. 😉
  11. Fernando Mercês

    Invalid Guardant Doule Found

    Opa, bem vindo! O alvo é malware mesmo? Se for, você pode comprimir com uma senha (normalmente a galera usa "infected") e subir aqui, porque fica um pouco difícil da galera ajudar sem ter o binário, a não ser que alguém já conheça tal proteção somente pela mensagem. Abraço!
  12. Fernando Mercês

    As gafes do mundo da TI

    Valeu cara! Corrigi lá! Obrigado a todos pelos comentários. 😉
  13. Fernando Mercês

    OEP de binario codado em VB

    Agradeço também você ter perguntado. Caiu como uma luva para o tema da aula! E o tracing é justamente o tema da aula 22 (que vai sair no dia 18/8) hehehe. Boa sorte no fim de semana! 😉 Abraço!
  14. sombrakey

    OEP de binario codado em VB

    Até estranhei quando eu vi hoje(sexta), muito obrigado mesmo, passei a semana procurando uma forma de chegar ao OEP sem usar plugins. Eu tinha esquecido do trace também, vou aproveitar o fim de semana e tentar utiliza-lo. Agradeço a explicação. Abraços.
  15. Fernando Mercês

    OEP de binario codado em VB

    Era pra sair sábado, mas o @Paulo Arruzzo agendou o vídeo pra ser publicado hoje (sem querer) e agora que já tá no ar, não vou tirar. 😁
  16. Exetroide

    Sites de vagas em TI (e segurança)

    https://hipsters.jobs/ https://programathor.com.br/
  17. Fernando Mercês

    OEP de binario codado em VB

    Que legal essa pergunta. Vou responder com o vídeo do próximo sábado, beleza? 😁
  18. Saudações, tenho andado aqui a tentar fazer um código que que faz requisições ARP e espera por um reply do host para onde foi enviado o pacote mas, nunca vem esse reply... #!/usr/bin/env python3 import struct import socket raw = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(0x0806)) raw.bind(("wlp3s0", socket.htons(0x0806))) mac_local = "ff:ff:ff:ff:ff:ff" # mac de quem envia request ip_local = "192.168.1.7" # ip de quem envia request mac_dest = "ff:ff:ff:ff:ff:ff" # mac de quem recebe request ip_dest = "192.168.1.6" # ip de quem recebe request # Ethernet Header protocolo = 0x0806 # 0x0806 protocolo para ARP ethernet_header = struct.pack("!6s6sH", mac_dest.encode(), mac_local.encode(), protocolo) # ARP header tipo_hardware = 1 tipo_protocolo = 0x0800 # IPV4 tamanho_endereco_hardware = 6 # Refere ao tamanho do endereço do MAC que é 48 bits == 6 bytes tamanho_endereço_protocolo = 4 # Refere ao tamanho do endereço do ipv4 que é 32 bits == 4 bytes operacao = 1 # 1 = request / 2 = Reply envia_ip = socket.inet_aton(ip_local) destino_ip = socket.inet_aton(ip_dest) arp_addr = struct.pack("!HHBBH6s4s6s4s",tipo_hardware, tipo_protocolo, tamanho_endereco_hardware, tamanho_endereço_protocolo, operacao, mac_local.encode(), envia_ip, mac_dest.encode(), destino_ip) pacote = ethernet_header + arp_addr cont = 0 while cont < 6: raw.send(pacote) cont +=1 Resultado do wireshark
  19. Anteriormente
  20. Não é de agora que IoT é um tipo de tecnologia considerada “vulnerável”. A questão é que esse fator não parece ser tão relevante, tendo em vista o número de dispositivos que são adquiridos todos os dias e certa falta de preocupação de algumas empresas ao disponibilizarem a tecnologia. Após tantos ataques relacionados à esta tecnologia o FBI criou um pequeno artigo com algumas dicas simples, mas interessantes, sobre como se preparar um pouco melhor sobre o uso destes dispositivos. A motivação para a criação do artigo é o simples fato de IoT estar em todo lugar hoje em dia e poder, por exemplo, se comunicar com outros dispositivos. Você sabia que dispositivos como roteadores, câmeras, carros, brinquedos, etc de vários modelos são considerados IoT? Com o avanço da tecnologia o mercado de segurança cresce cada vez mais e junto dele as oportunidades para estudos, pesquisa e até mesmo vagas de emprego. Que tal experimentar estudar um pouco sobre e compartilhar com a galera? 😃
  21. Felipe.Silva

    Dica para Conversão de C para Assembly

    Hehehe, comigo foi o contrário. Eu já sabia Assembly quando comecei a aprender C, aí eu compilava código em C e lia em Assembly para entender melhor o funcionamento do executável gerado. O próprio GCC oferece opção para apenas compilar o código, sem montar nem linkar ele. Dessa forma é possível ler o Assembly. Só usar: $ gcc programa.c -o programa.asm -S # Com sintaxe da Intel $ gcc programa.c -o programa.asm -S -masm=intel Fica a dica para quem quiser dar uma olhada. É interessante também usar o objdump para ver o programa depois de linkado. Opção -d do objdump faz ele disassemblar a seção de código.
  22. HiroMarikame

    Duvida em PHP

    Obrigado @Fernando Mercês !!! A maioria das ideias malucas que tenho parecem gambiarra kkkkk Por isso chutei que seria. Mas é otimo saber disso, eu não sabia que esse é o metodo usado por CMS. Muito obrigado!!! Att. Gabriel - Hiro.
  23. gnoo

    Dúvida requisição HTTP

    Pois foi o que eu também tinha em mente mas tinha lido isso, num blog qualquer uns tempos atrás e agora estava a pensar numa outra coisa que envolve esse tipo de iteração, era só para esgotar todas as hipóteses. Obrigado @Fernando Mercês
  24. Fernando Mercês

    Livro: Fundamentos de Engenharia Reversa

    Corrigido, @toto9202. Obrigado! @Aof, isso é o que o Bumerangue resolveria, só que precisa de mais mãos. Sozinho não consigo. =/ Abraços!
  25. Fernando Mercês

    Dúvida requisição HTTP

    Oi! Se digitar o IP direto na barra de endereços, de fato você pula a etapa da resolução de DNS para aquela requisição HTTP inicial, de fato. No entanto, o seu provedor (ISP) continua sendo responsável por rotear o conteúdo até você, então tudo passa pelos servidores dele. Abraço!
  26. Fernando Mercês

    Duvida em PHP

    Oi! É exatamente como muitos CMS fazem. Por que pareceria gambiarra? Eu não acho, mas também não sou desenvolvedor web pra dizer... De qualquer forma, eu iria com uma URL específica para incluir os posts mesmo. ;-) Abraço!
  27. HiroMarikame

    Duvida em PHP

    Bom dia/Boa tarde/Boa noite... Alguem pode me ajudar por favor '--'. Preciso construir um pequeno Blog usando PHP com 3 paginas basicas: - Pagina inicial com os liks para os posts; - Pagina do post para carregar os dados do post a partir do encaminhamento da pagina principal; - Pagina de administração para inclusão de novos posts no Banco de dados; Acontece que não gostaria de colocar uma opção "logar" nas paginas já que quem tera acesso á pagina para incluir novos posts serão os administradores. Pensei em colocar uma pagina com os campos de login etc. que envia os dados para um Script de autenticação no PHP. O unico modo de acessar essa pagina seria através do endereço de fato da pagina através da url, por exemplo: https://nome_blog/adminstracao Isso me parece mais uma gambiarra... Podem me dar um direcionamento, uma dica do que fazer ? Muito obrigado! Att. Gabriel - Hiro
  28. gnoo

    Dúvida requisição HTTP

    Saudação, quando faço uma requisição no browser www.qqcoisa.com esse pacote vai ao ISP DNS Servidor. Mas se em vez de www.qqcoisa.com enviar apenas o IP 200.15.20.130... Ele também passa no ISP ou vai direto ao servidor?
  1. Mais Resultados
×