주요정보통신기반시설 기술적 취약점 분석 평가 가이드

Unix 서버 취약점 분석 평가 _ 2. 파일 및 디렉터리 관리

jeff_kim 2024. 7. 30. 18:41

항목 중요도: 상

 

2.1. root 홈, PATH 디렉터리 권한 및 패스 설정

  • 점검 내용: root 계정 PATH 환경 변수에 "."가 포함되어 있는지 점검
  • 점검 목적: 비인가자가 불법적으로 생성한 디렉터리 및 명령어를 우선으로 실행되지 않도록 설정하기 위해 환경변수 점검이 필요
  • 보안 위협: root 계정의 환경 변수에 정상적인 명령어(ex. ls, mv, cp등)의 디렉터리 경로보다 현재 디렉터리를 지칭하는 "." 표시가 우선하면 현재 디렉터리에 변조된 명령어가 삽입되었을때 악의적인 기능이 실행될 수 있다
# 확인 명령어
echo $PATH

# 조치 방법
root 계정의 환경 변수 설정파일(/.profile,/.cshrc)과 /etc/profile 등에서 환경변수에 포함되어있는 "."를 마지막으로 이동시킨다

vi /etc/profile

PATH=.:$PATH:$HOME/bin -> PATH=$PATH:$HOME/bin:.


* Unix의 환경변수 실행 순서
1. /etc/profile
2. root의 계정 환경변수 파일
3. 일반 계정의 환경변수 파일


# 쉘에 따라 참조되는 환경 설정파일
/bin/sh -> /etc/profile, $HOME/.profile
/bin/csh -> $HOME/.cshrc, $HOME/.login, /etc/.login
/bin/ksh -> /etc/profile, $HOME/.profile, $HOME/kshrc
/bin/bash -> /etc/profile, $HOME/.bash_profile

 

 2.2. 파일 및 디렉터리 소유자 설정

  • 점검 내용: 소유자가 불분명한 파일이나 디렉터리가 존재하는지 여부를 점검
  • 점검 목적: 소유자가 존재하지 않는 파일 및 디렉터리를 삭제 및 관리하여 임의의 사용자가 해당 파일을 열람, 수정하는 행위를 사전에 차단하기 위해서임
  • 보안 위협: 소유자가 존재하지 않는 파일의 UID와 동일한 값으로 특정 계정의 UID 값을 변경하면 해당 파일의 소유자가 되어 모든 작업이 가능해짐
# 확인 명령어
find / -nouser -print
find / -nogroup -print

소유자 및 그룹이 없는 파일은 파일 속성 해당 필드에 숫자로 표시됨
ex) rwxr-xr-x 500 500 test.txt

# 조치 방법
소유자가 존재하지 않은 파일 및 디렉터리 삭제 또는 소유자 변경

1. 삭제
rm <file_name>

2. 필요시, 소유자 변경
chown <user_name_> <file_name>

 

2.3. /etc/passwd 파일 소유자 및 권한 설정

  •  점검 내용: /etc/passwd 파일 권한 적절성 점검
    • /etc/passwd: 사용자의 ID, PW, UID, GID, Home Directory, Shell INFO 를 담고 있는 파임
  • 점검 목적: /etc/passwd 파일의 임의적인 변경을 차단하기 위함을 통해 비인가자가 권한을 상승하는 것을 막기 위함
  • 보안 위협: 관리자 외 사용자가 /etc/passwd/ 파일을 수정한다면 사용자 정보를 변조하여 쉘 변경, 사용자 추가 및 삭제, root를 포함한 사용자 권한 획득 가능
# 확인 명령어 및 확인 사항
ls -al /etc/passwd

1. 파일의 소유자가 root 인지 확인
2. 파일의 권한이 644 이하가 아닌 경우

# 조치 방법
chown root /etc/passwd
chmod 644 /etc/passwd

 

2.4. /etc/shadow 파일 소유자 및 권한 설정

  • 점검 내용: /etc/shadow 파일 권한 적절성 점검
    • /etc/shadow: 시스템에 등록된 모든 계정의 패스워드를 암호화된 형태로 저장 및 관리하고 있는 파일
  • 점검 목적: /etc/shadow 파일을 관리자만 제어할 수 있게하여 비인가자들의 접근을 차단해야함
  • 보안 위협: shadow 파일은 패스워드를 암호화하여 저장하고 있다. 해당 파일의 암호화된 해시값을 복호화(크래킹)하여 비밀번호 탈취가 가능함
