SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
   Experiência em missão crítica de missão crítica

   Pioneira no ensino de Linux à distância

   Parceira de treinamento IBM

   Primeira com LPI no Brasil

   + de 30.000 alunos satisfeitos

   Reconhecimento internacional

   Inovação com Hackerteen e Boteconet


                            www.4linux.com.br         2 / 36
Análise de malware
com Software Livre
Fernando Mercês




       www.4linux.com.br   3 / 36
No final da minha palestra

➔ As 05 primeiras perguntas ganharão um botton do
Tux.

➔ Sorteio do curso “Investigação Forense Digital – 427
(EAD)”
●   Preencha o cupom que está junto ao folheto que você
recebeu na entrada da palestra;
●   Se você já preencheu, ele já está aqui na urna.
●   O ganhador deve estar presente até o quinto sorteio. Se não
estiver presente, ganhará o sexto sorteado.


                           www.4linux.com.br               4 / 36
Análise de malware

➔ O que é um malware?
* “Malicious software”, é um software indejesado geralmente
com intenções nada nobres como roubo de informações,
replicação, comprometimento do sistema etc.

➔ O que é análise de malware?
* É a técnica de documentar o comportamento de um software
suspeito sem seu código-fonte.




                        www.4linux.com.br               5 / 36
Malware no Linux existe?

Winter, Winux/Lindose, Diesel, Coin, Mighty, Adore, Slapper,
Kork, Millen... [1]

●Existem vários malwares para o sistema do pinguim, mas a
quantia não é realmente grande se comparada à quantidade de
malwares para o Janelas.

●   É bom se preparar enquanto é tempo. :)




                          www.4linux.com.br              6 / 36
Agenda

1 - Análise estática e reconhecimento do local
 1.2 - Who are you? Com a ferramenta file
 1.3 - Busca abusada de strings
 1.4 - Raio-x com o objdump

2 - Binário protegido, e agora?
 2.1 - Exemplo de (des)compactação com packer livre
 2.2 - Outras proteções possíveis

3 - Rastreando os passos
 3.3 - Começando do começo
 3.2 - Entendendo as calls e as syscalls
 3.3 - Documentação do comportamento (ou "te peguei")


                         www.4linux.com.br              7 / 36
Análise estática e
reconhecimento do local


        www.4linux.com.br   8 / 36
Who are you?
●A maioria dos tipos de arquivo possui um “magic number”
para identificação, localizado logo nos primeiros bytes.

● A ferramenta file [2] está presente em todas as distribuições
GNU/Linux. Ela utiliza a biblioteca libmagic como “core” para
reconhecer tipos de arquivo.

$ file /etc/hosts
/etc/hosts: ASCII English text

$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64,
version 1 (SYSV), dynamically linked (uses
shared libs), for GNU/Linux 2.6.18, stripped


                         www.4linux.com.br                 9 / 36
Who are you?
●O file não se limita a identificar o tipo de arquivo, mas dá
várias informações sobre alguns tipos, como é o caso de
binários ELF.

●   Script do Nautilus “Get info” para agilizar o reconhecimento:

#!/bin/bash
info=`file "$1"`
ls=`ls -l "$1"`
wc=`wc "$1"`
size=`ls -lh "$1" | cut -d" " -f5`

zenity --info --text="$ filen$infonn$
wcn$wcnn$ lsn$ls" --title="$1 ($size)"


                            www.4linux.com.br               10 / 36
Busca abusada de strings
●Graças ao conjunto binutils [3], temos uma ferramenta livre
chamada strings, que nos exibe todos os textos dentro de um
arquivo qualquer, inclusive binários.

