Привет ! Я Пленг. В настоящее время я учусь в 12-м классе школы Триам Удом Сукса. Этот проект «Phish-off» — один из последних проектов AI BUIDERS 2023, а также мой первый опыт обучения ИИ.

И этот блог будет блогом, в котором будут записаны все мои процедуры фиш-оффа, начиная с самого первого шага, подробно от рассмотрения темы до развертывания прототипа, включая все проблемы, с которыми я столкнулся, и то, как я с ними справился. (+ а также как и зачем был основан Phish-Off 2.0)

0. О фиш-оффе

В настоящее время фишинг является одной из самых серьезных киберугроз мира, которая получает все большее распространение. Более того, в Таиланде, по данным The Nation Thailand, число случаев фишинга, таких как мошеннические звонки и текстовые сообщения, резко возросло до 165 процентов только за последний год. Фишинг маскирует и окружает нашу жизнь в различных формах, например, с помощью фишинговых веб-сайтов, мошеннических электронных писем, мошеннических QR-кодов и мошеннических текстовых сообщений. Фишинговые ссылки пытаются украсть конфиденциальную информацию, такую ​​как пароли или номера кредитных карт, что может привести к серьезным проблемам для отдельных лиц и организаций от заражения вредоносным ПО, финансовых потерь до юридических последствий. Кроме того, нельзя отрицать, что трудно определить, является ли ссылка безопасной или нет, поскольку фишинговые ссылки обманывают нас разными способами. В том числе имитируя законные или надежные веб-сайты, срочность или даже притворяясь нашими знакомыми. Таким образом, проект направлен на обнаружение фишинговых URL-адресов и QR-кодов, чтобы предотвратить доступ пользователей к небезопасным веб-сайтам с помощью машинного обучения для обнаружения и анализа каждого URL-адреса и проверки надежности каждой ссылки.

цель проекта

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

ГЛАВА 1: рождение Phish-Off 1.0

1. Темы

В первую неделю мне поручили подумать о том, с какой темой или проблемой связан мой проект. Мне понадобилось почти 2 недели, чтобы наконец принять решение сделать «Phish-Off». Причина, по которой я решил сделать это, заключается в том, что в настоящее время в Таиланде широко распространено мошенничество, особенно с телефонными номерами и общими URL-адресами. Таким образом, я подумал, что было бы очень полезно иметь ИИ, который мог бы анализировать и обнаруживать безопасные и небезопасные URL-адреса :)

2. Сбор данных

Переходя к самому первому этапу сбора данных, к счастью, в kaggles есть бесплатная база данных по адресу https://www.kaggle.com/datasets/sid321axn/malicious-urls-dataset. Впоследствии я прокрутил список наборов данных и нашел еще один из https://www.section.io/engineering-education/detecting-malicious-url-using-machine-learning/#loading-dataset. Итак, я использовал их оба для большей точности :)

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

Все данные суммируются в более чем миллион URL-адресов.

3. Извлечение данных

URL-адреса состоят из разных компонентов, и анализ каждой части может помочь определить, является ли URL-адрес безопасным или небезопасным для проекта Phish-Off. Первый компонент — это протокол, обычно «http://» или «https://», где «https://» безопаснее из-за зашифрованной связи. Следующая часть — это доменное имя, которое должно соответствовать законному веб-сайту, который вы ожидаете; любые вариации или опечатки могут указывать на попытку фишинга. Поддомен, если он есть, также должен быть проверен. Путь указывает конкретную страницу или ресурс, к которому осуществляется доступ, и должен соответствовать структуре веб-сайта. Параметры запроса содержат дополнительную информацию и должны быть проверены на наличие подозрительных или необычных значений. Наконец, следует проверить легитимность домена верхнего уровня (TLD), поскольку некоторые TLD обычно связаны с фишингом или злонамеренными действиями.

Какие функции мы должны включить в рассмотрение того, какие URL-адреса безопасны, а какие нет? Я провел исследование на многих веб-сайтах и ​​придумал эти функции. И большинство из них основаны на https://wisdomml.in/malicious-url-detection-using-machine-learning-in-python/#Feature_engineering.

  • IP-АДРЕС

Обычно злоумышленники используют IP-адрес, чтобы скрыть личность веб-сайта. Таким образом, URL-адреса с IP-адресом, скорее всего, будут небезопасными.

  • НЕПРАВИЛЬНЫЙ URL

