Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
rdpscan — CVE-2019-0708 "BlueKeep" 취약점을 위한 빠른 스캐너. | Kitploit
도구/GitHubGitHub/robertdavidgraham/rdpscan
Vulnerability ScannersExploitationNetwork Security
GitHubrobertdavidgraham/rdpscan

rdpscan

CVE-2019-0708 "BlueKeep" 취약점을 위한 빠른 스캐너.

저장소 보기
9212377년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Windows download macOS download Linux download Follow Build

CVE-2019-0708 bluekeep 취약점을 위한 rdpscan

이것은 Microsoft 원격 데스크톱의 CVE-2019-0708 취약점을 위한 빠르고 간단한 스캐너입니다. 현재 공용 인터넷에 약 90만 대의 시스템이 이 취약점에 노출되어 있어 WannaCry나 notPetya와 같은 웜이 곧 나타날 것으로 예상됩니다. 따라서 네트워크를 스캔하고 취약한 시스템에 패치를 적용하거나 최소한 NLA를 활성화하십시오.

이것은 명령줄 도구입니다. 소스 코드를 다운로드하여 직접 컴파일하거나 위 링크에서 Windows 또는 macOS용 사전 컴파일된 바이너리 중 하나를 다운로드할 수 있습니다.

이 도구는 전적으로 https://github.com/zerosum0x0/CVE-2019-0708 의 rdesktop 패치를 기반으로 합니다. macOS와 Windows에서 쉽게 컴파일할 수 있도록 코드를 간소화하고 여러 대상을 스캔하는 기능을 추가했습니다.

상태

이 도구는 며칠밖에 되지 않은 실험적인 것입니다. 하지만 masscan의 도움을 받아 전체 인터넷을 스캔하며 테스트하고 있으므로 많은 문제를 상당히 빠르게 해결하고 있습니다. 도움/의견이 있으면 트위터(@erratarob)로 연락주세요.

  • 2019-05-38 - 더 나은 출력 결과 설명 및 그 의미에 대한 문서 추가 (아래 참조)
  • 2019-05-27 - Windows 및 macOS 바이너리 출시 (위의 배지 클릭)
  • 2019-05-26 - Windows 네트워킹 문제 수정
  • 2019-05-25 - Linux와 macOS는 잘 작동, Windows에 몇 가지 네트워크 오류 있음
  • 2019-05-24 - Linux와 macOS에서 작동, Windows에 몇 가지 컴파일 버그 있음
  • 2019-05-23 - 현재 XCode 내에서 macOS에서 작업 중

주요 사용법

네트워크를 스캔하려면 다음과 같이 실행합니다:

root@kitploit:~
rdpscan 192.168.1.1-192.168.1.255

각 주소에 대해 다음 세 가지 결과 중 하나가 생성됩니다:

  • SAFE - 대상이 패치되었거나 최소한 CredSSP/NLA가 필요한 것으로 확인된 경우
  • VULNERABLE - 대상이 취약한 것으로 확인된 경우
  • UNKNOWN - 대상이 응답하지 않거나 프로토콜 오류가 발생한 경우

대상 IP 주소에 아무것도 없을 때, 이전 버전은 "UNKNOWN - connection timed out" 메시지를 출력했습니다. 대규모 네트워크를 스캔할 때 이는 관심 없는 시스템에 대한 과도한 정보를 생성합니다. 따라서 새 버전은 명령줄에 -v (verbose)를 추가하지 않는 한 기본적으로 이 정보를 출력하지 않습니다.

작업자 수를 늘려 대규모 네트워크 스캔 속도를 높일 수 있습니다:

root@kitploit:~
rdpscan --workers 10000 10.0.0.0/8

하지만 제 컴퓨터에서는 시스템 제한으로 인해 이 매개변수를 아무리 높게 설정해도 약 1500개의 작업자만 생성됩니다.

아래 두 번째 섹션에서 설명하는 masscan과 함께 사용하면 속도를 더 높일 수 있습니다.

결과 해석

세 가지 일반적인 응답이 있습니다:

  • SAFE - 대상이 패치되었거나 취약점에 취약하지 않을 가능성이 높음을 의미합니다.
  • VULNERABLE - 대상이 이 취약점에 취약하며, 웜이 발생할 때 감염될 가능성이 높음을 확인했음을 의미합니다.
  • UNKNOWN - 어느 쪽인지 확인할 수 없음을 의미하며, 일반적으로 대상이 응답하지 않거나 RDP를 실행하지 않는 경우(대다수)입니다. 또한 대상의 리소스가 부족하거나 네트워크 문제가 있는 경우에도 많이 나타납니다. 마지막으로 프로토콜 오류도 많은 원인입니다. 세 가지 주요 응답은 SAFE, VULNERABLE, UNKNOWN이지만 진단을 설명하는 추가 텍스트가 포함되어 있습니다. 이 섹션에서는 볼 수 있는 다양한 문자열에 대해 설명합니다.

