← 메인으로

🧾 전자금융 보안 모의해킹 · 거래정보 무결성 검증 (전문 변조)

Target: Core Banking 이체 API
평가기준: 위험도 5 WEB-SER 거래정보 검증
💡 쉽게 말하면
송금 쪽지를 봉인 없이 보내면, 배달부가 금액을 100만 → 5천만으로 고쳐도 은행은 모릅니다. 거래정보에 봉인(전자서명·HMAC)을 붙여야 위조를 잡아냅니다.
🔓 공격 시뮬레이션 (Red Team)
🛡️ 대응 방안 (Blue Team)
계좌 이체 요청🔒 Secured Channel
사용자가 입력한 거래정보(이체금액·수취계좌)가 단말에서 서버로 전송될 때 무결성 검증(서명/HMAC) 없이 처리되면, 프록시로 가로채 이체금액을 변조해도 서버가 그대로 승인합니다.
⚡ 이체 전문(Amount) 변조
amount 10,000 → 50,000,000 변조 후 재전송
OFF
🖥️ 금융 시스템 처리 로그
[SYSTEM] Core Banking Channel ready.
[INFO] 거래 요청 대기 중...
⚖️ 컴플라이언스 위반 분석
공격 실행 후 분석 결과가 표시됩니다.
[심각] 전자금융 보안 기준 위반 감지
  • 전자금융감독규정 제34조: 거래정보의 무결성 확보 미흡
  • 평가기준 WEB/MOB/HTS-SER [전자금융] 거래정보 무결성 검증(위험도 5)
  • 예비거래↔본거래 거래정보 일치 검증 부재
🛡️ 대응 코드/설정 실습

서버는 클라이언트 입력 금액을 신뢰하지 말고, 거래정보에 대한 전자서명/HMAC 무결성 검증과 예비거래 대조를 수행해야 합니다. 아래 검증 로직을 안전하게 보완하세요.

📚 금융보안원 평가기준 / 조치 가이드

1. 점검 항목

운영 관리 > 공개서버 보안 > 거래정보 무결성 검증

2. 위험 분석

  • 이체금액·수취계좌 변조로 직접적 금전 피해
  • 유료 인증서 발급비용 변조 등 파생 악용

3. 조치 방법

  • 거래정보에 대한 전자서명/HMAC 적용 및 서버 검증
  • 예비거래와 본거래 거래정보 일치 여부 확인
  • 금액 등 핵심 값은 서버 보관 값을 기준으로 처리
🏗️ 현대 금융 IT 환경에서의 변형
API GatewayMSAmTLSKafka

어디가 달라졌나

모놀리식에서는 전문이 한 프로세스 안에서 끝났지만, MSA 에서는 api-gw → txn-orchestrator → ledger-service 처럼 여러 홉을 지납니다. 게이트웨이에서만 HMAC 을 검증하고 내부 구간은 "내부망이니까" 신뢰하는 설계가 가장 흔한 구멍입니다. 내부 서비스 하나가 SSRF 로 뚫리면 그 뒤는 검증 없이 통과합니다.

현대 스택에서의 조치

  • 서명은 종단 간(end-to-end)으로. 게이트웨이가 검증한 뒤 다시 서명해서 내부로 넘기거나, 원 서명을 그대로 전달해 최종 처리 서비스가 검증합니다.
  • 서비스 간 채널은 mTLS + SPIFFE/SPIRE 로 신원을 증명합니다. 네트워크 위치(내부망)를 신원으로 쓰지 않습니다.
  • 이벤트 기반이라면 메시지 자체에 서명합니다. Kafka 토픽에 올라간 이체 이벤트는 컨슈머가 여럿이고, 재처리도 됩니다.
// 게이트웨이 통과 후에도 최종 서비스에서 다시 검증
@PostMapping("/internal/transfer")
public void transfer(@RequestHeader("X-Txn-Signature") String sig,
                     @RequestHeader("X-Spiffe-Id") String caller,
                     @RequestBody TxnRequest req) {
    if (!allowedCallers.contains(caller))          // 누가 불렀는지
        throw new SecurityException("unknown caller");
    if (!hmacValid(sig, req.canonical()))          // 무엇을 보냈는지
        throw new SecurityException("tampered payload");
    ...
}
놓치기 쉬운 곳 — 서비스 메시(Istio)의 mTLS 는 "누가 불렀는지"만 증명합니다. 전문 내용이 바뀌지 않았음은 증명하지 못합니다. 두 가지는 대체재가 아니라 함께 써야 합니다.