Эта функция основана на https://web.archive.org/web/20210620065814/https://who.is/. Мы проверим, есть ли соответствующий домен или IP-адрес веб-сайту или нет.

  • СЧЕТ ТОЧЕК

небезопасные веб-сайты обычно используют более двух поддоменов в URL-адресе, которые обычно разделяются точкой (.).

  • СЧИТАЕТ WWW

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

  • СЧИТАТЬ В

Символ «@» игнорирует все, что предшествует ему. Чем больше @ , тем больше подозрений!

  • СЧИТАТЬ СКОЛЬЗЯ

Больше косых черт приводит к наличию нескольких каталогов, что указывает на подозрительные веб-сайты.

  • СЧИТАТЬ ДВОЙНУЮ ПРОЧЕСТЬ

появление «//» в URL-адресе может показывать приблизительное значение встроенного домена в целом.

  • ПРОВЕРИТЬ НА ПОДОЗРИТЕЛЬНЫЕ СЛОВА

небезопасные URL-адреса в основном включали мир, связанный с деньгами.

  • СОКРАЩЕНИЕ URL-адресов

Эта функция предназначена для проверки того, использует ли URL-адрес службу сокращения или нет.

  • COUNT HTTPS

безопасные URL-адреса обычно используют протоколы HTTPS для пользовательских кредитов и для обеспечения безопасности веб-сайта для транзакций.

  • COUNT HTTP

В большинстве случаев небезопасные веб-сайты имеют более одного HTTP-адреса в своем URL-адресе.

  • СЧЕТ ПРОЦЕНТОВ

Количество % пропорционально количеству пробелов в URL-адресе. Безопасные сайты обычно содержат меньше пробелов (%), в то время как небезопасные веб-сайты обычно содержат больше пробелов.

  • СЧИТАТЬ ВОПРОСИТЕЛЬ

Наличие ? означает, что данные были переданы на сервер. Больше количество ? в URL определенно указывает на подозрительный URL.

  • СЧИТАТЬ ТИРЕ

тире (-) обычно добавляют, чтобы он выглядел подлинным и надежным.

  • СЧЕТ РАВНО

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

  • СЧИТАТЬ ЦИФРЫ

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

  • СЧИТАТЬ ПИСЬМА

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

  • ДЛИНА URL

Средняя длина безопасного URL-адреса составляет 74. Злоумышленники используют длинные URL-адреса, чтобы скрыть свое доменное имя.

  • ДЛИНА ИМЯ ХОСТА

Чем длиннее имя хоста, тем выше риск.

  • ДЛИНА ПЕРВОГО КАТЕГОРИЯ

Длина первого каталога в URL-адресе, поиск первого символа «/» и подсчет длины URL-адреса до этой точки. Длина также является важной характеристикой, которую следует учитывать.

  • ДЛИНА ДОМЕНА ВЕРХНЕГО УРОВНЯ

Домен верхнего уровня — это домен на самом высоком уровне иерархической системы доменных имен в Интернете. Поскольку большинство URL-адресов имеют расширение .com. TLD в диапазоне от 2 до 3 обычно указывают безопасные URL-адреса.

4. Модельное обучение

После извлечения данных мне предложили доработать предварительно обученный медель Adamw BERT. Итак, я установил преобразователи, разделил данные на два подмножества (обучение, тестирование) и использовал их для обучения моей предварительно обученной модели следующим образом:

300000 URL-адресов выбираются случайным образом для обучения моделированию с 1-й по 10-ю эпохи, используя количество пакетов = 70. Это заняло примерно 3 часа. (отказ от ответственности; я использовал colab pro.)

Точность, указанная в тестовом наборе, показана ниже:

Было буквально много других моделей, которые я экспериментировал для обнаружения URL-адресов, таких как RandomForestClassifier и XGBoost. Однако оба они казались настолько ненадежными, что предсказали Google небезопасность, несмотря на такой высокий показатель точности. Поэтому я решил взять на вооружение свою обученную модель bert!

Сохранив модель и загрузив ее через Hugging Face, переходим к самой мучительной (на мой взгляд) части..

4. Развертывание

Следуя учебной программе, я развернул свою модель через aws ec2.

5. Непрактичная модель…

к сожалению, после развертывания моего веб-сайта я обнаружил, что моя модель bert по-прежнему практически не точна, как вы можете видеть ниже:

Так что же не так с моей моделью Берта???

это некоторые причины, я думаю, это проблемы

  • Данные из набора данных слишком старые. Данные из Kaggle загружены несколько лет назад и могут быть устаревшими.
  • Этап извлечения данных слишком подробен, что может привести к чрезмерно чувствительному прогнозу.
  • Возможно, проблема с загрузкой моей модели, так как она такая большая.

