목차
AIX 보안가이드라인
1. 계정관리
Default 계정 삭제(중요도 : 상)
시스템 Default 계정 및 사용하지 않는 계정의 삭제
기준
가. Default 계정(lp,uucp,nuucp) 삭제 나. 퇴직, 전배, 휴직, 계약 해지자 계정 삭제 ※ 가, 나 항목 모두 적용 해야 합니다.
설정 방법
# userdel lp # userdel uucp # userdel nuucp
상세설명
시스템에서 이용하지 않는 Default 계정 및 의심스러운 특이한 계정의 존재 유무를 확인하여 삭제해야 하며, 대부분의 시스템에서 사용하지 않는 것이 확실한 아래의 계정들과 의심스러운 계정은 삭제해야 합니다. (단, 서버 테스트 및 작업으로 계정생성이 불가피한 경우 작업 후 이를 삭제하는 것을 원칙으로 합니다.)
일반적으로 로그인이 필요치 않은 시스템 계정들은 “로그인이 불필요한 계정 shell 제한” 항목을 참조하여 로그인을 금지해야 하며, OS나 Package 설치 시 Default로 생성되는 계정은 대부분 Default 패스워드를 사용하는 경우가 많으므로 패스워드 추측공격에 악용될 수 있습니다.
- 퇴직, 전배, 휴직, 계약해지자 계정 존재 시 삭제
- lp, uucp, nuucp, 의심스러운 특이한 계정(예. guest, test) 및 미사용 계정 삭제
- 로그인 쉘을 /bin/false로 수정하는 것은 보안상 문제가 발생할 수 있으므로 삭제 권고
일반계정 root권한 관리(중요도 : 상)
Root 권한을 가지고 있는 일반 계정 점검
기준
가. root 계정 및 그룹을 제외한 일반 계정의 UID 가 ‘100’ 이상으로 설정
설정 방법
# vi /etc/passwd 파일 실행하여 UID가 0인 일반계정의 UID를 100 이상으로 수정
예) wiki 계정의 UID를 2002로 변경하는 경우
# usermod –u 2002 wiki
상세설명
시스템 관리자는 root 계정을 포함한 모든 계정의 디렉터리 및 파일을 정기적으로 조사하여 삭제해야 하며, 주기적으로 불필요한 사용자 계정을 조사하여 제거하는 것이 보안상 필요합니다.
- root권한을 가진 다른 일반 계정이 있는지 점검
- root와 UID가 중복 되어있으면 관리자 권한을 다른 사용자가 사용할 수 있으며, 사용자 간 UID
중복 시에 사용자 감사 추적이 어렵고, 사용자 권한이 중복
- root 계정을 제외한 일반 계정의 UID가 '0'이면 삭제 또는 적절한 UID 를 부여(100이상의 번호로 변경)하고, root 그룹에 속한 일반 계정은 적절한 권한의 그룹에 등록
- 시스템 계정(daemon, bin, adm, uucp, nuucp, lp 등)은 제외
<일반계정 및 일반계정의 디렉터리 구분 - “/etc/passwd “파일내용에서 구분>
아래의 내용은 /etc/passwd 파일의 샘플이며, 필드구분은 “:”이고 세번째 필드가 “0”이면 수퍼유저 권한입니다. “0”이외의 계정은 일반계정으로 볼 수 있으며 여섯번째 필드가 해당 계정의 홈 디렉터리 임
root:!:0:0::/:/bin/ksh daemon:!:1:1::/etc: bin:!:2:2::/bin: sys:!:3:3::/usr/sys: adm:!:4:4::/var/adm: uucp:!:5:5::/usr/lib/uucp: lpd:!:9:4294967294::/:
<passwd 파일 필드>
loginID:x:UID:GID:comment:home_directory:login_shell
/etc/passwd 파일 권한 설정(중요도 : 상)
시스템 사용자 계정정보가 있는 /etc/passwd 파일의 권한을 점검
기준
가. /etc/passwd 파일의 권한을 root 소유의 ‘644’ 이하 설정
설정 방법
# chmod 644 /etc/passwd # chown root /etc/passwd
상세설명
/etc/passwd 파일에는 시스템 사용자의 인증에 필요한 계정정보가 존재하며, 파일의 퍼미션 설정 및 관리상의 실수나 오류 등의 문제점으로 인해 발생할 수 있는 침해사고(일반 사용자 권한 및 /root 권한 획득)의 위험성을 진단합니다.
/etc/group 파일 권한 설정(중요도 : 상)
시스템 사용자 그룹정보가 있는 /etc/group 파일의 권한을 점검
기준
가. /etc/group 파일의 권한을 root(또는 bin) 소유의 ‘644’ 이하 설정
설정 방법
# chmod 644 /etc/group # chown root /etc/group
상세설명
일반사용자가 group 파일에 접근하여 변조하게 되면 인가되지 않은 사용자가 root 그룹으로 등록되어 인가되지 않은 사용자의 root 권한 획득이 가능합니다.
group 파일을 일반 사용자들이 수정할 수 없도록 제한하고 있는지 점검하여 타 사용자의 쓰기 권한을 제한하여야 합니다.
/etc/shadow 파일 권한 설정(중요도 : 상)
시스템 사용자 계정의 패스워드가 저장되는 /etc/shadow 파일의 접근권한 제한
기준
가. /etc/shadow 파일의 권한을 root 소유의 “400”으로 설정
설정 방법
# chmod 400 /etc/shadow # chown root /etc/shadow
상세설명
파일의 퍼미션 설정 및 관리상의 실수나 오류 등의 문제점으로 인해 침해사고가 발생할 수 있기 때문에, 패스워드가 암호화되어 저장되는 shadow 파일의 경우 root 계정만이 Read 가능하도록 설정되어야 하며, 특별한 관리가 요구됩니다.
- /etc/security/passwd 파일의 권한을 root 소유의 “400”으로 설정
<패스워드 shadow화 구분 - ”/etc/security/passwd” 파일내용에서 구분>
아래의 내용은 /etc/security/passwd 파일의 샘플입니다.
root: password = Mqdw08CvS5DvU lastupdate = 1293494187 flags = daemon: password = * bin: password = *
패스워드 사용규칙 적용(중요도 : 상)
사용자 계정(root 및 일반 계정 모두)의 Password 설정 시 취약한 패스워드 사용 금지
기준
가. 패스워드 사용규칙 설정
- Control-SA, RedOwl 솔루션 구동
- 솔루션 미 구동 시 설정
패스워드 최소길이, 최대 사용기간, 최소 사용기간, 계정 잠금 임계 값 설정
# vi /etc/login.defs를 실행하여 아래와 같은 설정 적용 (단위: 일)
PASS_MIN_LEN 8 PASS_MAX_DAYS 70 PASS_MIN_DAYS 7
나. 패스워드 설정
- 문자/숫자/특수문자의 2종류 조합으로 8자리 이상, 3종류로 10자리 이상
※ 가, 나 항목 모두 적용 해야 함
설정 방법
[보안 적용 1] 아이덴티티 관리(Identity Management) 솔루션 구동 시
- Control-SA 프로그램 가동 시에는 패스워드 규칙 적용됨
(현재 적용 현황은 문자, 숫자, 특수문자 1자 이상 사용하도록 되어 있음)
Control-SA 프로세스 확인
$ ps -ef|grep p_ctsc /bmc/ctsa/control-sa/exe/HP-UX-11/p_ctsce /bmc/ctsa/control-sa/exe/HP-UX-11/./p_ctscs /bmc/ctsa/control-sa/exe/ HP-UX-11/./p_ctscd
- 레드아울(RedOwl) 프로그램 가동 시에는 패스워드 규칙 적용됨
RedOwl 프로세스 확인
$ ps -ef|grep cmmd ngmseos 417792 1 0 Jan 28 - 0:07 /usr/src/cmm/system/cmmd ngmseos 847942 417792 0 Jan 28 - 0:02 /usr/src/cmm/system/cmmd
[보안 적용 2] 아이덴티티 관리(Identity Management) 솔루션 미구동 시
1. 패스워드 최소길이
패스워드 추측공격을 피하기 위하여 패스워드 최소길이가 설정되어 있는지 점검함
패스워드 최소길이가 설정되어 있지 않거나 짧게 설정되어 있을 경우 취약한 패스워드를 사용함으로 인해 악의적인 사용자가 패스워드를 쉽게 유추 할 수 있음
2. 패스워드 최대 사용기간
패스워드가 임의의 경로를 통해 유출되었을 때, 임의로 접속한 사용자가 언제든 다시 접속할 수 있는 환경을 방지하기 위해 패스워드 날짜 제한을 점검함
3. 패스워드 최소 사용기간
패스워드가 임의의 경로를 통해 유출되었을 때, 임의로 접속한 사용자가 언제든 다시 접속할 수 있는 환경을 방지하기 위해 패스워드 날짜 제한을 점검함
4. 이전 패스워드 기억
이전에 사용하였던 패스워드를 기억하여 패스워드 변경 시 기존에 사용하였던 패스워드 재사용 금지
- 패스워드 길이는 8자 이상 설정하는 것을 권고
- 패스워드 최대 사용 기간을 70일(10주) 이하로 설정할 것을 권고
- 패스워드 최소 사용 기간을 7일(1주) 이상으로 설정할 것을 권고
- 기존의 패스워드를 최소 12개 이상으로 설정할 것을 권고
5. 계정 잠금 임계 값
계정 잠금 임계 값이 설정되어 있지 않다면 자동화된 도구에 의한 무차별 공격(Brute-Force Attack)으로 인해 공격자는 별다른 노력 없이 사용자 패스워드를 획득할 수 있는 가능성이 존재함
- 로그인 실패는 10회 까지만 허용하며, 10회 실패 시 계정 잠금
- 다시 로그인이 가능한 시간은 60분 후에 가능하도록 설정
1) # vi /etc/security/user 파일 실행하여 아래와 같이 설정 (단위: 주)
minlen = 8 maxage = 10 minage = 1 histsize = 12
2) 계정 잠금 임계 값 설정
# vi /etc/security/user 파일 실행하여 아래와 같이 설정 (단위: 시도횟수)
Loginretries = 10 (root 계정의 경우 문제가 발생할 수 있으므로 root 계정은 0 값으로 설정)
# vi /etc/security/login.cfg 파일 실행하여 아래와 같이 설정(단위: 분)
Loginreenable = 60
※ /etc/security/user 파일의 default 항목에 설정되어 있을 시 양호로 판단
단, 계정 별로 별도의 설정을 부여할 시 default 항목과 지정한 계정의 설정이 위의 4가지 기준에 부합해야 함
예) default : minlen = 8 maxage = 10 minage = 1 Histsize = 12 sac : minlen = 8 maxage = 10 minage = 1 Histsize = 12
[참고] #vi /etc/security/user 기본 설정은 아래와 같음
default: minage - 패스워드를 바꾸기 위해서 경과되어야 하는 최소한의 기간 maxage - 패스워드를 바꾸지 않고 경과할 수 있는 최소한의 기간 maxexpired - Maxage를 지날 수 있는 최대한의 기간 Minalpha - 새로운 패스워드에 포함되어야 하는 최소한의 알파벳 수 Minother - 새로운 패스워드에 포함되어야 하는 최소한의 알파벳이 아닌 문자의 수 Minlen - 새로운 패스워드에 포함되어야 하는 최소한의 문자 수(길이) maxrepeats - 새로운 패스워드에 한 문자가 반복될 수 있는 최대의 수 Mindiff - 사용하던 패스워드와 새로운 패스워드 사이에 최소한의 다른 문자 수 histexpire - 패스워드를 다시 사용할 수 없는 최소한의 기간 (단위 : 주) Histsize - 다시 사용할 수 없는 이전 패스워드의 수 dictionlist - 패스워드를 바꿀 때, 검사할 dictionary files(사전파일들)의 list pwdchecks - 패스워드를 바꿀 때, 지켜야 할 제한사항들의 list
상세설명
사용자 계정(root 및 일반계정 모두)의 암호 설정 시, 일반적으로 유추하기 쉬운 암호를 설정하는 경우 비 인가된 사용자는 일반계정 또는 root 권한 획득을 통하여 시스템에 접근할 수 있습니다.
아래 기준과 상이하게 패스워드가 설정되어 있는 경우 암호정책에 따라 패스워드 변경합니다.
<패스워드 설정 기준>
1) 패스워드는 아래의 4가지 문자 종류 중 2종류 이상을 조합하여 최소 10자리 이상 또는 3종류 이상을 조합하여 최소 8자리 이상의 길이로 구성
(1) 영문 대문자 (26개), 영문 소문자 (26개), 숫자 (10개), 특수문자 (32개)
<패스워드는 비 인가자에 의한 추측이 어렵도록 다음의 사항을 반영하여 설계하여야 함>
- Null 패스워드 사용 금지
- 문자 또는 숫자만으로 구성 금지
- 사용자 ID와 동일한 패스워드 금지
- 연속적인 문자/숫자(예. 1111, 1234, abcd) 사용 금지
- 주기성 패스워드 재사용 금지
- 전화번호, 생일, 계정 명, hostname 같이 추측하기 쉬운 패스워드 사용 금지
* “John The Ripper” Tool을 이용하여 취약한 패스워드 점검
로그인이 불필요한 계정 shell 제한
시스템 계정 중 로그인이 불필요한 계정에 대해 shell 제한 점검
기준
가. 로그인이 불필요한 계정 shell 제한
설정 방법
예) daemon 계정이 로그인 하지 못하도록 설정
# vi /etc/passwd (수정 전) daemon:x:1:1::/:/sbin/ksh (수정 후) daemon:x:1:1::/:/bin/false
상세설명
접근이 거의 필요하지 않은 사용자들에게는 쉘을 제한 함으로써 인가 받지 않은 사용자가 시스템을 이용하는 것을 방지해야 합니다.
- 시스템 계정 중 로그인이 불필요한 계정에 대해 ‘/bin/sh’ 등의 실행 쉘을 제한해야 하며 ‘nologin’ (/bin/false) Shell을 부여하여 로그인을 금지합니다.
<실행 쉘이 불필요한 계정 대상 - 로그인이 필요하지 않는 계정에 “nologin“>
[daemon, bin, sys, adm, listen, nobody, nobody4, noaccess, diag, listen, operator, games, gopher 등 일반적인 시스템 계정 명을 가진 모든 계정들]
아래의 내용은 /etc/passwd 파일의 샘플이며, 필드구분은 “:”
마지막 필드가 “nologin“(또는 /bin/false) 이면 계정에 대해 기능이 없는 쉘이 적용된 상태입니다
root:x:0:1:Super-User:/:/sbin/sh daemon:x:1:1::/etc/false: bin:x:2:2:: /etc/false: sys:x:3:3::/etc/false: adm:x:4:4:Admin:/etc/false: lp:x:71:8:Line Printer Admin:/etc/false: smtp:x:0:0:Mail Daemon User:/: uucp:x:5:5:uucp Admin:/etc/false:
<쉘 로긴이 필요 없는 경우 계정설정>
# useradd 계정 -c "계정 finger정보" -d /home/{계정} -m -s /bin/false
SU(Select User) 사용 제한(중요도 : 상)
권한 없는 사용자의 su 명령어 제한
기준
가. su 명령어 사용 제한을 위한 wheel group 생성 및 사용자 설정
설정 방법
<방법 1> 1) vi /etc/security/user 파일에서 su 명령어를 사용할 그룹을 지정
# vi /etc/security/user 예) default : admin = false login = true sugroups = wheel (su 명령어를 사용할 그룹 지정)
<방법 2> 1) group 생성(생성할 그룹 요청, 일반적으로 wheel 사용)
# mkgroup wheel
2) /usr/bin/su 파일의 그룹을 wheel 그룹으로 변경
# chgrp wheel /usr/bin/su
3) /usr/bin/su 파일의 권한변경(4750)
# chmod 4750 /usr/bin/su
4) su 명령어 사용이 필요한 계정을 wheel 그룹에 추가
# chgroup users=[계정 명] wheel
상세설명
관리자 권한이 없는 일반 사용자가 su 명령 사용 후 Password Guessing을 통해 root 권한을 획득할 수 있습니다.
따라서, 일반 사용자의 su 명령 사용을 제한해야 합니다. (wheel 그룹만 su 명령 사용을 가능하게 설정합니다.)
2. 파일 시스템
사용자 UMASK(User MASK)설정(중요도 : 하)
시스템 내 사용자가 생성하는 파일 및 디렉터리 퍼미션 적용을 위한 UMASK 설정
기준
가. /etc/profile 또는 /etc/bashrc 사용자 UMASK 022 설정
설정 방법
# vi /etc/profile umask 022 (행 추가)
or
# vi /etc/security/user default : umask=022 (행 추가)
상세설명
시스템 내에서 사용자가 파일 또는 디렉터리를 생성할 때 적용 받는 퍼미션은 umask 값에 따라 달라지며, 낮은 umask 값으로 인해 관리자만 접근해야 하는 파일 및 디렉터리에 비 인가자가 접근할 수 있습니다.
현재의 유저에게 설정된 umask 값을 조회하려면 명령 프롬프트에서 “umask”를 수행합니다.
umask 값이 “022”이기를 권장하며, umask값 “022”는 “rw-r–r–“ 접근권한으로 파일이 생성합니다.
계정의 Start Profile(/etc/profile, /etc/default/login, .cshrc .kshrc .bashrc .login .profile등)에 명령을 추가하면, 유저가 로그인 후에도 변경된 umask 값을 적용받습니다.
SUID(Set User-ID), SGID(Set Group-ID) 설정(중요도 : 하)
불필요한 root 소유의 SUID, SGID 설정된 파일 제거
기준
가. SUID(Set User-ID), SGID(Set Group-ID) 제거
※ 단, Application에서 생성한 파일이나, 운영상 필요에 의하여 생성된 파일은 예외처리
설정 방법
# chmod –s [파일명]
LINUX | ||
---|---|---|
/sbin/dump | /usr/bin/lpq-lpd | /usr/bin/newgrp |
/sbin/restore | /usr/bin/lpr | /usr/sbin/lpc |
/sbin/unix_chkpwd | /usr/bin/lpr-lpd | /usr/sbin/lpc-lpd |
/usr/bin/at | /usr/bin/lprm | /usr/sbin/traceroute |
/usr/bin/lpq | /usr/bin/lprm-lpd |
상세설명
SUID(Set User-ID)와 SGID(Set Group-ID)가 설정된 파일의 경우, 특히 root 소유의 파일인 경우 BufferOverflow 공격과 Local 공격에 많이 사용되는 매우 보안상 관리가 필요한 파일들로 이들 파일들의 주기적인 관리가 필요합니다.
보안에 취약한 root 소유의 setuid 파일들의 경우에는 꼭 필요한 파일을 제외하고는 그 외 setuid, setgid 파일에 대하여 setuid, setgid 속성을 제거해주고, 잘못 설정되어 보안 위협이 되고 있는지 주기적인 진단 및 관리가 요구됩니다.
Application에서 생성한 파일이나, 사용자가 임의로 생성한 파일 등 특이한 파일의 발견 시 Setuid를 제거 해야 합니다.
Setuid 제거할 때는 OS 및 응용프로그램 등 서비스의 정상유무를 파악하면서 신중하게 진행해야 합니다.
제거 방법의 예
# chmod -s file-name
주기적인 감사 방법의 예 :
# find / -user root -type f \( -perm -4000 -o -perm -2000 \) -exec ls -lg {} \;
반드시 사용이 필요한 Setuid 파일의 경우에는 특정 그룹에서만 사용하도록 제한합니다.
특정그룹에 사용을 제한하는 예 :
일반 사용자의 Setuid 사용을 제한 (임의의 그룹만 가능)
# /usr/bin/chgrp <Group_Name> <Setuid_File_Name> # /usr/bin/chmod 4750 <Setuid_File_Name>
만약 Setuid 사용을 허락하고 싶은 계정인 wiki를 임의의 그룹에 넣고 싶다면 아래와 같이 설정합니다.
# usermod –G100 wiki G : a list of Supplementary group 설정 변경 100 : the numerical value of the <Group>’s ID
/etc/inetd.conf 파일 권한 설정(중요도 : 상)
데몬 설정파일 (/etc/inetd.conf) root 소유의 타 사용자 쓰기 권한 제거 설정
기준
가. /etc/inetd.conf 파일 권한이 root 소유의 타 사용자 쓰기 제한
설정 방법
# chown root /etc/inetd.conf # chmod o-w /etc/inetd.conf
※ 해당 파일이 링크되어 있다면 링크된 원본 파일 소유권을 변경
상세설명
인터넷 수퍼데몬 서비스 설정 파일인 inetd.conf 파일에 대한 접근권한을 제한하고 있는지 점검합니다.
인터넷 수퍼데몬은 외부 네트워크의 요청이 있을 때 /etc/inetd.conf에 등록되어 있는 내부 프로그램인 인터넷 서비스들의 데몬을 실행시켜주는 역할을 하며, Inetd.conf의 접근권한 설정이 잘못 설정되어 있을 경우 비 인가된 공격자가 악의적인 프로그램을 이 파일에 등록하여 root 계정의 권한으로 실행 가능합니다.
history 파일 권한 설정(중요도 : 중)
시스템에 로그인한 모든 사용자들의 명령어를 저장하는 스크립트 파일 권한 관리
기준
가. history 관련파일 권한이 600 이하
설정 방법
# chmod 600 [사용자 홈디렉터리 경로]/.history # chmod 600 [사용자 홈디렉터리 경로]/.sh_history
상세설명
히스토리 파일(.history, .sh_history 등)은 로그인하는 모든 사용자들의 명령어를 저장하는 스크립트이므로 보안상의 관리가 요구됩니다.
모든 사용자의 히스토리 파일 권한을 “600”으로, 소유자는 자신으로 설정합니다.
Crontab 파일 권한 설정 및 관리(중요도 : 상)
Crontab 관련 파일 권한 및 Crontab 내 root 권한으로 예약 설정되어 실행되는 파일의 권한 설정
기준
가. crontab 관련파일의 타사용자 쓰기 권한 제거 나. crontab 파일 권한 설정
- 파일권한 744, 소유자 root 설정
- 예약 설정된 파일 절대 경로 설정
- crontab 설정된 파일이 모두 존재
※ 가, 나 항목 모두 적용 해야 함
b. 적용방법 1) crontab 관련파일의 타사용자 쓰기 권한 제거
# chmod o-w /var/spool/cron/crontabs/*
2) 각 파일의 권한 확인 후 변경
# ls –al [file] # chmod 744 [file] # ls -al /backup/OS_backup.sh -rwxr--r-- 1 root sys 84 Aug 10 05:01 /backup/OS_backup.sh # ls -al /opt/sfm/vacuum -rwxr--r-- 1 root sys 67 Dec 18 14:47 /opt/sfm/vacuum
3) UID로 나오는 파일의 소유자 변경
# ls -al [file] -rw-r--r-- 1 102 other 0 Jun 5 11:00 /tmp/user3 # chown root [file] # ls -al [file] -rw-r--r-- 1 root other 0 Jun 5 11:00 /tmp/user3
※ Crontab내에 예약 설정되어 있는 파일이 실제 경로에 존재하지 않을 경우 Crontab list에서 삭제
상세설명
일반 사용자가 cron 관련 파일에 악의적으로 접근 권한을 제한하고 있는지 점검합니다.
Cron은 작업 스케줄링 기능을 제공하는 프로그램이며, 특정시간에 특정작업을 자동으로 수행하도록 하는 프로그램이므로 Cron 관련 파일의 접근권한 설정이 잘못되어 있을 경우 비 인가자가 다양한 방법으로 사용자 환경을 변경하여 침해사고를 일으킬 수 있습니다.
Crontab 내에 예약 설정 되어 있는 file들 중에 root 권한으로 Crontab에서 실행토록 설정되어 있는 실행 파일 권한의 검토가 요구됩니다. (담당자 검토 요구)
root 권한이 아닌 일반 user 권한으로 설정 된 경우 악의적인 공격자에 의해 예약 수행이 가능하며, 상대 PATH로 되어 있는 경우 해당 File을 수행하지 못합니다.
Crontab에 등록되었지만 실제 경로에 파일이 존재 하지 않을 경우 악의적인 공격자에 의해 등록된 파일과 동일한 파일이 생성되어 예약 수행이 가능합니다.
Crontab에 등록된 파일의 퍼미션을 확인하면서 기존에는 존재했던 유저를 삭제하면서 삭제한 유저가 만든 여러 파일들의 소유자가 그 유저의 UID로 남아있는 문제가 발생함으로 이러한 파일의 적절한 유저를 부여해야 합니다.
- root 권한으로 Crontab에서 실행토록 설정되어 있는 실행 파일들의 권한은 744, 소유자는 root로 설정
- Crontab 내에 예약 설정 되어 있는 file 등 중에 상대 PATH로 설정되어 되어 있는 경우 절대 PATH로 수정
- Crontab 내에 예약 설정 되어 있는 file의 소유자가 UID로 남아있는 경우, 적절한 소유자(root)를 부여
- Crontab 내에 예약 설정 되어 있는 file의 실제 경로에 존재 유무 확인
# crontab –ㅣ 1 15 * * /backup/OS_backup.sh 30 * * * * /opt/sfm/vacuum
/etc/profile 파일 권한 설정(중요도 : 중)
사용자 설정파일인 /etc/profile 파일에 대한 접근 권한 제한
기준
가. /etc/profile 파일의 권한이 root(또는 bin) 소유의 타 사용자 쓰기 제거
설정 방법
# chown root /etc/profile # chmod o-w /etc/profile
상세설명
/etc/profile 파일은 로그인하는 모든 사용자들의 기본 사용환경 설정을 위한 로그인 스크립트이며, /etc/profile 파일의 접근권한 설정이 잘못되어 있을 경우 비 인가자가 다양한 방법으로 사용자 환경을 변경하여 침해사고를 일으킬 수 있습니다.
/etc/hosts 파일 권한 설정(중요도 : 중)
호스트네임 등록파일인 /etc/hosts 파일에 대한 접근 권한 제한
기준
가. /etc/issue 파일의 권한을 root (또는 bin) 소유의 타사용자의 쓰기권한 제거
설정 방법
# chown root /etc/hosts # chmod o-w /etc/hosts
※ 해당 파일이 링크되어 있다면 링크된 원본 파일 소유권을 변경
상세설명
/etc/hosts 파일은 IP address와 hostname을 매핑하는데 사용되는 파일이며, 이 파일의 접근권한 설정이 잘못 설정되어 있을 경우 악의적인 시스템을 신뢰하게 됩니다.
사용자 홈 디렉터리 및 파일 관리(중요도 : 중)
사용자 홈 디렉터리 및 홈 디렉터리 내 환경변수 파일의 권한 제한
기준
가. 사용자 홈 디렉터리 및 환경변수 파일의 타사용자 쓰기권한 제거
설정 방법
# chmod o-w [홈 디렉터리] # chmod o-w [파일명] # chmod o-w [홈 디렉터리 경로] [파일명] (홈 디렉터리의 설정파일에서 권한을 제거할 경우)
상세설명
사용자 홈 디렉터리 내 파일들을 인가되지 않은 사용자가 접근하여 설정파일 및 파일을 변조하게 되면 정상적인 사용자의 서비스가 제한되므로, 해당 홈 디렉터리 계정 외 일반 사용자들이 해당 홈 디렉터리 및 환경변수 파일을 수정할 수 없도록 제한하고 있는지 점검합니다.
환경변수 파일의 접근권한 설정이 잘못되어 있을 경우 비 인가자가 다양한 방법으로 사용자 환경을 변경하여 침해사고를 일으킬 수 있습니다.
“.profile”, “.kshrc”, “.cshrc”, “.bashrc”, “.bash_profile”, “.login“, “.exrc”, “.netrc”, “.dtprofile”, “.Xdefaults” 등 환경변수 파일의 타사용자 쓰기 권한을 제거합니다.
중요 디렉터리 파일 권한 설정(중요도 : 중)
중요 디렉터리 및 디렉터리 내 파일 권한 설정
기준
가. 중요 디렉터리의 권한을 root(또는 bin) 소유의 타사용자 쓰기 권한 제거
설정 방법
# chown root [디렉터리명] # chmod o-w [디렉터리명]
상세설명
중요 디렉터리 접근권한 설정이 잘못되어 있을 경우 비 인가자가 다양한 방법으로 사용자 환경을 변경하여 침해사고를 일으킬 수 있습니다.
/sbin, /etc/, /bin, /usr/bin, /usr/sbin, /usr/lbin 디렉터리의 권한을 root(또는 bin) 소유의 타사용자 쓰기권한제거로 설정합니다.
# ls -ldb /sbin /etc/ /bin /usr/bin /usr/sbin /usr/lbin drwxrwxr-x 13 root bin 2048 Aug 25 14:53 /sbin drwxrwxr-x 16 root bin 2048 Aug 26 09:27 /etc/ drwxrwxr-x 18 root bin 1024 Jun 10 1996 /bin drwxrwxr-x 3 root bin 6144 Aug 25 14:53 /usr/bin drwxrwxr-x 7 root bin 1024 Aug 25 14:53 /usr/sbin drwxrwxr-x 5 root bin 4096 Aug 25 14:53 /usr/lbin
PATH환경변수 설정(중요도 : 중)
root 계정 환경변수 파일의 PATH 경로 설정
기준
가. root 계정 환경변수 설정 파일 내 PATH 경로 중 “.“ 없거나 맨 뒤로 설정
설정 방법
현재 디렉터리를 의미하는 “.”이 PATH 맨 앞이나 중간에 위치하면 안되며, 애플리케이션 구성상 “.” 을 사용해야 하는 경우에는 “.”을 PATH 환경변수의 마지막으로 이동
상세설명
root 계정의 PATH 환경변수에 “.”(현재 디렉터리 지칭)이 포함되어 있으면, root 계정의 인가자로 인해 비의도적으로 현재 디렉터리에 위치하고 있는 명령어가 실행될 수 있습니다.
즉, “.”이 /usr/bin이나 /bin, /sbin 등의 명령어들이 위치하고 있는 디렉터리보다 우선하여 위치하고 있을 경우, root 계정의 인가자가 어떠한 명령을 실행했을 때 비 인가자가 불법적으로 위치시킨 파일을 비의도적으로 실행하여, 예기치 않은 결과를 가져올 수 있습니다.
또한, “.” 뿐만 아니라 비 인가자가 불법적으로 생성한 디렉터리를 우선적으로 가리키게 하여 예기치 않은 결과를 가져올 수 있습니다.
root 계정의 환경변수 설정파일(.profile, .cshrc 등)과 “/etc/profile” 등에서 PATH 환경변수에 포함되어 있는 현재 디렉터리를 나타내는 “.”을 제거합니다.
※ echo $PATH 로 확인 (root 계정만 해당됨)
FTP(File Transfer Protocol)접근제어 파일 권한 설정(중요도 : 상)
FTP 접근제어 설정파일의 권한을 root 소유의 타사용자 쓰기권한 제거
기준
가. /etc/ftpusers, /etc/ftpd/ftpusers 파일의 권한을 root 소유의 타사용자 쓰기 권한 제거
설정 방법
# chown root /etc/ftpusers # chown root /etc/ftpd/ftpusers # chmod o-w /etc/ftpusers # chmod o-w /etc/ftpd/ftpusers
※ vsftp의 경우에 ftp 접근제어 파일인
vsftpd.conf 파일에서 userlist_enable=YES인경우 : vsftpd.userlist
vsftpd.conf 파일에서 userlist_enable=NO 혹은 옵션이 존재하지 않을 경우 : vsftpd.ftpusers
상세설명
FTP 접근제어 설정파일을 관리자가 아닌 일반사용자들이 접근 및 변경 가능하면 이를 통해 비 인가된 사용자를 등록하고 서버에 접속하여 불법적인 행동을 하는 등의 침해사고가 발생 가능하므로, FTP접근제어 설정 파일을 일반 사용자들이 수정할 수 없도록 제한하고 있는지 점검해야 합니다.
root 원격 접근제어 파일 권한 설정(중요도 : 중)
root 원격 접근 제어 설정 파일 root 소유의 타사용자 쓰기 권한 제거
기준
가. /etc/security/user 파일의 권한을 root 소유의 타사용자 쓰기 권한 제거
설정 방법
# chown root /etc/security/user # chmod o-w /etc/security/user
상세설명
root 접근제어 설정파일을 관리자가 아닌 일반사용자들이 접근 및 변경 가능하면 root로의 접근이 제한되는 등 서비스 장애 발생이 가능하므로, root 접근제어 설정파일을 일반 사용자들이 수정할 수 없도록 제한하고 있는지 점검해야 합니다.
NFS(Network File System)접근제어 파일 권한 설정(중요도 : 중)
NFS 접근제어 파일의 root 소유의 타사용자 쓰기 권한 제거
기준
가. /etc/export 파일의 권한 root(또는 bin) 소유의 타사용자 쓰기 권한 제거
설정 방법
# chown root /etc/exports # chmod o-w /etc/exports
상세설명
NFS(Network File System) 접근제어 설정파일을 관리자가 아닌 일반 사용자들이 접근 및 변경 가능하면 이를 통해 비 인가된 사용자를 등록하고, 파일시스템을 마운트하여 불법적인 변조를 시도할 수 있으므로, NFS접근제어 설정파일을 일반 사용자들이 수정할 수 없도록 제한하고 있는지 점검합니다.
/etc/services 파일 권한 설정(중요도 : 상)
service 파일의 root 소유의 타사용자 쓰기 권한 제거
기준
가. /etc/services 파일의 권한을 root(또는 bin) 소유의 타사용자 쓰기 권한 제거
설정 방법
# chown root w /etc/services # chmod o-w /etc/services
상세설명
Service 파일을 관리자가 아닌 일반사용자들이 접근 및 변경 가능하면 이를 통해 정상적인 서비스를 제한하거나 허용되지 않은 서비스를 실행시켜 침해사고의 위험이 있습니다.
부팅 스크립트 파일 권한 설정(중요도 : 상)
OS상에서 사용하는 부팅 스크립트 파일에 대하여 접근 권한을 제한하고 있는지 점검함.
기준
가. 부팅 스크립트 파일 권한 중 타사용자 쓰기 권한제거
설정 방법
부팅 스크립트 관여 파일 중에서 취약하게 나온 파일명을 아래의 명령어를 사용하여 조치
# chmod o-w [파일명 또는 디렉터리명]
상세설명
시스템 운영상 중요한 부팅스크립트 파일들의 접근권한은 반드시 필요한 사용자만 접근 할 수 있도록 해야 하며, 권한 중 타사용자 쓰기 권한이 부여되어 있는 경우 제거합니다.
- /etc/rc*.d/*
- /etc/inittab 등
네트워크 서비스
RPC(Remote Procedure Call)서비스 제한(중요도 : 중)
RPC(Remote Procedure Call) 서비스 제거
기준
가. 사용하지 않는 RPC 서비스의 제거
- /etc/inetd.conf에서 RPC관련 서비스 제거
※ 운영상 필요에 의하여 사용하는 RPC 서비스는 예외처리
설정 방법
<inetd 서비스 제거 방법> (1) “/etc/inetd.conf” 파일에서 해당 라인 # 처리(주석처리) 후 inetd 재 시동
# vi /etc/inetd.conf (수정전) rpc dgram udp wait root /usr/lib/netsvc/rstat/rpc.rstatd 100001 2-4 rpc.rstatd (수정후) #rpc dgram udp wait root /usr/lib/netsvc/rstat/rpc.rstatd 100001 2-4 rpc.rstatd
(2)
# ps -ef | grep inetd root 141 1 0 15:03:22 ? 0:01 /usr/sbin/inetd -s # kill -HUP 141
※ 시스템 재시작이 어려운 경우 rpc.statd 프로세스 중지
# ps –ef |grep rpc rpc 3136 1 0 Oct11 ? 00:00:01 rpc.statd # kill –HUP 3136
상세설명
RPC (Remote Procedure Call) 서비스는 분산 환경에서 서버 응용프로그램에 접근하여 특정 작업을 요구하는 Call을 말하며, 이를 사용하면 분산처리 환경의 개발이 용이하여 많이 사용되기 때문에 Unix 시스템에서 기본적으로 서비스를 제공하고 있습니다. 그러나, RPC 서비스들은 원격 Buffer Overflow 취약성들이 많이 존재하여 침해사고의 위험성이 매우 높습니다.
Buffer Overflow란 지정된 Buffer 의 크기보다 더 많은 데이터를 입력해서 프로그램이 비정상적으로 동작하도록 하는 것을 말하며, 버퍼가 오버 플로우가 되는 순간에 사용자가 원하는 임의의 명령어를 수행하여 루트 권한을 획득 하는 등 다양한 공격을 할 수 있습니다.
사용하지 않는 아래의 RPC 서비스들은 제거해야 하며, 사용되고 있는 서비스가 있다면 해당 서비스에 맞는 보안 패치를 수행해야 합니다.
rpc.cmsd | 데이터베이스 관리 프로그램으로 Open Windows의 Calendar Manager와 CDE의 Calendar 프로그램에서 사용 |
users | rusers 명령의 조회에 응답 |
rstd | 커널에서 얻은 성능 통계 리턴 |
rpc.statd | 시스템 장애시 NFS에서 파일 복구를 위해 제공하는 lockd 프로그램을 지원하는 도구 |
kcms_server | kodak color management 관련된 api 와 라이브러리들은 데스크탑의 디지털 이미지들의 컬러 퍼포먼스를 컨트롤할 수 있는 Profile를 만들거나 관리하기 위해 사용 |
rpc.ttdberverd | RPC기반의 ToolTalk 데이터베이스 서버 프로그램 |
Walld | 다른 사용자들에게 메시지를 보내기 위해 사용 |
rpc.nids | NIS server Daemon |
rpc.ypupdated | Network Information Services(NIS) 맵의 정보를 갱신 |
cachefsd | Cache 파일 시스템 daemon |
sadmind | remote로부터 시스템 관리를 하는데 사용되는 프로그램 |
srayd | 지정된 수의 패킷을 호스트에 전송하고 성능 통계를 보고하는 spra 명령에 의해 전송된 패킷을 수신 |
rpc.pcnfsd | PC-NFS (개인용 컴퓨터 네트워크 파일 시스템) 클라이언트에서의 서비스 요청을 처리 |
rexd | 원격 시스템용 프로그램을 실행 |
rpc.rquotad | 리스트 머신에 NFS mount 되고 있는 파일 시스템에 대해 유저에 요청한 로컬 머신에서의 할당 제한치를 돌려줌 |
- /etc/inetd.conf에서 RPC관련 서비스 제거
ttdb, cmsd, rstatd, sadmind, rusersd, rexd, rwalld, sprayd, kcms_server, cachefsd 등 서비스 제거
NFS(Network File System)제한(중요도 : 상)
특별한 목적으로 사용하지 않는 NFS(Network FileSystem) 서비스 제거
기준
가. 서비스 필요 시
- 인가되지 않는 시스템 mount 해제
- everyone 으로 시스템 mount 제한
나. 서비스 불필요 시
- NFS데몬(nfsd, statd, lockd) 중지
설정 방법
<NFS 서비스 필요 시>
NFS를 원격에서 mount하고 있는 시스템을 확인 후, 인가되지 않은 시스템은 Umount
mount확인 (NFS서비스가 중지되어 있는 경우 명령어 실행되지 않음)
# showmount -e hostname 명령어를 실행하여 everyone으로 시스템이 마운트 되어 있는지 확인
# showmount Umount # umount “파일시스템 이름”
NFS 서비스를 사용하면 “/etc/exports 파일에 꼭 필요한 공유 디렉터리만 나열하고, everyone으로 시스템이 마운트 되어서는 안되며, NFS 관련 보안패치를 수행해야 함
<NFS 서비스 불필요 시> NFS 데몬(nfsd, statd, lockd)을 중지
# ps -ef | grep nfsd root 3809 3721 0 08:44:40 ? 0:00 /usr/lib/nfs/nfsd # ps -ef | grep statd daemon 156 1 0 May 14 ? 0:00 /usr/lib/nfs/statd # ps –ef | grep lockd daemon 749 1 0 May 27 ? 0:00 /usr/lib/nfs/lockd # kill –9 3809 # kill –9 156 # kill -9 749
2) 시스템 재 시작시 NFS client 가 시작되지 않도록 함
# vi /etc/inittab 파일 실행 후 :rcnfs:a:wait:/etc/rc.nfs > /dev/console 2>&1 # Start NFS Daemons: 를 설정하여 데몬 삭제 # ps -ef |grep statd daemon 778396 516258 0 Jun 01 - 0:00 /usr/sbin/rpc.statd jhpark 1859662 1745028 0 16:43:09 pts/3 0:00 grep statd # ps -ef | grep lockd root 991390 516258 0 Jun 01 - 0:00 /usr/sbin/rpc.lockd jhpark 2850942 1745028 0 16:43:14 pts/3 0:00 grep lockd # ls -al /etc/rc.nfs -rwxr-xr-x 1 root system 3879 Sep 17 2002 /etc/rc.nfs
상세설명
NFS는 Network를 통해 File system을 공유하는 목적으로 설계되어 많은 용량의 서비스를 하는 사이트나 한 서버의 파일을 많은 서비스 서버들이 공유하여 사용할 때 많이 이용되는 서비스이지만 이를 이용한 침해사고 위험성이 높습니다.
특별한 목적으로 사용하지 않는다면 NFS 서비스 제거 및 NFS 서비스의 일부인 statd, lockd 서비스를 중지 해야 합니다.
NFS 서비스가 불가피하게 사용할 시에는 인가되지 않은 시스템이 NFS 시스템 마운트 하여 비 인가된 시스템 접근 및 파일변조가 발생하지 않도록 확인해야 합니다.
Automountd 서비스 제거(중요도 : 하)
특별한 목적으로 사용하지 않는 Automount 서비스 제거
기준
가. Automount 서비스 제거
설정 방법
<서비스 불필요 시> 1) 실행중인 서비스 중지
# ps -ef | grep automount root 650 1 0 3월 30 ? 0:30 /usr/lib/netsvc/fs/automount/automount -f /etc/auto_master # kill –9 650
2) 시스템 재시작시 automount 가 시작되지 않도록 함 (정확한 파일 위치는 O/S 마다 다름)
# mv /etc/rc2.d/S74autofs /etc/rc2.d/_S74autofs
c. 상세설정
Autofs는 client system의 사용자가 필요할 때에 remote system의 디렉터리 또는 file system을 mount하고 해당되는 mount point를 사용하지 않을 때는 자동으로 unmount 시키는 기능을 합니다.
Autofs 데몬인 automountd는 RPC를 통해 autofs으로부터 파일 시스템의 mount와 unmount 요청을 처리하며, automountd 데몬에는 로컬 공격자가 데몬에 RPC를 보낼 수 있는 취약점이 존재합니다.
NIS(Network Information Service)제한(중요도 : 상)
특별한 목적으로 사용하지 않는 NIS 서비스 제거
기준
가. NIS 서비스 제거 ※ 운영상 필요에 의하여 사용하는 NIS 서비스 예외처리
설정 방법
1) NIS 서비스 중지
# /usr/lib/netsvc/yp/ypstop
2) 부팅 스크립트 제거
# cd /etc/rc*/ # mv S88ypserv _S88ypserv
상세설명
NIS(Network Information Service)는 중요한 시스템 데이터베이스 파일들을 네트워크를 통하여 공유함으로써 관리자와 사용자들에게 일관성 있는 시스템 환경을 제공하며, NIS+는 보안 및 편의 기능들을 추가한 그 후의 버전입니다.
<서비스 확인방법> 아래의 프로세스를 확인하여 프로세스가 없으면 정상
프로세스 및 데몬 | 설 명 |
---|---|
Ypserv | master와 slave 서버에서 실행되며, client로부터의 ypbind 요청에 응답 |
Ypbind | 모든 NIS 시스템에서 실행되며 클라이언트와 서버를 바인딩하고 초기화 |
rpc.yppasswdd | 사용자들이 패스워드를 변경하기 위해 사용 |
ypxfrd | NIS 마스터 서버에서만 실행되며 고속으로 NIS 맵을 전송 |
rpc.ypupdated | NIS 마스터 서버에서만 실행되며 고속으로 암호화하여 NIS 맵을 전송 |
‘r’ commands 서비스 제거(중요도 : 상)
특별한 목적으로 사용하지 않는 ‘r’ commands 서비스 제거
기준
가. 서비스 필요 시
- /etc/hosts.equiv, ./$HOME/rhosts 파일의 권한을 400 root 소유로 설정
- /etc/hosts.equiv, /$HOME/.rhosts 설정에 접근가능 고정 IP 설정
나. 서비스 불필요 시
- rsh, rlogin, rexec 등 ‘r’ commands 서비스 제거
- /etc/hosts.equiv, /$HOME/.rhosts 파일의 권한을 root 소유의 000 또는 /dev/null 로 링크
※.rhosts 파일은 root 홈 디렉터리에 반드시 생성
설정 방법
<‘r’ command 서비스 필요 시>
/etc/hosts.equiv 파일과 $HOME/.rhosts 파일 내 호스트 및 계정부분에서 “+”를 반드시 제거하고, 아래 예시처럼 필요한 호스트 및 계정만 등록
예) # vi /etc/hosts.equiv ( or $HOME/.rhosts) Wiki security
“/etc/hosts.equiv”, “$HOME/.rhosts” 파일의 권한과 소유 지정
# chown root /etc/hosts.equiv # chmod 400 /etc/hosts.equiv # chown root /root/.rhosts # chmod 400 /root/.rhosts
※ Symbolic Link를 사용을 권장하며, 퍼미션 변경은 필요 없음
cron에 넣어서 주기적으로 관리하는 것과 “/etc/hosts.equiv” 파일은 아래와 같이 설정하는 것을 권장
# /bin/touch /.netrc /etc/hosts.equiv # /bin/chmod 400 /.netrc /etc/hosts.equiv
<‘r’ command 서비스 불필요 시>
서비스 제거하고 /etc/hosts.equiv, /$HOME/.rhosts 파일 권한 변경
<서비스 제거 방법의 예>
“/etc/inetd.conf” 파일에서 해당 라인 # 처리(주석처리) 후 inetd 재구동
# vi /etc/inetd.conf (수정 전) shell stream tcp nowait root /usr/sbin/in.rshd in.rshd shell stream tcp6 nowait root /usr/sbin/in.rshd in.rshd login stream tcp6 nowait root /usr/sbin/in.rlogind in.rlogind exec stream tcp nowait root /usr/sbin/in.rexecd in.rexecd exec stream tcp6 nowait root /usr/sbin/in.rexecd in.rexecd (수정 후) # shell stream tcp nowait root /usr/sbin/in.rshd in.rshd # shell stream tcp nowait root /usr/sbin/in.rshd in.rshd # shell stream tcp6 nowait root /usr/sbin/in.rshd in.rshd # login stream tcp6 nowait root /usr/sbin/in.rlogind in.rlogind # exec stream tcp nowait root /usr/sbin/in.rexecd in.rexecd # exec stream tcp6 nowait root /usr/sbin/in.rexecd in.rexecd # ps -ef | grep inetd root 141 1 0 15:03:22 ? 0:01 /usr/sbin/inetd -s # kill -HUP 141
</etc/hosts.equiv, /$HOME/.rhosts 파일 권한 변경 방법 1>
# chown root /etc/hosts.equiv # chmod 000 /etc/hosts.equiv # chown root /root/.rhosts # chmod 000 /root/.rhosts
</etc/hosts.equiv, /$HOME/.rhosts 파일 권한 변경 방법 2>
# ln –s /dev/null /etc/hosts.equiv (/etc/hosts.equiv 파일 삭제 후) # ln –s /dev/null /root/.rhosts (/root/.rhosts 파일 삭제 후)
※.rhosts 파일은 root 홈 디렉터리에 root 권한의 000 또는 /dev/null 링크로 반드시 생성
cron에 넣어서 주기적으로 관리하는 것과 “/etc/hosts.equiv”, “/etc/.rhosts” 파일은 아래와 같이 설정하는 것을 권장
# /bin/touch /root/.netrc /etc/hosts.equiv # /bin/chmod 0 /root/.netrc /etc/hosts.equiv # /bin/touch /.netrc /root/.rhosts # /bin/chmod 0 /.netrc /root/.rhosts
상세설명
rsh, rlogin, rexec 등의 ‘r’ commands는 인증 없이 관리자의 원격접속이 가능하게 하는 명령어들로, NET Backup이나 다른 용도로 사용되는 경우가 있으나 ‘r’ command의 사용은 보안상 매우 취약하여 서비스 포트가 열려있으면 침해사고의 위험성이 있습니다.
NET Backup 등 특별한 용도로 사용하지 않는다면 아래의 서비스들을 제거합니다.
shell(514) | login(513) | exec(512) |
서비스를 사용해야 하는 경우 반드시 필요한 서버에 대해서만 접근을 허용하고, 관련 설정파일의 퍼미션을 적절히 설정해야 합니다.
- /etc/inetd.conf에서 Berkeley R-Command 서비스 제거
: rsh, rlogin, rexec 서비스 제거
“/etc/hosts.equiv” 파일은 TRUSTED 시스템들을 등록하고 ‘r’ command를 이용하여 인증 없이 접근하는 것을 가능하게 하는 설정 파일이며, “.rhosts” 파일은 “/etc/hosts.equiv” 파일과 거의 동일한 기능을 수행하지만 “.rhosts” 파일은 사용자 별로 ‘r’ command 를 통해 접속 가능하도록 설정할 수 있습니다.
'r' command를 사용할 경우에는 특정 서버만 신중히 적어두고, “+”와 같이 모든 서버가 접근 가능하도록 하는 것은 보안 상 매우 위험하므로 주의하여 설정해야 합니다.
사용할 경우에는 특정 서버만 신중히 적어두고, “+”와 같이 모든 서버가 접근 가능하도록 하는 것은 매우 위험하므로 주의하여 설정해야 합니다.
사용할 경우에는 root 소유의 “400”으로 설정합니다.
- /etc/hosts.equiv 파일 내에 '+' 설정금지
: 파일 미 사용시 퍼미션 000 또는 null로 링크 : 파일 사용시 소유자 : root, 권한 : 400
+ + : 모든 호스트의 모든 계정을 신뢰 + wiki : 모든 호스트의 wiki 계정을 신뢰 Wiki + : Wiki 호스트의 모든 계정을 신뢰
불필요한 서비스 제거(중요도 : 중)
보안상 불필요한 서비스 제거
기준
가. 불필요한 서비스 중지
설정 방법
<서비스 제거 방법의 예>
- “/etc/inetd.conf” 파일에서 해당 라인 # 처리(주석처리) 후 inetd 재구동
- 부팅스크립트에서 불필요 서비스 완전 삭제
# vi /etc/inetd.conf (수정 전) echo stream tcp6 nowait root internal (수정 후) # echo stream tcp6 nowait root internal # ps -ef | grep inetd root 141 1 0 15:03:22 ? 0:01 /usr/sbin/inetd -s # kill -HUP 141
사용해야 하는 서비스가 있을 경우 단기적으로는 네트워크 장비, 방화벽에서 1차적으로 접근제어를 강화하고 장기적으로는 서비스 제공의 타당성을 재검토하여 Application을 변경(해당 서비스를 사용하는 procedure call 변경)
상세설명
서버에 불필요한 서비스 포트들이 열려 있는 경우 주요 시스템 정보 노출 및 서비스 거부(DOS)를 야기시킬 수 있습니다.
사용하지 않는 아래의 서비스는 제거합니다.
echo(7) | 클라이언트에서 보내는 메시지를 단순히 재전송 |
chargen(19) | 임의 길이의 문자열을 반환하는 서비스 |
finger(79) | 사용자 정보를 표시 |
nntp(119) | NNTP(Network News Transfer Protocol) 인터넷 상에 토론 그룹을 생성할 수 있는 표준 서비스 |
netbios_dgm(138) | NetBIOS Datagram 서비스, 호스트, 그룹, 또는 전체로 브로드케스팅 하는데 사용 |
ldap(389) | 디렉터리 서비스 엑세스를 위한 서비스 |
ntalk(518) | 서로 다른 시스템간에 채팅을 가능하게 하는 서비스 |
ldaps(636) | LDAP over SSL |
nfsd(2049) -NFS미사용시 | NFS 서버 데몬 서비스 |
discard(9) | 수신되는 임의 사용자의 데이터를 폐기하는 서비스 |
time(37) | rdate 데몬에 의해 사용되는 RFC 868 시간 서버의 TCP 버전 |
sftp(115) | ftp over SSH |
ntp(123) | ntp(Network Time Protocol)는 클라이언트와 서버의 시간을 동기화 |
netbios_ssn(139) | NetBIOS session 서비스, 네트워크 공유 등을 이용한 실제 데이터를 송수신 하는데 사용 |
printer(515) | 원격 프린터에서 스풀링 하는데 사용 |
uucp(540) | 다른 유닉스 시스템들 간에 파일을 복사하고, 다른 시스템 상에서 실행될 명령어들을 전송 |
ingreslock(1524) | Ingre 데이터 베이스 Lock 서비스 |
dtspcd(6112) | 데스크탑 하위 프로세스 제어 데몬 서비스 |
daytime(13) | daytime은 클라이언트의 질의에 응답하여 아스키 형태로 현재 시간과 날짜를 출력하는 데몬 |
tftp(69) | 파일 전송을 위한 프로토콜이며, tftp프로토콜은 OS에서는 부팅 디스켓이 없는 워크스테이션이나 네트워크 인식 프린터를 위한 설정 파일의 다운로드, 설치 프로세스의 시작을 위해 사용 |
uucp-path(117) | Uucp path 서비스 |
netbios_ns(137) | NetBIOS name 서비스, 네트워크 상에 자원을 식별하기 위해 사용 |
bftp(152) | binary File Transfer Protocol |
talk(517) | 사용자가 시스템에 원격으로 연결하여 다른 시스템에 로그인하고 있는 사용자와 대화 세션을 시작 |
pcserver(600) | ECD Integrated PC board srvr, RPC 관련공격에 사용 |
www-ldap-gw(1760) | HTTP to LDAP gateway, LDAP 이 웹서버로 데이터베이스의 정보를 전송할 때 사용 |
서비스 Banner 관리(중요도 : 중)
시스템에 일반적인 서비스(TELNET, FTP, SMTP 등)의 접근 시 출력되는 Banner 설정
기준
가. Telnet, FTP, SMTP, DNS 서비스 사용시 접속 배너에 경고문 표시 및 정보 노출 방지 설정
설정 방법
[Telnet Banner]
- 배너설정
# vi /etc/security/login.cfg
default: 라인 끝에 herald = "\n Authorized users only. \n login: " 추가 예) default: sak_enabled = false logintimes = logindisable = 0 logininterval = 0 loginreenable = 0 logindelay = 0 herald = "\n Authorized users only. \n login: "
- hostname 제거
/tmp/telnetd.msg 파일 수정
# dspcat -g /usr/lib/nls/msg/en_US/telnetd.cat > /tmp/telnetd.msg # vi /tmp/telnetd.msg 실행 telnet (%s)\r\n" 라인에서 %s 제거하여 telnet ()\n\n" 으로 수정 # gencat /tmp/telnetd.cat /tmp/telnetd.msg # cp -p /tmp/telnetd.cat /usr/lib/nls/msg/en_US/telnetd.cat
[FTP Banner]
- 배너설정 / hostname 제거
ftpd.cat 파일 수정
# dspcat -g /usr/lib/nls/msg/en_US/ftpd.cat > /tmp/ftpd.msg # vi /tmp/ftpd.msg의 9번째 줄을 아래와 같이 수정(%s 제거) (수정 전) "(%s) FTP server (%s) ready. " (수정 후) FTP Server (Unauthorized Access Prohibited.) ready # gencat /tmp/ftpd.cat /tmp/ftpd.msg # cp -p /tmp/ftpd.cat /usr/lib/nls/msg/en_US/ftpd.cat
[SMTP Banner]
# vi /etc/mail/sendmail.cf # SMTP initial login message (old $e macro) (수정 전) O SmtpGreetingMessage=$j Sendmail $v/$Z; $b (수정 후) O SmtpGreetingMessage= WARNING:Authorized use only
※ SMTP 설정에 따라 sendmail.cf 파일 위치가 상이할 수 있음
[DNS Banner]
# vi /etc/named.conf version "Contact Another Administrator!";
상세설명
시스템에 일반적인 서비스(TELNET, FTP, SMTP 등)의 접근 시 출력되는 Banner를 관리하여 서비스 버전 유출을 막습니다.
- 서버 사용자 범위를 명시하고, 모든 활동이 모니터링 되고 있음을 표시
- 각 데몬 설정 파일에서 Default Banner 삭제 또는 경고 메시지를 삽입
- 해당 프로세스의 버전과 시스템의 호스트명이 노출되지 않도록 배너 설정
session timeout 설정(중요도 : 하)
지정된 시간 동안 사용하지 않을 경우 접속된 session을 해당 서버에서 끊도록 설정
기준
가. /etc/profile 파일 내 session timeout 설정 적용
설정 방법
1) sh(born shell) 및 ksh(korn shell) 에서는 /etc/profile 또는 .profile 수정 TMOUT=300, export TMOUT 삽입 # vi /etc/profile
(수정 후) TMOUT = 300 export TMOUT
2) csh 및 tcsh 쉘을 사용하는 경우 (단위 : 분)
# vi /etc/.login 실행 후 아래 내용 적용 set autologout=5
상세설명
사용하지 않는 session에 대한 time out을 설정하지 않을 경우 기밀성 뿐만 아니라 가용성 측면에서도 문제점이 발생할 수 있습니다.
지정된 시간 동안 사용하지 않을 경우 접속된 session을 해당 서버에서 끊도록 설정하는 것이 필요합니다. (300초 경과 시 timeout)
root의 계정 telnet, ssh 접근 제한(중요도 : 상)
root 계정으로 telnet 및 ssh 직접 접근 제한 설정
기준
가. telnet 및 ssh 접속 시 root 계정으로의 접속 제한
설정 방법
[telnet]
# vi /etc/security/user 파일 아래와 같이 수정 root: rlogin = false
[ssh]
# vi /etc/ssh/sshd_config 파일 수정 후 sshd 재구동 PermitRootLogin no
※ PermitRootLogin 부분이 존재하지 않을 경우 새로 생성
상세설명
root 계정의 직접적인 접근은 보안상 위험하므로, root 계정의 직접적인 원격 접속을 제한해야 합니다. 아래 옵션을 설정하여 일반 사용자를 통해 root 계정으로 전환될 수 있도록 하는 것이 보안상 필요합니다.
방화벽 정책 적용(중요도 : 상)
외부 공격 차단을 위한 방화벽 정책 적용
기준
가. 보안진단 신청 완료 후 방화벽 오픈 가능 ※ 단, Any Open 은 보안 취약점 조치완료 후 오픈 가능
설정 방법
가. 서비스 오픈전 ISS-D 를 통해 보안진단 신청 완료
상세설명
신규 서비스 오픈시 보안진단 신청을 완료해야 방화벽 오픈이 가능하며, Any Open(사내망 Any Open, 대왜망 다수의 IP 오픈 포함)은 보안진단 후 발견된 취약점의 조치가 완료되야 방화벽 오픈이 가능합니다.
로그관리
시스템 로그 설정(중요도 : 상)
su 로그 및 syslog 의 설정과 로그 파일과 디렉터리의 권한을 점검
기준
가. su 로깅 기록
- /etc/pam.conf 설정
나. syslog.conf 로그 설정
- *.notice, *.alert, *.emerg
다. 로그 파일 및 디렉터리에 대한 권한 설정
- root(또는 bin) 소유의 타사용자 쓰기 제거
※ 가, 나, 다 모든 항목 적용해야 함
설정 방법
1. su 로그 설정
# vi /etc/pam.conf 의 설정 변경 # # AIX su configuration # su auth sufficient /usr/lib/security/pam_allowroot su auth required /usr/lib/security/pam_aix su account sufficient /usr/lib/security/pam_allowroot su account required /usr/lib/security/pam_aix su session required /usr/lib/security/pam_aix su password required /usr/lib/security/pam_aix
2. syslog 설정 1) # vi /etc/syslog.conf 파일을 점검
- .notice /var/log/syslog.log
- .alert /dev/console
- .emerg *
2) 위와 같이 /etc/syslog.conf 파일을 수정한 후에는 이것이 적용되도록 아래의 명령을 사용하여 syslogd 를 refresh
# refresh –s syslogd 혹은 kill –HUP 명령어 사용 # ps –ef | grep syslogd root 7524 6970 0 Apr 23 - 0:02 /usr/sbin/syslogd # kill –HUP 7524
3. 로그 파일 권한 설정
- 아래의 로그 파일 권한은 시스템 사용자(root, adm, bin 등) 소유자의 타사용자 쓰기권한 제거 설정
<보안 강화 적용 대상>
로그파일 | (Redhat) Linux |
---|---|
wtmp, utmp | /var/log(wtmp) /var/run(utmp) |
btmp | /var/log/ |
pacct | /var/log/ |
messages | /var/log/ |
lastlog | /var/log/ |
기타 | /var/log/secure |
# chown root [로그파일명] # chmod o-w [로그파일명]
/var/adm/message 파일이 생기는 권한을 변경하기 위해서는 /usr/lib/newsyslog 파일 수정
# vi /usr/lib/newsyslog (수정 전) chmod 644 $LOG (수정 후) chmod 640 $LOG
상세설명
1. su로그 설정
기본적으로 일반 사용자에서 Super User로 사용되는 기록을 남기기 위해서 su 사용로그를 남기도록 하는 보안 설정이 필요하며, 시스템의 가용성 및 무결성 등을 침해하는 사건이 발생할 경우 일반적으로 Super User 권한으로 사건이 진행되기 때문에 su의 로깅이 필요합니다.
su 로그를 기록하도록 syslog 설정 파일을 수정해야 하며, auth.notice에 관련된 로그를 파일로 남기고 있어야 합니다.
2. syslog 설정
기본적으로 시스템 운영 중 발생하는 Info 및 alert등에 대한 기록을 남기기 위한 “syslog.conf” 파일의 보안 설정이 되었는지 점검합니다.
syslog 데몬은 시스템의 로그를 기록하는 전용 데몬으로 원격 또는 로컬 시스템의 커널메시지 및 시스템로그를 감시하는 역할을 하며, 해당 설정이 제대로 되어 있지 않을 경우 적절한 로그가 시스템 로그파일에 남지 않아 침입자의 흔적이나 시스템 오류사항에 대해 분석 할 수 없습니다.
3. 로그파일 권한 설정
시스템의 기본 로깅 기록은 관리자 이외에 다른 일반 사용자에게 열람할 수 있는 권한을 부여할 필요가 없기 때문에 로깅 기록을 저장하는 파일의 소유자 및 읽기권한을 제한함으로써 보안을 강화하는 것이 필요합니다.
로그 저장주기(중요도 : 상)
법에 정해진 최소 로그 저장 기간 적용
기준
가. 로그 파일의 최소 저장 기간 적용 나. 로그 기록을 정기적으로 확인•감독 다. 로그 파일을 별도 저장 장치에 백업 보관 및 쓰기 권한 제한
설정 방법
로그파일의 보유기관은 사업 환경에 따라 조정할 수 있으나, ‘정보통신망 이용촉진 및 정보보호 등에 관한 법률’, ‘개인정보보호법’, ‘회사 사규’ 등에 따라 최소 아래 기간 이상을 보관해야 함
1) 사용자 접속정보 기록
사용자 로그인/로그아웃/정보변경 : 6개월 이상
2) 개인정보취급자의 개인정보처리 시스템 접속 기록
정보주체 식별정보/개인정보취급자 식별정보/접속일시/접속지 정보/ 부여된 권한 유형에 따른 수행업무 등 : 2년 이상
3) 개인정보취급자 권한 변경 기록
개인정보취급자 권한생성/변경/삭제 : 3년 이상
담당자는 로그기록을 정기적으로 확인•감독하여 사용자 접속과 관련하여 오류 및 부정행위가 발생하거나 예상되는 경우 즉각적인 보고 조치가 되도록 해야 함
로그 파일이 위•변조되지 않도록 하기 위해 별도 저장 장치에 백업보관하고, 쓰기 권한을 제한하여 보관하는 것이 바람직함. 그 외 수정이 가능하더라도 위•변조 여부를 확인할 수 있는 정보(HMAC 값 또는 전자서명값) 등을 이용한 별도의 보호조치를 취할 수 있음
상세설명
‘정보통신망 이용 촉진 및 정보 보호 등에 관한 법률’, ‘개인정보보호법’, ‘회사사규’ 등에 따라 로그 파일은 최소 6개월 이상의 기간은 보관해야 하며, 담당자는 로그 기록을 정기적으로 백업•확인•감독 하여야 합니다.
주요 응용 설정
FTP(File Transfer Protocol) 서비스 사용자 제한(중요도 : 상)
FTP 서비스 사용 여부와 사용시 사용자 UMASK, Anonymous FTP 설정
기준
가. root 및 불필요한 계정의 FTP 서비스 제한 나. FTP UMASK ‘077’ 설정 다. Anonymous FTP 제한 설정
※ 가, 나, 다 항목 모두 적용 해야 함
설정 방법
1. root 및 불필요한 계정의 FTP 사용 제한 root 및 불필요한 시스템 계정의 FTP 사용이 제한되고 있는지 점검 설정파일 : /etc/ftpusers, /etc/ftpd/ftpusers
- /etc/ftpusers 파일에 root 계정 및 시스템 계정을 추가하여 FTP 로그인을 제한
# vi /etc/ftpusers
root … (FTP 서비스 제한 방법 예) # echo root >> /etc/ftpusers 를 수행 vi로 “/etc/ftpusers”를 열어 root 삽입
- vsftp를 사용하는 경우
vsftpd.conf 파일에서 userlist_enable=YES인경우 : /etc/vsftpd/user_list 또는 /etc/vsftpd.user_list 파일에 root 계정을 넣어줌 (root 앞에 #이 있을 경우 제거)
vsftpd.conf 파일에서 userlist_enable=NO 혹은 옵션이 존재하지 않을 경우 : /etc/vsftpd/ftpusers 또는 /etc/vsftpd.ftpusers 파일에 root 계정을 넣어줌 (root 앞에 #이 있을 경우 제거)
- Proftpd를 사용하는 경우
/usr/local/proftpd/etc/proftpd.conf 파일 내 아래와 같이 설정
(proftpd.conf 파일의 경로가 상이할 수 있음)
RootLogin off
2.FTP UMASK 제한
# vi /etc/inetd.conf 를 실행하여 아래와 같이 수정 ftp stream tcp6 nowait root /usr/sbin/ftpd ftpd -u 077 (-u : umask를 설정하겠다는 옵션)
3. Anonymous FTP 제한
- /etc/passwd 파일에 ftp 계정이 삭제되어 있는지 확인하여 있을 경우에 삭제
# cat /etc/passwd | grep ftp
# cat /etc/shadow | grep ftp # userdel ftp
- vsftp를 사용하는 경우
# vi /etc/vsftpd/vsftpd.conf 파일을 아래와 같이 수정
anonymous_enable=NO # service vsftpd restart
상세설명
1. root 및 불필요한 계정의 FTP 사용 제한
FTP는 인터넷상이나 내부 네트워크로 연결될 컴퓨터들간에 파일을 교환하기 위한 프로그램으로 보통 서버에 FTP서버를 운용하여 Client로 하여금 FTP 서비스를 받을 수 있게 구성되어 있으며, FTP서버 자체의 버그 및 위험성 때문에 반드시 필요하지 않은 경우를 제외하고는 FTP서버의 사용을 제한해야 합니다.
FTP서비스를 사용할 경우는 높은 권한의 계정으로는 FTP를 사용할 수 없도록 해야 시스템 운영에 따른 위험성이 감소합니다.
2. FTP UMASK ‘077’ 설정
FTP를 이용하여 전송된 파일의 접근 권한이 적절히 설정되어 있는지 점검합니다.
FTP UMASK 설정이 잘못되어 있을 경우 FTP를 이용하여 생성된 파일을 누구나 삭제 및 수정이 가능합니다.
3. Anonymous FTP 제한
Anonymous FTP를 사용할 경우 비 인가자가 시스템에 관한 정보를 획득할 수 있으며, 디렉터리에 쓰기 권한이 설정되어 있을 경우 local exploit 을 사용하여 다양한 공격이 가능합니다.
반드시 필요한 사용자만 접속을 할 수 있도록 설정하며, 이는 시스템 가용성 면에서도 바람직합니다.
SNMP(Simple Network Management Protocol)서비스 설정(중요도 : 상)
SNMP 서비스 확인 및 Community String 보안 설정
기준
가. 서비스 필요 시
- SNMP의 Community String 이 public private 아님(SNMP BruteForce Attack 또는 SNMP Dictionary Attack이 가능하므로 반드시 8자리 이상의 자릿수와 숫자, 기호를 혼합하여 강력한 패스워드 형식으로 설정)
나. 서비스 불필요 시
- 서비스 중지 및 시스템 재시작시 서비스가 실행되지 않도록 설정
설정 방법
<SNMP 서비스 필요 시>
- /etc/snmpd.conf 파일 내용 중 community string을 어렵게 변경하는 것이 필요
'read-community public'부분의 public 을 <임의의 명>으로 변경 후 서비스 재구동 'set-community-name:'부분 사용시에는 주의 요망 (public, admin, private 등 쉬운 community name은 사용 제한)
<SNMP 불필요 시>
# ps -ef | grep snmp root 9546 6970 0 Dec 05 - 1:11 /usr/sbin/snmpd # kill –9 9546 or # /usr/sbin/snmpd stop # vi /etc/rc.tcpip을 실행하여 다음 라인을 주석처리 (수정 전) start /usr/sbin/snmpd "$src_running" (수정 후) # start /usr/sbin/snmpd "$src_running"
상세설명
SNMP 서비스는 시스템 상태를 실시간으로 파악하는 NMS를 위하여 UNIX시스템에서 기본적으로 제공하는 서비스이며, 해당 정보를 받기 위한 일종의 패스워드인 Community String이 Default 값인 public, private로 설정되어 있는 경우가 많기 때문에 이를 변경하지 않으면 이 String을 악용하여 비인가 사용자가 시스템의 주요 정보 및 설정 상황을 파악 할 수 있는 취약성이 존재합니다.
서버에서 SNMP 서비스를 사용하지 않는다면, 즉 NMS에서 해당 서버를 모니터링 하지 않는 등 이라면 SNMP서비스를 제거하는 것이 바람직합니다.
SNMP 서비스를 사용할 때는 ”/etc/snmpd.conf“ 파일에서 community string을 어렵게 변경하는 것이 필요합니다.
- SNMP 서비스를 사용하지 않거나 Community String이 public private 이 아닐 경우
SNMP BruteForce Attack 또는 SNMP Dictionary Attack이 가능하므로 반드시 8자리 이상의 자릿수와 숫자, 기호를 혼합하여 강력한 패스워드 형식으로 설정
SMTP(Send Mail Transfer Protocol) 서비스 설정(중요도 : 중)
SMTP 서비스 사용유무 및 설정
기준
가. 서비스 필요 시
- Sendmail Abuse 방지 방법 및 일반 사용자 q옵션 사용제한
- Sendmail 8.14.4 이상의 버전 사용
나. 서비스 불필요 시
- 서비스 중지 및 시스템 재시작 시 서비스가 실행되지 않도록 설정
설정 방법
<SMTP 서비스 필요 시 > (1) Sendmail Abuse 방지 방법 및 일반 사용자 q옵션 사용 제한
- Sendmail의 기본적인 서비스인 VRFY, EXPN을 다음과 같이 설정 하고 q옵션 제한
# vi /etc/mail/sendmail.cf 파일을 아래와 같이 수정
O PrivacyOptions=authwarnings, noexpn, novrfy, restricqrun
(2) 취약한 Senmail 버전 사용 제한
1) Sendmail 서비스가 실행되고 있는지 점검
# ps –ef | grep sendmail
2) Sendmail 버전 점검
# telnet localhost 25
3) Sendmail의 버전을 확인하고, ftp://ftp.sendmail.org/pub/sendmail 에서 보안 패치가 존재하는지 확인
4) O/S에 따라 설정하는 방법이 다를 수 있으므로, 홈페이지(http://www.sendmail.org/) 에서 해당 OS에 관한 정보를 확인 후 업그레이드
<SMTP 서비스 불필요 시>
# ps –ef | grep sendmail root 441 1 0 Sep19 ? 00:00:00 sendmail: accepting connections # kill -9 441
시스템 재 시작시 SMTP Server 가 시작되지 않게 하기 위해서 아래와 같이 수행
# vi /etc/rc.tcpip을 실행하여 다음 라인을 주석처리 (수정 전) start /usr/lib/sendmail "$src_running" "-bd -q${qpi}" (수정 후) # start /usr/lib/sendmail "$src_running" "-bd -q${qpi}"
상세설명
SMTP는 많은 보안취약성을 포함하고 있어 잠재적인 위험성들이 존재하며, 서버에서 SMTP를 사용하는 목적을 검토하여 사용할 필요가 없는 경우에는 서비스를 제거하는 것이 바람직합니다.
SMTP 서비스 운영 시 Sendmail Abuse를 방지하기 위해 Sendmail의 기본적인 서비스인 VRFY, EXPN을 막아야 하고 일반 사용자의 q 옵션을 사용한 Sendmail 실행을 방지하여 메일큐의 내용과 sendmail 설정을 보거나, 메일큐를 강제적으로 drop 할 수 있는 기능을 막아야 합니다.
또한, Sendmail 경우 8.13.8 이하 버전에서 대부분의 취약성이 발견되어 8.14.4 이상의 버전 사용을 권고하며 , 아래는 최근 Sendmail의 취약점들이고 취약점 버전을 사용하는 시스템은 업그레이드 필요합니다.
SSL Certificate NULL Character Spoofing(CVE-2009-4565) 취약점 : 8.14.3 이전 버전
Heap-based buffer overflow(CVE-2009-1490) 취약점 : 8.13.1.2 이전 버전
특별한 목적으로 사용하지 않는다면 SMTP 서비스를 제거합니다.
- sendmail 최신 버전 및 설정 적용 확인
① vrfy, expn 명령어 제거 및 일반 사용자의 q 옵션을 사용한 실행 방지
② sendmail 8.14.4 이상 사용
③ 메일 릴레이 기능 제한
④ Address Parser 취약점에 대한 패치 필요
※ SMTP 설정에 따라 sendmail.cf 파일 위치가 상이할 수 있음
DNS(Domain Name Service)보안 설정(중요도 : 중)
DNS 서비스 사용유무 및 설정
기준
가. 서비스 필요 시
- 특정서버로만 전송 가능하도록 IP 제한
- BIND 9.9.2-P1 이상의 최신 버전 업데이트 권고
나. 서비스 불필요 시
- 서비스 중지 및 시스템 재시작시 서비스 시작되지 않도록 설정
설정 방법
<DNS 서비스 필요 시>
<BIND8 DNS 설정(/etc/named.conf) 수정 예>
options { allow-transfer {존 파일 전송을 허용하고자 하는 IP;}; };
<BIND4.9 DNS 설정(/etc/named.boot) 수정 예>
Options xfrnets 허용하고자 하는 IP
<서비스 불필요 시>
1) 실행중인 서비스 중지
# ps -ef | grep named root 279 1 0 Sep 22 ? 1:17 /usr/sbin/in.named # kill -9 279
2) 시스템 재 시작시 DNS Server 가 시작되지 않도록 함
# vi /etc/rc.tcpip을 실행하여 아래와 같이 수정 (수정 전) start /usr/sbin/named "$src_running" (수정 후) # start /usr/sbin/named "$src_running"
상세설명
일반적으로 Zone Transfer는 Primary Name Server와 Secondary Name Server의 Zone 정보를 일관성 있게 유지하기 위해 이루어지기 때문에 Secondary Name Server로만 Zone Transfer를 할 수 있도록 하면 됩니다.
만약, 허가되지 않는 사용자에게 Zone Transfer를 허용할 경우 공격자는 전송 받은 Zone 정보를 이용하여 호스트 정보, 네트워크 구성 형태 등의 많은 정보를 파악할 수 있게 되며, DNS 서버를 디폴트로 설치할 경우 임의의 사용자가 Zone Transfer 를 할 수 있도록 설정됩니다.
시스템 초기 설치 후, Default 구성을 그대로 사용한다면 DNS서비스를 사용하지 않음에도 불구하고 DNS 서비스가 기동되어 있는 경우가 있으므로, 불필요한 DNS 서비스는 제거해야 합니다.
만약, DNS 서비스를 사용한다면, DNS설정을 통해 내부 Zone 파일을 임의의 외부 서버에서 전송 받지 못하게 하고, 아무나 쿼리 응답을 받을 수 없도록 수정해야 하고 보안을 위한 버전 패치를 해야 합니다.
BIND(Berkeley Internet Name Domain)는 BIND 9.9.2-P1 이하 버전에서는 거의 모든 취약점이 존재하고 있습니다.
ISC의 BIND 8 버전에 대한 보안 및 시스템 업데이트 지원이 2007.8.27부터 중단됨에 따라, 향후에 발생할 수 있는 보안 취약점에 대비하고, 시스템 성능 향상을 위하여 BIND 9 버전으로의 업그레이드를 권고합니다.\\(https://www.isc.org/downloads/all)
- BIND는 거의 모든 버전이 취약한 상태로서 BIND 9.9.2-P1 이상 버전으로 업데이트 필요
- 다음은 최근 BIND 취약점들이며, 취약점 버전을 사용하는 시스템은 업그레이드 필요
서비스 거부(Denial-of-Service)(CVE-2009-4022) 취약점 : 9.6.0이전 버전
특별한 목적으로 사용하지 않는다면 DNS 서비스 제거합니다.
SWAT(Samba Web Administration Tool)보안 설정(중요도 : 상)
SWAT 서비스 사용유무 및 설정
기준
가. SWAT 서비스 제거
※ 침입차단시스템을 사용하여 901번 포트 필터링 시 예외처리
설정 방법
<SWAT 서비스 필요 시>
침입차단시스템을 사용한다면 침입차단시스템 관리자에게 연락하여 9 0 1 번 포트를 필터링 함으로써 외부 네트워크로부터의 SWAT 접근을 막기를 권장함
<SWAT 서비스 불필요 시>
1) SWAT을 사용할 필요가 없다면 아래와 같이 구동 중지
# vi /etc/inetd.conf 파일 실행하여 아래와 같이 내용 수정 (수정 전) swat stream tcp nowait.400 root /usr/sbin/swat swat (수정 후) #swat stream tcp nowait.400 root /usr/sbin/swat swat
2) inetd 재구동
# ps -e | inetd.conf 538 ? 00:00:00 inetd # kill -HUP 538
상세설명
SWAT(Samba Web Administration Tool)은 잘못된 사용자와 비밀번호를 입력하였을 때 아래와 같이 서로 다른 메시지를 출력합니다.
사용자 ID는 맞고 비밀번호만 틀렸을 때 : 401 Authorization Required. You must be authenticated to use this service. 사용자 ID, 비밀번호 모두 틀렸을 때 : 401 Bad Authorization username/password must be supplied
이렇게 서로 다른 메시지를 이용하여 일률적으로 사용자 ID와 비밀번호를 대입하는 강제 공격(brute force)으로 그 메시지에 따라 사용자 ID를 알아낼 수 있습니다.
Samba 버전 취약성(중요도 : 상)
Samba 서비스 사용여부 및 버전 확인
기준
가. 서비스 필요 시
- Version 4.0.1 업그레이드
나. 서비스 불필요 시
- 서비스 제거
설정 방법
<Samba 서비스 필요 시>
서비스를 위해 사용시에는 Version 3.6.2 업그레이드
<Samba 서비스 불필요 시>
1) Samba를 사용할 필요가 없다면 아래와 같이 구동중지
# ps –ef | grep smb 538 ? 00:00:00 smbd # kill -9 538
2) 부팅스크립트 삭제
# mv /etc/rc3.d/S90samba /etc/rc3.d/_S90samba
상세설명
Samba 서버는 다수의 취약점이 발견되고 있으며, 하위버전의 Samba를 사용할 경우 강제공격, Buffer overflow 등의 공격대상이 될 수 있습니다.
- Samba 경우 3.4 이하 버전에서 취약성이 대부분 발견되었으며, 현재(2012.11)기준으로 Samba 4.0.1이 최신 버전이기 때문에 Samba 4.0.1 이상의 버전을 사용할 것을 권장
- 다음은 최근 Samba 취약점들이며, 취약점 버전을 사용하는 시스템은 업그레이드 필요
Samba Information Disclosure and Denial of Service (CVE-2009-2906) 취약점 : 3.4 이전 버전
※ Samba 취약점 버전에 대해서 패치를 제공하므로 취약점에 대해서 패치 할 것을 권고 (http://www.samba.org/samba/history/security.html)
SSH(Secure Shell) 버전 취약성(중요도 : 중)
openSSH 사용여부 따른 버전 확인
기준
가. 서비스 필요 시
- 최신버전의 SSH 를 설치하여 운영 (openSSH 6.1 2012.11 기준)
나. 서비스 불필요 시
- 실행중인 SSH 서비스 제거
설정 방법
<서비스 필요 시>
1) 최신버전의 SSH를 설치하여 운영하는 것을 권고
최신 SSH버전은 현재(2012.11)기준으로 openSSH 6.1이며, openSSH 6.1이상의 버전을 사용할 것을 권장 (openSSH는 http://www.openssh.org에서 다운 가능)
<서비스 불필요 시>
1) 실행중인 서비스를 중지
# ps –ef | grep sshd root 414 0.0 0.7 2672 1692 /usr/sbin/sshd # kill -9 414
2) SSH가 시작되지 않도록 시작스크립트의 파일명 변경 (OS 마다 시작스크립트 위치 다름)
# ls –al /etc/rc*.d/* | grep sshd (시작스크립트 파일 위치 확인) # mv /etc/rc2.d/S55sshd /etc/rc2.d/_S55sshd
※ SSH 설정에 따라 /etc/ssh/sshd_config 파일 위치가 상이할 수 있음
상세설명
SSH는 SSH(Secure Shell) 프로토콜을 구현한 오픈 소스 프로그램으로 telnet, ftp, rlogin, rsh 등을 대체하고 있으며, 네트워크 트래픽을 암호화하여 패킷 스니핑과 같은 공격으로부터 중요한 데이터를 보호할 수 있습니다.
그러나, SSH의 낮은 버전에서는 다수의 취약점이 발견되고 있으며, 이러한 취약점으로 인해 root 계정 권한 획득, DoS공격 등 다양한 공격의 대상이 될 수 있습니다.
- 다음은 SSH 취약점들이며, 취약점 버전을 사용하는 시스템은 업그레이드 필요
Plaintext Recovery Attack Against SSH 취약점 : 5.1 이전 버전
X11UseLocalhost=no hijacking attack(CVE-2008-1483) 취약점 : SSH 5.0 이전 버전
x-server 접속 제한 설정(중요도 : 상)
임의의 호스트에서 해킹 대상 시스템의 x-server 접속 제한 설정
기준
가. 모든 사용자의 자동 실행파일 에서 ‘xhost +’ 와 같은 x-server 접속 설정 제거
설정 방법
모든 사용자의 자동 실행화일(.login, .profile, .cshrc, .xinitrc, .xsession 등)에서 'xhost +'와 같은 명령은 모두 제거
상세설명
유닉스 시스템의 GUI 프로그램은 X-Window를 기반으로 수행되므로 이 X-Window를 사용하는 시스템의 경우에 임의의 호스트에서 해킹 대상 시스템의 X-Server에의 접속을 허용할 경우에 공격자는 대상 시스템의 X-Server에 접속한 뒤 다음과 같은 작업을 할 수 있습니다.
- 사용자가 타이핑하는 여러 가지 정보(예:password 등)들을 키보드로부터 읽을 수 있는 것이 가능
- 스크린으로 출력되는 모든 정보를 볼 수 있는 것이 가능
- 임의의 정보를 스크린에 출력 가능
- 임의의 응용 프로그램을 실행시키거나 중지 가능
- 사용자의 세션을 제어 가능
보안 패치
보안 패치 적용(중요도 : 중)
서버 침해 방지를 위해 주기적으로 보안 패치 적용
기준
가. 최신 보안패치 및 버그 Fix 된 패치 적용
설정 방법
“instfix -iv | grep ML”로 서버에 적용되어 있는 패치 리스트를 확인
버전4.3의 경우 아래 사이트에서 다음과 같은 방법으로 패치버전 다운 가능
http://techsupport.services.ibm.com/ 에서 원하는 레벨의 ML를 찾을 수 있으며, current를 현재 버전 level로 등록하고 update to를 최신의 대상 패치 버전을 선택
<패치 적용의 예> Click on the package name below. Put the package (a tar.gz file) in /usr/sys/inst.images Extract the filesets from the package. cd /usr/sys/inst.images gzip -d -c 4330910.tar.gz | tar -xvf - Back up your system. Install the package by creating a table of contents for install to use. Then update the install subsystem itself. Run SMIT to complete the installation. inutoc /usr/sys/inst.images installp -acgXd /usr/sys/inst.images bos.rte.install smit update_all Reboot your system. This maintenance package replaces critical operating system code.
- Security Patch Check 관련 사이트
http://www-912.ibm.com/eserver/support/fixes/
주기적인 패치 적용을 통하여 보안성 및 시스템 안정성을 확보하는 것이 시스템 운용의 하나의 중요한 요소이며, 서비스 중인 시스템의 경우 패치 적용에 따르는 문제점(현재 운용중인 응용프로그램의 예기치 않은 중지, 패치 자체의 버그등)과 재부팅의 어려움 등으로 많은 패치를 적용하는 것이 매우 어렵기 때문에 패치 적용 시 많은 부분을 고려해야 함.
시스템의 보안성 및 안전성을 위하여 주기적으로 패치를 적용하는 것이 바람직하나, 아래의 사항을 고려하여 OS벤더 엔지니어의 충분한 검토 후, 서버에서 운용중인 서비스에 아무런 영향이 없다고 판단될 때 OS벤더 엔지니어의 작업하에 패치를 적용해야 함.
No | 패치 적용시 고려 및 준수해야 할 사항 |
---|---|
1 | 해당 패치가 시스템 자체에 미칠 수 있는 영향을 OS 벤더측에서 검토 후, 이상이 없을 때 패치를 적용 |
2 | 해당 패치가 시스템에서 운용중인 서비스 프로그램에 미칠 수 있는 영향을 OS 벤더측과 서비스 프로그램(즉 응용프로그램) 개발자측과 함께 검토후, 이상이 없을 때 패치를 적용 |
3 | 패치 적용 후 예기치 않은 서비스의 중지에 대비하여, 패치 작업을 실시하기 전에 Roll-Back 및 비상복구 절차 수립 및 테스트 필요 |
4 | 패치 적용 전/후 시스템에 대한 Full Backup을 실시 |