
BloodHound에서 AD 계층 구조를 위반하는 공격 경로를 식별하세요.
BloodHound에서 AD 계층 구조를 깨는 공격 경로 식별
ImproHound는 GUI를 갖춘 dotnet 독립 실행형 win x64 exe입니다. ImproHound를 사용하려면 먼저 SharpHound를 실행하여 AD에서 필요한 데이터를 수집해야 합니다. 그런 다음 데이터를 BloodHound 설치 환경에 업로드합니다. ImproHound는 BloodHound의 기본 Neo4j 데이터베이스에 연결됩니다. ImproHound에서 OU 구조를 통해 AD 개체를 계층별로 분류하면, AD 개체가 더 높은 계층(0에 가까운)의 개체를 손상시킬 수 있는 AD 관계를 식별하여 계층 위반 사항을 csv 파일에 저장합니다.
ImproHound DEF CON Adversary Village 발표
1. BloodHound 데이터베이스 설정
AD에서 SharpHound로 BloodHound 데이터 수집
참고: 이 작업은 AV, SIEM 등에 노이즈를 발생시킵니다.
예: cmd에서 SharpHound.exe 실행, 모든 항목 수집 (예, GPOLocalGroup은 All에 포함되지 않음):
SharpHound.exe --CollectionMethods All,GPOLocalGroup
팁 1:
Domain매개변수를 사용하여 포리스트의 다른 도메인에서 데이터를 수집하세요.
팁 2: 더 많은 데이터를 얻으려면 세션 루프 수집 방법을 사용하세요.
BloodHound GUI에 BloodHound 데이터 업로드
BloodHound에는 BloodHound 데이터 zip을 업로드할 때 도메인 json 파일이 건너뛰어지는 버그가 있습니다. 데이터 업로드 후 BloodHound의 DB 통계를 확인하여 도메인 개체가 존재하는지 확인하세요.
2. APOC Neo4j 플러그인 설치 (필요한 멋진 그래프 연산을 활성화합니다.)
Neo4j 버전과 일치하는 APOC 버전 다운로드 (apoc-x.x.x.x-all.jar).
버전 호환성 매트릭스에서 Neo4j 버전과 일치하는 APOC 버전을 찾으세요.
Neo4j를 설치한 위치를 기억하고 APOC jar 파일을 $NEO4J_HOME/plugins/ 아래에 배치하세요.
/var/lib/neo4j/선호하는 텍스트 편집기로 neo4j.conf를 편집하여 APOC에 대한 제한 없는 액세스를 허용합니다. 다음 줄을 바꾸세요:
#dbms.security.procedures.unrestricted=my.extensions.example,my.procedures.*
를
dbms.security.procedures.unrestricted=apoc.*
로 바꿉니다.
/etc/neo4j/neo4j.conf$NEO4J_HOME/conf/neo4j.conf한 호스트에서 ImproHound를 실행하고 다른 호스트에서 BloodHound를 실행하려면 BloodHound 호스트의 Neo4j 데이터베이스에 대한 원격 연결을 허용해야 합니다. 이렇게 하려면
neo4j.conf에서#dbms.default_listen_address=0.0.0.0줄의 #을 제거하세요.
3. Windows(x64)에서 최신 릴리스의 ImproHound.exe 다운로드 및 실행
BloodHound GUI에서 사용하는 것과 동일한 자격 증명으로 BloodHound DB에 로그인할 수 있는지 확인하세요.

데이터베이스 자격 증명을 입력하고 연결을 설정하세요. BloodHound GUI에서 사용하는 것과 동일한 자격 증명입니다.

ImproHound는 BloodHound 데이터베이스의 노드에 'TierX' 레이블을 생성합니다. 이 BloodHound 데이터베이스에서 이전에 ImproHound를 사용한 적이 있다면, 이미 생성한 계층 분류를 계속할지 아니면 다시 시작할지 묻는 메시지가 표시됩니다.

ImproHound는 '기본 계층 분류'를 설정하여 Domain Admins를 Tier 0, Domain Users를 Tier 2 등으로 설정하거나 모든 개체를 Tier 2로 설정하는 옵션을 제공합니다.

