📖
레드팀 플레이북
깃허브기여하는 방법WhoAreWe블로그
  • 레드팀 플레이북
  • 레드팀이란
  • 레드팀 글로벌 동향 (2024)
  • 베이직 레드팀(Basic Redteam)
    • 개요
    • 1. 공격자 인프라 구성
    • 2. 초기 침투
    • 3. 정보 수집
    • 4. 권한 상승 - US
    • 5. 횡적 이동: USWKSTN01 -> SQL01
    • 6. 권한 상승 - SQL01
    • 7. 도메인 장악 WEB01
    • 8. US -> RT 장악
    • 9. RT -> DEV 정보 수집
    • 10. 권한 상승 및 목표 달성
  • 🚧인프라 (Infrastructure)
    • 개념
    • 예시 인프라
    • 팀 서버 - Sliver
      • 스테이저 (Stager) 사용
    • 도메인 분류와 신뢰도
    • HTTP 리다이렉터
    • HTTPS 리다이렉터
    • SMTP Gophish + Mail
    • SMTP Gophish + ESP
    • SMTP Gophish + Relay + ESP
    • 인프라 구축 자동화
      • 테라폼 (Terraform)
      • SMTP 테라폼 자동화
      • HTTPS 리다이렉터 자동화 (AWS)
    • old-네뷸라를 이용한 인프라 구축
      • 도메인과 리다이렉터 설정
      • 중립 공간 (클라우드) 설정
      • 네뷸라 (Nebula)
      • 네뷸라 설정
    • 도메인 프론팅 (Domain Fronting)
    • 도메인 프론팅 - Azure Edgio CDN
    • Cloudflared Tunnel과 Worker
    • Cloudflared Tunnel과 Pages
  • 🔎초기 정찰
    • 개념
    • 타겟 발견
    • OSINT
      • 작전보안
      • 자산 정보 수집
      • 구글 도킹
  • ⚔️초기 침투 (Initial Access)
    • 개념
    • 피싱 첨부파일
      • 오피스 VBA 매크로
      • XLM Excel 4.0 매크로
      • 원격 템플렛 인젝션
      • VBA Stomping
      • HTA
      • LNK
      • ISO
      • VBA Purging - TODO
      • DotNetToJS - TODO
      • Follina - TODO
    • HTML 스머글링 (Smuggling)
    • 피싱 - AitM (Adversary in the Middle)
    • Living Off Trusted Sites (LOTS)
  • 🐳정보 수집 - 내부망
    • 개념
    • 로컬 호스트 정보 수집
    • 블러드하운드
    • SMB 쉐어 수집
    • 정보 수집 - 파워쉘
    • 정보 수집 - C# - TODO
    • 커버로스 유저 이름 정보수집
    • CME - 호스트이름과 IP주소
    • LDAP Anonymous Bind
  • 🐴실행 (Execution)
    • 개념
    • 파워쉘
      • 인메모리 실행
      • C# 실행
      • 윈도우 API 실행
    • LOLBAS
    • Native API - TODO
  • 🙃지속성 (Persistence)
    • 개념
    • 골든 티켓 (Golden Ticket)
    • DLL 사이드로딩 (DLL Side-Loading)
    • DLL Search Order Hijacking - TODO
    • 레지스트리 / 스타트업 폴더
  • ⬆️권한 상승
    • 개념
    • AD 권한 상승
      • Active Directory Certificate Services (ADCS)
        • ESC1
        • ESC8
      • Shadow Credentials
      • noPac
      • Kerberoasting
      • AS-REP Roasting
      • DHCPv6 포이즈닝
      • Resource-Based Constrained Delegation (RBCD)
      • SCCM
    • AD-DACL
      • AddAllowedToAct
      • AddKeyCredentialLink
      • GenericAll
      • GenericWrite
      • WriteDACL
      • AllExtendedRights
      • WriteAccountRestrictions
      • WriteOwner
      • AddMember
    • 로컬 권한 상승 - TODO
      • 잘못된 서비스 설정
      • Unquoted Service Path
      • Always Install Elevated
      • PrintNightmare
  • 🐍보안 우회 (Defense Evasion)
    • 쉘코드 암호화
    • 런타임 다이나믹 링킹 (Run-time Dynamic Linking)
    • AMSI 우회
    • 유저랜드 후킹 - 역사
    • 유저랜드 커널랜드 윈도우API 개념
    • 유저랜드 후킹
    • DInvoke - 시스템 콜
    • 페이로드 크기
    • 가변적 C2 프로필
    • 프로세스 인젝션
      • CreateRemoteThread
      • NtMapViewOfSection
    • 간단 디펜더 우회 - 쉘코드
    • 간단 디펜더 우회 - C#
    • MSIExec
    • 다형성 코드
  • 👿후속 공격 (Post Exploitation)
    • 후속 공격의 진화
    • External SID Golden Ticket
  • 🎭계정 정보 탈취 (Credential Access)
    • 커버로스
      • 커버로스팅 (Kerberoasting)
      • AS-Rep Roasting
    • 비밀번호 스프레이 공격
    • LLMNR/NBT-NS 포이즈닝
    • NTLM 릴레이 (NTLM Relay)
      • SMB to SMB
      • SMB to LDAP/S
      • HTTP to LDAP
      • SMB to HTTP
      • SMB to SCCM
    • 강제 인증 (Authentication Coercion)
      • MS-RPRN - Printerbug / Print Spooler
      • MS-EFSRPC - Petitpotam
      • MS-FSRVP - ShadowCoerce
      • MS-DFSNM - DFSCoerce
    • NTLM 다운그레이드
    • DHCPv6 포이즈닝
    • LAPS - TODO
    • DCSync
    • DPAPI
  • ↔️횡적 이동 (Lateral Movement)
    • 개념
    • Pass-the-Hash
    • SMB 와 PsExec
    • WMI
    • WinRM / Powershell Remoting
    • RDP
    • SSH Port Forwarding & Tunneling
    • Dynamic Port Forwarding & ProxyChains
    • 네트워크 피버팅 - 툴
    • Network Pivoting (피벗) - TODO
  • 개념
    • 윈도우 사용자 인증
      • NTLM 인증
      • 커버로스 (Kerberos) 인증 - TODO
      • ADCS 인증서 기반 인증
    • AD 관련 용어 해설
  • 실 공격 TTP와 대응방안 - TODO
    • 개념
  • 🧑‍🔬홈 랩 (Home lab)
    • 시스몬 (sysmon) 설치
    • SIEM과 EDR 솔루션 설치
    • 취약한 랩을 위한 설정 커맨드
    • 말웨어 자동 분석툴 Cuckoo 샌드박스 설치
  • 기본 개념
    • DNS
      • 사이버 보안에 필요한 DNS 개념 편 #1
      • 해킹에 필요한 DNS 공격 & 우회 기법 편 #2
      • 방어에 필요한 DNS 탐지 편 #3
  • 웹 & 모바일
    • 01-계정관리
      • 통신 과정 흐름 훑어보기
      • 첫번쩨, payload설정 방법
      • 두번째, 세션을 유지하는 방법
      • CSRF Token에 관하여
      • 세번째, OWASP Juice Shop 로그인 페이지에서의 통신 흐름과 구조 알아보기
  • 🎅MISC
    • Host-based 공격 CheatSheet (FEAT. OSCP)
      • Enumeration (정보 수집 및 열거)
      • Exploitation (공격)
      • Post Exploitation (후속공격)
    • Changelog
    • 기여하는 방법
    • 레퍼런스와 크레딧
    • C# snippets
    • winapi 리스트
      • original notes from obsidian
    • 파워쉘 원라이너 (oneliner)
  • 📖Personal-Research
    • README-and-Template
      • HellsGate
      • HalosGate
      • FreshyCall
