안녕하세요
뚱보 프로그래머 입니다.
root shell 이란 !
root shell
1. SetUID의 위험성
어떤 사람이든 suid가 설정된 파일을 실행하면 그 파일의 소유자의 계정(ID)으로 그 프로그램이 실행된다.
1] cat
이 프로그램은 파일을 읽거나, 쓸수 있는 기능을 가지고 있다.
예를 들면,
$cat /etc/passwd 라고 하면 /etc/passwd 파일을 읽는다.
만약 nadream이라는 사람이 만든 file이 있는데 permission이 일반 사용자들에게는 허가되지 않는다.
-rw------- 1 nadream admin 45147 8월 19일 15:45 /tmp/passwd
$ whoami
guest
$ls -al /tmp/passwd
-rw------- 1 nadream admin 45147 8월 19일 15:45 /tmp/passwd
$ls -al /bin/cat
-r-xr-xr-x 1 bin bin 9388 Jul 16 1997 /bin/cat
$cat /tmp/passwd
cat: cannot open /tmp/passwd
/tmp/passwd 파일은 있지만 cat 으로 파일을 열수 없다.
guest에게는 permission이 허가되지 않는다.
이번에는 /tmp/passwd 파일을 읽을 수 있다.
$ whoami
guest
$ls -al /tmp/passwd
-rw------- 1 nadream admin 45147 8월 19일 15:45 /tmp/passwd
$ls -al /bin/cat
-r-sr-xr-x 1 nadream bin 9388 Jul 16 1997 /bin/cat
$ cat /tmp/passwd
해답은 바로 /bin/cat 라는 file의 permission을 보면 된다.
cat의 소유자는 nadream이고 setuid 가 설정되어 있다.
즉, 현재의 guest사용자 계정이 cat이라는 프로그램을 실행하는 순간만큼은 nadream이라는 아이디로
실행한 것이다.
2] /bin/more
more라는 프로그램도 cat과 같이 파일을 읽을 수 있는 기능을 가지고 있다. 하지만 cat 명령과 다른 점은 한 페이지가 넘는 문서 파일일 경우 아무 키나 누르도록 하고 화면을 정지 시킨다. 도스의 dir /p 명령과 같이 p 옵션을 줘서 화면을 멈추게 하는 것이다.
cat 대신 more 라는 파일에 setuid 를 주고 다시 한번 /tmp/passwd 파일을 보자.
$ whoami
guest
$ls -al /tmp/passwd
-rw------- 1 nadream admin 45147 8월 19일 15:45 /tmp/passwd
$ls -al /bin/cat
-r-sr-xr-x 1 nadream bin 21418 Jul 16 1997 /bin/more
$ more /tmp/passwd
....
....
....
--More--(2%)
cat 명령과 비슷하다.
다만 --More--(2%) 라는 것이 나와서 페이지 별로 내용을 볼 수 있을 뿐..
more 의 내부 명령
! (느낌표) 명령은 그 뒤에 붙인 file을 실행하라는 명령
!cat /tmp/passwd라고 명령을 내리면 현재의 권한으로 cat /tmp/passwd 명령과 같다.
2. /bin/sh
/bin/sh는 자주 사용자들이 실행시키고, 무의식적으로 넘어가는 부분이다. /etc/passwd 파일에 해당 쉘이 지정되어 있다. /bin/sh(쉘:SHELL) 파일의 쓰임은 흔히 사용하는 도스의 command.com 파일과 같다. "명령어 해석기"라 한다. unix 시스템에 로그인을 하게 되면 /etc/passwd 파일의 마지막에 붙어있는 /bin/sh가 실행되면서 prompt가 뜨게 된다.
$ 혹은 # -> 쉘이 실행된 것을 의미한다.
쉘이 실행되면 그때부터 유닉스의 모든 명령을 내릴 수가 있다. /bin/sh파일에 손상이 가거나 삭제되면 로그인을 못하게 되는 결과를 낳게 된다.
참고
more를 사용하는 과정에서 !/bin/sh라고 입력한다.
쉘을 실행했으니 $화면이 나올 것이다. 또한 현재 실행되는 suid는 유효할 것이다. 이때부터 내리는 명령마다 nadream으로 실행할 수 있을 것이다. setuid는 아직까지도 유효하기 때문이다. 아직 more 프로그램은 종료된게 아니라 more 의 ! 라는 내부 명령어 안에 있는 것이기 때문이다.
다음은 사용자들이 계정에 접속한 후 more를 실행해 !로 쉘로 빠진 경우를 보여준다.
login -> /bin/sh -> more -> ! -> /bin/sh -> ls , cat, vi, telnet , ftp .. 등등
3. RootShell
setuid 가 root 로 설정되어 있는 쉘을 말한다.
실행할 파일이 /bin/sh 이고 그 소유자가 root인 경우 :
-r-sr-xr-x 3 root 88620 Jul 16 1997 /bin/sh
일반적인 /bin/sh :
-r-xr-xr-x 3 root 88620 Jul 16 1997 /bin/sh
/bin/sh를 실행하는 순간 setuid가 설정되기 때문에 root가 된다.
shell 자체를 root로 실행하는 것이다.
[ 예제 ]
[linux @edu00 linux]$ whoami
guest
[linux @edu00 linux]$ ls -al /bin/sh
-r-sr-xr-x 3 root 88620 Jul 16 1997 /bin/sh
[linux @edu00 linux]$ /bin/sh
[linux @edu00 linux]# whoami
root
[linux @edu00 linux]# exit
[linux @edu00 linux]$ whoami
guest
shell 자체가 종료될 때까지는 setuid가 유효 하다.