Недавно я решил поиграться с одним интересным инструментом, который был представлен как PoC на AISEC 2023. Его суть заключается в том что он позволяет реализовать атаку уклонения на детекторы фишинга, которые используют ИИ. Инструмент доступен по этому репозиторию.
Я хочу вам рассказать о том, как в целом он работает и свой небольшой опыт.
Началось всё с малого .. как вы могли догадаться - это установка инструмента. Если вы собираетесь получить похожий опыт то вам обязательно стоит всё делать в conda окружении с предустановленным python3.10. После настройки вы конечно же клонируете и ставите зависимости - всё как всегда.
Но вам неожиданно - нужно скачать или взять готовый набор данных. К этому инструменту был приложен набор Deltaphish и его проблема - данные до 2017года. Он содержит в себе html странички банков, амазона и других сервисов, которые были использованы в ходе фишинг компаний.. Я очень хотел найти чисто русский набор данных, имеющий в целом похожую структуру - но поиски к сожалению не успешны. Видел в интернете лишь датасеты с наборами URL... но вы не понимаете - это не то. Есть ещё вариант - пересобрать текущий датасет - добавив в него html странички (например vk.com - хотя в наборе DeltaPhish встречается много текста VK.com - но не сама страница...)
Поэтому я решил попробовать это запустить на наборе данных который они предложили. Соблюдая инструкцию и внеся изменения в код(там надо было указать путь до датасета) - я приступил к запуску и тестированию - ввёл комманду :
.. и ждал .. прошла минута и я получил первый результат в папке experiments я увидел html страничку.
Сам процесс выглядел так:
проходила генерация страницы ( run_adv_attack),
в ходе которой модель проводила множество манипуляций с параметрами извлёчёнными из html файлов в датасете(взято из arxiv):
InjectIntElem - добавление скрытых внутренних HTML элементов (например, ссылок). Помогает обмануть признаки, которые анализируют количество внутренних и внешних элементов.
InjectIntElemFoot - то же самое, но элементы добавляются в футер страницы.
InjectIntLinkElem - аналогично, но добавляются элементы , чтобы обмануть конкретный признак HTML_metaScripts.
InjectExtElem - добавление скрытых внешних HTML элементов.
UpdateForm - изменение внутренних ссылок в формах, чтобы обойти проверки на подозрительные URL.
ObfuscateExtLinks - маскировка внешних ссылок с помощью JavaScript.
ObfuscateJS - обфускация JavaScript кода на странице.
InjectFakeCopyright - добавление поддельного копирайта, чтобы обмануть признак HTML_domCopyright, проверяющий наличие копирайта с доменным именем сайта.
UpdateIntAnchors - замена бесполезных внутренних ссылок вроде "#content" на другие, не детектируемые как подозрительные, чтобы обойти несколько признаков, ищущих такие ссылки.
UpdateHiddenDivs - обфускация скрытых div элементов путём удаления атрибута style="display:none" и маскировки через CSS. Позволяет обойти признак HTML_hiddenDiv.
UpdateHiddenButtons - аналогичный подход для скрытия кнопок с помощью JavaScript вместо атрибута disabled.
UpdateHiddenInputs - обфускация скрытых или отключенных полей ввода.
UpdateTitle - добавление доменного имени в заголовок страницы, если там его нет, чтобы обмануть проверку в HTML_URLBrand.
InjectFakeFavicon - инъекция фейкового favicon, если на странице его нет, для обхода признака HTML_favicon.
Дальше происходит тренировка - 3 обученные модели (CNN, RF, LR модельки были там) - определяли фишинг or not - результаты выводились в json файлик..
Так вот - прошёл буквально день - я получил множество результатов, башем переименовал их - добавив расширение .html в каждой из директорий.
Дальше я начал тестировать полученные результаты... я получил семплы страничек авторизации разных банков, гугла и т.д с модифицированным кодом(если интересен пример того что в целом получается - в репозитории есть папка samples, где есть семплы с кодом).
Я хочу вам рассказать о том, как в целом он работает и свой небольшой опыт.
Началось всё с малого .. как вы могли догадаться - это установка инструмента. Если вы собираетесь получить похожий опыт то вам обязательно стоит всё делать в conda окружении с предустановленным python3.10. После настройки вы конечно же клонируете и ставите зависимости - всё как всегда.
Но вам неожиданно - нужно скачать или взять готовый набор данных. К этому инструменту был приложен набор Deltaphish и его проблема - данные до 2017года. Он содержит в себе html странички банков, амазона и других сервисов, которые были использованы в ходе фишинг компаний.. Я очень хотел найти чисто русский набор данных, имеющий в целом похожую структуру - но поиски к сожалению не успешны. Видел в интернете лишь датасеты с наборами URL... но вы не понимаете - это не то. Есть ещё вариант - пересобрать текущий датасет - добавив в него html странички (например vk.com - хотя в наборе DeltaPhish встречается много текста VK.com - но не сама страница...)
Поэтому я решил попробовать это запустить на наборе данных который они предложили. Соблюдая инструкцию и внеся изменения в код(там надо было указать путь до датасета) - я приступил к запуску и тестированию - ввёл комманду :
python run_experiments.py
.. и ждал .. прошла минута и я получил первый результат в папке experiments я увидел html страничку.
Сам процесс выглядел так:
проходила генерация страницы ( run_adv_attack),
в ходе которой модель проводила множество манипуляций с параметрами извлёчёнными из html файлов в датасете(взято из arxiv):
InjectIntElem - добавление скрытых внутренних HTML элементов (например, ссылок). Помогает обмануть признаки, которые анализируют количество внутренних и внешних элементов.
InjectIntElemFoot - то же самое, но элементы добавляются в футер страницы.
InjectIntLinkElem - аналогично, но добавляются элементы , чтобы обмануть конкретный признак HTML_metaScripts.
InjectExtElem - добавление скрытых внешних HTML элементов.
UpdateForm - изменение внутренних ссылок в формах, чтобы обойти проверки на подозрительные URL.
ObfuscateExtLinks - маскировка внешних ссылок с помощью JavaScript.
ObfuscateJS - обфускация JavaScript кода на странице.
InjectFakeCopyright - добавление поддельного копирайта, чтобы обмануть признак HTML_domCopyright, проверяющий наличие копирайта с доменным именем сайта.
UpdateIntAnchors - замена бесполезных внутренних ссылок вроде "#content" на другие, не детектируемые как подозрительные, чтобы обойти несколько признаков, ищущих такие ссылки.
UpdateHiddenDivs - обфускация скрытых div элементов путём удаления атрибута style="display:none" и маскировки через CSS. Позволяет обойти признак HTML_hiddenDiv.
UpdateHiddenButtons - аналогичный подход для скрытия кнопок с помощью JavaScript вместо атрибута disabled.
UpdateHiddenInputs - обфускация скрытых или отключенных полей ввода.
UpdateTitle - добавление доменного имени в заголовок страницы, если там его нет, чтобы обмануть проверку в HTML_URLBrand.
InjectFakeFavicon - инъекция фейкового favicon, если на странице его нет, для обхода признака HTML_favicon.
Дальше происходит тренировка - 3 обученные модели (CNN, RF, LR модельки были там) - определяли фишинг or not - результаты выводились в json файлик..
Так вот - прошёл буквально день - я получил множество результатов, башем переименовал их - добавив расширение .html в каждой из директорий.
for file in *; do
if [ -f "$file" ]; then
mv "$file" "${file}.html"
fi
done
Дальше я начал тестировать полученные результаты... я получил семплы страничек авторизации разных банков, гугла и т.д с модифицированным кодом(если интересен пример того что в целом получается - в репозитории есть папка samples, где есть семплы с кодом).