Чи справді неможливо сказати, що робить процесор? [зачинено]


24

Комп'ютерні програмісти часто декламують мантру, що інструкції x86 є абсолютно непрозорими: Intel каже нам, що вони щось роблять, але немає сподівання, що хтось може перевірити, що відбувається, тому, якщо НДА скаже їм перекрити свої RNG, тоді ми не можемо реально робити щось з цього приводу.

Ну, я вважаю, що комп'ютерні програмісти нічого не можуть зробити з цією проблемою. Але як би на неї нападав електрик? Чи існують методи, які інженер-електрик може використати для перевірки того, що схема дійсно виконує операції, описані в її специфікації, а ніяких інших операцій немає?


5
Вам доведеться зробити щось на кшталт рентгенівського штампу та проаналізувати все, щоб побачити, що він насправді робить. В основному, інженер реверсує мікросхему і враховує функцію кожного ланцюга. Зовсім непрактично.
DKNguyen

7
Жоден електричний ланцюг не виконує точних характеристик через шум і незначну можливість того, що одного дня виникне глюк, який "досить великий".
Енді ака

5
Інформація про забаву: Це неясно пов'язане з демоном Лапласа .
Гаррі Свенссон

6
Викрасти внутрішні документи з бази вмісту Intel буде простіше, ніж було б зробити інженеру навіть один сучасний складний процесор Intel.
ліс

14
@ Зверніть ваше ставлення неконструктивно, і ваше твердження про те, що backdoor неможливо приховати в апараті, не відповідає дійсності.
pjc50

Відповіді:


14

Найкращий документ, який я прочитав на цю тему, - це "Стійкі трояни апаратного рівня на рівні допантів" (Becker et al) від 2014 року.

Оскільки модифікована схема виявляється законною на всіх шарах електропроводки (включаючи весь метал і полісилікон), наше сімейство троянців стійке до більшості методів виявлення, включаючи дрібнозернистий оптичний огляд і перевірку наявності «золотих стружок». Ми демонструємо ефективність нашого підходу шляхом вставки троянців у дві конструкції - цифрову пост-обробку, отриману з криптографічно захищеного дизайну RNG від Intel, що використовується в процесорах Ivy Bridge, та реалізацію бокових каналів SBox - та шляхом вивчення їх виявлення та впливу на безпеку.

У статті описано, як вносяться зміни, як надзвичайно важко виявити перевірку кремнію, методи його приховування від випробування виробництва, і як це можна зробити, щоб знизити безпеку апаратної криптовалюти або витік ключової інформації через силовий рейковий канал каналу реалізації AES.

Бічні канали - це сформоване поле інтересу. Intel зазнали проблем, пов’язаних із спекулятивним виконанням витоку інформації з пам'яті, яка навіть не використовувалася програмою. Можливо, це був навмисний недолік дизайну? Це майже неможливо сказати.


Чи не потрібно, щоб бічний канал вимагав певного передавача для передачі інформації до АНБ? В іншому випадку я, безумовно, помітив, що хтось вимірює струм рейкової потужності на своєму ноутбуці під час роботи над ним.
Дмитро Григор’єв

24

Чи існують методи, які інженер-електрик може використати для перевірки того, що схема дійсно виконує операції, описані в її специфікації, а ніяких інших операцій немає?

Теоретично, так, я думаю, що це можливо. Однак для складного процесора знадобиться багато часу і грошей. Крім того, якщо ви не повністю знаєте та не розумієте дизайн, ви не зможете судити про те, чи є якась діяльність "законною" чи ні.

ЦП - це просто "складна" цифрова схема, що складається з багатьох логічних комірок.

Можливо зробити інженерний мікросхему та відновити конструкцію, дотримуючись металевих з'єднань. Таких шарів з'єднання може бути багато, наприклад, до 8 або більше шарів.

