And Brain said,

전자금융기반시설 보안 취약점 평가 가이드 - Linux 서버(SRV-073~174) - [2] 본문

IT/보안

전자금융기반시설 보안 취약점 평가 가이드 - Linux 서버(SRV-073~174) - [2]

The Man 2025. 2. 24. 15:29
반응형

* 본 문서는 금융보안원이 발간한 『전자금융기반시설 보안 취약점 평가기준 안내서(제2022-1호)』를 준거로 하여 재작성되었으며, Linux 서버 보안 평가 방법에 국한하여 기술합니다.

<- SRV-001 ~ 070

 

2. Linux 서버(SRV) 평가 기준

2-38. SRV-073. 관리자 그룹에 불필요한 사용자 존재 (위험도 : ★★★★☆)

 
시스템을 관리하는 root 계정이 속한 그룹은 시스템 운영 파일에 대한 접근 권한이 부여되어 있으므로 해당 관리자 그룹에 속한 계정이 비인가자에게 유출될 경우 관리자 권한으로 시스템에 접근하여 계정 정보 유출, 환경설정 파일 및 디렉터리 변조 등의 위협이 존재함
 
점검 방법

awk -F: '$1 == "root" && $3 == 0 {split($4, users, ","); for (i in users) if (users[i] != "root") {print users[i]; found=1}} END {if (!found) print "CLEAN"}' /etc/group

 
결과 기댓값 : CLEAN
 


2-39. SRV-074. 불필요하거나 관리되지 않는 계정 존재 (위험도 : ★★★★☆)

 
운영체제에 불필요하거나 관리되지 않는 계정이 존재하면, 해커가 이를 이용해 불법적인 접근을 시도할 가능성이 높아짐.
이러한 계정들은 장기간 사용되지 않아 관리되지 않거나, 초기 설치 시 기본적으로 생성된 계정으로 남아 있을 수 있음.
 
점검 방법

awk -F: '$1 ~ /^(lp|uucp|nuucp)$/ {found=1} END {if (!found) {print "CLEAN"} else {print "FAILED"; exit 1}}' /etc/passwd | awk 'NR==1 && $1=="CLEAN" {next} NR>1 && $NF=="**Never logged in**" {print "FAILED"; exit 1} END {if (NR==1) print "CLEAN"}'

 
결과 기댓값 : CLEAN
 


2-40. SRV-075 유추 가능한 계정 비밀번호 존재 (위험도 : ★★★★★)

 
유추 가능한 비밀번호가 존재하면, 공격자가 쉽게 로그인하여 계정을 탈취할 가능성이 높음.
Brute-force Attack(무작위 대입 공격)을 통해 자동화된 크래킹 공격이 가능함.
과거 유출된 취약한 비밀번호를 사전 대입 공격(Dictionary Attack)으로 사용하여 시스템 침입 가능함.
 
점검 방식

john --show /etc/shadow 2>/dev/null | awk -F: 'NF > 1 {print $1; found=1} END {if (!found) print "CLEAN"}'

 
결과 기댓값 : CLEAN
 


2-41. SRV-081. Crontab 설정파일 권한 설정 미흡 (위험도 : ★★★★☆)

 
cron은 리눅스/유닉스 시스템에서 예약 작업(스케줄링)을 자동화하는 데 사용되는 핵심 기능으로, 보안 설정이 미흡할 경우, 악의적인 사용자가 임의의 명령을 실행하거나, 관리자(root) 권한을 획득하는 백도어로 활용할 가능성이 있음.
 
점검 방법

(stat -c '%a %U %G' /usr/bin/crontab | grep -Eq '^(750|700) root root$') && (stat -c '%a %U %G' /etc/crontab | grep -Eq '^(640|600) root root$') && (stat -c '%a %U %G' /var/spool/cron | grep -Eq '^700 root root$') && (stat -c '%a %U %G' /etc/cron.d/cron.allow /etc/cron.d/cron.deny 2>/dev/null | awk '{if (!match($0, "^(640|600) root root$")) exit 1}') && echo "CLEAN" || echo "FAILED"

 
결과 기댓값 : CLEAN
 


