Notice
Recent Posts
Recent Comments
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
05-01 23:56
Today
Total
관리 메뉴

해킹공주의 일상

[D-08]응용프로그램 또는 DBA 계정의 Role 이 Public으로 설정되지 않도록 설정 본문

인프라진단/진단 항목 정리

[D-08]응용프로그램 또는 DBA 계정의 Role 이 Public으로 설정되지 않도록 설정

7.3.7 2025. 4. 8. 11:28
반응형

점검 내용

'응용프로그램 또는 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가 말하고있으나, 일단 결과가 없는게 안전하다고 판단된다.

 

 

 

반응형
Comments