Universidad de Magallanes

Investigación


Dirección de Investigación


facebook twitter youtube
02 de agosto del 2019

buffer overflow 예제

어셈블리 및 C/C++는 메모리에 직접 액세스할 수 있고 강력하게 입력되지 않기 때문에 버퍼 오버플로에 취약한 인기 있는 프로그래밍 언어입니다. [14] C는 메모리의 모든 부분에서 데이터에 액세스하거나 덮어쓰는 것에 대한 기본 제공 보호를 제공하지 않습니다. 보다 구체적으로 는 버퍼에 기록된 데이터가 해당 버퍼의 경계 내에 있는지 확인하지 않습니다. 표준 C++ 라이브러리는 데이터를 안전하게 버퍼링하는 여러 가지 방법을 제공하며, C++의 표준 템플릿 라이브러리(STL)는 프로그래머가 데이터에 액세스하는 동안 검사를 명시적으로 요청하는지 여부를 선택적으로 경계 검사를 수행할 수 있는 컨테이너를 제공합니다. 예를 들어 벡터의 멤버 함수 at()는 경계 검사를 수행하고 경계 검사가 실패할 경우 out_of_range 예외를 throw합니다. [15] 그러나 경계 검사가 명시적으로 호출되지 않은 경우 C++는 C와 마찬가지로 행동합니다. 버퍼 오버플로를 방지하는 기술도 C에 존재합니다. 그런 다음 함수가 종료될 때 반환할 위치를 알아야 하므로 다음 명령의 주소가 반환 주소로 스택에 푸시됩니다. 이 코드 예제에서 다음 명령은 func(argv[1]));(줄 14의 메모리 주소)에 대한 명령입니다. 위의 출력 뒤에 논리가 있습니다. 공격자가 한 일은 버퍼가 보유할 수 있는 것보다 큰 길이의 입력을 제공했으며, 특정 입력 길이에서 버퍼 오버플로가 이루어지므로 정수 `pass`의 메모리를 덮어썼습니다. 따라서 잘못된 암호에도 불구하고 `pass`의 값은 0이 아니므로 루트 권한이 공격자에게 부여되었습니다. 우리의 바이너리 응용 프로그램이 ELF 형식으로있는 경우, 우리는 그것을 항문화하고 버퍼 오버 플로우 오류를 악용하는 필수품 정보를 찾기 위해 objdump 프로그램을 사용할 수 있습니다.

그 이후로 적어도 두 개의 주요 인터넷 웜이 버퍼 오버플로를 악용하여 많은 수의 시스템을 손상시켰습니다. 2001년 Code Red 웜은 마이크로소프트의 인터넷 정보 서비스(IIS) 5.0[43]에서 버퍼 오버플로를 악용했으며, 2003년에는 SQL Slammer 웜이 Microsoft SQL Server 2000을 실행하는 컴퓨터를 손상시켰습니다. [44] 공격자는 버퍼 오버플로를 사용하여 웹 응용 프로그램의 실행 스택을 손상시다. 공격자는 웹 응용 프로그램에 신중하게 조작된 입력을 전송하여 웹 응용 프로그램이 임의의 코드를 실행하여 컴퓨터를 효과적으로 인수할 수 있습니다. 버퍼를 사용할 때마다 버퍼의 최대 길이에 주의해야 합니다. 적절하게 처리하십시오. 거의 모든 알려진 웹 서버, 응용 프로그램 서버 및 웹 응용 프로그램 환경은 버퍼 오버플로에 취약하며, 이러한 공격에 영향을 받지 않는 Java 또는 Python과 같은 해석된 언어로 작성된 환경은 예외입니다. 통역자 자체에 오버플로우) 따라서 이러한 종류의 시나리오에서는 버퍼 오버 플로우가 이웃 메모리를 조용히 손상시키고 손상된 메모리가 프로그램에서 사용되는 경우 예기치 않은 결과가 발생할 수 있습니다.

inicio atrás arriba

DESTACADOS

  • LINKS


  • Dirección de Investigación

    Investigación • Avenida Bulnes 01890 • Punta Arenas • Chile
    Teléfono: +56 61 2 209 397 • Email: dir.investigacion@umag.cl