Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)
(시리즈 글이 5개 있습니다.)
디버깅 기술: 28. Windbg - 윈도우 핸들 테이블
; https://www.sysnet.pe.kr/2/0/935

디버깅 기술: 55. Windbg - 윈도우 핸들 테이블 (2)
; https://www.sysnet.pe.kr/2/0/1476

디버깅 기술: 151. Windows 10 - Process Explorer로 확인한 Handle 정보를 windbg에서 조회
; https://www.sysnet.pe.kr/2/0/12099

디버깅 기술: 168. windbg - 필터 드라이버 확인하는 확장 명령어(!fltkd)
; https://www.sysnet.pe.kr/2/0/12283

디버깅 기술: 194. Windbg - x64 가상 주소를 물리 주소로 변환
; https://www.sysnet.pe.kr/2/0/13500




windbg - 필터 드라이버 확인하는 확장 명령어(!fltkd)

아래의 글을,

윈도우즈 룻킷 - 윈도우즈 디펜더 무력화
; https://learn.darungrim.com/contents/windows10-rootkits-disabling-windows-defender.html

실습해 봤는데요. ^^ 이를 위해 우선 Local Kernel Debug 모드로 windbg를 연결하고,

Windbg - Local Kernel Debug 모드
; https://www.sysnet.pe.kr/2/0/934

심벌을 먼저 로드해봤는데,

0: kd> .reload /f
Loading Kernel Symbols
....

Press ctrl-c (cdb, kd, ntsd) or ctrl-break (windbg) to abort symbol loads that take too long.
Run !sym noisy before .reload to track down problems loading symbols.

........*** ERROR: Symbol file could not be found.  Defaulted to export symbols for clipsp.sys - 
..................................*** ERROR: Module load completed but symbols could not be loaded for WdFilter.sys
.................
....*** WARNING: Unable to verify timestamp for dump_msrpc.sys
*** ERROR: Module load completed but symbols could not be loaded for dump_msrpc.sys
......*** WARNING: Unable to verify timestamp for Null.SYS
*** ERROR: Module load completed but symbols could not be loaded for Null.SYS
..................*** ERROR: Module load completed but symbols could not be loaded for MpKslDrv.sys
....................................
...............*** ERROR: Module load completed but symbols could not be loaded for peauth.sys
.............*** ERROR: Module load completed but symbols could not be loaded for WdNisDrv.sys
....
Loading User Symbols

Loading unloaded module list
........

************* Symbol Loading Error Summary **************
Module name            Error
clipsp                 The system cannot find the file specified : srv*e:\symbols*http://msdl.microsoft.com/download/symbols
WdFilter               The system cannot find the file specified : srv*e:\symbols*http://msdl.microsoft.com/download/symbols
dump_msrpc             No data is available : srv*e:\symbols*http://msdl.microsoft.com/download/symbols
Null                   No data is available : srv*e:\symbols*http://msdl.microsoft.com/download/symbols
MpKslDrv               The system cannot find the file specified : srv*e:\symbols*http://msdl.microsoft.com/download/symbols
peauth                 The system cannot find the file specified : srv*e:\symbols*http://msdl.microsoft.com/download/symbols
WdNisDrv               The system cannot find the file specified : srv*e:\symbols*http://msdl.microsoft.com/download/symbols

You can troubleshoot most symbol related issues by turning on symbol loading diagnostics (!sym noisy) and repeating the command that caused symbols to be loaded.
You should also verify that your symbol search path (.sympath) is correct.

아쉽게도 WdFilter에 대한 심벌 파일을 내려받지 못하고 있습니다. 어쨌든, 이 상태에서 "fltkd.filters" 확장 명령어와,

0: kd>  !fltkd.filters

