SQL Server 2008

보안

Rick Byham

 

한 눈에 보기:

  • 암호화 기능 향상
  • 인증 기능 향상
  • 보안 감사
  • 정책 기반 관리

SQL Server 2008은 데이터베이스 환경의 전반적인 보안을 개선하도록 설계된 많은 향상된 기능과 새로운 기능을 제공합니다. 또한 SQL Server 2008에는 키 암호화 및 인증 기능이 추가되었고 사용자 동작에 관해 보고하고 규정 요구 사항을 만족하는 데 도움이 되는

새로운 감사 시스템도 도입되었습니다.

이 문서에서는 SQL Server® 2008 보안을 위한 가장 중요한 저장소 변경 사항에 대해 개략적으로 살펴봅니다. 여기서 가장 주목해야 할 점은 SQL Server 2005 노출 영역 구성 도구가 SQL Server 2008에서는 제공되지 않는다는 점입니다. 노출 영역 구성 도구에서 제공되었던 프로토콜 옵션은 이제 구성 관리자 도구에서 제공됩니다. 그러나 이제는 새로운 SQL Server 2008 정책 기반 관리 프레임워크를 사용하여 기능을 설정하고 해제합니다.

암호화 기능 향상

암호화 영역에서는 두 가지 사항이 크게 개선되었습니다. 첫째는 이제 SQL Server에서 외부 타사 하드웨어 보안 모듈에 저장된 암호화 키를 사용할 수 있다는 점입니다. 둘째는 데이터베이스에 연결되는 응용 프로그램에 투명한 방법으로 SQL Server에 저장된 데이터를 암호화할 수 있다는 점입니다. 따라서 데이터베이스 관리자는 기존 응용 프로그램 코드를 수정하지 않고도 전체 데이터베이스에 저장된 모든 데이터를 손쉽게 암호화할 수 있습니다.

전자의 경우는 SQL Server 2008 Enterprise, Developer 및 Evaluation 버전에서 제공하는 새로운 EKM(확장 가능 키 관리) 기능을 통해 가능합니다. EKM을 사용하면 엔터프라이즈 키 관리 및 HSM(하드웨어 보안 모듈) 솔루션을 제공하는 타사 공급업체가 SQL Server에 해당 장치를 등록할 수 있습니다. 이러한 장치를 등록하면 사용자가 해당 모듈에 저장된 암호화 키를 사용할 수 있습니다.

이들 공급업체는 해당 모듈에 키 에이징, 키 회전 등 고급 암호화 기능도 제공할 수 있습니다. 일부 구성에서는 이를 통해 sysadmin 그룹의 구성원이 아닌 데이터베이스 관리자가 데이터를 보호할 수 있습니다. 이 경우 T-SQL 암호화 문을 통해 외부 EKM 장치에 저장된 키를 사용하여 데이터를 암호화하고 해독할 수 있습니다.

또 다른 새로운 기능인 투명한 데이터 암호화를 사용하면 응용 프로그램을 변경하지 않고도 데이터베이스 파일을 암호화할 수 있습니다. 이 기능은 데이터 및 로그 파일에 대해 실시간으로 I/O를 암호화하고 해독합니다. 암호화에서는 복구 중에 사용할 수 있도록 데이터베이스 부트 레코드에 저장되는 DEK(데이터베이스 암호화 키)를 사용합니다. DEK는 서버의 master 데이터베이스에 저장된 인증서를 통해 보호됩니다. 그림 1의 다이어그램에는 투명한 데이터 암호화를 가능하게 하는 아키텍처가 나와 있습니다.

그림 1 투명한 데이터 암호화 아키텍처

그림 1** 투명한 데이터 암호화 아키텍처 **(더 크게 보려면 이미지를 클릭하십시오.)

이는 휴지 상태의 데이터를 보호하는 데 유용합니다. 기밀 자산을 암호화하고, 데이터베이스 서버 주변에 방화벽을 설치하는 등 데이터베이스를 보호하기 위한 몇 가지 예방 조치를 취할 수는 있지만 데이터베이스가 저장되는 실제 미디어(백업 테이프 포함)에는 또 다른 취약점이 있습니다. 즉, 악의적인 사용자가 이 미디어를 훔쳐 저장된 데이터에 액세스할 수 있습니다.

그러나 투명한 데이터 암호화를 사용하면 데이터베이스의 중요한 데이터를 암호화하고 인증서를 사용하여 데이터를 암호화하는 데 사용되는 키를 보호할 수 있습니다. 이를 통해 조직은 데이터 보호와 관련된 수많은 법률, 규정 및 업계 지침을 보다 쉽게 준수할 수 있습니다.

투명한 데이터 암호화를 사용하면 소프트웨어 개발자가 AES(Advanced Encryption Standard) 및 3DES(Triple Data Encryption Standard) 암호화 알고리즘을 통해 데이터를 암호화할 수 있습니다. 데이터베이스 파일의 암호화는 디스크에 기록되기 전에 암호화되어 나중에 메모리에서 읽을 때 해독되는 페이지를 통해 페이지 수준에서 수행됩니다. 투명한 데이터 암호화를 사용하는 데이터베이스의 백업 파일도 데이터베이스 암호화 키를 사용하여 암호화됩니다.

암호화된 데이터베이스를 복원하려면 데이터베이스 암호화에 사용된 비대칭 키나 인증서에 액세스할 수 있어야 합니다. 인증서나 비대칭 키가 없으면 데이터베이스를 복원할 수 없습니다. 관련된 백업에 액세스해야 할 수도 있으므로 모든 키를 잘 보관해 두어야 합니다.

인증 기능 향상

알고 있겠지만 Kerberos는 네트워크에서 클라이언트와 서버 엔터티(또는 보안 주체)를 매우 안전한 방식으로 상호 인증할 수 있는 네트워크 인증 프로토콜입니다. Kerberos를 통해 사용자는 유인 및 MITM(Man-In-The-Middle) 공격과 같은 보안 취약점을 해결할 수 있습니다. Windows® NTLM 인증에 비해 Kerberos는 더욱 안전하고 강력하며 보다 높은 성능을 제공합니다.

Kerberos를 사용하여 연결을 상호 인증하려면 SQL Server 인스턴스의 SPN(서비스 사용자 이름)을 Active Directory®에 등록하고 클라이언트 드라이버는 연결 시 등록된 SPN을 제공해야 합니다. SQL Server 2008에서는 Kerberos 인증이 TCP, 명명된 파이프, 공유 메모리 및 VIA(Virtual Interface Adapter)를 비롯한 모든 네트워크 프로토콜로 확대되었습니다. 기본적으로 클라이언트 드라이버는 연결된 SQL Server 인스턴스의 정확한 SPN을 자동으로 유추합니다. 또한 보다 효과적인 보안, 제어 및 문제 해결을 위해 연결 문자열 매개 변수에 SPN을 명시적으로 지정할 수도 있습니다.

IIS(인터넷 정보 서비스)는 ASP.NET, 보고서 관리자 또는 보고서 서버 웹 서비스에 대한 액세스를 더 이상 제공하지 않습니다. SQL Server 2008에서는 Reporting Services가 Windows 기반 및 사용자 지정 인증을 지원하는 새로운 인증 하위 시스템을 통해 모든 인증 요청을 처리합니다.

이제 Reporting Services에서 SQL Server CLR(공용 언어 런타임)에 기본 제공되는 Microsoft® .NET Framework 및 ASP.NET 기술을 호스트하며 OS의 HTTP.SYS 기능도 사용합니다. 보고서 서버에는 서버 구성 중에 정의한 포트 및 URL로 전달되는 요청을 수신하는 HTTP 수신기가 포함되어 있습니다. URL 예약 및 등록은 이제 HTTP.SYS를 통해 보고서 서버에서 직접 관리합니다.

보안 감사

SQL Server Audit는 데이터베이스 엔진 이벤트에 대한 사용자 지정 감사를 만들 수 있는 새로운 기능입니다. 이 기능에서는 확장된 이벤트를 사용하여 감사 정보를 기록하고 다양한 서버 및 데이터베이스 개체에 대한 감사를 사용, 저장 및 확인하는 데 필요한 도구와 프로세스를 제공합니다.

또한 SQL Server Audit는 SQL Server 추적보다 빠르며 SQL Server Management Studio를 사용하여 손쉽게 감사 로그를 만들고 모니터할 수 있습니다. 이제 개별 사용자에 대한 SELECT, INSERT, UPDATE, DELETE, REFERENCES 및 EXECUTE 문을 캡처하여 더 세부적인 수준으로 감사할 수 있습니다. 게다가 SQL Server Audit는 T-SQL 문인 CREATE SERVER AUDIT, CREATE SERVER AUDIT SPECIFICATION 및 관련 ALTER 및 DROP 문을 사용하여 완전한 스크립트가 가능합니다.

감사를 설정하려면 감사를 만들고 감사된 이벤트가 기록될 위치를 지정합니다. 감사는 Windows 보안 로그, Windows 응용 프로그램 로그 또는 지정한 위치의 파일에 저장할 수 있습니다. 그리고 감사의 이름을 지정하고 감사 파일에 대한 경로 및 최대 크기와 같은 감사 특성을 구성합니다. 또한 감사에 실패하면 SQL Server가 종료되도록 선택할 수도 있습니다. 감사된 이벤트를 둘 이상의 위치에 기록해야 하는 경우에는 둘 이상의 감사를 만듭니다.

다음 단계는 하나 이상의 감사 사양을 만드는 것입니다. 서버 감사 사양을 통해 SQL Server 인스턴스에 관한 정보가 수집됩니다. 이 사양에는 로그인 및 서버 역할 멤버 자격과 같은 서버 범위 개체를 포함하고, 데이터베이스 액세스 권한 등 master 데이터베이스에서 관리되는 데이터베이스 정보도 포함합니다. 감사 사양을 정의할 때에는 모니터된 이벤트를 수신할 감사를 지정할 수 있습니다. 서버 감사와 서버 감사 사양을 여러 개 정의할 수 있지만 각 서버 감사에는 한 번에 하나의 활성화된 서버 감사 사양만 포함될 수 있습니다.

또한 단일 데이터베이스에서 이벤트를 모니터하는 데이터베이스 감사 사양을 만들 수도 있습니다. 여러 데이터베이스 감사 사양을 감사에 추가할 수 있지만 한 서버 감사에서는 한 번에 데이터베이스당 하나의 데이터베이스 감사 사양만 활성화할 수 있습니다.

서버 감사 사양에 사용되는 SQL Server 감사 동작 이벤트는 관련된 감사 동작 이벤트 모음으로 그룹화되어 있습니다. 이러한 그룹은 감사 동작 그룹으로 제공됩니다. 감사 사양에 그룹을 추가하면 해당 그룹에 포함된 모든 이벤트를 모니터할 수 있습니다. 예를 들어 DBCC 명령을 제공하는 DBCC_GROUP이라는 감사 동작 그룹이 있습니다. 그러나 DBCC 명령을 개별적으로 감사에 사용할 수는 없습니다.

서버에 사용할 수 있는 감사 동작 그룹은 35개가 있으며 이 중에서 일부는 서로 밀접하게 관련되어 있습니다. SUCCESSFUL_LOGIN_GROUP, FAILED_LOGIN_GROUP 및 LOGOUT_GROUP을 예로 들 수 있습니다. 또한 감사 프로세스를 감사하는 데 사용할 수 있는 AUDIT_ CHANGE_GROUP 감사 동작 유형도 있습니다.

또한 데이터베이스 감사 사양에서는 데이터베이스 수준 감사 동작 그룹에 수집되는 감사 동작 이벤트의 그룹을 지정할 수도 있습니다. 감사 동작 그룹 외에도 데이터베이스 감사 사양에는 데이터 조작 언어 문을 감사하도록 개별 감사 동작 이벤트를 포함할 수 있습니다. 이러한 이벤트는 전체 데이터베이스를 모니터하거나 특정 데이터베이스 개체만 모니터하도록 구성할 수 있습니다. 예를 들어 SELECT 감사 동작을 단일 테이블 또는 전체 스키마의 SELECT 쿼리를 감사하는 데 사용할 수 있습니다. 또한 이러한 이벤트는 특정 사용자나 역할(예: 모든 db_writers)에 의한 동작을 모니터하도록 구성할 수도 있습니다.

예를 들어 SELECT 감사 동작을 통해 Mary 사용자나 FINANCE_DEPT 데이터베이스 역할 또는 공용 데이터베이스 역할에서 수행한 단일 테이블에 대한 SELECT 쿼리를 감사할 수 있습니다. 물론 사용자는 원하는 감사를 자유자재로 만들 수 있습니다.

종속성 보고

종속성 보고 기능은 새로운 카탈로그 뷰와 새로운 시스템 기능을 통해 개선되었습니다. sys.sql_expression_dependencies, sys.dm_sql_referencing_entities 및 sys.dm_sql_referenced_entities를 사용하는 경우 스키마 바운드 개체 및 비스키마 바운드 개체 모두에 대해 서버간 종속성, 데이터베이스간 종속성 및 데이터베이스 SQL 종속성을 보고할 수 있습니다.

새로운 데이터베이스 역할

msdb 데이터베이스에 포함된 데이터베이스 역할이 변경되었습니다. db_dtsadmin 역할 이름은 db_ssisadmin으로, db_dtsltduser 역할 이름은 db_ssisltduser로, db_dtsoperator 역할 이름은 db_ssisoperator로 바뀌었습니다. 이전 버전과의 호환성을 지원하기 위해 서버 업그레이드 시 이전 역할이 새로운 역할의 멤버로 추가됩니다.

이러한 변경 외에도 새로운 SQL Server 2008 기능을 지원하도록 새로운 데이터베이스 역할이 추가되었습니다. 특히 msdb 데이터베이스에는 서버 그룹(ServerGroupAdministratorRole 및 ServerGroupReaderRole), 정책 기반 관리(PolicyAdministratorRole) 및 데이터 수집기(dc_admin, dc_operator 및 dc_proxy)에 대한 새로운 역할이 포함되었습니다. 그리고 관리 데이터 웨어하우스 데이터베이스에는 데이터 수집기(mdw_admin, mdw_writer 및 mdw_reader)에 대한 새로운 역할이 포함되었습니다.

FILESTREAM 보안

이제 SQL Server에서는 FILESTREAM 저장소를 지원합니다. 이 지원을 통해 SQL Server 응용 프로그램은 문서 및 이미지 같은 구조화되지 않은 데이터를 파일 시스템에 저장할 수 있습니다. 따라서 클라이언트 응용 프로그램이 스트리밍 API와 파일 시스템의 성능을 통해 이점을 얻을 수 있을 뿐만 아니라 동시에 구조화되지 않은 데이터 및 해당 구조화된 데이터 간에 트랜잭션 일관성을 계속 유지할 수 있습니다.

FILESTREAM 데이터는 FILESTREAM 파일 그룹에 저장됩니다. 이 파일 그룹은 실제 파일 대신 파일 시스템 디렉터리가 포함된 특수한 파일 그룹입니다. 데이터 컨테이너라고 하는 이 디렉터리는 데이터베이스 엔진 저장소 및 파일 시스템 저장소 간에 인터페이스를 제공합니다.

보안 측면에서 보면 FILESTREAM 데이터는 다른 모든 데이터와 유사하게 보호됩니다. 즉, 테이블이나 열 수준에서 권한이 부여됩니다. FILESTREAM 컨테이너에 대한 NTFS 권한이 부여되는 유일한 계정은 SQL Server 서비스 계정이 실행되는 계정입니다. 데이터베이스를 열 때 T-SQL 트랜잭션 및 OpenSqlFilestream API를 사용하여 액세스하는 경우를 제외하고는 SQL Server가 FILESTREAM 데이터 컨테이너에 대한 액세스를 제한합니다.

정책 기반 관리

SQL Server 2008 정책 기반 관리에서는 SQL Server 관리를 위한 새로운 시스템을 제공합니다. SQL Server의 다양한 측면에서 테스트하고 보고하는 정책을 만들 수 있으며 이러한 정책은 단일 데이터베이스, SQL Server의 단일 인스턴스 또는 관리하는 모든 SQL Server에 적용할 수 있습니다.

정책 기반 관리를 통해 SQL Server 구성 옵션과 많은 보안 설정을 테스트할 수 있습니다. 그리고 일부 보안 설정에서는 정책을 준수하지 않는 데이터베이스 서버를 감지하고 이러한 데이터베이스 서버에게 정책을 강제로 준수하도록 단계별 조치를 취하는 정책을 만들 수 있습니다.

SQL Server 2008에서는 반드시 필요한 기능이 아닌 기능 상당수가 가능한 공격에 노출되는 것을 최소화할 수 있도록 기본적으로 해제되어 있습니다. 정책 기반 관리를 사용하면 필요한 추가 기능을 선택적으로 설정할 수 있습니다. 그리고 구성 설정이 정책에 맞지 않는 경우가 검색되면 경고가 표시되므로 정기적으로 구성을 평가할 수 있습니다.

정책 기반 관리는 관련된 속성을 그룹화하고 패싯이라는 구성 요소에서 이러한 속성을 제공합니다. 예를 들어 노출 영역 구성 패싯에는 임시 원격 쿼리, CLR 통합, 데이터베이스 메일, OLE 자동화, 원격 DAC, SQL 메일, 웹 길잡이 및 xp_cmdshell이 포함되어 있습니다. CLR 통합은 설정하지만 다른 모든 기능은 해제하는 정책을 만들 수 있습니다. 이 정책에는 이름을 Customer_Response로 지정하지 않는 한 모든 SQL Server 인스턴스에서 데이터베이스 메일 해제와 같은 복잡한 조건문을 포함할 수 있습니다.

