일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 취득세
- 토지이용규제정보서비스
- 세금
- rat
- winhttp
- 건폐율제한
- RSA 2048
- 지준율
- DonwLoader
- 정원카페
- 재산세
- 중국부실채권
- 세금의종류
- Revenge-RAT
- powershell
- 가게부채
- ADO
- 중국가게부채
- 경제
- 카페글렌코
- 중국지준율
- 10년물
- RSA AES256
- 장단기금리역전
- 미국국채
- FDO
- shellcodeLoader
- RSA
- 제주글렌코
- 글렌코
- Today
- Total
부동산, 채권, 주식, 경제흐름 자료를 모아 보는 블로그입니다.
WMI (Windows Management Instrumentation) 본문
최근 악성코드를 분석하며 많은 한계를 느끼는 부분이 COM Interface 개념과, WMI관련 내용에서 많은 한계를 느끼게 되어 이를 정리하고자 해당 내용을 정리해보고자 합니다.
일단 이번에 정리할 내용은 WMI 입니다.
사실 조금만 자료를 찾아봤지만 WMI가 너무 방대하고( 책한권이 나올정도 ) 사용하는데 있어서도 문법이나 함수 사용을 하는데 기존에 API와 다른 부분이 많아 많이 어색한게 사실입니다.
이를 위해 WMI에 대해 조금 알아보고 사용법정도 정리할 예정입니다.
WMI는 윈도우의 서버나 워크스테이션, PC를 관리하기 위핸 메니지먼트 인터페이스( Monikor Object : 크게 보면 Com Interface ) 입니다.
WMI는 거의 모든 Windows 리소스를 액세스하고 구성하고 관리하고 모니터링할 수 있는 수단이며,
디스크, 이벤트 로그, 파일, 폴더, 파일 시스템, 네트워크 구성 요소, 운영 체제 설정, 성능 데이터, 프린터, 프로세스, 레지스트리 설정, 보안, 서비스, 공유, 사용자, 그룹 등과 같은 Windows 리소스를 관리 할 수 있습니다.
WMI 이전에는 모든 Windows 그래픽 관리 도구가 Windows 리소스를 액세스하고 관리하는 데 Win32 API(Application Programming Interface)에 의존했다는 것입니다.
그 이유는 무엇일까요? WMI 이전에는 Win32 API를 통해서만 프로그래밍 방식으로 Windows 리소스에 액세스할 수 있었기 때문입니다.
대부분의 스크립팅 언어에서 Win32 API를 직접 호출할 수 없기 때문에 널리 사용되고 있는 스크립팅 언어를 사용하여 일반 시스템 관리 작업을 자동화할수 있도록 MS에서는 WMI를 만들게 되었습니다.
일단 WMI를 보기 앞서 간단하게 구동원리를 알아보기 위해 아래의 아키텍쳐를 살펴봅니다.
출처 : https://www.microsoft.com/korea/msdn/columns/contents/scripting/scripting06112002/
CIM(Common Information Model) 리포지토리
WMI 공급자
관리 리소스
WMI 스크립팅 라이브러리
CIMOM (Common Information Model Object Manager )
- 공급자 등록 WMI 공급자는 CIMOM을 사용하여 위치 및 기능 정보를 등록(스키마 저장)합니다. 이 정보는 CIM 리포지토리에 저장됩니다.
- 요청 라우팅 CIMOM은 공급자 등록 정보를 사용하여 소비자 요청을 해당 공급자에게 라우팅합니다.
- 원격 액세스 소비자는 원격 시스템의 CIMOM에 연결하여 원격 WMI 사용 가능 시스템에 액세스합니다. 연결이 설정되면 소비자는 로컬로 실행할 수 있는 동일한 작업을 실행할 수 있습니다.
- 보안 CIMOM은 로컬 컴퓨터나 원격 컴퓨터에서 사용자의 WMI 연결을 허용하기 전에 각 사용자의 액세스 토큰을 확인하여 WMI 관리 리소스에 대한 액세스를 제어합니다. WMI는 운영 제체에서 제공하는 보안을 무시하거나 방해하지 않습니다.
- 쿼리 처리 소비자가 WQL(WMI Query Language)을 사용하여 WMI 관리 리소스에 대한 쿼리를 제공할 수 있게 합니다. 예를 들면, 지난 24시간 동안 발생한 특정 이벤트 ID에 일치하는 모든 이벤트에 대해 이벤트 로그를 쿼리할 수 있습니다. CIMOM은 공급자가 기본적으로 쿼리 작업을 지원하지 않는 경우 쿼리에 대한 평가를 실행할 수 있습니다.
- 이벤트 처리 소비자가 WMI 관리 리소스에 대한 변경 사항을 나타내는 이벤트에 가입할 수 있도록 합니다. 예를 들면, 논리 디스크 드라이브의 공간이 허용 가능한 임계값 이하로 떨어지는 시기를 나타내는 이벤트에 가입할 수 있습니다. CIMOM은 사용자가 지정한 간격으로 관리 리소스를 폴링하고 가입이 만족스러우면 이벤트 알림을 생성합니다.
상기 아키텍쳐 기반으로 동작과정을 살펴보면 아래와 같이 이해 할 수 있다.
1. 사용자는 WMI 스크립트로 작성된 언어를 사용하여 스크립트를 작성한다.
2. WMI 스크립팅 라이브러리는 사용자가 작성한 WMI 스크립트를 실행하기 위한 작업을 수행하고 이를 CIMOM으로 넘겨준다.
3. CIMOM에서는 해당 스크립트 작업의 보안작업이나 이벤트 등록을 위한 정보를 저장하기 위해 CIM 리포리토지에 저장하거나 또는 기존에 등록된 이벤트 등을 조회하는 작업등을 수행한다.
4. CIMOM에서는 3의 작업을 수행하고 이를 명세하여 WMI 공급자에게 작업을 요청한다.
5. WMI 작업자는 관리 리소스에 CIMOM에서 요청한 작업에 대해 작업을 하도록 요청하고, 전달받은 작업내용을 다시 CIMOM에 전달한다.
6. CIMOM는 5에서 생성된 전달 작업을 다시 리포리토지에 기록하거나 사용자에게 돌려준다.
WMI 사용시 WMI 공급자 내역은 아래와 같습니다.
공급자 | DLL | 네임스페이스 | 설명 |
---|---|---|---|
Active Directory 공급자 | dsprov.dll | root\directory\ldap | Active Directory 개체를 WMI에 매핑합니다. |
이벤트 로그 공급자 | ntevt.dll | root\cimv2 | Windows 이벤트 로그를 관리합니다. 예를 들면, 이벤트 로그 설정 읽기, 백업, 지우기, 복사, 삭제, 모니터링, 이름 바꾸기, 압축, 압축 풀기 및 변경 작업을 수행합니다. |
성능 카운터 공급자 | wbemperf.dll | root\cimv2 | 원시 성능 데이터에 대한 액세스를 제공합니다. |
레지스트리 공급자 | stdprov.dll | root\default | 레지스트리 키와 값을 읽고, 쓰고, 나열하고, 모니터링하고, 만들고 삭제합니다. |
SNMP 공급자 | snmpincl.dll | root\snmp | SNMP MIB 데이터에 대한 액세스를 제공하고 SNMP 관리 장치에서 트랩합니다. |
WDM 공급자 | wmiprov.dll | root\wmi | WDM 장치 드라이버의 정보에 대한 액세스를 제공합니다. |
Win32 공급자 | cimwin32.dll | root\cimv2 | 컴퓨터, 디스크, 주변 장치, 파일, 폴더, 파일 시스템, 네트워킹 구성 요소, 운영 체제, 프린터, 프로세스, 보안, 서비스, 공유, SAM 사용자 및 그룹 등에 대한 정보를 제공합니다. |
Windows Installer 공급자 | msiprov.dll | root\cimv2 | 설치된 소프트웨어 정보에 대한 액세스를 제공합니다. |
기능에 따라 호출되어야 하는 네임스페이스는 다르며
대부분 사용자가 많이 사용하는 기능의 경우 root\cimv2 네임스페이스를 이용하여 사용자의 요청을 처리하게 됩니다.
WMI를 사용하기 위한 WMI 공급자 호출
WMI의 경우 Moniker 인터페이스를 사용하므로 기존의 COM 인터페이스를 사용하는것과 동일하게 GetObject를 사용하여 오브젝트 객체를 할당받아 속성이나 메소드를 사용하게 됩니다.
호출시 명령어는 아래와 같습니다.
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\\root\cimv2")
winmgmts : Winmgmt is the WMI service within the SVCHOST process running under the LocalSystem account
\\root\cimv2 : Win32 공급자를 사용하기 위한 메인스페이스
이후 Win32 공급자 메소드를 이용하여 각종 시스템 정보등을 취득 가능하다.
'Study' 카테고리의 다른 글
파이프로 매개변수 넘겨주기(Power Shell) (0) | 2016.12.21 |
---|---|
Cmdlet(Power Shell) (0) | 2016.12.21 |
PowerShell을 이용한 다운로더 (0) | 2016.08.22 |
PowerShell 에서 사용할 수 있는 환경 변수 (0) | 2016.08.21 |
간단한 ShellCode Loader 만들기 (0) | 2016.04.02 |