Ruby Of Security – Telegram
Ruby Of Security
1.14K subscribers
151 photos
9 videos
114 files
1.03K links
Here you will find content like:

🌎 Notícias | 📡 Tecnologia | 🌐Hacking
📚 Cursos | Ferramentas | 📝Tutoriais

@DARKNET_BR
@TIdaDepressaoOficial
@ExploitHub
@AcervoDoSam

Acervo:@AcervoRubyOfSec

Group:@RubyOfSecGroup

© Ruby Of Security - 2014 - 2019
Download Telegram
um grafico bem legal, veja bem, temos todos os componentes dos quais falamos anteriormente
olha por exemplo aqui, temos nosso object que invoca um stream, dentro temos o stream dictionary onde podemos ter as diretivas de compressao do stream (pode ser um external object criando as diretivas da invocaçao do stream ou podem ser propiedades da pagina ou do object nao relacionado diretamente com o stream) e o stream pode conter seus propios tipo de objects comprimidos apartir de filters (lembrando que filters podem cooperar dentro do stream pra comprimir de forma alterada ou simbioticamente)
Vetores de Ataque

bem, antes de publicar o restante quero explicar o que eh uma flaw "Nativa", quis expressar dessa forma pra classificar as flaws ou os conceitos de exploiting que nascem original e exclusivamente da prova de conceito do pdf, ou seja, pra exploitar essas flaws basta usar mecanismos jah presentes nos pdf, sem necessidades de uma supplychains de flaws externas
Mais a frente vou tentar explicar o que chamarei de flaws hibridas, que consistem em flaws jah existentes no sistema que suporta ou no cliente que renderiza, alem de outros tipos, nas quais usaremos o arquivo pdf pra jah expoitar elas ou carregar payloads como meio de infiltraçao ou ataque pra atingir o target
pra entender um pouco das flaws hibridas eh um pouco mais facil se jah entendermos alguns mecanismos conceituais como

| entender o mecanismo de heap spraying (class of stack overflow)(estouro do heap, geralmente utilizando javanoscript em documentos pdf (o conceito eh bem amplo, porem to me referindo apenas a ideia de flaws conhecidas em espaços que carregam tipos de arquivos pdf)) resumindo, ao estourar o heap (memoria alocada dinamicamente), se repetem codes ateh encontrar uma parte do heap que aponte a outros espaços de memoria ou funçoes fora da alocada e se escrevem bytes arbitrarios (geralmente shellcode ou bypass ( ASLR | nops leds ) pra outras funçoes com acceso privilegiado) |

| tmb eh interessante a injeçao de code arbitrario, ou seja, quando um proccesso permite ao usuario ou ao arquivo escrever dentro processo ou thread, se houver vulnerabilidade de injeçao, o usuario pode carregar sequencias arbitrarias de vetores pra injetar code que ative algum recurso ou explore alguma vulnerabilidade local |
caso nao conheça, recomendo dar uma olhada, se acha bastante conteudo e eh soh pra entender o conceito, nao eh nda mto avançado
Vetores de Ataque:
Observando os detalhes silenciosos (flaws nativas)

vamos conhecer alguns elementos que podem ser invocados (do tipo dictionary) dentro do corpo de um pdf, geralmente invocados em objects (ou suas subespécies) tmb podendo ser combinados e possuem uma relaçao simbiotica pra ofuscar ou burlar sua açao, tmb podem ser embebados e comprimidos dentro de blocos de bytes (streams ou objects-streams)


OpenAction
executa uma funçao quando o pdf for aberto, geralmente libreoffice carrega esse elemento (dictionary) pra carregar sempre a primeira pagina ao ser aberto (geralmente servidores de e-mails bem configurados ou com diretrizes estritas bloqueiam este elemento-açao)

URI
invoca uma url, combinada com outro tipo de elementos permite abrir paginas sem o conhecimento do usuario, baixar arquivos em segundo plano,enfim, cria uma açao relacionada a abertura, chamada, embebeda ou carrega pagina quando declarada e invocada

LaunchAction
invoca um parâmetro pra execuçao de comandos ou abertura de recursos do OS, pode ser adaptado pra diversos sistemas operacionais segundo a documentaçao original

GoToEmbebbed
invoca blocos de streams ou bodys incorporados dentro de outros bodys, pode chamar arquivos pdf encriptados dentro de streams e escondidos pra evitar a deteçao automatica durante a analises estatica

tmb existem alguns filters e dictionarys que possuim flaws amplamente exploitados, aqui eu coletei apenas alguns dos elementos internos que mais sao usados e bem documentados pela comunidade, porem na documentaçao vc pode se aprofundar neste elementos e seus mecanismo que como falei, geralmente sao integrados pra dificultar a deteçao automatica
OPA UMA ATENÇÃO AQUI PRA SEU QUERIDO USER

pessoal, como esse post relacionado a pdf ta ficando mto mais grande do que imaginei, irei postar o restante no github

