달력

022012  이전 다음

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  •  
  •  
  •  
보안을 위해서 업무상 필요한 권한과 적절한 편리성을 고려하여 만족할 만한 통제 수준을 결정하는 것은 쉽지 않다. 개발자들의 권한을 제한하고 싶어도 신속한 개발과 변경을 하는데 보안이 장애가 되어 어쩔 수 없이 많은 권한을 주고 있는 게 현실이다. 현실에서의 데이터베이스 보안은 개발의 편리성과 그와 상충되는 운영환경에서 통제되고 문서화된 관리 절차를 어떻게 접목하느냐의 선택일 것이다.

텔레비전을 보면 가끔 나오는 개인정보 유출이나 내부 직원의 기업 정보 유출은 드라마만의 내용이 아니라 이미 현실로 다가오고 있다. 도덕적으로 깨끗한 사람만을 채용하기에는 세상이 너무 복잡해지고 다양해졌다. 사고 사실을 알고 충격을 받아 당황하는 것은 이제 더 이상 남의 일이 아니다.


보안 전략 선택

필자는 얼마 전 A 고객사의 팀장으로부터 연락을 받았다. 그 내용은 보안에 관한 컨설팅이 필요하다는 것으로 약속을 정하고 방문을 하니 고객사 팀장은 개인정보보호법이라는 제목의 인쇄물을 필자에게 보여줬다. 개인정보보호법이 시행되면 어떻게 해야 할지에 관한 고민을 하고 있었다. 고객사 팀장은 이 문서에서 요구하는 사항을 만족할 수 있는 솔루션이나 관리 기법을 알고자 했다. 그래서 <그림 1>의 과정 중 3 요구 사항에 대한 솔루션 단계까지를 설명하기로 했다.

기능 요구 사항

필자를 비롯해 많은 사람들이 텔레마케터의 전화를 가끔 받는다. 나의 이름과 전화번호를 어떻게 알았냐고 물어보면 텔레마케터는 정확한 답변을 회피한다. 나의 정보가 어디서 유출되었을까? 인터넷에서 나는 누구일까? 인터넷에서의 나는 나를 대신한 ‘나의 정보’이다. 그런데 누군가가 나의 정보를 알고 있다면 나를 대신해 나쁜 짓을 할 수도 있을 것이다. 전자정부를 표방하고 있는 정부에서 이러한 개인정보를 보호하기 위해 법을 제정하는 것은 당연한 흐름일 것이다.

데이터베이스 관리자의 필요성

개인정보보호법 중 데이터베이스 관리 부분에는 인증, 계정 생성과 폐기, 계정 운영, 패스워드 관리에 대한 기본적인 요구 조건을 정의한다. 그밖에 추가적으로 잘못된 로그인 횟수에 대한 제한 설정, 일정시간 작업을 하지 않았을 때 자동 로그아웃되도록 한다는 내용 등이 있다. 접근 수준과 권한부여에 관한 항목도 눈에 띈다. 이와 같은 사항들은 데이터베이스 관리자가 처음 배우는 보안의 기본적인 내용이다. 단지 정책이 없기 때문에 전사적으로 적용한 적은 없더라도 교육을 통해 흔히 배우던 부분이다. SQL 서버 관리자에 의해 쉽게 정의될 수 있다. 예를 들어 <표 1>과 같이 사용자와 작업들을 정의하고 DB 서버에 적용하면 된다.

개인정보보호법을 위한 정책과 SQL DBA가 알아야 할 사항을 모두 이 지면에서 설명할 수는 없을 것이다. 다음과 같은 한 가지 예를 들어 설명해 보겠다. 다음 과정을 통해 정책과 솔루션 파악하고 적용하는 과정을 살펴보자.

⑴ 정책정의 : 정책 프로그램, 유틸리티, 명령어 등의 데이터에 대한 접근을 통제해야 한다.

⑵ 해결책 찾기 : 특정 프로그램을 어떻게 막을 수 있을까? SQL 서버에 이러한 기능이 내장되어 있느냐는 것인데, 당연히 포함되어 있다. 애플리케이션 역할을 이용하면 된다.

⑶ 관리자가 알아야 할 개념 : 애플리케이션 역할도 데이터베이스 역할의 일부분이다. 애플리케이션 역할은 그룹의 의미는 없고 오직 ‘권한의 집합이라는 의미만을 갖는다. 즉 애플리케이션 역할 안에는 데이터베이스 사용자가 포함되지 않는다. 애플리케이션 역할은 특정 업무가 있는데 다른 클라이언트(액세스, 엑셀 등)에서는 해당 데이터 접근을 금지하고, 오직 해당 업무를 위해 개발된 애플리케이션을 통해서만 데이터에 접근하도록 통제하기 위해서 사용된다.

⑷ 정책적용 : 다음에 살펴볼 ‘roleApp’라는 사용자정의 응용 프로그램 역할을 만드는 예제처럼 정책을 적용한다.

