Skimming da Magecart ataca usuários de sites de reservas em cadeias de hotéis

Nós descobrimos uma série de incidentes em que o Magecart, um ataque de roubo de cartão de crédito, foi utilizado para acessar sites de reservas em diversas cadeias de hotéis renomados, segunda vez em que vimos um agente de ameaças de Magecart atingir diretamente os provedores de serviços de comércio eletrônico, ao invés de procurar lojas individuais ou supply chains de terceiros. Em maio, descobrimos um novo grupo que usa Magecart chamado “Mirrorthief“, que comprometia um provedor de serviços de comércio eletrônico usado por universidades americanas e canadenses.

No início de setembro, encontramos dois sites de hotéis (de cadeias de hotéis diferentes) que estavam sofrendo com code injections de JavaScript para carregar um script remoto em sua página de pagamento desde 9 de agosto. Ao verificarmos o link do script, este baixou um código JavaScript normal. Entretanto, percebemos que este mesmo link também pode baixar um script diferente quando o solicitamos em dispositivos móveis, como telefones Android ou iOS. O script baixado para dispositivos móveis é um skimmer de cartão de crédito que pode roubar as informações inseridas na página de reserva do hotel e enviá-las para um servidor remoto.

Nós constatamos que os dois sites de hotéis afetados foram desenvolvidos pela Roomleader, uma empresa espanhola que auxilia os hotéis a criarem seus sites de reservas online. O código malicioso não foi injetado diretamente no site, mas sim, num script de módulo da Roomleader conhecido como “viewedHotels” que foi fornecido aos seus clientes e, posteriormente, utilizados para dois sites de duas diferentes cadeias de hotel. Apesar do número aparentemente pequeno de sites afetados, ainda consideramos o ataque significativo, já que uma das marcas possui 107 hotéis em 14 países, enquanto a outra possui 73 hotéis em 14 países. Salientamos que houve contato com a Roomleader sobre esse problema.

 

O script injetado no site de reservas do hotel

Figura 1. Cadeia de infecção do ataque de skimming Magecart nos sites de reservas de hotéis online

Como mencionado, a injeção foi realizada em uma biblioteca JavaScript do módulo “viewedHotels” do Roomleader, localizada em hxxps://[hotel website]/modulos/viewedHotels/templates/public/js/history_setter[.]js. Essa biblioteca é usada para salvar as informações do hotel visualizadas nos cookies do navegador do visitante. O invasor injetou o código malicioso no meio do script original.

O código injetado primeiro verifica se um elemento HTML que contém o ID “customerBookingForm” está presente na página da web para garantir que ele esteja sendo executado na página de reserva do hotel. Se o código injetado não estiver em execução na página, ele entrará no modo de suspensão por um segundo e verificará repetidamente a partir de então. Contudo, se o código detectar a página de reserva, ele verificará se o depurador do navegador está fechado e carregará outro JavaScript a partir da URL hxxps://googletrackmanager[.]com/gtm[.]js – é onde o código do skimmer está localizado. Vale ressaltar que o estilo do URL é para emular o URL legítimo usado pelo Google Tag Manager.

Figura 2. O script injetado (destacado) na biblioteca JavaScript usada pelos sites de hotéis

 

Análise do skimmer do cartão de crédito

Quando nos conectamos pela primeira vez ao URL do skimmer, este retornou o código JavaScript normal copiado do projeto GitHub detect-mobile-browser. Entretanto, suspeitamos que não era o payload real, porque o código não é realmente usado pelos sites afetados.

Após testes adicionais do URL, notamos que ele baixou um script diferente quando fizemos uma solicitação usando um Agente do Usuário HTTP de um dispositivo móvel. Esse script acabou sendo um skimmer de cartão de crédito. Embora tenhamos encontrado o skimmer funcionando tanto em PC quanto em navegadores móveis, parece que o invasor segmentou apenas usuários móveis. Isso é mais provável porque o agente de ameaças por trás dele tem o intuito de evitar a detecção de software de segurança baseado em PC. O skimmer não é novo – vimos casos em que foi usado por outros grupos. Possivelmente, se trata de um skimmer geral que é compartilhado através de fóruns do submundo da web.

