관리 메뉴

Information Security

GhostSMBv3 (CVE-2020-0796) 본문

CVE 취약점

GhostSMBv3 (CVE-2020-0796)

HackingPractice 2020. 5. 12. 20:15

1. 주요내용

구분

내용

영향도

SMB 3.1.1 프로토콜에서 조작된 압축 패킷을 압축 해제하는 과정에서 Buffer Overflow가 발생한다. 클라이언트/서버 모두 공격이 가능하며, 공격자는 이를 통해 블루스크린(Blue Screen of Death, BSOD)을 발생시킨다.

취약대상

Ø  Windows 10 Version 1903 for 32-bit Systems

Ø  Windows 10 Version 1903 for x64-based Systems

Ø  Windows 10 Version 1903 for ARM64-based Systems

Ø  Windows Server, version 1903 (Server Core installation)

Ø  Windows 10 Version 1909 for 32-bit Systems

Ø  Windows 10 Version 1909 for x64-based Systems

Ø  Windows 10 Version 1909 for ARM64-based Systems

Ø  Windows Server, version 1909 (Server Core installation)

조치방안

1. 윈도우 보안 업데이트(자동).
- 윈도우 설정 > 업데이트 및 보안 > 윈도우 업데이트
2. 윈도우 보안업데이트 (수동)
- https://www.catalog.update.microsoft.com/Search.aspx?q=KB4551762

3. 445 TCP 포트 차단 및 SMB v3 압축 비활성화 (임시조치)
- Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" DisableCompression -Type DWORD -Value 1 -Force

 

2. 환경구성

테스트 환경

공격자 : Kali-Linux
피해자 : Windows 10 1909 version

참고 사이트

https://blog.alyac.co.kr/2818

http://www.skinfosec.com/newsRoom/eqstInsight/eqstInsightList.do

https://github.com/ollypwn/SMBGhost

https://github.com/maxpl0it/Unauthenticated-CVE-2020-0796-PoC

3. 시나리오 구성

가.  개요

- 해당 취약점이 발생하는 원인은 조작된 SMB 헤더와 커널에서 사용하는 srv2.sys 드라이버 내 Srv2DecompressData 함수에서 정수 오버플로우로 인해 발생한다. 이때 사용되는 헤더가 SMB2_COMPRESSION_TRANSFORM_HEADER.

 

나.  시나리오

그림 3-1 시나리오 구상

2. 취약점 테스트

Step 1) Windows 10 취약한 버전 1909 확인했다.

그림 4-1 피해자 Windows 버전

Step 2) 피해자의 Windows 10 IP를 확인했다.

그림 4-2 IP 확인

Step 3) 공격자가 nmap을 통해 SMB 프로토콜 관련된 445 port open 되어 있는 것을 확인했다.

그림 4-3 nmap 스캔

Step 4) PoC 코드를 이용해 SMB 프로토콜 관련해 취약성을 확인했다.

그림 4-4 Scanner

Step 5) PoC 코드를 이용해 버퍼 오버 플로우 공격을 시도했다.

그림 4-5 버퍼 오버플로우 공격

Step 6) PoC 공격 코드를 실행하면 아래와 같이 Blue Screen이 발생하는 것을 알 수 있다.

그림 4-6 BlueScreen

5. 취약점 분석

SMB2 프로토콜 Header 구조 내용이다.

그림 5-1 SMB2 Compression Transform Header

SMB 프로토콜 헤더 구조의 설명이다.

이름

설명

Protocolld (4bytes)

프로토콜 식별자. 0x424D53FC 고정 값

OriginalCompressSegmentSize (4bytes)

압축되지 않은 Segment 크기

CompressionAlgorithm (2Bytes)

압축 알고리즘

Flags (2bytes)

Chain 압축 여부 확인

Offset/Length (4bytes)

SMB2_COMPRESSION_FLAG_NONE 0x0000

체인 압축은 지원하지 않음

SMB2_COMPRESSION_FLAG_NONE 0x0001

여러 압축 페이로드와 연결

 

PoC 코드를 보면 취약한 Smb2CompressTransformHeaderoffset 0xffffffff, data “A”*50개를 보내는 것을 알 수 있다.

그림 5-3 PoC 소스코드

와이어샤크의 패킷을 보면 Offset 0xffffffff과 데이터 “A”가 들어가 오버플로우를 발생시키는 것을 알 수 있다.

그림 5-4 패킷

6. 대응방안

아래와 같은 명령어를 통해 SMB 프로토콜을 비활성화 설정을 했다.

그림 6-1 비활성화

비활성화 시킨 후 다시 한번 scanner 실행 시 Not vulnerable을 확인할 수 있다.

그림 6-2 Scanner

SMB 프로토콜을 차단하는 Snort Rule 정책 설정을 할 수 있다.

alert tcp any any -> any 445 (msg:"Alert: SMBv3 Used with compression - Client to server"; content:"|fc 53 4d 42|"; offset: 0; depth: 10; sid:1000001; rev:1; reference:url,//portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-0796;)

alert tcp any 445 -> any any (msg:"Alert: SMBv3 Used with compression - Server to client"; content:"|fc 53 4d 42|"; offset: 0; depth: 10; sid:1000002; rev:1; reference:url,//portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-0796;)