정책을 만들었으면 모든 서버의 정책을 평가하여 이를 준수하지 않는 서버를 알려 주는 보고서를 생성할 수 있습니다. 구성 단추를 누르면 정책을 준수하지 않는 모든 인스턴스가 정책 설정을 사용하여 구성됩니다. 또한 서버 상태를 정기적으로 모니터하도록 정책을 예약해야 합니다. 노출 영역 구성 패싯은 데이터베이스 엔진, Analysis Services 및 Reporting Services에 대해 제공됩니다.

그러나 이 정책 기반 관리는 보안 적용 메커니즘으로 제공되는 것은 아닙니다. 대부분의 경우 충분한 권한이 있는 사용자는 정책을 위반하거나 정책을 무시하는 문을 실행하고 보안 정책을 위반할 수 있는 재구성 작업을 수행할 수 있습니다. SQL Server 2008 정책 기반 관리는 단순히 SQL Server 보안 설정을 모니터하는 데 유용한 보조 도구로만 간주해야 합니다.

패싯이 설정을 적용할 수 있는지 여부는 관련된 DDL 문이 비자동 커밋 모드에서 실행될 수 있는지 여부에 따라 달라집니다. 경우에 따라 패싯이 데이터베이스 엔진 인스턴스에 구성 설정을 적용할 수도 있지만 관리자 역시 이러한 설정을 다시 구성할 수 있습니다. 일부 패싯은 서버 트리거에 의해 실행될 수 있습니다. 이를 통해 권한이 낮은 사용자가 설정을 변경하지 못하도록 방지하고 관리자가 실수로 설정을 변경할 가능성을 줄일 수 있습니다. 이 경우 관리자는 설정을 변경하기 전에 정책을 임시로 해제해야 합니다. 또한 속성 상태를 보고만 할 수 있으며 속성을 변경할 수는 없는 패싯도 있습니다. 이러한 예로는 그림 2와 같이 대칭 키 또는 비대칭 키의 길이를 검사하는 정책이 설정된 패싯이 있습니다.

그림 2 비대칭 키에 대한 패싯

그림 2** 비대칭 키에 대한 패싯 **(더 크게 보려면 이미지를 클릭하십시오.)

패싯은 대부분의 데이터베이스 개체 유형에 대해 제공되며 이들 중 상당수는 보안 용도로 사용됩니다. 예를 들어 로그인 패싯은 암호 정책이 각 로그인에 적용되는지 여부를 결정할 수 있으며 저장 프로시저 패싯은 모든 프로시저가 암호화되는지 여부를 확인할 수 있습니다. 또한 사용자, 스키마, 암호화 공급자, 일반 조건 호환성 및 C2 감사 속성을 테스트하는 패싯도 있습니다.

Windows Server 2008

SQL Server 2008은 방화벽이 설정된 상태로 함께 제공되는 Windows Server® 2008에서 충분한 테스트를 거쳤습니다. 이제 방화벽 설정을 구성하는 방법을 다시 살펴보는 것이 좋습니다. 그리고 Windows Server 2008에서는 Windows Vista®에서 이미 사용해 봤을 사용자 액세스 제어도 제공합니다. 이 사용자 액세스 제어는 관리자 사용자에게 자동으로 부여되는 권한을 제한합니다. 이 기능은 모든 SQL Server 버전에 영향을 줍니다.

결론

보안은 SQL Server의 계획적인 기능 향상에 있어 하나의 중요한 영역으로 간주되고 있습니다. 암호화 및 인증 기능 향상을 통해 새로운 기능이 추가되었으며 새로운 감사 시스템 및 SQL Server 2008 정책 기반 관리를 통해 보안 준수 상태를 모니터하는 새로운 도구를 사용할 수 있습니다.

Rick Byham은 1995년 Microsoft에 입사했습니다. 그는 고객 지원 서비스에서 SQL Server 지원 엔지니어로 근무했으며 그 후에는 Microsoft Learning의 SQL Server 팀에 합류했습니다. 2003년 Byham은 SQL Server 온라인 설명서 팀으로 자리를 옮겨 테크니컬 라이터로 활동하고 있으며 현재 보안 설명서를 담당하고 있습니다. 문의 사항이 있으면 rick.byham@microsoft.com으로 연락하시기 바랍니다.

© 2008 Microsoft Corporation 및 CMP Media, LLC. All rights reserved. 이 문서의 전부 또는 일부를 무단으로 복제하는 행위는 금지됩니다..