본문으로 바로가기

[Apache] 취약한 HTTP Method 제한 (httpd.conf)

category ETC 2021. 11. 17. 14:28

목차

    1. HTTP Request Method

    • GET: 클라이언트가 서버에게 URL에 해당하는 자료의 전송을 요청
    • HEAD: GET 요청으로 반환될 데이터 중 헤더 부분에 해당하는 데이터만 요청(바디 제외)
    • POST: 클라이언트가 서버에서 처리할 수 있는 자료를 보냄
    • PUT: 클라이언트가 서버에게 지정한 URL에 지정한 데이터를 저장할 것을 요청
    • DELETE: 클라이언트가 서버에게 지정한 URL의 정보를 제거할 것을 요청
    • CONNECT: 클라이언트가 특정 종류의 프록시 서버에게 연결을 요청
    • OPTIONS: 해당 URL에서 지원하는 요청 메세지의 목록을 요청(허용된 Method 확인)
    • TRACE: 클라이언트가 서버에게 송신한 요청의 내용을 반환해 줄 것을 요청
    • PATCH: 클라이언트가 서버에게 지정한 URL의 데이터를 부분적으로 수정할 것을 요청

    2. 제한 Method 정의

    Method 모두 열고 특정 Method를 제한하는 방식입니다.

    이 방식은 Method 제한이 잘 안 될 수도 있으므로 LimitExcept를 이용하는 것을 추천합니다.

     

    1. httpd.conf 파일 백업하기(백업을 생활화합니다.)

    일반적으로 파일 경로는 /etc/httpd/conf 에 설정 httpd.conf 파일이 존재합니다. (CentOS7)

    # cp httpd.conf httpd.conf.backup
    
    # ll
    합계 40
    -rw-r--r--. 1 root root 12003 11월 15 16:49 httpd.conf
    -rw-r--r--. 1 root root 12003 11월 15 16:53 httpd.conf.backup
    -rw-r--r--. 1 root root 13064 11월 17  2020 magic

     

    2. vi or vim 이용해 httpd.conf 파일을 수정합니다.

    • 설정이 필요한 Directory에 Limit을 이용해 막고자 하는 HTTP Method를 입력합니다.
    <Directory />
    	<Limit DELETE OPTIONS>
    		Order allow,deny
    		Allow from all
    	</Limit>
    </Directory>

     

    • TRACE 메소드를 막고 싶은 경우 httpd.conf 파일 맨 밑에 다음과 같이 작성합니다.
    TraceEnable Off

     

    3. 아파치 재시작

    # systemctl restart httpd

    3. 제한 제외 Method 정의

    Method 모두 막고 특정 Method를 허용하는 방식입니다.

     

    1. httpd.conf 파일 백업하기(백업을 생활화합니다.)

    일반적으로 파일 경로는 /etc/httpd/conf 에 설정 httpd.conf 파일이 존재합니다. (CentOS7)

    # cp httpd.conf httpd.conf.backup
    
    # ll
    합계 40
    -rw-r--r--. 1 root root 12003 11월 15 16:49 httpd.conf
    -rw-r--r--. 1 root root 12003 11월 15 16:53 httpd.conf.backup
    -rw-r--r--. 1 root root 13064 11월 17  2020 magic

     

    2. vi or vim 이용해 httpd.conf 파일을 수정합니다.

    • 설정이 필요한 Directory에 LimitExcept을 이용해 제한하고자 하는 HTTP Method를 입력합니다.
    <Directory />
    	<LimitExcept GET POST>
    		Order deny,allow
    		Deny from all
    	</LimitExcept>
    </Directory>

     

    • TRACE 메소드를 막고 싶은 경우 httpd.conf 파일 맨 밑에 다음과 같이 작성합니다.
    TraceEnable Off

     

    3. 아파치 재시작

    # systemctl restart httpd

    4. Curl HTTP Method 점검

    1. 현재 허용된 Method 확인(OPTIONS 허용된 경우)

    < Allow: POST, OPTIONS, GET, HEAD, TRACE를 보면 허용된 메소드를 확인할 수 있습니다.

    # curl -v -X OPTIONS localhost
    
    * About to connect() to localhost port 80 (#0)
    *   Trying ::1...
    * Connected to localhost (::1) port 80 (#0)
    > OPTIONS / HTTP/1.1
    > User-Agent: curl/7.29.0
    > Host: localhost
    > Accept: */*
    >
    < HTTP/1.1 200 OK
    < Date: Mon, 15 Nov 2021 07:57:28 GMT
    < Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
    < Allow: POST,OPTIONS,GET,HEAD,TRACE
    < Content-Length: 0
    < Content-Type: httpd/unix-directory
    <
    * Connection #0 to host localhost left intact

     

    2. HEAD Method 확인

    # curl -I localhost
    
    HTTP/1.1 403 Forbidden
    Date: Mon, 15 Nov 2021 08:19:04 GMT
    Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
    Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT
    ETag: "1321-5058a1e728280"
    Accept-Ranges: bytes
    Content-Length: 4897
    Content-Type: text/html; charset=UTF-8

     

    3. Http Method 확인

     

    [curl 옵션]

    -X : HTTP 메서드를 설정할 수 있다.
    -I : 헤더 요청만 받는다.
    -v : 자세하게 출력한다.

     

    # curl -v -X OPTIONS localhost
    
    * About to connect() to localhost port 80 (#0)
    *   Trying ::1...
    * Connected to localhost (::1) port 80 (#0)
    > OPTIONS / HTTP/1.1
    > User-Agent: curl/7.29.0
    > Host: localhost
    > Accept: */*
    >
    < HTTP/1.1 403 Forbidden
    < Date: Mon, 15 Nov 2021 08:32:01 GMT
    < Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
    < Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT
    < ETag: "1321-5058a1e728280"
    < Accept-Ranges: bytes
    < Content-Length: 4897
    < Content-Type: text/html; charset=UTF-8
    <
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html><head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
                    <title>Apache HTTP Server Test Page powered by CentOS</title>
                    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
    ( ... ) 생략

     

    # curl -I -X OPTIONS localhost
    
    HTTP/1.1 403 Forbidden
    Date: Mon, 15 Nov 2021 08:32:38 GMT
    Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
    Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT
    ETag: "1321-5058a1e728280"
    Accept-Ranges: bytes
    Content-Length: 4897
    Content-Type: text/html; charset=UTF-8

    'ETC' 카테고리의 다른 글

    JWT(JSON Web Token) 구조  (0) 2021.12.30
    [보안] 암호화와 복호화 그리고 암호 알고리즘 종류  (0) 2021.08.06