
Quase todos nós usamos os serviços de lojas on-line, o que significa que mais cedo ou mais tarde ele corre o risco de se tornar vítima de sniffers JavaScript - um código especial que os cibercriminosos injetam no site para roubar informações de cartões bancários, endereços, logins e senhas de usuários.
Quase 400.000 usuários do site e aplicativo móvel da companhia aérea British Airways, bem como visitantes do site britânico da gigante esportiva FILA e do distribuidor americano de ingressos Ticketmaster, já foram afetados por farejadores.
Viktor Okorokov, analista do Threat Intelligence Group-IB, fala sobre como os sniffers são incorporados no código do site e roubam informações de cobrança, bem como quais CRMs eles atacam.
A Ameaça Fantasma
Descobriu-se que por muito tempo os farejadores de JS permaneceram fora da vista dos analistas de antivírus, e os bancos e sistemas de pagamento não viram uma ameaça séria neles. E completamente em vão. Os especialistas do Grupo-IB
analisaram 2.440 lojas on-line infectadas cujos visitantes - cerca de 1,5 milhão de pessoas por dia - corriam risco de se comprometer. Entre as vítimas estão não apenas usuários, mas também lojas online, sistemas de pagamento e bancos que emitiram cartões comprometidos.
O relatório do Group-IB foi o primeiro estudo do mercado darknet para sniffers, sua infraestrutura e formas de monetizar, trazendo aos seus criadores milhões de dólares. Identificamos 38 famílias de farejadores, das quais apenas 12 eram conhecidas anteriormente pelos pesquisadores.
Vamos nos aprofundar nas quatro famílias de farejadores estudadas durante o estudo.
Família ReactGet
Os sniffers da família ReactGet são usados para roubar dados de cartões bancários em sites de lojas online. Um farejador pode trabalhar com um grande número de sistemas de pagamento diferentes usados no site: um valor de parâmetro corresponde a um sistema de pagamento, e versões individuais do farejador detectado podem ser usadas para roubar credenciais, bem como para roubar dados de cartão bancário de formas de pagamento de vários sistemas de pagamento de uma só vez, como o chamado sniffer universal. Verificou-se que, em alguns casos, os invasores realizam ataques de phishing contra administradores de lojas on-line, a fim de obter acesso ao painel administrativo do site.
A campanha usando essa família de sniffers começou em maio de 2017, sites sob o controle do CMS e as plataformas Magento, Bigcommerce, Shopify foram atacadas.
Como o ReactGet está incorporado no código da loja online
Além da implementação “clássica” de um script por referência, a família de sniffers ReactGet usa uma técnica especial: usando o código JavaScript, ele verifica se o endereço atual em que o usuário está localizado atende a certos critérios. O código malicioso será iniciado somente se o URL atual contiver o
checkout de substring ou o
checkout posterior , uma
página / ,
saída / uma página ,
caixa / uma ,
ckout / uma . Assim, o código sniffer será executado exatamente no momento em que o usuário pagar pelas compras e inserir as informações de pagamento no formulário do site.
Este farejador usa uma técnica não padrão. O pagamento e os dados pessoais da vítima são coletados juntos, codificados usando
base64 e a sequência resultante é usada como parâmetro para enviar uma solicitação ao site do invasor. Na maioria das vezes, o caminho para o portão simula um arquivo JavaScript, por exemplo,
resp.js ,
data.js e assim por diante, mas também
são usados links para arquivos de imagem,
GIFs e
JPGs . A peculiaridade é que o sniffer cria um objeto de imagem com um tamanho de 1 por 1 pixel e usa o link obtido anteriormente como um parâmetro
src da imagem. Ou seja, para o usuário, essa solicitação no tráfego parecerá uma solicitação de imagem regular. Uma técnica semelhante foi usada nos farejadores da família ImageID. Além disso, a técnica de usar uma imagem de 1 por 1 pixel é usada em muitos scripts de análise online legítimos, o que também pode induzir o usuário em erro.
Análise de versão
Uma análise dos domínios ativos usados pelos operadores de farejadores ReactGet revelou muitas versões diferentes da família de farejadores. As versões diferem na presença ou ausência de ofuscação e, além disso, cada sniffer é projetado para um sistema de pagamento específico que processa pagamentos com cartão bancário em lojas online. Depois de classificar o valor do parâmetro correspondente ao número da versão, os especialistas do Grupo-IB obtiveram uma lista completa das variações disponíveis do sniffer e, pelos nomes dos campos de formulário que cada sniffer procura no código da página, determinaram os sistemas de pagamento aos quais o sniffer se destina.
Lista de farejadores e seus sistemas de pagamento correspondentes Detector de senhas
Uma das vantagens dos farejadores de JavaScript que trabalham no lado do cliente do site é a sua versatilidade: o código malicioso incorporado no site pode roubar qualquer tipo de dados, sejam dados de pagamento ou nome de usuário e senha de uma conta de usuário. Os especialistas do grupo-IB descobriram uma amostra de um sniffer pertencente à família ReactGet, projetado para roubar endereços de email e senhas dos usuários do site.
Interseção com ImageID Sniffer
Uma análise de uma das lojas infectadas revelou que seu site foi infectado duas vezes: além do código malicioso da família de farejadores ReactGet, um código de farejador da família ImageID foi detectado. Essa interseção pode indicar que os operadores por trás do uso de ambos os farejadores usam técnicas semelhantes para injetar código malicioso.
Farejador universal
Uma análise de um dos nomes de domínio relacionados à infraestrutura do sniffer ReactGet revelou que o mesmo usuário havia registrado outros três nomes de domínio. Esses três domínios simulavam domínios de sites da vida real e eram usados anteriormente para hospedar sniffers. Ao analisar o código de três sites legítimos, um sniffer desconhecido foi descoberto e outras análises mostraram que esta é uma versão aprimorada do sniffer ReactGet. Todas as versões rastreadas anteriormente dos sniffers dessa família visavam um sistema de pagamento único, ou seja, para cada sistema de pagamento era necessária uma versão especial do sniffer. No entanto, nesse caso, uma versão universal do sniffer foi descoberta, capaz de roubar informações de formulários relacionados a 15 sistemas de pagamento diferentes e módulos de sites de comércio eletrônico para pagamentos online.
Assim, no início do trabalho, o farejador procurou os campos base do formulário que continham as informações pessoais da vítima: nome completo, endereço físico, número de telefone.
Em seguida, o farejador procurou mais de 15 prefixos diferentes correspondentes a diferentes sistemas e módulos de pagamento para pagamentos on-line.
Além disso, os dados pessoais e as informações de pagamento da vítima foram coletados e enviados para o site controlado pelo atacante: nesse caso específico, foram encontradas duas versões do sniffer universal ReactGet, localizadas em dois sites invadidos. No entanto, ambas as versões enviaram os dados roubados para o mesmo site hackeado
zoobashop.com .
Uma análise dos prefixos usados pelo farejador para procurar os campos que contêm as informações de pagamento da vítima nos permitiu determinar que esse padrão do farejador se destinava aos seguintes sistemas de pagamento:
- Authorize.Net
- Verisign
- Primeiros dados
- USAePay
- Stripe
- Paypal
- ANZ eGate
- Braintree
- DataCash (MasterCard)
- Realex pagamentos
- Psigate
- Sistemas de pagamento Heartland
Quais ferramentas são usadas para roubar informações de cobrança?
A primeira ferramenta descoberta durante a análise da infraestrutura do invasor é usada para ofuscar scripts maliciosos responsáveis por roubar cartões bancários. Um script bash foi descoberto em um dos hosts atacantes usando a CLI
javascript-obfuscator para automatizar a ofuscação do código sniffer.
A segunda ferramenta detectada foi projetada para gerar código responsável pelo carregamento do sniffer principal. Essa ferramenta gera código JavaScript que verifica se o usuário está na página de pagamento, pesquisando no endereço atual do usuário as
caixas ,
carrinho e assim por diante. Se o resultado for positivo, o código carrega o sniffer principal do servidor do invasor. Para ocultar atividades maliciosas, todas as linhas, incluindo as linhas de teste para determinar a página de pagamento, bem como um link para o sniffer, são codificadas usando
base64 .
Ataques de phishing
Ao analisar a infraestrutura de rede dos atacantes, verificou-se que muitas vezes um grupo criminoso usa phishing para obter acesso ao painel administrativo da loja on-line de destino. Os invasores registram um domínio visualmente semelhante ao domínio de uma loja e, em seguida, implantam um formulário de login falso no painel de administração do Magento. Se for bem-sucedido, os invasores terão acesso ao painel de administração do CMS Magento, que permite editar os componentes do site e implementar um sniffer para roubar informações do cartão de crédito.
Família G-analytics
Essa família de sniffers é usada para roubar cartões de clientes de lojas online. O primeiro nome de domínio usado pelo grupo foi registrado em abril de 2016, o que pode indicar o início da atividade do grupo em meados de 2016.
Na campanha atual, o grupo usa nomes de domínio que imitam serviços da vida real, como Google Analytics e jQuery, mascarando atividades de sniffer com scripts legítimos e semelhantes a nomes de domínio legítimos. O ataque foi executado em sites executando o CMS Magento.
Como o G-Analytics é incorporado no código da loja online
Uma característica distintiva dessa família é o uso de vários métodos de roubo das informações de pagamento do usuário. Além da implementação clássica do código JavaScript na parte do cliente do site, o grupo criminoso também usou a técnica de incorporação de código na parte do servidor do site, ou seja, scripts PHP que processam a entrada do usuário. Essa técnica é perigosa, pois dificulta a pesquisa de códigos maliciosos por pesquisadores de terceiros. Os especialistas do grupo IB descobriram uma versão de um sniffer incorporado ao código PHP do site, usando o domínio
dittm.org como porta.
Uma versão anterior do sniffer também foi descoberta, que usa o mesmo domínio
dittm.org para coletar dados roubados, mas essa versão já foi projetada para instalação no lado do cliente da loja online.
Mais tarde, o grupo mudou de tática e começou a prestar mais atenção à ocultação de atividades e disfarces maliciosos.
No início de 2017, o grupo começou a usar o domínio
jquery-js.com , que se disfarça de CDN para jQuery: quando
acessa o site de intrusos, o usuário é redirecionado para o site legítimo
jquery.com .
E em meados de 2018, o grupo adotou o nome de domínio
g-analytics.com e começou a mascarar as atividades do sniffer no serviço legítimo do Google Analytics.
Análise de versão
Durante a análise dos domínios usados para armazenar o código sniffer, verificou-se que o site possui um grande número de versões que diferem pela presença de ofuscação, bem como a presença ou ausência de código inacessível adicionado ao arquivo para distrair a atenção e ocultar o código malicioso.
No total, seis versões dos sniffers foram identificadas no
jquery-js.com . Esses sniffers enviam os dados roubados para o endereço localizado no mesmo site que o sniffer:
hxxps: // jquery-js [.] Com / latest / jquery.min.js :
- hxxps: // jquery-js [.] com / jquery.min.js
- hxxps: // jquery-js [.] com / jquery.2.2.4.min.js
- hxxps: // jquery-js [.] com / jquery.1.8.3.min.js
- hxxps: // jquery-js [.] com / jquery.1.6.4.min.js
- hxxps: // jquery-js [.] com / jquery.1.4.4.min.js
- hxxps: // jquery-js [.] com / jquery.1.12.4.min.js
O domínio
g-analytics.com , usado pelo grupo em ataques desde meados de 2018, serve como repositório para um número maior de farejadores. Um total de 16 versões diferentes do sniffer foram descobertas. Nesse caso, a porta para enviar os dados roubados foi disfarçada como um link para uma imagem
GIF :
hxxp: // g-analytics [.] Com / __ utm.gif? V = 1 & _v = j68 & a = 98811130 & t = pageview & _s = 1 & sd = 24 bits & sr = 2560x1440 & vp = 2145x371 & je = 0 & _u = AACAAEAB ~ & jid = 1841704724 & gjid = 877686936 & cid
= 1283183910.1527732071 :
- hxxps: // g-analytics [.] com / libs / 1.0.1 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.10 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.11 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.12 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.13 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.14 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.15 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.16 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.3 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.4 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.5 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.6 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.7 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.8 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.9 / analytics.js
- hxxps: // g-analytics [.] com / libs / analytics.js
, , . , , ,
google-analytics.cm ,
cardz.vc .
cardz.vc Cardsurfs (Flysurfs), AlphaBay , .
analytic.is , , , , Group-IB , Cookie-, , , .
iozoz.com , , 2016 . , . email-
kts241@gmail.com ,
cardz.su cardz.vc , Cardsurfs.
, , G-Analytics Cardsurfs , , .
Illum
Illum — , -, CMS Magento. , , .
, , , , , . , , , 2016 .
Illum -
.
cdn.illum[.]pw/records.php ,
base64 .
, —
records.nstatistics[.]com/records.php .
Willem de Groot, ,
, CSU.
Group-IB , .
, , Linux: , Linux Privilege Escalation Check Script, (Mike Czumak), CVE-2009-1185.
- :
core_config_data CVE-2016-4010,
RCE CMS Magento, -.
, . , , CMS . ,
segapay_standart.js segapay_onpage.js , Sage Pay.
paymentnow[.]tk ,
payment_forminsite.js ,
subjectAltName , CloudFlare. ,
evil.js . , CVE-2016-4010, footer CMS Magento.
request.requestnet[.]tk , ,
paymentnow[.]tk .
. - .
— PayPal, .
CoffeMokko
CoffeMokko, -, 2017 . , Group 1, RiskIQ 2016 . CMS, Magento, OpenCart, WordPress, osCommerce, Shopify.
CoffeMokko -
:
src js . .
, . , , .
, : , , .
/savePayment/index.php /tr/index.php . , , .
base64 , :
- «e» «:»
- «w» «+»
- «o» «%»
- «d» «#»
- «a» «-»
- «7» «^»
- «h» «_»
- «T» «@»
- «0» «/»
- «Y» «*»
base64 , .
, :
, -. TLD. , .
, jQuery (
slickjs[.]org ,
slick.js ), (
sagecdn[.]org , Sage Pay).
, , .
,
/js /src . : . , .
Em algumas amostras detectadas de sniffer dessa família, o código foi ofuscado e continha os dados criptografados necessários para o sniffer funcionar: em particular, o endereço do sniffer gate, uma lista de campos da forma de pagamento e, em alguns casos, um código falso da forma de pagamento. No código dentro da função, os recursos foram criptografados usando o
XOR usando a chave, que foi passada pelo argumento da mesma função.
Após descriptografar a sequência com a chave correspondente, exclusiva para cada amostra, é possível obter uma sequência contendo todas as linhas do código sniffer através do caractere delimitador.
Segundo algoritmo de ofuscação
Em amostras farejadoras posteriores dessa família, um mecanismo de ofuscação diferente foi usado: nesse caso, os dados foram criptografados usando um algoritmo auto-escrito. Uma sequência contendo os dados criptografados necessários para o sniffer funcionar foi passada como argumento para a função de descriptografia.
Usando o console do navegador, você pode descriptografar os dados criptografados e obter uma matriz contendo recursos de sniffer.
Ligação aos primeiros ataques do MageCart
Uma análise de um dos domínios usados pelo grupo como uma porta para coletar os dados roubados revelou que o domínio possui uma infraestrutura de roubo de cartão de crédito idêntica à usada pelo Grupo 1, um dos primeiros grupos
descobertos por especialistas do RiskIQ.
Dois arquivos foram encontrados no host da família de sniffer CoffeMokko:
- mage.js - arquivo que contém o código sniffer do Grupo 1 com o endereço de porta js-cdn.link
- mag.php - Script PHP responsável por coletar dados roubados por sniffer
Conteúdo do arquivo Mage.js Também foi constatado que os domínios mais antigos usados pelo grupo por trás da família de sniffer CoffeMokko foram registrados em 17 de maio de 2017:
- link-js [.] link
- link info-js [.]
- link track-js [.]
- link map-js [.]
- link smart-js [.]
O formato desses nomes de domínio é o mesmo que os nomes de domínio do Grupo 1 usados nos ataques de 2016.
Com base nos fatos descobertos, pode-se supor que exista uma conexão entre os operadores de farejadores CoffeMokko e o grupo criminoso do Grupo 1. Presumivelmente, os operadores do CoffeMokko poderiam emprestar ferramentas e software para roubo de cartões de seus antecessores. No entanto, é mais provável que o grupo criminoso por trás do uso da família de farejadores CoffeMokko seja a mesma pessoa que realizou os ataques como parte das atividades do Grupo 1. Após a publicação do primeiro relatório sobre as atividades do grupo criminoso, todos os seus nomes de domínio foram bloqueados e as ferramentas foram cuidadosamente estudadas e são descritos. O grupo foi forçado a fazer uma pausa, refinar suas ferramentas internas e reescrever o código sniffer para continuar seus ataques e passar despercebido.