티스토리 뷰

반응형

오버플로우 공격(2)
오버플로우 공격(2)

[ 목차 ]

      스택 오버플로우

      (가) 개요

          ① 스택 버퍼 오버플로우 공격은 보통 SetUID(Set User ID)가 설정된 루트 권한의 프로그램을 공격대상으로 한다. 스택

               에 정해진 버퍼보다 큰 공격 코드를 삽입하여 반환주소를 변경함으로써 임의의 공격 코드를 루트 권한으로 실행하도

               록 하는 방법이다.

          ② 스택 버퍼 오버플로우는 1988년 모리스 인터넷 웜에서 처음 발견된 이후 계속 이용되어 왔다. 이것은 fingerd 데몬에

               서 사용한 gets() 함수의 검사되지 않은 버퍼 오버플로우를 이용하였다.

      (나) 셸코드

          ① 많은 버퍼 오버플로우 공격의 핵심 요소는 오버플로우가 발생하는 버퍼에 저장되는 공격자의 코드로 실행 제어를 이

              동시키는 것이다. 이 코드를 셸코드(shellcode)라고 한다.

          ② 이렇게 부르는 이유는 사용자 명령어 라인의 해석기인 셸로 제어를 넘기고 공격당한 프로그램의 권한으로 시스템의

               다른 프로그램에 접근하기 때문이다.

      (다) 스택 버퍼 오버플로우 공격 절차

          ① 1단계 : 공격 셸 코드를 버퍼에 저장한다.

          ② 2단계 : 루트 권한으로 실행되는 프로그램의 특정 함수의 스택 반환주소 버퍼를 오버플로우시켜서 공격 셸 코드가

                           저장되어 있는 버퍼의 주소를 덮어씌운다.

          ③ 3단계 : 특정 함수의 호출이 완료되면 조작된 반환 주소로 셸 코드의 주소가 반환되어 셸 코드가 실행되고, 루트 권한

                           을 획득하게 된다.

      힙 오버플로우(heap overflow)

      (가) 개요

          ① 일반적으로 힙은 프로그램과 전역 데이터 위에 위치하며 메모리 위 방향으로 커진다.(스택은 아래 방향으로 커진다.)

          ② 힙에 요청되는 메모리는 레코드의 연결리스트와 같은 동적 데이터 구조를 위해 사용된다. 만약 이런 레코드가 오버플

               로우에 취약한 버퍼를 가지고 있다면 연속된 메모리가 손상될 수 있다.

          ③ 스택과는 다르게 실행 제어를 쉽게 이동시킬 수 있는 반환 주소는 없다. 그러나 할당된 공간이 함수에 대한 포인터를

               포함하고 있다면 공격자는 이 주소를 변경하여 겹쳐 쓴 버퍼에 있는 셸코드를 가리키도록 할 수 있다.

      반응형