여기서 주의할 것이 있는데, 응용 프로그램 역할은 애플리케이션에서 사용하는 세션이 끝날 때까지만 유효하게 설정된다는 것이다. 세션이 종료되면 해당 애플리케이션을 사용하고 있던 사용자가 가지고 있는 모든 권한이나 역할도 모두 무효화된다.

사용자정의 응용 프로그램 역할을 만드는 방법은 엔터프라이즈 관리자를 사용하는 방법과 쿼리 분석기를 사용하는 방법이 있다. 먼저 엔터프라이즈 관리자를 사용하는 방법에 대해 알아보겠다. 엔터프라이즈 관리자를 사용하는 방법은 사용자정의 데이터베이스 역할을 만들 대상 데이터베이스의 ‘역할’을 선택하고, 오른쪽 클릭한 다음, ‘새 데이터베이스 역할’ 메뉴를 선택한다. 새 데이터베이스 역할 이름을 지정한 후 데이터베이스 역할 유형을 ‘응용 프로그램 역할’로 선택하면 된다. 마지막으로 응용 프로그램 역할에서 사용할 암호를 지정한 다음 ‘확인’ 버튼을 클릭하면 된다.

퀴리 분석기를 사용해서 사용자정의 응용 프로그램 역할을 추가하는 방법은 다음과 같다.

-- 사용자정의 응용 프로그램 역할을 추가
EXEC sp_addapprole N‘roleApp’, N‘password’
GO
-- 사용자정의 응용 프로그램 역할을 제거
EXEC sp_dropapprole N‘roleApp’
GO
-- developer1 데이터베이스 사용자가 열고 있는 세션에 roleApp 응용 프로그램 역할 부여
EXEC sp_setapprole roleApp, ‘a’
GO

참고로 응용 프로그램 역할에 대한 암호를 암호화하여 네트워크상에서 보안을 강화하고자 할 때는 다음과 같이 ODBC Encrypt 기능을 활용해서 암호화할 수 있다.

EXEC sp_setapprole ‘roleA’, {Encrypt N ‘password’}, ‘odbc’
GO


<화면 1> 응용 프로그램 역할 만들기

<그림 1> 보안 전략 선택의 절차


<표 1> 사용자와 작업에 대한 정의 예
사용자 계정 작업
feelanet 모든 데이터베이스 액세스
F_backup 백업 작업 수행
F_personnel 인사 DB에 대한 액세스
F_security 기밀 데이터에 대한 액세스
F_product 제품 정보 읽기 전용

정책 프로그램, 유틸리티, 명령어 등의 데이터에 대한 접근을 통제해야 한다는 정책을 이해하고 애플리케이션 역할을 적용하는 관리자가 있는가? 정보보호법에 대비를 하고 회사의 보안 수준을 한 단계 높이고 싶은가? 이 모든 것은 물론 사람이 직접 해야 할 일이다. 좋은 관리자가 있다면 쉬운 일이겠지만, 반대로 얘기하면 좋은 관리자가 없기 때문에 문제가 발생한다는 것이다.

현실에서 반영하기 어려운 문제

기능 요구 사항에 맞게끔 SQL 서버의 보안을 설명하던 중 A사 팀장은 필자에게 바로 적용하기 힘들 것 같다는 의견을 주었다. 개발자들이 운영중인 데이터베이스에 개체를 만들지 못하고 테스트 서버에서 만들면 DBA가 직접 적용하는 형태로 진행하기에는 현실적으로 어렵다는 것이다. 수많은 개발자들이 db_owner가 될 수밖에 없는 형편이라 적용하려는 정책 중 지금 적용할 수 없는 일들이 발생한다는 설명이었다. 필자는 항상 고객사에게 컨설팅할 때 만약 개발자 중 악의를 품고 데이터를 삭제한다거나 고객 정보를 나쁜 의도로 사용하는 것에 대한 대책은 있냐고 물어보면 대부분 고객사들에게서 현재는 별다른 방법이 없다는 답변을 듣는다. 개인정보보호법이나 회사의 정책을 적용하기 위해서는 통제된 환경에서 오는 불편함을 기꺼이 받아들여야 하고 새로운 투자가 필요하다는 딜레마에 빠진다. 현실에서의 데이터베이스 보안은 개발의 편리성과 그와 상충되는 운영 환경에서 통제되고 문서화된 관리 절차를 어떻게 접목하느냐의 선택일 것이다.

요구 사항에 대한 솔루션 검토

기능 요구 조건이 정의가 되면 어떻게 조건을 만족시켜야 하는지 선택해야 한다. 사람이 모든 일을 하기에는 많은 시간이 들고 반복적으로 일을 해야 하며 능력에 따라 다른 결과를 가져오기도 한다. 많은 솔루션 업체들이 이런 문제를 해결하기 위해 고민을 했고 그 결과 훌륭한 제품을 만들게 되었다. 관리자가 해야 할 일은 이 제품들 중 어느 것이 가장 적은 비용으로 가장 많은 이익을 얻을지 선택하면 된다.

뜨거운 감자가 된 암호화

중요 정보에 대한 침해 사고와 악용 사례가 증가하고 있다. 고객정보 유출로 인해 심각한 피해가 발생하고 기업의 이미지가 실추된다. 사람들의 악용으로부터 개인정보를 막기 위해 기밀성이 요구되는 DB 시스템 내의 중요 필드에 대해 암호화되어 있어야 한다. 개인정보(주민번호, 계좌번호, 의료보험증번호 등)를 DB에 저장할 때 암호화해서 저장해야 할 것을 의무화하고 있다. 주민번호를 대체하는 방식이 논의되고 있는 등 아직 완전한 스펙이 정의된 것은 아니다.

암호화를 위한 솔루션으로는 소프트웨어 방식과 하드웨어 방식이 있는데, 항상 그렇듯이 소프트웨어 방식은 하드웨어 방식에 성능이 떨어진다는 단점을 지적받고 있다. SQL 서버 2005 또한 자체적으로 데이터 암호화가 탑재되어 있어 개발자나 관리자가 공부해야 할 영역이 늘어났다. 그리고 많은 소스코드가 공개되어 있어 개발자들이 특정 컬럼을 암호화하는 것은 어려운 일이 아니다. www.codeproject. com/database/xp_md5.asp에서는 SQL 서버 2000에서도 확장 프로시저를 사용하여 암호화하는 방법을 보여준다.

손쉬운 암호화 기술로 아무 문제도 없다는 결론이면 행복한 사람(관리자), 불행한 사람(솔루션 제공자)들이 생기겠지만 현실은 그 반대의 결론으로 흘러가고 있다. 암호화 자체가 기술적으로 문제되는 것은 아니지만 데이터베이스의 특정 컬럼을 암호화하면 인덱스를 사용할 수 없어 성능에 큰 문제를 야기한다. 그리고 법의 내용과 시행이 어떻게 진행될지에 대한 정확한 정보가 없는 상태다. 데이터베이스 디자인이 변경되거나 추가 장비로 인해 비용, 데이터베이스와 통합된 기술 등이 문제될 것이다. 법으로 강요해도 중소기업들의 인프라 구축과 기술 부족으로 인해 지킬 수 없는 법이 될지도 모른다.

감사 시스템

최근 실시된 CSI/FBI(Computer Security Institute/Federal Bureau of Investigation) 컴퓨터 범죄와 보안 관련 설문 조사 결과를 보면 정보 도난과 DoS(Denial-of-Service, 서비스 거부) 공격으로 인한 손실이 가장 크다는 것을 알 수 있다. 여기서 주목해야 할 내용은 내부 사용자의 정보 도난이다. 인가된 내부 사용자들은 권한이 있음으로 데이터에 접속할 수 있는 것은 당연한 일이다. 인가된 내부 사용자에 의한 사고에 대비한 데이터베이스 감사 솔루션 필요성이 제기된다.

SQL 서버의 감사 기능

SQL 서버 2005는 C2 audit 설정을 통해 SQL 서버에서 일어난 모든 명령문과 개체 액세스에 성공하거나 성공하지 않은 시도를 검토할 수 있다. 이런 모든 내용은 추적 파일에 기록되며 이것은 프로필러를 사용하여 살펴볼 수 있다. 뜻하지 않은 데이터의 삭제, 테이블 삭제 등의 원인들도 찾을 수 있다. 이를 위해서는 다음과 같은 설정이 필요하다. 단 주의할 점은 서버에 약간의 부하가 걸리며, 추적 파일을 쓸 수 없으면 서버는 자동으로 중지된다는 것이다. 참고로 서버를 재시작해야만 C2 보안 감사가 시작된다.

sp_configure ‘show advanced options’, 1
go
RECONFIGURE
go
sp_configure ‘c2 audit mode’, 1
go
RECONFIGURE
go

감사 파일은 SQL 서버 데이터 폴더(보통 C:\Program Files\Microsoft SQL Server\MSSQL\Data)에 ‘audit trace_yyyymmddhhmmss.trc’로 저장되며 200MB 분량이 다 차거나 서비스가 중지되어야 파일로 남게 된다. 그리고 나서 새로운 파일을 또 기록하게 된다. 해당 폴더에 공간이 없으면 SQL 서버 서비스가 시작되지 않는다. 감사를 중지할 때는 앞의 스크립트에서 다음과 같이 바꾸어 실행하고 SQL 서버 서비스를 재시작하면 된다.

sp_configure ‘c2 audit mode’, 0

참고로 써드파티에서는 보안을 위한 제품을 만들어 판매하고 있다. SQL 서버가 기본적으로 제공하는 이상의 보안 감사를 원한다면 이런 제품들을 고려해 볼 수도 있다. 써드파티 보안감사 제품을 보고 싶다면 www. microsoft.com/sql/partners/technologysolutions/ security.asp를 참고하면 된다. 국산 제품은 아직 이곳에서 소개되지 않고 있다.

