* 리눅스에서는 권한 상승용 백도어 방식을 이용한다.
* 리눅스의 권한
1. 읽기(R), 쓰기(W), 실행(X)
2. 특수권한
1) SetUID(4000) : 사용자가 파일을 실행하는 동안 파일 소유자의 권한을 획득한다.
2) SetGID(2000) : 실행 파일을 소유한 그룹 소유자의 권한을 획득한다.
3) Sticky Bit(1000)
3. UID의 종류
- RUID(Real UID) : 실제 계정. 현재 로그인 된 실제 사용자의 ID
- EUID(Effective UID) : 실행하고 있는 Process의 UID
실습 1)
# vim uid_test.c
... getuid() //RUID리턴 //root일 때 0값을 리턴
... geteuid() //EUID리턴
# chmod 4755 uid_test //setuid하면 파일 소유주의 권한으로 euid가 설정된다.
//==> 일반 계정으로 로그인 후(su whitehacker) uid_test를 실행하면 euid가 바뀐 것을 볼 수 있다.
실습 2)
* c 언어 System 함수 : 시스템 명령을 실행한다.
ex) system("touch /tmp/uid_test");
* 프로그램 안에서 또 다른 프로그램을 실행하면(ex: system 함수) EUID가 아닌 RUID의 권한으로 실행된다. 즉, RUID가 0이어야 한다.(root)
==> 따라서 코드에서 setuid(0); 을 넣어도 root가 호출해야만 제대로 적용되는 것이다.
그런데, #chmod 4755 uid_test를 통해 setuid bit를 파일에 걸어 놓으면 setuid(0);이 제대로 적용된다.
*** root가 만든 파일에 setuid가 설정되어 있다면 가능!!
setuid(0);
...
system("/bin/bash");
==> 어떤 사용자가 사용하더라도 root shell이 뜬다.
'Computer Security > System Security' 카테고리의 다른 글
registry 편집 소스코드(마우스속도변경) (0) | 2014.04.18 |
---|---|
루트킷(Rootkit) (0) | 2014.04.17 |
Process & Thread (0) | 2014.04.16 |
대입공격 개요 (0) | 2014.04.15 |
멀웨어와 백도어에 대하여 (0) | 2014.04.15 |