2025년 어느 평범한 월요일 아침, RaccoonCoin 전 직원의 메일함에 동일한 제목의 이메일이 도착했습니다.
제목: [긴급] 복지 포털 정책 변경 – 로그인 후 확인 바랍니다.
이메일 본문에는 복지 포털 접속 링크와 함께 CEO Tony Raccoon의 사인이 포함되어 있었다. 그러나 문제는 — CEO 본인은 이 메일을 보낸 적이 없었다?!
RaccoonCoin IT팀은 즉시 보안 경보를 발령하고, 메일의 발송 경로를 끝까지 추적해 누가, 어디서, 어떻게 보냈는지 밝혀내야 한다!!
이제 여러분은 RaccoonCoin의 TI 분석가로서, 공격자의 흔적을 추적해야 한다.
From: IT Support <it@raccooncoin.site>
To: Threat Intelligence Team <threat-intel@redraccoon.kr>
Cc: SOC <soc@raccooncoin.site>,
Incident Response <incident.response@raccooncoin.site>,
Tech Lead <techlead@raccooncoin.site>
Subject: [조사 요청] CEO 포워드된 전직원 대상 의심 메일 — EML 첨부 (CEO 본인발송 아님)
안녕하세요, 레드라쿤 인텔리전스팀.
CEO 명의로 전직원에게 발송된 의심 메일이 확인되어,
CEO께서 본인이 보낸 메일이 아님을 확인하였습니다.
관련 원본 EML을 첨부하오니 긴급 조사 부탁드립니다.
티켓 ID: INC-2025-1101-0932-CEO-CHAIN
감사합니다.
IT Support / RaccoonCoin
From: Tony Raccoon <tony.raccoon@raccooncoin.site>
To: IT Support <it@raccooncoin.site>
Cc: Tech Lead <techlead@raccooncoin.site>, SOC <soc@raccooncoin.site>,
incident.response@raccooncoin.site
Subject: 전직원으로 발송된 의심 메일 전달 — 긴급 조사 요청
안녕하세요, IT팀.
제 명의로 전직원에게 사칭 이메일이 발송된 정황이 있어 원문을 전달합니다.
제가 보낸 메일이 아니므로 긴급 조사 부탁드립니다. (첨부: 원본 EML)
감사합니다.
Tony Raccoon
Chief Executive Officer
RaccoonCoin
tony.raccoon@raccooncoin.site
Content-Type: message/rfc822
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="original_mass_email.eml"
MIME-Version: 1.0
From: Tony Raccoon <tony.raccoon@racooncoin.site>
To: all@raccooncoin.site
Subject:
Date: Sat, 01 Nov 2025 08:09:58 +0900
Message-ID: <mass20251101080958@racooncoin.site>
Return-Path: <no-reply@racooncoin.site>
Received: from mail.tutanota.de (mail.tutanota.de [203.0.113.45]) by
mx.raccooncoin.site with ESMTPS id mx-1; Sat, 01 Nov 2025 08:09:58 +0900
(KST)
Received-SPF: fail (mail from racooncoin.site not authorized)
Authentication-Results: mx.raccooncoin.site; spf=fail (client-ip=203.0.113.45)
smtp.mailfrom=racooncoin.site; dkim=none; dmarc=none
//racooncoin.site가 피싱 도메인
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
<!DOCTYPE html>
<html lang="ko">
<head><meta charset="utf-8"></head>
<body>
<p>안녕하세요, 전직원 여러분.</p>
<p>최근 사내 복지 포털에 긴급 공지 및 복지 제도 변경 사항이 있어 전 직원 확인이 필요합니다.
아래 링크를 통해 로그인하여 변경 사항을 확인해 주세요.</p>
<p>
<a href="http://vpn.racooncoin.site" target="_blank" rel="noopener noreferrer"
style="color:#1a0dab; text-decoration:underline;">
사내 복지 포털 바로가기 (로그인)
</a>
</p>
<p>
문의사항은 저에게 회신 바랍니다.<br>
감사합니다.<br>
Tony Raccoon<br>
CEO, RaccoonCoin
</p>
</body>
</html>
해당 피싱 사이트의 도메인은 vpn.racooncoin.site인데
이처럼 사람의 오타 가능성을 노려 유사한 철자(또는 문자)를 등록해 피싱·사기 등에 악용하는 기법을 typesquatting이라고 부른다.
또한 다음과 같이 로그인 기능을 이용하여 피해자의 Credential을 모으는 공격을 Crednetial Harvesting이라고 부른다.

해당 피싱 사이트에서 이메일, 비밀번호를 아무거나 입력하고 VPN 접속을 누르면
https://www.raccooncoin.site/ 다음 사이트로 리다이렉트된다.
페이지 소스코드
document.getElementById('year').textContent = new Date().getFullYear();
const form = document.getElementById('vpn-form');
const submitBtn = document.getElementById('submitBtn');
const demoBtn = document.getElementById('demoBtn');
const result = document.getElementById('result');
form.addEventListener('submit', (e) => {
e.preventDefault();
submitBtn.disabled = true;
submitBtn.textContent = '연결 중...';
result.style.display = 'none';
window.location.href = 'http://140.238.194.224';
setTimeout(() => {
window.location.href = 'https://www.raccooncoin.site';
}, 3000);
});
피싱 페이지의 소스코드를 보았을 때, 사용자가 credential을 입력하고 나면 그 내용을 연결 중… 표시를 띄우는 동안 140.238.194.224에 보낸 다음에 정상적인 사이트로 리다이렉트 하게 한다.

