programing

NOP 썰매는 어떻게 작동합니까?

nasanasas 2021. 1. 8. 08:18
반응형

NOP 썰매는 어떻게 작동합니까?


이 질문에 답할 수있는 좋은 출처를 찾을 수 없습니다. nop sled가 버퍼 오버플로 공격에서 스택 랜덤 화를 우회하는 데 사용되는 기술이라는 것을 알고 있지만 작동 방식을 이해할 수 없습니다.

이 방법을 보여주는 간단한 예는 무엇입니까?

128 바이트 nop 슬 레드와 같은 용어는 무엇을 의미합니까?


일부 공격은 프로그램이 특정 주소로 점프하고 거기에서 계속 실행되도록 구성됩니다. 삽입 된 코드는 이전에 정확한 위치에로드되어야합니다.

스택 무작위 화 및 기타 런타임 차이로 인해 프로그램이 점프 할 수있는 주소를 예측할 수 없게 될 수 있으므로 공격자는 NOP 슬 레드를 광범위한 메모리에 배치합니다. 프로그램이 슬 레드의 어느 곳 으로든 점프하면 나머지 모든 NOP를 실행하고 아무것도하지 않고 슬 레드 바로 옆에있는 페이로드 코드를 실행합니다.

공격자가 NOP 슬 레드를 사용하는 이유는 대상 주소를 더 크게 만들기 위해서입니다. 코드는 삽입 된 코드의 시작 부분이 아니라 슬 레드의 어느 곳에서나 점프 할 수 있습니다.

128 바이트 NOP 슬레 드는 128 바이트 폭의 NOP 침입 그룹입니다.

참고 # 1 : NOP (No-Operation)는 대부분의 (모두?) 아키텍처에서 사용할 수있는 명령어로, 메모리와 일부 런타임을 차지하는 것 외에는 아무것도하지 않습니다.

참고 2 : 가변 길이 명령어가있는 아키텍처에서 NOP 명령어는 일반적으로 길이가 1 바이트에 불과하므로 편리한 명령어 패딩으로 사용할 수 있습니다. 불행히도 그것은 또한 NOP 썰매를 쉽게 할 수있게합니다.


로드리고의 설명에 추가하려면-NOP 슬 레드를 사용하더라도 메모리에있는 버퍼의 대략적인 위치를 미리 예측해야합니다. 의 메모리 위치를 근사화하는 한 가지 기술은 근처 스택 위치를 참조 프레임으로 사용하는 것입니다. 이 위치에서 오프셋을 빼면 모든 변수의 상대 주소를 얻을 수 있습니다.

참고 : x86 아키텍처에서 NOP 명령어는 16 진수 바이트 0x90과 동일하므로 완료된 익스플로잇 버퍼는 다음과 같이 보일 수 있습니다.

| NOP 썰매 | 쉘 코드 | 반복되는 반송 주소 |

EIP 레지스터가 NOP 슬 레드에서 발견 된 주소를 가리키는 것처럼 보면, 최종적으로 쉘 코드에 도달 할 때까지 각 NOP 명령어를 한 번에 하나씩 실행하는 동안 증가합니다.

참조 URL : https://stackoverflow.com/questions/14760587/how-does-a-nop-sled-work

반응형