
Автоматизированный, расширяемый набор инструментов, который выполняет cypher-запросы к бэкенду Neo4j Bloodhound и сохраняет вывод в электронные таблицы.
Автоматизированный расширяемый набор инструментов для выполнения cypher-запросов к Neo4j-бэкенду Bloodhound и сохранения результатов в электронные таблицы.
Это bash-скрипт, который автоматизирует выполнение cypher-запросов к данным Bloodhound, хранящимся в базе данных Neo4j.
Я обнаружил, что снова и снова выполняю одни и те же запросы через веб-интерфейс Neo4j в разных оценках, и подумал, что должен быть более простой способ. 😅
Список выполняемых cypher-запросов полностью расширяем. Пример форматирования ниже показывает, как добавить свои собственные.
Пожалуйста, делитесь любыми дополнительными полезными запросами, чтобы я мог добавить их в этот проект!
Полностью протестирован и работает в Bash на Linux, macOS и Windows
(Создано с помощью termtosvg для вашего удовольствия от просмотра)
cypher-shell поставляется в комплекте с Neo4j и необходима для работы этого скрипта
cypher-shell не найден, возможно, у вас устаревшая версия Neo4jssconvert, скрипт объединит все выходные .csv-файлы в листы внутри .xls-файла
В Windows мы рекомендуем использовать WSL для запуска этого скрипта, в то время как база данных neo4j работает в Windows. Вам просто нужно установить пакет cypher-shell в WSL (Linux).
Флаги:
-u Имя пользователя Neo4J (Обязательно)
-p Пароль Neo4J (Обязательно)
-d Полное доменное имя (Обязательно) (С учетом регистра)
-a Bolt-адрес (Опционально) (По умолчанию: localhost:7687)
-t Таймаут запроса (Опционально) (По умолчанию: 30s)
-v Подробный режим (Опционально) (По умолчанию:FALSE)
-h Текст справки и пример использования (Опционально)
Пример с настройками по умолчанию:
./cypheroth.sh -u neo4j -p BloodHound -d TESTLAB.LOCAL
Пример со всеми опциями:
./cypheroth.sh -u neo4j -p hunter2 -d BigTech.corp -a 10.0.0.1:7687 -t 5m -v true
Файлы добавляются в подкаталог, названный по FQDN.
В скрипте сейчас почти 60 запросов. Это пример информации, которую вы получите:
Чтобы добавить дополнительные запросы, отредактируйте массив queries в файле cypheroth.sh и добавьте строку в следующем формате:
Описание;Cypher-запрос;Выходной файл
Если добавляете запрос, требующий установки значения Domain, сохраните его как $DOMAIN.
Пример 1:
All Usernames;MATCH (u:User) RETURN u.name;usernames.csv
Пример 2:
All Domain Admins;MATCH (u:User) MATCH (g:Group {name:'DOMAIN ADMINS@$DOMAIN'}) RETURN u.displayname;domainAdmins.csv
Если вам нужно проанализировать несколько доменов, вы можете запустить несколько экземпляров Cypheroth параллельно, каждый из которых будет работать со своим доменом. Например, вы можете использовать следующий скрипт (10 параллельных задач).
#!/usr/bin/env bash
DOMAINS=(domA.example.net domB.example.net [...])
parallel -j10 --lb ./cypheroth.sh <args> -d {} ::: "${DOMAINS[@]}"
Если вы используете устаревшую версию cypher-shell, вы можете получить следующую ошибку:
DateTime is not supported as a return type in Bolt protocol version 1.
Please make sure driver supports at least protocol version 2.
Driver upgrade is most likely required.
Для исправления обновите Neo4j до последней версии.
Chris Farrell (@seajay)
#cypher_queries в Slack Bloodhound за помощь