cfranke.org

Exif Daten in Python auswerten

2021-01-06

Vor kurzem habe ich die absolut sehenswerte Mini-Serie und TrueCrime Doku "Don't f*ck with Cats" gesehen. In dieser jagen mehrere Personen, über das Internet einen Tierquäler der seine Taten über YouTube veröffentlicht.
Da der Täter ein Narzisst und Selbstdarsteller ist findet man von ihm im Internet jede menge Fotos. Um den Standort vom Täter zu ermitteln suchen, die in einer Facebook-Gruppe organisierten, Dedektive nach Meta-Daten (Exif) in den Fotos. Dabei nutzen Sie eine nicht genannte Website, auf der Sie jedes Bild einzelnd hochladen und auswerten. Bei hunderten Fotos ist dies ein immenser und unnöter Aufwand.

Ich habe darauf ein ein kleines Python Script erstellt, welches einen Ordner nach Jpeg-Files durchsucht und die Exif-Daten mit den Coordinaten und einem OpenStreetMap-Link in ein CSV exportiert.

Terminal Screenshot

CSV Spreadsheet

Oben lässt sich die Variable path auf den gewünschten Zielpfad abändern. Ohne Änderung sucht das Script im aktuellen Pfad. Die Ausgabe ist CSV kompatibel mit einem Semikolon als Delimiter. Um ein CSV zu generieren reicht es die Ausgabe in ein solches File umzuleiten.


Redhat Backporting

2020-07-21

Wer auf Redhat-Systeme und deren Derivate (CentOS) setzt der wird evtl. auf das Security Konzept "Backporting" gestoßen sein. In einem Artikel im RedHat Customer Portal erklären die Entwickler das Konzept mit einem, in die Jahre gekommenen, Beispiel:

Redhat stellte für Redhat Linux Enterprise 6 die PHP Version 5.3 zur Verfügung. Diese ist seid dem 14.08.2014 End-of-Life - Sie erhält keine (Sicherheits)updates mehr. Am 14.10.2014 wurde jedoch eine kritische Sicherheitslücke (CVE-2014-3670) veröffentlicht. Während benutzer anderer Systeme auf PHP 5.4 aktualisieren mussten um vor der Sicherheitslücke geschützt zu sein, konnten Redhat Kunden ihre PHP 5.3 Installation mit einem von Redhat bereitgestellten Patch schützen. PHP 5.3 behielt dabei seine Versionsnummer, da nur die entsprechende Sicherheitslücke gestoppft wurde.

Diese Systematik hat viele Vorteile bringt aber auch einige Verwirrung bei Admins. Bei vielen Security-Scans werden so False-Postitives generiert, bei denen vorschnell gefordert wird doch Version XYZ zu installieren. Um nachzusehen ob das aktuell eingesetzte Softwarepaket imun gegen eine bestimmte Sicherheitslücke ist, muss man hier etwas genauer nachsehen.

Um z.B. zu prüfen ob der Apache Webserver 2.4 gegen die Sicherheitslücke CVE-2019-0220 verwundbar ist kann man den folgenden Befehl bemühen:

$ rpm -q --changelog httpd |grep CVE-2019-0220
- Resolves: #1696096 - CVE-2019-0220 httpd: URL normalization
inconsistency

Wir durchsuchen also das RPM Changelog des Softwarepakets httpd nach der entsprechenden CVE. Liefert die Suche kein Ergebnis, deutet dies darauf hin das die Sicherheitslücke noch nicht gepatched wurde. In diesem Beispiel sehen wir jedoch das, das die Sicherheitslücke behoben wurde.

Wichtiger Hinweis: Das Changelog versagt oft bei der Abfrage von sehr alten Sicherheitslücken. Hier hilft nur noch eine Suche auf dem Redhat Customer Portal.


Content Filter Bypass via SSH

2020-03-23

Manchmal kommt man in die Situation in der man einen Content-Filter / transparent Proxy etc umgehen muss, oder einfach nur einen sicheren ungefilterteten Internet-breakout. . Wer zuhause einen erreichbaren SSH Server stehen hat kann seinen Web-Traffic durch SSH nach Hause tunneln.

Als erstes erzeugen wir den SSH-Socks-Proxy.

$ ssh -D 8080 -p22 -q -C -N user@host.tld

Der Parameter -D gibt den Port an, auf dem der Socks-Proxy lauscht, während der Parameter -p den Zielport des SSH Servers angibt (standartmäßig 22).

Der Socks-Proxy lässt sich am einfachsten in Mozilla's Firefox konfigurieren. Unter Einstellungen > Allgemein > Verbindungs Einstellungen kann man den Proxy angeben.

Das war's. Ihr geht surft nun durch einen verschlüsselten Tunnel über eure Internetleitung.


Windows Terminal Config

2020-03-18

Da ich an meinem Arbeitsplatz auf Microsoft Windows angewiesen bin, ich die meiste Zeit aber in einem Bash-Terminal verbringe bin ich für WSL und das neue Windows Terminal sehr dankbar. Zusammen mit TMUX kann man sich so ein brauchbares und ansprechendes Setup basteln.

Für alle die sich die nicht die Mühe machen wollen, ihre tmux.conf und Windows-Terminal-Settings selbst anzupassen habe ich meine hier bereitgestellt.

Update

Offenbar hat Microsoft im Laufe der letzten Releases ein weiteres Feature ausgerollt: Split-Panes. Damit kann ich jetzt auch weitgehend auf tmux verzichten. Mit den Tasten [Shift] [Alt] [ + ] bzw [ - ] kann ich das Terminal horizontal sowie vertical teilen. Hier kann man im Gegensatz zu tmux auch die Maus zum auswählen des aktiven Panes verwenden.


Harden your Raspberry Pi

2020-03-18

Der ein oder andere von euch besitzt evtl einen Raspberry Pi als Homeserevr. So einen kleinen low-budget & low-energy server ist für viele Dinge praktisch: Nextclound-Server, VPN-Gateway etc.

Ihr solltet euch aber auch darüber im klaren sein, das ein über das Internet erreichbarer Host auch immer ein potentieller Spielplatz für Angreifer ist. Wer Zugriff auf euren Pi hat, ist auch in eurem Netzwerk. Um es dem Angreifer schwerer zu machen, hab ich hier mal ein paar Maßnahmen aufgelistet. Ich gehe in meinem Beispiel von einem Raspbian-Host aus.

Updates

Das erste was Ihr tun solltet ist, den Host auf einen aktuellen Patchstand zu bringen.

sudo apt-get update
sudo apt-get upgrade

Sicherheitsupdates sollten automatisch heruntergeladen und installiert werden. Zunächst stellen wir sicher das wir das Paket unattended-upgrades installiert haben.

apt-get install unattended-upgrades

Als nächstes updaten wir das file /etc/apt/apt.conf.d/10periodic mit folgenden Zeilen.

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

Da wir nur Sicherheitsupdates unattended installieren wollen ändern wir das File /etc/apt/apt.conf.d/50unattended-upgrade

Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};

Zugriff

Der Default Username bei einem Raspberry Pi ist pi. Das sollten wir ändern. Dieser ist zuleicht zu erraten.

usermod --login new_username old_username

Bei dem neuen Login-Name sollten Namen wie admin, Administrator etc natürlich vermieden werden.

Da Ubuntu bereits sudo benutzt sollten wir sicherstellen das unser SSH-Daemon den root-user nicht via SSH reinlässt. Hierfür ändern wir das entsprechende Config-File: /etc/ssh/sshd_config

PermitRootLogin no

Wer will kann den Zugriff auch nur über einen Key erlauben. Hierzu muss zurerst auf dem Client ein SSH-Key erzeugt und anschliened auf dem Homeserver Server kopiert werden.

ssh-keygen
ssh-copy-id user@homeserver

Und anschließend auf dem Server den Passwort-Login deaktieren. /etc/ssh/sshd_config

PasswordAuthentication no
PubkeyAuthentication yes

Um die Einstellungen zu aktivieren, muss der SSH Daemon neu geladen werden.

sudo systemctl reload sshd

Firewall & Tools

Das Tool fail2ban ist ein großartiges Tool welches verdächtige Aktivitäten erkennt und blockiert.

sudo apt-get install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Die Default-Config bietet einen guten Start. Wer will kann die Einstellungen nach eigenem Ermessen anpassen. Angepasst werden muss aber der Abschnitt SSH Daemon.

[...]
#
# SSH servers
#

[sshd]

enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
[...]

Anschließend kann der Daemon gestartet werden.

sudo systemctl start fail2ban.service

Auch eine Host-Firewall die alle Ports bis auf die benötigten schließt macht sin. Wir installieren iptables mit dem umkomplizierten Interace.

sudo apt-get install iptables, ufw

Ihr habt jetzt die Möglichkeit Protokolle generell freizuschalten: sudo ufw allow ssh oder aber nur für bestimmte (feste) IP Adressen: sudo ufw from {YOUR IP} to any port 22

Die letzte (default) Regel sollte alles, was nicht erlaubt ist, ablehnen und loggen.

sudo ufw default deny
sudo ufw logging on

Anschließend muss die Firewall nach aktiviert und gestartet werden.

sudo systemctl enable ufw
sudo systemctl start ufw

So ausgerüstet sollte euer Server schonmal deutlich sicherer als seine Nachbarn sein. Das reicht in den meisten Fällen. Jetzt solltet Ihr euch noch um die Sicherheit der Anwendungen kümmern die auf der Kiste laufen.


Newsboat

2020-03-18

Auch wenn RSS schon lange nicht mehr so selbstverständlich wie noch vor einigen Jahren ist, hänge ich sehr an dem Protokoll. Ich finde es ungemein praktisch in einem Client alle abonierten Artikel und News-Items zu durchstöbern.

Für das Thema Security benutze ich seid ein paar Jahren den schmalen, Textbasierenden RSS Client Newsboat.

Newsbeuter lässt sich über ein Config-File im Homeverzeichnis unter ~/.newsbeuter/config konfigureren. Nach der Installation existiert dieses File meistens noch nicht. Dies ist meine Config:

refresh-on-startup yes
browser open
color listnormal_unread cyan black
datetime-format "%b %d %R"
max-items 20
keep-articles-days 3
show-read-feeds yes
show-read-articles yes
mark-as-read-on-hover yes

Vor dem ersten Start müssen die Feeds "aboniert" werden. Auch dies geschieht über ein File im Homeverzeichnis unter: ~/.newsbeuter/urls. Die Feeds werden dort einfach, untereinander aufgelistet.

Ein Terminal mit der geöffneten Newsbeuter-App läuft bei mir immer im Hintergrund. Mehrmals über den Tag aktualsiere ich die Feeds über SHIFT+R. Die Navigation über die Tastenbefehle und die Reduzierung auf das nötigste empfinde ich als deutlich effizienter als GUI- oder Web-basierende Systeme.