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

Полное руководство находится по адресу https://github.com/npapernot/phishing-detection.

Установка

Для начала вы должны сначала клонировать этот репозиторий, выполнив следующую команду из терминала UNIX.

git clone https://github.com/npapernot/phishing-detection

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

Вам также следует установить scikit-learn, который представляет собой набор инструментов для машинного обучения, написанных на Python. Вы можете найти инструкции по установке здесь. На машине UNIX, настроенной с помощью pip, самый простой способ - запустить:

pip install -U scikit-learn

После того, как вы установили scikit-learn, вы можете проверить, правильно ли настроена библиотека, набрав в оболочке Python следующее:

import sklearn

Если команда работает без ошибок, вы готовы обучать детектор фишинга!

Набор данных фишингового веб-сайта

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

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

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

Обучение дерева решений для обнаружения фишинговых сайтов

Вы можете найти код, обучающий дерево решений, в файле solution_tree.py. Чтобы запустить код, просто выполните его в терминале:

python decision_tree.py

Это сначала обучит дерево решений на 2000 веб-сайтах, а затем с помощью обученной модели предскажет, используются ли 456 веб-сайтов для фишинга или нет (эти веб-сайты не анализировались во время обучения). Модель должна давать правильные прогнозы примерно на 90,5%, то есть точность модели на данных тестирования должна составлять 90,5%. Вот дамп вывода, сделанного скриптом.

Tutorial: Training a decision tree to detect phishing websites
Training data loaded.
Decision tree classifier created.
Beginning model training.
Model training completed.
Predictions on testing data computed.
The accuracy of your decision tree on testing data is: 0.906129210381

Чтобы понять, как это было сделано, вы можете прочитать построчные комментарии в файле solution_tree.py.

Что дальше?

Вы можете попробовать повысить точность этого простого классификатора, изменив некоторые значения параметров по умолчанию для модели. Это делается путем изменения этой строки файла solution_tree.py. Чтобы узнать больше о параметрах, которые вы можете определить при вызове DecisionTreeClassifier (), ознакомьтесь с документацией scikit-learn.

Вы также можете попробовать разные модели, такие как Машины опорных векторов или Нейронные сети.