2013년 11월 26일 화요일

Linux 침입자 탐지 체크리스트

원본: CERT Coordination Center's Intruder Detection Checklist

이 문서는 컴퓨터 시스템이 외부인에 의해 침입을 당했다고 의심이 가는 경우 이를 알아내어 대처하는 방법에 대해 다루고자 한다. 시스템 관리자는 이 문서에서 다루고 있는 내용을 참고하여 여러 가지 침입을 효과적으로 대처하는데 유용하게 사용하기 바란다.
주의: 먼저 흔적을 찾는 과정 중에 취해지는 모든 행위는 해당 기관의 정책이나 처리과정에 부합되어야 한다.

1. 낯선 곳에서 연결을 한 경우나 특이한 작업을 한 경우에 해당하는 모든 로그 파일을 조사한다. 예를 들면, last 로그, 프로세스 기록, syslog에 의해 생성된 모든 로그 파일 및 보안 로그 등을 조사한다. 만일 방화벽이나 라우터 등을 통해 이러한 로그가 침입을 당한 시스템이 아닌 다른 시스템에 저장되는 경우, 이들 로그들도 확인해야 한다. 최근에는 많은 침입자들이 자신들에 대한 흔적을 없애기 위해 이러한 로그 파일을 편집하는 경우가 많기 때문에 이러한 로그 파일 기록은 append-only 미디어(편집이 불가능하고 오로지 로그 데이터의 추가만이 가능한 저장매체를 말함)에 하는 것이 좋다.

2. 침입을 당한 시스템에 있는 setuid 와 setgid 파일을 모두 찾아 본다(특히, setuid root 파일). 일반적으로 나중에 재침입을 위해 침입자들은 이러한 setuid 설정이 된 /bin/sh 이나 /bin/time 등과 같은 복사본을 만들어 놓는 경우가 많다. 이러한 파일은 찾아서 삭제해야만 한다. 유닉스의 find(1) 프로그램을 시용하여 이러한 setuid 나 setgid 파일을 찾아낼 수가 있다. 예를 들면, 아래 명령을 이용하여 setuid root 파일과 setgid kmem 파일을 전체 파일 시스팀에서 찾을 수 있다.
# find / -user root -perm -4000 -print
# find / -group kmem -perm -2000 -print

주의할 점은 위 명령은 NFS/AFS로 마운트된 파일 시스템까지 몽땅 찾으므로 이러한 파일 시스템을 찾는 대상에서 제외하고자 하는 경우, “-xdev” 옵션을 사용한다(단, 이 옵션은 지원하지 않는 find 도 있음).
find / -user root -perm -4000 -print -xdev
또다른 setuid 파일을 찾는 방법은 ncheck(8) 명령이다. 예를 들면, 아래 명령은 디스크 파티션 중 /dev/rsd0g에서 setuid 파일을 찾아준다.
ncheck -s /dev/rsd0g

3. 침입을 당한 시스템의 바이너리 파일이 변경되었는지 여부를 확인한다. 침입자들은 침입 시에 사용할 수 있는 각종 유닉스 프로그램들을 변경하여 이용하는 경우가 많은데, 이러한 프로그램들에는 login, su, telnet, netstat, ifconfig, ls, find, du, df, libc, sync, /etc/inetd.conf에서 호출하는 바이너리 파일들, 네트워킹 프로그램, 시스템 프로그램 및 공유 오브젝트 라이브러리 등이 있다. 이러한 바이너리 파일들을 초기 설치시의 파일과 비교하여 변경되었는지 확인한다. 변경된 파일들에는 일반적으로 트로이목마 등과 같이 침입자가 변경한 내용이 들어가 있는데, 최근의 트로이목마는 바이너리 비교 시에 사용되는 체크섬(checksum)과 타임스탬프(timestamp)로도 알아내지 못하는 경우가 많다. 따라서 표준 유닉스 명령인 sum(1) 과 timestamps로는 이러한 트로이목마를 찾기 힘들기 때문에, 이러한 용도를 위해 전문적으로 설계된 cmp(1), MD5, Tripwire, 등의 checksum 도구를 사용하여 트로이목마를 찾아 낸다. Checksum 도구 자체도 침입자에 의해 변경되었는지 다른 checksum 도구로 확인해 보도록 한다. PGP나 Tripwire의 MD5를 이용한 전자서명 등을 해 놓으면, 추후에 변경여부를 확인하기 쉽다.

