Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
tgt-monitor-bof — 대상 시스템에서 Kerberos TGT를 자동으로 추출하거나 갱신하는 Async BOF입니다. | Kitploit
도구/GitHubGitHub/jakobfriedl/tgt-monitor-bof
Lateral MovementPost-ExploitationPenetration TestingAuthenticationRed TeamingPayload Development
GitHubjakobfriedl/tgt-monitor-bof

tgt-monitor-bof

대상 시스템에서 Kerberos TGT를 자동으로 추출하거나 갱신하는 Async BOF입니다.

저장소 보기
1341041개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Kerberos TGT 모니터링 및 자동 갱신

이 저장소에는 두 개의 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 프레임워크에서 제공됩니다.

  • Kerberos TGT 모니터링 및 자동 갱신
    • 작동 방식
      • 티켓 모니터링
      • 티켓 갱신
    • 사용법
      • tgt-monitor
      • tgt-renew
    • 설치
    • 감사의 말

작동 방식

두 BOF 모두 NT AUTHORITY\SYSTEM 컨텍스트에서 실행되어야 합니다. 권한은 동일한 논리로 확인됩니다.

  1. BOF는 현재 프로세스 토큰에서 SYSTEM 액세스 권한을 확인합니다.
  2. 프로세스 토큰이 SYSTEM이 아닌 경우, BOF는 현재 프로세스의 모든 스레드에서 SYSTEM 권한이 있는 가장 토큰을 스캔하여 복제합니다. 이를 통해 SeImpersonatePrivilege를 사용하여 SYSTEM 토큰을 탈취한 낮은 무결성의 에이전트 프로세스에서도 사용할 수 있습니다. 이 방법으로도 SYSTEM 수준 액세스 권한을 얻지 못하면 BOF가 종료됩니다.
  3. LSA 및 Kerberos 인증 패키지 핸들을 검색합니다.

아래 단계는 중지 이벤트로 BOF가 취소될 때까지 루프에서 반복됩니다. 사용자 정의 간격이 폴링 간 지연 시간을 설정합니다.

티켓 모니터링

  1. 모든 활성 로그온 세션이 열거됩니다. 각 세션에 대해 Kerberos 티켓 캐시를 쿼리하고 TGT로 필터링합니다. --user 인수가 제공된 경우 해당 사용자 이름과 일치하는 세션만 고려됩니다.
  2. 현재 티켓 캐시를 이전 스냅샷과 비교합니다. 새 TGT가 감지되면 메타데이터 출력 및 base64로 인코딩된 kirbi 출력이 트리거된 후 BeaconWakeup() 호출이 이루어져 에이전트가 체크인하고 출력을 반환하도록 합니다.

워크플로 TGT 모니터

티켓 갱신

  1. 모든 활성 로그온 세션이 열거됩니다. 각 세션에 대해 Kerberos 티켓 캐시를 쿼리하고 TGT로 필터링합니다. --user 인수가 제공된 경우 해당 사용자 이름과 일치하는 세션만 고려됩니다.
  2. 각 TGT는 두 가지 조건에 대해 확인됩니다.
    • 티켓의 RenewUntil 시간이 지난 경우 만료된 것으로 표시되고 재인증이 필요합니다.
    • 티켓의 남은 수명이 사용자 정의 임계값 이내인 경우 TGT가 갱신되고 가져와집니다. 성공하면 업데이트된 티켓 메타데이터와 base64로 인코딩된 kirbi 출력이 출력된 후 BeaconWakeup() 호출이 이루어집니다.

워크플로 TGT 갱신

티켓 갱신 과정은 다음 단계를 포함합니다:

  1. PTICKET_ENTRY 구조체의 LUID와 SPN을 사용하여 ExtractTicket()를 통해 ASN.1로 인코딩된 Kerberos TGT를 추출합니다.
  2. ASN.1 디코딩하여 티켓을 해독하고 Kerberos 자격 증명을 검색합니다.
  3. 만료되는 티켓을 사전 인증에 사용하여 티켓 갱신을 요청하는 TGS-REQ 패킷을 생성합니다.
  4. TGS-REQ 바이트를 포트 88의 도메인 컨트롤러로 전송합니다.
  5. TGS-REP 응답을 수신, ASN.1 디코딩 및 파싱합니다.
  6. 갱신된 티켓을 빌드하고, 캐시에서 이전 티켓을 제거한 후 Pass-the-Ticket을 사용하여 갱신된 티켓을 가져옵니다.
  7. PTICKET_ENTRY 구조체의 startTime, endTime, renewUntil, ticketFlags 및 encryptionType을 업데이트하고, 티켓 정보 및 base64를 출력합니다.

사용법

이 저장소에는 다음 두 명령을 구현하는 Conquest 모듈이 포함되어 있습니다.

tgt-monitor

tgt-monitor BOF는 새 TGT가 캡처되면 알리고 Base64로 인코딩된 blob으로 반환합니다. 오브젝트 파일에 다음 인수를 전달해야 합니다.

이름타입설명
intervalint검사 사이의 시간 초과(초 단위).
targetUsersstring대상 사용자 이름의 대소문자 구분 없는 쉼표로 구분된 목록. 이 필드가 설정되면 지정된 사용자의 TGT만 검색됩니다. 그렇지 않으면 모든 사용자의 TGT가 수집됩니다. 컴퓨터 계정은 로 끝나야 합니다.
root@kitploit:~
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).

TGT 모니터

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

TGT 모니터로 티켓 탈취

tgt-renew

tgt-renew BOF는 곧 만료되는 티켓을 더 이상 갱신할 수 없을 때까지 자동으로 갱신합니다. 오브젝트 파일에 다음 인수를 전달해야 합니다.

root@kitploit:~
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 플래그는 상호 배타적입니다.

TGT 갱신

설치

root@kitploit:~
git clone https://github.com/jakobfriedl/tgt-monitor-bof
cd tgt-monitor-bof
make

그런 다음 Conquest의 스크립트 관리자를 사용하여 dist/tgt-monitor.py 모듈을 로드합니다.

감사의 말

이 Beacon Object File의 구현은 다음 프로젝트를 기반으로 합니다:

  • https://github.com/Ghostpack/Rubeus
  • https://github.com/RalfHacker/Kerbeus-BOF
    • ASN.1 인코딩/디코딩 구현
  • https://github.com/wavvs/nanorobeus
도구 다운로드
$
이름타입설명
intervalint검사 사이의 시간 초과(초 단위).
thresholdint갱신 임계값(분 단위). EndTime까지의 시간이 이 임계값보다 낮으면 티켓이 갱신됩니다.
targetUsersstring대상 사용자 이름의 대소문자 구분 없는 쉼표로 구분된 목록. 이 필드가 설정되면 지정된 사용자의 TGT만 갱신됩니다. 그렇지 않으면 모든 사용자의 TGT가 갱신됩니다. 컴퓨터 계정은 $로 끝나야 합니다.
targetLuidsstring대상 LUID의 대소문자 구분 없는 쉼표로 구분된 목록. 이 필드가 설정되면 지정된 LUID의 TGT만 갱신됩니다.