dbms 취약점 진단 중간 필기요

올빼미·2024년 11월 26일
post-thumbnail

세이세이
!! 컨트롤 엔터 !!

1. 계정관리

기본 계정의 패스워드, 권한 등을 변경하여 사용

1) 패스워드 변경 권한 확인

SHOW GRANTS FOR CURRENT_USER;


-> 권한 0

2) 권한이 있으니 패스워드 변경 ( 관리자 권한 )

UPDATE mysql.user SET authentication_string=PASSWORD('new_password') WHERE User='root';
FLUSH PRIVILEGES;

3) 패스워드가 바뀌었는지 확인


관리자 권한으로 cmd 실행후 새로바꾼 비번 new_password가 바뀌었는지 확인댐

관리자 권한x으로 실행하면 로그인 안댐

4) 일반 계정도 관리자 권한이 있는지 확인

SHOW GRANTS FOR 'webhacking_db'@'%';


관리자 권한이 있음 > 관리자 권한이 너무 많으면 취약 ㅇ

데이터베이스의 불필요 계정을 제거하거나, 잠금설정 후 사용

1) 모든 사용자 목록 확인 명령어

SELECT User, Host FROM mysql.user;


1. admin : '%' 설정은 보안상 위험
2, 4~5 : RDS 시스템 계정 -> 자동생성 -> 삭제금지
3. webhacking_db : Host = '%' 설정은 보안상 취약 -> 불필요시 삭제

패스워드의 사용기간 및 복잡도를 기관 정책에 맞도록 설정

비밀번호 만료 정책 확인

SHOW VARIABLES LIKE 'default_password_lifetime';


0 -> 비밀번호 만료 정책 비활성화.

데이터베이스 관리자 권한을 꼭 필요한 계정 및 그룹에 허용

관리자 권한 = super 권한
1) SUPER 권한을 가진 계정을 조회

SELECT User, Host 
FROM mysql.user 
WHERE Super_priv = 'Y';


2) 모든 데이터베이스에 대한 권한을 가진 계정 확인

SELECT User, Host FROM mysql.user WHERE Grant_priv = 'Y';

--> 불필요한 관리자 계정 존재x --> 양호

패스워드 재사용에 대한 제약 설정

패스워드 변경 시 이전 패스워드를 재사용할 수 없도록 패스워드 제약 설정이 되어 있는지 점검

1) 패스워드 재사용 방지 정책사용하는지 점검하는 명령어

SHOW VARIABLES LIKE 'password%';


1. password_history = 0
의미: 현재 MySQL에서 이전 비밀번호를 기억하지 않도록 설정되어 있다는 뜻입니다.
설명: 비밀번호 재사용 방지 정책이 비활성화 되어 있습니다. 즉, 사용자가 이전에 사용한 비밀번호를 다시 사용할 수 있습니다.
2. password_require_current = OFF
설명: password_require_current는 사용자가 비밀번호를 변경할 때 현재 비밀번호를 요구할지 여부를 설정하는 항목입니다.
OFF로 설정되어 있다는 것은, 사용자가 비밀번호를 변경할 때 현재 비밀번호를 입력할 필요가 없다는 뜻입니다.
3. password_reuse_interval = 0
의미: 비밀번호 재사용을 제한하는 기간이 설정되지 않은 상태입니다.

--> 이전 비밀번호를 기억하지 않아 이전 비밀번호 그대로 사용가능 -> 취약
--> 비밀번호를 변경할때 현재비밀번호를 요구하지 않아 보안상 문제
--> 비밀번호 재사용 제한기간 설정x -> 설정하는 것이 좋음

DB 사용자 계정을 개별적으로 부여하여 사용

점검내용 : DB 접근 시 사용자별로 서로 다른 계정을 사용하여 접근하는지 점검

  1. DB 로그 확인
    DBMS는 일반적으로 사용자 인증 및 쿼리 실행 내역을 기록합니다. 해당 로그를 확인하면 어떤 계정이 접속했는지 확인할 수 있습니다.