써드파티 솔루션 소개

여러 제품이 있겠지만 필자가 사용해 본 경험이 있는 IAuditor라는 제품을 잠깐 살펴보면 서버에 전혀 부하를 주지 않고도 SQL 서버에 들어오는 모든 패킷을 손실 없이 잡아낸다. 작은 규모의 사이트라면 약간의 부하가 문제가 되지 않겠지만 대용량 트랜잭션이 빈번한 사이트라면 이야기가 달라진다. SQL 서버의 감사 기능으로 충분한가? 그렇지 않다면 감사 솔루션의 구입이 필연적일 수 있다. 항상 기억해야 할 것은 소프트웨어 방식은 시스템에 많은 부하를 주고 하드웨어 방식은 시스템에 부하를 주지 않는 장점이 있다는 것이다.

<그림 2>는 IAudit에서 제공하는 기능을 설명하고 있으며, <그림 3>은 스위치 장비에 들어오는 패킷을 TAP나 포트 미러를 통해 감사 서버로 전달함으로서 프로덕션 서버에 영향을 주지 않는 구조하는 IAudit 아키텍처를 설명하고 있다. 대부분의 감사 솔루션들이 이와 비슷한 구조를 가지고 있다.

보안이 취약한 이유

사고 관리는 가능한 빨리 사용자에게 서비스를 복원하는 것이고 문제 관리는 문제에 대한 영구 해결책을 제시하는 것이다. 많은 중소기업에서 문제가 발생하면 전문 업체로부터 컨설팅을 받거나 자체적으로 해결하는 것으로 사고 관리가 부분적으로 이뤄지고 있지만 문제에 대한 근본적인 해결책이 이뤄지지 않고 있다. 근본적인 이유는 돈과 관계가 있는 것으로 보안에 따로 투자할 여력이 없다는 것이다. 그러나 반드시 알아야 할 사항은 보안 시스템을 구현하는 데에도 상당한 비용이 들지만 이 비용은 보안 사고에 따른 손상을 줄이기 위한 비용에 비하면 극히 미미하다는 것이다.

<그림 2> IAuditor 기능 소개

<그림 3> IAuditor 아키텍처


출처 : 마이크로소프트웨어 2006년 2월호

Posted by 상현넘™

댓글을 달아 주세요

기업들은 몇 번의 사고를 경험한 후에야 보안의 필요성을 인식하게 된다. 보안을 위한 턴키는 없으며, 다만 자신의 계층에서 최선을 다하면 될 것 이다. 물리적인 취약점이 존재하더라도 자신의 데이터베이스를 충실히 관리하는 장인정신이 필요하다. 현실에서의 데이터베이스 보안 핵심은 장인정신을 가진 관리자를 양성하는 것이 아닐까 생각해 본다.

얼마 전에 SQL 서버 2005가 출시되었다. 많은 회사에서 SQL 서버를 2005 버전으로 업그레이드할 것이고, 이에 따라 관리자는 새로운 기능을 익혀야 하며 알아야 할 사항도 많아졌다. 새로운 기능, 보안, 가용성, 성능 등에서 5년의 세월동안 SQL 서버가 진화했기 때문이다. 개인정보보호법에 DB시스템 내의 중요 컬럼을 암호화해야 하고 기밀성 데이터를 데이터베이스에 전송할 때도 암호화해야 한다고 되어 있다. 그래서 SQL 서버 2005로 암호화하는 방법과 기능을 미리 파악해야 할 필요성이 있다. SQL 서버가 제공하는 보안 모델을 살펴보고 어떻게 적용할 건지를 고민해야 할 시기가 왔다.


서버와의 연결은 안전한가?

SQL 서버 2005에 접속하기 위한 문과 열쇠를 이해할 필요가 있다. 문을 통해 정상적인 접속이 가능하지만 문을 악용해서 비정상적인 접속을 시도할 수 있다는 것도 염두에 둬야 한다. 이 문은 열쇠가 없이는 들어올 수 없을 정도로 최신의 기술을 갖추었다. 하지만 열쇠를 문 입구의 화단 밑에 숨겨 놓았다면 약간의 짐작으로 열쇠를 획득 할 수 있을 것이다. 기본적인 액세스 컨트롤은 문과 열쇠에 대해 이해하고 서버와의 연결을 제어하는 것이다.

엔드포인트 기반 인증

엔드포인트(Endpoint)는 인스턴스에 대한 엔트리 포인트로서 HTTP, 서비스 브로코, 데이터베이스 미러링 등에 사용된다. 어떤 목적으로 사용할지 명시적으로 만들지 않는다면, 존재하지 않고 기본적으로 어떠한 퍼미션도 없다. 생소하게 느껴질 수도 있으나, 외부에서 SQL 서버로 들어오기 위한 문이라고 생각하면 쉽게 이해할 수 있을 것이다. 이 문을 구성하기 위해서는 다음과 같이 사용 목적과 사용할 프로토콜, 접속 퍼미션 등을 부여해야 한다.

