버퍼오버플로우 공격

김재현·2025년 10월 25일

네트워크 및 보안

목록 보기
7/12

버퍼 오버플로우

*매우 일반적인 공격 메커니즘

*예방 기법이 비교적 잘 밝혀져 있고 문서화 되어있음

*아직도 보안 전문가들의 중요한 관심 사항

-기존 운영체제와 애플리케이션들에 있는 버그 코드의 우샨

-프로그래머의 부주의한 프로그래밍 습관의 지속

버퍼오버플로우?

버퍼 또는 데이터 저장 영역에 할당된 용량보다 더 많은 자료를 입력하여 다른 정보를 변경할 수있는 인터페이스에서 조건. 공격자는 이런 취약점을 이용해 시스템을 손상시키거나 시스템을 제어할 수 있는 특별히 조작된 코드를 삽입

<버퍼 오버플로우 기초>

*하나의 프로세스가 고정된 크기의 버퍼 용량을 초과하는 데이터를 저장하려 할 때의 프로그래밍 에러

*인접 메모리 공간을 덮어씀

-인접 공간에는 프로그램의 다른 변수, 매개변수 또는 복귀주소나 이전 스택 프레임의 포인터 같은 프로그램 제어 데이터들이 저장되어 있을 수 있음

*버퍼는 스택이나 힙 또는 프로세스의 데이터 섹션에 위치

결과:

-프로그램 데이터의 손상

-예상치 못한 제어 전환

-메모리 접근 위반

-공격자에 의해 선택된 코드 실행

<버퍼 오버플로우 공격>

*공격자의 제어 하에 외부에서 유입한 데이터를 사용하여 동작될 수있는 프로그램의 버퍼 오버플로우 취약점을 찾아내야 함

*버퍼가 프로세스의 메모리에 어떻게 저장되는지를 이해해서 인접 메모리 영역을 손상시킬 가능성과 프로그램 실행 제어를 변경시킬 가능성을 찾아내야 함

(취약한 프로그램의 식별 방식)

-프로그램 소스 분석/검사

초과된 용량의 입력을 제공해 프로그램의 실행을 추적해봄

-프로그램의 취약점을 자동으로 찾아주는 퍼징과 같은 도구 사용

**기계 수준에서 컴퓨터 프로세서에 의해 실행되는 기계어가 처리하는 모든 데이터는 프로세서의 레지스터나 메모리에 저장됨

<스택 버퍼 오버플로우>

*함수의 지역 변수처럼 공격 대상 버퍼가 스택에 있을 떄 발생

-스택 스매싱이라고도 불림

-모리스 웜에 의해 사용: fingerd데몬에서 사용한 c의 gets()라이브러리 함수의 버퍼 오버플로우 미검사 악용

-일부 라이브러리 함수에서 버퍼 오버플로우 여부를 검사하지 않음을 이용함

profile
문제를 해결하고, 더 나은 경험을 만드는 것을 즐깁니다

0개의 댓글