2-42. SRV-082. 시스템 주요 디렉터리 권한 설정 미흡 (위험도 : ★★★★☆)

 
리눅스 시스템의 주요 디렉터리(/usr, /bin, /sbin, /etc, /var)는 시스템 설정, 실행 파일, 로그 등 핵심 파일을 저장하는 공간으로, others(기타 사용자, 즉 모든 사용자)에게 쓰기(w) 권한이 부여된 경우, 누구나 중요한 파일을 수정하거나 악성 코드로 변조할 수 있는 위험이 존재함.
 
점검 방법

found=0; for dir in /sbin /etc /bin /usr /usr/bin /usr/sbin /usr/lbin /var; do 
    stat -c "%A %U" "$(readlink -f "$dir" 2>/dev/null)" 2>/dev/null | awk '$1 ~ /.......w./ || $2 != "root" {found=1}';
done; ((found)) && echo 'FAILED' || echo 'CLEAN'

 
결과 기댓값 : CLEAN
 


2-43. SRV-083. 시스템 스타트업 스크립트 권한 설정 미흡 (위험도 : ★★★☆☆)

 
시스템 부팅 시 실행되는 스타트업 스크립트(init.d, rc2.d, rc3.d, rc.d/init.d 등)는 시스템 초기화 및 서비스 실행에 중요한 역할을 함.
이 스크립트의 권한이 적절하게 설정되지 않으면 공격자가 악성 코드를 삽입하거나, 정상적인 서비스 대신 악성 프로세스를 실행하도록 조작할 수 있는 보안 취약점이 발생함.

 
점검 방법

found=0; for dir in /etc/init.d /etc/rc2.d /etc/rc3.d /etc/rc.d/init.d; do 
    [ -d "$dir" ] && stat -c "%A %U %G %n" "$dir"/* 2>/dev/null | awk '$1 ~ /.......w./ || $2 != "root" || $3 != "root" {found=1}'; 
done; ((found)) && echo 'FAILED' || echo 'CLEAN'

 
결과 기댓값 : CLEAN
 


2-44. SRV-084. 시스템 주요 파일 권한 설정 미흡 (위험도 : ★★★★★)

 
운영체제에서 시스템의 주요 파일(/etc/passwd, /etc/shadow, /etc/hosts 등)은 시스템 보안 및 사용자 인증과 관련된 핵심 정보가 포함된 파일임.
이러한 파일들의 권한이 과도하게 개방되었거나 루트(root)가 아닌 사용자가 소유하면, 파일 변조 및 정보 유출 위험이 발생할 수 있음.
 
점검 방법

if ! stat -c "%a %U" /etc/passwd 2>/dev/null | grep -Eq "^[0-6][04]* root$" || \
   ! stat -c "%a %U" /etc/shadow 2>/dev/null | grep -Eq "^[04]0* root$" || \
   ! stat -c "%a %U" /etc/hosts 2>/dev/null | grep -Eq "^[46]00 root$" || \
   ([ -e /etc/inetd.conf ] && ! stat -c "%a %U" /etc/inetd.conf 2>/dev/null | grep -Eq "^600 root$") || \
   ([ -e /etc/xinetd.conf ] && ! stat -c "%a %U" /etc/xinetd.conf 2>/dev/null | grep -Eq "^600 root$") || \
   ([ -d /etc/xinetd.d ] && ! find /etc/xinetd.d -type f -exec stat -c "%a %U" {} + 2>/dev/null | awk '$1 != "600" || $2 != "root" {exit 1} END {exit 0}') || \
   (! stat -c "%a %U" /etc/syslog.conf 2>/dev/null | grep -Eq "^[46][04]0 (root|bin|sys)$" && ! stat -c "%a %U" /etc/rsyslog.conf 2>/dev/null | grep -Eq "^[46][04]0 (root|bin|sys)$") || \
   ! stat -c "%a %U" /etc/services 2>/dev/null | grep -Eq "^[46][04][04] (root|bin|sys)$" || \
   ([ -e /etc/hosts.lpd ] && ([ "$(stat -c "%U" /etc/hosts.lpd 2>/dev/null)" != "root" ] || [ "$(stat -c "%a" /etc/hosts.lpd 2>/dev/null)" -ne 600 ])); then 
   echo 'FAILED'; 
else 
   echo 'CLEAN'; 
fi

 
결과 기댓값 : CLEAN
 


2-45. SRV-087. C 컴파일러 존재 및 권할 설정 미흡 (위험도 : ★★★☆☆)

 
C 컴파일러(gcc, cc)는 일반적으로 개발 목적으로 사용되지만, 공격자가 시스템에 침입하여 악성 코드를 작성하고 컴파일하여 악용할 가능성이 있습니다.
특히 others(기타 사용자)가 실행 권한을 가지면, 일반 사용자가 악성 프로그램을 컴파일하여 실행할 수 있는 보안 위험이 커집니다.
 
점검 방법

found=0; for comp in /usr/bin/cc /usr/bin/gcc /usr/ucb/cc /usr/ccs/bin/cc /opt/ansic/bin/cc /usr/vac/bin/cc /usr/local/bin/gcc; do     [ -x "$comp" ] && stat -c "%A" "$comp" | grep -qE ".......x." && found=1; done; ((found)) && echo 'FAILED' || echo 'CLEAN'

 
결과 기댓값 : CLEAN
 


 

2-46. SRV-091. 불필요하게 SUID, SGID bit가 설정된 파일 존재 (위험도 : ★★★★☆)

 
SUID(Set User ID)와 SGID(Set Group ID)는 실행되는 파일이 소유자의 권한으로 실행되도록 설정하는 기능으로, 정상적인 경우, passwd 같은 시스템 명령어에서 일반 사용자가 루트 권한으로 실행해야 하는 경우 사용됨.
하지만, SUID/SGID가 불필요한 파일에 설정되어 있거나, 취약한 바이너리에 적용될 경우, 권한 상승 공격에 악용될 수 있음.
 
점검 방법

find / -user root -type f \( -perm -04000 -o -perm -02000 \) -xdev 2>/dev/null | grep -Ev '/sbin/dump|/sbin/restore|/sbin/unix_chkpwd|/usr/bin/at|/usr/bin/lpq|/usr/bin/lpq-lpd|/usr/bin/lpr|/usr/bin/lpr-lpd|/usr/bin/lprm|/usr/bin/lprm-lpd|/usr/bin/newgrp|/usr/sbin/lpc|/usr/sbin/lpc-lpd|/usr/sbin/traceroute|/usr/bin/su' || echo 'CLEAN'

 
결과 기댓값 : CLEAN
 


2-47. SRV-092. 사용자 홈 디렉터리 설정 미흡 (위험도 : ★★★★☆)

 
사용자 홈 디렉터리는 각 사용자의 개인 데이터를 저장하는 중요한 영역입니다. 홈 디렉터리 설정이 적절하지 않으면, 비인가 접근이나 권한 상승 공격을 허용할 수 있음. 아래 2가지를 점검.
 
1. 홈 디렉터리 소유자 및 권한 설정 미흡
2. 홈 디렉터리 존재 여부 확인
 
점검 방법

awk -F: '$3 >= 1000 && $7 !~ /nologin|false/ {print $1, $6}' /etc/passwd | while read user home; do 
    [ -d "$home" ] && stat -c '%U %A' "$home" 2>/dev/null | awk -v u="$user" '$1!=u || $2 ~ /w..w..w/ {found=1}'; 
    [ ! -d "$home" ] && found=1;
done; ((found)) && echo 'FAILED' || echo 'CLEAN'

 
결과 기댓값 : CLEAN
 


2-48. SRV-093. 불필요한 world writable 파일 존재 (위험도 : ★★★★☆)

 
World Writable(모든 사용자가 쓰기 권한을 가진) 파일이 존재하면 보안 위협이 발생할 가능성이 높음.
공격자가 이러한 파일을 악의적으로 수정할 경우, 시스템을 침해하거나 권한 상승을 유도할 수 있음.
따라서 불필요한 World Writable 파일이 존재하는지 점검하고 필요 시 제거해야 함.
 
점검 방법

find / -type f -perm -2 -xdev 2>/dev/null | awk '{print}; END {if (NR==0) print "CLEAN"}'

 
결과 기댓값 : CLEAN
 


2-49. SRV-094. Crontab 참조파일 권한 설정 미흡 (위험도 : ★★★★☆)

 
cron 작업을 실행할 때 참조되는 디렉터리(/etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly)가 적절한 권한을 갖고 있는지 점검.
Others(다른 사용자)가 쓰기 권한을 가지고 있으면 악의적인 사용자가 크론 작업을 조작하여 악성 코드를 실행할 수 있음.
 
점검 방법

stat -c '%a %U %G' /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly 2>/dev/null | awk '($1 ~ /^(750|700)$/ && $2 == "root" && $3 == "root") {found=1} END {if (found) print "CLEAN"; else print "FAILED"}'

 
결과 기댓값 : CLEAN
 


2-50. SRV-095. 존재하지 않는 소유자 및 그룹 권한을 가진 파일 또는 디렉터리 존재 (위험도 : ★★★★☆)

 
사용자가 삭제된 후, 해당 사용자가 소유하던 파일이 남아 있는 경우, 해당 파일이 보안 리스크가 될 수 있음.
삭제된 사용자의 UID가 존재하지 않으면, 새로운 사용자가 같은 UID를 배정받아 예기치 않은 권한을 획득할 가능성이 있음.

점검 방법

find / -nouser -o -nogroup 2>/dev/null | wc -l


결과 기댓값 : 0
 


2-51. SRV-096. 사용자 환경파일의 소유자 또는 권한 설정 미흡 (위험도 : ★★★★☆)

 
사용자 환경파일(.profile, .bashrc, .bash_profile, .cshrc, .kshrc, .login, .exrc, .netrc)은 사용자의 로그인 환경을 설정하는 중요한 파일.
만약 others(다른 사용자)에게 쓰기 권한이 있다면 해커가 해당 파일을 수정하여 악성 코드 실행을 유도할 가능성이 있음.
 
점검 방법

find /home -maxdepth 2 -type f -regex '.*/\\.(profile|bashrc|bash_profile|cshrc|kshrc|login|exrc|netrc)' -exec stat -c '%a %U %n' {} + 2>/dev/null | awk '$1 !~ /^[46]4[04]$/ {print $3; found=1} END {if (!found) print "CLEAN"}'

 
결과 기댓값 : CLEAN
 


2-52. SRV-108 로그에 대한 접근통제 및 관리 미흡 (위험도 : ★★★☆☆)

 
로그 파일이 무단으로 접근, 수정, 삭제되지 않도록 적절한 접근 권한이 설정되어 있는지 확인하는 점검 항목.
비인가자가 로그에서 정보를 획득하거나 변조하는 위협을 방지하기 위해 로그 파일의 접근 권한을 제한해야 함.
 
점검 방법

find /var/log -type f -exec stat -c '%a %n' {} + | awk '
BEGIN {status="CLEAN"}
$1 > 644 && $2 !~ /wtmp|btmp/ {print "FAILED:", $2; status="FAILED"}
$2 ~ /wtmp/ && $1 > 664 {print "FAILED:", $2; status="FAILED"}
$2 ~ /btmp/ && $1 > 660 {print "FAILED:", $2; status="FAILED"}
END {print status}'

 
결과 기댓값 : CLEAN
 


2-53. SRV-109. 시스템 주요 이벤트 로그 설정 미흡 (위험도 : ★★★☆☆)

 
시스템 주요 이벤트 로그(syslog, rsyslog)가 적절히 설정되지 않으면, 보안 사고 발생 시 원인을 분석할 수 없음.
로그가 저장되지 않거나 불완전하게 기록되면, 공격자가 시스템을 침입한 후 로그 삭제 및 조작을 수행하여 탐지 회피 가능.
 
점검 방법

grep -E '^(\*.info|authpriv\.\*|mail\.\*|cron\.\*|\*.alert|\*.emerg)' /etc/rsyslog.conf /etc/syslog.conf 2>/dev/null | awk 'NR>0 {found=1} END {print (found ? "CLEAN" : "FAILED")}'

 
결과 기댓값 : CLEAN
 


2-54. SRV-115. 로그의 정기적 검토 및 보고 미수행 (위험도 : ★★★★☆)

 
시스템 보안 로그는 시스템 침입, 권한 상승, 서비스 오류, 계정 탈취 등 보안 위협을 탐지하는 데 중요함
만약 정기적으로 로그 검토 필요.

점검 방법

