본문 바로가기

카테고리 없음

힙 스프레이칠 , 힙 스프레이

힙 스프레이칠

: 취약점 공격(익스플로잇)시에 임의의 코드 실행을 용이하게 하기 위해 사용되는 기술

: 힙(동적할당된 사용자 메모리 영역) 영역에, 스프레이를 뿌리듯 Payload를 뿌려두어 ,

  공격코드로 이를 실행시키는 공격

 

이 기술(힙스프레이칠) 을 구현하는 소스코드

: 힙 스프레이

 

How ?

* 힙 스프레이는 그 자체로 보안문제를 악용하는 기법이 아닌 취약성을 악용하기 쉽게 하기 위해 사용되는 도구에 가까움

* 보안문제를 악용한 공격은, 많은 요소에 의해 영향을 받는다

  미묘하게 달라지는 메모리 배치, 타이밍 등은, 공격자 관점에서 보았을 때 불확실성을 야기한다. (공격이 어려워짐)

* 힙 스프레이칠 기법은, 이런 불확실성을 최소화시키고 공격의 성공확률을 높히는데 사용됨

  대다수의 컴퓨터 아키텍처에서 

     1. 힙 메모리를 크게 할당하면, 그 시작주소를 어느정도 예측가능하고

     2. 연달아 할당된 메모리들은 대략 메모리 주소상에 일렬로 존재한다는 점

     을 이용하는데, 이는 곧 힙 스프레이가 작동할때 마다 매번 거의 비슷한 위치에 힙 스프레이칠을 할 수 있다는 것을 의미한다

 

공격자는 프로그램의 컨트롤을 탈취하기 위해, 프로세스 내에 큰 힙 메모리를 할당한 후에,

이 영역에 공격을 수행할 임의의 명령어들(인스트럭션)을 주입한다. 이 명령어는 실행되지 않는 이상, 효력이 없음.

* 공격자는 추가로 프로세스가 사용하는 함수포인터중에 스프레이칠을 가해, 포인터가 이 영역을 향하게 하고 

  프로세스가 해당 함수 포인터를 읽어들여, 호출한 시점부터 공격자가 주입한 명령어들이 실행될 수 있도록 만든다.

 

큰 사이즈의 힙 메모리에 주입된 명령어들은, 대부분 비슷한 위치에 설치되지만, 같은곳에 설치되지는 않는다. 

 

만약 스프레이칠한 함수포인터가 주입한 명령어들의 중간부분이나 바깥을 향하게 되면

프로세스가 비적법한 명령어를 읽어들이면서 공격이 수행되기전에 강제 종료되기 때문이다.

이를 방지하기 위해 공격자는, 어느정도 오차가 있을 것으로 예상되는 양만큼의 메모리 영역에 NOP 명령어들을 설치해두어, 

이 영역 어느 부분에서부터 컨트롤이 시작하든, 궁극적으로 공격자가 미리 심어놓은 명령어들이 실행되기 만들어둔다. 

 

어떻게 막나?

* Data Execution Prevention (DEP)

* NX (No Execute)

 

#정보보안기사 #IT #힙스프레이 #힙스프레이칠