Viber як зброя: використовуємо популярний месенджер для атак на користувача

  1. Зміст статті З кожним днем ​​все частіше власники смартфонів віддають пріоритет мобільним мессенджерам,...
  2. Хто брав участь в дослідженні
  3. Особливості Windows-клієнта Viber
  4. NTLM-аутентифікація
  5. Продовження доступно тільки учасникам
  6. Варіант 2. Відкрий один матеріал

Зміст статті

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

Маленький рісерч Viber

Не так давно стало відомо про уразливості в iMessage . Як виявив незалежний дослідник Росс Маккіллоп (Ross McKillop), попередній перегляд URL розкриває дані про IP-адресу користувача, версії ОС і інші дані про пристрій. Причина полягала в тому, що при побудові прев'юшки запити відправлялися безпосередньо з пристрою. Таким чином, коли iMessage запитував дані про будь-якому сайті, то розкривав адреса користувача і відомості про його пристрої.

Більш коректна архітектура месенджера передбачає попереднє кешування контенту на своїх серверах і подальшу завантаження вже звідти, як це реалізовано, наприклад, в Facebook, Twitter і Skype. Давай розберемося, як будується preview по URL в Viber і які наслідки може мати маленький недолік в проектуванні програмного забезпечення.

Хто брав участь в дослідженні

  • Ігор @almart_oO (автор статті)
  • Ком'юніті cybersec.kz (царків)
  • Тимур Юнусов (Positive Technologies)
  • Сергій Бєлов (Digital Security)
  • Антон «Bo0oM» Лопаніцин (Wallarm)

Для початку просто відправимо повідомлення, що містить коректний URL картинки, розміщеної на нашому сервері, наприклад http: //host/img.jpg, і подивимося логи.

{Sender_ip} "HEAD /img.jpg HTTP / 1.1" 200 0 "-" "Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit / 537.36 (KHTML, like Gecko) QtWebEngine / 5.6.0 Chrome / 45.0.2454.101 Safari / 537.36 "{sender_ip}" GET /img.jpg HTTP / 1.1 "200 45468" - "" Dalvik / 1.6.0 (Linux; U; Android 4.4.2; GT-N7100 Build / KOT49H) "{reciever_ip}" GET /img.jpg HTTP / 1.1 "200 45468" - "" Viber / 6.5.3.266 CFNetwork / 808.1.4 Darwin / 16.1.0 "

Як бачимо, iMessage не був винятком, і Viber аналогічно скомпрометував IP-адреса одержувача повідомлення (reciever_ip). Але що буде, якщо під виглядом картинки ми спробуємо виконати redirect одержувача в довільному напрямку? Повернемо код відповіді сервера 301 і в HTTP-заголовках вкажемо поле Location: http://somehost.ru.

{Sender_ip} "HEAD /img.jpg HTTP / 1.1" 302 0 "-" "Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit / 537.36 (KHTML, like Gecko) QtWebEngine / 5.6.0 Chrome / 45.0.2454.101 Safari / 537.36 "

Лог відрізняється від попереднього відсутністю GET-запитів від відправника і одержувача повідомлення. З чим це може бути пов'язано? Спробуємо у відповідь на HEAD повернути справжній заголовок картинки, а для GET виконати перенаправлення:

{Sender_ip} "HEAD /img.jpg HTTP / 1.0" 200 - "-" "Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit / 537.36 (KHTML, like Gecko) QtWebEngine / 5.6.0 Chrome / 45.0.2454.101 Safari / 537.36 "{sender_ip}" GET /img.jpg HTTP / 1.0 "302 -" - "" Dalvik / 1.6.0 (Linux; U; Android 4.4.2; GT-N7100 Build / KOT49H) "{reciever_ip}" GET /img.jpg HTTP / 1.0 "302 -" - "" Viber / 6.5.3.266 CFNetwork / 808.1.4 Darwin / 16.1.0 "

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

А тепер давай проведемо експеримент з cookie. Розмістимо на сервері простий скрипт для генерації картинки зі значенням з cookie, збільшуючи його на одиницю при кожному запиті:

