Malware e roubo de cartões em e-commerce.
Em mais uma das pesquisas da Cipher atrás de novos tipos de ataques sofisticados, encontramos um script que apesar roubar informações pessoais (como nome, sobrenome, endereço, dados bancários, etc) se mostrou bem interessante em termos de inteligência digital.
O script foi desenvolvido em Javascript e estava totalmente ofuscado, para dificultar a nossa análise. O código malicioso estava em uma aplicação que foi desenvolvida em Magento e só funcionava na página em que o usuário utilizava os seus dados bancários.
Ler esse código ofuscado é muito trabalhoso e até desnecessário, então a primeira coisa que iremos fazer é desofuscar o código para que tenhamos uma leitura mais amigável e organizada. Você pode utilizar alguma ferramenta online para isso ou até mesmo o Google Chrome.
Após algumas horas lendo, entendendo e reescrevendo o código, chegamos a uma conclusão bem interessante: “O script não pode ser modificado”. Sim, isso mesmo que você leu, o script funciona somente com uma determinada quantidade de caracteres, pois ele lê o seu próprio código-fonte e, converte em string e através de um expressão regular, irá gerar um array de números de acordo com a quantidade de caracteres encontrados. Isso é um ponto bem interessante, pois a primeira coisa que um analista de segurança irá fazer é, “desmontar” o código para começar a entendê-lo e é exatamente aí que começam os desafios.
Toda essa mágica, acontece com a seguinte expressão regular na seguinte linha:
var params = FN2Z22[O9OQL5[1]]()[O9OQL5[0]](/\(| | |\n|\r|;|}|{|\)/)[O9OQL5[2]](“”)[O9OQL5[3]][O9OQL5[1]]()[O9OQL5[0]](“”);
Quando o executamos o código atual, recebemos como valor da variável MDGIHJ, o array [“3”, “8”, “9”, “3”], mas quando alteramos o código-fonte e colocamos por exemplo um console.log(O9OQL5), o array retornado agora é [“3”, “9”, “1”, “0”]. Com essa alteração, o script simplesmente não irá funcionar e você não irá conseguir saber ao certo o que está acontecendo.
Depois de entender isso, a primeira pergunta que vem a cabeça é: como iremos ler o código sem modificá-lo? Simples, iremos debugar o código durante sua execução e ver os valores das variáveis. Utilizaremos o Google Chrome para realizar tal tarefa.
Ao executar o código localmente analisando o seu real comportamento, colocamos um endpoint na variável O9OQL5, pois é onde fica a saída que desejamos visualizar, mas como já sabemos, isso só irá funcionar a variável MDGIHJ estiver com seu valor correto ([“3”, “8”,”9”, “3”]). Com isso, conseguimos ver que as requisições são enviadas para https://congolo.pro .
Indo um pouco mais além, verificamos com o whois mais detalhes sobre esse domínio.
Aqui vemos que o proprietário é o https://www.domains4bitcoins.com , o que complica um pouco em continuar com a nossa análise, já que o domains4bitcoins é um serviço que trabalha com hospedagens anônimas.
Com isso vemos como uma simples linha de código desenvolvida em Javascript pode comprometer os usuários de uma aplicação. Segundo nossas pesquisas, esse código encontrado está circulando a poucos meses, mas a quantidade de dados sensíveis coletados é bem alta.
Por: Lucas Davis – Red-Team Consultant, Cipher.
0 Comments