Apache 웹서버보안문제 웹서버 / 클라이언트 / 애플리케이션자체의버그 웹서버 / 클라이언트 / 애플리케이션설정의오류 침입차단시스템의웹서비스오픈 SANS TOP20 Vulnerabilities Top Vulnerabilities to Windows Systems Top Vulnerabilities to UNIX Systems W1. Web Servers & Services W2. Workstation Services W3. Windows Remote Access Services W4. Microsoft SQL Server (MS-SQL) W5. Windows Authentication W6. Web Browsers W7. File-Sharing Applications W8. LSASS Exposures W9. Mail Client W10. Instant Messaging U1. Bind Domain Name Systems U2. Web Server U3. Authentication U4. Version Control Systems U5. Mail Transport Services U6. Simple Network Management Protocol U7. Open Secure Socket Layer U8. Misconfiguration of Enterprise Services U9. Databases U10. Kernels
Apache 웹서버프로세스를위한계정관리 Apache 서버의설치및구동을위한계정 - 운영체제에로그인하여 Apache 설치 - 웹서버시작및종료 - 웹서비스를위한포트로 1024번미만포트번호를사용하기위해서는이계정이 root 이여야함. 웹서버프로세스를위한계정 - 일반사용자의웹접속을처리하기위하여사용되는프로세스가이용 - 반드시로그인할수없는계정, 즉쉘 (Shell) 이없는계정으로설치 - 일반적으로사용자 ID와그룹으로쉘이없는 nobody 계정이용 -Apache 설정파일 (http.conf) 에 User, Group 지시자 (directive) 설정을통해활성화
Apache 웹서버홈디렉터리관리 DocumentRoot - 모든웹컨텐트가저장될디렉터리구조, 웹을통해공개 - 시스템루트파일시스템등과는별도의파일시스템사용필요 -Apache 초기설치시, DocumentRoot = htdocs DocumentRoot 변경 -Apache 설정파일 (http.conf) 에서임의의디렉터리 (/usr/local/www) 로변경 ChrootDir 설정 - 웹서버의최상위디렉터리를임시교체 - 웹서버를통한공격발생시피해를지정해놓은디렉터리범위로축소 불필요한 CGI 스크립트관리 Apache 초기설치시, 기본적으로 cgi-bin 디렉터리존재하는모든스크립트제거
Apache 설정파일관리 [1] 디렉터리 Listing 방지 - 웹브라우저를통해존재하지않는 URL 입력시, 기본적으로디렉터리리스트를보여주는것을방지 - 설정파일 (http.conf) 변경 Options 지시자 (directive) 에서 Indexes 옵션제거 Symbolic Link 사용방지 - 기존의웹문서이외의파일시스템에접근하는것이가능 - 가령, 시스템 Root 디렉터리 (/) 를링크하게되면, Nobody 권한으로모든파일시스템에접근허용 - 설정파일 (http.conf) 변경 Options 지시자 (directive) 에서 FollowSymLinks 옵션제거 SSI (Server-Side Includes) 사용제한 -HTML 페이지내에존재하며, 동적인웹페이지제공 - exec cmd 를사용해서임의의스크립트나프로그램실행이가능 - 설정파일 (http.conf) 변경 Options 지시자 (directive) 에서 IncludesNoExec 옵션제거 CGI 실행디렉터리제한 - 임의의사용자들이 CGI 스크립트들을어느디렉터리에서나실행가능하도록할경우, 악의적인사용자가 CGI 업로드후이를실행하여공격가능 -CGI 프로그램의실행은관리자가지정한특정디렉터리에서만실행가능하도록제한 - 설정파일 (http.conf) 변경 ScriptAlias 지시자 (directive) 에서실행가능한디렉터리제한
Apache 설정파일관리 [2] Options 지시자 (directive) 및설정값
Apache 설정파일관리 [3] 보안관리가잘못된설정파일 (http.conf) 예시 - DocumentRoot 디렉터리의설정이 Indexes, FollowSymLinks 옵션을가진경우, - DirectoryIndex에정의된초기파일 (index.html) 이존재하지않을경우, 디렉터리내의파일목록을리스트업 -FollowSymLinks로인해시스템루트디렉터리 (/) 에 Symbolic Link된 system.html 파일 (ln s system.html /) 을열었을경우, DocumentRoot 디렉터리상위의정보조회가능
Apache 설정파일관리 [4] 보안관리가올바른설정파일 (http.conf) 예시 - Indexes 옵션과 FollowSymLinks 옵션제거 - IncludesNoExec 옵션추가 - DirectoryIndex에정의된초기파일 (index.html) 이존재하지않을경우, 디렉터리내의파일목록을보여주는것이아니라, 오류창을띄움
Apache 설정파일관리 [5] 웹서버응답메시지헤더정보숨기기 - 웹서버헤더정보 : 클라이언트가웹서버에접속했을때, 웹서버에서내보내는응답메시지의헤더 - 웹서버버전, 배너, 구동되고있는응용프로그램의취약성을식별하는데이용 - 설정파일 (http.conf) 변경 ServerToken 지시자 (directive) 를수정함으로써헤더에의해전송되는정보변경
Apache 웹서버사용자인증관리 [1] 기본사용자인증 (Basic Authentication) -Apache에서제공되는 htpasswd를이용하여사용자계정을생성하고인증하는방법 - 클라이언트에서서버로전송되는도중패스워드는평문이므로노출이쉬움 - 패스워드는암호화되어저장 다이제스트사용자인증 (Digest Authentication) - 기본사용자인증방법과동일 - 클라이언트에서서버로전송되는패스워드를 MD5 해쉬하여전송 [ 데이터는평문 ] 애플리케이션에서의인증 - 전자서명인증, 생체인증, 데이터베이스적용
Apache 웹서버사용자인증관리 [2] 기본사용자인증 (Basic Authentication) 패스워드파일생성 -htpasswd 명령을이용하여패스워드파일생성 [ 첫생성시에만 c 옵션사용 ] - 웹서버자체가읽을수있는최소한의권한만을부여 [Nobody 사용자 / 그룹 ]
Apache 웹서버사용자인증관리 [3] 기본사용자인증 (Basic Authentication) 패스워드파일을사용가능하도록환경설정 - 각디렉터리별로사용자인증 - 설정파일 (http.conf) 변경 AllowOverride 지시자 (directive) 를 None 에서 AuthConfig 로설정 - 사용자인증이필요한디렉터리에다음의지시자 (directive) 들이포함된.htaccess 파일생성
Apache 웹서버사용자인증관리 [4] 기본사용자인증 (Basic Authentication) 패스워드파일에등록된 hcjung 와 webmaster 만이웹서버에접속할수있도록필요한설정 - 정상적으로사용자인증설정완료시, 다음과같은인증창생성 - 인증실패시, 다음과같은경고창생성
SSL 인증서또는웹암호화솔루션적용관리 Apache에서는 mod_ssl을이용하여암호화지원 지원인증서규격 - OpenSSL을통해자체적으로생성한인증서 - 유료공인인증서 (NPKI/GPKI) 보안패치관리 Apache 버전별취약점확인 - ApacheWeek, http://www.apacheweek.com/security/ 주기적인취약점패치 - http://www.apache.org/dist/httpd/patches/ 설정파일및데이터백업관리 Apache 각종환경설정파일 Apache 설치과정에서사용된 Install 파일 - Rebuild 시간단축효과 사용자프로그램소스 -PHP, JSP, CGI 등 웹서비스연관데이터베이스
로그설정및분석관리 [1] Apache 로그파일 - 에러로그 (error log): Apache 서버의에러정보기록 - 액세스로그 (access log): Apache 서버가처리하는모든요청에대한기록 - ErrorLog 및 CustomLog 지시자 (directive) 를통해로그파일의위치설정 (http.conf)
로그설정및분석관리 [2] 에러로그 (error log) 파일 - 파일포맷은비교적자유로운형식이나, 다음과같은내용포함 1. 메시지의날짜와시간 2. 에러의위험도 3. 에러를발생시킨클라이언트주소 4. 에러메시지의내용 ( 클라이언트가요청한문서를파일시스템경로로표현 ) - LogLevel 지시자 (directive) 를통해에러의위험도수준설정 (http.conf)
로그설정및분석관리 [3] 액세스로그 (access log) 파일 - LogFormat 지시자 (directive) 를통해파일포맷선택 Common Log Format Combined Log Format Common Log Format - 웹서버에서공통으로사용하는로그포맷 - 로그분석프로그램이읽을수있는포맷 - 설정파일 (http.conf) 변경 - LogFormat 지시자 (directive) 는하나의포맷스트링을정의하고 common이라는닉네임을가짐 - CustomLog 지시자 (directive) 가로그가저장될파일의위치와이름, 로그포맷을정의 1. 클라이언트 IP 주소 (%h): 서버의성능저하 (off 권고 ) 2. 클라이언트신분 (%I): 서버의성능저하, 신뢰도낮음 (off 권고 ) 3. HTTP 인증받은사용자 ID (%u): 인증받지못한경우부정확, 인증을요구하지않는경우 - 표시 4. 서버가요청처리를끝낸시간 (%t): [ 일 / 월 / 년 : 시 : 분 : 초지역 ] 5. 클라이언트요청내용 (\ %r\): 사용한메쏘드, 요청한자원, 사용한프로토콜표시 6. 상태코드 (%>s): 2XX( 성공 ), 3XX(redirection), 4XX( 클라이언트에의한에러 ), 5XX( 서버에의한에러 ) 7. 클라이언트에전송된컨텐트크기 (%b): 없으면 - 표시
로그설정및분석관리 [4] Combined Log Format - 설정파일 (http.conf) 변경 - LogFormat 지시자 (directive) 는하나의포맷스트링을정의하고 combined이라는닉네임을가짐 - CustomLog 지시자 (directive) 가로그가저장될파일의위치와이름, 로그포맷을정의 1. 클라이언트가요청한자원이 include 되었거나링크된페이지 : (\ %{Referer}I\) 2. 클라이언트브라우저에대한정보 : (\ %{User-agent}I\) 로그파일의보호 - 일반사용자는로그저장디렉터리에쓰기권한이없도록설정 - 클라이언트가웹서비스를통해로그파일을볼수없도록설정