강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

웹서버구축 보안점검가이드[3] - DB 취약점 점검

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

제 4 장  DB 취약점 점검

제1절 My-SQL

1. DB 시스템 보안패치 적용
  DB의 보안에 앞서 My-SQL이 동작하는 시스템에 대한 기본적인 보안패치를 적용한다. 응용 프로그램인 My-SQL이 동작하는 OS 자체의 보안상태가 완전하지 않을 경우, DB의 보안성 또한 담보될 수 없기 때문이다.

2. DBMS 계정 확인
  My-SQL 디폴트 설치 시 설정되지 않은 채 비어있는 데이터베이스 관리자 패스워드를 변경하도록 한다. My-SQL의 관리자인 root는 실제 Linux(또는 Unix)시스템의 root 사용자와는 관계가 없으며, 단지 이름이 같을 뿐이며, 기본 설치 시 비밀번호가 NULL로 설정되어 있으므로 비밀번호를 설정하도록 한다. 또한 디폴트로 설정되는 관리자 계정(root)을 무차별 대입 공격이나 사전대입 공격 등으로 추측해 내기 어려운 이름으로 변경하는 것이 좋다.

  또, 패스워드가 설정되어 있지 않은 DBMS계정이 존재할 경우 인가되지 않은 일반사용자가 DBMS에 불법접속이 가능하므로 DBMS에 저장되어 있는 주요 데이터들의 파괴, 변조 등의 위험성이 존재한다. My-SQL 설치 시 기본적으로 생성되어 있는‘test’계정 또한 삭제하도록 한다.

  My-SQL DB를 Install 하면 자동으로 서버에 My-SQL이라는 계정이 생성된다. 따라서 서버관리자들이 My-SQL 계정에 대한 관리가 소홀한 점을 이용하여 이 계정으로 서버에 불법으로 침투하는 경우가 종종 발생한다.

3. 원격에서 My-SQL 서버로의 접속 기능여부
  먼저 My-SQL이 디폴트로 리스닝 하는 3306/tcp 포트를 차단해 데이터베이스가 로컬로 설치된 PHD 어플리케이션에 의해서만 사용되게 한다. 3306/tcp 포트를 리스닝 하지 못하게 하면 다른 호스트로부터 직접 TCP/IP 접속을 해서 My-SQL 데이터베이스를 공격할 가능성이 줄어들게 되며, mysql. socket을 통한 로컬 커뮤니케이션은 여전히 가능하다.
  데이터 백업 등의 이유로 데이터베이스로 원격에서 접속해야만 하는 경우 아래와 같이 SSH 프로토콜을 사용한다.

4. 데이터베이스내의 사용자별 접속/권한 설정 확인
  데이터베이스에 대한 적절한 권한 설정이 되어 있지 않은 경우 DBA가 아닌 사용자가 중요 테이블에 대한 조작을 할 수 있으므로 각 User 별 데이터베이스권한 설정이 적절하게 이루어져야 한다. 또, DB 생성 후 사용자 접근 권한 설정 시, 관리상의 편의성을 이유로 모든권한을 부여하는 경우가 있는데 일반 사용자에게는 최소한의 권한만을 부여하도록 한다.

  특히, 일반 사용자에게 process 권한을 부여하게 되면, 해당 사용자가‘show processlist’ 실행을 통해 실행 중인 쿼리를 모니터링 할 수 있게 되어 비밀번호 등이 노출될 수 있다.

5. My-SQL 버전 확인 및 보안패치 적용
  3.22.32 미만의 버전에서는 사용자 인증처리 부분에서 버그 보고된 바 있다. 따라서 권한을 가지지 않은 일반인도 My-SQL의 모든 권한을 가지고 접근할 수 있다. 자신이 운영하고 있는 My-SQL DB의 버전을 점검해 보도록 하자.

