Apapche 2 mod_security

Mod_Security kann auch den SSL Traffic filltern, da es vor der Verschlüsselung greift.
Was Snort nicht kann :-(

Bei SLES liblua: (lynx http://www.linuxfromscratch.org/blfs/view/svn/general/lua.html)
	"wget http://www.lua.org/ftp/lua-5.2.3.tar.gz"
	"tar -xzf lua-5.2.3.tar.gz"
	"wget http://www.linuxfromscratch.org/patches/blfs/svn/lua-5.2.3-shared_library-1.patch"
	"cd lua-5.2.3"
	patch -Np1 -i ../lua-5.2.3-shared_library-1.patch &&
	"sed -i '/#define LUA_ROOT/s:/usr/local/:/usr/:' src/luaconf.h &&
	make linux
	make INSTALL_TOP=/usr TO_LIB="liblua.so liblua.so.5.2 liblua.so.5.2.3" \
	INSTALL_DATA="cp -d" INSTALL_MAN=/usr/share/man/man1 install &&
	mkdir -pv /usr/share/doc/lua-5.2.3 &&
	cp -v doc/*.{html,css,gif,png} /usr/share/doc/lua-5.2.3

	in der httpd.conf dann "LoadFile /usr/lib/liblua.so.5.2.3" eintragen.

Bei openSUSE 42.1: libxml2. Siehe libxml2_how_to.txt

"wget https://www.modsecurity.org/tarball/2.7.7/modsecurity-apache_2.7.7.tar.gz"
"tar -xzf modsecurity-apache_2.7.7.tar.gz"
"cd modsecurity-apache_2.7.7/"
"./autogen.sh"
"./configure --bindir=/usr/bin --sbindir=/usr/sbin --libdir=/usr/lib64 --includedir=/usr/include --with-lua=/usr/lib --enable-extentions --enable-pcre-study --enable-pcre-jit --enable-lua-cache --enable-htaccess-config --enable-verbose-output"
"make"
"make install"
"cp -frv /usr/local/modsecurity/lib/* /usr/local/apache2/modules/"

"vi /usr/local/apache2/conf/httpd.conf" ->
	LoadFile /usr/lib64/libxml2.so
	LoadFile /usr/lib64/liblua.so.5.2
	LoadModule security2_module modules/mod_security2.so

###
ACHTUNG: Die v2 Regeln sind Inkompatibel zu den V3 Regeln

OWASP ModSecurity Core Rule Set (v2):
	"mkdir /usr/local/apache2/conf/crs"
	"cd /usr/local/apache2/conf/crs"
	"wget --no-check-certificate  https://github.com/SpiderLabs/owasp-modsecurity-crs/tarball/master" oder "lynx http://spiderlabs.github.io/owasp-modsecurity-crs/"
	"mv master master.tar.gz"
	"tar -xzf  master.tar.gz"
	"mv SpiderLabs-owasp-modsecurity-crs-7528b8b/* ."
	"mv modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf"
	"mv crs-setup.conf.example crs-setup.conf"
	"ln -s /usr/local/apache2/conf/crs/modsecurity_crs_10_setup.conf activated_rules/modsecurity_crs_10_setup.conf"
	"for f in `ls base_rules/` ; do ln -s /usr/local/apache2/conf/crs/base_rules/$f activated_rules/$f ; done"
	"for f in `ls slr_rules/` ;  do ln -s /usr/local/apache2/conf/crs/slr_rules/$f activated_rules/$f ; done"
	"for f in `ls /usr/local/apache2/conf/crs/experimental_rules/` ;  do ln -s /usr/local/apache2/conf/crs/experimental_rules/$f /usr/local/apache2/conf/crs/activated_rules/$f ; done"
	"for f in `ls optional_rules/` ; do ln -s /usr/local/apache2/conf/crs/optional_rules/$f activated_rules/$f ; done"
	"ls -al activated_rules/"
	
	"vi /usr/local/apache2/conf/httpd.conf" -> 
		LoadModule unique_id_module modules/mod_unique_id.so
	
		<IfModule security2_module>
			#SecRuleEngine On
			SecRuleEngine DetectionOnly
			SecResponseBodyAccess Off
			SecRequestBodyLimit 13107200
			SecRequestBodyNoFilesLimit 131072
			SecRequestBodyInMemoryLimit 131072
			SecDefaultAction "log,deny,phase:1"
			
			#OWASP Regelen laden
			#Include conf/crs/modsecurity_crs_10_setup.conf			#Bereits im activated_rules Verzeichnis vorhanden.
			Include conf/crs/activated_rules/*.conf
			
			#SecRuleRemoveById 981143,981185,981186,981203,981144,981060,981184,981203			#Falls man Regeln deaktivieren möchte
			  
		</IfModule>
###
OWASP ModSecurity Core Rule Set (v3):
	"git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git"
	"cd owasp-modsecurity-crs/"
	"mv crs-setup.conf.example crs-setup.conf"

	"vi /usr/local/apache2/conf/httpd.conf" -> 
		LoadModule unique_id_module modules/mod_unique_id.so
	
		<IfModule security2_module>
			#SecRuleEngine On
			SecRuleEngine DetectionOnly
			SecResponseBodyAccess Off
			SecRequestBodyLimit 13107200
			SecRequestBodyNoFilesLimit 131072
			SecRequestBodyInMemoryLimit 131072
			SecDefaultAction "log,deny,phase:1"
			
			#OWASP Regelen laden
			###########################             
            include /usr/local/apache2/conf/crs/owasp-modsecurity-crs/crs-setup.conf
            include /usr/local/apache2/conf/crs/owasp-modsecurity-crs/rules/*.conf

			#SecRuleRemoveById 981143,981185,981186,981203,981144,981060,981184,981203			#Falls man Regeln deaktivieren möchte
			  
		</IfModule>
###	
	
	
Test:
firefox: http://mooreblog.ddns.net/?param="><script>alert(1);</script>
oder "curl localhost/index.html?exec=/bin/bash" "http://mooreblog.ddns.net/index.html?exec=/bin/bash"

"mkdir -p /usr/local/apache/conf/modsec_current/"
"ln -s /usr/local/apache2/conf/crs/lua/ /usr/local/apache/conf/modsec_current/base_rules"
"vi /usr/local/apache/conf/modsec_current/base_rules/osvdb.lua" ->
	#!/usr/bin/lua

modsec-flameeyes Rules:
	"cd /usr/local/apache2/conf/crs"
	"export GIT_SSL_NO_VERIFY=true"
	"git clone https://github.com/Flameeyes/modsec-flameeyes"
	"cp -frv modsec-flameeyes/rules/* activated_rules/"

Comodo Rules:
https://waf.comodo.com/
Login erforderlich

Bei starten und stoppen des apachen darauf achten das keine doppelten Regeln aktiv sind.

###############################################################################################
Snort rules nach mod_security_konvertieren. Geht leider nur mit MOD_Security 1x .
"wget http://www.modsecurity.org/documentation/snort2modsec.pl" oder "wget http://www.modsecurity.org/documentation/snortmodsec-rules.txt"
"perl snort2modsec.pl snort_rules/rules/*.rules > snort_mod_security_rules.conf"
"cp -frv snort_mod_security_rules.conf /usr/local/apache2/conf/crs/activated_rules/"
###############################################################################################

###############################################################################################
GeoIP Database

"wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz"
"gunzip GeoLiteCity.dat.gz"
Den Pfad in einigen Regel anpassen. Das ist alles.
Ggf. "ln -s /usr/local/apache2/conf/crs/GeoLite2-City.mmdb /usr/local/apache/conf/modsec_current/base_rules/GeoLiteCity.dat"
"mkdir -p /usr/local/apache/conf/modsec/"
"ln -s /usr/local/apache2/conf/crs/GeoLite2-City.mmdb /usr/local/apache/conf/modsec/GeoLiteCity.dat"
"mkdir -p /usr/local/apache/conf/crs/lua/"
"ln -s /usr/local/apache2/conf/crs/lua/gather_ip_data.lua /usr/local/apache/conf/crs/lua/gather_ip_data.lua"
Ggf. "cp -frv /usr/local/apache2/conf/crs/lua/* /usr/local/apache/conf/crs/lua"

###############################################################################################

###############################################################################################
Zugriff auf OVSDB: ????

###############################################################################################

###############################################################################################
Mit ClamAV verbinden:
ClamAV installieren. Siehe ClamAV Doku
"ln -s /usr/local/apache2/conf/crs/util/av-scanning/runav.pl /bin/runAV"

###############################################################################################

###############################################################################################
#Zusatzinfos und Kommandos zur Hilfe:
"ls -al /usr/local/apache2/conf/crs/activated_rules/*.conf | awk '{print $9}';"
"find . -type f -iname "*" -print0 | xargs -0 grep -i -o 2008822 "
"grep ModSecurity /usr/local/apache2/logs/mooreblog_v-host_error.log | sed -e 's#^.*\[id "\([0-9]*\).*hostname "\([a-z0-9\-\_\.]*\)"\].*uri "#\1 \2 #' | cut -d\" -f1 | sort -n | uniq -c | sort -n" = Filter sortieren

#403 error
"vi .htaccess" -> ErrorDocument 403 /403_error.php
"vi 403_error.php" ->
	NIX GUT !!!
	<?php
		date_default_timezone_set("Europe/Berlin");
		echo "<br>";
		$t = microtime(true);
		$micro = sprintf("%06d",($t - floor($t)) * 1000000);
		$d = new DateTime( date('Y-m-d H:i:s.'.$micro,$t) );
		print $d->format("Y-m-d H:i:s.u"); // note at point on "u"
		echo "<br>";
	?>


###############################################################################################
#Custom Rules

Post Revisions: