Erinevus lehekülje "Modsecurity" redaktsioonide vahel
P |
|||
195. rida: | 195. rida: | ||
SecFilterSelective POST_PAYLOAD "!image/(jpeg|bmp|gif)" | SecFilterSelective POST_PAYLOAD "!image/(jpeg|bmp|gif)" | ||
</Location> | </Location> | ||
+ | |||
+ | Veel kasutusnäiteid: | ||
+ | |||
+ | #Accept only valid protocol versions, helps fight HTTP fingerprinting | ||
+ | SecFilterSelective SERVER_PROTOCOL !^HTTP/(0\.9|1\.0|1\.1)$ | ||
+ | #Allow supported request methods only | ||
+ | SecFilterSelective REQUEST_METHOD !^(GET|HEAD|POST)$ | ||
+ | #Require HTTP_USER_AGENT and HTTP_HOST, no telnet use. | ||
+ | SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$" | ||
+ | #require Content-Length to be provided with every POST request. | ||
+ | SecFilterSelective REQUEST_METHOD ^POST$ chain | ||
+ | SecFilterSelective HTTP_Content-Length ^$ | ||
+ | |||
+ | Unixi tavakäskude esinemise keelamine | ||
+ | |||
+ | SecFilter (uname|id|ls|cat|rm|kill|mail|su) | ||
+ | |||
+ | Kaustapuus tagasipöördumise keelamiseks, stiilis (../../). | ||
+ | |||
+ | SecFilter "\.\./" | ||
+ | |||
+ | Keelame unixi failisüsteemi kataloogide kasutamise. | ||
+ | |||
+ | SecFilter (/home/|/var/|/boot/|/etc/|/bin/|/usr/|/tmp/) | ||
'''Märkmeid kasutamisest''' | '''Märkmeid kasutamisest''' |
Redaktsioon: 7. mai 2012, kell 21:03
Sissejuhatus
ModSecurity, on nn veebiteenuse tulemüür (Web Application Firewall - WAF) ja IDS/IPS lahendus. Tegemist on tarkvaraga, mis filtreerib veebilehtedele tehtavaid päringuid ja üritab tõkestada nii rünnakuid serverile kui ka lehe näotustamise katseid.
Install ja seadistus
FreeBSDs asub moodul portsude www/mod_security harus Gentoo ...
httpd.conf
Siin on tarvilik laadida moodul ja seejärel konfiguratsioonifail
LoadModule security_module modules/mod_security.so
või
LoadModule security_module /usr/libexec/apache/mod_security.so
Ja
Include /etc/apache2/modsecurity.conf
modsecurity.conf sisu
<IfModule mod_security.c>
# Enable ModSecurity
SecFilterEngine On
# Reject requests with status 403
SecFilterDefaultAction "deny,log,status:403"
# Some sane defaults
SecFilterScanPOST On
SecFilterCheckURLEncoding On
SecFilterCheckUnicodeEncoding Off
# Accept almost all byte values
SecFilterForceByteRange 1 255
SecUploadDir /tmp
SecUploadKeepFiles Off
# Only record the interesting stuff
SecAuditEngine RelevantOnly
# Uncomment below to record responses with unusual statuses
# SecAuditLogRelevantStatus ^5
# modsecurity peamine logifail
SecAuditLog /var/log/apache2/modsec_audit.log
# You normally won't need debug logging
SecFilterDebugLevel 0
# modsecurity debug logi
SecFilterDebugLog /var/log/apache2/modsec_debug.log
# lokaalne exclude list, ehk siis tühistame mõningad liiga karmid reeglid (süntaks toodud allpool)
Include /etc/apache2/modsecurity/exclude.conf
# Gotroot.com'i http://www.gotroot.com/ reeglid
# exclude list
Include /etc/apache2/modsecurity/gotroot_exclude.conf
# application protection
Include /etc/apache2/modsecurity/rules.conf
#rootkits
Include /etc/apache2/modsecurity/rootkits.conf
</IfModule>
deny asemel võib panna ka esialgu debugimise eesmärgil pass.
põhireeglid rules.conf ilmselt kõige mõistlikum. Hetkel küljes ka rootkits.conf, mis peaks tõkestama kõiksugu failide includemised jmt.
badips on 7000~ rida IP numbreid, mida võiks põhimõtteliselt tulemüüri või kuhugi toppida ja ei pea apache regexides kasutama). Ilmselt on mõistlik badips.conf fail küljes hoida juhul kui soov vähendada DDoSi võimalust, kahjuks kõiki maailma halbu aadresse blokeerida ei jõua.
/var/log/httpd/modsec_audit.log failist saab jälgida, kelle ta ära blokib. Tundub, et üsna hoogsalt üritatakse spämmi edastada. Kui keegi kurdab, et tal asjad ei tööta, siis tuleks auditi logist uurida ja vajadusel /etc/apache/modsecurity/exclude.conf-is sealsete näidete alusel vastavad ID-d välja lülitada (per LocationMatch või Directory vms).
modsecurity/exclude.conf
<Directory /www/html> SecFilterRemove 300018 </Directory> <Directory /lasteaed/www/html> SecFilterRemove 300018 </Directory> <Directory /muistne/www/html/> SecFilterRemove 300018 </Directory>
Reegleid saab mõne veebi piires keelata ka näiteks .htaccess fail sisuga
SecFilterEngine Off SecFilterScanPOST Off
Mõned seadistuse näited
# Make sure that URL encoding is valid SecFilterCheckURLEncoding On # Only allow bytes from this range SecFilterForceByteRange 32 126 # Should mod_security inspect POST payloads SecFilterScanPOST On # Redirect user on filter match SecFilter xxx redirect:http://www.webkreator.com # Execute the external script on filter match SecFilter yyy log,exec:/home/ivanr/apache/bin/report-attack.pl # Simple filter SecFilter 111 # Only check the QUERY_STRING variable SecFilterSelective QUERY_STRING 222 # Only check the body of the POST request SecFilterSelective POST_PAYLOAD 333 # Only check arguments (will work for GET and POST) SecFilterSelective ARGS 444 # Another test filter, will be denied with 404 but not logged # action supplied as a parameter overrides the default action SecFilter 999 "deny,nolog,status:404" # Prevent OS specific keywords SecFilter /etc/password # Prevent path traversal (..) attacks SecFilter "\.\./" # Weaker XSS protection but allows common HTML tags SecFilter "<( |\n)*script" # Prevent XSS atacks (HTML/Javascript injection) SecFilter "<(.|\n)+>" # Very crude filters to prevent SQL injection attacks SecFilter "deletespace:+from" SecFilter "insertspace:+into" SecFilter "select.+from" # Require HTTP_USER_AGENT and HTTP_HOST headers SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$" # Forbid file upload SecFilterSelective "HTTP_CONTENT_TYPE" multipart/form-data # Only watch argument p1 SecFilterSelective "ARG_p1" 555 # Watch all arguments except p1 SecFilterSelective "ARGS|!ARG_p2" 666 # Only allow our own test utility to send requests (or Mozilla) SecFilterSelective HTTP_USER_AGENT "!(mod_security|mozilla)" # Do not allow variables with this name SecFilterSelective ARGS_NAMES 777 # Do now allow this variable value (names are ok) SecFilterSelective ARGS_VALUES 888 # Stop spamming through FormMail # note the exclamation mark at the beginning # of the filter - only requests that match this regex will # be allowed <Location /cgi-bin/FormMail> SecFilterSelective "ARG_recipient" "!@webkreator.com$" </Location> # when allowing upload, only allow images # note that this is not foolproof, a determined attacker # could get around this <Location /fileupload.php> SecFilterInheritance Off SecFilterSelective POST_PAYLOAD "!image/(jpeg|bmp|gif)" </Location>
Veel kasutusnäiteid:
#Accept only valid protocol versions, helps fight HTTP fingerprinting SecFilterSelective SERVER_PROTOCOL !^HTTP/(0\.9|1\.0|1\.1)$ #Allow supported request methods only SecFilterSelective REQUEST_METHOD !^(GET|HEAD|POST)$ #Require HTTP_USER_AGENT and HTTP_HOST, no telnet use. SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$" #require Content-Length to be provided with every POST request. SecFilterSelective REQUEST_METHOD ^POST$ chain SecFilterSelective HTTP_Content-Length ^$
Unixi tavakäskude esinemise keelamine
SecFilter (uname|id|ls|cat|rm|kill|mail|su)
Kaustapuus tagasipöördumise keelamiseks, stiilis (../../).
SecFilter "\.\./"
Keelame unixi failisüsteemi kataloogide kasutamise.
SecFilter (/home/|/var/|/boot/|/etc/|/bin/|/usr/|/tmp/)
Märkmeid kasutamisest
rakendamisel default reeglitega tõstis normaalse koormuse juures loadi tunduvalt. Siis kommenteerisin välja suure hulga reegleid, mis spämmisaatmise vastu võitlevad (regexpi kontrollid) ja load jäi 1 ja 1.5 kanti.
Apache 1.3 puhul tasub mod_security kompileerida libpcre abil ja panin apache libpcre sisse laadima - nii ei kasutata enam apache 1.3 seesmist regexi mootorit mis on pcre-st kordades aeglasem.
Enamus filtreid rakenduvad HTTP GET päringutele, keelatud on m.h. järgnev:
- teistele veebilehtedele viitamine täispika URLiga, nagu page=http://www.example.com/
- SQL käsurea esinemine, nagu: "select * from"
- UNIXi käskude esinemine, nagu: wget, uname
- PHP koodi või funktsioonide esinemine, nagu: <?php, exec, fopen
HTTP POST meetodiga saab edastada pikemaid tekste ja faile, mille puhul on raske kindlaks teha, kas tegemist on rünnakuga või näiteks Linuxi installeerimisjuhendiga, mistõttu selle meetodi päringute puhul tõkestatakse ainult liiklus, mis vastab täpselt mingi tuntud ründe mustrile.
Lisaks rakenduvad kõigile ülejäänud HTTP päringu päiseridadele filtrid, mis kontrollivad, et need vastaksid standarditele ja ei sisaldaks midagi lubamatut. Normaalse veebiliikluse puhul need reeglid aga probleeme ei peaks tekitama.
Tõkestatud liikluse tunnuseks on veakood 403 ja veebilehe asemel ekraanil näidatav kiri pealkirjaga "Forbidden".
- http://www.modsecurity.org/documentation/
- http://www.howtoforge.com/remo_modsecurity_apache
- http://blog.supportpro.com/2009/08/mod_security-intro/
http://www.askapache.com/htaccess/mod_security-htaccess-tricks.html
http://www.modsecurity.org/documentation/modsecurity-apache/1.9.3/html-multipage/05-actions.html
http://atomicplayboy.net/blog/2005/01/30/an-introduction-to-mod-security/
http://penguinsecurity.net/wiki/index.php?title=Web_Security_Appliance_With_Apache_and_mod_security
http://www.g-loaded.eu/2006/08/24/modsecurity-overview/
Abivahendid
http://www.netnea.com/cms/?q=remo ruulide loomise vahend
http://www.owasp.org/index.php/Category:OWASP_WeBekci_Project haldusvahend
http://www.modsecurity.org/projects/console/index.html ametlik konsool alertide vaatamiseks ja reeglite haldamiseks