Powered by GitBook
On this page
  • 개요
  • 실습 - 도메인
  • 실습 - 메일 서버 (mail.domain.com)
  • 메일 서버 설정
  • DNS 설정
  • 중간 점검
  • Gophish 서버 설정
  • Gophish 설정
  • 실행
  • 마치며
  • Reference
  1. 인프라 (Infrastructure)

SMTP Gophish + Mail

PreviousHTTPS 리다이렉터NextSMTP Gophish + ESP

Last updated 1 year ago

이 페이지는 아래의 레퍼런스의 글들을 참고한 뒤 재구성한 페이지다. 모든 명령어와 코드는 레퍼런스 섹션을 참고했다.

프로젝트 리포:

개요

메일 인프라는 다양한 방법으로 구성할 수 있지만, 대부분 다음과 같은 요소들을 사용한다.

  • 도메인

    • 이메일용 도메인 1개

    • 피싱 페이지용 도메인 1개

  • 이메일 서버

    • 메일 발송 서버 - Gophish 등

    • 메일 서버 (Postfix) 혹은 메일 서비스 프로바이더 (Amazon SES, Mailgun, O365)

  • 클라우드 서비스 프로바이더

    • 도메인 레지스트라 - NameCheap, Godaddy, Route53, Cloudflare 등

    • 클라우드 - AWS, Azure, Digital Ocean, Linode, 등

