Що таке "добровільні контекстні комутатори"?


34

Я отримав двійковий файл, і я повинен зламати його пароль (домашнє завдання). Була також задана функція (функція, яка є частиною бінарного файлу). Ця функція показала, що рядок введення порівнюється з правильним символом пароля за символом і повертається помилковим миттєво, коли персонаж був невірним (це не безпечний спосіб зробити це, я думаю, тому що протікає час, і ми отримуємо уявлення про правильну довжину пароля як приклад). Але наш викладач додав випадковий таймер, який повертає результат (Правильний / Неправильний), щоб зробити це трохи важче для нас ...

У будь-якому випадку, я вже успішно це зробив із зворотною технікою і отримав правильний пароль. Тепер я граю з ним у командному рядку:

/usr/bin/time -v ./program_name enter_password

За допомогою цієї команди я отримую багато інформації, наприклад, системний час, свопи, час виконання. Але мені найцікавіше "добровільні контекстні комутатори", оскільки чим правильніші символи введеного паролю, тим менше "добровільні контекстні комутатори" " Я отримав!

Чим більше помилкових символів я ввожу, тим більше "добровільних контекстних переключень" я отримую.

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

На моє запитання, що таке "добровільні контекстні комутатори" і чому вони допомогли мені зламати пароль?


5
Вітаємо, що відкрили для себе багате і ще не до кінця зрозуміле поле атак бокових каналів .
zwol

1
@zwol Що ви маєте на увазі під "багатим"? І крім того, ми зараз в класі маємо справу з атаками бічних каналів, вибачте, що я не "повністю зрозумів" його поле, яке швидко ....
cnmesr

15
@cnmesr Я сприйняв це як щирий коментар, а не саркастичний, сказавши, що zwol вважає поле цікавим, оскільки нові відкриття ще робляться. Справа не в тому, що ви не до кінця зрозуміли це, це те, що ніхто його не розуміє повністю, і саме це робить його цікавим.
hvd

3
@hvd cnmesr Так, це я мав на увазі.
zwol

@zwol О, вибачте тоді! Я неправильно трактував вас і сприймав це як напад: p
cnmesr

Відповіді:


36

Сторінка " man" дляtime пояснення концепції добровільних та мимовільних контекстних комутаторів:

The resource specifiers [...] are:
   c      Number of times the process was context-switched involuntarily
          (because the time slice expired).
   w      Number of times that the program was context-switched voluntarily, 
          for instance while waiting for an I/O operation to complete.

(цитата з моєї системи Debian, на пов'язаній сторінці man є трохи інший текст)

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


Наскільки щось із цього пов’язане з програмою перевірки паролем, залежить від того, що насправді робить програма.

З вихідного коду, пов'язаного в коментарях, ми бачимо, що програма викликає usleep()один раз для кожного невідповідного символу, продовжуючи цикл порівняння на наступний символ згодом. Сон - це настільки ж добровільно, як і приношення процесора коли-небудь, тому ці виклики показуватимуться як добровільні контекстні комутатори для кожного не-оброблюваного персонажа.

В Linux ви також можете бачити дзвінки і з strace.

Кінцева затримка відбувається через рандомізований сон T * (rand() % 3), тобто 0, 1 або 2 рази постійної. Це досить груба деталізація, тому її слід легко оцінити, зробивши кілька спроб з одним і тим же паролем.


3
Ось вихідний код функції, про яку я згадував вище, pastebin.com/iTzheD4u Дякую, я перегляну дзвінки з напругою і, сподіваюся, отримаю ще трохи інформації. Про випадковий таймер: Якщо пароль має неправильну довжину, час виходу буде однаковим (дуже швидко) і випадковий таймер не виконується. Якщо довжина пароля правильна, вихід є випадковим, оскільки виконується випадковий таймер.
cnmesr

@cnmesr, о, це чудово!
ilkkachu
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.