침투 실습
Step 167. 사회공학: 인간 해킹 — 방화벽을 우회하는 한 통의 메일
Level 2 — 보안 입문과 공격 스킬 기초 | 난이도 ★★☆☆☆ | 예상 소요 시간 2.5시간
전제: Step 122~125(인증 공격)를 마쳤다. 피싱이라는 단어는 알고 있다.
- 준비물: 내 메일함의 스팸 폴더 (링크 클릭 절대 금지), 필기 도구
- 성격 안내: 오늘은 [개념] 챕터입니다. 피싱 메일을 만들거나 보내는 실습은 없습니다 — 있는 메일을 해부하고 방어를 설계합니다.
- 윤리·법적 경계: 피싱 사이트 제작·발송은 조직이 서면으로 승인한 모의훈련 외에는 목적과 규모에 관계없이 불법입니다. "친구에게 장난으로"도 해당합니다. 이 챕터의 목표는 공격 기술이 아니라 알아보는 눈과 방어 설계입니다.
지금까지 우리는 기술의 문을 두드렸습니다 — 포트, 비밀번호, 웹 취약점. 그런데 침해 사고 통계에서 가장 큰 비중을 차지하는 초기 침입 경로는 기술 공격이 아니라 사람에게 보내는 한 통의 메일입니다. 이유는 단순합니다. 아무리 튼튼한 방화벽도 "직원이 스스로 비밀번호를 입력해 준" 상황은 막지 못합니다.
사회공학(social engineering)은 기술 취약점 대신 인간의 심리 — 긴박감, 권위, 호기심 — 를 이용해 방어를 스스로 열게 만드는 기법의 총칭입니다. 오늘은 피싱 메일 한 통을 도구 없이 해부하고, 메일 헤더라는 X선 사진을 읽고, 가족에게 설명할 수 있는 판별 체크리스트까지 만듭니다.
검수·실습 보완
2026-09-20 · 본문·코드 검토와 확인된 오류 수정. 전체 실습을 재실행했다는 표시는 아닙니다.
SPF·DKIM·DMARC 결과나 발신 주소 하나만으로 정상·피싱을 확정하지 마세요. DMARC는 표시된 From 도메인과 SPF 또는 DKIM 인증 도메인의 정렬을 확인하며 본문의 진실성을 인증하지 않습니다. 본문을 보는 것만으로도 원격 이미지가 요청될 수 있으므로 외부 콘텐츠를 차단하고 링크 미리보기도 주의하세요. 독립적으로 알고 있는 공식 앱·연락처로 확인합니다.
공식·기술 참고: DMARC specification
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
- 사회공학이 "기술이 아니라 심리를 공격하는" 기법임을 사례로 설명한다
- 피싱 메일의 세 심리 장치(긴박감·권위·호기심)를 실제 문구에서 집어낸다
- 발신자 주소와 링크의 미세한 변형을 식별한다
- 메일 헤더의 Received 경로와 SPF/DKIM 결과를 읽는다
- 피싱 판별 체크리스트를 만들어 비전문가에게 설명할 수 있다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | 메일 클라이언트의 "원본 보기" 기능 (Gmail: 점 세 개 → 원본 표시) |
| 오늘의 명령 | 새 명령 없음 — 눈과 헤더가 도구 |
| 필요한 개념 | 사회공학, 피싱 구조, SPF/DKIM, 유사 도메인, 모의훈련의 합법 조건 |
| 오늘의 산출물 | 피싱 분석 노트 3건 + 판별 체크리스트 1부 |
2-1. 왜 사람이 가장 약한 고리인가
기술 통제는 규칙대로 작동합니다. 비밀번호 정책, 방화벽, 백신 — 전부 "예/아니오"의 기계입니다. 사람은 다릅니다. 사람은 상황 속에서 판단하고, 그 판단은 감정의 영향을 받습니다. 사회공학은 바로 그 감정을 조작합니다.
역사적 사례로 유명한 케빈 미트닉은 회고록에서 기술 침투보다 전화 한 통 — "IT팀인데 비밀번호 확인이 필요합니다" — 로 얻은 것이 더 많았다고 말합니다. 수십 년이 지난 지금도 대규모 침해 사고의 상당수가 피싱 메일 하나에서 시작됩니다. 기술은 발전했지만 사람의 심리는 그대로이기 때문입니다.
2-2. 세 개의 심리 버튼
피싱 메일을 해부하면 거의 예외 없이 다음 셋 중 하나 이상을 누르고 있습니다.
| 심리 장치 | 작동 원리 | 대표 문구 |
|---|---|---|
| 긴박감 | 생각할 시간을 빼앗는다 | "24시간 내 미조치 시 계정이 정지됩니다" |
| 권위 | 거스르기 어려운 존재를 내세운다 | "임원실 지시", "국세청 통지", "IT 보안팀" |
| 호기심·이익 | 확인하고 싶은 욕구를 건드린다 | "경품 당첨", "택배 주소 확인", "누가 회원님 사진을…" |
셋의 공통점: 판단을 서두르게 만든다는 것. 정상적인 조직은 "지금 즉시 이 링크를 클릭하지 않으면 불이익"을 요구하지 않습니다. 이 한 문장이 오늘 만들 체크리스트의 첫 줄이 됩니다.
실제 피싱은 이 버튼들을 겹쳐 누릅니다. "임원실 지시(권위)인데 오늘 중으로(긴박감)" 같은 조합은 직장인의 저항선을 정확히 겨냥합니다. 세 버튼을 따로 배우는 이유는, 겹쳐 있을 때도 하나씩 분해해서 볼 수 있게 하기 위해서입니다. 메일을 받았을 때 "이 문장은 지금 내 어느 버튼을 누르고 있지?"라고 묻는 습관 — 이것이 사회공학 방어의 시작 자세입니다.
2-3. 유사 도메인 — 눈속임의 해부학
피싱의 기술적 부분은 대부분 주소 변형입니다.
- 철자 추가/교체:
naver.com→naver-secure.com,rnicrosoft.com(rn이 m처럼 보임) - 하위 도메인 착시:
naver.com.evil-site.example— 진짜 도메인은 맨 끝의evil-site.example - 링크 텍스트와 실제 URL의 불일치: 글자는 "www.bank.example", 실제 연결은 다른 곳
판별 원칙은 하나입니다: 도메인은 오른쪽부터 읽는다. 맨 끝의 등록 도메인이 진짜 주인이고, 그 왼쪽은 주인이 임의로 붙인 장식입니다.
2-4. 메일 헤더 — 봉투 뒤의 소인
메일 본문은 편지지, 헤더는 봉투와 소인입니다. 본문의 발신자 표시는 보내는 사람이 자유롭게 쓸 수 있지만, 헤더에는 메일이 실제로 지나온 서버들의 기록(Received)과 발신 도메인의 인증 결과가 남습니다.
- SPF: 이 IP가 이 도메인의 메일을 보낼 자격이 있나
- DKIM: 내용이 서명된 도메인의 것이 맞나 (변조 검증)
- DMARC: 둘의 결과를 어떻게 처리할지의 정책
받는 메일함이 이 결과를 헤더에 적어 둡니다 — spf=fail, dkim=fail 같은 문구를 찾아 읽는 것이 오늘의 실습입니다.
2-5. 공격 도구의 존재와 합법의 조건
SET(Social-Engineer Toolkit), Gophish 같은 도구는 피싱 메일 발송과 가짜 로그인 페이지를 자동화합니다. 이 도구들의 이 수업에서 허용하는 활용은입니다 — 조직이 서면으로 승인한 모의 피싱 훈련. 직원 보안 교육을 위해 회사가 계약하고, 범위·기간·대상을 문서로 정한 훈련입니다.
"합법 도구 + 불법 사용 = 불법"입니다. 도구가 공개돼 있다는 사실은 사용의 면허가 아니라, 방어자가 알아야 할 공격의 표준 장비 목록일 뿐입니다.
3. 따라 하기
3-1. 샘플 피싱 메일 해부
아래는 교재용으로 지어낸 샘플입니다. 실제 피싱의 전형적 요소를 모아 만들었습니다. 실제 링크는 없습니다.
발신자: 국민은행 보안센터 <noreply@kb-secure-alert.example>
제목: [긴급] 회원님의 계좌에서 해외 결제 시도가 감지되었습니다
고객님의 계좌에서 방금 해외 IP(미국)로 487,000원 결제가 시도되었습니다.
본인 거래가 아니라면 24시간 내에 아래 링크에서 즉시 본인확인을 하셔야
계좌가 보호됩니다. 미조치 시 계좌가 일시 정지됩니다.
>> 본인확인 하기 << (실제 연결: http://kb-secure-alert.example/verify)
해부 연습 — 단서 다섯 개를 찾으세요 (답은 5번 섹션):
- 심리 장치는 무엇인가
- 도메인의 문제는 무엇인가
- "링크 텍스트와 실제 URL"은 어떻게 다른가
- 정상 은행이 하지 않는 요구는 무엇인가
- 헤더를 본다면 어떤 결과를 기대하는가
3-2. 내 스팸 폴더에서 실제 샘플 찾기
이제 진짜 재료를 봅니다. 규칙을 먼저 정합니다.
- ⚠️ 링크와 첨부파일은 절대 열지 않습니다 — 우리는 본문과 주소만 봅니다
- ⚠️ 발신자에게 답장하지 않습니다
- 메일이 의심스러우면 그 상태가 곧 실습 재료입니다 — 삭제는 분석 후에
스팸 폴더에서 3통을 골라 각각 3-1과 같은 형식으로 해부합니다. 단서가 최소 3개씩은 나올 것입니다. 진짜 피싱은 샘플보다 교묘한 경우가 많습니다 — 발신자가 진짜처럼 보이거나, 실제 거래 내역 일부(유출된 정보)를 인용하기도 합니다.
분석 노트는 이런 형식을 권합니다.
[분석 1] 제목: (적고), 표시 발신자: (적고)
- 심리 장치: 긴박감 / 권위 / 호기심 중 무엇
- 주소 단서: (도메인 변형 등)
- 요구 단서: (정상 조직이 하지 않을 요구)
- 헤더: SPF=?, DKIM=?
- 한 줄 결론: 이 메일의 정체
기록하는 이유는 눈이 기록에서 길러지기 때문입니다. 세 통을 이 형식으로 해부하고 나면, 네 번째 메일부터는 형식 없이도 단서가 먼저 보이기 시작합니다.
3-3. 헤더 읽기 — 메일의 X선
Gmail 기준: 메일 우상단 점 세 개 → "원본 표시". 아래는 예시입니다(실제 값은 메일마다 다릅니다).
Authentication-Results: mx.example-mail.com;
spf=fail (보내는 IP 203.0.113.7은 kb-secure-alert.example의 허용 발신지가 아님)
smtp.mailfrom=kb-secure-alert.example;
dkim=none (서명 없음);
dmarc=fail
Received: from mail-out.badhost.example (mail-out.badhost.example [203.0.113.7])
by mx.example-mail.com ...
Return-Path: <bounce@badhost.example>
읽는 법: spf=fail은 검사한 도메인이 해당 발신 IP를 SPF로 승인하지 않았다는 뜻입니다. dkim=none은 서명이 없다는 결과이며 서명 검증 실패와는 다릅니다. Return-Path 차이도 정상 메일에서 생길 수 있습니다. 신뢰하는 수신 서버의 인증·도메인 정렬 결과와 문맥을 함께 확인하세요. 통과나 실패 하나만으로 피싱 여부가 확정되지는 않습니다.
3-4. 판별 체크리스트 만들기 — 오늘의 산출물
해부한 내용을 비전문가용 체크리스트로 옮깁니다. 예시의 첫 다섯 줄:
### 피싱 판별 체크리스트 (가족용)
1. "지금 즉시", "24시간 내", "정지됩니다"가 있으면 일단 의심한다
2. 발신자 주소의 맨 끝 도메인을 본다 — 은행을 사칭하는 개인 메일 주소는 별도의 공식 채널로 확인한다
3. 링크 위에 마우스를 올려(모바일: 꾹 눌러) 실제 주소를 확인한다
4. 의심되면 메일 속 링크가 아니라, 내가 아는 공식 앱/전화로 직접 확인한다
5. 비밀번호·OTP·카드번호를 "확인"하겠다는 입력 창은 전부 가짜다
기준: 10개를 채우되, 각 항목은 "할머니에게 전화로 읽어 드려도 이해되는 문장"이어야 합니다. 전문 용어가 들어가면 다시 쓰세요.
3-5. 방어 설계 — 조직은 어떻게 막는가
개인의 눈만으로는 한계가 있습니다. 조직의 방어는 층을 이룹니다.
- 기술 1차: SPF/DKIM/DMARC 검증과 스팸 필터 — 대부분은 여기서 걸러집니다
- 기술 2차: 링크 재작성·샌드박스 첨부 검사
- 사람: 오늘 만든 체크리스트의 조직 버전 — 정기 교육과 모의 피싱 훈련(서면 승인 하에)
- 절차: "메일로 시키는 중요한 일은 반드시 별도 채널로 재확인"을 규정으로
핵심 철학: 뚫리는 것을 전제로 피해를 줄이는 설계 — 재확인 절차가 있으면 한 사람이 속아도 조직은 안 속습니다.
모의 훈련의 결과도 같은 관점으로 봐야 합니다. 클릭한 직원을 징계하는 조직에서는 다음 공격 때 아무도 신고하지 않습니다. 클릭을 신고의 기회로 바꾼 조직만이 훈련의 효과를 얻습니다 — 피싱 방어의 진짜 지표는 "클릭률 0%"가 아니라 "신고까지 걸린 시간"입니다.
4. 미션과 연습문제
미션 — 피싱 분석 3건과 체크리스트 1부
- 내 스팸 폴더에서 3통을 골라 3-1 형식으로 해부한다 (통마다 단서 3개 이상, 링크 클릭 없이)
- 그중 1통의 헤더 원본을 열어 SPF/DKIM 결과와 Received 경로를 찾아 기록한다 (개인정보는 마스킹)
- 10개 항목의 "가족용 판별 체크리스트"를 완성한다
- 완성한 체크리스트를 실제로 한 명에게 설명해 보고, 이해가 안 된 항목을 고친다
연습문제
문제 1. 사회공학이 기술 공격보다 성공률이 높은 이유를 "방화벽의 관점"에서 설명해 보세요.
문제 2. 긴박감·권위·호기심 세 장치의 공통점 한 가지를 말하고, 그것이 왜 판별의 실마리가 되는지 설명해 보세요.
문제 3. naver.com.evil-site.example에서 진짜 도메인은 무엇이며, 왜 오른쪽부터 읽어야 합니까?
문제 4. 본문의 발신자 표시는 믿을 수 없는데 헤더의 인증 결과(SPF/DKIM)는 믿을 수 있는 이유를, "누가 쓰는가"의 관점에서 설명해 보세요.
해설과 완료 기준 · 펼치기/접기
5. 모범 답안과 완료 기준
미션 모범 답안
3-1 샘플의 단서 다섯 개 (연습 기준):
- 심리 장치: 긴박감("24시간 내", "일시 정지") + 권위(은행 보안센터 사칭)
- 도메인:
kb-secure-alert.example— 진짜 은행 도메인이 아닌 유사 도메인 - 링크 불일치: "본인확인 하기"라는 한글 텍스트 뒤에 전혀 다른 주소
- 비정상 요구: 은행은 메일 링크로 "즉시 본인확인"을 요구하지 않음 — 공식 앱/전화가 정상 경로
- 헤더 기대값:
spf=fail,dkim=fail, Return-Path 불일치
검증하는 법: ① 분석 3건이 본문 단서와 주소 단서를 모두 포함하는가. ② 헤더 기록에 SPF/DKIM 결과가 있는가. ③ 체크리스트에 전문 용어 없이 행동 지침만 있는가. ④ 실제 설명 후 고친 흔적이 있는가 — 설명해 보기 전의 문장과 후의 문장이 다르면 그것이 성장의 증거입니다.
연습문제 해답
문제 1 해답. 방화벽과 필터는 패킷과 코드를 검사하지만, "사람이 자발적으로 입력한 비밀번호"는 정상 트래픽과 구분할 수 없습니다. 사회공학은 기술 통제를 뚫는 게 아니라 통제가 멈춰 있는 지점(사람의 판단)으로 우회합니다.
문제 2 해답. 공통점은 판단을 서두르게 만든다는 것 — 생각할 시간을 제거합니다. 그래서 판별 실마리가 됩니다: "이 메일이 나를 재촉하는가?"라는 질문 하나로 세 장치를 전부 검출할 수 있습니다. 재촉하는 메일은 천천히 대응하면 됩니다.
문제 3 해답. 진짜 도메인은 evil-site.example입니다. 도메인은 계층 구조라 맨 오른쪽이 실소유자이고, 왼쪽은 소유자가 자유롭게 붙이는 하위 이름입니다. 왼쪽부터 읽으면 장식에 속습니다.
문제 4 해답. 본문의 발신자 표시(From:)는 보내는 사람이 자유롭게 쓰는 문구입니다. 반면 SPF/DKIM 결과는 받는 쪽 서버가 실제 발신 IP와 암호학적 서명을 검증해 기록한 것입니다. 심판이 보낸 사람이 아니라 받은 인프라이기 때문에 신뢰할 수 있습니다.
완료 기준 체크리스트
- [ ] 샘플 메일에서 단서 5개를 스스로 찾았다
- [ ] 실제 스팸 3통을 링크 클릭 없이 해부했다
- [ ] 헤더 원본에서 SPF/DKIM 결과를 찾아 읽었다
- [ ] 도메인을 오른쪽부터 읽는 습관을 설명할 수 있다
- [ ] 가족용 체크리스트 10개를 완성했다
- [ ] 체크리스트를 실제로 한 명에게 설명하고 고쳤다
- [ ] 피싱 발송이 불법임을, 모의훈련의 합법 조건과 함께 말할 수 있다
6. 흔한 실수와 해결
벽 1. 스팸 폴더가 비어 있다
증상: 분석할 샘플이 없습니다.
원인: 필터가 잘 작동하는 깨끗한 계정이거나, 스팸이 자동 삭제됩니다.
해결: 3-1의 지어낸 샘플로 해부 연습을 먼저 완료하고, 뉴스에 공개된 실제 피싱 사례(금융감독원·KISA의 피싱 알림)의 캡처 화면을 재료로 쓰세요. 기관이 공개한 사례는 안전한 교보재입니다.
벽 2. 진짜와 가짜가 도저히 구분 안 되는 메일이 있다
증상: 실제 거래 내역 일부를 알고 있는 등 정교한 메일.
원인: 유출된 개인정보로 개인화된 표적 피싱(스피어 피싱)입니다.
해결: 그것이 정답 케이스입니다 — 구분이 안 되는 메일의 대응은 "더 열심히 구분"이 아니라 채널 분리입니다. 메일 속 링크는 건드리지 않고, 공식 앱이나 대표 전화로 직접 확인하세요. 이 절차 하나면 구분 실력과 무관하게 안전합니다.
벽 3. 헤더에서 받은 적 없는 용어가 쏟아진다
증상: Received가 여러 줄, ARC, X- 헤더들…
원인: 헤더는 실제 경유 서버 전부의 기록이라 깁니다.
해결: 전부 읽을 필요 없습니다. Authentication-Results 블록의 spf=, dkim=, dmarc= 세 개만 찾으세요. 나머지는 그 위로 흐르는 물결일 뿐입니다.
벽 4. "나는 안 속는다"는 생각이 든다
증상: 샘플을 보고 "이런 걸 누가 속아"라는 반응.
원인: 분석 자세에서는 누구나 안 속습니다. 사회공학은 분석 자세가 꺼진 순간 — 바쁜 오후, 퇴근길, 연말정산 시즌 — 을 노립니다.
해결: 체크리스트의 진짜 용도가 여기 있습니다. 판단력은 컨디션을 타지만, "재촉하는 메일은 채널을 바꾼다" 같은 절차는 컨디션을 타지 않습니다.
벽 5. 피싱 훈련 메일을 직접 보내 보고 싶다
증상: Gophish 같은 도구로 친구나 회사 동료에게 시험해 보고 싶습니다.
원인: 호기심 — 하지만 명확한 선이 있습니다.
해결: 발송은 불법입니다(모의훈련은 조직의 서면 승인이 전제). 오늘 배운 것으로 할 수 있는 합법적 활동은 분석과 방어 설계뿐이며, 그것만으로 이 챕터의 목표는 전부 달성됩니다.
7. 정리
오늘의 개념
| 개념 | 한 줄 설명 |
|---|---|
| 사회공학 | 기술 취약점 대신 인간 심리를 공격하는 기법 |
| 피싱 | 가짜 메일/사이트로 정보를 낚는 사회공학의 대표형 |
| 긴박감·권위·호기심 | 피싱이 누르는 세 심리 버튼 — 공통점은 "재촉" |
| 유사 도메인 | 주소의 미세 변형 — 도메인은 오른쪽부터 읽는다 |
| SPF/DKIM/DMARC | 받는 서버가 기록하는 발신 인증 결과 |
| 모의 피싱 훈련 | 서면 승인 하에 조직이 실시하는 승인된 훈련 범위의 발송 |
| 채널 분리 | 의심스러운 요청은 별도 경로로 재확인하는 절차 |
오늘의 명령어
| 도구 | 하는 일 |
|---|---|
| 메일 "원본 표시" (Gmail 등) | 헤더 읽기 — SPF/DKIM 확인 |
| 링크 위 마우스 오버 | 텍스트와 실제 URL 비교 |
| KISA·금감원 피싱 알림 | 안전한 실제 사례 교보재 |
| (조직용) Gophish, SET | 서면 승인 모의훈련 전용 도구 |
명령어보다 중요한 감각
오늘 해부한 피싱 메일은 기술적으로는 조잡합니다 — 취약점도, 익스플로잇도 없습니다. 그런데 세계 최대 규모의 침해 사고들이 바로 이 조잡한 메일에서 시작됐습니다. 기술 방어가 높아질수록 공격자는 더 낮은 곳, 즉 사람을 노립니다. 방어의 최종선이 기계에서 사람으로 옮겨온 것입니다.
그래서 오늘 만든 체크리스트는 부록이 아니라 이 챕터의 본편입니다. 그리고 기억할 것 — 피싱 분석가의 진짜 무기는 눈썰미가 아니라 "재촉당할수록 천천히, 다른 채널로" 라는 절차입니다. 눈썰미는 지치지만 절차는 지치지 않습니다.
전부 체크되면 Step 167 완료입니다.
한 단계 더 가까이
수업을 마쳤나요?
본문의 완료 기준을 확인한 뒤 직접 표시하세요.