'전체 글'에 해당되는 글 1421건

  1. 2006.04.05 침입자 체크하는 방법
  2. 2006.04.05 센드메일 설정 -SMTP AUTH-

반응형
이 문서는 컴퓨터 시스템이 외부인에 의해 침입을 당했다고 의심이 가는
경우이를 알아내어 대처하는 방법에 대해 다루고자 한다. 시스템 관리자
는 이 문서에서 다루고 있는 내용을 참고하여 여러 가지 침입을 효과적으
로 대처하는데 유용하게 사용하기 바란다.

주의: 먼저 흔적을 찾는 과정 중에 취해지는 모든 행위는 해당 기관의 정
책이나 처리과정에 부합되어야 한다.

낯선 곳에서 연결을 한 경우나 특이한 작업을 한 경우에 해당하는 모든 로
그 파일을 조사한다. 예를 들면, last 로그, 프로세스 기록, syslog에 의
해 생성된 모든 로그 파일 및 보안 로그 등을 조사한다.

만일 방화벽이나 라우터 등을 통해 이러한 로그가 침입을 당한 시스템이
아닌 다른 시스템에 저장되는 경우, 이들 로그들도 확인해야 한다. 최근에
는 많은 침입자들이 자신들에 대한 흔적을 없애기 위해 이러한 로그 파일
을 편집하는 경우가 많기 때문에 이러한 로그 파일 기록은 append-only 미
디어(편집이 불가능하고 오로지 로그 데이터의 추가만이 가능한 저장매체
를 말함)에 하는 것이 좋다.

침입을 당한 시스템에 있는 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

침입을 당한 시스템의 바이너리 파일이 변경되었는지 여부를 확인한다. 침
입자들은 침입 시에 사용할 수 있는 각종 유닉스 프로그램들을 변경하여
이용하는 경우가 많은데, 이러한 프로그램들에는 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를 이용한 전자서명 등을 해 놓
으면, 추후에 변경여부를 확인하기 쉽다.

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

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

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

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

네트워크 configuration 파일에 불법적인 내용이 들어가 있지 않은지 확인
한다.
특히, ‘+’ 기호가 추가되어 있지 않은지 확인하고, /etc/hosts.equiv,
/etc/hosts.lpd 와 모든 .rhosts 파일(특히, root, uucp, ftp 등의 시스
템 계정이 사용하는 디렉토리에 있는 .rhosts 파일)에 로컬 호스트가 아
닌 이름이 추가되어 있지 않은지 조사한다.

이러한 파일들은 누구나 쓸 수 있는 권한(world-writable)으로 설정되어
있어서는 안 된다. 아직 침입을 당하지 않았더라도 이러한 파일들이 운영
자의 실수나 오류에 의해 있을 수 있으므로 사전에 확인하여 침입에 이용
되지 않도록 한다.

시스템에 침입자나 사용할 만한 프로그램이나 히든 파일(hidden files) 등
이 있는지 확인한다. 예를 들면, 암호를 자동으로 깨주는 크랙 프로그램이
나 다른 시스템의 패스워드 파일 등이 이러한 대한 파일이 될 수 있다. 이
러한 히든 파일은 파일명이 ‘…’, ‘.. ‘ 혹은 ‘..^G’ 등으로 보통
의 경우에는 보이지 않는 파일명을 가지고 있다. 유닉스의 find(1) 명령
을 사용하여 이러한 파일들을 아래와 같이 입력하면 찾을 수 있다.

find / -name “.. ” -print -xdev find / -name “.*” -print -xdev | cat -v

이밖에도 얼른 보아서는 보통의 파일처럼 보이는 ‘.mail’ 과 같은 파일
도 침입자가 침입도구로 사용하는 파일일 수 있다.

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

반응형

출처: 김주홍블로그
작성자 : 김주홍

1. sendmail 설정 (리눅스 레드햇9.0 기준)
- 먼저 rpm -qa |grep sendmail 명령으로 sendmail이 설치되어 있는지 확인, 없으면 시디로 팩키지를 설치해준다
- 설치할 팩키지 -> sendmail-cf-8.12.8-4,sendmail-doc-8.12.8-4,sendmail-8.12.8-4,sendmail-devel-8.12.8-4
- Pop3를 사용할려면 imap 팩키지가 설치되어 있어야 함.  

2. 설정파일 위치
- /etc/mail/sendmail.cf : 센드메일의 가장 기본적인 설치파일 ->
267라인에 addr 제거
- /etc/mail/access : 릴레이 허용파일,기본적으로 로컬만 허용, 허용할 IP,domain추가 한다.
 *엑세스 파일 교체되면 makemap hash /etc/mail/access < /etc/mail/access 실행
- /etc/mail/local-host-names : 메일을 수신할 호스트이름 결정

3. sendmail 데몬 시작 / 확인
- service sendmail start 또는 init/sendmail start
- [root@test mail]# ps -aux | grep sendmail
 root   1435 0.0 0.9 5912 2528 ?   S  Apr09 0:00 [sendmail]
 smmsp  1444 0.0 0.8 5712 2256 ?   S  Apr09 0:00 [sendmail]
 root   3958 0.0 0.2 4664 652 pts/0  S  14:16 0:00 grep sendmail
- 마지막으로 telnet localhost 25 로 접속해서 아래와 같은 화면이 나오면 정상적으로 SMTP데몬이 돌고 있다.
 [root@test mail]# telnet localhost 25
 Trying 127.0.0.1...
 Connected to localhost.
 Escape character is '^]'.
 220 localhost.localdomain ESMTP Sendmail 8.12.8/8.12.8; Mon, 12 Apr 2004 14:18:30 +0900
 help
 214-2.0.0 This is sendmail version 8.12.8
 214-2.0.0 Topics:
 214-2.0.0   HELO  EHLO  MAIL  RCPT  DATA
 214-2.0.0   RSET  NOOP  QUIT  HELP  VRFY
 214-2.0.0   EXPN  VERB  ETRN  DSN  AUTH
 214-2.0.0   STARTTLS
 214-2.0.0 For more info use "HELP ".
 214-2.0.0 To report bugs in the implementation send email to
 214-2.0.0   sendmail-bugs@sendmail.org.
 214-2.0.0 For local information send email to Postmaster at your site.
 214 2.0.0 End of HELP info

[SMTP-AUTH 인증기능 추가]
 * SASL 라이브러리가 설치되어 있어야 함
  cyrus-sasl-2.1.10-4
  cyrus-sasl-plain-2.1.10-4
  cyrus-sasl-devel-2.1.10-4
  cyrus-sasl-md5-2.1.10-4
 ==================================================================
 dnl # These are the allowed auth mechanisms. To allow relaying for a user
 dnl # that uses one of them, you must set TRUST_AUTH_MECH.
 define(`confAUTH_MECHANISMS', `LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl
 dnl # These are the SMTP auth mechanisms which, if used,
 dnl # Sendmail will allow relaying for.
 TRUST_AUTH_MECH(`LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl
 =================================================================

 위의 내용을 sendmail.mc에 추가하고 sendmail.cf(516라인확인)를 다시 생성한다.
 m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
 /usr/lib/sasl아래 Sendmail.cf 또는 Sendmail.conf에 pwcheck_method:shadow추가하고 sendmail를 다시 시작한다.

 * 인증확인
 [root@test etc]# telnet localhost 25
 Trying 127.0.0.1...
 Connected to localhost.
 Escape character is '^]'.
 220 localhost.localdomain ESMTP Sendmail 8.12.8/8.12.8; Mon, 12 Apr 2004 15:30:59 +0900
 EHLO localhost
 250-localhost.localdomain Hello test [127.0.0.1], pleased to meet you
 250-ENHANCEDSTATUSCODES
 250-PIPELINING
 250-8BITMIME
 250-SIZE
 250-DSN
 250-ETRN
 250-AUTH LOGIN PLAIN -> 인증기능이 활성화되어 있음
 250-DELIVERBY
 250 HELP

 * 현재 인증되는 서버
 516 O AuthMechanisms=LOGIN PLAIN DIGEST-MD5 CRAM-MD5
 /usr/lib/sasl아래 Sendmail.cf에 pwcheck_method:shadow

,