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의 발생 여부를 한번 테스트해봐야겠군요. ^^




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

[연관 글]


donaricano-btn



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

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

비밀번호

댓글 쓴 사람
 




1  2  3  4  5  [6]  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
12382정성태11/13/2020426오류 유형: 671. dotnet build - The local source '...' doesn't exist
12381정성태10/26/2020479VC++: 137. C++ stl map의 사용자 정의 타입을 key로 사용하는 방법파일 다운로드1
12380정성태10/26/2020296오류 유형: 670. Visual Studio - Squash_FailureCommitsReset
12379정성태10/26/2020566.NET Framework: 955. .NET 메서드의 Signature 바이트 코드 분석파일 다운로드2
12378정성태10/20/2020610.NET Framework: 954. C# - x86/x64 환경에 따라 달라지는 P/Invoke 함수의 export 이름파일 다운로드1
12377정성태10/29/2020653디버깅 기술: 172. windbg - 파일 열기 시점에 bp를 걸어 파일명 알아내는 방법(Managed/Unmanaged)
12376정성태10/15/2020417오류 유형: 669. windbg - sos의 name2ee 명령어 실행 시 "Failed to request module list." 오류
12375정성태10/15/2020749Windows: 177. 윈도우 탐색기에서 띄우는 cmd.exe 창의 디렉터리 구분 문자가 'Yen(¥)' 기호로 나오는 경우 [1]
12374정성태11/22/2020878.NET Framework: 953. C# 9.0 - (6) 함수 포인터(Function pointers) [1]파일 다운로드2
12373정성태10/14/2020434.NET Framework: 952. OpCodes.Box와 관련해 IL 형식으로 직접 코딩 시 유의할 점
12372정성태11/22/2020700.NET Framework: 951. C# 9.0 - (5) 로컬 함수에 특성 지정 가능(Attributes on local functions)파일 다운로드1
12371정성태10/13/2020339개발 환경 구성: 519. Visual Studio의 Ctrl+Shift+U (Edit.MakeUppercase) 단축키가 동작하지 않는 경우
12370정성태10/13/2020489Linux: 33. Linux - nmcli를 이용한 고정 IP 설정
12369정성태10/21/20201563Windows: 176. Raymond Chen이 한글날에 밝히는 윈도우의 한글 자모 분리 현상 [1]
12368정성태10/12/2020429오류 유형: 668. VSIX 확장 빌드 - The "GetDeploymentPathFromVsixManifest" task failed unexpectedly.
12367정성태10/12/2020527오류 유형: 667. Ubuntu - Temporary failure resolving 'kr.archive.ubuntu.com'
12366정성태11/22/2020680.NET Framework: 950. C# 9.0 - (4) 원시 크기 정수(Native ints) [1]파일 다운로드1
12365정성태11/22/2020613.NET Framework: 949. C# 9.0 - (3) 람다 메서드의 매개 변수 무시(Lambda discard parameters)파일 다운로드1
12364정성태11/22/2020743.NET Framework: 948. C# 9.0 - (2) localsinit 플래그 내보내기 무시(Suppress emitting localsinit flag)파일 다운로드1
12363정성태11/22/20201156.NET Framework: 947. C# 9.0 - (1) 대상으로 형식화된 new 식(Target-typed new expressions) [2]파일 다운로드1
12362정성태10/11/2020474VS.NET IDE: 151. Visual Studio 2019에 .NET 5 rc/preview 적용하는 방법
12361정성태10/19/2020758.NET Framework: 946. C# 9.0을 위한 개발 환경 구성
12360정성태10/8/2020334오류 유형: 666. The type or namespace name '...' does not exist in the namespace 'Microsoft.VisualStudio.TestTools' (are you missing an assembly reference?)
12359정성태10/7/2020523오류 유형: 665. Windows - 재부팅 후 iSCSI 연결이 끊기는 문제
12358정성태10/7/2020429오류 유형: 664. Web Deploy 설치 시 "A newer version of Microsoft Web Deploy 3.6 was found on this machine." 오류
12357정성태10/7/2020381오류 유형: 663. 이벤트 로그 - The storage optimizer couldn't complete retrim on New Volume
1  2  3  4  5  [6]  7  8  9  10  11  12  13  14  15  ...