
CVE-2020-0601을 탐지하는 Zeek 패키지
이 스크립트는 CVE-2020-0601에 대한 익스플로잇 시도를 탐지할 수 있습니다. 인증서에 알려진 곡선이 사용되었는지 간단히 확인하며, 그렇지 않은 경우 공지(notice)가 발생합니다.
notice.log에 기록된 예시 공지:
1579043477.791522 CHhAvVGS1DHFjwGM9 192.241.209.49 46110 192.241.202.21 4433 F37z6n1B8zn1fZjpj application/x-x509-user-cert 192.241.202.21:4433/tcp tcp CVE_2020_0601::Unknown_X509_Curve ECC certificate with unknown curve; potential CVE-2020-0601 exploit attempt - 192.241.209.49 192.241.202.21 4433 - - Notice::ACTION_LOG 3600.000000 - - - - -
의심스러운 인증서를 기록하려면 local.zeek에 다음을 추가하여 추출을 활성화하세요.
redef CVE_2020_0601::log_certs = T;
활성화되면 의심스러운 인증서가 새로운 cve-2020-0601-certs.log 파일에 기록됩니다.
이 스크립트는 인증서를 파싱하는 동안 명시적 곡선을 자동으로 이름으로 변환하는 OpenSSL 설치를 필요로 합니다. 많은 Linux 배포판에서 제공하는 다양한 OpenSSL 버전은 이를 수행하지 않는 것으로 보입니다. 현재 그 이유에 대해 확실히 알지 못합니다.
동작이 다른 OpenSSL 버전을 사용하면 더 많은 오탐(false positive)이 발생할 수 있습니다. 이 패키지의 테스트는 설치 중 OpenSSL 동작을 확인합니다. "explicit.zeek" 테스트가 실패하면 사용 중인 OpenSSL 버전이 요구 사항을 충족하지 않는 것입니다.
이 경우, 스크립트는 명시적 곡선 정의가 있는 모든 인증서에 대해서도 경고를 발생시킵니다. 이러한 인증서는 매우 드물지만, 그 자체로 문제가 되는 것은 아닙니다.
이 플러그인의 두 번째 버전은 https://github.com/0xxon/cve-2020-0601-plugin 에서 확인할 수 있습니다. 두 번째 버전은 OpenSSL 프리미티브를 사용하여 인증서 곡선을 직접 확인합니다. 단, 플러그인 버전은 OpenSSL 1.1.x가 필요하며, Zeek 설치에 C++ 코드를 빌드하고 로드해야 합니다.
https://github.com/0xxon/cve-2020-0601-plugin 의 플러그인 버전 장점은 정확도가 더 높다는 점입니다. 발견된 익스플로잇 시도에 대해 더 자세한 정보를 제공하는 구체적인 공지가 생성됩니다. 단점은 주로 설치 장벽이 더 높다는 점입니다.
이 플러그인이 알려진 POC 코드를 성공적으로 탐지하지만, 공격의 다른 변종이 탐지되지 않을 가능성(낮지만)이 있습니다.