[ 상식 정보 ]/PC2009. 10. 23. 11:04

Windows XP 서비스 팩 2에서 Windows 방화벽 서비스를 시작할 수 없다

현상

Microsoft Windows XP 서비스 팩 2(SP2)를 설치한 후 Windows 방화벽 서비스를 시작할 수 없습니다. 다음과 같은 현상이 하나 이상 나타날 수 있습니다.
제어판에서 Windows 방화벽을 누르면 다음과 같은 오류 메시지가 나타날 수 있습니다.
연결된 서비스가 실행되고 있지 않아서 Windows 방화벽 설정을 표시할 수 없습니다.
Windows 방화벽/인터넷 연결 공유(ICS) 서비스를 시작하시겠습니까?
를 누르면 다음과 같은 오류 메시지가 나타납니다.
Windows에서 Windows 방화벽/인터넷 연결 공유(ICS) 서비스를 시작할 수 없습니다.
서비스 콘솔을 사용하여 Windows 방화벽 서비스를 수동으로 시작하려고 하면 다음과 같은 오류 메시지가 나타날 수 있습니다.
로컬 컴퓨터에서 Windows 방화벽/인터넷 연결 공유(ICS) 서비스를 시작하지 못했습니다.
오류 0x80004015: 클래스가 호출자와 다른 보안 ID로 실행되도록 구성되어 있습니다.

The Windows Firewall/Internet Connection Sharing (ICS) service entered the stopped state.

Windows 방화벽/인터넷 연결 공유(ICS) 서비스가 다음 오류 때문에 종료되었습니다:
클래스가 호출자와 다른 보안 ID로 실행되도록 구성되어 있습니다.

SC 쿼리 명령을 사용하여 Windows 방화벽/인터넷 연결 공유 서비스의 상태를 확인하면 다음과 같은 내용이 출력됩니다.
 
C:\>sc query sharedaccessSERVICE_NAME: sharedaccessTYPE : 20 WIN32_SHARE_PROCESSSTATE : 1 STOPPED(NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)WIN32_EXIT_CODE : -2147467243 (0x80004015)SERVICE_EXIT_CODE : 0  (0x0)CHECKPOINT : 0x0WAIT_HINT : 0x0
net start sharedaccess 명령을 사용하여 명령 프롬프트에서 Windows 방화벽/인터넷 연결 공유(ICS) 서비스를 시작하려고 하면 다음과 같은 내용이 출력됩니다.
 
C:\>net start sharedaccessWindows 방화벽/인터넷 연결 공유(ICS) 서비스를 시작합니다. Windows 방화벽/인터넷 연결 공유(ICS) 서비스를 시작할 수 없습니다. 시스템 오류가 발생했습니다. 시스템 오류 16405 생김. 시스템이 BASE에 대한 메시지 파일에서 메시지 번호 0x4015에 대한 메시지 텍스트를 찾지 못했습니다.
참고 Windows XP SP2의 Windows 방화벽 기능은 Windows XP 이전 버전의 인터넷 연결 방화벽(ICF)을 대체합니다.

원인

Windows XP SP2를 설치하기 전에 Windows XP 보안 가이드의 특정 관리 템플릿이 컴퓨터에 적용된 경우 이 문제가 발생할 수 있습니다. 이 문제는 Windows XP 보안 가이드의 일부로 게시된 몇 가지 보안 템플릿의 문제로 인해 발생합니다.

Windows XP SP2에서는 NT Authority\NetworkService 계정을 사용하여 RPC(원격 프로시저 호출)가 실행되며, 서비스의 기본 보안 설명자가 NT Authority\NetworkService 계정이 포함된 Authenticated Users 그룹에 읽기 권한을 부여합니다.

해결 방법

이 문제를 해결하려면 다음 방법 중 하나를 사용하십시오.

방법 1: SharedAccess 서비스의 기본 보안 설명자 복원

