Το **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.

* Ειδικά για τους τύπους επιθέσεων (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) Αρχειοθετήθηκε 2012-09-17 στο Wayback Machine.
* Modsecurity manual - SecRuleRemoveById
* Handling False Positives and Creating Custom Rules
* 
* Apache mod\_security σε Debian Squeeze[*νεκρός σύνδεσμος*]

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

* **Rules (free)**
	+ Free Modsecurity Core Rule Set from OWASP
	+ Free Modsecurity (90 days delayed) rules from Atomicorp Αρχειοθετήθηκε 2012-09-08 στο Wayback Machine.
* **Rules (commercial)**
	+ Commercial ModSecurity Rules from Trustwave SpiderLabs
	+ Commercial ModSecurity Rules from Atomicorp[*νεκρός σύνδεσμος*]
* **Public Vulnerability Lists**
	+ Open Source Vulnerability Database - OSVDB[*νεκρός σύνδεσμος*]
	+ Bugtraq Αρχειοθετήθηκε 2016-01-11 στο Wayback Machine.