강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

웹서버구축 보안점검가이드[1] - 개요 및 웹 서버 취약점 점검

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

제 1 장 개 요

대부분의 침해사고들은 보안 시스템 부족 등의 1차적인 문제가 아닌, 부정확한 현황 파악과 보안 담당자의 시스템 관리 소홀로 인해 발생하는 경우가 대부분이며, 이는 관리자와 보안 담당자의 보안인식 부족에 기인한다.

최근의 침해사고 유형은 단순히 한 가지의 기법만이 이용되는 것이 아니라 시스템 취약점과 더불어 네트워크의 구성을 활용하는 등의 다양한 기법이 사용되고 있어, 사고 예방을 위해서는 최초 시스템을 구축하는 단계에서부터 보안을 고려하는 것이 점차 중요해지고 있다.

본 가이드에서는 일반 업체에서 운영 시스템과 네트워크 장비를 이용해 서비스 환경을 구축할 때 적용해야 하는 최소한의 보안 설정과 취약점 점검 항목을 다루고자 하였다. 시스템의 최초 설치 시 필요한 기본적인 절차와 항목들을 체크리스트 형태로 제시하였으며, 웹어플리케이션 취약점 점검 등 최근의 공격기법에 대한 점검과 대응책을 담고자 노력하였다.

본 가이드에서는 시스템 또는 네트워크 장비에서 적용되어야 하는 기본 사항들을 언급하였으며, 운영 장비의 세부 설정에 대해서는 직접적으로 언급하지는 않았다. 실제 세부 설정 방법 등은 해당 장비의 매뉴얼 또는 장비 유지 보수업체를 통해 확인하여 작업을 하여야 한다.

제2장에서는 웹 서버 시스템과 관련하여 OS 자체의 보안 설정과 더불어 웹 서버의 보안 설정 및 점검방법에 대해 알아보며, 제3장에서는 네트워크 장비에서 문제가 될 수 있는 취약점들과 점검방법에 대해 알아보도록 한다.

제4장에서는 일반적으로 많이 이용되고 있는 My-SQL, MS-SQL, Oracle 등, DBMS의 취약점과 함께 안정적인 운영을 위해 필요한 보안설정에 대해 알아보며, 제5장에서는 최근 해킹에 자주 이용되고 있는 SQL Injection, XSS 등의 웹 어플리케이션 취약점에 대한 보안 대책과 점검방법에 대해 알아보도록 한다.

제6장에서는 홈페이지에서 자주 사용되고 있는 주요 공개용 웹 S/W의 관리와 취약점 패치에 대해 알아보도록 한다.

제 2 장 웹 서버 취약점 점검

제1절 호스트 OS 보안

모든 시스템은 어플리케이션 보안에 앞서 호스트 OS의 보안 작업이 선행되어야 한다.
웹 서버의 경우, 아무리 웹 서버를 안전하게 설정 및 운영한다 해도, 웹 서버가 설치될 OS가 안전하지 않다면 결코 웹 서버의 안전을 보장할 수 없다.

1. OS에 대한 최신 패치 적용
  OS 벤더사이트나 보안 취약점 정보 사이트를 주기적으로 방문하여 현재 사용하고 있는 OS에 대한 최신 취약점 정보를 얻고, 패치 등 관련된 보안대책을 신속하게 적용하도록 한다.

2. OS취약점 점검
  정기적으로 취약점 점검 도구와 보안 체크리스트를 사용하여 호스트 OS의 보안 취약점을 점검한다. 점검 결과로 발견된 취약점들은 보완조치하고 조치사항은 히스토리 관리를 위해 기록해 둔다.

3. 웹서버 전용 호스트로 구성
  웹 서버의 중요도를 고려하여 가급적이면 웹 서버 전용 호스트로 구성하도록 한다. 웹 서비스 운영에 필요한 최소한의 프로그램들만 남겨두고, 불필요한 서비스들은 반드시 제거 하도록 한다. 시스템 사용을 목적으로 하는 일반 사용자 계정들은 모두 삭제하거나 최소의 권한만 할당한다. 오로지 관리자만이 로그인이 가능하도록 한다.

