attack-protection

Auth0 Attack Protection

Auth0에서 공격을 탐지하고, 특정 IP의 트래픽을 차단하거나 CAPTCHA를 표시하는 방식으로 앱에 대한 악의적인 접근을 막을 수 있어요. Auth0 Dashboard에서 공격 보호(Bot Detection, Suspicious IP Throttling, Brute Force Protection, Breached Password Detection)를 활성화하고, 공격이 의심되는 로그인 시도를 차단·모니터링하는 방식으로 보안을 강화해요. 악용 대응에는 만능 해법이 없으므로, 다양한 신호를 이용한 다층 보호(layered protection) 원칙을 따르고 있어요.

출처: 문서

본문

개요

Auth0 Dashboard에서 다음 공격 보호 옵션을 활성화해서 공격을 완화할 수 있어요.

어떻게 작동하나요? (How it works)

악용 대응에는 만능 해법이 없어요. Auth0는 다양한 신호를 이용해 공격을 탐지하고 완화하는 다층 보호 원칙을 지지해요.

기능 위험 신호 작동 방식
Bot Detection 각 IP에서 본 트래픽 품질을 분석해 계산한 IP 평판(IP reputation) 봇이 사용할 것으로 의심되는 IP에서 로그인 시도를 하면 CAPTCHA 단계를 트리거해요.
Suspicious IP Throttling 테넌트의 여러 계정을 대상으로 하는 IP의 로그인 시도 속도(velocity) 봇/스크립트가 짧은 시간 안에 지나치게 많은 식별자/비밀번호 조합을 시도하는 것을 탐지해요.
Brute-force Protection 특정 계정을 대상으로 하는 IP의 로그인 시도 속도(velocity) 나쁜 행위자가 일정 기간 동안 특정 계정에 지나치게 많이 로그인을 시도하는 것을 탐지해요.
Breached Password Detection 다크웹의 유출 비밀번호 목록에 나타난 유출 비밀번호 사용 일부 제3자 사이트에서 유출된 것으로 알려진 비밀번호를 사용자들이 쓰지 못하도록 해요.

알림 (Notification)

공격이 발생하면 로그인 횟수와 관계없이 사용자에게 시간당 한 번씩 이메일 알림을 보내요. 예를 들어 사용자가 1시간 30분 동안 200번 로그인을 시도했다면 이메일을 2통 보내요. 비밀번호 재설정 링크는 5일간 유효해요. 사용자에게 보내는 이메일은 커스터마이징할 수 있어요.

블록을 초기화한 뒤 다시 공격이 발생하면 또 다른 이메일을 보내요.

진행 중인 공격이 발생하면 한 번에 수천 개의 IP에서 트래픽이 차단될 수 있어요. Auth0는 트래픽이 차단되는 동안 공격에 연루된 IP 개수와 관계없이 관리자에게 시간당 한 통의 이메일을 보내요.

모니터링 (Monitoring)

공격 보호 기능을 활성화했지만 응답 설정을 구성하지 않으면 모니터링 모드(Monitoring mode)로 작동해요. 이 경우 관련 이벤트가 테넌트 로그에만 기록돼요. 테넌트 로그에는 로그인이 위험하다고 판단됐는지 여부가 담겨 있어서, 응답을 구성할지 결정하는 데 활용할 수 있어요.

보고 (Reporting)

테넌트 로그 데이터로 보고서를 만들어 공격 보호 이벤트를 확인할 수도 있어요.

Bot Detection

Bot Detection은 봇에서 온 것일 가능성이 높은 요청을 탐지해 스크립트 기반 공격을 완화해요. 이런 공격을 크레덴셜 스터핑(credential stuffing) 또는 목록 검증(list validation) 공격이라고도 불러요. 기본적인 봇 감지 응답은 Auth Challenge인데, CAPTCHA 없이 사용자를 검증하는 방식이에요.

Auth0는 대량의 데이터와 통계 모델을 사용해서 로그인·가입·비밀번호 재설정 트래픽의 폭발이 봇이나 스크립트에서 온 것임을 알려주는 패턴을 식별해요. 크레덴셜 스터핑 공격일 가능성이 높은 IP 주소에서 로그인·계정 생성·비밀번호 재설정을 시도하는 사용자에게는 추가 검증 단계를 요구해요. 이 트리거는 정상 사용자에게 불필요한 마찰을 주지 않으면서도 해당 공격 트래픽을 탐지해요.

Bot Detection 구성하기

Auth0는 모든 커넥션에 대해 Bot Detection을 기본으로 활성화해요. 활성화 상태에서 Response 설정을 구성하지 않으면 모니터링 모드로 작동하며, 위험 평가 정보가 포함된 관련 이벤트를 테넌트 로그에 기록해요.

