감자 텃밭

[시스템] NOP sled 기법 본문

System/System Hacking Techniques

[시스템] NOP sled 기법

g2h 2021. 11. 20. 00:28

이번 포스팅에서는 NOP seld기법에 대해 다뤄보도록 하겠다.

 

우선 NOP이란 어셈블리어 명령어중 하나로 "No Operation"의 약자이다.

프로그램의 실행에 아무런 영향을 주지 않는 명령어이다.

프로그램이 작동중 NOP 명령어를 만났을 시 해당 명령어를 수행하지 않고 무시하고

다음 명령어로 넘어가게 된다.

 

NOP sled는 해당 NOP명령어를 이용한 것으로 고의적으로 프로그램의 실행 흐름을 다음 명령어들로

흘러 보내는 것이다. 해당 기법은 ASLR이 걸려 있어 주소값이 계속 변경되는 환경에서

return-to-shellcode 기법이나 heap Spray형태의 공격 코드들에서 반복구문과 NOP sled를 쓴다.

 

해당 이유는

  • 임의의 메모리를 참조하게 되면 해당 위치에 무조건 악의적인 행위를 실행 하는 코드가 있을 수만은 없다.
  • NOP sled를 이용하여 참조한 위치에 악의적인 행위 코드가 없으면 자연스럽게 실행 흐름을 타고 흘러감
  • NOP명령어들을 타고 흘러가다 악의적인 행위 코드를 포함하고 있는 위치로 갈 수 있음.
  • Shell Code의 주소를 정확히 알아내기 힘들 경우 큰 메모리를 확보하여 Shell Code의 주소의 오차 범위를 크게 만들 때 사용.

해당 NOP명령어는 "\90" 을 사용하며, 또는 아무런 기능이 없는 "A" 형태의 문자도 사용한다.

위 사진과 같이 Shell Code 또는 Malicious code를 실행시켜야하지만 메모리상의 정확한 주소위치를 모를 경우

NOP코드를 앞에 추가시키므로 주소값이 NOP위치에 떨어지게 되면 해당 NOP을 타고 아무런 동작도

하지 않고 쭉 NOP을 타고 내려가다 Shell code를 만나게 되면 Shell code를 실행하게 되는것이다.


ex) 버퍼의 크기가 클 경우 해당 버퍼에 NOP코드를 삽입후 뒤에 Shell Code를 넣고 RET까지 접근 후

RET에 버퍼에 주소를 넣으면 된다 그럼 ASLR로 인해 주소값이 바뀌더라도 오차범위 안에

NOP코드가 존재한다면 NOP코드를 타고 흘러가다 Shell Code를 실행시키게 된다.

 

※참고로 스택은 높은주소에서 낮은주소로 쌓이지만 메모리상에서 데이터는 낮은주소값에서 높은주소값방향으로 흐르게 된다.

참고자료
https://hakawati.co.kr/9

 

※ 내용이 이상하거나 문제가 있을경우, 또는 설명에 부족한 내용이 있으시면 알려 주시면 감사합니다.

'System > System Hacking Techniques' 카테고리의 다른 글

[시스템] GOT Overwrite  (2) 2021.11.22
[시스템] RTL-Chaining  (0) 2021.11.21
[시스템] Return-to-Libc (RTL)  (0) 2021.11.20
[시스템] Return-to-Shellcode  (0) 2021.11.20
Return-to-csu 기법 정리  (5) 2021.11.15