2008/12/11

Winmgmt(WmiPrvSE.exe) & wmiApSrv 의 메모리 문제 on Vista, Windows Server 2008

Windows Server 2008 에서도 동일하게, WMI 를 이용해서 성능 카운터 정보를 얻을수 있습니다. 그런데, 이상하게도 WmiPrvSE.exe 프로세스의 메모리 점유율이 비정상적으로 높은것을 알수 있습니다. (* 같은 코드 기반인 Vista 에서도 동일할듯....)

이러한 문제는, 이전 Windows 2000 에서 발생했던 적이 있었으며,. 추후 패치가 제공 되었습니다. 그리고 그 이후의 Windows 2000 과 Windows Server 2003 에서는 동일한 문제가 발생하지 않고 있습니다.

모니터링 도구를 실행하면 Winmgmt.exe에서 메모리가 누수된다
http://support.microsoft.com/kb/811772

이러한 문제?를 확인할 수 있었던 이유는, 운영중인 서버중 Windows Server 2008 이 몇대가 존재하고 있으며 기존에 Windows 2000, Windows Server 2003 을 모니터링 하기 위한 윈도우 서비스를 Windows Server 2008 에서도 작동 하도록 코드 수정 및 테스트 과정에서 WmiPrvSE.exe 의 비정상적인 메모리 점유를 확인 한것  입니다.

이 포스트에서는 해결책을 제시하지 않으며, 프로세스 내부적인 작동상의 문제로 추정되고 있으므로 추후 Microsoft 의 패치 업데이트 외에는 현재 개선할 방법은 없을것 같습니다.

최초 Windows Management Instrumentation(Winmgmt) 서비스를 시작하고, 성능 카운터 정보외에 다른 클래스에서의 쿼리시에는 시작시 점유했던 메모리 양과 거의 변화를 보지 않습니다.

Name: WmiPrvSE.exe (System 계정)
ExecutablePath: C:\Windows\system32\wbem\wmiprvse.exe
Handle: 6128
HandleCount: 139
OSName: Microsoft® Windows Server® 2008 Standard .....
PageFileUsage(KB): 3344
PeakPageFileUsage(KB): 4116
PeakVirtualSize: 42606592
WorkingSetSize(Byte): 6602752
PeakWorkingSetSize(KB): 6460
ProcessId: 6128
ThreadCount: 5
UserModeTime: 936006

위 값을 보면,. 약 6M 선 이며,
이후 여타 클래스에서 쿼리를 하더라도 보통 7M 내외를 점유 합니다.

이때,. 성능 카운터중, CPU 사용량을 얻기 위해서 다음과 같은 성능 카운터 클래스를 호출하는 vbscript 를 실행하면,.

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)

Winmgmt 는 성능 카운터 정보를 얻기 위해서 WMI Performance Adapter(wmiApSrv) 를 호출하고 wmiApSrv 는 요청된 성능 카운터 정보를 반환하게 됩니다.

이후의 WmiPrvSE.exe 메모리 점유를 보면, 다음과 같으며

Name: WmiPrvSE.exe
HandleCount: 585
PageFileUsage(KB): 23668
PeakPageFileUsage(KB): 23668
PeakVirtualSize: 111034368
WorkingSetSize(Byte): 30457856
PeakWorkingSetSize(KB): 29744
ProcessId: 6128
ThreadCount: 13
UserModeTime: 12324079
VirtualSize: 111034368

계속해서 성능 카운터 클래스를 호출하면, 메모리 점유율이 조금씩 조금씩 늘어나게 됩니다. 그러나 더 이상 성능 카운터 클래스를 호출하지 않으면 wmiApSrv 서비스가 종료되고 이후 약간의(1~3M정도) 메모리 를 반환하지만  더 이상은 반환하지 않습니다.

그러나 쿼리가 몇일동안 계속 되는 경우, 메모리 점유는 400~500M 를 점유하게 되며 그때의 경우에는 성능 카운터 관련 클래스 호출에 대해서 성능 카운터 관련 클래스가 없어지는 비정상적인 작동을 하게 됩니다.

2008/12/10

2008년 12월 마이크로소프트 보안 공지

Visual Basic 6.0 런타임 확장 파일(ActiveX 컨트롤)의 취약점으로 인한 원격 코드 실행 문제점 (932349)
http://www.microsoft.com/korea/technet/security/bulletin/MS08-070.mspx

