목차
1. 개요
1-1 |
취약점 개요 |
1-2 |
프로젝트 목적 |
1-3 |
분석 / 평가 항목 |
2. 계정관리
2-1 |
root 계정 원격 접속 제한 |
2-9 |
패스워드 최소 사용 기간 설정 |
2-2 |
패스워드 복잡성 설정 |
2-10 |
불필요한 계정 제거 |
2-3 |
계정 잠금 임계값 설정 |
2-11 |
관리자 그룹에 최소한의 계정 포함 |
2-4 |
패스워드 파일 보호 |
2-12 |
계정에 존재하지 않는 GID 금지 |
2-5 |
root 이외의 UID가 ‘0’ 금지 |
2-13 |
동일한 UID 금지 |
2-6 |
root 계정 su 제한 |
2-14 |
사용자 Shell 점검 |
2-7 |
패스워드 최소 길이 설정 |
2-15 |
Session Timeout 설정 |
2-8 |
패스워드 최대 사용 기간 설정 |
|
|
3. 파일 및 디렉터리 관리
3-1 |
root 홈, 패스 디렉터리 권한 및 패스 설정 |
3-11 |
world writable 파일 점검 |
3-2 |
파일 및 디렉터리 소유자 설정 |
3-12 |
/dev에 존재하지 않는 device 파일 점검 |
3-3 |
/etc/passwd 파일 소유자 및 권한 설정 |
3-13 |
$HOME/.rhosts, hosts.equiv 사용 금지 |
3-4 |
/etc/shadow 파일 소유자 및 권한 설정 |
3-14 |
접속 IP 및 포트 제한 |
3-5 |
/etc/hosts 파일 소유자 및 권한 설정 |
3-15 |
hosts.lpd 파일 소유자 및 권한 설정 |
3-6 |
/etc/(x)inetd.conf 파일 소유자 및 권한 설정 |
3-16 |
NIS 서비스 비활성화 |
3-7 |
/etc/syslog.conf 파일 소유자 및 권한 설정 |
3-17 |
UMASK 설정 관리 |
3-8 |
/etc/services 파일 소유자 및 권한 설정 |
3-18 |
홈디렉토리 소유자 및 권한 설정 |
3-9 |
SUID,SGID,Stick bit 설정 파일 점검 |
3-19 |
홈디렉토리로 지정한 디렉토리의 존재 관리 |
3-10 |
사용자, 시스템 시작파일 및 환경파일 소유자 및 권한 설정 |
3-20 |
숨겨진 파일 및 디렉토리 검색 및 제거 |
4. 서비스 관리
4-1 |
finger 서비스 비활성화 |
4-13 |
스팸 메일 릴레이 제한 |
4-2 |
Anonymous FTP 비활성화 |
4-14 |
일반사용자의 Sendmail 실행 방지 |
4-3 |
r 계열 서비스 비활성화 |
4-15 |
DNS 보안 버전 패치 |
4-4 |
cron 파일 소유자 및 권한설정 |
4-16 |
DNS Zone Transfer 설정 |
4-5 |
Dos 공격에 취약한 서비스 비활성화 |
4-17 |
Apache 디렉토리 리스팅 제거 |
4-6 |
NFS 서비스 비활성화 |
4-18 |
Apache 웹 프로세스 권한 제한 |
4-7 |
NFS 접근 통제 |
4-19 |
Apache 상위 디렉토리 접근 금지 |
4-8 |
automountd 제거 |
4-20 |
Apache 불필요한 파일 제거 상 |
4-9 |
RPC 서비스 확인 |
4-21 |
Apache 링크 사용 금지 |
4-10 |
NIS , NIS+ 점검 |
4-22 |
Apache 파일 업로드 및 다운로드 제한 |
4-11 |
tftp, talk 서비스 비활성화 |
4-23 |
Apache 웹 서비스 영역의 분리 |
4-12 |
Sendmail 버전 점검 |
|
|
5. 패치 및 로그 관리
5-1 |
최신 보안패치 및 벤더 권고사항 적용 |
5-2 |
로그의 정기적 검토 및 보고 |
1. 개요
1-1. 취약점 개요
「정보통신기반 보호법」 제9조에 따라, 주요 정보 통신 기반시설 관리기관은 매년 취약점 분석ㆍ평가를 실시하여야 합니다. 취약점 분석ㆍ평가는 453개의 관리적/물리적/기술적 점검항목에 대한 취약여부를 점검하고 모의해킹, 침투테스트 등을 수행하는 종합적인 위험진단에 해당합니다.
한편 취약점 분석ㆍ평가를 수행함에 있어 기술적 점검은, 시스템에 대한 실제 보안값 설정에 관한 것으로 각 시스템에 대한 명령어 코드(Command), 메뉴 구성(UI)과 같은 기술적인 사항을 알아야만 가능하기에, 주요 정보 통신 기반시설 담당자들의 어려움이 따르게 됩니다.
이러한 기술적 점검에 대한 어려움을 해소하고 주요 정보 통신 기반시설 담당자들의 이해를 돕기 위해, 안전행정부는 전체 313개 기술적 점검항목에 대한 점검방법 및 조치방법 상세 매뉴얼을 개발하게 되었습니다.
각각의 점검항목이 의미하는 위험내역 설명과 함께, 점검방법 및 조치방법을 실제시스템 입력화면 등을 활용하여 상세 설명하였으며, 특정 벤더사의 제품으로 한정하지 않고 대표적인 벤더사 제품별로 구분하여 설명을 제시하였습니다.
■ 계정과 패스워드 관리
적절한 권한을 가진 사용자를 식별하기 위한 가장 기본적인 인증 수단
시스템의 모든 자원은 사용자 계정으로 접근이 가능
■ 세션 관리
사용자와 시스템, 시스템과 시스템 간의 접속에 대한 관리사용자 ---(로그인)---> 시스템
일정 시간이 지나면 자동으로 세션을 종료하고 비안가자에 의한 세션 가로채기를 차단
■ 접근 제어(Access Control)
시스템 또는 서비스가 공격자로 부터 적절히 보호될수 있도록 네트워크 관점에서 접근 통제
■ 권한 관리
시스템의 각 사용자가 적절한 권한으로 적절한 정보 자산을 접근할 수 있도록 통제
■ 로그 관리
시스템 또는 네트워크를 통한 외부에서 시스템에 영향을 미칠 경우 해당 사항을 기록
■ 취약점 관리
시스템 자체의 결함을 체계적으로 관리하는 것이 중요
1-2. 프로젝트 목적
실제 엔지니어 및 관리자가 수십에서 수백 대의 시스템을 담당하여 관리한다. 매년 주기적으로 실시해야하는 취약점 분석을 조금 더 쉽고 정확하게 할 수 있도록 간단한 스크립트를 통해 구성 했습니다.
■ 주요 정보통신 기반시설 기술적 취약점 분석•평가 방법 상세가이드(2014.01)기준으로 작성하였습니다.
■ 점검대상 : Linux200 (CentOS)
1-3. 분석 / 평가 항목
* 주요 정보통신 기반시설 기술적 취약점 분석•평가 방법 상세가이드(2014.01)기준으로 작성됨 *
2. 계정 관리
취약점 항목 |
2-1. root 계정 원격 접속 제한 | ||||
대상 OS |
Linux |
위험도 |
상 |
Code |
U-01 |
취약점 개요 |
root는 시스템을 관리하는 매우 중요한 계정임 계정으로 직접 로그인하도록 . root 허용하면 불법적인 침입자의 목표가 될 수 있으므로 계정 접속에 대한 관리가 root 필요함 계정의 원격 접속 허용은 공격자에게 더 좋은 기회를 제공할 수 있으므로 의 원격 접속은 금지하여야 함.
root : 계정 여러 사용자가 사용하는 컴퓨터에서 전체적으로 관리할 수 있는 총괄 권한을 가진 유일한 특별 계정 유닉스 시스템의 루트는 시스템 관리자인 운용 관리자로서 . (root) (Super User) 윈도우의 관리자 에 해당하며 사용자 계정을 생성하거나 소프트웨어를 설치하고 (Administrator) , ,환경 및 설정을 변경하거나 시스템의 동작을 감시 및 제어할 수 있음. | ||||
보안대책 | |||||
판단기준 |
양호: 원격 서비스를 사용하지 않거나 사용 시 직접 접속을 차단한 경우 | ||||
취약: root 직접 접속을 허용하고 원격 서비스를 사용하는 경우 | |||||
조치방법 |
원격 접속 시 계정으로 바로 접속 할 수 없도록 설정파일 수정 | ||||
점검 스크립트 | |||||
#!/bin/bash
. /root/bin/print.sh
grep ^pts /etc/securetty > /dev/null 2>&1 if [ $? -eq 0 ] ; then print_error "root 직접 접속이 허용되었거나, 원격서비스를 사용 중 입니다." print_info echo " => vi /etc/securetty 파일에서 pts 주석처리." else print_good "원격 서비스를 사용하지 않고 있거나, 접속이 차단 되어 있습니다." fi
|
취약점 항목 |
2-2. 패스워드 복잡성 설정 | ||||
대상 OS |
Linux |
위험도 |
상 |
Code |
U-02 |
취약점 개요 |
사용자 계정 및 일반 계정 모두 해당 암호를 유추하기 쉽게 설정할 경우 비인가자의 시스템 접근을 허용하게 하는 위험이 존재함 여러 문자를 혼합한 8자리 이상의 암호를 사용하게 하여 패스워드 복잡성을 높이면 비인가자에 의해 발생하는 침입 공격 발생률을 낮출 수 있음. | ||||
보안대책 | |||||
판단기준 |
양호: 영문 숫자 특수문자가 혼합된 자리 이상의 패스워드가 설정된 경우 | ||||
취약: 영문 숫자 특수문자 혼합되지 않은 자 미만의 패스워드가 설정된 경우 | |||||
조치방법 |
계정과 유사하지 않은 자 이상의 영문 숫자 특수문자의 조합으로 암호 설정 | ||||
점검 스크립트 | |||||
#!/bin/bash
. /root/bin/print.sh
cat /etc/pam.d/system-auth | grep "^password requisite pam_cracklib.so" > /dev/null 2>&1
if [ $? -eq 0 ] ; then print_good "영문 숫자 특수문자가 혼합된 자리 8자리 이상의 패스워드가 설정된 경우 입니다." else print_error "영문 숫자 특수문자 혼합되지 않은 8자리 미만의 패스워드가 설정된 경우 입니다." print_info echo " => vi /etc/pam.d/system-auth 확인." echo "password requisite pam_cracklib.so try_first_pass retry=3 type= minlen=8 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1" fi
|
취약점 항목 |
2-3. 계정 잠금 임계값 설정 | ||||
대상 OS |
Linux |
위험도 |
상 |
Code |
U-03 |
취약점 개요 |
침입자에 의한 패스워드 *무작위 대입 공격(Brute Force Attack)이나 패스워드 추측 공격(Password Guessing) 발생 시 암호입력 실패 횟수를 적정하게 제한함으로써 자동공격을 차단하고 공격 시간을 지체시켜 패스워드 유출 위험을 줄일 수 있음.
무작위 대입 공격(Brute Force Attack): 컴퓨터로 암호를 해독하기 위해 가능한 모든 키를 하나하나 추론해 보는 시도를 말함. | ||||
보안대책 | |||||
판단기준 |
양호: 계정 잠금 임계값이 5 이하의 값으로 설정되어 있는 경우 | ||||
취약: 계정 잠금 임계값이 설정되어 있지 않거나, 5 이하의 값으로 설정되지 않은 경우 | |||||
조치방법 |
계정 잠금 임계값을 5 이하로 설정 | ||||
점검 스크립트 | |||||
#!/bin/bash
. /root/bin/print.sh
cat /etc/pam.d/system-auth | grep "^auth required pam_tally2.so" > /dev/null 2>&1 if [ $? -eq 0 ]; then cat /etc/pam.d/system-auth | grep "^account required pam_tally2.so" > /dev/null 2>&1 if [ $? -eq 0 ]; then print_good "계정 잠금 임계값이 5 이하의 값으로 설정되어 있는 경우입니다." else print_error "계정 잠금 임계값이 설정되어 있지 않거나, 5 이하의 값으로 설정되지 않은 경우 입니다." print_info echo " => vi /etc/pam.d/system-auth 확인." echo "auth required pam_tally2.so no_magic_root deny=5 reset unlock_time=120" echo "account required pam_tally2.so no_magic_root" fi else print_error "계정 잠금 임계값이 설정되어 있지 않거나, 5 이하의 값으로 설정되지 않은 경우 입니다." print_info echo " => vi /etc/pam.d/system-auth 확인." echo "auth required pam_tally2.so no_magic_root deny=5 reset unlock_time=120" echo "account required pam_tally2.so no_magic_root" fi |
취약점 항목 |
2-4. 패스워드 파일 보호 | ||||
대상 OS |
Linux |
위험도 |
상 |
Code |
U-04 |
취약점 개요 |
패스워드 정보를 평문으로 저장하는 경우 정보 유출 피해가 발생할 수 있으므로 패스워드를 암호화하여 보호하여야 함. 쉐도우 패스워드를 사용하여 “/etc/shadow”파일에 암호화된 패스워드가 저장되도록 하고 특별 권한이 있는 사용자들만 읽을 수 있도록 제한함. | ||||
보안대책 | |||||
판단기준 |
양호: 쉐도우 패스워드를 사용하거나, 패스워드를 암호화하여 저장하는 경우 | ||||
취약: 쉐도우 패스워드를 사용하지 않고, 패스워드를 암호화하여 저장하지 않는 경우 | |||||
조치방법 |
패스워드 암호화 저장∙관리 설정 적용 | ||||
점검 스크립트 | |||||
#!/bin/bash
. /root/bin/print.sh
if [ -f /etc/passwd -a -f /etc/shadow ] ; then print_good "쉐도우 패스워드를 사용하거나, 패스워드를 암호화하여 저장하는 경우 입니다." else print_error "쉐도우 패스워드를 사용하지 않고, 패스워드를 암호화하여 저장하지 않는 경우 입니다." print_info echo " => 패스워드 암호화 저장 관리 설정 적용." echo " => 1. pwconv ---> 쉐도우 패스워드 정책 적용 방법." echo " => 2. pwunconv ---> 쉐도우 패스워드 정책 적용 방법." fi |
취약점 항목 |
2-5. root 이외의 UID가 '0' 금지 | ||||
대상 OS |
Linux |
위험도 |
중 |
Code |
U-05 |
취약점 개요 |
root(UID=0)와 동일한 *UID(User Identification)를 가진 계정 존재 시 root 권한으로 시스템 접근이 가능하므로 root의 UID를 가진 계정이 존재하지 않도록 확인하여야 함.
root 뿐만 아니라 사용자 간 UID 중복 시에도 권한 중복으로 인한 사용자 감사 추적이 어렵게 되는 문제가 발생하므로 계정 및 UID 확인이 필요함.
UID(User Identification): 여러 명의 사용자가 동시에 사용하는 시스템에서 사용자가 자신을 대표하기 위해 쓰는 이름. | ||||
보안대책 | |||||
판단기준 |
양호: root 계정과 동일한 UID를 갖는 계정이 존재하지 않는 경우 | ||||
취약: root 계정과 동일한 UID를 갖는 계정이 존재하는 경우 | |||||
조치방법 |
UID가 0인 계정 존재 시 변경할 UID를 확인 후 다른 UID로 변경 및 불필요 시 삭제, 계정이 사용 중이면 명령어로 조치가 안 되므로 /etc/passwd 파일 설정 변경 | ||||
점검 스크립트 | |||||
#!/bin/bash
. /root/bin/print.sh
NUM=`awk -F: '{print $3}' /etc/passwd | sort -n | uniq -d | wc -l` if [ $NUM -gt 0 ] ; then print_error "root 계정과 동일한 UID를 갖는 계정이 존재하는 경우 입니다." print_info echo " => vi /etc/passwd 파일 내 UID 확인.(세 번째 필드 값)" else print_good "root 계정과 동일한 UID를 갖는 계정이 존재하지 않는 경우 입니다." fi
|
취약점 항목 |
2-6. root 계정 su 제한 | ||||
대상 OS |
Linux |
위험도 |
중 |
Code |
U-06 |
취약점 개요 |
권한이 없는 일반 사용자가 su 명령을 사용하여 로그인을 시도하고 패스워드 무작위 대입 공격(Brute Force Attack)이나 패스워드 추측 공격(Password Guessing)을 통해 root 권한을 획득할 수 있음. su 명령어 사용이 허용된 사용자만 root 계정으로 접속할 수 있도록 함. | ||||
보안대책 | |||||
판단기준 |
양호: su 명령어를 특정 그룹에 속한 사용자만 사용하도록 제한되어 있는 경우 | ||||
취약: su 명령어를 모든 사용자가 사용하도록 설정되어 있는 경우 | |||||
조치방법 |
일반 사용자의 su 명령 사용 제한 1. Group 생성(생성할 그룹 요청, 일반적으로 wheel 사용) 2. su 명령어의 그룹을 요청받은 그룹으로 변경 3. su 명령어의 권한 변경(4750) 4. su 명령어 사용이 필요한 계정을 새로 생성한 그룹에 추가(추가할 계정 요청)
※ LINUX의 경우, *PAM(Pluggable Authentication Module)을 이용한 설정 가능 *PAM(Pluggable Authentication Module): 사용자를 인증하고 그 사용자의 서비스에 대한 액세스를 제어하는 모듈화 된 방법을 말하며, PAM은 관리자가 응용프로그램들의 사용자 인증 방법을 선택할 수 있도록 해줌 | ||||
점검 스크립트 | |||||
#!/bin/bash
. /root/bin/print.sh
NUM=`grep pam_wheel.so /etc/pam.d/su | grep -v '^#' | wc -l` if [ $NUM -gt 0 ] ; then print_good "su 명령어를 특정 그룹에 속한 사용자만 사용하도록 제한되어 있는 경우 입니다." else print_error "su 명령어를 모든 사용자가 사용하도록 설정되어 있는 경우 입니다." print_info echo " => 1) /etc/pam.d/su 파일 수정." echo " vi /etc/pam.d/su" echo " #auth required pam_wheel.so use_uid" echo " 주석을 해제 합니다." echo " => 2) su 명령어 사용이 필요한 계정을 wheel 그룹에 추가." echo " usermod -G wheel [계정명]" echo "" echo " => 3) useradd -G wheel [계정명] 명령어를 사용하여" echo " [계정명] 유저를 생성하면서 wheel 그룹에 포함." echo " (# passwd [계정명] 명령어로 비밀번호 바꾸는 것은 필수)" echo "" echo " => 4) cat /etc/group | grep wheel 명령어를 사용하여 wheel 그룹에 사용자가 속해있는지 확인." echo "" fi |
취약점 항목 |
2-7. 패스워드 최소 길이 설정 | ||||
대상 OS |
Linux |
위험도 |
중 |
Code |
U-07 |
취약점 개요 |
패스워드 무작위 대입 공격(Brute Force Attack)이나 패스워드 추측 공격(Password Guessing)을 피하기 위하여 패스워드 최소 길이가 설정되어 있는지 점검함. 패스워드 최소 길이가 설정되어 있지 않거나, 짧게 설정되어 있을 경우 쉽게 유추될 수 있음. | ||||
보안대책 | |||||
판단기준 |
양호: 패스워드 최소 길이가 8자 이상으로 설정되어 있는 경우 | ||||
취약: 패스워드 최소 길이가 8자 미만으로 설정되어 있는 경우 | |||||
조치방법 |
패스워드 정책 설정파일을 수정하여 패스워드 최소 길이를 8자 이상으로 설정 | ||||
점검 스크립트 | |||||
#!/bin/bash
. /root/bin/print.sh
NUM=`grep PASS_MIN_LEN /etc/login.defs | grep -v '^#' | grep '^PASS_MIN_LEN' | awk '{print $2}'` if [ $NUM -ge 8 ] ; then print_good "패스워드 최소 길이가 8자 이상으로 설정되어 있는 경우 입니다." else print_error "패스워드 최소 길이가 8자 미만으로 설정되어 있는 경우 입니다." print_info echo " => 패스워드 정책 설정파일을 수정하여 패스워드 최소 길이를 8자 이상으로 설정." echo " => vi /etc/login.defs 파일 열고 /PASS_MIN_LEN 검색 후 8 이상으로 설정." fi |
취약점 항목 |
2-8. 패스워드 최대 사용기간 설정 | ||||
대상 OS |
Linux |
위험도 |
중 |
Code |
U-08 |
취약점 개요 |
패스워드 최대 사용기간을 설정하지 않은 경우 일정 기간 경과 후에도 유출된 패스워드로 접속이 가능함. 악의적인 사용자로부터 계속적인 접속을 차단하기 위해 패스워드 최대 사용기간을 설정하여 주기적으로 변경할 수 있도록 함. | ||||
보안대책 | |||||
판단기준 |
양호: 패스워드 최대 사용기간이 90일(12주) 이하로 설정되어 있는 경우 | ||||
취약: 패스워드 최대 사용기간이 90일(12주) 이하로 설정되어 있지 않는 경우 | |||||
조치방법 |
패스워드 정책 설정파일을 수정하여 패스워드 최대 사용기간을 90일(12주)로 설정 | ||||
점검 스크립트 | |||||
#!/bin/bash
. /root/bin/print.sh
NUM=`grep PASS_MAX_DAYS /etc/login.defs | grep -v '^#' | grep '^PASS_MAX_DAYS' | awk '{print $2}'` if [ $NUM -le 90 ] ; then print_good "패스워드 최대 사용기간이 90일(12주) 이하로 설정되어 있는 경우 입니다." else print_error "패스워드 최대 사용기간이 90일(12주) 이하로 설정되어 있지 않는 경우 입니다." print_info echo " => 패스워드 정책 설정파일을 수정하여 패스워드 최대 사용기간을 90일(12주)로 설정." echo " => vi /etc/login.defs 파일 열고 /PASS_MAX_DAYS 검색 후 90 으로 설정." fi |
취약점 항목 |
2-9. 패스워드 최소 사용기간 설정 | ||||
대상 OS |
Linux |
위험도 |
중 |
Code |
U-09 |
취약점 개요 |
패스워드 최소 사용기간을 설정하지 않은 경우 사용자에게 익숙한 패스워드로 변경이 가능하며, 이를 재사용함으로써 패스워드의 정기적인 변경은 무의미해질 수 있음. 이전 암호를 그대로 재사용하는 것을 방지하기 위해 최근 암호 기억 설정을 함께 적용하여 패스워드를 보호함. | ||||
보안대책 | |||||
판단기준 |
양호: 패스워드 최소 사용기간이 1일(1주)로 설정되어 있는 경우 | ||||
취약: 패스워드 최소 사용기간이 설정되어 있지 않는 경우 | |||||
조치방법 |
패스워드 정책 설정파일을 수정하여 패스워드 최소 사용기간을 1일(1주)로 설정 | ||||
점검 스크립트 | |||||
#!/bin/bash
. /root/bin/print.sh
NUM=`grep PASS_MIN_DAYS /etc/login.defs | grep -v '^#' | grep '^PASS_MIN_DAYS' | awk '{print $2}'` if [ $NUM -ge 1 ] ; then print_good "패스워드 최소 사용기간이 1일(1주)로 설정되어 있는 경우 입니다." else print_error "패스워드 최소 사용기간이 설정되어 있지 않는 경우 입니다." print_info echo " => 패스워드 정책 설정파일을 수정하여 패스워드 최소 사용기간을 1일(1주)로 설정." echo " => vi /etc/login.defs 파일 열고 /PASS_MIN_DAYS 검색 후 1 로 설정." fi |
취약점 항목 |
2-10. 불필요한 계정 제거 | ||||
대상 OS |
Linux |
위험도 |
하 |
Code |
U-10 |
취약점 개요 |
OS나 Package 설치 시 Default로 생성되는 계정은 대부분 Default 패스워드를 사용하는 경우가 많으며 패스워드 추측공격에 악용될 수 있으므로 시스템에서 이용하지 않는 "lp, uucp, nuucp” 등의 Default 계정 및 의심스러운 특이한 계정의 존재 유무를 확인 후 삭제함. 또한, 관리되지 않은 불필요한 계정으로 인해 시스템 접속이 가능하므로 퇴직, 전직, 휴직 등의 이유로 더 이상 사용하지 않는 계정, 불필요한 계정, 의심스러운 계정은 제거해야 함. 특히, 장기간 패스워드가 변경되지 않은 미사용 계정은 반복적인 패스워드 추측 공격(Password Guessing)이 가능하고 해당 계정 정보의 유출 여부 확인이 어려움. | ||||
보안대책 | |||||
판단기준 |
양호: 불필요한 계정이 존재하지 않는 경우 | ||||
취약: 불필요한 계정이 존재하는 경우 | |||||
조치방법 |
현재 등록된 계정 현황 확인 후 불필요한 계정 삭제 | ||||
점검 스크립트 | |||||
#!/bin/bash
. /root/bin/print.sh
lastlog |grep '*' | awk '{print $1}' > list.txt awk -F: '$3 > 499 && $3 < 60000 {print $1}' /etc/passwd > list2.txt NUM=0 if [ $NUM -eq `cat list2.txt | wc -l` ]; then print_good "불필요한 계정이 존재하지 않는 경우 입니다." else echo print_error "불필요한 계정이 존재하는 경우 입니다." while read line do cat list.txt | grep $line NUM=`expr $NUM + $?` done < list2.txt print_info echo " => lastlog , lastb 확인." echo " => userdel 명령으로 불필요한 사용자 계정 삭제." echo " => #userdel <user_name>" fi
rm list.txt list2.txt |
취약점 항목 |
2-11. 관리자 그룹에 최소한의 계정 포함 | ||||
대상 OS |
Linux |
위험도 |
하 |
Code |
U-11 |
취약점 개요 |
시스템을 관리하는 root 계정이 속한 그룹은 시스템 운영 파일에 대한 접근권한이 부여되어 있으므로 최소한의 계정만 등록되어 있어야 함. 해당 그룹 관리가 이루어지지 않으면 허가되지 않은 일반 사용자가 관리자의 권한으로 시스템에 접근할 수 있으며, 파일 수정 및 변경 등의 악의적인 작업으로 인해 시스템 운영에 피해를 줄 수 있음. | ||||
보안대책 | |||||
판단기준 |
양호: 관리자 그룹에 불필요한 계정이 등록되어 있지 않은 경우 | ||||
취약: 관리자 그룹에 불필요한 계정이 등록되어 있는 경우 | |||||
조치방법 |
현재 등록된 계정 현황 확인 후 불필요한 계정 삭제 | ||||
점검 스크립트 | |||||
#!/bin/bash
. /root/bin/print.sh
grep root /etc/group > /dev/null 2>&1 if [ $? -eq 0 ]; then grep root, /etc/group > /dev/null 2>&1 if [ $? -ne 0 ]; then print_good "관리자 그룹에 불필요한 계정이 등록되어 있지 않은 경우 입니다." else print_error "관리자 그룹에 불필요한 계정이 등록되어 있는 경우 입니다." cat /etc/group | grep --color root print_info echo " => vi /etc/group 확인." echo " => (수정 전) root:x:0:root,test" echo " => (수정 후) root:x:0:root" fi else print_error "관리자 그룹에 불필요한 계정이 등록되어 있는 경우 입니다." cat /etc/group | grep --color root print_info echo " => vi /etc/group 확인." echo " => (수정 전) root:x:0:root,test" echo " => (수정 후) root:x:0:root"
fi |
취약점 항목 |
2-12. 계정이 존재하지 않는 GID 금지 | ||||
대상 OS |
Linux |
위험도 |
하 |
Code |
U-12 |
취약점 개요 |
미흡한 계정 그룹 관리로 인해 구성원이 없는 그룹이 존재할 경우 해당 그룹 소유의 파일이 비인가자에게 노출될 위험이 있음.
계정이 존재하지 않는 *GID(Group Identification) 설정을 관리자와 검토 후 제거하여야 함. *GID(Group Identification): 다수의 사용자가 특정 개체를 공유할 수 있게 연계시키는 특정 그룹의 이름으로 주로 계정처리 목적으로 사용되며, 한 사용자는 여러 개의 GID를 가질 수 있음. | ||||
보안대책 | |||||
판단기준 |
양호: 존재하지 않는 계정에 GID 설정을 금지한 경우 | ||||
취약: 존재하지 않은 계정에 GID 설정이 되어있는 경우 | |||||
조치방법 |
구성원이 존재하지 않는 그룹이 있을 경우 관리자와 검토하여 제거 | ||||
점검 스크립트 | |||||
#!/bin/bash
. /root/bin/print.sh
awk -F: '{print $1}' /etc/passwd > input.txt awk -F: '{print $1}' /etc/group > input2.txt echo cat input.txt | while read id do
grep -w "$id" input2.txt >/dev/null 2>&1
if [ $? -eq 0 ] ; then continue print_good "존재하지 않는 계정에 GID 설정을 금지한 경우 입니다. " else print_error "$id" "존재하지 않은 계정에 GID 설정이 되어있는 경우 입니다." print_info echo " => '/etc/groups, /etc/passwd' 파일 GID 설정 확인." fi done
rm input.txt input2.txt |
취약점 항목 |
2-13. 동일한 UID 금지 | ||||
대상 OS |
Linux |
위험도 |
중 |
Code |
U-13 |
취약점 개요 |
UNIX 시스템은 모든 사용자 계정에 UID를 부여하여 해당 UID로 사용자 이름, 패스워드, 홈 디렉터리 등과 같은 사용자 정보를 대응시킴. 만약 중복된 UID가 존재할 경우 시스템에서 동일한 사용자로 인식하여 문제가 발생할 수 있으며, 공격자에 의한 개인정보 및 관련 데이터 유출 발생 시에도 감사 추적이 어렵게 됨. | ||||
보안대책 | |||||
판단기준 |
양호: 동일한 UID로 설정된 사용자 계정이 존재하지 않는 경우 | ||||
취약: 동일한 UID로 설정된 사용자 계정이 존재하는 경우 | |||||
조치방법 |
동일한 UID로 설정된 사용자 계정의 UID를 서로 다른 값으로 변경 | ||||
점검 스크립트 | |||||
#!/bin/bash
. /root/bin/print.sh
cat /etc/passwd | awk -F: '{print $3}' > output.txt
NUM=`cat output.txt | sort -n | uniq -d | wc -l` if [ $NUM -gt 0 ] ; then print_error "동일한 UID로 설정된 사용자 계정이 존재하는 경우 입니다." print_info echo " => 동일한 UID로 설정된 사용자 계정의 UID를 서로 다른 값으로 변경." echo " => vi /etc/passwd UID 확인." else print_good "동일한 UID로 설정된 사용자 계정이 존재하지 않는 경우 입니다." fi
rm output.txt
|
취약점 항목 |
2-14. 사용자 shell 점검 | ||||
대상 OS |
Linux |
위험도 |
하 |
Code |
U-14 |
취약점 개요 |
로그인이 필요 없는 계정을 이용해 시스템에 접근하여 사용자의 명령어를 해석하고 악용할 가능성이 있으므로, /bin/false *쉘(Shell)을 부여해 로그인을 금지함. *쉘(Shell): 대화형 사용자 인터페이스로써, 운영체제(OS) 가장 외곽계층에 존재하여 사용자의 명령어를 이해하고 실행함. | ||||
보안대책 | |||||
판단기준 |
양호: 로그인이 필요하지 않은 계정에 /bin/false(nologin)쉘이 부여되어 있는 경우 | ||||
취약: 로그인이 필요하지 않은 계정에 /bin/false(nologin)쉘이 부여되지 않은 경우 | |||||
조치방법 |
로그인이 필요하지 않은 계정에 대해 /bin/false(nologin) 쉘 부여 | ||||
점검 스크립트 | |||||
#!/bin/bash
. /root/bin/print.sh
if [ $? -eq 0 ] ; then
print_error "로그인이 필요하지 않은 계정에 /bin/false(nologin) 쉘이 부여되지 않은 경우 입니다." cat /etc/passwd |grep -v nologin | awk -F: '$3 < 499 && $3 > 0{print $1}' print_info echo " => 로그인이 필요하지 않은 계정에 대해 /bin/false(nologin) 쉘 부여." echo " => 1. vi 편집기를 이용하여 “/etc/passwd” 파일을 연 후." echo " => 2. 로그인 쉘 부분인 계정 맨 마지막에 /bin/false(nologin) 부여 및 변경." echo " => (수정 전) daemon:x:1:1::/:/sbin/ksh" echo " => (수정 후) daemon:x:1:1::/:/bin/false 또는, daemon:x:1:1::/:/sbin/nologin" else print_good "로그인이 필요하지 않은 계정에 /bin/false(nologin) 쉘이 부여되어 있는 경우 입니다."
fi |
취약점 항목 |
2-15. Session Timeout 설정 | ||||
대상 OS |
Linux |
위험도 |
하 |
Code |
U-15 |
취약점 개요 |
계정이 접속된 상태로 방치될 경우 권한이 없는 사용자에게 중요시스템이 노출되어 악의적인 목적으로 사용될 수 있으므로 일정 시간 이후 어떠한 이벤트가 발생하지 않으면 연결을 종료하는 Session Timeout 설정이 필요함. | ||||
보안대책 | |||||
판단기준 |
양호: Session Timeout이 600초(10분) 이하로 설정되어 있는 경우 | ||||
취약: Session Timeout이 600초(10분) 이하로 설정되지 않은 경우 | |||||
조치방법 |
600초(10분) 동안 입력이 없을 경우 접속된 Session을 끊도록 설정 | ||||
점검 스크립트 | |||||
#!/bin/bash
. /root/bin/print.sh
echo "<sh, ksh, bash 사용 시>"
grep ^TMOUT /etc/profile > /dev/null 2>&1 if [ $? -eq 0 ] ; then print_good "Session Timeout이 600초(10분) 이하로 설정되어 있는 경우 입니다." else print_error "Session Timeout이 600초(10분) 이하로 설정되지 않은 경우 입니다." print_info echo " => vi /etc/profile 확인." echo " => TMOUT=600 추가." fi |
'Learning > └보고서' 카테고리의 다른 글
리눅스침해사고분석보고서_로그분석 (0) | 2017.03.14 |
---|---|
nmap report (0) | 2017.02.03 |
사물인터넷 IoT 플랫폼 개요 (0) | 2017.02.01 |
Buffer overflow Attack Report (0) | 2017.01.30 |