부록 C. 패스워드 공격과 사회공학 — 사람을 여는 기술
- 대상 독자: 전체 레벨 (비기술 독자도 이해 가능)
- 용도: 시험 대비 요약본, 보안 인식 교육 자료, 복습용 지도
⚠️ 이 부록의 모든 기법은 내 랩·합법 플랫폼에서만 사용해야 합니다. 실제 사람이나 조직을 대상으로 한 피싱·비밀번호 시도는 그 자체로 범죄입니다.
가장 견고한 암호화도, 가장 최신의 패치도, 한 사람의 클릭 앞에서는 무력해져요. 이 부록은 시스템이 아니라 사람과 비밀번호를 공격하는 방법, 그리고 그에 맞서는 방법을 정리합니다.
C-0. 한눈에 보는 지도
| # | 기법 | 대상 | 핵심 한 줄 |
|---|---|---|---|
| 1 | 브루트포스·사전 공격 | 비밀번호 | 될 때까지, 또는 똑똑하게 대입 |
| 2 | 해시 크래킹 | 유출된 해시 | 해시를 거꾸로 비밀번호로 |
| 3 | 패스워드 스프레잉 | 많은 계정 | 잠금을 피해 천천히 넓게 |
| 4 | 크리덴셜 스터핑 | 다른 사이트 | 털린 명단은 어디서든 통한다 |
| 5 | 피싱 | 사람 | 믿음을 사칭해 입력을 받는다 |
| 6 | 스피어 피싱·스미싱·비싱 | 특정 사람 | 맞춤형 미끼는 더 잘 먹힌다 |
| 7 | 프리텍스팅·임팩트 매개 | 사람 | 상황극과 물리적 장치 |
| 8 | MFA 피로 공격 | 2단계 인증 | 승인 요청을 지칠 때까지 |
C-1. 브루트포스와 사전 공격
정의: 로그인 폼에 비밀번호를 대입해 보는 가장 원시적인 공격이에요. 무차별 대입(모든 조합)은 현실적으로 느리고, 실전에서는 사전 공격 — 유출 비밀번호 목록(rockyou.txt 같은)과 규칙 기반 변형(password → Password1!)을 씁니다.
왜 먹히는가: 사람은 기억 가능한 비밀번호를 고르고, 그 선택은 놀라울 정도로 예측 가능하기 때문이에요. 상위 100만 개 사전이 전체 계정의 상당 비율을 커버합니다.
방어: 로그인 시도 제한(rate limiting)과 계정 잠금, 지연 증가(exponential backoff), 캡차. 서비스 운영자는 유출 목록과 겹치는 비밀번호 설정을 차단하는 것도 좋아요.
C-2. 해시 크래킹
정의: 데이터베이스 유출 등으로 해시값을 얻었을 때, 후보 비밀번호를 해싱해서 일치하는 것을 찾는 작업이에요. 해시는 역산이 안 되지만, "앞으로 계산해서 비교"는 얼마든지 됩니다.
도구와 감각: hashcat(GPU 가속)과 john이 표준이에요. GPU 한 대로 초당 수십억 개의 후보를 시도할 수 있어서, 짧은 비밀번호는 시간 문제일 뿐입니다. 레인보우 테이블은 미리 계산해 둔 해시→비밀번호 표인데, 솔트(salt) 가 붙은 해시에는 무용지물이에요.
방어의 핵심은 해시 알고리즘 선택입니다.
| 알고리즘 | 크래킹 저항 | 판정 |
|---|---|---|
| MD5, SHA-1 | 초당 수십억 회 | ❌ 비밀번호에 절대 사용 금지 |
| bcrypt | 느림 (cost 조절) | ✅ |
| scrypt | 느림 + 메모리 요구 | ✅ |
| Argon2 | 느림 + 메모리·병렬 저항 | ✅ 현재 권장 |
느린 해시 함수는 정상 로그인(하루 몇 번)에는 무리가 없지만, 크래커의 초당 수십억 회 시도에는 치명적이에요.
C-3. 패스워드 스프레잉 (Password Spraying)
정의: 하나의 계정에 비밀번호 많이 대입하는 대신, 흔한 비밀번호 하나를 수많은 계정에 대입하는 공격이에요. 계정 잠금(연속 실패 시 잠김)을 피하기 위해 설계된 기법입니다.
공격 흐름: Spring2025! 같은 시즌성 비밀번호 하나를 조직의 전체 계정 목록에 한 번씩만 시도 → 잠금 없이 통과하는 계정 확보 → 다음 시즌 비밀번호로 반복.
방어: 스프레잉은 잠금 정책으로 못 막아요. 대신 "같은 비밀번호로 여러 계정이 실패"하는 패턴을 탐지하고, 유출 사전 차단, 그리고 무엇보다 MFA가 확실한 방어막입니다.
C-4. 크리덴셜 스터핑 (Credential Stuffing)
정의: 과거에 유출된 A사의 아이디/비밀번호 목록을 B사, C사에 그대로 대입하는 공격이에요. 비밀번호 재사용이라는 사람의 습관을 이용합니다.
방어: 사용자는 사이트마다 다른 비밀번호 — 사람이 외울 수 없으니 비밀번호 관리자가 사실상 유일한 답이에요. 서비스 측에서는 유출 목록 대조와 MFA, 이상 로그인 탐지(평소와 다른 지역·기기)가 방어입니다.
C-5. 피싱 (Phishing)
정의: 신뢰할 수 있는 존재(은행, 회사 IT팀, 택배사)를 사칭해 피해자가 직접 자격증명이나 돈을 건네게 만드는 공격이에요. 기술이 아니라 심리를 공격합니다.
해부하면 네 가지 재료예요:
- 사칭: 발신자 주소·도메인 위장 (
naver-secure.com같은 타이포스쿼팅) - 긴박함: "24시간 내 미조치 시 계정 정지" — 판단력을 마비시키는 장치
- 정상의 외형: 로고·문구를 복제한 로그인 페이지
- 행동 유도: 링크 클릭 또는 첨부 파일 실행
방어: 발신자 주소 정밀 확인, 긴박한 요청은 공식 앱·전화로 별도 경로 재확인, 링크를 직접 타이핑해서 접속, 피싱 신고 문화. 기술적으로는 SPF/DKIM/DMARC 메일 인증과 웹 필터링이 있습니다.
C-6. 스피어 피싱·스미싱·비싱
- 스피어 피싱: 특정 개인·조직을 조사(SNS, 조직도)해 맞춤 제작한 피싱. "김 부장님이 지시한 결재 문서"처럼 실제 인맥과 맥락을 쓰기 때문에 일반 피싱보다 성공률이 훨씬 높아요.
- 스미싱: 문자 메시지 기반. 짧은 문구와 단축 URL이 판별을 어렵게 합니다.
- 비싱(Vishing): 전화 기반. 목소리의 권위("검찰입니다", "보안팀입니다")가 속이는 도구예요.
방어: 채널 분리 원칙 — 요청받은 채널이 아닌, 원래 알던 경로로 사실 확인. 회사에서는 보고 절차와 모의 훈련이 최선의 백신이에요.
C-7. 프리텍스팅과 물리적 접근
- 프리텍스팅: 가상의 신분과 상황(내부 감사, 설비 기사)을 연기해 정보를 얻어내는 기법. 전화 한 통으로 내부 용어·조직 정보를 수집하고, 그 정보가 다음 공격의 신뢰 재료가 됩니다.
- USB 드롭: 주차장에 "2025 연봉 테이블"이라 적힌 USB를 떨어뜨려 꽂게 만드는 고전 기법. 호기심이 보안 정책을 이겨요.
- 테일게이팅: 출입 카드를 찍는 직원 뒤를 따라 들어가기. 물리 보안이 무너지면 논리 보안도 함께 무너집니다.
방어: 신원 검증 절차(콜백 확인), 낯선 저장 매체 사용 금지, 물리 출입의 개인별 인증.
C-8. MFA 피로 공격 (MFA Fatigue)
정의: 비밀번호까지 탈취한 공격자가 푸시 승인 요청을 반복해서 보내, 피해자가 귀찮음에 "승인"을 누르게 만드는 공격이에요. MFA를 뚫는 게 아니라 사람에게 뚫리게 합니다.
방어: 숫자 매칭(화면의 숫자를 앱에 입력) 방식 MFA, 하드웨어 키(FIDO2), 승인 요청 폭주 시 신고 절차. 피해자 수칙은 단순해요. 내가 로그인한 적 없는데 오는 승인 요청은 무조건 거부입니다.
C-9. 방어자를 위한 종합 체크리스트
개인과 조직이 오늘부터 할 수 있는 것들이에요.
- [ ] 비밀번호 관리자 도입 — 사이트마다 다른, 길고 무작위인 비밀번호
- [ ] MFA 활성화 — 가능하면 하드웨어 키 또는 숫자 매칭 방식
- [ ] "긴박한 요청 = 의심" 습관화 — 별도 경로로 재확인
- [ ] 내 계정 유출 여부 정기 점검 (Have I Been Pwned 등)
- [ ] 서비스 운영자라면: Argon2/bcrypt 해싱, 로그인 시도 제한, 스프레잉 패턴 탐지, 메일 인증(SPF/DKIM/DMARC)
- [ ] 조직이라면: 정기 모의 피싱 훈련과 신고 포상 — "속은 사람"이 아니라 "신고한 사람"이 칭찬받는 문화
정리
이 부록의 기법들에는 불편한 공통점이 있어요. 기술적 완벽함이 아니라 인간의 습관을 겨냥한다는 것입니다. 재사용하는 비밀번호, 긴박함에 약한 판단력, 귀찮음을 피하려는 본능 — 공격자는 이 본능의 전문가예요.
반대로 방어도 본능에 맡기지 않는 데서 시작합니다. 비밀번호 관리자에게 기억을 맡기고, MFA로 한 겹을 더 두고, 재확인 절차를 습관으로 만드는 것. 도구가 본능의 약점을 덮어주는 구조를 만들면, 사람은 실수해도 괜찮은 시스템이 됩니다.
패스워드 크래킹의 실습은 본문 Level 1~2의 파이썬·해시 파트와 Level 4 OSCP 파트에서, 사회공학의 방어 관점은 Level 0~1의 보안 습관 파트에서 다루고 있습니다.