D-10~12
🧹 불필요한 계정·권한 제거 (PUBLIC 권한 회수)
데이터베이스 보안
위험도: 상💡 쉽게 말하면
회사 건물 전 직원에게 만능 카드를 일괄 배부해 둔 것입니다. PUBLIC 권한은 "모두에게" 주는 권한이라, 아르바이트생도 서버실을 드나들 수 있죠. 그리고 퇴사자 명단에 있는 유령 사원증(미사용 계정)도 그냥 살아 있습니다.
회사 건물 전 직원에게 만능 카드를 일괄 배부해 둔 것입니다. PUBLIC 권한은 "모두에게" 주는 권한이라, 아르바이트생도 서버실을 드나들 수 있죠. 그리고 퇴사자 명단에 있는 유령 사원증(미사용 계정)도 그냥 살아 있습니다.
🎯 직접 해보기 — 공격을 실행해 보세요
아래에서 시스템 상태를 취약 또는 안전(조치 적용)으로 바꾼 뒤 공격 실행을 눌러, 같은 공격이 어떻게 다르게 끝나는지 직접 확인하세요.
# 공격자가 낮은 권한 계정 하나로 PUBLIC 권한을 활용해 파일을 빼낸다
# [공격 실행] 버튼을 누르면 시작합니다.
📋 설정 비교 (왜 막혔나?)
✗ 취약한 설정
-- PUBLIC 부여 권한·미사용 계정 확인
SQL>
SELECT table_name, privilege FROM dba_tab_privs WHERE grantee='PUBLIC' AND table_name LIKE 'UTL%';
UTL_FILE EXECUTE
UTL_HTTP EXECUTE
TEST_USER (90일 미접속, OPEN)
→ 전 계정에 강력 패키지 실행 권한 + 유령 계정 (취약)
✓ 안전한 설정
-- PUBLIC 권한 회수·계정 잠금
SQL>
REVOKE EXECUTE ON UTL_FILE FROM PUBLIC; REVOKE EXECUTE ON UTL_HTTP FROM PUBLIC;
Revoke succeeded. / ALTER USER TEST_USER ACCOUNT LOCK;
→ 필요한 사용자에게만 권한 부여 (양호)
🔧 조치 방법
UTL_FILE,UTL_HTTP,UTL_TCP등 강력 패키지의 PUBLIC 권한을 회수합니다.- 90일 미접속 계정 등 미사용 계정은 잠금·삭제합니다.
- 부여 권한은 Role로 묶어 최소한으로 관리합니다.
✅ 점검 체크리스트
- PUBLIC에 과도한 권한이 없는가
- 미사용 계정이 잠금/삭제되었는가
- 권한 부여 이력이 관리되는가
점검기준: 데이터베이스 > 불필요한 계정·권한 제거