안전한 문자열 함수 사용

많은 시스템 보안 문제는 부실한 버퍼 처리 및 결과 버퍼 오버런으로 인해 발생합니다. 부실한 버퍼 처리는 종종 문자열 조작 작업과 관련이 있습니다. C/C++ 언어 런타임 라이브러리(strcat, strcpy, sprintf 등)에서 제공하는 표준 문자열 조작 함수는 버퍼가 끝날 때까지 쓰기를 방지하지 않습니다.

안전한 문자열 함수라고 하는 두 개의 새 문자열 조작 함수 집합은 코드에서 적절한 버퍼 처리를 위한 추가 처리를 제공합니다. 이러한 안전한 문자열 함수는 WDK(Windows 드라이버 키트) 및 Microsoft Windows XP SP1 이상 버전의 DDK(드라이버 개발 키트) 및 Windows SDK에서 사용할 수 있습니다. 기본 제공 C/C++ 대응 항목과 Windows에서 제공하는 유사한 루틴을 대체하기 위한 것입니다.

안전한 문자열 함수 집합 중 하나는 커널 모드 코드에서 사용하기 위한 것입니다. 이러한 함수는 Ntstrsafe.h라는 헤더 파일에서 프로토타입으로 생성됩니다. 이 헤더 파일 및 연결된 라이브러리는 WDK에서 사용할 수 있습니다.

다른 안전 문자열 함수 집합은 사용자 모드 애플리케이션에서 사용할 수 있습니다. 해당 헤더 파일인 Strsafe.h에는 이러한 함수에 대한 프로토타입이 포함되어 있습니다. 해당 파일 및 연결된 라이브러리는 Windows SDK에서 사용할 수 있습니다. Strsafe.h에 대한 자세한 내용은 Strsafe.h 함수 사용을 참조하세요.

커널 모드 안전 문자열 함수 집합은 다음 두 하위 집합으로 구성됩니다.

커널 모드 안전 문자열 함수는 다음 기능을 제공합니다.

  • 각 안전 문자열 함수는 대상 버퍼의 크기를 입력으로 받습니다. 따라서 함수는 버퍼의 끝을 지나서 작성되지 않도록 할 수 있습니다.

  • 유니코드 및 ANSI 문자열 함수는 작업이 의도한 결과를 자르더라도 모든 출력 문자열을 NULL 문자로 종료합니다.

  • 모든 안전 문자열 함수는 하나의 가능한 성공 코드(STATUS_SUCCESS)만 사용하여 NTSTATUS 값을 반환합니다.

  • 가장 안전한 문자열 함수는 바이트 개수 버전과 문자 개수 버전 모두에서 사용할 수 있습니다. 예를 들어 RtlStringCbCata 는 두 개의 바이트 계산 문자열을 연결하고 RtlStringCchCata 는 두 개의 문자 개수 문자열을 연결합니다.

  • 대부분의 안전한 문자열 함수는 추가 기능을 제공하는 확장된 Ex 접미사 버전에서 사용할 수 있습니다. 예를 들어 RtlStringCbCatExaRtlStringCbCata의 기능을 확장합니다.

이 단원에 포함된 항목은 다음과 같습니다.

Kernel-Mode 안전 문자열 함수 요약

Kernel-Mode 안전한 문자열 함수 가져오기