데이터베이스 보안은 다음 4가지 측면에서 볼 수 있다
1. 윤리
2. 정책
Ex) 어떤 정보를 보여줄지
3. 시스템 관련 issues
Ex) HW 레벨에서 볼지, OS레벨에서 볼지 등등
4. 보안 레벨
Ex) top secret, secret, confidential, unclassfied 등
DB의 정보보안 3원칙
1. 무결성
- 의도적이거나, 예상치 못한 일로 데이터가 무단으로 변경되는 사항 방지
2. 가용성
- 정당한 권한이 있는 사용자가 데이터를 이용할 수 있게 함
3. 기밀성
- DB는 인증되지 않은 사용자로부터 기밀 데이터를 보호해야 함
이 3원칙을 지키기 위한 방법들은 다음 4가지가 있다.
1. access control
접근 제어라고 하며,
인증받지 않은 사용자의 접근을 차단한다.
DBMS에서 사용자 계정 생성과 로그인을 다룸(handle)
2. inference control
추론 제어라고 하며,
데이터가 해당하는 사람들 중 특정 개인을 유추할 수 있는 정보를 제한
Ex) 한 반에 여자가 1명인 경우, 반 전체 성적과 남학생 전체의 성적을 주면,
여학생의 성적을 유추할 수 있으니, 이런 데이터는 제한해야 한다.
3. flow control
권한이 없는 사용자에게 정보가 가는 것을 방지
Convert channels
비밀 채널이라고 하며, 정보가 암시적으로 허가받지 않은 사람에게 가는 경로
Ex) 휴지통에 중요한 파일을 넣고 비우기를 안 한 경우
4. encryption
data가 노출 될 때, 다른 사람들이 쉽게 알 수 없게 해야 함
DBA의 역할
DBA는 사용자에게 권한을 주고, 조직의 사용자와 데이터를 분류해야 한다.
access control
->계정 생성
discretionary control (임의 제어)
-> Privilege granting, revoke
mandatory control
-> 보안 레벨 할당
DB Audits
DB 감사라고도 하며, 작업이 잘 됐는지 확인하는 작업
1. System log
- recovery data, user act, device ID로 구성
- 각 로그인 세션동안, 사용자가 수행한 모든 작업 기록
Discretionary Access Contorl(DAC)
임의적 접근 제어라고 한다.
권한을 주고 뺐는 거라 보면 됨 (grant, revoke 사용)
all-or-nothing method
-> 권한을 주면 다 주고, 일부만 줄 수는 없다.
SQL에서는 user = account = authorization identifier로 본다.
privilege 할당엔 2가지 수준이 있다.
1. account level
- 사람한테 주는 권한
- schema, view를 만들 권한. 명령 권한이라고도 한다.
2. relation(or table) level
- 데이터에 주는 권한
- DB의 개인, 또는 view에 대한 접근 권한을 제어할 수 있다.\
grant/revoke
grant privilieges [ON object] To users [WiTH GRANT OPTION]
-> 유저에게 해당 object에 대한 권한을 준다.
-> 내가 가진 권한을 다른 사람에게도 줄 수 있다.
-> 이 때, 내가 가진 권한이 사라지면 그 사람에게 준 권한도 사라진다.
revoke privilieges [ON object] FROM users
해당 유저의 object 권한을 박탈한다.
예시를 더 보자
DBA : GRANT CreateTable TO A1 : A1에게 테이블 생성 권한 줌
DBA : GRANT SCHEMA A AUTHORIZATION A1
-> 위에하고 같은 명령이고, 스키마 A를 정의하고, 권한을 A1에게 줌
A1 : GRANT INSERT, DELETE ON A TO A2
-> A2란 사용자에게 A 테이블의 삽입, 삭제 권한을 줌
-> 테이블 A에 대한 A1의 권한이 사라지면, A2의 권한도 사라짐
A1 : GRANT UPDATE ON A(B) TO A3
-> UPDATE나, INSERT 권한은 관계에 삽입될 수 있는 특정 속성을 지정 가능
-> A3란 사용자에게 A테이블의 B attribute에 대한 업데이트 권한을 줌
-> 테이블 A에 대한 A1의 권한이 사라지면, A3의 권한도 사라짐
Madatory Access Control(MAC)
강제적 접근 제어.
데이터와 유저를 classfile로 분류를 해, 할 수 있는 작업을 정의.Multilevel security라고도 한다.
Data Classification Scheme
MAC에 사용되는 스킴
데이터 값하고는 상관이 없고,
데이터와 유저를 레벨을 만들어준다.
TS : Top scretet
S : secret
C : confidential
U : unclassfied
Bell-Lapadula Model
위의 Data Classfication을 사용하는 모델
class(S) : subject에 대한 권한. (user, accouunt, program 등, 유저라고 보면 됨)
class(O) : 오브젝트에 대한 권한. (relationm tuple, coluumn, operation 등)
제약 사항
1. class(S) >= class(O)이어야 데이터를 read할 수 있음
즉, 유저는 오브젝트에 같거나 높은 권한을 가지고 있어야 read 가능
simple security property라고 함
2. class(S) <= class(O)이어야 데이터를 write 할 수 있음
즉, write를 위해선, 유저가 오브젝트보다 권한이 작거나 같아야 함.
불법적인 정보의 흐름을 막기 위한 목적
Ex) S등급인 A란 data 오브젝트가 있고, S등급인 B라는 유저가 있을 때,
B가 A를 write 하면서, A를 unclassfied로 만들면, 모든 유저가 접근할 수 있게 됨
star property라고도 함
DAC와 MAC를 정리하면 다음과 같다.
DB 공격 유형들
sql Injection
흔히 볼 수 있는 기법
id = admin, password = admin인 상황일 때,
공격자는 id만 알고 있는 상황에서 다음과 같이 입력해서 admin 계정에 접속한다.
select * from users where id="admin" and password="1234" or '1'= '1'
이렇게 되면, password 1234는 틀리게 되지만,
뒤에 '1'='1'은 참이 되고, 이를 or 연산을 하면 참이 된다.
이제 admin과 True를 and연산하면 참이 되기 때문에, admin으로 로그인이 가능하다.
code Injection
임의의 코드를 프로세스에 주입시켜, 그 프로세스가 악성행위를 하는 기법
'학교 > 데이터베이스' 카테고리의 다른 글
19. SQL-DML (0) | 2020.12.10 |
---|---|
18. SQL-DDL (0) | 2020.12.10 |
16. Database Recovery (0) | 2020.12.10 |
15. Dead lock (0) | 2020.12.10 |
14. Concurrency Control (2) | 2020.12.10 |