화살표
보안패치보안관련 정보를 수집하여 고객님께 알려드리고 있습니다.
번호 제목 등록일
37 Oracle DB 보안 권고사항
2005-11-04
PL/SQL Poc Worm Vulnerability
Original release date: Nov 03, 2005
Last revised: --
Source: US-CERT
Systems Affected
· MSSQL ,Oracle, MySQL,Sybase, and Other Databases
Overview
취약 데이터베이스를 공격할 수 있는 웜 개념 증명 코드가 공개되어, 위험요소 및 파급성을
알아보았다. 이번에 공개된 개념 증명 코드의 공격 대상은 데이터베이스 설치 시 기본적으로
설정되는 암호가 그대로 사용되는 취약 시스템들이며, 공격 시 영향은 데이터베이스에 테이블을
신규로 생성만 하는 것으로 확인되었다. 재 확산 기능은 가지고 있지 않다.그러나, 향후 자기복제
및 DB의 주요 정보를 신규생성, 기존 정보를 변경,유출, 삭제 할 수 있는 웜이 출현할 가능성을
배제할 수 없다. 또한, 서버에저장되는 데이터의 중요성을 고려해볼 때, 단지 소수의 피해
발생만으로도 그파급성이 높을 수 있으므로, 관리자는 반드시 사전 예방 조치를 취하도록 한다.
I.Description
Step1. POC 웜은 서비넷 내에서 TCP 1521 포트를 사용하고 있는 시스템을 찾는다.
Step2. 접속이 성공하면 DB인스턴스(sid)를 검색 한다,
Step3. DB 인스턴스(SID) 검색에 성공하면, 데이터베이스에 기본적으로 설정되는 사용자
계정 및 암호로 원격 접속을 시도한다. 관리자가 기본설정암호를 변경하지 않았을
경우, 로그인이 성공하게 된다.
Step4. 로그인이 성공하면, 웜은 Y이름 (Date Type)의 컬럼이 포함되어 있는 X테이블을 생
성한다
II. Impact
o 데이터베이스 연결 포트는 보통 방화벽을 통하여 외부로 부터의 접속을 차단하므로, 외부로
부터의 직접적인 공격으로 인한 감염 피해 발생 가능성은 적을 것으로 보인다.
o 감염된 DB서버가 다른 DB 서버를 감염시키는 DB 서버 간 전파 유형 외에도, 웜 전파에 다른
매개체 가 이용될 가능성도 존재한다. 예를 들어 일반 PC를 감염대상으로 하는 악성 Bot이
DB서버에 웜을 감염시키기 위한 매개체로 이용되는 가능성을 생각해 볼 수 있다. 일반 악성 Bot에
데이터베이스 취약점을 공격하는 모듈이 탑재될 경우, 방화벽 내부에 있는 이미 악성 Bot에
감염되어 있는 PC들에 의해서 DB 서버가 감염될 가능성이 있다.
o DB서버를 공격하는 웜이 출현할 경우, 서버에 저장되는 데이터의 중요성을 고려해볼 때, 단지
소수의 피해발생만으로도 그 파급성이 높을 수 있으므로,관리자는 반드시 사전 예방 할 수 있도록
해야 한다.
III. Solution
□ DB 서버와 WEB 서버를 분리한 후 DB 서버의 공인 IP를 제거합니다.
□ 외부에서 DB 서버의 연결 포트를 알 수 없도록 DB 사용 포트를 변경하여 사용하십시
오.
□ 웹에서 사용하는 DB 서버 연결계정의 권한을 축소합니다
- SA 계정은 삭제하거나 제거하여주시고 사용자 계정을 만듭니다.이 때 사용자 계정은
DB_Owner로 생성하지 않아야 됩니다.
□ 불필요한 확장 저장 프로시져 제거
Oracle 서버에서 제공하고 있는 확장 저장 프로시져 중 사용하지 않는 프로시져들을
제거하도록 한다. xp_cmdshell, xp_regread, xp_dirtree와 같은 프로시져들은 공격자
의해 이용될 수있으므로 가능한 제거하는 것이 바람직합니다.
□ 사용자의 입력값에 대한 예외처리 고려
1. 파라메터가 숫자인 경우, isnumeric과 같은 함수를 이용하여 검증합니다.
2. 파라메터가 문자인 경우, 정규표현식을 통해 단일 따옴표를 치환합니다.
(‘ 의 경우 ’이나 ‘’과 같이 단일 따옴표를 무력화 시킵니다. 그외에도 “나 or 그리
고 SQL문의 종료를 가리키는 ; 의 경우도 sql injection을 일으킬 가능성이 있으므로
치환)
3. Query 빌드 시, 문자열이 아닌 매개변수 Query를 사용하는 저장 프로시저로 구현합
니다.
4. 파라메터내에 불리안식을 검사하여 치환합니다.
5. Web Application과 연동되는 데이터베이스의 접근 권한을 최소화합니다.
6. Internal Error(500) Page에 대한 오류정보를 노출시키지 않아야 합니다.
7. 그밖에 데이터베이스 쿼리에 사용되는 키워드들을 검사합니다.
(EXEC XP_, EXEC SP_, OPENROWSET, EXECUTE IMMEDIATE, UNION SELECT,
INSERT, UPDATE, 주석처리를 의미하는 --, /* … */ 등)
□ Oracle의 경우 "UTL_TCP", "UTL_INADDR", "CREATE DATABASE LINK"를 필요한 경
우만 사용할 수 있도록 권한을 제한한다.
참고 사이트
O http://www.ietf.org/rfc/rfc2616.txt
O http://msdn.microsoft.com/msdnmag/issues/04/09/SQLInjection/default.aspx
O http://online.securityfocus.com/infocus/1644
O http://www.securitydocs.com/library/3388