ModSecurity

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

Ενδεικτικοί τύποι επιθέσεων:

  1. SQL injection attacks
  2. XSS cross-site scripting
  3. path traversal attacks
  4. file inclusion
  5. Denial of service (DOS) attack (experimental)
  6. 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.

Εξαρτάται από το λειτουργικό σύστημα. Ενα παράδειγμα για 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

Εξωτερικοί σύνδεσμοι

[Επεξεργασία | επεξεργασία κώδικα]