ChatGPT: ещё один инструмент пентестера

ChatGPT: ещё один инструмент пентестера

Почему ChatGPT 3.5 можно добавить в свой набор утилит на каждый день и какие задачи ему по зубам? Точка зрения специалиста по тестированию на проникновение.

 

 

 

 

 

 

 

 

  1. Введение
  2. Условия тестирования
  3. Сценарии применения ChatGPT 3.5
    1. 3.1. «Я хелпы не читаю»
    2. 3.2. «Меня в гугле забанили»
    3. 3.3. «Хьюстон, у нас проблемы»
    4. 3.4. «Я всё умею, но я ленивый»
  4. Выводы

Введение

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

На протяжении нескольких недель я пытался использовать возможности ChatGPT для решения различных задач, с которыми часто приходится сталкиваться при проведении тестирования на проникновение.

Для статьи были выбраны наиболее интересные, на мой взгляд, сценарии взаимодействия с чат-ботом.

Условия тестирования

Все приведённые примеры относятся к GPT 3.5. Эта версия доступна бесплатно (после некоторых манипуляций для преодоления ограничений по подключению с территории РФ). Описание способов получения доступа легко найти и затруднений это вызвать не должно. Также следует отметить, что GPT 3.5 знаком с данными по состоянию на сентябрь 2021 г.

Для взаимодействия с чат-ботом рекомендуется использовать вводные сообщения — промты (prompt). Это необходимо для того, чтобы задать нужный контекст чат-боту и максимально избежать фантазийных ответов на наши вопросы. Во всех примерах я использовал промты из открытого файла на GitHub с небольшой корректировкой, чтобы получать ответы на русском языке. Это просто первый ресурс с набором промтов, который мне попался. Возможно, есть что-то лучше. Тексты промтов я приводить не буду, предполагается, что перед каждым вопросом я повторяю их.

Сценарии применения ChatGPT 3.5

Для проверки возможностей чат-бота я выбрал несколько сценариев применения:

  1. «Я хелпы не читаю» — попробуем получить от чат-бота текст команды по словесному запросу.
  2. «Меня в гугле забанили» — поспрашиваем ИИ на разные темы.
  3. «Хьюстон, у нас проблемы» — воспользуемся знаниями чат-бота для решения проблем с установкой и запуском нужных утилит.
  4. «Я умею, но я ленивый» — переложим на ИИ работу по написанию кода.

«Я хелпы не читаю»

Для разминки попробуем собрать нужные опции утилиты Nmap (справка).

Запрос:

Напиши команду для сканирования сегмента 192.168.0.0/24 с помощью утилиты nmap. Требования к условиям сканирования:

  1. Сканируем 1000 наиболее популярных tcp портов
  2. В отчете показываем только открытые порты
  3. Необходимо определить тип сервиса и версию операционной системы
  4. Из области сканирования исключи адреса 192.168.0.200 и 192.168.0.145
  5. Исходящий интерфейс для сканирования — eth1
  6. исходящий порт — 53
  7. Результат сканирования сохранить в текущем каталоге в файле report в формате grep

Ответ:

nmap -p 1-1000 --top-ports 1000 --open --exclude 192.168.0.200,192.168.0.145 --min-rate 500 --max-retries 1 --reason -sS -sV -O -e eth1 -g 53 -oG report 192.168.0.0/24

 

Рисунок 1. Результат работы первичного запроса на сбор нужных опций утилиты Nmap

Результат работы первичного запроса на сбор нужных опций утилиты Nmap

 

Чат-бот верно использовал нужные опции утилиты Nmap, но бонусом решил предложить ещё ряд опций, в том числе и для сканирования первой тысячи портов, что точно противоречит запросу.

В целом по ответу — незачёт. Сканирование лишнего диапазона портов в каких-то случаях может быть критически значимо и явно не соответствует нашему запросу.

Попробуем ещё раз.

Запрос:

