본문 바로가기

Working/IT Security

사내 보안성 점검 Checklist

2008년 4월에 작성했던 보안 Checklist의 일부를 재수정하여 개제하는 포스트입니다.

회사의 일반적인 보안점검을 위한 Checklist로서 참조하시기 바라겠습니다.

1. 통신망

  • 웹서버는 올바른 DMZ 구성이 되어 있는가?
  • DMZ 방화벽에는 웹서비스 포트 외 다른 포트가 Open되어 있는가?
    - 웹서비스 포트 외 다른 서비스가 Open될 경우, 사용서비스 포트와 접속IP 주소를 고정하여 사용하는지 확인(SMTP,DNS사용의 경우 별도 예외)
    - 내부에서 외부로 나가는 Outbound 포트도 필요한 포트 외 차단하였는지 확인
  • 방화벽 접속로깅을 하고 있으며 보관기간은 충분한가?
    - 방화벽 접속로깅은 6개월 이상 보관 권고
  • 침입탐지시스템(IDS) 또는 침입방지시스템(IPS)이 가동 중인가?
    - 근래는 외부 트래픽 보다 내부 트래픽에 의한 문제가 더 많은 만큼 내부 트래픽에 대한 검출이 중요
  • 침입탐지시스템(IDS) 또는 침입방지시스템(IPS)의 로그 파일 중 비정상적인 로그가 방치되고 있는가?
    - 이상 로그 발생에 대한 SMS 연동 등 관리체계 수립 및 다양한 패턴D/B의 유지보수가 필요

2. 서버

  • 서버에 해킹취약서비스가 제거 되었는가?
    - ttdb, cmsd, sadmind, snmpXdmid, ypbind, xntpx 등의 취약점에 대한 주기적인 검토 및 제거
  • 서버에 불필요서비스가 존재하는가?
    - RPC 서비스 : rusers, rexd, statd, rquotad, walld, snmp(100122), snmpv2(100138), kcms_server, metad, metamhd
    - finger, systat, netstat, tftp, comsat, talk, uucp, auth, printer, echo, discard, time, daytime, chargen, dtspcd, snmpd, snmptrapd, pdnsd, cachefsd
  • 서버에 최신 패치 또는 대체 방안을 적용했는가?
    - 각 서버 밴더에서 제공하는 공식 보안 패치를 주기적으로 검토하여 적용
  • 서버 내 설치되는 별도 프로그램 또는 패키지의 샘플 및 테스트용 파일, 디렉토리들을 제거 했는가?
    - 아래에 나열된 샘플 디렉토리 이외에도 디폴트로 설치되거나 테스트 목적으로 설치되는 모든 샘플 파일들은 모두 제거되어야 함
    예) \Inetpub\iissamples 제거
         \Inetpub\iissamples\sdk 제거
         \Inetpub\AdminScripts 제거
         \Inetpub\Scripts\Samples 제거
         \Program Files\Common Files\System\msadc\Samples 제거
         \Winnt\System32\Inetsrv\Iisadmpwd
  • 리눅스 O/S사용시 Secure O/S를 설치했는가?
    - 핵심 정보자산을 운영하는 시스템은 리눅스 사용을 권고하지 않음
  • 웹서버의 관리자 디폴트 패스워드를 변경 하였는가?
    예) iPlanet(Netscape):  admin/admin
         Weblogic: system/weblogic
  • 웹서버의 디렉토리 리스팅 금지 기능이 적용되어 있는가?
  • 웹서버에 취약한 옵션이 제거 되었는가?
    - PUT, DELETE, MKDIR, RMDIR 등

