Шукаємо слабкі місця сучасних менеджерів паролів

  1. Попереджений значить озброєний

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

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

Як екзаменованих були обрані п'ять найбільш популярних рішень для ОС Windows:

Кожен з них ми перевіримо на вразливість до наступних атак:

  • атаці на майстер-пароль;
  • атаці на вміст бази паролів;
  • атаці DLL Hijacking.

І за результатами перевірки поставимо кожному з них відповідну оцінку: погано, задовільно або добре.

Як відомо, менеджери паролів незберігають майстер-пароль деінде на комп'ютері, і кожен раз при використанні менеджера користувач повинен вводити його вручну. Для перехоплення таких паролів, як правило, використовують кейлоггери плюс запис руху курсору і знімки екрану, якщо мала місце віртуальна клавіатура. Однак в нашому випадку ми не будемо писати складні тіньові драйвери для перехоплення натискань клавіш і знімків екранів, так як вони можуть поставити нашу атаку в лабораторні умови і легко детектив антивірусами. Ми розглянемо цікавий, але не новий спосіб отримання пароля прямо з вікна введення через виклик API SendMessage c параметром WM_GETTEXT. Цей спосіб чудовий тим, що багато антивіруси не розпізнає його як потенційно небезпечне діяння, а реалізується він буквально парами рядків коду, плюс для його запуску не потрібна наявність прав адміністратора.

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

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

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

Перш за все нам знадобиться функція, яка буде готувати поле memo для прийняття нових даних і визначати хендл головного вікна під курсором, після чого буде отримувати хендла дочірніх вікон і передавати його подальшої функції для розпізнання вмісту вікна.

void __fastcall TForm1 :: Timer1Timer (TObject * Sender) {Memo1-> Lines-> Clear (); HWND h; POINT Point; GetCursorPos (& Point); h = WindowFromPoint (Point); EnumChildWindows (h, (WNDENUMPROC) EnmWndwsWnd, 0); }

За виведення вмісту дочірніх вікон буде відповідати функція EnmWndwsWnd.

BOOL CALLBACK EnmWndwsWnd (HWND h, LPARAM lParam) {if (IsWindowVisible) {char g [255]; GetClassName (h, g, 255); std :: string text; WPARAM ln = SendMessage (h, WM_GETTEXTLENGTH, 0,0); if (ln> 0) {char * buf = new char [ln + 1]; LRESULT got = SendMessage (h, WM_GETTEXT, ln + 1, (LPARAM) buf); if ((LRESULT) ln == got) text = buf; delete [] buf; Form1-> Memo1-> Lines-> Add ((String) g + ":" + text.c_str ()); }} Return TRUE; }

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

У нашому випадку для виявлення DLL Hijacking можна використовувати широко відомий Procmon. Крім Procmon, також підійде інша відома утиліта API Monitor, де у відповідному меню налаштувань попередньо необхідно вказати перехоплення функційLoadLibrary і LoadLibraryEx. Якщо бібліотека викликалася без вказівки повного шляху, а вказувалося лише кінцеве ім'я файлу, то у нас є всі шанси знайти вразливий DLL-файл. Тепер напишемо невеликий код, який буде сигналізувати про наявність уразливості і як доказ відкривати калькулятор.

#include <windows.h> int WINAPI DllEntryPoint (HINSTANCE hinst, unsigned long reason, void * lpReserved) {WinExec ( "calc.exe", 0); return 1; }

Створена бібліотека буде відкривати калькулятор кожен раз, коли додаток її завантажить, таким чином ми зможемо однозначно судити про наявність DLL Hijacking.

Ну а тепер настав час приступити безпосередньо до оцінки безпеки менеджерів паролів. Першим екзаменованих у нас буде Kaspersky Password Manager. Можливо, віртуальна клавіатура змогла б допомогти йому у випадку з кейлоггер, але в нашому випадку майстер-пароль був отриманий відразу і без будь-яких труднощів. Перший раунд не на користь «Лабораторії Касперського».

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