$ strings /bin/ls | tail
%H:%M:%S
%m/%d/%y
%Y-%m-%d
invalid suffix in %s%s argument `%s'
invalid %s%s argument `%s'
%s%s argument `%s' too large
xstrtol.c
0 <= strtol_base && strtol_base <= 36
xstrtoul
xstrtoumax

                        www.4linux.com.br              11 / 36
Busca abusada de strings
●A análise de strings é extremamente importante. Nela podem
constar informações essenciais para o malware como nomes
DNS, caminhos e nomes de diretórios e arquivos etc.

● Conhecendo esta “falha”, os criadores de malware
frequentemente encriptam as strings, de forma que uma análise
estática não ajuda muito:

$ strings -a -t x binary.exe | tail -4
  180b6 waG(x
  180f6 w52Wx
  18196 vvWx
  18314 ~Ftx
●   Veremos como desencriptar essas strings mais à frente.

                          www.4linux.com.br              12 / 36
Raio-X com o objdump
●O pacote binutils contém vários aplicativos interessantes para
a análise de malware, dentre eles:

● objdump
● objcopy

● nm

● readelf

● size

● strings

● strip



● O objdump é uma ferramenta poderosa, que exibe muitas
informações sobre o binário, como veremos a seguir. As outras
ferramentas também são muito úteis e ficam como lição de
casa. ;-)
                         www.4linux.com.br               13 / 36
Raio-X com o objdump
$ objdump -d malware | grep -A30 main
0000000000400587 <main>:
  400587: push    %rbp
  400588: mov     %rsp,%rbp
  40058b: sub     $0x10,%rsp
  40058f: movl    $0x2823326e,-0x10(%rbp)
  400596: movl    $0x27286e2f,-0xc(%rbp)
  40059d: movl    $0x272f2e22,-0x8(%rbp)
  4005a4: movw    $0x2628,-0x4(%rbp)
  4005aa: movb    $0x0,-0x2(%rbp)
  4005ae: lea     -0x10(%rbp),%rax
  4005b2: mov     %rax,%rdi
  4005b5: callq 400534 <decrypt>
  4005ba: lea     -0x10(%rbp),%rax
  4005be: mov     %rax,%rdi
  4005c1: callq 400438 <remove@plt>
  4005c6: mov     $0x0,%eax
  4005cb: leaveq
  4005cc: retq
                      www.4linux.com.br     14 / 36
Raio-X com o objdump
No slide anterior vemos um disassembly da função main() com
o objdump. Aqui é importante notar:

●Os nomes das funções foram identificados, então estão no
binário compilado. São os symbols.

●   O disassembly é estático. O código não rodou.

●O grep na main foi proposital, mas a execução de um binário
não começa na main. Atente para a saída do objdump sem o
grep e você verá que tem muito código antes da main ser
chamada.

●   O objdump utliza sintaxe AT&T no disassembly.

                          www.4linux.com.br            15 / 36
Sintaxe Intel com o gdb
$ gdb -q malware
(gdb) set disassembly-flavor intel
(gdb) disassemble main
   0x400587 push rbp
   0x400588 mov rbp,rsp
   0x40058b sub rsp,0x10
   0x40058f mov DWORD PTR [rbp-0x10],0x2823326e
   0x400596 mov DWORD PTR [rbp-0xc],0x27286e2f
   0x40059d mov DWORD PTR [rbp-0x8],0x272f2e22
   0x4005a4 mov WORD PTR [rbp-0x4],0x2628
   0x4005aa mov BYTE PTR [rbp-0x2],0x0
   0x4005ae lea rax,[rbp-0x10]
   0x4005b2 mov rdi,rax
   0x4005b5 call 0x400534 <decrypt>
   0x4005ba lea rax,[rbp-0x10]
   0x4005be mov rdi,rax
   0x4005c1 call 0x400438 <remove@plt>
   0x4005c6 mov eax,0x0
   0x4005cb leave
   0x4005cc ret
                     www.4linux.com.br            16 / 36
Binário protegido, e
      agora?


       www.4linux.com.br   17 / 36
Packer livre: UPX
Existem muitas formas de proteger o binário de olhares
curiosos e é claro que o criador de malware não quer ninguém
bisbilhotando seu arquivo, pois este poderá descobrir como ele
funciona, criar uma vacina, denunciar para onde os dados são
enviados etc.

Uma proteção bem comum é o packer, que comprime um
executável e dificulta muito a análise. O único packer de código
aberto que conheço é o UPX [4], por isso vou utilizá-lo em
nosso malware.

$ objdump -d malware_packed

malware_packed:            file format elf64-x86-64

                         www.4linux.com.br               18 / 36
Packer livre: UPX
Como o UPX é um packer open source, para removê-lo basta
usar o próprio comando upx:

$ upx -d malware

Agora o objdump e outras ferramentas de análise já
conseguem exibir as informações que buscamos pois o
executável está em seu estado original.




                       www.4linux.com.br              19 / 36
Outras proteções
Além dos packers, existe uma série de técnicas para proteção
de binários, dentre elas:

● Crypters.
● Obfuscação.

● Dummy code.

● Virtualização.

● CRC.




Até o presente momento, ferramentas para Linux mais
rebuscadas para proteção de binários não são comumente
distribuídas, mas não se sabe o que há de ferramentas
fechadas/individuais por aí. ;-)


                        www.4linux.com.br              20 / 36
Rastreando os passos




       www.4linux.com.br   21 / 36
Começando do começo
Aqui abordaremos a análise dinâmica, ou seja, vamos rodar o
malware, passo-a-passo, num ambiente controlado, para
identificar seu comportamento. Para isso, será usado um
poderoso debugger e disassembler livre, o EDB [5].

●Ao abrir o malware no EDB, paramos em seu início (não é a
main, lembra?).

● Podemos buscar strings direto pelo EDB, caso ainda não
tenhamos feito com o strings. Para isso, basta um CTRL+S,
que vai carregar o plugin String Search.




                       www.4linux.com.br              22 / 36
Começando do começo




             www.4linux.com.br   23 / 36
Entendendo as calls
O EDB já coloca um breakpoint na main automaticamente. Para
conferir, veja a tela do Breakpoint Manager (CTRL+B):




                       www.4linux.com.br            24 / 36
Entendendo as calls
Podemos mandar rodar o malware no EDB (F9) e aguardar
parar no início da função principal então. Isto você pode fazer
sem medo, não?

Podemos executar linha a linha com o F8 e em 0x4005ae,
vemos que o endereço de uma string interessante é
armazenada em RAX:




                         www.4linux.com.br                25 / 36
Entendendo as calls
Logo abaixo temos uma bendita CALL. Mas o que é isso?

●   Qualquer chamada para função gera uma CALL em Assembly.

●O código é desviado para o endereço apontado pea CALL e,
após um RET, volta para a instrução logo abaixo à chamada da
CALL.

●Os parâmetros de função são passados para a CALL através
da pilha (stack).

●   O retorno pode variar, mais geralmente é dado em RAX.



                          www.4linux.com.br             26 / 36
Entendendo as calls



●A execução será desviada para a instrução em 0x400534 e os
parâmetros podem ser vistos na janela “Stack” do EDB.




                       www.4linux.com.br            27 / 36
syscalls
Já as sycalls são chamadas às rotinas providas pelo SO, por
exemplo, para imprimir uma string na tela.

●   Alguns exemplos são: setuid(), exit() e fork().

● Podem ser utilizadas diretamente pelo malware, já que este
ficará preso à arquitetura (não é comum malware portável :).

●Existem uma tabela do tipo QR-card com todas as syscalls do
Linux [6]. O site original [7] estava for a dor ar (403) no dia em
que escrevi este slide.




                            www.4linux.com.br              28 / 36
syscalls
●Quando o binário não tem os symbols, o objdump, readelf, hte
e nem mesmo o gdb são capazes de exibir o nome da função
em questão, o que é um problema. Já o EDB, consegue pois é
possível gerar symbols para cada biblioteca presente.

●Importante notar que funções ANSI C são wrappers para
syscalls.

               Função ANSI C                    syscall




Exemplo:         remove()                       unlink()



                            www.4linux.com.br              29 / 36
Documentação
Documentar o comportamento de um binário é um trabalho
demorado, porém de máxima utilidade. As vantagens são:

●   Rollback de ações.

●   Criação de vacinas.

●   Aprendizado.

●   Massagem no ego. :)




                          www.4linux.com.br         30 / 36
Oportunidades

●   Empresas de anti-vírus.
●   Grupos de resposta a incidentes.
●   Órgãos públicos e militares.
●   Times de segurança de empresas privadas.




                          www.4linux.com.br    31 / 36
Referências
[1] http://en.wikipedia.org/wiki/Linux_malware
[2] http://www.darwinsys.com/file/
[3] http://www.gnu.org/software/binutils/
[4] http://upx.sourceforge.net
[5] www.codef00.com/projects#debugger
[6] http://www.mentebinaria.com.br/files/syscall-table.pdf
[7] http://www.bigfoot.com/~jialong_he




                        www.4linux.com.br                32 / 36
Fonte do pseudo-malware
void decrypt(char s[])
{
   int i;

    for (i=0; i<strlen(s); i++)
       s[i] ^= 0x41;
}

int main()
{
   int i, j;

    /* Tenta remover "/sbin/ifconfig" */
    char arq[] = "n2#(/n('"./'(&";
    decrypt(arq);
    remove(arq);

    return 0;
}

NOTA: Para o UPX comprimir esse código foi acrescido com
várias funções inúteis.
                          www.4linux.com.br        33 / 36
Referências
[1] http://en.wikipedia.org/wiki/Linux_malware
[2] http://www.darwinsys.com/file/
[3] http://www.gnu.org/software/binutils/
[4] http://upx.sourceforge.net
[5] www.codef00.com/projects#debugger
[6] http://www.mentebinaria.com.br/files/syscall-table.pdf
[7] http://www.bigfoot.com/~jialong_he




                        www.4linux.com.br                34 / 36
Perguntas?




            @MenteBinaria
        www.mentebinaria.com.br




              www.4linux.com.br   35 / 36
Muito obrigado!




      fernando.merces@4linux.com.br
            www.4linux.com.br
           www.hackerteen.com
           twitter.com/4LinuxBR

           Tel: 55-11-2125-4747

                  www.4linux.com.br   36 / 36

Mais conteúdo relacionado

Destaque

Analise de Malware e Pesquisas Recentes
Analise de Malware e Pesquisas RecentesAnalise de Malware e Pesquisas Recentes
Analise de Malware e Pesquisas RecentesLuiz Amelotti
 
Segurança física e lógica e análise de vulnerabilidade 1
Segurança física e lógica e análise de vulnerabilidade 1Segurança física e lógica e análise de vulnerabilidade 1
Segurança física e lógica e análise de vulnerabilidade 1Diego BBahia
 
OpenVAS - Scanner em Vulnerabilidades Open Source (fork Nessus GPL2)
OpenVAS - Scanner em Vulnerabilidades Open Source (fork Nessus GPL2)OpenVAS - Scanner em Vulnerabilidades Open Source (fork Nessus GPL2)
OpenVAS - Scanner em Vulnerabilidades Open Source (fork Nessus GPL2)Mauro Risonho de Paula Assumpcao
 
Análise de Malware em Dump de Memória com Volatility
Análise de Malware em Dump de Memória com VolatilityAnálise de Malware em Dump de Memória com Volatility
Análise de Malware em Dump de Memória com Volatilityederluis1973
 
Oficina de Análise em Vulnerabilidades - Openvas4 - GaroaHC
Oficina de Análise em Vulnerabilidades - Openvas4 - GaroaHCOficina de Análise em Vulnerabilidades - Openvas4 - GaroaHC
Oficina de Análise em Vulnerabilidades - Openvas4 - GaroaHCMauro Risonho de Paula Assumpcao
 
Webinar # 17 – Análise de Malware em Forense Computacional
Webinar # 17 – Análise de Malware em Forense ComputacionalWebinar # 17 – Análise de Malware em Forense Computacional
Webinar # 17 – Análise de Malware em Forense ComputacionalClavis Segurança da Informação
 
OpenVAS: Vulnerability Assessment Scanner
OpenVAS: Vulnerability Assessment ScannerOpenVAS: Vulnerability Assessment Scanner
OpenVAS: Vulnerability Assessment ScannerChandrak Trivedi
 

Destaque (7)

Analise de Malware e Pesquisas Recentes
Analise de Malware e Pesquisas RecentesAnalise de Malware e Pesquisas Recentes
Analise de Malware e Pesquisas Recentes
 
Segurança física e lógica e análise de vulnerabilidade 1
Segurança física e lógica e análise de vulnerabilidade 1Segurança física e lógica e análise de vulnerabilidade 1
Segurança física e lógica e análise de vulnerabilidade 1
 
OpenVAS - Scanner em Vulnerabilidades Open Source (fork Nessus GPL2)
OpenVAS - Scanner em Vulnerabilidades Open Source (fork Nessus GPL2)OpenVAS - Scanner em Vulnerabilidades Open Source (fork Nessus GPL2)
OpenVAS - Scanner em Vulnerabilidades Open Source (fork Nessus GPL2)
 
Análise de Malware em Dump de Memória com Volatility
Análise de Malware em Dump de Memória com VolatilityAnálise de Malware em Dump de Memória com Volatility
Análise de Malware em Dump de Memória com Volatility
 
Oficina de Análise em Vulnerabilidades - Openvas4 - GaroaHC
Oficina de Análise em Vulnerabilidades - Openvas4 - GaroaHCOficina de Análise em Vulnerabilidades - Openvas4 - GaroaHC
Oficina de Análise em Vulnerabilidades - Openvas4 - GaroaHC
 
Webinar # 17 – Análise de Malware em Forense Computacional
Webinar # 17 – Análise de Malware em Forense ComputacionalWebinar # 17 – Análise de Malware em Forense Computacional
Webinar # 17 – Análise de Malware em Forense Computacional
 
OpenVAS: Vulnerability Assessment Scanner
OpenVAS: Vulnerability Assessment ScannerOpenVAS: Vulnerability Assessment Scanner
OpenVAS: Vulnerability Assessment Scanner
 

Semelhante a Análise de malware com software livre

Ferramentas GPL para segurança de redes - Vanderlei Pollon
Ferramentas GPL para segurança de redes - Vanderlei PollonFerramentas GPL para segurança de redes - Vanderlei Pollon
Ferramentas GPL para segurança de redes - Vanderlei PollonTchelinux
 
Mini Curso - Pen Test - Univem
Mini Curso - Pen Test - UnivemMini Curso - Pen Test - Univem
Mini Curso - Pen Test - Univemevandrovv
 
Firewall em Linux
Firewall em LinuxFirewall em Linux
Firewall em Linuxguest4e5ab
 
Instalação do asterisk
Instalação do asteriskInstalação do asterisk
Instalação do asteriskVicente Nobre
 
Palestra - FACSENAC - De Hacker e louco, todo mundo tem um pouco
Palestra - FACSENAC - De Hacker e louco, todo mundo tem um poucoPalestra - FACSENAC - De Hacker e louco, todo mundo tem um pouco
Palestra - FACSENAC - De Hacker e louco, todo mundo tem um poucoAs Zone
 
Facsenac - De hacker e louco, todo mundo tem um pouco
Facsenac - De hacker e louco, todo mundo tem um poucoFacsenac - De hacker e louco, todo mundo tem um pouco
Facsenac - De hacker e louco, todo mundo tem um poucoThiago Dieb
 
Palestra: Pentest - Intrusão de Redes
Palestra: Pentest - Intrusão de RedesPalestra: Pentest - Intrusão de Redes
Palestra: Pentest - Intrusão de RedesBruno Alexandre
 
TDC2016SP - Programando PHP com mais segurança!
TDC2016SP - Programando PHP com mais segurança!TDC2016SP - Programando PHP com mais segurança!
TDC2016SP - Programando PHP com mais segurança!tdc-globalcode
 
Slide curso metasploit
Slide curso metasploitSlide curso metasploit
Slide curso metasploitRoberto Soares
 
Palestra criando aplicações seguras com php (2)
Palestra  criando aplicações seguras com php (2)Palestra  criando aplicações seguras com php (2)
Palestra criando aplicações seguras com php (2)Leandro Lugaresi
 
Seguranca em Servidores Linux
Seguranca em Servidores LinuxSeguranca em Servidores Linux
Seguranca em Servidores LinuxAlessandro Silva
 
Confraria0day - 11º Edição - Jhonathan Davi
Confraria0day - 11º Edição - Jhonathan DaviConfraria0day - 11º Edição - Jhonathan Davi
Confraria0day - 11º Edição - Jhonathan DaviJhonathan Davi
 
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...Sandro Suffert
 
Hacking Linux: Princípios Básicos de Segurança - Bruna Griebeler
Hacking Linux: Princípios Básicos de Segurança - Bruna GriebelerHacking Linux: Princípios Básicos de Segurança - Bruna Griebeler
Hacking Linux: Princípios Básicos de Segurança - Bruna GriebelerTchelinux
 

Semelhante a Análise de malware com software livre (20)

Kali linux
Kali linux Kali linux
Kali linux
 
Pentest conisli07
Pentest conisli07Pentest conisli07
Pentest conisli07
 
Forense Computacional com Software Livre
Forense Computacional com Software LivreForense Computacional com Software Livre
Forense Computacional com Software Livre
 
Ferramentas GPL para segurança de redes - Vanderlei Pollon
Ferramentas GPL para segurança de redes - Vanderlei PollonFerramentas GPL para segurança de redes - Vanderlei Pollon
Ferramentas GPL para segurança de redes - Vanderlei Pollon
 
Mini Curso - Pen Test - Univem
Mini Curso - Pen Test - UnivemMini Curso - Pen Test - Univem
Mini Curso - Pen Test - Univem
 
Netfilter + Iptables
Netfilter + IptablesNetfilter + Iptables
Netfilter + Iptables
 
Firewall em Linux
Firewall em LinuxFirewall em Linux
Firewall em Linux
 
Instalação do asterisk
Instalação do asteriskInstalação do asterisk
Instalação do asterisk
 
Palestra - FACSENAC - De Hacker e louco, todo mundo tem um pouco
Palestra - FACSENAC - De Hacker e louco, todo mundo tem um poucoPalestra - FACSENAC - De Hacker e louco, todo mundo tem um pouco
Palestra - FACSENAC - De Hacker e louco, todo mundo tem um pouco
 
Facsenac - De hacker e louco, todo mundo tem um pouco
Facsenac - De hacker e louco, todo mundo tem um poucoFacsenac - De hacker e louco, todo mundo tem um pouco
Facsenac - De hacker e louco, todo mundo tem um pouco
 
Palestra: Pentest - Intrusão de Redes
Palestra: Pentest - Intrusão de RedesPalestra: Pentest - Intrusão de Redes
Palestra: Pentest - Intrusão de Redes
 
TDC2016SP - Programando PHP com mais segurança!
TDC2016SP - Programando PHP com mais segurança!TDC2016SP - Programando PHP com mais segurança!
TDC2016SP - Programando PHP com mais segurança!
 
Slide curso metasploit
Slide curso metasploitSlide curso metasploit
Slide curso metasploit
 
Cygwin
CygwinCygwin
Cygwin
 
Palestra criando aplicações seguras com php (2)
Palestra  criando aplicações seguras com php (2)Palestra  criando aplicações seguras com php (2)
Palestra criando aplicações seguras com php (2)
 
Seguranca em Servidores Linux
Seguranca em Servidores LinuxSeguranca em Servidores Linux
Seguranca em Servidores Linux
 
Confraria0day - 11º Edição - Jhonathan Davi
Confraria0day - 11º Edição - Jhonathan DaviConfraria0day - 11º Edição - Jhonathan Davi
Confraria0day - 11º Edição - Jhonathan Davi
 
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
 
Vivendo de hacking
Vivendo de hackingVivendo de hacking
Vivendo de hacking
 
Hacking Linux: Princípios Básicos de Segurança - Bruna Griebeler
Hacking Linux: Princípios Básicos de Segurança - Bruna GriebelerHacking Linux: Princípios Básicos de Segurança - Bruna Griebeler
Hacking Linux: Princípios Básicos de Segurança - Bruna Griebeler
 

Mais de Diego Santos

Práticas DevOps com Zend Server
Práticas DevOps com Zend ServerPráticas DevOps com Zend Server
Práticas DevOps com Zend ServerDiego Santos
 
HTML5 – O que tem de novo?
HTML5 – O que tem de novo?HTML5 – O que tem de novo?
HTML5 – O que tem de novo?Diego Santos
 
Criando Mapas de rede para monitoramento com Zabbix
Criando Mapas de rede para monitoramento com ZabbixCriando Mapas de rede para monitoramento com Zabbix
Criando Mapas de rede para monitoramento com ZabbixDiego Santos
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLDiego Santos
 
OpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayOpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayDiego Santos
 
KDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MITKDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MITDiego Santos
 
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...Diego Santos
 
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
 IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando... IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...Diego Santos
 
Tenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a BonitaTenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a BonitaDiego Santos
 
Socialize os sites da sua empresa com eXo Platform
Socialize os sites da sua empresa com eXo PlatformSocialize os sites da sua empresa com eXo Platform
Socialize os sites da sua empresa com eXo PlatformDiego Santos
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em CDiego Santos
 
Análise estática de malware com o pev
Análise estática de malware com o pevAnálise estática de malware com o pev
Análise estática de malware com o pevDiego Santos
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosDiego Santos
 
Formando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosFormando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosDiego Santos
 
As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!Diego Santos
 
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxWebcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxDiego Santos
 

Mais de Diego Santos (17)

Práticas DevOps com Zend Server
Práticas DevOps com Zend ServerPráticas DevOps com Zend Server
Práticas DevOps com Zend Server
 
HTML5 – O que tem de novo?
HTML5 – O que tem de novo?HTML5 – O que tem de novo?
HTML5 – O que tem de novo?
 
Criando Mapas de rede para monitoramento com Zabbix
Criando Mapas de rede para monitoramento com ZabbixCriando Mapas de rede para monitoramento com Zabbix
Criando Mapas de rede para monitoramento com Zabbix
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQL
 
Cloud é Linux
Cloud é LinuxCloud é Linux
Cloud é Linux
 
OpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayOpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlay
 
KDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MITKDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MIT
 
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...
 
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
 IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando... IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
 
Tenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a BonitaTenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a Bonita
 
Socialize os sites da sua empresa com eXo Platform
Socialize os sites da sua empresa com eXo PlatformSocialize os sites da sua empresa com eXo Platform
Socialize os sites da sua empresa com eXo Platform
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em C
 
Análise estática de malware com o pev
Análise estática de malware com o pevAnálise estática de malware com o pev
Análise estática de malware com o pev
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizados
 
Formando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosFormando Desenvolvedores Efetivos
Formando Desenvolvedores Efetivos
 
As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!
 
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxWebcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
 

Análise de malware com software livre

  • 1.
  • 2. Experiência em missão crítica de missão crítica  Pioneira no ensino de Linux à distância  Parceira de treinamento IBM  Primeira com LPI no Brasil  + de 30.000 alunos satisfeitos  Reconhecimento internacional  Inovação com Hackerteen e Boteconet www.4linux.com.br 2 / 36
  • 3. Análise de malware com Software Livre Fernando Mercês www.4linux.com.br 3 / 36
  • 4. No final da minha palestra ➔ As 05 primeiras perguntas ganharão um botton do Tux. ➔ Sorteio do curso “Investigação Forense Digital – 427 (EAD)” ● Preencha o cupom que está junto ao folheto que você recebeu na entrada da palestra; ● Se você já preencheu, ele já está aqui na urna. ● O ganhador deve estar presente até o quinto sorteio. Se não estiver presente, ganhará o sexto sorteado. www.4linux.com.br 4 / 36
  • 5. Análise de malware ➔ O que é um malware? * “Malicious software”, é um software indejesado geralmente com intenções nada nobres como roubo de informações, replicação, comprometimento do sistema etc. ➔ O que é análise de malware? * É a técnica de documentar o comportamento de um software suspeito sem seu código-fonte. www.4linux.com.br 5 / 36
  • 6. Malware no Linux existe? Winter, Winux/Lindose, Diesel, Coin, Mighty, Adore, Slapper, Kork, Millen... [1] ●Existem vários malwares para o sistema do pinguim, mas a quantia não é realmente grande se comparada à quantidade de malwares para o Janelas. ● É bom se preparar enquanto é tempo. :) www.4linux.com.br 6 / 36
  • 7. Agenda 1 - Análise estática e reconhecimento do local 1.2 - Who are you? Com a ferramenta file 1.3 - Busca abusada de strings 1.4 - Raio-x com o objdump 2 - Binário protegido, e agora? 2.1 - Exemplo de (des)compactação com packer livre 2.2 - Outras proteções possíveis 3 - Rastreando os passos 3.3 - Começando do começo 3.2 - Entendendo as calls e as syscalls 3.3 - Documentação do comportamento (ou "te peguei") www.4linux.com.br 7 / 36
  • 8. Análise estática e reconhecimento do local www.4linux.com.br 8 / 36
  • 9. Who are you? ●A maioria dos tipos de arquivo possui um “magic number” para identificação, localizado logo nos primeiros bytes. ● A ferramenta file [2] está presente em todas as distribuições GNU/Linux. Ela utiliza a biblioteca libmagic como “core” para reconhecer tipos de arquivo. $ file /etc/hosts /etc/hosts: ASCII English text $ file /bin/ls /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped www.4linux.com.br 9 / 36
  • 10. Who are you? ●O file não se limita a identificar o tipo de arquivo, mas dá várias informações sobre alguns tipos, como é o caso de binários ELF. ● Script do Nautilus “Get info” para agilizar o reconhecimento: #!/bin/bash info=`file "$1"` ls=`ls -l "$1"` wc=`wc "$1"` size=`ls -lh "$1" | cut -d" " -f5` zenity --info --text="$ filen$infonn$ wcn$wcnn$ lsn$ls" --title="$1 ($size)" www.4linux.com.br 10 / 36
  • 11. Busca abusada de strings ●Graças ao conjunto binutils [3], temos uma ferramenta livre chamada strings, que nos exibe todos os textos dentro de um arquivo qualquer, inclusive binários. $ strings /bin/ls | tail %H:%M:%S %m/%d/%y %Y-%m-%d invalid suffix in %s%s argument `%s' invalid %s%s argument `%s' %s%s argument `%s' too large xstrtol.c 0 <= strtol_base && strtol_base <= 36 xstrtoul xstrtoumax www.4linux.com.br 11 / 36
  • 12. Busca abusada de strings ●A análise de strings é extremamente importante. Nela podem constar informações essenciais para o malware como nomes DNS, caminhos e nomes de diretórios e arquivos etc. ● Conhecendo esta “falha”, os criadores de malware frequentemente encriptam as strings, de forma que uma análise estática não ajuda muito: $ strings -a -t x binary.exe | tail -4 180b6 waG(x 180f6 w52Wx 18196 vvWx 18314 ~Ftx ● Veremos como desencriptar essas strings mais à frente. www.4linux.com.br 12 / 36
  • 13. Raio-X com o objdump ●O pacote binutils contém vários aplicativos interessantes para a análise de malware, dentre eles: ● objdump ● objcopy ● nm ● readelf ● size ● strings ● strip ● O objdump é uma ferramenta poderosa, que exibe muitas informações sobre o binário, como veremos a seguir. As outras ferramentas também são muito úteis e ficam como lição de casa. ;-) www.4linux.com.br 13 / 36
  • 14. Raio-X com o objdump $ objdump -d malware | grep -A30 main 0000000000400587 <main>: 400587: push %rbp 400588: mov %rsp,%rbp 40058b: sub $0x10,%rsp 40058f: movl $0x2823326e,-0x10(%rbp) 400596: movl $0x27286e2f,-0xc(%rbp) 40059d: movl $0x272f2e22,-0x8(%rbp) 4005a4: movw $0x2628,-0x4(%rbp) 4005aa: movb $0x0,-0x2(%rbp) 4005ae: lea -0x10(%rbp),%rax 4005b2: mov %rax,%rdi 4005b5: callq 400534 <decrypt> 4005ba: lea -0x10(%rbp),%rax 4005be: mov %rax,%rdi 4005c1: callq 400438 <remove@plt> 4005c6: mov $0x0,%eax 4005cb: leaveq 4005cc: retq www.4linux.com.br 14 / 36
  • 15. Raio-X com o objdump No slide anterior vemos um disassembly da função main() com o objdump. Aqui é importante notar: ●Os nomes das funções foram identificados, então estão no binário compilado. São os symbols. ● O disassembly é estático. O código não rodou. ●O grep na main foi proposital, mas a execução de um binário não começa na main. Atente para a saída do objdump sem o grep e você verá que tem muito código antes da main ser chamada. ● O objdump utliza sintaxe AT&T no disassembly. www.4linux.com.br 15 / 36
  • 16. Sintaxe Intel com o gdb $ gdb -q malware (gdb) set disassembly-flavor intel (gdb) disassemble main 0x400587 push rbp 0x400588 mov rbp,rsp 0x40058b sub rsp,0x10 0x40058f mov DWORD PTR [rbp-0x10],0x2823326e 0x400596 mov DWORD PTR [rbp-0xc],0x27286e2f 0x40059d mov DWORD PTR [rbp-0x8],0x272f2e22 0x4005a4 mov WORD PTR [rbp-0x4],0x2628 0x4005aa mov BYTE PTR [rbp-0x2],0x0 0x4005ae lea rax,[rbp-0x10] 0x4005b2 mov rdi,rax 0x4005b5 call 0x400534 <decrypt> 0x4005ba lea rax,[rbp-0x10] 0x4005be mov rdi,rax 0x4005c1 call 0x400438 <remove@plt> 0x4005c6 mov eax,0x0 0x4005cb leave 0x4005cc ret www.4linux.com.br 16 / 36
  • 17. Binário protegido, e agora? www.4linux.com.br 17 / 36
  • 18. Packer livre: UPX Existem muitas formas de proteger o binário de olhares curiosos e é claro que o criador de malware não quer ninguém bisbilhotando seu arquivo, pois este poderá descobrir como ele funciona, criar uma vacina, denunciar para onde os dados são enviados etc. Uma proteção bem comum é o packer, que comprime um executável e dificulta muito a análise. O único packer de código aberto que conheço é o UPX [4], por isso vou utilizá-lo em nosso malware. $ objdump -d malware_packed malware_packed: file format elf64-x86-64 www.4linux.com.br 18 / 36
  • 19. Packer livre: UPX Como o UPX é um packer open source, para removê-lo basta usar o próprio comando upx: $ upx -d malware Agora o objdump e outras ferramentas de análise já conseguem exibir as informações que buscamos pois o executável está em seu estado original. www.4linux.com.br 19 / 36
  • 20. Outras proteções Além dos packers, existe uma série de técnicas para proteção de binários, dentre elas: ● Crypters. ● Obfuscação. ● Dummy code. ● Virtualização. ● CRC. Até o presente momento, ferramentas para Linux mais rebuscadas para proteção de binários não são comumente distribuídas, mas não se sabe o que há de ferramentas fechadas/individuais por aí. ;-) www.4linux.com.br 20 / 36
  • 21. Rastreando os passos www.4linux.com.br 21 / 36
  • 22. Começando do começo Aqui abordaremos a análise dinâmica, ou seja, vamos rodar o malware, passo-a-passo, num ambiente controlado, para identificar seu comportamento. Para isso, será usado um poderoso debugger e disassembler livre, o EDB [5]. ●Ao abrir o malware no EDB, paramos em seu início (não é a main, lembra?). ● Podemos buscar strings direto pelo EDB, caso ainda não tenhamos feito com o strings. Para isso, basta um CTRL+S, que vai carregar o plugin String Search. www.4linux.com.br 22 / 36
  • 23. Começando do começo www.4linux.com.br 23 / 36
  • 24. Entendendo as calls O EDB já coloca um breakpoint na main automaticamente. Para conferir, veja a tela do Breakpoint Manager (CTRL+B): www.4linux.com.br 24 / 36
  • 25. Entendendo as calls Podemos mandar rodar o malware no EDB (F9) e aguardar parar no início da função principal então. Isto você pode fazer sem medo, não? Podemos executar linha a linha com o F8 e em 0x4005ae, vemos que o endereço de uma string interessante é armazenada em RAX: www.4linux.com.br 25 / 36
  • 26. Entendendo as calls Logo abaixo temos uma bendita CALL. Mas o que é isso? ● Qualquer chamada para função gera uma CALL em Assembly. ●O código é desviado para o endereço apontado pea CALL e, após um RET, volta para a instrução logo abaixo à chamada da CALL. ●Os parâmetros de função são passados para a CALL através da pilha (stack). ● O retorno pode variar, mais geralmente é dado em RAX. www.4linux.com.br 26 / 36
  • 27. Entendendo as calls ●A execução será desviada para a instrução em 0x400534 e os parâmetros podem ser vistos na janela “Stack” do EDB. www.4linux.com.br 27 / 36
  • 28. syscalls Já as sycalls são chamadas às rotinas providas pelo SO, por exemplo, para imprimir uma string na tela. ● Alguns exemplos são: setuid(), exit() e fork(). ● Podem ser utilizadas diretamente pelo malware, já que este ficará preso à arquitetura (não é comum malware portável :). ●Existem uma tabela do tipo QR-card com todas as syscalls do Linux [6]. O site original [7] estava for a dor ar (403) no dia em que escrevi este slide. www.4linux.com.br 28 / 36
  • 29. syscalls ●Quando o binário não tem os symbols, o objdump, readelf, hte e nem mesmo o gdb são capazes de exibir o nome da função em questão, o que é um problema. Já o EDB, consegue pois é possível gerar symbols para cada biblioteca presente. ●Importante notar que funções ANSI C são wrappers para syscalls. Função ANSI C syscall Exemplo: remove() unlink() www.4linux.com.br 29 / 36
  • 30. Documentação Documentar o comportamento de um binário é um trabalho demorado, porém de máxima utilidade. As vantagens são: ● Rollback de ações. ● Criação de vacinas. ● Aprendizado. ● Massagem no ego. :) www.4linux.com.br 30 / 36
  • 31. Oportunidades ● Empresas de anti-vírus. ● Grupos de resposta a incidentes. ● Órgãos públicos e militares. ● Times de segurança de empresas privadas. www.4linux.com.br 31 / 36
  • 32. Referências [1] http://en.wikipedia.org/wiki/Linux_malware [2] http://www.darwinsys.com/file/ [3] http://www.gnu.org/software/binutils/ [4] http://upx.sourceforge.net [5] www.codef00.com/projects#debugger [6] http://www.mentebinaria.com.br/files/syscall-table.pdf [7] http://www.bigfoot.com/~jialong_he www.4linux.com.br 32 / 36
  • 33. Fonte do pseudo-malware void decrypt(char s[]) { int i; for (i=0; i<strlen(s); i++) s[i] ^= 0x41; } int main() { int i, j; /* Tenta remover "/sbin/ifconfig" */ char arq[] = "n2#(/n('"./'(&"; decrypt(arq); remove(arq); return 0; } NOTA: Para o UPX comprimir esse código foi acrescido com várias funções inúteis. www.4linux.com.br 33 / 36
  • 34. Referências [1] http://en.wikipedia.org/wiki/Linux_malware [2] http://www.darwinsys.com/file/ [3] http://www.gnu.org/software/binutils/ [4] http://upx.sourceforge.net [5] www.codef00.com/projects#debugger [6] http://www.mentebinaria.com.br/files/syscall-table.pdf [7] http://www.bigfoot.com/~jialong_he www.4linux.com.br 34 / 36
  • 35. Perguntas? @MenteBinaria www.mentebinaria.com.br www.4linux.com.br 35 / 36
  • 36. Muito obrigado! fernando.merces@4linux.com.br www.4linux.com.br www.hackerteen.com twitter.com/4LinuxBR Tel: 55-11-2125-4747 www.4linux.com.br 36 / 36