Недавно я решил поиграться с одним интересным инструментом, который был представлен как PoC на AISEC 2023. Его суть заключается в том что он позволяет реализовать атаку уклонения на детекторы фишинга, которые используют ИИ. Инструмент доступен по этому репозиторию.



Я хочу вам рассказать о том, как в целом он работает и свой небольшой опыт.



Началось всё с малого .. как вы могли догадаться - это установка инструмента. Если вы собираетесь получить похожий опыт то вам обязательно стоит всё делать в 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, где есть семплы с кодом).