
Certstream을 사용하는 피싱 탐지기
의심스러운 TLS 인증서 발급을 실시간에 가깝게 잡아내기 위해 Certificate Transparency Log (CTL)에 보고된 인증서를 CertStream API를 통해 확인합니다. "의심스러운" 발급이란 설정 파일에 기반하여 도메인 이름 점수가 특정 임계값을 초과하는 경우를 말합니다.
이것은 단지 작동하는 PoC(개념 증명)입니다. 필요에 맞게 코드를 수정하고 기여해 주세요. 👍

이 스크립트는 Python2 또는 Python3에서 잘 동작합니다. 어떤 경우든 소스 코드를 클론하거나 다운로드한 후 requirements를 설치하세요:
pip install -r requirements.txt
Phishing Catcher는 TLS 인증서의 일반 이름(Common Name) 또는 SAN(Subject Alternative Name) 필드(즉, 인증서의 도메인 이름)에서 찾을 수 있는 문자열에 숫자 점수를 할당하기 위해 간단한 YAML 설정 파일을 사용합니다. 설정 파일인 suspicious.yaml은 합리적인 기본값을 포함하고 있지만, 재정의 파일인 external.yaml을 편집하여 포함된 문자열과 각 문자열에 할당된 점수를 조정하거나 추가할 수 있습니다.
기본 suspicious.yaml과 사용자가 수정 가능한 external.yaml 설정 파일 모두 두 개의 YAML 딕셔너리인 keywords와 tlds를 포함합니다. 딕셔너리의 키는 문자열이고, 값은 해당 문자열이 발급된 인증서의 도메인 이름에서 발견될 경우 할당할 점수입니다. 예를 들어:
keywords:
'login': 25
여기서는 TLS 인증서 도메인 이름에서 일반 키워드 login이 발견되면 점수 25가 추가됩니다. 이 값을 높이면 login 문자열을 포함한 도메인에 대한 의심 수준이 증가하여, 이러한 인증서 발급을 더 면밀히 조사할 수 있습니다.
그러나 Phishing Catcher에 의해 의심스러운 것으로 보고되려면, 주어진 인증서에 할당된 점수가 다음 임계값을 충족하거나 초과해야 합니다 (>=, '크거나 같음'):
| 점수 | 보고 유형 |
|---|---|
| 65 | Potential |
| 80 | Likely |
| 90 | Suspicious |
💡 점수 알고리즘에 대한 자세한 내용은 소스 코드의
score_domain()함수를 참조하세요.
원하는 대로 설정한 후에는 스크립트를 실행하는 것만큼 간단합니다:
$ ./catch_phishing.py

MacOS를 사용하거나 다른 OS 버전을 사용하여 phishing_catcher 설치가 어려운 경우, 도구를 도커화하는 것이 한 가지 옵션입니다.
docker build . -t phishing_catcher

GNU GPLv3
이 도구가 유용했다면, 저에게 커피 한 잔 사 주셔도 됩니다.