4. 스니퍼(sniffer) 혹은 패킷 스니퍼(packet sniffer) 등의 네트워크 모니터링 프로그램이 불법적으로 이용된 시스템이 있는지 확인하다. 침입자들은 이러한 스니퍼 등을 이용하여 사용자 계정과 암호와 관련된 정보를 훔쳐내서 침입에 활용한다.

5. ‘cron’과 ‘at.’에 의해 실행되는 모든 파일을 조사한다. 이들 파일들은 침입자에 의해 백도어(back-door)가 있는 경우가 많기 때문에 추후에 침입을 위해 다시 이용될 수 있다. 그리고 ‘cron’과 ‘at.’에 의해 참조되는 모든 프로그램과 파일들이 누구나 쓸 수 있는 권한(world-writable)이 부여되지 않았는지 확인한다.

6. 불법적인 서비스가 없는지 확인한다. 즉, /etc/inetd.conf에 불법적으로 어떤 서비스가 추가 되었거나 변경되었는지 조사한다. 특히, /bin/sh 이나 /bin/csh 등과 같이 쉘 프로그램을 실행시키게 만드는 서비스가 없는지 확인하고, /etc/inetd.conf에서 지정된 해당 서비스 용 프로그램이 본래의 프로그램인지 트로이목마 프로그램 등에 의해 교체되지는 않았는지 등을 확인한다. 그리고, 이전에 /etc/inetd.conf에서 코맨트 처리한 서비스가 실행되고 있지는 않은지 등을 확인한다. 보안 상의 이유로 서비스되지 않도록 코맨트 처리한 서비스(예를 들면, rlogin이나 rsh 등)가 침입자에 의해 서비스되고 있는 경우가 많다.

7. /etc/passwd 파일이 변경되었는지 여부를 확인한다. 특히, 불법적인 새로운 계정의 생성이나, 암호가 없는 계정, 혹은 UID가 변경된(특히, UID가 0으로 변경된) 계정이 있는지 확인한다.

8. 네트워크 configuration 파일에 불법적인 내용이 들어가 있지 않은지 확인한다. 특히, ‘+’ 기호가 추가되어 있지 않은지 확인하고, /etc/hosts.equiv, /etc/hosts.lpd 와 모든 .rhosts 파일(특히, root, uucp, ftp 등의 시스템 계정이 사용하는 디렉토리에 있는 .rhosts 파일)에 로컬 호스트가 아닌 이름이 추가되어 있지 않은지 조사한다. 이러한 파일들은 누구나 쓸 수 있는 권한(world-writable)으로 설정되어 있어서는 안 된다. 아직 침입을 당하지 않았더라도 이러한 파일들이 운영자의 실수나 오류에 의해 있을 수 있으므로 사전에 확인하여 침입에 이용되지 않도록 한다.

9. 시스템에 침입자나 사용할 만한 프로그램이나 히든 파일(hidden files) 등이 있는지 확인한다. 예를 들면, 암호를 자동으로 깨주는 크랙 프로그램이나 다른 시스템의 패스워드 파일 등이 이러한 대한 파일이 될 수 있다. 이러한 히든 파일은 파일명이 ‘…’, ‘.. ‘ 혹은 ‘..^G’ 등으로 보통의 경우에는 보이지 않는 파일명을 가지고 있다. 유닉스의 find(1) 명령을 사용하여 이러한 파일들을 아래와 같이 입력하면 찾을 수 있다.
# find / -name “.. ” -print -xdev
# find / -name “.*” -print -xdev | cat -v
이밖에도 얼른 보아서는 보통의 파일처럼 보이는 ‘.mail’ 과 같은 파일도 침입자가 침입도구로 사용하는 파일일 수 있다.

10. 로컬 네트워크 상에 있는 모든 시스템을 함께 조사한다. 특히, NIS가 실행되고 있거나, .rhosts 나 /etc/hosts.equiv 등을 통해 상호 신뢰하고 있는 시스템이 있는 경우 이들 호스트들을 모두 확인해야 한다.

댓글 없음:

댓글 쓰기