Security Watch주체와 보안 주체

Jesper M. Johansson

목차

주체/개체/작업 튜플
보안 주체의 유형
서비스
결론

보안의 모든 것은 가장 기본적인 수준에서 주체와 개체로 나눌 수 있으며 주체로부터 개체를 보호하는 것이라고 할 수 있습니다. 이러한 두 가지 구조체는 인증(자신이 누구인지 증명), 권한 부여(대상에 대한 액세스 부여) 및 감사(누가 무엇에 액세스 했는지 추적)에 사용됩니다. 그림 1에 나와 있는 것처럼 기본적으로 이러한 개념은 매우 단순합니다.

그림 1 사용자가 파일 읽기 시도

주체는 개체를 대상으로 어떠한 작업을 수행합니다. 때로는 주체가 작업을 수행하는 개체가 다른 주체인 경우도 있습니다.

Windows는 보안을 위해 기능이 매우 풍부한 의미 체계를 지원하며 주체와 개체의 정의를 크게 확장시켰습니다. 주체는 단순한 사용자가 아닌 그 이상이 될 수 있으며 표현은 기본적인 사용자 식별자보다 훨씬 복잡해질 수 있습니다.

Windows 용어에서 보안 주체는 단순히 일반적인 주체(일반적으로 사용자)에 그치지 않고 그룹과 컴퓨터를 포함합니다. 보안 주체는 SID(보안 식별자)를 할당하고 다른 항목에 대한 액세스 권한을 부여할 수 있는 어떤 것이나 될 수 있습니다.

이달의 Security Watch 기사에서는 Windows에서 주체가 어떻게 표현되고 사용되는지 소개하겠습니다.

주체/개체/작업 튜플

보안을 관리하는 작업은 결과적으로 주체/개체/작업 튜플로 귀결되는 경우가 많습니다. 주체는 개체에 어떤 작업을 수행하려고 시도합니다. 예를 들어 그림 1에 나온 것처럼 사용자가 파일에 액세스하려고 시도할 수 있습니다. 사용자가 파일을 읽으려고 하면 운영 체제는 개체(파일)에 설정된 사용 권한이 주체(사용자)가 해당 개체에 대한 작업(읽기)을 수행하도록 허용하는지 확인해야 합니다. 사용 권한이 적절하면 액세스 요청이 성공합니다. 사용 권한이 적절하지 않으면 액세스 요청이 거부됩니다. 여기까지는 모든 것이 간단합니다.

대/소문자에 따른 의미 차이

Windows에서 대문자 "A"가 포함된 "Administrator" 또는 "Administrators"는 일반적으로 각각 사용자와 그룹을 나타냅니다. 반면에 모두 소문자로 되어 있는 "administrator"는 권리자 권한이 있는 사용자 계정이나 사람을 나타냅니다. "Guest" 및 "guest"와 같은 다른 엔터티의 경우에도 동일한 차이가 적용됩니다.

보안 주체의 유형

앞으로 보안 주체라고 부를 주체는 Windows 기반 시스템 및 확장된 Windows 기반 네트워크에서 단순한 사용자 이상의 개념이 될 수 있습니다. 그러나 여전히 사용자는 가장 기본적인 개념입니다.

사용자 사용자는 컴퓨터에 로그온하는 고유한 엔터티입니다. 기본적으로 모든 보안 주체는 어느 정도 사용자와 연관되어 있습니다. Windows에는 로컬과 도메인의 두 가지 사용자 유형이 있습니다. 로컬 사용자는 컴퓨터의 로컬 SAM(보안 계정 관리자) 데이터베이스에 정의됩니다. 모든 Windows 기반 컴퓨터에는 해당 컴퓨터의 모든 사용자를 포함하는 로컬 SAM이 있습니다.

DC(도메인 컨트롤러)에는 로컬 SAM이 없고 따라서 로컬 사용자도 없다고 생각하는 경우가 많지만 이는 사실이 아닙니다. DC에도 로컬 SAM이 있지만 해당 SAM의 계정은 디렉터리 서비스 복원 모드에서만 사용할 수 있습니다.

로컬 SAM에는 최소한 Administrator와 Guest의 두 사용자 계정이 포함되어 있으며 Guest 계정은 기본적으로 비활성화됩니다.