if ls -lt /var/log/{auth.log,secure,messages,wtmp,btmp,sulog,xferlog} 2>/dev/null | grep -v total | head -n 5 | awk '{print $9, $6, $7, $8}'; then echo 'LOG_FOUND'; else echo 'NO_LOGS'; fi

 
결과 기댓값 : LOG_FOUND
 


2-55. SRV-118. 주기적인 보안패치 및 벤더 권고사항 미적용 (위험도 : ★★★★★)

 
OS 및 소프트웨어의 보안 패치가 주기적으로 적용되지 않으면, 알려진 보안 취약점에 의해 공격자가 시스템을 악용할 가능성이 높아짐.
패치 미적용 시 원격 코드 실행(RCE), 권한 상승, DoS(서비스 거부) 공격, 악성코드 감염 등 다양한 보안 사고가 발생할 수 있음.
벤더(Linux 배포판 제공업체)에서 제공하는 최신 보안 패치가 적용되었는지 확인 필요.
 
점검 방법

// OS별 명령어
RHEL/CentOS	=> yum check-update --security 2>/dev/null
Fedora => dnf check-update --security 2>/dev/null
Ubuntu/Debian => apt list --upgradable 2>/dev/null
SUSE/OpenSUSE => zypper list-patches --category security 2>/dev/null
Arch Linux => checkupdates 2>/dev/null

 
결과 기댓값 : UPDATED
 


2-56. SRV-121. root 계정의 PATH 환경변수 설정 미흡 (위험도 : ★★★★★)

 
Linux/Unix에서는 PATH 환경변수에 지정된 디렉터리를 검색하여 명령어를 실행.
만약 PATH에 현재 디렉터리(.)가 포함되어 있다면, 루트 권한 탈취 공격, 우회 실행 공격, 시스템 무결성 손상 위험 존재.

점검 방법

echo $PATH | grep -Eq '^\.|:\.:|:\.$' && echo 'FAILED' || echo 'CLEAN'

 
결과 기댓값 : CLEAN
 


2-57. SRV-122. UMASK 설정 미흡 (위험도 : ★★★☆☆)

 
umask 값은 파일 및 디렉터리 생성 시 기본 권한을 결정하는 설정.
적절하지 않은 umask 설정은 파일 및 디렉터리가 과도한 권한을 부여받는 문제를 초래할 수 있음.
 
점검 방법

umask | grep -Eq '^0?[0-2][0-2][0-7]$' && echo 'CLEAN' || echo 'FAILED'

 
결과 기댓값 : CLEAN
 


2-58. SRV-127. 계정 잠금 임계값 설정 미비 (위험도 : ★★★★☆)

 
계정 로그인 실패 횟수에 대한 제한(임계값)이 설정되지 않을 경우, 공격자는 무작위 대입 공격(Brute-force Attack) 을 통해 시스템 계정을 탈취할 수 있음.
pam_faillock.so 모듈을 이용해 일정 횟수 이상 로그인 실패 시 계정을 일시적으로 잠금(lockout) 해야 함.
root 계정은 기본적으로 우회할 수 있으므로(no_magic_root 옵션 적용 필요) root 계정도 일정 횟수 이상 실패 시 잠기도록 설정해야 함.
 
점검 방법

( grep -Eq '^\s*auth\s+required\s+pam_faillock.so\s+.*deny=([1-9]|10).*unlock_timeout=[1-9][0-9]*' /etc/pam.d/password-auth && \
  grep -Eq '^\s*auth\s+required\s+pam_faillock.so\s+.*deny=([1-9]|10).*unlock_timeout=[1-9][0-9]*.*no_magic_root' /etc/pam.d/system-auth ) && echo 'CLEAN' || echo 'FAILED'

 
결과 기댓값 : CLEAN
 
만약 authconfig 명령어 입력 시 IMPORTANT: authconfig is replaced by authselect, please update your scripts. 이러한 문구가 나타난다면 failock.conf 파일 설정을 확인하셔야 합니다.

( grep -qE "deny\s*=\s*[1-9][0-9]*" /etc/security/faillock.conf && grep -qE "unlock_time\s*=\s*[1-9][0-9]*" /etc/security/faillock.conf ) && echo 'PASSED' || echo 'FAILED'

 
결과 기댓값 : PASSED
 
