.bashrc
alias ls='ls --color=auto'

'Database > Server' 카테고리의 다른 글

유닉스 명령어  (0) 2010.04.07
특정단어 패턴으로 검색하기  (0) 2010.03.29
TOP  (0) 2010.02.03
해킹 피해시스템 분석절차  (0) 2009.09.28
[Unix]sendmail 테스트  (0) 2009.09.09
유닉스에서 시스템 상태를 간략하게 볼 수 있는 대표적인 프로그램인 TOP에 대한 설명이다.

1. 설치

http://sourceforge.net/projects/unixtop/ 에서 top-3.7.tar.gz 을 받는다.
root@wl ~ # tar xvfz top-3.7.tar.gz
root@wl ~ # cd top-3.7
root@wl ~/top-3.7 # ./configure
메시지 생략
config.status: creating top.1
config.status: creating config.h
root@wl ~/top-3.7 # make
메시지 생략
cc -DHAVE_CONFIG_H -I. -I. -g -v -o top color.o commands.o display.o hash.o s
creen.o top.o username.o utils.o version.o m_sunos5.o -lm -ltermcap -lkvm -lkst
at -lelf
root@wl ~/top-3.7 # make install
메시지 생략
./install-sh -c -m 755 \
top /usr/local/bin/top
root@wl ~/top-3.7 #

2. 화면 설명

root@wl ~ # top
last pid:1) 14149; load avg:2) 0.03, 0.06, 0.08;; up 46+07:54:14 15:57:473)
56 processes: 55 sleeping, 1 on cpu4)
CPU states: 97.6% idle, 1.4% user, 1.0% kernel, 0.0% iowait, 0.0% swap5)
Kernel: 224 ctxsw, 7 trap, 232 intr, 230 syscall, 7 flt8)
Memory: 2048M phys mem, 1873M free mem, 2048M swap, 2048M free swap6)
This terminal can only display 18 processes9)
PID USERNAME LWP PRI NICE SIZE RES STATE TIME CPU COMMAND7)
14133 nobody 27 59 0 97M 14M sleep 0:00 0.80% httpd
13541 mysql 13 59 0 341M 52M sleep 3:30 0.73% mysqld
14137 root 1 59 0 5660K 2324K sleep 0:00 0.59% sshd
14149 windy 1 59 0 2644K 1456K cpu 0:00 0.37% top
14139 windy 1 59 0 2612K 1668K sleep 0:00 0.03% bash
450 root 7 59 0 3012K 2388K sleep 0:00 0.03% mibiisa
14134 root 1 59 0 4440K 2080K sleep 0:00 0.02% sendmail
13560 root 1 59 0 1204K 872K sleep 0:08 0.01% cronolog
13555 root 1 59 0 89M 8916K sleep 0:00 0.00% httpd
237 root 1 59 0 3448K 1416K sleep 0:01 0.00% in.named
14136 nobody 27 59 0 89M 2536K sleep 0:00 0.00% httpd
13701 root 1 59 0 5660K 2324K sleep 0:00 0.00% sshd
456 root 2 59 0 3612K 2200K sleep 0:00 0.00% snmpXdmid
461 root 2 59 0 3920K 2112K sleep 0:00 0.00% vold
257 root 18 59 0 3096K 2028K sleep 0:00 0.00% nscd
1)마지막으로 할당된 PID. 따라서 PID에서 가장 큰 값을 의미하지는 않는다. 단지 얼마나 빨리 프로세스가 생성되는지 대략적인 가늠만 할 수 있을 뿐이다. (PID는 순차적으로 할당되지 않는다) root권한으로 top을 실행해야 표시된다.
2)로드 평균. 로드란 시스템 스케줄러의 런 큐에 대기하고 있는 쓰레드의 개수로, 일반적으로 시스템의 부하는 로드값이 높은 것을 의미한다. (항상 그런것은 아니다) 왼쪽부터 차례대로, 1분, 5분, 15분간 평균 로드값을 나타낸다.
3)시스템 가동시간및 현재 시간
4)모든 프로세스 상태 개요. 총 개수와 각각의 상태를 가리킨다.
- On cpu:현재 CPU에 의해 실행되고 있는 프로세스 개수
- Running: 실행할 수 있는 프로세스 개수. On CPU와 Running인 프로세스가 많다는 것은 시스템에 부하가 많다는 뜻이다.
- Sleeping: 외부 이벤트/입력을 기다리고 있는 프로세스 개수
- Stopped: Ctrl+Z와 같은, 정지 시그널로 정지된 프로세스 개수
- Swapped: 디스크로 스왑되고 있는 프로세스 개수. 0이어야 한다.
- Zombie: 종료되었지만, 다른 이유로 정리되지 않고 기다리고 있는 프로세스 개수. 작은값 또는 0이어야 한다.
5)CPU 상태.
- Idle: 아무것도 하고 있지 않음
- User: 유저 프로세스 실행중
- Kernel: 커널 시스템 콜, 페이지 폴트, 인터럽트 수행중
- IOwait: I/O 를 위해 기다리는 중
- Swap: 스와핑 또는 페이징하는중
6)메모리 상태
- phys mem: 프로세스가 사용할 수 있는 물리 메모리 양.(커널에 의해 예약된 영역 제외)
- free mem: 남은 메모리 양.
- total swap: 사용된 스왑 메모리 양.
- free swap: 남은 스왑 메모리 양.
7)프로세스 상태
- PID: 프로세스 아이디
- USERNAME: 프로세스 소유자 이름
- LWP/THR: LWP또는 쓰레드 개수 (Light-Weight Process, SUN은 쓰레드와 LWP는 다르다!고 하지만 유닉스 쓰레드가 LWP를 이용해 구현되기 때문에 비슷한 개념인건 맞다) 개수. 모든 프로세스는 1개 이상의 쓰레드를 가진다.
- PRI: 우선순위. 유저프로세스의 경우 범위는 0~59이다. 사용자가 주는 데이터를 바탕으로 커널에 의해 자동으로 결정된다. 값이 높을 수록 우선순위가 높다. 이 값에 신경쓸필요는 없다. 솔라리스 커널은 똑똑하니 말이다.
- NICE: 우선순위를 결정하기 위해 커널에서 참고하는 값. 나이스 값이다. 사용자가 설정할 수 있으며 설정하지 않으면 0이다. 이 값이 낮다면 우선순위가 높게 책정될지도 모른다. (이렇게 모호하게 서술한 이유가, 솔라리스 커널에서 우선순위는 NICE값을 고려해 커널 맘대로 설정하기 때문이다) 솔라리스에서는 -20~20까지 설정할 수 있다.
- SIZE: 프로세스에 할당된 총 메모리의 양이다. 물리메모리 + 가상 메모리 + ... 의 값이다.
- RES: 프로세스에 의해 사용된 물리 메모리의 양이다. RES는 RESident set size의 약어이다.
- STATE: 프로세스 상태. CPU, RUN, SLEEP, STOP, SWAP, ZOMB가 있다. 자세한 내용은 [4) 프로세스 상태]를 참고하자.
- TIME: 프로세스가 사용한 CPU시간이다. 1:00 이라 되어있으면 해당 프로세스는 1분동안 CPU를 100% 소모한것과 같다. 1000분이 넘으면 H(시간)으로 단위가 바뀐다. [127.4H]라면 127시간 + 0.4시간(24분) 이라는 뜻이다.
- FLTS: TOP이 실행된 이후 생긴 메이저 페이지 폴트 회수. 일반적인 경우 0에 가까워야 한다.
- CPU: 현재 프로세스의 총 CPU 대비 사용률. TOP는 이를 기준으로 프로세스 목록을 정렬한다. 1개의 CPU가 있는 시스템에서 [30%]라 되어있으면 해당 프로세스는 전체의 30%를 사용하고 있는 것이다. 4개의 CPU가 있는 시스템에서 [25%]라 나왔다면, 해당 프로세스는 CPU 1개를 100% 소비하고 있다고 해석된다.
- COMMAND: 프로세스를 실행한 커맨드.
8)커널 개요 (단위: 초, TOP 3.7이상)
- ctxsw: 컨텍스트 스위치
- trap: 트랩 회수
- intr: 인터럽트
- syscall: 시스템콜
- fork: fork, vfork 회수
- flt: 페이지 폴트
- pgin: 페이지인
- pgout: 페이지아웃
9)터미널 라인 표시. 실행시 [이 터미널은 18개의 프로세스만을 표시할 수 있습니다]라고 안내해준다.

3. 사용

  • 실행옵션
    • -C, --color: 컬러 사용 안함
    • -I, --idle-procs: 유휴 프로세스 표시 안함(기본값은 표시)
    • -S, --system-procs: 시스템 프로세스(페이징데몬, 스와핑 데몬등등) 보임(기본값은 표시 안함)
    • -T, --tag-names: 사용 가능한 컬러 태그 목록 보임
    • -a, --all: 모든 포로세스를 보임("-d all all" 과 동일)
    • -b, -n, --batch: 배치모드. 표준 출력이 터미널이 아니거나 더미 터미널인 경우 기본값. 터미널로부터의 모든 입력 무시.(인터럽트 캐릭터 예를 들어 Ctrl+C등은 유효함)
    • -c, --full-commands: 프로세스의 커맨드 라인을 모두 보임(모든 플랫폼에서 지원되지는 않음. 솔라리스에서는 지원됨)
    • -i, --interactive: 인터랙티브 모드 사용. 표준 출력이 터미널인 경우 기본값.
    • -q, --quick: top을 -20으로 renice 한 후 실행. 루트로만 가능.
    • -u, --uids: UID를 사용자이름으로 변경하지 않음.
    • -v, --version: 버전 출력
    • -d count, --displays count: 지정한 회수만큼 출력하고 종료. 터미널에서의 기본값은 'infinity'. 수치 외에 'infinity', 'maximum', 'all' 을 사용할 수 있다.
    • -s time, --delay=time: 갱신 지연 시간(초). 기본값은 5.
    • -o field, --sort-order=field: 정렬 순서. 컬럼명(7))을 소문자로 써주면 된다. (예: cpu, size, res, time)
    • -U username, --user=username: 해당 사용자의 프로세스만 보임
  • 대화형 명령
    • h, ?: 도움말, 버전정보
    • C: 컬러 사용 여부
    • c: 지정한 문자열을 포함하는 커맨드를 가진 프로세스만 표시. 빈 문자열의 경우 모든 프로세스를 표시. (모든 플랫폼에서 지원되지는 않음. 솔라리스에서는 지원됨)
    • d: 지정된 회수만큼 프로세스를 보임. 1이면 한번 보여주고 바로 종료됨. 기본값은 무한대.
    • f: 풀 커맨드 라인을 보일것인지 여부
    • H: 쓰레드를 각각의 라인마다 보여줌. (모든 플랫폼에서 지원되지는 않음. 솔라리스에서도 지원안됨. [prstat -L]사용할것)
    • i, I: 유휴 프로세스를 보일 것인지 여부
    • k: 시그널 전송. k를 누른 후 kill 명령 뒤의 내용을 써준다
    • M: 메모리 사용량을 기준으로 정렬. [o size] 대화형 명령의 약어임
    • m: 또다른 디스플레이 모드를 사용함. (모든 플랫폼에서 지원되지는 않음. 솔라리스에서도 지원안됨)
    • N: PID 기준으로 정렬. [o pid] 대화형 명령의 약어임
    • n, #: 표시할 프로세스의 개수를 지정. n을 누른 후 숫자를 입력한 다음 엔터를 입력한다.
    • o: 정렬 순서를 변경. (모든 플랫폼에서 지원되지는 않음. 솔라리스에서는 지원됨) top 실행시 보이는 컬럼명을 소문자로 입력하고 엔터를 입력한다. 컬럼의 종류는 플랫폼마다 다르지만 cpu, res, size, time 은 보통 존재할것이다. 기본값은 cpu.
    • P: CPU사용량을 기준으로 정렬 [o cpu] 대화형 명령의 약어임
    • q: top 종료
    • r: 프로세스 우선순위를 결정. r을 누른 후 renice 명령 뒤의 내용을 써준다.
    • s: 표시할 시간의 지연시간을 결정. 숫자를 입력한다
    • T: CPU 사용시간을 기준으로 정렬. [o time] 대화형 명령의 약어임
    • U: 사용자명, UID 중 어느것으로 표시할 것인지 여부
    • u: 지정한 사용자가 소유한 프로세스만 표시. [+]인 경우 모든 사용자가 표시됨
  • 컬러 사용
    • 컬러는 환경변수인 TOPCOLORS 에 내용을 세팅하면 top을 실행할때 표시된다.
    • 환경변수의 내용은 "컬럼코드=[최소],[최대]#색상번호[;색상번호...][:컬럼코드=[최소],[최대]#색상번호[;색상번호...] ...]"의 형식이다.
    • 컬럼코드는 [top -T]명령을 통해 알아낼 수 있으며, 색상번호는 ANSI코드와 같다. 이는 color.h에 나와있으며 다음과 같다.
      속성                   글자 색상 번호               배경 색상 번호          
      0 초기화 30 검은색 40 검은색
      1 밝게 31 붉은색 41 붉은색
      2 흐릿하게 32 녹색 42 녹색
      4 아랫줄 33 노란색 43 노란색
      5 깜빡임 34 파란색 44 파란색
      7 반전 35 붉은자주색(Magenta) 45 붉은자주색(Magenta)
      8 숨김 36 맑은파란색(Cyan) 46 맑은파란색(Cyan)
      37 흰색 47 흰색
    • 최소, 최대값중 로드 평균을 나타내는 값은 원래 값에 100을 곱한 값을 넣어야 한다. (소숫점 2째자리까지 표현하기 위함이다)
    • 예) 1min=500,1000#31 → 1분단위 로드에서 5.00이상 10.00이하면 붉은색으로 표시
    • 예) TOPCOLORS="1min=100,300#32:1min=300,500#33:1min=500,#31:5min=100,300#32:5min=300,500#33:5min=500,#31:15min=100,300#32:15min=300,500#33:15min=500,#31:header=,#36:memory.physmem=,100#31;1" TOP COLORS

4. 팁

- TOP을 과신하지 않는다. 편하게 실행할 수 있긴 하지만, 역시 *stat 커맨드보다는 얻을 수 있는 정보가 많지 않다.
- NICE와 PRI에 대한 설명이 복잡하게 느껴질지도 모르겠다. 한마디로 우선순위는 사용자가 임의로 정해줄 수 없다는 것이다. 그나마 다행인건 솔라리스 커널이 꽤 똑똑하게 PRI값을 정해준다는 사실이다. nice, renice, priocntl(솔라리스 8 이상) 커맨드를 참고하자.

'Database > Server' 카테고리의 다른 글

특정단어 패턴으로 검색하기  (0) 2010.03.29
ls 했을때 디렉토리 색깔 나오게 하기  (0) 2010.03.29
해킹 피해시스템 분석절차  (0) 2009.09.28
[Unix]sendmail 테스트  (0) 2009.09.09
[Linux] Find … 명령어 활용  (0) 2009.07.23
해킹 피해시스템 분석 및 복구 절차  

2000. 2. 18

이현우/CERTCC-KR, lotus@{kisa, certcc}.or.kr

이 문서는 시스템이 침입을 당했을 경우 유닉스 시스템의 보안을 위해 무엇을 할 것인가를 알려준다. 또한 아직 침입을 당하지 않은 상태라도 시스템 보안점검에 도움이 된다. 그리고 유닉스 시스템이 침입을 당했을 경우 본 문서에서 권고하는 절차에 따라 시스템 복구하도록 권고한다.

