LDAP/SMB/Kerberos 열거, 공격 그래프 경로 탐색, Kerberoasting, NTLM 릴레이, 티켓 위조, DCSync, 보고를 하나의 정적 바이너리로 제공하는 올-Rust Active Directory 익스플로잇 프레임워크.
Active Directory 익스플로잇 프레임워크.
모든 왕좌는 무너진다. Overthrone이 그것을 확실히 해준다.
이것은 무엇인가 · 설치 · 워드리스트 · 명령어 · 마법사 사용법 · 아키텍처 · 기능 · 예제 · FAQ
중세 전쟁에서 성을 함락하려면 공성 기술자, 정찰병, 기병, 궁수, 공병, 그리고 내부에서 성문을 열어줄 누군가가 필요했다는 것을 알고 있을 것이다. Active Directory 모의해킹도 정확히 그와 같다. 단지 성이 포춘 500대 기업이고, 성문이 잘못 구성된 그룹 정책이며, "내부의 누군가"가 Windows Server 2008이 현대적이라고 여겨지던 시절부터 한 번도 교체되지 않은 Password123! 비밀번호를 가진 서비스 계정일 뿐이다.
Overthrone은 전체 킬 체인을 처리하는 전방위 AD 레드팀 프레임워크다. "네트워크 접근 권한과 꿈이 있다"에서 시작해 "이 포레스트의 모든 도메인을 장악했고 이를 증명하는 47페이지 PDF가 여기 있다"에 이르기까지. Rust로 만들어진 이유는 C2 프레임워크도 메모리 안전성을 누릴 자격이 있기 때문이며, 모의해킹 중 use-after-free 버그를 디버깅하는 것이 어떻게 신뢰 문제(Active Directory 종류와 개인적 종류 모두)를 키우는지 알기 때문이다.
이것은 스캐너가 아니다. "Mimikatz를 Rust로 실행하는" 도구도 아니다. 이상하게 쳐다보면 깨지는 또 하나의 Python 래퍼도 아니다. 이것은 완전한 공성 엔진이다. 단일 바이너리. 최소한의 런타임 의존성*. 모든 후회(블루팀의 몫).
축약형: 모든 명령어는
overthrone과ovt둘 다로 작동한다. 3글자로 될 일을 10글자 타이핑할 만큼 인생이 길지 않기 때문이다.ovt wizard=overthrone wizard. Active Directory에 대한 동일한 전쟁 범죄, 더 적은 키 입력.
⚠️ 지원 중단 공지: 이전 베타의
ovt auto-pwn명령어는 제거되었고ovt wizard로 대체되었다. 근육 기억이 여전히auto-pwn을 입력한다면 걱정하지 마라 - 손가락이 적응할 것이다. 마법사는 auto-pwn이 성장했을 때 항상 되고 싶어 했던 것이다: 대화형, 재개 가능, Q-learning 최적화, 그리고 단계별 일시정지/승인 기능으로 데모 중에 실수로 DCSync하는 일이 없도록 해준다.
*바이너리는 약 35개의 Rust 크레이트(Tokio, ldap3, kerberos_asn1 등)와 정적으로 링크되어 있다 - Python도, .NET도, JVM도 없다. SMB 파일 작업, smbclient 스타일 셸(ovt smb shell), RPC(ovt rpc, rpcclient 명령어 세트) 및 원격 실행은 모두 내장된 순수 Rust SMB2 클라이언트에서 실행된다. 외부 smbclient 바이너리는 내장 클라이언트가 협상할 수 없는 호스트에서 최후의 수단 폴백으로만 사용된다.
sequenceDiagram
participant Op as Operator
participant CLI as overthrone-cli
participant PILOT as overthrone-pilot
participant REAPER as overthrone-reaper
participant HUNTER as overthrone-hunter
participant FORGE as overthrone-forge
participant CORE as overthrone-core
participant DC as Domain Controller
Note over Op,DC: Phase 0: Initial Access (T1078)
Op->>CLI: ovt enum / scan / kerberos commands
CLI->>CORE: TCP/TLS connect to target
Note over CLI,DC: Phase 1: Discovery & Enumeration (T1087, T1069, T1482)
CLI->>REAPER: enum_all(target, domain, credentials)
REAPER->>CORE: LDAP bind + paginated search
CORE->>DC: LDAP query (port 389/636)
DC-->>CORE: RootDSE + namingContexts
CORE->>DC: Search base DN: users, groups, computers
DC-->>CORE: LDAP entries with attributes
CORE-->>REAPER: Structured ADData
Note over REAPER: Enrich: LAPS v1/v2 decrypt, GPP decrypt,<br/>Snaffler share crawl, ADCS template scan
REAPER-->>CLI: ADData { users, groups, trusts, ACLs,<br/>GPOs, LAPS, SPNs, delegations }
Note over CLI,DC: Phase 2: Attack Graph Analysis (TA0007)
CLI->>CORE: build_graph(ADData)
CORE->>CORE: petgraph DiGraph construction<br/>30+ edge types with weighted costs
CORE->>CORE: Reverse Dijkstra from Domain Admins
CORE-->>CLI: AttackGraph + shortest paths to goal
Note over CLI: Output: Path from current position to DA,<br/>broken down hop-by-hop with technique
Note over CLI,DC: Phase 3: Credential Access (T1558, T1110)
CLI->>HUNTER: kerberoast(SPN accounts)
HUNTER->>CORE: TGS-REQ for each SPN
CORE->>DC: TCP:88 → Kerberos TGS exchange
DC-->>CORE: TGS-REP with encrypted ticket
CORE-->>HUNTER: ServiceTicket hash (etype 17/18/23)
HUNTER->>HUNTER: Offline crack: embedded wordlist +<br/>rayon parallel + rule engine
HUNTER-->>CLI: CrackedCredentials
CLI->>HUNTER: password_spray(userlist, candidates)
HUNTER->>CORE: Kerberos AS-REQ for each user
CORE->>DC: pre-auth attempt (TCP:88)
DC-->>CORE: KDC error or success
CORE-->>HUNTER: SprayResult { valid, locked, exists }
HUNTER-->>CLI: SprayResults with lockout-safe delay