SAFE

대상이 안전하다고 생각하는 세 가지 주요 이유가 있습니다:

  • SAFE - Target appears patched 대상이 트리거 요청에 응답하지 않을 때 발생합니다. 이는 패치된 Windows 시스템이거나 Windows 10이나 Unix처럼 처음부터 취약하지 않은 시스템임을 의미합니다.
  • SAFE - CredSSP/NLA required RDP 연결을 설정하기 전에 대상이 먼저 네트워크 수준 인증을 요구함을 의미합니다. 이 도구는 합법적인 자격 증명 없이는 이 지점을 통과할 수 없으므로 대상이 패치되었는지 확인할 수 없습니다. 그러나 해커도 이 지점을 지나 취약한 시스템을 악용할 수 없으므로 "안전"할 가능성이 높습니다. 그러나 익스플로잇이 나타나면 유효한 사용자 이름/비밀번호를 가진 내부자가 패치되지 않은 시스템을 악용할 수 있습니다.
  • SAFE - not RDP 시스템이 RDP가 아니라 동일한 포트를 사용하는 다른 서비스이며 RDP가 아닌 응답을 생성함을 의미합니다. 일반적인 예로 HTTP와 SSH가 있습니다. 그러나 식별 가능한 프로토콜 대신 서버가 RST 또는 FIN 패킷으로 응답할 수 있습니다. 이러한 경우 SAFE 대신 UNKNOWN으로 식별됩니다.

VULNERABLE

시스템이 취약점에 취약하다고 확인되었음을 의미합니다.

  • VULNERABLE - got appid 시스템이 취약할 때의 유일한 응답입니다.

UNKNOWN

알 수 없는 변형은 매우 많습니다.

  • UNKNOWN - no connection - timeout 가장 흔한 응답으로, 대상 IP 주소가 전혀 응답하지 않을 때 발생합니다. 실제로 너무 흔해서 대규모 주소 범위를 스캔할 때는 보통 생략됩니다. 활성화하려면 -v (verbose) 플래그를 추가해야 합니다.
  • UNKNOWN - no connection - refused (RST) 두 번째로 흔한 응답으로, 대상이 존재하고 네트워크 트래픽에 응답하지만 RDP를 실행하지 않아 TCP RST 패킷으로 연결을 거부할 때 발생합니다.
  • UNKNOWN - RDP protocol error - receive timeout 세 번째로 흔한 응답으로, RDP 연결을 성공적으로 설정했지만 서버가 응답을 중단할 때 발생합니다. 이는 네트워크 오류 또는 어떤 이유로 대상 시스템이 과부하 상태일 때 발생합니다. NAT 뒤에 있고 너무 많은 연결로 과부하를 일으키는 경우와 같이 이쪽의 네트워크 오류일 수도 있습니다.
  • UNKNOWN - no connection - connection closed 연결(TCP SYN-ACK)을 설정했지만 연결이 즉시 종료됨(RST 또는 FIN)을 의미합니다. 이는 구별할 수 없는 여러 이유로 발생합니다:
    • RDP를 실행 중이지만 어떤 이유로 연결을 종료하며, 리소스 부족 때문일 수 있습니다.
    • RDP가 아니며 우리가 보낸 RDP 요청을 좋아하지 않아, 적절한 오류 메시지(SAFE - not RDP를 유발) 대신 연결을 갑자기 종료합니다.
    • IPS, 방화벽 또는 NAT와 같은 중간 장치가 이를 적대적으로 식별하거나 리소스가 부족하여 연결을 종료합니다.
    • 인터넷을 스캔할 때 확인되지 않은 다른 이유가 있습니다. 이상한 상황이 많이 발생합니다.
  • UNKNOWN - no connection - host unreachable (ICMP error) 원격 네트워크가 호스트에 도달할 수 없거나 실행 중이지 않다고 보고합니다. 해당 호스트가 살아 있어야 한다고 생각되면 나중에 다시 시도하십시오.
  • UNKNOWN - no connection - network unreachable (ICMP error) 원격 측에 (일시적인) 네트워크 오류가 있습니다. 해당 네트워크가 실행 중이어야 한다고 생각되면 나중에 다시 시도하십시오.
  • UNKNOWN - RDP protocol error RDP 프로토콜에 일부 손상이 발생했음을 의미합니다. 원격 측이 잘못 구현했거나(Windows 시스템이 아님), 일시적인 네트워크 오류를 잘못 처리하거나 다른 이유 때문일 수 있습니다.
  • UNKNOWN - SSL protocol error Windows Vista 이후 RDP는 SSL 위에서 STARTTLS 프로토콜을 사용합니다. 이 계층은 위와 같은 자체적인 문제가 있으며, 기본 네트워크 오류를 잘못 처리하거나 호환성 문제가 있는 시스템과 통신하려는 경우를 포함합니다. 여기서 매우 긴 오류 메시지(예: SSL3_GET_RECORD:wrong version)가 나타나면 상대방의 SSL 버그나 사용 중인 SSL 라이브러리의 버그 때문입니다.

