Archive

Articles taggués ‘mod_security’

Corriger les faux positifs de mod_security

05/04/2012 3 commentaires

Bon mod_security est merveilleux mais mod_security est aussi super casse couille!

Clairement plein de scripts peuvent générer des erreurs une fois mod_security activé.

Pour aller très vite on peut désactiver mod_security juste pour un virtualhost donné.Pour cela on ajoute dedans (dans /etc/httpd/conf.d/monvhost.conf): SecRuleEngine Off

Maintenant ca n’a pas vraiment d’intêret car en faisant ça le site est à nouveau vulnérable à plusieurs attaques. On peut donc être beaucoup plus précis en précisant uniquement les erreurs ou les attaques qui n’en sont finalement pas.

La première chose à faire est d’aller jeter un coup d’oeil dans les logs: tail -f /var/log/httpd/modsec_audit.log

tail – f permet d’afficher en live l’activité. Donc une fois cette commande lancée, on va se ballader sur le site en question et on génère l’erreur. On peut voir alors des messages de ce type:

Message: Match of “rx ^OPTIONS$” against “REQUEST_METHOD” required. [file "/etc/httpd/modsecurity.d/base_rules/modsecurity_crs_21_protocol_anomalies.conf"] [line "46"] [id "960015"] [rev "2.0.5"] [msg "Request Missing an Accept Header"] [severity "CRITICAL"] [tag "PROTOCOL_VIOLATION/MISSING_HEADER"] [tag "WASCTC/WASC-21"] [tag "OWASP_TOP_10/A7"] [tag "PCI/6.5.10"]

Ici on voit [id "960015"].

Là le tour est joué. Il suffit de relever l’ID puis de l’inscrire dans le virtualhost du site qui plante.
De la manière suivante:

<LocationMatch “/mondosiser-où-il-y-a-le-probleme ou /mon-fichier-qui-pose-probleme.php”>
SecRuleRemoveById 960015
</LocationMatch>

Pour les blog sous wordpress, une fois mod_security activé on ne peut même plus prévisualiser son article ou le publier. C’est plutôt problématique.
Il y a un paquet d’ID à relever et inscrire dans le virtualhost pour s’en sortir.

Comme je suis dans un bon jour, voici la liste à noter et tout sera réglé Wink

<LocationMatch “/”>
SecRuleRemoveById 910006
SecRuleRemoveById 960015
</LocationMatch>

<LocationMatch “/wp-admin/post.php”>
SecRuleRemoveById 300015 300016 300017 950907 950005 950006 960008 960011 960904
SecRuleRemoveById phpids-17
SecRuleRemoveById phpids-20
SecRuleRemoveById phpids-21
SecRuleRemoveById phpids-30
SecRuleRemoveById phpids-61
</LocationMatch>
<LocationMatch “/wp-admin/admin-ajax.php”>
SecRuleRemoveById 300015 300016 300017 950907 950005 950006 960008 960011 960904
SecRuleRemoveById phpids-17
SecRuleRemoveById phpids-20
SecRuleRemoveById phpids-21
SecRuleRemoveById phpids-30
SecRuleRemoveById phpids-61
</LocationMatch>

<LocationMatch “/wp-admin/page.php”>
SecRuleRemoveById 300015 300016 300017 950907 950005 950006 960008 960011 960904
SecRuleRemoveById phpids-17
SecRuleRemoveById phpids-20
SecRuleRemoveById phpids-21
SecRuleRemoveById phpids-30
SecRuleRemoveById phpids-61
</LocationMatch>

<LocationMatch “/wp-admin/options.php”>
SecRuleRemoveById 300015 300016 300017 950907 950005 950006 960008 960011 960904
SecRuleRemoveById phpids-17
SecRuleRemoveById phpids-20
SecRuleRemoveById phpids-21
SecRuleRemoveById phpids-30
SecRuleRemoveById phpids-61
</LocationMatch>

<LocationMatch “/wp-includes/”>
SecRuleRemoveById 960010 960012 950006
SecRuleRemoveById phpids-17
SecRuleRemoveById phpids-20
SecRuleRemoveById phpids-21
SecRuleRemoveById phpids-30
SecRuleRemoveById phpids-61
</LocationMatch>

Bien entendu on relance apache après ça: /etc/init.d/httpd graceful

A+

 

 

Bloquer l’envoie de spams par formulaire

03/04/2012 3 commentaires

Pas mal de formulaires sur les pages de contact sont détournés pour envoyer en masse du spams.

Lorsque l’on a un paquet de site sur son serveur ca devient compliqué de regarder chaque formulaire…

Il est possible d’installer mod_security est d’ajouter des directives pour réduire sensiblement cet effet.

j’avais déjà parlé sur cet article de l’installation et de la configuration de mod_security.

Maintenant concernant nos formulaire, il suffit d’éditer le fichier /etc/httpd/modsecurity.d/modsecurity_localrules.conf

et d’ajouter les directives:

SecRule REQUEST_BODY “bccNeutralccNeutralbcc%3A|cc%3A” t:lowercase,chain
SecRule REQUEST_BODY “[A-Za-z0-9._%-]+@[A-Za-z0-9._%-]+\.[A-Za-z]{2,4}\,\x20[A-Za-z0-9._%-]+@[A-Za-z0-9._%-]+\.[A-Za-z]{2,4}”
SecRule REQUEST_BODY “bccNeutralccNeutralbcc%3A|cc%3A” t:lowercase,chain
SecRule REQUEST_BODY “[A-Za-z0-9._%-]+@[A-Za-z0-9._%-]+\.[A-Za-z]{2,4}\,[A-Za-z0-9._%-]+@[A-Za-z0-9._%-]+\.[A-Za-z]{2,4}”
SecRule REQUEST_BODY “bccNeutralccNeutralbcc%3A|cc%3A” t:lowercase,chain
SecRule REQUEST_BODY “[A-Za-z0-9._%-]+%10[A-Za-z0-9._%-]+\.[A-Za-z]{2,4}\,\x20[A-Za-z0-9._%-]+%10[A-Za-z0-9._%-]+\.[A-Za-z]{2,4}”
SecRule REQUEST_BODY “bccNeutralccNeutralbcc%3A|cc%3A” t:lowercase,chain
SecRule REQUEST_BODY “[A-Za-z0-9._%-]+%10[A-Za-z0-9._%-]+\.[A-Za-z]{2,4}\,[A-Za-z0-9._%-]+%10[A-Za-z0-9._%-]+\.[A-Za-z]{2,4}”

SecRule REQUEST_URI “dm.cgi”
SecRule REQUEST_BODY|REQUEST_URI “\.cgi\?m\=state”
SecRule REQUEST_BODY|REQUEST_URI “cgi\?m\=snd”
SecRule REQUEST_BODY|REQUEST_URI “cgi\?m\=icfg”

A+

Sécuriser Apache contre les injections SQL, les DDOS et d’autres attaques

28/08/2009 un commentaire

J’avais déjà évoqué dans u’autres billets, les bases de sécurité à appliquer dans Apache, mysql et php lorsque l’on a son propre serveur.

Il est temps d’aller un peu plus en profondeur et se prémunir des attaques par DOS (Deny Of Service), des injections SQL, du flood de spam et bien plus encore.

Deux modules d’Apache permettent de faire cela très rapidement: mod_security et mod_evasive

apache_logo

Installation et configuration de mod_security

Sous Fedora/Centos

yum install mod_security

Ensuite toutes les règles se trouvent dans le dossier /etc/httpd/modsecurity.d/

ls /etc/httpd/modsecurity.d/
modsecurity_crs_10_config.conf
modsecurity_crs_20_protocol_violations.conf
modsecurity_crs_21_protocol_anomalies.conf
modsecurity_crs_23_request_limits.conf
modsecurity_crs_30_http_policy.conf
modsecurity_crs_35_bad_robots.conf
modsecurity_crs_40_generic_attacks.conf
modsecurity_crs_45_trojans.conf
modsecurity_crs_50_outbound.conf
modsecurity_localrules.conf
optional_rules

ls /etc/httpd/modsecurity.d/optional_rules/
modsecurity_crs_20_protocol_violations.conf
modsecurity_crs_21_protocol_anomalies.conf
modsecurity_crs_40_generic_attacks.conf
modsecurity_crs_42_comment_spam.conf
modsecurity_crs_42_tight_security.conf
modsecurity_crs_55_marketing.conf