Filter List: ffffc60fe0bca0c0 "Frame 0" 
   FLT_FILTER: ffffc60fe066aad0 "WdFilter" "328010"
      FLT_INSTANCE: ffffc60fe40ebb30 "WdFilter Instance" "328010"
      FLT_INSTANCE: ffffc60fe423e8a0 "WdFilter Instance" "328010"
      FLT_INSTANCE: ffffc60fe43df9a0 "WdFilter Instance" "328010"
      FLT_INSTANCE: ffffc60fe42df8a0 "WdFilter Instance" "328010"
      FLT_INSTANCE: ffffc60fe54a67e0 "WdFilter Instance" "328010"
   FLT_FILTER: ffffc60fe67b9c30 "storqosflt" "244000"
   FLT_FILTER: ffffc60fe65d3a10 "wcifs" "189900"
   FLT_FILTER: ffffc60fe668f920 "CldFlt" "180451"
   FLT_FILTER: ffffc60fe42968a0 "FileCrypt" "141100"
   FLT_FILTER: ffffc60fe6795010 "luafv" "135000"
      FLT_INSTANCE: ffffc60fe67b2010 "luafv" "135000"
   FLT_FILTER: ffffc60fe42c48a0 "npsvctrig" "46000"
      FLT_INSTANCE: ffffc60fe42c4c10 "npsvctrig" "46000"
   FLT_FILTER: ffffc60fe064e240 "Wof" "40700"
      FLT_INSTANCE: ffffc60fe43d3b20 "Wof Instance" "40700"

출력 결과 중 WdFilter 항목만 상세 보기를 하면 이런 결과가 나옵니다.

0: kd> !fltkd.filter ffffc60fe066aad0

FLT_FILTER: ffffc60fe066aad0 "WdFilter" "328010"
   FLT_OBJECT: ffffc60fe066aad0  [02000000] Filter
      RundownRef               : 0x000000000000f476 (31291)
      PointerCount             : 0x00000006 
      PrimaryLink              : [ffffc60fe67b9c40-ffffc60fe0bca0c0] 
   Frame                    : ffffc60fe0bca010 "Frame 0" 
   Flags                    : [00000032] FilteringInitiated +30!!
   DriverObject             : ffffc60fe064d740 
   FilterLink               : [ffffc60fe67b9c40-ffffc60fe0bca0c0] *** ERROR: Module load completed but symbols could not be loaded for WdFilter.sys

   PreVolumeMount           : fffff8070daba090  WdFilter+0x2a090 
   PostVolumeMount          : fffff8070da945b0  WdFilter+0x45b0 
   FilterUnload             : fffff8070dabc930  WdFilter+0x2c930 
   InstanceSetup            : fffff8070dabcc40  WdFilter+0x2cc40 
   InstanceQueryTeardown    : fffff8070dabce30  WdFilter+0x2ce30 
   InstanceTeardownStart    : 0000000000000000  (null) 
   InstanceTeardownComplete : fffff8070dabce90  WdFilter+0x2ce90 
   ActiveOpens              : (ffffc60fe066ac88)  mCount=0 
   Communication Port List  : (ffffc60fe066acd8)  mCount=5 
   Client Port List         : (ffffc60fe066ad28)  mCount=5 
   VerifierExtension        : 0000000000000000 
   Operations               : ffffc60fe066ad80 
   OldDriverUnload          : 0000000000000000  (null) 
   SupportedContexts        : (ffffc60fe066ac00)
