Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

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
```
[손님]
2022-06-20 05시46분
현재로써는 마이크로소프트의 symbol server에서 제공해 주지 않는 한 방법이 없습니다. 제가 본문에서 예로 든 아티클의 경우, 그 당시까지만 해도 마이크로소프트가 제공하다가, 아마도 WdFilter가 보안에 민감하다 보니 이후 일부러 막은 것이 아닌가 짐작해 봅니다. ^^
정성태

[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13116정성태8/4/2022139.NET Framework: 2041. C# - Socket.Close 시 Socket.Receive 메서드에서 예외가 발생하는 문제파일 다운로드1
13115정성태8/3/2022202.NET Framework: 2040. C# - ValueTask와 Task의 성능 비교파일 다운로드1
13114정성태8/2/2022193.NET Framework: 2039. C# - Task와 비교해 본 ValueTask 사용법파일 다운로드1
13113정성태7/31/2022178.NET Framework: 2038. C# 11 - Span 타입에 대한 패턴 매칭 (Pattern matching on ReadOnlySpan<char>)
13112정성태7/30/2022211.NET Framework: 2037. C# 11 - 목록 패턴(List patterns)파일 다운로드1
13111정성태7/29/2022191.NET Framework: 2036. C# 11 - IntPtr/UIntPtr과 nint/nuint의 통합파일 다운로드1
13110정성태7/27/2022208.NET Framework: 2035. C# 11 - 새로운 연산자 ">>>" (Unsigned Right Shift)파일 다운로드1
13109정성태7/27/2022166VS.NET IDE: 177. 비주얼 스튜디오 2022를 이용한 (소스 코드가 없는) 닷넷 모듈 디버깅 - "외부 원본(External Sources)"
13108정성태7/26/2022141Linux: 53. container에 실행 중인 Golang 프로세스를 디버깅하는 방법
13107정성태7/25/2022103Linux: 52. Debian/Ubuntu 계열의 docker container에서 자주 설치하게 되는 명령어
13106정성태7/24/2022100오류 유형: 819. 닷넷 6 프로젝트의 "Conditional compilation symbols" 기본값 오류
13105정성태7/23/2022208.NET Framework: 2034. .NET Core/5+ 환경에서 (프로젝트가 아닌) C# 코드 파일을 입력으로 컴파일하는 방법 - 두 번째 이야기 [1]
13104정성태7/23/2022181Linux: 51. WSL - init에서 systemd로 전환하는 방법
13103정성태7/22/2022103오류 유형: 818. WSL - systemd-genie와 관련한 2가지(systemd-remount-fs.service, multipathd.socket) 에러
13102정성태7/19/2022172.NET Framework: 2033. .NET Core/5+에서는 구할 수 없는 HttpRuntime.AppDomainAppId
13101정성태7/15/2022139[내용 예약] (비어 있는 글)
13100정성태7/15/2022228.NET Framework: 2032. C# 11 - shift 연산자 재정의에 대한 제약 완화 (Relaxing Shift Operator)
13099정성태7/14/2022600.NET Framework: 2031. C# 11 - 사용자 정의 checked 연산자파일 다운로드1
13098정성태7/13/2022165개발 환경 구성: 647. Azure - scale-out 상태의 App Service에서 특정 인스턴스에 요청을 보내는 방법
13097정성태7/12/2022133오류 유형: 817. Golang - binary.Read: invalid type int32
13096정성태7/8/2022389.NET Framework: 2030. C# 11 - UTF-8 문자열 리터럴
13095정성태7/7/2022206Windows: 208. AD 도메인에 참여하지 않은 컴퓨터에서 Kerberos 인증을 사용하는 방법
13094정성태7/6/2022148오류 유형: 816. Golang - "short write" 오류 원인
13093정성태7/5/2022229.NET Framework: 2029. C# - HttpWebRequest로 localhost 접속 시 2초 이상 지연
13092정성태7/3/2022368.NET Framework: 2028. C# - HttpWebRequest의 POST 동작 방식파일 다운로드1
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...