Frage Wie kann ich einen Sektor auf einer SD-Karte absichtlich beschädigen / beschädigen?


Ich muss die Widerstandsfähigkeit einiger Lese / Schreib-Code für einige eingebettete Hardware testen. Wie kann ich ein paar SD-Karten opfern und mehrere bekannte Sektoren für eine kontrollierte Studie durchbrechen?

Das einzige, was mir einfällt, ist ein paar Millionen Mal einen Sektor zu überschreiben. Ich frage mich, ob ein Linux-Badblocks-Skript erstellt werden kann, um seinen zerstörenden Test für mehrere Stunden wiederholt auf einem einzelnen Sektor auszuführen.


137
2017-09-11 07:28


Ursprung


Können Sie den Low-Level-SD-Treiber so ändern, dass er vorgibt, dass ein fehlerhafter Block vorliegt, oder kommt das nicht in Frage? - Mark Yisri
@ MarkYisri, ich glaube nicht, dass der Fahrer sehr zugänglich ist. Der von uns verwendete Treiber ist äußerst rudimentär, um die Speicherzuweisung für den Rest der Firmware zu maximieren. Auch wenn es möglich wäre, würde das wahrscheinlich außerhalb meiner Möglichkeiten liegen. - Gabe Krause
Können Sie einen SD-Kartenemulator bauen? Nicht das einfachste Projekt, wohlgemerkt. - user20574
Angesichts des Ziels könnten Sie einige gebrauchte SD-Karten für wenig Geld kaufen und Sie könnten leicht einen fehlerhaften bekommen, oder einen "suchen nach ..." ankündigen, um gezielt nach defekten Karten zu suchen. Oder suchen Sie eBay nach defekten Karten. Dann testen Sie die Karte und Sie werden die Position der defekten Bereiche kennen. - FarO
Fragen Sie einen professionellen Fotografen. Sie werden sicherlich einen Stapel von skizzenhaften SD-Karten haben. - J...


Antworten:


Ein alternativer Ansatz, der kann nützlich sein.

Wenn Ihr Code unter Linux läuft, können Sie ihn vielleicht mit einem "fehlerhaften" logischen Gerät testen. dmsetup kann Geräte erstellen, die E / A-Fehler zurückgeben. Baue einfach dein Gerät mit error und / oder flakey Ziel. Von man 8 dmsetup:

error
  Fehler bei allen E / A, die in diesen Bereich gehen. Nützlich zum Testen oder zum Erstellen von Geräten mit Löchern in ihnen.

flakey
  Erstellt eine ähnliche Zuordnung zum linear Ziel jedoch periodisch unzuverlässiges Verhalten zeigt. Nützlich für die Simulation von fehlerhaften Geräten beim Testen.

Hinweis: flakey Zielnutzung ist dokumentiert Hier. Grundlegendes Beispiel Hier.

Soweit ich weiß, wird ein E / A-Fehler sofort gemeldet, also ist das anders als das Verhalten einer echten SD-Karte, wo Sie Verzögerungen, Verzögerungen usw. erwarten können. Trotzdem denke ich, dass dieser Ansatz in manchen Fällen nützlich sein kann Vortest oder so.


167
2017-09-11 08:33



Ich schätze das Out-of-Box-Denken! Wir verbinden uns auf der Block-Ebene mit der SD über einen 80MHz Atmel-Chip und ohne echtes Betriebssystem. - Gabe Krause
@GabeKrause In diesem Fall hängt die Nützlichkeit dieser Antwort davon ab, wie ähnlich die Linux-Blockgeräte-API mit der API Ihres Embedded-Gerätetreibers ist. - Qsigma
dmsetup Befehl zum Einrichten eines error Gerät, das immer Lesefehler zurückgibt: stackoverflow.com/questions/1870696/... - Peter Cordes
Ich stimme zu, dass dies wie eine bessere Lösung klingt. Zuerst können Sie über jede Hardware replizieren. Und Sie können auch die verschiedenen Fehlermodi simulieren. Zum Beispiel habe ich ein 16 GB USB-Flash-Laufwerk, das funktioniert ganz gut. Nach einer gewissen Zeit fängt ein bestimmter Bereich an, falsche Daten zurückzuliefern. Es gibt keinen FS-Fehler. Sie lesen die Datei, aber der Inhalt ist anders. Einige Sektoren sind offensichtlich instabil. Aber wie sich ein bestimmtes Gerät verhalten wird, kann nicht im Voraus bekannt sein. - akostadinov