Dashboard > Security > Attack Protection에서 Bot Detection을 선택하면 설정할 수 있어요.

  • Detection 섹션에서 토글을 활성화해요.
  • Response 섹션에서 봇 감지 응답을 선택해요. Auth Challenge 사용 시 Fail open 토글은 기본으로 비활성화돼요.
  • 비밀번호 플로우·비밀번호리스 플로우·비밀번호 재설정 플로우에 CAPTCHA를 언제 요구할지 선택해요.
    • Never: 로그인을 위해 CAPTCHA를 절대 요구하지 않아요.
    • When Risky: 로그인이 Bot Detection Level 설정과 일치할 때만 CAPTCHA를 요구해요.
    • Always: 로그인을 위해 항상 CAPTCHA를 요구해요.
  • When Risky 또는 Always를 선택하면 Response 섹션에 CAPTCHA Providers 필드가 나타나요. Auth Challenge(Auth0 제공), Simple CAPTCHA(Auth0 제공), 또는 지원되는 제3자 공급자 통합(외부 설정·등록 필요) 중 하나를 선택해요.
  • 로그인 경험이 JavaScript를 지원하지 않는다면 Simple CAPTCHA를 선택해야 해요. Simple CAPTCHA 이미지는 화면 판독기로 읽을 수 없어요.
  • When Risky를 선택하면 Bot Detection Level 필드가 나타나요. 비즈니스 요구에 맞는 보안 수준을 선택해요.
    • Low: 봇 활동 가능성이 높을 때만 CAPTCHA를 트리거하므로 실제 사용자에게 비교적 마찰이 적어요.
    • Medium: 기본값. 봇 활동 가능성이 중간일 때 CAPTCHA를 트리거해 보안과 사용자 경험의 균형을 맞춰요.
    • High: 봇 활동 가능성이 낮을 때조차 CAPTCHA를 트리거해 보안은 강화되지만 실제 사용자에게 마찰이 커질 수 있어요.

신뢰할 수 있는 IP가 Bot Detection을 우회하게 하기

IP AllowList 필드에 최대 100개의 개별 IP와/또는 CIDR 범위(IPv4 또는 IPv6)를 추가하면 Bot Detection을 우회하도록 허용할 수 있어요. 이 목록에 있는 IP 주소나 CIDR 범위에 대해서는 Auth0가 차단을 강제하지 않고 알림도 보내지 않아요.

Dashboard > Security > Attack Protection에서 Bot Detection을 선택하고, IP AllowList 필드에 IP 주소와/또는 CIDR 범위를 입력한 뒤 여러 주소/범위를 쉼표로 구분해요.

제한 사항

  • Bot Detection은 Auth0 Universal Login을 사용하는 웹·모바일 앱에서 작동해요. Universal Login을 사용하지 않는 앱은 지원 수준이 제한적이에요.
  • 커넥션 유형에 따라 제한이 달라요. Database, Custom database, Active Directory/LDAP, Passwordless는 호환 로그인 플로우를 사용하면 지원되지만, Enterprise와 Social Login은 지원되지 않아요.
  • 커스텀 로그인 페이지나 네이티브 앱을 만들 때는 Auth0.js 커스텀 로그인 페이지 코드가 사용자에게 CAPTCHA 단계를 요구하는 상황을 처리하도록 해야 해요.

Suspicious IP Throttling

너무 많은 로그인이나 가입을 빠르게 시도하는 IP 주소의 트래픽을 차단해요. 여러 계정을 대상으로 하는 고속(high-velocity) 공격으로부터 앱을 보호하는 데 도움을 줘요. Auth0 테넌트를 만들면 기본으로 활성화돼요.

Auth0가 특정 IP에서 많은 가입 시도나 실패한 로그인 시도를 감지하면, 해당 IP가 더 이상 제한되지 않을 때까지 이후 시도에 HTTP 429 Too Many Requests 상태 코드로 응답해요.

Suspicious IP Throttling 구성하기

Auth0 Dashboard 또는 Auth0 Management API로 구성할 수 있어요.

  1. Dashboard > Security > Attack Protection에서 Suspicious IP Throttling을 선택해요.
  2. 페이지 상단의 토글로 Suspicious IP Throttling을 활성화/비활성화해요.

신뢰할 수 있는 IP가 제한 한도를 초과하도록 허용하기

IP AllowList에 최대 100개의 개별 IP 및/또는 CIDR 범위(IPv4 또는 IPv6)를 추가하면 Suspicious IP Throttling에서 제외할 수 있어요. 이 IP들이 제한 한도를 초과해도 Auth0는 차단하거나 테넌트 관리자에게 알리지 않아요.

  1. Dashboard > Security > Attack Protection에서 Suspicious IP Throttling을 선택해요.
  2. IP AllowList 필드에 무제한 로그인·가입 시도를 허용할 IP 주소 및/또는 CIDR 범위를 입력하고, 여러 값을 쉼표로 구분해요.

응답 구성하기

기본적으로 IP가 의심스러운 것으로 표시되면 Auth0가 테넌트 관리자에게 이메일을 보내요. 고속 로그인·가입 시도에 대한 응답을 구성할 수 있어요.

  1. Dashboard > Security > Attack Protection에서 Suspicious IP Throttling을 선택해요.
  2. Response 섹션을 찾아요.
  3. Block Settings 섹션에서 Limit high-velocity traffic targeting too many accounts를 활성화해서 로그인·가입 임계값을 초과하는 IP의 트래픽을 제한해요.
  4. Notifications 섹션에서 Send notification to account administrator를 활성화해서 IP가 로그인·가입 임계값을 초과할 때 테넌트 관리자에게 이메일을 자동으로 보내요.
  5. Save를 선택해요.

제한 한도와 속도 구성하기

  • 특정 IP에서 허용되는 최대 실패 로그인·가입 시도 횟수
  • 제한된 IP가 새 로그인·가입 시도를 허용하는 속도

를 변경할 수 있어요.

  1. Dashboard > Security > Attack Protection에서 Suspicious IP Throttling을 선택해요.
  2. Detection 섹션을 찾아요.
  3. Suspicious IP Thresholds에서 Custom을 선택해요.
  4. Login Threshold 설정을 구성해요.
    • Maximum Attempts: 하루 동안 한 IP가 Auth0가 다음 시도를 차단하기 전까지 만들 수 있는 실패 로그인 시도 횟수
    • Throttling Rate: 새 로그인 토큰을 부여하는 속도
  5. Signup Threshold 설정을 구성해요.
    • Maximum Attempts: 1분 동안 한 IP가 Auth0가 다음 시도를 차단하기 전까지 만들 수 있는 가입 시도 횟수
    • Throttling Rate: 새 가입 토큰을 부여하는 속도
  6. Save를 선택해요.

Suspicious IP throttling 작동 방식

Auth0는 로그인과 가입 시도를 각각 별도로 집계하고 허용해요. 로그인 시도가 중단된 IP라도 가입은 시도할 수 있고, 가입 시도가 중단된 IP라도 로그인은 시도할 수 있어요.

  • 로그인 시도: 하루에 너무 많은 로그인을 시도하고 실패한 IP를 제한해요. 로그인 제한 속도는 24시간 동안 IP에 균등하게 부여되는 로그인 시도 수를 결정해요. 예를 들어 속도가 100이면 약 15분마다 새 시도가 부여돼요.
  • 가입 시도: 1분 동안 너무 많은 총 가입을 시도한 IP를 제한해요. 예를 들어 IP가 50회 가입을 시도하면 추가 시도를 차단해요. 로그인과 달리 가입 시도는 실패일 필요가 없어요. 가입 제한 속도는 24시간 동안 IP에 균등하게 부여되는 가입 시도 수를 결정해요. 예를 들어 속도가 72,000이면 약 1초마다 새 시도가 부여돼요.
  • 잘못된 형식의 요청과 스키마 검증 오류: 올바른 구조나 형식을 따르지 않는 로그인·가입 요청은 유효한 시도로 간주되지 않아 구성된 임계값에 포함되지 않아요.

특별한 경우

  • 앱 백엔드에서 Password Grant 사용: 이 호출은 사용자의 IP 주소를 얻지 못해요. Suspicious IP throttling이 제대로 작동하도록 요청의 일부로 사용자의 IP 주소를 보내도록 앱을 구성할 수 있어요.
  • 같은 IP에서 많은 사용자 인증: 프록시 뒤의 사용자는 설정된 한도에 도달해 제한이 트리거될 가능성이 더 높아요. 프록시의 IP와 CIDR 범위에 대한 AllowList를 구성하면 잘못된 제한 트리거를 피할 수 있어요.

Brute-force Protection

단일 IP 주소에서 사용자 계정에 대한 여러 번의 실패한 로그인 시도에 Auth0가 어떻게 대응할지 결정해요. Brute-force protection은 다음을 수행하도록 구성할 수 있어요.

  • 시작된 IP 주소가 해당 사용자로 로그인하지 못하도록 차단
  • 해당 사용자에 대한 모든 로그인 시도 방지
  • 이메일 또는 SMS로 사용자에게 알림

