포스트

Authentication Vulnerabilities (PortSwigger Academy) - 인증 취약점

웹 애플리케이션에서 발생하는 인증 취약점의 개념과 발생 원인에 대해 알아보자

Authentication Vulnerabilities (PortSwigger Academy) - 인증 취약점

Authentication Vulnerabilities (인증 취약점)

웹 애플리케이션에서 인증(Authentication)은 가장 기본적이면서도 중요한 보안 요소 중 하나다.

인터넷에 공개된 서비스는 누구나 접근할 수 있기 때문에,
서비스는 먼저 사용자가 누구인지 확인하는 과정을 거쳐야 한다.

문제는 이 인증 과정이 조금만 잘못 구현되어도
공격자가 다른 사용자의 계정을 탈취하거나 인증 자체를 우회할 수 있다는 점이다.

인증 취약점이 위험한 이유는 단순히 로그인 문제로 끝나지 않고
애플리케이션 전체 보안과 직접적으로 연결되기 때문이다.

공격자가 한 번 계정에 접근하게 되면 그 계정이 가진 모든 권한과 기능을 그대로 사용할 수 있기 때문이다.


Authentication이란?

Authentication(인증)은 사용자의 신원을 확인하는 과정이다.

예를 들어 사용자가 Shane123이라는 계정으로 로그인하려고 할 때
서비스는 이 사용자가 정말 그 계정의 소유자인지 확인해야 한다.

이 과정을 통해 사용자의 신원이 확인되면
그 이후에야 서비스는 해당 사용자에게 기능을 제공한다.

일반적으로 인증은 다음 세 가지 요소 중 하나 이상을 이용해 이루어진다.

Something you know

사용자가 알고 있는 정보

예시

  • 비밀번호
  • PIN
  • 보안 질문

이를 knowledge factor라고 부른다.


Something you have

사용자가 소유하고 있는 물리적 요소

예시

  • 휴대폰
  • OTP 토큰
  • 보안 키

이를 possession factor라고 한다.


Something you are

사용자의 생체 정보 또는 행동 패턴

예시

  • 지문
  • 얼굴 인식
  • 행동 패턴

이를 inherence factor라고 한다.


Authentication vs Authorization 차이가 뭘까?

웹 보안에서 자주 헷갈리는 개념이 AuthenticationAuthorization이다.

둘은 완전히 다른 단계의 과정이다.

구분의미
Authentication사용자가 누구인지 확인
Authorization해당 사용자가 무엇을 할 수 있는지 결정

예를 들어 다음과 같은 상황을 생각해보자.

사용자가 Shane123 계정으로 로그인한다.

  • Authentication → 이 사용자가 실제 Shane123인지 확인
  • Authorization → Shane123이 어떤 기능을 사용할 수 있는지 결정

예를 들어 관리자 계정이라면 다른 사용자 계정을 삭제할 수 있고
일반 사용자라면 자신의 정보만 조회할 수 있다.


인증 취약점은 어떻게 발생할까?

대부분의 인증 취약점은 크게 두 가지 이유로 발생한다.

1. 약한 인증 메커니즘

가장 흔한 문제는 brute-force 공격에 대한 보호가 부족한 경우다.

예를 들어

  • 로그인 시도 횟수 제한 없음
  • CAPTCHA 없음
  • 계정 잠금 기능 없음

이런 상황에서는 공격자가 비밀번호를 무작위로 계속 시도할 수 있다.


2. 인증 로직 구현 오류

두 번째는 인증 로직 자체의 문제다.

코드 구현 과정에서 발생한 실수나 논리 오류 때문에
공격자가 인증 절차를 아예 건너뛰는 경우도 있다.

이런 문제는 보통 Broken Authentication이라고 불린다.

예를 들어

  • 인증 검증을 제대로 하지 않는 경우
  • 특정 파라미터 조작으로 인증을 우회하는 경우
  • 비밀번호 재설정 로직이 잘못 구현된 경우

등이 여기에 해당한다.


인증 취약점이 위험한 이유

인증 취약점이 발견되면 보통 영향도가 매우 높다.

공격자가 다른 사용자의 계정을 탈취하면
그 계정이 접근할 수 있는 모든 데이터와 기능을 사용할 수 있기 때문이다.

특히 다음과 같은 상황에서는 피해 규모가 훨씬 커질 수 있다.

1. 관리자 계정 탈취

관리자 계정이 탈취될 경우

  • 사용자 계정 관리
  • 데이터 삭제
  • 시스템 설정 변경

등을 모두 수행할 수 있다.

즉 애플리케이션 전체가 공격자에게 넘어갈 수 있다.


2. 일반 계정 탈취

일반 사용자 계정이라도 위험하다.

예를 들어

  • 개인정보
  • 결제 정보
  • 내부 페이지 접근

같은 정보에 접근할 수 있다.

또한 일반 계정으로 로그인하면
외부에서 접근할 수 없는 내부 기능이 보이는 경우도 많다.

이런 페이지들은 추가 공격의 발판(entry point)이 되기도 한다.


인증 시스템에서 취약점이 발생하는 지점

웹 애플리케이션의 인증 시스템은 보통 여러 단계로 구성되어 있다.

각 단계에서 취약점이 발생할 수 있다.

대표적으로 다음과 같은 영역에서 문제가 발견된다.

1. Password 기반 로그인

  • username enumeration
  • brute-force 공격
  • weak password 정책

2. Multi-Factor Authentication (MFA)

  • 2FA 우회
  • OTP 재사용
  • 인증 단계 건너뛰기

3. 기타 인증 메커니즘

  • 비밀번호 재설정 로직
  • magic link 로그인
  • SSO / OAuth 인증

마무리

인증 취약점은 단순히 로그인 문제로 끝나지 않는다.

인증이 무너지면 공격자는 정상 사용자로 가장해 시스템 내부 기능에 접근할 수 있다.

이 때문에 인증 취약점은 대부분 High Severity로 분류된다.

다음 글에서는 실제 웹 애플리케이션에서 자주 발견되는
Password 기반 로그인 취약점들을 하나씩 살펴볼 예정이다.


출처: PortSwigger Academy

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.