# 명령어 및 확인 사항
ls -al /etc/shadow

1. 파일 소유자가 root 인지
2. 파일 권한이 400이 아닌 경우

# 조치 방법
chown root /etc/shadow
chmod 400 /etc/shadow

 

2.5. /etc/hosts 파일 소유자 및 권한 설정

  • 점검 내용: /etc/hosts 파일의 권한 적절성 점검
    • /etc/hosts
      • IP와 Hostname을 매핑하는 파일, 일반적으로 인터넷으로 외부 통신 시 주소를 찾기 위해서 DNS 보다 hosts 파일을 먼저 참조한다
      • 문자열 주소로 부터 IP 주소를 수신받는 DNS 서버와는 달리, 파일 내 직접 문자열 주소와 IP 주소를 매칭하여 기록, DNS 서버 접근 이전에 우선적으로 확인 후 문자열이 hosts 파일 내부에 존재할 시 그 문자열에 매핑되어있는 IP 주소로 연결된다
    • Pharming(파밍): 사용자 DNS 또는 hosts 파일을 변조함으로써 정상적인 사이트로 오인하여 접속하도록 유도한 뒤 개인정보를 탈취하는 기법
  • 보안 위협: hosts 파일에 비인가자의 쓰기 권한이 존재할 경우, 악의적인 시스템의 IP를 등록하여, 정상적인 DNS를 우회하여 악성사이트로 유도하는 파밍 공격등에 악용될 수 있다
# 확인 및 확인 사항
ls -al /etc/hosts

1. 소유자가 root가 아닌지 확인
2. 파일 권한이 600 이하가 아닌 경우

# 조치 사항
chown root /etc/hosts
chmod 600 /etc/hosts

# 조치 시 영향
hosts 권한을 600으로 변경 -> 일반 사용자 권한으로 사용이 불가
hosts 파일에 시스템 정보가 설정되어있는 경우 hosts 파일을 참조하는 서비스를 확인하여 조치를 취해야함

 

2.6. /etc/(x)inetd.conf 파일 소유자 및 권한 설정

  • 점검 내용: /etc/(x)inetd.conf 파일 권한 적절성 점검
    • (x)inted (슈퍼데몬): 자주 사용하지 않는 서비스가 상시 실행되어 메모리를 점유하는 것을 방지하기 위해 슈퍼데몬(데몬의 데몬)에 자주 사용하지 않는 서비스를 등록, 요청 시에만 해당 서비스를 실행시키고 요청이 끝나면, 서비스를 종료하는 일을 한다
  • 점검 목적: 파일의 관리자만 제어할 수 있게 하여 비인가자들의 임의적인 파일 변조를 방지
  • 보안 위협: (x)inetd.conf 파일에 소유자외 쓰기 권한이 부여된 경우, 등록된 서비스를 변조하거나 악의적인 서비스(프로그램)을 등록할 수 있음
# 확인 및 확인 사항
ls -al /etc/inetd.conf

