버퍼 오버플로우 악용이 발생하는 방식

공격자는 버퍼 오버플로우 악용을 사용하여 입력 프로세스를 위해 예약된 고정 크기 메모리 버퍼를 오버플로우하여 실행 파일 코드를 실행합니다. 이 코드를 사용하면 공격자가 대상 컴퓨터를 제어하거나 데이터를 손상시킬 수 있습니다.

두 가지 유형의 버퍼 오버플로우 악용이 있습니다.
  • 힙 기반 공격 — 프로그램에 예약된 메모리를 쇄도하게 하지만 수행하기 어려우며 드뭅니다.
  • 스택 기반 공격 — 스택 메모리 개체를 사용하여 사용자 입력을 저장하며 가장 흔합니다.
다음 프로세스는 스택 기반 버퍼 오버플로우 공격을 설명합니다.
  1. 정상 스택 메모리 프로세스 — 고정 크기 스택 메모리 개체는 주로 비어 있으며 사용자 입력을 기다립니다. 프로그램이 사용자로부터 이름 같은 입력을 받으면 데이터는 스택 상단에 저장되며 반환 메모리 주소가 할당됩니다. 스택이 처리되면 사용자 입력은 프로그램에서 지정한 반환 주소로 전송됩니다.
  2. 스택 오버플로우 — 프로그램이 작성되면 특정 크기의 메모리 공간이 데이터용으로 예약됩니다. 작성된 데이터가 메모리 스택 내에 예약된 공간보다 크면 스택이 오버플로우됩니다. 이는 악의적인 입력과 결합될 때만 발생하는 문제입니다.
  3. 오버플로우 악용 — 프로그램이 사용자의 이름 입력을 기다리고 있지만 공격자가 스택 크기를 초과하는 실행 명령을 입력하는 경우 해당 명령은 예약된 공간 외부에 저장됩니다.
  4. 악의적인 코드 실행 — 이 명령은 스택 버퍼 공간을 초과하기 때문에 자동으로 실행되지 않습니다. 그러나 공격자가 악의적인 명령을 가리키는 반환 주소를 제공하게 되면 실행될 수 있습니다. 처음에는 버퍼 오버플로우로 인해 프로그램이 충돌하지만 프로그램이 공격자가 제공하는 반환 주소를 사용하여 복구를 시도합니다. 반환 주소가 유효한 주소인 경우 악의적인 명령이 실행됩니다.
  5. 권한 악용 — 프로그램은 주로 커널 모드 또는 서비스 계정에서 상속한 권한을 사용하여 실행되기 때문에 악의적인 코드는 이제 손상된 응용 프로그램과 같은 권한을 사용하여 실행됩니다. 이는 공격자가 운영 체제를 완벽하게 제어할 수 있음을 의미합니다.

버퍼 오버플로우 악용이 발생하는 방식