OSSEC ist ein Open-Source Host-based Intrusion Detection System. Es analysiert Logs, überwacht Dateiintegrität und kann auf Bedrohungen automatisch reagieren.

Was ist OSSEC?

Funktionen

- Log-Analyse und Korrelation
- Dateiintegritätsprüfung (FIM)
- Rootkit-Erkennung
- Aktive Reaktion (Active Response)
- Zentrales Management
- Agent-basierte Überwachung
- Compliance-Monitoring

Architektur

KomponenteBeschreibung
ServerZentraler Manager
AgentAuf überwachten Systemen
AgentlessOhne Installation
LocalStandalone-Modus

Installation

Server (Manager)

# Debian/Ubuntu
apt install build-essential gcc make libssl-dev

# Download
wget https://github.com/ossec/ossec-hids/archive/3.7.0.tar.gz
tar xzf 3.7.0.tar.gz
cd ossec-hids-3.7.0

# Installation
./install.sh

Installationstyp wählen

(en/br/cn/de/el/es/fr/hu/it/jp/nl/pl/ru/sr/tr) [en]: de
1- Was für eine Installation möchten Sie (server, agent, local, hybrid or help)? server

- Server installation chosen.

Wichtige Fragen

- E-Mail-Benachrichtigungen aktivieren? (y/n) [y]: y
- E-Mail-Adresse: admin@example.de
- SMTP-Server: localhost
- Integritätsprüfung aktivieren? (y/n) [y]: y
- Rootkit-Erkennung aktivieren? (y/n) [y]: y
- Active Response aktivieren? (y/n) [y]: y
- Firewall-Drop Response aktivieren? (y/n) [y]: y

Agent installieren

# Auf dem zu überwachenden Server
./install.sh
# Installation type: agent
# Server IP: 192.168.1.100

Konfiguration

Hauptkonfiguration

<!-- /var/ossec/etc/ossec.conf -->

<ossec_config>
  <global>
    <email_notification>yes</email_notification>
    <email_to>admin@example.de</email_to>
    <smtp_server>localhost</smtp_server>
    <email_from>ossec@example.de</email_from>
    <email_maxperhour>12</email_maxperhour>
  </global>

  <alerts>
    <log_alert_level>1</log_alert_level>
    <email_alert_level>7</email_alert_level>
  </alerts>

  <syscheck>
    <frequency>7200</frequency>
    <directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
    <directories check_all="yes">/bin,/sbin</directories>
    <ignore>/etc/mtab</ignore>
    <ignore>/etc/hosts.deny</ignore>
    <ignore>/etc/mail/statistics</ignore>
    <ignore>/etc/random-seed</ignore>
    <ignore>/etc/adjtime</ignore>
    <ignore>/etc/prelink.cache</ignore>
  </syscheck>

  <rootcheck>
    <frequency>36000</frequency>
    <rootkit_files>/var/ossec/etc/shared/rootkit_files.txt</rootkit_files>
    <rootkit_trojans>/var/ossec/etc/shared/rootkit_trojans.txt</rootkit_trojans>
  </rootcheck>

  <localfile>
    <log_format>syslog</log_format>
    <location>/var/log/syslog</location>
  </localfile>

  <localfile>
    <log_format>syslog</log_format>
    <location>/var/log/auth.log</location>
  </localfile>

  <localfile>
    <log_format>apache</log_format>
    <location>/var/log/nginx/access.log</location>
  </localfile>

  <localfile>
    <log_format>apache</log_format>
    <location>/var/log/nginx/error.log</location>
  </localfile>
</ossec_config>

Agent-Verwaltung

# Agent hinzufügen
/var/ossec/bin/manage_agents

****************************************
* OSSEC HIDS v3.7.0 Agent manager.     *
****************************************

(A)dd an agent (A).
(E)xtract key for an agent (E).
(L)ist already added agents (L).
(R)emove an agent (R).
(Q)uit.

Choose your action: A,E,L,R or Q: A

Agent-Key exportieren

# Auf Server
/var/ossec/bin/manage_agents
# Option E, Agent-ID eingeben
# Key kopieren

# Auf Agent
/var/ossec/bin/manage_agents
# Option I, Key einfügen

Dienste starten

Server

/var/ossec/bin/ossec-control start

Agent

/var/ossec/bin/ossec-control start

Status prüfen

/var/ossec/bin/ossec-control status

Dateiintegritätsprüfung

Konfiguration

<syscheck>
  <!-- Prüfintervall in Sekunden -->
  <frequency>7200</frequency>

  <!-- Echtzeit-Überwachung -->
  <directories realtime="yes" check_all="yes">/etc</directories>
  <directories realtime="yes" check_all="yes">/var/www</directories>

  <!-- Report Changes -->
  <directories report_changes="yes" check_all="yes">/etc</directories>

  <!-- Ausschlüsse -->
  <ignore>/etc/mtab</ignore>
  <ignore>/etc/hosts.deny</ignore>
  <ignore type="sregex">.log$</ignore>
</syscheck>

Prüfoptionen

OptionBeschreibung
check_allAlle Attribute prüfen
check_sumMD5/SHA1 Checksummen
check_sizeDateigröße
check_ownerBesitzer
check_groupGruppe
check_permBerechtigungen
realtimeEchtzeit-Überwachung
report_changesÄnderungen protokollieren

Baseline aktualisieren

/var/ossec/bin/syscheck_update -u local

Log-Analyse

Logs hinzufügen

<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/syslog</location>
</localfile>

<localfile>
  <log_format>apache</log_format>
  <location>/var/log/apache2/access.log</location>
