후킹
키로거와 비슷한 맥락이라고 생각하면 되는 기술이다.
키로거는 어떤 특수한 키를 눌를때 다른 명령어가 실행되는 것을 키로거라고 한다.
이와 비슷하게 함수를 실행시키는 척 다른작업을 실행시키는 방법을 후킹 이라고한다.
예를 들면 리눅스에도 훅포인트가 존재하는대 iptables 가 대표적인 훅포인트라고 한다.
이유는 iptables 명령어를 실행시키면 네트워킹 스택으로 함수를 후킹하는데 사용 되기 떄문이다.
( 정확한 과정은... 잘모르겠다)
어쨋거나 이런식으로 후킹포인트가 존재 한다 .
개발자들을 위한 훅역시 존재하는대 이를 글로벌 후킹이라고한다.
getuid() 역시 함수 명령어이다. 이 함수를 변형해서 내가 원하는 작업을 하도록 해보자.
일단 ltrace 명령어로 id 를 해보면
getuid() = 510 //를 확인할수있음
#> man getuid // 명령어로 getuid 의 원형을 살펴보면
#include <unistd.h>
#include <sys/types.h>
uid_t getuid(void);
이런식으로 쓰이는 것을 확인가능 하다..
그럼 우리가 원하는 작업을 하도록 변조를 시켜보자.
- hook.c
#include <unistd.h>
#include <sys/types.h>
uid_t getuid(void){
return 9999;
}
// 컴파일시 메인함수가 필요하다, 그래서 우리는 공유라이브러리 형식으로 컴파일을 하자
[skeleton@localhost skeleton]$ gcc hook.c -fPIC -o hook.so --shared
// 하지만 순서상 우리가 먼저 만든 훅을 실행시켜야한다 -> 훅설치
! 훅 설치
- 리눅스 환경변수 : LD_PRELOAD
[skeleton@localhost skeleton]$ export LD_PRELOAD=/home/skeleton/hook.so
[skeleton@localhost skeleton]$ id
uid=9999 gid=510(skeleton) euid=510(skeleton) groups=510(skeleton)
결과가 달라졌다.
여기서 LD_PRELOAD 를 쓰는경우에만 메모리 어딘가에 모듈에대한 경로가 올라가져 있다.!
이러한 방식을 이용해서 해킹할곳의 메모리에 내가 설치한 명령어( 쉘코드) 를 올릴수도 있다.
'System_Security' 카테고리의 다른 글
11. Buffer Overflow (0) | 2017.08.08 |
---|---|
10. 기계어 -> C 복원 연습 (0) | 2017.08.03 |
09. 디버거 (0) | 2017.08.03 |
08. 시스템 콜 (0) | 2017.08.01 |
07. 메인 함수 (0) | 2017.08.01 |
댓글