Pregunta ¿Cómo puedo romper / dañar intencionalmente un sector en una tarjeta SD?


Necesito probar la elasticidad de algunos códigos de lectura / escritura para algunos hardware incrustados. ¿Cómo puedo sacrificar algunas tarjetas SD y romper varios sectores conocidos para un estudio controlado?

Lo único que se me ocurre es sobrescribir un solo sector unos millones de veces. Me pregunto si se puede crear una secuencia de comandos badblocks de Linux para ejecutar su prueba destructiva en un solo sector repetidamente durante varias horas.


137


origen


¿Puedes cambiar el controlador SD de bajo nivel para pretender que hay un bloque defectuoso, o eso está fuera de discusión? - Mark Yisri
@ MarkYisri, no creo que el controlador sea muy accesible. Cualquier controlador que usemos es ultra-rudimentario para maximizar la asignación de memoria al resto del firmware. Además, si fuera posible, eso probablemente estaría más allá de mi capacidad. - Gabe Krause
¿Puedes construir un emulador de tarjeta SD? No es el proyecto más simple, fíjate. - user20574
Dado el objetivo, puede comprar algunas tarjetas SD de segunda mano por poco dinero y puede obtener fácilmente una falla, o poner un anuncio "buscando ..." para buscar específicamente tarjetas defectuosas. O busque en eBay las tarjetas defectuosas. Luego, prueba la tarjeta y sabrá la posición de las áreas defectuosas. - FarO
Pregúntele a cualquier fotógrafo profesional. Tendrán un montón de tarjetas SD incompletas, seguramente. - J...


Respuestas:


Un enfoque alternativo que mayo sé útil.

Si su código se ejecuta bajo Linux, entonces quizás pueda probarlo con un dispositivo lógico "defectuoso". dmsetup puede crear dispositivos que devuelvan errores de E / S. Simplemente construye tu dispositivo usando error y / o flakey objetivo. De man 8 dmsetup:

error
  Errores de cualquier E / S que va a esta área. Útil para probar o para crear dispositivos con agujeros en ellos.

flakey
  Crea un mapeo similar al linear objetivo, pero exhibe un comportamiento poco confiable periódicamente. Útil para simular dispositivos que fallan cuando se prueban.

Nota: flakey el uso del objetivo está documentado aquí. Ejemplo básico aquí.

Por lo que sé, un error de E / S se informará de inmediato, por lo que esto es diferente al comportamiento de la tarjeta SD real donde puede esperar demoras, estancamientos, etc. Sin embargo, creo que este enfoque puede ser útil en algunos casos, al menos para realizar rápidamente prueba preliminar más o menos.


167



Aprecio ese pensamiento listo para usar! Estamos interactuando en el nivel de bloque con la SD a través de un chip Atmel a 80 MHz y sin un sistema operativo real. - Gabe Krause
@GabeKrause En cuyo caso, la utilidad de esta respuesta depende de qué tan similar sea la API del dispositivo de bloque de Linux con la API de su controlador de dispositivo incorporado. - Qsigma
dmsetup comando para configurar un error dispositivo que siempre devuelve errores de lectura: stackoverflow.com/questions/1870696/... - Peter Cordes
Estoy de acuerdo en que esto parece una mejor solución. Primero puedes replicar sobre cualquier hardware. Y también puedes simular los diferentes modos de error. Por ejemplo, tengo una unidad flash USB de 16GB que funciona todo bien. Después de un tiempo, aunque un área en particular comienza a devolver datos incorrectos. No hay ningún error de FS de ningún tipo. Usted lee el archivo pero el contenido es diferente. Algunos sectores son obviamente inestables. Pero cómo se comportará algún dispositivo en particular no se puede conocer de antemano. - akostadinov


Este tipo hackeó el microcontrolador dentro de las tarjetas SD usadas para marcar los bloques defectuosos: https://www.bunniestudios.com/blog/?p=3554

Es posible que pueda hacer lo mismo y marcar arbitrariamente los bloques como defectuosos.

Hoy en el Chaos Computer Congress (30C3), xobs y yo revelamos una   encontrando que algunas tarjetas SD contienen vulnerabilidades que permiten   ejecución de código arbitrario: en la propia tarjeta de memoria. En la oscuridad   lado, la ejecución del código en la tarjeta de memoria habilita una clase de MITM   (hombre en el medio) ataques, donde la tarjeta parece estar comportándose uno   manera, pero de hecho hace algo más. En el lado de la luz, también   permite a los entusiastas del hardware obtener acceso a un   fuente de microcontroladores muy barata y ubicua.