Отримання майстер-пароля в Kaspersky Password Manager

Другий раунд також виявився за нашої хак-ТУЛЗ. Після введення майстер-пароля збережені дані частково вдалося роздобути в момент їх перегляду або редагування.

Перехоплення збережених даних в Kaspersky Password Manager

Крім усього, KMP виявився схильний і третьою атаці (DLL Hijacking). При старті він намагається завантажити бібліотеку bthprops.cpl. Дана бібліотека знаходиться в системній директорії і необхідна для роботи з Bluetooth-пристроями, однак KMP намагається запустити її без вказівки повного шляху, що і послужило причиною вразливості. Таким же чином відбувається завантаження іншої бібліотеки cryptsp.dll. Досить розмістити шкідливу бібліотеку, яка, наприклад, може містити експлойт для попередніх двох атак, в одній директорії з додатком і перейменувати її в bthprops.cpl, після чого вона зможе завантажуватися щоразу при запуску KMP.

Kaspersky Password Manager відкриває калькулятор при кожному запуску

Підводячи підсумок, можна сказати, що Kaspersky Password Manager виявився далеко не на висоті. Підсумкова оцінка - погано.

Мало хто знає, що Sticky Password є батьком Kaspersky Password Manager. Саме на його основі «Лабораторія Касперського» свого часу розробила власний продукт. Обидва менеджера мають схожим функціоналом і структурою, фактично головна їхня відмінність - це номери версій і дизайн. Незважаючи на те що остання версія Sticky Password вийшла зовсім недавно, програма як і раніше не позбулася всіх тих проблем, якими колись нагородила свого сина. Перша і друга атака успішно видала майстер-пароль і частково вміст бази паролів.

Перша і друга атака успішно видала майстер-пароль і частково вміст бази паролів

Отримання майстер-пароля в Sticky Password

Як і у випадку з Kaspersky Password Manager, третій раунд виявився не на користь Sticky Password: було виявлено ряд вразливостей DLL Hijacking. При запуску програма намагається завантажити кілька динамічних бібліотек з власного каталогу: fitlib.dll, olepro32.dll, profapi.dll. Загальний вердикт такий же, як і у Kaspersky Password Manager. Підсумкова оцінка - погано.

1Password від компанії Agile Bits перший тест пройшов успішно і не дав так просто дістати майстер-пароль, як в попередніх двох випадках. Також дуже порадувало наявність захисної функції Unlock on Secure Desktop, яка блокує будь-який доступ до додатка в момент введення пароля. Єдиним моментом, коли вдалося роздобути майстер-пароль нашої атакою, став лише безпосередній момент створення бази паролів. Однак такий метод малопріменім на практиці, тому його результат ми не враховуємо. Після відкриття бази роздобути збережені дані частково стало можливо при редагуванні або перегляді, як і в попередніх випадках.

Після відкриття бази роздобути збережені дані частково стало можливо при редагуванні або перегляді, як і в попередніх випадках

Перехоплення збережених даних в 1Password

DLL Hijacking також не обійшла стороною і 1Password. Після відкриття бази додаток намагається завантажити бібліотеку midimap.dll. Незважаючи на ряд вразливостей, наявність захисної функції введення пароля все ж схилило до нейтральної точки зору, тому підсумкова оцінка - задовільно.

Добре відомий KeePass відмінно впорався з першою атакою. Як і 1Password, він має в своєму арсеналі функцію контролю доступу до додатка в момент введення пароля. Другу атаку KeePass також стримав гідно. Записані в базі дані можна отримати тільки в момент редагування, при цьому збережені паролі залишаються нерозкритими. Третя атака теж на користь опенсорсний менеджера паролів.

Третя атака теж на користь опенсорсний менеджера паролів

KeePass блокує несанкціонований доступ

Хоча Procmon і показав кілька спроб небезпечною завантаження DLL-файлів, проте зробити на їх основі робочий експлойт не вийшло. Залік на користь GNU-спільноти. Підсумкова оцінка - добре.

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

Навіть в режимі перегляду вдалося легко дістати майже повне вміст форм

