2008년 2월 28일 목요일

4th WWW-KR 발표자료 (1996.11.7~11.9)

돌이켜 생각해 보면 어린나이부터 참 ^_^ 부단히도 열심히 살았다.
어느덧 1996년 11월 7일~9일 사이의 일이다.


http://www.w3c.or.kr/~hollobit/www-kr/ws4/roomd.html
http://kmh.yeungnam-c.ac.kr/Hacking/www-krSecurity.htm

D31: "인터넷과 시스템 보안"



인터넷과 시스템 보안
김휘강
대전 광역시 유성구 구성동 373-1
한국과학기술원 산업경영학과
E-mail : sakai@cosmos.kaist.ac.kr

Abstract:
시스템 관리자로서 기본적으로 알아야 할 시큐리티 관련 지식과 각각의 OS 마다 어떠한 홀들이 존재하는지를 알려서 보다 secure 한 시스템을 구축하는데 도움을 주도록 한다. High level Attack 이라 불리는 고도의 해킹방법은 다루지 않고, 기본적인 내용을 위주로 다루어 관심을 유도하는데 목적을 둔다.
Keywords:
Internet security, Solaris 2.x security, Irix security, secure administration
1. 서론
최근에 언론을 떠들썩하게 했던 해킹사건들 외에도 수시로 크고 작은 해킹사건들이 일어나고 있다. 이러한 해킹사건들은 비단 사회적인 문제뿐 아니더라도 윤리적, 경제적인 문제까지 야기시킬수 있다. 그렇다면 시스템 관리자들이나 사용자들이 시스템의 어떠한 부분들을 중점적으로 신경 써야 크래커들의 침입을 막을 수 있는지 살펴보기로 한다.
2. 본론
2.1 General Security Technique
해커들이 해킹을 하는 단계는 일반적으로 3 단계로 나눈다.

1 단계는 remote 의 해커가 어떻게 해서든 local 호스트로 잡입을 하는 과정이고 이를 막기 위해 필요로 하는 보안 기술이 Network Security Technique 이다.
2 단계는 localhot 에 침입한 해커가 root 의 권한을 획득하는 과정이고 , 이를 막기 위해 필요로 하는 보안 기술이 Host security Technique 이다.
3 단계는 root 의 권한을 얻은 해커가 용이한 재침입을 위해 system 을 변조시켜 놓는 과정이다. 이와 같은 경우 이를 감지해 내기 위해서는 관리자의 능숙한 경험과 세심한 조사가 필요하다.
여기에서는 각 단계별로 필요한 보안 기술에 대해 다뤄보겠다.

2.1.1 1 단계
우선 1 단계에서 해커가 필요로 하는 것은 칩입할 targethost user 의 login name 과 패스워드 이다. 해커는 이 단계에서 패스워드와 user ID 를 알아내기 위해 보통 sniffing 란 기술을 사용 하기도 한다. 실제로 해커들의 침입유형의 통계자료에 의하면 대부분의 해커들이 sniff 를 통해서 초기잡입을 시도하게 된다. 또한 sniff 프로그램이 공개된후 해킹사례가 급증한 것은 말할 필요도 없다. 그렇다면 패스워드 노출을 막기 위해서는 어떻게 해야 하는가?
2.1.1.1 패스워드 보안

사용자 차원

ssh 사용- 패킷을 인크립트하여 패스워드 노출을 막는다.
패스워드를 주기적으로 바꿈 - 기본
guessing 하기 힘든 패스워드를 사용 - c.f. Crack
secure keyboard 사용 - X window vulnerability
로긴시마다 last -3 을 이용하여 침입당했는지를 점검


관리자 차원

