wake-up-neo.net

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

Ich muss die Ausfallsicherheit von Lese-/Schreibcode für einige eingebettete Hardware testen. Wie könnte ich ein paar SD-Karten opfern und mehrere bekannte Sektoren für eine kontrollierte Studie aufteilen?

Ich kann mir nur vorstellen, einen einzelnen Sektor ein paar Millionen Mal zu überschreiben. Ich frage mich, ob ein Linux-Badblockskript erstellt werden kann, um den zerstörerischen Test für einen einzelnen Sektor mehrere Stunden lang wiederholt auszuführen.

139
Gabe Krause

Ein alternativer Ansatz, dernützlich sein kann.

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

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

flakey
Erstellt eine ähnliche Zuordnung zum Ziel linear, zeigt jedoch regelmäßig unzuverlässiges Verhalten. Nützlich für die Simulation fehlerhafter Geräte beim Testen.

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

Soweit ich weiß, wird ein E/A-Fehler sofort gemeldet. Dies unterscheidet sich also vom tatsächlichen Verhalten der SD-Karte, bei dem Verzögerungen, Blockierungen usw. zu erwarten sind. Ich denke jedoch, dass dieser Ansatz in einigen Fällen nützlich sein kann, um zumindest eine schnelle Leistung zu erzielen Vorversuch oder so.

166

Dieser Typ hat den Mikrocontroller auf SD-Karten gehackt, mit denen fehlerhafte Blöcke markiert wurden: https://www.bunniestudios.com/blog/?p=3554

Möglicherweise können Sie das Gleiche tun und Blöcke willkürlich als fehlerhaft markieren.

Heute auf dem Chaos Computer Congress (30C3) haben xobs und ich festgestellt, dass einige SD-Karten Schwachstellen enthalten, die eine willkürliche Codeausführung ermöglichen - auf der Speicherkarte selbst. Auf der dunklen Seite ermöglicht die Codeausführung auf der Speicherkarte eine Klasse von MITM-Angriffen (Man-in-the-Middle), bei denen sich die Karte scheinbar in eine Richtung verhält, aber tatsächlich etwas anderes tut. Auf der hellen Seite bietet es auch Hardware-Enthusiasten die Möglichkeit, auf eine sehr billige und allgegenwärtige Quelle von Mikrocontrollern zuzugreifen.

.

Diese Algorithmen sind zu kompliziert und zu gerätespezifisch, um auf Anwendungs- oder Betriebssystemebene ausgeführt zu werden. Daher wird jede Flash-Speicherplatte mit einem einigermaßen leistungsfähigen Mikrocontroller ausgeliefert, mit dem eine Reihe benutzerdefinierter Festplattenabstraktionsalgorithmen ausgeführt werden können. Sogar die winzige microSD-Karte enthält nicht einen, sondern mindestens zwei Chips - einen Controller und mindestens einen Flash-Chip (Karten mit hoher Dichte können mehrere Flash-Chips stapeln).

.

Der eingebettete Mikrocontroller ist typischerweise eine stark modifizierte 8051- oder ARM-CPU. In modernen Implementierungen nähert sich der Mikrocontroller dem 100-MHz-Leistungsniveau und verfügt auch über mehrere Hardware-Beschleuniger auf dem Chip. Erstaunlicherweise liegen die Kosten für das Hinzufügen dieser Controller zum Gerät wahrscheinlich in der Größenordnung von 0,15 bis 0,30 US-Dollar, insbesondere für Unternehmen, die sowohl den Flash-Speicher als auch die Controller innerhalb derselben Geschäftseinheit herstellen können. Es ist wahrscheinlich billiger, diese Mikrocontroller hinzuzufügen, als jeden Flash-Speicherchip gründlich zu testen und zu charakterisieren. Dies erklärt, warum verwaltete Flash-Geräte trotz der Integration eines Mikrocontrollers pro Bit billiger sind als unformatierte Flash-Chips.

.

Das Entscheidende ist, dass ein Mechanismus zum Laden und Aktualisieren der Firmware praktisch obligatorisch ist, insbesondere für Controller von Drittanbietern. Endbenutzer sind diesem Prozess selten ausgesetzt, da dies alles in der Fabrik geschieht, aber dies macht den Mechanismus nicht weniger real. Bei meinen Erkundungen der Elektronikmärkte in China habe ich gesehen, wie Ladenbesitzer Firmware auf Karten brannten, die die Kapazität der Karte „erweiterten“ - mit anderen Worten, sie luden eine Firmware, die angab, dass die Kapazität einer Karte viel größer ist als die der tatsächlich verfügbarer Speicher. Die Tatsache, dass dies am Point of Sale möglich ist, bedeutet, dass der Aktualisierungsmechanismus höchstwahrscheinlich nicht gesichert ist.