※ 개발도구 및 백업파일 제거
웹 서버를 구축한 후에는 컴파일러 같은 소프트웨어 개발 도구와 백업파일들을 제거 하도록 한다. 이러한 도구들은 공격자가 서버에 침입한 후에 공격코드를 컴파일하거나, 웹 페이지의 소스확인을 통해 DB 접속계정정보 등이 유출될 수 있다.

4. 서버에 대한 접근 제어
  관리목적의 웹 서버 접근은 콘솔 접근만을 허용하는 것이 가장 좋다. 그것이 불가능하다면 관리자가 사용하는 PC의 IP만 접근이 가능하도록 접근제어를 수행한다.

5. DMZ 영역에 위치
  웹 서버를 DMZ 영역에 위치시키도록 한다. 웹 서버를 방화벽에 의해서 보호 받도록 하고, 웹 서버가 침해당하더라도 웹 서버를 경유해서 내부 네트워크로의 침입은 불가능하도록 구성한다.

6. 강력한 관리자 계정 패스워드 사용
  관리자 계정의 패스워드는 모든 보안의 가장 기본이다. 하지만 이런 기본이 지켜지지 않아 여전히 해킹사고가 많이 발생하고 있다. 패스워드 보안은 모든 보안의 기본이자 가장 중요한 필수 보안 사항이다.

  관리자 계정 패스워드는 유추가 불가능하고 패스워드 크랙으로도 쉽게 알아낼 수 없는 강력한 패스워드를 사용하도록 한다. 패스워드는 길이가 최소한 8자 이상이고, 이름이나 계정명으로 유추할 수 없는 것이어야 한다. 또한 사전에 없는 단어를 사용하도록 하고, 기호문자를 최소 한 개 이상 포함시키도록 한다.

  관리자 계정 패스워드의 주기적인 변경 또한 중요하다. 관리자 계정을 포함한 주요 계정의 패스워드는 내부적으로 규정한 주기마다 변경하도록 하며, 변경 시에는 일정한 규칙을 가지지 않도록 한다.

7. 파일 접근권한 설정
  관리자 계정이 아닌 일반 사용자 계정으로 관리자 계정이 사용하는 파일들을 변경할 수 없도록 해야 한다. 만약 관리자 계정보다 권한이 낮은 일반 계정으로 관리자가 실행하거나 쓰기를 수행하는 파일들을 변경할 수 있다면 관리자 권한 획득이 가능하다.


제2절 웹 서버 설치보안

1. 소스코드 형태의 배포본 설치
  웹 서버 소프트웨어가 소스코드와 바이너리 형태로 배포되는 경우, 보안상 가장 좋은 것은 소스코드를 다운로드 받아 필요한 기능만 설치하는 것이다. 소스의 다운로드는 해당 프로그램의 공식 사이트를 통해 다운로드 받으며, 다운로드 후 MD5 해쉬값을 비교하도록 한다.

2. 설치 시 네트워크 접속 차단
  웹 서버를 설치하기 전부터 보안설정을 안전하게 끝낼 때까지 호스트의 네트워크 접속을 차단하도록 한다. 보안설정이 완전히 끝나지 않은 상태에서 웹 서버가 외부에 노출될 경우 쉽게 해킹 당할 수 있으며, 그 이후에 취해지는 보안 조치들이 의미가 없게 될 수 있다.