passwd aging 기능을 활용한다.
trusted host 를 없앤다. e.g. /etc/hosts.equiv , .rhosts 사용 자제
시스템이 C2 Level 이 아니라면 C2 Level 로 바꾼다. e.g. C2conv
root 의 remote 로긴을 제한한다.
Null password ID 를 이용하는 서비스를 하는 경우, shell access 를 제한한다. (e.g. anonymous ftp 의 경우 /bin/false 를 초기 shell 로 설정)
S/key 를 사용하여 간단히 one time passwd 를 구현해 놓는다.
TCP 관련 제한기능 및 log 기능을 강화시켜 놓는다. (e.g. TCP wrapper)
자신의 호스트에서 sniffing 이 일어나고 있는지 주기적으로 감시한다. (e.g. cpm)
하지만 위와 같은 방법을 통해서 패스워드 누출을 막았다고 모든 것이 해결되는 것은 아니다. 기껏해야 remote 에서 해커가 침입하는 경로중 하나를 막았을 뿐이다.
그 좋은 예로 SunOS 4.1.x 대에서 존재했던 ypupdated 의 버그를 악용하여 침입 을 하는 경우 rpc call 을 사용한 프로그램을 악용하여 remote 의 사용자가 target host 의 root 권한의 명령을 원격으로 실행시킬 수 있었다. 이 프로그램을 slammer 라 하는데 만일 slammer 를 이용하여

echo intruder::0:1::/:/bin/csh >> /etc/passwd 라고 명령을 실행시켰다면 targethost 의 패스워 드를 모르더라도 직접 root 권한을 얻을 수 있게 되는 것이다.

또한 Sendmail 의 버그가 존재했던 경우 smtp 포트 상에서 명령을 주어 /etc/passwd 화 일을 가져 올 수가 있었으며, 심지어는 특정포트에 접속하는 경우 interactive shell 이 invoking 되도록 조작할 수도 있었다.

2.1.1.2 로그화일 점검
시스템의 로그화일은 해커의 침입을 추적할 수 있는 유일한 단서가 된다. 또한 시스템을 관리하 는데 중요하지만 대부분의 관리자들이 이를 중요시 하지 않고 있어서 문제가 된다.
로그화일

.history - 사용자 히스토리 화일
utmp - 현재 사용자 리스트.
wtmp - 로긴, reboot 정보.
lastlog - 사용자 최종 로긴 정보.
syslog - 메일 디버깅 정보.
paact - 사용자 명령 정보.
messages - 커널 에러, 리부팅 메시지.


관련명령어

who, w
last
lastcomm, acctcom
netstat
물론 모든 로그 화일은 침입한 해커에 의해 변조되고 삭제 되는 것이 보통이다.
이 경우 몇몇 로그 화일은 변조되었는지 여부를 다음의 툴을 사용하여 체크해 낼 수 있다.


chkacct
location: ftp://ftp.cert-kr.or.kr/pub/tools/etc/chkacct

chklastlog
location: ftp://ftp.cert-kr.or.kr/pub/tools/etc/chklastlog

chkwtmp
location: ftp://ftp.cert-kr.or.kr/pub/tools/etc/chkwtmp

2.1.1.3 화일시스템 점검 및 기본적으로 알아둘 사항
화일시스템 점검
setuid 가 걸려있고 root 소유의 실행화일인 경우 주의가 필요하다.
setuid 화일 및 주요 화일시스템들에 관한 체크섬을 받아둔다. (sum, md5 이용)
startup 화일들 (.exrc, .cshrc , .login....) 등의 화일들이 owner 외에는 writable 해서는 안된다.
전체적인 화일 리스트를 받아 둔다.
# ls -aslRg / > list_of_system_old

# ls -aslRg / > list_of_today

# diff list_of_system_old list_of_today



특히 해커들이 침입을 한 경우 /bin/login , /usr/etc/in.* , /lib/libc.so.*, 등과 같은 중요한 시스템 화일들을 변조시켜 놓고 가는 경우가 많으므로 세심히 체크를 해야 한다. 이 화일들 외에도 inetd 에서 호출되는 데몬, 프로그램들을 변조할 가능성도 많고, netstat, ps, ls , df , ifconfig , sum 등과 같은 프로그램들을 조작하여 시스템 내부에 침입한 커넥션을 숨긴다든지, 시스템 내부에 숨겨진 디렉토리를 만들 가능성도 많다.
기타
필요없는 서비스는 하지 않는다.
필요 없는 프로세스들은 돌리지 않는다.
/etc/hosts.equiv 화일이나 ~root/.rhosts 등의 화일에 + 가 들어가 있는지 확인한다.
secure terminal 은 console 로만 지정해 놓는다.
현재의 해킹방법중 /etc/hosts.equiv , ~root/.rhosts 를 생성시키거나 원하는 항목을 삽입하는 해킹기법이 다수 존재한다. 이를 대비하기 위해 아예 /dev/null 로 링크를 시켜버리는 것도 좋은 방법이다.
2.1.1.4 팻치
시스템 내에 버그가 존재한다는 리포트가 나오게 되면 가장 먼저 이를 활용하는 사람은 역시 해커들이다. 그들이 직접 발견하지 못했던 버그를 각종 리포트, Advisory 등을 통해 알게 되고 이를 악용하여 침입을 시도 할 수 있기 때문이다.
그렇기 때문에 관리자들도 부지런히 이에 관련된 정보들을 얻어야 한다. 또한 정보를 얻는데 그치지 말고 OS vendor 나ㅓ, Security TFT 들이 제공하는 patch 를 받아서 설치해야 한다.

