Samstag, 11. November 2017

Das Alter von AutoScout24-Inseraten herausfinden (Low-Skill-Version)

In den letzten zwei Wochen waren Stephanie und ich auf der Suche nach einem Occasion-Auto als Ersatz für unseren altgedienten TOYOTA Yaris 1.3, den wir an einen Bekannten verkaufen dürfen.

Nach einer Probefahrt an einem Samstag bei einer Garage in der Region drängte uns der Verkäufer dazu, nicht zu Lange mit dem Kaufentscheid zuzuwarten. Die Nachfrage nach solchen Fahrzeugen sei gross und vielleicht könnte bereits jemand weiteres am Montag Interesse anmelden. Beim Sondierungsanruf des Garagisten am darauffolgenden Dienstag-Morgen hatte sich die Prophezeiung dann tatsächlich erfüllt: Ein zweiter Interessent hatte sich materialisiert, aber da wir zuerst angefragt hätten, hätten wir auch das Vorkaufsrecht. Wie anständig!

Verkäufer, die einem unter Zeitdruck setzen wollen, sind mir zunehmends suspekt. Nicht zuletzt, weil ich als Security Officer regelmässig mit Phishing-Mails zu tun habe, deren Autoren mit identischen psychologischen Tricks hantieren: „Alarm, bitte rasch handeln, sonst verlierst du nach 24 oder 48 Stunden Zugang zu deiner Apple ID“. Selbst Booking.com wendet solche Räubermethoden bei ihren Hotelangeboten an („Nur noch 1 Raum zu diesem Preis verfügbar“, „In den letzten 24 Stunden von 3 Personen gebucht“). Da muss man hart bleiben.

Im vorliegenden Fall hatte ich im Hinterkopf, dass ich das probegefahrene Auto vor Wochen bereits auf AutoScout24 gesehen hatte. Wieso also sollte ausgerechnet nun Eile bestehen, überhastete Kaufentscheide zu fällen?

Doch wie konnte ich meine Vermutung verifizieren? AutoScout24 hütet sich natürlich, solche Informationen in Autoanzeigen klar sichtbar anzupreisen. Die AutoScout-Kunden sind nicht wir (für uns ist der Service selbstverständlich kostenlos), sondern die Garagen, die Fahrzeuge verkaufen wollen und dafür AutoScout24 als Mittelmann einen „Wegzoll“ entrichten dürfen. Und wer zahlt befiehlt: Die Informations-Asymmetrie muss gewährleistet bleiben, denn man stelle sich vor, ein Käufer läuft in die Garage hinein und hat im Verhandlungspoker das Wissen in der Hinterhand, dass sein Traumfahrzeug ein Ladenhocker ist.

Wenn uns AutoScout24 also nicht direkt weiterhelfen will, helfen wir uns halt selber. Nach einer Debug-Session an einem dunklen Winterabend hatte ich die Lösung, die im Grunde naheliegend ist: Die Bilder der Autos, und zwar sowohl das Speicherdatum, als auch die im Bild eingebetteten EXIF-Daten.

Wer die Web-Site bereits einmal auseinandergenommen hat, weiss, dass die Bilder nicht als Originale ausgeliefert werden, sondern über ein Script, welchem man in den Parametern den Pfad, die Bilddimensionen und JPEG-Qualität mitgeben kann. Das schaut dann etwa so aus:


https://cas01.autoscout24.ch/toyota-verso-s-kompaktvan–minivan-2015-occasion/?1024×2048/3/90/custom/434/5101434/0.jpg

Die Bausteine lassen sich teilweise entschlüsseln (und beim Fehlen ist auf Grund eines Web-Entwicklers, dem OWASP wohl kein Begriff ist, auch mit hilfreichen Fehlermeldungen zu rechnen):

  • ?1024x2048 = Auflösung in Pixeln
  • /3 = „Quality Format“
  • /90 = Qualität (ein spontaner Test mit „95“ hat nicht funktioniert; d.h. die Werte sind hartkodiert)
  • /custom/434/5101434/0.jpg = Der absolute Pfad der Bilddatei auf dem NFS-Share, wobei ich den Wert 434 nicht deuten kann. Bei 434 handelt es sich um die letzten drei Zahlen der ID. AutoScout24 verwendet diese Zahl, um die Bilder strukturiert in Unterordner abzulegen, um nicht in einem einzigen Verzeichnis Millionen von Photos liegen zu haben. 5101434 ist die ID des Inserats.
    Die ID zählt übrigens stetig hoch. Kennt man also eine ID und ein Publikationsdatum vor diesem Inserat und eine ID und ein Publikationsdatum nach diesem Inserat, kann man den Veröffentlichungszeitpunkt eingrenzen und interpolieren.

