Подвійна аутентифікація Вконтакте — секс чи імітація?

Всім привіт! Нещодавно вирішив протестувати апаратний OTP токен з можливістю перепрошивки за NFC, підключивши його до своєї з у vk.com. При цьому натрапив на недоробки в системі двофакторної аутентифікації Вконтакте, які здалися мені досить істотними. Хочу поділитися своїми спостереженнями з вами, так як в самому VK помилок не визнали. Можливо, я трохи параноїк? Цікаво, що скажете ви, хабровчане.

Обмовлюся, що перед тим, як приступити до роботи над статтею, всі свої спостереження я виклав на HackerOne. Жоден з описаних багів Вконтакте не визнали. Але коли перед публікацією статті я вирішив зробити підтверджують скріншоти, виявилося, що один з багів все-таки був виправлений. Те, що до моїх слів прислухалися, не може не радувати. Шкода тільки, що хлопці навіть «дякую» не сказали.
Отже, помилка №1. Статичний секретний ключ.


Щоб підключити до свого аккаунту додаток для генерації OTP, користувач вводить пароль, після чого перед ним відкривається сторінка з секретним ключем, необхідним для випуску програмного токена. Поки все правильно.


Але якщо з якої-небудь причини користувач не активував програмний токен відразу (наприклад, відволікся на важливий дзвінок, або просто передумав і повернувся на головну сторінку), то коли через деякий час він все-таки вирішить отримати токен, йому знову запропонують той самий секретний ключ.
Ускладнює ситуацію ще й те, що протягом півгодини після введення пароля, навіть якщо ви перейшли на головну сторінку або вийшли з облікового запису, а потім знову увійшли, перед показом QR коду з секретом повторно пароль не запитується.



Чим це небезпечно?
Токен Вконтакте, як і будь-який інший TOTP токен працює за досить простим принципом: генерує одноразові паролі за алгоритмом на основі двох параметрів — часу і секретного ключа. Як ви самі розумієте, єдине, що потрібно для компрометації другого фактора аутентифікації — це знати СЕКРЕТНИЙ КЛЮЧ.
Така вразливість залишає зловмиснику дві лазівки:
  1. Якщо користувач відійде від комп'ютера, у зловмисника буде достатньо часу, щоб скомпрометувати його секретний ключ.
  2. Заволодівши паролем користувача, зловмисник легко може підглянути його секретний ключ наперед.


Вирішити питання елементарно просто. Секретний ключ повинен змінюватись кожен раз після оновлення сторінки, як це відбувається, наприклад, в Facebook.
Помилка №2. Новий токен після перевипуску використовує той самий секретний ключ.


На момент публікації статті цей недолік був усунений.
Ситуація, описана вище, посилюється тим, що при повторному випуску сертифіката, Вконтакте не запропонує вам новий секретний ключ. По суті, до вашої сторінці прив'язується 1 секретний ключ і змінити його ви вже не зможете.
Чим це небезпечно?
Якщо ви дізналися, що ваш секретний ключ скомпрометований (наприклад, при першому випуску сертифіката, як описано в першому пункті), подвійна аутентифікація Вконтакте вам більше не потрібна. Сміливо відключайте другий фактор і підберіть пароль сильнішою. Перевипустити токен з новим секретом не представляється можливим.
Якщо Ви втратили телефон, на якому був встановлений маркер, можете зробити те ж саме. Той, до кого в руки потрапив ваш смартфон зможе спокійно використовувати його для входу у ваш аккаунт. Залишилося дізнатися лише пароль. При цьому вся суть двофакторної аутентифікації втрачається. Зрозуміло, що якщо користувач помітить дискредитацію свого облікового запису, він може зв'язатися з супортом, але на це буде витрачено дорогоцінний час, якого у нього може не бути.
Помилка № 3. Відключення другого фактора без запиту одноразового пароля.


Тут все зрозуміло з назви. При відключенні другого фактора, достатньо введення пароля, OTP не запитується.



Чим це небезпечно?
Якщо для відключення подвійної аутентифікації Вконтакте достатньо лише введення пароля, втрачається сама суть двофакторної аутентифікації. А суть двофакторної аутентифікації полягає в тому, що недоліки одного фактора перекриваються перевагами іншого. В vk.com це фактор знання (пароль) і чинник володіння (телефон). Це було придумано для того, щоб компрометації одного з факторів не було достатньо для отримання доступу до аккаунту. Якщо у зловмисника є ваш пароль, для злому аккаунта йому не буде вистачати одноразового пароля, і навпаки, якщо він заволодів телефоном, то йому потрібно буде додатково дізнатися пароль.
Тут же виходить, що досить дізнатися пароль користувача, щоб просто відключити другий фактор аутентифікації. По суті, це перетворює двофакторну аутентифікацію Вконтакте в однофакторную.
Вконтакте пропонує своїм користувачам дуже зручну функцію «Зняти підтвердження з поточного браузера». Я впевнений, що функція користується популярністю і користувачі відключають підтвердження, як мінімум, вдома, і на роботі. Більш того, у більшості користувачів збережені паролі в браузерах, де їх можна легко переглянути та скопіювати.
Уявімо таку ситуацію, ваш колега вирішив пожартувати над вами. Поки вас не було на робочому місці, він зайшов до вас на комп'ютер, подивився в браузері збережені паролі, увійшов в VK і відключив 2FA. Тепер він зможе заходити в ваш аккаунт до тих пір, поки ви не помітите змін, що може статися зовсім не скоро. Ви і раніше не вводили одноразовий пароль на тих пристроях, якими найчастіше користуєтеся, значить для вас нічого не зміниться. А жартівник-колега отримає повний доступ до вашого аккаунту, і ніхто не знає до чого це може призвести.
Якщо б не був виправлений баг з перевипуском токена, коли при повторному випуску сертифіката секретний ключ не змінювався, ситуація могла б стати ще цікавіше! Ваш колега, вже знаючи пароль, міг би відключити 2FA, після чого знову підключити двофакторну аутентифікацію, побачив би при цьому секретний ключ, випустив би собі токен, ідентичний вашому, і міг би читати ваші повідомлення доти, поки живий ваш обліковий запис.
Висновки
При підключенні двоетапної перевірки до аккаунту Вконтакте, з'являється пам'ятка, яка говорить “Навіть якщо зловмисник дізнається Ваш логін, пароль і використаний код підтвердження, він не зможе потрапити на Вашу сторінку зі свого комп'ютера."


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

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.