Вам знадобляться фахівці в цій галузі, щоб розпізнати логічні комірки, і тоді, можливо, якесь програмне забезпечення зможе розібратися, як вони всі підключені, щоб ви могли відновити мережевий список.

Після того, як у вас з'явиться список, ви "знаєте" дизайн. Це не означає, що тепер ви також знаєте, як це працює!

Можливо, певна функція активує 2 частини дизайну, хоча ви вважаєте, що їх має бути достатньо, тож ви підозрюєте, що відбувається якась підозріла діяльність. Однак дизайн робить якийсь хитрий трюк, про який ви не знаєте, щоб прискорити операції.

Не знаючи і не розуміючи дизайн, будь-який висновок, який ви зробите, все ще може бути помилковим. Тільки інженери, які розробили процесор, мають всю проектну інформацію і мають найкращі шанси на те, щоб розібратися чи здогадатися, що насправді триває чи має продовжуватися процесор.


77
Тільки інженери, які розробили процесор, знають все, що відбувається - я, здається, є інженером, що працює в цій галузі, і дозвольте мені оцінити це твердження як дуже оптимістичне :)
Євген Ш.

18
Ні, дизайнери процесора не знали б все, що відбувається далі - дизайн на такому рівні залежить від інструментів синтезу, і ті, хто може придумати поведінку, що не відповідає дизайну HDL. Для того, щоб взяти нечесний приклад, багато інструментів FPGA дозволять вам компілювати в логічному аналізаторі.
Кріс Страттон

9
Зворотна інженерія мікросхема з "мільярдами транзисторів" була б проблемою. спектр.ieee.org
semiconductors/processors/…

4
@Wilson Оскільки складні схеми (включаючи процесори) містять безліч фірмових (таємних, торгових марок / навіть запатентованих) конструкцій, які не доступні широкій публіці, оскільки компанії, які володіють цими конструкціями, хочуть отримати з них користь (заробляти гроші). 6502 - це стара конструкція , вона вже не має жодної цінної дизайнерської інформації, так що так, це повністю відкрито і доступно для всіх.
Бімпелрекіе

3
@Bimpelrekkie: Якщо вони запатентовані, вони за визначенням не є секретними. У цьому суть патенту. Ви торгуєте секретом тимчасової монополії.
MSalters

9

Ну, я вважаю, що комп'ютерні програмісти нічого не можуть зробити з цією проблемою. Але як би на неї нападав електрик?

Не існує хороших способів знайти задні двері. Одним із способів знайти апаратну задню панель буде тестування комбінацій або недокументованих інструкцій. Ось хороша розмова про того, хто насправді робить це і робить аудит обладнання x86 . Це можна зробити без розтріскування чіпа. Одна з проблем Intel (я не впевнений в інших мікросхемах) полягає в тому, що він насправді має процесор, на якому працює Linux, так що на деяких процесорах також є програмне забезпечення, і ви, мабуть, не маєте до нього доступу.

Чи існують методи, які інженер-електрик може використати для перевірки того, що схема дійсно виконує операції, описані в її специфікації, а ніяких інших операцій немає?

Існують способи тестування використання самого обладнання для тестування функціональності. Оскільки x86 має бездокументовану частину свого набору інструкцій, було б незвично вводити backdoor в звичайні інструкції, тому що це вводить можливість помилок (як, наприклад, якщо у вас є backdoor в інструкції з додавання або мульти), тому перше місце потрібно шукати було б в документах, що не були задокументовані.

Якщо вам потрібно було перевірити функціональність звичайних інструкцій, ви можете спостерігати час, необхідний для виконання інструкцій, спостерігайте за кількістю енергії, необхідної для виконання інструкцій, щоб побачити, чи є відмінності від того, що ви очікували.


3
Я б не погодився, це не неможливо, щоб хтось це зробив, але навряд чи. скажемо, що ви переробили звичайну інструкцію, як-от додавання інструкцій, і якщо ви виконали додаткову інструкцію, скажімо, вона відкрила backdoor. Тоді замовник розробляє програму, яка має саме таку комбінацію, вони заглядають у неї, знаходять задні двері, і всі з’їжджають з розуму, і вас подають до суду. Набагато безпечніше поставити заднім куточком незадокументовані інструкції (або комп’ютер Linux, вбудований в процесор)
напруга Спайк

4
IME запускає Minix, який не є Linux і набагато менший та простіший. Linux був натхненний існуванням Minix і спочатку використовував його файлову систему і був оголошений на своїй групі новин, але вони були зовсім інші і тоді надзвичайно такі.
Кріс Страттон

5
@ user14717 - противною можливістю буде тригерна послідовність у в'язному нативному виконуваному файлі, щось на зразок рідного клієнта. Але немає причини, що це повинен бути код, а не дані .
Кріс Страттон

5
@ Laptop2d Bugs , де процесори не робити те , що теоретична документація набору інструкцій кажуть траплятися весь час ; Зазвичай, ніхто не подає до суду: Прочитайте, наприклад, розділ errata у оновленому документі до 7-го покоління ядра Core i7 Intel. Використання незадокументованої інструкції негайно подасть тривогу будь-якому досліднику зловмисного програмного забезпечення. Використання незвичайної комбінації ритмічних ADD з правильним міжреєстровим MOV, рідше викликає будь-яку тривогу.
Маркус Мюллер

6
@ laptop2d Мене приголомшив вислів "вбудований Linux в процесор". Тому я трохи провів дослідження, я думаю, ви говорите про двигун Intel ME. Ну, це працює не на самому процесорі, а на чіпсеті північного моста. Здається , там було багато дезінформації про те , що, см itsfoss.com/fact-intel-minix-case
тьмяний

6

Єдиний спосіб полягає в тому, щоб зняти чіп-шар за шаром і записати кожен транзистор електронним мікроскопом, а потім ввести його в якусь програму моделювання, а потім спостерігати за його запуском.

Це, по суті, проблема Чорного ящика, в якій ви намагаєтеся реконструювати внутрішні пристрої, вимірюючи входи та виходи. Після того, як складність внутрішніх чи число вводу-виводу виходить за межі тривіальної, виникає комбінаторний вибух, коли кількість можливих внутрішніх станів стає астрономічним. Де такі цифри, як Гугол, кидаються.


2
... і вкрасти дизайн легше, використовуючи соціальну інженерію :)
Євген Ш.

8
Ні. Очевидна помилка тут полягає в тому, що моделювання було б недостатньо. Навіть якби ви дали в точну модель моделювання, ви все одно не змогли б знайти ретельно приховуване поведінку, тому що ви поняття не маєте , як викликати його.
Кріс Страттон

4
@ChrisStratton Я б не назвав цю помилку очевидною . Цілком прийнятне припущення, що дизайн був заснований на спрощеннях, які є фізично звичайними, наприклад, що ви не ставите дві сліди металізації так близько один до одного, що вони індуктивно стикуються для зміни стану воріт MOSFET. Це лише помилка, якщо а) ваші спрощення не відповідають фізичній моделі того, що використовував дизайнер, або б) дизайнер навмисно приховує щось, навмисно порушуючи вимоги до цих спрощень неочевидними способами.
Маркус Мюллер

7
@ChrisStratton ах, вибач, гаразд, я думаю, зараз я розумію. Ви кажете, що навіть цифрові / поведінкові тактові моделі процесора є досить складними, щоб приховати випадки, коли розуміння / припущення програміста просто не застосовуються. Це правда. Можна було б документально зафіксувати ефекти, що призводять до SPECTER, і більшість людей ніколи не думали б кешувати наявність побічних ефектів, пов'язаних з потоком даних або програми. Справді!
Маркус Мюллер

