본문 바로가기

Computer Security/System Security

리눅스의 권한상승용 백도어

* 리눅스에서는 권한 상승용 백도어 방식을 이용한다.

* 리눅스의 권한

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