다음과 같은 뉴스그룹 및 메일링 리스트를 활용하기 바란다.


alt.security
alt.security.index, alt.security.pgp
comp.security.announce
comp.security.misc
comp.security.unix
comp.security.firewalls
demon.security
sun.security.digest
comp.lang.java.security
han.comp.security
alt.2600
phrack
bugtraq
BOS (best of security)


2.2 Management technique of local host security
2.2.1 Using some useful stuffs.
관리자가 일일히 수작업을 통하여 보안시스템을 구축한다는 것은 상당히 힘든 일이다. 그렇기 때문에 좋은 툴을 구하여 유효적절히 사용하는 것이 중요하다. 다음과 같은 툴들이 있다. 여기에서는 간략한 분류 정도만 하고 자세한 사항은 프리젠테이션 때 다루기로 한다.
Cryptographic Tools
MD5

DES, RSAREF
E-Mail Security
PGP
RIPEM
PEM
Network Monitoring
TCPDUMP
ARGUS
ARPWATCH
NFSWATCH
CPM
NETLOG
UNIX Auditing Tools
COPS
TRIPWIRE
TIGER
SWATCH
UNIX Password & Login Tools
CRACK , CRACKLIB
NPASSWD, PASSWD+
S/KEY
Vulnerability Detection
ISS
SATAN
GABRIEL
SCAN-DETECTOR
2.2.4 What does administrator do when his system is exploited by cracker
우선 시스템에 피해 상황이 어떠한지를 냉철히 파악하는 것이 중요하다. 실제로 해킹을 당하지 않았는데도 시스템이 관리부주의로 인해 문제가 생기면 해킹당한것이 아닌가 의심하는 경우가 많다.
이런 경우 system 들의 중요한 화일들의 checksum 들을 비교하여 변조되지 않았는가를 체크해 본다.

또 해커의 침입을 발견하고 , 해킹현장을 목격했을 경우, 또는 로그화일을 통하여 범인이 누구인지 알게 된 경우 어떻게 대처할 것인지를 미리 rule 로 정해두어서 실수하는 일이 없도록 한다.

해커들이 침입하고 나간 경우 재침입의 용의를 위해 backdoor 를 설치해 놓았을 가능성이 많다. 이 backdoor 를 찾아보는 것이 중요하다.

우선적으로 setuid 가 걸려있는 화일들을 살펴본다.
# find / -perm -4000 -print

해커들이 보통 찾기 힘든 화일이름으로 숨겨 놓고 가는 경우가 많다.

e.g. " " , /usr/man/man6/bash.6 , ".. "


/bin/login 을 특정패스워드를 입력하면 root 로 로긴하게 하는 프로그램으로 바꿔 놓았을 경우가 많다.
간혹 미숙한 해커들의 경우 트로이 목마로 설정한 /bin/login 에서 스트링 컨트롤을 잘못하여 특정패스워드가 보이는 경우가 있다. 이런 경우 strings /bin/login 을 이용하여 찾아낼 수 있다.

특정 스트링을 입력하면 root 권한을 주는 트로이 목마 화일을 내부에 만들어 놓고 나간 경우 setuid 가 걸려 있기 마련이다. 이런 경우 system call 을 조사해주는 trace , truss , par 등을 이용하여 검증을 해 볼 수 있다.
2.3 OS dependent bugs (Nowadays, What are security holes ?)
2.3.1 bugs in Solaris 2.4 and Solaris 2.5
1~2 년전만 해도 국내에서 가장 많이 사용되고 있던 OS 는 SunOS 4.x 였었다. 물론 SunOS 4.x 에서의 버그는 상당히 많고, 많은 패치들이 나왔으며, SunOS 4.x 를 해킹하는 방법도 해커들 사이에서 다양하게 연구 되어져 있다.
하지만 이러한 방법들은 다른 문서상에서 많이 접할 수 있는 것들이므로 생략하기로 한다 .