Dieser Typ hat den Mikrocontroller in SD-Karten gehackt, um schlechte Blöcke zu markieren: https://www.bunniestudios.com/blog/?p=3554

Sie können die gleichen und willkürlich Blöcke als fehlerhaft markieren.

Heute auf dem Chaos Computer Congress (30C3) haben xobs und ich ein   feststellen, dass einige SD-Karten Schwachstellen enthalten, die dies erlauben   willkürliche Codeausführung - auf der Speicherkarte selbst. Im Dunkeln   Seite, Code-Ausführung auf der Speicherkarte ermöglicht eine Klasse von MITM   (Man-in-the-Middle) Angriffe, bei denen sich die Karte zu verhalten scheint   aber in Wirklichkeit macht es etwas anderes. Auf der hellen Seite auch   ermöglicht Hardware Enthusiasten den Zugang zu einem   sehr billige und allgegenwärtige Quelle von Mikrocontrollern.

.

Diese Algorithmen sind zu kompliziert und zu gerätespezifisch, um ausgeführt zu werden   auf der Anwendung oder Betriebssystemebene, und so stellt sich heraus, dass jeder Blitz   Speicherdiskette wird mit einem einigermaßen leistungsfähigen Mikrocontroller geliefert, um eine   benutzerdefinierter Satz von Festplattenabstraktionsalgorithmen. Sogar die winzige microSD   Karte enthält nicht eine, sondern mindestens zwei Chips - ein Controller und bei   Mindestens ein Flash-Chip (High-Density-Karten werden mehrere Flash stapeln   sterben).

.

Der eingebettete Mikrocontroller ist typischerweise ein stark modifizierter 8051 oder   ARM-CPU. In modernen Implementierungen wird sich der Mikrocontroller nähern   100 MHz Leistungsstufen, und haben auch mehrere Hardware   Beschleuniger on-sterben. Erstaunlicherweise die Kosten für das Hinzufügen dieser Controller   Das Gerät liegt wahrscheinlich in der Größenordnung von $ 0,15 bis $ 0,30, besonders   Für Unternehmen, die sowohl den Flash-Speicher als auch die Controller fertigen können   innerhalb derselben Geschäftseinheit. Es ist wahrscheinlich billiger, diese hinzuzufügen   Mikrocontroller, als jeden Blitz gründlich zu testen und zu charakterisieren   Speicherchip, was erklärt, warum gemanagte Flash-Geräte billiger sein können   pro Bit als rohe Flash-Chips, trotz der Einbeziehung eines   Mikrocontroller.

.

Der Kernpunkt ist, dass ein Firmware-Lade- und Update-Mechanismus virtuell ist   obligatorisch, insbesondere für Controller von Drittanbietern. Endbenutzer sind   selten diesem Prozess ausgesetzt, da alles in der Fabrik passiert,   aber das macht den Mechanismus nicht weniger real. Bei meinen Erkundungen   von den Elektronikmärkten in China habe ich Ladenbesitzer brennen gesehen   Firmware auf Karten, die die Kapazität der Karte "erweitern" - in anderen   Wörter laden sie eine Firmware, die die Kapazität einer Karte meldet   viel größer als der tatsächlich verfügbare Speicherplatz. Die Tatsache, dass das ist   Möglich am Point of Sale bedeutet das höchstwahrscheinlich das Update   Mechanismus ist nicht gesichert.

In unserem Vortrag bei 30C3 berichten wir über unsere Ergebnisse, die eine bestimmte erforschen   Microcontroller-Marke, nämlich Appotech und seine AX211 und AX215   Angebote. Wir entdecken eine einfache "Klopf" -Sequenz, die übertragen wird   vom Hersteller reservierte Befehle (nämlich CMD63 gefolgt von   "A", "P", "P", "O"), die den Controller in einen Firmware-Ladevorgang versetzen   Modus. Zu diesem Zeitpunkt akzeptiert die Karte die nächsten 512 Bytes und läuft   es als Code.


75
2017-09-12 09:21



Von all den Antworten ist diese Frage wahrscheinlich am ehesten dem, wonach die OP eigentlich gefragt hat. - Cort Ammon
Das war eine fantastische Lektüre! - Gabe Krause
@Twisty hat einige der relevanten Teile kopiert. - FarO
Hinunter in die Welt der SD-Karten-Architektur gehe ich. - Tejas Kale


