Вопрос Как я могу намеренно разбить / испортить сектор на SD-карте?


Мне нужно проверить устойчивость некоторого кода чтения / записи для некоторых встроенных аппаратных средств. Как я могу пожертвовать несколькими SD-картами и разбить несколько известных секторов для контролируемого исследования?

Единственное, о чем я могу думать, это перезаписать один сектор несколько миллионов раз. Интересно, может ли быть создан скрипт badblocks Linux для повторного запуска его деструктивного теста в одном секторе несколько раз в течение нескольких часов.


137
2017-09-11 07:28


происхождения


Можете ли вы изменить низкоуровневый драйвер SD, чтобы притвориться плохим блоком, или это не может быть и речи? - Mark Yisri
@MarkYisri, я не думаю, что водитель очень доступен. Независимо от того, какой драйвер мы используем, ультра-рудиментарный, чтобы максимизировать выделение памяти для остальной части прошивки. Кроме того, если это было возможно, это, вероятно, будет выше моих возможностей. - Gabe Krause
Можете ли вы создать эмулятор SD-карты? Не самый простой проект, заметьте. - user20574
Учитывая эту цель, вы можете купить несколько подержанных SD-карт за небольшие деньги, и вы можете легко получить неисправный или поставить «искать ...», чтобы специально искать неисправные карты. Или найдите eBay для дефектных карт. Затем вы проверяете карту, и вы будете знать положение дефектных областей. - FarO
Спросите любого профессионального фотографа. Конечно, у них будет куча отрывочных SD-карт. - J...


ответы:


Альтернативный подход, который май быть полезным.

Если ваш код работает под Linux, возможно, вы можете протестировать его с помощью «неисправного» логического устройства. dmsetup могут создавать устройства, которые возвращают ошибки ввода-вывода. Просто создайте свое устройство, используя error и / или flakey цель. Из man 8 dmsetup:

error
  Ошибки любого ввода-вывода, идущего в эту область. Полезно для тестирования или для создания устройств с отверстиями в них.

flakey
  Создает аналогичное сопоставление с linear но проявляет ненадежное поведение периодически. Полезно для моделирования неисправных устройств при тестировании.

Заметка: flakey целевое использование документировано Вот, Основной пример Вот,

Насколько я знаю, ошибка ввода-вывода будет сообщена немедленно, так что это отличается от поведения реальной SD-карты, где вы можете ожидать задержки, остановки и т. Д. Тем не менее, я думаю, что этот подход может быть полезен в некоторых случаях, по крайней мере, для быстрого выполнения предварительный тест или так далее.


167
2017-09-11 08:33



Я ценю это безобратное мышление! Мы взаимодействуем на уровне блоков с SD через 80-мегагерцовый чип Atmel и без реальной ОС. - Gabe Krause
@GabeKrause В этом случае полезность этого ответа зависит от того, насколько аналогичным может быть API-интерфейс блока Linux для API вашего драйвера встроенного устройства. - Qsigma
dmsetup команды для настройки error устройство, которое всегда возвращает ошибки чтения: stackoverflow.com/questions/1870696/... - Peter Cordes
Я согласен, что это похоже на лучшее решение. Сначала вы можете реплицировать все оборудование. А также вы можете имитировать различные режимы ошибок. Например, у меня есть USB-накопитель на 16 ГБ, который отлично работает. Через некоторое время, хотя определенная область на нем начинает возвращать неверные данные. Ошибок FS нет. Вы читаете файл, но контент отличается. Некоторые сектора, очевидно, нестабильны. Но то, как какое-то конкретное устройство будет вести себя, не может быть известно заранее. - akostadinov


Этот парень взломал микроконтроллер внутри SD-карт, используемых для обозначения плохих блоков: https://www.bunniestudios.com/blog/?p=3554

Возможно, вы сможете сделать то же самое и произвольно пометить блоки как ошибочные.

Сегодня на Конгрессе Хаоса (30C3), xobs и я раскрыли   что некоторые SD-карты содержат уязвимости, которые позволяют   произвольное выполнение кода - на самой карте памяти. В темноте   сторона, выполнение кода на карте памяти позволяет классу MITM   («человек-в-середине»), когда карта, кажется, ведет себя   но на самом деле он делает что-то еще. С легкой стороны это также   дает возможность энтузиастам аппаратного обеспечения получить доступ к   очень дешевый и вездесущий источник микроконтроллеров.

