🔑 전자금융 보안 모의해킹 · 거래 비밀번호 변경 보안
Target: 거래 비밀번호 변경 API
평가기준: 위험도 4 WEB-FIN 비밀번호 변경
평가기준: 위험도 4 WEB-FIN 비밀번호 변경
💡 쉽게 말하면
현관 비밀번호를 바꾸려면 먼저 지금 비밀번호를 한 번 더 눌러 본인임을 증명해야 합니다. 또 새 번호를 예전과 똑같이 설정하면 바꾼 의미가 없으니 막아야 합니다.
현관 비밀번호를 바꾸려면 먼저 지금 비밀번호를 한 번 더 눌러 본인임을 증명해야 합니다. 또 새 번호를 예전과 똑같이 설정하면 바꾼 의미가 없으니 막아야 합니다.
🔓 공격 시뮬레이션 (Red Team)
🛡️ 대응 방안 (Blue Team)
거래 비밀번호 변경 요청🔒 Secured Channel
거래 비밀번호 변경 시 본인확인 절차(현재 비밀번호 재입력 등)가 생략되거나, 변경 시 이전 비밀번호 재사용이 허용되면, 세션 탈취 공격자가 본인 인증 없이 비밀번호를 바꾸거나 사실상 동일한 값으로 되돌려 계정을 장악할 수 있습니다.
⚡ 본인확인 생략 + 이전 비밀번호 재사용
currentPassword 미검증, 직전 값 그대로 재설정
currentPassword 미검증, 직전 값 그대로 재설정
OFF
🖥️ 금융 시스템 처리 로그
[SYSTEM] Core Banking Channel ready.
[INFO] 거래 요청 대기 중...
⚖️ 컴플라이언스 위반 분석
공격 실행 후 분석 결과가 표시됩니다.
[심각] 전자금융 보안 기준 위반 감지
- 평가기준 WEB-FIN [전자금융] 비밀번호 변경 시 본인확인(위험도 4)
- 비밀번호 변경 시 이전 비밀번호 재사용 방지 미흡
- 전자금융감독규정 제34조: 이용자 인증정보 관리대책 미흡
🛡️ 대응 코드/설정 실습
서버는 비밀번호 변경 시 현재 비밀번호로 본인확인을 강제하고, 새 비밀번호가 이전 비밀번호와 동일/유사하지 않은지 검증해야 합니다. 아래 코드를 보완하세요.
📚 금융보안원 평가기준 / 조치 가이드
1. 점검 항목
이용자 인증정보 관리 > 비밀번호 변경 보안2. 위험 분석
- 본인확인 생략 시 세션 탈취만으로 비밀번호 변경 가능
- 이전 비밀번호 재사용 시 사실상 비밀번호 변경 효과 무력화
3. 조치 방법
- 변경 시 현재 비밀번호 재입력 등 본인확인 절차 수행
- 이전 비밀번호(최근 N개) 재사용 방지 정책 적용
- 변경 이력·실패횟수 모니터링
🏗️ 현대 금융 IT 환경에서의 변형
재인증세션 폐기Argon2id
어디가 달라졌나
비밀번호 변경은 계정 탈취의 마지막 단계입니다. 공격자가 세션을 잡은 뒤 비밀번호를 바꿔 정당한 소유자를 밀어내는 흐름이라, “변경 기능의 보안”은 곧 탈취 복구 가능성의 문제입니다.
현대 스택에서의 조치
- 변경 시 현재 비밀번호 재확인(step-up). 세션이 있다는 사실만으로 허용하지 않습니다.
- 변경 성공 시 다른 모든 세션·토큰을 폐기하고 등록된 연락처로 알림을 보냅니다. 알림은 되돌릴 기회를 줍니다.
- 저장은 Argon2id(또는 bcrypt) 로. 금융권 레거시에 아직 남아 있는
SHA-256(salt+pw)는 GPU 공격에 약합니다.
// 변경 = 재인증 + 전 세션 폐기 + 알림, 셋이 한 묶음 requireRecentAuth(session, Duration.ofMinutes(5)); userRepo.updatePassword(userId, argon2.hash(newPw)); tokenStore.revokeAllForUser(userId); notifier.send(user.email(), "비밀번호가 변경되었습니다");
놓치기 쉬운 곳 — 변경 직후 자기 세션까지 끊어 버리면 사용자가 당황합니다.
현재 세션은 새 토큰으로 교체하고 나머지만 폐기하는 것이 올바른 동작입니다.