3. 프로그램

  • 웹서버 사용시 취약한 버전은 패치되었는가?
    - 웹서버 밴더에서 제공하는 공식 패치를 주기적으로 최신 패치 수행 권고
  • 중간 페이지 접속 취약점이 존재하여 권한 없는 페이지에 접속이 가능한가?
    - browser-보기-탐색 창-열어 본 페이지 접속후 확인
    - URL, 변수값 조작으로 권한이 없는 페이지 접속 및 실행가능 여부 확인
    예) http://localhost/view.asp?id=1 → http://localhost/edit.asp?id=1
  • 인증 프로그램 구현시 스크립트를 우회 할수 있는가?
    - 브라우저에서 스크립트 비활성화를 이용한 인증우회 가능여부 체크
  • CGI 프로그램 작성시 meta character를 체크하지 않아 시스템 명령어를 수행 혹은
    시스템 정보가 노출되지 않는가?
  • 파일 접근시 경로를 조작하여 시스템 파일에 접근 불가능 한가?
    예) http://localhost/download.jsp?file=../../../../../etc/passwd
         http://localhost/download.jsp?file=../../../../download.jsp
  • 중요 정보가 쿠키, 프로그램 소스, URL에서 표시된 Key 값을 변조가능한지 확인
    - 해당 key값을 변조하여 타인,타 부서의 정보를 조회할 수 없는지 테스트
       ※ Key값: ID, 주민번호, 사업자번호, 계약번호, 증권번호, 부서코드, Primary key 등
  • 중요 정보가 쿠키, 프로그램 소스, URL에서 평문형태로 조회되는지 확인
     - 쿠키: javascript:(document.cookie);
     - 소스: HTML 소스보기로 중요정보 노출확인 (hidden정보 등)
  • 응용프로그램에서 사용하는 DB계정은 DBA권한이 아닌 일반권한을 사용하고 있는가?
    - MS-SQL의 경우 sa 계정 사용 금지
  • php,jsp,asp등의 소스의 백업(zip, bak, tar, bk 등)은 웹 디렉토리가 아닌 별도의 디렉토리에 보관되어 URL로 접근이 불가한가?
  • 게시판 등 사용자 입력 부분에 관리자가 아닌 사용자로부터 html tag입력이 불가능 하도록 설정되어 있는가?
    - 사용을 허용할 html tag를 정리하여 제한적으로 제공할 것으로 권고
  • 사용자 인증, 검색, 게시판 보기화면 등 DB연결시 SQL조건문 조작을 통한 해킹이 불가능한가?
    - 가능한 다양한 SQL Injection 코드로 점검을 요함
  • 원격에서 명령어 실행이 가능한 악의의 소스를 업로드하여 명령어 실행이 불가하도록 차단 되어 있는가?
    - 업로드 파일의 확장자 체크는 무의미하며 php, jsp, asp, bak, inc 등의 실행불가 여부확인
  • 중요문서(대외비 이상 또는개인정보가 포함된 문서)는 웹경로상에서 직접 접근이 불가능 한가?
    - 웹서버 등의 .doc, .pdf, .xls 등 문서 파일을 검색하여 불필요한 파일은 삭제
    - Google 등의 검색엔진을 통해 중요 문서가 검색되는지 여부 확인
  • 게시판 구현시 공개된 프로그램을 사용하지 않는가?
    - 주요 정보자산을 다루는 웹사이트에서 테크노트, 제로보드, 그누보드 등 공개 프로그램 사용금지
  • php 사용시 세션정보를 안전하게 저장하고 있는가?
    - php.ini 중 세션 설정 디렉토리(session.save_path=/tmp 가 디폴트)를 따로 만들고(session.save_path=/tmp/session) user와 group값을 nobody로 설정하고 퍼미션을 750으로 조정했는지 확인
  • Php.ini 환경파일을 안전하게 운영하고 있는가?
    - allow_url_fopen  : off (디폴트 on)
    - register_globals  : off (디폴트 on)
    - magic_quotes_gpc : on
    - display_errors = off
  • 웹 서버 설치시 최소한의 권한으로 설치 되었는가?
    - root 권한으로 설치금지
  • 중요정보를 입력 Form의 자동완성 기능을 Off 했는가?
    예) <form name="input" method="post" action="input.php" autocomplete=off>
  • 중요정보가 있는 페이지의 경우는 CACHE가 불가능하도록 response의 header에 no-cache로 설정하여 로그아웃 이후에 뒤로가기로 정보 조회가 불가능 한가?
  • 클라이언트측 소스에 불필요한 주석(Comment)를 사용하여 시스템 정보를 노출하고 있지 않은가?
    - HTML 소스 보기를 통해 테스트 계정,패스워드, 테스트 서버IP, 개발자명 등과 같은 불필요 정보가 존재하는지 확인
  • 예외 처리시 에러페이지를 지정하지 않아 웹서버의 시스템 정보가 노출되지 않는가?
    - SQL문, SQL 에러, Web서버 절대경로 노출 금지
    - 웹서버에서 404 Error 등의 표시를 기본 설정으로 하지 않고 별도 페이지로 연결 설정
  • 자바 클래스를 안전하게 운영하는가?
    - 자바 애플릿의 디컴파일러를 이용하여 소스를 원복하여 관리 권한과 같은 중요로직이 노출되거나 조작이 가능한지 확인
    - 자바를 이용하여 웹서버를 구성한 경우 웹브라우저를 이용하여 서버에서 실행되는  class위치에 접근, 다운가능한지 확인
    (확인방법)
    "http://대상URL/WEB-INF/classes/해당디렉토리/클래스명"을 입력하여 서버측 클래스가 다운로드 가능한지 확인
  • 로그인 패스워드 정책 및 암호화 전송 기준이 있는가?
    - 회원가입, 사용자 정보 변경 시 단순 패스워드를 사용하지 못하도록 하는 검증 프로그램을 운영
    - 중요정보의 전송 시 128bit 이상의 SSL 적용
    - 개인 정보(ID/Password)분실 시 복구절차가 자동화되어 내부 사용자의 접근이 불가능하도록 설정
  • CMS 등 웹사이트 관리자화면은 안전하게 관리되는가?
    - 관리자화면 접근 IP를 제한하거나 내부망에서만 접근가능하도록 조치