Figura 3. Os diferentes scripts baixados da URL do skimmer para desktop e celular

O skimmer de cartão de crédito foi projetado para roubar dados das formas de pagamento. Ele vincula sua função aos eventos JavaScript “enviar” e “clicar”, que geralmente são acionados quando as pessoas enviam um pagamento ou uma reserva. Quando o evento-alvo é acionado, o skimmer verifica se o depurador do navegador está fechado. Em seguida, copia o nome e o valor de qualquer elemento HTML de “entrada” ou “seleção” na página de reserva. Nesse caso, as informações coletadas incluem nomes, endereços de e-mail, números de telefone, preferências de quarto de hotel e detalhes do cartão de crédito.

As informações copiadas são criptografadas usando RC4 com uma chave codificada: “F8C5Pe4Q”. Em seguida, o skimmer gera uma sequência aleatória para codificar os dados criptografados novamente usando o XOR. Os dados são enviados via HTTP POST para a URL remota https://googletrackmanager[.]com/gtm.php?id= que usa a sequência aleatória gerada anexada no final. Após o recebimento das informações, o agente pode descriptografar os dados e coletar as informações do cartão de crédito.

Figura 4. Código do skimmer de cartão de crédito para roubar informações da página de reserva do hotel

 

O Magecart substitui a página de reserva original por uma falsa

Embora o skimmer em si não seja exclusivo, descobrimos que ele remove o formulário original do cartão de crédito na página de reserva e injeta outro preparado pelo agente da ameaça. Temos duas teorias possíveis para isso. A primeira é que alguns hotéis não solicitam aos clientes que façam pagamentos on-line, mas pedem que paguem no hotel na chegada. Nesses casos, o formulário de reserva solicitará informações do cartão de crédito, mas sem o número CVC. Para garantir que todas as informações do cartão de crédito sejam capturadas, o invasor substitui o formulário original por um que contenha a coluna do número CVC.

O segundo motivo possível é que, às vezes, a página de reserva hospeda o formulário do cartão de crédito em um domínio diferente usando um elemento iframe HTML para torná-lo mais seguro. Nesse cenário, um skimmer JavaScript regular não poderá copiar os dados dentro do iframe seguro. Portanto, o atacante remove o iframe do formulário de cartão de crédito seguro e injeta seu próprio formulário para que o skimmer possa copiar as informações.

Figura 5. O formulário original do cartão de crédito (acima) do site do hotel e o formulário injetado (abaixo) do skimmer

Figura 6. O script skimmer usado para remover o formulário original da página de reserva e substituí-lo pelo falso

Para torná-lo mais legítimo, o agente também preparou formulários de cartão de crédito em oito idiomas: inglês, espanhol, italiano, francês, alemão, português, russo e holandês. Esses idiomas correspondem às línguas suportadas pelos sites de hotéis segmentados. O skimmer verificará qual deles o cliente está usando no site e injetará o formulário de cartão de crédito falso correspondente na página.

Figura 7. Os oito idiomas do formulário de cartão de crédito falso dentro do skimmer

Não conseguimos encontrar conexões fortes com os grupos Magecart anteriores com base na infraestrutura de rede ou no código malicioso usado neste ataque. No entanto, é possível que o agente malicioso por trás dessa campanha também tenha sido envolvido em outras anteriores.

 

Conclusão

Incidentes recentes envolvendo skimmers de cartões de crédito como o Magecart enfatizam a necessidade das empresas protegerem seus sites de possíveis comprometimentos implementando as práticas recomendadas de segurança, que incluem a atualização regular do software para as versões mais recentes e a segregação de redes para garantir que o mínimo de dados possível dos clientes seja exposto.

Além disso, os usuários podem considerar o uso de sistemas de pagamento como o Apple Pay e o Google Pay, que oferecem métodos de autenticação adicionais – minimizando a chance dos invasores poderem usar o cartão de crédito, mesmo que consigam coletar os detalhes do cartão.

As seguintes soluções da Trend Micro protegem usuários e empresas bloqueando scripts e impedindo o acesso aos domínios maliciosos:

 

Indicadores de compromisso (IoCs)

Com um agradecimento especial a nossos colegas do abuse.ch e à Shadowserver Foundation por ajudar a derrubar o domínio Magecart.