Jump to content
    • Leandro Fróes
      No final de 2015 o programador Mahdi Safsafi decidiu listar todas as instruções da Intel e da AMD e colocar num repositório no github vários conjuntos de instruções, incluindo SSE5 e 3DNow! Estas  estão listadas em formato XML. Segundo o autor a ideia principal é justamente essa, ter um repositório com uma lista de fácil parsing, ou seja, simples de ser lida por um script ou programa.
       
      A documentação é extremamente simples e de fácil entendimento. Foram usadas algumas notações da própria Intel para indicar, por exemplo, se uma instrução suporta certo modo de operação. Exemplo:
       
      V - Supported. I - Not supported. N.E- Indicates an instruction syntax is not encodable in 64-bit mode (it may represent part of a sequence of valid instructions in other modes).  
      Pode ser que essa notícia soe um pouco estranha pra você, que pode se perguntar: Qual seria a utilidade de uma lista parseável de instruções? Um exemplo onde esta lista pode ser útil é num script que pode analisar estes dados e ti prover informações da propria documentação em um piscar de olhos. Para exemplificar isto fiz um código em Python que simplesmente abre o arquivo XML, lê seus campos e imprime seus valores na tela de uma forma -organizada-. Veja:
      import xml.etree.ElementTree as x tree = x.parse('AZ.xml') root = tree.getroot() for child in root.iter('ins'): attr1 = child.attrib.get('x32m', None) attr2 = child.attrib.get('x64m', None) opc = child.attrib.get('openc', None) m = child.find('mnem').text arg = child.find('args').text dsc = child.find('dscrp').text print '32 bits Mode: ' + format(attr1) print '64 bits Mode: ' + format(attr2) print 'Mnemonic: ' + format(m) print 'Args: ' + format (arg) print 'Openc: ' + format(opc) print 'Description: ' + format(dsc) print '----------------------------'  
      A saída ficaria mais ou menos assim:
       
      ... 32 bits Mode:V 64 bits Mode:RVM Mnemonic:VPSRLD Args:ymm1,ymm2,xmm3/m128 Openc:None Description:Shift doublewords in ymm2 right by amount specified in xmm3/m128 while shifting in 0s. ---------------------------- 32 bits Mode:V 64 bits Mode:VMI Mnemonic:VPSRLD Args:ymm1,ymm2,imm8 Openc:None Description:Shift doublewords in ymm2 right by imm8 while shifting in 0s. ---------------------------- 32 bits Mode:V 64 bits Mode:RVM Mnemonic:VPSRLQ Args:ymm1,ymm2,xmm3/m128 Openc:None Description:Shift quadwords in ymm2 right by amount specified in xmm3/m128 while shifting in 0s. ---------------------------- 32 bits Mode:V 64 bits Mode:VMI Mnemonic:VPSRLQ Args:ymm1,ymm2,imm8 Openc:None Description:Shift quadwords in ymm2 right by imm8 while shifting in 0s. ---------------------------- 32 bits Mode:V 64 bits Mode:V Mnemonic:PSUBB Args:mm,mm/m64 Openc:None Description:Subtract packed byte integers in mm/m64 from packed byte integers in mm. ---------------------------- 32 bits Mode:V 64 bits Mode:V Mnemonic:PSUBB Args:xmm1,xmm2/m128 Openc:None Description:Subtract packed byte integers in xmm2/m128 from packed byte integers in xmm1. ---------------------------- 32 bits Mode:V 64 bits Mode:V Mnemonic:PSUBW Args:mm,mm/m64 Openc:None Description:Subtract packed word integers in mm/m64 from packed word integers in mm. ---------------------------- ...
      Isso me lembrou uma ferramenta escrita pelo Fernando chamada bashacks(mais especificamente a função bh_asminfo), onde a ideia é a mesma.
      Infelizmente o projeto que contém esta lista foi descontinuado agora no fim de 2017, mas o autor já foi rápido e iniciou um novo chamado opcodesDB, que pelo visto suporta JSON. Já pensou no tanto de coisas que poderíamos fazer com estes bancos de dados parseáveis?
       
       

    • Nesta sexta-feira a desenvolvedora de software Hex-Rays atualizou a versão do IDA, seu disassembler. A versão gratuita do IDA não era atualizada desde a versão 5.0, enquanto a versão paga seguiu passando pela 6.0, 6.5, etc até chegar à versão 7.0 atual. Como este software tem um custo alto, esta é uma notícia muito boa para estudantes e entusiastas em engenharia reversa que querem ter um gostinho de como funciona este poderoso analisador estático (ok, sabemos que o IDA também pode depurar, mas sua principal função é disassemblar código ?). 
      O IDA freeware está disponível para Windows, Linux e macOS e pode ser baixado aqui.
      Em breve faremos alguns vídeos sobre o uso desse disassembler, mas até lá, você já não tem desculpa pra não baixar e começar a conhecê-lo!


    • Dados os ocorridos recentes sobre vazamento de dados como o caso da Netshoes, resolvi compartilhar mais uma ferramenta, desta vez um programa em Python que recebe um endereço de e-mail como argumento e busca por leaks que o envolvam. Adicionalmente, de posse de alguma senha vazada, é possível testar o reuso de credenciais em diferentes serviços.
      O nome do software é Cr3dOv3r, disponibilizado sob a licença livre MIT. Aqui encontrei uma minha de Instagram (que não utilizo), que possui uma senha vazada anteriormente, conforme visto na imagem. Vale a pena conferir seus e-mails aí!

    • Todas as palestras ministradas na REcon, a maior conferência sobre engenharia reversa do mundo, que aconteceu em Montreal este ano estão disponíveis (slides e vídeos), inclusive no YouTube. Dentre as várias apresentações interessantes está a Crypton Exposing malware deepest secrets, das pesquisadores Julia Karpin e Anna Dorfman da F5. Na palestra elas comentam que a ferramenta reduziu de várias horas (talvez dias) para apenas alguns minutos o trabalho de descriptografar arquivos de configuração de malware como o ZeusVM, Citadel e outros. Além disso, a palestra é muito divertida!
      Claro que não pára por aí! Tem gente falando de SGX, ER em hardware, celulares e muito mais! Não perde: https://recon.cx/2017/montreal/slides/
      Em tempo, as palestras da REcon são ministradas em Inglês e infelizmente não há legenda disponível.

    • Batizado com nome herdado da estrela binária VV Cephei, o Linux.Cephei é provavelmente o primeiro file infector para executáveis ELF (utilizados nos sistemas baseados em Linux, entre outros) escrito na linguagem Nim. Isso mesmo, o autor é um tanto excêntrico e disse em seu blog que o Linux.Cephei é inofensivo (por enquanto) e fez somente para participar de um concurso de programação.
      O vírus é do tipo que chamamos de prepender, ou seja, ele adiciona algo "antes" da execução de um programa saudável, no caso, de um binário ELF. A técnica para isso é a alteração de seu entrypoint. 
      Nos testes que fizemos aqui, o Linux.Cephei só funcionou com binários compilados estaticamente: 
      $ uname -a Linux malinux 4.9.0-4-amd64 #1 SMP Debian 4.9.51-1 (2017-09-28) x86_64 GNU/Linux $ cat /etc/debian_version 9.2 $ cat h.c #include <stdio.h> int main(void) { printf("ola mundo do bem!\n"); return 0; } $ gcc -static -o hello h.c $ ./hello ola mundo do bem! $ chmod +x linux.cephei $ ./linux.cephei $ ./hello Did you know that VV Cephei, also known as HD 208816, is an eclipsing binary star system located in the constellation Cepheus, approximately 5,000 light years from Earth? It is both a B[e] star and shell star. Awesome! https://en.wikipedia.org/wiki/VV_Cephei The more you know... :) ola mundo do bem! $ gcc -o hello h.c $ ./linux.cephei $ ./hello ola mundo do bem!  Perceba que ele injetou seu código com sucesso no binário hello, mas somente quando foi compilado estaticamente.  
      Além da linguagem exótica, ultimamente não se vê muitos file infectors já que a moda de infectar executáveis passou. De qualquer forma, é bom ficar de olho. Com códigos como o do Linux.Ceiphei, vírus podem permanecer ocultos num sistema por muito tempo. E pouca gente usa antivírus no Linux, mesmo tendo uma alternativa livre como o ClamAV.

    • Mais um banco de dados de dados vazados tornou-se público recentemente. Desta vez foi uma invasão ocorrida no site CafeMon, um portal que concentra informações para mulheres que são mães, como uma rede social. De acordo com o projeto Have I Been Pwned, em 2014 2.6 milhões de e-mails e senhas em texto claro foram vazadas do portal.
      Apesar de o portal não ser tão famoso no Brasil, aproveitamos a oportunidade para indicar a nossos leitores o uso do serviço gratuito Have I Been Pwned. Nele você pode digitar seus endereços de e-mail e monitorá-los, a fim de ser consultar e ser informado caso eles apareçam em algum vazamento público ou dump colocado na Internet (normalmente em sites como o Pasetbin). Por exemplo, o meu e-mail do GMail já apareceu em dois vazamentos:

      O primeiro passo é entrar com minha conta em cada um destes serviços e alterar a senha. Depois clicar em Notify me when I get pwned para que eu receba um e-mail caso meu endereço apareça num novo vazamento. Vale também utilizar serviços como o 1Password, Lastpass ou Dashlane para gerenciar senhas fortes e não utilizar senhas iguais para diferentes serviços pois se eu usasse por exemplo a mesma senha no GMail que utilizo no site da Adobe, conforme imagem, poderia ter tido meu e-mail ownado.
      Fica esperto, pois estamos sujeitos à estes vazamentos mesmo (a responsabilidade sobre a segurança desse tipo de dados é das empresas), mas podemos ajudar a evitar maiores problemas com ajuda deste site.

    • A QuarksLab liberou recentemente o que chamou de LIEF, uma biblioteca multiplataforma para parsear binários Mach-O, ELF e PE. Funciona de forma similar à nossa libpe, mas liberaram wrapper pra Python, suporte à escrita, etc. Devo dizer que tem muito mais funções.
      Segue um exemplo em Python usando a LIEF para extrair informações de um PE com saída similar à do readpe, do toolkit to pev:
      import lief pe = lief.parse('churrasco.exe') print(pe) A saída é:
      Dos Header ========== Magic: 5a4d Used Bytes In The LastPage: 90 File Size In Pages: 3 Number Of Relocation: 0 Header Size In Paragraphs: 4 Minimum Extra Paragraphs: 0 Maximum Extra Paragraphs: ffff Initial Relative SS: 0 Initial SP: b8 Checksum: 0 Initial IP: 0 Initial Relative CS: 0 Address Of Relocation Table: 40 Overlay Number: 0 OEM id: 0 OEM info: 0 Address Of New Exe Header: e0 Rich Header =========== Key: d089bb0a - ID: 0x9100 Build ID: 0x7809 Count: 1 - ID: 0x8400 Build ID: 0x7809 Count: 41 - ID: 0x1000 Build ID: 0x0000 Count: 100 - ID: 0x7b00 Build ID: 0xc627 Count: 7 - ID: 0x8300 Build ID: 0x7809 Count: 93 - ID: 0x9500 Build ID: 0x7809 Count: 18 - ID: 0x0000 Build ID: 0x0000 Count: 0 Header ====== Signature: 50 45 0 0 Machine: I386 Number Of Sections: 3 Pointer To Symbol Table: 0 Number Of Symbols: 0 Size Of Optional Header: e0 Characteristics: RELOCS_STRIPPED - EXECUTABLE_IMAGE - CHARA_32BIT_MACHINE Time Date Stamp: 4be33f4a ... Tem muita coisa legal na LIEF. Experimenta substituir a linha print(pe) por help(pe) para ver todas as opções do que dá pra fazer com um PE e testa também com os outros formatos. Você vai se surpreender.
      Se ficou curioso, a maneira mais fácil de instalar é com o pip:
      $ pip install lief A LIEF também tem headers para C e C++.

×
×
  • Create New...