Windows Small Business Server 2008을 제외하고 모든 버전의 Windows Server 2008에서는 Administrator 계정이 기본적으로 활성화되며 컴퓨터에 처음 로그온할 때 이 계정을 사용해야 합니다. Windows Vista에서는 Administrator 계정이 기본적으로 비활성화되며 상당히 제한적인 상황에서만 사용할 수 있습니다.

두 경우에 모두 지정된 컴퓨터를 관리하는 사용자를 위한 최소 두 개의 계정을 만들어야 합니다. 대개 그렇듯이 어떤 종류든 규정을 준수해야 하는 경우라면 이는 필수 사항입니다. 각 사용자의 한 계정은 사용자의 개인 관리 계정이어야 합니다. 다른 계정은 사용자의 비관리 작업을 위한 개인 비관리 계정입니다.

로컬이 아닌 사용자는 도메인 사용자 이러한 사용자는 도메인에 대한 DC에 정의됩니다. 로컬 계정과 도메인 계정 간의 차이는 주로 계정의 범위라고 할 수 있습니다. 도메인 계정은 도메인의 모든 컴퓨터에서 사용할 수 있지만 로컬 계정은 정의된 컴퓨터에서만 유효합니다. 이 밖에도 도메인 계정은 로컬 계정에 비해 상당히 많은 속성이 있습니다(그림 23 참조).

그림 2 로컬 계정의 속성 창

그림 3 도메인 계정의 속성 창

도메인 계정에는 전화 번호, 관리 관계 및 전자 메일 계정과 같은 조직 환경의 다양한 특성을 지원하기 위한 풍부한 의미 체계가 있습니다. 도메인 계정은 또한 네트워크 상의 여러 컴퓨터에서 사용되고 여러 컴퓨터의 사용 권한을 할당할 수 있으므로 네트워크에서 훨씬 유용합니다. 또한 도메인에서 계정을 정의하면 한곳에서만 계정을 관리하면 되므로 관리 작업이 간소해집니다.

컴퓨터 컴퓨터는 사용자 유형 중의 하나입니다. 상속 모델의 영향을 받은 이러한 정의는 특히 Active Directory에 잘 들어맞습니다. 그림 4에는 컴퓨터로 이어지는 상속 구조가 나와 있습니다.

그림 4 사용자와 컴퓨터가 어떻게 연관되어 있는지 보여 주는 Active Directory의 상속 계층

그림 4에는 몇 가지 매우 흥미로운 부분이 있습니다. 첫째, Active Directory의 모든 클래스는 Top이라는 루트 클래스에서 파생됩니다. 실제로는 Top 역시 Top의 하위 클래스로 볼 수 있습니다. 둘째, User 클래스는 organizationalPerson 클래스에서 파생됩니다. 셋째이자 가장 흥미로운 부분은 Computer 클래스가 User 클래스에서 파생된다는 점입니다. 다른 말로 하면 개체 지향 용어로 Computer는 사용자의 한 유형입니다. 컴퓨터는 주체로 취급되어야 하며 사람과 거의 같은 특성을 가지므로 이러한 형식의 컴퓨터 의인화하는 여러 측면에서 이치에 맞습니다.

그룹 기억하겠지만 주체는 개체에 액세스하려고 시도하는 어떤 것입니다. 운영 체제는 개체의 사용 권한을 검사하여 이 액세스를 허용할지 여부를 결정합니다. 초창기부터 OS 설계자들은 각각의 모든 사용자들이 필요로 하는 모든 개체에 사용 권한을 할당하기란 무척 어렵다는 사실을 인식했습니다. 이 문제를 해결하기 위해 설계자들은 사용자가 그룹의 구성원이 될 수 있도록 했습니다. 이렇게 하면 사용자에는 물론 그룹에도 사용 권한을 할당할 수 있게 됩니다.

그룹은 사용자가 아닐 수도 있지만 사용자 및 컴퓨터와 같은 식별자를 가질 수 있으므로 보안 주체의 한 종류입니다. Windows에서는 한 사용자가 여러 그룹의 구성원이 될 수 있으며 한 개체에 여러 그룹에 대한 사용 권한을 할당할 수 있습니다. 약간의 제약이 있지만 중첩된 그룹도 허용됩니다.

