fbpx
15.2 C
София

Хардуерно хакване на хард диск

Оригиналът е на Jeroen Domburg

Най-четени

Даниел Десподов
Даниел Десподовhttps://www.kaldata.com/
Ежедневен автор на новини. Увличам се от съвременни технологии, оръжие, информационна безопасност, спорт, наука и концепцията Internet of Things.

Ако четете тази статия, навярно имате опит в използването на хард дискове. Те не изглеждат особено сложни и всъщност са набор от 512-байтови сектори, номерирани чрез нарастващи адреси, наричани LBA (Logical Block Address). Компютърът, към който е включен хард дискът (hard drive, HDD) може да чете и записва данните в тези сектори. Обикновено се използва файлова система, която преобразува тези сектори във файлове и папки.

Хората, които не са специалисти в тази област, могат да си помислят, че хардуерът на хард диска би трябвало да не е особено сложен: това устройство трябва само да може да бъде включено към SATA порта, да може точно да позиционира главите и да чете и записва данните върху плочата или плочите. Но работата на HDD е много по-сложна: хард дисковете трябва да обработват сектори и блокове данни с грешки, трябва да осигурят SMART работата, имат кеш и т.н.

Всичко това подсказва, че в хард диска има нещо интелигентно, което може да бъде хакнато. Нека да направим един хардуерен хак, с който хард дискът може да заобиколи всички софтуерни защити.

Компонентите на печатната платка

За да разбера как най-добре могат да се хакват хард дисковете, най-напред трябваше да ги изуча по-подробно. Както при много други хора и при мен се бе събрала цяла купчина стари и/или повредени HDD, които са подходящи за изучаване:

Разбира се, всички ние знаем как трябва да работят механичните детайли на хард дисковете, но мен ме интересува друго. За мен е важна малката печатна платка, намираща се на обратната страна на HDD, на която са разположени SATA конекторът и захранването. Ето как изглежда една от тези платки:

Вижда се, че на нея са запоени четири чипа. Ето какво успях да разбера за тях:

Това е DRAM памет. С нея е най-лесно, понеже нейните спецификации лесно се намират. Тези чипове могат да имат капацитет от 8 MB до 64 MB, като този капацитет е свързан с размера на кеша на съответния хард диск.

А това е контролерът за двигателя на шпиндела. Това е нестандартен компонент и неговите спецификации трудно се намират, но тези контролери много си приличат и има някои чипове, за които информацията е по-достъпна. Изглежда че най-разпространени са контролерите ST Smooth. Да уточня, че освен да управляват двигателя на шпиндела, те регулират мощността и имат по няколко аналогово-цифрови канала.

Това е флаш памет със сериен интерфейс. Стандартен чип с капацитет от 64 KB до 256 KB. Изглежда се използва за съхранение на програмата, с която се стартира контролера на хард диска. Някои HDD няма такава памет и вместо нея се използва паметта интегрирана в чипа на контролера на хард диска.

Разбира се, това не е чип. Това са пиезоелектрически вибрационни сензори, които могат да се използват за преместване на главите в безопасно място, когато HDD е бил подложен на силни вибрации или неволно е ударен. На мен ми се струва, че те просто записват някъде един бит, който показва, че потребителят си е изпуснал хард диска и че в този случай гаранцията вече не важи.

А в този компонент се случва най-интересното., понеже това е контролерът на твърдия диск. Тези чипове се произвеждат от Marvell, ST и някои други компании, като знам, че с това се занимават Samsung и Western Digital. Другите детайли на тази печатна платка не са сложни и няма да се спираме на тях.

Но за тези контролери почти няма публикувана документация. Да се каже, че производителите твърде неохотно споделят информация за тези чипове е все едно нищо да не се каже – съществуването им дори не е отразено в техните официални уеб сайтове! Никъде, дори в целия интернет не може да се намерят спецификациите на тези контролери  – търсенето води до сайтове, където самите PDF файлове ги няма, а самите сайтове са собственост на загадъчни китайски продавачи, които твърдят, че разполагат с тези чипове.

И така, не разполагаме със спецификациите на най-важните чипове и значи сме в задънена улица… Или не?

Използваме JTAG

За щастие, освен спецификациите, има и други начини за търсене на информация за тези чипове. След кратко търсене в интернет намерих нещо полезно.

Във форумите на HDDGuru открих темата на потребителя Dejan. Той по някакъв начин повредил флаш паметта на платката в хард диска и искаше да разбере дали може да накара контролера да работи с външен флаш стик и дали има някакъв начин за презаписването на тази информация във флаш паметта на диска. Той цели пет дни нищо не е успял да намери, но се оказа много изобретателен: в следващия си пост публикува съобщение, че е намерил къде се намират изводите за JTAG порта в тази платка.

Това е много важна находка: JTAG портът може да се използва за управление на контролера като марионетка – контролерът може да бъде накаран да спира, рестартира, да модифицира паметта, да поставя контролни точки и т.н. След това Dejan успял да разбере как да направи дъмп на стартиращата програма и още, че единият конектор на тази платка може да работи като сериен интерфейс и успял да презапише флаш паметта на своя хард диск. След това успял да открие още няколко важни бита и указатели в процеса на обновяването на тази флаш памет, след което окончателно се разтвори в мъглата на уеб пространството.