현재 국내에서 가장 많이 사용되고 있는 OS 는 Solaris 2.x 이다. Solaris 2.3 이하 버전까지만 해도 상당히 OS 가 heavy 하며, 버그도 SunOS 보다는 적지만 상당히 치명적인 버그가 많이 존재하여서 문제가 되었다. Solaris 2.4 에서는 보안에 상당히 신경을 많이 쓴 것이 확연히 느껴졌지만 여전히 치명적인 버그가 존재하였고, Solaris 2.5 는 8lgm 팀들의 베타테스팅 을 거쳤음에도 불구하고 치명적인 버그가 발견이 되었다. 이제 이 버그들에 대해 알아보도록 하자.


Solaris 2.4 이하 버전의 경우

/tmp sticky bit problem tmpfs 에서 /tmp 디렉토리를 swap 디렉토리로 설정한 경우 rebooting 시마다 sticky bit 가 없어지는 문제가 생기게 된다. 이를 이용하여 ps 가 생성하는 ps_data 라는 화일에 race condition 이 생기게 된다.

Core dumping problem gid 가 sys 나 bin 인 프로그램들을 수행하는 중에 강제로 core 를 덤프시킬 수 있는 문제점이 있다. 여기에서 덤프시킨 core 를 이용하여 퍼미션이 허가되는 디렉토리를 엑세스 할 수 있게 된다.
이런 문제가 존재하는 프로그램들의 예로 dmesg, ff.core 등이 있다.

/usr/sbin/rtc 를 이용하여 crontab 을 조작할 수 있는 문제점이 있다.


Solaris 2.5 의 경우

/usr/openwin/bin/kcms*
/usr/bin/admintool
vold (1M) ; volume management daemon
위의 3 가지 모두 프로그램이 작동할 때 생성되는 임시화일들 및, lock 화일 들에 대한 컨트롤을 제대로 하지 못하여 시스템 내부에 임의로 화일을 생성시킬수 있 는 문제점을 가지고 있다.

2.3.2 bugs in IRIX
IRIX OS 는 훌륭한 그래픽 인터페이스 를 제공하여 점차 점유율이 높아지고 있는 OS 이다. 하지만 이 OS 의 경우 편의를 중시한 나머지 불필요한 setuid 를 많이 남용하여 많은 security problem 을 낳았다.

X window problem
기본적으로 IRIX 호스트 간의 연결시 DISPLAY 변수가 remotehost:0 으로 셋팅이 되어 버린다. 또한 기본적으로 Xhost + 의 상태로 되어 있으므로 /var/X11/xdm 에서 xhost + 를 허가하는 부분을 모두 제거해야 한다.

Null password problem
OS install 직후 null password 상태로 되어 있고 shell access 를 허가 하는 ID 가 존재한다. (e.g. guest, lp, EZsetup, tutor...) /etc/passwd 의 2 번째 필드를 lock 해줄 필요가 있다.

sgihelp problem (IRIX 5.x)
sgihelp 를 호출하는 프로그램이 setuid root 프로그램일 경우 root 권한으로 특정 명령들을 실행시킬 수 있는 문제가 있다.

colorview problem (IRIX 5.2)
/usr/sbin/colorview 는 setuid root 프로그램이다. 이 프로그램을 이용해서 시스템 내의 어떠한 화일이라도 읽을 수 있게 된다. (-text 옵션 사용)

/usr/lib/vadmin/serial_ports (IRIX 4.x) 특정 명령어를 상대경로로 실행을 하기 때문에 문제점이 있다. IRIX 4.x 에서 5.x 로 upgrade 만 했을 경우 기존의 binary 가 남아 있게 되어 문제가 된다.
/usr/sbin/printers (IRIS 5.x)
sgihelp 를 호출하여 root 권한으로 명령을 실행시킬 수 있는 문제점이 있다.

