본문 바로가기
IT Infra & OS & Security/Unix

[보안] 웹 서버 HTTP Trace 기능 지원

by 눈부셔™ 2017. 4. 2.
728x90

 [Unix-보안] 웹 서버 HTTP Trace 기능 지원

 

  • HTTP Trace 기능은 웹 서버가 웹 브라우져(클라이언트)에서 보낸 내용을 받아 이를 다시 웹 브라우져에게 되돌려 주는 것으로,
  • 공격자는 HTTP Trace 기능을 이용하여 HTTP 헤더에 있는 포함된 쿠키 혹은 인증 데이타를 획득하거나, Cross Site Scripting 공격을 할 수 있는 위협이 존재
  •  

     

    ■ 취약점

        - 웹 서버가 HTTP Trace 기능을 지원함

     HTTP Trace 기능 지원 (port 80)

     

     

    ■ 조치방법

        - 웹 서버가 HTTP Trace 기능을 지원하지 않도록 설정

     

        - SUN ONE 웹서버 4.1

          1. 다음과 같은 내용의 소스코드(reject_trace.c) 작성

    $include ""nsapi.h""
    NSAPI_PUBLIC int reject_trace(pblock *pb, Session *sn, Request *rq) {
        const char *method;
        method = pblock_findval(""method"", rq->reqpb);
        if (method && !strcmp(method, ""TRACE"")) {
            param_free(pblock_remove(""transfer-encoding"",rq->headers));
            param_free(pblock_remove(""content-length"", rq->headers));
            pblock_nvinsert(""content-length, ""-1"", rq->headers); 
            log_error(LOG_WARN, ""reject-trace"", sn, rq, ""rejecting TRACE request""); 
            protocol_status(sn, rq, PROTOCOL_NOT_IMPLEMENTED, NULL);                   
            return REQ_ABORTED;
        }
        return REQ_NOACTION;
    }

          2. 소스코드를 컴파일

          3. $vi obj.conf

          4. obj.conf 파일의 Init Section에 다음 내용을 추가

    Init fn=""load-modules"" shlib=""<path to library>/reject_trace.so"" funcs=""reject_trace""

          5. obj.conf 파일에 다음 내용을 추가

    <Object name=""default"">
        AuthTrans fn=""reject_trace""

          6. obj.conf 파일을 저장

     

        - WebtoB의 경우

          1. config 디렉토리에 위치한 환경설정파일 오픈

          2. *NODE 절의 Method 값 변경

              ※ 기본적으로 WebtoB에서는 모든 메소드를 허용하므로 제한하고자 하는 메소드는 메소드 이름 앞에 ""-""를 추가

    예) DELETE, TRACE 제한할 경우 (명기되지 않은 경우는 허용)

    *NODE
    < 중 략 >
    Method = ""-DELETE, -TRACE"",
    < 중 략 >

          3. wscfl를 이용하여 바이너리로 컴파일

     

        - Apache의 경우

          1. Apache의 mod_rewirte 모듈의 존재를 다음과 같이 확인 $ ls [설치 디렉토리]/libexec/mod_rewrite.so
            ※ mod_rewrite 모듈 설치시, 2∼8 과정을 건너뛰고 9 과정을 시행

          2. mod_rewrite 모듈 미 설치시, 웹 브라우져로 http://mirror.apache.or.kr/httpd/ 에 접속

          3. 현재 설치된 Apache 웹 서버의 버전의 소스를 /tmp 디렉토리에 내려받음

    $ cd /tmp
    $ gzip -d <내려받은 아파치 웹서버 소스 파일명>.tar.gz
    $ tar xvf <내려받은 아파치 웹서버 소스 파일명>.tar
    $ cp ./<내려받은 아파치 웹서버 소스 파일명>/src/modules/standard/mod\_rewrite. - /tmp
    $ cd /tmp
    $ [설치 디렉토리]/bin/apxs -iac ./mod\_rewrite.c
    $ vi [설치 디렉토리]/conf/httpd.con
         

          4. httpd.conf 파일에 다음 내용을 추가

    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} ^TRACE
    RewriteRule . - - [F]

          5. httpd.conf 파일을 저장

          6. $ [설치 디렉토리]/bin/apachectl restart

     

        - SUN ONE 웹서버 6.0 SP2 이후

          1. $ vi obj.conf

          2. obj.conf 파일에 다음 내용을 추가

    <Client method=""TRACE"">
        AuthTrans fn=""set-variable""
        remove-headers=""transfer-encoding""
        set-headers=""content-length: -1""
        error=""501""
    </Client>

          3. obj.conf 파일을 저장

          4. 웹 서버를 재실행

     

        - SUN ONE 웹서버 6.0 및 SP1

          1. 최신 Sun ONE/iPlanet 웹 서버 6.0 서비스 팩 혹은 Sun ONE/iPlanet 웹 서버 6.0 서비스 팩 2를 설치

          2. $vi obj.conf

          3. obj.conf 파일에 다음 내용을 추가

    <Client method=""TRACE"">
        AuthTrans fn=""set-variable""
        remove-headers=""transfer-encoding""
        set-headers=""content-length: -1""
        error=""501""
    </Client>

          4. obj.conf 파일을 저장

          5. 웹 서버를 재실행

    728x90