보안 고려 사항: Microsoft Windows 컨트롤
이 항목에서는 Windows 컨트롤과 관련된 보안 고려 사항에 대한 정보를 제공합니다. 이 항목의 정보는 보안 문제에 대해 알아야 할 모든 정보를 제공하지 않습니다. 이 기술을 시작점으로 사용하고 이 기술 영역에 대한 참조로 사용합니다.
컴퓨터 간의 상호 연결은 일반적입니다. 개발자의 주요 관심사는 애플리케이션 보안이어야 합니다. 다음 섹션에서는 Windows 컨트롤을 프로그래밍할 때 고려해야 할 몇 가지 잠재적인 보안 문제에 대해 설명합니다.
Null로 종료된 제어 메시지
대부분의 컨트롤 메시지와 매크로에는 문자열 매개 변수가 있습니다. 이러한 메시지는 입력 문자열의 유효성을 검사하지 않는 경우가 많으며, 특히 종료 '\0'
확인하지 않습니다. 문자열을 매개 변수로 사용하는 메시지를 호출할 때 문자열이 null로 종료되도록 명시적으로 지정합니다.
문자열 사용
Windows 컨트롤을 프로그래밍할 때 문자열을 조작해야 합니다. 거의 모든 컨트롤에 텍스트를 삽입해야 합니다. 예를 들어 목록 상자를 채하려면 컨트롤에 문자열을 로드해야 합니다. 문자열을 잘못 사용하면 버퍼 오버런이 발생하는 경우가 많으므로 이 보안 위험을 방지하기 위해 주의해야 합니다.
버퍼 오버런에 대한 자세한 내용은 보안 코드 작성 Michael Howard 및 David LeBlanc, Microsoft Press, 2002 및 보안 API 대한모범 사례를 참조하세요.
입력 유효성 검사
다음 제어 메시지는 보안 문제를 표시할 수 있습니다.
- CB_GETLBTEXT
- LVM_GETISEARCHSTRING
- SB_GETTEXT
- SB_GETTIPTEXT
- TB_GETBUTTONTEXT
- TTM_GETTEXT
- TVM_GETISEARCHSTRING
텍스트 길이를 가져오기 위해 호출 간에 텍스트가 변경되고 텍스트가 표시되거나 사용되는 시간이 변경되면 버퍼 오버런이 발생할 수 있습니다. 이를 방지하려면 문자열을 사용하기 전에 유효성을 검사해야 합니다. 또한 텍스트, CB_GETLBTEXT, TB_GETBUTTONTEXT및 TTM_GETTEXT검색하는 메시지에는 버퍼 오버런 가능성을 나타내는 버퍼 크기 매개 변수가 없습니다.
CB_GETLBTEXT 또는 SB_GETTEXT사용하는 경우 먼저 CB_GETLBTEXTLEN 또는 SB_GETTEXTLENGTH 호출하여 버퍼 크기를 가져와야 합니다. 이러한 메시지 중 일부인 TB_GETBUTTONTEXT, LVM_GETISEARCHSTRING및 TVM_GETISEARCHSTRINGNULL 매개 변수 값으로 호출하여 문자열을 검색하기 위해 메시지를 호출하기 전에 문자열의 길이를 가져올 수 있습니다.
특히 주의해야 하는 메시지는 상태 표시줄 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 매개 변수 값을 전달하여 메시지를 호출하여 버퍼 크기를 가져온 다음 메시지를 두 번째로 호출하여 문자열을 검색합니다. |
관련 항목