05. [OAuth 기반 인프라 취약점 진단] DB(MySQL) 점검
2026. 5. 28. 09:36ㆍ프로젝트/OAuth 기반 내부망 탐지 및 구축 프로젝트: 인프라 취약점 진단
VIII. DBMS
| 구분 | 점검항목 (중요도 : 상) | 항목코드 | 결과 |
|---|---|---|---|
| 1. 계정 관리 | 기본 계정의 비밀번호, 정책 등을 변경하여 사용 | D-01 | |
| 데이터베이스의 불필요 계정을 제거하거나, 잠금정책 사용 | D-02 | ||
| 비밀번호의 사용기간 및 복잡도를 기관의 정책에 맞도록 설정 | D-03 | [취약] | |
| 데이터베이스 관리자 권한을 꼭 필요한 계정 및 그룹에 대해서만 허용 | D-04 | ||
| 안전한 암호화 알고리즘 사용 | D-08 | [취약] | |
| 2. 접근 관리 | 원격에서 DB 서버의 접속 제한 | D-10 | |
| DBA 이외의 인가되지 않은 사용자가 시스템 테이블에 접근할 수 없도록 설정 | D-11 | ||
| 안전한 리스너 비밀번호 설정 및 사용 | D-12 | ||
| 3. 옵션 관리 | 응용프로그램 또는 DBA 계정의 Role이 Public으로 설정되지 않도록 조정 | D-18 | |
| OS_ROLES, REMOTE_OS_AUTHENTICATION, REMOTE_OS_ROLES를 FALSE로 설정 | D-19 | ||
| xp_cmdshell 사용 제한 | D-23 | ||
| Registry Procedure 권한 제한 | D-24 | ||
| 4. 패치 관리 | 주기적 보안 패치 및 벤더 권고 사항 적용 | D-25 | |
| 데이터베이스의 접근, 변경, 삭제 등의 감사 기록이 기관의 감사 기록 정책에 적합하도록 설정 | D-26 | [취약] |
1. 계정 관리
| 점검항목 | 기본 계정의 비밀번호, 정책 등을 변경하여 사용 (D-01) |
| 점검내용 | DBMS 기본 계정의 초기 비밀번호 및 권한 정책을 변경하여 사용하는지 점검 |
| 점검목적 | DBMS 기본 계정의 초기 비밀번호 및 권한 정책 변경 사용 유무를 점검하여 비인가자의 초기 비밀번호 대입 공격을 차단하고 있는지 확인하기 위함 |
| 보안위협 | DBMS 기본 계정 초기 비밀번호 및 권한 정책을 변경하지 않을 경우 비인가자가 인터넷 통해 DBMS 기본 계정의 초기 비밀번호를 획득하여 초기 비밀번호를 그대로 사용하고 있는 DB에 접근하여 기본 계정에 부여된 권한의 취약점을 이용하여 DB 정보를 유출할 수 있는 위험이 존재함 |
| 판단기준 | 양호 : 기본 계정의 초기 비밀번호를 변경하거나 잠금설정한 경우 취약 : 기본 계정의 초기 비밀번호 를 변경하지 않거나 잠금설정을 하지 않은 경우 |
| 점검결과 | [ 양호 ] 패스워드가 설정되어 있어 양호함 ![]() |
| 조치방법 | 별도 조치 필요없음 |
| 점검항목 | 데이터베이스의 불필요 계정을 제거하거나, 잠금설정 후 사용 (D-02) |
| 점검내용 | DBMS에 존재하는 계정 중 DB 관리나 운용에 사용하지 않는 불필요한 계정이 존재하는지 점검 |
| 점검목적 | 불필요한 계정 존재 유무를 점검하여 불필요한 계정 정보(비밀번호)의 유출 시 발생할 수 있는 비인가자의 DB 접근에 대비되어 있는지 확인하기 위함 |
| 보안위협 | DB 관리나 운용에 사용하지 않는 불필요한 계정이 존재할 경우, 비인가자가 불필요한 계정을 이용하여 DB에 접근하여 데이터를 열람, 삭제, 수정할 위험이 존재함 |
| 판단기준 | 양호 : 계정 정보를 확인하여 불필요한 계정이 없는 경우 취약 : 인가되지 않은 계정, 퇴직자 계정, 테스트 계정 등 불필요한 계정이 존재하는 경우 |
| 점검결과 | [ 양호 ] 데이터베이스 내부 계정 정보를 조회하여 현황을 확인한 결과, 식별된 svuser 및 pentest_user 계정은 실제 운영 및 진단 목적의 필수 인가 계정이며, 이를 제외하고 관리나 운용에 사용하지 않는 퇴직자 계정, 임시 테스트 계정 등의 방치된 불필요한 계정이 존재하지 않으므로 가이드라인 기준상 양호 SELECT User, Host, plugin FROM mysql.user; ![]() |
| 조치방법 | 별도 조치 필요없음 |
| 점검항목 | 비밀번호 사용 기간 및 복잡도를 기관의 정책에 맞도록 설정 (D-03) |
| 점검내용 | 기관 정책에 맞게 비밀번호 사용 기간 및 복잡도 설정이 적용되어 있는지 점검 |
| 점검목적 | 비밀번호 사용 기간 및 복잡도 설정 유무를 점검하여 비인가자의 비밀번호 추측 공격(무차별 대입 공격, 사전 대입 공격 등)에 대한 대비가 되어있는지 확인하기 위함 |
| 보안위협 | 비밀번호 사용 기간 및 복잡도 설정이 되어있지 않으면 비인가자가 비밀번호 추측 공격을 통해 획득한 계정의 비밀번호를 이용하여 DB에 접근할 수 있는 위험이 존재함 |
| 판단기준 | 양호 : 기관 정책에 맞게 비밀번호 사용 기간 및 복잡도 설정이 적용된 경우 취약 : 기관 정책에 맞게 비밀번호 사용 기간 및 복잡도 설정이 적용되지 않은 경우 |
| 점검결과 | [취약] 1) MySQL 내부 변수 조회 결과, 비밀번호 복잡도 규칙을 강제하는 validate_password 관련 설정이 Empty set으로 나타남을 확인함. 이는 복잡도 검증 컴포넌트(또는 플러그인)가 아예 설치 및 활성화되어 있지 않음을 의미함. SHOW VARIABLES LIKE 'validate_password%'; 2)default_password_lifetime 변수 조회 결과 값지 0으로 설정되어 있어, 사용자 비밀번호의 만료 기간 제한 없이 평생 사용할 수 있도록 방치되어 있음. SHOW VARIABLES LIKE 'default_password_lifetime'; ![]() |
| 조치방법 | ※ 비밀번호 복잡도 규칙을 강제하는 component_validate_password 해당 컴포넌트 설치 INSTALL COMPONENT 'file://component_validate_password'; ※ 비밀번호 정책 설정 vi /etc/my.cnf [mysqld] # - LOW: 비밀번호 길이만 검증 # - MEDIUM: 길이 + 숫자 + 대소문자 + 특수문자 조합 검증 (기반시설 가이드라인 권장) # - STRONG: MEDIUM 조건 + 사전(Dictionary) 파일 기반의 유추하기 쉬운 단어 검증 추가 validate_password.policy=MEDIUM # 생성하거나 변경할 비밀번호의 최소 글자 수 제한 (8자리 이상 강제) validate_password.length=8 # 비밀번호에 반드시 포함되어야 하는 영문 대문자와 소문자의 최소 개수 validate_password.mixed_case_count=1 # 비밀번호에 반드시 포함되어야 하는 숫자의 최소 개수 validate_password.number_count=1 # 비밀번호에 반드시 포함되어야 하는 특수문자의 최소 개수 validate_password.special_char_count=1 ※ 생성 및 변경되는 계정의 비밀번호 유효기간 설정 vi /etc/my.cnf [mysqld] # - 0: 유효기간 제한 없음 (평생 사용 가능 - 취약) # - 90: 90일이 지나면 비밀번호가 만료되어 변경하도록 강제 (가이드라인 기준) default_password_lifetime=90 ![]() |
| 점검항목 | 데이터베이스 관리자 권한을 꼭 필요한 계정 및 그룹에 대해서만 허용 (D-04) |
| 점검내용 | 관리자 권한이 필요한 계정 및 그룹에만 관리자 권한을 부여하였는지 점검 |
| 점검목적 | 관리자 권한이 필요한 계정과 그룹에만 관리자 권한을 부여하였는지 점검하여 관리자 권한의 남용을 방지하여 계정 유출로 인한 비인가자의 DB 접근 가능성을 최소화하고자 함 |
| 보안위협 | 관리자 권한이 필요한 계정 및 그룹에만 관리자 권한을 부여하지 않으면 관리자 권한이 부여된 계정이 비인가자에게 유출될 경우 DB에 접근할 수 있는 위험이 존재함 |
| 판단기준 | 양호 : 관리자 권한이 필요한 계정 및 그룹에만 관리자 권한이 부여된 경우 취약 : 관리자 권한이 필요 없는 계정 및 그룹에 관리자 권한이 부여된 경우 |
| 점검결과 | [양호] 진단 결과, 시스템 최고 관리자 계정인 'root'@'localhost'와 MySQL 내부 세션 관리를 위한 필수 시스템 계정인 'mysql.session'@'localhost' 단 2개의 계정에만 해당 권한이 부여되어 있음을 확인함. SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE PRIVILEGE_TYPE = 'SUPER'; ![]() |
| 조치방법 | 별도 조치 필요없음 |
| 점검항목 | 안전한 암호화 알고리즘 사용 (D-08) |
| 점검내용 | 해시 알고리즘 SHA-256 이상의 암호화 알고리즘을 사용하는지 점검 |
| 점검목적 | 안전한 해시 알고리즘 사용으로 데이터의 기밀성 및 무결성을 보장하고, 사용자 인증을 강화하기 위함 |
| 보안위협 | SHA-1이나 MD5와 같은 오래된 알고리즘 사용 시 공격자의 무차별 대입 공격 등으로 비밀번호 유추가 가능하며, 데이터 변조 및 유출의 위험이 존재함 |
| 판단기준 | 양호 : 해시 알고리즘 SHA-256 이상의 암호화 알고리즘을 사용하고 있는 경우 취약 : 해시 알고리즘 SHA-256 미만의 암호화 알고리즘을 사용하고 있는 경우 |
| 점검결과 | [취약] 내부 시스템 계정들은 SHA-256 기반을 사용 중이나, 가장 권한이 높고 공격자의 표적이 되기 쉬운 최고 관리자 계정 'root'@'localhost'가 SHA-1 기반의 구형 알고리즘인 mysql_native_password를 사용하고 있음을 확인함. SELECT user, host, plugin FROM mysql.user; ![]() |
| 조치방법 | -- root 계정의 인증 방식을 SHA-256(caching_sha2) 버전으로 강제 업데이트 ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Qazwsx1234!'; ![]() SELECT user, host, plugin FROM mysql.user; ![]() |
2. 접근 관리
| 점검항목 | 원격에서 DB 서버로의 접속 제한 (D-10) |
| 점검내용 | 지정된 IP주소만 DB 서버에 접근 가능하도록 설정되어 있는지 점검 |
| 점검목적 | 지정된 IP주소만 DB 서버에 접근 가능하도록 설정되어 있는지 점검하여 비인가자의 DB 서버 접근을 원천적으로 차단하고자 함 |
| 보안위협 | DB 서버 접속 시 IP주소 제한이 적용되지 않은 경우 비인가자가 내·외부망 위치에 상관없이 DB 서버에 접근할 수 있는 위험이 존재함 |
| 판단기준 | 양호 : DB 서버에 지정된 IP주소에서만 접근 가능하도록 제한한 경우 취약 : DB 서버에 지정된 IP주소에서만 접근 가능하도록 제한하지 않은 경우 |
| 점검결과 | [양호] -External (WAN) 구역: DB 서버 혹은 DB 전용 포트(TCP 3306)의 원격 접속을 허용한 인가 IP 주소가 존재하지 않으며, 최하단에 명시된 기본 거부 정책(Any Any Any Any DENY)에 의해 외부 및 타 서브넷으로부터의 모든 접근이 완벽히 차단되고 있음을 확인함 ![]() -DMZ (LAN) 구역: WEB(192.168.11.12)에서 DB(3306)으로 접속을 허용하고 나머지는 기본 거부 정책 (Any Any Any Any DENY)에 의해 모든 접근이 차단되고 있음을 확인 ![]() -Internal (OPT1) 구역: 기본 거부 정책 (Any Any Any Any DENY)에 의해 모든 접근이 차단되고 있음을 확인 ![]() -Client (OPT2) 구역: 기본 거부 정책 (Any Any Any Any DENY)에 의해 모든 접근이 차단되고 있음을 확인 ![]() |
| 조치방법 | 별도 조치 필요없음 |
| 점검항목 | DBA 이외의 인가되지 않은 사용자가 시스템 테이블에 접근할 수 없도록 설정 (D-11) |
| 점검내용 | 시스템 테이블에 일반 사용자 계정이 접근할 수 없도록 설정되어 있는지 점검 |
| 점검목적 | 시스템 테이블의 일반 사용자 계정 접근 제한 설정 적용 여부를 점검하여 일반 사용자 계정 유출 시 발생할 수 있는 비인가자의 시스템 테이블 접근 위험을 차단하기 위함 |
| 보안위협 | 시스템 테이블의 일반 사용자 계정 접근 제한 설정이 되어있지 않을 경우 Object, 사용자, 테이블 및 뷰, 작업 내역 등의 시스템 테이블에 저장된 정보가 누출될 수 있음 |
| 판단기준 | 양호 : 시스템 테이블에 DBA만 접근 가능하도록 설정되어 있는 경우 취약 : 시스템 테이블에 DBA 외 일반 사용자 계정이 접근 가능하도록 설정되어 있는 경우 |
| 점검결과 | [양호] 해당 계정은 전역적으로 로그인만 허용하는 권한(GRANT USAGE ON *.*)과 오직 지정된 특정 운영 데이터베이스 영역인 securevault에 한해서만 제어권을 갖는 권한(GRANT ALL PRIVILEGES ON securevault.*)으로 엄격히 제한되어 있음을 확인함 SELECT user, host, plugin FROM mysql.user; ![]() SHOW GRANTS FOR 'svuser'@'%'; ![]() |
| 조치방법 | 별도 조치 필요없음 |
| 점검항목 | 안전한 리스너 비밀번호 설정 및 사용 (D-12) |
| 점검내용 | 오라클 데이터베이스 Listener의 비밀번호 설정 여부 점검 |
| 점검목적 | Listener의 Owner는 DBA가 아니더라도 Listener를 shutdown 시키거나 DB 서버에 임의의 파일을 생성할 수 있으며, 원격에서 LSNRCTL 유틸리티를 사용하여 listener.ora 파일에 대한 변경이 가능하므로 Listener에 비밀번호를 설정하여 비인가자가 이를 수정하지 못하도록 하기 위함 |
| 보안위협 | Listener에 비밀번호가 설정되지 않았을 경우 DoS, 정보 획득, Listener 프로세스를 중지시킬 수 있는 위험이 존재함 |
| 판단기준 | 양호 : Listener의 비밀번호가 설정된 경우 취약 : Listener의 비밀번호가 설정되어 있지 않은 경우 |
| 점검결과 | [Oracle이 아니기 때문에 해당 사항 없음] |
| 조치방법 | 별도 조치 필요없음 |
| 점검항목 | 응용프로그램 또는 DBA 계정의 Role이 Public으로 설정되지 않도록 조정(D-18) |
| 점검내용 | 응용 프로그램 또는 DBA 계정의 Role이 Public으로 설정되어 있는지 점검 |
| 점검목적 | 응용 프로그램 또는 DBA 계정의 Role을 점검하여 일반 계정으로 응용 프로그램 테이블이나 DBA 테이블의 접근을 차단하기 위함 |
| 보안위협 | 응용 프로그램 또는 DBA 계정의 Role이 Public으로 설정된 경우 일반 계정에서도 응용 프로그램 테이블 및 DBA 테이블로 접근할 수 있으므로 중요 정보 유출의 위험이 존재함 |
| 판단기준 | 양호 : DBA 계정의 Role이 Public으로 설정되지 않은 경우 취약 : DBA 계정의 Role이 Public으로 설정된 경우 |
| 점검결과 | [양호] 일반 사용자 계정(pentest_user, svuser)에 관리자급 권한(Super, Grant 등)이 부여되지 않음을 확인함 ![]() |
| 조치방법 | 별도 조치 필요없음 |
| 점검항목 | OS_ROLES, REMOTE_OS_AUTHENTICATION, REMOTE_OS_ROLES를 FALSE로 설정(D-19) |
| 점검내용 | OS_ROLES, REMOTE_OS_AUTHENTICATION, REMOTE_OS_ROLES가 FALSE로 설정이 적용되어 있는지 점검 |
| 점검목적 | OS_ROLES, REMOTE_OS_AUTHENTICATION, REMOTE_OS_ROLES의 설정을 점검하여 비인가자들의 데이터베이스 접근을 막고 데이터베이스 관리자에 의한 사용자 Role 설정이 가능하게 하기 위함 |
| 보안위협 | - OS_ROLES가 TRUE로 설정된 경우, 데이터베이스 접근 제어로 컨트롤되지 않는 OS 그룹에 의해 GRANT 된 권한이 허락되어 악의적인 사용자가 시스템 권한을 악용할 위험이 존재 - REMOTE_OS_ROLES가 TRUE로 설정된 경우, 원격 사용자가 OS의 다른 사용자로 속여 데이터베이스에 접근할 수 있으므로 중요 정보에 대한 무단 접근 및 권한 상승의 위험이 존재함 - REMOTE_OS_AUTHENT가 TRUE로 설정된 경우, 신뢰하는 원격 호스트에서 인증 절차 없이 데이터베이스에 접속할 수 있으므로 중요 정보의 유출 위험이 존재함 |
| 판단기준 | 양호 : OS_ROLES, REMOTE_OS_AUTHENTICATION, REMOTE_OS_ROLES 설정이 FALSE로 설정된 경우 취약 : OS_ROLES, REMOTE_OS_AUTHENTICATION, REMOTE_OS_ROLES 설정이 TRUE로 설정되지 않은 경우 |
| 점검결과 | [양호] 본 인프라는 MySQL을 사용 중이며, Oracle 전용 파라미터인 OS_ROLES, REMOTE_OS_AUTHENT 등의 설정이 존재하지 않음 |
| 조치방법 | 별도 조치 필요없음 |
| 점검항목 | xp_cmdshell 사용 제한(D-23) |
| 점검내용 | xp_cmdshell의 사용 여부 점검 |
| 점검목적 | 불필요하게 활성화되어 있는 xp_cmdshell를 제한하여 공격자의 무단 접근 및 악성코드의 실행 위험을 감소시키기 위함 |
| 보안위협 | 해킹 툴에서 자주 이용되고 있으며, 권한 상승이나 데이터 유출 등의 위험이 존재함 |
| 판단기준 | 양호 : xp_cmdshell이 비활성화 되어 있거나, 활성화 되어 있으면 다음의 조건을 모두 만족하는 경우 1. public의 실행(Execute) 권한이 부여되어 있지 않은 경우 2. 서비스 계정(애플리케이션 연동)에 sysadmin 권한이 부여되어 있지 않은 경우 취약 : xp_cmdshell이 활성화 되어 있고, 양호의 조건을 만족하지 않는 경우 |
| 점검결과 | [양호] 본 인프라는 MSSQL이 아닌 MySQL을 사용 중임. MySQL은 데이터베이스 엔진 내부에서 OS 명령을 직접 실행하는 기능(xp_cmdshell과 유사 기능)이 없으므로 해당 사항 없음 |
| 조치방법 | 별도 조치 필요없음 |
| 점검항목 | Registry Procedure 권한 제한(D-24) |
| 점검내용 | Registry Procedure의 권한 설정 확인 및 점검 |
| 점검목적 | 불필요한 Registry Procedure의 권한 설정을 확인하고 제한하여 시스템의 보안 및 안정성을 강화하기 위함 |
| 보안위협 | 불필요한 레지스트리 접근 권한이 제한되지 않는 경우, 공격자가 시스템을 변경하거나 악성 소프트웨어를 설치하여 권한 상승, 데이터 유출, 시스템 장애를 발생시킬 위험이 존재함 |
| 판단기준 | 양호 : 제한이 필요한 시스템 확장 저장 프로시저들이 DBA 외 guest/public에게 부여되지 않은 경우 취약 : 제한이 필요한 시스템 확장 저장 프로시저들이 DBA 외 guest/public에게 부여된 경우 |
| 점검결과 | [양호] 본 인프라는 MSSQL이 아닌 MySQL을 사용 중임. MySQL은 Windows 레지스트리에 접근할 수 있는 Registry Procedure 기능 자체가 없으므로 해당 사항 없음 |
| 조치방법 | 별도 조치 필요없음 |
| 점검항목 | 주기적 보안 패치 및 벤더 권고 사항 적용(D-25) |
| 점검내용 | 안전한 버전의 데이터베이스를 사용하고 있는지 점검 |
| 점검목적 | 안전한 버전의 데이터베이스를 사용하여 알려진 보안 취약점으로 인한 공격을 차단하기 위함 |
| 보안위협 | 안전하지 않은 버전을 사용할 경우, 알려진 보안 취약점을 통해 시스템에 침투하거나 데이터의 탈취, 악성코드 감염 및 서비스 중단 등의 보안 사고를 초래할 위험이 존재함 |
| 판단기준 | 양호 : 보안 패치가 적용된 버전을 사용하는 경우 취약 : 보안 패치가 적용되지 않는 버전을 사용하는 경우 |
| 점검결과 | [양호] 현재 사용 중인 MySQL 버전은 8.0.45로, 안정화된 최신 마이너 버전을 유지하고 있음을 확인함 ![]() |
| 조치방법 | 별도 조치 필요없음 |
| 점검항목 | 데이터베이스의 접근, 변경, 삭제 등의 감사 기록이 기관의 감사 기록 정책에 적합하도록 설정(D-26) |
| 점검내용 | 감사 기록 정책 설정이 기관 정책에 적합하게 설정되어 있는지 점검 |
| 점검목적 | 데이터, 로그, 응용 프로그램에 대한 감사 기록 정책을 수립하고 적용하여 데이터베이스에 문제 발생 시 원활하게 대응하기 위함 |
| 보안위협 | 감사 기록 정책이 설정되어 있지 않을 경우, 데이터베이스에 문제 발생 시 원인을 규명할 수 있는 자료가 존재하지 않아 이에 대한 대처 및 개선방안 수립이 어려워 장기적으로 심각한 보안 위험이 존재함 |
| 판단기준 | 양호 : DBMS의 감사 로그 저장 정책이 수립되어 있으며, 정책 설정이 적용된 경우 취약 : DBMS에 대한 감사 로그 저장을 하지 않거나, 정책 설정이 적용되지 않은 경우 |
| 점검결과 | [취약] 데이터베이스의 접속 이력 및 쿼리 수행 이력을 기록하는 general_log 설정이 비활성화(OFF) 상태로 확인되어, 보안 사고 발생 시 감사 추적 자료 확보가 불가능함을 확인함 ![]() |
| 조치방법 | '데이터베이스 감사 기록 정책을 수립하고, MySQL general_log 기능을 활성화하여 시스템 접근 및 작업 이력을 기록하도록 변경함 SET GLOBAL general_log = 'ON'; SHOW VARIABLES LIKE 'general_log'; ![]() |
'프로젝트 > OAuth 기반 내부망 탐지 및 구축 프로젝트: 인프라 취약점 진단' 카테고리의 다른 글
| 06. [OAuth 기반 인프라 취약점 진단] 진단 결과 (0) | 2026.05.28 |
|---|---|
| 04. [OAuth 기반 인프라 취약점 진단] OPNsense 방화벽 점검 (0) | 2026.05.28 |
| 03. [OAuth 기반 인프라 취약점 진단] Apache 서버 점검 (0) | 2026.05.28 |
| 02. [OAuth 기반 인프라 취약점 진단] 가상화 플랫폼(Proxmox) 점검 (0) | 2026.05.28 |
| 01. [OAuth 기반 인프라 취약점 진단] 취약점 점검 계획 (0) | 2026.05.28 |




















