콘텐츠로 이동

D-08: 안전한 암호화 알고리즘 사용

분류: DBMS

중요도: 상


개요

점검 내용

해시 알고리즘 SHA-256 이상의 암호화 알고리즘을 사용하는지 점검

점검 목적

안전한 해시 알고리즘 사용으로 데이터의 기밀성 및 무결성을 보장하고, 사용자 인증을 강화하기 위함

보안 위협

SHA-1이나 MD5와 같은 오래된 알고리즘 사용 시 공격자의 무차별 대입 공격 등으로 비밀번호 유추가 가능하며, 데이터 변조 및 유출의 위험이 존재함

참고

-

점검 대상 및 판단 기준

대상

Oracle DB, MSSQL, MySQL, Tibero, PostgreSQL 등

판단 기준

✅ 양호: 해시 알고리즘 SHA-256 이상의 암호화 알고리즘을 사용하고 있는 경우

❌ 취약: 해시 알고리즘 SHA-256 미만의 암호화 알고리즘을 사용하고 있는 경우

조치 방법

SHA-256 이상의 암호화 알고리즘 적용

조치 시 영향

일반적인 경우 영향 없음

점검 및 조치 사례

Oracle DB

Step 1) SQL*Plus 쿼리를 통한 암호화 알고리즘 확인

SELECT username, password_versions FROM dba_users;

Step 2) sqlnet.ora 파일 수정

$ vi /u01/app/oracle/product/11.2.0/xe/network/admin/sqlnet.ora
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 12
SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 12

sqlnet.ora 파일 기본 경로

  • Unix/Linux : $ORACLE_HOME/network/admin/sqlnet.ora
  • Windows : %ORACLE_HOME%\network\admin\sqlnet.ora

Oracle DB 알고리즘

  • 10G (MD5)
  • 11G (SHA-1)
  • 12C (SHA-512, AES)

MSSQL

Step 1) 저장된 비밀번호 해시 값 확인

select name, password_hash from sys.sql_logins;

참고

MSSQL 2012이상에서 사용자 계정의 비밀번호는 32bit Salt를 적용한 SHA-512 해시 알고리즘을 사용

[일반 이용자 패스워드 해시 알고리즘 변경]

Step 1) 데이터베이스 접속

USE <데이터베이스명> GO

Step 1) 열 추가

ALTER TABLE <테이블명> ADD <신규 해시 칼럼명> varbinary(256) GO

Step 2) 새로운 열에 암호화 된 데이터 저장

UPDATE <테이블명> SET <신규 해시 칼럼명> = HASHBYTES(SHA2_256, <기존 해시 칼럼명>) GO

Step 3) 기존 열 제거

ALTER TABLE <테이블명> DROP COLUMN <기존 해시 칼럼명> GO

MySQL

Step 1) 계정별 암호화 알고리즘 확인

[mysql 5.7]

mysql> SELECT user, host, plugin FROM mysql.user;
-- 또는
mysql> SELECT host, user, plugin, password AS authentication_string FROM mysql.user;

[mysql 8.0]

mysql> SELECT user, host, plugin FROM mysql.user;
-- 또는
mysql> SELECT host, user, plugin, authentication_string FROM mysql.user;

Step 2) 비밀번호 및 암호화 알고리즘 설정

[mysql 5.7]

  • user 생성 시 적용
    CREATE USER '계정명'@'host' IDENTIFIED BY '비밀번호';
    
  • 기존 user 적용
    ALTER USER '계정명'@'host' IDENTIFIED '신규 비밀번호';
    

참고

mysql 5.7에서는 기본적으로 mysql_native_password 플러그인이 사용되므로 별도의 지정이 필요하지 않음

[mysql 8.0]

  • user 생성 시 적용
    mysql> CREATE USER '계정명'@'localhost' IDENTIFIED WITH caching_sha2_password BY '비밀번호';
    
  • 기존 user 적용
    mysql> ALTER USER '계정명'@'localhost' IDENTIFIED WITH caching_sha2_password BY '비밀번호';
    

참고

  • mysql v8.0 이상부터 암호화 알고리즘으로 caching_sha2_password(SHA-256)가 적용됨
  • mysql v5.7 버전에서 사용하던 데이터베이스를 8.0으로 업그레이드하여 mysql_native_password 플러그인이 유지되는 경우 위와 같이 caching_sha2_password 알고리즘을 지정하여 적용할 수 있음

Tibero

Step 1) 쿼리문을 통한 암호화 알고리즘 확인

SELECT "TS#", "ENCRYPTIONALG", "ENCRYPTEDTS" FROM V$ENCRYPTED_TABLESPACES;

Step 2) 암호화 알고리즘 적용

ALTER TABLESPACE "ENCRYPTED_TS" ENCRYPTION USING '적용할 암호화 알고리즘';

PostgreSQL

Step 1) psql 접속 후 계정별 암호화 알고리즘 확인

postgres=# SELECT usename, passwd FROM pg_shadow;

Step 2) 명령어를 통한 알고리즘 적용

  • user 생성 시 적용
    postgres=# CREATE USER 계정명 password '설정할 비밀번호';
    
  • 기존 user 적용
    postgres=# ALTER USER 계정명 WITH password '설정할 비밀번호';
    

참고

default 설정으로 SCRAM-SHA-256 암호화 알고리즘이 적용

peer 인증 방식

로컬에서만 연결이 가능하며 OS에서 클라이언트의 OS 사용자 이름을 얻고 요청한 데이터베이스 사용자 이름과 일치하는지 확인하는 인증 방식