다음을 통해 공유


디버깅 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를 사용하지 마십시오. 그 두 가지 주된 이유는 다음과 같습니다. 먼저 디버깅 인프라는 취약점을 악용할 수 있는 정교하게 만들어진 프로세스에 안전하지 않습니다. 둘째 관리 전용 디버깅 동안 프로세스를 중지하면 실제로 중지하기 전까지 약간의 지연 시간이 있을 수 있습니다. 따라서 지정한 코드 줄이 실행되지 않는다고 보장할 수 없습니다.

참고 항목

개념

CLR 디버깅 개요

기타 리소스

디버깅(관리되지 않는 API 참조)