buffer overflow 공격 예제

어셈블리 및 C/C++는 메모리에 직접 액세스할 수 있고 강력하게 입력되지 않기 때문에 버퍼 오버플로에 취약한 인기 있는 프로그래밍 언어입니다. [14] C는 메모리의 모든 부분에서 데이터에 액세스하거나 덮어쓰는 것에 대한 기본 제공 보호를 제공하지 않습니다. 보다 구체적으로 는 버퍼에 기록된 데이터가 해당 버퍼의 경계 내에 있는지 확인하지 않습니다. 표준 C++ 라이브러리는 데이터를 안전하게 버퍼링하는 여러 가지 방법을 제공하며, C++의 표준 템플릿 라이브러리(STL)는 프로그래머가 데이터에 액세스하는 동안 검사를 명시적으로 요청하는지 여부를 선택적으로 경계 검사를 수행할 수 있는 컨테이너를 제공합니다. 예를 들어 벡터의 멤버 함수 at()는 경계 검사를 수행하고 경계 검사가 실패할 경우 out_of_range 예외를 throw합니다. [15] 그러나 경계 검사가 명시적으로 호출되지 않은 경우 C++는 C와 마찬가지로 행동합니다. 버퍼 오버플로를 방지하는 기술도 C에 존재합니다. 이 예제에서는 20 (5 배 4 바이트)의 크기의 E 블록을 선택했습니다. 즉, 108바이트 페이로드에서 NOP 썰매에 63바이트가 남았습니다. 플로우 공격을 통해 버퍼를 수행 할 수있는 코드 주입 및 실행과 같은 몇 가지 다른 고급 기술이 있지만 버퍼의 기본 사항, 오버 플로우 및 유해한 이유에 대해 먼저 아는 것이 중요합니다.

그러나 gets() 함수가 배열 경계를 검사하지 않기 때문에 이 프로그램에서 버퍼 오버플로가 발생할 수 있습니다. 반송 주소를 변경하는 방법을 보았습니다. 버퍼문제를 악용하기 위해 반환 주소를 어딘가로 변경하는 것을 목표로 하며, 실행시 공격자로서 우리에게 유익한 일을 할 수 있는 몇 가지 코드가 있습니다. 쉘을 실행하는 것과 같습니다. 방정식의 마지막 부분은 실행 프로그램의 사용 권한을 둘러싼 것입니다. 대부분의 OS는 현재 로그온한 사용자의 액세스 수준을 제어하는 메커니즘을 가지고 있으며, 실행 프로그램은 일반적으로 더 높은 수준의 권한이 필요합니다. 따라서 이러한 프로그램은 커널 모드에서 실행되거나 서비스 계정에서 상속된 사용 권한으로 실행됩니다. 스택 오버플로 공격이 새 반환 주소에서 찾은 명령을 실행하면 프로그램은 여전히 실행 중이라고 생각합니다. 즉, 열려 있는 명령 프롬프트 창이 손상된 응용 프로그램과 동일한 사용 권한 집합으로 실행되고 있습니다. 일반적으로 이것은 종종 공격자가 OS를 완전히 제어할 수 있음을 의미합니다.

버퍼는 데이터 저장소의 임시 영역입니다. 프로그램 또는 시스템 프로세스에 의해 원래 할당된 데이터보다 많은 데이터가 배치되면 추가 데이터가 오버플로됩니다.

  • Información

    • Últimas Entradas

      가우스 법칙 예제

      어셈블리 및 C/C++는 메모리에 직접 액세스할 수 있고…

      피벗 예제

      어셈블리 및 C/C++는 메모리에 직접 액세스할 수 있고…

      페르미 추정 예제

      어셈블리 및 C/C++는 메모리에 직접 액세스할 수 있고…