스크립트 보안

 

적용 대상: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

마지막으로 수정된 항목: 2007-02-12

이 항목에서는 Exchange 관리 셸의 스크립트 보안이 유해하거나 원치 않는 스크립트가 조직에서 실행되지 않도록 방지하는 방법과 조직의 요구 사항에 맞게 스크립트 보안을 수정하는 데 사용할 수 있는 옵션에 대해 설명합니다.

일반적으로 세 가지 다른 소스, 즉 사용자 자신, 조직의 다른 사람, 조직 외부(예: 인터넷)의 스크립트 작성자로부터 스크립트가 제공됩니다. 사용자 자신이 스크립트를 작성할 경우 해당 스크립트가 원래 의도했던 작업을 수행하게 되리라는 것을 신뢰할 수 있습니다. 해당 스크립트를 조직의 다른 관리자와 공유할 경우 다른 관리자는 사용자를 믿기 때문에 해당 스크립트를 신뢰할 수 있습니다.

스크립트가 인터넷과 같은 다른 소스에서 제공된 경우 스크립트 보안이 중요합니다. 조직에 알려지지 않은 소스의 스크립트를 신뢰할 수 있는 유일한 방법은 스크립트 코드를 직접 조사하고 격리된 랩 환경에서 테스트하는 것입니다. 이 프로세스는 시간이 오래 걸리고 지루할 수 있습니다. 그러나 원치 않는 악성 코드나 파괴적인 코드가 실행되지 않도록 이 프로세스를 수행하는 것이 좋습니다.

Exchange 관리 셸에서는 스크립트가 작성된 후에 변경되지 않았다는 것을 확인하기 위해 권장되는 디지털 서명 사용이 지원됩니다. 디지털 서명에 대한 자세한 내용은 이 항목의 뒤에 나오는 "코드 서명 기본"을 참조하십시오.

스크립트 실행 모드

Exchange 관리 셸에서는 스크립트가 서명된 방법과 스크립트가 알려진 소스에서 제공되었는지 아니면 알려지지 않은 소스에서 제공되었는지에 따라 네 가지 모드의 스크립트 실행을 사용하여 스크립트가 사용되는 방법을 제어할 수 있습니다. 다음 표에서는 각 스크립트 실행 모드를 보여줍니다.

스크립트 실행 모드

모드 설명

Restricted 모드

신뢰할 수 있는 게시자가 서명한 경우에도 스크립트가 실행되지 않습니다.

AllSigned 모드

모든 스크립트는 신뢰할 수 있는 게시자가 디지털 서명한 경우에만 실행됩니다.

RemoteSigned 모드

로컬로 만든 모든 스크립트가 실행됩니다. 인터넷과 같은 신뢰할 수 없는 원격 위치에서 다운로드한 스크립트는 실행되지 않습니다. 이 모드는 기본 스크립트 실행 모드입니다.

Unrestricted 모드

디지털 서명되었는지 또는 신뢰할 수 있는지 여부에 상관없이 모든 스크립트가 실행됩니다. 제어된 비프로덕션 테스트 환경에서 스크립트를 실행하는 경우가 아니면 Unrestricted 모드를 사용하지 않는 것이 좋습니다.

스크립트 실행 모드를 기본 RemoteSigned 스크립트 실행 모드에서 다른 모드로 변경하려면 Exchange 관리 셸에서 Set-ExecutionPolicy cmdlet를 사용합니다. 예를 들어 실행 정책을 AllSigned 모드로 변경하려면 다음 명령을 실행합니다.

Set-ExecutionPolicy AllSigned

Exchange 관리 셸에서는 정책에 대한 변경 내용을 즉시 인식합니다.

Exchange 관리 셸을 실행하는 모든 컴퓨터에 대해 일관된 스크립트 실행 모드를 설정하려는 대규모 조직에서는 Active Directory 그룹 정책을 사용하여 스크립트 실행 모드 설정을 적용해야 합니다. Active Directory 그룹 정책을 구성하여 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell 레지스트리 키 아래에 있는 ExecutionPolicy 값을 원하는 스크립트 실행 모드로 설정합니다.

경고

UNRESOLVED_TOKEN_VAL(exRegistry)

코드 서명 기본

디지털 서명은 키 쌍(공개 키 및 개인 키)이라고 하는 두 개의 다른 암호화 키를 사용하는 공개 키 서명 알고리즘을 사용하여 만듭니다. 개인 키는 소유자만 알 수 있고 공개 키는 모든 사람이 사용할 수 있습니다. 디지털 서명에서 개인 키는 서명을 생성하고 해당 공개 키는 서명의 유효성을 검사합니다.

