교정 휴대 코드
Proof-carrying codePCC(Proof-Carriing Code)는 호스트 시스템이 응용 프로그램의 실행 가능 코드에 부수되는 정식 증명을 통해 응용 프로그램에 대한 속성을 확인할 수 있도록 하는 소프트웨어 메커니즘입니다.호스트 시스템은 증명의 유효성을 신속하게 검증할 수 있으며, 증명의 결론을 자체 보안 정책과 비교하여 애플리케이션을 실행해도 안전한지 여부를 판단할 수 있습니다.이것은, 메모리의 안전성(버퍼 오버플로우등의 문제를 방지하는 것)을 확보하는데 있어서 특히 도움이 됩니다.
교정 코드는 1996년 조지 네큘라와 피터 리에 의해 처음 기술되었다.
패킷 필터의 예시
1996년의 증명[1] 코드 관련 최초의 출판물에서는 패킷필터를 예로 들었습니다.사용자 모드어플리케이션은 머신 코드로 기술된 함수를 커널에 인계하여 어플리케이션이 특정 네트워크 패킷 처리에 관심이 있는지 여부를 판단합니다.패킷 필터는 커널 모드에서 실행되므로 커널 데이터 구조에 쓰는 악성 코드가 포함된 경우 시스템의 무결성이 손상될 수 있습니다.이 문제에 대한 기존의 접근법에는 패킷필터링을 위한 도메인 고유의 언어 해석, 각 메모리액세스에 체크 삽입(소프트웨어 장애 분리) 및 실행 전에 커널에 의해 컴파일된 고급 언어로 필터 쓰기가 포함됩니다.이러한 접근법은 코드가 실행될 때마다가 아니라 로드될 때만 컴파일되는 커널 내 컴파일 방식을 제외하고 패킷필터처럼 자주 실행되는 코드에 대해 성능상의 단점이 있습니다.
프루프 반송 코드를 사용하면 커널은 패킷필터가 준수해야 하는 속성을 지정하는 보안 정책을 퍼블리시합니다.예를 들어 패킷 외부 메모리와 스크래치 메모리 영역에는 액세스하지 않습니다.정리 프로버는 기계 코드가 이 정책을 충족함을 보여주기 위해 사용됩니다.이 증명의 단계는 기록되고 커널 프로그램 로더에 주어진 기계 코드에 첨부됩니다.그러면 프로그램 로더는 증빙을 신속하게 검증할 수 있으며 이후 추가 검사 없이 기계 코드를 실행할 수 있습니다.악의적인 당사자가 기계 코드 또는 증명 중 하나를 수정한 경우 결과 증명 전달 코드는 비활성화되거나 무해합니다(여전히 보안 정책을 충족합니다).
「 」를 참조해 주세요.
레퍼런스
- ^ Necula, G. C. 및 Lee, P. 1996.런타임 체크 없이 안전한 커널 확장입니다.SIGOPS 운영체제 리뷰 30, SI(1996년 10월), 229–243.