
Режим борьбы за свободу: открытый хакерский каркас
FFM — это хакерская упряжь, которую можно использовать во время пост-эксплуатационной фазы red-team задания. Идея инструмента была взята из конференции 2007 года от @thegrugq.
Она была представлена на SSTIC 2018 (видео), а сопутствующие слайды доступны по этой ссылке. Если вы не знакомы с этим классом инструментов, настоятельно рекомендуется ознакомиться с ними, чтобы понять, каково назначение хакерской упряжи. Все комментарии включены в слайды.
Этот проект распространяется на условиях лицензии GPL v3.
Основная документация находится в этом README и в модулях команд в commands/.
Ссылки на доклад на SSTIC, приведённые выше, остаются лучшим высокоуровневым введением в то, как предполагается использовать упряжь.
Дополнительные материалы с пошаговыми инструкциями доступны по адресу:
ice-wzl внёс вклад в виде команд, документации и рефакторинга на протяжении истории проекта.docker с этим инструментом.Dockerfile из этого репозитория значительно сократит количество возможных ошибок.Docker.git clone https://github.com/JusticeRage/FFM.git
cd /FFM
docker build Docker_Install/ -t ffm:ffm
docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/ffm ffm fb6dd17e3b91 9 minutes ago 614 MB
docker.io/library/ubuntu 22.04 3b418d7b466a 2 weeks ago 80.3 MB
#run your new container and drop into a /bin/bash prompt as root
docker run -it --entrypoint /bin/bash -u 0 fb6dd17e3b91
passwd для root и neo.su neo и теперь всё готово. git clone https://github.com/JusticeRage/FFM.git
cd /FFM
pip install -r requirements.txt
Цель хакерской упряжи — выступать в роли помощника, который автоматизирует распространённые задачи во время пост-эксплуатационной фазы, а также защищает пользователя от ошибок, которые он может совершить.
Это инструментарий оболочки. Запустите ./ffm.py, чтобы активировать его, и вы сможете начать работу
немедленно. Команды распределены по небольшим модулям в commands/, причём
commands/command_manager.py отвечает за обнаружение и регистрацию. Основные группы:
перечисление, справка, скрытность, передача и выполнение.
Есть две команды, которые вам нужно знать:
!list, чтобы отобразить все команды, предоставляемые упряжью.!list tags, чтобы увидеть различные теги, по которым можно группировать команды.!list tags
List of commands available:
enumeration
execution
help
stealth
transfer
!list enumeration (или один из других тегов), чтобы увидеть команды, относящиеся к этой категории.!list enumeration
List of commands available:
!backup-hunter: Hunts for backup files
!info: Returns CPU(s), Architecture, Memory, and Kernel Verison for the current machine.
!log: Toggles logging the harness' input and output to a file.
!mtime: Returns files modified in the last X minutes
!os: Prints the distribution of the current machine.
!db-hunter: Hunts for .sqlite, .sqlite3, and .db files
!sshkeys: Hunts for Private and Public SSH keys on the current machine.
!suid: Finds SUID, SGID binaries on the current machine.
--snip--
SHIFT+TAB, чтобы выполнить автодополнение на локальной машине. Это может быть полезно, если вы
подключены по SSH к удалённому компьютеру, но вам нужно обратиться к файлу, который находится на вашей локальной машине.Эта хакерская упряжь предоставляет несколько функций, описанных ниже. По мере их описания будет также представлена философия дизайна инструмента. Не ожидается, что все команды, реализованные в FFM, подойдут вам. У каждого свой подход к работе, и настройка упряжи под ваши конкретные потребности, скорее всего, потребует от вас изменения некоторого кода и/или написания нескольких плагинов. Было приложено много усилий, чтобы сделать эту задачу безболезненной.
!os — чрезвычайно простая команда, которая просто выполняет cat /etc/*release*, чтобы показать, какая ОС
установлена на текущей машине. Вероятно, она наиболее ценна как демонстрация того, что в
контексте хакерской упряжи вы можете определять псевдонимы, которые работают на разных машинах.
Подключитесь по SSH к любому компьютеру, введите !os, и команда будет выполнена. Команды перечисления находятся в
commands/enumeration_commands.py, команды справки — в commands/help_commands.py, а
команды, связанные со скрытностью, распределены по commands/stealth_commands.py,
commands/notty_sudo.py и commands/log_control.py.!backup-hunter Ищет файлы резервных копий.!info Возвращает информацию о CPU, архитектуре, памяти и версии ядра для текущей машины.!log Включает/выключает журналирование ввода и вывода упряжи в файл. Реализовано в
commands/log_control.py.!mtime Возвращает файлы, изменённые за последние X минут. Например, !mtime 5 покажет все файлы на локальной машине (которые вы имеете право видеть), изменённые за последние 5 минут.!db-hunter Ищет файлы .sqlite, .sqlite3, .db и другие файлы баз данных.!sshkeys Ищет приватные и публичные ключи SSH на текущей машине.!suid Находит SUID, SGID-бинарники на текущей машине.!strange-dirs Проверяет устройство, начиная с указанного пользователем пути, на наличие странных директорий на хосте.!sudo-version Проверяет уязвимую версию sudo.!vm Проверяет, является ли устройство виртуальной машиной.!download [remote file] [local path] получает файл с удалённой машины и копирует его
локально через терминал. Эта команда немного сложнее, так как требуется более строгая
проверка ошибок, но это ещё одна команда, которую вы легко можете прочитать, чтобы начать работу. Она находится
в commands/download_file.py. Обратите внимание, что для её корректной работы требуется xxd или od на удалённой машине.!download-dir [remote directory] [local destination] передаёт tar-архив удалённой
директории через терминал и извлекает его локально, не затрагивая удалённую файловую систему.
Находится в commands/download_directory.py. Требует tar и base64 на удалённой
машине, а также использует gzip, если он доступен.!upload [local file] [remote path] работает точно так же, как предыдущая команда,
за исключением того, что локальный файл помещается на удалённую машину. Находится в commands/upload_file.py.