Question Comment puis-je intentionnellement casser / corrompre un secteur sur une carte SD?


Je dois tester la résilience de certains codes en lecture / écriture pour certains matériels embarqués. Comment pourrais-je sacrifier quelques cartes SD et briser plusieurs secteurs connus pour une étude contrôlée?

La seule chose à laquelle je puisse penser, c'est d'écraser un seul secteur plusieurs millions de fois. Je me demande si un script de badblocks Linux peut être créé pour exécuter son test destructif sur un seul secteur à plusieurs reprises pendant plusieurs heures.


137
2017-09-11 07:28


origine


Pouvez-vous changer le pilote SD de bas niveau pour prétendre qu'il y a un blocage défectueux ou est-ce hors de question? - Mark Yisri
@ MarkYisri, je ne pense pas que le pilote est très accessible. Quel que soit le pilote que nous utilisons, il est extrêmement rudimentaire de maximiser l'allocation de mémoire au reste du micrologiciel. De plus, si cela était possible, cela dépasserait probablement mes capacités. - Gabe Krause
Pouvez-vous créer un émulateur de carte SD? Pas le projet le plus simple, remarquez. - user20574
Étant donné l'objectif, vous pourriez acheter des cartes SD d'occasion pour un peu d'argent et vous pourriez facilement en obtenir une défectueuse, ou annoncer une "recherche de" pour rechercher spécifiquement les cartes défectueuses. Ou recherchez sur eBay des cartes défectueuses. Ensuite, vous testez la carte et vous connaissez la position des zones défectueuses. - FarO
Demandez à n'importe quel photographe professionnel. Ils auront sûrement une pile de cartes SD. - J...


Réponses:


Une approche alternative mai sois utile.

Si votre code fonctionne sous Linux, vous pouvez peut-être le tester avec un périphérique logique "défectueux". dmsetup peut créer des périphériques qui renvoient des erreurs d'E / S. Construisez simplement votre appareil en utilisant error et / ou flakey cible. De man 8 dmsetup:

error
  Erreurs toutes les E / S qui vont dans cette zone. Utile pour tester ou créer des périphériques avec des trous.

flakey
  Crée un mappage similaire à la linear cible mais présente un comportement peu fiable périodiquement. Utile pour simuler des périphériques défaillants lors des tests.

Remarque: flakey l'utilisation de la cible est documentée ici. Exemple de base ici.

Autant que je sache, une erreur d'E / S sera signalée immédiatement, donc c'est différent du comportement réel de la carte SD où l'on peut s'attendre à un retard, à un ralentissement, etc. Néanmoins, cette approche peut être utile test préliminaire ou à peu près.


167
2017-09-11 08:33



J'apprécie cette pensée originale! Nous interagissons au niveau du bloc avec la SD via une puce Atmel à 80 MHz et sans véritable OS. - Gabe Krause
@GabeKrause Dans ce cas, l'utilité de cette réponse dépend de la similarité de l'API de périphérique de stockage Linux avec l'API de votre pilote de périphérique intégré. - Qsigma
dmsetup commande pour la mise en place d'un error appareil qui renvoie toujours des erreurs de lecture: stackoverflow.com/questions/1870696/... - Peter Cordes
Je conviens que cela semble être une meilleure solution. Tout d'abord, vous pouvez répliquer sur n'importe quel matériel. Et vous pouvez également simuler les différents modes d'erreur. Par exemple, j'ai un lecteur flash USB de 16 Go qui fonctionne très bien. Après un certain temps, une zone particulière commence à renvoyer des données erronées. Il n'y a aucune erreur FS d'aucune sorte. Vous lisez le fichier mais le contenu est différent. Certains secteurs sont évidemment instables. Mais il est impossible de savoir comment certains appareils se comporteront. - akostadinov


Ce gars a piraté le microcontrôleur à l’intérieur des cartes SD utilisées pour marquer les mauvais blocs: https://www.bunniestudios.com/blog/?p=3554

Vous pourrez peut-être faire la même chose et marquer arbitrairement les blocs comme étant défectueux.

Aujourd'hui, au Congrès informatique du Chaos (30C3), xobs et moi avons dévoilé   constatant que certaines cartes SD contiennent des vulnérabilités qui permettent   exécution de code arbitraire - sur la carte mémoire elle-même. Dans le noir   côté, l'exécution de code sur la carte mémoire permet une classe de MITM   (homme-dans-le-milieu) attaques, où la carte semble se comporter un   façon, mais en fait, il fait autre chose. Du côté de la lumière, il a aussi   permet aux amateurs de matériel d’accéder à un   source de microcontrôleurs très bon marché et omniprésente.

.

