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에 의해서 제시된 방법론을 실제 코드로 구현해 냅니다.