디버깅 API의 보안 고려 사항
CLR(공용 언어 런타임) 디버깅 API를 사용할 때의 보안 고려 사항은 다음과 같습니다.
프로세스에 연결. Windows NT 및 Windows 2000에서 디버기 프로세스는 디버거에 전체 액세스 권한을 부여하는 보안 설명자를 사용하여 만들어야 합니다. 프로세스를 디버깅하려면 디버깅 프로세스에 SE_DEBUG_NAME 권한이 부여되어 활성화되어 있어야 합니다. 기본적으로 Windows NT 또는 Windows 2000 관리자에게 이 권한이 부여됩니다. Windows 95, Windows 98 및 Windows CE에서는 프로세스 연결에 특별한 요구 사항을 적용하지 않으므로 이러한 수준의 보안을 제공하지 않습니다.
동적 코드 삽입. 어셈블리는 로드될 때 확인됩니다. 동적 코드 삽입 동안에는 디버거에서 일부 코드를 수정하고 델타 PE 파일(이식 가능 파일)을 디버기 프로세스로 보냅니다. 델타 PE는 확인되지 않습니다. 업데이트된 메서드는 JIT(Just-In-Time) 컴파일러에 의해 컴파일된 후 확인됩니다. 동적으로 코드 삽입에 대한 자세한 내용은 디버깅 API를 사용하여 동적으로 코드 삽입을 참조하십시오.
서명된 어셈블리의 메타데이터 수정. 어셈블리의 무결성이 확인되고 서명된 어셈블리가 로드되는 경우에만 올바른 권한이 부여됩니다. 디버거에서 디버기에 연결된 메타데이터를 변경하여 실행 코드를 수정하는 경우 이 작업은 어셈블리의 시그니처를 계산하는 해시를 변경합니다. 이 작업 때문에 보안 검사가 추가로 수행되지는 않습니다. 런타임에서 할당한 권한이 계속 유효합니다.
악의적인 프로세스 디버깅. 악의적일 수 있는 프로세스를 디버깅하는 데 디버깅 API를 사용하지 마십시오. 그 두 가지 주된 이유는 다음과 같습니다. 먼저 디버깅 인프라는 취약점을 악용할 수 있는 정교하게 만들어진 프로세스에 안전하지 않습니다. 둘째 관리 전용 디버깅 동안 프로세스를 중지하면 실제로 중지하기 전까지 약간의 지연 시간이 있을 수 있습니다. 따라서 지정한 코드 줄이 실행되지 않는다고 보장할 수 없습니다.