webentwicklung-frage-antwort-db.com.de

Barcodes als Angriffsvektor?

Ich habe mir vor ein paar Wochen ein Defcon-Video angesehen, in dem ein Typ demonstrierte, wie Barcode-Leser im Allgemeinen recht einfach zu hacken sind. Er fuhr fort, dass bei den meisten Systemen die Eingabe nicht bereinigt ist (klingt ähnlich wie bei der SQL-Injection) und dass die meisten von ihnen durch Barcodes konfiguriert werden können, die vom Hersteller leicht zu erhalten sind. Sind Barcodes in Verbindung mit der Tatsache, dass eine Maschine schnell so konfiguriert werden kann, dass sie alle Arten von Barcodes liest, einschließlich derer, die mehr als 1000 Zeichen speichern können, eine Sicherheitslücke? Und wie könnte man das verhindern?

Bisher sind mögliche Schwachstellen SQL-Injection und Pufferüberläufe.

31
Jake Wickham

Ja, Barcode-Scanner stellen eine potenzielle Sicherheitslücke dar. Sie müssen Angriffe von diesem Vektor auf die gleiche Weise verhindern, wie Sie Angriffe von einem Eingabevektor wie einer Netzwerkverbindung oder einer Tastatur verhindern würden.

  1. Überprüfen Sie die Eingaben in der App, nicht im Scanner. Verlassen Sie sich nicht darauf, den Scanner so zu konfigurieren, dass nur 12-stellige UPC-A-Barcodes geliefert werden. Wie jeder Web-App-Entwickler schnell erfährt, ist es eine riesige Sicherheitslücke, dem Kunden zu vertrauen, dass er die Eingabe bereinigt. Verwenden Sie Längenprüfungen in der App, um sicherzustellen, dass Pufferüberläufe nicht ausgenutzt werden können. Führen Sie White-Listing-Wertprüfungen durch, um sicherzustellen, dass Sie keine außerhalb der Grenzen liegenden Zeichen haben (wenn Sie beispielsweise erwarten, dass der Benutzer nur einen Produkt-UPC-A- oder EAN-13-Barcode scannt, sollten Sie eine Ausnahme auslösen wenn der Eingang nichtstellige Werte erkennt.)

  2. defensiv codieren. Genau wie bei einer Web-App müssen Sie sichere Codierungsoptionen wie parametrisiertes SQL treffen. Sie sollten dies bereits tun, um sich vor über die Tastatur eingegebenen SQL-Injection-Angriffen zu schützen. Barcodes sind hier nichts Besonderes.

  3. Härten Sie Ihre Geräte. Die meisten Barcode-Scanner werden zunächst durch Scannen einer Reihe von vom Hersteller bereitgestellten Barcodes konfiguriert (die Dokumentation Ihrer Scanner beschreibt diese Symbole.) Lesen Sie die Dokumentation der Scanner, um herauszufinden, wie Sie die Scanner konfigurieren können vom Host-Computer über die Datenverbindung. Sobald Sie die Scanner vom Computer aus konfigurieren können, tun Sie dies. Unter den einzustellenden Konfigurationselementen sollten Sie die Fähigkeit des Scanners deaktivieren, die Konfigurationsbarcodes zu lesen.

44
John Deters

Viele Barcode-Scanner werden vom Betriebssystem als Tastaturtyp behandelt. Dies gibt ihnen genau die gleiche Angriffsfläche wie jemand, der die Informationen des Barcodes über die Tastatur eingibt. Als extremes Beispiel könnte ein Barcode-Scanner, der Byte-Modus PDF 417 oder binärer QR-Code versteht, dem Computer befehlen, den Strom zu verlassen Starten Sie den Internet Explorer, laden Sie ein Programm von der Website des Angreifers herunter und führen Sie dieses Programm aus.

16
Mark

Barcode ist nur eine Darstellung der Eingabe.

Sind Barcodes eine Sicherheitsanfälligkeit? könnte geschrieben werden als Sind Eingaben eine Sicherheitsanfälligkeit?. An sich nein, aber es ist ein Angriffsvektor.

Barcodes codieren normalerweise numerische, String- oder Binärdaten. Zusätzlich dazu, wie diese Daten für die Ausnutzung auf verschiedenen Ebenen verwendet werden können (Sie erwähnen den Pufferüberlauf, aber er geht weit in die Softwarekette hinein - Barcodes können URLs enthalten, die vom Betriebssystem/Browser und später von der Software auf der Serverseite interpretiert werden). Berücksichtigen Sie auch das Parsen von Barcodes selbst, die unzugängliche Zugriffe, Überläufe usw. enthalten können.

Verhütung? Wie immer ist die Eingabevalidierung eine Hygiene.

2
domen

Ohne Eingabevalidierung ist alles ein möglicher Angriffsvektor. Ich habe sogar von einem SQLI gehört, der Nummernschilder als Eingabequelle verwendet. Beim Programmieren einer Radarkamera würde niemand an eine so verrückte Idee denken, und das ist das Problem!

0
licklake