Impacket의 완전한 Go 포팅 - Windows 및 Active Directory 프로토콜 공격을 위한 63개의 CLI 도구와 24개의 라이브러리로, 의존성 없는 단일 바이너리로 컴파일됩니다.
작성자: Jacob Paullus (@psycep_)
Impacket의 완전한 Go 구현 - Windows 네트워크 프로토콜 상호작용, Active Directory 열거, 공격 실행을 위한 63개 도구와 24개 라이브러리 패키지. 네이티브 Go 프레임워크로 제작되어 한 번 컴파일하면 Python 의존성 없이 어디서든 실행할 수 있습니다.
베타 릴리스 - 고도로 실험적. gopacket은 활발히 개발 중입니다. 핵심 도구들은 Active Directory 랩 환경에서 테스트되었지만, 엣지 케이스와 프로토콜 특이사항은 예상되는 부분입니다. 무언가 작동하지 않는다면, 동일한 작업을 Impacket으로 나란히 테스트하고 두 출력을 모두 버그 리포트에 포함해 주세요. 이는 gopacket 특유의 문제인지 공유된 프로토콜 한계인지 빠르게 식별하는 데 도움이 됩니다.
git clone https://github.com/mandiant/gopacket
cd gopacket
# Default: Linux/macOS build + install to /usr/local/bin
./install.sh
# Run with no flags and it prompts you through the choices interactively.
# Or pick a target directly:
./install.sh --target portable # static Linux binaries in ./dist/portable/
./install.sh --target windows # Windows .exe cross-compiles in ./dist/windows/
./install.sh --target all # build every target in one run
# Build without installing (native only)
./install.sh --build-only
# Or build with make
make build
기본(--target native) 빌드는 Go 1.24.13+, GCC, libpcap 개발 헤더가 필요합니다 (Debian/Ubuntu/Kali에서는 apt install build-essential libpcap-dev, RHEL/CentOS에서는 yum install gcc libpcap-devel, macOS에서는 brew install libpcap). portable 및 windows 타겟은 Go 툴체인만 필요합니다. 해당 빌드에서는 libpcap이 필요하기 때문에 sniff와 split이 스텁이 됩니다. 전체 매트릭스는 플랫폼 지원을 참조하세요.
gopacket은 Linux, macOS, Windows에서 빌드됩니다. 작동하는 도구 세트와 사용 가능한 프록시 경로는 빌드 플래그에 따라 달라집니다:
| 빌드 | 사용 가능한 도구 | 프록시 |
|---|---|---|
| Linux / macOS with cgo (기본) | 전체 63개 | proxychains (LD_PRELOAD) 및/또는 -proxy SOCKS5 |
Linux with CGO_ENABLED=0 | 61개 (sniff, split은 스텁) | -proxy만 (proxychains는 libc 훅 필요) |
Windows (GOOS=windows CGO_ENABLED=0) | 60개 (sniff, split, sniffer 스텁) | -proxy만 (Windows에는 LD_PRELOAD 없음) |
sniff와 split은 cgo를 통해 libpcap에 의존하고, sniffer는 Unix raw 소켓에 의존합니다. 타겟용으로 도구를 빌드할 수 없을 때, gopacket은 명확한 메시지를 출력하고 종료 코드 1로 종료하는 스텁을 대체하므로 go build ./...는 항상 성공하고 설치 레이아웃은 플랫폼 간 일관성을 유지합니다.
제거하려면:
./install.sh --uninstall
gopacket은 두 가지 독립적인 프록시 경로를 지원합니다. 이들은 체이닝도 가능합니다.
모든 gopacket 도구는 proxychains를 통해 작동합니다. Go 바이너리는 일반적으로 proxychains를 우회합니다. Go 런타임이 DNS와 네트워킹을 내부적으로 처리하여 proxychains가 의존하는 LD_PRELOAD 훅을 건너뛰기 때문입니다. gopacket은 네트워크 작업을 위해 시스템 C 라이브러리에 링크함으로써 이를 우회하여 proxychains가 정상적으로 연결을 가로챌 수 있게 합니다.
proxychains gopacket-secretsdump 'domain/user:password@target'
proxychains gopacket-smbclient -k -no-pass 'domain/[email protected]'
-proxy)모든 도구는 LD_PRELOAD에 의존하지 않고 SOCKS5 서버를 통해 아웃바운드 TCP를 라우팅하는 -proxy를 허용합니다. 허용되는 스킴: socks5 및 socks5h. -proxy가 설정되지 않은 경우, ALL_PROXY / all_proxy 환경 변수가 폴백으로 참조됩니다.
gopacket-secretsdump -proxy socks5h://127.0.0.1:1080 'domain/user:password@target'
ALL_PROXY=socks5h://127.0.0.1:1080 gopacket-smbclient 'domain/user:password@target'
UDP 의존 기능은 -proxy 하에서 비활성화됩니다. 패킷을 조용히 유출하는 대신 말이죠 (SOCKS5 UDP ASSOCIATE는 프록시에서 거의 지원되지 않으며, UDP에 대해 프록시를 우회하면 운영자의 실제 소스 IP가 노출됩니다). 영향을 받는 기능과 그 우회 방법은 KNOWN_ISSUES.md에 문서화되어 있습니다.
체이닝: -proxy는 proxychains와 호환됩니다. SOCKS5 프록시 자체에 대한 TCP 연결은 여전히 libc connect()를 통해 이루어지므로, proxychains → gopacket → -proxy → target은 중첩 라우팅 시나리오에서 작동합니다.
gopacket의 24개 프로토콜 패키지 위에 사용자 정의 도구를 구축하기 위한 전체 API 문서, 코드 예제, 아키텍처 개요는 라이브러리 개발자 가이드를 참조하세요.
| 도구 | 설명 |
|---|---|
| psexec | SMB 서비스 생성을 통한 원격 명령 실행 |
| smbexec | SMB를 통한 원격 명령 실행 (psexec보다 은밀함) |
| wmiexec | WMI를 통한 원격 명령 실행 |
| dcomexec | DCOM을 통한 원격 명령 실행 |
| atexec | 작업 스케줄러를 통한 원격 명령 실행 |
| 도구 | 설명 |
|---|---|
| secretsdump | SAM/LSA/NTDS.dit 추출 및 DCSync (원격 + 오프라인) |
| dpapi | DPAPI 백업 키 추출 |
| esentutl | 오프라인 ESE 데이터베이스 파서 (NTDS.dit) |
| registry-read | 오프라인 Windows 레지스트리 하이브 파서 |
| 도구 | 설명 |
|---|---|
| getTGT | 비밀번호, 해시 또는 AES 키로 TGT 요청 |
| getST | S4U2Self/S4U2Proxy로 서비스 티켓 요청 |
| GetUserSPNs | Kerberoasting - SPN 찾기 및 요청 |
| GetNPUsers | AS-REP roasting - 사전 인증 없는 계정 찾기 |
| ticketer | 골든/실버 티켓 위조 |
| ticketConverter | ccache와 kirbi 형식 간 변환 |
| describeTicket | Kerberos 티켓 파싱 및 복호화 |
| getPac | PAC 정보 요청 및 파싱 |
| keylistattack | KERB-KEY-LIST-REQ 공격 (RODC) |
| raiseChild | 골든 티켓을 통한 자식-부모 도메인 권한 상승 |
| 도구 | 설명 |
|---|---|
| GetADUsers | LDAP를 통한 도메인 사용자 열거 |
| GetADComputers | LDAP를 통한 도메인 컴퓨터 열거 |
| GetLAPSPassword | LDAP를 통한 LAPS 비밀번호 읽기 |
| findDelegation | 위임 구성 찾기 |
| lookupsid | LSARPC를 통한 SID 브루트포싱 |
| samrdump | SAMR을 통한 사용자 열거 |
| rpcdump | epmapper를 통한 RPC 엔드포인트 덤프 |
| rpcmap | 접근 가능한 RPC 인터페이스 스캔 |
| net | SAMR/LSARPC를 통한 net user/group/computer 열거 |
| netview | 세션, 공유, 로그온한 사용자 열거 |
| CheckLDAPStatus | LDAP 서명 및 채널 바인딩 요구사항 확인 |
| DumpNTLMInfo | SMB 협상에서 NTLM 인증 정보 덤프 |
| getArch | RPC를 통한 원격 OS 아키텍처 감지 |
| machine_role | 머신 역할 감지 (DC, 서버, 워크스테이션) |
| 도구 | 설명 |
|---|---|
| addcomputer | 머신 계정 생성/수정/삭제 (SAMR + LDAP) |
| rbcd | 리소스 기반 제약 위임 조작 |
| dacledit | AD 객체의 DACL 읽기/쓰기 |
| owneredit | 객체 소유권 읽기/수정 |
| samedit | SAM 계정 이름 스푸핑 (CVE-2021-42278/42287) |
| badsuccessor | BadSuccessor / 백업 운영자 권한 상승 |
| changepasswd | SAMR 및 LDAP를 통한 비밀번호 변경/재설정 |
| 도구 | 설명 |
|---|---|
| smbclient | 대화형 SMB 클라이언트 (공유, ls, get, put 등) |
| smbserver | 파일 공유용 SMB 서버 |
| attrib | SMB를 통한 파일 속성 조회/수정 |
| filetime | SMB를 통한 파일 타임스탬프 조회/수정 |
| services | SVCCTL을 통한 원격 서비스 관리 |
| reg | WINREG를 통한 원격 레지스트리 작업 |
| Get-GPPPassword | SYSVOL에서 그룹 정책 기본 설정 비밀번호 추출 |
| karmaSMB | 해시 캡처용 악성 SMB 서버 |
| 도구 | 설명 |
|---|---|
| ntlmrelayx | 다중 프로토콜 지원을 갖춘 완전한 NTLM 릴레이 프레임워크 |
ntlmrelayx 지원:
| 도구 | 설명 |
|---|---|
| mssqlclient | SQL/Windows/Kerberos 인증을 지원하는 대화형 MSSQL 클라이언트 |
| mssqlinstance | SQL Browser를 통한 MSSQL 인스턴스 검색 |
| 도구 | 설명 |
|---|---|
| wmiquery | 대화형 WMI 쿼리 셸 |
| wmipersist | WMI 이벤트 구독 지속성 |
| 도구 | 설명 |
|---|---|
| tstool | 터미널 서비스 세션 및 프로세스 열거 |
| 도구 | 설명 |
|---|---|
| rdp_check | RDP 인증 확인 |
| mqtt_check | MQTT 인증 확인 |
| exchanger | Exchange Web Services 클라이언트 |
| 도구 | 설명 |
|---|---|
| ntfs-read | 오프라인 NTFS 파일시스템 파서 |
| ping / ping6 | ICMP ping |
| sniff / sniffer | 네트워크 패킷 캡처 |
| split | 대용량 파일 분할 |
모든 네트워크 도구는 세 가지 인증 방법을 지원합니다:
# Password
gopacket-secretsdump 'domain/user:password@target'
# NTLM hash (pass-the-hash)
gopacket-secretsdump -hashes ':nthash' 'domain/user@target'
# Kerberos (pass-the-ticket)
KRB5CCNAME=ticket.ccache gopacket-secretsdump -k -no-pass 'domain/user@target'