Правове
Огляд безпеки
Як Degroshi захищає Ваші дані: шифрування, контроль доступу, зберігання файлів, ізоляція спільних просторів і як повідомити про вразливість.
Коротко
- Увесь трафік передається з використанням TLS. Дані розміщено в ЄС (Railway, Амстердам); файли зберігаються в приватному сховищі Cloudflare R2 і ніколи не є загальнодоступними.
- Ідентифікатори доступу Monobank, ключі бірж і токени збережених карток зберігаються зашифрованими (AES-256-GCM). Паролі, API-ключі та одноразові коди зберігаються у вигляді хешів. Ми ніколи не бачимо повного номера Вашої картки.
- Спільні простори ізольовані за допомогою безпеки на рівні рядків (row-level security) у Postgres: учасник за будь-яких умов може запитувати дані лише тих рахунків, до яких йому надано доступ.
- Чутливі дії (видалення облікового запису) вимагають нещодавнього входу. Для кожної точки доступу API встановлено обмеження частоти запитів.
- Знайшли вразливість? Напишіть на security@degroshi.com. Будь ласка, не перевіряйте її на даних інших людей.
1. Передавання даних і хостинг
- degroshi.com і api.degroshi.com працюють лише через HTTPS (запити через звичайний HTTP переспрямовуються) через вузол нашого хостинг-провайдера, а сертифікати оновлюються автоматично. Браузер ніколи не звертається до API напряму: запити проходять через вебзастосунок, який перевіряє Ваш сеанс і передає їх далі на стороні сервера.
- API, вебзастосунок, база даних PostgreSQL і Redis працюють на Railway у регіоні Амстердам (ЄС), а з’єднання з базою даних захищене TLS.
- Секрети (облікові дані бази даних, ключі постачальників, ключі шифрування) передаються сервісам як змінні середовища хостинг-платформою; вони ніколи не потрапляють до системи керування вихідним кодом.
2. Автентифікація
- Вхід за адресою електронної пошти та паролем (щонайменше 8 символів, обов’язкове підтвердження адреси електронної пошти), через Google або Apple. Паролі хешує наша система автентифікації (Better Auth); ми ніколи не зберігаємо їх у відкритому вигляді.
- Сеанси є випадковими токенами, які зберігаються на сервері; браузер тримає їх у cookie з атрибутами HttpOnly і SameSite. Сеанси у вебзастосунку закінчуються після 7 днів бездіяльності, у застосунках після 60 днів, а сеанс, строк дії якого минув, видаляється під час наступного звернення з ним. Ви можете вийти з облікового запису на інших пристроях.
- Одноразові коди для підтвердження адреси електронної пошти та скидання пароля зберігаються у вигляді хешів, діють кілька хвилин і мають обмежену кількість спроб.
- Для точок доступу входу, реєстрації, скидання пароля та кодів встановлено обмеження частоти запитів з однієї IP-адреси; запити до API обмежуються для кожного користувача.
- Створені Вами API-ключі зберігаються у вигляді хешів і показуються лише один раз. Зовнішні клієнти ШІ отримують доступ через OAuth лише з Вашого явного схвалення, і цей доступ можна відкликати.
- Для видалення облікового запису потрібен сеанс, створений не пізніше ніж 15 хвилин тому, і введення Вашої адреси електронної пошти.
3. Дані під час зберігання
- Ідентифікатори доступу Monobank, API-ключі та секрети бірж, токени збережених карток для продовження підписок і облікові дані підключень ШІ шифруються за алгоритмом AES-256-GCM ключем, який зберігається на сервері, ще до потрапляння в базу даних. Розшифрування відбувається лише для звернення до відповідного постачальника.
- Резервні копії бази даних створює хостинг-провайдер за розкладами, які ми вмикаємо (Railway зберігає щоденні копії 6 днів, щотижневі 27 днів і щомісячні 89 днів), і вони залишаються в тому самому регіоні ЄС.
- Видалені записи вилучаються негайно; лише ідентифікатори видалених записів залишаються в потоці синхронізації до 180 днів, щоб Ваші пристрої могли узгодити дані.
4. Файли
- Аватари, значки просторів, чеки та вкладення зберігаються в приватному сховищі. Жоден файл у ньому не доступний за URL-адресою: API передає файл лише після перевірки того, що Ви маєте право його бачити.
- Завантаження перевіряються за вмістом файлу, а не за назвою чи заявленим типом; зображення, які не пройшли перевірку, відхиляються. Із зображень чеків, що надсилаються постачальнику ШІ, видаляються вбудовані додаткові зображення та сегменти метаданих.
- Коли файл замінено або його запис видалено, об’єкт ставиться в чергу і видаляється зі сховища окремим процесом очищення.
5. Спільні простори
- Кожен запит обмежено певним простором, і для кожної зміни перевіряється Ваша роль (глядачі мають доступ лише для читання).
- Коли власник обмежує учасника окремими рахунками, запити цього учасника виконуються від імені окремої ролі бази даних із політиками безпеки на рівні рядків для кожної таблиці, пов’язаної з рахунками. Те, що учасник може бачити, забезпечує сама база даних, а не окремі частини коду, зокрема й під час роботи помічника ШІ, імпорту та синхронізації. Запит без визначеного користувача не бачить нічого.
6. Безпека ШІ
- Результат роботи ШІ завжди є лише пропозицією; зміни потребують підтвердження в застосунку, а пропозиції втрачають чинність через 24 години.
- Ваші записи передаються моделям як недовірені дані, а не як інструкції, щоб протидіяти атакам через підміну інструкцій (prompt injection).
- Облікові дані, токени, номери карток і рахунків, а також особи інших учасників ніколи не надсилаються постачальникам ШІ. Записи спостереження за роботою ШІ типово не фіксують зміст повідомлень.
7. Платежі та вхідні сповіщення
- Реквізити картки вводяться лише на платіжній сторінці monobank або у формі оплати Paddle. Від monobank Degroshi отримує токен збереженої картки, маскований номер і платіжну систему картки, від Paddle лише платіжну систему картки та останні чотири цифри її номера. Повного номера картки чи коду безпеки ми ніколи не отримуємо. Покупки в застосунках обробляє Apple.
- Сповіщення про платежі від monobank приймаються лише з дійсним підписом (ECDSA над тілом запиту, що перевіряється за опублікованим ключем monobank); сповіщення від Paddle мають містити дійсний підпис (HMAC-SHA256 зі спільним секретом над часовою позначкою й тілом запиту, не давніший за 5 хвилин), і після кожного з них ми повторно зчитуємо дані з API Paddle; сповіщення від RevenueCat мають містити секретне значення авторизації. Платіж зараховується лише після підтвердження його стану.
- Сповіщення Monobank про нові банківські транзакції надходять на секретну адресу, а вирішальною є регулярна синхронізація виписки.
- Push-сповіщення не показують сум, якщо Ви цього не увімкнули, і не надсилаються в Ваші тихі години.
8. Моніторинг і експлуатація
- Помилки передаються до Sentry, у його регіон даних у ЄС (Франкфурт), без заголовків з обліковими даними і без cookie. Метрики, журнали й трасування надходять до Grafana Labs лише з випадковими ідентифікаторами і без фінансових даних. Журнали містять ідентифікатор кореляції, щоб проблему можна було відстежити без розкриття даних.
- Для запитів до бази даних встановлено обмеження часу виконання на стороні сервера; фонові завдання виконуються з обмеженою кількістю повторних спроб.
9. Повідомлення про вразливість
Якщо Ви вважаєте, що знайшли проблему безпеки, напишіть на security@degroshi.com і опишіть її достатньо докладно, щоб її можна було відтворити. Ми підтвердимо отримання протягом 3 робочих днів і повідомлятимемо Вас про хід роботи. Будь ласка:
- дійте добросовісно, уникайте порушення приватності, знищення даних і перебоїв у роботі Сервісу;
- перевіряйте лише на власних облікових записах і даних;
- дайте нам розумний час на усунення проблеми, перш ніж її розголошувати.
Наразі ми не маємо платної програми винагород за знайдені вразливості.
10. Ваша роль
Використовуйте унікальний пароль, оновлюйте свої пристрої, виходьте з облікового запису на спільних комп’ютерах, надавайте ключам бірж лише права на читання і негайно повідомте нас на security@degroshi.com, якщо підозрюєте, що хтось інший отримав доступ до Вашого облікового запису. Цей огляд опубліковано українською та англійською мовами; у разі розбіжностей між ними переважну силу має український текст.