Всичко това се оказа изключително полезна информация, от която разбрах, че всичките контролери на Western Digital най-вероятно имат ARM ядро, до което може да се получи достъп чрез JTAG порта.  Разбрах още, че хард дисковете имат сериен порт, който обикновено не се използва, но може да бъде полезен за моето хакване. И сега вече разполагам с достатъчно информация, за да започна.

Моята система изглежда по следния начин:

Червеното нещо по-горе е евтината платка FT2232H, която струва почти $30 и разполага с JTAG, сериен порт и SPI интерфейс. Тя е свързана с JTAG интерфейса на хард диска, а също така и към неговия конектор, който може да се използва като сериен порт. Самият хард диск е е включен към SATA конектора на дънната платка в моя компютър, а нейното захранване е външно ATX. За управлението на JTAG използвах популярната програма OpenOCD.

Дали ще проработи всичко това? Dejan си е свършил работата с 2,5-инчов хард диск с капацитет 250 GB, базиран на контролера 88i6745 и е успял да разбере, че в него се използва arm9 ядро. А аз имам 3,5-инчов HDD с капацитет 2 TB и контролера 88i9146, който има по-различен форм фактор и е по-нов. За щастие OpenOCD може самостоятелно да разпознава какво има в JTAG веригата. Ето какво излезе:

Малко се обърках… Аз очаквах един tap, съответстващ на едно ARM ядро… Но виждам три tap. Означава ли това, че този чип има три ARM ядра?

Продължавайки нататък разбрах, че това са наистина три ARM ядра – двете са Feroceon, сравнително мощни arm9, плюс още едно Cortex-M3 ядро, по-слабо, напомнящо на контролер. Следващите експерименти показаха, че всяко едно ядро изпълнява собствен набор от функции:

  • Feroceon 1 обработва физическите четене и запис от и към плочите на хард диска
  • Feroceon 2 управлява SATA интерфейса
  • Feroceon 2 също така работи с кеша и се занимава с преобразуването на LBA в CHS
  • Cortex-M3 с нищо не се занимава… Успях да прекратя неговата работа без каквито и да било последствия за този HDD

От кое ядро да започна хакването? Идеята ми бе да компрометирам защитата на системата чрез модификация на фърмуера на хард диска. Най-лесният начин да се направи това е данните да се променят в реално време, като едновременно с това, този метод е най-труден за разкриване. При това данните в диска не трябва да се променят. За тази цел ми е необходимо да намеря най-подходящото за прихващане ядро – трябва ми ядрото, което има достъп до данните които са в процес на прехвърляне от диска към SATA кабела и тези данни да бъдат модифицирани в реално време по такъв начин, че да се компрометира цялата система.

По какъв начин тези данни се прехвърлят от плочите на хард диска към SATA интерфейса? Тук се възползвах от своята интуиция и разсъждавах по приблизително следния начин:

Ако процесорните ядра използват стандартно копиране на паметта при честота 150 MHz, то те биха могли да достигнат скорост от 150*23/2=2,4 Gb/s, но на практика тази скорост сигурно е по-малка. По спецификации, хард дискът има скорост за обмен на данните 6 Gb/s и най-вероятно се използва някакво хардуерно ускорение. Най-вероятно е използването на DMA. Това означава, че данните се копират от логическите елементи за четене на главите директно в паметта без активното участие на процесорно ядро. Същото се отнася и за SATA интерфейса: на процесорното ядро може само да се укаже къде се намират данните, а DMA логиката ще извърши прочитането на данните директно от паметта.

Ако това е наистина така, то къде би била разположена паметта, към която указва DMA енджинът? Нелош кандидат е кешът на хард диска: прочетените от плочите данни така или иначе отиват в кеша и е логично да се вземат оттам веднага след четенето от диска. Преди това бях разбрал че за работата с кеша отговаря Feroceon 2 и именно това процесорно ядро стана моята основна цел за осъществяването на това хакване.

И така, стигнах до извода, че данните се четат и записват с помощта на DMA без участието на процесорните ядра на контролера. Сега следващият въпрос е, дали е направено така, че ядрата да нямат достъп до тези данни при нормалната работа на устройството или дали все пак могат да получат достъп до тях? За да си отговоря на този въпрос най-напред използвах JTAG включване и дизасемблиране, за да разбера как работи с паметта вторият Feroceon:

Вижда се, че паметта е доста фрагментирана. В адресното пространство са разхвърляни неголеми RAM участъци, има входно/изходно (I/O) пространство и IRQ прекъсвания, както и известна част от зареждащата ROM. Има и голям 64 MB сегмент, който според мен е на DRAM чипа, който се използва за кеш. Да си изясним, дали това е наистина така. Включих диска към моя компютър и записах файла ‘Hello world!’ на него. Дали ще мога да намеря текстовия ред в тази област от 64 MB?

Да, ето я. По всичко личи, че процесорните ядра Feroceon имат достъп до кеша, а самият той се адресира чрез тази 64 MB DRAM област.


Край на първа част. Втората част ще продължим с инжектирането на код и постепенно ще стигнем до пълноценното хакване на хард диска.


Коментирайте статията в нашите Форуми. За да научите първи най-важното, харесайте страницата ни във Facebook или изтеглете приложението на Kaldata.com за Android, iOS и Huawei!

ИЗТОЧНИКHard disk hacking
Абонирай се
Извести ме за
guest
12 Коментара
стари
нови
Отзиви
Всички коментари

Нови ревюта

Подобни новини