Deploying OSSEC for Host-based Intrusion Detection
Deploying OSSEC for Host-based Intrusion Detection
OSSEC provides comprehensive host-based intrusion detection:
# Install OSSEC
wget https://github.com/ossec/ossec-hids/archive/3.6.0.tar.gz
tar -xzf 3.6.0.tar.gz
cd ossec-hids-3.6.0
sudo ./install.sh
# Configure OSSEC for web server monitoring
sudo cat > /var/ossec/etc/ossec.conf << EOF
<ossec_config>
<global>
<email_notification>yes</email_notification>
<email_to>[email protected]</email_to>
<smtp_server>localhost</smtp_server>
<email_from>ossec@$(hostname)</email_from>
</global>
<syscheck>
<frequency>7200</frequency>
<directories check_all="yes" report_changes="yes">/etc,/usr/bin,/usr/sbin</directories>
<directories check_all="yes" report_changes="yes">/var/www</directories>
<directories check_all="yes" report_changes="yes">/etc/apache2,/etc/nginx</directories>
<ignore>/var/log</ignore>
<ignore>/var/cache</ignore>
<nodiff>/etc/ssl/private</nodiff>
</syscheck>
<rootcheck>
<rootkit_files>/var/ossec/etc/shared/rootkit_files.txt</rootkit_files>
<rootkit_trojans>/var/ossec/etc/shared/rootkit_trojans.txt</rootkit_trojans>
<system_audit>/var/ossec/etc/shared/system_audit_rcl.txt</system_audit>
<apps_audit>/var/ossec/etc/shared/apps_audit_rcl.txt</apps_audit>
</rootcheck>
<localfile>
<log_format>apache</log_format>
<location>/var/log/apache2/access.log</location>
</localfile>
<localfile>
<log_format>apache</log_format>
<location>/var/log/apache2/error.log</location>
</localfile>
<localfile>
<log_format>nginx</log_format>
<location>/var/log/nginx/access.log</location>
</localfile>
<localfile>
<log_format>nginx</log_format>
<location>/var/log/nginx/error.log</location>
</localfile>
<localfile>
<log_format>syslog</log_format>
<location>/var/log/auth.log</location>
</localfile>
<active-response>
<command>firewall-drop</command>
<location>local</location>
<level>10</level>
<timeout>600</timeout>
</active-response>
</ossec_config>
EOF
# Custom OSSEC rules for web servers
sudo cat > /var/ossec/rules/web_attacks.xml << EOF
<group name="web_attacks">
<!-- SQL Injection attempts -->
<rule id="100001" level="10">
<if_sid>31101,31108</if_sid>
<match>union select|concat(|information_schema</match>
<description>SQL Injection attempt detected</description>
<group>attack,sql_injection</group>
</rule>
<!-- XSS attempts -->
<rule id="100002" level="8">
<if_sid>31101,31108</if_sid>
<match>script>|javascript:|onerror=|onload=</match>
<description>XSS attempt detected</description>
<group>attack,xss</group>
</rule>
<!-- Directory traversal -->
<rule id="100003" level="8">
<if_sid>31101,31108</if_sid>
<match>../|..\\|%2e%2e</match>
<description>Directory traversal attempt</description>
<group>attack,directory_traversal</group>
</rule>
<!-- Repeated 404s (scanning) -->
<rule id="100004" level="7" frequency="10" timeframe="60">
<if_matched_sid>31101</if_matched_sid>
<same_source_ip />
<description>Multiple 404 errors - possible scanning</description>
<group>recon,scan</group>
</rule>
<!-- Brute force login attempts -->
<rule id="100005" level="10" frequency="6" timeframe="120">
<if_matched_regex>POST.*(login|signin|authenticate)</if_matched_regex>
<same_source_ip />
<description>Multiple login attempts - possible brute force</description>
<group>authentication_failed,brute_force</group>
</rule>
</group>
EOF
# Start OSSEC
sudo /var/ossec/bin/ossec-control start