Debian / Ubuntu 의 경우에는 pam.d 모듈을 설치 후 /etc/pam.d/common-auth 파일을 점검하셔야 합니다.

grep -qE "^[[:space:]]*auth[[:space:]]+required[[:space:]]+pam_faillock.so[[:space:]]+.*deny=([1-9]|10).*unlock_time=[1-9][0-9]*.*" /etc/pam.d/common-auth && echo 'PASSED' || echo 'FAILED'

 
결과 기댓값 : PASSED
 


2-59. SRV-131. SU 명령 사용가능 그룹 제한 미비

 
su(Switch User) 명령어는 특정 사용자가 root 계정으로 전환할 수 있도록 허용함.
기본적으로 모든 사용자가 su 명령어를 실행할 수 있다면, 비인가 사용자가 root 비밀번호를 무작위로 대입(Brute-force)하는 공격이 가능함.
 
점검 방법 (Debian/Ubuntu 계열의 경우 sudo 그룹 확인)

( grep -q '^wheel' /etc/group && [[ "$(stat -c "%a" /usr/bin/su 2>/dev/null)" == "4750" ]] && grep -q 'pam_wheel.so' /etc/pam.d/su ) && echo 'CLEAN' || echo 'FAILED'

 
결과 기댓값 : CLEAN
 


2-60. SRV-133. Cron 서비스 사용 계정 제한 미비 (위험도 : ★★★☆☆)

 
cron은 특정 시간에 특정 작업을 실행하는 스케줄링 서비스로, 시스템 유지보수 및 자동화 작업을 수행하는 핵심 도구.
하지만 비인가된 사용자가 cron을 악용하면 시스템 자원을 과도하게 사용하거나 백도어를 설치하는 등의 보안 위협이 발생할 수 있음.
따라서 cron.allow 또는 cron.deny 파일을 통해 cron 사용 가능 계정을 명확하게 제한해야 함.
기본적으로, cron.allow가 존재하면 해당 파일 내 계정만 cron을 사용할 수 있음.
cron.allow와 cron.deny가 둘 다 없으면 root만 cron 사용 가능, 이 경우 보안상 안전한 상태로 간주됨.
 
점검 방법

( stat -c '%a %U %G' /etc/cron.allow /etc/cron.deny 2>/dev/null | awk '$1 !~ /^(640|600)$/ || $2 != "root" || $3 != "root" {exit 1}' ) && ( grep -qE '^[^#]' /etc/cron.allow /etc/cron.deny 2>/dev/null || [ ! -f /etc/cron.allow ] && [ ! -f /etc/cron.deny ] ) && echo 'CLEAN' || echo 'FAILED'

 
결과 기댓값 : CLEAN
 


2-61. SRV-142. 중복 UID가 부여된 계정 존재 (위험도 : ★★★★☆)

 
UID (User ID)는 리눅스 및 유닉스 시스템에서 사용자를 식별하는 고유한 번호로 시스템에서는 UID를 기반으로 파일 소유권 및 접근 제어를 관리함.
같은 UID를 공유하는 계정이 존재하면 특정 사용자의 행동을 추적하기 어려우며, UID를 공유한 사용자가 서로의 파일을 수정할 수 있음.
 
점검 방법

awk -F: '{uid[$3]++; if (uid[$3] > 1) { print $1, $3; found=1 } } END { if (!found) print "CLEAN" }' /etc/passwd

 
결과 기댓값 : CLEAN
 


2-62. SRV-144. /dev 경로에 불필요한 파일 존재 (위험도 : ★★★★☆)

 
/dev 디렉터리는 디바이스 파일(장치 파일)을 저장하는 공간으로 시스템 부팅 시 /dev 내에서 실제 존재하는 하드웨어 장치와 연동된 파일들만 생성되어야 함.
하지만, 루트킷(rootkit) 감염 시 /dev/.tmp 같은 숨겨진 파일이 악용될 수 있고 디바이스 파일이 아닌 일반 파일이나 스크립트가 존재할 경우, 시스템 보안이 위협받을 수 있음.

 
점검 방법

find /dev -type f -ls | awk '$3 != "b" && $3 != "c" {print; found=1} END {if (!found) print "CLEAN"}'

 
결과 기댓값 : CLEAN
 