6. My-SQL의 데이터 디렉토리 보호여부
  My-SQL은 테이블의 데이터를 파일 형태로 관리한다. 이 파일은 My-SQL 데이터 디렉토리라고 불리는 디렉토리에 저장되는데, 이 디렉토리의 권한을 잘못 설정할 경우, 서버의 일반 User가 My-SQL의 모든 데이터를 삭제해 버리는 경우도 있다. 또는 서버를 해킹한 해커에 의해서 My-SQL 데이터를 삭제해 버리는 사고도 발생한다.

  이는 My-SQL의 로그파일도 마찬가지이다. My-SQL의 경우에는 Update 로그 파일이나 일반적인 로그파일에는 사용자가 패스워드를 바꾸려고 하는 쿼리도 기록된다. 따라서 로그 파일의 퍼미션이 부적절하여 DB 권한이 없는 User가 My-SQL Log 파일에 접근하여 패스워드 DB 패스워드가 노출되는 경우가 발생한다.

  뿐만 아니라 지정된 옵션 파일(my.cnf, my.cnf)들에 대한 접근통제도 마찬가지이다. My-SQL 관리자는 여러 옵션을 옵션파일에 지정하여 관리를 쉽게 할 수 있으며, 이 옵션 파일들에는 root를 비롯한 일반 사용자들의 패스워드가 들어 있는 경우도 있다. 따라서 옵션파일은 관리자나 해당 사용자만이 읽고 쓸 수 있도록 한다.

  My-SQL 데몬을 mysql이라는 시스템 계정으로 구동할 경우, mysql 디렉토리 이하에 대한 읽기, 쓰기 권한을 제한하도록 한다.

제2절 MS-SQL

1. 최신 서비스 팩 설치 및 보안패치 설치
  MS에서 제공되는 서비스 팩과 수시로 발표되는 보안패치의 설치를 적용하는 것은
DBMS의 보안에 기본이 되는 부분이다. 현재 운영 중인 시스템의 안정성을 위해서 테스트
서버를 대상으로 먼저 서비스 팩 등을 적용해 본 후 이상 유무를 확인한 이후 운영 시스템에
적용하도록 한다.
  - MS-SQL 2000
    http://www.microsoft.com/korea/sql/downloads/2000/sp4.asp
  - MS-SQL 2005
    http://www.microsoft.com/downloads/details.aspx?familyid=
    b6c71ea-d649-47ff-9176-e7cac58fd4bc&displaylang=en


2. 인증 및 계정관리 확인
  가. Windows 인증모드 사용
  Windows 인증모드 사용을 통해, SQL 사용 권한이 없는 도메인 사용자 또는 Windows 사용자로부터 Windows 비밀번호 정책을 사용하여 보안을 강화할 수 있다.

  나. guest 계정이 활성화 여부 확인
  guest계정은 특별한 로그인 계정으로 이 계정을 데이터베이스에 지정함으로써 SQL 서버의 정상 사용자 모두가 데이터베이스에 액세스하게 허락하는 경우가 종종 있다. 이는 당연히 MS-SQL 서버의 보안에 치명적인 결과를 가져온다.

  다. public 데이터베이스 역할 부여 여부 확인
  모든 데이터베이스 사용자들의 표준 역할로서 사용자는 public 역할의 권한과 특권을 계승 받고, 이 역할은 그들의 최소한의 권한과 특권을 나타낸다. 따라서 public 데이터베이스 역할에 권한이 설정되어 있으면, 인가를 받지 않은 사용자도 모든 작업을 할 수 있는 취약점 발생한다.

  라. SYSADMIN으로 그룹의 사용자 제한여부 확인
  sysadmin(system administrators)의 역할은 SQL서버와 설치된 데이터베이스에 대해서 완전한 관리 권한을 필요로 하는 사용자를 위해 만들어 진 역할로서 이 역할의 구성원은 SQL서버에서 모든 작업을 수행할 수 있어, 이 역할에 인증되지 않은 사용자 있어서는 안된다.

3. 외부로부터의 SQL Server 포트 접속차단 여부 확인
  SQL Server 포트는 Default 가 TCP/1433, TCP/1434 이다. 즉 SQL Server를 운영하고 있는 사실을 알고 있는 해커라면, 방화벽에서 1433, 1434 포트가 OPEN 되어있다는 것을 알고 있는 것이나 마찬가지란 뜻이다. 실제로 인터넷에 노출된 MS-SQL 서버를 모니터링해보면 1433, 1434 포트를 Target으로 수많은 Scan 공격과 웜으로 인한 유해 트래픽이 끊임없이 공격을 시도하는 것을 발견할 수 있다. 따라서 SQL Server를 설치할 때 통신
