Security WatchWindows Vista의 서비스 보안 강화

Wole Moses

Microsoft는 Windows 시스템을 파괴하고 IT 부서를 마비시키고 기업과 일반 소비자에게 막대한 복구 비용을 초래하며 악명을 떨친 여러 바이러스와 웜에 대응하여 2002년 초에 신뢰할 수 있는 컴퓨팅(Trustworthy Computing) 이니셔티브를 발표했습니다. 이 이니셔티브에 따라 Microsoft는

보안 문제에 대한 책임을 인정하고, 다양한 기능과 사용 편의성에 중점을 두는 쪽에서 보안과 무결성을 최우선으로 삼는 쪽으로 소프트웨어 개발 방향을 신속하게 선회했습니다. 2003년 8월을 강타한 Blaster 웜은 보안 이니셔티브에 한층 강한 동기를 부여했습니다. Blaster 웜에 대한 자세한 내용은 "클론의 습격" 추가 기사를 참조하십시오.

신뢰할 수 있는 컴퓨팅 이니셔티브는 보안을 고려한 코딩 방침을 강조하는 "디자인 단계부터 보안 적용", Windows® 구성 요소에 기본적으로 가장 안전한 설정을 적용하는 "기본적으로 보안 적용", 그리고 기업과 일반 사용자가 Windows 인프라를 안전하게 보호할 수 있도록 돕는 도구와 지침을 마련하는 것과 관련된 "배포 단계에서 보안 적용"으로 세분화될 수 있습니다.

신뢰할 수 있는 컴퓨팅 이니셔티브는 전반적인 보안 수준을 크게 향상시켰지만 Windows XP는 아쉽게도 이 이니셔티브가 시행되기 2년 전에 릴리스되었기 때문에 이러한 방침이 완벽하게 적용되지 않았습니다. Windows XP의 경우 서비스 팩 2(SP2)를 통해 이러한 철학의 많은 부분을 도입했지만 이니셔티브에 맞게 완전히 수정할 수는 없었습니다.

따라서 신뢰할 수 있는 컴퓨팅이라는 목표를 완벽하게 구현하는 Microsoft의 첫 번째 데스크톱 운영 체제는 바로 Windows Vista™입니다. 신뢰할 수 있는 컴퓨팅 이니셔티브 중 "기본적으로 보안 적용" 원칙(그림 1 참조)을 실제로 구현한 Windows Vista의 서비스 보안 강화는 현존하는 대부분의 맬웨어가 유발할 수 있는 악의적인 서비스 동작을 차단하도록 설계된 중요한 새 기능입니다. Microsoft는 서비스 보안 강화를 통해 Windows 서비스의 기본 동작과 보안 프로필을 변경하는 큰 변화를 실현했습니다.

Figure 1 기본적으로 보안 적용: Windows 서비스

기능 설명 결과
최소 권한 Windows Vista 서비스가 실행에 필요한 최소 권한만 사용하도록 구성됩니다. Windows Vista에서는 Windows 서비스가 사용할 수 있는 기본 보안 권한을 낮추어 맬웨어의 공격 가능성을 줄입니다.
서비스 격리 낮은 권한의 계정으로 서비스를 실행할 수 있도록 서비스 SID를 이용합니다. Windows Vista에서는 서비스 SID를 기반으로 리소스에 대한 액세스를 제한하여 맬웨어를 차단합니다.
제한된 네트워크 액세스 모든 Windows Vista 서비스는 기본적으로 네트워크 제한 상태로 구현됩니다. Windows Vista에서는 맬웨어가 서비스를 이용하여 부적절한 네트워크 작업을 수행하는 것을 차단합니다.
세션 0 격리 세션 0은 서비스용으로 예약됩니다. Windows Vista에서는 높은 권한의 서비스가 동일한 세션에서 실행되지 않으므로 메시지 기반 공격을 통해 높은 권한의 서비스를 가로채려는 악의적인 응용 프로그램이 차단됩니다.

위험한 서비스

과거에 NT 서비스라고 불리던 Windows 서비스는 고유한 Windows 세션에서 장시간 실행되는 응용 프로그램입니다. 이러한 서비스는 컴퓨터를 부팅할 때 자동으로 시작하거나 일시 중지하고 다시 시작할 수 있습니다. 일반적으로 서비스에는 사용자 인터페이스가 없으며 로그온한 사용자나 기본 컴퓨터 계정과는 다른 계정의 보안 컨텍스트에서 실행할 수 있습니다. 특정 유형의 응용 프로그램을 개발하거나 해당 응용 프로그램을 사용해야 하는 최종 사용자에게 Windows 서비스는 매우 유용한 기능입니다. 그러나 Windows 서비스의 강력한 기능과 융통성은 다음과 같은 이유로 악용되는 경우가 많았습니다.

