Amazon Dash Button zweckentfremden (OHNE ARP!) 1/n

Seit kurzem sind die Amazon Dash Buttons auch in Deutschland verfügbar. Ich habe natürlich direkt zugeschlagen, da mir kein Knopf mit Internet bekannt ist welcher für 5€ zu haben wäre. Selbst Selbstbau scheidet da aus.

Stellt sich nur die Frage wie man den Button für eigene Zwecke nutzt. Leider macht einem das Amazon sehr schwer.

Nicht nur jeder Knopfdruck sondern sogar die Konfiguration benötigt eine bestehende Internetverbindung inkl. Konnektivität zu den echten Amazon Servern, da das ganze über HTTPS läuft und der Button tatsächlich das Zertifikat verifiziert.

Den Button ins W-Lan befördern

Der Versuch den Button ohne die App mit einem Laptop zu konfigurieren scheiterte als der Button im letzten Schritt die Konfiguration prüfte. Da der antwortende Server meiner war und kein Amazon SSL Zertifikat hatte wurde die Konfiguration direkt gelöscht.

Solange es also keinen Exploit gibt und auch niemand bei VeriSign einbricht und ein paar Interna rausträgt wird das wohl nichts ohne einen Amazon Account.

Falls es jemand selbst versuchen möchte geht es wie folgt:

  1. 6 Sekunden lang den Knopf drücken bis die LED blau blinkt
  2. Mit der SSID „Amazon ConfigureMe“ verbinden
  3. GET request zu http://192.168.0.1
  4. GET request zu http://192.168.0.1 mit Content-Type: application/json header
  5. GET request zu http://192.168.0.1/token?value=o%26vD wobei o%26vD ein 4-byte Token ist, welches vermutlich normalerweise von Amazon geliefert wird
  6. GET request zu http://192.168.0.1/?amzn_ssid=SSIDHIER&amzn_pw=PASSWORTHIER

Der Button startet nun neu, verbindet sich mit dem Netzwerk, versucht mit dash-button-na.amazon.com zu sprechen und stellt fest, dass entweder das Token ungültig ist oder der Server nicht der ist der er vorgibt zu sein. Also weg mit der funktionierenden W-Lan Konfiguration. Juhu!

Ein Weg den Button dann doch noch dauerhaft im W-Lan zu behalten ist das übliche. Assistent in der Amazon App durchlaufen lassen und dann bei der Auswahl welches Produkt bestellt werden soll einfach abbrechen.

Bisherige Anleitungen (Technisch gesehen ist es nur eine Anleitung, die von allen abgeschrieben und kopiert wird weil niemand offensichtlich in der Lage ist selbst zu denken…) lauschen dann auf ein ARP Paket des Buttons im Netzwerk und dann gehts los. Der Request geht natürlich trotzdem weiter zu Amazon und Amazon wirft den Nutzern eine Benachrichtigung aufs Handy doch bitte den Button richtig einzurichten. 10/10

 

Was ist die Alternative?

Glücklicherweise ist es dem Button herzlichst egal ob die Verbindung zum Server fehlschlägt oder nicht sobald er einmal im W-Lan ist. Er hätte natürlich trotzdem gerne noch ein echtes Zertifikat und blinkt daher Rot aber sonst läuft er auch ohne Amazon Verbindung problemlos.

Die Lösung ist also den DNS Eintrag für parker-gw-eu.amazon.com auf eine lokale IP umzubiegen auf der dann ein Programm auf dem TCP Port 443 läuft und bescheid gibt wenn der Button versucht sich zu verbinden. Es ist völlig wurst ob das scheitert man sieht die Verbindung ja trotzdem und zuordnen kann man den Button anhand seiner IP.
Tada! Wieso ist das jetzt besser?

  • Keine Daten verlassen das Netzwerk
  • Es wird nicht permanent der gesamte Netzwerkverkehr gescannt
  • DIE ARP IDEE IST VÖLLIGER NONSENSE GOTTVERDAMMT
  • Meine Nerven werden geschont
  • Ich kann auf Menschen schimpfen die meinen sie seien Journalisten weil sie ctrl+c & ctrl+v können

 

Ausblick

Würde man dem Button irgendwie vorgaukeln können, dass da der richtige Amazon Server antwortet, so könnte man auch die Farbe der LED kontrollieren und ggf. auch weitere Daten wie den aktuellen Batteriestatus des Dash Buttons auslesen. Ideen dafür sind sehr erwünscht.

Weiterhin fehlt es natürlich noch an einer Möglichkeit den Button ohne Amazon App ins W-Lan zu bringen. Es gibt anscheinend OTA Firmware Updates, aber die laufen natürlich ebenfalls über HTTPS. Sicherlich könnte man da auch was auf Hardware-ebene machen, aber dafür fehlt mir das Know How.

 

Anhang

Beispielhaft könnte der Server, welcher auf die Verbindungsversuche des Buttons lauscht in etwa so aussehen.

var net = require('net');
var _ = require('underscore');

var HOST = '192.168.178.12';
var PORT = 443;

net.createServer(function(sock) {
    sock.on('data', function(data) {
        possibleDashButtonPress(sock.remoteAddress);
        sock.end();
    });

    sock.on('error', function(e){
        console.log(e);
    });
}).listen(PORT, HOST);

function dashButtonPress(ip) {
    console.log("Dash button pressed:", ip);  
}

var possibleDashButtonPress = _.debounce(dashButtonPress, 200);

console.log('Server listening on ' + HOST +':'+ PORT);

(Hier in NodeJS umgesetzt)

Ich denke der Gedanke dahinter sollte klar sein. Als Erinnerung sei noch erwähnt, dass unter Linux Programme, welche nicht als root laufen nicht auf den ersten 1024 Ports lauschen dürfen. Entweder lässt man das also als root laufen oder man biegt den Traffic mit IPTables um.

 

EDIT1:

Es sei ebenfalls noch erwähnt, dass der Button ggf. den DNS Request am eigenen DNS-Server vorbei direkt zu 8.8.8.8 macht. Daher sollte man dies zusätzlich noch mittels IPTables unterbinden. Suchbegriff für Google hierbei: „DNS Hijacking“

Tagged , , . Bookmark the permalink.

6 Responses to Amazon Dash Button zweckentfremden (OHNE ARP!) 1/n

  1. tux- says:

    Doch, natürlich dürfen Programme, die nicht als root laufen, auf den ersten 1024 Ports lauschen. (Webserver zum Beispiel.)

  2. Michael says:

    Ich hab mich das Wochenende mit meinem Button beschäftigt, und ein kleines IoT Framework gebastelt (https://github.com/misc0110/dash-button) Als Kommunikation mit dem Dash Button kann sowohl die Network-Sniffing Methode als auch die DNS redirection (auf einem OpenWRT Router oder einem Raspberry Pi) verwendet werden, die Vorgehensweise ist für alle 3 Varianten beschrieben. Mit dem Framework kann man die Button-presses als HTTP oder MQTT messages senden.

    • Hypfer says:

      Sehr nett. Gute Arbeit!
      Bist du da tatsächlich über meinen Blogartikel hier drauf gekommen oder einfach von selbst und hast es hier mal drangeheftet?

      • Michael says:

        Ich bin selbst auf die Idee gekommen, habe dann aber noch gesucht, ob man die Aktivierung umgehen kann (bis jetzt habe ich leider noch keinen Weg gefunden). Dabei bin ich auf deinen Artikel gekommen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.