Dies funktioniert normalerweise nicht, da die neuesten SD-Karten (oder eMMCs) statisches und dynamisches Wear-Leveling verwenden, was bedeutet, dass ein intelligenter Controller Ihre Schreibanweisung interpretiert und sie auf einen der am wenigsten genutzten Flash-Sektoren abbildet.

Sie können nur versuchen, Ihre Lieferanten zu kontaktieren und nach ihrem Datenblatt zu fragen. Es gibt möglicherweise einige (herstellerspezifische) Möglichkeiten, den Status ihres Wear-Leveling-Algorithmus abzurufen. Dies würde Ihnen möglicherweise ermöglichen, den Status / die Verwendung des zugrunde liegenden Flash abzufragen. Oder Sie haben vielleicht Pech und das könnte nicht existieren.

Wenn es Ihr Ziel ist, Flash wirklich zu zerstören, können Sie nur massive Lese- und Schreibzyklen ausführen und kontinuierlich überprüfen, ob die Daten, die Sie gerade lesen, immer noch konsistent sind. Z.B. Erstellen Sie zwei große Dateien, speichern Sie ihre Prüfsummen und lesen / schreiben Sie sie, um ihre Prüfsumme zu überprüfen. Je größer der Blitz, desto länger dauert dieser Vorgang.


38
2017-09-11 07:37



Funktioniert das nicht noch, wenn die SD-Karte vollständig mit Daten gefüllt ist, so dass sie nicht viel neu zuordnen kann? Ich glaube nicht, dass sie eine Menge versteckter Sektoren haben. - Ruslan
@Ruslan Das Gerät muss nicht wissen, ob ein Sektor mit irgendetwas gefüllt ist. Es muss nur den Inhalt wissen, welche Sektoren auf Anfrage zu liefern sind und welche Sektoren auf Anfrage zu schreiben sind. Und dann kann es eine Abstraktionsschicht geben, die andere physische Speicher verwendet, um diese Sektoren zu repräsentieren, die einem nicht offenbarten Algorithmus folgen ... - Und "voll" bedeutet natürlich nur "Schwelle für momentan füllbare Blöcke erreicht". - Alexander Kosubek
@Ruslan: Selbst wenn das gesamte Gerät Daten darüber hat, kann das Wear-Leveling noch wirksam sein: Wenn zum Beispiel Sektor A einmal geschrieben wurde, und Sektor B wurde 1000 mal geschrieben, dann kommt noch ein weiterer Schreibvorgang hinzu Sektor B Die Karte kann die Daten für die zwei Sektoren austauschen, so dass Sektor A die Daten von Sektor B enthält (und wahrscheinlich öfter überschrieben wird - aber das ist OK, weil es frisch ist), und Sektor B enthält Daten von Sektor A (was Hoffentlich nicht viel ändern). Offensichtlich muss das Gerät auch die Zuordnung speichern, welcher Sektor wo gespeichert wird. - psmears
@GabeKrause Ja, das ist die Natur der Bestie. Auf der untersten Ebene haben Sie entweder NAND- oder NOR-Flash-Chips (heutzutage verwendet alles NAND), und es gibt einen intelligenten Controller vor dem NAND-Chip, der den Bus terminiert (zB USB für einen USB-Stick oder MMC für eine SD-Karte) ), und dieser Chip ist verantwortlich für das Mapping / Wear Leveling etc., abstrahiert den Flash von dir weg. Wenn Sie nand auf embedded Linux verwenden würden, dann wären das beispielsweise ubifs für Sie. - amo-ej1
SD-Karten haben einen Mikrocontroller, der eine "Flash Translation Layer" implementiert - Blockanforderungen werden von diesem Mikrocontroller in rohe NAND-Befehle übersetzt. Einige SD-Karten haben versteckte Befehle zum Ändern / Aktualisieren der MCU-Firmware und es werden sogar einige Reverse-Engineering-Maßnahmen daran vorgenommen. Die meisten Flash-Speichergeräte außer Raw NAND (die in manchen Fällen wie viele Heim-Router auftreten können) sind wahrscheinlich "überprovisioniert" - was bedeutet, dass Ihre 1GB SD-Karte ungefähr 1024MB + 128MB rohen NAND-Platz hat, um den Wear Leveling voll zu decken und auch Sektor-Sparing für schlechte Flash-Seiten. - LawrenceC