</localfile>

<localfile>
  <log_format>mysql_log</log_format>
  <location>/var/log/mysql/error.log</location>
</localfile>

<localfile>
  <log_format>command</log_format>
  <command>df -P</command>
  <frequency>360</frequency>
</localfile>

Log-Formate

FormatBeschreibung
syslogStandard Syslog
apacheApache/Nginx Access
mysql_logMySQL Logs
postgresql_logPostgreSQL
commandBefehlsausgabe
full_commandVollständige Ausgabe
jsonJSON-Format

Regeln

Regel-Struktur

<!-- /var/ossec/rules/local_rules.xml -->

<group name="local,syslog,">

  <!-- Eigene Regel -->
  <rule id="100001" level="10">
    <if_sid>5716</if_sid>
    <srcip>!192.168.1.0/24</srcip>
    <description>SSH login from external network</description>
  </rule>

  <!-- Schwellwert-Regel -->
  <rule id="100002" level="10" frequency="5" timeframe="60">
    <if_matched_sid>5716</if_matched_sid>
    <same_source_ip/>
    <description>Multiple SSH logins from same IP</description>
  </rule>

</group>

Regel-Level

LevelBeschreibung
0Ignoriert
1Keine Aktion
2System Low Priority
3Successful Events
4System Low Errors
5User Generated Errors
6Low Relevance Attacks
7Bad Word
8First Time Seen
9Error from Invalid Source
10Multiple User Errors
11Integrity Checking Warning
12High Importance Event
13Unusual Error
14High Importance Security Event
15Severe Attack

Active Response

Konfiguration

<active-response>
  <!-- Firewall-Block -->
  <command>firewall-drop</command>
  <location>local</location>
  <level>6</level>
  <timeout>600</timeout>
</active-response>

<active-response>
  <!-- Host-Deny -->
  <command>host-deny</command>
  <location>local</location>
  <level>6</level>
  <timeout>600</timeout>
</active-response>

Eigene Reaktion

#!/bin/bash
# /var/ossec/active-response/bin/custom-response.sh

ACTION=$1
USER=$2
IP=$3
ALERTID=$4
RULEID=$5

# Log
echo "$(date) $ACTION $IP $RULEID" >> /var/log/ossec-response.log

# Aktion
if [ "$ACTION" = "add" ]; then
    # Block IP
    iptables -I INPUT -s $IP -j DROP
elif [ "$ACTION" = "delete" ]; then
    # Unblock IP
    iptables -D INPUT -s $IP -j DROP
fi
<command>
  <name>custom-block</name>
  <executable>custom-response.sh</executable>
  <expect>srcip</expect>
  <timeout_allowed>yes</timeout_allowed>
</command>

<active-response>
  <command>custom-block</command>
  <location>local</location>
  <rules_id>100001</rules_id>
  <timeout>3600</timeout>
</active-response>

Alerts und Reports

Alert-Logs

# Live-Alerts
tail -f /var/ossec/logs/alerts/alerts.log

# JSON-Format
tail -f /var/ossec/logs/alerts/alerts.json

Täglicher Report

/var/ossec/bin/ossec-reportd

Syscheck-Report

/var/ossec/bin/syscheck_control -l

Web-Interface (Wazuh)

Installation

# Wazuh ist der moderne OSSEC-Fork mit Web-UI
curl -sO https://packages.wazuh.com/4.7/wazuh-install.sh
bash wazuh-install.sh -a

Zugriff

URL: https://server-ip:443
User: admin
Password: (bei Installation angezeigt)

Agentless-Monitoring

SSH-basiert

<agentless>
  <type>ssh_integrity_check_linux</type>
  <frequency>36000</frequency>
  <host>admin@192.168.1.50</host>
  <state>periodic</state>
  <arguments>/etc /bin /sbin</arguments>
</agentless>

Gerät hinzufügen

/var/ossec/agentless/register_host.sh add admin@192.168.1.50 NOPASS

Troubleshooting

Logs prüfen

# OSSEC-Logs
tail -f /var/ossec/logs/ossec.log

# Alerts
tail -f /var/ossec/logs/alerts/alerts.log

# Archive
tail -f /var/ossec/logs/archives/archives.log

Agent-Verbindung

# Auf Server
/var/ossec/bin/agent_control -l

# Agent-Status
/var/ossec/bin/agent_control -i 001

Regel testen

# Regel mit Log-Eintrag testen
/var/ossec/bin/ossec-logtest

# Log-Zeile eingeben und Enter

Konfiguration prüfen

/var/ossec/bin/ossec-analysisd -t

Zusammenfassung

BefehlFunktion
ossec-control start/stopDienst steuern
manage_agentsAgents verwalten
agent_control -lAgents auflisten
ossec-logtestRegeln testen
syscheck_controlFIM-Status
VerzeichnisInhalt
/var/ossec/etcKonfiguration
/var/ossec/rulesRegeln
/var/ossec/logsLogs
/var/ossec/queueQueues
DateiFunktion
ossec.confHauptkonfiguration
local_rules.xmlEigene Regeln
agent.confAgent-Konfiguration
internal_options.confInterne Optionen

Fazit

OSSEC ist ein mächtiges HIDS für Linux-Server. Die Kombination aus Log-Analyse, Dateiintegritätsprüfung und aktiver Reaktion bietet umfassenden Schutz. Für größere Umgebungen empfiehlt sich der Wazuh-Fork mit modernem Web-Interface. Die Lernkurve ist steil, aber die Investition lohnt sich für sicherheitskritische Infrastrukturen.