В първата част започнахме началото на хардуерен хак за хард диск, който може незабележимо да компрометира цялата компютърна система. Спряхме се на платката, която се намира в хард дисковете и на чиповете, които се използват в нея, както и на адресното пространство на контролера. Във втората част видяхме как става инжектирането на собствен код във фърмуера на хард диска. В третата част приключваме с описанието на този великолепен хак.
Софтуерният инструмент idle3-tools може да се използва за модифицирането на един байт във фърмуера, но само за да се промени поведението на хард диска в режим на готовност. Но в този код също се използва VSC с помощта на ‘официалния метод’ – използването на ioctls scsi драйвера на Linux. Реших да използвам част от този код, който след почти козметични промени интегрирах във fwtool. След няколко часа експерименти с този код и подбора на параметрите на VSC, моята програма внезапно се научи да чете и записва в и от флаш паметта на хард диска, който е включен към работещ компютър, на който всъщност е стартирана моята програма.
Би могло да се каже, че с това моята атака е приключена, но не е съвсем така. Ако един blackhat хакер по някакъв начин получи root достъп до сървър с подобен диск, то той наистина би могъл да използва програмата fwtool за отдалечено създаване на дъмп на флаш паметта някъде върху диска, да го модифицира и отново да го запише в тази флаш памет. Но рано или късно притежателят на тази компютърна система ще разбере, че неговата машина се използва с вредоносни цели и би запушил тази задна вратичка, чрез която белия или който и да е хакер е проникнал.
Аз постъпвам по друг начин. Фърмуерът на хард диска може да се промени по такъв начин, че да стартира точно определено поведение при появата на някаква външна ‘магическа команда’. Това може да е просто поредица от символи, които са вмъкнати в едно .jpeg изображение или произволен друг файл, който включва този магически символен ред, стартиращ изпълнението на някакъв предварително подготвен алгоритъм. Този скрит алгоритъм може да се стартира чрез хакерската команда, която е просто прикрепена към някой URL. След това тя би се появила в логовете, което ще доведе до сработването на този експлойт.
Експлойтът може да се използва за подаване на заповед за извършването на нещо вредоносно. Записаният във фърмуера на флаш диска алгоритъм би могъл да изчака докато компютърът не започне да чете файла /etc/shadow, в който Linux системите записват всички пароли, и би могъл да модифицира неговото съдържание в режим на реално време и да го замени с нещо предварително подготвено от хакера – например някоя негова си парола, с която да се логне в компютърната система, а машината би я сравнила модифицирания /etc/shadow и би позволила на хакера да проникне в системата.
Ето я и демонстрацията, която направих за своята презентация. Вижда се как безуспешно се опитвам да вляза в root акаунта на този компютър. След това задействам този хак и подавам хеша на избраната от мен парола test123. Тъй като Linux хешира файла shadow, както и всички файлове до които наскоро е осъществен достъп, налага се да генерирам мощна дискова активност, за да избутам този файл от кеша – в този случай Linux се принуждава да поиска файла с паролите от диска, а там този файл е вече променен. И накрая, благодарение на изчистването на кеша, успявам да вляза в root акаунта с помощта на паролата test123.
Други начини на използване
Разбира се, осигуряването на достъп до сървърите, в които са запушени всички други тайни начини за проникване, не е единственият полезен начин за използване на моята работа по реверсивно инженерство. Този метод може да се използва и за информационна защита.
Така например, възможно е създаването на хард диск, който не може да се клонира. Когато достъпът до този HDD се осъществява по случаен начин, всичко е наред, понеже такъв е нормалният достъп на една файлова система. Но ако достъпът до диска се осъществява последователно сектор по сектор, както обикновено правят помощните програми за клониране на хард дисковете, то този диск започва да изкривява данните и по този начин не позволява създаването на негов клонинг. Мисля, че идеята е ясна.
Платката на хард диска е интересна сама по себе си. Нейният контролер има три достатъчно мощни процесорни ядра, към които е включена немалко оперативна памет. Тя има uart за сериен порт и не по-малко от два SPI интерфейса – единият за флаш паметта, а другият – за контролиране двигателя на шпиндела. За да демонстрирам мощта на този чип, аз портнах в своя хард диск известен на всички софтуер. Демото по-долу е само проверка на тази концепция, в която няма потребителско адресно пространство. Но съм малко горд, че успях да вмъкна в паметта на моя хард диск Linux ядрото. Горе се вижда стандартния команден ред (хард дискът е монтиран в /mnt, а отдолу се вижда моята работа с неговия сериен интерфейс.
Малко по-подробно за това, което се случва: ядрото и init са пакетирани във фрагменти с размер точно един сектор, в началото на който е добавен мой си магически ред от символи и пореден номер. При прочитането на файл от диска, той отива в кеша. Подаването на магическата команда HD, lnx! принуждава модифицирания фърмуер да търси в кеша всички сектори, да сглоби Linux ядрото и да го зареди. Но все още не успявам да го компилирам и то в края на краищата подава kernel panic. Засега това е всичко.
Всичко важно от света на технологиите, директно в пощата ти.
С абонирането приемате нашите Условия и Политика за поверителност. Може да се отпишете с един клик по всяко време.
Коментирайте статията в нашите Форуми. За да научите първи най-важното, харесайте страницата ни във Facebook, и ни последвайте в Google Новини, TikTok, Telegram и Viber или изтеглете приложението на Kaldata.com за Android, iPhone, Huawei, Google Chrome, Microsoft Edge и Opera!