Главная » Хабрахабр » Деньги на ветер: почему ваш антифишинг не детектирует фишинговые сайты и как Data Science заставит его работать?

Деньги на ветер: почему ваш антифишинг не детектирует фишинговые сайты и как Data Science заставит его работать?

image

За примерами далеко ходить не нужно. В последнее время фишинг является наиболее простым и популярным у киберпреступников способом кражи денег или информации. Средний ущерб от такой атаки — от 1,5 млн рублей, не говоря уже про репутационный ущерб, который понесли компании. В прошлом году ведущие российские предприятия столкнулись с беспрецедентной по масштабу атакой — злоумышленники массово регистрировали фейковые ресурсы, точные копии сайтов производителей удобрений и нефтехимии, чтобы заключать контракты от их имени. В этой статье мы поговорим о том, как эффективно детектировать фишинговые сайты с помощью анализа ресурсов (изображений CSS, JS и т.д.), а не HTML, и как специалист по Data Science может решить эти задачи.

Павел Слипенчук, архитектор систем машинного обучения, Group-IB

Эпидемия фишинга

По данным Group-IB, ежедневно жертвами только финансового фишинга в России становятся свыше 900 клиентов различных банков, — этот показатель в 3 раза превышает ежедневное количество жертв от вредоносных программ. Ущерб от одной фишинговой атаки на пользователя варьируется от 2000 до 50 000 рублей. Мошенники не просто копируют сайт компании или банка, их логотипы и фирменные цвета, контент, контактные данные, регистрируют похожее доменное имя, они еще активно рекламируют свои ресурсы в соцсетях и поисковиках. Например, пытаются вывести в топы выдачи ссылки на свои фишинговые сайты по запросу «Перевод денег на карту». Чаще всего поддельные сайты создаются именно для того, чтобы украсть деньги при переводе с карты на карту или при мгновенной оплате услуг операторов сотовой связи.