3. 웹프로세스의 권한 제한
  시스템 전체적인 관점에서 웹 프로세스가 웹 서비스 운영에 필요한 최소한의 권한만을 갖도록 제한한다. 이렇게 하여 웹사이트 방문자가 웹 서비스의 취약점을 이용해 시스템에 대한 어떤 권한도 획득할 수 없도록 한다. 시스템 운영 시, root 권한으로 웹 데몬이 재구동되고, 웹 취약점을 통해 접속권한을 획득한 경우 root 권한을 획득하게 되므로 웹 서버 관리시에는 일반적으로 사용되는 nobody 권한으로 웹 프로세스가 동작하도록 한다.

4. 로그 파일의 보호
  로그 파일은 침입 혹은 침입시도 등 보안 문제점을 파악하는데 중요한 정보를 제공한다.
이러한 로그 파일이 노출, 변조 혹은 삭제되지 않도록 불필요한 접근으로부터 보호한다.

5. 웹 서비스 영역의 분리
  웹 서비스 영역과 시스템(OS)영역을 분리시켜서 웹 서비스의 침해가 시스템 영역으로 확장될 가능성을 최소화한다. 웹 서버의 루트 디렉토리와 OS의 루트 디렉토리를 다르게 지정한다.

  웹 컨텐츠 디렉토리는 OS 시스템 디렉토리는 물론 가급적 다른 웹 서버 디렉토리와도 분리시킨다. 또한 로그 디렉토리와 설정 디렉토리는 웹 서비스를 통해 접근이 불가능한 곳에 위치시키도록 한다.

6. 링크 사용금지
  공개 웹 컨텐츠 디렉토리 안에서 서버의 다른 디렉토리나 파일들에 접근할 수 있는 심볼릭 링크, aliases, 바로가기 등을 사용하지 않는다.

7. 자동 디렉토리 리스팅 사용중지
  디렉토리 요청 시 디렉토리 내에 존재하는 파일 목록을 보여주지 않도록 설정한다. 디렉토리 내에 존재하는 DB 패스워드 파일이나 웹 어플리케이션 소스 코드 등 중요한 파일들에 대해 직접 접근이 가능하면 보안상 매우 위험하다. 이를 막기 위해 자동 디렉토리 리스팅 기능의 사용을 중지시킨다.

8. 기본 문서 순서 주의
  웹 서버에서는 디렉토리 요청시 기본적으로 보여지는 파일들을 지정할 수 있도록 되어 있다. 이 파일 목록을 올바로 지정하여 기본 문서가 악의적인 목적의 다른 파일로 변경되지 않도록 한다.

9. 샘플 파일, 매뉴얼 파일, 임시파일의 제거
  웹 서버를 설치하면 기본적으로 설치되는 샘플 파일이나 매뉴얼 파일은 시스템 관련 정보를 노출하거나 해킹에 악용될 수 있다. 따라서 웹 서버 설치 후에 반드시 이러한 파일들을 찾아서 삭제하도록 한다.

  만약 관리 등의 이유로 웹을 통해 설명문서에 접근해야 한다면 접근제어를 통해 꼭 필요한 사용자만 접근을 허용하고 그 외의 사용자들은 접근하지 못하도록 설정한다.

  또한 웹 서버를 정기적으로 검사하여 임시 파일들을 삭제하도록 한다. 특히 웹 서비스의 업데이트나 유지보수 시 생성되는 백업파일이나 중요한 파일 등은 작업이 끝난 후 반드시 삭제하도록 한다.

  정확한 관리를 위해 폴더와 파일의 이름과 위치, 개수 등이 적혀있는 별도의 문서를 관리하는 것이 좋다. 그래서 문서에 등록되지 않은 불필요한 파일들을 점검해서 삭제하도록 한다.

10. 웹서버에 대한 불필요한 정보 노출 방지
  웹 서버 종류, 사용 OS, 사용자 계정 이름 등 웹 서버와 관련된 불필요한 정보가 노출되지 않도록 한다. 이러한 정보가 사소한 것처럼 보일 수 있지만, 이러한 정보를 아는 것만으로도 공격에 필요한 나머지 정보를 수집하는데 도움이 될 수 있다.

  뉴스그룹이나 메일링 리스트를 통해 웹 서버 운영에 대한 질의를 할 경우에도, 조직의 네트워크와 시스템에 대한 상세정보가 유출되지 않도록 주의한다.