Sie können den Verschleiß des Transistors erhöhen, indem Sie die Betriebstemperatur erhöhen. Verwenden Sie Schreib-Lösch-Zyklen auf einem beheizten Chip (70-120 ° C); es wird schneller tragen.


32
2017-09-11 08:59



Übermäßige Lagertemperatur ist auch schädlich, so dass es praktischer sein kann, den Chip bei 120 ° C (oder sogar mehr) für einige Zeit zu "kochen", dann auf Defekte zu prüfen. - Dmitry Grigoryev
Eine geringfügige Überspannung an der Versorgung der Karte könnte ebenfalls möglich sein und müsste ebenfalls experimentiert werden. - Chris H
Unterspannung kann auch verschiedene Arten von Defekten verursachen, wie z. - user20574


Vorwort: Diese Option erfordert zusätzliche Programmier- und Hardware-Modifikationen, würde aber kontrollierte Lesevorgänge ermöglichen, die höchstwahrscheinlich für den Host transparent sind.

Eine SD-Karte verfügt über mehrere E / A-Optionen, kann jedoch über SPI gesteuert werden. Wenn Sie eine SD-Karte nehmen und sie so ändern, dass Sie die Pins an einen Mikrocontroller (z. B. einen Arduino) anschließen können, könnte der Arduino die SD-Karte nachahmen und transparent für das Gerät sein, das die SD-Karte liest. Ihr Code auf dem Mikrocontroller könnte bei Bedarf absichtlich schlechte Daten zurückgeben. Außerdem könnten Sie eine SD-Karte auf den Mikrocontroller setzen, damit die Lesevorgänge den Mikrocontroller auf die SD-Karte übertragen können, um Gigabytes an Tests zu ermöglichen.


18
2017-09-11 12:55



Die meisten Hochgeschwindigkeitsgeräte (einschließlich PC-Kartenleser) werden es einfach ablehnen, mit einer Karte zu arbeiten, die keine 4-Bit-SD unterstützt. - Dmitry Grigoryev
Das OP sagte, dass es ein eingebettetes System wäre, das die Karte verwenden würde, was es wahrscheinlicher machen würde, SPI für SD-Karten zu unterstützen - Eric Johnson
Eine Variante auf dieser, aber härteren Arbeit, wäre es, eine SD-Karte zu finden, für die Sie können reflash die Firmware. - Peter Taylor
Das ist super interessant! Unser Embedded-System führt I / O durch SPI. Ich bin nicht sicher, ob ich die Bandbreite habe, um unsere Hardware zu modifizieren, um eine Addition wie diese zu erreichen, aber ich denke, es ist brilliantes Denken. - Gabe Krause
Wenn ich über dynamisches Wear-Leveling informiert werde, glaube ich, dass das strategische Erstellen einer "schlechten" SD-Karte mit bekannten schlechten Sektoren viel schwieriger (oder nicht möglich) ist, als ich es mir erhofft hatte, wenn ich die Frage stellte. Obwohl dies derzeit außerhalb meiner Möglichkeiten liegt, scheint dies der am besten kontrollierbare und technisch vielversprechendste Ansatz zu sein, möglicherweise gefolgt von @Olafm. Das Anpassen von Zwischenhardware zum Abfangen und "Korrigieren" von Daten an jeder vordefinierten Sektorposition während der Datenübertragung scheint ein guter Ansatz zu sein. - Gabe Krause


Ich würde zu ebay / aliexpress gehen und die billigste SD-Karte kaufen, die ich von China finden kann, derjenige, der "zu gut ist, um wahr zu sein". Sie kommen oft mit fehlerhaften Sektoren oder sind in Software viel größer als sie tatsächlich sind. In jedem Fall sollten Sie eine fehlerhafte SD-Karte zum Testen verwenden.


15
2017-09-12 08:05



Interessanter Ansatz, aber wie würden Sie in die fehlerhaften Bereiche schreiben, um die Auswirkungen der fehlerhaften Blöcke auf den gespeicherten Code zu testen? - fixer1234
@fixer1234, ich hatte eine dieser SD-Karten, die sagte, es war 32GB, aber es war eigentlich nur 128MB. Ich legte es in meine Kamera und konnte Fotos jenseits der 128 MB machen, aber nur die ersten Fotos konnten zurückgelesen werden. Der Rest wurde aufgelistet, wurde aber als gebrochen zurück gelesen. Ich nehme an, sie möchten, dass Sie die Probleme mit der Karte bemerken, wenn es zu spät ist, sich zu beschweren ... - GuzZzt


