ресних діапазонів, використовуваних при взаємодії з мікросхемою BIOS. p align="justify">) Мікросхема SST 49LF004A, яка у ролі носія BIOS, має об'єм 512 Кбайт і розділена на 8 блоків по 64 Кбайт. Кожен блок має свій регістр захисту запису (Block Locking Register). Наприклад, для блоку 0, розташованого за адресами FFF80000h-FFF8FFFFh, адреса регістра Block Locking Register дорівнює FFB80002h. Для дозволу стирання і запису блоку, біт 0 цього регістра має бути встановлений в "0". Маніпуляції з регістрами мікросхеми Flash ROM, розташованими в просторі пам'яті, виконуються за допомогою стандартних інструкцій архітектури x86, що забезпечують читання і запис осередків пам'яті, наприклад MOV. p align="justify">) Для запуску операції стирання блоку або сектора потрібно виконати послідовність з шести циклів запису заданих байтів по заданих адресах. Використання багатоциклового послідовностей для запуску операцій стирання і запису, знижує ймовірність випадкового спотворення вмісту Flash в результаті програмного збою. p align="justify">) Для запуску операції запису байта потрібно виконати послідовність з чотирьох циклів запису заданих байтів по заданих адресах. Зазначимо, що перед виконанням запису, для сектора, в який виконується запис, необхідно виконати стирання. p align="justify">
Про апаратної захисту BIOS і її ефективності
Як було показано вище, для перезапису вмісту Flash ROM, програма повинна виконати три дії: переналаштувати чіпсет для забезпечення доступу до мікросхеми BIOS, переналаштувати регістри блокування запису, що входять до складу самої мікросхеми BIOS і, нарешті, передати наказ запису або стирання. На кожному з цих трьох етапів діють механізми захисту BIOS від несанкціонованої модифікації. Розглянемо докладніше ці механізми, а також причини, за якими вони в ряді випадків виявляються неефективними. Наведена інформація допоможе виробити методику, що дозволяє досліджувати задану материнську плату на предмет наявності розглянутої уразливості. p align="justify">) Регістр BIOS_CNTL, розглянутий вище входить до складу "південного моста" чіпсета, його біт 0 управляє блокуванням циклів запису, адресованих мікросхемі BIOS. Біт 1 того ж регістра (це біт BLE, BIOS Lock Enable) дозволяє встановити режим, при якому спроба зняти захист записи буде перехоплюватися BIOS, а точніше, при спробі встановити біт 0 в "1" буде генеруватися переривання SMI (System Management Interrupt) з передачею управління спеціальною процедурою, що входить до складу BIOS. Причому, якщо BIOS при старті встановить такий режим перехоплення, програмно вимкнути його чіпсет не дозволяє, цей режим буде вимкнений тільки після апаратного скидання (по сигналу RESET). p align="justify"> На жаль, розробники BIOS зазвичай не використовують цей механізм, наданий чіпсетом. У всіх материнських платах, досліджених автором, біт BLE (біт 1 регістра BIOS_CNTL) встановлений в "0", тому, спроби зняття захисту записи не перехоплюють...