.

Estos algoritmos son demasiado complicados y demasiado específicos del dispositivo para ejecutarse   a nivel de aplicación o sistema operativo, y resulta que cada flash   El disco de memoria se envía con un microcontrolador razonablemente poderoso para ejecutar un   conjunto personalizado de algoritmos de abstracción de disco. Incluso la diminuta microSD   La tarjeta no contiene uno, sino al menos dos chips: un controlador y en   al menos un chip flash (tarjetas de alta densidad apilarán flash múltiple   morir).

.

El microcontrolador integrado es típicamente un 8051 altamente modificado o   CPU ARM En implementaciones modernas, el microcontrolador se acercará   100 MHz niveles de rendimiento, y también tienen varios hardware   aceleradores en-morir. Sorprendentemente, el costo de agregar estos controladores   para el dispositivo es probablemente del orden de $ 0.15- $ 0.30, particularmente   para las empresas que pueden fab tanto la memoria flash y los controladores   dentro de la misma unidad de negocios. Probablemente sea más barato agregar estos   microcontroladores que para probar y caracterizar a fondo cada flash   chip de memoria, que explica por qué los dispositivos flash administrados pueden ser más baratos   por bit que los chips flash brutos, a pesar de la inclusión de un   microcontrolador.

.

El quid es que un mecanismo de carga y actualización de firmware es virtualmente   obligatorio, especialmente para controladores de terceros. Los usuarios finales son   rara vez expuesto a este proceso, ya que todo sucede en la fábrica,   pero esto no hace que el mecanismo sea menos real. En mis exploraciones   de los mercados electrónicos en China, he visto a los tenderos quemar   firmware en tarjetas que "expanden" la capacidad de la tarjeta, en otras   palabras, cargan un firmware que informa que la capacidad de una tarjeta es   mucho más grande que el almacenamiento real disponible. El hecho de que esto es   posible en el punto de venta significa que lo más probable es que la actualización   el mecanismo no está asegurado.

En nuestra charla en 30C3, informamos nuestros hallazgos explorando un particular   marca de microcontroladores, es decir, Appotech y sus AX211 y AX215   ofrendas. Descubrimos una secuencia simple de "knock" transmitida sobre   comandos reservados por el fabricante (es decir, CMD63 seguido de   'A', 'P', 'P', 'O') que dejan caer el controlador en una carga de firmware   modo. En este punto, la tarjeta aceptará los siguientes 512 bytes y se ejecutará   como código


75



De todas las respuestas, esta es probablemente la más cercana a lo que el OP realmente estaba pidiendo. - Cort Ammon
¡Esa fue una lectura fantástica! - Gabe Krause
@Twisty copió algunas de las partes relevantes. - FarO
Por el agujero del conejo en el mundo de la arquitectura de la tarjeta SD voy. - Tejas Kale


Normalmente, esto no funcionará porque las tarjetas SD más recientes (o eMMC) usan nivelación de desgaste estática y dinámica, lo que significa que un controlador inteligente interpreta sus instrucciones de escritura y las asigna a uno de los sectores de flash menos utilizados.

Lo único que podría hacer es tratar de ponerse en contacto con sus proveedores y solicitar su hoja de datos; puede haber algunas formas (específicas del proveedor) de recuperar el estado de su algoritmo de nivelación de desgaste. Esto potencialmente le permitiría consultar el estado / uso del flash subyacente. O tal vez tengas mala suerte y esto podría no existir.

Si su objetivo es destruir flash, lo único que podría hacer es ejecutar ciclos masivos de lectura y escritura, y verificar continuamente que los datos que está leyendo siguen siendo consistentes. P.ej. cree dos archivos grandes, almacene sus sumas de comprobación y léalos / escríbalos para verificar su suma de comprobación. Cuanto mayor sea el flash, más tardará este proceso.


38