Es war einmal vor vielen Jahren, dass ich dafür bezahlt wurde, eine Reihe von Abschlussfotos und Videos von einer SD-Karte für eine ziemlich verstörte Mutter zu erhalten. Bei näherer Betrachtung war die Karte irgendwie physikalisch beschädigt worden, mit einem sichtbaren Riss im äußeren Gehäuse und hatte mehrere schlechte Sektoren, vor allem mehrere frühe, kritische Sektoren, die sogar die zuverlässigsten Wiederherstellungsprogramme zu der Zeit vollständig versäumten, die Karte zu lesen . Auch forensische Datentools kosten damals ein Vermögen.

Ich landete schließlich eine identische Marke / Größe SD-Karte und schreibe meine eigene benutzerdefinierte Rohdaten-Dump-und Restore-Dienstprogramm, um die Daten von der schlechten Karte auf die gute zu kopieren. Jedes Mal, wenn das Dienstprogramm einen fehlerhaften Sektor erreicht, wird es mehrmals wiederholt, bevor alle Nullen für diesen Sektor geschrieben werden. Statt aufzugeben und anzuhalten, ignorieren Sie den Fehler und fahren mit dem nächsten Sektor fort. Die Wiederholungsversuche wurden gemacht, da ich auch bemerkt hatte, dass einige Sektoren immer noch eine Leseerfolgsrate von ungefähr 40% hatten. Sobald sich die Daten auf der neuen SD-Karte befanden, funktionierten die Wiederherstellungstools, die zuvor fehlgeschlagen waren, fehlerfrei mit minimalem Datenverlust / -korruption. Insgesamt wurden ungefähr 98% aller Dateien wiederhergestellt. Eine Reihe von Elementen, die zuvor gelöscht wurden, wurden ebenfalls wiederhergestellt, da nichts tatsächlich gelöscht wurde - einfach als solche markiert und langsam überschrieben. Was zunächst als etwas langweilige Datenrettung begann, wurde zu einem meiner denkwürdigsten und interessantesten Entwicklungsprojekte für persönliche Software. Falls Sie sich wundern, die Mutter war begeistert.

Auf jeden Fall zeigt diese Geschichte, dass es möglich ist, eine SD-Karte physisch zu beschädigen, so dass Daten noch zugänglich sind, aber Sektoren, die nur kaum funktionieren, und alles, was versucht, davon zu lesen, Schwierigkeiten hat. SD-Karten-Plastik neigt dazu, ziemlich dünn zu sein, also könnte das Biegen oder Schneiden in einige billige den Trick machen. Ihre Laufleistung kann variieren.

Sie können auch nach einigen Datenwiederherstellungsplätzen in Ihrer Nähe fragen. Da sie sich auf die Datenwiederherstellung von verschiedenen fehlgeschlagenen oder ausgefallenen Geräten spezialisiert haben, sollten sie nützliche Informationen / Tipps enthalten und möglicherweise sogar einige vorbereitete SD-Karten zur Hand haben (z. B. für Schulungszwecke), die Sie von ihnen erhalten könnten.


11
2017-09-13 05:43



Hast du dieses Dienstprogramm online veröffentlicht? Das wäre großartig, um mein Arsenal zu ergänzen. - Ploni
An diesem Punkt würde es wahrscheinlich nicht einmal richtig funktionieren angesichts des Fortschritts der Technologie (vielleicht nicht einmal kompilieren) und der Systemaufrufe auf niedriger Ebene, die ich verwendet habe. Es gibt auch ein paar moderne, quelloffene forensische Geräte- / Laufwerk-Klonwerkzeuge, die ich eher verwenden würde, als zu versuchen, meine alte Software aus Mottenkugeln herauszuholen. - CubicleSoft
Ich vermute, dass Sie wahrscheinlich nur einige Parameter angeben können dd um es auf ähnliche Weise wie heute zu verhalten. Ich bin mir nicht sicher. - wizzwizz4
@ wizzwizz4, schau dir ddrescue an. - hildred
"Auch forensische Daten-Tools kosten damals ein Vermögen." Ich bin mir ziemlich sicher, dass sie es immer noch tun. - jpmc26