,

Эти алгоритмы слишком сложны и слишком специфичны для устройства.   на уровне приложения или ОС, и поэтому получается, что каждая вспышка   диск с памятью поставляется с достаточно мощным микроконтроллером для запуска   пользовательский набор алгоритмов абстракции диска. Даже уменьшительный microSD   карта содержит не одну, но по крайней мере две чипы - контроллер, а при   по меньшей мере один флеш-чип (карты высокой плотности будут складывать несколько вспышек   умереть).

,

Встроенный микроконтроллер обычно представляет собой сильно модифицированный 8051 или   Процессор ARM. В современных реализациях микроконтроллер будет приближаться   100 МГц, а также имеют несколько аппаратных средств   ускорители на кубике. Удивительно, что стоимость добавления этих контроллеров   к устройству, вероятно, составляет порядка 0,15-0,30 доллара США, в частности   для компаний, которые могут использовать как флеш-память, так и контроллеры   в пределах одной бизнес-единицы. Вероятно, дешевле добавить эти   микроконтроллеров, чем тщательно тестировать и характеризовать каждую вспышку   чип памяти, который объясняет, почему управляемые флеш-устройства могут быть дешевле   на бит, чем сырые флеш-чипы, несмотря на включение   микроконтроллер.

,

Суть в том, что механизм загрузки и обновления прошивки фактически   обязательно, особенно для сторонних контроллеров. Конечные пользователи   редко подвергаются этому процессу, поскольку все это происходит на заводе,   но это не делает механизм менее реальным. В моих исследованиях   рынков электроники в Китае, я видел, как владельцы магазинов горели   прошивка на картах, которые «расширяют» емкость карты - в других   слова, они загружают прошивку, которая сообщает, что емкость карты   намного больше, чем фактическое доступное хранилище. Тот факт, что это   возможно в точке продажи означает, что, скорее всего, обновление   механизм не закреплен.

В нашем выступлении в 30C3 мы сообщим о наших результатах,   бренд микроконтроллера, а именно Appotech и его AX211 и AX215   предложения. Мы обнаруживаем простую последовательность «детонации», переданную через   команды, зарезервированные заводом-изготовителем (а именно, CMD63, а затем   «A», «P», «P», «O»), которые бросают контроллер в загрузку прошивки   Режим. На этом этапе карта примет следующие 512 байт и запустит   это как код.


75
2017-09-12 09:21



Из всех ответов этот, вероятно, наиболее близок к тому, о чем фактически спрашивал ОП. - Cort Ammon
Это было фантастическое чтение! - Gabe Krause
@Twisty скопировал некоторые из соответствующих частей. - FarO
Вниз по кроличьей дыре в мир архитектуры SD-карт я иду. - Tejas Kale


Обычно это не будет работать, потому что последние карты SD (или eMMC) используют статическое и динамическое выравнивание по износу, что означает, что интеллектуальный контроллер интерпретирует вашу инструкцию записи и сопоставляет ее с одним из наименее используемых секторов флэш-памяти.

Единственное, что вы можете сделать, это попытаться связаться с вашими поставщиками и попросить их данные; могут быть некоторые (специфичные для поставщика) способы получения состояния их алгоритма изнашивания. Это потенциально позволит вам запрашивать состояние / использование базовой флэш-памяти. Или вам может быть не повезло, и этого может не быть.

Если ваша цель - действительно уничтожить флеш, все, что вы могли бы сделать, это запустить массивные циклы чтения и записи и постоянно проверять, что данные, которые вы читаете, по-прежнему непротиворечивы. Например. создавать два больших файла, хранить их контрольные суммы и читать / записывать их, чтобы проверить их контрольную сумму. Чем больше вспышка, тем дольше будет выполняться этот процесс.


38
2017-09-11 07:37