Ces algorithmes sont trop compliqués et trop spécifiques pour être exécutés   au niveau de l'application ou du système d'exploitation, et il s'avère que chaque flash   disque de mémoire est livré avec un microcontrôleur raisonnablement puissant pour exécuter un   ensemble personnalisé d'algorithmes d'abstraction de disque. Même le microSD diminutif   carte contient pas un, mais au moins deux puces - un contrôleur, et à   au moins une puce flash (les cartes haute densité empileront plusieurs   mourir).

.

Le microcontrôleur intégré est généralement un 8051 ou un   CPU ARM. Dans les implémentations modernes, le microcontrôleur approchera   Des performances de 100 MHz et plusieurs matériels   accélérateurs sur la mort. Étonnamment, le coût de l'ajout de ces contrôleurs   à l'appareil est probablement de l'ordre de 0,15 $ à 0,30 $, en particulier   pour les entreprises qui peuvent fabriquer à la fois la mémoire flash et les contrôleurs   au sein de la même unité commerciale. Il est probablement moins cher d'ajouter ces   microcontrôleurs que de bien tester et caractériser chaque flash   puce de mémoire, ce qui explique pourquoi les périphériques flash gérés peuvent être moins chers   par bit que les puces flash brutes, malgré l'inclusion d'un   microcontrôleur.

.

L’essentiel est qu’un mécanisme de chargement et de mise à jour du micrologiciel est virtuellement   obligatoire, en particulier pour les contrôleurs tiers. Les utilisateurs finaux sont   rarement exposé à ce processus, puisque tout se passe en usine,   mais cela ne rend pas le mécanisme moins réel. Dans mes explorations   des marchés de l'électronique en Chine, j'ai vu des commerçants brûler   firmware sur les cartes qui "développent" la capacité de la carte - dans d'autres   mots, ils chargent un firmware qui indique la capacité d’une carte   beaucoup plus grande que le stockage disponible réel. Le fait que ce soit   possible au point de vente signifie que le plus probable, la mise à jour   le mécanisme n'est pas sécurisé.

Dans notre exposé à 30C3, nous rapportons nos découvertes en explorant une   marque de microcontrôleur, à savoir, Appotech et ses AX211 et AX215   offres. Nous découvrons une simple séquence "knock" transmise par   commandes réservées par le fabricant (à savoir, CMD63 suivi de   'A', 'P', 'P', 'O') qui déposent le contrôleur dans un chargement de firmware   mode. À ce stade, la carte acceptera les 512 octets suivants et exécutera   comme code.


75
2017-09-12 09:21



De toutes les réponses, celle-ci est probablement la plus proche de ce que le PO demandait réellement. - Cort Ammon
C'était une lecture fantastique! - Gabe Krause
@Twisty a copié certaines des parties pertinentes. - FarO
Dans le trou du lapin dans le monde de l'architecture de la carte SD, je vais. - Tejas Kale


Cela ne fonctionnera généralement pas car la plupart des cartes SD (ou eMMC) récentes utilisent un nivellement d'usure statique et dynamique, ce qui signifie qu'un contrôleur intelligent interprète votre instruction d'écriture et la mappe à l'un des secteurs flash les moins utilisés.

La seule chose que vous pouvez faire est d'essayer de contacter vos fournisseurs et de demander leur fiche technique. Il pourrait y avoir des moyens (spécifiques à un fournisseur) de récupérer l'état de leur algorithme de nivellement d'usure. Cela vous permettrait potentiellement d'interroger l'état / l'utilisation du flash sous-jacent. Ou vous pourriez être malchanceux et cela pourrait ne pas exister.

Si votre objectif est vraiment de détruire le flash, tout ce que vous pouvez faire est d'exécuter des cycles massifs de lecture et d'écriture et de vérifier en permanence que les données que vous lisez sont toujours cohérentes. Par exemple. créer deux gros fichiers, stocker leurs sommes de contrôle et les lire / écrire pour vérifier leur somme de contrôle. Plus le flash est grand, plus le processus sera long.


38
2017-09-11 07:37



