C++의 최선의 보안 구현 방법

이 항목에서는 권장되는 보안 도구 및 구현 방법에 대한 정보를 제공합니다. 이러한 리소스와 도구를 사용한다고 해서 응용 프로그램이 공격으로부터 완전히 보호되는 것은 아니지만 공격을 상당 부분 방어할 수는 있습니다.

Visual C++ 보안 기능

이 단원에서는 Visual C++ 컴파일러와 링커에 기본으로 제공되는 보안 기능에 대해 설명합니다.

  • /GS(버퍼 보안 검사)
    이 컴파일러 옵션은 악용될 위험이 있는 함수에 오버런 감지 코드를 삽입하도록 컴파일러에 지시합니다. 오버런이 감지되면 실행이 중지됩니다. 이 옵션은 기본적으로 설정되어 있습니다.

  • /SAFESEH(이미지에 안전한 예외 처리기 포함)
    이 링커 옵션은 각 예외 처리기의 주소가 들어 있는 표를 출력 이미지에 포함하도록 링커에 지시합니다. 런타임에 운영 체제에서는 이 표를 사용하여 적합한 예외 처리기만 실행되도록 합니다. 이렇게 하면 런타임에 악의적인 공격으로 삽입된 예외 처리기가 실행되지 않도록 할 수 있습니다. 이 옵션은 기본적으로 비활성화됩니다.

  • /NXCOMPAT, /NXCOMPAT(데이터 실행 방지 기능과 호환)
    이 컴파일러 및 링커 옵션을 사용하면 DEP(데이터 실행 방지) 호환성을 사용하여 CPU에서 비코드 페이지를 실행하지 않도록 할 수 있습니다.

  • /analyze(엔터프라이즈 코드 분석)
    이 컴파일러 옵션은 버퍼 오버런, 초기화되지 않은 메모리, null 포인터 역참조 및 메모리 누수와 같은 잠재적인 보안 문제를 보고하는 코드 분석을 활성화합니다. 이 옵션은 기본적으로 비활성화됩니다. 자세한 내용은 C/C++용 코드 분석 개요를 참조하십시오.

  • /DYNAMICBASE(주소 공간 레이아웃을 임의로 지정)
    이 링커 옵션을 사용하면 실행을 시작할 때 메모리의 여러 위치에 로드될 수 있는 실행 가능한 이미지를 빌드할 수 있습니다. 또한 이 옵션을 사용하면 메모리에서의 스택 위치를 훨씬 더 예측하기 어려워집니다.

보안이 강화된 CRT

보안 문제가 발생할 수 있는 함수의 보안 버전을 포함하도록 CRT(C 런타임 라이브러리)가 확장되었습니다. 확인되지 않은 strcpy 문자열 복사 함수를 예로 들 수 있습니다. 이러한 함수의 안전하지 않은 이전 버전은 이제 사용되지 않으며 이러한 함수 버전을 사용하면 컴파일 타임 경고가 발생합니다. 이 컴파일 경고를 무시하지 말고 안전한 버전의 CRT 함수를 사용하는 것이 좋습니다. 자세한 내용은 Security Features in the CRT을 참조하십시오.

SafeInt 라이브러리

SafeInt Library를 사용하면 응용 프로그램이 수학 연산을 수행할 때 발생할 수 있는 정수 오버플로와 악용될 수 있는 기타 오류를 방지할 수 있습니다. SafeInt 라이브러리에는 SafeInt Class, SafeIntException Class 및 여러 SafeInt Functions가 포함됩니다.

SafeInt 클래스는 정수 오버플로 및 0으로 나누기가 수행되지 않도록 방지합니다. 이 클래스는 다른 형식의 값을 비교할 수 있도록 하고 두 가지 오류 처리 정책을 제공합니다. 기본 정책은 SafeInt 클래스에서 SafeIntException 클래스 예외를 throw하여 수학 연산을 수행할 수 없는 이유를 보고하는 것입니다. 두 번째 정책은 SafeInt 클래스에서 프로그램 실행을 중지하는 것입니다. 사용자 지정 정책을 정의할 수도 있습니다.