Windows 방화벽/인터넷 연결 공유(ICS) 서비스를 제어하는 서비스는 SharedAccess입니다. 기본 SD(보안 설명자)는 LocalSystem(SY), PowerUsers(PU) 및 AuthenticatedUsers(AU)에 읽기 권한을 부여하고 Administrators(BA)에 모든 권한을 부여합니다.

SharedAccess의 SD를 보려면 명령 프롬프트에서 SC sdshow SharedAccess를 입력한 다음 Enter 키를 누르십시오. 그러면 다음과 유사한 기본 SD가 나타납니다.
 
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)
참고 이 문자열을 해석하는 방법에 대한 자세한 내용을 보려면 다음 MSDN 웹 사이트를 방문하여 SDDL 또는 "ACE strings"를 검색하십시오. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/ace_strings.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/ace_strings.asp)(영문)
참고 명령 프롬프트를 열려면 시작, 실행을 차례로 누르고 열기 상자에 CMD를 입력한 다음 확인을 누르십시오.
출력 결과가 이 예제와 다른 경우에는 SC 명령과 sdset 옵션을 사용하여 SD를 다시 설정할 수 있습니다. SharedAccess 서비스의 기본 SD를 복원하려면 명령 프롬프트에서 다음 명령을 입력한 다음 Enter 키를 누르십시오.
SC sdset SharedAccess D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)
SC sdset 명령에 대한 자세한 내용은 Windows 도움말을 참조하십시오.

방법 2: SharedAccess 서비스의 기본 SD 복원

경고 레지스트리 편집기 또는 다른 방법을 사용하여 레지스트리를 잘못 수정하면 심각한 문제가 발생할 수 있으며 이러한 문제를 해결하기 위해 운영 체제를 다시 설치해야 할 수도 있습니다. Microsoft는 이러한 문제의 해결을 보증하지 않습니다. 레지스트리 수정에 따른 모든 책임은 사용자에게 있습니다.

SharedAccess 서비스의 기본 SD를 복원하려면 다음과 같이 하십시오.
1. 시작, 실행을 차례로 누르고 열기 상자에 regedit을 입력한 다음 확인을 누릅니다.
2. 다음 레지스트리 하위 키를 찾아서 누릅니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Security
3. Security 레지스트리 하위 키가 있을 경우 삭제합니다.
4. 레지스트리 편집기를 끝낸 후 컴퓨터를 다시 시작합니다.
참고 Security 레지스트리 하위 키가 있을 경우 반드시 삭제해야 합니다. 이렇게 하면 컴퓨터를 다시 시작할 때 기본 보안 설명자를 사용하여 Windows 방화벽을 시작할 수 있습니다. 

Microsoft COM(구성 요소 개체 모델), DCOM 또는 Microsoft COM+ 응용 프로그램을 실행하여 Windows 방화벽 서비스를 제어하는 경우 다음 단계도 수행해야 합니다.
1. 시작, 실행을 차례로 누르고 열기 상자에 regedit을 입력한 다음 확인을 누릅니다.
2. 다음 레지스트리 하위 키를 찾아서 누릅니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{ce166e40-1e72-45b9-94c9-3b2050e8f180}
3. 파일 메뉴에서 내보내기를 누릅니다.
4. 파일 이름 상자에 C:\reg_AppID_CLSID.reg를 입력한 다음 저장을 눌러 레지스트리 파일을 저장합니다.
5. {ce166e40-1e72-45b9-94c9-3b2050e8f180} 레지스트리 하위 키를 삭제합니다.
6. 파일 메뉴에서 가져오기를 누릅니다.
7. 파일 이름 상자에 C:\reg_AppID_CLSID.reg를 입력한 다음 열기를 누릅니다.
8. 확인을 누른 다음 레지스트리 편집기를 종료합니다.
9. Windows 방화벽/인터넷 연결 공유(ICS) 서비스를 시작합니다. 이렇게 하려면 명령 프롬프트에서 NET START SharedAccess를 입력한 다음 Enter 키를 누르십시오.
참고 명령 프롬프트에서 이러한 단계를 모두 수행하려면 다음과 같이 하십시오.
1. 다음 명령을 입력한 후 각 명령의 끝에서 Enter 키를 누릅니다.
REG DELETE HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Security /f
REG DELETE HKLM\SOFTWARE\Classes\AppID\{ce166e40-1e72-45b9-94c9-3b2050e8f180} /f
{ce166e40-1e72-45b9-94c9-3b2050e8f180} 레지스트리 하위 키를 삭제하는 단계가 중요합니다. 이렇게 하면 다시 가져올 때 기본 보안 설명자를 적용할 수 있습니다.
2. 컴퓨터를 다시 시작합니다.
SC.exe 유틸리티
SC.exe(서비스 컨트롤러) 유틸리티는 서비스 컨트롤러 및 설치된 서비스와 통신하며 서비스에 대한 제어 정보를 검색하고 설정합니다. SC.exe를 사용하면 서비스 프로그램을 테스트하고 디버그할 수 있습니다. 서비스 응용 프로그램이 부팅 시에 시작되는 방법 및 백그라운드 프로세스로 실행되는 방법을 제어하기 위해 레지스트리에 저장된 서비스 속성을 설정할 수 있습니다. SC.exe 매개 변수를 통해 특정 서비스를 구성하고 서비스의 현재 상태를 검색하고 서비스를 시작/중지할 수 있습니다. 또한 다양한 SC.exe 명령을 호출하는 배치 파일을 만들어 서비스의 시작 또는 종료 시퀀스를 자동화할 수 있습니다. SC.exe는 제어판의 관리 도구 항목에 있는 서비스와 비슷한 기능을 제공합니다.

