yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆

BOF - NOP Sled (NOP Slide) 본문

컴퓨터 시스템/시스템 해킹

BOF - NOP Sled (NOP Slide)

yehey 2020. 9. 9. 22:32

BOF 공격을 하다보면 프로그램 내에 권한을 상승시켜주거나 우리가 원하는 기능을 하는 함수들이 존재하는 경우가 있고 그렇지 않은 경우가 있다.

우선 공격자가 시행하길 원하는 기능이 프로그램 내의 어떤 함수의 기능이라면 BOF를 통해 RET값에 해당 함수의 시작address를 넣어주면 된다.

그러나 공격자가 원하는 기능이 프로그램 내에 존재하지 않는다면 공격을 할 때 쉘 코드를 함께 넣어주어야 한다. 따라서 RET값에는 쉘 코드의 address가 들어가야 한다.

 

이 쉘코드 주소를 추측하기 위해 NOP Sled 기법을 사용한다.

 

NOP Sled (=NOP Slide)

 

NOP: no operation의 약자, 아무런 실행을 하지 않는다.(instruction을 구분해주기도 한다.)

 

Linux에서 NOP: 0x90

CPU는 NOP를 만나면 아무런 수행을 하지 않고 유효한 instruction을 만날 때까지 한 바이트씩 이동한다.

이러한 CPU의 특징을 살려서 CPU가 쉘 코드의 시작점이 나올 때까지 한 바이트 씩 EIP를 움직이게 하여 쉘 코드가 실행되도록 한다!

=>쉘 코드의 정확한 시작점이 아니어도 쉘 코드가 실행될 수 있다. 

 

NOP Sled 과정 

 

스택 구조 예시 출처: (달고나)와우해커 BOF 기초문서

위의 그림과 같이 스택이 구성되어 있다고 가정하자

우리가 실행되길 원하는 쉘 코드는 0xbffffa4c에 위치하고 있는 것이 보이지만! 보이지 않는다고 가정하자!

당연하게도 return address에 쉘 코드의 정확한 주소인 0xbffffa4c를 넣어주는 것이 쉘을 실행시키기에는 가장 좋지만, 정확하지 않아도 0xbffffa30부터 0xbffffa4c 직전까지는 NOP 로 채워져있기 때문에 

0xbffffa30~ 0xbffffa4c 사이의 값을 return address에 대입하면 EIP는 NOP 를 만나 한 바이트 씩 증가하고 증가하다보면 쉘 코드 시작 주소인 0xbffffa4c에 자동으로 이동한다! => 쉘 코드가 실행된다!

 

NOP Sled 단점

-노가다성이 짙다.

-운에 의존하게 된다.

-할당 받을 수 있는 메모리에 비해 NOP-Sled가 너무 큰 경우도 있다.

-NOP기계어 명령어 패턴 탐색으로 걸리기 쉽다.

Comments