Modsecurity-apache/Limiter-methodes-HTTP

From aldeid
Jump to navigation Jump to search

Limiter les méthodes HTTP autorisées

Description

Le jeu de règles de base contient une permission qui peut être supprimée. Il s'agit d'interdire certaines méthodes HTTP (pour plus de renseignements, référez-vous à la Rfc2616 spécifiant le protocole HTTP 1.1) qui pourraient présenter un risque de sécurité (méthodes PROPFIND, OPTIONS ou méthodes arbitraires).

Présentation théorique

Méthode GET

La méthode GET est certainement la plus utilisée, constituant la base du protocole. Elle permet d'interroger le serveur pour obtenir le contenu d'une page, comme le montre l'exemple qui suit. Le serveur, en retour envoie l'en-tête de réponse ainsi que le corps de la page demandée.

$ nc 127.0.0.1 80
GET /index.php/Accueil HTTP/1.1
Host: 127.0.0.1

HTTP/1.1 200 OK
Date: Sat, 05 Dec 2009 13:26:57 GMT
Server:  
X-Powered-By: PHP/5.3.0
Content-language: fr
Vary: Accept-Encoding,Cookie,User-Agent
X-Vary-Options: Accept-Encoding;list-contains=gzip,Cookie;string-contains=wikiToken;string-contains=wikiLoggedOut;string-contains=wiki_session
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: private, must-revalidate, max-age=0
Last-Modified: Tue, 01 Dec 2009 20:06:10 GMT
Content-Length: 29016
Content-Type: text/html; charset=utf-8

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" dir="ltr">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
[...]

Méthode HEAD

La méthode HEAD est identique à la méthode GET à ceci près qu'elle ne fournit que l'en-tête de réponse (la méthode GET fournit toute la réponse, à savoir l'en-tête et le corps). Exemple :

$ nc 127.0.0.1 80
HEAD /index.php/Accueil HTTP/1.1
Host: 127.0.0.1

HTTP/1.1 200 OK
Date: Fri, 04 Dec 2009 21:57:02 GMT
Server:  
Content-language: fr
Vary: Accept-Encoding,Cookie,User-Agent
X-Vary-Options: Accept-Encoding;list-contains=gzip,Cookie;string-contains=wikiToken;string-contains=wikiLoggedOut;string-contains=wiki_session
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: private, must-revalidate, max-age=0
Last-Modified: Fri, 04 Dec 2009 10:59:30 GMT
Content-Type: text/html; charset=utf-8

Méthode POST

INCOMPLETE SECTION OR ARTICLE
This section/article is being written and is therefore not complete.
Thank you for your comprehension.

Méthode OPTIONS

La méthode OPTIONS permet de lister les méthodes acceptées par le serveur (GET, POST, OPTIONS, TRACE, etc.). L'exemple qui suit montre que la méthode OPTIONS est autorisée par le serveur (code HTTP 200).

$ nc 127.0.0.1 80
OPTIONS /HTTP/1.1
Host: 127.0.0.1

HTTP/1.1 200 OK
Date: Fri, 04 Dec 2009 18:39:42 GMT
Server:  
Content-language: fr
[...]

Après la mise en place de la limitation, un message avertit que la méthode n'est pas implémentée (Code HTTP 501).

$ nc 127.0.0.1 80
OPTIONS / HTTP/1.1
Host: 127.0.0.1

HTTP/1.1 501 Method Not Implemented
Date: Fri, 04 Dec 2009 18:22:11 GMT
Server:  
Allow: 
[...]

Méthode TRACE

INCOMPLETE SECTION OR ARTICLE
This section/article is being written and is therefore not complete.
Thank you for your comprehension.

Méthode PUT

INCOMPLETE SECTION OR ARTICLE
This section/article is being written and is therefore not complete.
Thank you for your comprehension.

Méthode DELETE

INCOMPLETE SECTION OR ARTICLE
This section/article is being written and is therefore not complete.
Thank you for your comprehension.

Méthode CONNECT

INCOMPLETE SECTION OR ARTICLE
This section/article is being written and is therefore not complete.
Thank you for your comprehension.

Méthode PROPFIND

INCOMPLETE SECTION OR ARTICLE
This section/article is being written and is therefore not complete.
Thank you for your comprehension.

Méthodes arbitraires

INCOMPLETE SECTION OR ARTICLE
This section/article is being written and is therefore not complete.
Thank you for your comprehension.

Mise en oeuvre

Editer le fichier modsecurity_crs_30_http_policy.conf dès règles de base :

vim /usr/local/apache2/conf/modsecurity/base_rules/modsecurity_crs_30_http_policy.conf

Dans le fichier, commenter la ligne (la faire précéder d'un #) :

#SecRule REQUEST_METHOD "!^((?:(?:POS|GE)T|OPTIONS|HEAD))$" "phase:2,t:none,block,nolog,auditlog,status:501,msg:'Method is not allowed by policy', severity:'2',id:'960032',tag:'POLICY/METHOD_NOT_ALLOWED',setvar:tx.anomaly_score=+5,setvar:tx.policy_score=+1,setvar:tx.%{rule.id}-POLICY/METHOD_NOT_ALLOWED-%{matched_var_name}=%{matched_var}" 

et ajouter la ligne suivante juste en dessous :

SecRule REQUEST_METHOD "!^(?:GET|POST|HEAD)$" "phase:1,t:none,deny,status:501,msg:'Request content type is not allowed by policy',id:'960010',tag:'POLICY/ENCODING_NOT_ALLOWED',severity:'4'"