◆ SOAP, SSB, 데이터베이스 미러링 등에 사용된다.
◆ TCP, HTTP 등의 프로토콜을 사용한다.
◆ 허락된 사용자에게 접속 퍼미션을 부여한다.

사용 목적과, 프로토콜, 퍼미션 등을 부여하는 문법을 이용해 상품을 조회하는 엔드포인트를 다음과 같이 만들어 보자.

CREATE ENDPOINT 상품조회_Endpoint
STATE = STARTED
AS HTTP(
    PATH = ‘/Products’,
    AUTHENTICATION = (INTEGRATED),
    PORTS = ( CLEAR ))
FOR SOAP(
    WEBMETHOD ‘상품조회_SP’ (name=’AdventureWorks.Production.상품조회_SP’,FORMAT=ROWSETS_ONLY),
    WEBMETHOD ‘가격수정_sp’ (name=’AdventureWorks.Production.가격수정_sp’),
        WSDL = DEFAULT,
        DATABASE = ‘AdventureWorks’,
        NAMESPACE = ‘http://Feelanet.com/’
   )

기본적으로 엔드포인트에 접속할 수 있는 사용자는 아무도 없다. 예를 들어 철수가 SOAP를 통해 SQL 서버 2005에 접속해 상품조회를 하고 싶다면 다음과 같은 조치를 취해야 한다.

--철수에게 상품조회_Endpoint에 접근할 수 있는 권한을 준다.
GRANT CONNECT ON ENDPOINT:: 상품조회_Endpoint TO [철수]
--철수에게 상품조회_SP를 실행할 수 있는 권한을 준다.
USE AdventureWorks
GO
GRANT EXECUTE ON Production.상품조회_SP TO [철수]

다음 예제는 영희가 SOAP를 통해 상품조회와 가격 수정을 해야 하는 경우이다.

GRANT CONNECT ON ENDPOINT:: 상품조회_Endpoint TO [영희]
USE AdventureWorks
GO
GRANT EXECUTE ON Production.상품조회_SP TO [영희]
GRANT EXECUTE ON Production.가격수정_SP TO [영희]

엔드포인트에 대한 이해는 SQL 서버 2005의 여러 가지 기능들이 사용될 때 필수적이며 관리자의 중요한 보안 포인트가 될 것이다. 엔드포인트를 통해 지구촌 여러 곳에서 SQL 서버를 사용하는 환경이 만들어지고 편리성과 필요성은 많은 부분에서 충족되겠지만 보안에 틈이 생긴다면 무용지물이 될 수도 있다.

<화면 1> 윈도우의 보안 설정


<화면 2> 정책 위반으로 계정 만들기 실패


<화면 3> 계정 만들기



강화된 암호 정책

암호 정책이 없다는 것은 열쇠를 방치하고 있다는 것과 유사하다. 2005 이전 버전에서는 회사 정책에 의해 관리자가 수동으로 암호를 바꾸거나 복잡한 암호를 사용해야 했지만 시스템이 강요할 수는 없었다. 지키지 않아도 무방했다는 뜻이다. 하지만 SQL 서버 2005에서는 다음과 같이 강화된 암호 정책을 지원한다. 지키지 않을 수 없다는 것을 의미한다.

◆ 로그인 정책 강화 : 암호 길이, 암호 만료기간, 계정 잠금
◆ 로컬 윈도우 암호 정책 계승 : 지속적인 기업 광범위 정책 지원
◆ 접근 : 새로운 API 암호 정책 점검, 윈도우 서버 2003 이상만 사용가능, 이전 버전에 대한 초보적인 복잡성 점검

SQL 서버 2005는 윈도우 서버 2003의 암호 정책을 그대로 상속받는다. 암호는 최소 6자리 이상으로 하고 단순한 암호는 사용할 수 없다는 정책을 윈도우 서버 2003에서 설정했다면, SQL 서버 2005에 그대로 상속되어 계정의 암호 정책에 반영된다.

윈도우 서버 2003의 암호 정책을 따르지 않는다면 <화면 2>와 같은 결과가 나온다. 암호의 복잡성을 만족시키지 못하기 때문에 계정이 만들어지지 않는 단순한 데모다. 그래서 <화면 3>과 같이 정책을 위반하지 않도록 암호를 복잡하게 만들었고 반드시 다음에 로그인시 암호를 바꾸도록 설정했다.

예전에 경찰 보안 담당자들에게 집에 설치된 번호키를 몇 자리의 번호로 설정하고 얼마나 자주 바꾸는 것이 좋은지 물어본 적이 있다. 그 보안 담당자의 대답은 7자리 이상의 번호와 한 달에 한 번씩은 바꿔야 한다는 것이었다. 하지만 과연 현실이 그럴까? 보통은 1년에 한 번도 바꾸지 않는 것이 현실로 알고 있다.