я перехватил хэш пользователя:
[SMB] NTLMv2-SSP Client : fe80::20cf:6526:bee:9684 [SMB] NTLMv2-SSP Username : HYDRA\joker [SMB] NTLMv2-SSP Hash : joker::HYDRA:9f52888781fdb710:82133ACF2BE569C05A6C0E8EAFFA2FDF:010100000000000080ED1B5B9276D9016179853B157C4794000000000200080037004A0059004A0001001E00570049004E002D00530038003800480059003600500035005A003500370004003400570049004E002D00530038003800480059003600500035005A00350037002E0037004A0059004A002E004C004F00430041004C000300140037004A0059004A002E004C004F00430041004C000500140037004A0059004A002E004C004F00430041004C000700080080ED1B5B9276D90106000400020000000800300030000000000000000000000000200000DDE19AE5910314964DB82F89AA73F044B85EE358147BA13A6C468AA3CFBC3D970A001000000000000000000000000000000000000900100063006900660073002F004400430032000000000000

напиши команду для восстановления пароля из хэша с использованием утилиты hashcat и словаря dic.txt 

Ответ:

hashcat -m 5600 -a 0 -o cracked.txt <hash_file> dic.txt

 

Рисунок 2. Результат при повторном запросе

Результат при повторном запросе

 

Неплохо! Чат-бот правильно распознал тип хеша (NetNTLMv2), правильно применил все опции, в том числе предложил сохранить найденные пароли в файл (и придумал для него подходящее название).

Резюме

Кинуть в чат словесное описание нужных действий и получить в итоге рабочую команду можно, но полученный результат нужно проверять. Избежать чтения справок и руководств не получится.

«Меня в гугле забанили»

Распространённая проблема: при поиске информации через поисковые системы нужный ответ находится не в первой ссылке. Более того, возможно, что нужный ответ придётся собирать по нескольким ресурсам из поисковой выдачи. Посмотрим, сможет ли чат-бот сэкономить наше время.

Запрос:

Как можно подключиться к серверу Redis? Напиши команды для подключения из kali linux, напиши команды, которые поддерживает клиент.

Ответ: см. рис. 3.

 

Рисунок 3. Результат подбора команд для подключения из Kali Linux к Redis

Результат подбора команд для подключения из Kali Linux к Redis

 

Отлично, вполне информативный ответ на заданный вопрос!

Чуть посложнее:

Какие утилиты можно использовать для подключения к серверу ldap для получения информации о структуре ActiveDirectory? Напиши несколько примеров утилит для linux.

Ответ: см. рис. 4.

 

Рисунок 4. Результат запроса ресурсов для подключения к серверу

Результат запроса ресурсов для подключения к серверу

 

Это, конечно, дело вкуса, но я ожидал увидеть в перечне LDAPDomainDump. Так или иначе, в ответе содержатся и команды для внесения изменений в записи базы LDAP — такого мы не просили.

При этом чат-бот знает об утилите LDAPDomainDump и понимает, для чего она предназначена.

 

Рисунок 5. Чат-бот делится знаниями об утилите LDAPDomainDump

Чат-бот делится знаниями об утилите LDAPDomainDump

 

Вот ещё несколько примеров ответов чат-бота на различные запросы.

 

Рисунок 6. Ответ на запрос о подключении к базе данных

Ответ на запрос о подключении к базе данных

 

Рисунок 7. Характеристика атаки

Характеристика атаки

 

Рисунок 8. Описание подтверждения уязвимости SSRF

Описание подтверждения уязвимости SSRF

 

Резюме

Замена традиционных поисковиков на ChatGPT поможет получить информацию в концентрированном виде и избавит от необходимости изучения нескольких ресурсов для сбора нужных данных.

Следует учитывать, что ответ ChatGPT — это «экспертное мнение» чат-бота. Если вы не можете оценить корректность полученной информации, проверяйте ответ и в других источниках.

«Хьюстон, у нас проблемы»

