| Масовий експорт даних
|
Ризик витоку даних.; "CREATE_API_TOKEN",
Орієнтир: FIDO Alliance описує FIDO2 як набір стандартів, де WebAuthn є собою web API для FIDO-автентифікації, а CTAP2 надає можливість використовувати зовнішні автентифікатори — security keys або мобільні пристрої — через USB, NFC або BLE.; Тип
event_type="FIDO2_CREDENTIAL_REGISTERED",
Див.; 18.; додатково
5.; |-
|
device_name
|
varchar
|
}
"user": {
"timeout": 300000,
"backup_state": verification_result.get("backup_state"),
14.; План впровадження FIDO2 в K2 ERP"id": str(user.id),
def verify_fido2_login(user: "User", assertion_response: dict, db: "Session") -> bool:
6.; Де FIDO2 має бути обов’язковимif user.role in ["SUPER_ADMIN", "ADMIN", "CFO", "CHIEF_ACCOUNTANT"]:
db.commit()
| -
|
sign_count
|
integer
|
Лічильник підписів, якщо підтримується.; Браузер передає challenge автентифікатору.; №
public_key=credential.public_key,
},
GET /api/v1/security/fido2/credentials
|
YubiKey, Feitian, Titan Key або інший FIDO2-сумісний ключ.; |-
|
CTAP2
|
Він підсвічується червоним.; Критерій
6.; Очікуваний результат
9.; Модель даних FIDO2
FIDO2 — це сучасний стандарт автентифікації, який надає можливість входити в систему без класичного пароля або використовувати сильний другий фактор, захищений криптографією.; Очікуваний результат
Червона зона: адміністратори, фінансовий блок, бухгалтерський обліковий облік або керівники входять у ERP через пароль, SMS або email-код без FIDO2.; return False
Етап 4.; Пілот
"attestation": "none",
"user_id": user.id,
Етап 1.; Аудит доступів
| Super Admin
|
Повний контроль над системою.; Контроль
"pubKeyCredParams": [
</syntaxhighlight>
POST /api/v1/security/fido2/credentials/{credential_id}/revoke
"authenticator_type": credential.authenticator_type,
NIST SP 800-63B Revision 4 зазначає, що застосунки рівня AAL2 повинні пропонувати phishing-resistant варіант автентифікації.; !; користувач системи відкриває K2 ERP.; |-
|
credential_id
|
uuid
|
-
|
AC-13
|
Admin recovery.; :contentReference [oaicite:2]{index=2} CISA додатково прямо вказує, що єдиною широко доступною phishing-resistant автентифікацією є собою FIDO/WebAuthn.;== 5.; Як функціонує FIDO2 у K2 ERP ==
7.; FIDO2 для критичних дій
3.; FIDO2, passkeys і security keys
| id
|
uuid
|
надає можливість використовувати USB, NFC або BLE security key.; Стан
audit_logger.log(
if not is_valid:
|
-
|
backup_state
|
boolean
|
Чи є собою credential у backup-синхронізації.; Критерій
)
data={
)
"challenge": challenge,
13.2.; Проблемні користувачі
11.4.; Перевірка входу
FIDO2 складається з двох ключових частин:
db=db,
"status": "PENDING",
6.; |}
10.3.; Почати вхід через FIDO2
ERP — це платформа, де компрометація доступу має змогу мати прямі фінансові наслідки.; |-
|
origin
|
varchar
|
USB/NFC security key.; Дія
POST /api/v1/security/fido2/step-up/verify
|
}
<pre>
<div style="border-left: 8px solid #1565c0; background: #e3f2fd; padding: 14px 18px; margin: 16px 0;">
<syntaxhighlight lang="python">
=== Етап 2.; Політика FIDO2 ===
|-
| id
| uuid
| ID challenge.; Ризик
return True
expected_rp_id="erp.example.com",
== 15. Acceptance Criteria ==
<pre>
credential.last_used_at = utc_now()
<pre>
!; '''FIDO2 / WebAuthn / passkeys''' виступає ключовою рисою '''Критично істотно:''' SMS-коди, email-коди, TOTP і push-підтвердження зменшують ризик злому, але не є собою в цілому захищеними від phishing.; :contentReference [oaicite:0]{index=0}
is_valid = fido2_service.verify_assertion(
|-
| id
| uuid
| ID події.; |-
| Passkey
| style="background:#c8e6c9;" | Так
| style="background:#c8e6c9;" | Так
| Зручний сучасний варіант.; | Він бачить покриття FIDO2 по ролях.; Захищає від phishing
|-
| AC-9
| користувач системи змінює банківські реквізити.; |-
| payload
| jsonb
| Технічні інформаційні дані без секретів.; | style="background:#ffcc80;" | Рекомендовано
|-
| style="background:#ffcc80;" | Віддалений доступ
| Вищий ризик phishing і компрометації.; Автентифікатор підписує challenge приватним ключем.; |-
| Push із number matching
| style="background:#c8e6c9;" | Так
| style="background:#fff9c4;" | Краще
| Менше ризику випадкового approve.; |-
| AC-16
| є собою admin без FIDO2.; |-
| user_id
| uuid
| користувач системи.; 1.; !; | style="background:#c8e6c9;" | Must have
|-
| Заборона SMS для admin
| SMS не допускається як ключовий метод для admin.; |-
| challenge
| text
| Challenge для WebAuthn.; | Він показується в контрольному списку.; Натискає «Додати FIDO2 / passkey».; | платформа вимагає step-up FIDO2.; |-
| AC-18
| є собою втрачений ключ.; |-
| created_at
| timestamp
| Дата створення.; {| class="wikitable"
=== 8.2.; Рекомендовані правила ===
!; характеристика
[[Категорія:FIDO2]]
POST /api/v1/security/fido2/registration/verify
<div style="border-left: 8px solid #c62828; background: #ffebee; padding: 14px 18px; margin: 16px 0;">
user_id=user_id,
def is_fido2_required(user: "User", action: str | None = None, context: dict | None = None) -> bool:
"APPROVE_PAYMENT",
|-
| Super Admin із FIDO2
| 100%
| style="background:#c8e6c9;" | Норма
|-
| Адміністраторів із FIDO2
| 100%
| style="background:#c8e6c9;" | Норма
|-
| Фінансових ролей із FIDO2
| 80%
| style="background:#ffcc80;" | Потрібна дія
|-
| Бухгалтерів із FIDO2
| 76%
| style="background:#ffcc80;" | Потрібна дія
|-
| Користувачів тільки з SMS
| 18
| style="background:#ef9a9a;" | Замінити
|-
| Втрачених ключів
| 2
| style="background:#ffcc80;" | Контроль
|-
| Ключів без використання понад 90 днів
| 11
| style="background:#fff9c4;" | Перевірити
|-
| Підозрілих FIDO2-помилок
| 3
| style="background:#ef9a9a;" | Критично
|}
{| class="wikitable"
POST /api/v1/security/fido2/credentials/{credential_id}/mark-lost
user_id=user.id,
== 16.; Висновок ==
db.commit()
assertion_response=assertion_response,
8.; | Вхід у K2 ERP через passkey.; | Реєстрація відхиляється.; користувач системи підтверджує вхід на пристрої або ключі.; | style="background:#c8e6c9;" | Must have
|-
| FIDO2 для адміністраторів
| Усі адміністратори повинні мати FIDO2.; |-
| AC-2
| користувач системи додає passkey.;=== 15.3. Step-up FIDO2 ===
'''Ризик:''' якщо вхід у ERP захищено тільки паролем, SMS-кодом або TOTP-кодом, користувача все ще можна атакувати через phishing-сайт, який імітує сторінку входу.; | style="background:#c8e6c9;" | Must have
|-
| Step-up FIDO2 для критичних дій
| Потрібне повторне підтвердження.; №
],
</pre>
!; | платформа вимагає step-up FIDO2.;== 10.; API K2 ERP для FIDO2 ==
'''Критично істотно:''' recovery-процедура не повинна бути слабшою за FIDO2.; Правило
!; | style="background:#c8e6c9;" | Must have
|-
| Мінімум 2 зареєстровані ключі для admin
| ключовий і резервний ключ.; Для адміністратора, бухгалтера, фінансового директора і керівника стандартом має бути '''FIDO2 або passkey'''.; Приватний ключ залишається на пристрої або security key.; | style="background:#ef9a9a;" | Обов’язково
|-
| style="background:#ffcc80;" | HR / зарплата
| Персональні й зарплатні інформаційні дані.; | style="background:#c8e6c9;" | Must have
|-
| Recovery через погодження
| Відновлення доступу до admin-акаунта потребує погодження.; Показник
if not credential or credential.status != "ACTIVE":
|-
| FIDO2
| Стандарт phishing-resistant автентифікації.; K2 ERP перевіряє підпис публічним ключем.; |}
=== 10.2.; Завершити реєстрацію ключа ===
{| class="wikitable"
</pre>
7.; |-
| Security key
| Фізичний ключ автентифікації.; |-
| authenticator_type
| varchar
| PLATFORM або ROAMING.;=== 10.6.; Відкликати ключ ===
!; |-
| Генерація API token
| style="background:#ef9a9a;" | Створення прихованого доступу.; |-
| challenge_type
| varchar
| REGISTRATION, LOGIN, STEP_UP, RECOVERY.; | style="background:#c8e6c9;" | Step-up FIDO2 + audit log.; |-
| created_at
| timestamp
| Дата створення.; return False
credential_id=assertion_response ["credential_id"],
!;== 17.; Джерела ==
"credential_id": verification_result ["credential_id"],
3.; операційна дія
* визначити ролі, для яких FIDO2 обов’язковий;
* визначити дозволені типи ключів;
* визначити, чи дозволені passkeys;
* визначити, чи потрібні hardware keys для admin;
* визначити recovery-процедуру;
* визначити step-up FIDO2 для критичних дій.;</div>
=== 13.1.; KPI адміністратора безпеки ===
!; !; |-
| status
| varchar
| ACTIVE, LOST, DISABLED, REVOKED.; !; Роль
</div>
<pre>
У K2 ERP можуть зберігатися:
<div style="border-left: 8px solid #c62828; background: #ffebee; padding: 14px 18px; margin: 16px 0;">
"origin": "https://erp.example.com",
</div>
<syntaxhighlight lang="python">
"backup_eligible": verification_result.get("backup_eligible"),
</pre>
{| class="wikitable"
7.; |}
"user_id": user_id,
"userVerification": "required",
{| class="wikitable"
</pre>
* фінансові документи;
* банківські виписки;
* платежі;
* зарплати;
* податкові інформаційні дані;
* контрагенти;
* договори;
* реквізити;
* ціни;
* знижки;
* залишки;
* виробничі інформаційні дані;
* управлінська формування звітів;
* інтеграції з банками, ПРРО, податковою, маркетплейсами та електронним підписом.; K2 ERP створює WebAuthn registration challenge.; |}
"challenge": challenge,
POST /api/v1/security/fido2/authentication/options
=== 10.7.; Позначити ключ як втрачений ===
)
{| class="wikitable"
[[Категорія:Контроль доступу]]
|-
| Пароль
| style="background:#ef9a9a;" | Ні
| style="background:#ef9a9a;" | Ні
| Найслабший варіант для ERP.;=== 15.4. Recovery ===
"displayName": user.full_name,
!; |-
| ip_address
| varchar
| IP.; |-
| aaguid
| varchar
| Ідентифікатор моделі автентифікатора, якщо доступний.; |-
| credential_id
| text
| ID WebAuthn credential.; Ризик
=== 10.8.; Step-up FIDO2 для критичної дії ===
"sign_count": verification_result.get("sign_count", 0),
{| class="wikitable"
</div>
!; |-
| AC-8
| користувач системи із роллю admin не має FIDO2.; |-
| Passkey
| FIDO-облікові інформаційні дані на пристрої або в password manager.; Тип
=== 8.1.; Мінімальні правила ===
<pre>
=== 15.5. Dashboard ===
1.; характеристика
"CHANGE_BANK_DETAILS",
'''Правильне рішення для бізнесу для K2 ERP:''' впровадити FIDO2 як ключовий або пріоритетний метод входу для критичних ролей: адміністраторів, фінансових користувачів, головного бухгалтера, керівників, HR / зарплати, користувачів із віддаленим доступом і користувачів, які виконують критичні дії.; Критерій
POST /api/v1/security/fido2/registration/options
return credential
"authenticatorSelection": {
=== Етап 5.; Масове впровадження ===
)
'''Зелена зона:''' K2 ERP використовує FIDO2 / passkeys для критичних ролей, step-up FIDO2 для небезпечних операцій, dashboard покриття ключами, журнал подій і контроль recovery.; Значення
'''Правильна модель:''' K2 ERP ніколи не зберігає приватний ключ користувача.;=== 9.3. fido2_events ===
{| class="wikitable"
db.commit()
},
</div>
=== Етап 3.; Технічна реалізація ===
== 1.; Що таке FIDO2 ==
return {
<div style="border-left: 8px solid #6a1b9a; background: #f3e5f5; padding: 14px 18px; margin: 16px 0;">
def save_fido2_credential(user_id: str, verification_result: dict, db: "Session") -> "Fido2Credential":
=== 5.1.; Реєстрація ключа ===
payload={"credential_record_id": str(credential.id)},
<div style="border-left: 8px solid #2e7d32; background: #e8f5e9; padding: 14px 18px; margin: 16px 0;">
=== 11.3.; Збереження credential ===
!; * CISA: Phishing-resistant MFA.; | style="background:#c8e6c9;" | Must have
|-
| Журнал FIDO2-подій
| Реєстрація, вхід, помилка, видалення ключа.; |}
"transport": verification_result.get("transport"),
"name": user.email,
return True
!; |-
| AC-10
| Адміністратор створює API token.; | Вхід відхиляється.; №
"public_key": verification_result ["public_key"],
<pre>
"challenge_type": "REGISTRATION",
{"type": "public-key", "alg": -7},
</syntaxhighlight>
Для адміністраторів, бухгалтерії, фінансів і керівників ERP потрібна сильніша автентифікація.; |-
| public_key
| text
| Публічний ключ.; * NIST SP 800-63B Revision 4.; |-
| status
| varchar
| PENDING, PASSED, FAILED, EXPIRED.; |-
| created_at
| timestamp
| Дата.; | Ключ позначається LOST або REVOKED.; * Внутрішні вимоги K2 ERP до доступів, MFA, FIDO2, журналювання та критичних дій.; |}
Потрібно передбачити:
return user.security_policy.require_fido2_for_remote_access
"authenticator_type": verification_result.get("authenticator_type"),
!; |-
| Roaming authenticator
| Переносний автентифікатор.; Роль / зона
!; Що означає
* [[K2 ERP]]
* [[Кібербезпека ERP]]
* [[MFA]]
* [[2FA]]
* [[FIDO2]]
* [[WebAuthn]]
* [[CTAP2]]
* [[Passkeys]]
* [[Security Key]]
* [[TOTP]]
* [[API Security]]
* [[Журнал аудиту]]
* [[Incident Response]]
* [[Zero Trust]]
audit_logger.log(
<pre>
== 12.; Recovery та втрата ключа ==
4.; з цієї причини recovery має бути сильним і контрольованим.; |}
POST /api/v1/security/fido2/authentication/verify
credential = fido2_credential_repository.create(
"rp_id": "erp.example.com",
|
| AC-12
|
користувач системи повідомляє про втрату ключа.; Очікуваний результат
payload={
9.; | style="background:#c8e6c9;" | Step-up FIDO2 + двоетапне погодження.; |-
|
CTAP2
|
-
|
AC-7
|
WebAuthn + CTAP2.; |-
|
Масовий експорт клієнтів
|
Витік бази.; Приклад
</syntaxhighlight>
"status": "ACTIVE",
FIDO2 — це один із найсильніших практичних способів захистити ERP від phishing і викрадених паролів.; 2.;
10.4.; Завершити вхід через FIDO2
|
; Очікуваний результат
<syntaxhighlight lang="python">
|
| Зміна банківських реквізитів
|
Підміна рахунку.; |-
|
AC-14
|
Recovery завершено.; характеристика
5.2.; Вхід користувача
event_type="FIDO2_LOGIN_FAILED",
|
| WebAuthn
|
style="background:#c8e6c9;" | Step-up FIDO2 + погодження.; | style="background:#ef9a9a;" | Обов’язково
|
| Фінансовий директор
|
-
|
Вимкнення інтеграції
|
Зупинка бізнес-процесу.; |-
|
user_id
|
uuid
|
користувач системи.; user_id=user.id,
5.; Окремо варто відзначити які користувачі мають FIDO2, які досі використовують слабкі методи MFA, які ключі зареєстровані, які втрачено, які входи були підозрілими і які ролі не можна допускати до ERP без phishing-resistant автентифікації.; * CISA: More than a Password.; | Реєстрація не приймається.; :contentReference [oaicite:3]{index=3}
|
; Коментар
- FIDO Alliance: Passkeys.; Критерій
credential = fido2_credential_repository.get_by_credential_id(
},
4.; Чим FIDO2 сильніший за SMS, TOTP і push
9.1. fido2_credentials
|
; характеристика
- WebAuthn registration;
- WebAuthn authentication;
- credential storage;
- challenge storage;
- origin / RP ID validation;
- credential revocation;
- lost key flow;
- FIDO2 events;
- dashboard.; Поточний метод
|
Подія логуються, користувач системи реєструє новий ключ.; |}
return False
користувач системи має змогу втратити security key або пристрій із passkey.; | Потрібне погодження другим адміністратором.; | Ключ реєструється, публічний ключ зберігається.; * знайти всіх адміністраторів;
- знайти користувачів фінансових ролей;
- знайти бухгалтерію;
- знайти HR / зарплату;
- знайти керівників;
- знайти користувачів із віддаленим доступом;
- знайти користувачів тільки з SMS;
- знайти користувачів без MFA.; Це означає, що ключ не підтвердить вхід на фальшивому домені.; | style="background:#c8e6c9;" | Must have
|
11.2.; Створення registration challenge
- FIDO2 для всіх фінансових ролей;
- FIDO2 для користувачів із доступом до зарплати;
- FIDO2 для користувачів із віддаленим доступом;
- passkeys для зручного входу з корпоративних пристроїв;
- фізичні security keys для адміністраторів;
- hardware security key як резерв для керівника;
- заборона реєстрації невідомих пристроїв без підтвердження;
- регулярний аудит зареєстрованих FIDO2-ключів.; |-
|
WebAuthn
|
API браузера для входу через FIDO.; Поле
)
|
Вхід блокується або вимагається реєстрація FIDO2.; !; db=db,
|
; !;=== 15.1.; Реєстрація FIDO2 ===
- бухгалтерський обліковий облік;
- фінансовий блок;
- HR;
- керівники;
- віддалені користувачі;
- поступова відмова від SMS.; | style="background:#ffcc80;" | Рекомендовано
|
| Керівники
|
style="background:#ef9a9a;" | Обов’язково
|
| Адміністратор K2 ERP
|
}
]:
"CHANGE_USER_ROLE",
audit_logger.log(
|
| AC-5
|
Сесія створюється після успішної перевірки assertion.; | Passkey реєструється як platform authenticator.; |-
|
AC-3
|
Challenge прострочений.; 3.; "name": "K2 ERP",
Управлінський результат: керівник і адміністратор безпеки повинні бачити.; характеристика
},
|
| AC-15
|
Touch ID, Face ID, Windows Hello.; | style="background:#c8e6c9;" | Step-up FIDO2 адміністратора.; №
|
-
|
AC-4
|
style="background:#c8e6c9;" | Step-up FIDO2 + журнал.; платформа створює authentication challenge.;
)
|
-
|
AC-6
|
користувач системи використовує невідомий ключ.; Поле
11.1.; Перевірка, чи потрібен FIDO2
9.2. fido2_challenges
4.; * мінімум два ключі для адміністраторів;
- резервний hardware key;
- recovery codes;
- заявка на відновлення;
- перевірка особи користувача;
- погодження другим адміністратором;
- журнал recovery;
- обов’язкове відкликання втраченого ключа;
- обов’язкова реєстрація нового FIDO2-ключа;
- тимчасовий доступ тільки з коротким TTL.; |-
|
TOTP
|
Так
|
Ні
|
-
|
user_id
|
uuid
|
-
|
user_agent
|
text
|
Браузер / пристрій.; Очікуваний результат
|
-
|
AC-11
|
class="wikitable"
if context and context.get("remote_access") is True:
=== 10.1.; Почати реєстрацію ключа ===
!; | USB/NFC/BLE security key.; !; |-
| Зміна ролі користувача
| style="background:#ef9a9a;" | Розширення доступу.; |-
| backup_eligible
| boolean
| Чи має змогу credential бути синхронізованим.; | надає можливість web-додатку K2 ERP працювати з passkeys і security keys.; |-
| risk_score
| integer
| Оцінка ризику.; | Windows Hello, macOS/iCloud Keychain, Android, iOS, 1Password, Bitwarden.; |}
!; |-
| Підтвердження платежу
| style="background:#ef9a9a;" | Фінансова втрата.; !; користувач системи
'''Головне правило:''' для ERP пароль і одноразовий код — це вже недостатньо для критичних ролей.; | платформа вимагає step-up FIDO2 і логування.;[[Категорія:Кібербезпека]]
== 8.; Політика FIDO2 для K2 ERP ==
=== 15.2.; Вхід через FIDO2 ===
[[Категорія:WebAuthn]]
<pre>
},
fido2_challenge_repository.create(
!; |-
| event_type
| varchar
| REGISTERED, LOGIN_SUCCESS, LOGIN_FAILED, STEP_UP_SUCCESS, REVOKED, LOST.; |-
| admin2
| Адміністратор
| style="background:#ef9a9a;" | TOTP без FIDO2
| style="background:#ef9a9a;" | Критично
| Видати security key
|-
| buh_olena
| Бухгалтер
| style="background:#ffcc80;" | SMS
| style="background:#ffcc80;" | Високий
| Перевести на FIDO2 або TOTP
|-
| cfo
| Фіндиректор
| style="background:#c8e6c9;" | FIDO2 security key
| style="background:#c8e6c9;" | Добре
| Без дії
|-
| director
| Керівник
| style="background:#c8e6c9;" | Passkey
| style="background:#c8e6c9;" | Добре
| Без дії
|}
!; Відкриває конфігурація безпеки.; | style="background:#ffcc80;" | Step-up FIDO2
|}
FIDO2 потрібно використовувати не тільки для входу, а й для підтвердження небезпечних операцій.; |-
| Platform authenticator
| Автентифікатор, вбудований у пристрій.; |-
| last_used_at
| timestamp
| Останнє використання.; | Він підсвічується червоним або помаранчевим.; Поле
"credential_id": str(credential.id),
|
| FIDO2 для Super Admin
|
Без FIDO2 super admin не має змогу увійти.; користувач системи входить у K2 ERP звичайним способом.;== 2.; Чому FIDO2 важливий саме для ERP ==
|
| AC-1
|
-
|
FIDO2 security key
|
Так
|
Так
|
Рекомендовано для критичних ролей.; Компонент
"MASS_EXPORT",
challenge = fido2_service.generate_challenge()
|
; Публічний ключ зберігається в K2 ERP.; :contentReference [oaicite:1]{index=1}
event_type="FIDO2_LOGIN_SUCCESS",
"rp": {
| Вхід відхиляється.; |-
|
Push
|
Так
|
Частково
|
є собою ризик MFA fatigue.; Якщо перевірка успішна — створюється сесія.; Статус
|
; Рівень
|
|
|
|