
CVE-2020-0688용 취약점 스캐너
CVE-2020-0688은 정적 키 사용으로 인한 Microsoft Exchange의 치명적인 취약점입니다. 악용하려면 유효한 자격 증명(이메일 사용자 수준)이 필요하고 대규모 악용 위험은 낮지만, 이 취약점은 SYSTEM 수준 RCE로 이어지기 때문에 표적 공격에 매우 유용할 수 있습니다.
추가 정보:
알려진 미탐(이 스크립트가 놓칠 수 있는 취약한 Exchange 서버)의 원인은 여러 가지가 있습니다:
잠재적 Exchange 서버는 포트 25와 443이 모두 열려 있는 호스트를 식별하여 사전 선별됩니다. 이 중 하나를 차단하는 설정이 있으면 해당 서버는 놓치게 됩니다.
zmap은 정밀도를 희생하면서 속도와 확장성에 최적화되어 있습니다. 일반적으로 zmap을 연속으로 여러 번 실행하면 결과가 약간씩 다릅니다. 따라서 이 스크립트를 여러 번 실행해도 결과가 약간씩 다릅니다.
이는 순전히 네트워크 혼잡 때문인지 버그가 있는 코드 때문인지 확실하지 않습니다. 패치/해결 방법이 포함된 풀 리퀘스트는 언제든 환영합니다!
우리는 은밀하게 행동하려는 것이 아니므로 일부 방화벽은 우리를 로봇으로 간주하고 차단할 수 있습니다.
우리는 화려한 핑거프린팅을 수행하지 않고 Exchange 서버가 스스로 보고하는 버전에만 의존하므로 버전 번호의 처음 세 필드로 제한됩니다.
예를 들어, Exchange Server 2019의 최신 누적 업데이트는 15.2.529.5이며 12월에 출시되었고 취약합니다. 패치가 포함된 최신 업데이트는 15.2.529.8입니다. 둘 다 자신의 버전을 15.2.529로 보고하므로, 스크립트는 최신 패치가 설치되어 있지 않고 취약하더라도 서버가 패치된 것으로 간주합니다.
그러나 실제로는 패치가 나오는 즉시 시스템을 업데이트하는 Exchange 관리자나 “작동하면 건드리지 말라”는 원칙을 따르는 관리자만 있는 것 같습니다. 그 중간은 없습니다.
zmap, Python >= 3.5, 모듈:
다음과 같이 전역으로 설치할 수 있습니다:
$ sudo dnf install zmap python3-gevent python3-dns python3-pyOpenSSL
또는:
$ sudo apt install zmap python3-gevent python3-dns python3-openssl
Python 모듈은 virtualenv를 통해 로컬로도 설치할 수 있습니다:
$ virtualenv -p python3 CVE-2020-0688
$ . ./CVE-2020-0688/bin/activate
$ pip install -r ./requirements.txt
기본 스캔에는 스캔할 IP/서브넷(CIDR 형식)이 포함된 파일만 있으면 됩니다:
$ ./scan.py ~/my_networks.txt output.csv
출력은 다음 열로 구성된 CSV 형식으로 작성됩니다:
| IP | Exchange 버전 | 서버 이름 | PTR | Common Name (TLS 인증서에서) |
|---|
선택적으로, 발견된 모든 Exchange 서버에 대한 정보를 출력하도록 요청할 수 있습니다:
$ ./scan.py -f ~/my_networks.txt output.csv
이 경우 서버의 취약 여부를 나타내는 열이 하나 더 추가됩니다:
| IP | Exchange 버전 | 취약? | 서버 이름 | PTR | Common Name (TLS 인증서에서) |
|---|
차단 목록의 IP/서브넷이 포함된 파일(-b 옵션)을 제공하거나, 병렬 작업 수(-p) 또는 시간 제한 길이(-t)를 변경할 수도 있습니다:
$ # ./scan.py -h
usage: scan.py [-h] [-b BLACKLIST] [-f] [-p PARALLEL] [-t TIMEOUT]
input output
Identify Exchange servers vulnerable to CVE-2020-0688.
positional arguments:
input Input file, each line contains one IP/subnet
output File to save the results (in CSV format)
optional arguments:
-h, --help show this help message and exit
-b BLACKLIST, --blacklist BLACKLIST
File containing IPs/subnets to avoid
-f, --full Don't filter seemingly up-to-date Exchange servers
-p PARALLEL, --parallel PARALLEL
How many requests to send in parallel (default: 1000)
-t TIMEOUT, --timeout TIMEOUT
Timeout (seconds) to use for network connections
(default: 5)