이 ip에 대해서 nmap으로 포트 스캔을 돌려보면 해당 ip에 대하여 3개의 포트가 열려있다.
근데 8081번 포트가 죽어서 8081번 포트를 사용하는 풀이는 패스하고
ssh를 이용한 풀이방법을 선택해서 다음 writeup을 작성해보았다.
일단 Linkedin 문제는 Linkedin Premium 친구의 도움을 받아서
(Linkedin Premium이면 비공개 프로필도 볼 수 있다고 한다;;)

다음과 같이 사칭 계정 프로필 링크를 얻을 수 있었다.
이게 공개 검색에서 1촌이 아니면 프로필이 비공개 되는거지, 직접 링크를 받으면 해당 프로필을 조회할 수 있는 로직인 것 같다.
github 리포지토리는 raccooncoin이라고 검색하니까 바로 나온다.
해당 git을 클론해서 문제에서 요구하는 시간의 commit log를 까보면 다음과 같다.

해당 시간의 표준시는 -05:00으로 동부 아메리카 지역을 가리킨다.
원래 한국시간에서 활동하다가 vpn을 쓰든 해서 해당 지역에서 커밋한 것 처럼 보이게 한 것 같다.
ssh에 접속하려면 일단 올바른 계정이름과 key가 필요한데 이부분은 사칭 github 리포지토리의 커밋 로그를 보면 키가 그대로 노출되는 것을 확인할 수 있다. 해당 키를 .ssh 디렉토리에 등록한 뒤 다음 명령어를 입력하면 문제 서버에 ssh로 접속할 수 있다.
ssh -i ~/.ssh/id_ed25519 spark@140.238.194.224
ssh 내에 접속해보면 plan.txt라는 파일이 있는데 다음 문제와 관련해서 해당 부분을 주목해보자
- Idea:
- Stand up redirector on cheap VPS.
- Use it as:
- HTTP(S) phishing landing page
- SSH C2 pivot (port 80/443 masquerading) - socat 2222 and port 80 from redirector -> c2.
C2서버로 redirect 해주는 호스트를 찾기 위해 netstat으로 네트워크를 스캔하면

다음과 같이 plan.txt에서 언급했던 2222번 포트를 사용하는 127.0.0.1:2222가 나온다.
사실 netstat 안돌리고 check.py만 읽어도 어느정도 힌트가 나온다

근데 그러면 지금 로컬에서 리다이렉트 받고 있다는거는 내가 지금 보고있다는게 redirector 호스트 서버라는 것이다. 직접 저 데이터를 넘겨받는 서버(C2서버)는 따로 있다는 것이다.
내가 헷갈렸던게 .flag.txt를 숨김 파일 처리했었어가지고 못찾았었는데 ls -a 하는 습관을 가져야겠다.. 11번 문제를 너무 어렵게 생각했었다…

그래서 ls -a를 한 결과 나온 파일을 모두 읽어보던 중 .bashrc 파일을 읽어봤을 때, .onion 도메인을 가진 딱봐도 딥웹 링크가 있었다. 또한 C2 Server의 ip에 대한 힌트도 하드코딩 되어있었다.

해당 힌트를 참고해보면 마지막의 158.180.6.169 가 C2 서버의 ip인 것을 알 수 있다.

해당 onion링크를 통해 접속하면 다음과 같은 Admin Pannel을 볼 수 있다.
해당 admin pannel에서 comapny 링크를 클릭하면 다음 페이지로 넘어가게 되는데,

저기 stolen_payment_records.csv를 눌러보면 다음과 같은 값을 확인할 수 있다.
이 Artifact는 어떤 사이트 링크를 누르든 공통적으로 똑같이 나타난다.

그러면 다음과 같이 Flag#13값을 확인할 수 있다.
문제에서는 마지막으로 딥웹에 업로드 되어 있는 랜섬웨어 파일의 SHA256 해시 값을 구하라고 한다.
해당 더미 파일을 다운 받은 후, 다음과 같은 명령어로 해시값을 추출할 수 있다.
#Powershell
PS C:\Users\user\Downloads> Get-Filehash .\ransom_loader_v2.exe -Algorithm SHA256
Algorithm Hash Path
--------- ---- ----
SHA256 {REDACTED} C:\Users\user\Downloads\ranso...
#Ubuntu
sane100400@DESKTOP-F1E39MF:~$ sha256sum ransom_loader_v2.exe
{REDACTED} ransom_loader_v2.exe
되게 아쉬운 부분은, FLAG를 대문자로 입력하면 오답이라고 한다.
따라서 문제를 제출할 때 FLAG를 반드시 소문자로 제출하기를 바란다.
단순히 플래그만 “찍어내는” 느낌이 아니라, 처음부터 끝까지 사건을 따라가면서 퍼즐이 이어지는 구조라서 되게 좋았던 것 같다.
또 풀이 방식이 한 가지로 고정된 게 아니라, 여러 공격/분석 기법을 직접 써보면서 접근할 수 있다는 점도 재미있었던 것 같다. 단순히 답만 맞히는 문제가 아니라, 내가 선택한 방법으로 단서를 모으고 결론까지 연결해야 해서 몰입도가 높았던 것 같다.
무엇보다 전체 시나리오가 실제 피싱 사건에서 흔히 보이는 전개(사칭 메일 → 유도 링크 → 자격증명 수집 → 인프라 추적 → 딥웹/악성코드 단서)랑 닮아 있어서 더 흥미로웠어요. 그래서 “문제 풀이”라기보다 작은 TI 조사 케이스를 한 번 끝까지 수행해본 경험처럼 느껴졌다.
관심 있으신 분들께 해당 TI 시리즈 문제 풀이를 추천하니 다들 많이 풀이 도전하고 쿠폰도 받아가셨으면 합니다. ㅎㅎ