Kerberos Double Hop Problem
소개
Kerberos "Double Hop" 문제는 Kerberos 인증을 통해 두 개의 호핑을 시도할 때 발생합니다. 예를 들어 PowerShell/WinRM을 사용하는 경우입니다.
Kerberos를 통해 인증이 발생할 때 자격 증명이 메모리에 캐시되지 않습니다. 따라서 mimikatz를 실행해도 사용자의 자격 증명을 찾을 수 없습니다.
이는 Kerberos로 연결할 때 다음 단계를 거치기 때문입니다:
User1이 자격 증명을 제공하고 도메인 컨트롤러가 User1에게 Kerberos TGT를 반환합니다.
User1이 TGT를 사용하여 Server1에 연결하기 위한 서비스 티켓을 요청합니다.
User1이 Server1에 연결하고 서비스 티켓을 제공합니다.
Server1에는 User1의 자격 증명이 캐시되어 있지 않거나 User1의 TGT가 없습니다. 따라서 Server1에서 두 번째 서버에 로그인하려고 할 때 인증할 수 없습니다.
Unconstrained Delegation
PC에서 제한되지 않은 위임이 활성화되어 있는 경우, 서버는 액세스하는 각 사용자의 TGT를 받게 됩니다. 또한, 제한되지 않은 위임이 사용되면 아마도 도메인 컨트롤러를 손상시킬 수 있습니다. 제한되지 않은 위임 페이지에서 자세한 정보 확인.
CredSSP
이 문제를 피하는 또 다른 방법은 안전하지 않은 것으로 알려진 Credential Security Support Provider입니다. Microsoft에 따르면:
CredSSP 인증은 로컬 컴퓨터에서 원격 컴퓨터로 사용자 자격 증명을 위임합니다. 이 관행은 원격 작업의 보안 위험을 증가시킵니다. 원격 컴퓨터가 침해당하면 자격 증명이 전달되어 네트워크 세션을 제어하는 데 사용될 수 있습니다.
CredSSP를 프로덕션 시스템, 민감한 네트워크 및 유사한 환경에서 비활성화하는 것이 매우 권장됩니다. CredSSP가 활성화되어 있는지 확인하려면 Get-WSManCredSSP
명령을 실행할 수 있습니다. 이 명령을 사용하면 CredSSP 상태를 확인할 수 있으며 WinRM이 활성화되어 있다면 원격으로 실행할 수도 있습니다.
해결책
Invoke Command
더블 호핑 문제를 해결하기 위해 중첩된 Invoke-Command
를 활용하는 방법이 제시됩니다. 이 방법은 문제를 직접 해결하지는 않지만 특별한 구성이 필요하지 않는 해결책을 제공합니다. 이 접근 방식을 사용하면 초기 공격 머신에서 실행되는 PowerShell 명령 또는 처음 서버와 이전에 설정된 PS-Session을 통해 초기 서버에서 두 번째 서버에서 명령(hostname
)을 실행할 수 있습니다. 다음은 이 작업 방법입니다:
등록 PSSession 구성
더블 홉 문제를 우회하는 해결책으로 Register-PSSessionConfiguration
을 Enter-PSSession
과 함께 사용하는 것이 제안됩니다. 이 방법은 evil-winrm
과는 다른 접근 방식을 요구하며 더블 홉 제한을 겪지 않는 세션을 허용합니다.
포트포워딩
중간 대상의 로컬 관리자는 netsh
를 사용하여 포트포워딩을 허용하는 규칙을 추가할 수 있으며, 이를 통해 Windows 방화벽 규칙을 추가하여 포워딩된 포트를 허용할 수 있습니다.
winrs.exe
winrs.exe
는 WinRM 요청을 전달하는 데 사용할 수 있으며 PowerShell 모니터링이 우려되는 경우 덜 감지될 수 있는 옵션으로 사용할 수 있습니다. 아래 명령은 그 사용법을 보여줍니다:
OpenSSH
첫 번째 서버에 OpenSSH를 설치하면 더블 홉 문제에 대한 해결책이 활성화되어 점프 박스 시나리오에 특히 유용합니다. 이 방법은 Windows용 OpenSSH의 CLI 설치 및 설정을 필요로 합니다. 암호 인증을 위해 구성된 경우 중간 서버가 사용자를 대신하여 TGT를 획들할 수 있습니다.
OpenSSH 설치 단계
최신 OpenSSH 릴리스 zip을 다운로드하고 대상 서버로 이동합니다.
압축을 풀고
Install-sshd.ps1
스크립트를 실행합니다.포트 22를 열기 위한 방화벽 규칙을 추가하고 SSH 서비스가 실행 중인지 확인합니다.
Connection reset
오류를 해결하려면 OpenSSH 디렉토리에서 모든 사람에게 읽기 및 실행 액세스를 허용하도록 권한을 업데이트해야 할 수 있습니다.
참고 자료
Last updated