안전한 문자열 함수 사용
많은 시스템 보안 문제는 부실한 버퍼 처리 및 결과 버퍼 오버런으로 인해 발생합니다. 부실한 버퍼 처리는 종종 문자열 조작 작업과 관련이 있습니다. 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 함수 사용을 참조하세요.
커널 모드 안전 문자열 함수 집합은 다음 두 하위 집합으로 구성됩니다.
-
이러한 각 함수는 더블 바이트 유니코드 문자를 지원하는 W 접미사 버전과 단일 바이트 ANSI 문자를 지원하는 A 접미사 버전에서 사용할 수 있습니다. 예를 들어 두 문자열을 연결하고 추가된 문자열의 길이 를 제한하는 RtlStringCbCatN은 RtlStringCbCatNW 및 RtlStringCbCatNA로 사용할 수 있습니다.
UNICODE_STRING 구조체에 대한 안전한 문자열 함수
이러한 각 함수는 UNICODE_STRING 구조를 입력 또는 출력 매개 변수 또는 둘 다로 허용합니다. 예를 들어 RtlStringCbCopyUnicodeString 은 구조를 입력 매개 변수로 허용하고 RtlUnicodeStringCopyString 은 구조를 출력 매개 변수로 허용하고 RtlUnicodeStringCopy 는 구조를 입력 및 출력 매개 변수로 모두 허용합니다.
커널 모드 안전 문자열 함수는 다음 기능을 제공합니다.
각 안전 문자열 함수는 대상 버퍼의 크기를 입력으로 받습니다. 따라서 함수는 버퍼의 끝을 지나서 작성되지 않도록 할 수 있습니다.
유니코드 및 ANSI 문자열 함수는 작업이 의도한 결과를 자르더라도 모든 출력 문자열을 NULL 문자로 종료합니다.
모든 안전 문자열 함수는 하나의 가능한 성공 코드(STATUS_SUCCESS)만 사용하여 NTSTATUS 값을 반환합니다.
가장 안전한 문자열 함수는 바이트 개수 버전과 문자 개수 버전 모두에서 사용할 수 있습니다. 예를 들어 RtlStringCbCata 는 두 개의 바이트 계산 문자열을 연결하고 RtlStringCchCata 는 두 개의 문자 개수 문자열을 연결합니다.
대부분의 안전한 문자열 함수는 추가 기능을 제공하는 확장된 Ex 접미사 버전에서 사용할 수 있습니다. 예를 들어 RtlStringCbCatExa 는 RtlStringCbCata의 기능을 확장합니다.
이 단원에 포함된 항목은 다음과 같습니다.