이 페이지에서 AD 개체를 계층별로 분류합니다. 창에는 OU 구조가 표시됩니다. 각 AD 개체에는 계층 값이 있으며 화살표로 값을 높이거나 낮출 수 있습니다.
자식 개체 계층 설정
도메인 또는 AD 컨테이너를 선택한 후 '자식 개체 계층 설정'을 클릭하면 모든 자식 개체(재귀적으로)가 해당 도메인/컨테이너의 계층 수준으로 설정됩니다.
멤버 계층 설정
그룹을 선택한 후 '자식 개체 계층 설정'을 클릭하면 모든 멤버(재귀적으로)가 해당 그룹의 계층 수준으로 설정됩니다.
GPO 계층 설정
'GPO 계층 설정'을 클릭하면 각 GPO의 계층 수준이 GPO가 연결된 OU 중 가장 높은 계층(0에 가까운)의 계층 수준으로 설정됩니다. OU에 연결되지 않은 GPO는 계층 수준이 변경되지 않습니다.
계층 위반 확인
BloodHound 데이터베이스에서 AD 개체가 더 높은 계층(0에 가까운)의 AD 개체를 제어하는 모든 관계를 찾습니다.
다음 두 개의 CSV 파일이 출력으로 생성됩니다.
위반 CSV의 레코드 예:
첫 번째 레코드는 Tier 0 사용자 계정의 비밀번호를 변경할 수 있는 권한이 있는 Tier 1 서비스 계정입니다. 관계는 상속됩니다. 불행히도 BloodHound 데이터에서 관계가 상속된 위치를 항상 확인할 수 있는 것은 아니지만, 사용자 및 컴퓨터에서 대상 AD 개체의 권한을 검사하여 수동으로 확인할 수 있습니다. 두 번째 레코드는 GPO를 편집할 수 있는 권한이 있는 그룹으로, Tier 0 GPO이므로 Tier 0 서버가 포함된 OU에 연결되어 있을 가능성이 높습니다.
모든 관계 유형과 이를 악용하는 방법은 여기에서 확인할 수 있습니다.
개체가 너무 높은 계층(0에 가까운)에 있는 것을 발견하면 ImproHound에서 이를 수정하고, 이 개체를 SOURCE로 하여 위반 사항을 확인해야 합니다. 개체가 너무 낮은 계층(무한대에 가까운)에 있는 경우 ImproHound에서 수정하고, 해당 개체를 TARGET으로 하여 위반 사항을 확인해야 합니다.
계층 분류 삭제
BloodHound 데이터베이스의 모든 계층 레이블과 ImproHound가 생성한 노드가 삭제됩니다.
AD 개체를 올바르게 계층 분류하는 것은 중요합니다. DC와 일반 권한이 낮은 사용자를 모두 Tier 0 개체로 설정하면, 사용자의 DC에 대한 관리자 액세스가 계층 위반이 아니라는 결과가 나옵니다. 마찬가지로 두 개체를 모두 Tier 2에 추가해도 동일합니다.
컴퓨터는 손상되었을 때의 중요도에 따라 계층이 분류됩니다.
사용자는 로그온할 수 있는 컴퓨터와 제어 권한이 있는 AD 개체에 따라 계층이 분류됩니다. 제어 권한의 예로는 Tier 1 서버에 연결된 GPO를 편집할 수 있는 사용자가 있으며, 이 사용자는 Tier 1 개체가 됩니다.
그룹은 멤버 중 가장 낮은 계층(무한대에 가까운)에 속합니다. 단, 그룹에 잘못된 멤버(예: Domain Admins의 일반 사용자)가 있는 경우는 예외입니다.
예: Domain Users는 Tier 2 그룹이지만, Tier 0 사용자가 그룹의 멤버인 경우에도 마찬가지입니다. 이는 Domain Users의 멤버십이 사용자에게 권한을 부여하는 것이 아니기 때문입니다. 반면 Domain Admins 그룹은 Tier 0 그룹입니다. 이 그룹의 멤버십이 사용자를 매우 권한 있는 상태로 만들기 때문입니다. _Cloneable Domain Controllers_는 AFAIK에 AD 권한이 없지만 Tier 0 개체(즉, DC)만 포함해야 하므로 Tier 0 그룹입니다.
컨테이너는 하위 개체 중 가장 높은 계층(0에 가까운)보다 같거나 높은 계층에 속합니다.
예: Users 컨테이너에 모든 Tier 0, Tier 1, Tier 2 사용자가 있습니다. Users 컨테이너에 대한 모든 권한이 있는 사용자는 Tier 0 사용자를 포함한 모든 사용자를 손상시킬 수 있으므로(일부 보호된 사용자는 제외되지만 예제에서는 중요하지 않음) Users 컨테이너는 Tier 0 개체여야 합니다.
GPO의 계층 수준은 GPO가 연결된 OU의 계층 수준에 의해 결정됩니다. GPO는 연결된 OU 중 가장 높은 계층(0에 가까운)에 속합니다. 'GPO 계층 설정' 버튼을 사용하여 모든 GPO가 이 원칙을 따르도록 하세요.
예: Tier 1 OU에 연결된 GPO를 편집할 수 있는 권한이 있는 사용자는 GPO를 수정하여 Tier 1 OU 아래의 모든 서버에서 Administrators의 멤버십을 제어할 수 있습니다.
Neo4j 재시작
systemctl restart neo4jnet stop neo4j && net start neo4j (PowerShell: net stop neo4j; net start neo4j)| SourceTier | SourceType | SourceName | SourceDistinguishedname | Relation | IsInherited | TargetTier | TargetType | TargetName | TargetDistinguishedname |
|---|
| Tier1 | User | [email protected] | CN=svc-monitor,CN=Users,DC=hot,DC=local | ForceChangePassword | True | Tier0 | User | [email protected] | CN=T0_JBK,CN=Users,DC=hot,DC=local |
| Tier2 | Group | [email protected] | CN=Wrk-Admins,CN=Groups,DC=hot,DC=local | GenericWrite | Tier0 | GPO | [email protected] | CN={6AC1786C-016F-11D2-945F-00C04fB984F9},CN=Policies,CN=System,DC=hot,DC=local |