*************************************************************************
***                                                                   ***
***                                                                   ***
***    Either you specified an unqualified symbol, or your debugger   ***
***    doesn't have full symbol information.  Unqualified symbol      ***
***    resolution is turned off by default. Please either specify a   ***
***    fully qualified symbol module!symbolname, or enable resolution ***
***    of unqualified symbols by typing ".symopt- 100". Note that   ***
***    enabling unqualified symbol resolution with network symbol     ***
***    server shares in the symbol path may cause the debugger to     ***
***    appear to hang for long periods of time when an incorrect      ***
***    symbol name is typed or the network symbol server is down.     ***
***                                                                   ***
***    For some commands to work properly, your symbol path           ***
***    must point to .pdb files that have full type information.      ***
***                                                                   ***
***    Certain .pdb files (such as the public OS symbols) do not      ***
***    contain the required information.  Contact the group that      ***
***    provided you with these symbols if you need this command to    ***
***    work.                                                          ***
***                                                                   ***
***    Type referenced: PVOID                                         ***
***                                                                   ***
*************************************************************************

      VolumeContexts           : (ffffc60fe066ac00)
      InstanceContexts         : (ffffc60fe066ac00)
      FileContexts             : (ffffc60fe066ac00)
      StreamContexts           : (ffffc60fe066ac00)
      StreamHandleContexts     : (ffffc60fe066ac00)
      TransactionContext       : (ffffc60fe066ac00)
      (null)                   : (ffffc60fe066ac00)
   InstanceList             : (ffffc60fe066ab38)
      FLT_INSTANCE: ffffc60fe40ebb30 "WdFilter Instance" "328010"
      FLT_INSTANCE: ffffc60fe423e8a0 "WdFilter Instance" "328010"
      FLT_INSTANCE: ffffc60fe43df9a0 "WdFilter Instance" "328010"
      FLT_INSTANCE: ffffc60fe42df8a0 "WdFilter Instance" "328010"
      FLT_INSTANCE: ffffc60fe54a67e0 "WdFilter Instance" "328010"

"윈도우즈 룻킷 - 윈도우즈 디펜더 무력화" 글의 내용에 따라 Operations에 대한 포인터를 덤프해 보면,

0: kd> dqs ffffc60fe066ad80
ffffc60f`e066ad80  00000009`00000003
ffffc60f`e066ad88  fffff807`0da963b0 WdFilter+0x63b0
ffffc60f`e066ad90  fffff807`0da96650 WdFilter+0x6650
ffffc60f`e066ad98  00000000`00000000
ffffc60f`e066ada0  00000000`00000000
ffffc60f`e066ada8  fffff807`0dab18b0 WdFilter+0x218b0
ffffc60f`e066adb0  fffff807`0dab3fa0 WdFilter+0x23fa0
ffffc60f`e066adb8  00000000`00000000
ffffc60f`e066adc0  00000000`00000012
ffffc60f`e066adc8  fffff807`0daaa810 WdFilter+0x1a810
ffffc60f`e066add0  fffff807`0daac0b0 WdFilter+0x1c0b0
ffffc60f`e066add8  00000000`00000000
ffffc60f`e066ade0  00000000`00000006
ffffc60f`e066ade8  fffff807`0dab8920 WdFilter+0x28920
ffffc60f`e066adf0  fffff807`0dab8f60 WdFilter+0x28f60
ffffc60f`e066adf8  00000000`00000000

심벌 파일이 없어 "WdFilter!MpAmPreCreate" 등의 명확한 함수명 대신 "WdFilter+0x63b0"와 같은 식으로 나오고 있지만, 어쨌든 덤프해 보면 관련 인스트럭션은 확인할 수 있고,