¿Esto no funcionará si la tarjeta SD está completamente llena de datos, por lo que no puede reasignar mucho? No creo que tengan muchos sectores ocultos de repuesto. - Ruslan
@Ruslan El dispositivo no necesita saber si un sector está lleno de algo. Solo necesita saber el contenido de qué sectores entregar bajo pedido y qué sectores escribir a pedido. Y luego puede haber alguna capa de abstracción en su lugar, lo que hace que use otra memoria física para representar esos sectores siguiendo algún algoritmo no revelado ... - Y "completo" solo significa "umbral para bloques a los que se puede llegar de forma simultánea", por supuesto. - Alexander Kosubek
@Ruslan: incluso si todo el dispositivo tiene datos, la nivelación del desgaste puede seguir siendo efectiva: por ejemplo, si el sector A se ha escrito una vez y el sector B se ha escrito 1,000 veces, cuando aparece otra escritura para sector B, la tarjeta puede intercambiar los datos de los dos sectores, de modo que el sector A contiene los datos del sector B (y es probable que se sobrescriba muchas veces más, pero eso está bien porque es nuevo) y el sector B contendrá datos del sector A (que ojala no cambie mucho). Obviamente, el dispositivo también necesita almacenar el mapeo de qué sector se almacena donde. - psmears
@GabeKrause sí, esa es la naturaleza de la bestia. En el nivel más bajo tienes chips nand o flash (hoy en día todo está usando nand), y hay un controlador inteligente frente al chip nand que termina el bus (por ejemplo, usb para un dispositivo usb o mmc para una tarjeta sd ), y este chip es responsable del mapeo / nivelación de desgaste, etc., abstrae el flash de usted. Si utilizara nand en Linux incorporado esto es lo que por ejemplo ubifs haría por usted. - amo-ej1
Las tarjetas SD tienen un microcontrolador que implementa una "capa de traducción flash": las solicitudes de bloques son traducidas por este microcontrolador a comandos NAND en bruto. Algunas tarjetas SD tienen comandos ocultos para cambiar / actualizar el firmware de MCU e incluso se han realizado algunos esfuerzos de ingeniería inversa. La mayoría de los dispositivos de almacenamiento flash distintos al NAND sin procesar (que pueden aparecer en algunos casos como muchos enrutadores domésticos) probablemente estén "sobreprovisionados", lo que significa que su tarjeta SD de 1GB probablemente tiene algo así como 1024MB + 128MB de espacio NAND sin procesar, para cubrir la nivelación cuando está llena y también ahorra sector para malas páginas flash. - LawrenceC


Puede aumentar el desgaste del transistor aumentando la temperatura de operación. Use ciclos de borrado de escritura en un chip calentado (70-120 ° C); se desgastará más rápido.


32



La temperatura de almacenamiento excesiva también es perjudicial, por lo que puede ser más práctico "cocinar" el chip a 120 ° C (o incluso más) durante un tiempo, luego verificar si hay defectos. - Dmitry Grigoryev
También podría ser posible una ligera sobretensión en el suministro a la tarjeta, y también necesitaría experimentar. - Chris H
La baja tensión también puede causar diferentes tipos de defectos, como bloqueos del controlador. - user20574


Prefacio: esta opción requiere programación adicional y modificaciones de hardware, pero permitiría lecturas controladas muy probablemente transparentes para el host.

Una tarjeta SD tiene múltiples opciones de E / S, pero se puede controlar a través de SPI. Si tuviera que tomar una tarjeta SD y modificarla para que pueda conectar las patillas a un microcontrolador (como un Arduino), podría hacer que el Arduino imite la tarjeta SD y ser transparente para el dispositivo que lee la tarjeta SD. Su código en el microcontrolador podría devolver datos incorrectos cuando sea necesario. Además, podría colocar una tarjeta SD en el microcontrolador para que las lecturas puedan pasar a través del microcontrolador a la tarjeta SD para permitir gigabytes de prueba.


18



La mayoría de los dispositivos de alta velocidad (incluidos los lectores de tarjetas de PC) simplemente se negarán a trabajar con una tarjeta que no admita SD de cuatro bits. - Dmitry Grigoryev
El OP dijo que era un sistema integrado que usaría la tarjeta, lo que haría más probable que admita SPI para tarjetas SD. - Eric Johnson
Una variante de esto, pero un trabajo más difícil, sería encontrar una tarjeta SD para la que pueda reflash el firmware. - Peter Taylor
¡Esto es súper interesante! Nuestro sistema integrado ejecuta E / S a través de SPI. No estoy seguro si tengo el ancho de banda para modificar nuestro hardware para lograr una adición como esta, pero creo que es un pensamiento brillante. - Gabe Krause
Obtener información sobre la nivelación dinámica del desgaste me lleva a pensar que crear estratégicamente una tarjeta SD "mala" con sectores defectuosos conocidos es mucho más difícil (o imposible) de lo que esperaba al plantear la pregunta. Aunque actualmente está más allá del alcance de mi capacidad, este parece ser el enfoque más controlable y técnicamente más prometedor, seguido posiblemente por @Olafm. Personalizar hardware intermedio para interceptar y "corromper" datos en cualquier ubicación de sector predefinida durante la transferencia de datos parece un buen enfoque. - Gabe Krause


