3. 유닉스 서버(Unix Server) 취약점 진단

by Toff

   개요
이번 포스팅에서는 시스템 진단 중 Unix 서버 취약점 진단에 대해서 알아보고자 한다. Unix 서버 취약점 진단에서는 쉘 스크립트를 사용하여 취약점 진단을 하며 해당 결과값을 토대로 인터뷰와 수동점검을 진행한다. 해당 쉘 스크립트는 행정자치부에서 나온 주요정보통신기반시설 가이드를 기준으로 작성되었다. 고객사마다 환경은 모두 제 각각이기에 스크립트 결과물에서 취약한 부분뿐만 아니라 양호한 부분까지 반드시 수동으로 한번 더 진단해야 한다. 그렇기에 반드시 수동으로 점검해줘야 할 부분들과 기준은 있지만 고객사마다 상대적으로 진단해야 되는 부분들과 기타 알아두면 좋은 사항들에 대해 알아보도록 하자.


   주의 깊게 봐야할 항목들
주요정보통신기반시설 가이드 중 Unix 서버 취약점 항목은 그림 1-1과 같다. 이 중에서 주의깊게 봐야하는 항목들만 살펴보도록 하자. 해당 포스팅에서의 진단 대상은 다소 낮은 버전인 CentOS 6.3이다. 각 항목에 대한 기본적인 설명은 아예 하지 않거나 가볍게 다루기에 주요정보통신기반시설 가이드와 같이 보도록 하자.
그림 1-1 주요정보통신기발시설 가이드 > Unix 서버 취약점 항목

각 항목을 진단하기에 앞서, 유닉스에서는 1.1과 같이 서비스를 확인해야 되는 항목들이 많다. 이럴때는 반드시 다음 세가지 명령어를 모두 사용해 점검해야 한다.
1. cat /etc/services | grep 서비스 명
2. ps -ef | grep 포트 번호 or 서비스 명
3. netstat -ant | grep 포트 번호

서비스는 존재하지 않는데 해당 포트가 열려있다거나, 포트는 닫혀 있는데 서비스가 존재하는 경우 모두 취약이라고 판단한다.

1.1 root 계정 원격 접속 제한
telnet 서비스가 활성화 되어 있다면 구체적인 진단까지 할 필요 없다. 무조건 취약이라고 판단한다.

1.2 패스워드 복잡성 설정
낮은 버전의 리눅스 버전에서는 패스워드 복잡성 설정 정책이 없다. 이런 경우에는 먼저 /etc/shadow 파일을 확인해 패스워드 암호화 방식을 확인한다. 만약 md5 로 암호화 되있을 경우에는 패스워드를 크랙 후 담당자에게 보고해야하며 취약이라고 판단한다. 그림 1-2 와 같이 안전한 $6$ (sha512) 으로 설정되어 있다면 인터뷰를 통해 패스워드 정책을 물어봐야 한다.
그림 1-2 /etc/shadow sha512 암호화 방식 설정

정보통신망법 대상이라면 정보통신망법 고시에 제시되어 있는 기준을 만족해야 한다. 정보통신망법 고시는 다음과 같다. 정보통신망법 대상이 아니라면 회사의 패스워드 정책에 만족해야 한다.
- 개인정보의 기술적관리적 보호조치 기준(제4조 접근통제)에 의해서 안전하게 2종류 10자리 이상 혹은 3종류 8자리 이상을 사용하며, 반기별로 1회 이상 변경할 것

1.3 계정 잠금 임계값 설정
계정 잠금 설정이 되어 있지 않아도 회사 자체에서 접근 제어 솔루션을 사용하고 있다면 양호이다. 이 부분은 반드시 인터뷰를 진행해 확인해야 한다.

2.1 root 홈, 패스 디렉터리 권한 및 패스 설정
해당 취약점은 환경 변수에 '.' 이 있을 경우 사용자가 명령어 이름으로 된 백도어 파일을 심어두었다면 관리자가 아무것도 모른 채 명령어를 실행하면 백도어 파일이 실행될 수 있다.

2.5 /etc/hosts 파일 소유자 및 권한 설정
명시되어 있는 권한 기준은 600(rw-------)이지만 취약점으로 발견되어도 바로 조치를 못할 가능성이 크다. 서버에서 많이 참조하는 파일이기에 600으로 설정하게 되면 장애가 생길 확률이 높다. 그렇기에 고객사마다 상대적으로 위험 수용 혹은 양호로 판단할 수 도 있다.

2.6 /etc/(x)inetd.conf 파일 소유자 및 권한 설정
버전에 따라 xinetd / inetd로 나뉜다. 기존이 inetd 이며 버전 업그레이드가 되면서 xinetd 로 변경되었다.

2.7 /etc/syslog.conf 파일 소유자 및 권한 설정
- 위와 동일하게 버전에 따라 syslog.conf / rsyslog.conf로 나뉜다. 버전 업그레이드가 되면서 대부분 rsyslog.conf로 변경되었다.

2.9 SUID, SGID, Sticky bit 설정파일 점검 
해당 설정을 가지고 있는 목록들을 검사하고 반드시 담당자와 인터뷰를 실시해 양호/취약을 판단해야 한다. 해당 파일들의 용도를 알고 있으며 주기적으로 관리하고 있다면 양호라고 판단한다.

