본문 바로가기
프로그래밍 놀이터/보안

[도서 정리] 48. 버퍼 오버플로 - 보안의 기본

by 돼지왕 왕돼지 2019. 11. 27.
반응형

48. 버퍼 오버플로 - 보안의 기본



-

소프트웨어에 대한 입력을 저장하는 영역(버퍼)을 넘치게 하는 것(오버플로)으로, 시스템에 의도하지 않은 행동을 시키는 공격이다.

앱이나 컴퓨터를 다운시키거나 컴퓨터에서 임의의 프로그램을 실행 가능하게 한다.

임의의 프로그램이 실행 가능하게 되는것(즉, 빼앗긴 상태)은 상당히 위험하다.





* 버퍼 오버플로의 구조


-

실행중인 프로그램에 입력한 데이터는 컴퓨터의 메모리상에 확보된 버퍼(미리 정해진 크기로 확보)에 쓰여진다.

본래 입력 데이터는 그 확보된 크기에 맞게 들어가야 한다

그런데 사이즈 체크가 되어 있지 않으면 사이즈보다 큰 데이터는 인접한 영역에 덮어 쓰여지게 되어 있다.

버퍼의 인접 영역에는 컴퓨터의 프로그램 실행을 제어하기 위한 번지(주소)가 쓰여져 있는 경우가 많은데, 전형적인 버퍼 오버플로 공격에서는 이것을 바꿔 써서 공격자가 실행하고 싶은 프로그램(탈취하기 위한 프로그램 코드로, 쉘 코드라고 하며, 공격자는 대부분의 경우 입력하는 데이터 안에 포함시킨다.)으로 프로그램의 실행을 바꿔 버린다.





* 버퍼 오버플로를 허용하는 취약성과 대책


-

버퍼 오버플로가 일어나는 원인으로는 입력 시에 사이즈 체크를 하지 않는 경우나 공격 대상이 되는 데이터 영역에서 프로그램 실행을 허용하는 경우 등이 있다.

대책으로는 입력 데이터의 사이즈를 체크한다. 공격자가 노리는 주소 위치를 랜덤으로 만든다. 데이터 영역에서 프로그램 실행을 금지한다 등이 있다.

최근 OS 에서는 이러한 대책을 갖추고 있지만 100% 보호할 수 있는 것은 아니다.




반응형

댓글