11. 업로드 제어
  불필요한 파일 업로드는 허용하지 않는다. 파일 업로드를 허용해야 한다면, 대량의 업로드로 인한 서비스 불능상태가 발생하지 않도록 한다. 또한 업로드를 허용해야 하는 파일의 종류를 지정하여 그 외 종류의 파일들은 업로드가 불가능하도록 한다. 업로드된 파일은 웹서버에 의해 바로 처리되지 못하도록 해야 한다. 처리되기전에 반드시 수동이나 자동으로 파일의 보안성 검토를 수행하도록 한다. 또한, 업로드 되는 폴더의 실행권한을 제거하여 악성 파일이 업로드 되었을 시 실행되지 못하도록 한다. 업로드 폴더를 웹 서비스 폴더와 별도로 사용하는 것도 좋은 방법이다.

12. 인증과 접근제어의 사용
  웹 서버에서 제공하는 인증 기능과 접근제어 기능을 필요한 곳에 적절하게 활용한다. 웹서버에서는 사용자 아이디/패스워드 기반의 인증 기능과 특정 IP나 도메인에 대한 접근제어 기능을 제공한다.

13. 패스워드 설정 정책 수립
  웹 서버의 인증 기능을 이용하는 경우에, 유추가 불가능한 패스워드를 사용하도록 한다.
패스워드 길이와 사용 문자에 대한 최소 복잡도를 설정하도록 하고, 사용자의 개인정보나 회사 공개정보를 이용한 패스워드 사용을 금지하도록 한다. 또한 사용자들에게 웹사이트의 패스워드와 다른 중요한 것들의 패스워드(예를 들어, 은행이나 주식 관련 비밀번호)를 다르게 사용하도록 권장한다. 웹 서버 보안이 100% 완벽할 수 없기 때문에, 이렇게 함으로써 웹서버 침해로 인한 더 큰 피해를 막을 수 있다.

14. 동적 컨텐츠 실행에 대한 보안 대책 수립
  동적 컨텐츠 처리 엔진들은 웹 서버의 일부로서 실행되면서 웹 서버와 동일한 권한으로 실행된다. 따라서 각 엔진 사용시 발생할 수 있는 모든 보안 취약점들을 파악하고 이와 관련된 보안 기능들을 설정해야 한다.

  동적 컨텐츠와 관련된 기능 중 사용하지 않는 기능들은 제거를 하고 예제 파일들은 반드시 삭제한다. 가능하다면 동적 컨텐츠가 실행될 수 있는 디렉토리를 특정 디렉토리로 제한시키도록 하고, 컨텐츠의 추가 권한은 관리자로 제한하도록 한다.

15. 설치 후 패치 수행
  웹 서버 기본 설치 후 알려진 취약점을 바로잡기 위해 취약점 정보사이트나 벤더 사이트를 방문해서 웹 서버와 관련된 취약점 정보를 얻고, 패치나 업그레이드를 수행한다.

16. 설정 파일 백업
  웹 서버를 인터넷에 연결하기 전에 초기 설정 파일을 백업 받아서 보관해 둔다. 또한 변경이 있을 때마다 설정 파일을 백업하도록 한다. 이렇게 하여 해킹이나 실수가 발생해도 빠르게 복구할 수 있도록 한다.

17. SSL/TLS 사용
  보안과 기밀성이 요구되는 경우 SSL이나 TLS를 사용하도록 한다. 대부분의 경우에 SSL/TLS는 웹 서버에서 사용할 수 있는 가장 훌륭한 인증 및 패스워드 방법이다.

출처 :

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,156 명
  • 현재 강좌수 :  36,513 개
  • 현재 접속자 :  275 명