Kategorie: Security

OpenSSL-HowTo

EDIT: Cool, irgendwie in den Entwürfen wiedergefunden, passt ja zum vorherigen Thema…: Link

Hier mal die (für mich) wichtigsten Infos über OpenSSL, CAs, Zertifikate und was weiß ich zusammengefasst:

Dateiarten:
*.csr:

*.pem:
Base64 kodiert, enthält den Schlüssel und das Zertifikat in einer Datei, beginnt (für den Schlüssel) mit „—–BEGIN RSA PRIVATE KEY—–“ und endet mit „—–END RSA PRIVATE KEY—–“, darauf folgt (für das Zertifikat) „—–BEGIN CERTIFICATE—–“ und endet mit „—–END CERTIFICATE—–“
*.crt:

*.key

*.der

Umwandlung von Zertifikaten:

Aufbau einer CA
openssl.cnf editieren, so dass die Einstellungen passen ,z.B. default_bits = 2048 (Setzt die Schküssellänge auf 2048Bit, default 512, oder 1024)
Verzeichnisse anlegen, die in der openssl.cnf beschrieben sind (ich mache es meist im Verzeichnis /etc/ssl/RootCA)
Unterverzeichnisse anlegen:
cd ./RootCA
mkdir newcerts certs crl private
# 2 separate Dateien anlegen
touch index.txt serial
# serial-Datei „befüllen“
echo „01“ > serial

Root-Zertifikat der CA erstellen
# Erst den Key
openssl genrsa -out -aes256 /etc/ssl/RootCA/private/RootCA.key.pem 2048
# Wenn -aes256 nicht angegeben wird, wird der Schlüssel unverschlüsselt (und ohne PW) abgespeichert
# 2048 am Ende steht für die Schlüssellänge

# Jetzt das Zertifikat (öffentlicher Teil)
openssl req -new -x509 -days 1027 -key private/RootCA.key.pem -out ./RootCA-cert.pem
# Das PW für den private Key muss angegeben werden
# mit
openssl x509 -in RootCA-cert.pem -text -noout | less
das Zertifikat überprüfen, die Seriennummer muss 0 sein

Jetzt ist das Zertifikat für die RootCA erstellt, es können nun Zertifikatsanforderungen gestellt werden, die die CA signieren muss
cd RootCA
# Erst den Key (wenn mit PW, dann -aes256 angeben) sonst wird kein PW hinterlegt (z.B. für Server)
openssl genrsa -out NAME.key.pem 1024
# Dann den CSR
openssl req -new -key NAME.key.pem -out NAME.req.pem
# Dann signieren
cd /etc/ssl/
openssl ca -name CA_NAME -cert ./RootCA/RootCA-cert.pem -keyfile ./RootCA/private/RootCA.key.pem -in ./RootCA/certs/ZERTIFIKAT.req.pem -out ./RootCA/certs/ZERTIFIKAT.cert.pem -outdir ./RootCA/newcerts/

Das Zertifikat wird in ./RootCA/newcerts abgelegt

CSR erstellen

Signieren

SSL-Verbindung mit sslsniff

Falls ich es mal wieder brauche:

CA und Konsorten erstellen:

CA-Key:
openssl genrsa -aes256 -out ca-key.pem 2048
Root-Cert:
openssl req -x509 -new -nodes -extensions v3_ca -key ca-key.pem -days 1024 -out ca-root.pem -sha512
Zertifikat erstellen:
openssl genrsa -out zertifikat-key.pem 4096
CSR für das Zertifikat:
openssl req -new -key zertifikat-key.pem -out zertifikat.csr -sha512
Beim CN auf den richtigen CN achten
Zertifikat erstellen:
openssl x509 -req -in zertifikat.csr -CA ca-root.pem -CAkey ca-key.pem -CAcreateserial -out zertifikat-pub.pem -days 365 -sha512

IPtables anpassen:
iptables -t nat -A PREROUTING -p tcp –-dport 443 -j REDIRECT –-to-ports 4433
iptables -t nat -A POSTROUTING -p tcp -o eth0 -j MASQUERADE

sslsniff starten:
sslsniff -a -c /root/zertifikat-pub.pem -s 4433 -w /tmp/https.log

Scapy-Guide

Einfaches IPv6 (ICMPv6)-Paket versenden:
send(IPv6(dst="ZIEL_IP"/ICMPv6EchoRequest()/"HALLODU")
Einfaches IPv6 (ICMPv6)-Paket mit falscher SRC-IP versenden:
send(IPv6(src="WHATEVER", dst="ZIEL_IP"/ICMPv6EchoRequest()/"HALLODU")
TCP als nächstes Paket androhen:
send(IPv6(src="WHATEVER", dst="ZIEL_IP",nh=0x06/TCP()/"HALLODU")

DM-Crypt entdecken

Wenn man mal wieder bei der Analyse von Festplatten auf einigen Partitionen nur Müll sieht, kann es sein, dass irgendwie verschlüsselte Systeme genutzt werden.
Evtl. hilft es dann, in einer evtl. unverschlüsselten Bootpartition mal nach Hinweisen danach zu suchen.
Wenn man dm-crypt nutzt, um seine Daten vor unberechtigtem Zugriff zu schützen, steht z.B. in der syslinux.cfg (sofern dies verwendet wurde) so etwas wie
APPEND cryptodevice
Bei Grub steht dort so etwas wie
GRUB_CMDLINE_LINUX_DEFAULT="cryptdevice

So einfach kann es sein…

Host2Host-VPN mit Strongswan

Nachdem mich das Einarbeiten in Strongswan fürchterlich Nerven gekostet hat (warum auch immer), hier die kurze Übersicht, wie man ein Host2Host-VPN aufbaut.

Zertfikate auf beiden Rechnern erstellen (openssl oder bei Debian automatisch durch apt …)
Zertfikate auf beiden Rechnern vorhalten (per SCP rüberkopieren)
auf beiden Seiten /etc/ipsec,conf konfigurieren (eigentlich reicht es, sie einmal zu erstellen und dann zu kopieren, strongswan ist im Gegensatz zu mir intelligent genug, damit klarzukommen)
Hier eine fertige ipsec.conf

# ipsec.conf - strongSwan IPsec configuration file
# basic configuration
config setup
# plutodebug=all
charonstart=yes
plutostart=yes
# Add connections here.
conn test
left=192.168.0.254
leftcert=/etc/ipsec.d/certs/H5001601Cert.pem
rightcert=/etc/ipsec.d/certs/linuxerCert.pem
right=192.168.0.4
auto=start

mit

ipsec start

und

ipsec up test

sollte die Verbindung aufgebaut werden und sich z.B. per

Starting strongSwan IPsec 2.8ipsec up test
002 "test" #5: initiating Quick Mode RSASIG+ENCRYPT+TUNNEL+PFS+UP {using isakmp#2}
112 "test" #5: STATE_QUICK_I1: initiate
002 "test" #5: sent QI2, IPsec SA established {ESP=>0x2ac0b396 0x2ac0b396 <0x5c7f99f1}

als erfolgreich zurückmelden.
Per tcpdump sieht man dann die ESP-Pakete:

14:19:58.709773 IP linuxer.local > tux: ESP(spi=0x5c7f99f1,seq=0x4f), length 84
14:19:59.708823 IP tux > linuxer.local: ESP(spi=0x2ac0b396,seq=0x3d), length 116