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)
13272정성태2/27/20234215오류 유형: 850. SSMS - mdf 파일을 Attach 시킬 때 Operating system error 5: "5(Access is denied.)" 에러
13271정성태2/25/20234148오류 유형: 849. Sql Server Configuration Manager가 시작 메뉴에 없는 경우
13270정성태2/24/20233757.NET Framework: 2098. dotnet build에 /p 옵션을 적용 시 유의점
13269정성태2/23/20234293스크립트: 46. 파이썬 - uvicorn의 콘솔 출력을 UDP로 전송
13268정성태2/22/20234845개발 환경 구성: 667. WSL 2 내부에서 열고 있는 UDP 서버를 호스트 측에서 접속하는 방법
13267정성태2/21/20234772.NET Framework: 2097. C# - 비동기 소켓 사용 시 메모리 해제가 finalizer 단계에서 발생하는 사례파일 다운로드1
13266정성태2/20/20234375오류 유형: 848. .NET Core/5+ - Process terminated. Couldn't find a valid ICU package installed on the system
13265정성태2/18/20234287.NET Framework: 2096. .NET Core/5+ - PublishSingleFile 유형에 대한 runtimeconfig.json 설정
13264정성태2/17/20235785스크립트: 45. 파이썬 - uvicorn 사용자 정의 Logger 작성
13263정성태2/16/20233918개발 환경 구성: 666. 최신 버전의 ilasm.exe/ildasm.exe 사용하는 방법
13262정성태2/15/20235006디버깅 기술: 191. dnSpy를 이용한 (소스 코드가 없는) 닷넷 응용 프로그램 디버깅 방법 [1]
13261정성태2/15/20234299Windows: 224. Visual Studio - 영문 폰트가 Fullwidth Latin Character로 바뀌는 문제
13260정성태2/14/20234083오류 유형: 847. ilasm.exe 컴파일 오류 - error : syntax error at token '-' in ... -inf
13259정성태2/14/20234209.NET Framework: 2095. C# - .NET5부터 도입된 CollectionsMarshal
13258정성태2/13/20234107오류 유형: 846. .NET Framework 4.8 Developer Pack 설치 실패 - 0x81f40001
13257정성태2/13/20234203.NET Framework: 2094. C# - Job에 Process 포함하는 방법 [1]파일 다운로드1
13256정성태2/10/20235056개발 환경 구성: 665. WSL 2의 네트워크 통신 방법 - 두 번째 이야기
13255정성태2/10/20234350오류 유형: 845. gihub - windows2022 이미지에서 .NET Framework 4.5.2 미만의 프로젝트에 대한 빌드 오류
13254정성태2/10/20234262Windows: 223. (WMI 쿼리를 위한) PowerShell 문자열 escape 처리
13253정성태2/9/20235038Windows: 222. C# - 다른 윈도우 프로그램이 실행되었음을 인식하는 방법파일 다운로드1
13252정성태2/9/20233852오류 유형: 844. ssh로 명령어 수행 시 멈춤 현상
13251정성태2/8/20234317스크립트: 44. 파이썬의 3가지 스레드 ID
13250정성태2/8/20236114오류 유형: 843. System.InvalidOperationException - Unable to configure HTTPS endpoint
13249정성태2/7/20234925오류 유형: 842. 리눅스 - You must wait longer to change your password
13248정성태2/7/20234046오류 유형: 841. 리눅스 - [사용자 계정] is not in the sudoers file. This incident will be reported.
13247정성태2/7/20234962VS.NET IDE: 180. Visual Studio - 닷넷 소스 코드 디버깅 중 "Decompile source code"가 동작하는 않는 문제
1  2  3  4  5  6  7  8  9  10  11  12  13  [14]  15  ...