Dieses Script stellt zwei Dinge sicher: Einerseits liefert der Web-Server als Erstellungsdatum des Bildes das Datum und die aktuelle Uhrzeit des Aufrufs mit. Andererseits entfernt das Script jegliche EXIF-Daten, welche viele verschiedene Informationen enthalten können, bspw. die GPS-Koordinaten, das Kameramodel, aber natürlich auch das Aufnahmedatum.

Gibt es eine Möglichkeit, auf die Originalbilder zuzugreifen? Selbstverständlich gibt es das, wird aber nirgends verwendet und ist schon gar nicht dokumentiert. Für das Photo, welches ich oben referenziert habe, lautet die URL:


https://cas01.autoscout24.ch/custom/434/5101434/0.jpg

Man benötigt also die Basis-URL https://cas01.autoscout24.ch sowie den String, der an den URLs öffentlich zugänglicher Photos hängt. Hier: /custom/434/5101434/0.jpg.

Lädt man dieses Photo nun unter macOS im Terminal mit wget herunter, liefert der Web-Server das ursprüngliche Speicherdatum mit. Das ursprüngliche Speicherdatum ist identisch mit dem Zeitpunkt, an welchem das Inserat aufgeschaltet wurde:

$ wget "https://cas01.autoscout24.ch/custom/434/5101434/0.jpg"
--2017-11-11 16:51:45--  https://cas01.autoscout24.ch/custom/434/5101434/0.jpg
Auflösen des Hostnamens cas01.autoscout24.ch… 91.208.180.147
Verbindungsaufbau zu cas01.autoscout24.ch|91.208.180.147|:443 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 542433 (530K) [image/jpeg]
Wird in »0.jpg« gespeichert.

0.jpg               100%[===================>] 529,72K  --.-KB/s    in 0,1s    

2017-11-11 16:51:47 (4,95 MB/s) - »0.jpg« gespeichert [542433/542433]

Das Upload-Datum der Datei lautet 31. August 2017, 08:50 Uhr morgens:

$ ls -l
total 1064
-rw-r--r--  1 user  staff  542433 31 Aug 08:50 0.jpg

Das ist realistisch — der 31. August war ein Donnerstag und 8:50 Uhr liegt innerhalb der Bürozeiten.

Und was sagt jhead, mit welchem man EXIF-Informationen auslesen kann?

$ jhead 0.jpg 
File name    : 0.jpg
File size    : 542433 bytes
File date    : 2017:08:31 08:50:08
Resolution   : 2048 x 1365
JPEG Quality : 89

Das sind leider keine EXIF-Informationen: AutoScout entfernt diese offenbar aus den Originalen, die sie im oben genannten Pfad ablegen.

Und so hatte ich mich in diesem konkreten Fall selber beruhigt, dass keine Hüst-und-Hott-Aktion nötig sein würde. Die Wahrscheinlichkeit, dass das als Schnäppchen angepriesene Auto zwei Monate lang herumstand und sich urplötzlich am selben Wochenende zwei Parteien dafür interessieren würden, war doch äusserst gering und wohl die Erfindung eines provisionsgetriebenen Verkäufers.

NB: Finde ich die Zeit, werde ich in einem zukünftigen Artikel beschreiben, wie die High-Skill-Version ausschaut. Kurzzusammenfassung: iOS-App, mitmproxy und JSON. So findet man alle möglichen Meta-Informationen zu einem Inserat, die man als Endbenutzer selbst in der App, aber auch auf der Web-Site nie zu Gesicht bekommt respektive nur in gefilterter/formatierter Version.

Tags: , , , , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 5. November 2017

upsc meldet „libupsclient.so.4: cannot open shared object file“

Als ich letzten Mittwoch meine Debian-Server mit den neuesten stable-Paketen aktualisierte hatte, kam es zu einem Kollateralschaden: Plötzlich wollte cacti die Gesundheitswerte meiner neuen, über USB an die Server angeschlossenen Eaton 3S550IEC resp. Eaton 3S700IEC USVs nicht mehr aufzeichnen.

