사용 권한 계산기 도구(Permcalc.exe)
업데이트: 2007년 11월
최소 권한 부여 집합 확인 도구(Permcalc.exe)는 권한 호출자에게 어셈블리의 공용 진입점에 대한 액세스 권한을 부여해야 하는지를 추정하는 데 사용됩니다. 이 도구는 .NET Framework 버전 2.0에서 새로 도입되었습니다. 고급 사용자를 위한 것입니다.
PermCalc [options] assemblyName [assemblyDependencyName…]
매개 변수
옵션 |
설명 |
---|---|
-CleanCache |
모든 캐시 파일을 다시 구성합니다. |
-HostProtection |
HostProtectionAttribute 보호되는 범주에 대한 정보를 보고합니다. |
-Internet |
정확한 권한 값을 확인할 수 없는 경우 인터넷 영역 권한을 추정 값으로 사용합니다. 기본값은 권한 값을 확인할 수 없는 무제한 권한 상태를 사용하여 과대 평가하는 것입니다. |
-Out fileName |
출력을 fileName에 보냅니다. 기본값은 assemblyName.PermCalc.xml이거나 -Sandbox 옵션을 지정한 경우 sandbox.PermCalc.xml입니다. |
-Sandbox |
진입점 호출자에 필요한 권한 대신 응용 프로그램을 실행할 수 있는 최소 권한 샌드박스를 보고합니다. |
-Show |
완료되면 출력 파일을 표시합니다. |
-Stacks |
권한 요구의 출처를 표시하기 위해 출력에 호출 스택을 포함합니다. |
-Under |
정확한 권한 값을 확인할 수 없는 경우 권한을 과소 평가합니다. 기본값은 권한 값을 확인할 수 없는 경우 과대 평가하는 것입니다. |
-? |
사용 정보를 표시합니다. |
인수 |
설명 |
---|---|
assemblyName |
권한을 계산할 어셈블리입니다. |
assemblyDependencyName |
assemblyName이 종속된 어셈블리입니다. |
설명
최소 권한 부여 집합 확인 도구는 모든 응용 프로그램 어셈블리와 종속성 어셈블리의 적용 가능한 모든 코드 경로를 검사하여 응용 프로그램을 실행하는 데 필요한 최소 권한 집합을 계산합니다. 이 도구는 응용 프로그램 어셈블리마다 권한 집합을 반환합니다.
도구는 응용 프로그램의 진입점에서 시작하여 모든 응용 프로그램 어셈블리 및 응용 프로그램에서 호출되는 공유 라이브러리와 시스템 라이브러리를 통해 모든 코드 경로를 추적합니다. 도구는 코드 경로 추적과 관련된 모든 어셈블리가 포함되어 있는 시뮬레이션된 호출 스택을 관리합니다. 모든 코드 경로 추적 시 도구에서는 선언적 요청, 링크 요청 및 선언적 스택 워크 한정자가 있는지 확인합니다. 선언적 보안 동작에 사용된 모든 권한 상태는 컴파일 시 알려지므로 응용 프로그램 어셈블리에 대한 모든 선언적 보안 동작의 영향을 정확하게 계산할 수 있습니다. 예를 들어, 선언적 요청을 사용하면 해당 시점에 호출 스택에 있는 모든 어셈블리의 최소 권한 부여 집합이 요청된 권한 집합으로 업데이트됩니다. 시뮬레이션된 호출 스택에 선언적 어설션이 있으면 어설션된 권한 집합과 요청된 권한 집합 사이의 교집합만 호출 스택의 어설션 위에 있는 모든 어셈블리에 대해 업데이트됩니다. 마찬가지로 링크 요청이 있으면 링크 요청 지점 위의 시뮬레이션된 호출 스택에 있는 호출자만 요청된 권한 집합으로 업데이트됩니다.
코드 경로 추적의 일부는 응용 프로그램의 기본 진입점 메서드를 사용하여 시작하는 모든 메서드의 MSIL(Microsoft Intermediate Language)을 통한 추적입니다. 메서드 MSIL 추적에 명령적 권한 집합 동작이 있으면 다음 업데이트 알고리즘이 각 어셈블리에 대해 실행됩니다.
명령적 요청, 링크 요청, 어설션, PermitOnly 또는 Deny에 사용된 권한 상태를 정적으로 확인할 수 있고 이 권한 상태가 런타임에만 사용 가능한 상태에 영향을 받지 않는 경우, 응용 프로그램 어셈블리에 대한 해당 보안 동작의 영향을 확인할 수 있습니다. 또한 이 영향을 계산하여 모든 프로파일링된 어셈블리의 최소 권한 부여 집합에 대한 선언적 보안 동작의 영향을 확인합니다.
명령적 보안 동작에 사용된 권한 집합 상태를 정적으로 확인할 수 없는 경우에는 무제한 권한 상태인 것으로 가정됩니다(예: 무제한 보안 권한 또는 무제한 파일 IO 읽기 권한). 이로 인해 간혹 실행할 응용 프로그램에 필요한 권한이 과대 평가될 수도 있습니다. 이 기본 동작을 재정의하려면 -Under 옵션을 사용합니다.
메서드를 통한 여러 코드 경로가 있고 일부 경로에 서로 다른 보안 동작 주석이 있으면 요청의 합집합 및 어설션의 교집합이 사용됩니다. 이는 도구가 런타임에 응용 프로그램에서 사용하는 메서드를 통해 코드 경로를 확인하지 못하는 경우도 있기 때문입니다.
어셈블리 및 해당 종속성의 크기와 복잡성에 따라 도구에서 철저한 분석을 수행하는 데 몇 분이 걸릴 수 있습니다.
예제
SDK 명령 프롬프트 창에 명령을 입력하여 다음 예제를 실행하면 파일 이름이 예제의 파일 이름으로 대체됩니다.
다음 명령은 모든 캐시 파일을 다시 구성하고 mylib.dll 어셈블리의 호출 스택을 포함합니다. 이 명령은 기본 뷰어에 XML 파일에 대한 출력을 표시합니다.
Permcalc.exe -cleancache -stacks -show mylib.dll
다음 명령은 myapp.exe 응용 프로그램에서 실행해야 하는 최소 권한 샌드박스를 보고합니다. 이 명령은 기본 뷰어에 XML 파일에 대한 출력을 표시합니다. 대상 파일은 myapp.exe이고 종속 파일은 mydep1.dll 및 mydep2.dll입니다.
Permcalc.exe -sandbox -show myapp.exe mydep1.dll mydep2.dll