vou postar dps o link aqui, lah irei postar o restante e algumas PoC's existentes que serão a conclusão desse post, meu objetivo sempre foi que vcs conseguissem dps de tdo isso entender claramente como funcionam os exploits em arquivos pdfs e nada melhor que explicar utilizando states of the art existentes
LEMBRANDO TDO ESSE CONTEUDO EH LIVRE, COPIEM, MODIFIQUEM, COMPARTILHEM MAS PFVR SEMPRE DANDO OS CREDITOS A @rubyofsec e se possivel ao meu user
Ruby Of Security pinned «OPA UMA ATENÇÃO AQUI PRA SEU QUERIDO USER pessoal, como esse post relacionado a pdf ta ficando mto mais grande do que imaginei, irei postar o restante no github vou postar dps o link aqui, lah irei postar o restante e algumas PoC's existentes que serão a…»
#news

Um grupo ligado ao governo Chines (APT41) conhecido nos reportes como HOODOO utilizou uma ferramenta (GC2) que implementa a infraestrutura dos serviços da Google pra atacar serviços de media taiwaneses e uma companhia de busca de emprego italiano

utilizando uma ferramenta publicada pra projetos de red teaming um APT conhecido desde 2014 e ligado ao governo chines executou ataques em serviços do Taiwan e uma companhia italiana de empregos

Inicialmente o ataque começava com uma tentativa de phishing via email o qual continha um link a um arquivo protegido por senha e hospedado no google drive que uma vez na maquina recebia comandos de uma planilha do google sheet (criado com GO e o framework GC2)
E podia filtrar dados internos utilizando unicamente o serviço de nuvem da google (o qual permitia apenas requisiçoes a dominios google e acaba em geral não despertando alertas pra ferramentas automatizadas)

Eh interessante observar a crescente tendencia em utilizar serviços da
google pra hospedar malwares, neste caso por exemplo, como o serviço de nuvem hospedava o arquivo (geralmente .zip) e utilizando vetores como engenharia social (phishing) permitia a execuçao remota de comandos (utilizando google sheet, um serviço de planilhas o qual armazenava os comandos em colunas tipo A. B.)


pra mais informaçoes

Bleeping Computer
The Hacker News

experimente vc e sua equipe em projetos de red teaming
GC2

@rubyofsec
Forwarded from Cypherpunks Brasil
Proxy MTProto pra vocês. Patrocinado por "Leitão Copo na Mão" para a comunidade Cypherpunks Brasil e quem mais quiser

https://news.1rj.ru/str/proxy?server=209.141.62.223&port=1443&secret=48060920a49de6cbde6f1701a0a572c6
Uma entrevista interessante dms com o criador do MINIX, um dos primeiros projetos de microkernel com o espirito linux, Tovald se inspirou no minix pra criar o linux
pra quem nao sabe, minix foi desenvolvido pra estudos em OS e publicado pra estudo aberto, inclusive vc pode comprar ou baixar o livro que foi a base do desenvolvimento do MINIX, recomendo dms (Sistemas Operacionais: Projeto e Implementação)
Andrew Tannenbaum um dos primeiros gênios que acreditou e criou um dos primeiros ambientes colaborativos e livres, além de ser desenvolvido especificamente pra computadores com poucos recursos, sendo portável e potente

https://www.youtube.com/watch?v=OuRkUF1U8us
#angr #reverse #ctf #symbolicexecution

bem, estive pensando em escreve este post ha alguns dias, mas não sabia como começar ele. Então, vou dar uma resumida no começo caso seja do
seu interesse, você acompanha o post, se não, daqui a alguns dias postarei outras coisas
bem, antes de tudo, este post é sobre um assunto que pouco vi sendo falado na comunidade mas que é extremamente interessante e relevante

antes de começar seria interessante ter algum conhecimento prévio sobre testes de software e reversing (pelo menos as bases sobre posix e analise reverso)


execuçao simbolica: pra além da analise estatica

recentemente estava resolvendo alguns ctfs de engenharia reversa (voltada pra POSIX) e acabei me encontrando com um desafio que chamou bastante minha atençao, não vou entrar em muitos detalhes por enquanto, mas só vou dizer que ao fazer um analise abstrato (com radare2) acabei me encontrando com um main que parecia grande dms pra um challenge de nivel medio, sem muitas chamadas de functions