첫째, 과거에는 일반적으로 Windows 서비스가 권한이 높은 Windows 계정(예: 로컬 시스템 계정)으로 실행되었습니다. 로컬 시스템 계정으로 실행되는 서비스가 맬웨어에 의해 손상될 경우 맬웨어가 해당 시스템에서 거의 모든 작업을 실행할 수 있게 됩니다. 예를 들어 Windows XP의 Remote Procedure Call (RPC) 서비스의 경우 Windows XP SP2 이전에는 RPC 서비스가 로컬 시스템 계정에서 실행되었기 때문에 Blaster, Welchia와 같은 웜이 RPC 취약점을 악용하여 관리 작업을 수행할 수 있었습니다.

둘째, 많은 서비스가 네트워크에 연결되므로 맬웨어가 이를 악용하여 네트워크를 통해 해당 서비스에 대한 인바운드 연결을 만들거나, 감염된 서비스에서 아웃바운드 연결을 만들어 다른 시스템을 감염시키거나, 키보드 입력을 모니터링하여 전달하는 등의 불법적인 동작을 수행할 수 있습니다. 오늘날 대부분의 웜 및 맬웨어 감염은 네트워크 연결을 통해 이루어집니다.

마지막으로, 서비스는 시스템이 부팅될 때부터 종료될 때까지 오랜 시간 실행되는 경우가 많습니다. 맬웨어 작성자에게 이러한 점은 시스템이 실행되는 동안에는 항상 서비스에 결함이 있는지 조사할 수 있으며 악의적인 활동을 수행할 충분한 시간이 있음을 의미합니다.

클론의 습격

이것은 엄청난 재앙을 가져올 수 있었습니다. 모든 것이 계획대로 되었다면 곧 전 세계 수십만 대의 Windows 시스템을 장악하여 어떤 명령이라도 지시한 다음 명령이 순조롭게 실행되는 것을 느긋하게 앉아 감상할 수 있었을 것입니다.

공격자는 끈질기면서도 교묘한 방법으로 은밀하게 여러 컴퓨터 시스템을 조사하여 취약한 진입점을 찾는 것부터 시작했습니다. 하지만 원하는 것을 찾는 데는 오랜 시간이 걸리지 않았습니다. 알려진 취약점에 대해 패치가 적용되지 않은 시스템이 공격 목표입니다. 이 취약점을 공략하는 방법은 익히 알고 있습니다.

이러한 종류의 취약점이 더욱 매력적으로 다가오는 이유는 이 취약점을 제대로 이용하면 시스템에 대한 모든 관리 권한을 얻을 수 있기 때문입니다. 이것은 단순히 한 계정을 제어하는 것을 넘어 Windows에서 가장 강력한 관리 계정을 조작할 수 있다는 의미였습니다. 그 이후부터는 모든 것을 마음대로 하면 됩니다.

잠시 숙고의 시간을 가진 후 공격자는 패치가 적용되지 않은 취약한 컴퓨터를 대상으로 자신의 공격 코드를 테스트했습니다. 결과는 성공적이었고 너무도 쉽게 컴퓨터에 대한 무제한적인 권한을 얻게 되었습니다. 이렇게 얻은 관리 권한을 통해 트로이 목마 코드를 다운로드하여 컴퓨터에 설치하고, 레지스트리를 수정한 후 다시 부팅함으로써 감염된 시스템이 언제라도 자신의 명령을 수행할 수 있는 상태가 되도록 만들었습니다. 레지스트리 수정으로 인해 컴퓨터를 다시 시작할 때마다 맬웨어가 실행되었습니다.

이제 목표는 분명해졌습니다. 감염된 컴퓨터로 네트워크에 있는 다른 모든 컴퓨터의 특정 네트워크 포트를 탐지하여 해당 네트워크 포트가 열려 있고 컴퓨터가 취약하면 새로운 대상 컴퓨터에 트로이 목마 코드를 다운로드하고 설치하는 것입니다. 레지스트리가 똑같은 방법으로 수정되었습니다. 이러한 과정이 모든 컴퓨터에서 반복되므로 클론 부대는 기하급수적으로 늘어났습니다. 하루가 끝날 무렵 지구상의 수천 대의 Windows 시스템이 공격자 이외에는 누구의 명령도 따르지 않는 클론 부대에 합류하게 되었습니다.