SC.exe 유틸리티에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오. http://technet2.microsoft.com/windowsserver/en/library/0A658E97-51D5-4109-B461-A474C799964E1033.mspx (http://technet2.microsoft.com/windowsserver/en/library/0A658E97-51D5-4109-B461-A474C799964E1033.mspx)(영문)

보안 템플릿

보안 템플릿에 대한 자세한 내용은 다음 Microsoft 웹 사이트에서 "최종 시스템의 데이터 보안과 데이터 가용성"을 참조하십시오. http://www.microsoft.com/technet/Security/bestprac/bpent/sec3/datavail.mspx (http://www.microsoft.com/technet/Security/bestprac/bpent/sec3/datavail.mspx)(영문)

Windows XP 보안 가이드 v2에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오. http://www.microsoft.com/downloads/details.aspx?FamilyId=2D3E25BC-F434-4CC6-A5A7-09A8A229F118&displaylang=en (http://www.microsoft.com/downloads/details.aspx?FamilyId=2D3E25BC-F434-4CC6-A5A7-09A8A229F118&displaylang=en)(영문)

보안 템플릿 스냅인을 사용하여 보안 템플릿을 만들고 정의할 수 있습니다. 이렇게 하려면 다음과 같이 하십시오.
1. 시작, 실행을 차례로 누르고 mmc를 입력한 다음 확인을 누릅니다.
2. 콘솔1 창의 파일 메뉴에서 스냅인 추가/제거를 누릅니다.
3. 스냅인 추가/제거 대화 상자에서 추가를 누릅니다.
4. 독립 실행형 스냅인 추가 대화 상자에서 보안 템플릿, 추가, 닫기를 차례로 누릅니다.
5. 스냅인 추가/제거 대화 상자에서 확인을 누릅니다.
6. 콘솔1 창에서 보안 템플릿 노드를 확장한 다음, \system_root\Security\Templates 노드를 확장하여 사용 가능한 템플릿 목록을 확인합니다.
7. \system_root\Security\Templates\securews\ 노드를 확장하고 시스템 서비스를 누른 다음 Windows Firewall/Internet Connection Sharing (ICS)을 두 번 눌러 템플릿에 이 정책 설정을 정의합니다.

프로그래밍 방식으로 사용 권한 할당

