LLVM 개발자는 C++에서 안전한 버퍼 처리를 제안합니다.

LLVM 로고

LLVM은 컴파일러를 개발하고 새로운 프로그래밍 언어를 구축하고 기존 언어를 개선하는 데 도움이 되는 프레임워크입니다.

LLVM 프로젝트 개발자는 보안 강화를 목표로 여러 변경 사항을 제안했습니다. 프로젝트의 C + + 미션 크리티컬하고 버퍼 오버런으로 인한 오류를 제거하는 수단을 제공합니다.

따라서 그들이 발표한 제안은 특히 두 가지 영역의 작업에 중점을 둡니다. 버퍼를 안전하게 사용할 수 있는 개발 모델을 제공하는 것과 libc++ 표준 함수 라이브러리의 보안을 강화하는 것입니다.

제안된 C++용 보안 프로그래밍 모델 «원시 포인터를 조작하는 대신 버퍼로 작업할 때 표준 라이브러리에서 제공하는 클래스를 사용하는 것입니다.». 예를 들어, std::array, std::vector 및 std::span 클래스를 사용하는 것이 제안되며, 이는 경계를 벗어난 할당 메모리에 대한 런타임 검사와 함께 추가됩니다.

우리의 목표는 중요한 C++ 코드 기반의 보안을 개선하는 것입니다. 이를 위해 우리는 두 가지 아이디어로 작업할 계획입니다.

강화된 C++ 표준 라이브러리
C++ 안전 버퍼 프로그래밍 모델 및 채택 도구
강화된 libc++는 일반적으로 C++ 표준 라이브러리 인터페이스를 보다 안전하게 만들기 위한 것입니다.

강화된 libc++와 함께 C++의 안전한 버퍼 프로그래밍 모델은 범위를 벗어난 메모리 액세스에 대한 런타임 완화를 제공합니다. 채택 도구는 이 새로운 프로그래밍 모델로의 코드 마이그레이션을 자동화합니다.

이 외에도 다음과 같이 언급합니다. "위험한" 프로그래밍 관행과 싸우기 위해 클랜에서, 만약 모든 포인터 산술 연산에 대해 컴파일러 경고를 발행하도록 제안합니다., "cppcoreguidelines-pro-bounds-pointer-arithmetic" 플래그를 사용할 때의 clang-tidy linter 경고와 유사합니다. 이에 대한 지원은 LLVM 16에 표시됩니다. 이러한 경고를 활성화하기 위해 기본적으로 비활성화된 별도의 플래그가 clang에 추가됩니다. .

libc++에서 선택적 보호 모드를 구현할 계획입니다. 활성화되면 런타임에 정의되지 않은 동작으로 이어지는 일부 상황을 감지합니다. 예를 들어 수업에서 std::span 및 std::vector, 범위를 벗어난 액세스가 모니터링되며, 이 경우 프로그램이 실패합니다.

이러한 추가 런타임 검사는 개별적으로 제어할 수 있는 여러 범주로 그룹화됩니다. 의도는 플랫폼에서 libc++를 제공하는 공급업체가 원하는 보안 수준에 따라 제공 라이브러리(있는 경우)에서 활성화할 검사를 결정할 수 있다는 것입니다.

개발자는 이러한 변경 사항을 추가하면 libc++가 C++ 표준과 계속 호환될 것이라고 믿습니다. 정의되지 않은 동작의 경우를 처리하는 방법에 대한 선택은 무엇보다도 라이브러리 개발자에게 달려 있기 때문입니다. 출구.

라스 libc++의 런타임 검사는 범주로 나눌 계획입니다. 개별적으로 포함될 수 있습니다. 더 복잡한 작업이나 ABI 변경을 일으키지 않는 제안된 검사 중 일부는 이미 libc++의 안전 모드(안전 모드)에서 구현되었습니다.

다시 말하지만 궁극적인 목표는 배송된 라이브러리가 프로덕션에서 이러한 검사를 가능하게 하는 것입니다. 이것은 "디버그 전용" 기능이 아니지만 결국 오랫동안 고장난 "디버그 모드"를 대체하게 될 것입니다.

또한, 일련의 코드 수정 도구를 준비할 계획입니다. 이를 통해 컨테이너에서 변수를 원시 포인터로 대체할 수 있고 컨테이너가 포인터를 직접 대체할 수 없는 상황에서 대체 핸들러를 적용할 수 있습니다(예: "if(array_pointer)" 구성은 "if(span.data( )»).설정은 지역 변수뿐만 아니라 포인터가 있는 유형 매개변수에도 적용할 수 있습니다.

라고도 언급되어 있다 "Clang 정적 분석기 검사기"를 고려 중입니다. 다음과 같은 경우 경고하는 경로 감지 표준::스팬 스팬의 생성자에 지정된 크기보다 작은 컨테이너에서 생성됩니다. 해당 검사기는 자체 포함되어 있으며 자체적으로 유용합니다. 모든 것이 잘되면 모든 사용자에 대해 기본적으로 활성화됩니다.

최종적으로 그것에 대해 더 많이 알고 싶다면에서 세부 정보를 확인할 수 있습니다. 다음 링크.


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자: AB Internet Networks 2008 SL
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.