또한 집에 초등학생이 있다면 따를 수 있는 정책이겠는가. 필자는 최소한의 원칙을 만들고 지켜나가는 것이 보안의 시작이라 생각한다. 적어도 자신이 관리하는 서버 개체들은 안전한가와 최소한의 특권 원칙을 지키고 있는지는 생각해봐야 한다.

데이터베이스는 모두 SA(System Administrator) 계정으로 접근하는 것이 일반적이고 당연하게 생각되고 있다. 윈도우는 Administrator로, SQL 서버는 SA로 로그인하는 이상한 관습들이 많은 회사를 지배하고 있다. 누구나 실수를 할 수도 있고 접근하지 말아야 하는 곳에 접근하고 싶은 욕심이 생길 수도 있다. 기본을 지키지 않아서 발생하는 많은 문제들을 경험할 수도 있다.


데이터베이스 개체 보안

데이터베이스 개체가 어디에 존재하는지를 생각해보자. 우물에서 숭늉을 찾을 수는 없는 노릇이다. 개체에 퍼미션을 설정하는 기본 작업과 함께 개체들을 논리적으로 나눠서 저장하는 것은 중요하다. 이전 버전에서는 데이터베이스 단위로만 나눌 수 있었으나 SQL 서버 2005에서는 스키마를 지원으로 세분화하고 있다. 또 하나의 중요 특징은 실행 문맥 제어를 통해 직접적인 권한 대신 대리인의 문맥으로 실행할 수 있다는 것이다.

새로운 등장, 스키마

보안의 세부 단위가 새롭게 등장했다. 스키마는 데이터베이스를 보안 단위나 논리적 단위(응용 프로그램)로 나눌 수 있는 개념이다. 책상에 서랍이 여러 개 있는 개념이라고 할 수 있다. 윗 서랍의 관리자와 아랫 서랍 관리자 그리고 사용자를 각각 분리해서 처리할 수 있다. 그래서 이제 개체를 명명할 때는 서버, 데이터베이스, 스키마, 개체로 불러야 한다. SQL 서버 2000에서는 서버, 데이터베이스, 소유자, 개체의 이름을 가졌다. 그래서 소유자를 삭제하고 싶어도 개체의 소유주이기에 지울 수 없거나 개체의 소유자를 다 바꾸고 삭제하는 무식한(?) 행동을 해야 했다. 하지만 2005에서는 스키마로 대처되어 이런 불편함이 사라지게 되었다. 사용자 스키마를 제한하면 다른 스키마의 접근이 차단되어 향상된 보안 관리를 할 수 있다. 그리고 응용 프로그램에게 향상된 네임스페이스 관리 계획을 제공한다. <리스트 1>은 스키마 수준의 개체 보안에 관해 보여주고 있으며, <그림 1>은 데이터베이스 스키마 개체의 계층 구조를 설명하고 있다.

실행 문맥 제어

기본적인 실행 문맥은 호출한 사용자의 권한으로 실행하면 된다. 데이터를 지우는 업무를 하기 위해서는 지울 수 있는 권한이 있어야 한다는 의미이다. 업무의 단위로 권한을 부여하다 보면 최소한의 권한이 아니라 어쩔 수 없이 많은 권한의 줘야 하는 경우가 생기기도 한다. 예를 들어 특정 테이블만 truncate할 수 있는 권한은 없다. 그래서 truncate 권한을 주면 다른 테이블에 대한 권한이 생겨 문제가 야기될 수 있다는 것이다. 그래서 특정 테이블을 지울 수 있는 개체를 만들고 개체를 실행할 수 있는 권한을 줘서 그 개체에서 수행하는 업무를 다른 사용자의 문맥으로 수행해야 할 필요성이 존재한다. 최소한의 권한 부여라는 보안의 기본원칙을 실행 문맥 제어를 통해 세밀하게 정의할 수 있게 되었다.

<그림 1> 스키마의 계층 구조


<표 1> 퍼미션을 조회하는 카탈로그 뷰

카탈로그 뷰 내용
Sys.Server_permissions 서버 레벨 퍼미션
Sys.database_permissions 데이터베이스 레벨 퍼미션
Sys.securable_permissions 모든 보호된 객체 리스트
Sys.fn_builtin_permissions 모든 수여 가능한 퍼미션 목록

EXECUTE AS와 SETUSER

저장 프로시저를 만들 때 누구의 문맥으로 실행할지를 지정할 수 있다. 사용자들은 저장 프로시저를 호출한 권한만 있으면 저장 프로시저에서 어떤 일을 하는가에 따른 퍼미션을 신경 쓰지 않아도 된다. Execute As는 「{ EXEC | EXECUTE } AS { CALLER | SELF | OWNER | ‘user_name’ } 」와 같이 사용한다. 여기서 CALLER는 호출한 사용자(기본 값), SELF는 저장 프로시저나 함수를 만든 사용자를 말한다. 또 OWNER는 소유자 문맥, user_name에는 특정 사용자를 지정한다. 그리고 SETUSER는 「SETUSER [ ‘username’ [ WITH NORESET ] ] 」와 같이 사용한다. EXECUTE AS는 저장 프로시저가 동작하는 순간에만 유효하지만 SETUSER는 다른 사용자로 가장해서 다른 업무를 수행하다가 다시 자신의 계정으로 돌아온다.