그것으로 충분하지 않았는지 공격자는 Microsoft Windows Update 사이트로 관심을 돌렸습니다. 전 세계 어디에 있는 컴퓨터도 취약점 수정 프로그램을 다운로드하지 못하도록 클론 부대에게 2003년 8월 15일 Microsoft Windows Update 사이트에 대한 DoS(서비스 거부) 공격을 가하도록 지시했습니다. 재미있는 것은 이 취약점 수정 프로그램은 이미 수 개월 전부터 공개되어 있었다는 것입니다.

이제 필자가 2003년 8월 전 세계의 Windows 컴퓨터를 강타한 MS Blaster 웜 감염 사건을 설명하고 있다는 것을 깨달았을 것입니다. 수십억 달러의 손실을 초래한 Blaster가 Windows 역사상 가장 심각한 공격 중 하나였다는 것을 부정할 사람은 없을 것입니다. 아이러니한 사실은 MS Blaster가 감염된 컴퓨터를 강력하게 제어했지만 실제로 구현된 내용은 대단히 단순했다는 것입니다.

Blaster 작동 방식

Blaster와 그 파생 프로그램은 Windows RPC 서비스의 취약점을 이용하여 버퍼 오버플로를 유도합니다. 이 취약점 공격에 성공한 공격자는 감염된 시스템에서 로컬 시스템 권한으로 코드를 실행할 수 있기 때문에 프로그램 설치, 데이터 보기, 변경 및 삭제, 모든 권한이 있는 새 계정 만들기 등 원하는 모든 작업을 수행할 수 있게 됩니다.

Blaster 웜은 자동으로 네트워크를 스캔하여 TCP 포트 135가 열려 있는 컴퓨터를 찾습니다. 대상이 발견되면 RPC 취약점 공격을 시도합니다. 공격이 성공하면 대상 컴퓨터의 포트 4444에 연결하여 TFTP(Trivial File Transfer Protocol)를 실행한 후 감염된 시스템에서 MSBLAST.EXE라는 웜 복사본을 다운로드하도록 지시합니다. TFTP는 Windows 2000, Windows XP 및 Windows Server 2003 운영 체제에 포함되어 있는 프로토콜입니다. 계속해서 공격 시스템은 새로 감염된 시스템에 MSBLAST.EXE를 시작하도록 지시하고, 대상 컴퓨터는 새로운 공격 컴퓨터가 됩니다. 또한, 블래스터는 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersion\Run 레지스트리 키를 수정하여 컴퓨터를 다시 시작할 때마다 자신이 실행되도록 만듭니다.

서비스 보안 강화

Windows Vista의 서비스는 네 가지 방식으로 보안이 강화되었습니다. 즉, 최소 권한으로 서비스 실행, 서비스 격리, 제한된 네트워크 액세스 및 세션 0 격리가 그것입니다. 계속해서 각 항목에 대해 자세히 설명하겠습니다.

최소 권한으로 실행 이전에는 많은 Windows 서비스가 Windows의 가장 강력한 계정인 로컬 시스템 계정의 컨텍스트에서 실행되었습니다. 로컬 시스템 계정에는 거의 모든 시스템 개체나 다른 사용자 프로필에 액세스할 수 있으며, 사용자를 가장하고, HKLM\SECURITY와 같은 중요한 레지스트리 키를 열고, 원격 서버에 컴퓨터의 자격 증명을 제공하는 등의 작업을 수행할 수 있는 사용자 권한이 있습니다. 맬웨어 작성자가 원하는 것은 Windows에 대한 이러한 수준의 액세스와 제어이므로 로컬 시스템 보안 컨텍스트에서 실행되는 서비스가 공격자의 좋은 목표가 되는 것은 당연합니다.

다수의 Windows 서비스가 로컬 시스템 계정으로 실행되도록 구성되어 있지만 그 중 상당수는 로컬 시스템 계정의 고유 권한 중 일부분만 필요로 합니다. 아쉽게도 Windows XP와 그 이전 버전의 Windows는 "전부 아니면 없음" 방식으로 작동하기 때문에 필요한 권한을 선택적으로 고르는 메커니즘이 없습니다. 따라서 많은 Windows 서비스는 불가피하게 과도한 보안 권한으로 실행되게 됩니다.

Windows Vista 서비스 보안 강화는 서비스 구성에 대한 최소한의 권한 개념을 도입하여 이 문제를 해결합니다. 최소 권한을 사용하면 로그온한 계정에 지정된 모든 기본 권한을 사용하여 서비스를 실행하는 대신에 기능 사용에 필요한 최소한의 권한으로 서비스를 실행할 수 있습니다.

예를 들어 운영 체제의 일부로 작동해야 하지만 보안 토큰을 만들 필요가 없는 서비스가 있을 수 있습니다. 최소 권한을 사용하면 토큰 만들기 권한을 제거할 수 있습니다. 결과적으로 서비스가 향후 공격에 취약해지더라도 공격자가 가할 수 있는 손상 범위를 줄일 수 있습니다. 개발자는 SC.exe(그림 2 참조)와 같은 명령줄 도구를 사용하거나 프로그래밍 방식을 사용하여 특정 서비스에 필요한 권한을 정의하고 지정할 수 있습니다. 기본적으로 Microsoft에서는 최소 권한을 적용하여 사전에 설치되는 모든 Windows Vista 서비스의 기본 권한을 제한합니다.

그림 2 Windows Vista 서비스 권한을 정의하는 SC 명령 옵션

그림 2** Windows Vista 서비스 권한을 정의하는 SC 명령 옵션 **(더 크게 보려면 이미지를 클릭하십시오.)

서비스 격리 Windows Vista 이전의 Windows 버전에서는 서비스가 중요 레지스트리 키나 파일 같이 권한이 필요한 개체에 액세스할 때 로컬 시스템 계정을 사용하여 개체에 액세스하거나, 레지스트리 키나 파일의 보안 수준을 낮추어 낮은 권한의 서비스 계정으로 액세스할 수 있게 만들거나, 서비스용으로 계정을 만들어 해당 계정으로만 개체에 액세스할 수 있게 하는 세 가지 방식을 통해 액세스 권한을 얻습니다.

이러한 방식은 모두 잘 동작하지만 기본적으로 문제가 있습니다. 처음 두 방법은 위험이 내재되어 있고 마지막 방법은 새 계정의 암호를 수동으로 관리해야 하는 부담이 있습니다.

예를 들어 바이러스 백신 프로그램이 바이러스 백신 소프트웨어와 관련한 바이러스 서명 파일과 레지스트리 항목 등 여러 중요한 시스템 개체에 액세스해야 하는 서비스를 설치한다고 가정해 봅시다. 바이러스 백신 서비스가 로컬 시스템 계정을 사용하거나 다른 기본 제공 보안 계정을 사용하여 해당 개체에 액세스하도록 구성되어 있는 경우 해당 계정을 사용하는 다른 Windows 서비스가 맬웨어에 감염되면 해당 맬웨어가 바이러스 백신 서명 파일에 액세스하여 수정하거나, 바이러스 백신 소프트웨어가 작동하는 방식에 영향을 주는 레지스트리 설정을 변경하거나, 바이러스 백신 서비스를 종료할 수 있는 위험이 있습니다. 실제로 최근의 맬웨어는 이러한 방법 중 몇 가지를 사용하여 자신을 은폐한 채로 작동합니다.

Windows Vista는 서비스 격리를 통해 이러한 보안 및 관리 효율성 문제를 해결합니다. 서비스 격리를 사용하면 서비스 보안 식별자(SID)가 들어 있는 액세스 제어 항목으로 파일이나 레지스트리 키 액세스 등의 리소스를 보호함으로써 서비스가 개체를 독점적으로 사용하도록 예약할 수 있습니다. 따라서 예제에서 설명한 바이러스 백신 서비스는 낮은 권한의 계정으로 실행될 수 있지만 중요한 서명 파일이나 레지스트리 키에 계속 액세스할 수 있게 됩니다. 이러한 액세스가 가능하도록 낮은 권한의 계정으로 실행되는 바이러스 백신 서비스에 Windows Vista가 부여한 SID가 지정됩니다. SID가 지정되면 바이러스 백신 프로그램이 해당 파일 시스템과 레지스트리 개체의 액세스 제어 목록(ACL)을 수정하여 바이러스 백신 서비스에 대한 독점적인 액세스 권한을 부여할 수 있습니다.

또 다른 예가 있습니다. 2003년의 Welchia 웜은 RPC 취약점을 이용하여 자신을 %System%\Wins\Dllhost.exe로 복사합니다. 또한 감염된 Windows 시스템에 자신을 서비스로 설치하기 위해 HKLM\SYSTEM\CurrentControlSet\Services에 키를 추가합니다. 그러나 Windows Vista에서는 두 위치 모두에 대한 액세스를 특정한 관련 서비스로 제한하며 낮은 권한의 계정을 통해 이러한 서비스의 액세스 권한을 지정하므로 Welchia 웜이 작동할 수 없습니다.

제한된 네트워크 액세스 Windows Vista에는 Windows XP SP2 방화벽이 제공하는 기능을 바탕으로 구축된 새로운 방화벽이 포함되어 있습니다. 새로운 주요 기능으로는 아웃바운드 필터링과 IPsec 통합이 있습니다. 또한 새로운 방화벽은 Windows Vista 서비스 보안 강화와의 통합을 통해 취약한 Windows 서비스를 이용하여 실행되는 맬웨어가 부적절한 네트워크 동작을 수행하기 더욱 어렵게 만듭니다.

Windows Vista 방화벽에서 Windows 서비스에는 서비스 동작에 대한 제한과 한계를 지정하는 네트워크 방화벽 정책이 적용됩니다. 예를 들어 네트워크 포트를 통해 통신할 필요가 없는 플러그 앤 플레이와 같은 서비스에는 "네트워크 액세스 없음" 제한이 지정될 수 있습니다. 이 제한이 지정된 경우 플러그 앤 플레이 서비스를 대상으로 하는 공격은 네트워크를 통해서는 이 서비스에 도달할 수 없습니다. 이렇게 제한된 서비스를 이용하는 모든 인바운드 또는 아웃바운드 통신 시도는 방화벽에서 차단됩니다. 네트워크에 액세스해야 하는 다른 서비스도 특정 포트만 사용하도록 구성할 수 있습니다. 개발자는 이 기능을 사용하여 특정 서비스의 네트워크 액세스를 제한할 수 있습니다.

네트워크 제한 기능은 서비스 보안 강화와 결합되어 잠재적인 서비스 기반 공격에 대해 강력한 방어벽을 구축합니다. 이것은 이전 버전의 Windows에 비해 크게 향상된 기능입니다. 이전에는 Windows가 네트워크를 통해 통신하는 방법, 위치 및 허용된 서비스를 결정할 방법이 없었습니다. 그러나 Windows Vista 방화벽의 RPC 서비스에 대한 네트워크 제한을 사용함으로써 Blaster, Sasser, Welchia와 같은 바이러스가 감염된 서비스를 사용하여 다른 컴퓨터와 통신하는 것을 차단할 수 있습니다.

세션 0 격리 Windows XP의 빠른 사용자 전환은 각 사용자에게 별도의 Windows 세션을 제공함으로써 여러 사용자가 동시에 로그온할 수 있게 해 줍니다. 시작 시 세션 0이 만들어지고 필요에 따라 다른 세션이 추가됩니다. 서비스는 항상 세션 0에서 실행되며 Windows Vista 이전에는 사용자 응용 프로그램도 세션 0에서 실행될 수 있었습니다. 하지만 사용자 응용 프로그램과 Windows 서비스를 동일한 세션에서 실행하는 경우 높은 권한에서 실행되는 서비스가 권한을 높일 수단을 찾고 있는 악의적인 소프트웨어의 공격 목표가 될 수 있기 때문에 보안상의 위험이 있습니다.

Windows Vista의 경우 세션 0에는 서비스만 실행되고, 응용 프로그램은 다른 세션에서 실행되며, 세션 0을 비대화형(대화 상자나 프롬프트와 같이 최종 사용자가 액세스할 수 있는 사용자 인터페이스를 서비스가 만들지 않음)으로 만들어 이러한 문제를 해결합니다. 이러한 변화로 인해 세션 0 격리는 Windows 서비스나 드라이버를 개발하는 개발자의 응용 프로그램 호환성에 영향을 미칩니다.

요약

Windows Vista는 Microsoft의 신뢰할 수 있는 컴퓨팅 이니셔티브가 완벽하게 반영된 최초의 데스크톱 운영 체제이며 기능이 대폭 향상되어 Windows 사용자 보호에 상당한 진전을 가져옵니다. 물론, 컴퓨터 보안은 계속 발전하고 있는 분야이며 맬웨어 작성자가 Windows를 공격할 새로운 방법을 찾고 탐색하고 연구하리라는 것은 자명합니다. 그러나 Windows Vista의 새로운 서비스 보안 강화 기능은 기본 보안 설정을 향상시키고 잠재적인 공격 대상 지점을 최소화함으써 방어벽을 상당히 높였습니다. 이러한 향상된 기능에 대한 자세한 내용은 microsoft.com/whdc/system/vista/Vista_Services.mspx(영문)를 참조하십시오.

Wole Moses는 Microsoft Regional Windows Lead이며 8년 경력의 Microsoft 전문가입니다. 현재 터키 이스탄불에 거주하는 Wole는 중동과 아프리카 지역의 가장 큰 신흥 시장에서 고객이 IT 인프라를 최적화하는 동시에 보안을 강화하는 Microsoft 기반 솔루션을 구상하고 설계할 수 있도록 돕고 있습니다.

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