В ходе внутреннего тестирования на проникновение мне часто приходится использовать рабочую станцию, предоставленную заказчиком. Следствие — проблемы при установке нужных утилит в нестандартной среде.

В одном из тестирований возникли проблемы с установкой утилиты Above,предназначенной для анализа сетевого трафика и обнаружения потенциально уязвимых сетевых протоколов.

Инструкция по установке утилиты состоит из одной строчки:

pip3 install -r requirements.txt

Что может пойти не так?

Отправим текст полученной ошибки в ChatGPT.

 

Рисунок 9. Анализ полученной ошибки от чат-бота

Анализ полученной ошибки от чат-бота

 

Попробуем вариант с установкой в отдельную виртуальную среду Python.

 

Рисунок 10. Инструкция от чат-бота по организации виртуальной среды Python

Инструкция от чат-бота по организации виртуальной среды Python

 

Выполняем инструкцию чат-бота. При дальнейшей установке зависимостей из файла «requirements.txt» получаем ошибку.

 

Рисунок 11. Описание полученной ошибки при установке зависимостей

Описание полученной ошибки при установке зависимостей

 

Удаляем строчку «subprocess» из файла «requirements.txt», и после этого установка завершается без ошибок.

Проверяем работу программы и при запуске получаем ошибку, в описании которой говорится об отсутствии модуля «pyshark». Отправим текст ошибки в чат.

 

Рисунок 12. Сообщение об отсутствии модуля «pyshark»

Сообщение об отсутствии модуля «pyshark»

 

Чат-бот говорит, что для запуска утилиты Above нужны права суперпользователя, но все модули для работы Above мы ставили в виртуальное окружение, в контексте обычного пользователя.

Для решения проблемы чат-бот предлагает запустить Python через «sudo» с указанием полного пути до файла «python3» в нашем виртуальном окружении.

Это работает! Утилита Above успешно запускается.

Резюме

На мой взгляд, этот сценарий использования ChatGPT наиболее интересен.

Проблемы, вызванные программными ошибками, несовместимостью пакетов и т. п., всегда появляются неожиданно, и времени на вдумчивое чтение документации и поиск решений по форумам обычно нет.

Чат-бот, конечно, не выдаст идеальный ответ с первого вопроса — но часто ли мы можем получить такой ответ после запроса в поисковик или создав новую тему на форуме? Дополнительное преимущество чат-бота — безграничное терпение по разъяснению всех попутно возникающих вопросов в режиме реального времени.

«Я всё умею, но я ленивый»

Для решения проблем с работой любимых утилит на временных рабочих станциях можно воспользоваться технологией Docker.

Сделаем контейнер Docker для запуска приложений CrackMapExec и Kerbrute. Полученный контейнер опубликуем в публичном хабе Docker. В результате можно будет воспользоваться готовым образом и не тратить время на установку утилит со всеми зависимостями.

Задачу для ChatGPT сформулируем по следующему сценарию. Возьмём инструкции по установке утилит с их страниц на GitHub. Для CrackMapExec предлагается несколько вариантов установки — мы выберем вариант с использованием Poetry и добавим в текст запроса инструкцию по её инсталляции. Для установки Kerbrute потребуется наличие пакета «go». Также учтём это в нашем запросе.

В инструкции по установке Kerbrute предлагается использовать следующую команду:

go get github.com/ropnop/kerbrute

Команда «go get» уже не поддерживается, необходимо использовать «go install». Оставим эту строку без изменений. Посмотрим, как ChatGPT решит эту проблему.

Запрос:

Есть задача запустить в docker два приложения:

Crackmapexec

Инструкция по установке:

  1. curl -sSL https://install.python-poetry.org | python3 –
  2. apt-get install -y libssl-dev libffi-dev python-dev-is-python3 build-essential
  3. git clone https://github.com/Porchetta-Industries/CrackMapExec
  4. cd CrackMapExec
  5. poetry install

Kerbrute

