티스토리 뷰
[Reversing] ROP(Return Oriented Programming)
참고
> https://github.com/BreakingMalwareResearch/atom-bombing
Atombombing 기법을 보다가 정리가 필요하여 일부 정리를 한다. (이해가 되지 않아 잠시 멈춤..)
ROP는 Retrun Oriented Programming의 약자로 데이터 실행 방지(Data Execution Prevention, DEP)을 우회하기 위하여 이용된다. 또한, 취약한 프로그램 내부에 있는 기계어 코드들의 섹션(Gadget)을 이용하여 버퍼오버플로우 공격시 특정 명령을 실행시키는 방법이기도하다.
ROP의 방법에 대해서는 1.Virtual Protect() 2.할당 등 여러가지 방법이 있으며 해당 POC 코드에서는 2.할당 방법을 사용하는 걸 확인 할 수 있다.
아래 소스코드를 살펴보면 (그림 1)와 같이 그려지는 걸 확인 할 수 있으며, ROP Chain은 (표 1)와 같이 나타내는 것을 확인 할 수 있다.
그림 1 – Address
Ntdll!memcpy |
GetCurrentProcess() |
MemcpyDestination |
NULL |
MemcpyLength |
MEM_COMMIT |
PAGE_EXECUTE_READWRITE |
X86_RET(C3) |
… |
표 1 – ROP Chain
pvRemoteROPChainAddress = pvCodeCave; pvRemoteContextAddress = (PUCHAR)pvRemoteROPChainAddress + sizeof(ROPCHAIN); pvRemoteGetProcAddressLoadLibraryAddress = (PUCHAR)pvRemoteContextAddress + FIELD_OFFSET(CONTEXT, ExtendedRegisters); pvRemoteShellcodeAddress = (PUCHAR)pvRemoteGetProcAddressLoadLibraryAddress + 8; printf("[*] Building ROP chain.\n\n\n"); eReturn = main_BuildROPChain(pvRemoteROPChainAddress, pvRemoteShellcodeAddress, &tRopChain);
|
'Reversing > ETC' 카테고리의 다른 글
[Reversing] 레지스터 관련 정리 (0) | 2020.06.18 |
---|---|
[Reversing] ZwQuerySystemInformation(), ZwDuplicateObject(), ZwQueryObject() (0) | 2020.05.14 |
[Reversing] 생성 방식에 따른 메모리 기본값 (0) | 2020.04.24 |
[Reversing] PowerShell 난독화 종류 (0) | 2020.04.06 |
[Reversing] Bypassing Windows Security_Register (0) | 2020.03.06 |
- Total
- Today