LaunchPermission 레지스트리 항목 또는 AccessPermission 레지스트리 항목에 프로그래밍 방식으로 사용 권한을 할당하는 방법에 대한 자세한 내용을 보려면 다음 MSDN 웹 사이트를 방문하여 "DCOMperm: COM 서버 코드에 대한 사용 권한" 예제를 구하십시오. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcsample98/html/vcsmpdcompermpermissionsforcomserver.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcsample98/html/vcsmpdcompermpermissionsforcomserver.asp)(영문)

AccessPermission 레지스트리 항목은 액세스를 결정하는 DACL(임의 액세스 제어 목록)을 설정하고 LaunchPermission 레지스트리 항목은 응용 프로그램을 시작할 수 있는 주체를 결정하는 DACL을 설정합니다.

LaunchPermission 레지스트리 항목은 REG_BINARY입니다. 이 클래스의 서버를 시작하는 로컬 또는 원격 요청을 받으면 클라이언트를 가장하는 동안 이 값에서 설명하는 DACL을 검사하고, 검사 성공 여부에 따라 서버 시작을 허용하거나 허용하지 않습니다. 이 값이 없는 경우에는 기본적으로 시스템 범위의 DefaultLaunchPermission 항목을 같은 방식으로 검사하여 클래스 코드를 시작할 수 있는지 여부를 결정합니다.

AccessPermission 레지스트리 값은 REG_BINARY입니다. 여기에는 이 클래스의 인스턴스에 액세스할 수 있는 보안 사용자의 DACL을 설명하는 데이터가 포함되어 있습니다. 이 클래스의 기존 개체에 연결하는 요청을 받으면 호출자를 가장하는 동안 호출되는 응용 프로그램에서 DACL을 검사하고, 액세스 검사가 실패하면 연결이 허용되지 않습니다. 이 값이 없는 경우에는 기본적으로 시스템 범위의 DefaultAccessPermission DACL을 같은 방식으로 테스트하여 연결을 허용할지 여부를 결정합니다.

DCOMcnfg GUI에서 서비스 권한 설정 보기

DCOMcnfg GUI(그래픽 사용자 인터페이스)에서 서비스 권한 설정을 보려면 다음과 같이 하십시오.
1. 시작, 실행을 차례로 누르고 열기 상자에 DCOMCNFG를 입력한 다음 확인을 누릅니다.
2. 다음 노드를 확장합니다.
구성 요소 서비스
컴퓨터
내 컴퓨터
DCOM 구성
3. SharedAccess를 마우스 오른쪽 단추로 누른 다음 속성을 누릅니다.
4. 일반 탭을 누르고 다음 설정이 구성되어 있는지 확인합니다.
응용 프로그램 이름: SharedAccess
응용 프로그램 ID: {ce166e40-1e72-45b9-94c9-3b2050e8f180}
응용 프로그램 종류: 로컬 서비스
인증 수준: 기본값
서비스 이름: SharedAccess
5. ID 탭을 누르고 시스템 계정(서비스에만 해당)이 선택되어 있는지 확인합니다.
6. 보안 탭을 누릅니다.
7. 시작 및 활성화 권한 영역에서 사용자 지정을 누른 다음 편집을 누릅니다.
8. 그룹 또는 사용자 이름 상자에서 Administrators (MACHINE_NAME\Administrators)를 누르고 허용 열에서 로컬 활성화 확인란이 선택되어 있는지 확인한 다음, 확인을 누릅니다.
9. 액세스 권한 영역에서 사용자 지정, 편집을 차례로 누르고 다음 설정이 구성되어 있는지 확인합니다.
그룹 또는 사용자 이름 상자에서 Administrators (MACHINE_NAME \Administrators)를 누르고 허용 열에서 로컬 액세스 확인란이 선택되어 있는지 확인한 다음, 확인을 누릅니다.
10. 구성 권한 영역에서 사용자 지정, 편집을 차례로 누르고 다음 설정이 구성되어 있는지 확인합니다.
그룹 또는 사용자 이름 상자에서 Administrators (MACHINE_NAME\Administrators)를 누르고 허용 열에서 모든 권한 확인란과 읽기 확인란이 선택되어 있는지 확인합니다.
그룹 또는 사용자 이름 상자에서 Power Users를 누르고 허용 열에서 읽기 확인란이 선택되어 있는지 확인합니다.
그룹 또는 사용자 이름 상자에서 SYSTEM을 누르고 허용 열에서 모든 권한 확인란과 읽기 확인란이 선택되어 있는지 확인합니다.
그룹 또는 사용자 이름 상자에서 Users를 누르고 허용 열에서 읽기 확인란이 선택되어 있는지 확인한 다음, 확인을 차례로 두 번 누릅니다.

