*매우 일반적인 공격 메커니즘
*예방 기법이 비교적 잘 밝혀져 있고 문서화 되어있음
*아직도 보안 전문가들의 중요한 관심 사항
-기존 운영체제와 애플리케이션들에 있는 버그 코드의 우샨
-프로그래머의 부주의한 프로그래밍 습관의 지속
버퍼 또는 데이터 저장 영역에 할당된 용량보다 더 많은 자료를 입력하여 다른 정보를 변경할 수있는 인터페이스에서 조건. 공격자는 이런 취약점을 이용해 시스템을 손상시키거나 시스템을 제어할 수 있는 특별히 조작된 코드를 삽입
<버퍼 오버플로우 기초>
*하나의 프로세스가 고정된 크기의 버퍼 용량을 초과하는 데이터를 저장하려 할 때의 프로그래밍 에러
*인접 메모리 공간을 덮어씀
-인접 공간에는 프로그램의 다른 변수, 매개변수 또는 복귀주소나 이전 스택 프레임의 포인터 같은 프로그램 제어 데이터들이 저장되어 있을 수 있음
*버퍼는 스택이나 힙 또는 프로세스의 데이터 섹션에 위치
결과:
-프로그램 데이터의 손상
-예상치 못한 제어 전환
-메모리 접근 위반
-공격자에 의해 선택된 코드 실행
<버퍼 오버플로우 공격>
*공격자의 제어 하에 외부에서 유입한 데이터를 사용하여 동작될 수있는 프로그램의 버퍼 오버플로우 취약점을 찾아내야 함
*버퍼가 프로세스의 메모리에 어떻게 저장되는지를 이해해서 인접 메모리 영역을 손상시킬 가능성과 프로그램 실행 제어를 변경시킬 가능성을 찾아내야 함
(취약한 프로그램의 식별 방식)
-프로그램 소스 분석/검사
초과된 용량의 입력을 제공해 프로그램의 실행을 추적해봄
-프로그램의 취약점을 자동으로 찾아주는 퍼징과 같은 도구 사용
**기계 수준에서 컴퓨터 프로세서에 의해 실행되는 기계어가 처리하는 모든 데이터는 프로세서의 레지스터나 메모리에 저장됨
<스택 버퍼 오버플로우>
*함수의 지역 변수처럼 공격 대상 버퍼가 스택에 있을 떄 발생
-스택 스매싱이라고도 불림
-모리스 웜에 의해 사용: fingerd데몬에서 사용한 c의 gets()라이브러리 함수의 버퍼 오버플로우 미검사 악용
-일부 라이브러리 함수에서 버퍼 오버플로우 여부를 검사하지 않음을 이용함