Windows PowerShell에서 다중 홉 원격 사용
원격 작업의 또 다른 과제는 여러 원격 연결에서의 자격 증명 위임과 관련이 있습니다. 기본적으로 자격 증명은 하나의 연결 또는 홉에서만 위임할 수 있습니다. 이 제한 위임은 추가 보안 위험이 발생할 수 있으므로 원격 컴퓨터가 자격 증명을 더 이상 위임하지 못하도록 합니다.
일반적으로 이 시나리오는 다음을 해결하기 위한 시나리오입니다.
- ServerA에 로그인했습니다.
- ServerA에서 원격 PowerShell 세션을 시작하여 ServerB에 연결합니다.
- PowerShell 원격 세션을 통해 ServerB 에서 실행하는 명령은 ServerC의 리소스에 액세스하려고 시도합니다.
- PowerShell 원격 세션을 만드는 데 사용한 자격 증명이 ServerB에서 ServerC로 전달되지 않으므로 ServerC의 리소스에 대한 액세스가 거부됩니다.
프로덕션 환경에서는 여러 단계(또는 다중 단계)의 위임을 수행해야 하는 경우가 많습니다. 예를 들어 일부 조직에서는 관리자가 클라이언트 컴퓨터에서 데이터 센터의 서버에 직접 연결할 수 없습니다. 대신 중간 게이트웨이 또는 점프 서버에 연결한 다음, 관리하려는 서버에 연결해야 합니다. 기본 구성은 원격 작업에서 이 방법을 허용하지 않습니다. 원격 컴퓨터에 연결한 후에는 자격 증명이 원격 컴퓨터까지만 전달됩니다. 해당 컴퓨터에 없는 리소스에 액세스하려고 하면 액세스에 자격 증명이 포함되지 않으므로 일반적으로 오류가 발생합니다. 해결 방법은 CredSSP(자격 증명 보안 지원 공급자)를 사용하도록 설정하는 것입니다.
CredSSP를 사용하도록 설정
CredSSP는 원격 서버(이전 예제의 ServerB)에서 자격 증명을 캐시합니다. 따라서 CredSSP를 사용하면 자격 증명 도난 공격이 발생할 가능성이 있습니다. 원격 컴퓨터의 보안이 손상되면 공격자가 사용자의 자격 증명에 액세스할 수 있습니다. 기본적으로 CredSSP는 클라이언트 및 서버 컴퓨터 모두에서 사용하지 않도록 설정됩니다. 가장 신뢰할 수 있는 환경에서만 CredSSP를 사용하도록 설정해야 합니다. 예를 들어 도메인 컨트롤러는 매우 신뢰할 수 있으므로 도메인 컨트롤러에 연결하는 도메인 관리자는 CredSSP를 사용하도록 설정되어 있어야 합니다.
클라이언트라고 하는 시작 컴퓨터와 서버라고 하는 수신 컴퓨터 모두에서 CredSSP 프로토콜을 사용하도록 설정해야 합니다. 이렇게 하면 수신 컴퓨터가 자격 증명을 1개의 추가 홉에 위임할 수 있습니다.
클라이언트를 구성하려면 다음 명령을 실행하여 서버 이름을 자격 증명을 다시 입력할 수 있는 서버 이름으로 대체합니다.
Enable-WsManCredSSP –Role Client –Delegate servername
서버 이름에는 와일드카드 문자가 포함될 수 있습니다. 그러나 별표(*) 와일드카드를 단독으로 사용하는 것은 컴퓨터에서 권한이 없는 사용자에게도 자격 증명을 다시 위임할 수 있도록 하기 때문에 너무 관대한 방식입니다. 대신 해당 도메인의 컴퓨터로의 재위임을 제한하는 *.ADATUM.com 같은 제한된 와일드카드 패턴을 고려해 보세요.
서버를 구성하려면 Enable-WsManCredSSP -Role Server를 실행합니다. 서버에 위임된 컴퓨터 목록은 필요하지 않습니다. 또한 기업 전체에서 보다 중앙 집중화되고 일관된 구성을 제공하는 그룹 정책을 통해 이러한 설정을 구성할 수도 있습니다.
참고
CredSSP를 사용하는 동안 문서화된 수많은 보안 위반이 있었기 때문에 더 이상 기본 옵션이 아닙니다. 대신 제한된 위임을 사용해야 합니다.
리소스 기반 Kerberos 제한된 위임
Windows Server 2012부터는 CredSSP 사용을 포기하고 제한된 위임을 대신 사용할 수 있습니다. 제한된 위임은 서버 이름의 허용 목록이 아닌 보안 설명자를 사용하여 서비스 티켓 위임을 구현합니다. 이를 통해 리소스는 다른 사용자를 대신하여 티켓을 요청할 수 있는 보안 주체를 결정할 수 있습니다. 리소스 기반 제한된 위임은 도메인 기능 수준에 관계없이 올바르게 작동합니다.
제한된 위임에는 다음이 필요합니다.
- Windows PowerShell 원격 명령을 실행하는 호스트 컴퓨터와 동일한 도메인의 도메인 컨트롤러에 대한 액세스 권한.
- 중간 원격 서버에서 액세스하려는 원격 서버를 호스트하는 도메인의 도메인 컨트롤러에 대한 액세스 권한.
사용 권한을 설정하는 코드에는 Active Directory PowerShell RSAT(원격 서버 관리 도구)를 사용하여 Windows Server를 실행하는 컴퓨터가 필요합니다. 다음 두 명령을 실행하여 RSAT를 Windows 기능으로 추가할 수 있습니다.
Add-WindowsFeature RSAT-AD-PowerShell
Import-Module ActiveDirectory
리소스 기반 Kerberos 제한 위임을 LON-SVR1에서 LON-SVR2에서 LON-SVR3으로 부여하려면 다음 명령을 실행합니다.
Set-ADComputer -Identity LON-SVR2 -PrincipalsAllowedToDelegateToAccount LON-SVR3
한 가지 문제로 인해 이 명령이 실패할 수 있습니다. KDC(키 배포 센터)에는 15분 SPN 음수 캐시가 있습니다. LON-SVR2가 이미 LON-SVR3과 통신을 시도한 경우 음수 캐시 항목이 있습니다. 다음 기술 중 하나를 사용하여 LON-SVR2 에서 캐시를 지워야 합니다.
-
klist purge -li 0x3e7명령을 실행합니다. 이 방법이 선호되는 가장 빠른 방법입니다. - 캐시가 자동으로 지워지도록 15분 정도 기다립니다.
- LON-SVR2를 다시 시작합니다.
제한된 위임을 테스트하려면 다음 코드 예제를 실행합니다.
$cred = Get-Credential Adatum\TestUser
Invoke-Command -ComputerName LON-SVR1.Name -Credential $cred -ScriptBlock {Test-Path \\$($using:ServerC.Name)\C$ `
Get-Process lsass -ComputerName $($using:LON-SVR2.Name)
Get-EventLog -LogName System -Newest 3 -ComputerName $using:LON-SVR3.Name
}
Just Enough Administration
JEA(Just Enough Administration) 는 PowerShell에서 관리하는 모든 항목에 대해 위임된 관리를 가능하게 하는 보안 기술입니다. JEA를 사용하면 다음이 가능합니다.
- 컴퓨터의 관리자 수 감소: 일반 사용자를 대신하여 권한 있는 작업을 수행하는 가상 계정 또는 그룹 관리 서비스 계정을 사용합니다.
- 사용자가 수행할 수 있는 작업 제한: 사용자가 실행할 수 있는 cmdlet, 함수 및 외부 명령을 지정합니다.
- 사용자가 수행하고 있는 작업을 보다 효과적으로 이해: 사용자가 해당 세션 중에 실행한 명령을 정확하게 보여 주는 기록 및 로그를 검토합니다.
서버를 관리하는 데 사용된 높은 권한이 있는 계정은 심각한 보안 위험을 일으킵니다. 공격자가 이러한 계정 중 하나를 손상시키면 조직 전체에서 lateral attacks(측면 공격)를 시작할 수 있습니다. 손상된 각 계정은 더 많은 계정 및 리소스에 대한 액세스 권한을 공격자에게 부여하여 회사 기밀을 훔치거나 DOS(서비스 거부) 공격을 시작하는 등을 하는데 한 걸음 더 다가서게 할 수 있습니다.
관리자 권한을 제거하거하는 것이 항상 쉬운 것은 아닙니다. Active Directory 도메인 컨트롤러와 동일한 컴퓨터에 DNS 역할이 설치되어 있는 일반적인 시나리오를 생각해 봅니다. DNS 관리자는 DNS 서버 문제를 해결할 수 있는 로컬 관리자 권한이 필요합니다. 하지만 그렇게 하려면 높은 권한을 가진 관리자 보안 그룹의 구성원이어야 합니다. 이 접근 방식을 통해 DNS 관리자는 효과적으로 전체 도메인을 제어하고 해당 컴퓨터의 모든 리소스에 액세스할 수 있습니다.
JEA는 최소 권한의 원칙을 통해 이 문제를 해결합니다. JEA를 사용하면 작업을 수행하는 데 필요한 PowerShell 명령에 대해서만 액세스 권한을 부여하는 DNS 관리자용 관리 엔드포인트를 구성할 수 있습니다. 즉, 의도치 않게 Active Directory에 대한 권한이나 파일 시스템을 검색하거나 잠재적으로 위험한 스크립트를 실행할 수 있는 권한을 부여하는 일 없이 손상된 DNS 캐시를 복구하거나 DNS 서버를 다시 시작하는 데 적합한 액세스 권한을 제공할 수 있습니다. 더 좋은 점은 JEA 세션이 임시 권한 있는 가상 계정을 사용하도록 구성된 경우 DNS 관리자는 비관리자 자격 증명을 사용하여 서버에 연결하고 일반적으로 관리자 권한이 필요한 명령을 계속 실행할 수 있다는 것입니다. JEA를 사용하면 광범위한 권한이 있는 로컬 또는 도메인 관리자 역할에서 사용자를 제거하고 각 컴퓨터에서 수행할 수 있는 작업을 신중하게 제어할 수 있습니다.
JEA는 PowerShell 5.0 이상에 포함된 기능입니다. 전체 기능을 사용하려면 시스템에 사용할 수 있는 최신 버전의 PowerShell을 설치해야 합니다. PowerShell 원격은 JEA가 작성된 기반을 제공합니다. JEA를 사용하기 전에 PowerShell Remoting을 사용하도록 설정하고 올바르게 보안되어 있는지 확인해야 합니다.
JEA 엔드포인트를 만들 때 사용자가 JEA 세션에서 수행할 수 있는 작업을 설명하는 하나 이상의 역할 기능을 정의해야 합니다. 역할 기능은 연결 사용자에게 제공되는 모든 cmdlet, 함수, 공급자 및 외부 프로그램을 나열하는 .psrc 확장이 있는 PowerShell 데이터 파일입니다.
New-PSRoleCapabilityFile cmdlet을 사용하여 새 PowerShell 역할 기능 파일을 만들 수 있습니다. 역할에 필요한 명령을 허용하도록 결과 역할 기능 파일을 편집해야 합니다. PowerShell 도움말 문서에는 파일을 구성하는 방법의 몇 가지 예제가 포함되어 있습니다.