
세이세이
!! 컨트롤 엔터 !!
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 접근 시 사용자별로 서로 다른 계정을 사용하여 접근하는지 점검
->사용자별로 권한 확인은 앞에서 먼저 확인하여 같은 내용이니 생략
점검내용 : 응용프로그램 또는 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 인지 여부를 점검

-> 문서 자체는 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가 인가된 계정에게만 존재하는지 점검
bject Owner는 일반적으로 테이블이나 데이터베이스에 대해 권한을 소유한 사용자를 의미
점검해야 할 것:
어떤 사용자 계정이 권한을 가지고 있는지 확인:
특정 데이터베이스나 테이블에 권한이 있는 사용자를 조회합니다.
1. 특정 데이터베이스에 권한을 가진 사용자 조회
SELECT
Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv
FROM
mysql.db
WHERE
Db = 'testdb';

USE testdb;
SHOW TABLES;

--> ROW가 존재하지 않아 테이블에 대한 권한 확인 X
==> Object Owner가 인가된 계정에게만 존재함으로 양호
점검내용 : 일반사용자에게 Grant Option이 Role 에 의해 부여되어 있는지 점검
mysql.user 테이블에서 Grant Option이 부여된 사용자를 확인합니다.
SELECT user,grant_priv FROM mysql.user;

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

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

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