비도메인 컨트롤러는 두 가지 유형의 그룹, 즉 기본 제공 그룹과 관리자가 정의한 로컬 그룹을 가질 수 있습니다. 그러나 Active Directory에는 기본 제공 도메인 로컬 그룹, 기본 제공 글로벌 그룹, 기본 제공 유니버설 그룹, 사용자 정의 도메인 로컬 그룹, 사용자 정의 글로벌 그룹, 그리고 사용자 정의 유니버설 그룹의 6가지 보안 그룹 유형이 있습니다.

도메인 로컬 그룹에는 정의된 도메인 내의 리소스에 대한 사용 권한만 할당할 수 있습니다. 여기에는 사용자, 임의의 트러스트된 도메인이나 포리스트의 유니버설 및 글로벌 그룹, 자체 소유 도메인의 도메인 로컬 그룹이 포함될 수 있습니다.

글로벌 그룹은 그룹이 정의된 도메인의 사용자와 글로벌 그룹만 포함할 수 있지만 도메인이 속해 있는 포리스트나 신뢰하는 포리스트 내의 모든 도메인의 리소스에 대한 사용 권한을 할당할 수 있습니다.

유니버설 그룹에는 모든 도메인의 사용자와 유니버설 및 글로벌 그룹이 포함될 수 있습니다. 유니버설 그룹에는 모든 신뢰하는 도메인이나 포리스트의 리소스에 대한 사용 권한을 할당할 수 있습니다. 다른 말로 하면 유니버설 그룹은 도메인 로컬 그룹과 글로벌 그룹 간의 하이브리드 방식이라고 할 수 있습니다.

워크스테이션에는 기본적으로 Administrators와 Guests의 두 가지 그룹이 포함되어 있지만 도메인에는 전체 세 가지 유형의 비교적 많은 그룹이 포함되어 있습니다. 그림 5에는 도메인의 기본 그룹이 나와 있습니다. 모든 그룹은 보안 그룹으로 지정되므로 사용 권한을 할당할 수 있습니다. Microsoft Exchange Server에서 사용자를 전자 메일 목록으로 그룹화하는 데 사용되는 메일 그룹과 보안 그룹을 혼동하지 않도록 하십시오. 두 가지 모두 Active Directory에 정의됩니다. 모든 Windows 기반 컴퓨터에 있는 로컬 그룹은 DC의 Active Directory에 정의됩니다.

fig05.gif

그림 5 Active Directory의 사용자 컨테이너에 정의되는 기본 그룹

DC와 마찬가지로 일부 비DC에도 많은 수의 그룹이 있습니다. 그림 6에는 테스트 컴퓨터에 있는 16가지 기본 제공 그룹이 나와 있습니다. 컴퓨터에 있는 그룹의 정확한 수는 컴퓨터에 설치한 역할에 따라 다릅니다.

fig06.gif

그림 6 비DC의 기본 제공 그룹 (더 크게 보려면 이미지를 클릭하십시오.)

개체에 사용 권한을 할당할 때는 지금까지 본 것보다 더 많은 그룹을 볼 수 있을 것입니다. 실제로 그림 7에 나와 있는 것처럼 기본적인 DC에는 63개 이상의 그룹 및 기본 제공 보안 주체가 있습니다.

그림 7에 나와 있는 63개의 그룹 중 많은 수는 보안 주체의 동적 그룹을 나타내는 "특수 ID"라고 하는 추상 개념입니다. 이들은 Logon 그룹이라고도 합니다.

Logon 그룹 Logon 그룹은 사용자나 다른 보안 주체가 로그온하는 방법과 같이 보안 주체의 일부 동적인 특성을 나타내는 그룹입니다. 예를 들어 그림 7에 나와 있는 INTERACTIVE 그룹은 컴퓨터의 콘솔 및 터미널 서비스를 통해 로그온한 모든 사용자를 포함합니다. 반면에 NETWORK 그룹은 네트워크를 통해 로그온한 모든 사용자를 포함합니다. 사용자는 당연히 이러한 그룹 중 하나의 구성원만 될 수 있으며 로그온 시에 멤버 자격이 할당됩니다. 이러한 그룹을 사용하면 특정한 방법으로 로그온한 모든 사용자에게 사용 권한을 부여할 수 있지만 어떤 사용자가 이러한 그룹의 구성원이 되는지는 제어할 수 없습니다.

fig07.gif

