
수집 수집 수집
수집 수집 수집

Jackdaw는 도메인의 모든 정보를 수집하여 SQL 데이터베이스에 저장하고, 도메인 객체들이 서로 어떻게 상호작용하는지, 그리고 잠재적인 공격자가 이러한 상호작용을 어떻게 악용할 수 있는지에 대한 멋진 그래프를 보여줍니다. 또한 해시/비밀번호/사용자를 저장/조회/보고하여 암호 크래킹 프로젝트를 지원하는 편리한 기능도 제공합니다.
dbinit을 통해 초기 빈 데이터베이스를 생성해야 합니다.enum을 수행해야 합니다. Windows에서는 실행 파일을 더블 클릭하거나 jackdaw.exe auto를 입력하여 자동으로 수행할 수 있습니다.nest를 실행해야 합니다. 기본적으로 http://127.0.0.1:5000/nest에서 제공되며, http://127.0.0.1:5000/ui에서 SWAGGER 문서화된 API를 확인할 수 있습니다.Generate graph cache를 한 번만 클릭하면 캐시 파일에 엣지 정보가 저장됩니다. 시간이 다소 걸릴 수 있지만 명령줄에서 진행률 표시줄을 볼 수 있습니다.graph view에서 그래프를 탐색할 수 있지만, 왼쪽 상단에서 올바른 캐시 번호를 선택하는 것을 잊지 마세요.이 섹션은 사용자 피드백에 따라 정기적으로 업데이트됩니다.
여기서 조언할 것은 없습니다. 코드 개선이 가능하지만 일반적인 사용자가 할 수 있는 것은 없습니다.
그래프 데이터 캐시 파일 생성은 각 그래프에 대해 한 번만 수행해야 하며, 기본 sqlalchemy 도구를 사용하면 시간이 오래 걸릴 수 있습니다.
성능과 속도는 sqlite 백엔드를 사용하고 "sqlite3" 명령줄 유틸리티를 PATH에 추가하면 크게 향상될 수 있습니다(속도 50배 이상, 메모리 20배 절약). 모든 사용자에게 이 방법을 추천합니다.
이제 큰 트레이드오프 부분입니다. 초기 Jackdaw는 순수 Python으로 작성된 networkx 모듈을 그래프 백엔드로 사용했습니다. 하지만 이는 상당한 메모리와 속도 비용을 초래했습니다. Jackdaw를 순수 Python으로 유지하려면 이 옵션도 여전히 존재하지만, 현재는 igraph 백엔드를 사용하는 것이 기본값입니다.
참고: igraph는 Python 바인딩이 있는 C++ 라이브러리입니다. Windows와 주요 Linux 배포판용으로 미리 컴파일된 wheel이 제공되지만, 다른 환경(임베디드 시스템/모바일 폰/웹 브라우저)에서 Jackdaw를 사용하는 경우 networkx로 전환하거나 긴 컴파일 시간을 감수해야 합니다.
데이터베이스를 미리 초기화할 필요가 없습니다. 자동으로 수행됩니다.
배포된 바이너리를 사용하면 jackdaw.exe를 더블 클릭하기만 하면 됩니다.
Python 스크립트로 사용하는 경우 jackdaw auto
jackdaw --sql sqlite:///<전체 경로>/test.db dbinit
Linux 시스템에서 <전체 경로>는 첫 번째 /를 포함하므로 파일 이름 앞에 //// 네 개의 슬래시가 생깁니다. 놀라지 마세요.
jackdaw --sql sqlite:///test.db enum 'ldap+sspi-ntlm://<도메인>\<자리표시자>@10.10.10.2' 'smb+sspi-ntlm://<도메인>\<자리표시자>@10.10.10.2'
비밀번호는 Passw0rd!입니다.
jackdaw --sql sqlite:///test.db enum 'ldap+ntlm-password://TEST\victim:[email protected]' 'smb+ntlm-password://TEST\victim:[email protected]'
비밀번호는 Passw0rd!입니다.
jackdaw --sql sqlite:///test.db ldap 'ldap+ntlm-password://TEST\victim:[email protected]'
jackdaw --sql sqlite:///<DB 전체 경로> nest
API를 보려면 http://127.0.0.1:5000/ui를 여세요.
UI를 빌드하는 방법을 알아보려면 아래 Building the UI 섹션을 참조하세요. 빌드가 완료되면:
그래프 인터페이스를 보려면 http://127.0.0.1:5000/nest를 여세요(그래프를 표시하지만 완전히 작동하지는 않습니다).
LDAP 열거 단계에서는 AD 정보, 사용자, 컴퓨터, OU, 그룹 객체에 대한 데이터를 수집하며, 이는 그래프의 노드이자 DB의 별도 테이블로 표시됩니다. 또한 앞서 언급한 모든 객체의 보안 설명자(Security Descriptor)가 구문 분석되어 DACL의 ACL이 DB에 추가됩니다. 이는 멤버십 정보와 함께 그래프의 엣지로 표시됩니다. 또한 필요에 따라 위의 모든 데이터 유형에 대해 사용자 정의 SQL 쿼리를 수행할 수 있습니다.
SMB 열거 단계에서는 도메인의 각 컴퓨터(LDAP을 통해 수집)에 연결하여 공유, 로컬 그룹, 세션, NTLM 데이터를 수집합니다.
Kerberos 모듈은 자동 kerberoasting 및 aspreproasting을 수행합니다.
프레임워크는 사용자가 LSASS 메모리 덤프를 업로드하여 자격 증명을 저장하고 세션 정보 테이블을 확장할 수 있도록 합니다. 둘 다 그래프에서 추가 엣지로 사용됩니다(각각 공유 비밀번호 및 세션). 프레임워크는 또한 이 정보를 사용하여 취약/공유/크래킹된 자격 증명에 대한 비밀번호 보고서를 생성합니다.
프레임워크는 사용자가 impacket의 DCSYNC 파일을 업로드하여 자격 증명을 저장할 수 있도록 합니다. 이는 그래프에서 추가 엣지(공유 비밀번호)로 사용됩니다. 프레임워크는 또한 이 정보를 사용하여 취약/공유/크래킹된 자격 증명에 대한 비밀번호 보고서를 생성합니다.
프레임워크는 모든 측면에서 DB를 수동으로 확장할 수 있습니다. 예: 특정 컴퓨터의 사용자 세션 정보가 (자동 열거 외부에서) 발견되면 이 세션을 수동으로 업로드할 수 있으며, 그러면 DB와 결과 그래프가 채워집니다.
프레임워크는 데이터베이스의 사용 가능한 정보를 사용하여 그래프를 생성하고 웹 UI(nest)를 통해 플롯할 수 있습니다. 또한 그래프 생성 및 경로 계산은 웹 API(/ui 엔드포인트) 또는 그래프 객체의 함수를 사용하여 프로그래밍 방식으로 호출할 수 있습니다.
프레임워크는 그래프 생성 없이 일반적인 AD 오구성을 식별할 수 있습니다. 현재는 웹 API를 통해서만 가능합니다.
사용자 이상 징후 탐지에는 안전하지 않은 UAC 권한 및 광범위한 사용자 설명 값 탐지가 포함됩니다. 이 기능 세트는 향후 새로운 기능이 구현됨에 따라 확장될 예정입니다.
컴퓨터 이상 징후 탐지에는 안전하지 않은 UAC 권한, 필수가 아닌 SMB 서명, 오래된 OS 버전, 도메인에서 벗어난 컴퓨터 탐지가 포함됩니다. 이 기능 세트는 향후 새로운 기능이 구현됨에 따라 확장될 예정입니다.
프레임워크는 크래킹을 수행하지 않으며, 해시와 크래킹 결과를 정리만 합니다.
현재 주요 초점은 impacket 및 aiosmb의 dcsync 결과(!NT 및 LM 해시만)에 맞춰져 있습니다.
샘플 프로세스는 다음과 같습니다:
작성자 메모: 이 기능은 공격자와 방어자 모두를 위해 구현되었습니다. 개인적으로 어느 쪽에도 큰 가치가 없다고 생각합니다. 사용자의 NT 해시를 획득한 시점에서는 비밀번호와 동일하기 때문입니다... 그럼에도 불구하고 점점 더 많은 회사에서 비밀번호 강도 연습을 수행하고 있으며, 이 기능이 도움이 될 것입니다. 공격자에게는: 현재로서는 과시에 불과하지만, 마음대로 하세요. 추가 점수를 위해 관리자를 놀라게 할 수도 있습니다.
이 프로젝트는 실험 단계에 있습니다! 이는 여러 가지를 의미합니다:
Jackdaw는 SQLAlchemy ORM 모듈을 사용하므로 원하는 SQL DB 백엔드를 선택할 수 있습니다. 테스트는 주로 SQLite에서 수행됩니다(명백한 이유로). 이 프로젝트에서는 사용자를 제한하는 백엔드별 명령이 사용되지 않습니다.
이것은 GIT을 통해 설치하거나 UI 코드에서 무언가를 변경하는 경우에만 필요합니다.
UI는 React로 작성되었습니다. 처음 사용/설치하기 전에 빌드해야 합니다. 이를 위해 nodejs와 npm이 설치되어 있어야 합니다. 그런 다음:
jackdaw/nest/site/nui로 이동합니다.npm install을 실행합니다.npm run build를 실행합니다.위 과정이 완료되면 UI를 사용할 준비가 됩니다.
"내가 더 멀리 볼 수 있었다면 그것은 거인의 어깨 위에 서 있었기 때문입니다."
BloodHound team
@dirkjanm (https://github.com/dirkjanm/)
Zsolt Imre (https://github.com/keymandll)
aiosmb 및 msldap 모듈의 감사 인사 섹션을 참조하세요.