<? $ C = 0; if (isset ($ _ COOKIE [ 'c'])) $ c = $ _COOKIE [ 'c']; $ Im = imagecreate (200, 15); $ Bg = imagecolorallocate ($ im, 255, 255, 255); imagestring ($ im, 10,90,0, $ c, 1); if ($ _SERVER [ 'REQUEST_METHOD']! == 'HEAD') {// Запобігаємо зміна cookie початковим запитом setcookie ( 'c', $ c + 1, time () + 60 * 60 * 24 * 30); } Imagejpeg ($ im, 'temp.jpeg'); $ Size = filesize ( 'temp.jpeg'); header ( "Content-Type: image / jpeg"); header ( "Content-Length:". $ size); imagejpeg ($ im); imagedestroy ($ im); ?>

У .htaccess додамо записи:

RewriteEngine on RewriteRule c _ (\ d +) \. Jpg $ cookie.php # щоб уникнути кешування

Відправимо два повідомлення з посиланнями на наш хост, наприклад:

http://somehost.ru/c_08.jpg

і

http://somehost.ru/c_09.jpg http://somehost Експеримент з cookie

Як видно з скріншоту, від повідомлення до повідомлення Viber збирає і зберігає видані йому cookies.

Особливості Windows-клієнта Viber

А тепер зазирнемо в директорію Viber, зазвичай це C: \ Users \ username \ AppData \ Local \ Viber. Наявність файлу Qt5WebEngine.dll, як і UserAgent Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit / 537.36 (KHTML, like Gecko) QtWebEngine / 5.6.0 Chrome / 45.0.2454.101 Safari / 537.36, який ми спостерігали при створенні мініатюр , підказує, що використовується Qt-модуль QtWebEngine. Треба сказати, що в більшості Windows-версій популярних браузерів реалізований механізм аутентифікації за допомогою NTLM, що має за замовчуванням обмежений список ресурсів, вхід на які виконується автоматично.

NTLM-аутентифікація

У Firefox дозволені ресурси задаються полем network.automatic-ntlm-auth.trusted-uris в редакторі налаштувань about: config. За замовчуванням цей список порожній.

У Chrome і IE політика безпеки щодо NTLM-аутентифікації будується на основі налаштувань IE (Tools> Internet Options> Security> Internet> User Authentication> Logon). За замовчуванням там заданий параметр Automatic logon only in Intranet zone, що дозволяє Автологін тільки всередині інтрамережі.

Цікаво, а які налаштування безпеки за замовчуванням має QtWebEngine? Один із способів дізнатися це - створити тестове додаток з цим же модулем, наприклад використовуючи середу Qt Designer для Windows. Переспрямуємо GET-запити з сервера по URI /a_1.jpg на попередньо розгорнуту утиліту Responder , Яка реалізує ланцюжок відповідей, необхідних для входу по NTLM. Паралельно запустимо WireShark для аналізу пакетів. Потім, використовуючи вбудований компонент на основі QtWebEngine в Qt Designer, відкриємо a_1.jpg і подивимося історію запитів в WireShark.

jpg і подивимося історію запитів в WireShark

Компонент QtWebEngine в Qt Designer
Компонент QtWebEngine в Qt Designer   Запити NTLM-аутентифікації в WireShark Запити NTLM-аутентифікації в WireShark

Ланцюжок запитів говорить про успішну роботу механізму NTLM-аутентифікації на довільному інтернет-ресурсі. Останній HTTP-запит від клієнта включає дані про користувача Windows, в тому числі ім'я користувача та NTLMv2-хеш пароля. Чи зможемо ми отримати хеш пароля від Windows, відправивши всього одне Viber-повідомлення? Дізнаємося при експлуатації ...

Продовження доступно тільки учасникам

Варіант 1. Приєднайся до товариства «Xakep.ru», щоб читати всі матеріали на сайті

Членство в співтоваристві протягом зазначеного терміну відкриє тобі доступ до ВСІХ матеріалами «Хакера», збільшить особисту накопичувальну знижку і дозволить накопичувати професійний рейтинг Xakep Score! Детальніше

Варіант 2. Відкрий один матеріал

Зацікавила стаття, але немає можливості стати членом клубу «Xakep.ru»? Тоді цей варіант для тебе! Зверни увагу: цей спосіб підходить тільки для статей, опублікованих більше двох місяців тому.


Думаєш, Viber повністю надійний і нездатний тебе підвести?
Але що буде, якщо під виглядом картинки ми спробуємо виконати redirect одержувача в довільному напрямку?
З чим це може бути пов'язано?
Цікаво, а які налаштування безпеки за замовчуванням має QtWebEngine?
Чи зможемо ми отримати хеш пароля від Windows, відправивши всього одне Viber-повідомлення?
Ru»?