보안 고려 사항: Microsoft Windows 컨트롤

이 항목에서는 Windows 컨트롤과 관련된 보안 고려 사항에 대한 정보를 제공합니다. 이 항목의 정보에 보안 문제와 관련해 알아야 할 모든 내용이 나와 있지는 않습니다. 이 내용을 시작점이자 이 기술 영역에 대한 참조로 사용하세요.

컴퓨터 간의 상호 연결은 일반적입니다. 개발자의 주요 관심사는 애플리케이션 보안이어야 합니다. 다음 섹션에서는 Windows 컨트롤을 프로그래밍할 때 고려해야 할 몇 가지 잠재적인 보안 문제에 대해 설명합니다.

Null로 종료된 제어 메시지

대부분의 컨트롤 메시지와 매크로에는 문자열 매개 변수가 있습니다. 이러한 메시지는 입력 문자열의 유효성을 검사하지 않는 경우가 많은데, 특히 종료 '\0'을 확인하지 않습니다. 문자열을 매개 변수로 사용하는 메시지를 호출할 때 문자열이 null로 종료되도록 명시적으로 지정합니다.

문자열 사용

Windows 컨트롤을 프로그래밍할 때 문자열을 조작해야 합니다. 거의 모든 컨트롤에 텍스트를 삽입해야 합니다. 예를 들어, 목록 상자를 채우려면 컨트롤에 문자열을 로드해야 합니다. 문자열을 잘못 사용하면 버퍼 오버런이 발생하는 경우가 많기 때문에 이 보안 위험을 방지하려면 주의해야 합니다.

버퍼 오버런에 대한 자세한 내용은 2002년 Microsoft Press, Michael Howard 및 David LeBlanc의 보안 코드 작성보안 API에 대한 모범 사례를 참조하세요.

입력 유효성 검사

다음 제어 메시지는 보안 문제를 표시할 수 있습니다.

텍스트 길이를 가져오기 위한 호출과 텍스트가 표시되거나 사용되는 시간 사이에 텍스트가 변경되면 버퍼 오버런이 발생할 수 있습니다. 이를 방지하려면 문자열을 사용하기 전에 유효성을 검사해야 합니다. 또한 텍스트를 검색하는 메시지, CB_GETLBTEXT, TB_GETBUTTONTEXT, TTM_GETTEXT에는 버퍼 오버런 가능성을 나타내는 버퍼 크기 매개 변수가 없습니다.

CB_GETLBTEXT 또는 SB_GETTEXT를 사용하는 경우, 먼저 CB_GETLBTEXTLEN 또는 SB_GETTEXTLENGTH를 호출하여 버퍼 크기를 가져와야 합니다. 이러한 메시지 중 일부(TB_GETBUTTONTEXT, LVM_GETISEARCHSTRING, TVM_GETISEARCHSTRING)를 NULL 매개 변수 값으로 호출하여 문자열을 검색하기 위해 메시지를 호출하기 전에 문자열의 길이를 가져올 수 있습니다.

특히 주의해야 하는 메시지는 상태 표시줄 SB_GETTIPTEXT 메시지입니다. 이 메시지는 검색할 문자열의 길이를 쿼리할 수 있는 방법을 제공하지 않습니다.

암호 사용

암호로 보호된 편집 컨트롤(ES_PASSWORD 스타일)을 사용하는 경우, 검색된 텍스트를 포함하는 버퍼를 가능한 한 빨리 0으로 설정하여 메모리에 사용자의 암호가 노출되지 않도록 해야 합니다.

보안 경고

다음 표에는 잘못 사용되는 경우 애플리케이션의 보안을 손상시킬 수 있는 기능이 나열되어 있습니다. 여기에 나열된 메시지는 버퍼 크기를 지정하는 매개 변수를 제공하지 않습니다.

기능 완화 방법
DlgDirListComboBox 함수에서 사용하는 버퍼를 쓸 수 있고 null로 종료되었는지 확인합니다.
CB_GETLBTEXT CB_GETLBTEXTLEN을 호출해 버퍼 크기를 가져온 다음 CB_GETLBTEXT를 호출하여 문자열을 검색합니다.
LVM_GETISEARCHSTRING NULL 매개 변수 값으로 메시지를 호출해 버퍼 크기를 가져온 다음 메시지를 다시 호출하여 문자열을 검색합니다.
SB_GETTEXT SB_GETTEXTLENGTH를 호출해 버퍼 크기를 가져온 다음 SB_GETTEXT를 호출하여 문자열을 검색합니다.
TB_GETBUTTONTEXT NULL 매개 변수 값으로 메시지를 호출해 버퍼 크기를 가져온 다음 메시지를 다시 호출하여 문자열을 검색합니다.
TTM_GETTEXT 이 메시지는 버퍼 크기를 알거나 지정할 수 있는 방법을 제공하지 않습니다.
TVM_GETISEARCHSTRING NULL 매개 변수 값을 전달하여 메시지를 호출해 버퍼 크기를 가져온 다음 메시지를 다시 호출하여 문자열을 검색합니다.

 

기타 리소스

Microsoft 보안

보안

Microsoft 보안 대응 센터

보안 API에 대한 모범 사례