본문 바로가기

Computer/Linux

Apache 설치시 보안(조별발표자료)

Apache 설치시 보안고려 사항가. 호스트 자체 보안웹서버가 설치될 시스템은 웹서비스 이외의 다른 서비스 즉, NFS, FTP,telnet, mail 등의 부가적인 서비스를 제공하지 않고 웹서버 전용으로 운영하는 것이 바람직하다. 뿐만 아니라 서버에는컴파일러나 소프트웨어 개발 도구 등 불필요한 도구들도 제거하는 것이 안전하다. 웹서버의 관리를 위해서는 Telnet이나 FTP보다는 보안성이 뛰어난 SSH를 이용하는 것이 바람직하다. 그리고 서버상에 구동되는 모든 프로그램들은 보안 버그가 패치된 최신 버전을 유지하도록 한다.호스트 자체의 보안을 위한 상세한 가이드는 다음 문서를 참고….리눅스 시스템 관리자를 위한 보안 지침Ⅰ:http:/ / www.certcc.or.kr/ paper/ tr2001/ tr2001-03/ guide%20for%20Linux%20system%20admin.html또한, 네트워크 차원에서 적절한 접근통제와 침입에 대한 모니터링이 필요하다.라우터 보안 위협요소와 보안대책 :http :/ / www.certcc.or .kr/ p ap er/ tr2002/ tr2002_06/ 020603-rou ter_secu rity .p dfIpFilter를 사용한 Securing Solaris운영 :http :/ / www.certcc.or .kr/ tools/ firewall/ IPfilter/ IPfilter .htmlSn ort 설치 및 운영 가이드 :http :/ / www.certcc.or .kr/ tools/ Sn ort.html나. Apache를 위한 사용자 계정 생성Apache 웹서버 운영시에 위험을 최소화하기 위해서 웹서버 애플리케이션만을 위한하나의 유일하고 관리자 권한이 아닌 최소 권한의 사용자 ID와 그룹을 생성하는 것이 안전하다. 대부분의 경우에 이러한 목적을 위해 사용자 ID와 그룹으로 nobody"를 사용한다. 물론 웹서버를 위해 nobody가 아닌 다른 root 권한 이외의 사용자 ID와 그룹을 생성해도 무방하다.웹서버를 위해 생성된 root가 아닌 계정은 인터렉티브한 로그인을 허락해서는 않된다.즉 이 계정을 통해서 사용자가 로그인할 수 없도록 해야 한다. 패스워드 파일에서 Apache를 위한 사용자 계정(nobody)이 locked되어 로그인할 수 없는지 확인한다.nobody :x :99 :99 :Nobody :/ :nobody :* : 11900 :0 :99999 :7 : : :Ap ache 서버가 초기설정될 때, 로그 파일을 열고, 웹서버 데몬을 구동하고, 적당한TCP 포트(일반적으로 80 포트)를 열기 위해 root 권한이 필요하다. 일단 초기 구동단계가 완료되면 웹서버 데몬은 root가 아닌 이미 사전에 생성한 사용자 ID와 그룹(nobody)으로 전환한다.웹서버 데몬(httpd)이 root로 구동된 후 다른 사용자로 변환할 때 사용할 사용자와 그룹은 http d .conf 파일에서 지정해 줄 수 있다. 일반적으로 nobody를 사용할 경우다음과 같다.User nobodyGr oup nobody위의 설정으로 구동된 웹서비스 프로세스들은 초기 구동된 httpd 데몬 1개만이 root 권한이고 나머지는 nobody 권한으로 띄워져 있는 것을 확인할 수 있다. 일반사용자들이 웹 브라우져를 이용해서 웹 서비스를 받을 경우 nobody 권한의 httpd 데몬과 연결을 맺게 된다.#ps - auxUSER PID%CPU%MEM VSZ RSS TTY STAT START TIME COMMANDroot 968 0.0 0.8 2360 1036 ? S 09:45 0 :00 /usr / local/ apache/ bin/ht tpdnobody 978 0.0 0.8 2512 1080 ? S 09:45 0 :00 /usr / local/ apache/ bin/ht tpdnobody 979 0.0 0.8 2512 1080 ? S 09:45 0 :00 /usr / local/ apache/ bin/ht tpdnobody 980 0.0 0.8 2512 1080 ? S 09:45 0 :00 /usr / local/ apache/ bin/ht tpdnobody 981 0.0 0.8 2512 1080 ? S 09:45 0 :00 /usr / local/ apache/ bin/ht tpdnobody 982 0.0 0.8 2512 1080 ? S 09:45 0 :00 /usr / local/ apache/ bin/ht tpd일반적으로 standalone 형태의 웹서버가 리슨 하는 포트 번호가 80번인데, 포트 번호도 변경할 수 있다. 단, 1023 이하의 포트는 번호를 사용할 경우 처음 httpd를 구동시 반드시 root 권한이어야만 한다. 웹서버가 리슨하는 포트번호는 http d .conf 파일에서 다음과 같이 지정할 수 있다.Por t 80다. Apache 서버 소프트웨어 설치웹서버를 안전하게 하기 위해서 서버 데몬과 컨텐트가 별도의 하드 디스크 파티션에 인스톨되어져야만 한다. 웹 컨텐트는 DocumentRoot에 설치되는데 DocumentRoot는 모든 웹 컨텐트가 저장될 Apache 내부의 디렉토리 구조이다. 가능하면 이 디렉토리는 서버 root나 chroot로부터 별도의 파티션이나 하드 드라이버를 사용하는 것이 좋다. Ap ache 웹서버 애플리케이션 파일들로부터 컨텐트를 분리하는 것은 공격자가 웹서버 공격을 훨씬 어렵게 한다.Apache 기본 설치시에는 htdocs 디렉토리를 DocumentRoot로 사용하고 있는데 이를 바꾸도록 한다. htdocs 디렉토리는 공개되어서는 안될(또는 공개될 필요가 없는) Apache 문서를 포함하고 있으며, 공격에 이용될 수 있는 시스템 관련 정보도 포함하고 있다.본 고에서는 / usr/ local/ www을 DocumentRoot로 지정하였다. 설정은 httpd .conf파일에서 다음과 같이 할 수 있다.#Document Root "/ usr / loca l / apache/ htdocs "Document Root "/ usr / loca l /www"웹서버 데몬은 chroot에 설치하는 것이 안전하다. 만약 웹서버 데몬이 공격당했다고 하더라도 공격자는 chroot 디렉토리 이외로는 접근할 수 없어 피해를 최소화할 수있다.Apache 배포판의 src 디렉토리는 불필요한 실행파일을 컴파일할 수 있는 소스 코드들이 있어 서버에 남겨두지 않는 것이 안전하다.라. 디렉토리와 파일의 접근권한root에 의해 실행가능한 모든 명령어들은 항상 보호되어야 한다. root가 실행하는 명령어들이 root가 아닌 사용자들에 의해 변경되어서는 안된다. 따라서 이들 프로그램은 root에 의해서만 쓰기 가능하도록 하여야만 한다. 만일 root가 아닌 일반 사용자가 root가 실행하거나 쓰는 파일들에 대한 수정이 가능하다면 수많은 취약점과 공격에 노출되게 된다. 일반적으로 Apache 웹서버는 root로 시작되어지고 Apache 설정에서 정의된 사용자(nobody)로 전환된다. 이는 웹 페이지를 서비스하는 동안에 공격당하더라도 root 권한을 도용당하지 않도록 막아준다.다음은 웹서버 설치시 생성되는 주요 하위 디렉토리 및 그 기능이다.이름 기능 파일conf 웹서버 설정 httpd.conf, s rm.conf, acce ss .conflogs 웹서버 로그 a ccess_log, e rror_logcgi- bin CGI 실행파일들 CGI 스크립트들(printe nv, test- cgi 등)bin 실행파일들a b, a pxs , dbmma nage , htpasswd, logre solve ,a pa chectl, checkgid, htdigest, httpd, rotate logshtdocs 웹문서들 국가별 초기화면 및 메뉴얼include 헤더파일들ma n ma n 페이지icons 아이콘들s upport 도구들 관리용 유틸리티들각 디렉토리 및 Ap ache 웹서버의 실제 데몬인 http d의 소유자와 접근권한이 아래와 같이 설정되어 있는지 확인한다.cd / us r / l oca l / apachechown 0 . b in conf l ogschgr p 0 . b in conf l ogschmod 755 . b in conf l ogschown 0 / us r / l oca l / apache/ b in/ ht t pdchgrp 0 / us r / l oca l / apache/ b in/ ht t pdchmod 511 / us r / l oca l / apache/ b in/ ht t pd만일 root 만이 실행하거나 쓸 수 있는 파일을 root가 아닌 사용자가 수정할 수 있다면 시스템은 root 권한을 도용당할 수 있다. 가령 누군가 httpd 실행파일을 다른것으로 대체(replace)하고, 웹서버 관리자가 다음에 이 파일을 실행한다면 의도하지않은 임의의 코드가 실행될 수도 있다. 또한 logs 디렉토리가 root가 아닌 다른 사용자가 쓸 수 있다면 로그파일을 다른 시스템 파일에 심블릭 링크 걸어서 root가이 파일에 임의의 데이터를 overwrite 하게 만들 수도 있다. 그리고, log 파일 내용도 임의로 수정이 가능할 것이다.DocumnetRoot 상의 모든 파일들은 "nobody " 권한으로 구동하는 웹 서버에 의해서 읽혀 질 수 있어야만 한다. 또한 내부의 웹 문서 작성자들은 document root에 파일을 자유롭게 추가 또는 수정할 수 있어야만 한다. 따라서 DocumentRoot 디렉토리와 그 하위 디렉토리들은 웹문서 작성자 소유주와 그룹에 속해야 하고, 모든 이가 읽을 수 있어야 하고(world readable), 그룹 소속의 사용자들이 쓰기 가능해야만 한다.예를들어 웹문서 작성자를 webmaste"라 하고, 그룹은 webwrite"라고 가정해 보자.webwrite" 그룹에는 웹 문서를 추가하고 변경할 필요가 있는 계정을 추가하도록한다. webmaste와 hcjung라는 사용자가 웹문서를 작성한다고 할 경우 /etc/passwd파일과 /etc/group 파일의 등록 상황은 다음과 같이 할 수 있다.hcj ung :x :500 :501: :/ home/ hcj ung :/ b in/ bashwebmas t e :x :501:501: :/ us r / l oca l /www:/ b in/ bashwebwr i t e :x :501:webmas t e ,hcj ungDocumnetRoot 하의 허가권은 다음과 같다.[r oot@hcj ung www]# l s - a l합계 20drwxrwxr - x 2 webmas t e webwr i t e 4096 10월 10 13 :23 .drwxr - xr - x 14 r oot r oot 4096 10월 10 11:26 . .- rw- r - - r - - 1 webmas t e webwr i t e 450 10월 10 11:48 index .html- rw- r - - r - - 1 hcj ung webwr i t e 1333 10월 10 13 :23 t es t .html마. 불필요한 CGI 스크립트 제거Apache 배포판에는 불필요한 CGI 스크립트들이 포함되어 있어 공격에 이용될 수 있다. 특히, Apache 초기 버전의 경우 phf cgi, Count.cgi, php .cgi 등 많은 CGI 스크립트들이 제공되었다.Ap ache 설치시 기본적으로 cgi-bin 디렉토리에 설치되는 모든 CGI 스크립트들은 제거하는 것이 안전하다. 또한 필요에 의해 CGI 스크립트를 사용할 경우에는 사전에 그 안전성을 검토한 후에 설치하도록 한다. CGI 스크립트들과 다른 액티브 컨텐츠들은 웹서버 침해에 대단히 치명적인 잠재 위험을 내포하고 있다.프로그래머가 고의로 보안 허점을 넣지 않았다고 하더라도 의도하지 않게 허점이 존재할 수도 있다. CGI 입력값은 반드시 검사후에 유닉스 명령어 라인에 전달되어야 한다. 이는 악의적인 사용자가 악성 코드나 명령어를 입력값으로 넣어 root 권한으로 실행되도록 하는 것을 막을 수 있다.바. HTML 문서 트리로부터 모든 불필요한 파일들 제거DocumnetRoot 디렉토리 내의 모든 불필요한 파일들은 제거되어져야 한다. 특히, 공개 되어서 안될 정보를 포함한 파일들은 public하게 접근할 수 없도록 하여야 한다.아파치 설정 (httpd.conf) Port 80 : 특별한 경우가 아닌한 httpd 는 80 번 포트에 위치를 시키며, secure httpd (SSL) 의 경우는 443 번 포트에서, 또한 프록시는 8080 포트에 위치하는게 일반적이다. User nobody Group nobody 역시 특별한 경우가 아니면, 디포트 값인 nobody 로 실행 시킨다.  ~  : / 디렉토리에 관한 설정이다. ~ 의 옵션들은 밑에 설명... Options FollowSymLinks : 원격 사용자가 심볼릭 링크를 사용할수 있도록 하는 옵션이다. 이것은 원격 사용자가 웹 서비스 디렉토리 외의 공간에까지 접근 할 수 있는, 위험성을 가지고 있기 때문에,SymLinks 기능을 사용할 수 없도록 한다. Options Indexes : 기본 html 이 없을 경우 현재의 디렉토리를 그대로 보여줌으로써 문제가 될수 있다. Options ExecCGI : 현재 디렉토리에서 CGI 를 실행할 수 있는 권한을 부여한다. Options Include : SSI 를 사용할수 있게 한다. 보안상 문제가 발생할수 있으므로 사용하지 않을 경우에는 제거. ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/" : 보안상의 이유로 cgi 파일들을 위한 Alias AddType application/x-httpd-php .php3 .php .ph .inc : 보안을 위해 .inc 확장자 추가 ServerTokens ProductOnly : 웹서버에 관한 정보를 Apache 만 표시

'Computer > Linux' 카테고리의 다른 글

Sendmail 보안(조별발표자료)  (0) 2005.06.10
PHP 보안(조별발표자료)  (0) 2005.06.10
Network  (0) 2005.06.10
MySQL  (0) 2005.06.10
Apache  (0) 2005.06.10