SETUSER ‘원혁’
GO
GRANT SELECT ON 한글탐정 TO 원용
GO
SETUSER

퍼미션 검사

관리자가 조회해야 할 기본적인 카탈로그 뷰이다. 누가 어떤 권한을 가지고 있는지를 보고 싶다면 <표 1>과 같은 뷰들과 친숙해야 한다. 필자가 SQL 서버 2000을 강의할 때 가장 많아 듣던 질문 중 하나가 어떻게 보안이 설정되었는지 보고 싶다는 것이었다.

데이터 암호화

보안 강화를 위해 민감한 데이터는 암호화되어야 한다. 아무리 관리자라도 고객들의 민감한 데이터를 볼 권한은 없다. 고객의 비밀번호나 주민등록번호 등과 같은 데이터를 생각해보자. 요즘은 데이터베이스에서 암호화는 필수적으로 필요한 시대에 왔다. 또한 법률 규정이 강화되고 있어 회사의 정책이나 법률 규정에 따라서도 데이터를 암호화해야 한다. 2005 이전 버전에서는 암호화된 모듈을 개발하거나 전문 업체의 제품을 구입하는 것으로 암호화가 이뤄졌다. SQL 서버에서 직접 지원하지 못했기 때문에 벤더 스스로가 해결책을 찾아야만 했다. 그러나 SQL 서버 2005는 데이터 암호화가 탑재되어 있다. 이전 버전보다 진보되었고 시대의 흐름을 반영하고 있다는 증거가 될 것이다.

키 이해하기

서비스 마스터 키는 연결된 서버의 암호, 데이터베이스 마스터 키 보호 등 시스템 데이터 보호 역할을 담당한다. 서비스 마스터 키는 현관 열쇠로 비유할 수 있는 것으로 연결된 서버의 암호와 연결 문자를 암호화하는데 사용된다. 그리고 데이터베이스 마스터 키를 암호화할 때도 사용될 수 있다. 방마다 열쇠(데이터베이스 마스터 키)가 있고 이 열쇠의 목적은 방안의 귀중품을 지키는 것이다. 그럼 이 열쇠는 누가 보호하고 있는 가를 생각해보면 이해가 될 것이다. 현관 열쇠를 이용해서 현관에 들어온 이후에야 방 열쇠를 사용할 수 있다.

데이터베이스 마스터 키는 디지털 증명서와 비대칭 키를 암호화하는데 사용되며, 디지털 증명서와 비대칭 키는 대칭키를 암호화하는데 사용된다. 방안에 있는 책상 열쇠가 최종적인 데이터를 보호할 것이다. 대칭키를 책상 열쇠로 생각하면 이해가 빠를 것이다. <그림 2>는 암호화 계층 구조를 보여주고 있다. 가장 상위에는 서비스 마스터 키가 있고, 윈도우의 DPAPI에 의해 암호화되어 있다.

디지털 증명서

디지털 증명서는 크게 다음 3가지 용도로 사용된다.

◆ 서비스 브로커에서 커뮤니케이션 인증이나 메시지를 암호화하는데 사용된다.
◆ 저장 프로시저 등의 개체에 서명하여 코드 인증을 한다.
◆ 디지털 증명서를 이용해 데이터를 암호화하고 복호화한다.

디지털 증명서를 사용하기 위해서는 새로운 T-Sql문을 익혀야 한다. <리스트 2>는 디지털 증명서를 만드는 문법을 보여주고 있고, <리스트 3>에는 특정 컬럼을 암호화하는 데모이다. 데모를 따라하면 <화면 4>와 같이 암호화된 결과를 확인할 수 있다.

SQL 서버 감사

데이터베이스 관련 분야에는 많은 솔루션들이 있다. 그 중에서 최근에 많은 관심을 받고 있는 솔루션은 감사와 관계되는 솔루션들이다. 네트워크에서 들어오는 모든 쿼리문을 데이터 손실 없이 잡아내는 제품부터 Agent 방식의 제품까지 정말 다양하다. 일반적인 회사의 업무에서 사용할 목적이라면 SQL 서버 2005에서 제공하는 감사 기능으로 충분할 수 있다. 그러나 특수한 목적이 있다면 SQL 서버 2005와 함께 추가적인 솔루션 도입을 고려해야 한다. 다음은 SQL 서버 2005의 감사 기능이다.

