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.