Default Port를 임의의 다른 포트로 설정하여 운영하도록 하는 것을 권장한다.

4. 확장 프로시저 제거
  서버의 유지 관리를 위해 MS-SQL에서 제공하고 있는 확장 프로시저 중, 자주 해킹에 이용되고 있는 특정 프로시저를 제거한다. 특히 xp_cmdshell은 중국에서 제작된 해킹툴에서 자주 이용되고 있으므로 불필요할 경우 반드시 제거하도록 한다.

5. SQL Server연결 감사 수행
  SQL Server는 시스템 관리자의 검토를 위해 이벤트 정보를 기록할 수 있다. 최소한 SQL Server에 대한 연결 실패를 기록하여 이를 정기적으로 검토해야 한다. 가능하면 이 로그는 데이터 파일이 저장되는 드라이브와 다른 하드 드라이브에 저장한다.


제3절 Oracle

1. 최소 설치 진행
  오라클 데이터베이스를 처음 설치할 때, 꼭 필요한 요소만 설치하여야 한다. 무엇이 꼭 필요한 요소인지 확실치 않다면, 일반적인 구성으로 설치한다.

2. 디폴트 사용자 아이디 확인 및 패스워드 변경
  오라클 데이터베이스를 설치하면 다수의 디폴트 사용자 아이디가 생긴다. 이때 오라클의 사용자관리도구(DBCA : Database Client Administration Tool)가 이러한 디폴트 사용자 아이디를 자동으로 잠그고 기간만료 시키는데 예외가 되는 사용자 아이디들이 있다.

- 예외 사용자 아이디
    SYS, SYSTEM, SCOTT, DBSNMP, OUTLN, 그리고 3개의 JSERV사용자 아이디들

  상기 디폴트 사용자 아이디들을 잠그고 기간만료하지 않은 디폴트 사용자 계정(SYS,SYSTEM, SCOTT, DBSNMP, OUTLN, 그리고 3개의 JSERV 사용자 계정)들의 패스워드를 변경시켜야 한다.

3. "데이터 목록(Data Dictionalry)" 보호
  “데이터 목록(Data Dictionary)”를 보호하기 위해서는“파라미터 파일(Parameter File)” 인 init<sid>.ora의 내용을 OS가 제공하는 에디터를 이용하여 아래와 같이 수정하면 된다.
   
    O7_DICTIONARY_ACCESSIBILITY = FALSE

  이를 통해 적절한 권한을 가진 사용자(즉, DBA 권한으로 접속을 생성한 사용자)만이“데이터목록”상의‘ANY’시스템권한‘( ANY’system privilege)를사용할수있다.
  ※ 참고로 DBA 권한으로 접속을 맺으려면‘CONNECT /AS SYSDBA’라는 명령어를 사용하면 된다.

  만일 이러한 설정을 위처럼 하지 않는다면, 'DROP ANY TABLE' 시스템 권한을 가진 사용자는 누구라도 “데이터 목록”의 내용을 악의적으로 DROP할 수 있게 된다.

4. 권한(privilege)의 부여(GRANT)관련 확인
  - 사용자들에게 꼭 필요한 최소권한(least privilege)만을 부여(GRANT)하여야 한다.

  - PUBLIC 사용자 그룹에서 불필요한 권한을 회수(REVOKE)하여야 한다.
