OWASP Top 10 Vulnerabiliies

  1. Broken access control
  2. Cryptographic failures
  3. Injection
  4. Insecure design
  5. Security misconfiguration
  6. Vulnerable and outdated components
  7. Identification and authentication failures
  8. Software and data integrity failures
  9. Software logging and monitoring
  10. Server Side Request Forgery(SSRF)

대표적으로 이런 보안 취약점이 있다.

 

Database Security

DB 보안이 DB에 대한 의존도 증가에도 적절하게 합을 맞추지 못하는 이유는 다음과 같다.

  • DBMS와 security 간의 기술격차
  • 클라우드 기술의 발달로 인한 DB 공유
  • DB가 여러 형태로 공유됨
  • 보안이 약한 DB 존재
  • 복잡한 SQL문

 

Database

데이터를 구조화해서 모은 것이다. Data와 Data group의 관계로 이루어진다. 민감한 정보가 포함될 수 있어 보안이 필수적이다. Query language로 동작한다.

 

DB의 관리는 Database Management System, DBMS를 통해서 가능하다. 여러 사용자의 동시 사용을 가능하게 하며 data integrity를 보장한다.

DBMS architecture

 

Relational Databases

Data를 Table로 관리합니다. Table의 row에는 instance가 하나씩, column에는 instance의 attribute가 존재한다. Data에 접근하기 위해서는  relational query language를 사용한다. 여러 Table에 존재하는 data에 접근할 수 있게 된다.

Relational DB model

여러 Table의 data를 공통된 key로 접근할 수 있습니다.

 

Relational DB elements

Primary key, Foreign key, View가 있습니다.

 

Primary key는 talbe의 row, 즉 instance를 구분할 수 있는 unique한 key입니다. 하나 이상의 attribute로 구현되어 있습니다.

 

Foreign key는 다른 attribute를 참조해서 가져온 값입니다.

 

View는 가상의 table로, 여러 table에 존재하는 data를 조건에 맞춰서 가져와 새로운 table로 만듭니다. 보안 목적으로 사용되고는 합니다.

 

2 Tables in relational DB
View derived from DB

 

Structured Query Language (SQL)

DB에서 사용하는 언어로 Table을 생성하거나, Data를 추가하거나 삭제하고, View를 생성하고, Data를 가져오는 등의 기능을 수행할 수 있습니다.

 

SELECT * from Department

 

SQL Injection (SQLi)

가장 유명한 공격이며 네트워크 기반의 보안 체계에 위협적인 공격입니다. 보통 데이터를 일부라도 추출하는 것이 목표이다. DB server에 malicious SQL 명령어를 보냄으로써 공격을 수행한다. SQLi 공격이 성공한다면 다음의 공격에도 노출됨을 의미한다.

  • Modify or Delete data
  • Execute arbitrary OS commands
  • Denial-of-service(DOS) 공격 수행

 

Injection Technique

보통 SQL문을 종료시키고 새로운 명령어를 수행하도록 만드는 것이 일반적이다. 예를 들어서 다음과 같다.

 

  • Input (username)
    admin'--
  • SQL
    SELECT * FROM students WHERE username='admin'--' AND password='password'

 

이러면 admin 계정의 정보가 나오게 된다.

 

SQLi attack avenues

보통 SQLi 공격이 수행되는 영역은 다음과 같다.

User input 공격자는 SQL 명령어를 집어 넣는다.
Server variables 공격자는 HTTP나 네트워크 페킷 header에 데이터를 집어 넣는다.
Second-order injection System이나 DB에 존재하는 data를 이용한 system 내부에서의 공격이다.
Cookies 쿠키를 변경하여 쿠키 기반의 SQL문을 수정한다.
Physical user input 실제로 공격한다.

 

Inband attacks

Web 기술을 망가뜨리지 않고 user input을 이용해 DB를 공격하는 방법이다. 3가지 분류로 나뉘게 된다.

Tautology End-of-line comment Piggybacked queries
항상 true가 되도록 SQL을 수정한다. SQL 일부 수행하고 뒤는 주석처리하는 공격이다. SQL을 수행하고 뒤에 다른 SQL 명령어를 추가하는 방법이다.

 

Tautology

  • Input : John' or '1'='1' --
  • SQL
    SELECT * FROM students WHERE username='John' or '1'='1' -- ' AND password = 

-- 뒤는 주석처리가 된다. John의 계정 정보를 얻게 된다.

 

 

End-of-line comment

  • Input : admin' --
  • SQL
    SELECT * FROM students WHERE username='admin'-- ' AND password =

admin 정보를 얻게 된다.

 

