백도어..란?
어떤 호스트를 해킹해서 나중을 위해 금방 해킹이
되도록문을열어두는(?) 것을 말합니다.
즉, 루트를 딴후에 나중에 금방 쉽게 들어와서 루트를딸수 있도록 하는 것이죠.가장
쉬운 백도어는 루트쉘 복사 입니다.
관리자가 전혀 볼수 없는 디렉토리에다가 올려놓죠..보통 /dev 라는 디렉토리나
/usr/man 이라는 디렉토리의 어딘가에숨겨 놓습니다.
하지만 관리자가 초보가 아닌이상은 들키죠.루트쉘의 특징을 살펴볼까요?원래
로긴은 하게되면 로긴 프로그램은 해당 아이디의
권한을 설정해준채로 쉘을 줍니다. 이때 사용자의 권한은/etc/passwd 파일에
설정되어있습니다.
operator:*:11:0:operator:/root:/bin/bashgames:*:12:100:games:/usr/games:
위에서 숫자 부분이 있죠?12:100 <- 여기서 12 = UID 100 = GID이렇게 권한을
설정해서 쉘을 실행시키죠.
그런데 루트쉘은 setuid 라는 설정에 의해서 위의 설정과는 별개로그 쉘을
실행시키면(ex: bash , csh) 그 쉘을 실행시키는 동안에는
루트가 되는 거죠.즉..이런 형식입니다.
-rwsr-xr-x 1 root bin 299649 Nov 18 1996 /bin/bash
위의 형식처럼 rws 인 형태가 루트쉘이죠.그렇다면 ./bash 를 실행하면 그동안
루트가 되겠죠?모르겠으면 강좌란을 살펴보세요.
모두 설명했던 부분이에요.그런 루트쉘을 적당한 이름으로 바꾸고 ttyaabb
등...이파일을 /dev/ 디렉토리에 가져다 놓습니다.
그후에 루트가 필요할때마다 그 파일을 실행시키면 되죠.그런데 유닉스&리눅스에서
중요한 것은 bash 를 쓰게 되면
.bash_history 라는 파일이 생깁니다..bash_history 파일의 특징은 우선 bash 쉘을
실행시킨후의 모든
명령을 그 파일에 저장시킵니다.그리고 저장되는 파일의 위치는 쉘을 실행시킨
사람의 uid 를따릅니다.euid 가 더 우선권이 있슴..
즉.루트쉘을 실행시키면 루트 디렉토리에 .bash_history파일ㅇ생기고(원래 존재하면
덧붙여 써짐..) 그 파일에 저장이 되요~
또한 한가지 특징은 사용자가 그 쉘을 끝냈을때 전부 저장이 되죠.실행중에는
저장이 안됨.
즉.우리가 로그아웃하면 그때 저장이 되요. 웃기죠? 황당하고.그래서 우리는
루트쉘을 실행시킨후 루트 디렉토리로 가야 합니다.
그후에 .bash_History 라는 디렉토리를 만들어 놓아요.그러면 파일이
안만들어지겠죠..디렉토리 우선이니까.
또하나의 방법은 .bash_history 파일을 /dev/null 이라는 파일에링크를 시키는
방법입니다.
즉.. ln -s /dev/null /root/.bash_history 라고 명령을 내리면
.bash_history파일이 /dev/null 파일에 링크가 되요.
그렇게 되면 .bash_hisroty 파일에 덧붙여 쓰기를 하면 /dev/null즉
널포인터(쓰레기처리장 ^^;)으로 보내지게 되죠.
사라져요..내용이..히히하지만 더 좋은 방법이 있습니다.바로.. set 설정..즉 환경
설정을 바꾸면 되죠.
한번 유닉스 상태에서 (리눅스) set 를 쳐보세요.LS_OPTIONS=--8bit --color=tty -F
-b -T 0
MACHTYPE=i386MAIL=/var/spool/mail/loveyouMAILCHECK=60GROUP=users
HISTFILE=/home/loveyou/.bash_historyHISTFILESIZE=500HISTSIZE=500
HOME=/home/loveyou........(이하 생략)이런 형식으로 나오죠.
여기서 유심히 볼것은 HISTFILE=/home/loveyou/.bash_history 입니다.
이것은 바로 .bash_history 라는 파일의 위치를 가르키는
변수이기때문이죠.그럼..이렇게 함으로써 해결이 되겠죠.
export HISTFILE=/dev/null자.. 이제 초보적인 백도어 설치와 그에대한 안전한
조치를 강좌했습니다.
이번엔 관리자의 입장에서
방지하고 막는 방법을 말하죠.관리자는 언제나
끊임없이호스트를 살펴야겠죠.나쁜짓 하는 사람이 있을까하고요..
우선 setuid 걸린 프로그램의 대부분은 퍼미션이 4755 입니다.보통 퍼미션은 777
퍼미션을 쓰지만
ex) chmod 777 /bin/bash하지만 앞에 한자리 더 쓰게 되면 특수한 퍼미션을
만들수있죠.
1 은 스틱키 설정 4는 setuid 설정..ex) chmod 1777 /tmp <= 일반적인
/tmp디렉토리 설정
chmod 4755 rootshell <= 바로 루트쉘설정중 한 단계죠.즉..이것을 이용해서
find 명령으로 찾습니다.
find . -user root -perm 4755 -print 정도의 명령어를 쓰면 됩니다.4755 퍼미션이
아니면 문제가 생기겠죠?이때는
ls -alR / |grep rwsls -alR |grep r-sls -alR / | grep r-s (위에꺼 정정)
ls -alR / |grep -- --s 입니다. -- --s 가 정상입위에서 grep --s 를 왜 grep --
--s 라고 했는지는 스스로
알아내세요.한번 grep --s 랑 grep -- --s 라고 해보시면 알아요.이렇게 해서
루트쉘을 찾아낼수가 있겠죠화일..변조 ^^;보통 루트쉘이 setuid 가 걸려있다는
것에 착안해서..
유닉스에는 많은 유틸리티가 있으며 그중에는 setuid 가 붙은 유틸리티가있다.
그중에는 또한 거의 쓰지도 않으면서 setuid 가 붙은 프로그램을 공략하는
것이다.ex)
루트쉘을 만든후 그 것을 위에서 선택한 파일을 하나 지우고 파일명을 같게
한후복사 시켜놓으면 된다.여기서 주의 할점이다..
파일을 복사또는 이동시에 날짜가 현재의 날짜로 변한다. 즉, 파일에 대한
날짜표시가 오늘로 되어있다.이를 바꿀수 있는 방법이 있다.
바로 touch 라는 프로그램이다.[ touch 의 간단한 명령 ]리눅스의 경우touch -t
MMDDhhmmYY 파일명
MM : 월 DD : 일 hh : 시간 mm : 분YY : 1997이라면 97을 입력시키는 것이다.
( 해도되고 안해도 된다. )
ex) touch -t 01020304 file ( file 을 1월 2일 3시 4분으로 바꾸었다. )
touch -t 0102030498 file ( file 을 1월 2일 3시 4분 98년으로 바꾼다.
)유닉스의 경우
유닉스의 경우는 약간 다르다. (솔라리스의 경우)touch -t YYMMDDhhmm 이렇게
년수를 먼저 써야 한다.ex)
> whereis whodowhodo: /etc/whodo /usr/sbin/whodo /usr/man/man1m/whodo.1m
> ls -al /usr/sbin/whodo
-r-sr-xr-x 1 root bin 12512 1996년 5월 3일 whodo
> ls -al /tmp/rootshell
-rwsr-xr-x 1 root root 111 1998년 2월 20일 /tmp/rootshell
> cp -f /tmp/rootshell /usr/sbin/whodo> ls -al /usr/sbin/whodo
-rwsr-xr-x 1 root root 111 1998년 2월 20일 whodo
(원래의 whodo 의 그룹은 bin 이다..고치자)> chown root:bin /usr/sbin/whodo
> ls -al /usr/sbin/whodo
-rwsr-xr-x 1 root bin 111 1998년 2월 20일 whodo
(이제 날짜를 바꾸어야 한다. 원래의 날짜는 1996년 5월 3일이어야 한다.)
> touch -t 9802201212 /usr/sbin/whodo <= 여기서 끝의 1212는 임의로한것..)
> ls -al /usr/sbin/whodo
-r-sr-xr-x 1 root bin 111 1996년 5월 3일 whodo
> /usr/sbin/whodo (실행을 해보자)# whoamiroot
출처 : http://myhome.netsgo.com/hacrack/main.htm

운영자
01-03-09 17:01
0개
2,488회
백도어와 방어
댓글목록
등록된 댓글이 없습니다.