Rootkit의 원리를 이해하기위해
간단한 Rootkit을 만들었다.

특수 코드인 1018을 입력으로 넣으면 root 권한을 넘겨주는 rootkit을 만들것이다.


(Prototype)


모듈은 디바이스로 관리가 된다. 디바이스는 리눅스에서 파일처럼 다뤄진다.
디바이스와 입출력을 하기위해 open, read, write 함수를 정의해준다.
open과 read는 여기서 사용하지 않을 것이므로 모양만 만들어준다.

여기서 write함수를 채워준다.


(write 함수)


write함수를 보면 유저 영역의 입력을 받는다.
입력을 받아서 첫 4자리를 비교한다. 첫 4자리가 1018이라면
root권한인 id를 0으로 만들어준다.

Makefile을 만든다.


(Makefile)


그 후 insmod로 만든 모듈을 로딩한다.

로딩한 후, chmod를 이용하여 /dev 아래에 있는 해당 디바이스를 666으로 만들어준다.

그 이유는 루트 권한이 아닌 일반계정에서 실행할 수 있도록 하기 위해서이다.


(권한 설정)


실행하기 전 권한을 확인한 모습이다.


(권한)


일반 사용자 계정이다.

그 후 /dev 아래에 만들어진 normaltic_door 가 있다.

이 디바이스에 1018이라고 입력을 넣는다.


(매직값 입력)


그렇게 되면,

위에서 작성한 write에 의해서 사용자 권한을 0으로 만들어준다.


(root 권한 획득)


root 권한을 획득했다.

간단한 rootkit을 만들어보면서
rootkit의 원리를 이해할 수 있었다.

유저 영역이 아닌, 커널 영역에서 root권한으로 권한상승시킨다는 개념이 이렇게
커널 영역에서 이루어지는 것을 확인할 수 있었다.

* 참조

https://0x00sec.org/t/kernel-rootkits-getting-your-hands-dirty/1485

+ Recent posts