Nach etwas Debugging dann rasch die Erkenntnis, dass dem Kommandozeilen-Tool zum Auslesen der Parameter der USVs eine bestimmte Datei fehlt:

$ upsc
upsc: error while loading shared libraries: libupsclient.so.4: cannot open shared object file: No such file or directory

Dank der Suche nach dieser Shared Library in Paketen über packages.debian.org war dann schnell klar, dass ich folgendes Paket nachinstallieren musste:

apt-get install libupsclient4

Seither funzt die Aufzeichnung wieder:

image-7540

Schade nur, dass die Eaton USVs nur den Ladestand der Batterie sowie die Auslastung in Prozent ausgeben …

Tags: , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 5. November 2017

SSH meldet „Bad SSH2 Mac spec“

Meine ~/.ssh/config habe ich gemäss den Empfehlungen von Mozilla konfiguriert.

Offenbar gab es Anpassungen am SSH-Client unter macOS, als ich zu Monatsbeginn (1. November) MacPorts aktualisiert habe.

Es waren keine Logins auf irgendwelche in config konfigurierten Server mehr möglich. Die Fehlermeldung lautete:

$ ssh sauron
/Users/mario/.ssh/config line 8: Bad SSH2 Mac spec 'hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com,hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96'.

Hmmm! Mit folgendem Befehl findet man raus, welche SSH2 Macs der SSH-Client mittlerweile nur noch unterstützt:

$ ssh -Q mac
hmac-sha1
hmac-sha1-96
hmac-sha2-256
hmac-sha2-512
hmac-md5
hmac-md5-96
umac-64@openssh.com
umac-128@openssh.com
hmac-sha1-etm@openssh.com
hmac-sha1-96-etm@openssh.com
hmac-sha2-256-etm@openssh.com
hmac-sha2-512-etm@openssh.com
hmac-md5-etm@openssh.com
hmac-md5-96-etm@openssh.com
umac-64-etm@openssh.com
umac-128-etm@openssh.com

Ich speicherte beide Werte in unterschiedlichen Textdateien, wobei ich die Werte aus der config von Hand auf einen Wert pro Zeile aufspaltete. Danach sortierte ich diese mit sort, um sie besser vergleichbar zu machen.

Ein Diff der beiden Listen zeigte mir schlussendlich klar auf, wo ich Hand anlegen musste:

$ diff ssh-enabled-sorted.txt ssh-available-sorted.txt 
3,4c3,4
< hmac-ripemd160
< hmac-ripemd160@openssh.com
---
> hmac-md5-96-etm@openssh.com
> hmac-md5-etm@openssh.com
6a7,8
> hmac-sha1-96-etm@openssh.com
> hmac-sha1-etm@openssh.com
12a15,16
> umac-64-etm@openssh.com
> umac-64@openssh.com

Damit konnte ich config anpassen. Vorher:

...
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com,hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
...

Nachher (hmac-ripemd160,hmac-ripemd160@openssh.com entfernt):

...
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com,hmac-md5,hmac-sha1,hmac-sha1-96,hmac-md5-96
...

Tags: , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Montag, 23. Oktober 2017

Mit Debian Rescue eine CD mounten und auf einen USB-Stick kopieren

Unsere Wohnung ist (fast) eine DVD/CD-ROM-freie Zone. All unsere Endgeräte verfügen mittlerweile über kein optisches Laufwerk mehr.

Doch was nun, wenn man eine CD erhält, deren Daten man auf die Endgeräte laden möchte?

Man nimmt den herumliegenden Lenovo T400 zur Hilfe, welcher noch über ein CD-ROM-Laufwerk verfügt. Leider fehlt der guten Maschine die Festplatte, weil der auf AliExpress.com gekaufte Festplatten-Käfig sowie die Plasticschienen derzeit gerade aus China unterwegs in die Schweiz sind.

Damit man auf der Kiste also ein Linux zum Laufen kriegt, bootet man von einem USB-Stick, auf welchen die Netinst-Version von Debian 9.0 kopiert wurde. (tftp Netzwerk-Boot wäre noch ein Todo für die langen Winternächte).

Nach ein paar Kapriolen, um das Boot-Laufwerk auf USB umzubiegen, startet der Laptop mit der graphischen Installationsoberfläche. Dort wählt man unter Advanced Options den Rescue Modus ein (ohne graphische Benutzeroberfläche).

