Das Bild zeigt Flecktarn. Dieses Muster wird genutzt um Personen oder Gegenstände im Gelände zu tarnen. Es wirkt wie ein Rauschen und ist aus verschiedenen Grüntönen zusammengesetzt.

Die besten Möglichkeiten um Bilder auf Websites zu tarnen

Vor einer Weile erhielt ich eine Mail von einem deutschen Unternehmen, welches mich zur Zahlung bzw. Nachlizensierung von einem Bild auf meiner Website aufforderte. Gefunden wurde das Bild mit Hilfe einer Bildsuchmaschine. Zwar konnte ich nachweisen, dass ich das Bild rechtmäßig verwendet habe und die Forderung so abwenden aber diese Geschichte spare ich mir für einen anderen Post. Ich wollte herausfinden wie ich mich in Zukunft vor automatischen Zahlungsaufforderungen durch Bildsuchmaschinen schützen kann. Für mich ist das ein rechtlicher Angriffsvektor auf meine Website. Zwar gebe ich mir Mühe die Bilder auf meiner Website nach bestem Gewissen zu prüfen aber ganz sicher kann ich mir nie sein. Ich nutze häufig Bilder von Pixabay. Ich habe schon gelesen, dass einige Bilder von Pixabay nach einer Weile wieder verschwinden und dann trotzdem Forderungen auf Leute zukommen weil die Quelle nicht mehr nachgewiesen werden kann. Wie kann es also gelingen Bildsuchmaschinen auszutricksen?

Mir geht es hier nicht darum Lizenzvereinbarungen zu umgehen. Ich bin dankbar für alle freien Bilder, die es da draußen gibt und ich gestehe den Urheber:innen auch jede Leistung zu. Hier geht es wirklich nur um die Gefahren selbst trotz größter Sorgfalt das Ziel von Abmahnungen zu werden, die nicht gerechtfertigt sind.

Image Cloaking

Das Zauberwort heißt image cloaking. Ich will also versuchen Bilder so weit zu manipulieren, bis Bildsuchmaschinen diese nicht mehr finden können. Gleichzeitig darf das nicht dazu führen, dass die Bilder unbrauchbar werden. Dafür muss ich nicht darauf warten bis eine dieser Suchmaschinen meine manipulierten Bilder findet. Stattdessen kann ich den umgekehrten Weg gehen und die Bilder ganz direkt als Input bei den Suchmaschinen nutzen. Ich gehe hier also davon aus, dass die Suchmaschine die manipulierten Bilder nicht mehr finden kann, wenn ich ein manipuliertes Bild auch nicht mehr nutzen kann, um das Original zu finden. Für meine Tests will ich eine der größten und bekanntesten Suchmaschinen für Bilder nutzen: https://tineye.com/

Los gehts!

Ich starte auf pixabay.com und lade mir ein beliebiges frei verfügbares Bild herunter. Ich suche zum Beispiel nach «Katze» und speichere eines der Bilder ab.

Zunächst entferne ich nun die Exifdaten aus der Bilddatei und ändere den Dateinamen, um sicherzustellen, dass die gefundenen Matches in der Suchmaschine nur aufgrund der reinen Bilddaten zustande kommen. Es könnte ja sein, dass der Suchalgorithmus im Hintergrund Dateinamen und Metadaten in die Suche einbezieht. Das möchte ich so ausschließen.

Zunächst lade ich das Originalbild in der Suchmaschine hoch, um zu schauen, ob es überhaupt Treffer gibt. Das war bei dem von mir gewählten Bild der Fall. Es gab ca. 1000 Treffer auf diversen Websites.

Manipulationsversuche mit convert

Für die Manipulation des Bildes nutze ich den convert command von imagemagick. Wie du imagemagick unter Ubuntu installieren kannst erfährst du hier: https://wiki.ubuntuusers.de/ImageMagick/ Es ist aber auch für alle anderen gängigen Betriebssysteme verfügbar.

In der folgenden Tabelle kannst du sehen welche Kommandos ich genutzt habe, um das Bild zu manipulieren. Ich habe dazu jeweils notiert wie viele Treffer es nach der Manipulation in tineye.com gab. Ausserdem habe ich in der Spalte «Usability» versucht zu bewerten wie brauchbar das Bild nach der Manipulation noch für die Website ist. Einige Techniken führen zwar dazu, dass das Bild nicht mehr gefunden wird, zerstören die Qualität aber so stark, dass es für die Website nicht mehr brauchbar ist. Bei einigen Methoden ist die Qualität des Bildes zwar total schlecht aber trotzdem wird es noch zuverlässig erkannt. Ausserdem gibt es Methoden, die nur für manche Bilder funktionieren. Zum Beispiel horizontales und vertikales Spiegeln mit flip und flop. Diese Methoden führen zu guter Bildqualität und reduzieren gleichzeitig die Erkennungsrate erheblich. Jedoch sind diese Methoden für Bilder mit Textinhalten nicht zu gebrauchen.

