NOP(No OPeration)
NOP은 xchg eax, eax와 같이 프로그램의 실행에 영향을 주지 않는 명령어이다.
프로그램이 실행 중에 NOP 명령어를 만나면 다음 명령어로 넘어가는 것과 같은 효과를 준다.
(x86 아키텍처의 NOP 명령어 바이트코드는 0x90)
NOP Sled, 혹은 NOP Slide는 주로 셸코드의 주소를 정확히 알아내기 힘들 경우
큰 메모리를 확보하여 셸코드 주소의 오차 범위를 크게 만들 때 사용한다.
원래 셸 코드가 저장된 주소로 정확히 이동해야하지만
NOP를 활용하면 중간부터 들어가도 되는 것이다.
셸 코드가 0x100에 저장되어 있다고 가정하면
원래 0x100으로 정확히 실행 흐름을 옮겨야하지만
NOP를 0x10000바이트 추가하면
0x100~0x10100 사이 아무 곳에 흐름을 옮기면 된다.
NOP를 통해 셸 코드로 흐름이 미끄러지듯 이동해서 셸 코드에 도달하는 것이다.
이렇듯 썰매처럼 다음 명령어로 넘어가는 NOP 명령어의 특징 때문에 생긴 이름이다.
NOP Sled(NOP Slide)라고 부른다.
RET Sled
NOP Sled와 비슷한 개념으로 RET Sled가 있다.
Return Address영역에 RET 명령어의 주소를 연속적으로 삽입해서 esp를 조작하는 기법이다.
ret는 pop eip; jmp eip; 로 이루어져 있다.
pop eip를 통해 eip에 Return Address를 넣고
jmp eip를 통해 Return Address로 흐름이 바뀐다.
RET Sled는 이런 점을 이용해 ret를 연속으로 실행시켜 콜 스택을 조작한다.
레퍼런스
https://learn.dreamhack.io/2#20
'background > linux' 카테고리의 다른 글
환경 변수(environ) (0) | 2022.10.11 |
---|---|
ELF 파일 보호 기법 (0) | 2022.10.08 |
mprotect (0) | 2022.09.29 |
PLT(Procedure Linkage Table) & GOT(Global Offset Table) (0) | 2022.09.13 |
[G04T] Buffer OverFlow 1 (BOF1) (0) | 2022.07.26 |