본문 바로가기
System_Security

12. 후킹

by Jnamelight 2017. 8. 18.

후킹 


키로거와 비슷한 맥락이라고 생각하면 되는 기술이다.


키로거는 어떤 특수한 키를 눌를때 다른 명령어가 실행되는 것을 키로거라고 한다.


이와 비슷하게 함수를 실행시키는 척 다른작업을 실행시키는 방법을 후킹 이라고한다.





예를 들면 리눅스에도 훅포인트가 존재하는대  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

댓글