Dienstag, 17. August 2021

Linux - PDF in JPG mit der Befehlszeile/Kommandozeile konvertieren

Wie konvertiert man ein PDF in JPG Dateien? Am Besten mit der Befehlszeile/Kommandozeile unter Linux. Auch in den Artikeln Linux - PDF Dokumente zusammenfügen / Merge PDF files und Linux - PDF Dateien Passwort-Schutz entfernen mit QPDF verwende ich ausschließlich die Kommandozeile.

PDF Datei über die Befehlszeile/Kommandozeile unter Linux in ein JPEG konvertieren

Dies funktioniert sehr gut mit dem Konvertierungsprogramm von ImageMagick

Unter Ubuntu kann man es mit diesem Befehl installieren:
sudo apt-get install imagemagick

Das Konvertieren ist dann mit dem folgenden Befehl möglich:
convert in.pdf out.jpg

Für eine sehr gute Qualität sollte man die folgenden Parameter verwenden:
convert -density 300 -quality 100 in.pdf out.jpg

Kommt es beim Ausführen zu der folgenden Fehlermeldung, muss noch eine Anpassung an der policy.xml erfolgen

convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
convert-im6.q16: no images defined `Stellungnahme.jpg' @ error/convert.c/ConvertImageCommand/3258.

Dieses Problem kommt durch eine Umgehung für eine Sicherheitslücke. Die Schwachstelle wurde jedoch mit Ghostscript 9.24 (Quelle) behoben. Hat man also diese oder eine neuere Version installiert, kann man "format types" wieder aktivieren.

Daher am Besten vorher noch sicherstellen, dass Ghostscript ≥ 9.24 installiert ist:
gs --version

In der Datei sudo nano /etc/ImageMagick-6/policy.xml die folgenden Zeilen auskommentieren oder entfernen:

<!--
<policy domain="coder" rights="none" pattern="PS" />
<policy domain="coder" rights="none" pattern="PS2" />
<policy domain="coder" rights="none" pattern="PS3" />
<policy domain="coder" rights="none" pattern="EPS" />
<policy domain="coder" rights="none" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
-->

Hinweis: Auch unter Windows ist eine Verwendung zum Beispiel mit Hilfe des Windows-Subsystem für Linux (WSL) möglich.

Freitag, 13. August 2021

Security - Click-Jacking-Angriffe vermeiden mittels CSP-Header (Content Security Policy)

Die Content-Security-Policy (CSP) entstand ursprünglich unter dem Namen "Content-Restriction", der Grund dafür war die damals zunehmenden Sicherheitslücken bei Internetskripten wie z.B. durch Cross-Site-Scripting (XSS). In diesem Artikel gehe ich auf die Implementierung des CSP-Frame-Vorfahren ein.


Die Richtlinie "frame-ancestors", legt fest welche Domains die Seite in Frames und iFrames einbauen bzw. einbetten dürfen und funktioniert mit allen aktuellen Browserversionen außer dem Internet Explorer IE. Siehe hierzu auch https://caniuse.com/?search=frame-ancestors oder https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors .

  • "frame-ancestors 'none';" ==> Alle ablehnen
  • "frame-ancestors 'self';" ==> Selber erlaubt, aber alle anderen ablehnen
  • "frame-ancestors 'self' 'shemel.de' 'test.de';" ==> Selber erlaubt, und bestimmte Domains zulassen

Damit der Browser die Content Security Policy anwendet, muss vor der Auslieferung des HTML-Dokuments ein spezieller HTTP-Header gesetzt werden. Hierfür gibt es die folgenden Möglichkeiten:

HTML-Code: <meta>-Element hinzufügen

Wird vom Webserver kein CSP-Header versendet, kann dies mit den den folgenden <meta>-Elementen nachgeholt werden:

<head>
...
  <meta http-equiv="Content-Security-Policy" content="frame-ancestors 'none';">
  <meta http-equiv="X-Content-Security-Policy" content="frame-ancestors 'none';">
  <meta http-equiv="X-WebKit-CSP" content="frame-ancestors 'none';">
...
</head>


Ähnlich funktioniert dies auch bei serverseitigen Scriptsprachen, wie zum Beispiel PHP:

<?php
...
header("Content-Security-Policy: frame-ancestors 'none';");
header("X-Content-Security-Policy: frame-ancestors 'none';");
header("X-WebKit-CSP: frame-ancestors 'none';");
...
?>


Webserver Konfiguration: Apache HTTP

Das Modul mod_headers muss aktiv sein:
a2enmod headers //Enabling module headers.

Anschließend muss die Konfiguration in der httpd.conf angepasst werden:
Header set Content-Security-Policy "frame-ancestors 'none';"

Nach dem Speichern der Datei muss der Apache Webserver neu gestartet werden.

Sonntag, 1. August 2021

Chrome Browser - Screenshot von Webseiten in voller Größe (full-page) aufnehmen

Chromium basierte Browser bieten für die Aufnahme von Webseiten ein integriertes Tool für ganzseitige Screenshots. In diesem Beitrag beschreibe ich, wie man einen ganzseitigen Screenshot in Chrome erstellen kann, ohne eine Erweiterung oder ein Drittanbieter-Tool auf einem Windows-PC installieren zu müssen.

Mit Hilfe der Entwicklertools von Chrome lassen sich Screenshot aufnehmen:

  1. Chrome-Browser starten
  2. Öffne der Entwicklertools (Strg + Umschalt + I)
  3. "Run command" auswählen (Strg + Umschalt + P)

  4. In dem Feld "Capture full size screenshot" oder "Screenshot" eingeben und bestätigen
 

Chrome speichert jetzt automatisch einen (ganzseitigen) Screenshot im "Downloads" Ordner ab.

Montag, 26. Juli 2021

Security - Amass (Automated Attack Surface Mapping)

Amass ist ein vielseitiges Cybersicherheitstool zum Sammeln von Informationen über Internet-Domains. Amass fragt z.B. Suchmaschinen an, untersucht SSL-Zertifikate und sendet Reverse-DNS-Anfragen an die jeweilige Domain. So lassen sich z.B. vergessene Server aufspüren und gezielt angreifen.

Eine Installation mit Hilfe von Docker, ist sehr schnell möglich:

sudo docker build -t amass https://github.com/OWASP/Amass.git

Hinweis: Docker muss natürlich installiert sein (sudo apt install docker.io) und der Docker Daemon muss gestartet sein (sudo dockerd) "Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?". Siehe auch https://sebastianhemel.blogspot.com/2020/12/raspberry-pi-docker-installieren-arm.html .

Andere Installationsmöglichkeiten finden sich unter: https://github.com/OWASP/Amass/blob/master/doc/install.md

Zu dem ist Amass auch Bestandteil von Kali Linux einer Linux-Distribution (Debian basierend), die eine Sammlung von Tools für Penetrationstests und digitale Forensik umfasst. Siehe auch https://gitlab.com/kalilinux/packages/amass/blob/kali/master/doc/user_guide.md.

Das Ausführen über das Docker-Image ist relativ einfach und so kann man z.B. mit dem folgenden Befehl alle Subdomains einer bestimmten Domain herausfinden.

sudo docker run -v ~:/.config/amass/ amass enum -ip -d shemel.de

Amass verfügt über folgende Unterbefehle:

  • amass intel -- Discover targets for enumerations
  • amass enum -- Perform enumerations and network mapping
  • amass viz -- Visualize enumeration results
  • amass track -- Track differences between enumerations
  • amass db -- Manipulate the Amass graph database

Weitere Informationen und Beispiele finden sich hier:

 

Samstag, 10. Juli 2021

Agile - Framework OKR (Objectives and Key Results)

Im agilen Framework OKR (Objectives and Key Results) zur Strategieumsetzung dauern Zyklen ca. 3 Monate. Es hilft dabei Organisationen, sich an Wirkungszielen auszurichten und sich auf diese zu fokussieren.


Wichtig, für den o.g. Zeitraum müssen die Ziele auch beschreiben werden, damit das Unternehmen diese in den Fokus stellen kann. Zudem spielt die Frage WHY (Warum und wofür ist es wichtig?) eine zentrale und erinnert sehr stark an den golden circle von Simon Sinek .

Folgende Regeln sind zu beachten und erinnern dabei stark an die Werte & Prinzipien von Scrum :

  • Maximal vier Objectives (entspricht den Zielen) mit maximal je vier Key Results (klare, zeitlich begrenzte und messbare Vorgaben, wie die Ziele erreicht werden können) pro Team.


Sehr hilfreich um OKR zu verstehen, ist das folgende Video "Why the secret to success is setting the right goals von John Doerr" einem ehemaligen Mitarbeiter von Andy Grove dem Mitbegründer der Firma Intel, welcher die Idee zu Objectives and Key Results hatte,


Zum Schluss noch eines meiner agilen Lieblingszitate:

"It does not make sense to hire smart people and then tell them what to do. We hire smart people to tell us what to do." (Steve Jobs)

Freitag, 9. Juli 2021

Web Browser - Anonymität im Internet (Canvas Fingerprinting), Schutz gegen Tracking

Welche Informationen eine Webseite sammeln kann und was man dagegen tun kann, beschreibe ich in diesem Beitrag. In den Standardeinstellungen blockt z.B. der Raspberry Pi mit Pi-hole vorwiegend Tracking- und Adserver (Raspberry Pi-hole - Installation). Pauschal kann ich vorab jedem nur empfehlen zumindest Pi-hole zu verwenden.

Welche Informationen eine Website mit Hilfe von Browserinformationen sammeln kann, zeigt die Webseite www.browserleaks.com. Hier findet sich eine Auswahl von Testtools für Webtechnologien, die zeigen welche persönlichen Identitätsdaten durchsickern können und wie man sich davor schützen kann.

Ein Schutz gegen Tracking kann man durch die folgenden Maßnahmen erreichen:

  • Javascript deaktivieren, wenn nicht erforderlich (Erweiterung NoScript).
  • Temporary Containers Firefox Add-on - Webseiten können in "Wegwerf-Container" geöffnet werden, die die Daten isolieren und nach Gebrauch löschen. So kann man problemlos alle Cookies akzeptieren.
  • WebRTC (Web Real-Time Communication) ausschalten (about:config => media.peerconnection.enabled = false).
  • Brave Browser verwenden. Das Ziel des Browsers ist es, alles im Web zu blockieren was die Privatsphäre gefährdet.
  • Canvas Fingerprinting verhinden, mit Hilfe von CanvasBlocker.

 

Sonntag, 27. Juni 2021

Linux - Mit curl Dateien herunterladen und Webseiten aufrufen

Durch curl ist es möglich von Webseiten (mittels Login und Cookies) auf Informationen per Kommandozeile zuzugreifen oder auch Dateien herunterzuladen. In dem Beitrag Linux - Statische Kopie einer Webseite anlegen mit wget bin ich bereits auf die Möglichkeiten von wget eingegangen.

Curl unterstützt neben HTTP eine Vielzahl von weiteren Netzwerkprotokollen wie FTP, FTPS, HTTPS, GOPHER, TELNET, DICT, FILE und LDAP.

In der Regel ist curl vorinstalliert, ansonsten geht dies über den folgenden Befehl:
sudo apt-get install curl 

Folgende Optionen lassen sich Beispielhaft mit curl ausführen

Den Inhalt der heruntergeladenen Datei in den angegebenen DATEINAME schreiben, anstatt in die Standardausgabe:
curl -o DATEINAME "URL"

Wiederaufnahme eines vorangegangenen Downloads (--continue-at OFFSET)
curl -C - "URL"

Den Anforderungs- und Antwortheader anzeigen
curl -v "URL"

HTTP-Header mit eigenen Daten einfügen (z.B. Content-Type oder Accept-Language), hierbei darf -H auch mehrfach verwendet werden.
curl -H 'Content-Type: application/json' "URL"
curl -H 'Accept-Language: de' "URL"


Zum Beispiel lässt sich so das Wetter in ASCII-Grafik auf der Konsole in unterschiedlichen Sprachen anzeigen:
curl -H 'Accept-Language: de' "https://wttr.in/Obergeis"
curl -H 'Accept-Language: en' "https://wttr.in/Obergeis" 

Verbindung SSL oder TLS herstellen
curl --sslv3 "URL"
curl --tlsv1.1 "URL"

Skripte mit python oder bash ausführen
-s, Silent or quiet mode. Don't show progress meter or error messages.
-f, (HTTP)  Fail  silently  (no  output at all) on server errors.
Kleiner Tipp, mit Hilfe von "https://explainshell.com/explain?cmd=curl+-sSL" kann man schnell heausfinden, was der Befhel bedeutet. 

curl -sf "URL" | sudo python3
Achtung: Da hier direkt die Installation eines Skripts mit höheren Rechten erfolgt, macht es ggf. Sinn erst das Skript herunterzuladen um dann mit z.B. less installer.py zu prüfen, was es genau tut.

Siehe z.B. Raspberry Pi-hole - Installation
curl -sSL https://install.pi-hole.net | bash

Verbindung über einem Proxy aufbauen
curl -x yourproxy:port "URL"
-x, <[protocol://][user@password]proxyhost[:port]>

User-Agent verändern und eine URL aufrufen
curl -LA "Mozilla/5.0 (MSIE; Windows 10)" "https://www.google.com/search?q=Obergeis"
Hinweis: Siehe auch List of User Agent strings.

Formulardaten an einen Server senden, ist mit Hilfe von curl -X POST und -F für jedes Feld (field=value), welches man beim POST hinzufügen möchte, möglich.
curl -X POST -F 'username=admin' -F 'password=123456' https://test.de/login.php
Hinweis: Weitere Beispiele finden sich unter https://gist.github.com/subfuzion/08c5d85437d5d4f00e58#file-curl-md .

Cookies erstellen und verwenden (https://curl.se/docs/http-cookies.html)
Erstellen eines Cookies
curl -c "/tmp/cookie" http://localhost:8080/login -d username=admin password=123456
Verwenden eines Cookies
curl -b "/tmp/cookie" http://localhost:8080/getUserData

Curl Befehle mit Hilfe von Firefox kopieren

Dank der Entwicklerwerkzeuge in Firefox, lassen sich curl-Befehle einfach kopieren.



Mittwoch, 23. Juni 2021

Raspberry Pi - VNC Fernwartung: Fehler - Der Desktop kann derzeit nicht angezeigt werden

In dem Beitrag Raspberry Pi - VNC Fernwartung / Zugriff ohne Bildschirm bin ich auf die Aktivierung von VNC eingegangen. Unter Umständen kann es beim Raspberry Pi ohne angeschlossenes HDMI Kabel zu der oben genannten Fehlermeldung kommen.

Wird bei Verwendung von VNC die Meldung "Der Desktop kann derzeit nicht angezeigt werden" bzw. "Cannot currently show the desktop" angezeigt, muss die Auflösung der Standardeinstellung geändert werden.


Wenn kein HDMI-Monitor angeschlossen ist, muss in der config.txt eine Bildschirmauflösung angeben werden. Hierfür kann man sich z.B. per SSH mit dem Pi verbinden und die Konfiguration per Konsole anpassen.

sudo raspi-config

==> 2 Display Options     Configure display settings


==> D1 Resolution         Set a specific screen resolution

==> <Finish>

==> Reboot

Nach ca. 20 sec sollte dann eine Verbindung per VNC wieder möglich sein!

Raspberry Pi - Wärmebildkamera AMG8833 thermal infrared camera

Für dieses Projekt setze ich den neuen Raspberry Pi 4 ein. Hierfür werden die Daten vom AMG8833 Wärmebildkamerasensor gelesen und in Temperaturmesswerte umgewandelt, damit basierend auf den Messwerten Live-Wärmebilder angeizeigt werden können.

Der AMG8833 ist ein 64-Pixel-Temperatursensor (8x8-Array), der von Panasonic entwickelt wurde. Er kommuniziert über den I2C-Bus (Raspberry Pi - OLED Display (SSD1306) I2C ansteuern und Temperatur auslesen), wodurch er direkt mit Raspberry Pi und Arduino kompatibel ist.
Der AMG8833 bietet sich daher für Anwendungen in der Wärmebildgebung, Wärmeübertragungsanalysen, der Überwachung der menschlichen Temperatur, des Heizungs- und Klimamanagements, der industriellen Steuerung und anderer Anwendungen bei der berührungslosen Temperaturmessung an.


In diesem Beitrag wird der AMG8833 mit einem Raspberry Pi 4 verbunden (I2C-Bus), um die Temperaturen von Objekten über berührungslose Strahlungsmessung darzustellen. Benötigt wird folgendes:

Folgender Aufbau ergibt sich inklusive Verwendung des AMG8833, siehe auch folgende Grafik inkl. der korrekten Zuordnung für die Verkabelung (I2C-Adresse des AMG8833 auf 0x69):


Der Sensor wird zur Spannungsversorgung an 5 Volt (Pin 2) und Ground (ein GND z.B. Pin 6, 9, 14 usw.) und an die I2C Schnittstelle des Raspberry Pi angeschlossen. Für I2C muss man Pin 3 (SDA) und 5 (SCL) verwenden.

I2C Kommunikation mit dem AMG8833

I2C Schnittstelle im Raspbian Betriebssystem einschalten (per GUI)

 


 

I2C Schnittstelle im Raspbian Betriebssystem einschalten (per Konsole)

sudo nano /etc/modules

Und die folgenden 2 Zeilen hinzufügen:


i2c-bcm2708
i2c-dev


Jetzt muss noch die Konfigurationsdatei angepasst werden:
sudo nano /boot/config.txt

dtparam=i2c_arm=on #entfernen
dtparam=i2s=on     #entfernen

Jetzt muss noch ein reboot erfolgen, damit die Einstellungen übernommen werden:
sudo reboot

I2C Verbindung testen

Damit man jetzt die Verbindung testen kann, sollte noch das folgemde Packet installiert werden:
sudo apt-get install i2c-tools

Mit dem folgenden Befehl kann überprüft werden, ob die Verbindung zum Display funktioniert bzw. verbunden ist:
i2cdetect -y 1


Hinweis: Mit dem Befehl i2dect werden alle 256 Adressen abgefragt: Antwortet ein Chip, sieht man seine Adresse auf dem Raster.

Um mit Python per I2C auf den Sensor zugreifen zu können, benötigt man zusätzlich die smbus-Bibliothek, die in Raspbian Linux enthalten ist.

sudo apt-get install -y python-smbus

Mögliche Projekte

Python Thermal Camera with Raspberry Pi (AMG8833) - Python Thermal Camera with Raspberry Pi (AMG8833)

Build a thermal camera with Raspberry Pi and Go

Adafruit AMG8833 8x8 Thermal Camera Sensor - Build your own mini thermal camera

1979 Apollo Pi Thermal Camera - A vintage microwave monitor converted into a thermal camera! Raspberry Pi powered, with Adafruit components.

Samstag, 19. Juni 2021

Windows 10 - Ruhezustand funktioniert nicht mehr

Ich habe bei meinem Dell XPS 13 7390 i7-10510U nach einiger Zeit (2-3 Tage) das Problem, dass der Ruhezustand nicht mehr funktioniert. Wenn ich den PC per Menü in den Ruhezustand versetze, sieht zunächst alles normal aus. Allerdings erscheint nach wenigen Sekunden der Sperrbildschirm und das Versetzen in den Ruhezustand hat nicht geklappt.

Nach einem Neusart, funktionierte anschließend der Ruhezustand wieder für ein paar Tage. Jedoch immer wieder das gleiche Verhalten! Aktuelles Bios, Treiber und Windows Updates wurden regelmäßig installiert, dies führte aber zu keiner Verbesserung.

Hilfe verschafft mir aktuell die Funktion den Ruhezustand per Eingabeaufforderung (cmd) zu deaktivieren und anschließend wieder zu aktivieren. Danach kann ich wieder mein XPS in den Ruhezustand versetzen.

  1. Klick mit rechter Maustaste auf Windows Startbutton
  2. Eingabeaufforderung (Administrator) auswählen
  3. Benutzerkontensteuerung mit "Ja" bestätigen
  4. In der Eingabeaufforderung die folgenden Befehle eingeben und mit [Enter] bestätigen:
    • powercfg /hibernate off
    • powercfg /hibernate on

Siehe auch https://docs.microsoft.com/de-de/troubleshoot/windows-client/deployment/disable-and-re-enable-hibernation .

Freitag, 18. Juni 2021

Raspberry Pi-hole - Backup configuration (settings & lists)

In dem Artikel Raspberry Pi-hole - Installation habe ich beschrieben, wie die Installation auf einem Raspberry Pi durchgeführt werden muss. Ich möchte daher kurz das Sichern der Pi-Hole-Konfiguration (Einstellungen & Listen) eingehen.

Ein Pi-hole Backup erstellt man unter dem Menüpunkt:

  • Settings / Teleporter / Backup

Anschließend kann man auf dem neuen Pi wieder ein Restore durchführen.

Mittwoch, 16. Juni 2021

Windows - Neues Benutzerkonto mittels Befehlszeile (CMD) hinzufügen

Mittlerweile versucht Microsoft immer häufiger den "Konto Zwang" durchzusetzen, wie bereits in dem Artikel Windows - Eingabeaufforderung während der Installation öffnen erwähnt. So benötigt man mittlerweile bis zu vier Klicks, bis man ein weiteres "lokales Benutzerkonto" hinzufügen kann. Daher möchte ich kurz auf die Möglichkeit des Anlegens unter der Kommandozeile eingehen.

Ein neues Benutzerkonto auf dem lokalen Computer (per GUI) hinzufügen:

     

Ein neues Benutzerkonto auf dem lokalen Computer (per CMD) hinzufügen:

net user username passwort /ADD


Soll das Passwort beim Hinzufügen eines neuen Benutzerkontos nicht sichtbar sein, ist dies mit dem folgenden Befehl möglich:

net user /add username *

Um z.B. "Sebastian" zur Administratorengruppe hinzuzufügen, muss der folgende Befehl ausgeführt werden.

net localgroup administrators Sebastian /add

Alle möglichen Befehle lassen sich mit dem Kommando net help user anzeigen.


Dienstag, 1. Juni 2021

ImageMagick - Wasserzeichen (watermark) einem Bild hinzufügen

In dem Artikel Raspberry Pi - Camera Modul V2.1 bin ich bereits kurz auf ImageMagick eingegangen, um das Bild meiner Webcam anzupassen. Mittlerweile nutzen viele Dienste ungefragt meine Webcam Bilder und schneiden sogar den Copyright Hinweis einfach ab (siehe z.B. https://www.outdooractive.com/de/webcam/obergeis-webcam-neuenstein/55939506/). Daher habe ich mich entschieden in jedes Bild ein größeres Wasserzeichen einzubauen und das Vorgehen hier zu beschreiben.


Damit man ein Wasserzeichen in sein Bild einbauen kann, wird natürlich ein passendes Logo benötigt.
Ich nehme dafür das bereits vorhandene Logo meiner Android App und setze es oben rechts (northeast) in die Ecke.

Dafür ist der folgende Befehl notwendig:

convert cam.jpg ic_launcher_192x192.png -gravity northeast -geometry +10+10 -composite cam-watermark.jpg

Was genau bedeuten die beiden Befehle?

  • convert - liest Bilder, bearbeitet sie und speichert sie ab
  • geometry +10+10 - um das Wasserzeichen 10 Pixel von der ausgewählten Ecke nach innen zu verschieben
  • composite - überlagert mehrere Bilder zu einem Bild


Samstag, 29. Mai 2021

Security - Nmap Netzwerkscanner und Kali Linux

Mit Hilfe von Nmap (Netzwerkscanner) ist es möglich eine grobe Analyse von Netzwerken und möglichen Angriffsszenarien zu erstellen. In diesem Beitrag gehe ich kurz auf die Möglichkeiten, Ursachen und das Hardening ein.

Installation von Nmap unter Ubuntu:

sudo apt-get install nmap

Anschließend lässt sich mit dem folgenden Befehl die Top 2500 Ports in einem Netzwerk scannen. Zusätzlich wird die Geschwindigkeit des Scans erhöht und Informationen zum Betriebssystem der Clients werden angezeigt. Siehe auch https://wiki.ubuntuusers.de/nmap/#Scan-Techniken.

nmap --top-ports 2500 -A -v -T4 192.168.1.0/24

Hinweis: Ja nach dem, welches Netzwerk man scannen möchte muss man die korrekt Netzmaske verwenden.

Kali Linux ist eine Linux-Distribution (Debian basierend), die eine Sammlung von Tools für Penetrationstests und digitale Forensik umfasst. Nmap ist hier als wichtges Werkzeug enthalten! Dieser erste Scan kann als Basis dienen um z.B. mit Hilfe von Nessus einen detaillierten Netzwerk- und Vulnerability (Scan von vorhandenen und bekannten Sicherheitslücken) durchzuführen.

Anschließend kann man mit Hilfe der gefunden Sicherheitslücken 

  • z.B. mit THC Hydra (hydra -L /home/pi/usernames.txt -P /home/pi/passwords.txt 192.168.1.111 ssh) oder
  • Mimikatz), gezielt Angriffe auf die jeweiligen Clients versuchen.


Was sind die Ursachen?


Was kann man dagegen tun ("Hardening")?


Samstag, 22. Mai 2021

Raspberry Pi - Vorkonfiguration (WLAN, SSH, hostname, locale) vor dem ersten Start mit Raspberry Pi Imager

Wie man einen Raspberry Pi installiert und initial einrichtet, habe ich bereits in den Artiklen Raspberry Pi Stretch Lite - Installation incl. SSH Fernsteuerung, Raspberry Pi Stretch - WLAN vor dem ersten Start konfigurieren und Raspberry Pi - statische IP bzw. initiale IP-Adresse vergeben (cmdline-txt) beschrieben. Ich gehe kurz auf den "Raspberry Pi Imager" ein, welcher dies jetzt direkt unterstützt.

Mittlerweile bietet das offizielle Image-Tool „Raspberry Pi Imager“ die Möglichkeit zu den o.g. Konfigurationen an und schreibt diese direkt auf die SD-Karte, anschließend kann das erste Booten vom Raspi direkt mit den gewünschten Einstellungen erfolgen. So lässt sich mittlerweile sehr viel Zeit bei der Ersteinrichtung sparen!


Das Raspberry Pi Imager Tool beschreibt die SD-Karte mit dem Betriebssystem und so wird beim ersten Start direkt eine Verbindung zum WLAN aufgebaut, SSH ist aktiv und man den Pi direkt per Konsole ansprechen. Desweiteren ist die Tastaturbelegung korrekt hinterlegt und auch das bekannte und unsichere Passwort „raspberry“ ist geändert. 

Download von Version 1.6.1 => https://github.com/raspberrypi/rpi-imager/releases/tag/1.6.1

Zusätzlich zum Betriebssystem „Raspberry Pi OS“ bietet Imager weitere Images an. Zum Beispiel die Lite-Variante (keine grafische Oberfläche) oder auch RetroPie (Retro-Spielekonsolen Emulatoren).

Ergonomie am Arbeitsplatz - Arbeiten am Stehtisch

Bei der Planung und Gestaltung von Arbeitsplätzen spielen die folgenden Einflussfaktoren wie z.B. Körpermaße, Bewegungsraum, Sehraum, Wirkraum und die Arbeitsaufgabe eine wichtige Rolle. In dem Artikel möchte kurz auf die Hilfsmittel für die Arbeitsplatzgestaltung eingehen und speziell auf das ergonomische arbeiten am Stehtisch bzw. höhenverstellbaren Schreibtisch.

Für die Gestaltung von Arbeitsplätzen gibt es die folgenden Verfahren / Hilfsmittel um auf die oben genannten Einflussfaktoren zu berücksichtigen:

Quelle: https://www.ergotyping.de/index.php?title=Anthropometrie:_Hilfsmittel_zur_Ermittlung_von_Gestaltungsmaszen


Für die Gestaltung der Arbeitsumgebung spielt auch die die Beleuchtung und Farbe eine wichtige Rolle. Die Anordnung von Bildschirmarbeitsplätzen zu Leuchten und Fenster ist sehr wichtig, um eine Reflexblendung am Bildschirmarbeitsplatz zu vermeiden! 

Folgende Punkte sind bei der Beleuchtung am Arbeitsplatz zu beachten:

  • Keine Direkt- und Reflexbeleuchtung
  • Farbwiedergabe der Lampen berücksichtigen
  • Die Sehaufgabe muss heller als Umfeld sein
  • Abgestimmtes Farbkonzept
    • grün, blau => beruhigend
    • rot, gelb, braun => anregend

Ergonomisch arbeiten am Stehtisch

Hierbei sollte die Tastaturablage auf Höhe der Ellenbogen liegen. Der Oberarm und Unterarm müssen ca. im 90-Grad-Winkel zueinanderstehen. Die Handballen sollten auf der Tischfläche abgelegt werden. Die Schultern dürfen entspannt hängen und nicht hochgezogen werden. Mit dem Bauch nicht an die Tischkante anlehnen, man sollte immer freistehen.
Die Füße sollten möglichst gleich belastet werden und fest auf dem Boden stehen. Zwischendurch ist ein Wechsel vom Parallelstand in die Schrittstellung und wieder zurück zu empfehlen. Ein Hohlkreuz ist zu vermeiden, durch anspannen der Bauchmuskulatur und aufrichten des Becken.

Wichtig: Man sollte mehrmals am Tag die Position zwischen Sitzen und Stehen wechseln. Daher empfiehlt es sich einen elektrisch verstellbaren Schreibtisch zu kaufen. 

Ich selber nutze z.B. einen IKEA BEKANT Schreibtisch in 120x80cm (ca. 420 EUR). Alternativ bietet sich auch ein Standsome Double White - Höhenverstellbarer Schreibtischaufsatz aus Holz (ca. 220 EUR) an.

Gerade am Anfang muss man sich an das Arbeiten im Stehen gewöhnen und sollte daher nur langsam gesteigert werden.

Sonntag, 16. Mai 2021

JavaScript - DOM-Manipulationen mittels purem JavaScript

Das Document Object Model (DOM) beschreibt die Spezifikation einer Programmierschnittstelle, hierbei werden HTML- oder XML-Dokumente als Baumstruktur darstellt. Dabei repräsentiert jeder Knoten ein Objekt, welches wiederum ein Teil eines Dokumentes (z.B. eine Webseite) repräsentiert. In dem Beitrag möchte ich kurz auf die Möglichkeiten der DOM-Manipulationen per purem JavaScript eingehen.

Das Document Object Model (DOM) wird vom World Wide Web Consortium (W3C) definiert.

DOM-Knotenbaum einer Webseite

Mitte der 1990er Jahre wurde die Skriptsprache JavaScript erfunden, die Browser boten aber nur rudimentäre Möglichkeiten um auf das HTML-Dokument zuzugreigen oder das DOM zu manipulieren.
Dies führte zu einer Verbreitung von Bibliotheken wie zum Beispiel jQuery.
Mittlerweile kann man aber immer öfter auf JavaScript-Bibliotheken, die Funktionen zur DOM-Navigation und -Manipulation zur Verfügung stellen, verzichten!

Die folgenden Webseiten unterstützen dabei, Probleme von Frontend-Developern in purem JavaScript (ohne jQuery) lösen zu können

Hierdurch ist es möglich Webseiten von überflüssigen Bibliotheken zu befreien.

Siehe nachfolgendes Beispiel:

// With jQuery
// Update the text of a .button
$(".button").text("New text");
// Read the text of a .button
$(".button").text(); // Returns "New text"

// Without jQuery

// Update the text of a .button
document.querySelector(".button").textContent = "New text";
// Read the text of a .button
document.querySelector(".button").textContent; // Returns "New text"


Quelle: https://tobiasahlin.com/blog/move-from-jquery-to-vanilla-javascript/#updating-the-dom

Donnerstag, 13. Mai 2021

MBR (Masterbootrekord) - CHS (cylinder/head/sector) Adressierung

Noch heute kann in der MBR (Master Boot Rekord) Tabelle eine Adressierung per CHS (Cylinder Head Sector) erfolgen. In dem Artikel "Intel 386 DX/33 - Microsoft MS-DOS 6.22 Installation (DELL 333D)" beschriebener DELL PC benötigt eine manuelle Eingabe der Daten und kann noch nicht die CHS-Angaben von der Festplatte selbständig ermitteln. Daher werde ich in diesem Artikel kurz auf die technischen Details eingehen.

Desktop Festplatten (und auch Disketten) werden in kleine Abschnitte (Datenblöcke oder Sektoren) unterteilt. Diese haben eine konstante Größe von 512 Bytes (bzw. moderne Festplatten ein Vielfaches davon 4.096 Bytes auch 4K-Sektoren genannt).

Mittels eines Koordinatensystem (Kopf-, Zylinder- und Sektornummer) kann man jeden Datenblock identifizieren:

  • die Kopfnummer der Höhe
  • die Zylindernummer dem Radius
  • die Sektornummer dem Winkel

Weitere Details finden sich im Wikipedia Artikel Festplattengeometrie.

CHS (Cylinder Head Sector)

CHS ist eine Adressierungsmethode von Festplatten. Hierdurch kann der Computer die Festplattengeometrie des Datenträgers erkennen und somit auch die jeweilige Aufteilung in Partitionen mittels Partitionstabelle.

Wie bereits in der Überschrift erwähnt muss man bei älteren Computern (z.B. Intel 386) die Anzahl der Zylinder, Köpfe und Sektoren per Hand im BIOS eintragen! Nur so kann der Computer bzw. das Betriebssystem die Festplatte korrekt ansteuern.

Beispiel: QUANTUM PRODRIVE 80 AT 84MB 3.5"/HH IDE / AT

  • Cylinders: 965
  • Heads: 10
  • Sector/track: 17

Achtung: Falsche Angaben können zu Datenverlusten führen, die angegebene Größe darf die tatsächliche Größe der Festplatte nicht übersteigen!

Und noch ein Hinweis zum Schluss, bei modernern Computern kann das BIOS die CHS-Angaben von den Datenträgern in der Regel selbständig ermitteln 😉 .

Samstag, 8. Mai 2021

Security - Netzwerkcheck (Port-Scan) von heise

Mit dem Netzwerkcheck von heise ist es möglich schnell herauszufinden, ob man über seine öffentliche IP-Adresse des Routers ggf. angreifbar ist.

Es bietet sich an, direkt einen „Komplett-Check (Standard-Ports + Router-Tests)“ durchzuführen.

Idealerweise sollte das folgende Ergebnis angezeigt werden:


Samstag, 1. Mai 2021

Mailserver - Zugriff auf TCP Port 25 (smtp) mit telnet testen

In diesem Beitrag möchte ich beschreiben, wie man mit Hilfe von telnet den Zugriff auf einen Mailserver mit dem TCP Port 25 testen kann. Siehe hierzu auch das Simple Mail Transfer Protocol (SMTP) Protokoll.

Mit Hilfe von SMTP (Simple Mail Transfer Protocol) kann man in Verbindung mit telnet einen Mailclient simulieren und den Zugriff auf Port 25 testen.

Die folgenden Schritte sind per Linux Kommandozeile notwendig

Mihilfe von telnet verbindet man sich auf den Port 25 am Server, dafür muss natürlich vorab der SERVER bekannt sein. Dies ist zum Beispiel mit nslookup -query=MX google.com oder dig google.com -t MX möglich.

telnet SERVER 25

Hat der Aufbau funktioniert, erhält man die folgende Meldung: Connected to SERVER.
Escape character is '^]'.

Jetzt kann man mit Hilfe des SMTP Protokoll eine E-Mail versenden. Hinweis: Damit der Test überhaupt möglich ist, sollte man eine Empfängeradresse verwenden, für die der Mailserver (mit dem man gerade verbunden ist) zuständig ist. Denn in der Regel gibt es keine "offenen Server" mehr zum versenden, siehe auch Relay Access Denied und Open Relay.

Mit den folgenden Zeilen kann jetzt direkt eine E-Mail versendet werden (nach jeder Zeile muss man ENTER drücken):

EHLO mail.server.com
MAIL FROM:<ABSENDERADRESSE@test.de>
RCPT TO:<EMPFÄNGERADRESSE@test.de>
DATA
Subject: Testmail
(Leerzeile)
Das ist eine Testnachricht.
(Leerzeile)
.
QUIT

Hinweis: Auch unter Windows ist eine Verwendung zum Beispiel mit Hilfe des Windows-Subsystem für Linux (WSL) möglich

Ein ausführlicher Mailserver-Check ist mit Hilfe des Webdienst MXToolbox möglich und hilft Mailserver-Admins bei der Fehlersuche.

Sonntag, 18. April 2021

Raspberry Pi - VNC Fernwartung / Zugriff ohne Bildschirm

Wie man den "Fernzugriff per ssh aktiviert" habe ich bereits beschrieben. Die Fernwartung per Desktop ist mit Hilfe von einem installierten Raspberry Pi OS (Raspbian) relativ einfach zu aktivieren.


Update Juni 2021: Raspberry Pi - VNC Fernwartung: Fehler - Der Desktop kann derzeit nicht angezeigt werden

Nach dem ich mir vor kurzem den Raspberry Pi 4 Modell B bestellt hatte, möchte ich diesen im Desktop Modus betreiben (Raspberry Pi OS with desktop). Natürlich möchte diesen nicht direkt an einen Monitor anschließen, sonder nur per Fernzugriff (VNC).

VNC lässt sich über das Konfigurations-Tool in den Einstellungen aktivieren. Dies geht durch klick auf "Menü => Einstellungen => Raspberry-Pi-Konfiguration" und dann über den Reiter "Schnittstellen" einstellen. Der VNC Server steht sofort zur Verfügung.


Hinweis: Auch per SSH (sudo raspi-config) lässt sich unter "Interfacing Options" => "VNC" die Einstellung vornehmen. Wichtig, eine Bedienung per VNC ist nur per Desktop Boot möglich und nicht per Kommandozeile!

Am einfachsten ist der Zugrigg per RealVNC Client möglich, Download unter https://www.realvnc.com/de/connect/download/viewer/ .

Nach der Installation kann man nun direkt per IP-Adresse des Raspberry Pis eine Verbindung herstellen.


Nützlich ist in diesem Fall eine feste bzw statische IP-Adresse, siehe dazu https://sebastianhemel.blogspot.com/2017/01/raspberry-pi-wlan-konfiguration-inkl.html .

Freitag, 9. April 2021

Raspberry Pi - Verwendung von Docker Compose (Beispiel OpenAPI-Generator c't 25/2020)

In diesem Beitrag zeige ich auf Basis des Artikels c't 25/2020 S. 160 OpenAPI-Generator, wie man Docker Compose verwendet. Die Installation wurde bereits in dem Artikel Raspberry Pi - Docker Compose installieren beschrieben.

Docker Compose ermöglicht mehrere Container mit einzelnen Anwendungen oder Komponenten zu starten oder um Container automatisch zu verknüpfen und Volumes einzurichten.

Die Verwendung von Docker Compose benötigt die folgenden Schritte

  1. Erstellen eines Verzeichnis für die Installationsdateien.
    • mkdir rest-api-demo
  2. In diesem Verzeichnis muss jetzt die YAML-Datei docker-compose.yml abgelegt/erstellt werden.
    • Images mit dem Apache Webserver und PHP-Compiler:
      version: "3"
      services:
        server:
          image: "jorgenjo/rpi-apache-php" #php:apache
          volumes:
            - ./server:/var/www/html
          ports:
            - 8001:80
        client:
          image: "jorgenjo/rpi-apache-php" #php:apache
          volumes:
            - ./client:/var/www/html
          ports:
            - 8000:80
          depends_on:
            - server
  3. Im selben Verzeichnis, den/die Container zu starten.
    • ~/rest-api-demo $ sudo docker-compose up -d

    • Hinweis: Docker-Compose wird im Hintergrund (-d) ausgeführ

Test der Umgebung (Server und Client)

In beiden Verzeichnissen (Server/Client) jeweils eine index.php Datei erstellen und anschließend aufrufen.

Server: index.php
<?php echo "Test"; ?>

Client: index.php
<?php echo file_get_content("http://server"); ?>


Die Basis ist jetzt geschafft, weiter geht es jetzt mit der Anleitung unter https://github.com/manuelottlik/ct-oas-praxis/.

Nützliche Docker Compose Befehle

Erstellte Container abzeigen:
sudo docker-compose ps

Container einer Anwendungsgruppe stoppen:
sudo docker-compose stop 

Containe entfernen (sofern gestoppt):
sudo docker-compose rm 

Alle Container in einer Anwendungsgruppe stoppen und gleichzeitig entfernen:
sudo docker-compose down

Alle Data-Volumes entfernen (-v):
sudo docker-compose down -v

Donnerstag, 8. April 2021

Raspberry Pi - SD Card Speed Test

Wie schnell ist meine SD-Karte? Die Raspberry Pi Foundation hat für diese Frage ein Diagnose-Tool für Speed Tests veröffentlicht. Das kostenlose Tool nennt sich "SD Card Speed Test" und misst die Schreib- und Lesegeschwindigkeit der verbauten Karte.


Installation erfolgt über das Terminal-Fenster mit dem folgenden Befehl:

sudo apt update
sudo apt install agnostics


Siehe auch weitere Details im Raspberry Pi Blog:


Als SD-Karte kann ich persönlich die PNY PRO Elite 64GB microSDHC-Speicherkarte empfehlen.

Montag, 5. April 2021

Kodi - Smartphone als Fernbedienung nutzen

Die sehr beliebte App "Kodi" (ehemals XBMC) ist eine freie Mediaplayer-Software und diese lässt sich mit Hilfe auch durch ein Smartphone (als Fernbedienung) bedienen.

Kodi Fernbedienung

Man muss sich dafür nur eine der folgenden Apps auf sein Smartphone laden:

Anschließend kann das Smartphone als Fernbedienung für Kodi verwendet werden.

Die Konfiguration ist relativ einfach, so muss der jeweilige Host hinzugefügt werden um die App mit der jeweiligen Kodi-Installation zu verbinden. In der Regel funktioniert dies bereits über die automatische Suche oder die IP-Adresse des PC/Raspberry auf dem Kodi installiert ist. 

Hinweis I: Auf dem Smartphone muss natürlich das WLAN aktiviert sein

Hinweis II: Die Steuerung über HTTP muss in der Kodi-Installation aktiviert sein, siehe nachfolgende Bilder.


In dem folgenden Beitrag "Mit Kodi auf die Synology Diskstation zugreifen" beschreibe ich, wie man auf einen gemeinsamen NAS (Film-)Ordner zugreifen kann.

Sonntag, 4. April 2021

Raspberry Pi - GPIO-Pin Belegung und Schaltungen (Fritzing)

In dem Beitrag "Raspberry Pi - Temperatursensor DS18B20" verweise ich auf die Raspberry Pi GPIO Anschlussbelegung. Die Pinleiste inkl. der Funktionen wird auf der folgenden Seite Raspberry Pi Pinout bis ins kleinste Detail beschrieben.


GPIO-Belegungsplan und Schaltungen (Fritzing)

Die Funktionen der 40 GPIO-Pins sind oft nur mühsam zu ermitteln. Einen ausführlichen Belegungsplan findet man auf https://de.pinout.xyz.

Nützlich ist auch die Software Fritzing. Mit ihr ist es möglich, elektronische Schaltungen am Computer zu entwerfen oder seine Projekte zu dokumentieren. Siehe fritzing.org.

Raspberry Pi - TV HAT

Das eigene Raspberry Mediacenter lässt sich mittlerweile um einen Raspberry Pi TV HAT (ca. 10 Euro) um z.B. die öffentlich-rechtlichen TV-Programme zu empfangen, erweitern. 

Ausführliche Informationen zur Konfiguration finden sich in dem folgenden Blog: 

Offizielle Mitteilung im Raspberry Pi Blog:


Donnerstag, 1. April 2021

youtube-dl FFmpeg - Download mpd (MPEG DASH) Video Streams

Mit Hilfe des Beitrags "Download von Video Streams mit ffmpeg" ist es Möglich .m3u8 Dateien herunterladen, jetzt fehlt nur noch eine Möglichkeit .mpd  (MPEG DASH) Video Streams herunterladen zu können. Dies geht mit Hilfe von youtube-dl, welches bereits in dem folgenden Beitrag "Rund um Linux - Einige nützliche Befehle für die Shell II (Download mit wget und seq)" erwähnt wurde.

Um den Video- und Audiostream in eine einzige Datei zusammenführen zu können, muss FFmpeg inkl. libav installiert sein. Andernfalls erstellt youtube-dl für jeden Stream eine separate Datei (eine für Audio und eine für Video). Für die Wahl der Download Qualität siehe auch https://github.com/ytdl-org/youtube-dl/blob/master/README.md#format-selection.

/usr/bin/python3 /usr/local/bin/youtube-dl -f bestvideo+bestaudio https://cs.xyz.io/v1/TV/pd/93/9B/36/C9/FO-1234567ABC/manifest.mpd


Installation youtube-dl

Siehe hierzu auch http://ytdl-org.github.io/youtube-dl/download.html.

sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl


Installation FFmpeg inkl. libav

Fehlt die Installation kommt es bei der Ausführung zu folgender Meldung:
  • WARNING: You have requested multiple formats but ffmpeg or avconv are not installed. The formats won't be merged. 
sudo apt-get install ffmpeg (siehe auch https://ffmpeg.org/download.html)

Zusätzliche Codecs (siehe auch https://libav.org/)
sudo apt-get install libavcodec-extra

Jetzt muss man nur noch in der Lage sein, youtube-dl mit der eigenen Python-Version auszuführen zu können:
  • /usr/bin/python3 /usr/local/bin/youtube-dl