2-63. SRV-147. 불필요한 SNMP 서비스 실행 (위험도 : ★★★☆☆)

 
SNMP(Simple Network Management Protocol)**는 네트워크 장치(서버, 라우터, 스위치 등)를 모니터링하고 관리하는 프로토콜.
그러나 SNMP 서비스가 불필요하게 실행될 경우, 공격자가 시스템 정보를 쉽게 수집할 수 있음.

 
점검 방법

systemctl is-active snmpd 2>/dev/null | grep -qE 'inactive|unknown' && echo 'inactive' || echo 'active'

 
결과 기댓값 : inactive 또는 unknown
 


2-64. SRV-148. 웹 서비스 정보 노출 (위험도 : ★★★☆☆)

 
웹 서버가 클라이언트에 응답할 때, 기본적으로 서버의 종류, 버전 정보, 운영 체제 정보를 포함할 수 있음.
이러한 정보가 공격자에게 노출되면, 해당 웹 서버의 알려진 취약점을 악용하는 공격(DOS, 원격 코드 실행 등)에 노출될 위험이 있음.

점검 방법

(grep -E '^[[:space:]]*ServerTokens[[:space:]]+Prod' /etc/httpd/conf/httpd.conf /usr/local/apache2/conf/httpd.conf 2>/dev/null && grep -E '^[[:space:]]*ServerSignature[[:space:]]+Off' /etc/httpd/conf/httpd.conf /usr/local/apache2/conf/httpd.conf 2>/dev/null) || echo 'CLEAN'

 
결과 기댓값 : CLEAN 또는 ServerTokens Prod / ServerSignature Off
 


2-65. SRV-158. 불필요한 Telnet 서비스 실행 (위험도 : ★★★☆☆)

 
Telnet 서비스는 네트워크를 통해 원격으로 서버에 접속할 수 있는 프로토콜이지만, 패스워드를 포함한 모든 데이터를 평문(Plain Text)으로 송수신하기 때문에 패킷 스니핑에 취약함.
따라서 보안 강화를 위해 Telnet 대신 SSH(Secure Shell)를 사용하는 것이 권장됨.
 
점검 방법

if systemctl is-active --quiet telnet.socket telnet.service; then echo 'fail' elif ss -tulnp | grep -q ':23 '; then echo 'fail' else echo 'pass' fi

 
결과 기댓값 : pass
 


2-66. SRV-161. ftpusers 파일의 소유자 및 권한 설정 미흡 (위험도 : ★★★☆☆)

 
ftpusers 파일은 FTP 서비스에 접근을 제한할 사용자 계정 목록을 정의하는 파일임.
만약 해당 파일이 존재하지 않거나, 권한 설정이 적절하지 않다면 비인가 사용자가 FTP 접근 제한을 우회할 가능성이 있음.
특히, 파일의 소유자가 root가 아니거나 권한이 너무 개방적일 경우 공격자가 파일을 수정하여 차단된 계정을 허용하는 등의 보안 문제가 발생할 수 있음.
 
점검 방법

if [ -f /etc/ftpusers ] || [ -f /etc/ftpd/ftpusers ] || [ -f /etc/vsftpd/ftpusers ] || [ -f /etc/vsftpd/user_list ]; then stat -c '%U %a %n' /etc/ftpusers /etc/ftpd/ftpusers /etc/vsftpd/ftpusers /etc/vsftpd/user_list 2>/dev/null | awk '$1 != "root" || $2 > 640 {print "FAILED: " $3 " (Owner: " $1 ", Perm: " $2 ")"; found=1} END {if (!found) print "CLEAN"}'; else echo 'CLEAN'; fi

 
결과 기댓값 : CLEAN
 


2-67. SRV-163. 시스템 사용 주의사항 미출력 (위험도 : ★☆☆☆☆)

 
로그인 시 시스템 사용 주의사항(Banner 또는 MOTD)이 출력되지 않으면, 비인가자가 시스템에 접근했을 때 제재 없이 악의적인 행위를 시도할 가능성이 증가함.
사용자가 로그인할 때 경고 문구를 표시하여 부적절한 사용을 사전에 방지해야 함.
 
점검 방법