그림 7 기본적인 DC에 있는 63개 이상의 그룹 및 기본 제공 보안 주체

이러한 특성을 가진 다른 그룹도 있습니다. 주의할 만한 그룹으로 Everyone 그룹과 Authenticated Users 그룹이 있습니다. Everyone 그룹은 이름이 의미하는 것처럼 이 컴퓨터에 액세스하는 모든 사용자를 포함하지만 Windows XP부터는 완전한 익명의 인증되지 않은 사용자는 포함되지 않습니다. 다른 말로 하면 지원되는 모든 Windows 기반 운영 체제에서 악명 높은 NULL 사용자는 Everyone에 포함되지 않는다는 것입니다. 게스트는 포함됩니다.

Authenticated Users 그룹 역시 동적으로 채워지지만 실제로 인증된 사용자만 포함됩니다. 따라서 게스트는 Authenticated Users에 포함되지 않습니다. 이것이 이 두 그룹의 유일한 차이점입니다. 그러나 운영 체제에 있는 유일한 게스트 계정이 비활성화되어 있으므로 게스트 계정을 활성화하는 단계를 수동으로 수행하는 경우를 제외하고는 Authenticated Users와 Everyone은 기능상으로 차이가 없습니다. 게스트 계정을 활성화한 경우에는 게스트가 리소스에 액세스할 수 있기를 원하는 것이므로 Everyone 그룹을 유지할 필요가 있습니다.

그러나 많은 관리자들이 "전 세계의 모든 사용자가 서버에 대한 권한을 가지는 상황"을 심각하게 받아들이고 이를 해결하기 위해 다소 과격한 조치를 취하는 경우가 있습니다. 일반적으로 이러한 수정은 매우 심각한 결과로 이어집니다. Everyone의 사용 권한을 Authenticated Users의 사용 권한으로 대체할 이유는 전혀 없습니다. 게스트가 여러분의 컴퓨터에 대한 사용 권한을 가지도록 하려면 게스트 계정을 활성화하고 그렇지 않으면 게스트 계정을 비활성 상태로 두면 됩니다. 게스트가 사용 권한을 가지도록 하려면 Everyone의 사용 권한이 필요합니다. 그렇지 않으면 Everyone 그룹은 Authenticated Users와 전혀 다르지 않게 됩니다.

이러한 변경을 "심층적인 방어"를 위한 변경이라고 말하는 사람들이 있습니다. "심층적인 방어"를 "다른 방법으로 합리화할 수 없는 변경"이라고 정의한다면 이 주장도 사실일 것입니다. 이러한 수정으로 얻을 수 있는 보안 향상은 미미하거나 전무한 반면 위험성은 크게 높아집니다. 즉, 기본값을 그대로 사용하는 것이 좋습니다.

필자의 설명이 충분히 이해되지 않는다면 Microsoft 기술 자료 문서 885409 "보안 구성 가이드 지원"을 읽어 보십시오. 기본적으로 이 문서에서는 이러한 완전한 사용 권한 대체를 수행할 경우 지원 계약이 무효화될 수 있음을 명시하고 있습니다. 즉, 이 경우 여러분이 운영 체제를 직접 만드는 것이나 다름이 없으며 Microsoft는 작동을 보장할 수 없다는 것입니다.

기본 제공 그룹인 Users와 Authenticated Users 간의 차이점에 대해서도 확인할 필요가 있습니다. Authenticated Users는 다른 도메인의 사용자와 Users가 아닌 로컬 그룹의 구성원인 사용자, 그리고 아무 그룹에도 속하지 않은 사용자(실제로 가능함)를 포함하여 컴퓨터에 대해 인증을 수행한 모든 사용자를 포함한다는 점에서 차이점은 비교적 명확합니다. 즉, Users 그룹은 Authenticated Users에 비해 훨씬 더 제한적입니다.

그럼에도 불구하고 "시스템 강화"를 주장하며 Users의 사용 권한을 Authenticated Users로 대체함으로써 오히려 네트워크를 망치는 조직을 많이 보아왔습니다. 지금까지 필자는 직불 카드 업계에서는 Users의 사용 권한을 Authenticated Users로 대체해야 한다고 주장하는 무지한 PCI/DSS 감사자들과 셀 수 없이 많은 논쟁을 벌였습니다. 간단히 말해 이것은 사실이 아닙니다.