Est-ce que cela ne fonctionnera toujours pas si la carte SD est complètement remplie de données, de sorte qu'elle ne puisse pas remapper beaucoup? Je ne pense pas qu'ils ont beaucoup de secteurs cachés de rechange. - Ruslan
@Ruslan L'appareil n'a pas besoin de savoir si un secteur est rempli de quelque chose. Il suffit de connaître le contenu des secteurs à fournir sur demande et les secteurs à écrire sur demande. Et puis, il peut y avoir une couche d'abstraction qui utilise une autre mémoire physique pour représenter les secteurs suivant un algorithme non divulgué ... - Et bien sûr, "plein" signifie uniquement "seuil pour les blocs pouvant être remplis à la fois". - Alexander Kosubek
@Ruslan: Même si l’ensemble du dispositif contient des données, le nivellement de l’usure peut toujours être efficace: par exemple, si le secteur A a été écrit une fois et que le secteur B a été écrit 1 000 fois, secteur B la carte peut échanger les données pour les deux secteurs, de sorte que le secteur A contienne les données du secteur B (et sera probablement écrasé beaucoup plus de fois - mais c'est correct parce qu'il est frais) et le secteur B contiendra les données du secteur A espérons-le ne pas changer beaucoup). De toute évidence, le périphérique doit également stocker le mappage de quel secteur est stocké où. - psmears
@GabeKrause oui, c'est la nature de la bête. Au niveau le plus bas, vous avez soit des puces flash, soit des puces flash (de nos jours, tout utilise nand), et un contrôleur intelligent est placé devant la puce nand qui termine le bus (par exemple, usb pour une clé USB ou mmc pour une carte SD). ), et cette puce est responsable de la cartographie / usure de nivellement, etc., elle éloigne le flash de vous. Si vous utilisiez nand sur Linux embarqué, c'est ce que feraient par exemple les ubifs pour vous. - amo-ej1
Les cartes SD ont un microcontrôleur qui implémente une "couche de traduction Flash" - les demandes de blocs sont traduites par ce microcontrôleur en commandes NAND brutes. Certaines cartes SD ont des commandes cachées pour modifier / mettre à jour le micrologiciel du MCU et des efforts d'ingénierie inversée sont même effectués. La plupart des périphériques de stockage flash autres que les NAND bruts (qui peuvent apparaître dans certains cas comme de nombreux routeurs domestiques) sont probablement «sur-provisionnés», ce qui signifie que votre carte SD de 1 Go contient environ 1024 Mo + 128 Mo d'espace NAND. et aussi une économie de secteur pour les mauvaises pages flash. - LawrenceC


Vous pouvez augmenter l'usure du transistor en augmentant la température de fonctionnement. Utilisez des cycles d'effacement en écriture sur une puce chauffée (70-120 ° C); il va porter plus vite.


32
2017-09-11 08:59



Une température de stockage excessive est également préjudiciable. Il peut donc être plus pratique de "cuire" la puce à 120 ° C (ou même plus) pendant un certain temps, puis vérifier les défauts. - Dmitry Grigoryev
Une légère surtension de l'alimentation de la carte pourrait également être possible et nécessiterait également une expérimentation. - Chris H
La sous-tension peut également causer différents types de défauts, tels que le verrouillage des contrôleurs. - user20574


Préface: Cette option nécessite des modifications de programmation et de matériel supplémentaires, mais elle permettrait des lectures contrôlées probablement transparentes pour l’hôte.

Une carte SD a plusieurs options d'E / S, mais elle peut être contrôlée via SPI. Si vous deviez prendre une carte SD et la modifier de manière à pouvoir attacher les broches à un microcontrôleur (comme un Arduino), vous pourriez faire en sorte que l'Arduino imite la carte SD et soit transparente pour l'appareil qui lit la carte SD. Votre code sur le microcontrôleur pourrait renvoyer délibérément de mauvaises données en cas de besoin. De plus, vous pourriez placer une carte SD sur le microcontrôleur pour que les lectures puissent passer par le microcontrôleur vers la carte SD pour permettre des tests de gigaoctets.


18
2017-09-11 12:55



La plupart des périphériques haut débit (y compris les lecteurs de cartes PC) refuseront simplement de fonctionner avec une carte qui ne prend pas en charge la SD à quatre bits. - Dmitry Grigoryev
L'OP a déclaré que c'était un système intégré qui utiliserait la carte, ce qui le rendrait plus susceptible de prendre en charge SPI pour les cartes SD. - Eric Johnson
Une variante, mais plus difficile, serait de trouver une carte SD pour laquelle vous pouvez reflasher le firmware. - Peter Taylor
C'est super intéressant! Notre système embarqué exécute des E / S via SPI. Je ne suis pas sûr d'avoir la bande passante nécessaire pour modifier notre matériel afin de réaliser un tel ajout, mais je pense que c'est génial. - Gabe Krause
S'instruire sur le nivellement de l'usure dynamique m'amène à penser que la création stratégique d'une «mauvaise» carte SD avec des secteurs défectueux connus est beaucoup plus difficile (ou impossible) que ce que j'espérais lorsque je posais la question. Bien que cela dépasse actuellement mes capacités, cela semble être l'approche la plus contrôlable et techniquement prometteuse, suivie éventuellement de @Olafm. Personnaliser le matériel intermédiaire pour intercepter et "corrompre" les données à tout emplacement de secteur prédéfini pendant le transfert de données semble être une bonne approche. - Gabe Krause