Перехоплення збережених даних в RoboForm

Як і в попередньому випадку, Procmon вказав на теоретичну можливість DLL Hijacking, проте створити робочий експлойт не вдалося. Тому третій раунд за RoboForm. За заробленим очками його можна поставити на рівні десь між 1Password і KeePass, але я все ж не став би користуватися менеджером паролів, який в явному вигляді виводить їх на монітор, тому, на мій погляд, підсумкова оцінка «задовільно» цілком заслужена.

З усіх п'яти менеджерів паролів тільки один KeePass зміг успішно протистояти всім трьом атакам. Відкритий код і постійна підтримка з боку ентузіастів зробили дійсно гідний продукт. Хоч RoboForm і 1Password і не обійшлися без вад, але обидва змогли захистити свій майстер-пароль. Що відносно Sticky Password і Kaspersky Password Manager, то жоден з них не зміг уберегтися від атаки на майстер-пароль. Крім цього, вони також відкривають лазівку у вигляді DLL Hijacking, тому застосування даних менеджерів паролів на флеш-накопичувачах може бути використано хакером для поширення шкідливого коду і проведення цільової інсайдерської атаки. Відповідних товарів потрібно дійсно якісне поліпшення безпеки. Підвівши підсумки тестування, що не будемо віддавати перевагу якомусь одному менеджеру, так як воно випливало б з різних суб'єктивно-особистісних факторів, ми ж просто розглядали ці менеджери паролів з точки зору їх безпеки.


Всі згадані в статті програми і вихідні чекають тебе на нашому диску.

Попереджений значить озброєний

  1. Для захисту своїх паролів від описаної методики перехоплення можна налаштувати на комп'ютері спеціальне програмне забезпечення, яке буде здійснювати моніторинг виклику API-функцій MARKDOWN_HASH2ab05fbef5eddf2027d7f05bdeac283dMARKDOWN_HASH і MARKDOWN_HASH84ea011a8379b1eb533f68d1d12fe6a6MARKDOWN_HASH c параметром MARKDOWN_HASHbed4f4e4c653f53c6abf14671add9c05MARKDOWN_HASH. Дану можливість пропонують деякі антивіруси, наприклад, в безкоштовному Firewall від COMODO ця функція встановлена ​​за замовчуванням, в інших, можливо, доведеться поставити настройку вручну. Якщо відбувається несанкціонований доступ до вікон додатка, проактивний захист видасть вікно з попередженням і вибором дії. Однак цей метод не допоможе, якщо тобі часто доводиться використовувати менеджер паролів з флешки або на чужому комп'ютері. В якості надійного рішення можна взяти менеджер паролів, якою володіє захисною функцією подібно UAC і блокує несанкціонований доступ до додатка. Такий функцією, наприклад, володіє KeePass і 1Password.
  2. Для усунення проблеми, пов'язаної з DLL Hijacking, на комп'ютері за допомогою спеціальних утиліт огранивать доступ на запис до відповідних директорії сторонніми додатками. Як і в попередньому пункті, ця функція може бути доступна в деяких антивірусних рішеннях. Що стосується захисту додатків на флешках, тут не все так красиво, але можна використовувати наступний хід конем. Спочатку сконвертіруем файлову систему флешки в NTFS: convert h: / fs: ntfs / nosecurity / x

Дана система дозволяє задати налаштування безпеки для окремих папок і файлів. Можна відразу створити правило тільки читання для директорії з вразливим МП, проте якщо файл з паролями знаходиться там же, ми не зможемо редагувати його в процесі роботи за чужим комп'ютером. Тому можна створити просто файли-пустушки з уразливими DLL-файлами і вже для них задати налаштування тільки читання. 3. В якості додаткової міри захисту паролів в менеджері паролів можна використовувати додаткову прив'язку до ключового файлу або пристрою, однак треба розуміти, що тепер доступ до збережених паролів може бути уразливий до випадкового фактору, наприклад втрати ключового файлу і поломки USB-пристрої.

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