Microsoft Visual Basic 6.0 런타임 확장 파일용 ActiveX 컨트롤의 비공개적으로 보고된 취약점 5건과 공개적으로 보고된 취약점 1건을 해결합니다. 이 취약점으로 인해 사용자가 특수하게 조작된 콘텐츠가 포함된 웹사이트를 탐색할 경우 원격 코드 실행이 허용될 수 있습니다. 이 보안 업데이트는 ActiveX 컨트롤의 유효성 검사 및 오류 처리를 강화하여 취약점을 해결합니다

GDI의 취약점으로 인한 원격 코드 실행 문제점 (956802)
http://www.microsoft.com/korea/technet/security/bulletin/MS08-071.mspx

GDI에서 발견되어 비공개적으로 보고된 취약점 2건을 해결합니다. 이러한 취약점을 악용하면 사용자가 특수하게 조작된 WMF 이미지 파일을 열 경우 원격 코드 실행이 허용될 수 있습니다. 이 취약점을 악용한 공격자는 영향을 받는 시스템에 대해 완벽히 제어할 수 있습니다. 이 보안 업데이트는 GDI의 파일 크기 매개 변수 유효성 검사 및 정수 계산 방식을 수정하여 오버플로 조건이 발생하지 않도록 하여 취약점을 해결합니다

Windows 검색의 취약점으로 인한 원격 코드 실행 문제점 (959349)
http://www.microsoft.com/korea/technet/security/bulletin/MS08-075.mspx

Windows 검색에서 발견되어 비공개적으로 보고된 취약점 2건을 해결합니다. 이 취약점으로 인해 사용자가 Windows 탐색기에서 특수하게 조작된 검색 조건 저장 파일을 열고 저장하거나 특수하게 조작된 검색 URL을 클릭할 경우 원격 코드 실행이 허용될 수 있습니다. 이 취약점을 악용한 공격자는 영향을 받는 시스템에 대해 완벽히 제어할 수 있습니다. 이 보안 업데이트는 Windows 검색 파일을 저장할 때 Windows 탐색기가 메모리를 해제하는 방식을 수정하고 search-ms 프로토콜을 구문 분석할 때 Windows 탐색기가 매개 변수를 해석하는 방식을 수정하여 취약점을 해결합니다

Windows Media Components의 취약점으로 인한 원격 코드 실행 문제점 (959807)
http://www.microsoft.com/korea/technet/security/bulletin/MS08-076.mspx

Windows Media Player, Windows Media Format Runtime 및 Windows Media Services. 가장 위험한 취약점으로 인해 원격 코드 실행이 허용될 수 있습니다. 사용자가 관리자 권한으로 로그온한 경우, 이 취약점을 악용한 공격자는 영향을 받는 시스템을 완전히 제어할 수 있습니다. 이 보안 업데이트는 Windows Media 인증 응답의 유효성을 검사하는 방식을 변경하여 첫 번째 취약점을 해결합니다. 이 보안 업데이트는 Windows Media 클라이언트가 ISATAP 주소를 사용하여 서버를 외부 서버로 취급하는 방식을 변경하여 취약점을 해결합니다.

Windows File Protection / ID: 64021

이벤트 형식: 정보
이벤트 원본: Windows File Protection
이벤트 범주: 없음
이벤트 ID: 64021
날짜:  2008-12-09
시간:  오전 4:16:16
사용자:  N/A
컴퓨터: WEBSERVER
설명:
시스템 파일 c:\windows\system32\eventvwr.exe을(를) DLL 캐시로 복사할 수 없습니다. 오류 코드: 0x00000000 [작업을 완료했습니다.
].  시스템 안정성 관리에 필요한 파일입니다.

자세한 정보는 http://go.microsoft.com/fwlink/events.asp에 있는 도움말 및 지원 센터를 참조하십시오.

================================================================================

위와 같은 로그 형식이 세벽 4시 15분부터 30분까지 15분동안 10차례정도 생겼더군요

그 후 오전 11시 45분쯤에 웹사이트가 먹통이 되어 버렸습니다.

서버의 게이트웨이로 ping이 안돼서 서비스 재시작도 안돼는 현상이 발생하였고

재부팅 후에 정상적으로 살아났습니다.

D


가장 많이 본 글