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

디버깅 기술: 204. Windbg - 윈도우 핸들 테이블 (3) - Windows 10 이상인 경우
; https://www.sysnet.pe.kr/2/0/13837




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/
정성태

... 91  92  93  94  95  96  97  98  99  100  101  102  [103]  104  105  ...
NoWriterDateCnt.TitleFile(s)
11358정성태11/15/201726652사물인터넷: 9. Visual Studio 2017에서 Raspberry Pi C++ 응용 프로그램 제작 [1]
11357정성태11/15/201727155개발 환경 구성: 336. 윈도우 10 Bash 쉘에서 C++ 컴파일하는 방법
11356정성태11/15/201728719사물인터넷: 8. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 마우스 + 키보드로 쓰는 방법 [4]
11355정성태11/15/201724504사물인터넷: 7. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 마우스로 쓰는 방법 [2]파일 다운로드2
11354정성태11/14/201728694사물인터넷: 6. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 키보드로 쓰는 방법 [8]
11353정성태11/14/201725876사물인터넷: 5. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 이더넷 카드로 쓰는 방법 [1]
11352정성태11/14/201721968사물인터넷: 4. Samba를 이용해 윈도우와 Raspberry Pi간의 파일 교환 [1]
11351정성태11/7/201725219.NET Framework: 698. C# 컴파일러 대신 직접 구현하는 비동기(async/await) 코드 [6]파일 다운로드1
11350정성태11/1/201721201디버깅 기술: 108. windbg 분석 사례 - Redis 서버로의 호출을 기다리면서 hang 현상 발생
11349정성태10/31/201721675디버깅 기술: 107. windbg - x64 SOS 확장의 !clrstack 명령어가 출력하는 Child SP 값의 의미 [1]파일 다운로드1
11348정성태10/31/201718149디버깅 기술: 106. windbg - x64 역어셈블 코드에서 닷넷 메서드 호출의 인자를 확인하는 방법
11347정성태10/28/201721754오류 유형: 424. Visual Studio - "클래스 다이어그램 보기" 시 "작업을 완료할 수 없습니다. 해당 인터페이스를 지원하지 않습니다." 오류 발생
11346정성태10/25/201718321오류 유형: 423. Windows Server 2003 - The client-side extension could not remove user policy settings for 'Default Domain Policy {...}' (0x8007000d)
11338정성태10/25/201716706.NET Framework: 697. windbg - SOS DumpMT의 "BaseSize", "ComponentSize" 값에 대한 의미파일 다운로드1
11337정성태10/24/201718837.NET Framework: 696. windbg - SOS DumpClass/DumpMT의 "Vtable Slots", "Total Method Slots", "Slots in VTable" 값에 대한 의미파일 다운로드1
11336정성태10/20/201719610.NET Framework: 695. windbg - .NET string의 x86/x64 메모리 할당 구조
11335정성태10/18/201718625.NET Framework: 694. 닷넷 - <Module> 클래스의 용도
11334정성태10/18/201719655디버깅 기술: 105. windbg - k 명령어와 !clrstack을 조합한 호출 스택을 얻는 방법
11333정성태10/17/201718820오류 유형: 422. 윈도우 업데이트 - Code 9C48 Windows update encountered an unknown error.
11332정성태10/17/201719809디버깅 기술: 104. .NET Profiler + 디버거 연결 + .NET Exceptions = cpu high
11331정성태10/16/201718147디버깅 기술: 103. windbg - .NET 4.0 이상의 환경에서 모든 DLL에 대한 심벌 파일을 로드하는 파이썬 스크립트
11330정성태10/16/201717412디버깅 기술: 102. windbg - .NET 4.0 이상의 환경에서 DLL의 심벌 파일 로드 방법 [1]
11329정성태10/15/201721551.NET Framework: 693. C# - 오피스 엑셀 97-2003 .xls 파일에 대해 32비트/64비트 상관없이 접근 방법파일 다운로드1
11328정성태10/15/201724464.NET Framework: 692. C# - 하나의 바이너리로 환경에 맞게 32비트/64비트 EXE를 실행하는 방법파일 다운로드1
11327정성태10/15/201718218.NET Framework: 691. AssemblyName을 .csproj에서 바꾼 경우 빌드 오류 발생하는 문제파일 다운로드1
11326정성태10/15/201718521.NET Framework: 690. coreclr 소스코드로 알아보는 .NET 4.0의 모듈 로딩 함수 [1]
... 91  92  93  94  95  96  97  98  99  100  101  102  [103]  104  105  ...