1. 해킹 피해시스템 분석 절차

가. 시스템 침입흔적 조사 방법
 

  •  특별한 장소 또는 행위로부터의 접속에 대한 로그파일을 조사한다.
  • - last, syslog, 프로세스 로그와 그밖에 다른 로그파일을 조사한다.
    - access-log, xferlog 등 주요서버의 로그파일을 조사한다.
    - 방화벽 또는 라우터에 의한 로그 기록이 있을 경우 조사한다.
    < 유닉스 기본 로그 파일 >
    로그 파일 
    보유정보
    /var/adm/messages 콘솔 상에 있는 정보
    /var/adm/utmp(x) 현재 로그인한 사용자 정보
    /var/adm/wtmp(x) 사용자의 로그인, 로그아웃

    시스템의 shutdown, start up

    /var/adm/lastlog 사용자의 최근 로그인 관련정보
    /var/adm/acct 사용자의 command 정보
     
    예) 시스템 공격에 따른 각종 로그 예
  •  imap/ipop 공격 로그 : messages 로그파일
     

    Dec 5 11:57:50 www ipop3d[933]: connect from xxx.xxx.124.104
    Dec 5 11:57:54 www ipop3d[934]: connect from xxx.xxx.124.104
    ===========================================================
    Jun 22 10:03:07 ns imapd[447]: command stream end of file, while reading 
    line user=??? host=dialup187-2-45.xxx.xxx.xxx
    Jun 15 15:10:40 ns imapd[14943]: Login failure 
    user=^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^
    P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P^P
    ^P^P^P^P^P^P^P^P host=irv-ca48-32.xxx.xxx.xxx
  •  mscan 공격 로그 : secure 로그파일
    Jun 27 20:49:29 ns in.telnetd[12918]: connect from xxx.xxx.50.76
    Jun 15 03:39:28 ns imapd[14020]: connect from xxx.xxx.94.85
    Jun 15 10:15:07 ns in.ftpd[14169]: connect from xxx.xxx.250.76
    ...
  •  statd 공격 로그 : messages 로그파일
    May 9 07:08:14 hosim statd[191]: attempt to create "/var/statmon/sm//../../../../
    ../../../../../..//../../../../../../../../../../../../../../../../../../../../..
    /../../../../../tmp/.nfs09 D H $ $ $ $ `
    O * * * # # P *` c 6 ) 
    # # ; # XbinXsh tirdwr "
  •  WWW 관련 공격 로그 : access-log 로그파일
    xxx.xxx.ter.net - - [27/Mar/1998:06:12:08 +0900] "GET /cgi-bin/phf?Qalias=x%0a
    /bin/cat%20/etc/passwd HTTP/1.0" 200 7360
    xxx.xxx.xxx- - [04/May/1998:04:17:38 +0900] "GET /cgi-bin/phf?Qalias=x%0a/bi
    n/cat%20/etc/shadow HTTP/1.0" 200 92
    xxx.xxx.xxx- - [08/Jun/1998:09:17:14 +0900] "POST /cgi-bin/phf?Qname=x%0a/bi
    n/sh+-s%0a HTTP/1.0" 200 82

     
    •  setuid, setgid 파일을 조사한다.
      - 침입자는 종종 추후에 루트권한으로 접속하기 위해 /bin/sh 또는 /bin/time과 같은 백도어 파일을 남겨둔다.
      - 다음의 방법으로 setuid, setgid 파일을 찾는다.
      # find / -user root -perm -4000 -print
      # find / -group kmem -perm -2000 -print
      NFS/AFS 마운트 시스템에서는 다음과 같은 명령어를 이용한다.
      #find / -user root -perm -4000 -print -xdev
      - setuid 파일을 찾는 다른 방법으로 각각의 파티션에 대해 적용하는 ncheck 가 있다.
      # ncheck -s /dev/rsd0g
    •  시스템의 바이너리 파일의 변경 여부를 조사한다.
      - 침입자는 /etc/inetd.conf 가 참조하는 다음과 같은 파일들을 변경한다.
        login, su, telnet, netstat, ifconfig, ls, find, du, df, libc, sync 등
      - 백업된 초기 파일과 현재의 파일을 비교하기 위한 유닉스의 sum 명령어는 트로이목마프로그램에 의해 믿지못하는 결과를 나타낼 수 있으므로 다음 프로그램을 사용한다.
        cmp, MD5, Tripwire, 기타 다른 암호화 검사 유틸리티들
    •  인가받지 않은 프로그램 및 네트워크 모니터링 프로그램의 사용을 조사한다.
      - 침입자는 사용자의 계정과 패스워드 정보를 얻거나, 자신의 존재를 숨기거나, 또 다른 시스템을 공격하기 위해 다양한 프로그램 피해시스템에 설치하여 사용한다.
    < 자주 발견되는 해킹 프로그램 >
    프로그램명
    설명
    killinetd 원격지 호스트의 inetd 데몬을 다운시켜서 네트워크서비스 방해
    imap, imap2 imap 데몬 오버플로우 원격지공격 프로그램
    imapver  imap 데몬버전의 원격점검 프로그램
    netcat 범용 네트워크 해킹도구
    brute.sh imap 취약점공격시 사용되는 보조 프로그램
    z0ne 특정 도메인의 수많은 IP를 찾아내는 프로그램
    sniffer  스니퍼 프로그램
    linux rootkit 백도어 모음(chfn, chsh, inetd, login, ls, du, ifconfig, netstat, passwd, ps, top, rshd, syslogd, tcpd 등)
    phfscan phf.cgi 취약점 스캐너
    phpscan php.cgi 취약점 스캐너
    nmap  각종 기능을 추가한 포트스캐너 
    chkexploit linux의 각종 시스템 취약점을 찾아내는 스캐너
    eipscan network 레벨의 IP 스캐너
    ADMfindall network 레벨의 IP 스캐너
    lsp network 레벨의 포트스캐너
    imapvun  imap 취약점 스캐너
    imapd_scan.sh imap 취약점 스캐너
    mscan imapd, ipopd, statd등 여러 취약점을 찾아내는 취약점스캐너
    기타  sirc, ipw, ircbnc, login, icat, ts2, tt, mendax, phf, s, sirc4, bcast3, bips, boink, bonk, bonk2, ck, fear, frag, jolt, killwin, land, nestea, newteardrop, ns, smurf, ssping, tear2, teardrop 등
    •  cron과 at.으로 수행되는 모든 파일을 검사한다.
      - 침입자는 보통 cron과 at 명령으로 수행되는 파일들에 백도어 프로그램을 남겨둔다. 그러므로 이러한 프로그램으로 수행되는 파일들을 쓰기금지로 설정한다.
       
    • 인가받지 않은 서비스를 조사한다.
      - /etc/inetd.conf를 조사하여 인가받지 않은 추가되거나 변경된 서비스를 조사한다. 특히 쉘을 수행할 수 있는 /bin/sh나 /bin/csh를 조사한다.
       
    •  /etc/passwd 파일을 조사하여 변경된 부분이 있는지 확인한다.
      - 추가된 계정, 패스워드의 생략, uid(0로의)의 변경여부를 확인한다.
       
    • 시스템과 네트워크 설정 파일의 인가받지 않은 항목을 조사한다.
      - /etc/hosts.equiv, /etc/hosts.lpd과 모든 .rhosts 파일에 '+' 항목이 있는지 조사해서 제거한다.
    •  시스템에 숨겨지거나 '.' 으로 시작하는 특이한 파일이 있는지 조사한다.
      - ls 명령어로 보이지 않는 파일을 조사한다.
        # find / -name ".. " -print -xdev
        # find / -name ".*" -print -xdev | cat -v
      일반적으로 '.xx' 파일이나 '.mail' 파일이 침입자에 의해 이용된다.
    •  지역 네트워크의 모든 시스템을 조사한다.


    나. 침입자의 출발지 분석
     

    •  who, w : 사용자 및 사용자의 컴퓨터 확인
    •  last : 사용자들의 로그인/로그아웃 일시 기록 확인
    •  lastcomm : 사용자들의 시스템 명령 및 프로세스 기록 확인
    •  netstat : 네트워크 접속 현황 확인
    •  snmpnetstat : 네트워크관리 시스템에서의 현황
    •  라우터 정보 : 라우터의 라우팅 및 접속 등의 현황 확인
    •  /var/adm/messages : 전자우편 송수신 현황 기록 확인(많은 침입자들이 자신의 시스템으로 전자우편 송신)
    •  syslog : 시스템 로그 확인(다른 시스템으로도 로그를 보낸다)
    •  wrapper 로그 : 외부 시스템 접속 차단 프로그램의 연결
    •  시스템의 모든 사용자에게 finger를 하여 어디서 왔는지 점검
      * 참고 : who, w, last, lastcomm은 /var/pacct, /usr/adm/wtmp의 기록을 보여주는데 침입자들은 뒷문(Backdoor Program)을 이용하여 이 로그들을 수정하여 자신의 흔적을 지울 수 있다. 그리고 침입자가 아직 이런 뒷문이 없다하더라도 아주 쉽게 이 로그들을 수정하거나 지울 수 있다. 하지만 가끔 침입자들은 로그를 삭제하지 않을 수도 있으며, 특히 추가적인 유닉스 로깅 프로그램을 설치한 경우에 더욱 그렇다.


    다. xinetd나 tcp_wrapper는 외부에서의 모든 접속에 대해 로그를 남길 수 있으며, 침입자가 로그를 수정하거나 지울 수 없도록 이 로그들을 다른 시스템에 옮겨두는 것이 좋다. 적절한 대책을 세우기 전에 침입자가 ethernet sniffer로 다른 시스템에 어떻게 침입하는지를 모니터링하는 것이 좋다.

    라. 외부로부터 접속하는 시스템들을 막고 특히, 침입자의 접근을 막기 위해 네트워크를 중지시킨다. 하지만 만약 침입자가 눈치챈다면 당신의 시스템에서 "rm -rf /"를 실행하여 모든 정보를 지울 수도 있다.

    마. 시스템 실행 파일의 변경 유무를 점검하는데, 특히 뒷문프로그램으로 잘 이용되는 다음 프로그램들을 중점 점검한다.
     

    •  /bin/login
    •  모든 /usr/etc/in.* files (예: in.telnetd)
    •  /lib/libc.so.* (on Suns).
    •  inetd에서 호출되는 모든 것
    • 기타 잘 교체되는 것으로서는 다음과 같은 것이 있다.
      •  netstat : 정보를 감추게 한다
      •  ps : 프로세스를 감추게 한다 (예: Crack)
      •  ls : 디렉토리를 감춘다
      •  ifconfig : 이더넷에 대한 promiscuity mode 를 감춘다
      •  sum : sum을 수정하지 않고도 실행파일의 체크썸을 올바르게 위장 할 수 있으므로 더 이상 교체하지는 않는다. 따라서 sum값을 믿어서는 안된다.
    파일의 실제 수정 시간을 알기 위해서는 "ls -lac"를 사용한다. /etc/wtmp를 점검하여 시스템 시간을 알아내고 CD나 테이프의 원본과 비교하거나 MD5 체크썸이 이전의 체크썸과 다른지 비교하며, 흔히 off-line으로 저장된 미리 만들어진 체크썸과 cmp 명령으로 비교한다. 또 흔히 사용되는 뒷문으로서 /bin/time과 같은 setuid 프로그램인데, 이들은 일반 사용자가 root로 실행할 수 있게 해준다. 이런 프로그램을 찾기 위해서는 다음 명령을 이용하면 된다.
     
    find / -type f -perm -4000 -ls


    하다보면 OS 전체를 다시 설치해야될지도 모른다. Tripwire 보안도구는 관리자 몰래 실행파일을 수정하거나 inetd.conf와 같은 시스템파일의 수정을 발견할 수 있도록 도와준다.

    바. 모든 사용자의 .rhosts, .forward 등을 점검한다. 만약 .rhosts가 "+"를 가지고 있으면 어떤한 시스템에서도 패스워드 체크 없이접근할 수 있다. COPS는 다음 과 같은 체킹 스크립트를 가지고 있다.
     

    find / -name .rhosts -ls -o -name .forward -ls


    의심스러운 모든 파일의 생성 및 수정 시간을 점검하는데 다음을 이용한다.
     

    find / -ctime -2 -ctime +1 -ls


    이것은 이틀전 에서 하루 이후 에 수정된 파일을 찾아준다.

    모든 .login, .logout, .profile, .cshrc 들도 적어도 수정일 및 시간 등을 점검 하며, .rhosts 파일이 잠궈진 것은 없는지, news, sundiag, sync 등의 계정에 대한 쉘이 보다 안전을 위해 "/bin/false"로 되어 있어야 하며 "/bin/sh" 등으로 되어 있어서는 안된다. 또한 ". ", ".. " 등의 디렉토리가 없는지 점검하는데 대부분 /tmp,/var/tmp, /usr/spool/* 나 공개적으로 쓰기 할 수 있는 디렉토리에서 많이 발견된다.

    사. NFS가 외부에 널리 공개된것은 아닌지 점검한다.

    NFSwatch는 NFS트랜잭션에 대해 로그를 만들어주며, "showmount -e" 를 하여 올바른 NFS 구성을 점검할 수 있도록 한다. 256 바이트를 넘긴 경우에 nfsd는 버그를 가지고 있으며, 또한 당신이 마운트하고 있는 시스템에 대한 점검도 중요하다. 가능한 "nosuid"플래그를 사용한다.

    아. 시스템이 취약점이 있는지 점검하는 리스트
     

    •  원하지 않은 프로세스가 없는지, "rpcinfo -p"를 이용하여 점검한다.
    •  hosts.equiv 에 "+" 가 없는지 점검한다.
    •  tftp를 사용하지 않든가, 사용하기를 원한다면 "-s" 플래그를 사용한다.
      이 경우는 대부분 디스크없는 워크스테이션을 위한 경우인데, 적절하게 NFS를 이용할 수도 있다. 이것을 root 로 실행하지 않도록 하며, /etc/inetd.conf에서 다음과 같이 바꾼다.
       
        tftp dgram udp wait nobody /usr/etc/in.tftpd in.tftpd -s /tftpboot
      혹은 원치 않는 곳에서의 접근을 막기 위해 tcp_wrapper에서 tftpd에한 부분을 고치고 모든 접속 상황을 로그로 남긴다.
       
        tftp dgram udp wait nobody /usr/etc/tcpd in.tftpd -s /tftpboot
      혹은 /etc/hosts.allow에서 정의된 곳에서만 접근할 수 있도록 조정한다.
    •  crontab과 at-vobs 를 점검한다. 침입자가 남긴 모든 것을 정리했다고 생각한 후 이것이 어떤 작업을 할 수 있다.
    •  rc.boot, rc.local(SYSV : /etc/rc?.d/*)나 기타 시스템 시작시 실행 파일들을 점검한다. 가장 좋은 방법은 off-line으로 저장했다가 주기적으로 점검하는 것이며, sendmail.cf, hosts.allow, at.allow, at.deny, cron.allow, hosts, hosts.lpd 등의 시스템 구성파일들을 점검한다. "aliases"는 메일 확장을 위한 것인데, "uudecode" 등과 같은 것을 가지고 있을 수 있다.
    •  inetd.conf 와 /etc/services 파일에서 침입자가 추가한 불법 프로그램 서비스가 있는 지 점검한다.
    •  현재 가지고 있는 모든 로그 파일(pacct, wtmp, lastlog, sulog, syslog, authlog 등)들을 다른 안전한 곳으로 옮긴다. /tmp/* 파일들을 먼저 살펴 본 후 재시동(Reboot) 한다.
    •  /etc/passwd 파일의 여벌파일을 가능한 디스켓 등으로 저장한 후 su 및 passwd 프로그램이 뒷문(Backdoor) 가 아님을 확인한 후 root 패스워드를 바꾼다. 만약 침입자가 su 나 passwd 뒷문을 설치하였다면 /etc/passwd 파일의 패스워드 부분을 모두 "*"로 바꾼다. 또한 침입자가 패스워드 파일을 가지고 있다면 모든 사용자들의 패스워드를 알아낼 가능성이 있으며, 장기간 사용하지 않는 사용자의 패스우드를 바꿀 수 도 있다. NIS서버에서는 단순히 /etc/passwd 뿐 아니라 NIS 맵에 해 당하는 것들도 점검해야 한다.
    •  익명FTP나 다른 네트워크 서비스 시스템들이 적절하게 구성되어 있는지 점검한다.
    •  inetd를 다시 설치한다.
    •  콘솔 만이 "secure" 단말로 정의하여 다른 단말에서 root 로 로그인할 수 없도록 한다.
    •  hosts.equiv, .rhosts, hosts.lpd 에 "#" 이 있는지 점검한다. 만약 침입자가 "#" 을 기계이름으로 정의하였다면 누구나 신뢰하는 호스트로 정의된다.
    •  침입자에 대한 경각심을 늦추지 않는다.


    자. 침입자가 경유한 모든 기관의 시스템에 전자우편을 보내고 cert@certcc.or.kr 로도 메일을 보내 협조를 요청한다.
     

    2. 해킹 피해시스템 복구절차
     

    가. 침입으로부터의 복구

    (1) 시스템 제어 회복

    시스템에 대한 제어를 다시 회복하려면 침입자가 다시 접근할 수 없도록 네트워크 접속을 끊거나 단일사용자(Single-User) 모드에서 작업해야 한다. 그런 이후 로그파일과 구성파일을 분석하여 침입자가 남긴 흔적들을 찾아야 한다. 특히 이를 위해 시스템의 중요한 파일들에 대해 복사본을 가능한 오프라인 디스켓 등으로 보관하고 있는 것이 좋다

    추후 법적인 조사과정에서의 물증으로 확보하려면 파일시스템을 아주 자세한 수준으로 덤프(Dump)를 받고 결과의 레이블을 만들고 서명, 일시 등을 기록해두어야 한다. 물론 이 덤프파일은 안전한 곳에 보관해야 한다.

    (2) 침입자가 변조한 파일을 복구하고 시스템 다시 설치

    시스템을 훼손되지 않은 시스템으로 다시 설치해야 하는데 만약 백업 에서 다시 설치하는 것이라면 훼손되지 않았음을 확인해야 한다. 필요하다면 원래의 OS 미디어(tape, CD)로부터 다시 시스템을 설치한다,

    시스템의 취악요소들을 다시 확인하고 제거하도록 한다. 다시 설치한 시스템이 이러한 취약점들이 제거된 것을 확인하고 필요하다면 점검해 줄 수 있는 도구들을 활용한다.

    외부에 공개할 네트워크 응용프로그램과 그렇지 않은 응용프로그램에 대해 정의하고 제대로 구성화일이 되었는지 점검한다.

    Tripwire 와 같은 도구를 이용하여 새로 설치된 시스템에 대한 MD5 체크섬 파일을 받아둔다.
     

    (3) 로그시 분석된 다른 기관이나 시스템 관리자에게 연락 및 체크
     

    •  다른 기관에 무엇을 말하나?
      침해당하는 기간동안 관련된 외부기관에 대한 증거나 흔적이 있다면 자신 이 발견한 내용과 그 기관의 시스템이 당할지 모르는 침해에 대해 설명하고 도움을 주거나 요구해야 한다. 이러한 내용을 CERTCC-KR 에도 Email로 보내면 해당하는 기관이 CERTCC-KR 과의 협조를 받아 침해사고처리가 진행된다면 그쪽에서 신뢰감을 얻을 수 있으며 그 기관의 문제점에 대해 CERTCC-KR 이 도움을 줄수 있다.
       
    •  어떻게 연락처를 알 수 있나?
      whois, traceroute 등의 도구를 이용하여 알아낸다.
        # whois -h whois.krnic.net example.co.kr
        # traceroute example.co.kr
      만약 해외 기관이라면,
        # whois -h rs.internic.net
      을 이용하면 된다. 이 경우 어려움이 있다면 CERTCC-KR에 도움을 청하기 바란다. 특히 국내 전산망침해사고대응팀협의회(CONCERT)에 대해 알고 싶거나 해외 FIRST(Forum of Incident Response Security Team)에 대해 알고 싶다면 CERTCC-KR 에 접촉하거나 FIRST 홈페이지(http://www.first.org)를 접속하기 바란다.
    •  패스워드 파일을 메일로 보낼때는 어떻게 하는가?
      인터넷을 경유하여 패스워드 파일을 보내는 것은 매우 위험하므로 암호화된 패스워드 부분만 제거하고 보낸다.
       
        #awk -F: '{ print $1":(deleted):"$3":"$4":"$5":"$6":"$7 }' $file > $file.stripped
    •  패킷스니퍼 경우에는 어떻게 하나 ?
      시스템에 패킷스니퍼가 설치된 경우라면 패스워드가 알려진 시스템이 위험에 처해있음을 알 수 있다. 스니퍼 결과파일의 목적지 시스템이 문제인 것이다. 다음 명령으로 그 시스템을 알 수 있다.
       
        #grep PATH: $sniffer_log_file | awk '{print $4}' | awk -F\( '{print $1}'| sort -u
    이 명령은 대부분의 스니퍼가 만든 경우이며 다음과 같은 예제 파일을 가정으로 한 것이다.
    -- TCP/IP LOG -- TM: Tue Nov 15 15:12:29 --
    PATH: not_at_risk.co.kr(1567) => at_risk.ac.kr(telnet)
    또한 하나의 스니퍼 결과 뿐 아니라 이전에 만들었을지도 모르는 스니퍼 결과 파일이 있는지 조사해야 한다.


    나. 시스템 보안 작업

    (1) 패치를 가져와서 설치

    시스템에 관한 모든 패치들을 가져와서 설치한다. 이것은 외부의 침입시도를 막는 기본적인 과정의 첫걸음이며 시스템 공급업체로부터 요구할 수 있다.

    (2) CERT 기술권고문 등 관련 자료를 참고

    미국의 CERT 기술권고문(Advisory)나 CERTCC-KR의 권고문(KA:Korea Advisory) 혹은 CERT의 요약문 등을 참고하기 바란다. 이 권고문에는 시스템 취약점에 대한 패치 방법과 절차들이 기술되어 있다.
     

    •  이 권고문들은 다음에서 찾을 수 있다.
    - CERTCC-KR : http://www.certcc.or.kr/advisory.html
    - US CERT/CC : ftp://info.cert.org/pub/cert_advisories/


    (3) 해킹방지 등 보안 도구들을 설치함

    CERTCC-KR-TR-97-006, "침입 방지를 위한 보안 도구"를 참고하여 TCPWrapper, COPS, Tripwire 등의 보안도구들을 설치한다. 이 도구들은 미국 CERT에서 가져올 수 있다.
     

    ftp://info.cert.org/pub/tools/
    ftp://info.cert.org/pub/tech_tips/security_tools


    (4) 로그시스템을 다시 운영 시작

    로그/감사/회계 등의 패키지들을 올바르게 지정하여 다시 실행시키는데, sendmail은 레벨 8-9 등으로 적당한 수준을 정해야 하며 백업을 전용의 시스템으로 받을 것을 권고한다.

    (5) 네트워크 방화벽 시스템 설치 및 운영

    외부에서 들어오는 패킷에 대한 필터링은 매우 중요하므로 CERTCC-KR의 홈페이지에서 방화벽 FAQ 대해 이해하고 미국 CERT 의 패킷 필터링에 대한 권고사항을 이해하여 실시한다.
     

    ftp://info.cert.org/pub/tech_tips/packet_filtering


    (6) 유닉스 보안 구성지침에 따라 보안상태 검토

    시스템의 보안구성에 대해서는 CERTCC-KR-TR-97-004, "유닉스 보안구성 지침"을 참고로 한다.

    (7) 사용자 패스워드 교체

    시스템에 대한 안전한 작업이 끝났다면 이 침해를 당한 시스템의 모든 계정의 패스워드를 교체할 것을 권고한다. 그리고 패스워드 정책을 구현할 수 있는 도구들을 활용할 것을 건의한다.

    (8) 네트워크 재 접속 및 운영 시작

    만약 작업을 시작하기 전에 네트워크를 끊었다면 다시 연결을 시도한다.

    (9) CERTCC-KR 사고보고 양식 작성 및 연락

    CERTCC-KR 에 침해사고를 보고하려면, 홈페이지에서 보고양식을 작성하여 Email이나 팩스등을 이용하여 보낸다. 이때 이 양식에 해당하는 것만 그리고 할 수 있는 것만 우선 작성하여 보낸다.

    http://www.certcc.or.kr/Service/Incrpt.html
     

    -- 한국정보보호센터 CERTCC-KR 침해사고 지원 안내 --

    전 화 : 02-3488-4119 삐 삐 : 015-993-4571

    핸드폰 : 011-732-7821 팩 스 : 3488-4129

    Email : cert@certcc.or.kr

    침해사고 접수 방법은 http://www.certcc.or.kr/service.html을 참고 바람

    =========================================================

  • sendmail을 telnet상에서 곧바로 테스트 할 때 사용

    > telnet localhost 25
    > ehlo kies.co.kr
    > mail from: leejy@kies.co.kr
    > rcpt to: leejy@kies.co.kr
    > data
    > Send Test Message...
    > quit

    'Database > Server' 카테고리의 다른 글

    TOP  (0) 2010.02.03
    해킹 피해시스템 분석절차  (0) 2009.09.28
    [Linux] Find … 명령어 활용  (0) 2009.07.23
    [JEUS] 제우스(JEUS), WebtoB 관리를 위한 주요 명령어 및 alias 요약  (0) 2009.07.23
    [JEUS] alias 설정  (0) 2009.07.23

    + Recent posts