permissions
임의의 화일의 퍼미션을 일반 유저도 바꿀 수 있는 문제점이 있다.

/usr/pkg/bin/pkgadjust -f problem (IRIX 5.2, 5.3)

/usr/sbin/fmt (IRIX 4.0 이하 버전)
2.4 Further Study
Some high level attacks
자세한 설명은 본 강의의 목표 설정을 뛰어 넘으므로 생략하기로 한다. presentation 때 자세히 언급을 하도록 하겠다. high level attack(고난도 공격) 에는 DNS cache poisoning, YP snarfing, slammer, IP spoofing , NFS file handle guessing , nuking 등이 있다. 보통의 저수준 해커들의 경우 advisory 에 딸려나오는 해킹 스크립트 나 , 해커들이 배포한 해킹 기법( 커맨드 라인상에서명령어들만으로 해킹이 가능한 것) 을 이용하는 경우가 많다. 이들의 수준은 아주 낮고 쉽게 추적이 가능하며, 시스템의 버그만 막아주면 쉽게 방어가 가능하 다. 하지만 high level attack 은 쉽게 구현하기 어려워서 상당한 수준이 아니라면 구사하기 어렵다. DNS cache poisoning 의 경우는 DNS 서버의 cache 화일들을 조작하는 경우로서 대담하고 스케 일이 큰 해킹의 예이다.
YP snarfing 은 NIS 를 돌리고 있는 경우에 외부의 호스트에서 인증절차 없이 passwd , passwd.adjunct 와 같은 치명적인 화일들을 가져 올 수 있는 기법이다. YP snarfing 을 하는 과정에서 Domain name guessing 기법은 필수적으로 요구된다.

Slammer 는 RPC call 을 이용하는 경우로서 외부에서 target host 의 root 권한 명령을 실행시킬수 있다는 문제점이 있다. 원래는 상당수준에 이른 해커들만이 구사 할 수 있었으나 해킹프로그램이 배포되어 많은 저급해커들도 구사를 하고 있다.

IP Spoofing 은 IP 를 target host 가 trust 하는 호스트의 IP 인 것으로 위장하여 침입을 하는 방법으로서 상당한 기술이 요구된다.

NFS File handle guessing 은 remote host 에서 NFS 를 돌리고 있는 target host 의 화일시스템 안에 원하는 퍼미션의 원하는 화일을 임의로 생성시킬수 있도록 하는 것으로서 target host 의 내 부에 버그가 없는데 NFS 를 돌리고 있는 경우 해커가 root 권한을 얻기위해 사용하곤 한다. 그래서 속칭 "후방지원" 프로그램으로 불리기도 한다.

nuking 은 그렇게 치명적인 기법은 아니지만 ICMP 패킷들을 조작하여 전송하는 기법으로 다른 사용자의 connection 을 끊어버릴 수 있다.

5. 결론
관리자들에게
인간이 디자인하고 제작한 것이기 때문에 OS , Network Protocol 들은 기본적으로 vulnerability 를 내제하고 있다. 하지만 아직까지 드러나지 않은 것 뿐이다.
하지만 이 취약점들로 인해 많은 문제를 낳고 있기 때문에 우리는 security 에 관해 알아야 하고 끊임없이 관심을 가져야 한다.

조금만 신경을 쓰면 시스템을 침입자들로부터 안전하게 지킬 수 있게 된다. 지금 많은 관리자들의 관심과 노력이 요구되는 실정이다.


해커들에게
기본적으로 UNIX 의 구조에 대해 많이 알고 있고, 또 프로그램들을 자주 사용하다 보면 자연스럽게 버그도 발견하게 되고, 해킹하는 방법도 체득하게 된다. 또한 이를 막아내는 방법도 동시에 알아내게 되는 것이다.
고로, 해킹을 할 줄 안다고 하여 그것이 자랑거리가 될 수 없고, 자신의 실력이 뛰어나다고 말 할 수 있는 근거는 미비하다. 또 생겨난 버그는 OS 버전이 올라가면 사라지기 마련인데 존재하는 버그를 악용해서 시스템을 파괴하고, 자신의 시간과 정열을 파괴하기 보다는 이 욕구를 양성적인 분야로 돌려 많은 공헌을 하기를 권하고 싶다.