
공격적 GPO 덤핑 및 분석 도구로, BloodHound 데이터를 활용하고 강화합니다.
GPOHound는 SYSVOL 공유에서 추출된 GPO(그룹 정책 개체)를 덤프하고 분석하기 위한 도구입니다.
이는 Active Directory 환경에서 잘못된 구성, 안전하지 않은 설정, 권한 상승 경로를 발견하는 데 도움이 되는 구조화되고 공식화된 형식을 제공합니다.
이 도구는 BloodHound의 Neo4j 데이터베이스와 통합되어 이를 Active Directory 정보의 LDAP 유사 소스로 사용하는 동시에 분석 결과를 바탕으로 새로운 관계(엣지) 및 노드 속성을 추가하여 이를 보강합니다.
구조화된 JSON 또는 트리 형식으로 GPO 덤프
여러 도메인 처리
GPO GUID로 GPO 이름 확인
GPO 파일, GPO GUID, 도메인별 출력 필터링
정규식을 사용하여 키/값 쌍 검색
영향을 받는 개체별 설정 그룹화 (예: 로컬 그룹, 레지스트리)
로컬 권한 그룹에 추가된 구성원 감지
안전하지 않은 레지스트리 설정, 저장된 자격 증명, 권한 권한 감지
VNC 자격 증명 및 GPP 암호 복호화 지원
GPO의 영향을 받는 도메인, 컨테이너, OU 찾기
특정 사용자, 컴퓨터, OU, 컨테이너 또는 도메인에 적용된 GPO 가져오기
관계 및 속성으로 BloodHound 데이터 보강
git clone "https://github.com/cogiceo/GPOHound"
cd GPOHound
pip install .
pipx install "git+https://github.com/cogiceo/GPOHound"
BloodHound 데이터 보강을 위해 Neo4j APOC를 설정해야 합니다:
표준 Neo4j 설치를 사용하는 경우, APOC jar 파일을 플러그인 폴더에 복사한 후 Neo4j를 다시 시작하여 APOC를 활성화할 수 있습니다:
cp /var/lib/neo4j/labs/apoc-* /var/lib/neo4j/plugins/
neo4j restart
"Docker Compose"로 Neo4j를 설치하는 경우, 환경 변수 NEO4J_PLUGINS=["apoc"]를 추가하세요:
neo4j:
image: neo4j:latest
environment:
- NEO4J_PLUGINS=["apoc"]
자세한 내용이나 대체 설치 방법은 공식 APOC 문서를 참조하세요.
GPOHound가 추가한 관계와 속성을 시각화하려면 customqueries.json 파일에서 사용자 정의 쿼리를 BloodHound로 가져올 수 있습니다. 기본적으로 이 파일은 ~/.config/bloodhound/customqueries.json에 위치합니다.
먼저 도메인 컨트롤러에서 SYSVOL 내용을 다운로드하세요.
전체 SYSVOL 다운로드:
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
GPO만 다운로드:
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD --gpos
제외 항목과 함께 다운로드:
gpohound sysvol --dc $DC_HOST -u $USER -p $PASSWORD --exclude '/Policydefinitions/','/scripts/' --max-size 100
LDAP에서 필요한 모든 데이터를 검색합니다:
gpohound ldap --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
BloodHound 데이터 보강을 위해서는 bloodhound.py 또는 SharpHound.exe와 같은 수집기를 사용하여 BloodHound 데이터를 수집하고, 수집된 데이터를 BloodHound 인터페이스로 가져와야 합니다.
샘플 GPOHound 파일은 example.zip에 있습니다. unzip example.zip으로 압축을 해제하세요.
기본값 및 구성 사용자 지정에 대한 지침은 CONFIG.md를 참조하십시오.
gpohound --neo4j-user $USER --neo4j-pass $PASS dump
gpohound --neo4j-user $USER --neo4j-pass $PASS analysis
gpohound parse "gpos/sysvols/$DOMAIN/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Registry.pol"
gpohound dump
gpohound dump --list
gpohound dump --guid 31B2F340-016D-11D2-945F-00C04FB984F9
gpohound dump --policies scripts psscripts
gpohound dump --search 'VNC.*Server' --show
gpohound analysis
gpohound analysis --affected
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL'
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL' --list
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL' --dump
gpohound analysis --enrich
gpohound analysis --enrich-ce
[!IMPORTANT]
- 보안 필터, WMI 필터, 항목 수준 대상 지정과 같은 조건은 해석되지 않습니다.
- GPO 충돌은 시뮬레이션되지 않으며, 유효한 설정이 누락되는 것을 방지합니다.
로그온 시 권한 있는 로컬 그룹에 할당된 사용자 감지
이름이 변경된 기본 제공 권한 있는 로컬 그룹 감지.
"기본 설정 프로세스 변수"(예: %ComputerName%, %DomainName%)를 사용하여 권한 있는 로컬 그룹에 추가된 수탁자 감지
sAMAccountName 하이재킹을 사용한 악용 가능한 수탁자 감지
권한 있는 로컬 그룹에 추가된 모든 수탁자 감지:
기본 권한 있는 수탁자 및 SID가 S-1-5-8로 시작하는 서비스 계정은 분석에서 제외됩니다.
| 그룹 | 엣지 |
|---|
| Administrators | AdminTo |
| Remote Desktop Users | CanRDP |
| Distributed COM Users | ExecuteDCOM |
| Remote Management Users | CanPSRemote |
| Backup Operators | CanPrivEsc |
| Print Operators | CanPrivEsc |
| Network Configuration Operators | CanPrivEsc |
| 분석 | 속성 |
|---|
| "Everyone" 그룹에 "Anonymous Logon" 포함 | — |
| SMB 서버 세션 서명이 활성화되지 않음 | smbSigningEnabled: false |
| SMB 서버 세션 서명이 필수로 설정되지 않음 | smbSigningRequired: false |
| NTLMv1 인증 지원됨 | NTLMv1Support: true |
| Windows 자동 로그온 기본 암호 | — |
| VNC 자격 증명 (Generic: RealVNC, TightVNC, TigerVNC 등) | *VNC*PASS* (다양함) |
| FileZilla 저장된 암호 | — |
| PuTTY 프록시 암호 | — |
| TeamViewer 저장된 자격 증명 | — |
| WinSCP 저장된 세션 | — |
| Picasa 저장된 암호 | — |
| 권한 | 설명 | 엣지 |
|---|
| SeDebugPrivilege | 사용자가 모든 프로세스를 디버그 및 상호 작용할 수 있도록 허용 | CanPrivEsc |
| SeBackupPrivilege | 중요한 파일에 대한 액세스 권한 부여 | CanPrivEsc |
| SeRestorePrivilege | 복원 중 개체 권한 우회 | CanPrivEsc |
| SeAssignPrimaryTokenPrivilege | SYSTEM 권한 상승을 위한 토큰 가장 활성화 | CanPrivEsc |
| SeImpersonatePrivilege | 다른 사용자의 컨텍스트에서 프로세스 생성 허용 | CanPrivEsc |
| SeTakeOwnershipPrivilege | 사용자가 시스템 개체의 소유권을 가져올 수 있도록 함 | CanPrivEsc |
| SeTcbPrivilege | OS의 일부로 작동할 수 있는 권한 부여 | CanPrivEsc |
| SeCreateTokenPrivilege | 인증 토큰 생성 허용 | CanPrivEsc |
| SeLoadDriverPrivilege | 드라이버 로드/언로드 권한 부여 | CanPrivEsc |
| SeManageVolumePrivilege | 볼륨 또는 디스크 관리 권한 부여 | CanPrivEsc |
| SeEnableDelegationPrivilege | 컴퓨터 및 사용자 계정이 위임을 위해 신뢰되도록 활성화 |