Skip to content

Commit

Permalink
Update hardening.adoc
Browse files Browse the repository at this point in the history
  • Loading branch information
litew authored Nov 8, 2023
1 parent fee6876 commit 8e9e03c
Showing 1 changed file with 77 additions and 50 deletions.
127 changes: 77 additions & 50 deletions hardening.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
## Ограничение области видимости LDAP-каталога rootDSE-записью при использовании анонимного бинда
`PER HOST`

Полностью отключать анонимный бинд не рекомендуется так как большинство ПО часто пытается анонимно прочитать rootDSE запись для чтения структуры дерева.
Поэтому ограничиваем доступ верхнеуровневой записью, не разрешая анонимное чтение всего дерева каталога.

- https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/linux_domain_identity_authentication_and_policy_guide/disabling-anon-binds
```
ldapmodify -x -D "cn=Directory Manager" -W -h localhost -p 389 -ZZ
Expand All @@ -24,10 +27,11 @@ nsslapd-allow-anonymous-access: rootdse
systemctl restart dirsrv.target
```


## Включение журнала аудита 389ds
`PER HOST`

После включения, операции создания/модификации данных в LDAP будут записываться в файл `/var/log/dirsrv/[SLAPD-INSTANCE]/audit`.

- https://access.redhat.com/solutions/772563
- https://access.redhat.com/documentation/en-us/red_hat_directory_server/11/html/configuration_command_and_file_reference/core_server_configuration_reference#cnconfig-nsslapd_auditlog_logging_enabled_Audit_Log_Enable_Logging
- https://access.redhat.com/documentation/en-us/red_hat_directory_server/11/html/configuration_command_and_file_reference/core_server_configuration_reference#cnconfig-nsslapd_auditlog_logrotationtime_Audit_Log_Rotation_Time
Expand All @@ -44,41 +48,21 @@ dsconf FREEIPA.DEV config replace nsslapd-auditlog-maxlogsize=50
## Включение отображения доп. атрибутов изменяемого объекта в журнале аудита
`PER HOST`

В логе `/var/log/dirsrv/[SLAPD-INSTANCE]/audit` будут дополнительно отображаться указанные атрибуты (в данном случае `cn`, `uidnumber`, `mail`) изменяемого объекта.

- https://bugzilla.redhat.com/show_bug.cgi?id=2136610
- https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/8.8_release_notes/index
```
dsconf FREEIPA.DEV config replace nsslapd-auditlog-display-attrs=cn,uidnumber,mail
```
## Отключение ipaNTHash
`GLOBAL`

- https://book.hacktricks.xyz/linux-hardening/freeipa-pentesting#482b
- https://gist.github.com/abbra/a74e171d791cf90113b0272b78919987?permalink_comment_id=3443169#gistcomment-3443169
```
веб-интерфейс
IPA Server ->
Configuration ->
AllowNThash: false
```
## Включение отслеживания последней успешной аутентификации Kerberos
`GLOBAL`

- https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_identity_management/managing-user-passwords-in-idm_configuring-and-managing-idm#enabling-the-tracking-of-last-successful-kerberos-authentication-for-users-in-idm_managing-user-passwords-in-idm
```
веб-интерфейс
IPA Server ->
Configuration ->
KDC:Disable Last Success: false
```
## Включение логирования смены паролей через веб-интерфейс (ipa_pwd_extop)
## Включение логирования смены паролей через веб-интерфейс в журнале аудита (ipa_pwd_extop)
`PER HOST`

- https://bugzilla.redhat.com/show_bug.cgi?id=2055465#c1 , https://access.redhat.com/documentation/en-us/red_hat_directory_server/11/html-single/configuration_command_and_file_reference/index#List_of_Attributes_Common_to_All_Plug_ins-nsslapd_logaudit
После включения, помимо записей о смене пользователем пароля через CLI, в лог аудита `/var/log/dirsrv/[SLAPD-INSTANCE]/audit` также начнут записываться данные о смене пароля через веб-интерфейс.