0: kd> u fffff807`0da963b0
WdFilter+0x63b0:
fffff807`0da963b0 48895c2410      mov     qword ptr [rsp+10h],rbx
fffff807`0da963b5 55              push    rbp
fffff807`0da963b6 56              push    rsi
fffff807`0da963b7 57              push    rdi
fffff807`0da963b8 4156            push    r14
fffff807`0da963ba 4157            push    r15
fffff807`0da963bc 488bec          mov     rbp,rsp
fffff807`0da963bf 4883ec50        sub     rsp,50h

그러니까... 저곳의 진입을 이런 식으로 바꾸면,

WdFilter+0x63b0:
    mov     eax,1
    ret
    ...[생략]...

윈도우 디펜더로 인한 DKOM 무력화를 막을 수 있다는 겁니다. 오호~~~ 언제 심심하면 아래의 글에 썼던,

C# - KernelMemoryIO 드라이버를 이용해 실행 프로그램을 숨기는 방법(DKOM: Direct Kernel Object Modification)
; https://www.sysnet.pe.kr/2/0/12111

커널 메모리 변조로 인한 BSOD의 발생 여부를 한번 테스트해봐야겠군요. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 8/3/2020]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2022-06-20 02시13분
[qwer] 혹 WdFilter에 대한 심볼을 내려받을 수 있는 방법이 있을까요?

저도 아래와 같이 WdFilter에 대해 심볼을 찾을 수 없다는 에러가 떴습니다. (`.reload /f`의 결과)

```
SYMSRV: BYINDEX: 0x7B7
         c:\symbols*https://msdl.microsoft.com/download/symbols
         WdFilter.sys
         75C63DA16f000
SYMSRV: UNC: c:\symbols\WdFilter.sys\75C63DA16f000\WdFilter.sys - path not found
SYMSRV: UNC: c:\symbols\WdFilter.sys\75C63DA16f000\WdFilter.sy_ - path not found
SYMSRV: UNC: c:\symbols\WdFilter.sys\75C63DA16f000\file.ptr - path not found
SYMSRV: HTTPGET: /download/symbols/WdFilter.sys/75C63DA16f000/WdFilter.sys
SYMSRV: HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV: HTTPGET: /download/symbols/WdFilter.sys/75C63DA16f000/WdFilter.sy_
SYMSRV: HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV: HTTPGET: /download/symbols/WdFilter.sys/75C63DA16f000/file.ptr
SYMSRV: HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV: RESULT: 0x80190194
DBGHELP: C:\Program Files (x86)\Windows Kits\10\Debuggers\WdFilter.sys - file not found
DBGENG: \SystemRoot\system32\drivers\wd\WdFilter.sys - Image mapping disallowed by non-local path.
Unable to load image \SystemRoot\system32\drivers\wd\WdFilter.sys, Win32 error 0n2
SYMSRV: BYINDEX: 0x7B8
         c:\symbols*https://msdl.microsoft.com/download/symbols
         WdFilter.pdb
         19D7B6B801EE876087C17F549F80CF5F1