J'irais sur ebay / aliexpress et achèterais la carte SD la moins chère que je puisse trouver en Chine, celle qui est "trop ​​belle pour être vraie". Ils viennent souvent avec des secteurs défectueux ou sont dans des logiciels beaucoup plus grands qu’ils ne le sont en réalité. De toute façon, vous devriez vous retrouver avec une carte SD défectueuse à utiliser pour les tests.


15
2017-09-12 08:05



Approche intéressante, mais comment écririez-vous aux zones défavorables afin de tester les effets des blocs défectueux sur le code stocké? - fixer1234
@ fixer1234, j'avais une de ces cartes SD qui indiquait 32 Go, mais elle n'était en réalité que de 128 Mo. Je l'ai mis dans mon appareil photo et j'ai pu prendre des photos au-delà des 128 Mo mais seules les premières photos pouvaient être relues. Le reste a été répertorié mais a été relu comme cassé. Je suppose que c'est comme ça qu'ils veulent que vous remarquiez les problèmes avec la carte en premier quand il est trop tard pour vous plaindre ... - GuzZzt


Il était une fois, il y a de nombreuses années, j'ai été payé pour récupérer une série de photos et de vidéos de fin d'études à partir d'une carte SD pour une mère plutôt désemparée. Après une inspection minutieuse, la carte avait été physiquement endommagée avec une fissure visible dans le boîtier externe et présentait plusieurs secteurs défectueux, notamment plusieurs secteurs critiques et précoces, qui empêchaient même les programmes de récupération les plus fiables de lire la carte. . En outre, les outils de données médico-légales coûtaient alors une fortune.

J'ai fini par obtenir une carte SD de marque / taille identique et écrire mon propre utilitaire de sauvegarde et de sauvegarde de données brutes afin de copier les données de la mauvaise carte vers la bonne. Chaque fois que l'utilitaire touche un secteur défectueux, il réessaie plusieurs fois avant d'écrire tous les zéros pour ce secteur et, au lieu d'abandonner et d'arrêter, ignore la panne et passe au secteur suivant. Les tentatives de réessai ont été faites car j'avais également remarqué que certains secteurs affichaient encore un taux de réussite en lecture de 40%. Une fois que les données étaient sur la nouvelle carte SD, les outils de récupération qui avaient échoué auparavant fonctionnaient parfaitement avec une perte de données / corruption minimale. Dans l'ensemble, environ 98% de tous les fichiers ont été récupérés. Un certain nombre d'éléments précédemment supprimés ont également été récupérés, car rien n'a jamais été supprimé, simplement marqué comme tel et remplacé lentement. Ce qui a commencé comme un exercice de récupération de données légèrement ennuyeux est devenu l'un de mes projets de développement de logiciels personnels les plus mémorables et les plus intéressants. Au cas où vous vous le demandiez, la mère était ravie.

Quoi qu’il en soit, cette histoire montre qu’il est possible d’endommager physiquement une carte SD de sorte que les données soient toujours accessibles, mais que certains secteurs ne fonctionnent que très peu et que toute tentative de lecture a du mal à le faire. Le plastique de la carte SD a tendance à être plutôt fragile. Votre kilométrage peut varier.

Vous pouvez également demander à certains endroits de récupération de données de votre région. Comme ils se spécialisent dans la récupération de données à partir de divers périphériques défaillants ou défaillants, ils doivent avoir des informations / conseils utiles et peuvent disposer de certaines cartes SD pré-éclatées (par exemple, à des fins de formation).


11
2017-09-13 05:43



Avez-vous publié cet utilitaire en ligne? Ce serait formidable d'ajouter à mon arsenal. - Ploni
À ce stade, il ne fonctionnerait probablement même pas correctement compte tenu de la progression de la technologie (pourrait même ne pas compiler) et des appels système de bas niveau que j'ai utilisés. Il y a aussi quelques outils modernes de clonage de périphériques / lecteurs légaux open source que je serais plus enclin à utiliser en premier que d'essayer de sortir mon ancien logiciel de la naphtaline. - CubicleSoft
Je pense que vous pouvez probablement donner quelques paramètres à dd pour le faire se comporter de la même façon, de nos jours. Je ne suis pas sûr si. - wizzwizz4
@ wizzwizz4, regardez ddrescue. - hildred
"À cette époque, les outils de données médico-légales coûtaient une fortune." Je suis sûr qu'ils le font toujours. - jpmc26