조직에서는 컨설턴트가 전체 ACL(액세스 제어 목록)을 대체하는 작업을 청구 비용을 늘리기 위한 수단으로 사용하지 않는지 확인할 필요가 있습니다. 전체 Users 또는 Everyone을 Authenticated Users로 대체하는 작업은 보안이나 안정성 면에서 그다지 성공적이지 않다는 것은 쉽게 알 수 있을 것입니다.

서비스

Windows Vista와 Windows Server 2008에서는 서비스라는 새로운 보안 주체 유형을 지원합니다. 이러한 엔터티의 가치를 이해하려면 호스트 기반 방화벽에 대한 진행 중인 논의를 살펴볼 필요가 있습니다. 제품을 판매하는 공급업체에서 충분한 지원을 받고 있는 많은 사람들은 호스트 기반 방화벽이 손상된 컴퓨터로부터 네트워크의 나머지 부분을 보호하기 위해 아웃바운드 트래픽을 필터링해야 한다고 주장합니다. 이보다 객관적인 사람들은 컴퓨터가 손상된 경우 컴퓨터에 이미 맬웨어가 있으므로 맬웨어가 호스트 기반 방화벽을 우회하거나 완전히 비활성화할 수 있다고 지적하기도 합니다.

상황을 이해할 수 있도록 동일한 보안 주체로 실행되는 두 개의 서비스가 있다고 가정해 보겠습니다. 서비스 A는 방화벽을 통해 통신할 수 있으며 서비스 B는 할 수 없습니다. 서비스 B가 손상된 경우 공격자는 이 보안 주체로 실행되는 다른 프로세스, 즉 이 경우 서비스 A를 사용하여 이러한 제한을 우회하고 해당 프로세스에서 통신을 수행할 수 있습니다.

이 문제를 해결하려면 프로세스와 세부적인 서비스에 사용 권한을 부여할 수 있는 방법이 필요합니다. 이를 위해 서비스는 보안 주체가 되었으며 결과적으로 각 서비스는 사용 권한을 부여하는 데 사용할 수 있는 ID를 가지게 되었습니다. 명령줄에서 "sc showsid" 명령을 실행하면 임의의 명령의 서비스 SID를 볼 수 있습니다.

서비스 SID를 사용하면 리소스에 대한 특정 사용자의 액세스만 제한하는 것이 아니라 특정 프로세스의 액세스를 제한할 수 있습니다. 이 변경을 통해서 몇 가지 상황에서 아웃바운드 호스트 기반 방화벽 필터가 제 기능을 발휘할 수 있게 됩니다. 이러한 상황에 대한 자세한 내용은 이 기사의 범위를 벗어나지만 관련 내용에 관심이 있는 독자들은 TechNet Magazine 2008년 6월호에서 Windows Vista 방화벽에 대한 필자의 기사 "Windows Vista 방화벽 관리"를 읽어 보십시오.

결론

보안 주체는 Windows 보안의 필수적인 기반이므로 관리자는 최소한 다양한 유형의 보안 주체가 작동 및 사용되는 방식에 대한 기본적인 이해를 갖추어야 합니다. 이러한 항목을 이해해야 이러한 보안 주체를 효과적으로 사용하는 보안 전략을 효과적으로 수립할 수 있습니다. 보안 주체를 올바르게 이해하지 못하면서 불필요하고 부적절한 변경으로 네트워크를 위험에 빠뜨리려는 사람들의 무의미한 주장에 반박해야 하는 경우 이러한 지식이 유용합니다.

이 칼럼은 필자의 책 *Windows Server 2008 Security Resource Kit(Microsoft Press)*의 내용을 바탕으로 구성한 것입니다.

Jesper M. Johansson은 잘 알려진 Fortune 200대 기업 중 하나의 수석 보안 설계자이며 위험 기반 보안 비전과 보안 전략을 연구하고 있습니다. 그는 TechNet Magazine의 객원 편집자이기도 하며 세계 최대 규모의 분산 시스템에서 보안을 보장하는 업무를 맡고 있습니다. 정보 관리 시스템 박사 학위를 소지하고 20여 년간 보안 분야에 종사해 온 기업 보안 MVP이며 최근 저서로는 Windows Server 2008 Security Resource Kit가 있습니다.