
SPF/DKIM/DMARC를 우회하고 DKIM 서명을 위조하는 것을 목표로 하는 이메일 스푸핑 테스트 도구입니다.🍻
espoofer는 이메일 시스템에서 SPF, DKIM 및 DMARC 인증을 우회하기 위한 오픈 소스 테스트 도구입니다. 메일 서버 관리자와 침투 테스터가 대상 이메일 서버와 클라이언트가 이메일 스푸핑 공격에 취약한지 또는 스푸핑 이메일을 보내는 데 악용될 수 있는지 확인하는 데 도움을 줍니다.
그림 1. Gmail에 대한 스푸핑 공격 사례 (수정됨, 데모 비디오)
이메일 스푸핑은 개인과 조직 모두에게 큰 위협입니다 (Yahoo 침해 사고, John podesta 사건). 이 문제를 해결하기 위해 현대 이메일 서비스와 웹사이트는 SPF, DKIM, DMARC와 같은 인증 프로토콜을 사용하여 이메일 위조를 방지합니다.
최신 연구에 따르면 이러한 프로토콜의 구현에는 여러 보안 문제가 있으며, 이는 SPF/DKIM/DMARC 보호를 우회하는 데 악용될 수 있습니다. 그림 1은 Gmail에서 DKIM과 DMARC를 우회하는 스푸핑 공격 중 하나를 보여줍니다. 자세한 기술 내용은 Black Hat USA 2020 발표 ( 발표 영상 포함) 또는 USENIX security 2020 논문을 참조하세요.
이 저장소에서는 발견된 모든 테스트 케이스를 요약하고 이 도구에 통합하여 관리자와 보안 실무자가 이러한 보안 문제를 신속하게 식별하고 찾을 수 있도록 지원합니다.
Latex 버전:
@inproceedings{chen-email,
author = {Jianjun Chen and Vern Paxson and Jian Jiang},
title = {Composition Kills: A Case Study of Email Sender Authentication},
booktitle = {29th {USENIX} Security Symposium ({USENIX} Security 20)},
year = {2020},
isbn = {978-1-939133-17-5},
pages = {2183--2199},
url = {https://www.usenix.org/conference/usenixsecurity20/presentation/chen-jianjun},
publisher = {{USENIX} Association},
month = aug,
}
Word 버전:
Jianjun Chen, Vern Paxson, and Jian Jiang. "Composition kills: A case study of email sender authentication." In 29th USENIX Security Symposium (USENIX Security 20), pp. 2183-2199. 2020.
git clone https://github.com/chenjj/espoofer
sudo pip3 install -r requirements.txt
Python 버전: Python 3 (>=3.7).
espoofer는 세 가지 작업 모드가 있습니다: 서버('s', 기본 모드), 클라이언트('c'), 수동('m'). 서버 모드에서 espoofer는 메일 서버처럼 작동하여 수신 서비스의 유효성 검사를 테스트합니다. 클라이언트 모드에서 espoofer는 이메일 클라이언트처럼 작동하여 발신 서비스의 유효성 검사를 테스트합니다. 수동 모드는 디버그 목적으로 사용됩니다.

그림 2. 세 가지 유형의 공격자와 그들의 작업 모드
서버 모드에서 espoofer를 실행하려면 다음이 필요합니다: 1) ISP에서 발신 포트 25가 차단되지 않은 IP 주소(1.2.3.4), 2) 도메인(attack.com).
attack.com에 대한 DKIM 공개 키 설정selector._domainkey.attacker.com TXT "v=DKIM1; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNjwdrmp/gcbKLaGQfRZk+LJ6XOWuQXkAOa/lI1En4t4sLuWiKiL6hACqMrsKQ8XfgqN76mmx4CHWn2VqVewFh7QTvshGLywWwrAJZdQ4KTlfR/2EwAlrItndijOfr2tpZRgP0nTY6saktkhQdwrk3U0SZmG7U8L9IPj7ZwPKGvQIDAQAB"
attack.com에 대한 SPF 레코드 설정attack.com TXT "v=spf1 ip4:1.2.3.4 +all"
config ={
"attacker_site": b"attack.com", # attack.com
"legitimate_site_address": b"[email protected]", # legitimate.com
"victim_address": b"[email protected]", # [email protected]
"case_id": b"server_a1", # server_a1
}
-l 옵션을 사용하여 모든 테스트 케이스의 case_id를 나열할 수 있습니다:
python3 espoofer.py -l
python3 espoofer.py
config.py에서 case_id를 변경하거나 명령줄에서 -id 옵션을 사용하여 다른 사례를 테스트할 수 있습니다:
python3 espoofer.py -id server_a1
클라이언트 모드에서 espoofer를 실행하려면 대상 이메일 서비스에 계정이 있어야 합니다. 이 공격은 일부 이메일 서비스가 로컬 MUA에서 수신된 이메일에 대해 충분한 검증을 수행하지 못하는 점을 악용합니다. 예를 들어, [email protected]이 [email protected]을 사칭하려고 시도합니다.
config ={
"legitimate_site_address": b"[email protected]",
"victim_address": b"[email protected]",
"case_id": b"client_a1",
"client_mode": {
"sending_server": ("smtp.gmail.com", 587), # SMTP 발신 서버 IP 및 포트
"username": b"[email protected]", # 계정 사용자 이름 및 비밀번호
"password": b"your_passward_here",
},
}
-l 옵션을 사용하여 모든 테스트 케이스의 case_id를 나열할 수 있습니다:
python3 espoofer.py -l
참고:
sending_server는 SMTP 발신 서버 주소여야 하며, 수신 서버 주소가 아닙니다.
python3 espoofer.py -m c
config.py에서 case_id를 변경하고 다시 실행하거나, 명령줄에서 -id 옵션을 사용할 수 있습니다:
python3 espoofer.py -m c -id client_a1
다음은 수동 모드의 예입니다:
python3 espoofer.py -m m -helo attack.com -mfrom <[email protected]> -rcptto <[email protected]> -data raw_msg_here -ip 127.0.0.1 -port 25
여기에 버그 보고서를 등록하려면 풀 리퀘스트를 보내주세요.
원시 메시지 헤더의 Authentication-results 헤더에서 확인할 수 있습니다. 헤더에 dmarc=pass가 표시되면 이메일이 DMARC 인증을 통과한 것입니다. 몇 가지 데모 비디오는 여기에서 확인할 수 있습니다.
이메일 전송 실패에는 몇 가지 가능한 이유가 있습니다: 1) ISP가 스팸 방지를 위해 발신 포트 25를 차단하는 경우, ISP에 허가를 요청해야 합니다; 2) IP 주소가 대상 이메일 서비스의 스팸 목록에 있는 경우, 많은 경우 https://www.spamhaus.org/lookup/ 에서 문제를 해결할 수 있습니다; 3) 일부 이메일 서비스는 발신 IP에 PTR 레코드가 있는지 확인하므로, 이 검사를 통과하기 위해 PTR 레코드를 설정해야 할 수도 있습니다; 4) 이메일이 대상 이메일 서비스의 형식 검증을 통과하지 못하는 경우, 다른 테스트 케이스를 시도해 볼 수 있습니다.
현재 espoofer는 SPF/DKIM/DMARC 인증 우회에 초점을 맞추고 있으며 스팸 필터 우회를 목표로 하지 않습니다. 하지만 신뢰할 수 있는 발신 IP 주소, 도메인, 무해한 메시지 내용을 사용하여 스팸 필터를 우회할 수 있습니다.
이전 경험에 따르면, 일부 이메일 서비스는 의심스러운 이메일을 조용히 필터링합니다.
일부 DNS 호스팅 서비스는 특수 문자 설정에 제한이 있으므로, 타사 DNS 호스팅 서비스를 사용하는 대신 자체 권한 있는 DNS 서버를 설정해야 합니다. 이슈를 참조하세요.
더 많은 테스트 케이스를 추가해 주세요.