Ossec, modsecurity et owasp scoring rules

Plop ….

Aujourd’hui, on replonge dans les méandres d’ossec et de modsecurity pour executer des bans en fonctions des scores retournés par modsecurity/owasp.

Le gros soucis lorsque l’on « mélange » plusieurs systèmes de sécurité, c’est le fait qu’ils ont tendances à se marcher dessus, ou à ne pas prendre en compte certains incidents. Heureusement pour nous, il est possible d’obtenir des synergies intéressantes en fonction de la configuration choisit entre Ossec et les règles Owasp pour le ModSecurity.

Config Ossec

Rajoutez les règles suivantes dans le fichiers rules/apache_rules.xml

<!-- NEW ModSecurity OWASP -->
  <rule id="30203" level="0">
    <if_sid>30101</if_sid>
    <match>ModSecurity: Warning</match>
    <description>ModSecurity log</description>
  </rule>
  <rule id="30204" level="6">
    <if_sid>30203</if_sid>
    <match>Operator GE matched|Anomaly Score Exceeded</match>
    <description>ModSecurity Attack Blocked</description>
    <group>access_denied,</group>
  </rule>
  <rule id="30205" level="10" frequency="3" timeframe="120">
    <if_matched_sid>30204</if_matched_sid>
    <same_source_ip />
    <description>Multiple attempts blocked by Mod Security.</description>
    <group>access_denied,</group>
  </rule>
<!-- Multiple BAN -->
  <rule id="30212" level="11" frequency="3" timeframe="3600">
    <if_matched_sid>30205</if_matched_sid>
    <same_source_ip />
    <description>Multiple attempts blocked (modsecurity).</description>
    <group>access_denied,</group>
  </rule>

Ces règles permettent à Ossec de prendre en compte les règles d’Owasp dépassant un certain score, ainsi que les tentatives successives d’attaques détectés.

Config Owasp / ModSecurity

Concernant la config de modsecurity, on configure une phase 2 en pass, nolog

SecDefaultAction "phase:1,deny,log"
SecDefaultAction "phase:2,pass,nolog"

On active les règles de scoring (par défaut dans modsecurity_crs_10_setup.conf) 900002, 900002, 900003,900004.
Ne pas oublier de configurer vos scores « d’anomalies ».

On passe aussi en DetectionOnly, ce n’est plus au modSecurity de bloquer, mais à Ossec.

SecRuleEngine DetectionOnly

Finalement

Un rédémarrage d’apache, ainsi qu’un redémarrage d’ossec vous permettront désormais d’effectuer des bans sur des menaces détecté via le scoring d’Owasps.

Points Positifs

  • Apache beaucoup plus rapide : le DetectionOnly consomme beaucoup moins de ressources (passage de ~1s à 200ms en temps de réponses).
  • Tunner le modsecurity est beaucoup plus simple (on configure uniquement le scoring).
  • Centralisation des bans.

Points négatifs

  • ModSecurity n’est plus capable de bloquer une attaque oneshot (SQL injection réussis du premier coup, …).
  • On perd un peu la puissance de modsecurity.

De mon côté, je cherchais surtout à réduire la charge/compléxité de configurations de mes serveurs ainsi que gagner en performances, ModSecurity de base ayant tendance à consommer énormément de ressource (augmente considérablement le temps de réponses dans de nombreux cas).