Ao analisar o main através de uma representação topológica (op:VV)
acabei me encontrando com uma estrutura interessantísima
representaçao em radare2 utilizando a sintaxe do ghidra (plugin r2ghidra)
bem, acabei não colocando aqui a representaçao topologica por uma questão de que no terminal do kali ficou bem estranho, pra fazer estes testes estou
utilizando kali linux-64bits, mas espero que tenha dado pra entender, no meu pessoal (debian(xfce4)) ficou melhor, mas pra isso existe cutter, um cliente gráfico pra radare2
um pequeno grafico que fiz a mão pra
explicar a topologia, desculpem se nao ficou mto bom mas vai dar pra entender
resumindo, o main pegava o input do user e fazia um teste comparativo (comparava a entrada do usuario como tamanho (hex0x20 = 32d) o qual deveria ter 32 strings

ateh ai tranquilo, mas o problema vinha mais a frente, já que dentro
destes testes condicionais haviam diferente operaçoes entre os values e no total eram feitos 31 testes condicionais e comparativos (31 ramificaçoes possiveis. lembre disso no futuro) , ou seja, em teoria teria que depurar 31 testes ateh encontrar cada string


Sinceiramente,isso levaria horas ou dias pra ser feito, já que teria que analisar a stack, os values de conversao e os testes comparativos atraves de breakpoints dentro de cada comparaçao

e foi ai que eu me perguntei, realmente não existe outra forma??
bem, dps desse pequeno desespero e já quase que me preparando pra dias de debugging acabei por procurar sobre algum noscript ou algum framework que me ajudasse
e ai meus users, acabei encontrando não apenas isso, senao um universo
novo, uma teoria conceitual completamente incrivel (pelo menos pra mim), ou como diriam os próprios desenvolvedores, magica
chegou a hora de conhecer Angr
ou melhor, a execuçao simbolica
execuçao simbolica: its magic??

tudo começo com estes post(https://blog.notso.pro/2019-03-20-angr-introduction-part0/) que acabei encontrando procurando sobre o assunto de grandes fluxos em testes de comparaçao

bem, mas como acontece??

imaginemos que temos um pedaço de code no qual ha um teste condicional (if,switch) e dentro deste teste temos um valor o qual desconhecemos mas que precissamos cumprir pra adentrar determinado fluxo de execuçao(literalmente o que vimos acima, porem neste caso utilizaremos apenas um teste comparativo em vez de 31). mas acontece que dentro deste teste comparativo vemos que determinado valor não esta explicito dentro da analise estatica, nem como uma string, nem como um valor, vemos ele apenas como uma aproximaçao que deve existir como resultado da execuçao ou de uma string que resulta do return de outra function

bem, o que é que a execuçao simbolica iria fazer??
neste caso (ha varias outras possibilidades mas irei falar delas mais a frente), a engine de execuçao simbolica (no nosso caso Angr) ira
simular o code e observar o fluxo (subarvore, ramificaçao,esturutra, nós) enfim, e analisara as condiçoes existentes e necessarias pra seguir as variantes, ou seja, o fluxo de execuçao em cada variante

outra forma mais curta de definir seria como uma execuçao abstrata na qual se toma em conta tdos os caminhos possíveis dentro do fluxo de execuçao (o input necessario pra execuçao é um simbolo já que não
possui um valor predefinido, dai a representaçao lambda, ou melhor, podemos criar ele como um vetor, uma string, uma string condicional de
inteiros, uma dword) enfim, é um simbolo pra execuçao das variante dentro do fluxo, lembrando que esta ocorre como uma simulaçao, ou seja, o code original nao é de fato executado, mas seu pedaço a ser simulado seria compartilhadopra a engine (Angr)

logo sua principal diferença com a execuçao abstrata, na qual tomamos em conta a estrutura geral do binario e não apenas um pedaço (o espaço onde ocorrem as comparaçoes e condicioanis) e todos estas variantes
são tomadas em conta, msm que representem um erro dentro do binario já que é um caminho possível a ser tomado

* um aviso importante é definir um ou vários caminhos a serem tomados já que em codes com multiplos caminhos e variantes (ou seja ramificaçoes dentro das condicionais) podemos ter uma explosao de caminhos, na qual a analise poderia levar bilhoes de anos (pensei nisso como uma taque de força bruta no qual precissa testar demasiadas
possibilidades), já que de fato o que Angr faz é estressar (ou seja, testar multiplas vezes como diferente possibilidades o value (simbolo) pra as
condicionais, um pouco parecido com um ataque de força bruta)

mas pra isso, nossos queridos devs do Angr (criado na universidade de santa barbara) nos permitem definir caminhos a serem evitados, a fim
de atingir o fluxo que definimos ou precissamos pra continuar a execuçao e neste caso, extrair a flag
extraindo as strings contidas no binario (do tipo elf, pie-enabled, ou seja, a cada execuçao o endereço de entrypoint se modifica) vemos que existe um endereço que pode nos apontar pra a flag, neste caso eh o 0x00002035 (license correct)
ao procurar por chamadas desse endereço dentro da main encontramos o endereço que resulta na flag (usando as referencias cruzadas do radare2 'axt @ 0x2035')

0x1876

agr o que nos resta eh usar Angr pra caminhar entre as ramificaçoes a fim de entrar nesse endereço e extrair a saida, evitando os endereços de erro, ou seja, os que resoltam em False
encontrando a flag através dos conceitos de execuçao simbolica

bem, tendo entendo isso, você deve estar se perguntando, como podemosurtilizar isto em ctfs??vamos lah, voltando pra o desafio do qual falei no começo

utilizando Angr

bem, sabendo que há uma forma de automatizar os testes de comparaçao
atraves de estresse do valor inserido, vamos procurar qual caminho devemos tomar pra encontrar a flag

baseado em aquelo outro grafico do main, vamos entender o que acontece dps de verificar que a string possui 32 bytes
aqui tento explicar a estrutura contida e o que precisa acontecer, como podemos ver, a ramificaçao false acaba entrando sempre no exit