Не будет ли это продолжаться, если SD-карта полностью заполнена данными, так что она не сможет переназначить многое? Я не думаю, что у них много запасных скрытых секторов. - Ruslan
@Ruslan Устройство не обязательно должно знать, заполнен ли какой-либо сектор чем-либо. Он должен знать информацию о том, какие сектора предоставлять по запросу и какие сектора писать по запросу. И тогда может быть какой-то слой абстракции на месте, заставляя его использовать другую физическую память для представления тех секторов, которые следуют за некоторым нераскрытым алгоритмом ... - И «полный» означает, конечно, «пороговое значение для выполняемых одновременно заполняемых блоков». - Alexander Kosubek
@Ruslan: Даже если у всего устройства есть данные на нем, уровень износа может быть еще эффективен: например, если сектор A был написан один раз, а сектор B был написан 1000 раз, тогда, когда еще одна запись поступает сектор B, карта может обменивать данные для двух секторов, так что сектор A содержит данные сектора B (и, скорее всего, будет перезаписано много раз, но это нормально, потому что оно свежо), а сектор B будет содержать данные сектора A (что будет надеюсь, не сильно изменится). Очевидно, что устройству также необходимо сохранить отображение того, какой сектор будет храниться где. - psmears
@GabeKrause да, это характер зверя. На самом низком уровне у вас есть либо nand, либо ни флэш-чипы (в настоящее время все использует nand), и перед чипом nand используется интеллектуальный контроллер, который прерывает шину (например, usb для USB-накопителя или mmc для SD-карты ), и этот чип отвечает за выравнивание отображения / износа и т. д., он абстрагирует вспышку от вас. Если вы будете использовать nand на встроенной Linux, это то, что, например, ubifs сделает для вас. - amo-ej1
У карт SD есть микроконтроллер, который реализует «Flash Translation Layer» - запросы блоков передаются этим микроконтроллером на сырые команды NAND. На некоторых SD-картах есть скрытые команды для изменения / обновления микропрограммного обеспечения MCU, и на этом есть даже некоторые обратные инженерные усилия. Большинство устройств флэш-памяти, отличных от необработанных NAND (которые могут появляться в некоторых случаях, таких как многие домашние маршрутизаторы), вероятно, «перепроизнесены» - это означает, что ваша 1GB SD-карта, вероятно, имеет что-то вроде необработанного NAND-пространства 1024 Мбайт + 128 МБ, чтобы покрыть уровень износа при полной а также сэкономить место для плохих страниц флэш-памяти. - LawrenceC


Вы можете увеличить износ транзистора за счет увеличения рабочей температуры. Используйте циклы стирания записи на нагретой стружке (70-120 ° C); он будет носить быстрее.


32
2017-09-11 08:59



Чрезмерная температура хранения также повреждает, поэтому может быть более практичным «приготовить» чип при температуре 120 ° C (или даже больше) в течение некоторого времени, а затем проверить наличие дефектов. - Dmitry Grigoryev
Возможно также небольшое перенапряжение при подаче на карту, и аналогичным образом потребуется экспериментировать. - Chris H
Снижение напряжения также может привести к различным видам дефектов, таких как блокировка контроллера. - user20574


Предисловие. Этот параметр требует дополнительных модификаций программного и аппаратного обеспечения, но это позволит контролируемым считываниям, скорее всего, прозрачным для хоста.

SD-карта имеет несколько параметров ввода-вывода, но ее можно контролировать через SPI. Если вы должны были взять SD-карту и изменить ее, чтобы вы могли прикрепить контакты к микроконтроллеру (например, Arduino), вы могли бы заставить Arduino подражать SD-карте и быть прозрачным для устройства, читающего SD-карту. Ваш код на микроконтроллере мог бы при необходимости возвращать плохие данные. Кроме того, вы можете поместить SD-карту на микроконтроллер, чтобы считыватели могли проходить через микроконтроллер на SD-карту, чтобы обеспечить гигабайты тестирования.


18
2017-09-11 12:55



Большинство высокоскоростных устройств (включая считыватели карт для ПК) просто откажутся работать с картой, которая не поддерживает четырехбитную SD. - Dmitry Grigoryev
OP сказал, что это встроенная система, которая будет использовать карту, которая будет более вероятно поддерживать SPI для SD-карт - Eric Johnson
Вариантом этой, но более сложной работы было бы найти SD-карту, для которой вы можете перепрограммировать прошивку, - Peter Taylor
Это супер интересно! Наша встроенная система запускает ввод-вывод через SPI. Я не уверен, что у меня есть пропускная способность для изменения нашего оборудования, чтобы выполнить такое дополнение, но я думаю, что это блестящее мышление. - Gabe Krause
Получение образования о динамическом изнашивании позволяет мне полагать, что стратегическое создание «плохой» SD-карты с известными плохими секторами намного сложнее (или не возможно), чем я надеялся, поставив вопрос. Хотя в настоящее время это выходит за рамки моих возможностей, это, по-видимому, самый контролируемый и технически перспективный подход, за которым следует, возможно, @Olafm. Настройка промежуточного оборудования для перехвата и «коррумпированных» данных в любом предопределенном месте сектора во время передачи данных кажется хорошим подходом. - Gabe Krause