Piggybacked queries

  • Input : John; DROP TABLE users; ==
  • SQL
    SELECT * FROM students WHERE username='John'; DROP TABLE users;=='

users Table이 사라지게 된다.

 

Inferential attack

실제로 data를 전송하는 과정은 없지만, 공격자가 계속해서 request를 보내고 response를 관찰해 Website나 DB의 정보를 얻어오는 공격이다.

 

Type이라던지, Structure의 정보를 얻어오는 것이 목표이다. 이 정보를 바탕으로 다른 공격을 수행하기 위해서이다.

 

해결책으로는 Blind SQL injection이 있다. Error를 보내지 않는 것이다.

 

Out-of-Band attack

Data 접근에 한계가 있지만, connectivity에 제한이 없는 경우 사용할 수 있는 공격이다. 공격자는 계속해서 다른 channel을 이용해 data를 얻어 오는 것을 수행한다.

 

ex) email에 쿼리를 적어두고, tester에게 계속 보내보는 것이다.

 

SQLi countermeasures

3단계를 거쳐서 예방할 수 있다.

(1)Defensive coding (2)Detection (3)Run-time prevention
Manual defensive coding
입력 쿼리를 parameter화 한다.
SQL DOM
Signature based
Anomaly based
Code analysis
쿼리가 예상되는 행동을 하는지 실시간으로 검사한다.

 

대표적인 방법 1. Filtering and Encoding data

SQL 문을 종료해버리는 ' 을 encoding하는 방법이다. ' → \'

 

대표적인 방법 2. Prepared Statement

Template에 input을 넣어서 사용함으로 '과 같은 잡기술 사용을 제한하는 방법이다.

 

Database Access Control

DB access control은 user의 권한을 관리하여 허가받은 행위만 할 수 있도록 만들어준다. 다음의 정책을 따른다.

Centralized administration
중안관리자가 권한을 관리한다.
Ownership-based administration
Table 생성자는 생성한 table에 대한 권한을 관리한다.
Decentralized administration
관리자는 user에게 권한을 주거나 삭제할 수 있다.

 

SQL access control

권한을 관리하는 2가지 명령어가 있다.

  • Grant
    권한 주기
    GRANT {권한} [ON table] TO {user | role | group(ex.PUBLIC)} 
  • Revoke
    권한 무효
    REVOKE {권한} [ON talbe] FROM {user | role | group}

권한이 필요한 행위는 다음과 같다.

  • Select
  • Insert
  • Update
  • Delete
  • References

 

Role-based Access Control (RBAC)

Role 기반의 access control로 관리 부담을 줄이고 보안성을 향상시켰다. 다음의 기능을 구현해야 한다.

 

  • Create, Delete role
  • Define permissions for a role
  • Assign and cancel assignment of users to role

 

User의 카테고리는 다음과 같다.

Application user End user Administrator
DB의 소유자
DB 쓰는 사람
Application을 이용하지만 소유자는 아님
일반 유저
DB의 관리자

 

실제로 MS SQL server에는 role 기반의 access control을 사용하고 있다. Fixed role이 존재한다.

 

Inference attack

Inference attack

자신의 권한으로 접근할 수 있는 정보들을 통해서, 접근할 수 없는 민감한 정보를 추론하는 공격이다.

 

Inference Detection

DB design 기반, Query 기반 두 가지 접근법이 있다.

 

  • DB design 기반
    DB 구조 바꿔서 inference 지우기
    Access control 바꾸기
    (과한 access control은 availabilty를 낮춤)

  • Query 기반
    Inference channel을 지우기
    Query가 inference channel을 이용하면 거절

 

근래에는 Multilevel secure DB와 Statistical DB에 맞는 Inference detection 기술이 고안되었다.

 

Database Encrytion

Encrypted DB

DB는 보안을 위해 multiple layer로 구현되고는 하는데, DB Encrytion은 마지막 보안 체계이다. 모든 level에 적용될 수 있다는 장점을 가지고 있다. 강력한 암호화 방법이 있다면, DB는 안전하다.

 

다만 단점으로는 Key management 문제와 Inflexibility 문제가 있다.

  • Key management
    복호화하는 데 필요한 key를 저장 및 관리해야 한다.
  • Inflexibility
    암호화되어 있기 때문에 원하는 Data를 찾기 어렵다.

 

동형암호를 사용하면 어느정도 해결된다.

'Study > Computer Security' 카테고리의 다른 글

9. Program Analysis  (0) 2023.06.14
8. Software Vulnerabilities  (0) 2023.06.14
MIDTERM 정리  (0) 2023.04.18
6. Web security  (0) 2023.04.17
5. Key distribution & Aggrement, Secure communication  (0) 2023.04.17