Another look at bradesco3.exe part3
Autor: Pedro Drimel Neto | Publicado: 2010-11-08T09:10:00-08:00

IntroduçãoO 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ódigoEmbora 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 "&amp;NOME="00DEFF54  |00B493D8  ASCII "PWD"00DEFF58  |00B3A828  ASCII "C4C1C4CFD3BD"00DEFF5C  |00B09738  ASCII "DADOS="00DEFF64  |00B28358  ASCII "T=C&amp;DADOS=PWD&amp;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 "&amp;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&amp;" hard-coded em:0046F6AC PUSH bradesco.0046F7D8                   ;  ASCII "T=C&amp;"0046F6B9  CALL bradesco.0040658CRetorno: EAX=00B3A828  ASCII "C4C1C4CFD3BD"0046F6C4  CALL bradesco.0046DF34Retorno: 00B09738  ASCII "DADOS="0046F6CF  MOV EAX,DWORD PTR DS:[EBX+48]0x00B41D38 fixo "PWD"0046F6D2  CALL bradesco.0046F1C4Retorno: EBP-18  ASCII "PWD"0046F6E2  CALL bradesco.0040658CRetorno: 00B3AC08  ASCII "A6CECFCDC5BD"0046F6ED CALL bradesco.0046DF34Retorno: 00B09778  ASCII "&amp;NOME="0046F6FACALL bradesco.0046F988Retorno: 00B425B8  ASCII "PAL"0046F70A CALL bradesco.00404CCCRetorno: 00B28358  ASCII "T=C&amp;DADOS=PWD&amp;NOME=PAL"0046F712  MOV EAX,DWORD PTR DS:[4748FC]DS:[004748FC]=0046F4540046F454: ASCII "E8F4F4F0BAAFAFF7F7F7AEF3E8E1EEE8E1E9E9E3E8E9E2E1AEE3EFEDAFE2E1EEEEE5F2DFE9EEE3AEF0E8F0" 0046F717 CALL bradesco.0046DF34Resultado: 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 ; \GetComputerNameAAjustando a regraA 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:"&amp;DADOS=";http_client_body;content:"&amp;NOME=";http_client_body;  sid:100000000;rev:1; )Basicamente, checamos a URI por &amp;DADOS= e &amp;NOME=. Porém, é possível que outras aplicações utilizem &amp;NOME= e &amp;DADOS= na URL, e conforme análise acima podemos também confirmar que a URL em sí e T=C&amp; são fixos, o ideal da URL é adicionar na blacklist de um proxy, portanto apenas adicionando T=C&amp; 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&amp;DADOS=PWD&amp;NOME=";http_client_body; sid:100000000;rev:1; )ConclusãoNa 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.