PUBLIC은 오라클 데이터베이스의 모든 사용자에게 디폴트 롤(role)로 적용된다. 따라서 모든 사용자는 PUBLIC에 권한 부여(GRANT)된 것은 어떤 일이든 할 수 있다. 이런 경우 사용자가 교묘하게 선택된 PL/SQL 패키지를 실행시켜 본래 자신에게 권한 부여된 권한 범위를 넘어서는 작업을 할 수도 있을 것이다.

  - 또한 PL/SQL 보다 더 강력한, 아래와 같은 패키지들도 오용될 소지가 있으므로 주의하여야 한다.

  -‘ run-time facilities’에 제약된 퍼미션을 주어야 한다(Restrict permission on runtime facilities).

  ‘오라클 자바 버추얼 머신(OJVM : Oracle Java Virtual Machine)’이 데이터베이스 서버의 run-time facility의 예가 될 수 있다. 어떠한 경우라도 이러한 run-time facility에‘all permission’을 주어서는 안된다.

  또한 데이터베이스 서버 외부에서 파일이나 패키지를 실행할 수 있는 facility에 어떤 퍼미션을 줄 때는 반드시 정확한 경로를 명시하여야 한다.

5. 강력한 인증정책을 수립하여 운영하여야 한다.

  - 클라이언트에 대한 철저한 인증이 필요하다.
오라클 9i는 원격인증 기능을 제공한다. 만일 해당기능이 활성화되면(TRUE), 원격의 클라이언트들이 오라클 데이터베이스에 접속할 수 있도록 한다. 즉, 데이터베이스는 적절하게 인증된(즉, 클라이언트 자체의 OS가 인증한) 모든 클라이언트들을 신뢰한다. 주의하라. 일반적으로 PC의 경우에는 적절한 인증여부를 보장할 수 없다. 따라서 원격 인증 기능을 사용하면 보안이 대단히 취약해진다.
원격인증기능을 비활성화(FALSE)하도록 설정한다면 오라클 데이터베이스에 접속하려는 클라이언트들은 server-based 인증(즉, 데이터베이스 서버의 인증)을 해야 하므로 보안이 강화된다.

원격인증을 제한하여 클라이언트의 인증을 데이터베이스 서버가 행하도록 하려면 오라클“파라미터 파일(Parameter File)”인 init<sid>.ora의 내용을 OS가 제공하는 에디터를 이용하여 아래와 같이 수정하면 된다.

    REMOTE_OS_AUTHENTICATION = FALSE

  - 데이터베이스 서버가 있는 시스템의 사용자 수를 제한하여야 한다.
오라클 데이터베이스가 운영되고 있는 시스템의 사용자수를 OS 차원에서 제한하고, 불필요한 계정은 삭제하여야 한다.

6. 네트워크를 통한 접근 제한

  - 방화벽을 구축/운영
다른 중요한 서비스와 마찬가지로 데이터베이스 서버는 방화벽 뒤에 설치하여야 한다. 오라클 네트워킹 기반인 Oracle Net Service (Net8 and SQL*Net으로 많이 알려져 있다.)는 다양한 종류의 방화벽을 지원한다.

  - 원격에서의 오라클 리스너 설정변경 제한
아래와 같은 형식으로 listener.ora(오라클 리스너 설정화일 : Oraclel listener control file)내의 파라미터를 설정하면, 원격에서 오라클 리스너 설정을 함부로 바꿀 수 없게 된다.

    ADMIN_RESTRICTIONS_listener_name=ON

- 접속을 허용할 네트워크 IP 주소 대역 지정
데이터베이스 서버가 특정한 IP 주소대역으로부터의 클라이언트 접속을 제어하려면 “Oracle Net valid node checking”기능을 이용하면 된다. 이 기능을 사용하려면 protocol.ora(Oracle Net configuration file)내의 파라미터를 아래와 같이 설정하여야 한다.

- 네트워크 트래픽 암호화 설정
가능하다면‘Oracle Advanced Security’를 사용하여, 네트워크 트래픽을 암호화하라. (Oracle Advanced Security는 오라클 데이터베이스 엔터프라이즈 에디션에서만 제공됨)

- 데이터베이스 서버의 OS 보안강화
불필요한 서비스를 제거하고, 사용하지 않는 포트(TCP, UDP)를 차단한다.

- 주요 보안 패치의 적용
오라클 데이터베이스가 운영되고 있는 OS와 데이터베이스 대한 모든 중요한 패치를 정기적으로 실시하여야 한다.

출처 :

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,035 명
  • 현재 강좌수 :  35,798 개
  • 현재 접속자 :  114 명