Chapter 11 웹 서버 보안
01 IIS 웹 서버 보안 02 아파치 웹 서버 보안
웹 서버의 취약점을 이해한다. 웹 서버 보안 설정을 학습한다. 웹 서버와 관련된 시스템 보안 요소를 이해한다. 웹 서버를 설치한 시스템의 보안 설정을 학습한다. 웹 서버의 로그를 이해하고 분석한다.
1.1 IIS 웹 서버 설치 윈도우 서버 2008 R2(x86) 평가판 다운로드 http://care.dlservice.microsoft.com/dl/download/4/1/D/41DEA7E0-B30D-401 2-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_enus- GRMSXEVAL_EN_DVD.iso 한글 언어팩을 사용하려면 아래 파일을 내려받은 후 설치 http://download.microsoft.com/download/4/B/9/4B9533BB-4296-4DA6-9667- D1F36A868ED0/Windows6.1-KB2483139-x64-ko-KR.exe → 평가판은 60일 동안 무료로 사용할 수 있고 세 번 연장할 수 있기 때문에 최 대 180일 동안 추가 비용 없이 쓸 수 있음.
1.1 IIS 웹 서버 설치 서버 관리자 열기 [시작]-[제어판]-[프로그램 및 기능]의 왼쪽 상단에 있는 [Windows 기능 사용/ 사용 안 함] 클릭
1.1 IIS 웹 서버 설치 역할 추가 선택 [서버 관리자] 대화상자가 나타나면 ‘역할 요약’ 항목에서 [역할 추가] 클릭
1.1 IIS 웹 서버 설치 웹 서버(IIS) 체크 [역할 추가 마법사]에서 [서버 역할]을 선택하고 ‘웹 서버(IIS)’에 체크 표시한 후 <다음> 클릭
1.1 IIS 웹 서버 설치 필요한 기능 추가 <필요한 기능 추가> 버튼 클릭
1.1 IIS 웹 서버 설치 역할 서비스 선택 웹 서버 역할에 필요한 역할 서비스 선택
1.1 IIS 웹 서버 설치 선택한 옵션 확인 설치 결과 확인 수정이 필요하면 <이전> 클릭 후 옵션 변경, 변동 사항이 없다면 <설치> 클릭 설치 결과 확인 [서버 관리자] 대화상자의 ‘역할’ 항목에 웹 서버(IIS)가 설치된 것 확인
1.1 IIS 웹 서버 설치 설치 결과 확인 웹 브라우저에서 http://localhost에 접속하면 IIS7이 성공적으로 설치되었다고 표시됨.
1.2 IIS 웹 서버 보안 설정 IIS 웹 서버 보안 설정 정을 수정할 수 있는 관리자 화면이 나타남.
1.2 IIS 웹 서버 보안 설정 IIS 관리자에서 웹 사이트 추가 새로운 웹 사이트를 만들기 전 C:\ 디렉터리에 website 폴더 생성 [IIS(인터넷 정보 서비스) 관리자] 화면 왼쪽의 [Default Web Site]에서 마우스 오른쪽 버튼을 클릭 후 [웹 사이트 관리]-[중지]를 눌러 중지
1.2 IIS 웹 서버 보안 설정 IIS 관리자에서 웹 사이트 추가 새로운 웹 사이트를 만들기 위해 화면 왼쪽의 [사이트] 아이콘에서 마우스 오 른쪽 버튼을 눌러 [웹 사이트 추가] 클릭 [웹 사이트 추가]가 나타나면 사이트 이름에 ‘New Web Site’를 입력하고, 실제 경로에는 C:\websites를 찾아서 선택 후 <확인> 클릭
1.2 IIS 웹 서버 보안 설정 기본 문서의 순서 확인 가장 위에 있는 파일을 웹 사이트에서 가장 먼저 불러옴. 웹 사이트를 방문했을 때 Default.htm 파일이 있으면 그 파일을 가장 먼저 읽 고, 없으면 순서대로 Default.asp, index.htm, index.html, iisstart.htm, default.aspx를 읽음.
1.2 IIS 웹 서버 보안 설정 새로운 웹 사이트 디렉터리로 이동 IIS7을 설치하고 Default Web Site가 운영되고 있는 경우에는 iisstart.htm 파일 이 기본으로 설치 처음에 새로운 웹 사이트를 만들면 이 디렉터리는 비어 있음.
1.2 IIS 웹 서버 보안 설정 default.htm 파일 생성 웹 사이트에 접속해서 확인 아무 내용이나 입력 웹 사이트에 접속해서 확인 기본 문서에서 사용하지 않는 파일은 모두 삭제
1.2 IIS 웹 서버 보안 설정 디렉터리 검색 기능 : 특정 디렉터리 내에 index.html과 같은 기본 문서 파일이 없을 경우 웹 브라우저에서 해당 디렉터리를 불러왔을 때 파일 목록이 화면에 뜨는 기능 불필요할 뿐만 아니라 보안상 위험하기 때문에 비활성화를 유지하는 것이 좋음. IIS7은 기본적으로 디렉터리 검색이 비활성화로 설정되어 있음.
1.2 IIS 웹 서버 보안 설정 IIS에서 제공하는 오류 페이지 확인 수 있음. 공격자가 주로 관심을 갖는 상태 코드는 400번대와 500번대
1.2 IIS 웹 서버 보안 설정 해당 파일이 존재하지 않을 때의 오류 메시지 확인 http://localhost/admin/login.asp에 접속 후 확인
1.2 IIS 웹 서버 보안 설정 오류 메시지를 보여주기 위한 별도의 파일 생성 웹 사이트에서 오류가 발생했을 때 원하는 오류 메시지를 보여주기 위해 별도 의 파일을 생성
1.2 IIS 웹 서버 보안 설정 오류 메시지 편집 화면 오류 메시지 편집 기능 선택 IIS 관리자 도구에서 새로 생성한 New Web Site를 클릭하고 오류 페이지 기능 을 열어 변경하고자 하는 상태 코드를 더블클릭 오류 메시지 편집 기능 선택 ‘이 사이트에서 URL 실행’을 선택 후 error_page.html을 입력
1.2 IIS 웹 서버 보안 설정 ‘사용자 지정 오류 페이지’ 선택 [기능 설정 편집]을 클릭하여 [오류 페이지 설정 편집] 대화상자가 나타나면 ‘사 용자 지정 오류 페이지’ 선택 브라우저를 통해 존재하지 않는 페이지를 요청하면 다음과 같이 error_page.html 의 내용이 화면에 나타남.
1.2 IIS 웹 서버 보안 설정 admin과 member 디렉터리 생성 을 간단히 설명하는 index 파일을 만듦.
1.2 IIS 웹 서버 보안 설정 차단할 IP 주소 입력 admin 디렉터리를 선택하고 ‘ IPv4 주소 및 도메인 제한 기능’을 선택 오른쪽의 [거부 항목 추가]를 클릭하여 차단할 IP 주소 입력
1.2 IIS 웹 서버 보안 설정 허용할 IP 주소 입력 [허용 항목 추가]를 클릭하여 특정 IP 주소에 ‘127.0.0.1’을 입력
1.2 IIS 웹 서버 보안 설정 접근 제어 메시지 확인
1.2 IIS 웹 서버 보안 설정 WebKnight 방화벽 AQTRONIX(http://www.aqtronix.com/?PageID=99)에서 제공하는 IIS 기반의 공 개 웹 애플리케이션 방화벽 한국인터넷진흥원에서 운영하는 ‘ WebKnight 자료실’에 상세한 설명과 사용법 이 나와 있음. http://toolbox.krcert.or.kr/MMBF/MMBFBBS_S.aspx?MENU_CODE=37&BOA RD_ID=8
1.2 IIS 웹 서버 보안 설정 Setup\w32\WebKnight.msi 파일 실행
1.2 IIS 웹 서버 보안 설정 ISAPI 필터 기능 실행
1.2 IIS 웹 서버 보안 설정 WebKnight ISAPI 추가 필터 이름: WebKnight 32-bit 실행 파일: C:\Program Files\AQTRONIX Webknight\WebKnight.dll
1.2 IIS 웹 서버 보안 설정 ~ ⑤ 웹 사이트 경로 설정 후 생성 폴더 추가 [시작]-[모든 프로그램]-[AQTRONIX Webknight][WebKnight Configuration]을 실행하고 WebKnight.xml을 선택 Allowed Paths 부분에 라인을 추가하여 ‘C:\website’를 입력
1.2 IIS 웹 서버 보안 설정 특정 확장자를 요청하지 못하도록 하는 옵션 추가 [WebKnight Configuration] 메뉴에서 [Requested File]을 선택하고 Denied Extensions 부분에 ‘.inc’를 추가
1.2 IIS 웹 서버 보안 설정 신규 규칙 실행 확인 브라우저를 통해 http://localhost/dbconn.inc 파일을 요청하면 WebKnight 에 의해 차단된 화면이 나타남.
1.3 로그 관리 IIS7 웹 서버에서 이용 가능한 대표적인 로그 형식 Microsoft IIS 로그 파일 형식 NCSA 공통 로그 파일 형식 W3C 확장 로그 파일 형식(IIS 웹 서버의 기본 설정이며 가장 널리 이용)
1.3 로그 관리 웹 로그 파일 형식 설정 IIS 관리자에서 [사이트]-[New Web Site]를 선택하고 ‘상태 및 진단’에 있는 로 깅을 더블클릭
1.3 로그 관리 세부 필드 값 선택 <필드 선택>을 클릭하면 로그를 남기고 싶은 세부 필드 값을 선택할 수 있음.
1.3 로그 관리 로깅 기능 로그 파일의 형식과 로그 파일을 만드는 주기, 최대 파일 크기와 같은 옵션 을 선택할 수 있음. 기본 설정은 매일 단위의 생성이며, 현재 날짜와 시간을 기반으로 C:\ inetpub \logs\LogFiles 디렉터리에 u_exyymmdd.log와 같은 파일 형태로 기록됨.
2.1 아파치 웹 서버 설치 httpd 설치 페도라에서 yum을 이용하여 아파치 설치 yum install httpd
2.1 아파치 웹 서버 설치 httpd 서비스 시작 httpd 서비스를 구동하는 명령어 : ‘service httpd start’ httpd 서비스가 정상적으로 구동되고 있는지 확인 : ‘ps .ef | grep http’
2.1 아파치 웹 서버 설치 설치 결과 확인 브라우저를 통해 웹 사이트를 접속해 설치 및 구동 확인
2.2 아파치 웹 서버 보안 설정 아파치 설치 디렉터리 확인 vi /etc/httpd/conf/httpd.conf
2.2 아파치 웹 서버 보안 설정 아파치 설치 디렉터리 확인 중요한 파일에는 적절한 권한 설정이 필요함.
2.2 아파치 웹 서버 보안 설정 서버 이름과 IP, 포트 설정 기본 설정 : 서버의 80번 포트를 이용하여 접속 특정 인터페이스로만 서비스를 제공할 경우 Listen을 이용하여 설정
2.2 아파치 웹 서버 보안 설정 서버 실행 계정과 그룹 설정 확인 ‘apache’라는 별도의 계정을 nobody 권한으로 만들어 아파치 웹 프로세스에 대한 권한으로 할당
2.2 아파치 웹 서버 보안 설정 서버 실행 계정과 그룹 설정 확인 /etc/passwd 파일에서 ‘/sbin/nologin’으로 나타나므로 로그인 권한이 없음. gid 값이 0으로 되어 있으면 root 그룹이라는 뜻이므로 apache가 일반 그룹임 을 확인 할 수 있음. cat /etc/passwd cat /etc/group
2.2 아파치 웹 서버 보안 설정 웹 페이지 디렉터리 설정 확인 httpd.conf 파일에서는 웹 페이지 루트 경로를 설정할 수 있음.(기본 웹 페이지 루트 경로는 /var/www/html로 설정되어 있음.) DocumentRoot는 공격자가 추측하기 어려운 경로로 만들 거나 중요한 디렉터 리에는 접근할 수 없도록 제한된 하위 디렉터리로 지정해야 함.
2.2 아파치 웹 서버 보안 설정 기본 문서 설정 확인 기본 문서 설정을 확인하기 위해 httpd.conf 파일에서 DirecotryIndex 문자열 을 찾음. 기본 설정은 index.html이 가장 높은 우선순위로 되어 있음.
2.2 아파치 웹 서버 보안 설정 디렉터리 리스팅 설정 확인 디렉터리의 Options에 Indexes가 설정되어 있다면 디렉터리 리스팅이 불가능 하도록 삭제해야 함.
2.2 아파치 웹 서버 보안 설정 디렉터리 리스팅 설정 확인 디렉터리 리스팅이 되어있으면 해당 폴더의 하위 파일을 볼 수 있음.
2.2 아파치 웹 서버 보안 설정 디렉터리 리스팅 설정 확인 디렉터리 리스팅의 취약점을 제거하려면 httpd.conf 파일의 Options 부분에 있는 Indexes를 삭제해야 함.
2.2 아파치 웹 서버 보안 설정 FollowSymLinks 설정 확인 FollowSymLinks는 ServerRoot, DocumentRoot 설정과는 무관하게 중요 시스 템 디렉터리로의 접근이 가능해지기 때문에 반드시 주의해야 함. /etc 디렉터리에 대한 심벌릭 링크 생성 ln .s /etc /var/www/html/et
2.2 아파치 웹 서버 보안 설정 FollowSymLinks 설정 확인 http://192.168.109.130/etc/에 접속하면 /etc 디렉터리의 여러 파일에 바로 접 근할 수 있으며, passwd 파일도 읽을 수 있음. 반드시 필요한 경우가 아니라면 Options에서 FollowSymLinks를 삭제해야 함.
2.2 아파치 웹 서버 보안 설정 접근 제어의 확인과 설정 DocumentRoot로 설정되어 있는 /var/ www/html에 대한 접근 제어 확인 <Directory "/var/www/html"> ⋮ Order Allow, Deny Allow from all </Directory>
2.2 아파치 웹 서버 보안 설정 접근 제어의 확인과 설정 특정 IP에 대한 거부 설정 특정 도메인에 대한 접근 허락 설정 Order Allow, Deny Allow from all Deny from 11.22.33.44 Order Deny, Allow Deny from all Allow from .hacker.com
2.2 아파치 웹 서버 보안 설정 ServerSignature 설정 외부에서 아파치 서버의 버전과 운영체제의 종류를 알아내지 못하도록 할 수 있음. ServerSignature 값은 On, Off, Email로 설정(기본값은 On)
2.3 로그 관리 아파치 설치 디렉터리 확인 vi /etc/httpd/logs/access_log
2.3 로그 관리 예) 첫 행 내용 확인 서버에 요청을 한 클라이언트(원격 호스트)의 IP 주소 클라이언트의 사용자 이름 접속을 시도한 날짜와 시간 요청한 메소드(GET)와 접근 경로(/), 프로토콜 종류(HTTP 1.1) 서버가 클라이언트에 보내는 상태 코드 클라이언트에 보내는 내용의 크기 링크를 설정한 항목에 대한 접근 기록 서버에 접근하는 클라이언트의 웹 브라우저 종류 127.0.0.1 - - [12/May/2013: 11: 32: 18 +0900] "GET / HTTP/1.1" 403 4609 "-“ ① ② ③ ④ ⑤ ⑥ ⑦ "Mozilla/5.0 (X11; Linux i686; rv: 12.0) Gecko/20100101 Firefox/ 12.0“ ⑧
2.3 로그 관리 CustomLog 접근 로그의 위치와 내용을 지정
2.3 로그 관리 LogFormat 일반적으로 사용하는 로그 포맷은 combined와 common
2.3 로그 관리 LogFormat
2.3 로그 관리 LogFormat
2.3 로그 관리 SetEnvIf Customlog에서 env 인수를 이용하여 이름이 dontlog인 항목을 로깅하지 않도 록 설정 Request_URI가 \.ida로 요청하는 것을 ‘worm’이라고 이름 짓고, 그 로그를 env 를 이용 하여 로깅하지 않게 설정 SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog CustomLog logs/access_log common env =! dontlog SetEnvIf Request_URI \.ida worm CustomLog logs/access_log common env =! worm
2.3 로그 관리 SetEnvIf
2.3 로그 관리 에러 로그 /etc/httpd/logs/error_log에서 에러 로그 내용 확인 httpd.conf 파일의 ErrorLog 값을 이용하여 경로를 설정
2.3 로그 관리 에러 로그 마지막 줄 오류가 생긴 날짜와 시간 오류의 심각성을 알리는 것(debug, info, notice, warn, error, criti 등으로 표시) 클라이언트의 접근 IP 주소 접근한 웹 경로 성공 또는 실패 여부 발생한 오류에 대한 설명 Mon May 13 00: 17: 15 2013] [error] [client 192.168.109.130] (13)Permission denied: ① ② ③ ④ access to /etc/sudoers.d/index.html.var denied (filesystem path'/var/www/html/ ④ ⑤ ⑥ etc/sudoers.d/index.html.var') because search permissions are missing on a component ⑥ of the path