이번 실습에서는 이메일용 + 피싱 페이지용 도메인을 합쳐 1개만 구입한 뒤 사용한다. 이메일 같은 경우는 이메일 서비스 프로바이더 (Amazon SES, Mailgun, O365, 등)을 사용하는 것이 일반적이긴 하나, 교육 목적으로 메일 서버를 직접 구축한 뒤 Postfix 등의 메일 서비스를 직접 설치 및 설정한다. 클라우드 서비스 프로바이더는 NameCheap + Digital Ocean 을 사용한다. 물론, 다른 서비스를 사용해도 상관없다.

실습 - 도메인

도메인 구입은 따로 설명하지 않는다. 사용하고자 하는 DNS 프로바이더에 접속한 뒤 도메인을 구입한다. 구입할 때 Domain Privacy - 도메인 프라이버시를 꼭 같이 구입한다. 도메인 프라이버시를 적용하지 않으면 도메인을 구입할 때 사용한 Registrant 및 다른 개인 정보들이 Whois 나 다른 서비스들을 통해 유출될 가능성이 있다. 이는 작전 보안 실패로 이어진다.

도메인과 관련된 중요한 정보들은 다음 페이지에서 확인한다 - https://www.레드팀.com/infrastructure/domain-categorization-reputation

  • 도메인 이름

  • 만료된 도메인

  • 도메인 분류

  • 도메인 신뢰도

도메인 레지스트라에서 도메인을 구입했다면 네임 서버를 클라우드 프로바이더로 설정한다. 예를 들어 이 실습에서는 NameCheap + DigitalOcean 을 사용하고 있기 때문에, NameCheap 으로 가서 도메인의 네임 서버를 DO의 네임서버 3개로 지정해주면 된다.

실습 - 메일 서버 (mail.domain.com)

클라우드 프로바이더로 가서 서버를 2대 생성한다. 고피시 서버는 1기가 이상의 메모리를 가지도록 설정한다.

  • OS: 우분투 22.10

  • 종류: Basic (Plan Selected)

  • CPU: Regular + SSD

  • 메일 서버 가격: 4달러 / 달

  • 고피시 서버 가격: 6달러 / 달 (1gb 메모리 - 필수!)

  • 인증 방식: SSH 키

  • 호스트이름: mail (메일 릴레이 서버), login (gophish 서버)

Droplet (드롭렛)을 생성한 뒤 드롭렛의 이름을 사용할 DNS A 레코드로 바꿔준다. 예를 들어 이 메일 서버의 이름은 mail.domain.com 이 될 것이니 그렇게 바꿔주면 된다. 이는 추후 도메인 PTR 레코드를 설정하는데 사용될 것이나, 지금은 크게 신경쓰지 않아도 된다.

메일 서버 설정

