다음을 통해 공유


관리 처리

드라이버 내에서 보안 문제의 중요한 원인은 사용자 모드와 커널 모드 구성 요소 간에 전달되는 핸들의 사용입니다. 커널 환경 내에서 핸들 사용과 관련하여 다음과 같은 여러 알려진 문제가 있습니다.

  • 커널 드라이버에 잘못된 유형의 핸들을 전달하는 애플리케이션입니다. 커널 드라이버가 충돌하여 파일 개체가 필요한 이벤트 개체를 사용할 수 있습니다.

  • 필요한 액세스 권한이 없는 개체에 핸들을 전달하는 애플리케이션입니다. 커널 드라이버는 사용자에게 적절한 권한이 없더라도 커널 모드에서 호출이 제공되기 때문에 작동하는 작업을 수행할 수 있습니다.

  • 주소 공간에서 유효한 핸들이 아니지만 시스템에 대해 악의적인 작업을 수행하기 위한 시스템 핸들로 표시된 값을 전달하는 애플리케이션입니다.

  • 디바이스 개체에 대한 적절한 핸들이 아닌 값(이 드라이버가 만들지 않은 핸들)을 전달하는 애플리케이션입니다.

이러한 문제로부터 보호하기 위해 커널 드라이버는 전달된 핸들이 유효한지 확인하기 위해 특히 주의해야 합니다. 가장 안전한 정책은 드라이버의 컨텍스트 내에서 필요한 핸들을 만드는 것입니다. 커널 드라이버에서 만든 이러한 핸들은 임의의 프로세스 컨텍스트에서 유효한 핸들과 커널 모드 호출자에서만 액세스할 수 있는 핸들을 만드는 OBJ_KERNEL_HANDLE 옵션을 지정해야 합니다.

애플리케이션 프로그램에서 만든 핸들을 사용하는 드라이버의 경우 이러한 핸들을 매우 주의해서 사용해야 합니다.

어떤 드라이버도 적절한 예방 조치를 취하지 않고 사용자 모드 애플리케이션에서 전달된 핸들 또는 매개 변수에 의존해서는 안 됩니다.

Nt 변형을 사용하여 파일을 여는 경우 Nt 변형도 사용하여 파일을 닫아야 합니다.