Me gustaría ir a ebay / aliexpress y comprar la tarjeta SD más barata que puedo encontrar en China, la que es "demasiado buena para ser verdad". A menudo vienen con sectores defectuosos o están en un software configurado para ser mucho más grande de lo que realmente son. De cualquier manera, debe terminar con una tarjeta SD defectuosa para usarla en las pruebas.


15



Un enfoque interesante, pero ¿cómo escribirías en las áreas malas para probar los efectos de los bloques defectuosos en el código almacenado? - fixer1234
@ fixer1234, tenía una de estas tarjetas SD que decía que era de 32 GB pero en realidad solo 128 MB. Lo puse en mi cámara y pude tomar fotos más allá de los 128MB pero solo las primeras fotos pudieron ser leídas. El resto estaba en la lista, pero se leyó como roto. Supongo que así es como quieren que se den cuenta primero de los problemas con la tarjeta cuando ya es demasiado tarde para quejarse ... - GuzZzt


Érase una vez, hace muchos años, me pagaron para recuperar un conjunto de fotos y videos de graduación de una tarjeta SD para una madre bastante angustiada. Tras una inspección minuciosa, la tarjeta se había dañado físicamente de algún modo con una grieta visible en la carcasa exterior y tenía varios sectores defectuosos, especialmente varios sectores primitivos críticos, que hacían que incluso los programas de recuperación más fiables en ese momento no pudieran leer la tarjeta . Además, las herramientas de datos forenses en aquel entonces cuestan una fortuna.

Terminé obteniendo una tarjeta SD de marca / tamaño idéntico y escribiendo mi propio volcado de datos sin formato personalizado y utilidad de restauración para copiar los datos de la tarjeta defectuosa a la buena. Cada vez que la herramienta llegaba a un sector defectuoso, lo intentaba de nuevo varias veces antes de escribir todos los ceros para ese sector y, en lugar de ceder y detenerse, ignoraba la falla y pasaba al siguiente sector. Los intentos de reintento se realizaron ya que también noté que algunos sectores todavía tenían una tasa de éxito de lectura de alrededor del 40%. Una vez que los datos estaban en la nueva tarjeta SD, las herramientas de recuperación que habían fallado antes funcionaban sin problemas con una pérdida / corrupción de datos mínima. En general, se recuperó aproximadamente el 98% de todos los archivos. También se recuperaron varios elementos que se habían eliminado previamente porque nunca se borra nada, simplemente se marcan como tales y se sobrescriben lentamente. Lo que comenzó como un ejercicio de recuperación de datos ligeramente aburrido se convirtió en uno de mis proyectos de desarrollo de software personal más memorables e interesantes. En caso de que te lo estés preguntando, la madre estaba encantada.

En cualquier caso, esta historia muestra que es posible dañar físicamente una tarjeta SD de forma tal que los datos aún son accesibles, pero tiene sectores que apenas funcionan y todo lo que intente leer tiene dificultades para hacerlo. El plástico de la tarjeta SD tiende a ser bastante endeble, por lo que doblar o cortar algunos baratos podría ser el truco. Su experiencia puede ser diferente.

También puede preguntar en algunos lugares de recuperación de datos en su área. Como se especializan en la recuperación de datos de varios dispositivos defectuosos o fallidos, deben tener algunas sugerencias / sugerencias útiles e incluso pueden tener a mano algunas tarjetas SD pretratadas (por ejemplo, para fines de capacitación) que usted puede obtener de ellas.


11



¿Ha lanzado esa utilidad en línea? Eso sería genial para agregar a mi arsenal. - Ploni
En este punto, probablemente ni siquiera funcionaría correctamente dada la marcha del progreso de la tecnología (incluso podría no compilarse) y las llamadas de bajo nivel del sistema que utilicé. También hay un par de herramientas de clonación de dispositivos forenses / unidades de código abierto modernas que sería más propenso a intentar usar antes que intentar sacar mi antiguo software de las bolas de naftalina. - CubicleSoft
Supongo que probablemente solo puedas dar algunos parámetros para dd para hacer que se comporte de manera similar a esto, hoy en día. No estoy seguro sin embargo. - wizzwizz4
@ wizzwizz4, mira ddrescue. - hildred
"Además, las herramientas de datos forenses de entonces cuestan una fortuna". Estoy bastante seguro de que todavía lo hacen. - jpmc26