3
Дякую :) Ваш аргумент повертає усю тему формальної перевірки правильності ISA («чи справді ця ISA гарантує, що сумісний процесор не надає привілеїв RING 0 непривілейованому коду?») Та офіційної перевірки HDL / RTL проти таких специфікацій ISA (особливо мені подобається цей проект верифікації процесора RISC-V ).
Маркус Мюллер

5

Довести, що процесор не робить щось підлий, надзвичайно важко. Класичний приклад - машина для голосування. Якщо в ній є один шматочок, який бере копію вашого голосу і пізніше піднімає її до якогось диктатора, це може бути життям чи смертю для вас десь. І довести, що серед мільярдів не існує жодного подібного шматочка, як це досить складно.

Ви можете подумати про фізичну ізоляцію мікросхеми, тому практично зрозуміти, що до нього немає неправильних провідних з'єднань. І розміщення іншої мікросхеми або декількох чіпів послідовно (з різних джерел) у її мережевому з'єднанні, що гарантує, що вона підключається лише до потрібного місця. Тоді влада переїжджає на велосипеді після того, як вона відпустить ваш голос. І сподіваючись, що там немає енергонезалежних шматочків. Або підлий бездротовий зв’язок. Але чи довіритесь ви своєму життю?


5

Для передачі будь-яких даних до NSA буде потрібен доступ до мережі, тому помітити таку задню панель буде досить просто, запустивши ОС з відключеними мережевими службами та перевіривши мережеві інтерфейси на трафік. Для ОС з відкритим кодом можна навіть запустити з повною мережевою підтримкою та підключенням неправомірного з’єднання по IP-адресові, який не відповідає жодній адреси, до якої ОС може законно отримати доступ.

На задньому плані на базі RNG без передачі даних буде дуже обмежена корисність. Якщо CPN RNG не є єдиним джерелом ентропії, шанси на те, що такий бекдор може забезпечити будь-яку перевагу для зловмисника, не будучи одночасно очевидним, практично дорівнює нулю . Якщо ви не наполягаєте на тому, що чайник Русселя є там, незважаючи на відсутність вагомих причин для існування, ви повинні мати можливість застосувати той же аргумент до апаратних RNG на задньому плані.


5
Отже, ви припускаєте, що противник має час, гроші та вміння створити та заховати апаратний троянський кінь, але перше, що вони роблять - це telnet www.nsa.gov? Це здається дуже наївною точкою зору.
Елліот Олдерсон

1
Якби АНБ приховувала вразливість, то так, вони б сподівалися, що люди використовують rdrandабо rdseedяк запропонував Intel: як єдине джерело ентропії для насіння PRNG. Linux (ядро) вирішив не робити для /dev/random, але Glibc / libstdc ++ s струму std::random_device робить використання тільки rdrandякщо він доступний під час виконання замість відкриття /dev/random. Крок до стандартного дзвінка з бібліотеки з Godbolt
Пітер Кордес

@ElliotAlderson Яка ваша точка зору тоді? Як хтось може вкрасти цінні дані, не передаючи їх кудись?
Дмитро Григор’єв

@PeterCordes std::random_deviceне є криптографічно сильним RNG. Стандарт C ++ дозволяє реалізовувати його за допомогою PRNG, ефективно щоразу повертаючи ту саму послідовність , тому цілком очевидно, що ніхто не повинен використовувати її для шифрування.
Дмитро Григор’єв

Ну правда, я забув, що немає гарантії, що це добре, xD. Це є хорошим у багатьох реалізаціях, але MinGW є винятком безумовного переможця в концепції конструкції , що дає вам як гарна якість випадкових чисел , як платформа здатна, розгромивши основну мету бібліотеки. (Що, як ви кажете, не криптовалюта, а висівання PRNG для інших цілей). ( Чому я отримую однакову послідовність для кожного запуску з std :: random_device з mingw gcc4.8.1? ). Це було б прийнятно на платформі без будь-якої ентропії (мінімально вбудований пристрій), але не на x86 Windows!
Пітер Кордес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.