Перейти к основному содержанию
`Ctrl`+`K`

# Политика паролей

## Реализация в системе

За включение парольной политики в системе отвечает флаг «Настройка политики паролей на типе объекта» (`bPasswordSettingsInOT`) в группе «Безопасность и аутентификация» в классе `Btk_Setting` (по умолчанию — `false`).

- Если флаг установлен (`true`), то парольная политика настраивается на типе объекта пользователя (`Btk_UserPasswordSetting`)

- Если флаг не установлен или равен `false`, используются стандартные параметры паролей из класса `Btk_User`. Они настраиваются отдельно на каждом пользователе.

### Параметры из класса Btk_User

Атрибуты, определяющие требования к паролю:

- `bPassSpecSymb` — необходимость наличия хотя бы одного специального символа. По умолчанию — `0` (не требуется);
  допустимые символы: `!@#$%^&*()-+\?/.,№;:`

- `bPassLetterDigit` — обязательное наличие как букв, так и цифр. По умолчанию — `0`.

- `bPassUpperLowerLetter` — необходимость использования как строчных, так и прописных букв. По умолчанию — `0`.

- `nPassMinSymbCnt` — минимально допустимое количество символов в пароле. Значение по умолчанию отсутствует (ограничение не применяется).

### Настройки политики на типе объекта (Btk_UserPasswordSetting)

Атрибуты, определяющие политику управления паролем:

- Все атрибуты из класса `Btk_User` (`bPassSpecSymb`, `bPassLetterDigit`, `bPassUpperLowerLetter`, `nPassMinSymbCnt`) — действуют аналогично вышеописанным.

- `nNonRepeatPassAmount` — количество последних паролей, которые нельзя повторно использовать. По умолчанию отсутствует (повтор разрешён).

- `nDayInactivityCntForUserBlocking` — число дней без активности, после которого пользователь будет заблокирован. Значение по умолчанию — `180`.

- `nMinLifetime` — минимальное количество дней между сменами пароля. Запрещает слишком частую смену. По умолчанию отсутствует.

- `jTempBlockingForUnsuccessfulLogin` — параметры временной блокировки при неудачных попытках входа. JSON-объект с полями:

  - `nNumberOfAttempts` — допустимое число ошибочных попыток входа;

  - `nBlockingTimeMin` — время блокировки (в минутах) при превышении лимита.

- `nValidityPeriod` — срок действия постоянного пароля (в днях).

- `nValidityPeriodTemp` — срок действия временного пароля (в днях).

- `sDaysForNotifyChangePass` — количество дней до окончания срока действия пароля, за которое будет отправлено уведомление о необходимости его смены.

### Настройка политики через типы объектов

При включении флага `bPasswordSettingsInOT` в классе `Btk_Setting` (установке галочки «Настройка политики паролей на типе объекта») политика применяется ко всей системе.

- После включения управление политикой осуществляется через типы объектов класса `Btk_User`.

- Каждому пользователю назначается определённый тип объекта, который определяет применяемые к нему правила парольной политики.

- По умолчанию доступны предопределённые типы объектов, однако допускается создание новых.

### Настройка параметров на типе объекта

Параметры парольной политики настраиваются непосредственно на типе объекта:

1. Перейдите: Настройки системы → Сущности → Типы объектов.

2. В фильтре укажите класс `Btk_User`.

3. Выберите нужный тип объекта из списка.

4. В левой панели перейдите в раздел «Настройки пользователей».

5. Установите требуемые значения параметров парольной политики.

Каждый пользователь, имеющий данный тип объекта, будет подчиняться соответствующей политике при создании или изменении пароля.

### Валидация политики

#### Проверка требований к сложности пароля

Происходит при смене пароля в методе `Btk_ChangePasswordAvi.Card.beforeCloseForm`. Используются следующие методы:

- `Btk_UserApi.validateUserPassword` — проверяет соблюдение минимального срока жизни пароля (`nMinLifetime`).

- `Btk_UserApi.validateTempPassword` — проверяет, не истёк ли срок действия текущего пароля (`nValidityPeriod` или `nValidityPeriodTemp`).

- `Btk_UserApi.checkPass` — производит детальную проверку структуры нового пароля по заданным параметрам (`bPassSpecSymb`, `bPassLetterDigit`, `bPassUpperLowerLetter`, `nPassMinSymbCnt`).

#### Проверка уникальности пароля

Метод `Btk_UserApi.setsPass` вызывает `Btk_UserPassHistoryApi.register`, который сравнивает новый пароль с предыдущими.