- https://bugzilla.redhat.com/show_bug.cgi?id=2055465#c1
- https://access.redhat.com/documentation/en-us/red_hat_directory_server/11/html-single/configuration_command_and_file_reference/index#List_of_Attributes_Common_to_All_Plug_ins-nsslapd_logaudit
```
ldapmodify -x -D "cn=Directory Manager" -W -h localhost -p 389 -ZZ
dn: cn=ipa_pwd_extop,cn=plugins,cn=config
Expand All @@ -98,10 +82,47 @@ dsconf <SLAPD-INSTANCE> plugin show ipa_pwd_extop
<SLAPD-INSTANCE> можно посмотреть командой dsctl -l
```

## Отключение ipaNTHash
`GLOBAL`

Выключить, если не используется интеграция с AD.

- https://book.hacktricks.xyz/linux-hardening/freeipa-pentesting#482b
- https://gist.github.com/abbra/a74e171d791cf90113b0272b78919987?permalink_comment_id=3443169#gistcomment-3443169
```
веб-интерфейс
IPA Server ->
Configuration ->
AllowNThash: false
```
## Включение отслеживания последней успешной аутентификации Kerberos (krbLastSuccessfulAuth)
`GLOBAL`

Включение этой опции **не приведёт** к синхронизации поля `krbLastSuccessfulAuth` между нодами FreeIPA и его значение будет разным на сервере и репликах FreeIPA.
Для синхронизации поля между нодами FreeIPA необходимо править настройки сегмента репликации, в которых синхронизация этого поля (вместе с другими) по умолчанию специально стоит в исключениях так как это аффектит на производительность FreeIPA и может приводить к появлению конфликтов репликации:

```
nsDS5ReplicatedAttributeListTotal: (objectclass=*) $ EXCLUDE entryusn krblastsuccessfulauth krblastfailedauth krbloginfailedcount passwordgraceusertime
nsDS5ReplicatedAttributeList: (objectclass=*) $ EXCLUDE memberof idnssoaserial entryusn krblastsuccessfulauth krblastfailedauth krbloginfailedcount passwordgraceusertime
```

Если необходимо отслеживать последнюю успешную аутентифкацию пользователя, то забирая изменение этого поля через логи, в решении лог-менеджмента/whatever нужно сделать запрос который будет для конкретного пользователя сортировать по убыванию время из поля `krbLastSuccessfulAuth` со всех нод FreeIPA одного realm'а - первый элемент будет искомым временем входа.

- https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_identity_management/managing-user-passwords-in-idm_configuring-and-managing-idm#enabling-the-tracking-of-last-successful-kerberos-authentication-for-users-in-idm_managing-user-passwords-in-idm
```
веб-интерфейс
IPA Server ->
Configuration ->
KDC:Disable Last Success: false
```
## Отключение прав на произвольный маппинг публичных SSH-ключей и сертификатов для непривилегированных УЗ (Self Service Permissions)
`GLOBAL`

Данные разрешения требуется удалять (отключить, не удаляя, на данный момент (FreeIPA 4.10.x) нельзя) повторно после каждого обновления пакетов FreeIPA.

```
веб-интерфейс
IPA Server ->
Expand All @@ -110,12 +131,13 @@ IPA Server ->
Users can manage their own X.509 certificates (удалить)
Users can manage their own X.509 certificate identity mappings (удалить)
```
> Данные разрешения требуется отключать повторно после каждого обновления пакетов FreeIPA


## Отключение возможности выбора типа аутентификации пользователю (Disable per-user override)
`GLOBAL`

Административный запрет пользователям самостоятельно выбирать способы аутентификации в профиле.

