Kerberos Double Hop Problem

htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!

소개

Kerberos "Double Hop" 문제는 Kerberos 인증을 통해 두 개의 호핑을 시도할 때 발생합니다. 예를 들어 PowerShell/WinRM을 사용하는 경우입니다.

Kerberos를 통해 인증이 발생할 때 자격 증명메모리에 캐시되지 않습니다. 따라서 mimikatz를 실행해도 사용자의 자격 증명을 찾을 수 없습니다.

이는 Kerberos로 연결할 때 다음 단계를 거치기 때문입니다:

  1. User1이 자격 증명을 제공하고 도메인 컨트롤러가 User1에게 Kerberos TGT를 반환합니다.

  2. User1이 TGT를 사용하여 Server1에 연결하기 위한 서비스 티켓을 요청합니다.

  3. User1이 Server1에 연결하고 서비스 티켓을 제공합니다.

  4. Server1에는 User1의 자격 증명이 캐시되어 있지 않거나 User1의 TGT가 없습니다. 따라서 Server1에서 두 번째 서버에 로그인하려고 할 때 인증할 수 없습니다.

Unconstrained Delegation

PC에서 제한되지 않은 위임이 활성화되어 있는 경우, 서버는 액세스하는 각 사용자의 TGT받게 됩니다. 또한, 제한되지 않은 위임이 사용되면 아마도 도메인 컨트롤러를 손상시킬 수 있습니다. 제한되지 않은 위임 페이지에서 자세한 정보 확인.

CredSSP

이 문제를 피하는 또 다른 방법은 안전하지 않은 것으로 알려진 Credential Security Support Provider입니다. Microsoft에 따르면:

CredSSP 인증은 로컬 컴퓨터에서 원격 컴퓨터로 사용자 자격 증명을 위임합니다. 이 관행은 원격 작업의 보안 위험을 증가시킵니다. 원격 컴퓨터가 침해당하면 자격 증명이 전달되어 네트워크 세션을 제어하는 데 사용될 수 있습니다.

CredSSP를 프로덕션 시스템, 민감한 네트워크 및 유사한 환경에서 비활성화하는 것이 매우 권장됩니다. CredSSP가 활성화되어 있는지 확인하려면 Get-WSManCredSSP 명령을 실행할 수 있습니다. 이 명령을 사용하면 CredSSP 상태를 확인할 수 있으며 WinRM이 활성화되어 있다면 원격으로 실행할 수도 있습니다.

Invoke-Command -ComputerName bizintel -Credential ta\redsuit -ScriptBlock {
Get-WSManCredSSP
}

해결책

Invoke Command

더블 호핑 문제를 해결하기 위해 중첩된 Invoke-Command를 활용하는 방법이 제시됩니다. 이 방법은 문제를 직접 해결하지는 않지만 특별한 구성이 필요하지 않는 해결책을 제공합니다. 이 접근 방식을 사용하면 초기 공격 머신에서 실행되는 PowerShell 명령 또는 처음 서버와 이전에 설정된 PS-Session을 통해 초기 서버에서 두 번째 서버에서 명령(hostname)을 실행할 수 있습니다. 다음은 이 작업 방법입니다:

$cred = Get-Credential ta\redsuit
Invoke-Command -ComputerName bizintel -Credential $cred -ScriptBlock {
Invoke-Command -ComputerName secdev -Credential $cred -ScriptBlock {hostname}
}

등록 PSSession 구성

더블 홉 문제를 우회하는 해결책으로 Register-PSSessionConfigurationEnter-PSSession과 함께 사용하는 것이 제안됩니다. 이 방법은 evil-winrm과는 다른 접근 방식을 요구하며 더블 홉 제한을 겪지 않는 세션을 허용합니다.

Register-PSSessionConfiguration -Name doublehopsess -RunAsCredential domain_name\username
Restart-Service WinRM
Enter-PSSession -ConfigurationName doublehopsess -ComputerName <pc_name> -Credential domain_name\username
klist

포트포워딩

중간 대상의 로컬 관리자는 netsh를 사용하여 포트포워딩을 허용하는 규칙을 추가할 수 있으며, 이를 통해 Windows 방화벽 규칙을 추가하여 포워딩된 포트를 허용할 수 있습니다.

netsh interface portproxy add v4tov4 listenport=5446 listenaddress=10.35.8.17 connectport=5985 connectaddress=10.35.8.23
netsh advfirewall firewall add rule name=fwd dir=in action=allow protocol=TCP localport=5446

winrs.exe

winrs.exe는 WinRM 요청을 전달하는 데 사용할 수 있으며 PowerShell 모니터링이 우려되는 경우 덜 감지될 수 있는 옵션으로 사용할 수 있습니다. 아래 명령은 그 사용법을 보여줍니다:

winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname

OpenSSH

첫 번째 서버에 OpenSSH를 설치하면 더블 홉 문제에 대한 해결책이 활성화되어 점프 박스 시나리오에 특히 유용합니다. 이 방법은 Windows용 OpenSSH의 CLI 설치 및 설정을 필요로 합니다. 암호 인증을 위해 구성된 경우 중간 서버가 사용자를 대신하여 TGT를 획들할 수 있습니다.

OpenSSH 설치 단계

  1. 최신 OpenSSH 릴리스 zip을 다운로드하고 대상 서버로 이동합니다.

  2. 압축을 풀고 Install-sshd.ps1 스크립트를 실행합니다.

  3. 포트 22를 열기 위한 방화벽 규칙을 추가하고 SSH 서비스가 실행 중인지 확인합니다.

Connection reset 오류를 해결하려면 OpenSSH 디렉토리에서 모든 사람에게 읽기 및 실행 액세스를 허용하도록 권한을 업데이트해야 할 수 있습니다.

icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T

참고 자료

htARTE (HackTricks AWS Red Team Expert)와 함께 **제로부터 영웅이 되기까지 AWS 해킹을 배우세요**!

Last updated