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
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
resumindo, o
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
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 script 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
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 stringsateh 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çaoe 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 script 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
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 functionbem, 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) irasimular 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ãopossui um valor predefinido, dai a representaçao
lambda, ou melhor, podemos criar ele como um vetor, uma string, uma string condicional deinteiros, 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
not so pro
Introduction to angr Part 0
Baby steps in symbolic execution
ao procurar por chamadas desse endereƧo dentro da
agr o que nos resta eh usar
main encontramos o endereƧo que resulta na flag (usando as referencias cruzadas do radare2 'axt @ 0x2035')0x1876agr 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 Falseencontrando 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 Angrbem, 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 bytestendo entendido, precissamos então utilizando (Angr) implementar uma execuçao simbolica que evite a entrada no
comparadas que entrem em
então, dps de entender o que precissamos fazer chegou a hora de implementar
antes de tudo, precissamos chamar
antes de inicializar, preciso definir o espaƧo do binario e chamo a funƧao
dps passamos a chamar
depois passamos alguns argumentos pra dizer a entrada da simulaƧao e definimos algumas variaveis jah nosso challenge Ʃ um
damos os
agr apenas resta iniciar a simulaçao, se vocês testarem num script podem acabar não percebendo mas se utilizarem a dle do python podem ver que nessa linha de codigo, o processo demora um pouco a retornar, é porque nesse momento que asimulaçao foi feita (de execuçao simbolica) e damos os argumentos dos address que precissamos encontrar e os que precissamos evitar, os quais foram as variaveis que acabamos de criar
tdo isso utilizando o modulo explore de simulaƧao, recomendo ler na documentaƧao pra entender mais detalhes e assim, implementando uma execuƧao simbolica atraves de Angr, resta obter nossa flag e quando
angr encontrar o caminho relativo ao qual dizemos anteriormente(dentro do argumento) ele ira nos responder com um booleano (0:found, 1:not_found) e extraimoso value dentro do found
solver Ć© uma classe contida em
exit e nos diga o resultado (lambda) que nos permite entrar em true dentro das ramificaƧoes ateh atingir a flag* execuƧao simbolica atraves do fluxo de comparaƧao** evitar o caminho ateh o exit dentro desse pedaƧo de code*** atingir o true ****receber o resultado de cada fluxo que atingirmos (as stringscomparadas que entrem em
true)implementado Angr e resolvendo o challengeentão, dps de entender o que precissamos fazer chegou a hora de implementar
Angrantes de tudo, precissamos chamar
angr e claripy (claripy nos permite construir vetores abstratos dentro de python)antes de inicializar, preciso definir o espaƧo do binario e chamo a funƧao
Project de Angr pra extrair o espaƧo da simulaƧao e dou um argumento pra evitar o carregamento de librarys de chamada dentro do binario, jĆ” que tdo o code que precissamos simular esta dentro do binario -import angrimport claripyespaƧo_challenge= ā/home/user/challenge/challengebinaryāproject = angr.Project(espaƧo_challenge, load_options={'auto_load_libs':False}dps passamos a chamar
claripy, o qual iremos dar o nome do nosso projeto como entrada pra criar um simbolo(que no angr sera nosso lambda) e passamos a chamar classe BVS pra definir como um vetor de bits que precissa ser de 32 bits (dado que Ʃ o input necessario pra o primeiro true) argv = [project.filename]size= 32sym_arg= claripy.BVS('lambda-symbol', 8*size)argv.append(sym_arg)depois passamos alguns argumentos pra dizer a entrada da simulaƧao e definimos algumas variaveis jah nosso challenge Ʃ um
elf pie-enabled, o que acaba gerando conflitos durante a resoluƧao de address (pra mais detalhes recomendo ver a documentaƧao original, dentro da classe simulation)entry_state= proj.factory.entry_state(args=argv,add_options={angr.sim_options.ZERO_FILL_UNCONSTRAINED_REGISTERS,angr.sim_options.ZERO_FILL_UNCONSTRAINED_MEMORY})sim= project.factory.simulation_manager(entry_state)damos os
address no qual precissamos finalizar a simulaçao e o address que precissamos evitar(equivalente ao exit), nesse caso utilizo o address que vimos no radare2 + 0x4000 jÔ que segundo a documentaçao de Angr é o address no qual Angr inicializa binarios com endereçamento aleatorio (PIE-Enabled) exit_point = 0x400000+0x187davoid_point = 0x400000+0x1890agr apenas resta iniciar a simulaçao, se vocês testarem num script podem acabar não percebendo mas se utilizarem a dle do python podem ver que nessa linha de codigo, o processo demora um pouco a retornar, é porque nesse momento que asimulaçao foi feita (de execuçao simbolica) e damos os argumentos dos address que precissamos encontrar e os que precissamos evitar, os quais foram as variaveis que acabamos de criar
tdo isso utilizando o modulo explore de simulaƧao, recomendo ler na documentaƧao pra entender mais detalhes e assim, implementando uma execuƧao simbolica atraves de Angr, resta obter nossa flag e quando
angr encontrar o caminho relativo ao qual dizemos anteriormente(dentro do argumento) ele ira nos responder com um booleano (0:found, 1:not_found) e extraimoso value dentro do found
print (sim.found[0].solver.eval(argv[1], cast_to=bytes))solver Ć© uma classe contida em
angr pra interagir com os vetores criados por claripy e extrair os valores em uma lista e dps usamos o argumento cast_to pra converter os values pra elementos legiveis (podem ser int ou qword)e bem, Ć© assim como acabei resolvendo mais um challenge e aprendendo um novo conceito interessantissimo,alem de conhecer um framework extremamente completo
agr alguns comentÔrio, esse code é um pouco mais avançado mas se você procurar sobre o assunto pode acabar achando implementaçoes de
fiquei mais tranquilo de entender
algumas referencias interessantes
https://docs.angr.io/ (docs de Angr)
Introduction to angr Part 0 (explicaƧao da execuƧao simbolica com alguns exemplos e resoluƧoes dos
notes14-symbolic-execution.pdf (explicaƧao detalha sobre execuƧao simbolica)
PIE- Binary Exploitation (explicaƧao de ofuscamento do PIE)
https://www.youtube.com/watch?v=BDKJf2kuwqg (um video bem legal do mente binaria no qual o rapaz acaba explicando sobre execuçao simbolica, não tem muito conteudo em si,mas recomendo dms os videos e o fórum do mente binaria)
foi muito utilizado o radare2 (plugin r2ghidra)
agr alguns comentÔrio, esse code é um pouco mais avançado mas se você procurar sobre o assunto pode acabar achando implementaçoes de
Angr bem menos complexas , nesse caso eu fiz dessa forma pra resolver o challenge, mas recomendo dms resolver os challenges que o próprio Angr disponibiliza no seu repositorio pra começar a usar, talvezfiquei mais tranquilo de entender
algumas referencias interessantes
https://docs.angr.io/ (docs de Angr)
Introduction to angr Part 0 (explicaƧao da execuƧao simbolica com alguns exemplos e resoluƧoes dos
challenge do Angr)notes14-symbolic-execution.pdf (explicaƧao detalha sobre execuƧao simbolica)
PIE- Binary Exploitation (explicaƧao de ofuscamento do PIE)
https://www.youtube.com/watch?v=BDKJf2kuwqg (um video bem legal do mente binaria no qual o rapaz acaba explicando sobre execuçao simbolica, não tem muito conteudo em si,mas recomendo dms os videos e o fórum do mente binaria)
foi muito utilizado o radare2 (plugin r2ghidra)
not so pro
Introduction to angr Part 0
Baby steps in symbolic execution
Pessoal fiz um github, lah vou republicar os conteudos daqui de forma mais organizada, por isso talvez poste alguns dias dps, jah publiquei lah os posts sobre
reversing em pdftava pensando em deixar esse canal soh pra news e pequenas explicaƧƵes de noticias ou ataques novo e criar um novo canal soh pra fazer esses posts maiores sobre reversing, hacking, teoria computacional e outras coisas, o que acham??
Anonymous Poll
67%
faz um canal novo, pra galera que quer ver postagens maiores e publica lah, deixando este apenas pra
27%
continua publicando aqui msm, nao me importo com grandes postagens
7%
faz o outro e adiciona opƧao de debates
7%
posta apenas no github, polui dms minhas notificaƧoes
Bem, como votado por vcs, crie um novo canal, a primeira postagem sera feita aqui e pra seguir o conteudo do post eh soh entrar no canal, assim caso o topico seja do seu interesse, ficara melhor de ler e interagir
a primeira postagem sera sobre execuƧao simbolica e adicionarei alguns detalhes sobre o que jah foi dito (testes de resoluƧao baseados em satiasfibilidade)
dps vou postar um topico no qual irei me adentrar no mundo dos chips de monitoramento externo (intel ATM) e suas exploraƧoes pela NSA, assim como uma documentaƧao de como remover o firmware deste chip das nossas placas usando linux
https://t.me/MoreRubyOfSec
a primeira postagem sera sobre execuƧao simbolica e adicionarei alguns detalhes sobre o que jah foi dito (testes de resoluƧao baseados em satiasfibilidade)
dps vou postar um topico no qual irei me adentrar no mundo dos chips de monitoramento externo (intel ATM) e suas exploraƧoes pela NSA, assim como uma documentaƧao de como remover o firmware deste chip das nossas placas usando linux
https://t.me/MoreRubyOfSec
Telegram
RubyOfSec 2.0 (0x177)
neste canal irei explicar alguns conceitos envolvendo reversing e linux (unix-like tmb). Tmb irei me aprofundar nas provas de conceito de alguns exploits e flaws
#github #poc #news #linux-flaw
Prova de Conceito Falsa publicada no Github possui payload escondido e expõe pesquisadores de Cybersec que executaram o script de compilação
Recentemente saiu a luz uma vulnerabilidade no linux (CVE-2023-35829) na qual versƵes do kernel antes da 6.3.2 possuĆam uma falha na alocação de memoria dinĆ¢mica nos driversChriSanders22 ) publicou um suposto PoC no qual em uma parte especifica do code (dentro de uns dos
este adicionava sua chave SSH como autorizadas (
isto vem de uma onda de prova de conceito falsa ou com codigo arbitrario direcionado a pesquisadores publicados no github
fonte : https://thehackernews.com/2023/07/blog-post.html
Detalhes: dentro do
assim este suposto processo carregava e autorizava a chave SSH pra permitir acesso remoto ao agente mal-intencionado
Pra uma analise mais profunda veja: https://www.uptycs.com/blog/new-poc-exploit-backdoor-malware
NĆO BAIXEM REPOSITĆRIOS DO GITHUB SEM VERIFICAR O CONTEĆDO E NĆO EXECUTEM ARQUIVOS NĆO CONFIĆVEIS FORA DE SANDBOX's
Prova de Conceito Falsa publicada no Github possui payload escondido e expõe pesquisadores de Cybersec que executaram o script de compilação
Recentemente saiu a luz uma vulnerabilidade no linux (CVE-2023-35829) na qual versƵes do kernel antes da 6.3.2 possuĆam uma falha na alocação de memoria dinĆ¢mica nos drivers
/staging/media/rkvdec/rkvdec.c
Acontece que uma conta no github (makefiles) continha um downloader com um backdoor persistente escondidoeste adicionava sua chave SSH como autorizadas (
.ssh/authorized_keys) e dava acesso remoto ao criador do malware isto vem de uma onda de prova de conceito falsa ou com codigo arbitrario direcionado a pesquisadores publicados no github
fonte : https://thehackernews.com/2023/07/blog-post.html
Detalhes: dentro do
makefile (arquivo que gera a compilação do suposto PoC) havia um code que carregava um processo do tipo kworker (tipos de processos criados pelo kernel) e pra se manter persistente dentro do sistema se adicionava no file $HOME/.bashrc (dentro do caminho $HOME/.local/kworker) --> (pra quem não conhece, o bashrc se executa sempre que o usuÔrio loga, nele podemos adicionar variÔveis globais e links simbólicos a alguma pasta) assim este suposto processo carregava e autorizava a chave SSH pra permitir acesso remoto ao agente mal-intencionado
Pra uma analise mais profunda veja: https://www.uptycs.com/blog/new-poc-exploit-backdoor-malware
NĆO BAIXEM REPOSITĆRIOS DO GITHUB SEM VERIFICAR O CONTEĆDO E NĆO EXECUTEM ARQUIVOS NĆO CONFIĆVEIS FORA DE SANDBOX's
Uptycs
New PoC Exploit Found: Fake Proof of Concept with Backdoor Malware
Uptycs reveals how newly discovered fake PoC malware includes a backdoor for data theft, offering strategies for detection, recovery & prevention.
Forwarded from Ruby Of Security (Tica ...)
Vigilância do FBI causa medo e une um congresso totalmente dividido
a coleta massiva de dados sem permissĆ£o efetuada pelo FBI causou uma revolta generalizada do congresso em um escrutĆnio inter partidĆ”rio
a morte da privacidade esta tornando inimigos politicos em parceiros pelo medo que isto tende a causar por possĆveis interferĆŖncias arbitrarias (tendĆŖncia que esta se tornando mundial diga-se de passagem diga-se de passagem)
assunto que veio a tona principalmente pq em março o diretor do FBI (Christopher Wray) afirmou com tranquilidade que o FBI contornou a necessidade de mandados judiciais obtendo uma dados de americanos a qualquer momento (coisa obtida pela decisão da suprema corte a Carpenter v. United States)
leia mais: https://www.wired.com/story/fbi-spy-fears-us-congress/
-
desde as descobertas de Snowden e outros whistleblowers sabemos que órgãos operativos e internos dos estados unidos (NSA, subdivisões como a TAO, como a SSO (que estabelece relações com empresas multinacionais a fim de obter dados dos usuÔrios) e outros)
as operaƧƵes de coleta em massa de paĆses aliados e internos nĆ£o sĆ£o uma grande novidade, porĆ©m
a coleta massiva de dados sem permissĆ£o efetuada pelo FBI causou uma revolta generalizada do congresso em um escrutĆnio inter partidĆ”rio
a morte da privacidade esta tornando inimigos politicos em parceiros pelo medo que isto tende a causar por possĆveis interferĆŖncias arbitrarias (tendĆŖncia que esta se tornando mundial diga-se de passagem diga-se de passagem)
assunto que veio a tona principalmente pq em março o diretor do FBI (Christopher Wray) afirmou com tranquilidade que o FBI contornou a necessidade de mandados judiciais obtendo uma dados de americanos a qualquer momento (coisa obtida pela decisão da suprema corte a Carpenter v. United States)
leia mais: https://www.wired.com/story/fbi-spy-fears-us-congress/
-
desde as descobertas de Snowden e outros whistleblowers sabemos que órgãos operativos e internos dos estados unidos (NSA, subdivisões como a TAO, como a SSO (
as operaƧƵes de coleta em massa de paĆses aliados e internos nĆ£o sĆ£o uma grande novidade, porĆ©m
o problema que causa uma grande preocupação eh a habilidade do FBI de estabelecer estes vĆnculos de dados pra executar prisƵes arbitrarias sem mandado judicial, agr nĆ£o eh apenas uma questĆ£o de coleta de dados, eh uma validação de um tipo de poder estrutural de efetuar prisƵes ou executar operaƧƵes com base em informaƧƵes privadas (diferente da coleta de dados, isto da o poder de nĆ£o apenas analisar os indivĆduos se nĆ£o operar juridicamente e diretamente)WIRED
FBI Surveillance Fears Are Uniting a Badly Broken Congress
The FBI has collected sensitive data on millions of Americans without warrants, drawing intense scrutiny from Congress and turning the agency into a punching bag across the political divide.
Apple corrige falha de segurança critica (zero-day) que afeta o motor de renderização (WebKit) do safari que podia permitir execução de codigo remoto (CVE-2023-37450)
atravƩs do mais novo projeto de resposta rƔpida em seguranƧa (RSR) a Apple conseguiu corrigir uma vulnerabilidade que foi reportada por um pesquisador anƓnimo que possivelmente teria sido explorada silenciosamente
Requisições ao Safari com tipos de dados especiais dentro de paginas web podiam explorar esta vulnerabilidade dada a natureza do seu WebKit e podia executar código remoto
a Apple nao revelou mtos detalhes sobre esta vulnerabilidade (como sempre) mas se sabe que a implementação desta correção trouxe instabilidade e diversos problemas ao abrir paginas web bastante conhecidas
Ate agr nao existem registros públicos ou em fóruns sobre
fontes: TheHackerNews
Socradar.io
Detalhe: esta vulnerabilidade foi corrigida na gama de versƵes mais recentes, podendo existir ainda em versƵes anteriores que nĆ£o fazem parte deste projeto š“āā ļø
atravƩs do mais novo projeto de resposta rƔpida em seguranƧa (RSR) a Apple conseguiu corrigir uma vulnerabilidade que foi reportada por um pesquisador anƓnimo que possivelmente teria sido explorada silenciosamente
Requisições ao Safari com tipos de dados especiais dentro de paginas web podiam explorar esta vulnerabilidade dada a natureza do seu WebKit e podia executar código remoto
a Apple nao revelou mtos detalhes sobre esta vulnerabilidade (como sempre) mas se sabe que a implementação desta correção trouxe instabilidade e diversos problemas ao abrir paginas web bastante conhecidas
Ate agr nao existem registros públicos ou em fóruns sobre
provas de conceito ou detalhes desta vulnerabilidade mas eh interessante conhecer este sistema de respostas rÔpidas que jah vem implementados por padrão nos produtos apple e permite instalar atualizações de segurança de forma automÔtica, tendo seu principal foco orientado a vulnerabilidades que podem ser consideradas ameaças criticas. Sem necessidade de haver uma reinicialização do sistema ou grande interações do usuÔriofontes: TheHackerNews
Socradar.io
Detalhe: esta vulnerabilidade foi corrigida na gama de versƵes mais recentes, podendo existir ainda em versƵes anteriores que nĆ£o fazem parte deste projeto š“āā ļø
Apple Support
About Rapid Security Responses for iOS, iPadOS, and macOS
Rapid Security Responses deliver important security improvements between software updates.