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 차이가 뭘까?
웹 보안에서 자주 헷갈리는 개념이 Authentication과 Authorization이다.
둘은 완전히 다른 단계의 과정이다.
| 구분 | 의미 |
|---|---|
| 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 기반 로그인 취약점들을 하나씩 살펴볼 예정이다.