2.11 world writable 파일 점검
other에 w 권한이 있어도 인터뷰를 통해 반드시 확인해야 한다. 실제로는 수 많은 파일들이 나오기에 지속적으로 관리하고 있는지에 대해서 인터뷰해야 한다.
수동 점검 시에는 아래의 명령어를 사용하면 보기 편하다.
find / -perm -2 -ls | awk '{print $3 ":" $5 ":" $6 ":" $11}' | egrep -v "^l|^s|^c"
> find 명령어를 사용해 other에 w권한이 있는 파일을 모두 검색한다.
> awk 명령어를 사용해 3,5,6,11 열만을 출력한다.
> egerp -v 명령어를 사용해 l, s, c로 시작하는 파일을 제외시키고 검색한다.

그림 1-3 world writable 파일 점검

awk
> ls -al 명령어만 사용하면 그림 1-4 와 같이 출력된다. world writable 과 같이 많은 파일이 출력되었을 때 보기에 다소 불편하다.
그림 1-4 ls -al

> 그림 1-5와 같이 awk 명령어를 사용해 1번, 8번 열만을 출력한다면 그림 1-5와 같이 권한과 파일/디렉터리명만 보기 쉽게 출력해준다.
그림 1-5 awk 명령어 사용

2.12 /dev에 존재하지 않는 device 파일 점검
2.11 world writable 과 비슷한 항목이다. 그림 1-6과 같이 굉장히 많은 항목들이 나온다. 인터뷰를 통해 모두 사용중인지, 지속적으로 관리하고 있는지에 대해 물어봐야 한다.
그림 1-6 /dev 파일 검색

3.2 Anonymous FTP 비활성화
이전 윈도우에서는 FTP를 사용중이라면 하위 항목에 상관없이 모두 취약이라고 판단했다. 하지만 컨설턴트와 고객사의 입장에 따라 [FTP 사용 여부] 에 대해서는 무조건 취약이지만 그 하위 항목에 대해서는 상대적일 수 있다. 여기서 중요한건 컨설턴트의 일관성이다.

예를 들어 FTP 사용 여부는 취약으로 판단하고 고객사의 입장에 따라 하위 항목(Anonymous FTP 비활성화, FTP 접근 제어 등)은 설정이 제대로 되어 있어 양호로 판단하였다. 하지만 다음 항목에서 TELNET 사용 여부는 취약으로 판단하고 하위 항목이 제대로 되어 있음에도 TELNET 사용이 취약이니 모두 취약으로 판단하면 일관성이 없는 것이 된다. 이처럼 상대적으로 판단하되 일관성은 반드시 유지해야 한다.

3.17 Apache 디렉터리 리스팅 제거
Options Indexes FollowSymLinks 와 같이 설정되어 있으면 취약이다.
 와 같이 - 를 추가해주거나 아예 해당 라인을 삭제하면 된다.

Apache 항목들에서는 웹 서버로 지정되있는 디렉터리가 많을 수 있기에 모두 검사해야 한다.
Q) /var/www/html/     설정 = Options -Indexes FollowSymLinks
    /var/www/html/test 설정 = Options Indexes FollowSymLinks 으로 설정 되어 있을 때 디렉터리 리스팅 제거 항목은 취약인가?
A) 취약하다.  디렉터리의 경우 /var/www/html/test 와 같이 세부 디렉터리에 권한 우선권이 있다. test 디렉터리는 상위 디렉터리가 아닌 test 디렉터리의 권한으로 실행된다.

3.18 Apache 웹 프로세스 권한 제한
권한은 그림 1-7 과 같이 출력된다. 첫 줄과 마지막 줄을 제외하고 모두 Apache 권한으로 구동되고 있다면 양호로 판단한다.
그림 1-7 Apache 실행 권한 확인

그림 1-8 과 같이 httpd.conf 파일에서도 권한 확인이 가능하다.
그림 1-8 Apache 실행 권한 확인 2

4.1 최신 보안패치 및 벤더 권고사항 적용
cat /etc/*release 명령어를 사용해 버전을 확인한다.
- 인터뷰 해야 되는 항목들
     - 패치를 주기적으로 하고 있는지?
     - 패치 필요 시 영향도 파악을 하고 진행하는지?
     - 패치 작업 시 작업 계획서 등 증적을 남기는지?
     - 하나라도 안되있으면 취약이라고 판단한다. 이는 ISMS 인증 기준이다. 

- 최신 버전이 아니더라도 안정화 버전이면 양호를 줄 수 있다.
해당 항목도 위 항목과 같이 고객사의 입장에 따라 상대적으로 판단할 줄 알아야 한다.

5.1 로그의 정기적 검토 및 보고
- 인터뷰 해야 되는 항목들
     - 서버 접속기록( 로그인/로그아웃, 계정, IP 행위)를 남기고 있는지?
     - 위 항목에서 남긴 로그들을 주기적으로 점검하는지?
        ex) 비정상적인 로그는 없는지 ( 새벽시간에 다량 접속, 사용하지 않는 계정의 빈번한 접속 실패 등 )

해당 인터뷰 항목의 기준은 법제처에 있다. ( 정보통신망법, 개인정보보호법 )

이번 진단에서는 다소 유동적으로 판단해야 하는 항목들이 많았다. 이럴 경우에는 반드시 진단하기에 앞서 3.2 항목에서 설명했던 것과 같이 자신만의 기준을 정해야 한다. 일관성 있게 진단해야 하며 법제처에 나와 있는 법률ISMS 인증 기준을 토대로 하는 것도 좋은 방법이다. 고객사에서 다소 애매한 항목의 판단에 대한 근거를 물어봤을 때, 법률과 ISMS 인증 기준이라는 명확한 지침을 보여주면 간단하게 해결된다.