TODO — открытые вопросы BOT 18/2568¶
Дата: 2026-04-23 Связанные документы: - 01-response.md — официальный ответ - 02-internal-notes.md — внутренний разбор с решениями
Список вопросов, которые нужно закрыть для полного соответствия BOT Notification 18/2568. Формат:
[ ]— открыт,[~]— в работе,[x]— закрыт. Разделено на блоки: Организационные / Compliance / Legal, Продуктовые, Инженерные.
A. Организационные / Compliance / Legal¶
- A-1 Назначить Security / Brand Protection officer (кто отвечает за fake apps monitoring, TB-CERT feed, incident response).
- A-2 Подписать партнёрское соглашение с Google Play Protect — takedown flow для поддельных приложений. Требует DUNS, юр. лица.
- A-3 Подписать партнёрское соглашение с Apple App Store Brand Protection.
- A-4 Оформить подписку на TB-CERT feed (список high-risk устройств). Требует юр. шаг — уточнить у BOT, обязательно ли для e-Money operator быть членом TB-CERT.
- A-5 Согласовать с compliance/legal конкретные пороги step-up authentication:
- Per-transaction threshold (предложение: 50 000 THB).
- Daily cumulative threshold (предложение: 200 000 THB).
- Нужно ли использовать KYC tier как модификатор?
- A-6 Уточнить у BOT, какие точно значения daily/monthly limits требуются для e-Money Tier 1 и Tier 2 — свериться с текущими значениями в
payment_limits. - A-7 Согласовать policy по root/jailbreak: hard-block или soft-warn? BOT формально требует hard-block.
- A-8 Согласовать policy по одновременно запущенным accessibility / screen-sharing приложениям: hard-block на high-value / soft-warn на остальных?
- A-9 Выбрать исполнителя face liveness: Gemini multi-frame vs AWS Rekognition Face Liveness ($0.025/check) vs FaceTec (commercial). Решение зависит от точности и стоимости.
- A-10 Определить retention policy для attestation token логов и
user_deviceзаписей после revoke (предложение: 1 год). - A-11 Подготовить evidence pack для будущего внешнего аудита: скриншоты TLS-конфига, pin-list, политики, результаты пентеста.
- A-12 Запланировать pre-launch пентест мобильного приложения (third-party).
B. Продуктовые¶
- B-1 Решить UX для «1 user per device»: что делает пользователь, желающий переключить аккаунт? (logout всех других устройств / confirm screen / запрет переключения без revoke).
- B-2 Решить UX для force-update: full-screen модал с deep link в Store? Локализация сообщений (TH, EN, RU).
- B-3 Решить UX для step-up: экран с selfie + liveness внутри платёжного flow — прерывать или открывать модально?
- B-4 Решить UX для screen-capture / accessibility предупреждения — блокировать полностью или показывать dismissable warning?
- B-5 Решить UX для анти-скриншот: FLAG_SECURE на всех sensitive экранах vs только платежи + KYC. Влияет на support (клиент не может прислать скриншот своей проблемы).
- B-6 Определить behaviour «баланс скрыт при возврате из background» — тап + биометрия раскрывает? Опция в настройках?
- B-7 Согласовать тексты email / in-app баннера «We never ask to click links to verify identity» (TH, EN, RU).
- B-8 Определить, какое количество активных устройств на пользователя разрешено (предложение: 3, но уточнить).
C. Инженерные (разработка)¶
C.1 Документация и политики¶
- C-1.1 Добавить раздел «Communication Policy» в
docs/11-security-policy.md(no-links policy). - C-1.2 Добавить раздел «Mobile Device Security» §10 в
docs/11-security-policy.md(объединённая спека по attestation / device binding / root-detect / screen protection). - C-1.3 Добавить таблицу justifications для permissions в
docs/01-mobile-app.md. - C-1.4 Написать runbook
docs/runbooks/fake-app-response.md. - C-1.5 Написать runbook
docs/runbooks/jwt-key-rotation.md(emergency rotation). - C-1.6 Обновить §7.2
docs/11-security-policy.md— liveness из P2 в P0.
C.2 Backend (Serverpod / PM)¶
- C-2.1 Модель
UserDevice(spy.yaml + миграция). - C-2.2 Модель
DeviceBlocklistEntry(spy.yaml + миграция). - C-2.3 Модель
AppVersion(spy.yaml + миграция). - C-2.4
AuthEndpoint.registerDevice/listMyDevices/revokeDevice. - C-2.5 Добавить claim
device_idв JWT; validate в middleware. - C-2.6
SecurityEndpoint.attestDevice({token, nonce})+ интеграция с Play Integrity API / Apple App Attest. - C-2.7
AppVersionEndpoint.check({platform, version})+ Gateway middleware 426 Upgrade Required. - C-2.8 Расширить
Intentstate machine: новый stateAWAITING_STEP_UP. - C-2.9
PaymentEndpoint.confirmStepUp(intentId, selfieUrl)+ кэш успешного step-up (Redis, 15 мин). - C-2.10 Добавить
payment_limits.step_up_threshold(column add via spy.yaml). - C-2.11 Реализовать face-match для step-up в
KYCService(переиспользование Gemini client). - C-2.12 Cron-job для импорта TB-CERT feed в
device_blocklist. - C-2.13 Admin Panel: страница
/settings/app-versions. - C-2.14 Admin Panel: страница
/security/devices(список устройств, revoke). - C-2.15 Admin Panel: страница
/security/device-blocklist. - C-2.16 Алерт: >1% операций близко к дневному лимиту.
- C-2.17 Добавить события в Unified Log:
security.attestation.failed,security.device.rooted,security.fake_app.detected,security.screen_capture.detected,security.concurrent_app.detected,security.device_blocklist.hit,security.app_version.outdated. - C-2.18 Ротация JWT signing key: JWKS с
kid(если ещё не сделано). - C-2.19 Добавить backup TLS certificate pin (primary + backup) и задокументировать процедуру ротации.
C.3 Flutter (onewallet_base_flutter)¶
- C-3.1 Интеграция
device_info_plus+ стабильныйdeviceId(Keychain / EncryptedSharedPreferences). - C-3.2 Вызов
registerDeviceпосле login / register. - C-3.3 Экран настроек «Мои устройства» (список + revoke).
- C-3.4 Интеграция Play Integrity SDK (Android).
- C-3.5 Интеграция App Attest (iOS).
- C-3.6 Вызов
attestDeviceпри каждом re-auth (cold start, after logout). - C-3.7 FLAG_SECURE на sensitive экранах (Android) — через
flutter_windowmanager. - C-3.8 Blur overlay в
applicationWillResignActive(iOS, native channel). - C-3.9 Observer
UIScreen.main.isCaptured(iOS) — блок sensitive UI при captured. - C-3.10 Jailbreak/root detection —
freeraspилиflutter_jailbreak_detection. - C-3.11 Обфускация release-сборки:
--obfuscate --split-debug-info=. - C-3.12 R8/ProGuard в
android/app/build.gradle. - C-3.13 Проверить iOS Release settings: STRIP, POSTPROCESSING, no debug logs.
- C-3.14 Audit permissions:
AndroidManifest.xml+Info.plist— удалить лишние. - C-3.15 Проверка версии приложения на старте + каждые 6 часов → force-update UI.
- C-3.16 Step-up UI: selfie + liveness flow внутри платежа.
- C-3.17 Accessibility services check (Android, native channel) + предупреждающий оверлей.
- C-3.18 Welcome/Settings: баннер «We never ask to click links».
- C-3.19 Баланс скрыт при возврате из background (тап + биометрия).
- C-3.20 Линтер:
avoid_printв release, удалить всеdebugPrint. - C-3.21
dart-defineдля всех секретов — убедиться, что в коде нет хардкода.
C.4 Email / коммуникации¶
- C-4.1 Обновить все email-шаблоны в
projects/onewallet_base/onewallet_base_server/lib/src/mail/— добавить disclaimer о no-links-policy. - C-4.2 Локализация disclaimer (TH, EN, RU).
C.5 Тестирование и аудит¶
- C-5.1 Unit + integration тесты для
registerDevice/attestDevice. - C-5.2 E2E тест step-up flow на high-value transaction.
- C-5.3 Golden test для UI со включённым FLAG_SECURE (смоки).
- C-5.4 Smoke тест: залогиниться под user_A на device, залогиниться под user_B на том же device → user_A должен получить force-logout.
- C-5.5 Pentest mobile app (third-party) — перед go-live.
- C-5.6 Pentest backend attestation endpoints (third-party).
План по фазам¶
Фаза 0 — 1 неделя (быстрые победы, без инженерии)¶
- A-5, A-6, A-7, A-8, A-9 — решения от compliance/legal
- C-1.1, C-1.3, C-1.4, C-1.5, C-1.6 — документация
- C-3.14, C-3.20, C-3.21 — audit permissions, удалить debug prints
- C-4.1, C-4.2 — email disclaimer
- C-3.11, C-3.12, C-3.13 — включить обфускацию (ничего больше не трогая)
Фаза 1 — 2–3 недели (mobile hardening basic)¶
- C-3.1…C-3.3 — device binding client
- C-2.1, C-2.4, C-2.5 — device binding backend
- C-3.7, C-3.8, C-3.9 — screen protection
- C-3.10 — root/jailbreak detect
- C-2.3, C-2.7, C-3.15 — force update
- C-3.18, C-3.19 — UI disclaimers и балансы
Фаза 2 — 2–3 недели (attestation + step-up)¶
- C-2.6, C-3.4, C-3.5, C-3.6 — Play Integrity / App Attest
- C-2.8, C-2.9, C-2.10, C-2.11, C-3.16 — step-up flow
- C-2.17, C-2.18, C-2.19 — logging и ротация ключей
Фаза 3 — 1–2 недели (device blocklist + concurrent apps)¶
- A-4 (параллельно, юр.) — подписка TB-CERT
- C-2.2, C-2.12, C-2.15 — device blocklist
- C-3.17, C-2.14 — concurrent apps
- C-2.13 — admin UI для app_versions
Фаза 4 — параллельно с Фазой 3 (Brand Protection)¶
- A-1, A-2, A-3 — юр. оформление
- C-1.2 — финальная документация
Фаза 5 — 1 неделя (тесты + pentest)¶
- C-5.1…C-5.6 — все тесты и pentest
- A-11, A-12 — evidence pack и финальный аудит
Общая оценка: 8–10 недель с двумя разработчиками (mobile + backend) и привлечением compliance/legal.