phishing, от fishing — рыбная ловля, выуживание) — вид интернет-мошенничества, цель которого — обманным путем вынудить жертву предоставить мошеннику нужную ему конфиденциальную информацию. Фишинг (англ. Чаще всего похищают пароли доступа к банковскому счету для дальнейшей кражи денег, аккаунты в социальных сетях (для вымогательства денег или рассылки спама от лица жертвы), подписывают на платные услуги, рассылки или заражают компьютер, делая его звеном в бот-сети.

По способам атак следует различать 2 вида фишинга, ориентированные на пользователей и компании:

  1. Фишинговые сайты, копирующие оригинальный ресурс жертвы (банки, авиакомпании, интернет-магазины, предприятия, госучреждения и т.д.).
  2. Фишинговые рассылки, e-mail, sms, сообщения в соцсетях и т.д.

Атакой на пользователей часто занимаются одиночки, и порог входа в этот сегмент преступного бизнеса такой низкий, что для реализации хватит минимальных «инвестиций» и базовых знаний. Распространению данного типа мошенничества способствуют и phishing kits — программы-конструкторы фишинговых сайтов, которые можно свободно купить в Даркнете на хакерских форумах.

Их проводят технически более подкованные злоумышленники. Атаки на компании или банки устроены иначе. В большинстве случаев фишинг сводится к отправке письма с прикрепленным зараженным файлом. Как правило, в качестве жертв выбирают крупные промышленные предприятия, онлайн-магазины, авиакомпании, а чаще всего банки. Чтобы подобная атака была успешной, в «штате» группировки необходимо иметь и специалистов по написанию вредоносного кода, и программистов для автоматизации своей деятельности, и людей, способных провести первичную разведку по жертве и найти у нее слабые места.

Суммы ущерба всегда небольшие (в десятки раз меньше, чем от банковских троянов), но количество жертв, которые они заманивают на свои сайты, ежедневно исчисляется тысячами. В России, по нашим оценкам, действует 15 преступных групп, занимающихся фишингом, направленным на финансовые учреждения. Около 10–15% посетителей финансовых фишинговых сайтов сами вводят свои данные.

Например, некоторые успешные фишинговые страницы были доступны менее суток, но смогли нанести ущерб на суммы от 1 000 000 рублей. При появлении фишинговой страницы счет идет на часы, а иногда даже на минуты, поскольку пользователи несут серьезный финансовый, а в случае компаний — еще и репутационный ущерб.

Ресурсы, «подозреваемые» в фишинге, можно легко детектировать с помощью различных технических средств: honeypots, краулеров и т.д., однако убедиться в том, что они действительно фишинговые, и определить атакуемый бренд проблематично. В этой статье мы подробно остановимся на первом типе фишинга: фишинговых сайтах. Разберем, как решить эту задачу.

Ловля фишей

Если бренд не следит за своей репутацией, он становится легкой мишенью. Необходимо перехватывать инициативу у преступников сразу после регистрации их фальшивых сайтов. На практике поиск фишинговой страницы делится на 4 этапа:

  1. Формирование множества подозрительных адресов (URL) для проверки фишинга (краулер, honeypots и т.д.).
  2. Формирование множества фишинговых адресов.
  3. Классификация уже задетектированных фишинговых адресов по направлению деятельности и атакуемой технологии, например «ДБО:: Сбербанк Онлайн» или «ДБО:: Альфа-Банк».
  4. Поиск страницы-донора.

Выполнение пунктов 2 и 3 ложится на плечи специалистов по Data Science.

В частности: После этого уже можно предпринимать активные действия для блокировки фишинговой страницы.

  • вносить URL в черные списки продуктов Group-IB и продуктов наших партнеров;
  • автоматически или вручную отправлять письма владельцу доменной зоны с просьбой удалить фишинговый URL;
  • отправлять письма службе безопасности атакуемого бренда;
  • и т.д.

image

Методы, основанные на анализе HTML

Классическим решением задач по проверке подозрительных адресов на фишинг и автоматическое определение пострадавшего бренда являются различные способы разбора HTML исходных страниц. Самое простое — это написание регулярных выражений. Забавно, но этот прием до сих пор работает. И поныне большинство начинающих фишеров просто копируют контент с сайта оригинала.

Но и в данном случае нужно исследовать HTML-страницу. Также весьма эффективные системы для антифишинга могут разрабатывать исследователи phishing kits. Некоторые phishing kits могут быть неизвестны исследователю. Кроме того, эти решения не универсальные — для их разработки необходима база самих «китов». И, разумеется, разбор каждого нового «кита» — это достаточно трудоемкий и дорогой процесс.

Причем во многих случаях достаточно просто поменять каркас HTML-страницы. Все системы обнаружения фишинга, основанные на анализе HTML-страницы, перестают работать после обфускации HTML.

По данным Group-IB, в настоящий момент таких фишинговых сайтов не более 10% от общего количества, однако пропуск даже одного может дорого обойтись жертве.

Таким образом, фишеру для обхода блокировки достаточно просто менять каркас HTML, реже — обфусцировать HTML-страницу (запутывая разметку и/или подгружая контент через JS).

Постановка задачи. Метод, основанный на ресурсах

Гораздо более эффективны и универсальны для обнаружения фишинговых страниц методы, основанные на анализе используемых ресурсов. Ресурс — это любой файл, подгружаемый при рендеринге web-страницы (все изображения, каскадные таблицы стилей (CSS), JS-файлы, шрифты и т.д.).

В этом случае можно построить двудольный граф, где одни вершины будут адресами, подозрительными на фишинг, а другие — ресурсами, связанными с ними.

image

Построив такой алгоритм, мы сможем разложить на кластеры любой двудольный граф. Возникает задача кластеризации — найти совокупность таких ресурсов, которым принадлежат достаточно большое количество различных URL.

Тогда для проверки данной гипотезы каждый такой кластер можно отправить на ручную проверку в CERT (Центр реагирования на инциденты информационной безопасности). Гипотеза заключается в том, что, основываясь на реальных данных, с достаточно большой долей вероятности можно сказать, что кластер содержит совокупность URL, которые принадлежат одному бренду и генерируются одним phishing kits. Всем утвержденным кластерам аналитик также присваивал бы атакуемый бренд. Аналитик в свою очередь проставлял бы статус кластеру: +1 («утвержденный») или –1 (отвергнутый»). В среднем на одну утвержденную группу приходится 152 фишинговых адреса (данные на июнь 2018 г.), а иногда даже попадаются кластеры по 500–1000 адресов! На этом «ручная работа» заканчивается — остальной процесс автоматизирован. Аналитик тратит около 1 минуты на утверждение или опровержение кластера.

В итоге мы получаем новые кластеры. Далее все отвергнутые кластеры удаляют из системы, а все их адреса и ресурсы через некоторое время вновь подают на вход алгоритма кластеризации. И опять отправляем их на проверку, и т.д.

Таким образом, для каждого вновь поступившего адреса система должна делать следующее:

  1. Извлекать множество всех ресурсов для сайта.
  2. Проверять на принадлежность хотя бы одному ранее утвержденному кластеру.
  3. Если URL принадлежит какому-либо кластеру, автоматически извлечь название бренда и выполнить действие для него (уведомить заказчика, удалить ресурс и т.д.).
  4. Если по ресурсам нельзя проставить ни один кластер, добавить адрес и ресурсы в двудольный граф. В дальнейшем данный URL и ресурсы будут участвовать в образовании новых кластеров.

image

Простой алгоритм кластеризации по ресурсам

Один из важнейших нюансов, который должен учитывать специалист Data Science в ИБ, — тот факт, что его противником является человек. По этой причине условия и данные для анализа очень быстро меняются! Решение, замечательно устраняющее проблему сейчас, через 2–3 месяца может перестать работать в принципе. Поэтому важно создавать либо универсальные (топорные) механизмы, если это возможно, либо максимально гибкие системы, которые можно быстро доработать. Специалист по Data Science в ИБ не сможет решить задачу раз и навсегда.

Каждый ресурс можно представить как булевый признак. Стандартные методы кластеризации не работают из-за большого количества признаков. Проклятье размерности не позволяет даже загрузить данные в память, не то что построить какие-то алгоритмы кластеризации. Однако на практике мы получаем от 5000 адресов сайтов ежедневно, и каждый из них в среднем содержит 17,2 ресурса (данные на июнь 2018 г.).

В данном случае нужно было создать еще один признак — принадлежность к тому или иному бренду. Другая идея — попытаться разбить на кластеры с помощью различных алгоритмов коллаборативной фильтрации. Метод дал положительные результаты, однако обладал двумя недостатками: Задача будет сводиться к тому, что система должна спрогнозировать наличие или отсутствие этого признака для остальных URL.

  1. для каждого бренда нужно было создавать свой признак для коллаборативной фильтрации;
  2. нужна была обучающая выборка.

В последнее время все больше компаний хотят защитить свой бренд в интернете и просят автоматизировать детектирование фишинговых сайтов. Каждый новый бренд, взятый под защиту, добавлял бы новый признак. Да и создавать обучающую выборку для каждого нового бренда — это дополнительный ручной труд и время.

И нашли очень простой и эффективный способ.
Для начала построим пары ресурсов по следующему алгоритму: Мы начали искать решение этой задачи.

  1. Возьмем всевозможные ресурсы (обозначим их как а), для которых не менее N1 адресов, обозначим данное отношение как #(a) ≥ N1.
  2. Построим всевозможные пары ресурсов (a1, a2) и выберем только те, для которых будет не менее N2 адресов, т.е. #(a1, a2) ≥ N2.

Затем мы аналогичным образом рассматриваем пары, состоящие из пар, полученных в предыдущем пункте. В итоге получаем четверки: (a1, a2) + (a3, a4) → (a1, a2, a3, a4). При этом, если хотя бы один элемент присутствует в одной из пар, вместо четверок мы получаем тройки: (a1, a2) + (a2, a3) → (a1, a2, a3). Из полученного множества оставим только те четверки и тройки, которым соответствует не менее N3 адресов. И так далее…

image

Ограничим количество шагов до U. Можно получать множества ресурсов произвольной длины. Тогда N1, N2… NU — это параметры системы.

В общем случае мы имеем CL2 различных пар, где L — количество ресурсов, т.е. Величины N1, N2… NU — параметры алгоритма, они задаются вручную. Затем из каждой пары создается четверка. сложность для построения пар будет  O(L2). Однако на практике таких пар значительно меньше, и при большом количестве адресов эмпирически была получена зависимость O(L2log L). И в теории мы, возможно, получим O(L4). При этом последующие шаги (превращения двоек в четверки, четверок в восьмерки и т.д.) пренебрежимо малы.

Все URL, которые уже можно отнести к какому-либо ранее утвержденному кластеру, не попадают в выборку для кластеризации. Следует заметить, что L — это количество некластеризированных URL.

Например, если существует (a1, a2, a3, a4, a5), удовлетворяющая границам Ni, следует убрать из множества кластеров (a1, a2, a3) и (a4, a5). На выходе можно создать множество кластеров, состоящих из максимально больших по размерам множеств ресурсов.

Поэтому для любых ресурсов a1… aN справедливо отношение: Затем каждый полученный кластер отправляется на ручную проверку, где аналитик CERT присваивает ему статус: +1 («утвержден») или –1 («отвергнут»), а также указывает, какими являются URL, попадающие в кластер, — фишинговыми или легитимными сайтами.
При добавлении нового ресурса количество URL может уменьшиться, остаться тем же, но никогда не увеличиться.

#(a1) ≥ #(a1, a2) ≥ #(a1, a2, a3) ≥ … ≥ #(a1, a2, …, aN).

Следовательно, разумно задавать параметры:

N1 ≥ N2 ≥ N3 ≥ … ≥ NU.

На рис. На выходе мы выдаем всевозможные группы для проверки. 1 в самом начале статьи приведены реальные кластеры, для которых все ресурсы — изображения.

Использование алгоритма на практике

Заметим, что теперь полностью отпадает необходимость исследовать phishing kits! Система автоматически кластеризует и найдет нужную фишинговую страницу.

Для каждого кластера выгружается список ресурсов, создается множество скринов. Ежедневно система получает от 5000 фишинговых страниц и конструирует всего от 3 до 25 новых кластеров в сутки. Данный кластер отправляется аналитику CERT на подтверждение или опровержение.

Однако уже через 3 месяца система держала точность от 50 до 85%. При запуске точность алгоритма была невысокой — всего 5%. Главное, чтобы аналитики успевали просмотреть кластеры. В действительности точность не имеет значения! Если не более 200 в сутки, это задача, посильная для одного человека. Поэтому, если система, например, генерирует около 10 000 кластеров в сутки и у вас только один аналитик, придется менять параметры системы. Как показывает практика, на визуальный анализ в среднем требуется около 1 минуты.

Оставшиеся 18% — это либо уникальные случаи фишинга (поэтому их нельзя сгруппировать), либо фишинг, у которого малое количество ресурсов (не по чему группировать), либо фишинговые страницы, которые вышли за границы параметров N1, N2… NU. Полнота системы — около 82%.

Мы делаем это каждые 15 минут. Важный момент: как часто запускать новую кластеризацию на свежих, непроставленных URL? Это значит, что после появления фишингового URL есть лаг во времени в 30 минут. При этом в зависимости от количества данных само время кластеризации занимает 10–15 минут.

Ниже приведены 2 скриншота из GUI-системы: сигнатуры для обнаружения фишинга соцсети «ВКонтакте» и «Bank Of America».

image

image

Когда алгоритм не работает

Как уже было сказано выше, алгоритм не работает в принципе, если не достигаются границы, заданные параметрами N1, N2, N3… NU, или если количество ресурсов слишком мало, чтобы образовать необходимый кластер.

Например, в каждом изображении можно поменять один пиксель, а для подгружаемых JS- и CSS-библиотек использовать обфускацию. Фишер может обойти алгоритм, создавая для каждого фишингового сайта уникальные ресурсы. Однако данные вопросы выходят за рамки этой статьи. В данном случае необходимо разработать алгоритм сравнимого хеша (перцептивного хеша) для каждого типа подгружаемых документов.

Соединяем все вместе

Соединяем наш модуль с классическими HTML-регулярками, данными, полученными от Threat Intelligence (система киберразведки), и получаем полноту в 99,4%. Разумеется, это полнота на данных, которые уже предварительно классифицированы Threat Intelligence как подозрительные на фишинг.

Какова полнота на всех возможных данных, не знает никто, так как охватить весь Даркнет невозможно в принципе, однако, согласно отчетам Gartner, IDC и Forrester, по своим возможностям Group-IB входит в число ведущих международных поставщиков Threat Intelligence-решений.

В день их получается примерно 25–50. А что делать с непроклассифицированными фишинговыми страницами? В целом в любой достаточно сложной для Data Sciense задаче в сфере ИБ всегда есть ручной труд, а любые утверждения о 100-процентной автоматизации — это маркетинговый вымысел. Их вполне можно проверить ручным способом. Задача специалиста Data Sciense уменьшить ручной труд на 2–3 порядка, сделав работу аналитика максимально эффективной.

Статья опубликована на JETINFO


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Спустя пять лет вышла очередная версия DOSBox под номером 0.74-2

К сожалению, пока внимание толп людей было приковано к анонсам таких гигантов индустрии как Apple, релиз одной некоммерческой, но довольно популярной игровой ретро-платформы, прошел почти незаметно. Вышел DOSBox 0.74-2. Это позволяет играть в такие игры во множестве операционных систем, не ...

Данные пользователей Windows на ПК с поддержкой сенсорного ввода пишутся в отдельный файл

Это сделано для удобства пользователя и ускорения процесса его работы. Большое количество моделей ноутбуков и all-in-one рабочих станций в наше время имеют поддержку сенсорного ввода. Но, как оказалось, у компьютерных систем с активированной поддержкой тач-ввода есть одна малоизвестная функция, которая ...