grep -Ev '^\s*(#|$)' /etc/motd /etc/issue.net 2>/dev/null || echo 'MISSING'

 
결과 기댓값 : 지정한 로그인 문구가 출력되면 됨
 


2-68. SRV-164. 구성원이 존재하지 않는 GID 존재 (위험도 : ★★☆☆☆)

 
일반적으로, 그룹(GID)은 사용자 계정과 연결되지만, 소속된 사용자가 없는 그룹이 남아 있는 경우 파일 및 디렉터리 소유권 문제, 권한 상승 공격 가능성 존재
 
점검 방법

awk -F: 'BEGIN { needed["libvirt"] = 1; needed["render"] = 1; needed["input"] = 1; needed["ssh_keys"] = 1 } NR == FNR { user_gids[$4] = 1; next } $3 >= 500 && !($3 in user_gids) && !($1 in needed) { print $1 } END { if (!found) print "CLEAN" }' /etc/passwd /etc/group

 
결과 기댓값 : CLEAN
 


2-69. SRV-165. 불필요하게 Shell이 부여된 계정 존재 (위험도 : ★☆☆☆☆)

 
리눅스 시스템에서는 일부 계정이 로그인을 위한 용도가 아님에도 불구하고, 쉘(Shell) 접근 권한을 가지고 있을 경우 보안 위험이 증가할 수 있음.
특히, 시스템 계정(예: daemon, sync, shutdown, halt 등)은 원격 로그인이 필요하지 않으므로, /bin/false 또는 /sbin/nologin을 설정하는 것이 일반적.
 
점검 방법

awk -F: '$1 ~ /^(daemon|bin|sys|adm|listen|nobody|nobody4|noaccess|diag|operator|games|gopher)$/ && $NF !~ /\/sbin\/nologin|\/bin\/false/ {print $1; found=1} END {if (!found) print "CLEAN"}' /etc/passwd

 
결과 기댓값 : CLEAN
 


2-71. SRV-166. 불필요한 숨김 파일 또는 디렉터리 존재 (위험도 : ★☆☆☆☆)

 
리눅스 시스템에서는 파일명 앞에 .(dot)가 붙은 파일 또는 디렉터리는 기본적으로 숨겨져 있기 때문에 관리자가 쉽게 인지하기 어려움.
이러한 숨김 파일은 정상적인 시스템 파일일 수도 있지만, 공격자가 악성코드, 루트킷, 또는 백도어를 숨기는 용도로 악용할 수도 있음.

점검 방법

find / -type f -name '.*' \
                        ! -path '/proc/*' ! -path '/sys/*' ! -path '/dev/*' ! -path '/run/*' \
                        ! -path '/root/*' ! -path '/home/*' ! -path '/var/tmp/*' ! -path '/tmp/*' \
                        ! -path '/boot/.*' ! -path '/etc/selinux/*' ! -path '/etc/skel/*' \
                        ! -path '/etc/.pwd.lock' ! -path '/etc/redhat-access-insights/*' \
                        ! -path '/etc/.updated' ! -path '/var/lib/rpm/*' ! -path '/var/lib/flatpak/*' \
                        ! -path '/var/lib/gdm/*' ! -path '/var/spool/at/*' ! -path '/var/.updated' \
                        ! -path '/usr/lib64/.*' ! -path '/usr/share/man/*' ! -path '/usr/share/kde4/*' \
                        ! -name '.bash_history' \
                        2>/dev/null | grep -v '^CLEAN' || echo 'CLEAN'

 
결과 기댓값 : CLEAN
 


2-72. SRV-174. 불필요한 DNS 서비스 실행 (위험도 : ★☆☆)

 
DNS(Domain Name System) 서비스는 도메인 이름과 IP 주소를 매핑하는 역할을 수행하지만, 불필요하게 운영되면 보안 취약점이 발생할 수 있음.
공격자는 DNS 캐시 포이즈닝(DNS Cache Poisoning), 서비스 거부 공격(DDoS), 영역 전송(Zone Transfer) 공격 등을 통해 시스템을 악용할 가능성이 있음.

 
점검 방법

if ! pgrep -x named >/dev/null; then echo 'CLEAN'; else echo 'FAILED'; fi

 
결과 기댓값 : CLEAN
 


<- SRV-001 ~ 070

반응형
Comments