각진 세상에 둥근 춤을 추자

웹 보안 강화 2단계 인증(2fa)이란? with 온프레미스, 제로트러스트 본문

보안

웹 보안 강화 2단계 인증(2fa)이란? with 온프레미스, 제로트러스트

circle.j 2025. 1. 14. 14:59

 2단계 인증 (Two-Factor Authentication, 2FA) 

2단계 인증(2FA)은 사용자의 계정 보안을 강화하기 위한 인증 방식으로, 단순히 아이디와 비밀번호를 사용하는 기존의 1단계 인증 방식보다 더 안전한 방식이다. 

 


💡 2단계 인증의 기본 원리 

 

2FA는 아래 세 가지 사항 중 두 가지를 조합하여 사용자를 인증한다.

  1. 사용자가 알고 있는 것: 비밀번호, PIN, 보안 질문의 답변 
  2. 사용자가 가지고 있는 것: 스마트폰, OTP(One-Time Password) 생성기, 보안 토큰, 카드
  3. 사용자인 것 자체: 생체 인증 (지문, 얼굴, 홍채, 음성 인식)

 


💡 2단계 인증의 흐름 

 

  1. 1차 인증: 사용자가 아이디와 비밀번호 또는 PIN을 입력하여 첫 번째 인증을 완료한다.
  2. 2차 인증: 첫 번째 인증 성공 후 추가적인 인증을 요구한다.
     (예: 휴대폰 SMS 인증 코드, TOTP 앱, 지문 또는 얼굴 인식)
  3. 접근 승인: 두 인증 모두 성공적으로 완료되면 사용자는 시스템에 접근할 수 있다.

 


💡 2단계 인증 방식

 

1) SMS/이메일 인증

  • 사용자의 휴대폰 번호나 이메일로 인증 코드를 전송하고 이를 입력해 인증한다.
  • 장점: 구현이 간단하고 추가 장치가 필요 없다.
  • 단점: SIM 스와핑, 이메일 계정 해킹 같은 공격에 취약하다.

 

2) OTP (One-Time Password)

  • TOTP(Time-based OTP) 또는 HOTP(Event-based OTP) 방식으로 앱이나 디바이스에서 생성된 일회용 비밀번호를 입력한다. (예: Google Authenticator, Authy)
  • 장점: 사용자의 디바이스에서 생성되므로 상대적으로 안전하다.
  • 단점: 앱 설치와 설정이 필요하며, 디바이스를 분실하면 복구가 어렵다. 

 

3) 생체 인증

  • 지문, 얼굴, 홍채, 음성 등 사용자의 고유한 생체 정보를 기반으로 인증한다.
  • 장점: 사용하기 편리하며 비밀번호를 따로 기억할 필요가 없다.
  • 단점: 전용 하드웨어가 필요하고 생체 정보 유출 시 복구가 불가능하다.

 

4) 물리적 보안 키

  • FIDO2 기반의 USB, NFC 또는 Bluetooth키를 사용한다.
  • 장점: 피싱 공격에 강력하며 유출 위험이 낮다.
  • 단점: 물리적 키 분실 시 복구가 어렵다. 

 


💡2단계 인증 실제 사용 사례

 

  • 구글/Gmail: 비밀번호 입력 후 TOTP 또는 SMS 인증
  • 네이버: ID/비밀번호 입력 후 앱 푸시 알림 또는 OTP 인증
  • 금융 서비스: 인터넷 뱅킹에서 공인 인증서, OTP 또는 ARS 전화 인증 

 


💡온프레미스 환경에서 2FA 구현

 

 Google Authenticator 

 

1. 독립적인 OTP 생성 

  • Google Authenticator는 서버와 통신하지 않고 로컬에서 OTP를 생성한다.
  • 서버가 제공한 비밀 키와 현재 시간을 사용해 OTP를 계산한다.

 

2. TOTP 표준 사용

  • Google Authenticatorsms TOTP라는 오픈 표준을 기반으로 동작한다.
  • 서버에서도 TOTP 알고리즘을 구현해 OTP 검증 로직을 작성할 수 있다. 

 

3. 인터넷 연결 불필요

  • 온프레미스 환경에서도 서버와 앱이 비밀 키를 공유하고 동기화된 시간만 맞추면 2FA를 수행할 수 있다. 

 

