운영체제가 어떤 코드를 실행하려 할 때, 이를 낚아채어 다른 코드가 실행되게 하는 것
그때 실행되는 코드 → 훅
malloc
함수와free
함수를 후킹하여 공격자가 작성한 악의적인 코드가 실행되게 하는 기법
Full RELRO
가 적용되더라도libc
의 데이터 영역에는 쓰기가 가능하므로,
Full RELRO
를 우회하는 기법으로 활용될 수 있다.
C언어에서 메모리의 동적 할당과 해제를 담당하는 함수 →
libc.so
libc
에는 이 함수들의 디버깅 편의를 위해 훅 변수가libc.so
에 정의되어 있다.
__malloc_hook
,__free_hook
,_realloc_hook
hook 변수가NULL
인지 아닌지 검사하고, 아니라면malloc
을 수행하기 전에
__malloc_hook
이 가리키는 함수를 먼저 실행한다.
예제 코드를 컴파일하려고 했더니..
deprecated : 중요도가 떨어져 더 이상 사용되지 않고 앞으로는 사라지게 될
이라고 한다. 훅 포인터는 앞으로 못 쓰는 것 같다.
one_gadget
또는magic gadget
은 실행되면 셸이 획득되는 코드 뭉치를 말한다.
one_gadget
도구를 사용하면 쉽게 one_gadget을 찾을 수 있다.
함수에 인자를 전달하기 어려울 때 유용하게 사용될 수 있다.
one_gadget의 각 주소와 함께 제약사항들이 출력된다.