이미 EOS 된 Windows 2003 이 자꾸 Cash 된다고 하여 덤프 분석을 진행해 봤습니다.
제일 먼저 실행해야 할 !analyze -v를 실행해 보았습니다.
BugCheck 0x7E 라는 코드인데 시스템의 중요 스레드에서 Exception이 발생했는데 처리하지 못해서 시스템이 크래시 된 것 입니다.
3: kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
SYSTEM_THREAD_EXCEPTION_NOT_HANDLED (7e)
This is a very common bugcheck. Usually the exception address pinpoints
the driver/function that caused the problem. Always note this address
as well as the link date of the driver/image that contains this address.
Arguments:
Arg1: ffffffffc0000005, The exception code that was not handled
Arg2: fffffadf26a2ce30, The address that the exception occurred at
Arg3: fffffadf27925950, Exception Record Address
Arg4: fffffadf27925360, Context Record Address
Exception record를 확인하니 srv 라는 네트워크 드라이버를 담당하는 드라이버에서 Access Violation 오류가 발생한 것을 확인할 수 있습니다.
EXCEPTION_RECORD: fffffadf27925950 -- (.exr 0xfffffadf27925950)
ExceptionAddress: fffffadf26a2ce30 (srv!memmove+0x0000000000000064)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 0000000000000001
Parameter[1]: 0000000100089458
Attempt to write to address 0000000100089458
아래의 .cxr 을 클릭하면 오류가 발생한 코드로 이동을 합니다.
CONTEXT: fffffadf27925360 -- ( .cxr 0xfffffadf27925360 )
rax=00000000000893f0 rbx=fffffadf36263958 rcx=0000000100089458
rdx=fffffade3720f0f0 rsi=fffffadf3734cb20 rdi=00000000000893f0
rip=fffffadf26a2ce30 rsp=fffffadf27925b78 rbp=0000000000000000
r8=0000000000000018 r9=0000000000000003 r10=0000000000000012
r11=0000000100089458 r12=0000000000000000 r13=0000000000000018
r14=00000000ffffff84 r15=0000000000000000
iopl=0 nv up ei pl nz na po nc
cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00010206
srv!memmove+0x64:
fffffadf`26a2ce30 488901 mov qword ptr [rcx],rax ds:002b:00000001`00089458=????????????????
Resetting default scope
오류가 발생한 코드로 이동을 해보니 rcx 레지스터에 잘못된 값이 들어 있어서 문제가 발생한 것입니다. [rcx] 는 rcx 의 값에 해당하는 주소에 접근한다는 의미 입니다.
3: kd> .cxr 0xfffffadf27925360
rax=00000000000893f0 rbx=fffffadf36263958 rcx=0000000100089458
rdx=fffffade3720f0f0 rsi=fffffadf3734cb20 rdi=00000000000893f0
rip=fffffadf26a2ce30 rsp=fffffadf27925b78 rbp=0000000000000000
r8=0000000000000018 r9=0000000000000003 r10=0000000000000012
r11=0000000100089458 r12=0000000000000000 r13=0000000000000018
r14=00000000ffffff84 r15=0000000000000000
iopl=0 nv up ei pl nz na po nc
cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00010206
srv!memmove+0x64:
fffffadf`26a2ce30 488901 mov qword ptr [rcx],rax ds:002b:00000001`00089458=????????????????
콜스택을 확인해보니 다른 드라이버 모듈은 안 보이고 SRV만 보입니다. 아마도 네트워크 드라이브에 대한 요청을 받은 후 네트워크 요청을 처리하던 중으로 보입니다.
3: kd> k
*** Stack trace for last set context - .thread/.cxr resets it
# Child-SP RetAddr Call Site
00 fffffadf`27925b78 fffffadf`26ae24c9 srv!memmove+0x64
01 fffffadf`27925b80 fffffadf`26a2c8f7 srv!SrvSmbNtTransactionSecondary+0x3e9
02 fffffadf`27925c40 fffffadf`26a2c853 srv!SrvProcessSmb+0x19f
03 fffffadf`27925ca0 fffffadf`26a8d0f2 srv!SrvRestartReceive+0xca
04 fffffadf`27925d10 fffff800`0124f932 srv!WorkerThread+0x144
05 fffffadf`27925d70 fffff800`01020556 nt!PspSystemThreadStartup+0x3e
06 fffffadf`27925dd0 00000000`00000000 nt!KiStartSystemThread+0x16
어떤 시스템 중요 프로세스인지 확인해 봅니다.
3: kd> !process -1 0
PROCESS fffffadf38bf85a0
SessionId: none Cid: 0004 Peb: 00000000 ParentCid: 0000
DirBase: 23be01000 ObjectTable: fffffa8000001bd0 HandleCount: 2717.
Image: System
어셈블리로 분석을 해 보았지만 특이한 점이 확인되지 않아서 SrvSmbNtTransactionSecondary 함수를 인터넷에서 검색해 봅니다.
DELL 문서에서 KB2696547에 해당하는 이슈라고 확인됩니다.
Stop Code 0x50 srv.sys caused by EternalBlue Exploit
Microsoft released a Security Bulletin regarding SMBv1.0. External Link The most severe of the vulnerabilities could allow remote code execution if an attacker sends specially crafted messages to a Microsoft Server Message Block 1.0 (SMBv1) server.
You can identify that this issue is occuring by analyzing the Stack on the Memory Dump and finding this specific lines:
ffffd001`078b0700 fffff801`71252360 nt!KiPageFault+0x12f
ffffd001`078b0890 fffff801`712522a5 srv!SrvOs2FeaToNt+0x48
ffffd001`078b08c0 fffff801`7127369b srv!SrvOs2FeaListToNt+0x125
ffffd001`078b0910 fffff801`7127c8ba srv!SrvSmbOpen2+0xc3
ffffd001`078b09b0 fffff801`7127fb2e srv!ExecuteTransaction+0x2ca
ffffd001`078b09f0 fffff801`7120d84f srv!SrvSmbTransactionSecondary+0x40b
ffffd001`078b0a90 fffff801`7120da20 srv!SrvProcessSmb+0x237
ffffd001`078b0b10 fffff801`7124cac8 srv!SrvRestartReceive+0x114
ffffd001`078b0b50 fffff800`13591306 srv!WorkerThread+0x5248
ffffd001`078b0bd0 fffff800`1317f280 nt!IopThreadStart+0x26
ffffd001`078b0c00 fffff800`131d89c6 nt!PspSystemThreadStartup+0x58
ffffd001`078b0c60 00000000`00000000 nt!KiStartSystemThread+0x16
좀더 검색을 해보니 MS SMB 취역점인 MS17-010을 분석한 문서가 보입니다. 아마도 MS17-010 취약점에 대한 공격이 들어왔는데 srv 드라이버가 이를 잘 처리하지 못해서 시스템이 크래시 된 것으로 보입니다.
https://github.com/nixawk/labs/issues/9
===============
Bug5: Transaction secondary request is accepted and processed after transaction execution is started
===============
If we send a transaction secondary request to a transaction that AllDataReceived member has already been set, a server will
send back an error without processing the request.
For multipiece transaction, AllDataReceived is set (in SrvSmbTransactionSecondary()/SrvSmbNtTransactionSecondary()) before
executing transaction. But AllDataReceived is NOT set (in SrvSmbTransaction()/SrvSmbNtTransaction()) when transaction is
completed in 1 SMB message. This allow us to send a transaction secondary request to modify InParamter/InData buffer and
ParameterCount/DataCount while server is executing a transaction or sending a reply.
Windows Server 2003은 이미 EOS 되어 보안 취약점에 대해서도 패치를 제공하지 않은 상태입니다. 하지만 SMB 취약점은 영향도가 커서 특별히 패지가 만들어져 있습니다. 혹시 아직 Windows 2003을 운영하고 계신다면 꼭 아래 패치를 설치해주세요
Security Update for Windows Server 2003 (KB4012598)
https://www.microsoft.com/en-us/download/details.aspx?id=55248
감사합니다.
'Debugging' 카테고리의 다른 글
System Hang 분석 (0) | 2018.11.24 |
---|---|
Symbol Server 설정 (공유, HTTP) (0) | 2018.03.04 |
[디버거 명령]!Mex.p (0) | 2017.09.25 |
[디버깅 명령]!mex.help (0) | 2017.09.24 |