Визуальное обнаружение мошеннических сайтов

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

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

Обычно они основаны на списках известных фишинговых сайтов. Например, Firefox Phishing and Malware Protection работает, проверяя сайты, которые вы посещаете, по спискам зарегистрированных фишинговых, нежелательных программ и вредоносных сайтов.

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



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

«🔔 Хотите больше подобных статей? Подпишите здесь."

Как определить фишинговый сайт

URL

Во-первых, мы должны проверить действительность URL-адреса. Преступники стараются сделать их максимально похожими на настоящий адрес. Чтобы обмануть пользователей, заставив их думать, что они посетили официальный веб-сайт, мошенники вносят небольшие изменения в орфографию. Например, они могут использовать другой домен TLD или использовать визуальное сходство символов, то есть букву O и цифру 0.

Вредоносный URL-адрес также может содержать лишние символы и символы. Взломанные сайты попадают в отдельную категорию. Иногда злоумышленники используют взломанные сайты и заменяют исходный контент фишинговыми скриптами. Тогда доменное имя не будет связано с целевым брендом. Однако название целевого бренда может появиться ниже по URL-адресу.

Содержание

Несмотря на схожесть брендов, посещение фишингового веб-сайта в целом будет некачественным. Орфографические ошибки, грамматические ошибки и изображения с низким разрешением могут указывать на то, что вы попали на поддельный сайт. Но иногда различия могут быть более тонкими. Например, цвета вашего логотипа или других элементов могут немного отличаться от исходных цветов. Интересно, что на большинстве мошеннических сайтов не реализована информация о файлах cookie;)

Ниже приведены некоторые из собранных мною мошеннических сайтов.

Набор данных

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

Поэтому я написал сценарий, который берет данные из таблицы и записывает их во временные файлы. Я поместил сценарий в CRON, чтобы он запускался каждые 5 минут.

Будьте осторожны, если вы посещаете какой-либо из сайтов в этом списке. Мы надеемся, что большинство из них будут недоступны к моменту публикации этой статьи, но самый безопасный вариант - использовать временный браузер или виртуальную машину.

Я объединяю все собранные сайты и отфильтровываю те, которые нацелены на трех крупных игроков (Facebook, WhatsApp и PayPal).

Примечание. Позже я также использовал случайные сайты из моей истории просмотров и закладок в качестве безопасных сайтов для сравнения.

Скриншоты

Мы сделаем снимок экрана каждого URL-адреса из нашего набора данных. Для этой задачи мы воспользуемся API, предоставляемым Browshot. Они упрощают создание снимков экрана веб-сайтов на любом устройстве, в разрешении и из разных мест. И мы не подвергаем риску наши компьютеры :)

Поскольку нам нужно делать снимки экрана для нескольких сайтов, наиболее полезной функцией является создание пакетных запросов для одновременного создания снимков нескольких URL-адресов.

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

Colorpallete

Интересное направление для изучения - это посмотреть, можно ли использовать доминирующие цвета на страницах для обнаружения мошенничества.

Мы извлечем палитру из 3-х доминирующих цветов и закодируем ее в десятичном формате.

Каждый цвет будет закодирован в десятичной форме для облегчения обработки.

Распознавание текста

Чтобы получить дополнительную информацию о содержании каждого тестового сайта, мы применим распознавание текста по изображениям. Python-tesseract - это инструмент оптического распознавания символов (OCR) для Python. Он распознает и «прочитает» текст, встроенный в снимки экрана.

Из полученного текста мы сможем извлечь дополнительные функции.

Готовый набор данных со скриншотами можно загрузить с моего Github: https://github.com/fischerbach/fischerbach.github.io/tree/master/phishing_detection/dataset

Блокнот Google Colab с кодом: https://colab.research.google.com/drive/1CMEcYaE7BBH00g4P9p16n8JZhp0QC5D-?usp=sharing

Модели обучения и оценка

Наконец, мы реализуем несколько алгоритмов машинного обучения на Python с помощью Scikit-learn. Мы будем использовать наш набор данных для обучающих классификаторов, чтобы различать мошеннические веб-сайты.



Этот шаг довольно общий. Мы также нормализуем и разделим набор данных на обучение и тестирование.

Наконец, мы сравним разные алгоритмы, выбрав наиболее эффективный.

Как видите, несмотря на небольшой объем информации, используемой для обучения, все модели работают достойно, достигая точности более 90% как для обучающих, так и для тестовых наборов данных.

Контрольная работа

Мы также можем протестировать обнаружение на примерах реальных сайтов, которые не участвовали в эксперименте.

Как видите, наш движок работает неплохо.

Выводы

Подход, использованный в этой статье, многообещающий. Используя скриншоты сайтов, мы обошли сложность парсинга запутанного кода сайтов.

Механизм обнаружения фишинга может быть расширен за счет расширенного распознавания изображений и обнаружения объектов. Кроме того, с помощью OCR может быть введена обработка естественного языка.

Готовые антифишинговые движки можно использовать для создания API-интерфейсов (например, с использованием Flask или FastAPI) и расширений браузера.

использованная литература

Https://www.metacompliance.com/blog/5-ways-to-identify-a-phishing-website/

Https://openphish.com/

Https://browshot.com/?ref=medium

Https://pypi.org/project/pytesseract/

Https://pypi.org/project/colorgram.py/