SSP(Stack Smashing Protector)SSP는 BOF를 방어하기 위한 보호기법 중 하나로 함수를 실행할 때, canary라는 랜덤 값을 스택에 추가하여 BOF로 스택 데이터가 변조됐는지 확인하는 방법이다. canary가 변조된 경우는 스택 데이터가 변조됐다고 판단하고 프로그램을 종료한다. └─# checksec ssp_chk [*] '/root/ssp_chk' Arch: i386-32-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x8048000)SSP가 바이너리에 적용됐는지 확인하는 방법은 checksec 명령을 이용하는 방법이다.“..
ROP(Return Oriented Programming)ROP는 ASLR과 같은 메모리 보호기법을 우회하기 위한 공격기법으로 return이 포함된 코드 조각들인 가젯들을 이용해 system(“/bin/bash”)를 실행하는 프로그램을 해커가 임의로 만들어서 root의 권한을 얻어내는 해킹 기법이다. ROP 이해를 위한 예제를 준비했다. ROP 체인으로 setresuid(0,0,0)와 system("/bin/sh")를 연속으로 실행하는 예제를 이해해보자. 대표적으로 자주 사용하는 pop rdi; ret 가젯과 pop rsi; pop rdx; ret 가젯을 활용한 예제다. BOF로 스택에 가젯과 인자들을 덮어썼다는 전제로 만든 메모리 구조다. 가젯이 실행될 때마다 스택이 어떻게 바뀌는지 확인해보자. 함수가..
Tcache PoisoningDouble Free Bug를 이용하여 tcache_entry를 조작하고 이미 할당된 메모리에 다시 힙 청크를 할당하는 공격 기법이다. tcache에서 사용하는 tcache_put과 tcache_get 함수에서는 old와 p를 검증하지 않기 때문에 한 개의 청크를 연속으로 해제할 수 있다.참고로 GLIBC 2.26과 2.29 이상의 버전에서는 DFB를 검증하는 로직이 추가됐다. 기본적으로 크기가 32byte ~ 1040byte 크기를 갖는 청크들의 경우에는 tcache에 보관한다. tcache poisoning을 이해하기 위해서는 청크 개념을 알아야 한다. [사진]의 왼쪽은 alloc 청크, 오른쪽은 free 청크다. 차이점은 alloc 청크에서는 data를 담는 부분이 fr..