Способна ли ChatGPT распознавать фишинговые ссылки?
Наша команда не могла не задаться этим вопросом, ведь сейчас только и слышно о впечатляющих способностях ChatGPT и других языковых моделей. Мы активно применяем технологии машинного обучения в кибербезопасности, в частности обучаем модели, анализирующие веб-сайты на предмет фишинга и других угроз. Но что если мы с нашими сложными многоуровневыми системами отстали от современности и большая языковая модель (LLM — large language model) сможет бороться с киберпреступниками лучше нас?
Чтобы ответить на этот вопрос, мы провели эксперимент и проверили, насколько хорошо ChatGPT распознает явно вредоносные ссылки. В статье мы описываем практический пример применения большой языковой модели для выполнения реальной, пусть и упрощенной, ИБ-задачи и делимся интересными наблюдениями. Мы не питали иллюзий, что ChatGPT действительно можно использовать как детектирующую технологию, и в первую очередь стремились понять, какие знания о кибербезопасности она почерпнула из обучающих данных и как может помочь аналитикам в работе.
Почему мы выбрали задачу классификации URL-адресов?
Аналитик с наметанным глазом способен за долю секунды распознать явно вредоносную ссылку (вы, вероятно, тоже):
hxxp://caseld-10xxxx.info/1/Office365/0fflce3.6.5/live/login.php
- Не очень-то похоже на ссылку для входа в Office 365
(Ссылки в статье частично замаскированы символом «x».)
Если человек может выполнить задачу почти мгновенно, то с ней, скорее всего, справится и машинное обучение (machine learning, ML) — на практике для отбора подходящих задач часто используют именно этот подход. Однако, чтобы создать ML-систему, требуется много работы: от сбора данных и генерации признаков до подготовки инфраструктуры. Идея заменить все это единым интерфейсом на естественном языке кажется слишком заманчивой, чтобы быть правдой. Но насколько она далека от реальности?
Проводя эксперимент, мы хорошо знали об ограничениях больших языковых моделей и что компания OpenAI прямо рекомендует не применять новую технологию в областях с повышенным риском. В частности, технический отчет о системе содержит следующее замечание о применении GPT-4 в кибербезопасности:
Тем не менее возможность применять GPT-4 в кибербезопасности ограничена из-за склонности к «галлюцинациям» и фиксированного контекстного окна.
Логично предположить, что в модели GPT-3.5-turbo эти ограничения выражены еще сильнее.
Мы выбрали задачу классификации URL-адресов по следующим причинам:
- URL-адрес, в отличие от целой HTML-страницы, легко помещается во входные данные: в современных больших языковых моделях, таких как ChatGPT, количество обрабатываемых за один раз символов (точнее, токенов) ограничено (говоря техническим языком, у них фиксированное контекстное окно).
- Явно вредоносные ссылки распознать легко, но эта задача остается нетривиальной, так как требует знаний о реальном мире, например о названиях популярных веб-сервисов.
- URL-адреса представляют собой текст, а с ним большие языковые модели хорошо справляются.
Расскажем, что же мы сделали.
Поговорим?
Во-первых, мы открыли веб-интерфейс ChatGPT и проверили, выполнима ли наша задача в принципе:
Если судить по URL-адресу, эта ссылка фишинговая? Объясни почему. Ссылка: hxxp://caseld-10xxxx.info/1/Office365/0fflce3.6.5/live/login.php
Да, вероятно, это фишинговая ссылка.
Этот URL-адрес, по-видимому, намеренно вводит в заблуждение, так как следующие вещи вызывают подозрение:
- Доменное имя caseld-10xxxx.info не связано с известной или заслуживающей доверия организацией и выглядит как случайный набор букв и цифр.
- В URL использовано название популярного пакета офисных приложений Office 365, который часто является целью фишинговых атак. Злоумышленники часто используют такую тактику, чтобы вынудить ничего не подозревающих жертв перейти по ссылке и раскрыть конфиденциальную информацию.
- Слово «live» в URL-адресе может создавать впечатление того, что адрес принадлежит официальной странице для входа в Microsoft Office 365, так как компания Microsoft в прошлом использовала слово «live» в названиях некоторых своих служб.
- Написание слова «Office» как «0fflce» тоже указывает на опасность, так как фишеры часто используют эту тактику, чтобы создать впечатление легитимности сайта.
- Расширение «.php» на конце URL-адреса указывает на то, что на сервере выполняется PHP-скрипт — они часто используются в фишинговых атаках для сбора учетных данных.
Следовательно, рекомендуется не переходить по таким ссылкам и всегда проверять легитимность URL-адреса перед тем, как вводить личную информацию или учетные данные.
Объяснение выглядит довольно разумным и обоснованным. Если не считать скептического отношения модели к PHP-скриптам (можем ее понять), она смогла выделить целевую организацию, распознала омографическую атаку (0ffice) и даже указала, почему в адресе могло быть использовано слово «live». Объяснение вполне на уровне младшего аналитика.
Чтобы собрать корпус таких объяснений, мы делали запросы к модели GPT-3.5-turbo, которая лежит в основе чат-бота ChatGPT, используя API OpenAI. Эта модель недорогая и быстрая (нам нужно проверить много ссылок), но при этом достаточно мощная. Тестовый корпус состоял из нескольких тысяч ссылок, которые наши детектирующие технологии распознали как фишинговые, и нескольких тысяч безопасных ссылок.
Попытка № 1. Это фишинг?
ChatGPT может выдать ответ в любой требуемой форме, от стихотворной:
Ошибка в слове «Office» здесь не вдруг —
Излюбленный преступниками трюк
Не приближайся к сайту и на выстрел пушки
Иначе попадешь в киберловушку.
до машиночитаемых форматов. Кроме того, она может выполнять несколько задач сразу. То есть мы можем попросить ChatGPT не только ответить «да» или «нет» на вопрос, безопасна ли ссылка, но и выдать ответ в формате JSON, добавить аргументацию и назвать возможную цель атаки. После нескольких попыток мы составили следующий запрос:
1 2 3 4 5 |
{"role": "system", "content": "Ты CyberGPT, ИИ-эксперт в области кибербезопасности."}, { "role": "user", "content": 'Эта ссылка ведет на фишинговый веб-сайт? Напиши ответ в формате json {"phish": "yes|no", "reasoning": "detailed explanation why", "target_company": "possible targeted company"}\nСсылка: ' + url } |
Мы использовали здесь две затравки (prompt). Системная затравка, которая, если верить документации и специалистам, менее важна, заставляет ChatGPT принять на себя роль ИИ-эксперта в кибербезопасности. Пользовательская просит в нужном формате выдать решение о безопасности ссылки. Честно говоря, то, как легко получить от ChatGPT нужный ответ, вызывает восхищение.
Мы потратили две ночи, чтобы получить около 6000 вердиктов (возможно, потому что на момент проведения эксперимента шумиха вокруг ChatGPT достигла пика), а затем занялись обработкой результатов.
Хотя большинство ответов можно было обработать без предварительной подготовки, некоторые оказались повреждены: содержали дополнительный текст (например, «Примечание: переходите по ссылке с осторожностью…»), точку на конце, ненужные escape-символы. В целом менее 0,5% ответов в формате JSON оказались повреждены так, что не поддавались автоматическому исправлению, или содержали, например, такой текст:
Мне очень жаль, но я только языковая ИИ-модель и не могу подключиться к интернету или найти веб-сайт по данной ссылке. Однако вы можете применить стандартные отраслевые практики и проверить легитимность ссылки, используя надежный онлайн-сервис для распознавания фишинга. Если в официальных отчетах сообщалось о фишинговых атаках или случаях мошенничества, связанных с целевой компанией, повышается вероятность того, что ссылка окажется фишинговой.
Что, кстати, тоже является хорошим ответом.
В итоге, после всех ошибок и отказов отвечать, мы остались с набором данных из 2322 фишинговых и 2943 легитимных URL-адресов. Итоговые показатели:
- Доля обнаруженного фишинга (detection rate, DR): 87,2%
- Доля ложных срабатываний (false positive rate, FPR): 23,2%
Хотя DR очень высок, доля ложных срабатываний неприемлема. Представьте, что блокировался бы каждый пятый веб-сайт, на который вы пытаетесь зайти. Конечно, ни одна технология машинного обучения сама по себе не может достичь нулевого уровня ложных срабатываний, но цифра, которую мы получили, слишком высока. Рассмотрим вопрос шире и обратимся к URLnet, известной статье о детектировании вредоносных ссылок с помощью нейросетей. В ней Хун Лэ (Hung Le) и другие авторы описали решение похожей задачи с почти таким же уровнем обнаружения (около 85%) и долей ложноположительных вердиктов около 0,4%. Достичь таких показателей им позволила сверточная нейросеть со специфичной архитектурой. Более свежая статья об URLTran, написанная Пранавом Манерикером (Pranav Maneriker) в соавторстве с другими исследователями, описывает, как трансформерная архитектура (на которой построена ChatGPT) позволяет еще сильнее снизить число ложных срабатываний.
ROC-кривая из статьи Лэ и других авторов за 2018 год, иллюстрирующая достигаемые доли истинных обнаружений (уровень обнаружения) и ложных
К сожалению, чудес не бывает. Мы сталкиваемся с первым ограничением: невозможно настроить пороговые значения так, чтобы снизить долю ложных срабатываний за счет уровня обнаружений. Или все же возможно?
Эксперимент № 2. Эта ссылка безопасна?
Возможно, из-за того что мы составили слишком конкретный запрос, языковая модель отнеслась к ссылкам с подозрением. Можно попробовать снизить подозрительность и спросить, является ли ссылка безопасной, вместо того чтобы спрашивать, является ли она фишинговой. Второй запрос:
1 2 3 4 5 6 7 8 9 |
{"role": "system", "content": "Ты чат-бот, дающий советы по интернет-безопасности."}, { "role": "user", "content": 'По этой ссылке безопасно переходить? ' Напиши ответ в формате json: {"safe": "yes|no", "yes_confidence": 0.5}' '\nГде "yes_confidence" указывает уверенность в безопасности ссылки от 0 до 1. ' 'Выводи ответ только в формате json.' '\nСсылка: ' + url }, |
Отличия от предыдущего запроса:
- Убрали фразу «эксперт в области кибербезопасности», так как эксперт по умолчанию с подозрением относится к случайным ссылкам.
- Не просили указывать целевую организацию, чтобы модель не знала, что должна обнаружить фишинговую атаку.
- Попросили указать степень уверенности в безопасности. Это может оказаться полезным (хотя и маловероятно).
Результаты оказались неутешительными:
- Доля обнаруженного фишинга: 93,8%
- Доля ложных срабатываний: 64,3%
Оказалось, что на менее конкретный запрос модель с большей вероятностью ответит, что ссылка опасна. Вот как поменялись вердикты для безопасных ссылок по сравнению с ответом «эксперта в области кибербезопасности»:
Вердикты чат-бота, дающего советы по интернет-безопасности (безопасные ссылки) | безопасно | небезопасно |
Вердикты «эксперта в области кибербезопасности» CyberGPT (безопасные ссылки) | ||
безопасно | 1049 | 1210 |
фишинг | 2 | 682 |
Интересно, что модель выражает уверенность, почти как человек, — чаще использует округленные числа, например 90%:
5 наиболее часто выбираемых моделью показателей уверенности. Обратите внимание, что они округлены до 0,1 (скачать)
ROC-кривая выглядит неплохо, но ни в одной из ее точек новый запрос не показывает более высокие результаты, чем эксперт по кибербезопасности из предыдущей попытки:
ROC-кривая, построенная на основе вероятностей в ответах ChatGPT
Итак, трудно предсказать поведение большой языковой модели по тому, как человек воспринимает затравку. Возможно, «безопасность» ссылки более размытое понятие, чем «фишинг». Трудно понять, почему первая затравка показала намного лучшие результаты. Составление эффективных затравок, несмотря на появление новых методов, остается скорее искусством, чем наукой.
Постоянство вердиктов
Важно понимать, что процесс генерации ответов большими языковыми моделями случаен. Хотя можно установить параметр температуры на 0, чтобы практически полностью устранить случайность (остаются источники неопределенности, связанные с численными вычислениями), обычно это ухудшает работу модели: она может неоднократно повторять одну и ту же фразу и т.д. В результате для каждого генерируемого токена (слова или его части) модель выбирает между несколькими альтернативными вариантами (их число также контролируется параметрами).
Но непостоянство вердиктов — не то, чего ожидаешь от детектирующей технологии. Чтобы проверить влияние случайности на результаты, мы провели еще один небольшой эксперимент. Для него мы выбрали 200 случайных URL-адресов (100 безопасных и 100 фишинговых) и получили вердикты, используя тот же простой запрос:
1 2 3 4 5 6 7 8 |
{"role": "system", "content": "Ты чат-бот, дающий советы по интернет-безопасности."}, { {"role": "user", "content": 'По этой ссылке безопасно переходить? ' Напиши ответ в формате json: {"safe": "yes|no"}' '\nВыводи ответ только в формате json.' '\nСсылка: ' + url }, |
Вот сравнение результатов двух одинаковых прогонов (ответов на вопрос о безопасности ссылки, которые не подвергались постобработке):
Прогон 2 | нет | неизвестно | да |
Прогон 1 | |||
нет | 145 | 2 | 3 |
да | 4 | 0 | 46 |
Итак, для 4,5% URL-адресов вердикт поменялся из-за случайного характера ответов языковой модели. Вариация вердиктов для безопасных URL-адресов в двух прогонах составила 7%. При использовании больших языковых моделей важно помнить об этом факторе, хотя настройка температуры и помогает уменьшить его влияние.
Извлечение названий организаций
Больше всего впечатляет способность ChatGPT извлекать данные о потенциальной цели фишинговой атаки. Составляя фишинговые ссылки, злоумышленники стараются убедить пользователей в подлинности URL-адреса и принадлежности к определенной компании. Кроме того, они используют методы обфускации, чтобы обойти автоматизированные средства анализа. Способность извлекать данные о цели атаки можно использовать в различных сценариях.
ChatGPT обладает достаточными знаниями о реально существующих онлайн-сервисах и финансовых организациях и хорошо умеет извлекать их названия из ссылок (ответы могут требовать небольшой постобработки — например, нужно объединить «Apple» и «iCloud», или удалить сокращения «LLC» и «Inc»). Модель смогла определить цель атаки более чем в половине случаев. При этом следует помнить, что не каждый URL-адрес содержал указание на целевую организацию. Среди выявленных компаний были крупные порталы, такие как Facebook*, TikTok и Google, маркетплейсы, такие как Amazon и Steam, множество банков из разных стран, от Австралии до России, криптовалютные сервисы и службы доставки.
Приведем несколько интересных примеров.
URL-адрес: hxxps://steancxxxmuunity.com/profiles/765xxxxxxxxxx175
Организация: Steam
Обоснование: Доменное имя steancxxxmuunity.com, вероятно, является попыткой тайпсквоттинга. Правильное написание домена —steamcommunity.com. Веб-сайт маскируется под сообщество Steam, популярную игровую платформу…
URL-адрес: https://cxxxxxxxxr.com/wp-includes/js/jcrop/cgi/BOfA/Validation/login.php?cmd=login_submit
Организация: Bank of America
Обоснование: Ссылка выглядит подозрительно и указывает на попытку фишинга, так как доменное имя не связано с потенциальной целевой компанией (Bank of America). URL-адрес также содержит подозрительные дополнительные символы: /wp-includes/js/jcrop/cgi…
URL-адрес: http://caseld-10xxxx.info/1/Office365/0fflce3.6.5/live/login.php
Организация: Microsoft
Обоснование: Доменное имя в ссылке (caseld-10xx93.info) не связано со службой Microsoft Office 365. Путь URL содержит неправильно написанное слово «office» (0fflce) и подозрительно старый номер версии (3.6.5).
URL-адрес: http://adobexxxsignxxxx.duckdns.org/ees/
Организация: Adobe
Обоснование: Доменное имя duckdns.org относится к бесплатному сервису динамического DNS, который киберпреступники часто используют для размещения фишинговых веб-сайтов или другого вредоносного контента. Кроме того, поддомен adobexxxsignxxxx в URL-адресе, по всей видимости, имитирует легитимный сервис Adobe Sign. Это указывает на то, что злоумышленники могут атаковать клиентов Adobe с целью кражи информации или мошенничества.
Как мы видим, ChatGPT способна выявить омографическую атаку (хотя может перепутать ее с тайпсквоттингом) и сделать правильный вывод об отсутствии связи доменов с компаниями. И хотя она не поняла, что числа «3.6.5» имитируют «365» в «Office 365», ее объяснения выглядят достаточно разумно.
Скрытое знание: анализ обоснований
Выше мы специально отобрали удачные примеры. Если поставить перед собой обратную цель, можно найти забавные ответы. ChatGPT может включить в свои объяснения:
- Указание на данные из сервиса WHOIS, к которому у модели нет доступа:
- Наконец, если поискать доменное имя в базе WHOIS, то можно увидеть, что оно было зарегистрировано совсем недавно (14.10.2020) и данные о зарегистрированном лице скрыты.
- Указание на контент веб-сайта, к которому модель также не имеет доступа:
- веб-сайт, не принадлежащий Microsoft, запрашивает учетные данные пользователя. Это распространенная тактика фишинговых атак.
- Кроме того, дизайн веб-страниц не соответствует официальному веб-сайту eBay. Это указывает на то, что веб-сайт может быть поддельным и имитировать сайт eBay.
- Кроме того, отсутствует информация о политике безопасности и конфиденциальности на веб-сайте. На защищенном веб-сайте такая информация должна быть легко доступна пользователям.
- Указания на срок действия SSL-сертификата:
- Домен duckdns.org не принадлежит Netflix, и SSL-сертификат недействителен.
- Утверждения, не соответствующие действительности:
- Домен sxxxxxxp.com не связан с Netflix и использует протокол http вместо https (на самом деле предъявленная ссылка начинается с https).
- Неведомые доселе факты из области кибербезопасности:
- Доменное имя в URL-адресе yxxxx3.com предположительно зарегистрировано в Корее — это указывает на опасность.
Эти любопытные случаи подчеркивают ограничения модели. Она способна генерировать разумные объяснения, но подвержена «галлюцинациям»: додумывает контекст, к которому не имеет доступа, или просто выдает факты, не соответствующие действительности.
Однако в целом модель демонстрирует нетривиальное понимание задачи. Ручной анализ всех объяснений занял бы слишком много времени, поэтому мы использовали старые добрые технологии обработки текстов на естественном языке (NLP) для того, чтобы получить общую картину.
Во-первых, мы заметили, что модель в своих объяснениях в основном использовала короткие лаконичные предложения, содержащие одну мысль. Мы разбили ответы на предложения, используя сплиттер NLTK Punkt. Затем мы векторизовали получившиеся предложения с помощью модели MPNet из пакета Sentence-Bert и использовали UMAP для визуализации. Для раскрашивания кластеров на графике мы использовали метод кластеризации DBSCAN. Несколько итераций подбора гиперпараметров привели к следующему результату:
Кластерный анализ объяснений, выданных ChatGPT. Семантически близкие объяснения образуют плотные кластеры.
Анализ плотных кластеров позволяет найти фразы, которые чаще всего встречаются в объяснениях модели. Перечислим некоторые из них:
- Упоминания конкретных целевых компаний.
- Рекомендации не переходить по ссылке.
- Уверенные заявления о том, что сайт является или не является фишинговым.
- Заявления о неопределенности.
- Указания на протокол HTTPS (или его отсутствие) или SSL-сертификаты (как правило, это галлюцинации).
- Предложения вида «Это распространенная тактика…»
В некоторых объяснениях описываются эти «распространенные тактики»:
- Использование IPFS: «URL-адрес выглядит подозрительно и, по всей видимости, размещен в IPFS, которая может использоваться для размещения вредоносного контента».
- Подозрительные элементы пути, в том числе омографические атаки: «Эта ссылка — пример омографической атаки, известной также как «атака с использованием омографов IDN»».
- Элементы пути или домена, ассоциирующиеся с безопасностью и экстренными мерами: «Наконец, URL-адрес создает впечатление неотложности, убеждая пользователя сразу же перейти по ссылке».
- Использование динамических DNS-сервисов: «Доменное имя duckdns.org относится к бесплатному динамическому DNS-сервису, с помощью которого кто угодно может создать пользовательский поддомен. Атакующие могут с легкостью использовать его для создания фишинговых писем или веб-сайтов якобы легитимных компаний».
- Электронный адрес в параметрах: «Кроме того, использование электронного адреса в качестве параметра запроса может указывать на возможную попытку фишинга».
- Упоминание организации в пути или поддомене, хотя домен не связан с этой организацией: «Ссылка выглядит подозрительной, так как содержит поддомен, не связанный с Amazon».
- Элементы домена, которые кажутся сгенерированными автоматически: «Кроме того, путь bafyxxxxxxxxxxxxxxxxxx43ky указывает на то, что ссылка была сгенерирована автоматически».
Эти замечания очень разумны. Они указывают на то, что данные для обучения ChatGPT содержали достаточно информации о кибербезопасности, чтобы языковая модель выучила явные признаки фишинговых атак и использовала эти знания для анализа конкретных случаев. Весьма впечатляет.
Заключение
Учитывая, что ChatGPT в этих экспериментах работала в режиме zero-shot, то есть без обучения на примерах, результаты поразительны — с этим не поспорят даже закоренелые скептики. Примеры абсурдных ответов, особенно специально отобранные, также впечатляют. Именно поэтому, оценивая возможность реального применения технологии, следует принимать решения на основании экспериментов, а не скриншотов в Twitter. Особенно справедливо это для сферы кибербезопасности, где автоматизированные системы должны показывать больше, нежели просто «хорошие» или «впечатляющие» результаты.
Как и в других сценариях использования, детектирование как основная задача — только часть проблемы. Разработка сигнатур и наполнение баз, их проверка, тестирование и доставка, поддержка инфраструктуры — менее заметные, но настолько же важные аспекты. И чтобы все это заработало, требуется усердная работа человека.
Более того, для использования больших языковых моделей необходимы совершенно новые навыки. Чтобы улучшить результаты в задачах детектирования, извлечения названий целевых организаций и приведения обоснований, мы могли бы попробовать различные варианты:
- Использовать более мощную модель, например GPT-4.
- Использовать специальные методы составления запросов, например цепочку рассуждений (Chain-of-Thought prompting) или последовательность «рефлексия — критика — исправление» (Reflect-Critique-Improve).
- Анализировать не только URL-адреса, но и целые HTML-страницы.
- Далее улучшать затравку и параметры генерации, например температуру и др.
Однако это значит отказаться от мечты об искусственном интеллекте, который «просто работает» и не нуждается в дополнительной настройке или обучении. Кроме того, большие языковые модели обладают своими особенностями: они демонстрируют склонность к галлюцинациям (выдают воображаемые объяснения и ссылки на веб-страницы, к которым у них никогда не было доступа), генерируют случайные ответы и уязвимы перед вредоносными инъекциями в затравку (prompt injection).
Но если рассматривать то, как модель извлекает названия целевых организаций и аргументирует решения, следует признать, что она выдает результаты на уровне стажера-аналитика киберугроз: работает хорошо, но не стоит оставлять без присмотра. Следовательно, аналитики могут использовать эту технологию как вспомогательный инструмент для подсветки подозрительных фрагментов URL-адресов и потенциальных целей для атак. Кроме того, ее можно использовать в процессах обучения со слабой разметкой (weak supervision), чтобы улучшить результаты обучения традиционных ML-моделей.
Подводя итоги, можно сказать, что хотя ChatGPT и другие большие языковые модели показывают впечатляющие результаты, прямо сейчас они вряд ли радикально изменят сферу кибербезопасности, по крайней мере, в том, что касается обнаружения фишинга. «Лаборатория Касперского» продолжает изучать передовые технологии и их потенциальное влияние на киберпреступников и кибербезопасность. Посмотрим, что будет дальше.
Антифишинговые способности ChatGPT мы также обсуждаем в апрельском эпизоде подкаста «Смени пароль».
*Facebook принадлежит корпорации Meta, которая признана в РФ экстремистской организацией
Что ChatGPT знает о фишинге?