MethodCommandFound ResultsUsability
original976good
quality 60convert file.jpg -quality 60 file_quality_60.jpg976good
quality 20convert file.jpg -quality 20 file_quality_20.jpg963low, many artifacts
jpeg:extent=25kbconvert file.jpg -define jpeg:extent=25kb file_25kb.jpg974low, many artifacts
noise gaussianconvert file.jpg +noise gaussian file_gaussian.jpg976low, big image size
monochromeconvert file.jpg -monochrome file_monochrome.jpg804bad
flopconvert file.jpg -flop file_flop.jpg53good for some images
flipconvert file.jpg -flip file_flip.jpg0good for some images
blur 0x8convert file.jpg -blur 0x8 file_blur.jpg839bad
rotate 10convert file.jpg -distort ScaleRotateTranslate 10 file_rotate_10.jpg741good
rotate 11convert file.jpg -distort ScaleRotateTranslate 11 file_rotate_11.jpg684good
rotate 12convert file.jpg -distort ScaleRotateTranslate 12 file_rotate_12.jpg432good
rotate 13convert file.jpg -distort ScaleRotateTranslate 13 file_rotate_13.jpg72good
rotate 14convert file.jpg -distort ScaleRotateTranslate 14 file_rotate_14.jpg1good
rotate 15convert file.jpg -distort ScaleRotateTranslate 15 file_rotate_15.jpg0good

Die Methode meiner Wahl: Rotate

Ein Screenshot eines Dateiexplorers. Zu sehen sind die Kacheln verschiedener Bilder nebeneinander. Die Vorschaubilder zeigen jeweils das gleiche Bild einer grauen Katze auf einer grünen Wiese. Die Bilder sind jeweils gespiegelt, gedreht oder weichgezeichnet.

Wie du sehen kannst scheint die KI von tineye.com ein Problem mit Rotation zu haben. Du kannst sehen, dass die Erkennungsrate mit steigender Rotation eines Bildes abnimmt. Das ist die bisher einzige funktionierende mir bekannte Methode, die auf nahezu alle Bilder anwendbar ist ohne die Bilder unbrauchbar zu machen und die gleichzeitig gute Ergebnisse bei der Tarnung erreicht.

Ein Bash-Script zur Automatisierung

Eine Weile lang habe ich alle Bilder auf meiner Website mit dieser Methode versteckt. Ich nutze hier die Länge der Bildnamen um einen festen Wert für die Rotation zu berechnen sowie die Richtung der Rotation festzulegen. So sind die Rotationen immer etwas anders aber für jedes Bild immer gleich. Das ist für statische Websites von Vorteil. Da ich die Website mit Rsync aktualisiere werden auch nur veränderte Bilder übertragen. Durch dieses Verfahren bleiben bereits rotierte Bilder immer gleich. Zusätzlich lasse ich noch einige andere Filter über die Bilder laufen. Auch wenn diese nicht so effektiv für das Verstecken sind. Ich füge zum Beispiel Rauschen hinzu, reduziere die Qualität sowie die Bildgrösse. Das hat einfach noch Performance-Gründe und das Rauschen finde ich persönlich ganz gut. Das Rauschen führt jedoch dazu, dass die Bilder nicht mehr komprimiert werden können, da das Rauschen zufällig ist. Daher nutze ich für die PNGs png8 mit 256 Farben, um die Bildgrösse wieder dramatisch zu reduzieren. Bei den JPGs begrenze ich die Filesize auf 100kb, um die durch das Rauschen erzeugte Grösse wieder zu reduzieren. Letztlich werden mit -strip noch die Exifdaten bereinigt. Das Script ersetzt alle Bilder in einem Verzeichnis. Also lege vorher unbedingt ein Backup an! Das Script ist ausbaufähig und nicht perfekt. Passe es also deinen Bedürfnissen an!

folder=./static/content/images

for i in $(find "$folder" -type f -print)
do
	filename=$(basename -- "$i")
	extension="${filename##*.}"
	length=${#filename}
	if [ $((length%2)) -eq 0 ];
	then
	    angle=$((length / 2))
	else
	    angle=$((length / 2 * -1))
	fi
	echo Processing file "$i"
	if [ "$extension" = "png" ]; then
	    echo rotating PNG image by "$angle" deg
	    convert "$i" -rotate "$angle" -transparent white +noise gaussian -strip -quality 60 png8:"$i"
	else
	    echo rotating JPG image by "$angle" deg
	    convert "$i" -distort ScaleRotateTranslate "$angle" +noise gaussian -strip -quality 60 -define jpeg:extent=100kb "$i"
	fi
done

Und nun viel Spaß beim Bilder verschleiern! Und nicht vergessen: Spendiert den Leuten auf Pixabay ab und an einen Kaffee!

Titelbild: https://pixabay.com/de/illustrations/camouflage-tarn-militär-textur-1541188/