메일 서버에는 다음의 서비스/개념들을 설치한 뒤 설정한다.

  • 이메일 서비스 - Postfix

  • SPF - 없음 (postfix-policyd-spf-python 패키지는 들어오는 메일의 SPF를 체크하지만, 피싱 이메일 서버는 들어오는 이메일들까지 세세하게 검증할 필요가 없기 때문에 패스한다)

  • DKIM - Opendkim, Opendkim-tools

  • Certbot - Certbot

  • /etc/postfix/master.cf - 아래 Postfix 헤더 설정을 적용

  • /etc/postfix/header_checks - 메일 발송 서버의 헤더들을 검열

  • /etc/postfix/main.cf - Postfix 서비스에 관련된 일반적인 설정

  • /etc/opendkim.conf - DKIM을 설정하는데 필요한 기본 설정

  • /etc/opendkim/keys/<domain>/mail.txt - DKIM 관련 DNS TXT 레코드에 들어갈 내용

  • /etc/opendkim/keys/<domain>/mail.private - DKIM에 사용될 비공개 키

설정할 것이 많아보이지만, 막상 해보면 또 그렇지도 않다. SPF, DKIM, DMARC 등에 관련된 내용은 추후 다른 페이지에서 설명한다.

이번 실습에서는 먼저 수동적으로 모든 것을 설정한다. 추후 다른 페이지에서 Terraform과 Ansible을 이용한 IoC를 제작해 설정을 자동화한다.

  1. 먼저 패키지들을 설치한다.

export DEBIAN_FRONTEND=noninteractive; apt update && apt-get -y -qq install socat postfix opendkim opendkim-tools certbot

hostnamectl set-hostname mail 
  1. 이후 postfix의 main.cf 와 기본적인 설정들을 postconf 를 통해 설정해준다. 주의할 점은 SMTP 릴레이를 허용하는 화이트리스트인 mynetworks 와 메일을 받을 때 최종 목적지를 설정하는 mydestination 이다.

myhostname="mail.koreambtihealth.com"
domain="koreambtihealth.com"
ip=`curl http://ipinfo.io/ip`
gophiship="64.227.18.187"

echo $domain > /etc/mailname 
echo $ip $domain > /etc/hosts 

postconf -e myhostname=$myhostname 
postconf -e milter_protocol=2
postconf -e milter_default_action=accept
postconf -e smtpd_milters=inet:localhost:12345
postconf -e non_smtpd_milters=inet:localhost:12345
postconf -e mydestination="$domain, $myhostname, localhost.localdomain, localhost"
postconf -e mynetworks="127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 $gophiship"
  1. OpenDKIM 을 설정한다

mkdir -p /etc/opendkim/keys/$domain 
cd /etc/opendkim/keys/$domain 

# Create dkim TXT record 
opendkim-genkey -t -s mail -d $domain 
cat mail.txt | tr -d '\n" ' | grep -o 'v=DKIM1.*' | cut -d ';' -f 1-5 | tr '\t' ' ' | tr -s ' ' | tr -d ')' > /root/dkim.txt 
chown opendkim:opendkim mail.private 

# Configure necessary files - KeyTable, SigningTable, default/opendkim, TrustedHosts 
echo mail._domainkey.$domain $domain:mail:/etc/opendkim/keys/$domain/mail.private > /etc/opendkim/KeyTable 
echo *@$domain mail._domainkey.$domain > /etc/opendkim/SigningTable 
echo SOCKET=\"inet:12345@localhost\" >> /etc/default/opendkim 
echo $gophiship > /etc/opendkim/TrustedHosts 
echo *.$domain >> /etc/opendkim/TrustedHosts 
echo localhost >> /etc/opendkim/TrustedHosts
echo 127.0.0.1 >> /etc/opendkim/TrustedHosts
  1. 필요 설정 파일들을 덮어씌운 뒤, 리부팅한다.

  • 각 사용되는 설정파일들은 프로젝트 리포를 확인한다

mv /opt/RTPSourceCodes/ioc/phishing/configs/header_checks /etc/postfix/header_checks 
mv /opt/RTPSourceCodes/ioc/phishing/configs/master.cf /etc/postfix/master.cf
mv /opt/RTPSourceCodes/ioc/phishing/configs/opendkim.conf /etc/opendkim.conf 

DNS 설정

DNS 프로바이더로 가서 SPF, DKIM, DMARC, rDNS 설정을 해준다. 이 실습에서는 DO를 사용한다.

  • SPF - 메일 서버의 아이피 주소를 사용한다

  • DMARC - 아래의 DMARC 레코드를 그대로 쓴다

  • DKIM - /root/dkim.txt 에 저장해놨던 문자열을 사용한다

  • rDNS - 프로바이더마다 다르지만, DO의 경우 드롭렛의 이름을 FQDN으로 바꾸면 알아서 설정된다.