In unserem Vortrag bei 30C3 berichten wir über unsere Ergebnisse, die eine bestimmte Mikrocontroller-Marke untersuchen, nämlich Appotech und seine AX211- und AX215-Angebote. Wir entdecken eine einfache "Klopf" -Sequenz, die über vom Hersteller reservierte Befehle (CMD63, gefolgt von "A", "P", "P", "O") übertragen wird und die Steuerung in einen Firmware-Lademodus versetzt. Zu diesem Zeitpunkt akzeptiert die Karte die nächsten 512 Bytes und führt sie als Code aus.

75
FarO

Dies funktioniert normalerweise nicht, da die neuesten SD-Karten (oder eMMC) statische und dynamische Abnutzungskorrekturen verwenden. Dies bedeutet, dass ein intelligenter Controller Ihre Schreibanweisungen interpretiert und sie einem der am wenigsten verwendeten Flash-Sektoren zuordnet.

Das einzige, was Sie tun können, ist zu versuchen, sich an Ihre Lieferanten zu wenden und deren Datenblatt anzufordern. Möglicherweise gibt es einige (herstellerspezifische) Möglichkeiten, den Status ihres Algorithmus zum Ausgleich des Verschleißes abzurufen. Auf diese Weise können Sie möglicherweise den Status/die Verwendung des zugrunde liegenden Flash-Speichers abfragen. Oder Sie könnten Pech haben und dies könnte nicht existieren.

Wenn Sie Flash wirklich zerstören möchten, können Sie nur massive Lese- und Schreibzyklen ausführen und kontinuierlich überprüfen, ob die zurückgelesenen Daten 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
amo-ej1

Sie können den Transistorverschleiß erhöhen, indem Sie die Betriebstemperatur erhöhen. Verwenden Sie Schreib-Lösch-Zyklen auf einem erhitzten Chip (70-120 ° C). es wird sich schneller abnutzen.

32
Pavlus

Vorwort: Diese Option erfordert zusätzliche Programmier- und Hardwaremodifikationen, ermöglicht jedoch kontrollierte Lesevorgänge, die für den Host höchstwahrscheinlich 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 ändern, so dass Sie die Stifte an einen Mikrocontroller (wie einen Arduino) anschließen können, kann der Arduino die SD-Karte imitieren und für das Gerät, das die SD-Karte liest, transparent sein. Ihr Code auf dem Mikrocontroller kann bei Bedarf absichtlich fehlerhafte Daten zurückgeben. Darüber hinaus können Sie eine SD-Karte in den Mikrocontroller einlegen, damit die Lesevorgänge den Mikrocontroller an die SD-Karte weiterleiten können, um einen Test in Gigabytes zu ermöglichen.

18
Eric Johnson

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

15
GuzZzt

Es war einmal vor vielen Jahren, als ich für eine ziemlich verstörte Mutter dafür bezahlt wurde, eine Reihe von Abschlussfotos und -videos von einer SD-Karte abzurufen. Bei genauer Betrachtung war die Karte durch einen sichtbaren Riss im äußeren Gehäuse physisch beschädigt worden und hatte mehrere fehlerhafte Sektoren, insbesondere mehrere frühe, kritische Sektoren, wodurch selbst die zu diesem Zeitpunkt zuverlässigsten Wiederherstellungsprogramme die Karte überhaupt nicht lesen konnten . Auch forensische Datentools kosteten damals ein Vermögen.

Am Ende besorgte ich mir eine identische SD-Karte der Marke/Größe und schrieb meinen eigenen benutzerdefinierten Rohdatenspeicherauszug und das Wiederherstellungsdienstprogramm, um die Daten von der fehlerhaften Karte auf die gute zu kopieren. Jedes Mal, wenn das Dienstprogramm auf einen fehlerhaften Sektor stößt, wird der Versuch mehrmals wiederholt, bevor alle Nullen für diesen Sektor geschrieben werden. Anstatt aufzugeben und anzuhalten, wird der Fehler ignoriert und mit dem nächsten Sektor fortgefahren. Die Wiederholungsversuche wurden durchgeführt, da ich auch bemerkt hatte, dass einige Sektoren immer noch eine Leseerfolgsrate von etwa 40% hatten. Sobald sich die Daten auf der neuen SD-Karte befanden, funktionierten die zuvor fehlgeschlagenen Wiederherstellungstools einwandfrei mit minimalem Datenverlust/minimaler Beschädigung. Insgesamt wurden ca. 98% aller Dateien wiederhergestellt. Eine Reihe von zuvor gelöschten Elementen wurde ebenfalls wiederhergestellt, da nichts wirklich gelöscht wurde - nur als solches markiert und langsam überschrieben. Was als etwas langweilige Datenwiederherstellungsübung begann, wurde zu einem meiner unvergesslicheren und interessanteren persönlichen Softwareentwicklungsprojekte. Für den Fall, dass Sie sich wunderten, war die Mutter begeistert.