ls -al /etc/xinetd.conf
ls -al /etc/xinetd.d/*

1. Linux는 운영체제 버전에 따라 inetd 또는 xinetd를 사용하고 있으므로 사용하고 있는 데몬 확인이 필요하다
2. 소유자가 root 인지
3. 파일 권한이 600이 아닌 경우

# 조치 사항
chown root /etc/inetd.conf
chmod 600 /etc/inetd.conf

chown root /etc/xinetd.conf
chmod 600 /etc/xinetd.conf

2.7. /etc/syslog.conf 파일 소유자 및 권한 설정

  • 점검 내용: /etc/syslog.conf 파일 권한 적절성 점검
    • /etc/syslog.conf: syslogd 데몬 실행 시 참조되는 설정 파일로 시스템 로그 기록의 종류, 위치 및 Level을 설정할 수 있다
  • 점검 목적: /etc/syslog.conf 파일 권한 적절성을 점검하여, 비인가자의 임의적 설정파일 변조를 방지하기 위함
  • 보안 위협: syslog.conf 파일의 설정 내용을 참조하여 로그의 저장위치가 노출, 로그를 기록하지 않도록 설정, 대량의 로그를 기록하게하여 시스템 과부하를 유도할 수 있다
# 확인 및 확인 사항
ls -al /etc/syslog.conf

1. 파일 소유자가 root 인지
2. 파일 권한이 640이 아닌 경우

# 조치 방법
chown root /etc/syslog.conf
chmod 640 /etc/syslog.conf

# 조치 시 영향
root,bin,sys등 시스템에서 사용하는 계정이 아닌 일반 계정에게 소유 권한이 부여되지 않도록 해야한다

 

2.8. /etc/services 파일 소유자 및 권한 설정

  • 점검 내용: /etc/services 파일 권한 적절성 점검
    • /etc/services: 서비스 관리를 위해 사용되는 파일, 해당 파일에 서버에서 사용하는 모든 포트들에 대해 정의되어있고, 필요 시 기본 포트 사용을 변경하여 네트워크 서비스를 운용할 수 있다
  • 점검 목적: 비인가자들의 임의적인 파일 변조를 방지하기 위함
  • 보안 위협: services 파일의 접근권한이 적절하지 않을 경우 비인가 사용자가 운영포트를 변경, 정상적인 서비스를 제한하거나, 허용되지 않은 포트를 오픈하여 악성 서비스를 의도적으로 실행 할 수 있다
# 확인 및 확인 사항
ls- la /etc/services

1. 파일의 소유자가 root가 아니거나
2. 파일 권한이 644가 아닌 경우 

# 조치 방법
가능 소유자: root,bin,sys

chown root /etc/services
chmod 644 /etc/services

 

2.9. SUID, SGID 설정 파일 점검

  • 점검 내용: 불필요하거나 악의적인 파이레 SUID, SGID 설정 여부 점검
    • SUID: 설정된 파일 실행 시, 특정 작업 수행을 위하여 일시적으로 파일 소유자 권한을 얻게 된다
    • SGID: 설정된 파일 실행 시 , 특정 작업 수행을 위하여 일시적으로 파일 소유 그룹 권한을 얻게 된다
  • 점검 목적: 불필요한 SUID,SGID 설정 제거로 악의적인 사용자의 권한상승을 방지하기 위함
  • 보안 위협: SUID,SGID 파일의 접근권한이 적절하지 않을 경우 SUID, SGID 설정된 파일로 특정 명령어를 실행하여 root 권한 획득 가능
# 확인
ls -alL <check_file] | awk '{print $1}' | grep -i 's'
find / -type f -perm -4000 2> /dev/null

# 조치 방법
1. 불필요한 SUID, SGID 설정된 바이너리 제거
2. 애플리케이션에서 생성한 파일이나, 사용자가 임의로 생성한 파일이 의심스럽거나 특이한 파일 발견 시  SUID 제거 필요
3. 필요 시  특정 그룹에서만 사용하도록 설정

SUID 제거
chmod -s <file_name>

주기적 감사
find / -user root -type f \( -perm -04000 -o -perm -02000 \) -xdev -exec ls -al {} \;

필요 시 특정 그룹에서만 사용 가능하도록 제한적인 설정(임의의 그룹만 가능
/usr/bin/chgrp <group_name> <setuid_file_name>
/usr/bin/chmod 4750 <setuid_file_name>

# 조치 시 영향
SUID 제거 시 OS 및 운용 프로그램 등 서비스 정상작동 유무 확인 필요

 

 

2.10. 사용자, 시스템 시작 파일 및 환경파일 소유자 및 권한 설정

  • 점검 내용: 홈 디렉터리 내의 환경변수 파일에 대한 소유자 및 접근 권한이 관리자 또는 해당 계정으로 설정되어 있는지 점검
    • 환경 변수 파일 종류
      • .profile
      • .kshrc
      • .cshrc
      • .bashrc
      • .bash_profile
      • .login
      • .serc
      • .netrc 등
  • 점검 목적: 환경 변수 조작으로 인한 보안 위험을 방지
  • 보안 위협: 홈 디렉터리 내의 사용자 파일 및 사용자별 시스템 시작파일 등과 같은 환경 변수 파일의 접근 권한 설정이 적절하기 않을 경우 비인가자와 환경변수 파일을 변조하여 정상 사용중인 사용자의 서비스가 제한 될 수 있음
# 확인 및 확인 사항
ls -l <home_directory_pathfile>

1. 파일 소유자가 root 또는 해당 꼐정으로 설정되어있는지 확인
2. 소유자 이외의 사용자에게 쓰기 권한이 부여되어 있는지 확인

# 조치 방법
1. 소유자 변경
chown <user_name> <file_name>

2. 일반 사용자 쓰기 권한 제거 방법
chmod o-w <file_name>

 

2.11. world writable 파일 점검

  • 점검 내용: 불필요한 world writable 파일 존재 여부 점검
    • world writable: 파일의 내용응 소유자나 그룹외 모든 사용자게 대해 쓰기가 허용된 파일(권한 777(rwxrwxrwx))
  • 점검 목적: world writable 파일을 이용한 시스템 접근 및 악의적인 코드 실행 방지
  • 보안 위협: 시스템 파일과 같은 중요파일에 설정이 될 경우, 일반 사용자 및 비인가된 사용자가 해당 파일을 임의로 수정, 삭제가 가능해진다
# 확인
find / -type f -perm -2 -exec ls -al {} \;

# 조치 방법
파일 존재 여부를 확인하고 불필요한 경우 제거

1. 일반 사용자 쓰기 권한 제거 방법
chmod o-w <file_name>

2. 파일 삭제 방법
rm -rf <file_name>

 

2.12. /dev에 존재하지 않는 device 파일 점검

  • 점검 내용: 존재하지 않는 device 파일 존재 여부 점검
    • /dev 디렉터리: 논리적 장치 파일을 담고 있는 /dev는 /devices 디렉터리에 있는 물리적 장치 파일에 대한 심볼릭 링크이다.
    • 예로 들어, rmt0를 rmto로 잘못 입력한 경우 rmto 파일이 새로 생성되는 것과 함게 디바이스 이름 입력 오류 시 root 파일 시스템이 에러를 일으킬 때까지 /dev 디렉터리에 계속해서 파일을 생성함
  • 점검 목적: 실제 존재하지 않는 디바이스를 찾아 제거함으로써 root 파일 시스템 손상 및 다운 등의 문제를 방지
  • 보안 위협: 공격자는 rootkit 설정파일들을 서버 관리자가 쉽게 발견하지 못하도록 /dev에 device 파일인 것 처럼 위장하는 수법을 많이 사용
# 확인
find /dev -type f -exec ls -al {} \;

# 조치 방법
확인 후 major,minor  number를 가지지 않는 device일 경우 삭제

 

2.13. $HOME/.rhosts, hosts.equiv 사용금지

  • 점검 내용: /etc/hosts.equiv 파일 및 .rhosts 파일 사용자를 root 또는 해당 계정으로 설정한 뒤 권한을 600으로 설정하고 해당파일 설정에 '+' 설정(모든 호스트 허용)이 포함되지 않도록 설정되어 있는지 점검
    • 'r'command: 인증 없이 관리자의 원격접속을 가능케하는 명령어들로 rsh(remsh),rlogin,rexec 등이 있으며, 포트번호 512,513,514(TCP)를 사용한다
  • 점검 목적: 'r'command 사용을 통한 원격 접속은 인증 없이 관리자 원격접속이 가능하므로 서비스 포트를 차단해야함
  • 보안 위협
    • rlogin, rsh 등과 같은 'r' command의 보안 설정이 적용되지 않은 경우, 원격지의 공격자가 관리자 권한으로 목표 시스템상의 임의의 명령을 수행시킬 수 있고, 중요 정보 유출 및 시스템 장애를 유발 시킬 수 있다. 또한 공격자의 백도어 등으로 활용이 가능함
    • r-command(rlogin,rsh등) 서비스의 접근 통제에 관련된 파일로 권한설정을 미 적용한 경우 서비스 사용 권한을 임의로 등록하여 무단 사용을 가능케함
# 확인
1. 파일 소유자 및 권한 확인
ls -al /etc/hosts.equiv
ls -al $HOME/.rhosts

2. 계정 별 '+' 부여 적절성 확인
cat /etc/hosts.equiv
cat $HOME/.rhosts

/etc/hosts.equiv -> 서버 설정 파일
$HOME/.rhosts -> 개별 사용자의 설정 파일

# 확인 사항
1. /etc/hosts.equiv 및 $HOME/.rhosts 파일의 소유자가 root 인지
2. 파일 권한이 600이 아닌 경우

# 조치 방법
1. /etc/hosts.equiv 및 $HOME/.rhosts 파일의 소유자를 root 또는 해당 계정으로 변경
chown root /etc/hosts.equiv
chown <user> $HOME/.rhosts

2. /etc/hosts.equiv 및 $HOME/.rhosts 파일의 권한을 600 이하로 변경
chmod 600 /etc/hosts.equiv
chmod 600 $HOME/.rhosts

3. /etc/hosts.equiv 및 $HOME/.rhosts 파일에서 '+'를 제거하고 허용 호스트 및 계정 등록
cat /etc/hosts.equiv (or $HOME/.rhosts)

+ + 모든 호스트의 계정 신뢰
+ test 모든 호스트의 test 계정을 신뢰
Web1 + Web1 호스트의 모든 계정을 신뢰

 

2.14. 접속 IP 및 포트 제한

  • 점검 내용: 허용할 호스트에 대한 접속 IP 주소 제한 및 포트 제한 설정 여부 점검
    • TCP Wrapper: 네트워크 서비스에 관련된 트래픽을 제어하고 모니터링 할 수 있는 UNIX 기반 방화벽 툴
    • IPFilter: UNIX 계열에서 사용하는 공개형 방화벽 프로그램으로써 Packet Filter로 시스템 및 네트워크 보안에 아주 강력한 기능을 보유한 프로그램
    • IPtables: 리눅스 커널 방화벽이 제공하는 테이블들과 그것을 저장하는 체인, 규칙들을 구성할 수 있게 해주는 응용프로그램
  • 점검 목적: 허용한 호스트만 서비스를 사용하게 하여 서비스 취약점을 이용한 외부 공격을 방지하기 위함
  • 보안 위협: 허용할 호스트에 대한 IP 및 포트제한이 적용되지 않은 경우, Telnet, FTP와 같은 보안에 취약한 네트워크 서비스를 통해 불법적인 접근 및 시스템 침해사고 발생 가능
# 확인
1. TCP Wrapper 사용할 경우
All deny 적용 확인 및 접근 허용 IP 적절성 확인
cat /etc/hosts.deny
cat /etc/hosts.allow

2. IPtables 사용할 경우
iptables -L

# 조치 방법
OS에 기본적으로 제공하는 방화벽 애플리케이션이나 TCP Wrapper와 같은 호스트별 서비스 제한 애플리케이션을 사용하여
접근 허용 IP 등록

## IPtables 사용하는 경우
1. iptables 명렁어를 통해 접속할 IP 및 포트 정책 추가 (ex. SSH)
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

2. 설정 저장
/etc/rc.d/init.d/iptables save

## IPfilter 사용하는 경우
1. vi 편집기를 이용해 /etc/ipf/ipf.conf 파일 열기

2. 접속할 IP 및 포트 정책 추가 (ex. SSH)
pass in quick proto tcp from 192.168.1.0/24 to any port = 22 keep state
block in quick proto tcp from any to any port = 22 keep state

## TCP Wrapper 사용하는 경우
1. vi 편집기를 이용해 /etc/hosts.deny (파일 없을 시 생성)
2. 신규 삽입 (ALL Deny 설정)
(before) 설정 없음
(after) ALL:ALL

3. vi 편집기를 이용해 /etc/hosts.allow (파일 없을 시 생성)
(before) 설정 없음
(after) sshd : 192.168.0.148, 192.168.0.6
  • TCP Wrapper 접근 제어 가능 서비스
    • SYSTAT,FINGER,FTP,TELNET,RLOGIN,RSH,TALK,EXEC,TFTP,SSH
  • TCP Wrapper는 다음 두 파일에 의해 접근이 제어 됨
    • /etc/hosts.deny -> 시스템 접근을 제한할 IP 설정
    • /etc/hosts.allow -> 시스템 접근을 허용할 IP 설정
    • 위의 두 파일이 존재하지 않을 시 == 모든 접근 허용