->사용자별로 권한 확인은 앞에서 먼저 확인하여 같은 내용이니 생략

3. 옵션관리

응용프로그램 또는 DBA 계정의 Role이 Public으로 설정되지 않도록 조정

점검내용 : 응용프로그램 또는 DBA 계정의 Role을 Public으로 설정했는지를 점검
1) DBA 계정의 Role을 Public으로 설정했는지를 점검
1-1)DBA 계정에 부여된 모든 권한 확인

SHOW GRANTS FOR 'admin'@'%';


GRANT USAGE로 표시된다면, 기본적인 접속 권한만 부여된 상태
--> public 권한을 가지고 있지 않음

OS_ROLES, REMOTE_OS_AUTHENTICATION, REMOTE_OS_ROLES를 FALSE로 설정

점검내용 : OS_ROLES, REMOTE_OS_AUTHENTICATION, REMOTE_OS_ROLES의 설정이 false 인지 여부를 점검

-> 문서 자체는 2021 버전
OS_ROLES, REMOTE_OS_AUTHENTICATION, REMOTE_OS_ROLES
의 시스템 변수들이 사용자가 사용중인 8.0.39 버전(2024)에서는 사용하지 않음 > 확인불가능

  • 버전정보 확인 명령어
SELECT VERSION();

패스워드 확인함수가 설정되어 적용

점검내용 : 패스워드 복잡도를 확인하는 PASSWORD_VERIFY_FUNCTION 값이 설정되어 있는지 점검


--> 데이터없음
PASSWORD_VERIFY_FUNCTION 변수는 MySQL Enterprise Edition에서 사용하는 기능 > SQL Community Edition에서는 해당 변수가 없을 수 있다


--> 커뮤니티 에디션 > 확인 불가능

인가되지 않은 Object Owner의 제한

점검내용 :
Object Owner가 인가된 계정에게만 존재하는지 점검
bject Owner는 일반적으로 테이블이나 데이터베이스에 대해 권한을 소유한 사용자를 의미
점검해야 할 것:
어떤 사용자 계정이 권한을 가지고 있는지 확인:
특정 데이터베이스나 테이블에 권한이 있는 사용자를 조회합니다.
1. 특정 데이터베이스에 권한을 가진 사용자 조회

SELECT 
    Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv 
FROM 
    mysql.db 
WHERE 
    Db = 'testdb';

  1. 특정 테이블에 권한을 가진 사용자 조회
USE testdb;
SHOW TABLES;


--> ROW가 존재하지 않아 테이블에 대한 권한 확인 X

==> Object Owner가 인가된 계정에게만 존재함으로 양호

인가되지 않은 GRANT OPTION 사용 제한

점검내용 : 일반사용자에게 Grant Option이 Role 에 의해 부여되어 있는지 점검

mysql.user 테이블에서 Grant Option이 부여된 사용자를 확인합니다.

SELECT user,grant_priv FROM mysql.user;

--> 스템 계정(rdsadmin) 및 관리 역할(rds_superuser_role)만 Grant Option을 가지고 있으므로 일반 사용자에게는 부여되지 않은 상태라서
--> 일반사용자에게 Grant Option이 부여되어 있지 않음으로 -> 양호

데이터베이스의 자원 제한 기능을 TRUE로 설정

점검내용 : RESOURCE_LIMIT 값이 TRUE로 설정되어 있는지 점검

RESOURCE_LIMIT라는 시스템 변수가 "데이터 없음"으로 나오면, 해당 변수는 MySQL의 기본 구성에 존재하지 않거나 사용 중인 MySQL 버전에서 지원되지 않는 설정일 가능성이 큽니다.
-> 대신하여

SELECT User, Host, max_questions, max_updates, max_connections, max_user_connections
FROM mysql.user;


--> 자원 제한이 없는상태 --> 취약

profile
시들시들한 올빼미

0개의 댓글