Инструкция по установке:

  1. apt-get install -y golang
  2. go get github.com/ropnop/kerbrute

Составь текст dockerfile

 

Рисунок 13. Результат запроса

Результат запроса

 

Отлично, чат-бот сгенерировал текст для Dockerfile с комментариями по используемым командам.

Собираем образ — 

sudo docker build -t pentools 

— и получаем ошибку выполнения инструкции «poetry install». Для выполнения этой команды системе нужно знать, где находится бинарник Poetry.

Отправим текст ошибки чат-боту.

 

Рисунок 14. Текст ошибки

Текст ошибки

 

Для устранения ошибки чат-бот предлагает добавить в переменную «PATH» расположение исполняемого файла Poetry.

 

Рисунок 15. Решение от чат-бота

Решение от чат-бота

 

Следующая попытка компиляции Dockerfile завершилась ожидаемой ошибкой выполнения команды «go get github.com/ropnop/kerbrute». Отправляем ошибку в чат.

 

Рисунок 16. Реакция чат-бота на его же ошибку

Реакция чат-бота на его же ошибку

 

Третья версия Dockerfile компилируется без ошибок.

Запустим контейнер — 

sudo docker run -it pentools

— и проверим работу утилит.

Для запуска CrackMapExec необходимо перейти в каталог с программой.

 

Рисунок 17. Запуск утилиты CrackMapExec

Запуск утилиты CrackMapExec

 

Утилита CrackMapExec работает.

Проверяем работу Kerbrute и получаем ошибку:

root@466e55c96ca7:/CrackMapExec# kerbrute
bash: kerbrute: command not found

Ошибка вызвана отсутствием пути к исполняемому файлу Kerbrute в переменной окружения «PATH». Можно исправить ошибку самостоятельно, но давайте узнаем мнение ChatGPT.

 

Рисунок 18. Реакция чат-бота на ошибку

Реакция чат-бота на ошибку

 

Получаем Dockerfile с учётом нужных исправлений.

 

Рисунок 19. Итоговый Dockerfile

Итоговый Dockerfile

 

После финальных правок контейнер собрался без ошибок. Утилиты запускаются корректно.

Проверим работу утилит на стенде.

 

Рисунок 20. Проверка работы утилиты CrackMapExec

Проверка работы утилиты CrackMapExec

 

Рисунок 21. Проверка Kerbrute

Проверка Kerbrute

 

И финальные шаги — разместим наш образ в публичном хабе Docker:

sudo docker login --username=<имя пользователя hub.docker.com>  #логинимся в сервисе hub.docker.com для публикации образа
sudo docker tag mytool <имя пользователя hub.docker.com>/mytool # назначаем нужный нам тэг для образа, который получили из нашего докер файла
sudo docker push  <имя пользователя hub.docker.com>/mytool   #публикуем образ в репозитории

В дальнейшем для загрузки образа из вашего репозитория необходимо будет воспользоваться следующей командой:

sudo docker pull  <имя пользователя hub.docker.com>/mytool

Резюме

СhatGPT в состоянии помочь в написании разнообразных скриптов: принять участие в отладке и написать черновую структуру скрипта для последующей оптимизации. Следует учесть, что понимание предмета и проверка кода, полученного от чат-бота, помогут избежать лишних итераций при отладке.

Выводы

Несмотря на известные ограничения бесплатной версии ChatGPT 3.5, доступная функциональность позволяет использовать чат-бот в большом количестве повседневных дел пентестера.

Если вы хотите решить свою проблему через поиск в интернете или задав вопрос на профильном форуме, попробуйте сперва узнать решение у ChatGPT. Есть хорошие шансы на то, что чат-бот позволит сэкономить ваше время.

Полезные ссылки: 
Anti-Malware Яндекс ДзенПодписывайтесь на канал "Anti-Malware" в Telegram, чтобы первыми узнавать о новостях и наших эксклюзивных материалах по информационной безопасности.

RSS: Новые статьи на Anti-Malware.ru