masscan과 함께 사용하기

이 rdpscan 도구는 상대적으로 느리며 초당 수백 개의 대상만 스캔합니다. 대신 masscan을 사용하여 속도를 높일 수 있습니다. masscan 도구는 약 1000배 빠르지만 대상에 대한 제한된 정보만 제공합니다.

단계는 다음과 같습니다:

  • 먼저 masscan으로 주소 범위를 스캔하여 포트 3389(또는 사용하는 포트)에서 응답하는 호스트를 빠르게 찾습니다.
  • 그런 다음 masscan의 출력을 rdpscan에 전달하여 활성 상태로 알려진 대상만 스캔하도록 합니다.

간단한 실행 방법은 명령줄에서 결합하는 것입니다:

root@kitploit:~
masscan 10.0.0.0/8 -p3389 | rdpscan --file -

제가 하는 방법은 두 단계로 나누는 것입니다:

root@kitploit:~
masscan 10.0.0.0/8 -p3389 > ips.txt
rdpscan --file ips.txt --workers 10000 >results.txt

빌드

어려운 점은 OpenSSL 라이브러리를 설치하고 시스템의 다른 버전과 충돌하지 않도록 하는 것입니다. 테스트한 Linux 버전의 몇 가지 예는 다음과 같지만 배포판마다 패키지 이름이 계속 변경됩니다. 또한 BoringSSL 및 LibreSSL과 같은 OpenSSL 호환 API에 대한 많은 옵션이 있습니다.

root@kitploit:~
$ sudo apt install libssl-dev
$ sudo yum install openssl-devel

이 문제를 해결한 후에는 다음과 같이 모든 .c 파일을 함께 컴파일하면 됩니다:

root@kitploit:~
$ gcc *.c -lssl -lcrypto -o rdpscan

이를 수행하는 Makefile을 디렉토리에 넣어 두었으므로 다음과 같이 간단히 실행할 수 있습니다:

root@kitploit:~
$ make

코드는 C로 작성되었으므로 C 컴파일러가 설치되어 있어야 합니다. 예를 들어 다음과 같이 설치할 수 있습니다:

root@kitploit:~
$ sudo apt install build-essential

일반적인 빌드 오류

이 섹션에서는 더 일반적인 빌드 오류에 대해 설명합니다.

root@kitploit:~
ssl.h:24:25: fatal error: openssl/rc4.h: No such file or directory

이는 OpenSSL 헤더가 설치되지 않았거나 경로에 없음을 의미합니다. OpenSSL 바이너리가 설치되어 있어도 개발 관련 파일이 설치되어 있지 않을 수 있습니다. 헤더와 라이브러리 모두 설치되어 있어야 합니다.

Debian에서 설치하려면 다음을 수행하십시오:

root@kitploit:~
$ sudo apt install libssl-dev

경로 문제를 해결하려면 컴파일 플래그 -I/usr/local/include 또는 이와 유사한 것을 추가하십시오.

링커 문제의 예는 다음과 같습니다:

root@kitploit:~
Undefined symbols for architecture x86_64:
"_OPENSSL_init_ssl", referenced from:
    _tcp_tls_connect in tcp-fac73c.o
"_RSA_get0_key", referenced from:
    _rdssl_rkey_get_exp_mod in ssl-d5fdf5.o
"_SSL_CTX_set_options", referenced from:
    _tcp_tls_connect in tcp-fac73c.o
"_X509_get_X509_PUBKEY", referenced from:
    _rdssl_cert_to_rkey in ssl-d5fdf5.o

macOS에서 여러 버전의 OpenSSL이 있어서 이 문제가 발생합니다. 경로를 하드코딩하여 수정합니다:

root@kitploit:~
$ gcc *.c -lssl -lcrypto -I/usr/local/include -L/usr/local/lib -o rdpscan