In jedem Fall zeigt diese Geschichte, dass es möglich ist, eine SD-Karte physisch so zu beschädigen, dass auf Daten weiterhin zugegriffen werden kann, diese jedoch nur in schwer funktionierenden Sektoren vorhanden sind, und dass alles, was versucht, daraus zu lesen, Schwierigkeiten hat. SD-Kartenplastik ist in der Regel recht dünn, daher kann es hilfreich sein, sich zu verbiegen oder in billige zu schneiden. Ihr Kilometerstand kann variieren.

Sie können sich auch an einigen Orten für die Datenwiederherstellung in Ihrer Nähe umsehen. Da sie sich auf die Datenwiederherstellung von verschiedenen fehlerhaften oder ausgefallenen Geräten spezialisiert haben, sollten sie einige nützliche Eingaben/Tipps haben und möglicherweise sogar einige vorinstallierte SD-Karten zur Hand haben (z. B. für Schulungszwecke), die Sie von ihnen erhalten könnten.

11
CubicleSoft

Diese Antwort ist eine Erweiterung des Kommentars von @Ruslan

  1. Füllen Sie Ihre SD-Karte bis zu 99,9%
  2. Schreiben Sie den Inhalt der verbleibenden 0,1% fortlaufend neu (Schreiben A - Löschen - Schreiben B - Löschen - Schreiben A ...)
  3. Prüfen Sie (in regelmäßigen Abständen), ob Sie die Karte bereits beschädigt haben

Mögliche Alternative:

Ich bin mir nicht sicher, ob dies für Ihre Zwecke funktioniert, aber vielleicht reicht es tatsächlich aus, Ihre Karte physisch zu beschädigen, was viel schneller sein könnte.

5

Einige ältere SD-Karten mit geringer Kapazität (16 MB) verwenden Flash-Chips in TSOP/TSSOP-Paketen. In einer Werkstatt, die SMT-Nacharbeiten ausführen kann (wenn Sie eingebettete Arbeiten ausführen, verfügen Sie möglicherweise über diese Fähigkeiten im eigenen Unternehmen, um zu prüfen, ob kleine Unternehmen Telefon-/Laptopreparaturen auf Platinenebene durchführen), könnte der Chip möglicherweise getrennt und neu angebracht werden, damit er gelesen und geschrieben werden kann raw (einschließlich der ECC-Codes) mit einem Geräteprogrammierer.

Beachten Sie jedoch, dass Sie hauptsächlich Folgendes testen:

  • Wie Ihr Gerät mit möglichen Timing-Fehlern/Schluckauf fertig wird, die durch die interne Fehlerkorrektur verursacht wurden

und im schlimmsten Fall

  • wie Ihr Gerät mit einer fehlerhaften SD-Karte umgeht.

