MariaDB에서 제공하는 주요 비밀번호 보안 관련 플러그인 적용

https://mariadb.com/kb/en/password-validation-plugins/

 

Password Validation Plugins

 

mariadb.com

 

사전준비

내가 설치한 DB의 플러그인 디렉토리를 확인하고 현재 설치된 플러그인을 살펴 보겠습니다.

 

현재 설치된 플러그인 확인

MariaDB [mysql]> show plugins;
+-------------------------------+----------+---------------------+----------------------------+---------+
| Name                          | Status   | Type                | Library                    | License |
+-------------------------------+----------+---------------------+----------------------------+---------+
| binlog                        | ACTIVE   | STORAGE ENGINE      | NULL                       | GPL     |
| mysql_native_password         | ACTIVE   | AUTHENTICATION      | NULL                       | GPL     |
| mysql_old_password            | ACTIVE   | AUTHENTICATION      | NULL                       | GPL     |
... 생략 ...
| partition                     | ACTIVE   | STORAGE ENGINE      | NULL                       | GPL     |
+-------------------------------+----------+---------------------+----------------------------+---------+
80 rows in set (0.005 sec)

MariaDB [mysql]>

 

플러그인 디렉토리 위치 확인

MariaDB [mysql]> show global variables like 'plugin_dir%';
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| plugin_dir    | /usr/lib/mysql/plugin/ |
+---------------+------------------------+
1 row in set (0.005 sec)

MariaDB [mysql]>

 

다운로드 된 플러그인 확인

$ ls -al /usr/lib/mysql/plugin
total 2456
drwxr-xr-x 3 root  root   4096 Feb 25 15:10 .
drwxr-xr-x 3 root  root   4096 Feb 24 01:37 ..
-rw-r--r-- 1 root  root  99560 Aug 19  2024 auth_ed25519.so
-rw-r--r-- 1 root  root  68000 Aug 19  2024 auth_pam.so
drwx------ 2 mysql root   4096 Feb 24 01:37 auth_pam_tool_dir
-rw-r--r-- 1 root  root  67992 Aug 19  2024 auth_pam_v1.so
-rw-r--r-- 1 root  root  67816 Aug 19  2024 disks.so
-rw-r--r-- 1 root  root  68160 Aug 19  2024 file_key_management.so
-rw-r--r-- 1 root  root 133640 Aug 19  2024 ha_archive.so
-rw-r--r-- 1 root  root 133544 Aug 19  2024 ha_blackhole.so
-rw-r--r-- 1 root  root 133584 Aug 19  2024 ha_federated.so
-rw-r--r-- 1 root  root 199200 Aug 19  2024 ha_federatedx.so
-rw-r--r-- 1 root  root 199248 Aug 19  2024 ha_sphinx.so
-rw-r--r-- 1 root  root 200376 Aug 19  2024 handlersocket.so
-rw-r--r-- 1 root  root  67816 Aug 19  2024 locales.so
-rw-r--r-- 1 root  root  67896 Aug 19  2024 metadata_lock_info.so
-rw-r--r-- 1 root  root  67928 Aug 19  2024 password_reuse_check.so
-rw-r--r-- 1 root  root  67504 Aug 19  2024 provider_bzip2.so
-rw-r--r-- 1 root  root  67504 Aug 19  2024 provider_lz4.so
-rw-r--r-- 1 root  root  67664 Aug 19  2024 provider_lzma.so
-rw-r--r-- 1 root  root  67504 Aug 19  2024 provider_lzo.so
-rw-r--r-- 1 root  root  67504 Aug 19  2024 provider_snappy.so
-rw-r--r-- 1 root  root  67816 Aug 19  2024 query_cache_info.so
-rw-r--r-- 1 root  root  68208 Aug 19  2024 query_response_time.so
-rw-r--r-- 1 root  root  71976 Aug 19  2024 server_audit.so
-rw-r--r-- 1 root  root  68128 Aug 19  2024 simple_password_check.so
-rw-r--r-- 1 root  root  68344 Aug 19  2024 sql_errlog.so
-rw-r--r-- 1 root  root 133552 Aug 19  2024 type_mysql_json.so
-rw-r--r-- 1 root  root  68016 Aug 19  2024 wsrep_info.so
$

 

 

