Всем привет! В прошлой части мы рассказали про существующие решения для «оркестрации» параллельных задач «взлома хешей» на hashcat.
В этой части продолжаем рассказывать о проекте Hashtopolis. Рассмотрим подготовку компонентов веб-окружения на сервере. Разберем основные параметры сервера и агента Hashtopolis.
Установка и конфигурация Hashtopolis
Для своей работы сервер Hashtopolis хочет от вас следующие компоненты:
- Apache2/nginx
- 64-bit PHP 7.0+ и модули: php-gd modules, pear, php-curl
- MySQL 5.x + УЗ с полным доступом к базе приложения
В Hashtopolis есть поддержка nginx, для работы с которым нужно настроить блокировку доступа ко всем подкаталогам "/hashtopolis", содержащим файл .htaccess. В данной статье мы рассматриваем установку Hashtopolis с веб-сервером Apache2 (потому LAMP).
Для знакомства с проектом можно использовать и XAMPP, на версии 5.6.40 у нас всё «взлетело» без проблем. Материал из данной статьи пригоден в настройке Hashtopolis на XAMPP.
Под спойлером немного про Docker-образ Hashtopolis:
Установка Hashtopolis в docker
В Docker Hub были найдены несколько образов «hashtopolis server», однако, только один вызвал хоть какое-то доверие: hub.docker.com/r/kpeiruza/hashtopolis
Автор не поленился и добавил описание по «установке» hashtopolis в Docker'е. Настройка реквизитов и контейнера описаны подробно. Важное замечание — при настройке port-mapping'а (пример 'docker run… -p 80:80') учитывайте особенности вашей ОС и необходимость доступа к веб-серверу на хостах-агентах Hashtopolis.
Процесс настройки самого веб-приложения описан далее в нашей статье.
Автор не поленился и добавил описание по «установке» hashtopolis в Docker'е. Настройка реквизитов и контейнера описаны подробно. Важное замечание — при настройке port-mapping'а (пример 'docker run… -p 80:80') учитывайте особенности вашей ОС и необходимость доступа к веб-серверу на хостах-агентах Hashtopolis.
Процесс настройки самого веб-приложения описан далее в нашей статье.
Установка в среде LAMP
Версия проекта которую мы использовали: Hashtopolis 0.10.1
Для работы сервера Hashtopolis нам вполне хватило хоста со следующей конфигурацией:
- 1 CPU
- 1GB RAM
- 25 GB диска
Рекомендуем установить phpMyAdmin, Adminer или иной аналог для работы с СУБД. Таким образом в случае проблем с функционалом Hashtopolis траблшутинг можно будет выполнить не покидая браузер.
В процессе установки софта на нашем LAMP сервере мы использовали инструкцию из Wiki проекта Hashtopolis (https://github.com/s3inlc/hashtopolis/wiki/Server-Prerequisites):
- sudo apt update && sudo apt upgrade
- sudo apt install mysql-server
- sudo apt install apache2
- sudo apt install libapache2-mod-php php-mysql php php-gd php-pear php-curl
- sudo apt install git
- sudo apt install phpmyadmin
Если не был запущен интерактивный мастер конфигурации во время установки пакетов mysql — нужно выполнить следующую команду: mysql_secure_installation.
Таким образом с помощью «интерактивного мастера» будет установлен пароль для доступа к СУБД.
Потом необходимо создать в MySQL пользователя и базу данных к которой у этого пользователя будет доступ на чтение/запись.
Переходим к установке сервера Hashtopolis.
Склонировать исходный код Hashtopolis можно с git-репозитория проекта Мы действовали согласно инструкции и склонировали репо, а из каталога «hashtopolis» перенесли «src» рекурсивно в «www»:
- git clone github.com/s3inlc/hashtopolis.git
- cd hashtopolis/src
- sudo mkdir /var/www/hashtopolis
- sudo cp -r * /var/www/hashtopolis
- sudo chown -R www-data:www-data /var/www/hashtopolis
Устанавливаем директиву «KeepAliveTimeout» в 10 миллисекунд, как рекомендуют разработчики. Обоснование:
In order to leverage the usage of TCP sessions in the python client, the timeout of the server needs to be set to something higher than your status update timeНаш вольный перевод: «С целью применения TCP-сессий в клиенте реализованном на Python, таймаут сессии в конфигурации веб-сервера должен быть установлен выше значения „status update“ агента»
Открываем любым (любимым) редактором файл конфигурации Apache2 (в нашей системе путь к файлу "/etc/apache2/apache2.conf") и меняем значение директивы «KeepAliveTimeout» с 5 на 10.
При необходимости добавляем в конфигурацию веб-сервера alias на папку с Hashtopolis (если директория была создана в отличном от "/var/www/html" каталоге). Также добавляем директиву «AllowOverride All», чтобы разрешить применение файлов .htaccess в дочерних каталогах.
Еще мы на всякий случай добавили директивы «ServerSignature Off» и «ServerTokens Prod» в файл конфигурации "/etc/apache2/apache2.conf" с последующим перезапуском сервиса apache2, а также указали разрешенные IP-адреса на доступ к «phpMyAdmin» директивой «Allow from 1.2.3.4/28» в конфиге "/etc/apache2/conf-enabled/phpmyadmin.conf". Разрешать доступ с любого адреса к Hashtopolis или ограничиться locahost/PrivateIP-space — зависит от конкретного сетапа. В нашем случае доступ разрешен с любого IP, как вам лучше так и решайте этот момент.
Будет неплохой идеей ограничить доступ к директории hashtopolis. Мы пошли простым и быстрым путём — для доступа к каталогу "/hashtopolis" веб-клиент должен пройти Basiс-Authentication.
Устанавливаем пакет apache-utils (если не сделали раньше). Из утилит на данном этапе потребуется «htpasswd». Создаем файл и логин пользователя:
sudo htpasswd -c /etc/apache2/.htpasswd kraud
После ввода пароля юзер будет добавлен в файл .htpasswd, проверить можно командой «cat /etc/apache2/.htpasswd». Добавление пользователей осуществляется аналогичной командой без ключа "-с".
Далее настраиваем доступ к каталогу веб-приложения добавлением директив в конфиг «apache2/sites-available/000-default.conf». В итоге получился вот такой конфиг «каталога»:
Alias /hashtopolis "/var/www/hashtopolis"
<Directory /var/www/hashtopolis>
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Order allow,deny
Allow from all
AllowOverride All
Require valid-user
</Directory>
Обратите внимание, что при использовании «Basiс-Auth» необходимо дополнительно добавить параметры в конфигурацию Hashtopolis agent'а (файл "\hashtopolis_agent_dir\config.json"):
{
"url": "http://1.2.3.4/hashtopolis/api/server.php",
"voucher": "",
"token": "token",
"uuid": "d54de86f-3942-4127-af63-f257c45b66cd",
"debug": false,
"auth-user": "kraud",
"auth-password": "password"
}
Об агенте Hashtopolis чуть позже.
Необходимо также создать новую базу данных для приложения Hashtopolis и пользователя MySQL с доступом к этой базе. Тут кому что больше по душе — в PMA или в консоли выполнить создание базы — это не должно составить труда. Сохраняем в заметки имя базы и учетные данные — они понадобятся далее.
В результате пройденных этапов должна загрузиться страница установки веб-приложения Hashtopolis по следующему URL: http://<server_ip>/hashtopolis:
Если этого не произошло, вероятно проблема в разрешениях на каталог "/var/www/hashtopolis", либо в конфигурации веб-сервера (например ошибка в «Alias»). Стоит проверить URL http://<server_ip>/hashtopolis/src/index.php или http://<server_ip>/hashtopolis/src/install/index.php
Затем, будет загружена форма «DB Connection» на которой нужно будет заполнить параметры подключения к СУБД, имя базы (например 'hashtopolis') и учетные данные пользователя для доступа к ней. Если подключение будет корректно установлено откроется следующая форма с единственной кнопкой «Continue» — нажимаем её. Если всё ОК — откроется следующая форма «Create Admin User» — здесь мы указываем учетные данный администратора веб-приложения Hashtopolis:
После нажатия кнопки «Create» если форма была обработана корректно отобразится документ с подтверждением успешной установки и рекомендациями:
- Убедиться в корректности разрешений на каталог "./install" либо удалить данный каталог
- Проверить содержимое файла "./install/.htaccess" (должно быть «Order deny,allow\nDeny from all»)
- При запросе направленном в "./install" должен вернуться статус-код 403
После всех проделанных этапов по URL «http://<server_ip>/hashtopolis/» должна загружаться форма аутентификации Hashtopolis:
Далее (по желанию) настройте использование HTTPS, подключение сертификата безопасности — этот этап мы опустим. Переходим к настройке агента Hashtopolis.
Установка агента
Непосредственно задачей «взлома хешей» занимаются агенты — на хостах-агентах запускаются экземпляры 'hashcat' или иного крэкера. Диалог между сервером Hashtopolis и агентами происходит по HTTP/HTTPs.
Агент может быть установлен на системах с ОС Windows/Linux/MacOS X. В текущей версии Hashtopolis поддерживается только агент на Python.
.Net версия агента Hashtopolis более не поддерживается
У нас уже был хост на Windows 10, который мы использовали для «взлома хешей» с помощью 'hashcat'. Поэтому решили ничего не менять, а взять готовую рабочую систему для подключения к Hashtopolis.
В Windows системе необходимо предварительно установить интерпретатор Python 3. Не забудьте при установке поставить птичку «Add Python 3.х to PATH» (пример ниже):
Затем, нужно скачать архив hastopolis.zip с сервера Hashtopolis, либо иным способом доставить архивный файл на агентский хост.
Для загрузки файлов агента с сервера нужно из выпадающего меню «Agents» кликнуть на «New Agent». Далее попадаем в раздел «Add new agent» где и будет содержаться кнопка загрузки — «Download».
Также, в разделе «Add new agent» будет указан URL для подключения агента и кнопка создания ваучера (нужно нажать «Create»).
В нашем случае архив был сохранен в каталоге «C:\hashtopolis», который далее будет рабочим каталогом агента.
Для удобства работы с агентом (просмотр журнала, copy/paste и т.д.) мы используем сеанс PowerShell. Запуск агента производится командой:
> python.exe .\hashtopolis.zip
Запуск агента в режиме отладки выполняется с помощью опции "-d".
> python3.exe .\hashtopolis.zip -d
Отключить отладку можно правкой конфига «config.json» строкой «debug»: false".
Вызвать справку по дополнительным аргументам командного запуска агента можно с помощью опции "-h":
Hashtopolis agent commands
> python.exe .\hashtopolis.zip -h
usage: python3 hashtopolis.zip [-h] [--de-register] [--version]
[--number-only] [--disable-update] [--debug]
[--voucher VOUCHER] [--url URL]
Hashtopolis Client v0.4.0
optional arguments:
-h, --help show this help message and exit
--de-register client should automatically de-register from server now
--version show version information
--number-only when using --version show only the number
--disable-update disable retrieving auto-updates of the client from the
server
--debug, -d enforce debugging output
--voucher VOUCHER voucher to use to automatically register
--url URL URL to Hashtopolis client API
usage: python3 hashtopolis.zip [-h] [--de-register] [--version]
[--number-only] [--disable-update] [--debug]
[--voucher VOUCHER] [--url URL]
Hashtopolis Client v0.4.0
optional arguments:
-h, --help show this help message and exit
--de-register client should automatically de-register from server now
--version show version information
--number-only when using --version show only the number
--disable-update disable retrieving auto-updates of the client from the
server
--debug, -d enforce debugging output
--voucher VOUCHER voucher to use to automatically register
--url URL URL to Hashtopolis client API
После инициализации агент спросит URL сервера Hashtopolis (скопировать можно из раздела «Add new agent»): «Please enter the url to the API of your Hashtopolis installation:»
Примечание: скрипт агента должен всё время работать в фоне. Существует компонент hashtopolis-runner который запускает агента при получении multicast-сообщений от сервера. Работает runner только на linux хостах. Подробнее тут: github.com/s3inlc/hashtopolis-runner
Если URL указан корректно и агенту удалось подключиться, далее будет получено сообщение с запросом ваучера: «No token found! Please enter a voucher to register your agent:»
Агент выдаст подтверждение, в случае корректности кода ваучера и перейдёт в режим ожидания заданий:
Successfully registered!
Collecting agent data...
Login successful!
Hashtopolis Server version: 0.10.1 ()
Client is up-to-date!
No task available!
В разделе «Agents» в таблице добавится новый агент, с информацией о системе: Имя хоста, GPU/CPU и другими сведениями:
В каталоге «C:\hashtopolis» будет создан файл «config.json» с конфигурацией агента, и файл журнала «client.log». Дополнительные параметры (например HTTP proxy) можно добавить вручную, согласуясь с инструкцией: github.com/s3inlc/hashtopolis-agent-python
Найти сведения о ротации логов или максимальном размере журнала не удалось, судя по исходникам агента весь stdout из терминала пишется еще и в файл, никаких ограничений или проверок не обнаружено.
Рекомендуем сразу же перейти в настройки агента в веб-интерфейсе Hashtopolis — для это достаточно кликнуть на имя хоста (на скриншоте выше это «DENIGMA»). Лучше установить птичку «Trust agent with secret data», а также указать владельца («Owner»):
Настройка cracker binaries
В разделе «Crackers/Cracker Biniaries» представлены параметры исполняемых файлов «взломщика», по умолчанию раздел содержит «hashcat 5.1.0». Если необходимо для каких-либо специфичных задач использовать другую версию hashcat нажимаем «Add Version/Binary» (список релизов: github.com/hashcat/hashcat/releases). В форме заполняем все поля и жмём «Create binary»:
Будьте внимательны при заполнении формы, в частности избегайте «пробелов» в «Download URL», в поле «Binary Base Name» указать именно «hashcat» — скрипт агента дополнит недостающие части в имени исполняемого файла. Так мы добавили дополнительный набор исполняемых файлов для версии 4.1.0. Внести изменения можно кликнув на название cracker'а в колонке «Name».
В результате данной «настройки» при создании нового задания («Tasks/New Tasks») можно будет выбрать версию hashcat.
В разделе «Crackers» можно также добавить другой типа cracker'а, подробнее о работе с «generic cracker» тут.
При запуске задания в локальную директорию «crackers» на хосте агента будет распакован указанный в «Download URL» 7z-архив в папку под номером ID cracker'а
Если данная версия cracker'а была «установлена» ранее — повторное скачивание архива выполняться не будет.
Создаем задание на взлом хешей
Мы настроили агента и уже не терпится проверить его в деле. Для того, чтобы начать «взлом хешей» нужно создать список хешей (или «Hash list»), а потом указать его в задаче. Для создания списка в веб-интерфейсе Hashtopolis нажимаем «Lists» и выбираем «New hashlist» из выпадающего меню. На своих проектах мы регулярно сталкиваемся с NTLM/NetNTLM хешами — на них и потренируемся. Воспользуемся любым онлайн-сервисом и сгенерируем NTLM-хешей. Затем, установим остальные параметры списка и нажмем «Create hashlist»:
Важный момент — все «взломанные/не взломанные» хеши можно будет увидеть в созданном списке, т.е. все данные по хешам связаны со списком, даже задачи с ним связаны. Поэтому будьте внимательны при удалении hash list'ов. А если по какой-то причине модули приложения перестанут работать, например у нас заглючил модуль «notifications.php» после удаления task, на которую были назначены уведомления — пришлось чикать записи в таблице «NotificationSetting»
Далее необходимо добавить словарь, так как ломать хеши мы будем именно «словарным» подбором (ключ '-a0' в 'hashcat'). Переходим в раздел «Files» (будет активна вкладка «Wordlists»), нажимаем кнопку «Add file» и выбираем локальный файл, после чего кликаем «Upload files». Также можем воспользоваться загрузкой по URL, например, скачаем словарь с «известного» репозитория:
Теперь можно приступить к заданиям для агента. Из главного меню Hashtopolis выбираем «Tasks/New task». Далее заполняем форму:
- Вводим имя задания в параметре «Name»
- Выбираем список хешей в параметре «Haslist»
- Отмечаем словарь из списка «Wordlists» справа — имя словаря подставится автоматически в поле «Command line» либо: Указываем путь к словарю в формате "..\path\to\file\%filename%"
- В поле «Command line» вводим параметры запуска hashcat, например "-a0"
- Приоритет актуален когда есть множество задач
- «Task notes» используется для пометок, за пределами Hashtopolis они не будут доступны
- Можно выбрать цвет для задания, которым оно будет отмечено в списке заданий (меню «Task/Show tasks»)
Остальные параметры оставляем по умолчанию, кликаем «Create task». После этого в списке заданий появится новое задание:
Как видно из таблицы, на задачу «NTLM_test_crack» не назначен агент(-ы). Назначить агента можно либо из меню «Agent details» в параметре «Assignment:», либо в свойствах задания выбрать агент из списка и нажать кнопку «Assign»:
Сразу же после этого на агенте начнётся «движуха» — будут переданы инструкции:
- Загрузить «cracker binaries» (по умолчанию hashcat.net/files/hashcat-5.1.0.7z). Если файлы существуют и версия совпадает — скачиваться архив не будет
- Загрузить файл словаря (если указан «wordlist» сервера hashtopolis)
- Выполнить короткий тест производительности
- Начать «взлом хешей»
При этом в консоли будет выводиться информация о стадиях подготовки GPU, процессе подбора, производительности системы в «H/s» и т.п.
В результате запуска задания и его выполнения будет обновлен статус «списка хешей». Подобранные пароли можно просмотреть кликнув на цифру напротив «Cracked:» в таблице «Tasks», либо в разделе «Hash details»:
При возникновении ошибок у агента в ходе выполнения заданий, статус этого агента будет изменен и нужно будет вручную его активировать. Чтобы вновь «активировать» агента, нужно поставить птичку напротив параметра «Activity» в настройках агента. Статус «Paused» выглядит так:
Чтобы агент не останавливался из-за ошибок, нужно изменить параметр «Cracker errors» на одну из опций «Keep agent running» (агент будет работать, но ошибки можно либо фиксировать в журнале либо отклонять):
Хвост
Спасибо за внимание! В следующей части расскажем про настройку уведомлений в Hashtopolis.