```
веб-интерфейс
IPA Server ->
Expand All @@ -127,19 +149,6 @@ IPA Server ->
## Указание в парольной политике количества разных классов символов. (krbPwdMinDiffChars)
`GLOBAL`

- https://www.freeipa.org/page/V2/Group_Password_Policy
- https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_identity_management/defining-idm-password-policies_configuring-and-managing-idm#password-policies-in-idm_defining-idm-password-policies
- https://github.com/freeipa/freeipa/blob/master/ipaserver/plugins/pwpolicy.py#L330-L335
- https://github.com/krb5/krb5/blob/master/src/lib/kadm5/srv/server_misc.c#L73-L102
```
веб-интерфейс
IPA Server ->
Policy ->
Password Policies ->
global_policy (или любая другая кастомная политика для пользователей) ->
Character classes: [ 0, 1, 2, 3, 4, 5 ]
```
> Sets the minimum number of different classes, or types, of character that must exist in a password before it is considered valid.
> For example, setting this value to 3 requires that any password must have characters from at least three categories in order to be approved. The default value is zero (0), meaning there are no required classes.
>
Expand All @@ -153,31 +162,46 @@ IPA Server ->
>
> This weights in the opposite direction, so that too many repeated characters does meet the quorum to satisfy the "level" expressed by krbPwdMinDiffChars.


## Отключение в парольной политике входа под выключенной УЗ в связанные с FreeIPA тех. решения (grace login limit)
`GLOBAL`

- https://freeipa.readthedocs.io/en/latest/designs/ldap_grace_period.html
- https://bugzilla.redhat.com/show_bug.cgi?id=782917
- https://www.freeipa.org/page/V2/Group_Password_Policy
- https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_identity_management/defining-idm-password-policies_configuring-and-managing-idm#password-policies-in-idm_defining-idm-password-policies
- https://github.com/freeipa/freeipa/blob/master/ipaserver/plugins/pwpolicy.py#L330-L335
- https://github.com/krb5/krb5/blob/master/src/lib/kadm5/srv/server_misc.c#L73-L102
```
веб-интерфейс
IPA Server ->
Policy ->
Password Policies ->
global_policy (или любая другая кастомная политика для пользователей) ->
Grace login limit: [ -1, 0, 1-MAXINT ]
Character classes: [ 0, 1, 2, 3, 4, 5 ]
```
## Отключение в парольной политике входа под выключенной УЗ в связанные с FreeIPA тех. решения (grace login limit)
`GLOBAL`

После включения, пользователь с выключенной в FreeIPA учетной записью не сможет попасть в ПО, которое интегрировано с FreeIPA и использует доменную аутентификацию для входа. Следует включать эту опцию с осторожностью так как есть сайд-эффект: если пользователь вовремя не сменил свой истёкший пароль (например после всех уведомлений IPA-EPN), и лимит grace login для его учётной записи достиг 0, то в дальнейшем сменить пароль этого пользователя сможет только администратор - самостоятельно сменить пароль пользователь уже не сможет.

> **-1**: IdM grants the user unlimited LDAP binds before the user must reset the password. This is the default value, which matches the previous behavior;
>
> **0**: This value disables all LDAP binds once a password is expired. In effect, the users must reset their password immediately;
>
>**1-MAXINT**: The value entered allows exactly that many binds post-expiration.

- https://freeipa.readthedocs.io/en/latest/designs/ldap_grace_period.html
- https://bugzilla.redhat.com/show_bug.cgi?id=782917
```
веб-интерфейс
IPA Server ->
Policy ->
Password Policies ->
global_policy (или любая другая кастомная политика для пользователей) ->
Grace login limit: [ -1, 0, 1-MAXINT ]
```
## Перевод сервисных УЗ в контейнер sysaccounts
`GLOBAL`

Подходит для сервисных учетных записей, создаваемых для интеграции стороннего ПО (bind). Таким УЗ как минимум запрещен вход на серверы и чтение всего LDAP-каталога.

- https://www.freeipa.org/page/HowTo/LDAP#system-accounts
```
Expand All @@ -199,7 +223,10 @@ nsIdleTimeout: 0
[CTRL-D]
```

## Автоматическое отключение неактивных пользователей (ipa-dsu)
## Автоматическое отключение пользователей с истёкшим временем действия пароля (ipa-dsu)
`GLOBAL`

Настройка отключает учётную запись пользователя с истёкшим паролем в случае длительной неактивности с его стороны.
Настройка находится в стадии разработки и в стабильных версиях FreeIPA недоступна.

- https://freeipa.readthedocs.io/en/latest/designs/disable-stale-users.html

0 comments on commit 8e9e03c

Please sign in to comment.