ModSecurity

Το ModSecurity είναι ένα "third party" Apache module, που προσφέρει ανίχνευση και προστασία από επιθέσεις σε διαδικτυακές εφαρμογές (intrusion detection and prevention for web applications), λειτουργώντας σαν τείχος προστασίας. Το ModSecurity δημιουργήθηκε από τον Ivan Ristic (συγγραφέα και του σχετικού βιβλίου), αλλά πλέον ανήκει στην Trustwave.

Ενδεικτικοί τύποι επιθέσεων:
 SQL injection attacks
 XSS cross-site scripting
 path traversal attacks
 file inclusion
 Denial of service (DOS) attack (experimental)
 Brute force attack (experimental)

Για να προσφέρει προστασία το ModSecurity πρέπει να δοθούν κανόνες (rules). Οι βασικοί κανόνες αποτελούν το Core Rule Set (CRS) και διατίθενται δωρεάν από το Open Web Application Security Project (OWASP). Παρέχεται αναλυτική τεκμηρίωση.

Ωστόσο, προσφέρονται και εμπορικές υπηρεσίες ή κανόνες κατά περίπτωση από εταιρίες που δραστηριοποιούνται στον τομέα ασφαλείας του Διαδικτύου, καθώς η συγγραφή κανόνων (rules) απαιτεί αρκετή εξειδίκευση.

Παρατηρήσεις
 το modsecurity core rule set ενσωματώνει και rules που προέχρονται από μετατροπή των αντιστοίχων rules του PHP-IDS, καθώς και των SNORT web attack rules που προσφέρει η Emerging threats (emerging-web_server.rules, emerging-web_specific_apps.rules)

 Εάν είναι επιθυμητό να αποκλείονται μέσω firewall οι IP από τις οποίες προέρχονται οι επιθέσεις που ανιχνεύει και αποκρούει το modsecurity θα πρέπει να εκπονηθούν τα σχετικά rules (παράδειγμα εδώ). Επίσης, μπορεί να χρησιμοποιηθεί η open source λύση fail2ban.

 Ειδικά για τους τύπους επιθέσεων (5) και (6) (Denial of service (DOS) attack και Brute force attack) μπορεί να εγκατασταθεί το mod_evasive. Τα δύο modules μπορούν να συνυπάρχουν.

Εγκατάσταση 
Εξαρτάται από το λειτουργικό σύστημα. Ενα παράδειγμα για Debian Squeeze:

apt-get install libapache-mod-security
a2enmod mod-security
service apache2 restart

Λήψη κανόνων 
OWASP ModSecurity Core Rule Set

cd /etc/apache2/
wget http://sourceforge.net/projects/mod-security/files/modsecurity-crs/0-CURRENT/modsecurity-crs_2.2.4.tar.gz
tar xvzf modsecurity-crs_2.2.4.tar.gz
mv modsecurity-crs_2.2.4 modsecurity_crs
chown -R root:root modsecurity_crs/
rm modsecurity-crs_2.2.4.tar.gz

Ρυθμίσεις 
Η εφαρμογή των modsecurity rules σε μία εγκατάσταση Apache είναι πιθανό να επιβάλει αποκλεισμό σε κάποια σημεία της εφαρμογής (συχνά αναφέρεται ως "ψευδώς θετικό" εύρημα "επίθεσης" (false positive), προκαλώντας μικρού ή μεγάλου βαθμού δυσλειτουργία της εφαρμογής.

Το πρώτο ζητούμενο είναι η βελτίωση του κώδικα (κατά περίπτωση), ώστε να μην ενεργοποιεί τα security rules.

Αν δεν επιδέχεται αλλαγές ο κώδικας και εξακολουθούν να ενεργοποιούνται κάποιοι κανόνες, τότε υπάρχει η ανάγκη αλλαγών στους κανόνες (συχνά δύσκολο) ή η επιλεκτική ακύρωση κάποιων από αυτούς (συνηθέστερο).

Μεθοδολογία 
Κατά την εκτέλεση της εφαρμογής, ενεργοποιούμε την παρακολούθηση του modsecurity log

tail -f /var/log/modsecurity/audit.log

Ενα παράδειγμα

--90823256-H--
Message: Access denied with code 403 (phase 2). Pattern match "\W{4,}" at ARGS:term. [file "/etc/apache2/modsecurity_crs/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf"] [line "155"] [id "960024"] [rev "2.2.4"] [msg "SQL Character Anomaly Detection Alert - Repetative Non-Word Characters"] [data "\xce\xb9\xcf\x89"]
Action: Intercepted (phase 2)
Apache-Handler: application/x-httpd-php
Stopwatch: 1332504099762623 2407 (312 1893 -)
Producer: ModSecurity for Apache/2.5.12 (http://www.modsecurity.org/); core ruleset/2.2.4.
Server: Apache/2.2.16 (Debian)

--90823256-Z--

Από το log βρίσκουμε την αιτία που προκάλεσε την ενεργοποίηση του κανόνα και επιδιώκουμε την βελτίωση του κώδικα. Αν αυτό δεν είναι εφικτό, αναιρούμε τον κανόνα με το σχετικό ID (ή tag ή msg).

Για όσο διαρκέσει η σχετική έρευνα μπορεί να χρησιμοποιηθεί η παράμετρος SecRuleEngine DetectionOnly, ώστε να παραμείνει λειτουργική η εφαρμογή και, όταν ολοκληρωθεί να επιστρέψει το SecRuleEngine On
nano /etc/apache2/modsecurity_crs/modsecurity_crs_10_config.conf
Θέτουμε
...
SecRuleEngine DetectionOnly
...
Χρειάζεται επανεκκίνηση Apache.

Ακύρωση κανόνα 
Γίνεται συνήθως με χρήση της SecRuleRemovebyID, αν και είναι διαθέσιμες και οι SecRuleRemoveByMsg και SecRuleRemoveByTag.

SecRuleRemovebyID XXXXXX

Απενεργοποίηση modsecurity για συγκεκριμένη IP 

SecRule REMOTE_ADDR "^94\.66\.4\.177$" phase:1,nolog,allow,ctl:ruleEngine=Off

Πηγές 
 Apache modsecurity
 Modsecurity Reference Manual
 OWASP ModSecurity Core Rule Set Project
 A Recommended Base Configuration
 Install and Configure mod_security on Apache
 Apache mod-security installation on Debian 6.0 (squeeze) 
 Modsecurity manual - SecRuleRemoveById
 Handling False Positives and Creating Custom Rules
 http://atomicorp.com/wiki/index.php/Mod_security
 Apache mod_security σε Debian Squeeze

Εξωτερικοί σύνδεσμοι 
 Rules (free)
 Free Modsecurity Core Rule Set from OWASP
 Free Modsecurity (90 days delayed) rules from Atomicorp 
 Rules (commercial)
 Commercial ModSecurity Rules from Trustwave SpiderLabs
 Commercial ModSecurity Rules from Atomicorp
 Public Vulnerability Lists
 Open Source Vulnerability Database - OSVDB
 Bugtraq

Ασφάλεια υπολογιστών