TYPE RECORD HOSTNAME VALUE 
(phish) A login <gophish 서버 IP 주소> 
(mail) A mail <mail서버 IP주소> 
(mail) MX <domain.com> mail.<domain.com>
(spf) TXT "@" v=spf1 a mx ip4:<mail서버 IP> ~all  (redirector) (ttl=60)
(dmarc) TXT _dmarc v=DMARC1; p=reject (ttl=60)
(dkim) TXT mail._domainkey <cat /root/dkim.txt> (ttl=600) 
(rDNS/PTR) < rename droplet with FQDN of the mail/smtp server > 

중간 점검

여기까지 진행했다면 중간 점검을 통해 메일 서버와 SPF, DKIM, DMARC 등의 이메일 관련 TXT 레코드가 잘 생성되었는지 확인한다. 한번에 확인할 수 있는 가장 빠르고 효율적인 방법은 mail-tester.com 을 사용하는 것이다. 방문한 뒤 이메일 주소를 받고, 해당 이메일 주소로 이메일을 보내본다.

현재 이메일 서버는 Gophish 서버에서만 접속 + 발송 가능하게끔 설정해놨기 때문에 gophish 서버에 접속 한 뒤, 이메일 서버를 사용해본다.

// login == gophish 서버다 
└─# ssh -i id_rsa root@login.koreambtihealth.com

root@login:~# telnet mail.koreambtihealth.com 25
Trying 143.198.179.236...
Connected to mail.koreambtihealth.com.
Escape character is '^]'.
220 mail.koreambtihealth.com ESMTP Postfix (Ubuntu)
helo koreambtihealth.com
250 mail.koreambtihealth.com
mail from: contact@koreambtihealth.com
250 2.1.0 Ok
rcpt to: test-rcwa6a0at@srv1.mail-tester.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
to: test-rcwa6a0at@srv1.mail-tester.com <test-rcwa6a0at@srv1.mail-tester.com>
from: contact <contact@koreambtihealth.com>

Hello mail tester, this is a testo thing!
.
250 2.0.0 Ok: queued as 170167C58D
quit
221 2.0.0 Bye
Connection closed by foreign host.

점수가 높게 나오건 낮게 나오건 일단 중요한 섹션은 You're Properly Authenticated 이 부분이다. 이 부분의 SPF, DKIM, DMARC, rDNS 섹션에 모두 체크마크가 있다면 성공한 것이다. 만약 없다면 DNS 레코드 및 DKIM 문자열 등을 다시 한 번 체크한다.

전반적인 테스트가 아니라 부분별로 설정을 확인하고 싶다면 mxtoolbox 및 nslookup 등을 이용한다.

SPF, DKIM, DMARC 확인

  • https://mxtoolbox.com/SuperTool.aspx?action=spf

  • https://mxtoolbox.com/SuperTool.aspx?action=dkim

  • https://mxtoolbox.com/SuperTool.aspx?action=dmarc

Nslookup 으로 DNS 레코드 확인

nslookup -type=MX domain.com
nslookup -type=A mail.domain.com 
nslookup -type=TXT domain.com
nslookup -type=TXT mail._domainkey.domain.com
nslookup -type=TXT _dmarc.domain.com 

Gophish 서버 설정

