[AWS] EC2와 Gophish로 침해대응(악성메일) 훈련 진행기 3

이전글 보기

[AWS] Amazon SES와 Gophish로 침해대응(악성메일) 훈련 진행기 1

[AWS] zoho 메일 서비스와 Gophish로 침해대응(악성메일) 훈련 진행기 2

 

 

들어가며

도메인과 메일서버의 설정을 마쳤다면, 피싱메일을 전송하고 열람/클릭 여부를 확인할 수 있는 프레임워크인 고피시(gophish)를 설정한다.

 

 

사용 AWS 서비스

AWS: EC2, Route53, EIP(IP 주소 고정 필요시 선택)

 

 

EC2 인스턴스 생성

고피시는 go언어로 작성되어 있으며, WEB 서비스가 동작한다. 권장 사양은 1GB 램이지만 다른 서비스도 함께 동작시킬 예정이기 때문에 't3.small' 인스턴스와 15GB EBS 볼륨을 선택했다. 운영체제는 Ubuntu 22.04 LTS를 사용한다. 자세한 생성 방법은 다루지 않는다. 이 기회에 클라우드와 친해져보자.

주의, 컴퓨팅 인스턴스의 생성은 시간당 요금이 발생한다. 프리티어인 경우 관계없지만 사용하지 않을 때는 인스턴스를 중지하여 불필요한 과금이 발생하지 않도록 주의한다.

EC2 인스턴스 생성

생성한 후에 발급한 인증키를 이용하여 접속한다. 우분투 운영체제의 경우 최초 사용자명은 'ubuntu'이다. git, podman 등 초기 설정을 완료한 이후 AWS 관리 콘솔 > EC2 > 인스턴스 선택 > 보안 탭에서 '인바운드 규칙'을 설정한다. SSH(22/tcp)의 경우 지정한 단말만 접속하도록 출발지 IP 제한을 적용하는 것을 권장한다. 추가로 다음 포트를 인바운드 규칙에 추가한다.

- gophish 웹 관리콘솔 3333/TCP (0.0.0.0/0, 또는 접속할 PC의 IP만 지정)

- gophish 피싱메일 전송시 랜딩페이지 8080/TCP (0.0.0.0/0)

인바운드 규칙 설정

안전한 클라우드 인프라 운영을 위해서는 VPC를 설정하고 외부로 노출시킬 인스턴스와 내부 인스턴스를 구분하여 운영하여야 한다. 하지만 1시간 정도 테스트로만 운영할 예정이기 때문에 전체 리소스에 대한 Open 정책으로 구성하였다. 

 

고정 IP 설정(선택사항)

EC2에서 제공하는 EIP(Elastic IP Adress)를 추가하면, 고정 IP를 구성할 수 있다. 훈련 기간을 길게 운영할 경우 IP가 변경되면 이전에 전송한 메일의 랜딩페이지가 동작하지 않을 수 있으므로 고정 IP의 설정이 필요할 수 있다.

 

 

고피시 설치 1(local)

코드를 내려 받아 로컬에 설치하는 경우 다음 명령어를 따라 설치할 수 있다. 일부 헤더를 제거하는 옵션이 포함되어 있다.

출처: https://www.xn--hy1b43d247a.com/infrastructure/smtp-do

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

 

 

고피시 설치 2(docker)

컨테이너의 편의성을 알기에 도커 환경부터 찾아보았다. 친절히 관련 헤더 정보까지 제거한 도커파일을 제공하고 있었으며, 해당 리소스를 이용하여 배포하였다.

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

출처에 따라 설치한다. 다만 docker와 호환되고 성능이 좀 더 좋은 podman을 사용하였다. 다음 글 참조.

podman을 설치한 후 기존 docker 명령어가 위치할 자리에 podman 키워드로 변경만해도 동일하게 사용 가능하다.

[podman] docker에서 podman으로 마이그레이션하기

 

 

중간에 go언어 관련해서 저장소 오류가 발생하여 빌드 에러가 발생한다. Dockerfile에서 저장소 전체 경로를 지정하도록 수정한 다음 빌드하면 성공한다. 

 

배포된 URL의 3333 포트에 접속하면 gophish 웹 콘솔을 확인할 수 있다. 초기 계정은 'admin'이며 패스워드는 gophish의 실행 로그에서 확인할 수 있다. 최초 로그인 이후에는 패스워드를 반드시 변경해서 사용하도록 안내하고 있다.

 

 

2024.05. 추가사항

t3.small 인스턴스로 고피시 서버 구동시 리소스 부족 및 가비지 컬렉션이 동작하면서 컨테이너가 종료되어, 장시간 동작이 불가능함을 확인하였다. 필자는 운영중인 온프렘 서버로 마이그레이션하여 해결하였으나, AWS 환경에서 구동하는 경우 적절한 용량 조정이 필요하다.

반응형