인증서는 일반적으로 인증에 사용되며 열린 네트워크에서 정보를 안전하게 유지하는 데 도움이 되는 디지털 문서입니다. 인증서는 해당 개인 키를 보유하는 엔터티에 공개 키를 안전하게 바인딩합니다. 인증서는 발급 CA(인증 기관)에 의해 디지털 서명됩니다. 코드 서명 인증서를 사용하여 스크립트 작성자는 디지털 서명을 스크립트 파일에 추가합니다. 이 프로세스 도중에 개인 키를 사용하여 스크립트의 단방향 해시가 만들어지고 암호화됩니다. 암호화된 해시는 스크립트 파일에 추가되는 디지털 서명 문자열입니다. 이 디지털 서명 문자열은 스크립트 기능을 방해하지 않도록 주석으로 처리됩니다.

코드 서명이 필요한 Exchange 관리 셸 환경에서 이 스크립트가 실행될 경우 스크립트 파일의 새 단방향 해시가 생성됩니다. 단반향 해시는 공개 키를 사용하여 암호 해독된 후에 스크립트 파일에 포함된 암호화된 해시와 비교됩니다. 스크립트가 서명된 후에 전혀 변경되지 않은 경우 해시는 일치합니다. 그런 다음 컴퓨터는 신뢰할 수 있는 인증 기관에 대한 인증서 체인을 작성하여 신뢰할 수 있는 게시자로부터 서명이 제공되었는지 확인합니다. 신뢰할 수 있는 것으로 확인된 경우 스트립트가 실행됩니다.

스크립트가 신뢰할 수 있는 소스에서 제공되었는지 여부는 스크립트를 디지털 서명하는 데 사용된 코드 서명 인증서의 원본에 의존합니다. 일반적으로 다음과 같은 두 가지 유형의 인증서가 있습니다.

  • 신뢰할 수 있는 인증 기관에 의해 발급된 인증서   인증 기관은 코드 서명 인증서를 발급하기 전에 요청자의 ID를 확인합니다. 발급 기관은 인증서를 판매하는 외부의 공개 타사이거나 사용자의 조직에서 호스팅하는 내부 인증 기관일 수 있습니다. 이 종류의 인증서를 사용하여 스크립트에 서명할 경우 인증서를 발급한 인증 기관을 인식 및 신뢰하는 다른 컴퓨터의 사용자와 스크립트를 공유할 수 있습니다.

  • 자체 서명 인증서   이 종류의 인증서는 사용자의 컴퓨터가 인증서를 만드는 기관입니다. 자체 서명 인증서의 이점은 컴퓨터에서 스크립트를 작성, 서명 및 실행할 수 있다는 것입니다. 그러나 다른 컴퓨터는 사용자의 컴퓨터를 신뢰할 수 있는 인증 기관으로 인식하지 않으므로 다른 컴퓨터에서 실행하기 위해 스크립트를 공유할 수 없습니다. 다른 컴퓨터는 사용자의 컴퓨터를 신뢰하지 않을 경우 자체 서명된 서명의 유효성을 검사할 수 없으므로 스크립트가 실행되지 않습니다.

코드 서명 관리를 위한 Cmdlet

Exchange 관리 셸에는 코드 서명 관리를 위한 두 개의 cmdlet가 포함되어 있습니다. Set-AuthenticodeSignature cmdlet는 디지털 서명을 스크립트 파일에 추가하는 데 사용됩니다. Set-AuthenticodeSignature cmdlet는 서명할 파일의 이름을 첫 번째 위치 매개 변수로 가집니다. 이 파일이 현재 작업 디렉터리에 없을 경우 파일의 경로를 제공해야 합니다. 이 cmdlet를 위한 두 번째 입력 매개 변수는 서명에 사용되는 인증서입니다. 이 인증서는 로컬 인증서 저장소에 저장됩니다. 인증서를 참조하는 문자열의 형태로 이 매개 변수를 제공해야 합니다. 인증서는 Cert: 드라이브를 통해 액세스할 수 있습니다.

코드 서명 관리를 위한 두 번째 cmdlet는 Get-AuthenticodeSignature cmdlet입니다. Get-AuthenticodeSignature cmdlet를 사용하여 매개 변수 입력으로 제공되는 파일의 현재 코드 서명 상태를 검사 및 확인합니다. 코드 서명 스크립트를 사용할 때 문제가 발생한 경우 Get-AuthenticodeSignature cmdlet의 출력은 유용한 문제 해결 정보를 제공합니다.

Microsoft 등의 외부 소스에서 스크립트를 실행하려면 현재 환경의 스크립트 실행 모드에 따라 스크립트를 수정해야 합니다. 기본 .txt 파일로 스크립트를 받아서 .ps1 스크립트 파일로 이름을 바꾼 다음 모든 필수 서명을 적용한 후에 스크립트를 직접 작성한 것처럼 이러한 스크립트를 실행할 수 있습니다.

디지털 서명 및 스크립트 실행 정책에 대한 자세한 내용을 보려면 Exchange 관리 셸에서 Get-Help About_Signing 명령을 실행합니다. 이 명령은 스크립트를 디지털 서명하기 위한 자세한 지침이 포함된 도움말 정보를 반환합니다.