integer overflow 예제

계산 하기 전에 작업의 이연수를 확인 하는 것이 안전 으로 간주 됩니다. 이전 예제는 B > SIZE_MAX – A . true이면 두 가지가 함께 추가되고 size_t 형식의 변수에 저장되면 정수 오버플로가 발생합니다. 마찬가지로 B > SIZE_MAX / A가 B를 곱한 것이 오버플로되는지 확인해야 합니다. 마이크로 소프트 / IBM 매크로 어셈블러 (MASM) 버전 1.00, 그리고 가능성이 같은 파스칼 컴파일러에 의해 만들어진 다른 모든 프로그램은, 스택 설정 코드에 정수 오버 플로우 및 서명 오류가 있었다, 이는 일부에서 최신 DOS 기계 또는 에뮬레이터에서 실행되지 못하게 512KB 이상의 메모리를 가진 일반적인 구성입니다. 프로그램이 중단되거나 오류 메시지를 표시하고 DOS로 종료합니다. [31] 이 OpenSSH 취약점은 정수 오버플로 취약점의 완벽한 예입니다. 이 취약점은 다음과 같은 코드 조각으로 인해 발생합니다: 메모리 오류는 일반적으로 소프트웨어 의 소프트웨어 오류로 인해 지정된 응용 프로그램에 존재하는 취약점(그림 21.1의 벽에 구멍으로 묘사됨)의 악용에서 비롯됩니다. 구현. 메모리 오류로 이어지는 가장 일반적인 소프트웨어 오류는 오프바이, 정수 및 버퍼 오버플로입니다. 정수 언더플로우는 산술 연산의 결과가 대상 정수 유형의 최소값보다 작을 때 발생합니다. 정수 언더플로가 발생하면 해석된 값은 최소값에서 정수 형식의 최대값으로 둘러싸입니다. 완전한 시스템 커버리지 부족 – 이 도구는 독점적이고 제한된 기능을 갖춘 일부 기능을 제공하며, 각 도구는 엔터프라이즈 응용 프로그램 공간의 하위 집합에서만 값을 제공하므로 두 개 이상의 정적 분석 도구를 사용하여 자신의 강점을 결합하고 자신의 약점을 피할 수 있습니다.

NSA [Buxbaum 2007]에서 수행된 정적 분석 도구의 최근 비교에서 언급했듯이 “취약성에 대한 소프트웨어 테스트 프로세스를 자동화하려는 조직은 다양한 도구를 배포할 수밖에 없습니다.” 현재 소스/바이너리 코드 분석 도구는 상호 운용성이 거의 없으므로 일반적인 시스템의 광범위한 언어, 플랫폼 및 기술에 대한 적절한 범위를 제공하는 도구 집합을 평가, 선택 및 통합하는 데 많은 비용이 듭니다. 포함. 한 취약점 보고서의 결과가 반드시 취약점의 패턴 및 상태와 일치하지는 않으므로 동일한 취약점에 대한 두 도구의 보고서는 동일하지 않습니다. 예를 들어 버퍼 오버플로 취약점에 대한 증거는 코드 전체에 흩어져 있습니다: 버퍼 쓰기 작업, 기록되는 데이터 항목, 버퍼가 할당된 다른 위치, 버퍼 길이가 있는 다른 위치 계산. 공격자가 응용 프로그램에 일부 입력을 제공하여 버퍼 오버플로를 악용할 수 있는 코드 경로가 있습니다. 또한 버퍼 오버플로는 정수 오버플로와 같은 다른 문제로 인해 발생할 수 있습니다. 이 모든 증거는 공통 어휘와 구조를 사용하여 단일 버퍼 오버플로우 보고서에서 고려되고 보고되어야 합니다. 공통 보고 표준을 사용하지 않으면 상호 운용성과 공통성이 부족하기 때문에 여러 취약점 검색 도구의 보고서를 병합하고 전체 보고서 품질이 크게 향상되는 상황이 발생합니다. 어휘는 1) 여러 도구에 의해 보고되는 취약점을 선택하기 어렵게 만듭니다. 2) 주어진 취약점의 경우 전체 시스템에서 동일한 취약점 패턴의 적용 범위를 추정합니다. 그리고 3) 도구의 무리에 의해 시스템의 범위를 얻을.