다른 사람들의 의견에 따르면 Homebrew로 설치한 경우 다음 명령줄이 macOS에서 작동할 수 있습니다. 그러나 여전히 위의 링크 오류가 발생하는데, 이는 충돌하는 다른 OpenSSL 구성 요소를 설치했기 때문입니다.

root@kitploit:~
gcc $(brew --prefix)/opt/openssl/lib/libssl.a $(brew --prefix)/opt/openssl/lib/libcrypto.a -o rdpscan *.c

실행

위 섹션에서는 프로그램 실행을 위한 빠른 시작 팁을 제공했습니다. 이 섹션에서는 더 자세한 도움말을 제공합니다.

단일 대상을 스캔하려면 대상의 주소를 전달하십시오:

root@kitploit:~
./rdpscan 192.168.10.101

IPv6 주소와 DNS 이름을 전달할 수 있습니다. 여러 대상을 전달할 수 있습니다. 예를 들면 다음과 같습니다:

root@kitploit:~
./rdpscan 192.168.10.101 exchange.example.com 2001:0db8:85a3::1

시작-끝 IPv4 주소 또는 IPv4 CIDR 사양을 사용하여 주소 범위를 스캔할 수도 있습니다. IPv6 범위는 너무 커서 지원되지 않습니다.

root@kitploit:~
./rdpscan 10.0.0.1-10.0.0.25 192.168.0.0/16

기본적으로 한 번에 100개의 대상만 스캔합니다. --workers 매개변수로 이 숫자를 늘릴 수 있습니다. 그러나 이 매개변수를 아무리 높게 설정해도 실제로는 시스템에 따라 한 번에 약 500~1500개의 작업자만 실행됩니다.

root@kitploit:~
./rdpscan --workers 1000 10.0.0.0/24

명령줄에서 대상을 지정하는 대신 --file 매개변수를 사용하여 파일에서 로드할 수 있습니다:

root@kitploit:~
./rdpscan --file ips.txt

파일 형식은 한 줄에 하나의 주소, 이름 또는 범위입니다. masscan에서 생성된 텍스트도 사용할 수 있습니다. 추가 공백은 제거되고, 빈 줄은 무시되며, 주석 줄도 무시됩니다. 주석은 # 문자 또는 // 문자로 시작하는 줄입니다.

출력은 VULNERABLE, SAFE 또는 UNKNOWN 상태를 나타내는 stdout으로 전송됩니다. 각각에 대한 추가 이유가 있을 수 있습니다. 이러한 이유는 위에 설명되어 있습니다.

root@kitploit:~
211.101.37.250 - SAFE - CredSSP/NLA required
185.11.124.79 - SAFE - not RDP - SSH response seen
125.121.137.42 - UNKNOWN - no connection - refused (RST)
40.117.191.215 - SAFE - CredSSP/NLA required
121.204.186.182 - SAFE - CredSSP/NLA required
99.8.11.148 - SAFE - CredSSP/NLA required
121.204.186.114 - SAFE - CredSSP/NLA required
49.50.145.236 - SAFE - CredSSP/NLA required
106.12.74.155 - VULNERABLE - got appid
222.84.253.26 - SAFE - CredSSP/NLA required
144.35.133.109 - UNKNOWN - RDP protocol error - receive timeout
199.212.226.196 - UNKNOWN - RDP protocol error - receive timeout
183.134.58.152 - UNKNOWN - no connection - refused (RST)
83.162.246.149 - VULNERABLE - got appid

이것을 grep 및 cut과 같은 추가 유닉스 명령으로 처리할 수 있습니다. 취약한 시스템만 목록으로 보려면:

root@kitploit:~
./rdpscan 10.0.0.0/8 | grep 'VULN' | cut -f1 -d'-'

-dddd 매개변수는 진단 정보를 의미하며, d가 많을수록 더 많은 세부 정보가 출력됩니다. 이는 stdout 대신 stderr로 전송되므로 스트림을 분리할 수 있습니다. bash에서는 다음과 같이 수행합니다:

root@kitploit:~
./rdpscan --file myips.txt -ddd 2> diag.txt 1> results.txt

진단 정보

-d 매개변수를 추가하면 연결에 대한 진단 정보가 stderr로 덤프됩니다.

root@kitploit:~
./rdpscan 62.15.34.157 -d

[+] [62.15.34.157]:3389 - connecting...
[+] [62.15.34.157]:3389 - connected from [10.1.10.133]:49211
[+] [62.15.34.157]:3389 - SSL connection
[+] [62.15.34.157]:3389 - version = v4.8
[+] [62.15.34.157]:3389 - Sending MS_T120 check packet
[-] [62.15.34.157]:3389 - Max sends reached, waiting...
62.15.34.157    - SAFE - Target appears patched