Я бы пошел на ebay / aliexpress и купил самую дешевую SD-карту, которую я могу найти в Китае, которая «слишком хороша, чтобы быть правдой». Они часто поставляются с дефектными секторами или находятся в программном обеспечении, которое намного больше, чем на самом деле. В любом случае, вы должны получить неисправную SD-карту для тестирования.


15
2017-09-12 08:05



Интересный подход, но как бы вы писали в плохие области, чтобы проверить влияние плохих блоков на сохраненный код? - fixer1234
@ fixer1234, у меня была одна из этих SD-карт, в которой говорилось, что это 32 ГБ, но на самом деле это всего лишь 128 МБ. Я положил его в камеру и мог снимать фотографии за пределами 128 МБ, но только первые фотографии можно было прочитать. Остальное было указано, но было прочитано как сломанное. Угадайте, что они хотят, чтобы вы сначала заметили проблемы с карточкой, когда слишком поздно жаловаться ... - GuzZzt


Когда-то давно, много лет назад, мне заплатили за получение набора фотографий и видеороликов с SD-карты для довольно обезумевшей матери. После тщательного осмотра карта каким-то образом была физически повреждена с видимой трещиной во внешнем футляре и имела несколько плохих секторов, в первую очередь несколько ранних критических секторов, которые сделали даже самые надежные программы восстановления в то время, когда они полностью не читали карту , Кроме того, инструменты для судебных данных затем стоят целое состояние.

Я закончил тем, что получил идентичную SD-карту марки / формата и написал собственную утилиту для сброса данных и восстановления данных, чтобы скопировать данные с плохой карты на другую. Каждый раз, когда утилита попадает в плохой сектор, она несколько раз повторяет попытку, прежде чем писать все нули для этого сектора и вместо отказа и остановки игнорировать сбой и перейти к следующему сектору. Повторные попытки были сделаны, так как я также заметил, что некоторые сектора по-прежнему имеют показатель успеха в 40%. Как только данные были на новой SD-карте, инструменты восстановления, которые потерпели неудачу, работали безупречно с минимальной потерей / повреждением данных. В целом, около 98% всех файлов были восстановлены. Несколько элементов, которые были ранее удалены, также были восстановлены, потому что ничто никогда не удаляется - просто помечено как таковое и медленно перезаписывается. То, что начиналось как немного скучное упражнение по восстановлению данных, стало одним из моих более запоминающихся и интересных личных проектов разработки программного обеспечения. В случае, если вам интересно, мать была в восторге.

Во всяком случае, эта история показывает, что можно физически повредить SD-карту, чтобы данные по-прежнему были доступны, но имеют сектора, которые едва функционируют, и что-то, что пытается прочитать от этого, затрудняет это. Пластина SD-карты имеет тенденцию быть довольно хлипкой, поэтому изгиб или резка на некоторые дешевые могут сделать трюк. Ваш пробег может отличаться.

Вы также можете спросить об этом в некоторых местах восстановления данных в вашем регионе. Поскольку они специализируются на восстановлении данных из разных отказоустойчивых или неработающих устройств, они должны иметь некоторые полезные вводные / подсказки и могут даже иметь некоторые предварительно поврежденные SD-карты под рукой (например, для целей обучения), которые вы могли бы получить от них.


11
2017-09-13 05:43



Вы выпустили эту утилиту в Интернете? Было бы здорово добавить в мой арсенал. - Ploni
На данный момент он, вероятно, даже не будет функционировать должным образом с учетом прогресса технологии (возможно, даже не компиляции) и низкоуровневых системных вызовов, которые я использовал. Есть также несколько современных инструментов для создания криминалистических устройств / дисков с открытым исходным кодом, которые я бы более старался использовать в первую очередь, чем пытаться вытащить свое старое программное обеспечение из нафталина. - CubicleSoft
Я ожидаю, что вы, вероятно, можете просто указать некоторые параметры dd заставить его вести себя аналогично этому, в настоящее время. Хотя я не уверен. - wizzwizz4
@ wizzwizz4, посмотрите на ddrescue. - hildred
«Кроме того, инструменты судебных данных тогда стоили целое состояние». Я почти уверен, что они все еще делают. - jpmc26