해킹공주의 일상
[D-08]응용프로그램 또는 DBA 계정의 Role 이 Public으로 설정되지 않도록 설정 본문
점검 내용
'응용프로그램 또는 DBA 계정의 Role을 Public으로 설정했는지를 점검'인데 이게 .. 뭔말인지 한국말이아냐
실제로 점검해야하는 쿼리를 확인해보면, Public 에 부여된 권한들을 확인하고, 그 권한들이 관리자 레벨의 권한인지 확인하고 있다.
그러니까, Public 에 과도하게 부여된 권한을 검토하는 항목이라고 생각하는게 편하다.
🔍 Public 에 관리자 관련된 Role(시스템 DB 조회 등) 이 존재하면 무조건 위험하니?
결과가 나온다고 해서 무조건 "위험"한 건 아니지만,
PUBLIC에 너무 많은 권한이나 민감한 역할이 부여되어 있으면 보안상 "위험할 수 있습니다.
이상적인 건 최소한의 역할만 있는 것.
🔍 왜 위험할 수 있냐면?
PUBLIC은 모든 사용자에게 자동으로 적용되기 때문에,
여기에 민감한 권한을 가진 Role이 부여되면,
모든 유저가 그 권한을 자동으로 가지게 된다.
점검 방법
1) Oracle
Select granted_role from dba_role_privs where grantee='PUBLIC'
의미 : PUBLIC 사용자에게 부여된 Role 목록을 조회하라.
📘 예시 결과
GRANTED_ROLE
--------------------------
CONNECT
RESOURCE
SELECT_CATALOG_ROLE
이런 결과가 나오면, CONNECT, RESOURCE, SELECT_CATALOG_ROLE 같은 Role이 PUBLIC에 부여된 거고,
즉 모든 사용자가 저 Role들의 권한을 일부 자동으로 가지게 된다는 뜻
✅ 안전할 수 있는 예시:
CONNECT: 데이터베이스 접속을 위한 기본 역할
RESOURCE: 일반적인 개발자용 역할 (테이블/프로시저 생성 등)
⚠️ 위험할 수 있는 예시:
DBA: 시스템 전체 관리자 권한
EXP_FULL_DATABASE, IMP_FULL_DATABASE: 백업/복원 전체 권한
SELECT_CATALOG_ROLE: 시스템 뷰 전체 조회 권한
이런 것들이 PUBLIC에 부여돼 있으면 모든 사용자에게 너무 많은 권한이 주어지는 셈이다.
2)MSSQL
SELECT s.name + '.' + o.name AS ObjectName, COALESCE(p.name, p2.name) AS OwnerName FROM sys.all_objects o LEFT OUTER JOIN sys.database_principals p ON o.principal_id = p.principal_id LEFT OUTER JOIN sys.schemas s ON o.schema_id = s.schema_id LEFT OUTER JOIN sys.database_principals p2 ON s.principal_id = p2.principal_id WHERE s.name IN ('public', 'guest')
의미 : SQL Server에서 public 또는 guest 스키마에 속한 오브젝트들이 어떤 이름이고, 누가 소유자인지 보고 싶은 것.
📘 예시 결과
✅ 안전할 수 있는 예시
ObjectName OwnerName
-------------------------------------
public.SampleView dbo
public.LogTable dbo
guest.ReadOnlyView guest
dbo, guest 같은 예상 가능한 계정이 소유자로 설정되어 있고,
오브젝트도 단순 뷰나 로깅 테이블처럼 시스템에 큰 영향을 주지 않는 경우
➡ 이런 건 비교적 안전합니다. (단, guest가 실제로 접근 가능한지 별도로 권한 확인 필요)
⚠️ 위험할 수 있는 예시
ObjectName OwnerName
------------------------------------
public.DropAllTable hacker_user
guest.AlterUsers guest
public.AdminProc some_user
- 공용 스키마(public/guest) 에 민감한 오브젝트가 존재
- 이름이 보기만 해도 위험 (DropAllTable, AlterUsers 등)
- 소유자가 hacker_user, guest, some_user처럼 정체 불명
➡ 이런 건 즉시 확인 대상, 심하면 삭제 또는 권한 철회 대상입니다.
라고 gpt가 말하고있으나, 일단 결과가 없는게 안전하다고 판단된다.
'인프라진단 > 진단 항목 정리' 카테고리의 다른 글
LINUX용 MSSQL 인터뷰 및 스크립트 (0) | 2025.04.04 |
---|---|
[W-53] 로컬 로그온 허용 (0) | 2025.03.17 |
[W-47] 계정 잠금 기간 설정 (0) | 2025.03.17 |
[W-35] 원격 레지스트리 서비스 (0) | 2025.03.13 |
[D-18] 인가되지 않은 Object Owner (0) | 2025.03.12 |