SafeInt 함수는 하나의 수학 연산에서 악용될 수 있는 오류가 발생하지 않도록 보호합니다. 다른 형식의 두 매개 변수를 같은 형식으로 변경하지 않고도 사용할 수 있습니다. SafeInt 클래스를 사용하면 여러 수학 연산을 보호할 수 있습니다.

확인된 반복기

확인된 반복기는 컨테이너 경계를 적용하는 반복기입니다. 기본적으로 확인된 반복기가 범위를 벗어나면 예외가 생성되고 프로그램 실행이 종료됩니다. 확인된 반복기에서는 _SECURE_SCL_THROWS_ITERATOR_DEBUG_LEVEL과 같은 전처리기 정의에 할당된 값에 따라 여러 수준의 응답을 제공합니다. 예를 들어 _ITERATOR_DEBUG_LEVEL=2에서 확인된 반복기는 어설션을 사용하여 제공되는 디버그 모드에서 포괄적인 정확성 검사를 제공합니다. 자세한 내용은 Checked Iterators를 참조하십시오.

관리 코드에 대한 코드 분석

FxCop라고도 하는 관리 코드에 대한 코드 분석은 Microsoft .NET Framework 디자인 지침에 따라 어셈블리를 검사하는 도구입니다. FxCop는 각 어셈블리 내의 코드와 메타데이터를 분석하여 다음과 같은 영역에 결함이 있는지 검사합니다.

  • 라이브러리 디자인

  • 지역화

  • 명명 규칙

  • 성능

  • 보안

관리 코드에 대한 코드 분석은 Visual Studio Application Lifecycle Management에 포함되어 있으며 https://code.msdn.microsoft.com/gotdotnet.aspx에서 다운로드할 수도 있습니다.

Windows 응용 프로그램 검증 도구

응용 프로그램 호환성 도구 키트의 일부로 제공되는 Application Verifier(AppVerifier)는 개발자가 응용 프로그램의 잠재적 호환성, 안정성, 보안 문제 등을 확인하는 데 사용할 수 있는 도구입니다.

AppVerifier는 응용 프로그램에서 운영 체제를 사용하는 방법을 모니터링합니다. AppVerifier는 응용 프로그램이 실행되는 동안 파일 시스템, 레지스트리, 메모리, API 등을 감시하고 발견하지 못한 문제에 대한 소스 코드 수준의 수정을 제안합니다.

해당 검증 도구를 사용하여 다음 작업을 수행합니다.

  • 일반적인 프로그래밍 실수로 인해 발생하는 응용 프로그램의 잠재적 호환성 오류를 테스트합니다.

  • 응용 프로그램에서 메모리 관련 문제를 검사합니다.

  • Windows 7 Software Logo Program 및 Windows Server 2008 R2 Logo Program과 같은 최신 로고 프로그램의 요구 사항을 응용 프로그램이 충족하는지 테스트합니다.

  • 응용 프로그램의 잠재적 보안 문제를 확인합니다.

Windows Application Compatibility Toolkit는 TechNet 웹 사이트의 "응용 프로그램 호환성" 페이지에서 다운로드할 수 있습니다.

.NET Framework 보안 기능

보안 정책 구성 - .NET Framework 보안 정책을 조정하는 데 필요한 지침과 도구에 대해 설명합니다.

Windows 사용자 계정

관리자 그룹에 속한 Windows 사용자 계정을 사용하면 개발자와 사용자가 보안 위험에 처할 수 있습니다. 자세한 내용은 사용자 그룹의 멤버로 실행을 참조하십시오.

Windows Vista에서 UAC(사용자 계정 컨트롤)를 사용한 보안 강화

UAC(사용자 계정 컨트롤)는 사용자 계정의 권한을 제한하는 Windows Vista의 기능입니다. 자세한 내용은 UAC(사용자 계정 컨트롤)가 응용 프로그램에 주는 영향을 참조하십시오.

참고 항목

참조

System.Security

개념

UAC(사용자 계정 컨트롤)가 응용 프로그램에 주는 영향

기타 리소스

응용 프로그램 보안