메일 서버의 설정이 끝났다면 고피시 서버를 설정한다. 고피시 서버에는 악용을 막기 위한 잘 알려진 IOC 들이 있기 때문에 서버를 설치하기 전 IOC 부터 먼저 제거한다. 이 부분은 Sprocketsecurity 사의 블로그(https://www.sprocketsecurity.com/resources/never-had-a-bad-day-phishing-how-to-set-up-gophish-to-evade-security-controls)를 참고했다.

apt update -y ; apt install golang-go gcc -y 
cd /opt 
git clone https://github.com/gophish/gophish.git
cd ./gophish 

# Opsec changes 
find . -type f -name "config.go" -exec sed -i 's/const ServerName = "gophish"/const ServerName = "IGNORE"/g' {} + 
find . -type f -name "campaign.go" -exec sed -i 's/const RecipientParameter = "rid"/const RecipientParameter = "keyname"/g' {} + 
find . -type f -exec sed -i 's/X-Gophish-Contact/X-Contact/g; s/X-Gophish-Signature/X-Signature/g' {} +

go build 

로컬 포트 포워딩을 한 뒤 고피시를 실행한다. 고피시 실행 뒤 나오는 비밀번호를 이용해 호스트에서 https://localhost:3333 로 접속한다.

ssh -i id_rsa root@login.koreambtihealth.com -L 3333:127.0.0.1:3333
./gophish 
https://localhost:3333

Gophish 설정

Sending Profile, Landing Page, Email Template, Users & Group을 모두 설정해준 뒤, Campaign을 진행한다.

  1. Sending Profile

Name: sending-profile-test
SMTP From: contact@domain.com 
Host: mail.domain.com:25
Username/Password: empty since we have open relay for our gophish server
Email Headers: 
- X-Mailer: Microsoft office outlook, build 17.551210
- Date: Sun, 02 Apr 2023 18:30:00 -0500
  1. Landing Pages

Name: landing-page-test
HTML: test 
Capture Submitted Data 
Capture Passwords 
Redirect to: http://www.google.com 
  1. Email Templates

Name: template-test
Envelope Sender: noreply <contact@koreambtihealth.com>
Subject: Testo Fish for Red Team Playbook!
Text: Hello world, this is a testo! {{.URL}}
Add Tracking Image 
  1. Users & Group

Group Name: group-test
<add emails and stuffs> 
  1. Campaign 을 시작한다.

Name: Campaign-test
Email Template: template-test
Landing Page: test
URL: http://login.domain.com (http://login.koreambtihealth.com)
Sending Profile: sending-profile-test
Groups: groups-test

실행

고피시를 통해 캠페인을 진행하면 왠만한 이메일 프로바이더의 스팸 필터를 거쳐 타겟의 이메일 inbox 안으로 이메일이 도착한 것을 볼 수 있다. 텍스트 기반의 이메일도 나쁘지 않지만, 현업에서 피싱 이메일 시뮬레이션을 할때는 HTML이나 잘 알려진 타사들의 이메일을 쓰기도 하니, 이렇게 연습해보는 것도 나쁘지 않다.

HTML에 들어가는 모든 링크는 고피시 링크 {{.URL}} 로 바꿔 테스트 페이지로 리다이렉트 시키거나 Evilginx2 페이지로 리다이렉트 시킬 수 있다. 예를 들어 위의 비밀번호 재설정을 누르면 Evilginx2 에서 준비해둔 리버스 프록시 페이지로 유저를 리다이렉트 시켜 피싱 - AitM (Adversary in the Middle) 을 실행하는 식이다.

마치며

개요에서도 언급했듯 이 페이지에서는 메일 서버와 고피시 서버를 설정하는 법에 대해서 다뤄봤다. 추후 테라폼이나 엔서블을 이용한 자동화나, Evilginx2와 고피시를 같이 이용하는 방법에 대해서는 추후 다른 페이지에서 다룬다.

참고로 위 방법을 이용해 실제 사이버 공격을 실행한 스키디가 있다면 행운을 빈다. 일부러 쉽게 잡힐 수 있는 IOC 2개 정도를 지우지 않았기 때문에 일반적인 이메일 게이트웨이를 사용하는 블루팀이라면 24시간 내에 본인을 찾아낼 것이다.

Reference

  • https://www.ired.team/offensive-security/red-team-infrastructure/automating-red-team-infrastructure-with-terraform

  • https://github.dev/b1gbroth3r/red-team-infrastructure-example

  • https://www.mail-tester.com/

  • https://www.sprocketsecurity.com/resources/never-had-a-bad-day-phishing-how-to-set-up-gophish-to-evade-security-controls

  • https://www.mogozobo.com/?p=3685

🚧
https://github.com/ChoiSG/RTPSourceCodes/tree/main/iac/smtp-terraform/configs
https://github.com/ChoiSG/RTPSourceCodes/tree/main/iac/smtp-terraform/configs