
대상 시스템에서 Kerberos TGT를 자동으로 추출하거나 갱신하는 Async BOF입니다.
이 저장소에는 두 개의 Async Beacon Object File(BOF)이 포함되어 있습니다. 첫 번째인 tgt-monitor는 시스템에서 Kerberos 로그온 이벤트를 모니터링하고, 새로운 Kerberos TGT가 캡처될 때마다 에이전트를 깨웁니다. Rubeus의 monitor 명령과 유사하게 이 BOF는 무기한 실행되며 주기적으로 시스템의 LSA 티켓 캐시를 확인합니다. 새 TGT가 감지되면 티켓 메타데이터를 출력하고 base64로 인코딩된 kirbi blob을 내보내어 패스-더-티켓 공격을 통한 횡적 이동에 사용할 수 있습니다. 두 번째인 tgt-renew는 시스템에서 TGT의 남은 수명이 지정된 임계값(예: 15분)보다 낮을 경우 자동으로 갱신합니다.
[!Important] 이 저장소의 BOF는 비동기 오브젝트 파일 로딩 기능이 필요합니다. 이러한 기능은 Conquest 프레임워크에서 제공됩니다.
두 BOF 모두 NT AUTHORITY\SYSTEM 컨텍스트에서 실행되어야 합니다. 권한은 동일한 논리로 확인됩니다.
SeImpersonatePrivilege를 사용하여 SYSTEM 토큰을 탈취한 낮은 무결성의 에이전트 프로세스에서도 사용할 수 있습니다. 이 방법으로도 SYSTEM 수준 액세스 권한을 얻지 못하면 BOF가 종료됩니다.아래 단계는 중지 이벤트로 BOF가 취소될 때까지 루프에서 반복됩니다. 사용자 정의 간격이 폴링 간 지연 시간을 설정합니다.
--user 인수가 제공된 경우 해당 사용자 이름과 일치하는 세션만 고려됩니다.BeaconWakeup() 호출이 이루어져 에이전트가 체크인하고 출력을 반환하도록 합니다.
--user 인수가 제공된 경우 해당 사용자 이름과 일치하는 세션만 고려됩니다.RenewUntil 시간이 지난 경우 만료된 것으로 표시되고 재인증이 필요합니다.BeaconWakeup() 호출이 이루어집니다.
티켓 갱신 과정은 다음 단계를 포함합니다:
ExtractTicket()를 통해 ASN.1로 인코딩된 Kerberos TGT를 추출합니다.이 저장소에는 다음 두 명령을 구현하는 Conquest 모듈이 포함되어 있습니다.
tgt-monitor BOF는 새 TGT가 캡처되면 알리고 Base64로 인코딩된 blob으로 반환합니다. 오브젝트 파일에 다음 인수를 전달해야 합니다.
| 이름 | 타입 | 설명 |
|---|---|---|
interval | int | 검사 사이의 시간 초과(초 단위). |
targetUsers | string | 대상 사용자 이름의 대소문자 구분 없는 쉼표로 구분된 목록. 이 필드가 설정되면 지정된 사용자의 TGT만 검색됩니다. 그렇지 않으면 모든 사용자의 TGT가 수집됩니다. 컴퓨터 계정은 로 끝나야 합니다. |
Usage: tgt-monitor [--interval interval] [--user user]
Example: tgt-monitor --interval 5 --user DC01$
Optional arguments:
--interval interval INT Polling interval in seconds (default: 60).
--user user STRING Comma-separated list of target usernames (default: all users).

인코딩된 티켓은 Rubeus.exe ptt /ticket:<base64> 또는 impacket-ticketConverter와 함께 직접 사용하여 추가 횡적 이동을 수행할 수 있습니다(아래 스크린샷 참조). Conquest에서는 ptt 명령을 사용하여 티켓을 현재 로그온 세션에 직접 주입하여 대상 사용자를 가장할 수 있습니다.

tgt-renew BOF는 곧 만료되는 티켓을 더 이상 갱신할 수 없을 때까지 자동으로 갱신합니다. 오브젝트 파일에 다음 인수를 전달해야 합니다.
Usage: tgt-renew [--interval seconds] [--threshold minutes] [--user user] [--luid luid]
Example: tgt-renew --luid 0x3e4 --interval 300 --threshold 30
Optional arguments:
--interval seconds INT Polling interval in seconds (default: 60).
--threshold minutes INT Ticket renewal threshold in minutes (default: 15).
--user user STRING Comma-separated list of target usernames (default: all users).
--luid luid STRING Comma-separated list of target LUIDs (default: all LUIDs).
--user와 --luid 플래그는 상호 배타적입니다.

git clone https://github.com/jakobfriedl/tgt-monitor-bof
cd tgt-monitor-bof
make
그런 다음 Conquest의 스크립트 관리자를 사용하여 dist/tgt-monitor.py 모듈을 로드합니다.
이 Beacon Object File의 구현은 다음 프로젝트를 기반으로 합니다:
$| 이름 | 타입 | 설명 |
|---|
interval | int | 검사 사이의 시간 초과(초 단위). |
threshold | int | 갱신 임계값(분 단위). EndTime까지의 시간이 이 임계값보다 낮으면 티켓이 갱신됩니다. |
targetUsers | string | 대상 사용자 이름의 대소문자 구분 없는 쉼표로 구분된 목록. 이 필드가 설정되면 지정된 사용자의 TGT만 갱신됩니다. 그렇지 않으면 모든 사용자의 TGT가 갱신됩니다. 컴퓨터 계정은 $로 끝나야 합니다. |
targetLuids | string | 대상 LUID의 대소문자 구분 없는 쉼표로 구분된 목록. 이 필드가 설정되면 지정된 LUID의 TGT만 갱신됩니다. |