4. 접근 및 관리 통제
  • 서버에 접근 가능한 IP 주소를 통제하는가?
    - O/S에서 제공하는 Trust Mode 설정화면에서 통제 관리
    - 보안 툴이 설치된 경우 관리자 화면에서 통제 관리
  • 서버 접속시 패스워드 정책을 관리하고 준수하는가?
    - 패스워드 설정규칙(6자 이상 사용,영숫자 혼용,연속문자열 4자 이상 사용금지 권고) 적용
    - 주기적(분기 1회 권고)패스워드 변경실시
  • root의 FTP을 사용 금지 옵션을 적용 했는가?
    - /etc/ftpusers 파일 내 root가 있는지 확인
  • 일반 사용자가 root권한을 갖는가?
    - /etc/passwd 파일 내 root외 UID=0 사용자 존재 확인
  • 서버 및 웹서버의 접속 로깅을 실시하는가?
    - 웹서버 로그, last 로그(wtmp), messages 파일, syslog 파일, 사용자 history 파일 별도보관 확인
       (단, /dev/null로 링크한 경우도 인정함)
    - 주기적인 모니터링 및 6개월 이상 별도 보관 권고
  • 웹서비스를 위한 서버의 설치 장소가 통제구역으로 관리되고, 출입 제한절차가 있는지 확인한다.
    - 물리적 출입 보안 체계 수립 및 유지
    - 출입 시 출입 대장관리
5. 데이터베이스
  • 데이타베이스 접속 ID/패스워드가 관리되고 있는가?
    -  사용자 ID별 사용자를 지정
    - 디폴트 ID/Password 사용금지
    예) 오라클 Default Password :
         scott/tiger,system/manager,dbsnmp/dbsnmp,sys/change_on_install,
         tracesvr/trace,demo/demo,ctxsys/ctxsys,mdsys/mdsys,
         ctxdemo/ctxdemo,apps/apps,applsys/fnd,po8/po8,names/names,
         sysadm/sysadm, ordplugins/ordplugins,outln/outln,adams/wood,
         blake/paper, jones/steel, clark/cloth,aurora$orb$unauthenticated/invalid
         (oracle 9i 추가) wksys/wksys, olapsys/manager, olapdba/olapdba,
         LBACSYS/LBACSYS, olapsvr/instance
         MS SQL Default Password : sa/null,probe/null
    - 패스워드 설정규칙 적용 : 6자 이상 사용, 영숫자 혼용, 연속문자열 4자 이상, ID가 포함된 패스워드 사용 금지 등
    - 주기적(분기 1회)패스워드 변경실시
  • 중요 정보(개인정보,거래정보)에 대한 사용권한이 지정되어 있는가?
    - ID별 사용권한(읽기,쓰기) 및 범위를 지정
    - ID는 운영에 필요한 최소한의 사용자에게만 부여
  • 데이타베이스 관련 파일에 대해서 접근권한이 통제되는가?
    - UNIX : DBA에게만 파일 모드 644 허용
    - NT    : DBA에게만 읽기,쓰기 허용
  • DB취급자를 최소한으로 하고 허용 대상자를 통제, 관리하고 있는가?
    - 접속 가능한 IP 주소 및 Port를 제한하였는지 확인
  • 중요정보(개인정보,거래정보)의 조회,삭제,수정 등 이력을 기록하는가?
    - 접속 ID, 접속 프로그램, 접속일시, 명령어 수정내역 등의 이력을 기록
  • 데이타베이스가 존재하고 있는 서버의 접속 이력을 기록하는가?
    - 서버 로그 및 DB 리스너 로그 포함
    - 로그인 ID, 접속일시, 접속IP 등의 이력 관리
  • 고객/거래정보 데이터베이스는 통신망 내부망에 위치하여 외부에서 직접 접속이 불가능 한가?
    - WEB/WAS와 DB의 분리 운영 및 내/외 통신망의 분리
  • 데이터베이스에 고객/거래정보가 암호화 저장 되는가?
    - 패스워드, 주민번호, 신용카드번호, 은행계좌번호 등의 중요 정보를 암호화 하여 저장
    - 패스워드 암호화의 경우 단방향 알고리즘(MD5, SHA-1 등)을 사용
    - 공인된 암호 알고리즘(SEED 등)을 사용
    - 문자열의 재배열, 단순치환, ASCII코드값 변환, URL Encode, Base64 Encode 사용금지
    - DB link 등을 이용한 내부 DB와 연결 시 동일한 수준의 암호화 유지
기본적으로 본 Checklist는 주요 보안이슈 발생시에 비정기적인 업데이트를 수행해야 하며, 정기적으로도 현재 상황에 맞게끔 재조정이 필요합니다. 본 Checklist를 이용해 자체 점검을 수행하는 등의 모니터링 과정도 필수적으로 필요함을 잊지 말아야 합니다.

기타 전반적인 보안가이드는 KISA에서 발행한 정보보안가이드를 참조

(http://www.kisa.or.kr)