C 및 C++를 위한 컴파일러 옵션 하드닝 가이드
-
문서 제목: C 및 C++를 위한 컴파일러 옵션 하드닝 가이드
-
작성자: 오픈 소스 보안 재단(OpenSSF) 최선 실천 작업 그룹, 2025-03-28
-
요약:
- 이 문서는 C 및 C++ 코드의 신뢰성과 보안을 강화하기 위한 컴파일러 및 링커 옵션에 대한 가이드이다.
- 보안 메커니즘을 통해 잠재적 공격 및 오작동을 방지하는 애플리케이션 바이너리를 생성하는 것이 목표이다.
- 하드닝 옵션은 현대 운영 체제의 기존 플랫폼 보안 기능과 잘 통합되는 애플리케이션을 생성해야 한다.
- 개발 시 컴파일러 경고 강화, 정적 분석, 디버그 도구의 장점을 포함한다.
-
대상:
- C 또는 C++ 코드를 작성하는 사람들: 임베디드 장치, IoT 장치, 스마트폰 및 개인용 컴퓨터를 포함한 다양한 환경에서 보안 옵션과 호환되도록 한다.
- 프로덕션 환경에서 C 또는 C++ 코드를 빌드하는 사람들: 리눅스 배포판, 장치 제조업체 및 로컬 환경을 위해 C 또는 C++를 컴파일하는 사람들.
-
핵심 추천 플래그(모든 경우에 사용):
-O2 -Wall -Wformat -Wformat=2 -Wconversion -Wimplicit-fallthrough -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -D_GLIBCXX_ASSERTIONS -fstrict-flex-arrays=3 -fstack-clash-protection -fstack-protector-strong -Wl,-z,nodlopen -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -Wl,--no-copy-dt-needed-entries
-
특정 상황에서 추가 플래그 사용:
- GCC 사용 시:
-Wtrampolines
- 소스 코드가 좌우 쓰기만 포함할 때:
-Wbidi-chars=any
- 실행 파일에 대해:
-fPIE -pie
- 공유 라이브러리에 대해:
-fPIC -shared
- x86_64에 대해:
-fcf-protection=full
- aarch64에 대해:
-mbranch-protection=standard
- 프로덕션 코드에 대해:
-fno-delete-null-pointer-checks -fno-strict-overflow -fno-strict-aliasing -ftrivial-auto-var-init=zero
- 구식 C 구문을 오류로 처리하려면:
-Werror=implicit -Werror=incompatible-pointer-types -Werror=int-conversion
- GNU C 라이브러리 Pthreads를 사용하는 멀티스레드 C 코드에 대해:
-fexceptions
- 개발 중에는
-Werror
사용, 소스 배포 시에는 사용하지 않음
- GCC 사용 시:
-
컴파일러 옵션 하드닝이 중요한 이유:
- C 및 C++는 메모리 안전성 오류가 발생하기 쉬운 프로그래밍 언어.
- 공격자들은 종종 메모리 안전성 오류를 악용하여 시스템에 불법 접근.
- 컴파일러 옵션은 이러한 오류 탐지 및 런타임 보호 제공.
-
컴파일러 및 링커 옵션 추천:
- 컴파일 타임 체크 옵션(경고 발생)
- 런타임 보호 메커니즘을 활성화하는 옵션(메모리 오류 탐지 및 보호)
-
추가로:
- 프로덱션 코드와 테스트 코드는 자동화된 테스트 스위트를 통과해야 함.
- 기존 프로그램은 시간이 지나면서 옵션과 호환되도록 수정될 필요 있음.
- 하드닝 옵션은 성능에 영향을 줄 수 있으므로 성능 문제 발생 시 신중한 검토 필요.
2best.openssf.org링크 복사하기
AI 뉴스 요약은 뉴스의 내용을 AI가 요약(GPT-4 활용)한 것입니다. 따라서 틀린 내용을 포함할 수 있습니다. 뉴스의 자세한 내용을 확인하시려면 해당 뉴스 링크를 클릭해주세요.