Коротке дослідження безпеки використання месенджера Signal на iOS (iPhone)

💡 Усі статті, обговорення, новини про Mobile — в одному місці. Приєднуйтесь до Mobile спільноти!

В даний час, месенджер Signal де факто використовується багатьма військовими для обміну інформацією. Провів невеликий аудит цього месенджера, щоб з’ясувати, які метадані месенджер Signal передає на сервер під час обміну повідомленнями, яку інформацію може отримати зловмисник при використанні експлоїтів типу Pegasus (NSO group), яку інформацію можна отримати при використанні криміналістичних інструментів типу Cellebrite premium, Graykey, а також наскільки безповоротно видаляється з пристрою інформація (повідомлення, зображення, голосові) при видаленні з чатів листування.

При отриманні nofficafon у Signal про нове повідомлення, робиться GET запит на адресу https://chat.signal.org. І у відповідь в JSON отримуємо закодоване повідомлення.

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

При надсиланні зображення воно відправляється в два етапи. Спочатку сервер Signal повідомляється про бажання відправити зображення, і наш пристрій отримує у відповідь як би «реквізити для завантаження» upload_id та ін., потім вже відправляється саме зображення у зашифрованому вигляді.

Очевидно, що крім версії програми Signal і версії iOS телефону, ніякої додаткової інформації на сервері Signal при обміні повідомленнями не надсилається.

База даних Signal називається нехитро «signal.sqlite», але зашифрована і знаходиться по шляху: «/private/var/mobile/Containers/Shared/AppGroup/<app container>/grdb».

Ключ шифрування від бази даних Signal знаходиться у Keychain за значенням «GRDBKeyChainService». Але якщо на телефон потрапив 0-day експлоїт, або ваш телефон підданий криміналістичному аналізу, то зашифрована база даних вас не врятує. Є багато способів витягти ключ із Keychain і розшифрувати базу даних, наприклад keychain_dumper. За допомогою його сховище ключів розшифровується та дістається ключ шифрування бази Signal.

Далі вже справа техніки... І ось уже базу даних розшифровано.

Усі повідомлення, які ви надсилаєте або отримуєте, знаходяться у таблиці «model_TSInteracfon»

Але є і хороша новина, при видаленні історії чату або окремих повідомлень вони реально видаляються з бази даних без відновлення. Так що чистіть частіше чати.

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

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

Підсумки

Signal досить захищений додаток, який не збирає про вас зайву інформацію. Але якщо ви «зловили» 0-day експлоїт або ваш телефон забрали на криміналістичну експертизу, то всі ваші листування будуть розкриті. Для мінімізації збитків-чистіть частіше листування та перезапускайте програму.

👍ПодобаєтьсяСподобалось3
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Бачимо, що після доставки на телефон повідомлення моментально видаляється з сервера

Ноуп, ви в данному випадку можете тільки стверджувати що повідомлення вам не повернеться при запиті на сервер. Чи видалено воно там по факту або просто маркнуто (isDeleted:1) ви ніколи не дізнаєтесь.

Ще, як на мене, проблемою з точки зору безпеки є те, що він показує, що була переписка — бо навіть якщо всі повідомлення видаляються автоматично — чат залишається, що вказує на сам факт переписки колись у минулому. Хоча логічніше автоматично видаляти пусті чати.

Цікаво, чи так само поводять себе десктопні клієнти та клієнти на Android.

І найцікавіше — коли саме видаляються повідомлення з встановленим терміном автоматичного видалення. Наприклад для чата встановленно автовидалення повідомлень через годину. Повідомлення було прочитано і месенджер закритий (в треє його немає). Чи залишиться повідомлення в базі до наступного запуску (скоріше за все — так, суто моя думка), чи якийсь процес всеж підчистить його?

Це потрібно досліджувати

Підписатись на коментарі