◆ 데이터 접근 감사 : SQL 서버에는 프로필러라는 모니터링 도구가 있다. 이벤트를 선택하고 데이터를 필터링하게 구성하면 쿼리문을 실시간으로 감사할 수 있다. 그러나 클라이언트에서 이 도구를 이용해서 실시간으로 보게 되면 서버에 부하를 줄 수 있다. 그래서 가급적이면 저장 프로시저를 이용해 파일로 남겨두고 나중에 프로필러에 불러오거나 테이블로 저장해두고 서버에 어떤 일이 발생했는지 감사할 수 있다. 감사 도구라기보다는 모니터링 도구에 가깝지만 특정 시간대에 일어나는 일을 보기 위한 용도라면 충분할 것이다. 서버가 다운되었는데, 블랙박스가 없다면 정확한 원인을 알기 힘들다. SQL 서버에도 블랙박스를 만들 수 있다.

◆ 로그인 감사 : 누가 언제 접속했는지를 알 필요성이 있다. 누군가 서버로 침입하기 위한 기록을 남겼다면 그런 공격에 대한 대비를 할 수 있다. SQL 서버 2005는 기본적으로 실패한 로그인 시도에 대해 감사하도록 설정되어 있다. 관리자는 정기적으로 감사 이벤트를 확인해야 한다.

◆ 사용자 정의 감사 : 누가 데이터를 삭제했는지 테이블을 수정했는지를 알고 싶다면 트리거나 이벤트 알림을 사용해야 한다. 외부의 침입뿐만 아니라 내부 운영에 관해서도 누가 어떤 일을 했는지 알아야 한다. 트리거나 이벤트 알림 서비스를 사용해서 구현하는데 목적에 맞는 감사 테이블을 만들고 특정 행위가 일어나면 감사 테이블로 적재하는 형태로 구현된다.

<그림 2> SQL 서버 2005 암호화 계층 구조



<화면 4> 암호화된 데이터 조회 결과

서버 구성은 안전한가?

Surface Area Configuration은 새로운 설치의 기본 보안을 지원하기 위한 도구이다. 윈도우를 설치하면 기본적으로 많은 서비스가 시작된다. 사용하지 않는 서비스가 동작하면 서버 리소스(메모리 등)가 그 만큼 낭비되고 보안의 틈은 그 만큼 커지게 된다. 좀 더 쉽게 SQL 서버를 구성하자는 단순하지만 직관적인 생각으로는 새로운 도구를 만들 수 없을 것이다. 처음 이 단어를 접했을 때 당황스러웠지만 한번만 실행해 보면 모든 것이 이해될 것이다.

<화면 5>는 Surface Area Configuration의 기본 화면 구성을 보여 준다. 화면에서 몇 번 클릭해보면 이 도구를 쉽게 이해 할 수 있을 것이지만, 간단히 정리하면 다음과 같은 일을 한다.

◆ 설치 시 서비스를 선택할 수 있다(가급적 필요 없는 서비스는 멈추는 것이 좋다).
◆ 기능 레벨에서 특정 기능의 ON/OFF 스위칭이 가능하다.
◆ 특정 통신 프로토콜에 대한 ON/OFF 스위칭이 가능하다.

보안 진단 체크 리스트

보안 진단 체크 리스트는 사람에 따라 평가가 달라지면 안되기 때문에 템플릿이 필요하다. <표 2>를 간단히 보자. 11가지 중 Yes라는 대답이 6가지 이상이 안되면 서버의 보안 상태는 아주 낮은 수준일 것이다. MS에서는 운영자 가이드, 보안 가이드를 통해 많은 정보를 주고 있다. 이러한 정보를 이용해서 단순하지만 적용 가능한 체크리스트를 만들어 활용해야 한다.

이론에 대한 실천이 중요

지금까지 SQL 서버 2005가 제공하는 보안 모델에 대해 살펴봤다. SQL 서버 2005에 관한 정보는 아직 부족하지만 점점 많아질 것이다. 아무리 많은 이론을 알아도 실천하지 못하는 지식은 반쪽이라고 생각한다. 어디서부터 시작하면 좋을까? SQL 서버 2005를 테스트 장비에 설치하고 시뮬레이션을 해보는 것도 좋은 시작일 것이다. 짧은 지면이라 SQL 서버 2005의 모든 보안 기술을 나열하지는 못했지만 전체를 간단히 살펴 볼 수 있는 기회가 되었으면 좋겠다.


<화면 5> 서비스와 연결 구성


<화면 6> 응용 프로그램에서 요구하는 기능 제어 구성

<표 2> 간단한 보안 체크 리스트

다음을 수행하고 있나? Yes or No
주기적으로 MBSA 실행  
정책 점검과 널 값 암호이 삭제 또는 검색  
사용되지 않은 로그인 삭제  
Public에 대한 퍼미션 객체 검색  
로그인-사용자 맵핑 확인  
붙이기/분리하기 방법  
Sp_change_users_login  
역할에 소속된 멤버십 관리  
트러스트된 개별 맴버십 확인  
서버 시작 시 프로시저의 안정성 확인  
주기적 검색 필요 -the surface area  

출처 : 마이크로소프트웨어 2006년 1월호

Posted by 상현넘™

댓글을 달아 주세요