Nach viel zu vielen Dialogfenster hat man endlich eine Shell zur Hand. Sobald man die CD eingelegt hat, gibt man folgende Befehl ein:

# mkdir /mnt/cdrom
# mount /dev/cdrom /mnt/cdrom

Unter /mnt/cdrom sieht man mit ls -l den Inhalt der CD.

Hat man den zweiten USB-Stick, auf welchen die Daten der CD kopiert werden sollen, bereits bei der Anzeige des Debian-Menus eingestöpselt, könnte man dem Rescue-System in einem Dialog-Fenster sagen, diesen Stick ebenfalls bereits zu mounten.

Hat man dies nicht gemacht, sucht man sich zuerst einen weiteren freien USB-Port am Gerät und steckt den USB-Stick ein.

Anschliessend sucht man sich mit fdisk -l den Devicenamen sowie den Namen der Partition hervor. Gleichzeitig sieht man auch, ob der Stick mit FAT16/32 formatiert ist — ich konnte in meinem Versuch nur solche Sticks mounten.

In unserem Fall trägt die Partition des USB-Sticks den Pfad /dev/sdb1, deshalb mountet man den Stick so:

# mkdir /mnt/usb2
# mount /dev/sdb1 /mnt/usb2

Anschliessend wechselt man auf das CD-Laufwerk und verwendet — leider, da rsync in dieser Umgebung fehlt — folgenden Befehl, um die Daten auf den USB-Stick zu kopieren:

# cd /mnt/cdrom
# cp -R . /mnt/usb2

Doch OBACHT — nur weil der Kopierbefehl abgeschlossen ist, heisst das leider noch nicht, dass alle Daten bereits auf den USB-Stick geschrieben wurden:

USB write: delay between when Ubuntu says its done and it actually being done

Bevor man den USB-Stick ausstöpselt, muss man mit folgendem Befehl sicherstellen, dass auch wirklich restlos alle Daten auf den Stick geschrieben wurden:

# sync

Danach werkelt sync, was locker noch einmal ein oder zwei Minuten dauern kann.

Anschliessend kann man den Stick mit folgendem Befehl für die Entfernung bereitmachen:

# umount /mnt/usb2

Sobald dieser Befehl ausgeführt wurde, kann man den Stick aus dem USB-Port entfernen und auf einem Endgerät einstöpseln.

Tags: , , , , , , , , , , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Freitag, 20. Oktober 2017

Canon Selphy wird bei der Treiberinstallation unter Windows nicht im Netzwerk erkannt

Letzte Woche habe ich für eine Bekannte einen gebrauchten Canon Selphy-Photodrucker gepostet. Das Gerät war im Nu ins heimische Netzwerk integriert und druckte daraufhin direkt vom iPhone übermittelte Photos problemlos aus.

Einzig bei der Installation des Druckertreibers unter Windows 7 kam es zu Komplikationen: Das Installationsprogramm konnte den Drucker partout nicht im Netz erkennen, obwohl er nachweislich eingeschaltet war und das WLAN-Symbol anzeigte.

Nach etwas Google-Recherche dann die Erleuchtung: Der Computer war aus irgendeinem Grund nicht mit dem Netzwerk-Modus „Heimnetzwerk“ unterwegs, sondern im Modus „Öffentliches Netzwerk“.

Damit der Drucker gefunden werden kann, muss die Option „Network Discovery“ aktiviert werden: How to Turn Network Discovery On or Off in Windows 7

  1. Control Panel
  2. Network and Sharing Center
  3. Change advanced sharing settings
  4. Pfeil nach unten beim zutreffenden Netzwerkprofil (dasjenige, das „current profile“ anzeigt)
  5. Klick auf „Turn on network discovery“

Tags: , , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Freitag, 20. Oktober 2017

Songs werden auf dem iPhone doppelt aufgeführt

Wer das Problem nicht anderweitig in den Griff bekommt, dem hilft nur eines (sofern man einzig über den iTunes Store gekaufte Songs zu seinem Besitz zählt):

  1. Settings
  2. General
  3. iPhone Storage
  4. Music
  5. Edit
  6. Rot Umrandetes Minus-Zeichen bei „All Songs“ auswählen

Quelle: Musiktitel auf dem iPhone doppelt, lassen sich nicht entfernen

Danach lädt man sich alle Lieder erneut von Apple herunter:

  1. iTunes Store
  2. More
  3. Purchased
  4. Music
  5. Recent Purchases
  6. Download All

