Blog

2 August 2019

rop 예제

이러한 메커니즘은 또한 더 진보 된 기술로 우회 할 수 있습니다. DEP는 응용 프로그램 가져오기 주소 테이블(IAT)에서 메모리 할당/보호 함수를 호출하여 우회할 수 있습니다. 이러한 기능의 몇 가지 예: x86 프로세서의 일반적인 스택 레이아웃입니다. 여기서 주목해야 할 한 가지는 스택이 위에서 아래로 증가한다는 것입니다. 스택에는 로컬 함수 변수와 함수가 종료될 때 컨트롤 흐름이 반환되는 반환 주소라는 특수 값이 포함됩니다. 스택의 특정 값이 어떤 방법으로든 덮어쓰면 컨트롤 흐름을 프로그램에 데이터를 입력하여 삽입한 셸 코드로 전환할 수 있습니다. 예를 들어 다음 C 코드: ROP를 사용하면 단일 함수를 호출하는 것보다 훨씬 더 강력한 작업을 수행할 수 있습니다. 실제로 사용할 수 있는 함수를 호출하는 대신 임의의 code6을 실행하는 데 사용할 수 있습니다. 우리는 ret로 끝나는 명령의 짧은 시퀀스인 가젯으로 돌아가서이 작업을 수행합니다. 예를 들어, 다음 가젯 쌍을 사용하여 임의의 위치에 임의의 값을 작성할 수 있습니다. ROP 공격으로부터 방어할 수 있습니다. 코드 조각은 실행 가능한 메모리에서 직접 선택됩니다. 따라서 NX 비트는 우리를 막을 힘이 없습니다.

자세한 내용: 스택 오버플로 취약점이 있는 응용 프로그램의 예를 살펴보겠습니다. 이 프로그램을 사용하면 공격자가 스택 프레임에서 반환 주소를 덮어쓰고 EIP를 원하는 값으로 설정하여 스택에서 코드를 실행합니다. 간단히 하기 위해 이 문서에서는 응용 프로그램은 DEP 보호만 지원하며 ASLR 보호를 지원하지 않습니다 . 우리가 부딪친 방어는 다른 종류의 공격에 훨씬 덜 효과적일 수 있습니다. 예를 들어, ASLR은 힙 스프레이를 방어하는 데 어려움을 가지고 있습니다. 이 예제에서는 몇 가지 중요한 요령을 보여 줍니다. 첫째, 32 비트 프로그램에 라이브러리 무작위화를 사용하지 않도록 설정합니다 ulimit -s 무제한의 사용.

Bize Ulaşın