Wenn Sie nur überprüfen möchten, wie sich eine SD-Karte aus irgendeinem Grund bei einem fehlerhaften Verhalten verhält, ist es wahrscheinlich am besten, nur elektrisches Rauschen in die Schnittstellenleitungen einzuführen (z. B. indem Sie einen FET-Bus-Schalter dazwischen legen und zu zufälligen Zeiten vorübergehend umschalten es zu einer Quelle von unsinnigen Signalen (von den richtigen elektrischen Pegeln obwohl).

3
rackandboneman

Sie könnten versuchen, eine instabile Stromversorgung oder eine Signalisierung mit höherer Spannung einzuführen.

Ein häufiger Fehler für eine Familie von Geräten, von denen ich weiß, dass sie eine starke Korrelation zwischen SD-Kartenbeschädigung und zeitweiligem Batteriekontakt aufweisen.

3
PCARR

Bezogen auf die Antwort von OlafM, aber anders: Sie können einen eigenen Mikrocontroller zum Sprechen des SD-Kartenprotokolls programmieren und dann jedes gewünschte Verhalten emulieren.

2
R..

Vielleicht ist dies nicht die Richtung, die Sie wollten, aber ich habe festgestellt, dass ich meine SD-Karte entfernt habe, während mein Radio oder Laptop darauf las. Das garantiert, dass eine SD-Karte etwa 1/5 oder 1/10 mal abgestürzt ist. Es scheint, dass die Karten nicht gut damit abschneiden, wenn sie während eines Lesevorgangs und vermutlich während eines Schreibvorgangs abgeschaltet werden. Nachdem ich die Kommentare von Robert Calhoun gelesen habe, kann ich davon ausgehen, dass dies die FAT schädigt. Obwohl ich nicht weiß, warum nur das Lesen einen Absturz verursacht - es sollte kein Schreiben stattfinden?

1
jwzumwalt

Der Bereich FAT32 Master Boot Record ist wahrscheinlich am anfälligsten für Missbrauch, da er sich logischerweise immer an derselben Stelle befinden muss. (Vielleicht wird dies durch das Soft-Remapping von fehlerhaften Sektoren erledigt, aber ich bin etwas skeptisch, dass dies auf jeder Hardware implementiert ist.) Sie könnten also sfdisk in einer Schleife ausführen und sehen, ob Sie es auf diese Weise zerstören können.

Aber ich werde Sie bitten, alles zu tun, um die Zuverlässigkeit der Hardware zu verbessern, anstatt zu versuchen, mit fehlerhafter Hardware in der Software umzugehen. Das Problem dabei ist, dass SD-Karten auf seltsame Weise versagen. Sie werden unlesbar, können nicht mehr beschrieben werden, geben Ihnen schlechte Daten, treten während des Betriebs eine Zeitüberschreitung auf usw. Es ist sehr schwierig, alle möglichen Fehler einer Karte vorherzusagen.

Hier ist einer meiner Lieblingsfehler, der "Big-Data-Modus":

 bad sd fake big data

SD-Karten sind Gebrauchsgüter, die einem enormen Kostendruck ausgesetzt sind. Teile ändern sich schnell und Datenblätter sind schwer zu bekommen. Gefälschte Produkte sind keine Seltenheit. Bei billigem Speicher sind sie schwer zu übertreffen, aber während bei SSDs Zuverlässigkeit an erster Stelle steht, sind Geschwindigkeit, Kapazität und Kosten bei SD-Karten an erster Stelle (wahrscheinlich nicht in dieser Reihenfolge).

Ihre erste Verteidigungslinie ist die Verwendung eines lötbaren eMMC-Teils mit einem echten Datenblatt eines seriösen Herstellers anstelle einer austauschbaren SD-Karte. Ja, sie kosten mehr pro GB, aber das Teil wird über einen längeren Zeitraum in Produktion sein, und zumindest wissen Sie, was Sie bekommen. Durch das Einlöten des Teils werden auch zahlreiche potenzielle Probleme (beim Schreiben herausgerissene Karten, schlechter elektrischer Kontakt usw.) mit einer herausnehmbaren Karte vermieden.

Wenn Ihr Produkt einen Wechselspeicher benötigt oder es einfach zu spät ist, etwas zu ändern, sollten Sie entweder das zusätzliche Geld für Karten mit "industrieller" Qualität ausgeben oder sie als Einwegartikel behandeln. Was wir (unter Linux) tun, ist fsck die Karte beim Booten und formatieren sie neu, wenn Fehler gemeldet werden, da eine Neuformatierung in diesem Anwendungsfall akzeptabel ist. Dann fsck wir es nochmal. Wenn nach der Neuformatierung immer noch Fehler gemeldet werden, wird die Hardware durch eine neuere Variante mit eMMC ersetzt.

Viel Glück!

1
Robert Calhoun

Wenn Ihre SD-Karte FAT32-formatiert ist, können Sie die 2 Fette hex-editieren und einen Sektor mit dem richtigen Hex-Code als schlecht markieren. Dies ist nur ein Trick, wenn Sie eine Software logisch testen möchten, die einen fehlerhaften Sektor an diesem bestimmten Ort finden soll. es schadet auch deiner sd-karte nicht, ein reformat bringt sie wieder in den normalen zustand.

1
Emile De Favas

Ich frage mich, ob ein Linux-Badblockskript erstellt werden kann, um den zerstörerischen Test für einen einzelnen Sektor mehrere Stunden lang wiederholt auszuführen.

Auf einem einzelnen Sektor - nein, da der Abnutzungsgradcode auf der SD-Karte die logischen Blöcke überall neu zuordnen wird.

Sie können badblocks -w jedoch problemlos in einer Schleife ausführen, bis einige fehlerhafte Blöcke angezeigt werden. So etwas sollte funktionieren:

while badblocks -w /dev/xx; do :; done

angenommen, Badblocks geben 0 zurück, wenn keine fehlerhaften Blöcke erkannt wurden, und ansonsten ≠ 0 (die Manpage sagt nichts und ich habe den Quellcode nicht überprüft.)

0
Tobia