메뉴 건너뛰기

Dev tips

ASP [ASP] 심의준의 개발노트-OLEDB 연결계정 설정 방법

taknim 2008.06.20 19:16 조회 수 : 9744 추천:2110

http://www.myfav.co.kr/myfav/69필자가 보안 컨설팅을 할 때마다 자주 접하게 되는 사항 중 하나가 OLEDB 데이터 커넥션 연결 문자열 설정 부분이다. 오늘은 어떤 방법을 사용하여 설정하는 것이 보안에 좋은 방법인지 살펴보자. 웹서버와 DB 서버가 분산되어 있는 경우에 해당한다.

가장 흔하게 위험에 노출되어 있는 방법은 웹 소스 상에 연결 문자열을 나열하는 것이다. 설마 그렇게 하겠어? 라고 생각하는 분들도 계시겠지만, 의외로 많았다.(작년에 동남아 지역의 소스를 검토한 적이 있는데 역시 소스 안에 친절하게 DB 서버 정보를 보여주고 있었다.) 해킹 사례를 보면, 웹소스를 획득해 가는 경우가 흔히 발생하기 때문에 소스 획득을 통해 DB 서버의 위치와 사용자 계정 정보를 모두 획득해 갈 수 있다. 보안이 취약한 웹사이트를 보면, DB 사용자 계정이 DB_OWNER 그룹에 속해 있거나, 심지어는 SA 계정을 사용하는 경우 또한 많기 때문에, 소스 획득을 통해 DB서버의 안정성이 취약해 지게 된다.

이를 보완하기 위한 방법들을 알아보자.
1) 파일 참조 하기.
우선 연결 정보를 가지고 있는 파일을 하나 생성하여 이를 참조하는 방법이 있다. 주의해야 할 점은 연결정보를 가지고 있는 파일을 웹디렉토리에 보관하면 안된다는 것이다. 웹디렉토리에 보관하게 되면 위에서 설명한 위험 노출도가 똑같기 때문이다. 하나의 파일을 생성한 후 그 파일 안에 연결정보를 적고 global.asa 에서 Application On Start 시 파일을 읽어와 Application 객체 변수에 할당을 한다.

1) 연결 정보 저장 파일
PROVIDER=SQLOLEDB;SERVER=IP어드레스;DATABASE=데이터베이스명;USER ID=사용자계정;PASSWORD=비밀번호;Network=dbmssocn
2) global.asa
SUB Application_OnStart
    Set objFile = objFso.OpenTextFile("파일 위치 풀경로")
    strTempString = objFile.Readline
    Application.Lock
    Application("DB_ConnectionString") = strTempString
    Application.UnLock
End SUB

2) 레지스트리를 참조한 방법
또다른 방법으로는 웹서버의 레지스트리에 연결 정보를 등록해 놓은 후에 이를 참조하는 방법이다. 필자는 익명 액세스 계정에 IUSER_ 를 사용하는 것을 지양하고 있다.

IUSER_ 계정은 노출되어 있는 계정이기 때문에 악의적인 공격에 의해 비밀번호 획득할 우려가 있기 때문이다. 따라서, Users 그룹에 속한 계정을 하나 생성한 후(암호의 복잡성을 만족 시키는게 좋다.) 이를 Web Service용으로 사용하며 IUSER_ 계정은 중지한다. 또한 이렇게 생성된 계정은 시스템 드라이브에 대한 권한을 제거하고, 웹소스에만 접근이 가능하도록 하고 있다.
레지스트리에 값을 등록해 보자.

    i) HKEY_LOCAL_MACHINE\SOFTWARE 에 DBConnection이라는 키를 생성하자.
    ii)키를 생성한 후 문자열 값(ConnectionString)을 생성하자.
    iii) 생성한 문자열 값에 연결 정보를 할당 한다.

Global.asa 파일
SET objShell = CreateObject("WScript.Shell")
Application("DB_ConnectionString")= objShell.RegRead("HKLM\SOFTWARE\DBConnection\ConnectionString") '
SET objShell = Nothing


쉘스크립트를 통해 레지스트리에 접근하여 연결 문자열을 읽어온 후 Application 객체 변수에 할당하여 모든 페이지에서 참조할 수 있도록 하였다.

3번째로는 COM, COM+을 이용하여 연결정보를 가져오는 방법이 있다. COM, COM+ 의 사용방법과 관련해서는 차후 주제에서 다루도록 하겠다.

물론 이외에도 연결정보를 가져오는 방법 중 다른 방법을 선호하시는 분들이 계시리라 본다. 중요한 것은 연결정보를 노출시키지 않는데 있다. 레지스트리 참조하는 방법을 설명하면서, 웹서비스 계정에 대해 간단히 설명을 드린 것처럼 보안이란 총체적으로 구성이 되어야만 의미가 있다는 것을 기억하길 바란다.


출처 :
http://korea.internet.com/channel/content.asp?cid=185&nid=34010