SYMSRV: UNC: c:\symbols\WdFilter.pdb\19D7B6B801EE876087C17F549F80CF5F1\WdFilter.pdb - path not found
SYMSRV: UNC: c:\symbols\WdFilter.pdb\19D7B6B801EE876087C17F549F80CF5F1\WdFilter.pd_ - path not found
SYMSRV: UNC: c:\symbols\WdFilter.pdb\19D7B6B801EE876087C17F549F80CF5F1\file.ptr - path not found
SYMSRV: HTTPGET: /download/symbols/WdFilter.pdb/19D7B6B801EE876087C17F549F80CF5F1/WdFilter.pdb
SYMSRV: HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV: HTTPGET: /download/symbols/WdFilter.pdb/19D7B6B801EE876087C17F549F80CF5F1/WdFilter.pd_
SYMSRV: HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV: HTTPGET: /download/symbols/WdFilter.pdb/19D7B6B801EE876087C17F549F80CF5F1/file.ptr
SYMSRV: HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV: RESULT: 0x80190194
DBGHELP: WdFilter.pdb - file not found
DBGHELP: WdFilter - no symbols loaded
```
[guest]
2022-06-20 05시46분
현재로써는 마이크로소프트의 symbol server에서 제공해 주지 않는 한 방법이 없습니다. 제가 본문에서 예로 든 아티클의 경우, 그 당시까지만 해도 마이크로소프트가 제공하다가, 아마도 WdFilter가 보안에 민감하다 보니 이후 일부러 막은 것이 아닌가 짐작해 봅니다. ^^

-------------------------------------

(2024-03-04) Disable Windows Defender (+ UAC Bypass, + Upgrade to SYSTEM)
; https://blog.injectexp.dev/2024/02/28/disable-windows-defender-uac-bypass-upgrade-to-system/
정성태

1  2  3  4  5  6  7  [8]  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13421정성태10/4/20233237닷넷: 2147. C# - 비동기 메서드의 async 예약어 유무에 따른 차이
13420정성태9/26/20235259스크립트: 57. 파이썬 - UnboundLocalError: cannot access local variable '...' where it is not associated with a value
13419정성태9/25/20233088스크립트: 56. 파이썬 - RuntimeError: dictionary changed size during iteration
13418정성태9/25/20233749닷넷: 2146. C# - ConcurrentDictionary 자료 구조의 동기화 방식
13417정성태9/19/20233332닷넷: 2145. C# - 제네릭의 형식 매개변수에 속한 (매개변수를 가진) 생성자를 호출하는 방법
13416정성태9/19/20233150오류 유형: 877. redis-py - MISCONF Redis is configured to save RDB snapshots, ...
13415정성태9/18/20233637닷넷: 2144. C# 12 - 컬렉션 식(Collection Expressions)
13414정성태9/16/20233387디버깅 기술: 193. Windbg - ThreadStatic 필드 값을 조사하는 방법
13413정성태9/14/20233576닷넷: 2143. C# - 시스템 Time Zone 변경 시 이벤트 알림을 받는 방법
13412정성태9/14/20236843닷넷: 2142. C# 12 - 인라인 배열(Inline Arrays) [1]
13411정성태9/12/20233357Windows: 252. 권한 상승 전/후 따로 관리되는 공유 네트워크 드라이브 정보
13410정성태9/11/20234855닷넷: 2141. C# 12 - Interceptor (컴파일 시에 메서드 호출 재작성) [1]
13409정성태9/8/20233701닷넷: 2140. C# - Win32 API를 이용한 모니터 전원 끄기
13408정성태9/5/20233711Windows: 251. 임의로 만든 EXE 파일을 포함한 ZIP 파일의 압축을 해제할 때 Windows Defender에 의해 삭제되는 경우
13407정성태9/4/20233469닷넷: 2139. C# - ParallelEnumerable을 이용한 IEnumerable에 대한 병렬 처리
13406정성태9/4/20233402VS.NET IDE: 186. Visual Studio Community 버전의 라이선스
13405정성태9/3/20233835닷넷: 2138. C# - async 메서드 호출 원칙
13404정성태8/29/20233356오류 유형: 876. Windows - 키보드의 등호(=, Equals sign) 키가 눌리지 않는 경우
13403정성태8/21/20233186오류 유형: 875. The following signatures couldn't be verified because the public key is not available: NO_PUBKEY EB3E94ADBE1229CF
13402정성태8/20/20233243닷넷: 2137. ILSpy의 nuget 라이브러리 버전 - ICSharpCode.Decompiler
13401정성태8/19/20233505닷넷: 2136. .NET 5+ 환경에서 P/Invoke의 성능을 높이기 위한 SuppressGCTransition 특성 [1]
13400정성태8/10/20233341오류 유형: 874. 파이썬 - pymssql을 윈도우 환경에서 설치 불가
13399정성태8/9/20233369닷넷: 2135. C# - 지역 변수로 이해하는 메서드 매개변수의 값/참조 전달
13398정성태8/3/20234122스크립트: 55. 파이썬 - pyodbc를 이용한 SQL Server 연결 사용법
13397정성태7/23/20233634닷넷: 2134. C# - 문자열 연결 시 string.Create를 이용한 GC 할당 최소화
13396정성태7/22/20233332스크립트: 54. 파이썬 pystack 소개 - 메모리 덤프로부터 콜 스택 열거
1  2  3  4  5  6  7  [8]  9  10  11  12  13  14  15  ...