Tags: , , , , , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen

Freitag, 20. Oktober 2017

Shopping in Europa: Wo ist die Mehrwertsteuer am Günstigsten?

Die Schweiz hat eine konkurrenzlos günstige Mehrwertsteuer im Vergleich zu europäischen Staaten. Wohin sollte man aber verreisen, wenn man im Ausland shoppen will? Rick Steves gibt Auskunft:

VAT Rates in Europe and Minimum Purchases Required to Qualify for Refunds

Um in den Genuss der tiefsten Mehrwertsteuerbeträge ausserhalb der Schweiz zu kommen, muss man nach Luxemburg reisen: Mit 15 Prozent ist die Steuer dort am günstigsten, gefolgt von Deutschland (!), dem einzigen verbleibenden Land, welches noch einen Mehrwertsteuersatz unter 20 Prozent kennt.

Die Mehrwertsteuerhölle befindet sich in Ungarn mit 27 Prozent — beim Kauf eines Produktes wird dort der Kaufpreis um mehr als einen Viertel erhöht, um dem Staat eine Konsumabgabe zu entrichten.

Tags: , , , , ,
Labels: Reisen

Keine Kommentare | neuen Kommentar verfassen

Freitag, 20. Oktober 2017

Die grösste Gefahr bei der Benutzung öffentlicher Toiletten

Drastisch gesagt: Krankheitserreger müssen an die Hände und von dort aus in den Mund kommen. Wenn es eine Ansteckung auf öffentlichen Toiletten gibt, dann also höchstens über kontaminierte Hände.

Quelle: Ist es wirklich ungesund, sich auf öffentlichen Toiletten hinzusetzen?

Ich habe einige Bekannte im Kollegenkreis, in deren Wohnungen und auf deren Körpern sich keine einzige Bakterie befindet. Ich bin mir aber nicht sicher, ob sie sich bewusst sind, dass bei der Benutzung öffentlicher Toiletten an genau zwei Orten die grösste Gefahr droht: Beim manuell bedienten Wasserhahn, den man nach dem Geschäft zum Waschen der Hände bedienen muss, sowie beim Öffnen der Türen mit dem inneren Griff.

Tags: , , , ,
Labels: Leben

Keine Kommentare | neuen Kommentar verfassen

Freitag, 20. Oktober 2017

Ubiquiti hat seine Produkte gegen KRACK bereits gepatcht

More to the point, measure your current vendors by how long it takes them to patch. Throw away gear by those vendors that took a long time to patch and replace it with vendors that took a short time.

Quelle: Some notes on the KRACK attack

Im Januar 2016 habe ich meinen ersten Ubiquiti UniFi-Access Point gekauft und bin seither hell begeistert von den Produkten — bei mir kommt nur noch UniFi ins Haus, wenn es um die Versorgung eines Gebäudes mit WLAN geht. Mittlerweile habe ich solche Access Points an drei Standorten ausgerollt.

Als die Kunde von KRACK an die Öffentlichkeit gelangte, hatte ich die Hoffnung, dass Ubiquiti äusserst rasch reagieren würde.

Und das taten sie auch: Innert 24 Stunden standen aktualisierte Firmware-Dateien für die gesamte Produktepalette zum Download und zur manuellen Installation bereit.

Als ich mich heute auf den Controllern an den drei Standorten einloggte dann die frohe Botschaft im GUI des Controllers: Für alle meine Access Points stand Firmware 3.9.3.7537 zur automatisierten Installation bereit.

Das Bauchgefühl hat sich somit als richtig erwiesen: Der Hersteller baut nicht nur tolle Produkte, die man nie mehr hergeben möchte, sondern nimmt auch die Sicherheit seiner Software ernst und aktualisiert diese schnurstracks. Nach knapp zwei Minuten war das Upgrade vorüber und die Access Point frisch gegen KRACK gesichert.

Ubiquiti erhält das Sicherheits-Gütesiegel von mir. Wer es noch nicht getan hat: Kaufen!

Tags: , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Freitag, 20. Oktober 2017

Interaktive Windkarte Europas

Als Stephanie das letzte Wochenende in Dublin unterwegs war, habe ich mit folgender Web-Site den herannahenden Hurrikan „Ophelia“ im Auge behalten (denkt ihr auch immer daran, wenn ihr diesen Namen hört?):

Windy.com

Schick gemacht!

Tags: , , , , , , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen