SMBGhost Exploit 리스트와 설명

2020년 3월 SMBGhost라는 SMB v3 취약점이 출현했습니다. 버그의 특성도 굉장히 심플하면서, 여러가지 메모리 레이아웃의 우연이 겹쳐서 Full RCE가 되는 점 등, 윈도우즈 커널 보안을 공부하기 위한 좋은 타겟입니다.

수많은 exploit들이 돌아 다니고 있어서 간단하게, 각 exploit들의 특징을 정리해 보았습니다.

Name Resources Descriptions Read Primitive Write Primitive
synacktiv I’M SMBGHOST, DABA DEE DABA DA POC uses WindowsProtocolTestSuite to reproduce crash NA NA
eerykitty CVE-2020-0796-PoC Python, uses modified smbprotocol, Crash POC NA NA
danigargu CVE-2020-0796 LPE to SYSTEM, Token Priv Modification, C-code NA (Only uses Token Handle Address Leak) SRVNET_BUFFER_HDR.pNetRawBuffer
ZecOps ZecOps - CVE-2020-0796 Local Privilege Escalation POC Python, LPE, Token Priv Modification NA (Only uses Token Handle Address Leak) SRVNET_BUFFER_HDR.pNetRawBuffer
Almorabea SMBGhost-LPE-Metasploit-Module Using danigargu implmenetation for Metasploit NA (Only uses Token Handle Address Leak) SRVNET_BUFFER_HDR.pNetRawBuffer
ricercasecurity “I’ll ask your body”: SMBGhost pre-auth RCE abusing Direct Memory Access structs Implementation provided only to paid customers, RCE Shell MDL Corruption SRVNET_BUFFER_HDR.pNetRawBuffer
chompie1337 chompie1337/SMBGhost_RCE_PoC Implementation of ricercasecurity article MDL Corruption SRVNET_BUFFER_HDR.pNetRawBuffer

간단하게 정리하자면, synacktiv, eerykitty 는 초기의 크래쉬만을 일으키는 POC였고, 점차 danigargu, ZecOps, Almorabea로 넘어 가면서 로칼에서 커널에서 공격 프로세스의 토큰 주소를 노출하고 SRVNET_BUFFER_HDR.pNetRawBuffer 를 Write Primitive로 사용하면서 권한 상승을 이뤄냅니다. 그러다가 일본 보안 회사인 ricercasecurity에서 MDL Corruption을 사용하면서 PTE의 물리적인 주소가 어느 정도 예측 가능하다는 점에 착안해, 안정적으로 커널 메모리 릭을 수행하면서 이미 알려진 여러 기법을 활용해 리모트 쉘을 띄우는 방법을 제시합니다. 다만, 이때에는 exploit 코드는 자사 고객에게만 제공 되었고, 이후 chompie1337라는 리서처가 ricercasecurity에 의해서 제시된 방법론을 실제 코드로 구현해 냅니다.