
템플릿 기반 BloodHound 터미널 동반 도구

BloodHound 데이터 세트를 위한 Neo4j Cypher 쿼리와 이를 BloodHound CE로 자동 가져오기 위한 스크립트를 포함하는 Python3 터미널 애플리케이션입니다.
터미널

HTML 보고서

HTML 보고서 (계속)

BloodHound는 모든 침투 테스터에게 필수적인 도구입니다. 하지만 설계상 몇 가지 부정적인 부작용이 있습니다. 제가 경험한 가장 큰 문제점과 이 도구가 해결하려는 부분을 설명하겠습니다:
JSON 그래프를 파싱할 때까지, 다른 도구로 실제 공격을 수행하기 위해 그래프 결과를 줄 단위 .txt 파일로 얻어야 한다.이 도구는 레드 팀과 블루 팀 모두에게 상당한 가치를 제공할 수 있습니다.
CypherHound로 BloodHound 데이터를 다시 제어하세요!
grep/cut/awk 친화적인 형식의 예제 제공customqueries.json를 BloodHound CE로 가져오는 스크립트 포함python3이 설치되어 있는지 확인하고 다음을 실행하세요:
python3 -m pip install -r requirements.txt
다음 명령으로 프로그램을 시작하세요: python3 cypherhound.py -c config.json -y queries.yaml
프로그램은 json 형식의 구성 파일을 읽습니다. 아래는 이 파일의 예시입니다:
{
"user": "neo4j",
"pwd": "password",
"database": "neo4j"
}
여기서:
user는 Neo4j 사용자 이름입니다.pwd는 Neo4j 비밀번호입니다.database는 Neo4j 데이터베이스입니다.프로그램은 아래 형식의 YAML 파일에서 쿼리를 읽습니다. ad-queries.yaml은 Active Directory 관련 쿼리를 포함한 예제로 제공됩니다. 최단 경로 쿼리의 경우 msg_template은 필수가 아니지만, 경로를 포함하는 변수를 반환해야 합니다
queries:
- group: general
desc: 소유한 주체에 대한 모든 AddKeyCredentialLink 권한 나열
cypher: |-
MATCH (n {owned: true})-[r:AddKeyCredentialLink]->(m)
RETURN n.name AS n_name, m.name AS m_name, labels(m) AS labels_m, labels(n) AS labels_n
ORDER BY n.name
msg_template: |-
{{ n_name }} ({{ labels_n[0] }}/{{ labels_n[1] }})이(가) {{ m_name }} ({{ labels_m[0] }}/{{ labels_m[1] }})에 대해 AddKeyCredentialLink 권한을 가짐
키/값 쌍에 대한 표 설명은 아래와 같습니다:
| 키 | 설명 |
|---|---|
group | 이 쿼리가 속한 그룹, 그룹은 사용자 정의입니다 (예: "general") |
desc | 쿼리에 대한 설명 |
cypher | Neo4j 형식의 쿼리 자체 |
msg_template | Cypher 변수 기반 터미널 출력을 위한 Jinja2 템플릿, Neo4j 변수에 별칭을 사용하여 Jinja가 중첩 변수로 렌더링하지 않도록 하세요 |
params.*)프로그램은 Jinja2를 사용하여 Cypher를 렌더링합니다. set 명령으로 런타임 매개변수를 정의하고 YAML에서 {{ params.<key> }}로 참조하세요.
CLI
set <key> <value...> # 예: set user [email protected]
unset <key> # 선택 사항
show # 선택 사항
YAML 예제
- group: user
desc: 이 사용자에 대한 모든 권한 나열
cypher: |-
MATCH (n:User)-[r]->(m)
WHERE n.name =~ '((?i){{ params.user }})'
RETURN n.name AS n_name, TYPE(r) AS rel_type, labels(m) AS labels_m, m.name AS m_name
ORDER BY TYPE(r)
msg_template: |-
사용자 {{ n_name }}이(가) {{ m_name }} ({{ labels_m[0] }}/{{ labels_m[1] }})에 대해 {{ rel_type }} 권한을 가짐
일반적인 매개변수 패턴
| 매개변수 키 | 예시 값 | Cypher에서 사용 |
|---|---|---|
params.user | [email protected] | = {{ params.user }} |
params.user_regex | (?i)john\.doe(@example\.com)? | =~ '{{ params.user_regex }}' |
params.group | Domain [email protected] | = {{ params.group }} |
params.prefix | ACME- | STARTS WITH {{ params.prefix }} |
이 리포지토리는 JSON 파일에서 BloodHound CE UI로 쿼리를 자동 가져오는 query-importer.py 스크립트를 제공합니다. 또한 터미널 애플리케이션용 YAML 파일을 query-importer.py 및 BloodHound CE가 예상하는 JSON 형식으로 변환하는 bh_query_converter.py도 제공됩니다. 필요한 JSON 형식의 예시는 아래와 같습니다:
{
"queries": [
{
"name": "소유한 주체에 대한 모든 AddKeyCredentialLink 권한 나열",
"description": "소유한 주체에 대한 모든 AddKeyCredentialLink 권한 나열 - 일반",
"query": "MATCH p=(n {owned: true})-[r:AddKeyCredentialLink]->(m)\nRETURN p\nORDER BY n.name"
},
{
"name": "Users, Domain Users, Authenticated Users, Everyone 그룹에 대한 모든 AddKeyCredentialLink 권한 나열",
"description": "Users, Domain Users, Authenticated Users, Everyone 그룹에 대한 모든 AddKeyCredentialLink 권한 나열 - 일반",
"query": "MATCH p=(n:Group)-[r:AddKeyCredentialLink]->(m)\nWHERE (n.objectid =~ \"(?i)S-1-5-21-.*-513\" OR n.objectid =~ \"(?i).*-S-1-5-11\" OR n.objectid =~ \"(?i).*-S-1-1-0\" OR n.objectid =~ \"(?i).*-S-1-5-32-545\")\nRETURN p\nORDER BY n.name"
}
]
}
전체 명령어 메뉴는 아래와 같습니다:
문서화된 명령어 (자세한 내용은 'help -v', 특정 주제는 'help <topic>' 사용):
======================================================================================================
alias 별칭 관리
clear 터미널 지우기
cls 터미널 지우기
edit 텍스트 편집기를 실행하고 선택적으로 파일 열기
export 쿼리를 실행하고 결과 저장
help 사용 가능한 명령어 목록 표시 또는 특정 명령어에 대한 자세한 도움말 제공
history 이전에 입력한 명령어 보기, 실행, 편집, 저장 또는 지우기
list 그룹별로 쿼리 나열
macro 매크로 관리
report 여러 쿼리를 실행하고 HTML 보고서 생성
run 쿼리 실행
run_pyscript 콘솔 내에서 Python 스크립트 파일 실행
run_script ASCII 또는 UTF-8 텍스트로 인코딩된 스크립트 파일의 명령어 실행
search 저장된 쿼리 전체 텍스트 검색
set 동적 검색 매개변수 설정 (set <TARGET> <VALUE...>)
shell OS 프롬프트에서 명령어 실행
shortcuts 사용 가능한 바로가기 목록 표시
show 동적 검색 매개변수 표시
unset 동적 검색 매개변수 해제 (unset <TARGET>)
문서화되지 않은 명령어:
======================
exit q quit stop

query-importer.py 스크립트는 JSON 파일에서 BloodHound CE UI로 쿼리를 자동 가져옵니다. 또한 터미널 애플리케이션용 YAML 파일을 query-importer.py 및 BloodHound CE가 예상하는 JSON 형식으로 변환하는 bh_query_converter.py도 제공됩니다.