ComputerSecurity의 허점중 한가지.

시스템 메모리레이아웃을 분석하여 정상적으로 쓸 수 있는 메모리의 한계를 벗어나도록 메모리쓰기를 하여, 프로세스를 컨트롤하는 기술. 앞으로도 주요한 해킹방법으로 사용될 것이라고 함.

BufferOverflow를 이용하여, 실행시키고자 하는 코드를 메모리 어딘가로 입력시키고, 실행점을 그리로 옮기는 것이 가능하다. 보통 실행시킬 코드는 쉘 코드이며, 결국 명령을 입력할 수 있는 쉘을 얻는다. Setuid가 걸려있던 프로그램이었다면 루트권한의 쉘을 얻을 수 있다.

[Hacker]는 명령행 인자나 환경변수 혹은 통신[Socket]을 통해 읽어들이는 값으로 필요이상의 긴 문자열을 보낸다. 이것이 끝을 확인하지 않는 strcpy()와 같은 함수로 복사되면 메모리의 특정위치에 쉘 코드를 위치시키고 결국에는 이것이 실행된다.

일반적으로 이것은 [Cee]의 strcpy(), gets()와 같이 문자열의 끝을 확인하지 않는 함수에서 주로 일어난다. gets, strcpy, strcat, sprintf, scanf, sscanf, fscanf 등이 주요함수들이다.

[HTTP]서버에 공격예제

211.180.44.170 - - [12/Mar/2003:11:46:58 +0900] "GET /default.ida?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%u9090%u6858%ucbd3%u78
01%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078
%u0000%u00=a  HTTP/1.0" 404 280 "-" "-"

관련자료 : SmashingTheStackForFunAndProfit http://security.kaist.ac.kr/reports/stackoverflow.html

web biohackers.net