4. 온프레미스 환경에서 2FA 구현 흐름 

(1) 서버 측 

  • 사용자 등록 시 비밀 키(SecretKey)를 생성
  • QR 코드로 변환하여 사용자에게 제공한다. 
  • 비밀 키를 안전하게 암호화하여 DB에 저장한다.

(2) 사용자 인증 흐름

  • 사용자가 로그인 시 1차 인증(아이디/비밀번호)을 수행한다.
  • 1차 인증 성공 후, Google Authenticator 앱에서 생성한 OTP를 입력하도록 요청한다. 
  • 서버는 입력된 OTP를 검증하고 인증 완료 여부를 결정한다. 

(3) 필요한 구현 로직

  • Java 라이브러리 (예: java-totp, GoogleAuthenticator)을 사용해 TOTP 검증 로직을 작성한다. 

 

 

 SMS 기반 2FA  

 

1. SMS 전송 방식

  • SMS 전송은 로컬 SMS 게이트웨이를 사용하거나 외부 SMS API 서비스를 활용할 수 있다. 

 

2. SMS 게이트웨이 사용

  • SMS 게이트웨이는 로컬 네트워크 안에 설치된 장비나 소프트웨어로 SIM 카드나 모뎀을 통해 문자 메시지를 전송한다.

 

3. OTP 생성 및 검증

  • 서버에서 SMS로 보낼 OTP를 생성한다. (TOTP 또는 랜덤 숫자 기반)
  • 서버가 생성한 OTP를 SMS로 전송하고 사용자 입력값과 비교해 인증을 처리한다. 

 

4. 온프레미스 환경에서 2FA 구현 흐름 

(1) 사용자 로그인 요청

  • 사용자가 아이디와 비밀번호를 입력하여 로그인을 요청한다.
  • 1차 인증(아이디/비밀번호 검증)이 성공하면 서버는 2차 인증 단계를 진행한다.

(2) 2차 인증 코드 생성 및 전송

  • 서버에서 6자리 랜덤 숫자나 TOTP기반 OTP를 생성한다.
  • 생성된 인증 코드를 SMS로 사용자에게 전송한다.

(3) 사용자 입력 및 검증

  • 사용자는 SMS로 받은 인증 코드를 2차 인증 페이지에 입력한다.
  • 서버는 입력된 코드와 저장된 코드(또는 생성된 코드의 해시값)를 비교해 일치 여부를 확인한다. 

(4) 인증 성공 및 최종 처리

  • OTP 검증 성공 시 사용자 인증을 완료하고 SecruityContextHolder에 인증 상태를 저장한다.
  • 인증 실패 시 재시도 요청 또는 계정 잠금 처리한다. 

 


💡제로트러스트 기반의 2FA 

제로트러스트의 개념은 기존의 경계 기반 보안과 달리, 접근 주체에 대하여 네트워크 혹은 물리적 위치만으로 신뢰를 부여하지 않는 것으로부터 출발한다. [출처: 제로트러스트 가이드라인 2.0]

 

💡제로트러스트 아키텍처 기본 원리 

  • 모든 종류의 접근에 대해 신뢰하지 않을 것 
  • 일관되고 중앙집중적인 정책 관리 및 접근 제어 결정, 실행 필요 
  • 사용자, 기기에 대한 관리 및 강력한 인증
  • 리소스 분류 및 관리를 통한 세밀한 접근 제어 (최소 권한 부여)
  • 논리 경계 생성 및 세션 단위 접근 허용, 통신 보호 기술 적용
  • 모든 상태에 대한 모니터링, 로그 및 이를 통한 신뢰성 지속적 검증, 제어 

 

[출처: 제로트러스트 가이드라인 2.0]

 

 

💡기존 인증 방식: SMS 기반 MFA

1. 보안 취약점 

  • SIM 스와핑 공격: 공격자가 피해자의 통신사를 통해 SIM 정보를 가로채 문자 메시지 수신
  • SMS 스니핑: SMS는 암호화되지 않으므로 네트워크 가로채기 공격에 취약
  • 중간자 공격 (MITM): 악의적인 네트워크에서 가로채기 가능 

