Το λήμμα παραθέτει τις πηγές του αόριστα, χωρίς παραπομπές. |
Το ModSecurity είναι ένα "third party" Apache module, που προσφέρει ανίχνευση και προστασία από επιθέσεις σε διαδικτυακές εφαρμογές (intrusion detection and prevention for web applications), λειτουργώντας σαν τείχος προστασίας. Το ModSecurity δημιουργήθηκε από τον Ivan Ristic (συγγραφέα και του σχετικού βιβλίου), αλλά πλέον ανήκει στην Trustwave.
Ενδεικτικοί τύποι επιθέσεων:
Για να προσφέρει προστασία το ModSecurity πρέπει να δοθούν κανόνες (rules). Οι βασικοί κανόνες αποτελούν το Core Rule Set (CRS) και διατίθενται δωρεάν από το Open Web Application Security Project (OWASP). Παρέχεται αναλυτική τεκμηρίωση.
Ωστόσο, προσφέρονται και εμπορικές υπηρεσίες ή κανόνες κατά περίπτωση από εταιρίες που δραστηριοποιούνται στον τομέα ασφαλείας του Διαδικτύου, καθώς η συγγραφή κανόνων (rules) απαιτεί αρκετή εξειδίκευση.
Παρατηρήσεις
Εξαρτάται από το λειτουργικό σύστημα. Ενα παράδειγμα για 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
SecRule REMOTE_ADDR "^94\.66\.4\.177$" phase:1,nolog,allow,ctl:ruleEngine=Off