macOS/Linux에서는 일반적인 방법으로 stdout과 stderr를 각각 다른 파일로 리디렉션할 수 있습니다:

root@kitploit:~
./rdpscan --file ips.txt 2> diag.txt 1> results.txt

SOCKS5 및 Tor 재미

SOCKS5 지원이 포함되어 있습니다:

root@kitploit:~
./rdpscan --file ips.txt --socks5 localhost --socks5port 9050

연결 문제를 악화시켜 "UNKNOWN" 결과가 훨씬 더 많이 나타납니다.

OpenSSL 정적 링크

이 프로젝트에 릴리스로 첨부된 Windows 및 macOS 바이너리를 배포하기 위해 OpenSSL을 정적으로 링크하여 별도로 포함할 필요가 없고 프로그램이 바로 작동하도록 했습니다. 이 섹션에서는 이를 수행하는 방법에 대한 몇 가지 참고 사항을 설명합니다. 특히 OpenSSL 자체 페이지의 설명이 오래된 것 같습니다.

두 단계 모두 OpenSSL 소스를 다운로드하여 rdpscan 디렉토리 옆에 두는 것으로 시작합니다:

root@kitploit:~
git clone https://github.com/openssl/openssl

Windows

Windows의 경우 먼저 일부 버전의 Perl을 설치해야 합니다. 저는 ActiveState의 Perl을 사용합니다.

다음으로 특별한 "어셈블러"가 필요합니다. 권장되는 NASM을 사용합니다.

다음으로 컴파일러가 필요합니다. 저는 VisualStudio 2010을 사용합니다. Microsoft에서 최신 "Visual Studio Community Edition"(2019)을 대신 다운로드할 수 있습니다.

이제 makefile을 빌드해야 합니다. OpenSSL 디렉토리로 이동하여 Perl 프로그램 Configure를 실행합니다:

root@kitploit:~
perl Configure VC-WIN32

Windows의 경우 32비트를 선택했습니다. 이유는 오래된 Windows가 많고 프로그램을 가능한 한 이전 버전과 호환되도록 만들고 싶기 때문입니다.

C 런타임을 포함한 완전히 정적인 빌드를 원합니다. 이를 위해 결과 makefile을 편집기에서 열고 C 컴파일 플래그를 /MD(DLL 사용 의미)에서 /MT로 변경했습니다. 거기에 CPPFLAGS에 -D_WIN32_WINNT=0x501을 추가하여 OpenSSL을 Windows XP 및 Server 2003까지 작동하는 기능으로 제한했습니다. 그렇지 않으면 이전 시스템에서 실행할 때 bcrypt.dll을 찾을 수 없다는 오류가 발생합니다.

이제 모든 것이 경로에 있는지 확인해야 합니다. nasm.exe를 PATH 디렉토리에 복사했습니다. Visual Studio 2010의 경우 vcvars32.bat 프로그램을 실행하여 컴파일러 경로 변수를 설정했습니다.

명령줄에서 다음을 입력했습니다:

root@kitploit:~
nmake

이렇게 하면 라이브러리가 만들어집니다. 정적 라이브러리는 libssl_static.lib 및 libcrypto_static.lib이며, 이를 사용하여 rdpscan에 링크합니다.

macOS

먼저 컴파일러를 설치해야 합니다. Apple의 Developer Tools를 사용하여 XCode와 컴파일러를 설치합니다. Homebrew를 사용하여 gcc를 대신 설치할 수 있다고 생각합니다.

그런 다음 OpenSSL 소스 디렉토리로 이동하여 makefile을 만듭니다:

root@kitploit:~
perl Configure darwin64-x86_64-cc

이제 간단히 빌드합니다:

root@kitploit:~
make depend
make

이 시점에서 동적(.dylib) 및 정적(.lib) 라이브러리가 모두 생성됩니다. 기본적으로 정적 라이브러리를 사용하도록 동적 라이브러리를 삭제했습니다.

이제 rdpscan에서 macOS makefile을 빌드합니다:

root@kitploit:~
make -f Makefile.macos

이렇게 하면 모든 rdpscan 소스 파일이 컴파일된 다음 방금 빌드한 ../openssl 디렉토리의 OpenSSL 라이브러리에 링크됩니다.

약 3MB의 실행 파일이 생성됩니다. 대신 200KB 실행 파일만 생성되었다면 동적 라이브러리에 링크한 실수입니다.

도구 다운로드