2. 단일 요소 의존

  • SMS 방식은 단순히 사용자 소유의 디바이스(SIM 카드)만 검증 

3. 실시간 대응 부족

  • SMS 방식은 비정상적인 로그인 시도를 실시간으로 탐지하거나 대응하기 어려움 

4. 제한된 사용성

  • SMS 전송 실패 가능성 (예: 통신사 이슈, 국제 SMS 전송 문제)이 존재 

 

💡초기 인증 방식: 인증 앱, 하드웨어 토큰 등 다양한 MFA 구현 

1. Google Authenticator, Authy 인증 앱

  • TOTP(Time-based One-Time password)를 기반으로 동작
  • SMS보다 보안성이 높고 서버와 인터넷 연결이 필요 없음

2. 하드웨어 토큰

  • 물리적 토큰을 기반으로 추가 인증 수행
  • 피싱, 크리덴셜 스터핑 공격에 강력 

 

💡향상 인증 방식: 상황에 따른 맞춤형 MFA

1. 컨텍스트 기반 인증

  • 단말 위치, 네트워크 상태, 접속 시간 등을 분석해 적합한 인증 방식을 선택

    (예: 새로운 지역이나 디바이스에서 접근하면 FIDO 기반 MFA 요구)

2. 행동 분석

  • 사용자의 일반적인 로그인 패턴과 다른 행동을 탐지해 추가 인증 요구 

 

💡최적화 방식: 비정상적 로그인 시도 탐지 및 실시간 대응

1. 실시간 위협 탐지 및 대응

  • AI/ML 기반으로 비정상적인 접근 시도를 실시간 탐지
  • 의심스러운 접근이 감지되면 계정 잠금, 알림, 맞춤형 MFA 요구 

 


💡제로트러스트 + 온프레미스 환경 동작 2FA 인증 구현 방식 

 

1. 1차 인증: 사용자 아이디와 비밀번호

  • Spring Security를 사용해 기본 로그인 로직 구현 
  • UsernamePasswordAuthenticationFilterAuthenticationManager를 활용해 비밀번호를 검증

 

2. 2차 인증: 컨텍스트 기반 MFA

(1) FIDO 기반 인증

  • WenAuthn 연동: 사용자 등록 시 FIDO 공개키를 저장, 로그인 시 클라이언트가 개인키로 서명한 데이터 검증 

(2) 컨텍스트 기반 MFA

  • 사용자의 IP, 디바이스, 브라우저 정보를 저장하고 새로운 환경에서 로그인 시 추가 인증 요구 
  • HttpServletRequest로 IP와 User-Agent 정보를 검출 

(3) 행동 기반 분석

  • 사용자 로그인 패턴(시간, 위치 등)을 학습하고, 이상 행동 탐지 시 MFA 요구
  • 평소 로그인하지 않는 시간대에 로그인 시도 시 추가 인증 요구 
  • 사용자의 평균 로그인 시간 저장 (사용자가 로그인할 때마다 로그인 시간 데이터를 DB에 기록)

 

3. 인증 상태 관리

인증 상태를 단계별로 관리 (1차 인증 완료: PARTIAL -> 2차 인증 완료: FULLY_AUTHENTICATED)

 

 

 

 

 

 

 

 

 


참고

1. https://guide.jinbo.net/digital-security-2024/2024-%EB%94%94%EC%A7%80%ED%84%B8-%EB%B3%B4%EC%95%88-%EA%B0%80%EC%9D%B4%EB%93%9C/75-2/2-2-2%EB%8B%A8%EA%B3%84-%EC%9D%B8%EC%A6%9D%EA%B3%BC-%ED%8C%A8%EC%8A%A4%ED%82%A4/

 

2. 2단계 인증과 패스키 – 2024 디지털 보안 가이드

계정명과 비밀번호만으로 로그인할 수 있게 하는 방식과 달리, 2단계 인증(2-Factor Authentication, 2FA) 방식은 로그인을 하기 위해 비밀번호 이외의 다른 수단, 이를테면 어떤 물리적인 장치를 보유하

guide.jinbo.net

2. https://www.kisa.or.kr/2060204/form?postSeq=18&page=1#fnPostAttachDownload