Jump to content

Fabiano Furtado

Apoiador Nibble
  • Content Count

    46
  • Joined

  • Last visited

Everything posted by Fabiano Furtado

  1. Primeiramente, parabéns pelo artigo! Aguardo a parte 2! ? Olha... através de caminhos diferentes, cheguei nesse mesmo problema dos "0s" abusivos no meio do binário. No meu caso, estava tentando fazer o menor "hello world" possível em NASM 64bits com a .text sem null chars, mas os "0s" sempre apareciam. Se quiser tornar o seu binário menor, sem esses "0s", utilize a opção "-z noseparate-code" no ld. Isso fará com que ele não coloque esses "0s" entre as sessões do ELF. Dizem que esses "0s" servem para aumentar a segurança... eu queria entender o porque! Sinceramente, uma sessão .text o
  2. Primeiramente parabéns pela MBConf! Estes eventos estão sendo sensacionais! Gostaria de assistir palestras sobre técnicas para ofuscação de binários e também alguns tipos de ataques como ret2libc, ROP e suas mitigações. Outra palestra interessante seria sobre algum pesquisador com alguma experiência prática em descobertas de BUGs/vulnerabilidades em sistemas... (de preferência sem ser sistema Web) pudesse contar pra gente como descobriu e explorou essa vuln. Outros assuntos interessantes: como fazer o bypass de sistemas do tipo IDS/IPS? Como detectar Shellcodes polimórficos/meta
  3. Renato... primeiramente, obrigado pelo retorno. Cara... achei muito legal esse estudo! Vou tentar fazer esse patch no openssh para monitorar os comandos enviados. Muito interessante e útil esse patch!!!!! Vou ler o seu paper. Parabéns pela pesquisa! Obrigado mais uma vez.
  4. Pessoal... boa tarde. Seguem as minhas perguntas sobre a palestra. Agradeço desde já. * Esse tipo de BOT P2P não deveria estar predominando neste mundo dos ataques? Pq não está? * Quais ferramentas foram usadas para fazer essa pesquisa? Achei interessante como foi obtido o tráfego SSH e consequentemente o certificado utilizado na BOT. * Tem algum paper sobre essa pesquisa?
  5. Pessoal.. li um artigo hoje e achei muito interessante a técnica de ofuscação apresentada. https://www.d00rt.eus/2020/04/ebfuscation-abusing-system-errors-for.html No meio do artigo, o autor cita outras técnicas de ofuscação de código: "Here are other transformations that can be applied: - Virtualization - Control Flow Flattening - Encode literals - Opaque predicates - Encode Arithmetic ..." Fiquei intrigado em como usar Virtualização para se fazer ofuscação em código. Pesquisei um pouco sobre o assunto e achei uma palestra do Alexandre Borges na DEFCON China 201
  6. Fred... tudo bem? Achei interessante a idéia do IPv6! Quem sabe depois da implementação do payload? Bem, estou começando a estudar o código para implementar o payload nos protocolos e acredito que tenha encontrado um bug no ICMP... Comecei pelo ICMP por se tratar do menor código existente no T50, ou seja, mais fácil de se entender e modificar. Executei um # t50 --protocol ICMP --threshold 2 127.0.0.1 e capturei os pacotes no Wireshark. No Wireshark, o campo do checksum estava errado, e o mesmo mostrava os bytes invertidos. Mensagem do WS: "Checksum: 0xbbaa incorre
  7. Frederico e Fernando... será que eu poderia me aventurar a implementar esse suporte a payload de usuário no T50? Para mim seria um bom desafio em C... acho que aprenderia muito nessa implementação. Claro, preciso do apoio de vocês durante o desenvolvimento pois certamente terei dúvidas. Sou aberto a críticas e sugestões. O que vcs acham? Valeu!
  8. Cara... vc é o mestre!!!! Achei muito legal esse make! Depois vou testar... Em tempo, já que vc usou o objcopy para diminuir o tamanho do binário (aliás, achei bem legal isso), reparei que os meus binários estavam ficando MUITO grandes (mesmo os mais simples) e descobri o motivo. A partir da versão 2.30 (ou 2.31.. não sei ao certo) do LD, há um novo parâmetro para fazer a link edição chamado "-z noseparate-code". O default passa a ser "-z separate-code" e isso faz com que o linker preencha o binário com vários Null Bytes entre as seções. Eu li sobre esse parâmetro e o motivo da
  9. Opa... Segue a linha... $ ld --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o hello /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/Scrt1.o /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/crti.o /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/crtbeginS.o -L/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0 -L/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../.. -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/g
  10. Oi Frederico... agora sim! Usando alguns parâmetros que a opção -v me mostrou, eu consegui fazer o hello world funcionar e entender o problema. Muito obrigado!
  11. Bom... o GCC não está instalado errado. Isso eu posso te garantir. Eu uso o Arch Linux e nele há links simbólicos apontando para /lib64/ld-2.29.so e /usr/lib64/ld-2.29.so, que são arquivos idênticos. Eu mantive os arquivos temporários para poder utilizar o hello.o no ld e usar o ld para fazer a link edição, e não o GCC. Utilizando-se o GCC, o erro não ocorre, mas usando o ld, sim.
  12. Pessoal... fiz um "Hello World!" em C para testes e estou tendo um "Segmentation fault". Vou reproduzir os passos que fiz. Primeiramente, compilei com "gcc -Wall -O3 -save-temps hello.c -o hello". Até aí, tudo certo. Execução sem erros. Como queria fazer a link edição "na mão", dei um "ldd hello" e... linux-vdso.so.1 (0x00007fffb3558000) libc.so.6 => /usr/lib/libc.so.6 (0x00007fc34bbc7000) /lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007fc34bde6000) Após isso, link editei o arquivo com o comando "ld -dynamic-link
  13. Pessoal... Para cada sistema que fazemos, normalmente, precisamos ler algum arquivo de configuração ou carregar dinamicamente algum plugin no momento da execução. Alguém tem alguma idéia/dica sobre como fazer isso de maneira mais fácil? Alguém já desenvolveu algo assim? Há algum artigo que descreva isso? Cada um implementa isso de uma maneira e não queria ficar perdendo tempo em algo tão básico. Sei que a libconfig pode ajudar, mas não queria utilizar nenhuma lib. Obrigado.
  14. Pessoal... Ontem achei um artigo na Internet bem escrito, interessante e detalhado sobre Engenharia Reversa em ELF. É um reversing básico, mas não tããããão básico assim. Acho que vale a pena conferir. http://manoharvanga.com/hackme/ Valeu!
  15. Texto excelente! Para complementá-lo, segue um video do Ben Eater, onde ele fala sobre o trabalho de Turing e Church, e questiona se o computador de 8 bits que ele contruiu com portas lógicas simples é realmente considerado um computador completo. Bem, sugiro assistirem a esta Playlist fantástica! São mais de 40 videos. Comecei assistindo um e não consegui parar! ? Valeu!
  16. Segue o programa e o binário. /* * GCC 8.3.0: gcc -Wall -s -O2 helloworld.c -o helloworld */ #include<stdio.h> int main(void) { puts("Hello World!"); return 0; } helloworld
  17. Fiz o teste com o seu PEDA, copiando o peda.py para o diretório do meu peda. Não deu muito certo. O resultado foi esse: $ gdb ./helloworld GNU gdb (GDB) 8.3 Copyright (C) 2019 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-pc-linux-gnu". Type "show configuration" for configuration details. For
  18. Fernando... encontrei uma maneira de se fazer isso em https://reverseengineering.stackexchange.com/questions/19598/find-base-address-and-memory-size-of-program-debugged-in-gdb Combinando essa informação do Entry Point do cabeçalho e os comandos starti, info inferior e shell pmap -x <PID>, dá pra se chegar na _start ou main(). Valeu!
  19. Oi Fernando... vou testar sim, mas tem que ser amanhã. Legal essa iniciativa! Vou lhe dar um retorno em breve. Bom... testei esse comando "info files" que você mencionou no video e deu certo, mas deu errado! ? "Stripando" o binário com o strip, funciona, mas com o sstrip, não. O sstrip é um utilitário que vem no pacote elfkickers (http://www.muppetlabs.com/~breadbox/software/elfkickers.html). Enfim... parece que ele retira mais coisas do binário e o "info files" não consegue identificar o entry point. Usei o "readelf -a" para comparar e analisar os dois binários e não há nehhuma
  20. Fernando, obrigado pelo video! Não conhecia essa "info files". Com certeza ajudará MUITO!! Valeu!!!
  21. Pessoal, preciso de uma ajuda com o GDB depurando arquivos binários stripped. Fiz um "Hello World!" básico em C, compilei ele com "gcc -Wall -z noseparate-code hw64.c -o hw64" e logo em seguida executei um sstrip em cima do binário. O parâmetro "-z noseparate-code" foi usado pra deixar o binário menor (leia o man deste parâmetro). Em tempo, o gcc compilou o binário com PIE habilitado, ou seja, a cada execução o SO aloca o programa em um endereço de memória diferente. Eu consegui fazer a depuração no GDB, mas precisei usar o Ghidra para descobrir os offsets do binário, uma v
  22. Tudo bem! Não precisa utilizar funções naked. Pode ser ofuscação utilizando outros métodos. Por exemplo, me lembro uma vez que você postou um artigo/comentário sobre substituição de uma insrtução call por outras equivalentes (push e jmp) para enganar o decompiler.... enfim... acho que você deve ter algum material bom sobre isso. Valeu!!!!
  23. Mais um link com dicas para deixar o seu binário menor: http://ptspts.blogspot.com/2013/12/how-to-make-smaller-c-and-c-binaries.html
  24. Segue o link do NASM: https://blog.stalkr.net/2014/10/tiny-elf-3264-with-nasm.html O programa ficou com 132 bytes com o NASM versão 2.14.02.
  25. Fernando.... blza? Vc tem mais exemplos de ofuscação? Eu achei bem interessante, apesar de ser "meio fraco". :)
×
×
  • Create New...