확인해 보면 MariaDB가 설치 되면서 기본적으로 이후 설명할 세가지 플러그인의 so 파일이 함께 설치 되지만 활성화가 되지 않은 상태입니다.

이번 페이지에서는 각각 용도에 대해 알아보고 플러그인 설치 까지만 진행하도록 하겠습니다.

 

Simple Password Check

기본적인 비밀번호 복잡도를 강제하는 용도 입니다.

  • 숫자 n자리 이상 포함 : simple_password_check_digits
  • 대문자, 소문자 n자리 이상 포함  :  simple_password_check_letters_same_case
  • 비밀번호 최소 길이  :  simple_password_check_minimal_length
  • 특수 문자 n자리 이상 포함  :  simple_password_check_other_characters
  • 참고1 : https://mariadb.com/kb/en/simple-password-check-plugin/
  • 참고2 :마리아 DB 10.1.2 에서 알파버전이 최초 적용 되었습니다만, 참고1 페이지에 보면 10.4.0 이전 버전에서는 password validation plugins와 충돌이 될 수도 있다는 내용을 참고 하시기 바랍니다.

플러그인 파일 확인

$ ls -al /usr/lib/mysql/plugin/*.so | grep simple
-rw-r--r-- 1 root root  68128 Aug 19  2024 /usr/lib/mysql/plugin/simple_password_check.so
$

 

플러그인 설치

MariaDB [(none)]> install soname 'ed25519';
Query OK, 0 rows affected (0.009 sec)

MariaDB [(none)]>

 

플러그인 설치 결과 확인

MariaDB [mysql]> show plugins;
+-------------------------------+----------+---------------------+----------------------------+---------+
| Name                          | Status   | Type                | Library                    | License |
+-------------------------------+----------+---------------------+----------------------------+---------+
... 생략 ...
| simple_password_check         | ACTIVE   | PASSWORD VALIDATION | simple_password_check.so   | GPL     |
... 생략 ...
+-------------------------------+----------+---------------------+----------------------------+---------+
80 rows in set (0.005 sec)

MariaDB [mysql]>

 

Password Reuse Check

비밀번호 변경시 이전 비밀번호를 사용하지 못하게 하는 플러그인 입니다.

MariaDB 10.7.0 부터 기본 설치되는 플러그인 입니다.

 

플러그인 파일 확인

$ ls -al /usr/lib/mysql/plugin | grep reuse
-rw-r--r-- 1 root  root  67928 Aug 19  2024 password_reuse_check.so
$

 

플러그인 설치

MariaDB [(none)]> install soname 'password_reuse_check';
Query OK, 0 rows affected (0.009 sec)

MariaDB [(none)]>

 

플러그인 설치 결과 확인

MariaDB [mysql]> show plugins;
+-------------------------------+----------+---------------------+----------------------------+---------+
| Name                          | Status   | Type                | Library                    | License |
+-------------------------------+----------+---------------------+----------------------------+---------+
... 생략 ...
| password_reuse_check          | ACTIVE   | PASSWORD VALIDATION | password_reuse_check.so    | GPL     |
... 생략 ...
+-------------------------------+----------+---------------------+----------------------------+---------+
80 rows in set (0.005 sec)

MariaDB [mysql]>

 

ed25519

사용자계정의 비밀번호 저장에 타원곡선 디지털 서명 알고리즘(ECDSA)을 사용할 수 있습니다.

  • MariaDB 에서는 기본적으로 비밀번호 저장에 보안에 취약한 sha1 해쉬방식을 고수하고 있습니다. 이것은 MariaDB를 대상으로 하는 보안취약점 점검에 가장먼저 체크 대상이 될 것입니다.
  • MariaDB 에서는 이를 보안하기 위해 타원곡선 암호화(ECC)기반으로 하는 ed25519 알고리즘을 플러그인 형태로 제공합니다.
  • MariaDB 10.4 이상과 이전 버전에서 각각 적용 방법이 다릅니다. 자세한 내용은 다음회에 암호를 생성하면서 알아 보겠습니다.
  • 참고1 : https://mariadb.com/kb/en/password/
  • 참고2 : https://mariadb.com/kb/en/set-password/
  • 참고3 : https://mariadb.com/kb/en/authentication-plugin-ed25519/

플러그인 파일 확인

$ ls -al /usr/lib/mysql/plugin/*.so | grep ed25519
-rw-r--r-- 1 root root 99560 Aug 19  2024 /usr/lib/mysql/plugin/auth_ed25519.so
$

 

플러그인 설치

MariaDB [(none)]> install soname 'ed25519';
Query OK, 0 rows affected (0.009 sec)

MariaDB [(none)]>

 

플러그인 설치 결과 확인

MariaDB [mysql]> show plugins;
+-------------------------------+----------+---------------------+----------------------------+---------+
| Name                          | Status   | Type                | Library                    | License |
+-------------------------------+----------+---------------------+----------------------------+---------+
... 생략 ...
| ed25519                       | ACTIVE   | AUTHENTICATION      | auth_ed25519.so            | GPL     |
... 생략 ...
+-------------------------------+----------+---------------------+----------------------------+---------+
80 rows in set (0.005 sec)

MariaDB [mysql]>

 

Server Audit

플러그인 파일 확인

$ ls -al /usr/lib/mysql/plugin/*.so | grep audit
-rw-r--r-- 1 root root 71976 Aug 19  2024 /usr/lib/mysql/plugin/server_audit.so
$

 

플러그인 설치

MariaDB [(none)]> install soname 'server_audit';
Query OK, 0 rows affected (0.015 sec)

MariaDB [(none)]>

 

플러그인 설치 확인

MariaDB [(none)]> show plugins;
+-------------------------------+----------+---------------------+--------------------------+---------+
| Name                          | Status   | Type                | Library                  | License |
+-------------------------------+----------+---------------------+--------------------------+---------+
... 생략 ...
| SERVER_AUDIT                  | ACTIVE   | AUDIT               | server_audit.so          | GPL     |
+-------------------------------+----------+---------------------+--------------------------+---------+
74 rows in set (0.005 sec)

MariaDB [(none)]>

 

Cracklib Password Check Plugin

예측하기 쉬운 단어로 비밀번호를 사용하지 못하도록 하는 플러그인으로 기본 제공 플러그인은 아닙니다.

OS레벨의 pam_cracklib 를 이용하는 것으로 패키지 관리자를 통해서 추가로 설치 해야 합니다.

 

pam_cracklib 설치

$ sudo apt install mariadb-plugin-creaklib-password-check

RedHat, CentOS 게열이면 yum 으로 설치 하시면 됩니다.

더보기
더보기
$ sudo yum install MariaDB-cracklib-password-check

lib를 설치 하면 MariaDB 플러그인 디렉토리에 so파일이 다운로드 됩니다.

 

플러그인 파일 확인

$ ls -al /usr/lib/mysql/plugin | grep cracklib
-rw-r--r-- 1 root  root  67752 Aug 19  2024 cracklib_password_check.so
$

 

플러그인 설치

MariaDB [(none)]> install soname 'cracklib_password_check';
Query OK, 0 rows affected (0.048 sec)

MariaDB [(none)]>

 

플러그인 설치 확인

MariaDB [(none)]> show plugins;
+-------------------------------+----------+---------------------+----------------------------+---------+
| Name                          | Status   | Type                | Library                    | License |
+-------------------------------+----------+---------------------+----------------------------+---------+
... 생략 ...
| cracklib_password_check       | ACTIVE   | PASSWORD VALIDATION | cracklib_password_check.so | GPL     |
+-------------------------------+----------+---------------------+----------------------------+---------+
81 rows in set (0.005 sec)

MariaDB [(none)]>

 

MariaDB 공식 페이지에서는 해당 플러그인을 설치후 my.cnf 파일에 플러그인 로드 스크립트를 함께 적어줘야 한다고 나오지만 MariaDB 11.4.3 기준으로 테스트 해보면 해당 플러그인들은 설치 후 즉시 적용 되며,  conf 파일에 별다른 추가를 하지 않아도 DB 재가동 후에도 적용되는 것을 확인 했습니다.

 

다음 편에는 보안 시나리오를 정하고 플러그인 설정을 통해 그것을 적용해 보도록 하겠습니다.

 

 

+ Recent posts