예제 레지스트리 출력

레지스트리 항목의 내용을 내보내려면 명령 프롬프트에서 다음 명령을 입력한 후 Enter 키를 누르십시오.
REG EXPORT HKLM\SOFTWARE\Classes\AppID\{ce166e40-1e72-45b9-94c9-3b2050e8f180} C:\reg_AppID_CLSID.txt
출력 파일 C:\reg_AppID_CLSID.txt에는 다음과 유사한 내용의 텍스트가 포함됩니다.
 
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{ce166e40-1e72-45b9-94c9-3b2050e8f180}]@="SharedAccess""LocalService"="SharedAccess""AccessPermission"=hex:01,00,14,80,34,00,00,00,50,00,00,00,00,00,00,00,14,00,\00,00,02,00,20,00,01,00,00,00,00,00,18,00,03,00,00,00,01,02,00,00,00,00,00,\05,20,00,00,00,20,02,00,00,01,05,00,00,00,00,00,05,15,00,00,00,59,51,b8,17,\66,72,5d,25,64,63,3b,0b,7f,a9,28,00,01,05,00,00,00,00,00,05,15,00,00,00,59,\51,b8,17,66,72,5d,25,64,63,3b,0b,7f,a9,28,00"LaunchPermission"=hex:01,00,04,80,34,00,00,00,50,00,00,00,00,00,00,00,14,00,\00,00,02,00,20,00,01,00,00,00,00,00,18,00,09,00,00,00,01,02,00,00,00,00,00,\05,20,00,00,00,20,02,00,00,01,05,00,00,00,00,00,05,15,00,00,00,a0,5f,84,1f,\5e,2e,6b,49,ce,12,03,03,f4,01,00,00,01,05,00,00,00,00,00,05,15,00,00,00,a0,\5f,84,1f,5e,2e,6b,49,ce,12,03,03,f4,01,00,00
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess 레지스트리 하위 키에 대한 유사한 출력 파일에는 다음과 유사한 내용의 텍스트가 포함됩니다.
 
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\system\currentcontrolset\services\SharedAccess]"DependOnGroup"=hex(7):00,00"DependOnService"=hex(7):4e,00,65,00,74,00,6d,00,61,00,6e,00,00,00,57,00,69,00,\6e,00,4d,00,67,00,6d,00,74,00,00,00,00,00"Description"="Provides network address translation, addressing, name resolution and/or intrusion prevention services for a home or small office network." "DisplayName"="Windows Firewall/Internet Connection Sharing (ICS)""ErrorControl"=dword:00000001"ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,\00,76,00,63,00,68,00,6f,00,73,00,74,00,2e,00,65,00,78,00,65,00,20,00,2d,00,\6b,00,20,00,6e,00,65,00,74,00,73,00,76,00,63,00,73,00,00,00"ObjectName"="LocalSystem""Start"=dword:00000002"Type"=dword:00000020

[HKEY_LOCAL_MACHINE\system\currentcontrolset\services\SharedAccess\Epoch]"Epoch"=dword:0000073e

[HKEY_LOCAL_MACHINE\system\currentcontrolset\services\SharedAccess\Parameters]"ServiceDll"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,\00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,\69,00,70,00,6e,00,61,00,74,00,68,00,6c,00,70,00,2e,00,64,00,6c,00,6c,00,00,\00

[HKEY_LOCAL_MACHINE\system\currentcontrolset\services\SharedAccess\Enum]"0"="Root\\LEGACY_SHAREDACCESS\\0000""Count"=dword:00000001"NextInstance"=dword:00000001
위로 가기
Posted by 무소유v