ЗДЕСЬ приходит Phish-Off 2.0 ….

ГЛАВА 2: Phish-Off 2.0!

1 . Анализ данных

Из Phish-Off 1.0 я узнал, что с моим набором данных могут быть проблемы. Итак, я преднамеренно проанализировал все URL-адреса в обоих моих наборах данных и решил использовать данные только из хорошего-плохого, только потому, что они содержат много новых URL-адресов, и я также добавил еще около 200 безопасных обновленных URL-адресов в это для Phish-Off 2.0!

2. Выбор модели

Какую модель мне следует использовать для Phish-Off 2.0!? это было трудное решение, так как даже BERT не сработал, как я думал.

Я провел исследование и нашел людей, которые просто используют дерево решений, и оно оказалось лучше, чем моя модель BERT. Я не думал, что буду больше использовать bert, randomforest или xgboost. В итоге я остановился на логистической регрессии от sklearn.

Это веские причины,

  1. Простота и интерпретируемость; Логистическая регрессия — это простая и интерпретируемая модель, которую легко понять и реализовать. Он дает четкое представление о взаимосвязи между входными функциями и прогнозируемым результатом.
  2. Эффективность и масштабируемость. Логистическая регрессия эффективна в вычислительном отношении и может обрабатывать большие наборы данных с большим количеством функций. Он имеет линейную временную сложность, что делает его подходящим для приложений реального или близкого к реальному времени. Реализация логистической регрессии sklearn оптимизирована для повышения производительности и может эффективно решать крупномасштабные проблемы.
  3. Методы регуляризации: логистическая регрессия в sklearn предлагает различные методы регуляризации, такие как регуляризация L1 (Lasso) и L2 (Ridge). Регуляризация помогает предотвратить переоснащение и улучшает способность модели к обобщению, добавляя штрафной член к функции стоимости. Это особенно полезно при работе с многомерными наборами данных или когда существует возможность мультиколлинеарности среди признаков.
  4. Оценка вероятности: логистическая регрессия обеспечивает вероятностную основу для классификации. Он выводит вероятности от 0 до 1, представляя вероятность того, что URL-адрес является безопасным или небезопасным. Это позволяет получить более детальное представление о достоверности модели и может быть полезно в сценариях принятия решений, где стоимость неправильной классификации варьируется.
  5. Важность функции: логистическая регрессия предоставляет меры важности функции, такие как коэффициенты или отношения шансов, которые указывают влияние каждой функции на прогнозируемый результат. Эти меры помогают определить наиболее важные функции и могут направлять выбор функций или усилия по разработке функций.
  6. Универсальность. Логистическая регрессия может решать задачи как бинарной, так и мультиклассовой классификации, что делает ее подходящей для широкого круга приложений. Независимо от того, нужно ли вам прогнозировать бинарные метки (например, безопасный/небезопасный) или несколько классов (например, безопасный/осторожно/небезопасный), логистическая регрессия может быть адаптирована к задаче.

3. Очистка данных

Я очистил свои данные с помощью makeTokens здесь,

В makeTokens я разделил токены символами «-», «.» , «/», и они удаляют «com» ​​из .com «http», «https» и «www», чтобы устранить избыточность.

4. Загрузка модели и векторизатора + обучение модели

Из приведенного выше кода

векторизатор из TfidfVectorizer используется для преобразования URL-адреса и типа после преобразования в список в матрицу функций TF-IDF. Для параметра токенизатора задано значение makeTokens, которое представляет собой пользовательскую функцию токенизатора.

5. Проверка точности

точность тестового набора показана ниже

6. Тест предсказания!!!

Как видите, намного точнее!

7. Развертывание

На этот раз я развернул свое приложение через потоковое облако, которое мне показалось намного проще. (Загрузил модель, верторайзер и app.py в репозиторий github)

И вы можете попробовать Phish-Off 2.0 здесь!

нажмите → https://pxyzp-phish-off-2-0-app2-ibcami.streamlit.app/

И это все мое путешествие Phish-Off! Спасибо за то, что дочитали мою среду до этого места :) Это был отличный опыт участия в AI Builder 2023. Это были действительно тяжелые два месяца для меня (очень рад, что закончил обучение!). Тем не менее, это был стоящий опыт! Очень рад быть в программе и обязательно продолжу обучение ИИ!