
GPOHound — Updated!
공격적 GPO 덤핑 및 분석 도구로, BloodHound 데이터를 활용하고 강화합니다.
GPOHound
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 데이터 보강
설치
pip로 설치
git clone "https://github.com/cogiceo/GPOHound"
cd GPOHound
pip install .
pipx로 설치
pipx install "git+https://github.com/cogiceo/GPOHound"
Neo4j용 APOC 설정
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 문서를 참조하세요.
BloodHound 쿼리 추가
GPOHound가 추가한 관계와 속성을 시각화하려면 customqueries.json 파일에서 사용자 정의 쿼리를 BloodHound로 가져올 수 있습니다. 기본적으로 이 파일은 ~/.config/bloodhound/customqueries.json에 위치합니다.
전제 조건
SYSVOL 덤프
먼저 도메인 컨트롤러에서 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 덤프
LDAP에서 필요한 모든 데이터를 검색합니다:
gpohound ldap --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
BloodHound
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하이재킹을 사용한 악용 가능한 수탁자 감지 -
권한 있는 로컬 그룹에 추가된 모든 수탁자 감지:
그룹 엣지 Administrators AdminToRemote Desktop Users CanRDPDistributed COM Users ExecuteDCOMRemote Management Users CanPSRemoteBackup Operators CanPrivEscPrint Operators CanPrivEscNetwork 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 저장된 암호 | — |
권한 권한
기본 권한 있는 수탁자 및 SID가 S-1-5-8로 시작하는 서비스 계정은 분석에서 제외됩니다.
| 권한 | 설명 | 엣지 |
|---|---|---|
| SeDebugPrivilege | 사용자가 모든 프로세스를 디버그 및 상호 작용할 수 있도록 허용 | CanPrivEsc |
| SeBackupPrivilege | 중요한 파일에 대한 액세스 권한 부여 | CanPrivEsc |
| SeRestorePrivilege | 복원 중 개체 권한 우회 | CanPrivEsc |
| SeAssignPrimaryTokenPrivilege | SYSTEM 권한 상승을 위한 토큰 가장 활성화 | CanPrivEsc |
| SeImpersonatePrivilege | 다른 사용자의 컨텍스트에서 프로세스 생성 허용 | CanPrivEsc |
| SeTakeOwnershipPrivilege | 사용자가 시스템 개체의 소유권을 가져올 수 있도록 함 | CanPrivEsc |
| SeTcbPrivilege | OS의 일부로 작동할 수 있는 권한 부여 | CanPrivEsc |
| SeCreateTokenPrivilege | 인증 토큰 생성 허용 | CanPrivEsc |
| SeLoadDriverPrivilege | 드라이버 로드/언로드 권한 부여 | CanPrivEsc |
| SeManageVolumePrivilege | 볼륨 또는 디스크 관리 권한 부여 | CanPrivEsc |
| SeEnableDelegationPrivilege | 컴퓨터 및 사용자 계정이 위임을 위해 신뢰되도록 활성화 |
개선 사항
- 로깅 개선
- LDAP 통합
- SMB 통합
- 나머지 확장 구문 분석
- 웹 인터페이스
- GPO 간 잠재적 충돌 강조 표시
GPO 문서
SYSVOL 및 LDAP
- [MS-GPAC] 감사 구성 확장
- [MS-GPCAP] 중앙 액세스 정책 프로토콜 확장
- [MS-GPEF] 암호화 파일 시스템 확장
- [MS-GPFAS] 방화벽 및 고급 보안 데이터 구조
- [MS-GPFR] 폴더 리디렉션 프로토콜 확장
- [MS-GPIE] Internet Explorer 유지 관리 확장
- [MS-GPNAP] 네트워크 액세스 보호(NAP) 확장
- [MS-GPNRPT] 이름 확인 정책 테이블(NRPT) 데이터 확장
- [MS-GPOL] 핵심 프로토콜
- [MS-GPPREF] 기본 설정 확장 데이터 구조
- [MS-GPREG] 레지스트리 확장 인코딩
- [MS-GPSB] 보안 프로토콜 확장
- [MS-GPSCR] 스크립트 확장 인코딩
- [MS-GPSI] 소프트웨어 설치 프로토콜 확장
LDAP 전용
- [MS-GPDPC] 배포된 프린터 연결 확장
- [MS-GPWL] 무선/유선 프로토콜 확장