- Если `nNonRepeatPassAmount` > 0, установка пароля, совпадающего с одним из последних, запрещается.

- Например, при значении `2` система не позволит использовать пароль, совпадающий с любым из двух предыдущих.

#### Обработка устаревших паролей и уведомлений

Методы:

- `processUpdatingOutdatedPass` — используется в составе job-процесса. При истечении срока действия пароля:

  - устанавливает `Btk_User.bChangePasswd = true`;

  - автоматически генерирует новый временный пароль.

- `emailNotifyUserForNeedChangePassword` — отправляет уведомление пользователю, если до окончания срока действия пароля осталось количество дней, заданное в `sDaysForNotifyChangePass`.

#### Временная блокировка при неудачных попытках входа

Метод `validateBlockingUserResult` контролирует количество подряд неудачных попыток входа:

- При превышении лимита `jTempBlockingForUnsuccessfulLogin.nNumberOfAttempts` пользователь временно блокируется.

- Длительность блокировки задается параметром `jTempBlockingForUnsuccessfulLogin.nBlockingTimeMin`.

## Рекомендации по парольной политике

### Требования к паролю

- Минимальная длина:

  - 8 символов — для обычных пользователей;

  - 12 символов — для администраторов и привилегированных учётных записей.

- Сложность: пароль должен содержать символы из трёх и более категорий:

  - прописные латинские буквы (A–Z);

  - строчные латинские буквы (a–z);

  - цифры (0–9);

  - специальные символы (`!`, `@`, `#`, `$`, `%`, `^`, `&`, `*` и др.).

- Допускается использование кириллицы.

- Максимальная длина — до 64 символов.

- Запрещено использовать:

  - простые или предсказуемые пароли (например, `Password123`, `Qwerty!`);

  - персональные данные (имена, даты рождения, номера телефонов);

  - клавиатурные последовательности (например, `qwerty`, `1qaz2wsx`);

  - повторяющиеся символы (например, `aaaaaa`);

  - пароли из списков скомпрометированных.

### Жизненный цикл пароля

- Срок действия:

  - не более 180 дней — для обычных пользователей;

  - не более 90 дней — для привилегированных учётных записей.

- Смена обязательна при:

  - подозрении на утечку;

  - передаче пароля третьим лицам;

  - компрометации АИБ.

- При первом входе — временный пароль должен быть изменён.

- История паролей:

  - новый пароль не должен совпадать с двумя последними;

  - должен отличаться от старого минимум на 4 символа;

  - не должен содержать фрагменты старого пароля длиной ≥2 символа на тех же позициях;

  - рекомендуется хранить не менее 24 последних паролей.

- Блокировка после 10 неудачных попыток на минимум 3 минуты.

### Учётные записи

- При увольнении, переводе без доступа или прекращении отношений — учётная запись немедленно блокируется в течение следующего рабочего дня.

- Запрещено передавать пароль уволенного или перемещённого сотрудника.

- После блокировки — отключается во всех системах.

- Отключённая запись сохраняется в каталоге (например, Active Directory) для аудита:

  - срок хранения — от 6 до 36 месяцев;

  - по истечении срока — удаляется из всех систем.

### Использование и хранение паролей

- Пароль должен быть известен только владельцу.

- Запрещено:

  - передавать пароль (включая руководителей);

  - работать под чужим паролем;

  - регистрировать других пользователей под своим аккаунтом.

- Запрещено хранить пароли:

  - на бумаге (кроме сейфа);

  - в заметках, файлах, на стикерах, под клавиатурой.

- Допускается:

  - хранение на бумажном носителе в запирающемся шкафу или сейфе;

  - хранение в зашифрованном виде (bcrypt, scrypt, PBKDF2).

- Рекомендуется использование корпоративного менеджера паролей (Bitwarden, 1Password, Keeper).

- При вводе:

  - обеспечивать конфиденциальность (защита от «глазков»);

  - не произносить пароль вслух;

  - учитывать регистр.

### Особые положения

- MFA обязательно для:

  - администраторов;

  - пользователей с расширенными правами;

  - доступа к системам с персональными данными.
    → Предпочтительно: мобильные аутентификаторы, аппаратные ключи.
    → SMS-коды как единственный фактор — запрещены.

- Групповые учётные записи — строго запрещены.

- Восстановление пароля:

  - только через генерацию нового;

  - после личной верификации (визит или видеозвонок с документом);

  - запрещено отправлять временные пароли по email без подтверждения.

- Аудит аутентификации:

  - все попытки входа (успешные и нет) должны логироваться;

  - логи хранятся не менее 180 дней.