Dans le fichier modsecurity_crs_10_config.conf, vérifier que SecRuleEngine est bien sur On

Commenter les directives suivantes:

#SecServerSignature "Apache/2.2.0 (Fedora)"
#SecComponentSignature "core ruleset/1.6.1"

Puisqu’Apache se charge deja de cacher tout ca.

Modifier la directive suivante de cette manière:

SecUploadKeepFiles RelevantOnly

Relancer httpd

/etc/init.d/httpd graceful

Vous pouvez jeter un coup d’oeil dans les fichiers conf pour voir tout ce qui va être sécurisé, c’est énorme!

Si jamais vous avez un domaine pour lequel vous ne souhaitez pas activer le mod_security (car il plante le site ou autre..). Ajouter la directive SecRuleEngine Off dans le virtualhost et redemarrer apache

Installation et configuration de mod_evasive sous Apache

Le module mod_evasive va se charger de bloquer les attaques par force brut, par DOS et de flood de spam. Il peut même interagir avec iptables.

Mod_evasive bloque le trafic en provenance de la source pendant une période donnée en renvoyant vers une page 403

Sous centos/fedora:

yum install mod_evasive

Editer le fichier de configuration /etc/httpd/conf.d/mod_evasive.conf et le configurer de la manière suivante:

vi /etc/httpd/conf.d/mod_evasive.conf
DOSHashTableSize    3097
DOSPageCount        3
DOSSiteCount        50
DOSPageInterval     2
DOSSiteInterval     2
DOSBlockingPeriod   10
DOSEmailNotify      votreemail@votredomaine.com
#DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP"[

DOSSystemCommand “/bin/echo %s >> /var/log/mod_evasive/dos_evasive.log && /bin/date >> /var/log/mod_evasive/dos_evasive.log”

DOSLogDir           "/var/log/mod_evasive/"
DOSWhitelist   127.0.0.1
#DOSWhitelist   192.168.0.*
DOSWhiteList 66.249.67.*
DOSWhiteList 66.249.71.*
DOSWhiteList 66.249.66.*
DOSWhiteList 66.249.72.*
DOSWhiteList 66.249.65.*
DOSWhiteList 66.249.65.*
DOSWhiteList 66.249.66.*
DOSWhiteList 66.249.71.*

DOSPageCount : Nombre maximal de requêtes qu’une adresse IP source peut réaliser sur la même ressource (même URL) pendant une unité de temps sans être ajoutée à la liste noire.

DOSSiteCount : Nombre maximal de requêtes qu’une adresse IP source peut réaliser sur le même enfant pendant une unité de temps sans être ajoutée à la liste noire.

DOSPageInterval : Temps évoquée dans la directive DOSPageCount (en seconde).

DOSSiteInterval : Temps évoquée dans la directive DOSSiteCount (en secondes).

DOSBlockingPeriod : Durée pendant laquelle tous les accès des adresses IP en liste noire seront refusés et recevront une erreur 403. Pas besoin de mettre beaucoup puisque l’IP sera blacklisté temps qu’elle n’arrête pas de flooder

DOSEmailNotify : Adresse email à prévenir lorsqu’une IP est interceptée

DOSSystemCommand : Commande a exécuter. Par exemple bloquer pat Iptables, ajouter l’adresse IP dans la blackliste du routeur, loguer l’IP…

DOSWhiteList : Adresse IP a ne jamais blacklister.  Il est bon d’ajouter les adresses IP des GoogleBot.

Il faut ensuite créer le dossier des logs et mettre les droits pour qu’apache puisse ecrire dedans

mkdir /var/log/mod_evasive/
chown -R apache.apache /var/log/mod_evasive

Il n’est pas recommandé de bloquer les IP directement avec Iptables apr mod_evasive car dans ce cas la il faut autoriser l’utilisateur apache a utiliser Iptables. Et la ca devient très dangereux en terme de sécurité.

Mais bon pour ceux qui veulent le faire, editer le fichier /etc/sudoers et ajouter la ligne : apache ALL=NOPASSWD:/sbin/iptables (ce qui est gênant c’est justement le NOPASSWD……..)

A+

Get Adobe Flash playerPlugin by wpburn.com wordpress themes