기본적으로 Auth0 테넌트를 만들면 brute-force protection이 활성화돼요. 테넌트 관리자를 포함한 모든 사용자에게 적용돼요. 커넥션에서 brute-force protection을 계속 활성화하고, 다른 관리자 계정을 차단 해제할 수 있도록 보조 테넌트 관리자를 두는 것을 강력히 권장해요.

Brute-force protection 구성하기

Dashboard > Security > Attack Protection > Brute-force Protection에서 활성화·커스터마이즈·비활성화할 수 있어요.

  • 페이지 상단의 토글은 brute-force protection을 활성화/비활성화해요. 현재 상태는 Enabled/Disabled 상태 표시기에 표시돼요.
  • Detection 섹션에는 brute force 임계값과 IP AllowList 설정이 있어요.
  • Response 섹션에는 차단 설정과 알림 설정이 있어요.
  • Brute-force protection을 활성화했지만 모든 응답 설정을 비활성화하면 상태 표시기가 Monitoring으로 바뀌고, Auth0는 테넌트 로그에 공격 보호 이벤트를 기록하되 추가 조치는 취하지 않아요.

Brute force 임계값

특정 사용자 식별자에 대해 단일 IP에서 brute-force protection이 트리거되기 전까지 허용되는 잘못된 로그인 시도 횟수예요.

  • Default: brute force 임계값을 10으로 설정해요.
  • Custom: brute force 임계값을 1에서 100 사이 값으로 설정할 수 있어요.

임계값을 충족하는 실패한 로그인 시도 처리를 완료한 직후 선택한 공격 완화 보호가 적용돼요. Auth0 SDK의 비동기 메서드를 사용하면 사용자 식별자가 구성된 임계값보다 더 많은 인증 요청을 앱에 연속 제출할 수 있어요. 하지만 요청이 brute force 임계값에 도달하면 이후 해당 사용자 식별자의 요청에는 HTTP 429 too_many_attempts 오류로 응답해요.

IP AllowList

CIDR 표기법의 IPv4 또는 IPv6 주소/범위를 쉼표로 구분한 목록이에요. IP AllowList에 있는 IP 주소에서 발생한 로그인 시도는 brute-force protection이 적용되지 않아요. 프록시 뒤의 사용자처럼 신뢰할 수 있는 IP 주소나 범위를 지정할 때 사용할 수 있어요.

차단 설정 (Block settings)

Brute-force 감지가 트리거됐을 때 특정 사용자 계정에 대한 추가 로그인 시도를 차단할지, 어떻게 차단할지 결정해요.

  • Block Brute-force Logins: brute-force protection을 트리거한 IP 주소에서 해당 사용자 식별자에 대한 추가 로그인 시도를 차단해요. 기본으로 활성화돼요.
  • Account Lockout: 해당 사용자 식별자에 대한 모든 로그인 시도를 차단해요. 기본으로 비활성화돼요.

알림 (Notifications)

Send notifications to the affected users가 활성화되면 계정이 차단됐을 때 사용자에게 SMS 또는 이메일 알림을 보내요. 사용자가 로그인 플로우에서 전화 식별자를 사용하면 SMS를 보내며, SMS 알림은 식별자당 시간당 최대 1회로 제한돼요. 계정에 이메일 주소가 연결돼 있으면 이메일을 보내며, 이메일 알림은 고유 IP 주소당 시간당 최대 1회로 제한돼요. 기본적으로 차단 계정 이메일 알림에는 사용자가 계정을 차단 해제할 수 있는 링크가 포함돼요.

Brute-force protection 차단 해제하기

Brute-force protection 차단은 다음 중 하나가 발생할 때까지 유지돼요.

  • 마지막 실패한 로그인 시도로부터 30일이 경과
  • 관리자가 Management API로 다음 엔드포인트 중 하나를 사용해 차단 해제
  • 관리자가 brute force 임계값을 상향
  • 구성된 경우 영향을 받은 사용자가 이메일 알림의 차단 해제 링크를 선택
  • 영향을 받은 사용자가 비밀번호를 변경. 계정이 OTP 계정·데이터베이스 계정처럼 여러 커넥션 유형으로 연결돼 있다면 모든 연결 계정에서 비밀번호를 변경해야 차단이 해제돼요.

Breached Password Detection

다크웹의 유출 비밀번호 목록에 나타난 비밀번호를 사용자가 사용하지 못하도록 막는 기능이에요. 유출된 것으로 알려진 비밀번호는 사용이 중단되므로, 일부 제3자 사이트에서 유출된 비밀번호를 지속해서 쓰는 위험을 줄여줘요.

더 알아보기 (Learn more)