KISA 유닉스 서버 취약점 점검 항목(U-01 ~ U-72)을 기반으로 실제 시스템을 점검하고 보고서를 작성한 실습 후기.
점검 항목이 72개였다. 계정 관리, 접근 제어, 서비스 관리, 패치 관리, 로그 관리 다섯 개 영역으로 나뉘는데, 각 항목마다 점검 명령어를 실행하고 결과를 해석해서 양호/취약을 판단하는 방식이다.
처음에는 그냥 명령어 실행하고 결과 붙여넣으면 되는 거 아닌가 싶었는데, 막상 해보니 생각보다 판단이 필요한 부분이 많았다.

취약으로 나온 항목들
결과적으로 취약이 꽤 많이 나왔다. 기억에 남는 것들 위주로 정리한다.

U-01: root 계정 원격 접속 제한
SSH가 활성화된 상태에서 PermitRootLogin prohibit-password로 설정되어 있었다. 이게 얼핏 보면 패스워드 인증을 막으니까 안전한 것처럼 보이는데, 공개키 인증으로는 root 접속이 여전히 가능하다. KISA 기준은 PermitRootLogin no로 완전히 막아야 양호다. 설정 이름만 보고 안전하다고 착각하기 쉬운 케이스였다.
U-02: 패스워드 복잡성 설정
/etc/security/pwquality.conf를 열어보니 모든 항목이 주석 처리되어 있었다. minlen, dcredit, ucredit 전부 #이 붙어있었다. /etc/pam.d/system-auth와 password-auth 파일도 아예 존재하지 않았다. 패스워드 정책이 사실상 없는 상태였다.
U-15: world writable 파일 점검
/etc, /bin, /var, /tmp 경로를 전부 점검했는데 world writable 파일이 없어서 양호가 나와야 했다. 그런데 결과를 취약으로 표기했다. 나중에 다시 확인해보니 점검 기준 해석 문제였다. 결과 값이 없다는 게 "파일이 없어서 양호"인지 "스크립트가 제대로 안 돌아서 공란"인지를 구분해야 했는데 처음에 헷갈렸다.
U-18: 접속 IP 및 포트 제한
firewalld 서비스 상태를 확인했더니 not-found였다. 아예 설치가 안 되어 있는 상태였다. 방화벽이 없다는 건 단순히 설정 미흡이 아니라 외부에서 모든 포트로 접근 시도가 가능한 상태라는 의미다. 이 항목이 제일 심각하다고 느꼈다.
U-22: cron 파일 소유자 및 권한 설정
/usr/bin/crontab 파일의 권한이 -rwxr-sr-x였다. 소유자는 root로 양호한데 접근 권한이 750을 초과했다. SGID 비트(s)가 설정되어 있어서 cron 그룹 권한으로 실행된다. 이 상태에서 악용 시나리오가 가능하다.
U-36: 웹 서비스 프로세스 권한 제한
Apache 마스터 프로세스가 root로 실행되고 있었다. 워커 프로세스는 daemon 계정인데, 마스터가 root인 상태에서 취약점이 터지면 root 권한 탈취로 이어질 수 있다. httpd.conf에서 User와 Group 지시어를 nobody나 www-data 같은 전용 계정으로 바꿔야 한다.
U-38, U-40: 웹 서비스 기본 파일 및 업로드 제한
Apache 설치 시 기본으로 생성되는 htdocs, icons, manual 디렉토리가 그대로 남아 있었고, LimitRequestBody 설정이 없어서 업로드 크기 제한이 없었다. 기본 설치 후 하드닝을 전혀 안 한 상태였다.
U-71: 웹 서비스 정보 숨김
httpd.conf에 ServerTokens와 ServerSignature 설정이 없었다. 기본값이 Full이어서 에러 페이지나 응답 헤더에 Apache 버전, OS 정보가 그대로 노출된다. 이 정보가 공격자한테 타겟을 좁혀주는 단서가 된다.
점검하면서 느낀 것
72개 항목을 직접 돌려보고 나니 패턴이 보였다. 취약이 나오는 케이스가 크게 세 가지로 나뉜다.
첫 번째는 설치 후 기본값을 그대로 쓰는 경우다. Apache 기본 디렉토리, pwquality 주석 처리, ServerTokens 미설정이 다 이 케이스다. 패키지 설치하고 바로 서비스 올리면 이렇게 된다.
두 번째는 설정은 있는데 기준치를 충족하지 못하는 경우다. PermitRootLogin prohibit-password가 대표적이다. 뭔가 설정되어 있어서 담당자도 "설정했다"고 생각하지만 기준과 다르다. 이런 항목이 실제 점검에서 놓치기 쉽다.
세 번째는 관련 파일이나 서비스 자체가 없어서 판단이 애매한 경우다. U-61~U-65처럼 FTP 관련 항목인데 /usr/bin/at 명령이 없다고 뜨는 케이스가 있었다. 점검 스크립트가 at 명령으로 뭔가를 확인하려 했는데 환경 자체가 달랐던 것이다. 이런 경우 취약/양호를 기계적으로 판단하면 안 되고 실제 환경 맥락을 함께 봐야 한다.
72개 항목을 한 번 돌려봤다고 서버 보안을 다 아는 건 아니지만, 어떤 관점에서 시스템을 보는지 감이 생겼다. 권한, 설정, 불필요한 서비스, 로그 결국 이 네 가지 축으로 수렴하는 듯 하다.
점검 기준: KISA 유닉스 서버 취약점 점검 항목 (U-01 ~ U-72)