속도 제한과 계정 잠금 방어
무차별 대입 공격을 실제로 어렵게 만드는 서버 측 및 프로토콜 수준의 방어를 살펴봅니다.
속도 제한과 계정 잠금 방어은(는) CoddyKit의 무료 Cryptology Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cryptology Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cryptology Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
온라인 vs 오프라인 브루트 포스
온라인 무차별 대입 공격은 네트워크를 통해 실제 시스템에 대해 인증을 시도합니다. 각 시도는 최소 한 번의 왕복(round-trip)을 필요로 하며 (일반적으로 50-500ms), 이로 인해 공격자는 기껏해야 분당 수천 번의 시도로 제한됩니다. 이는 오프라인 해시 크래킹보다 훨씬 더 느립니다. 속도 제한(rate limiting) 및 계정 잠금(account lockout)은 이러한 한계를 이용하여 현실적인 시간 내에는 온라인 무차별 대입 공격을 사실상 불가능하게 만듭니다.
N회 로그인 실패 시 계정 잠금
온라인 무차별 대입 공격에 대한 가장 간단한 방어책은 정의된 횟수(일반적으로 5회에서 10회)의 연속된 로그인 시도 실패 후 계정을 잠그는 것입니다. 계정은 고정된 기간(예: 15분) 동안 잠기거나, 관리자가 수동으로 잠금을 해제할 때까지 잠긴 상태로 유지될 수 있습니다. 계정 잠금은 온라인 무차별 대입 공격을 비밀번호 크래킹 시도에서 계정 가용성에 대한 고갈 공격으로 전환시킵니다.
계정 잠금으로 인한 서비스 거부 위험
계정 잠금은 서비스 거부(DoS) 취약점을 발생시킵니다. 유효한 사용자 이름을 아는 공격자는 각 계정당 5번의 로그인 시도 실패를 보내 모든 계정을 잠글 수 있습니다. 이는 계정 잠금 정책에 내재된 트레이드오프입니다. 일부 시스템은 DoS 영향을 줄이기 위해 영구 잠금 대신 임시 잠금(5분)을 사용합니다. 다른 시스템들은 계정을 아예 잠그지 않고, 대신 DoS를 유발하지 않으면서 공격자의 속도를 늦추기 위해 지수 백오프(exponential backoff)를 사용합니다.
봇 방지용 CAPTCHA
CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart)는 사람에게는 쉽지만 자동화된 봇에게는 어려운 시각적 또는 청각적 챌린지를 해결하도록 요구합니다. Google reCAPTCHA v3는 명시적인 챌린지 대신 행동 분석을 사용하여 마우스 움직임, 타이밍, 그리고 브라우징 기록을 기반으로 위험 점수를 부여합니다. CAPTCHA는 계정을 잠그지 않고도 자동화된 무차별 대입 공격을 크게 늦춥니다.
실패 시도 지수 백오프
지수 백오프는 로그인 시도 실패 시 허용된 로그인 시도 사이의 대기 시간을 늘립니다. 첫 번째 실패 후 1초, 두 번째 실패 후 2초, 세 번째 실패 후 4초와 같이 계속 증가합니다. 10번 실패하면 대기 시간은 17분 이상으로 늘어납니다. 이는 계정을 완전히 잠그지 않으면서 무차별 대입 공격을 극도로 느리게 만들어, 서비스 거부(DoS) 위험을 피하면서도 자동화된 공격을 효과적으로 저지할 수 있습니다.
IP 기반 Rate Limiting
IP 기반 Rate Limiting은 단위 시간당 실패 횟수 임계값을 초과하는 IP 주소로부터의 로그인 시도를 차단하거나 추가 인증을 요구합니다. 만약 특정 IP에서 1분 안에 50번의 로그인 실패가 발생하면, 해당 IP로부터의 추가 시도는 한 시간 동안 차단됩니다. 수천 개의 다른 IP 주소를 사용하는 봇넷을 이용한 분산 공격은 단순한 IP별 제한을 회피할 수 있으며, 이러한 공격에는 여러 신호를 활용하는 더욱 정교한 속도 감지(velocity detection)가 필요합니다.
무차별 대입 방지 TOTP
시간 기반 일회용 비밀번호(TOTP, Google Authenticator 및 유사 앱에서 사용)는 30초 동안 유효한 6자리 코드를 생성합니다. 공격자가 올바른 비밀번호를 무차별 대입하여 알아낸다 해도, 현재 TOTP 코드도 필요합니다. 가능한 6자리 코드가 100만 개에 불과하고 유효 시간이 30초이므로, TOTP 무차별 대입 공격의 실제 유효 시간은 매우 짧습니다. MFA(다단계 인증)는 비밀번호 무차별 대입 공격을 실질적인 공격 벡터에서 효과적으로 제거합니다.
bcrypt 워크 팩터, 해시 연산 지연
bcrypt는 설정 가능한 cost factor를 가진 비밀번호 해싱 함수입니다. cost 10일 때, bcrypt는 하나의 비밀번호를 해싱하는 데 약 100ms가 걸립니다. cost 12일 때는 약 400ms가 걸립니다. 이는 bcrypt 해시를 오프라인으로 크래킹하는 공격자가 GPU를 사용하더라도 초당 최대 수백 개의 비밀번호만 테스트할 수 있음을 의미합니다. MD5의 경우 초당 수십억 개를 테스트할 수 있는 것과 비교하면 현저히 적은 수치입니다. 하드웨어 성능이 향상됨에 따라 일정한 크래킹 난이도를 유지하기 위해 work factor를 증가시킬 수 있습니다.
Argon2 메모리 집약성
Argon2는 2015년 Password Hashing Competition에서 우승했으며 새로운 시스템에 대한 현재 권장 사항입니다. 주요 특징은 메모리 경화성(memory hardness)입니다. 계산에 구성 가능한 양의 RAM(일반적으로 64MB에서 1GB)을 필요로 합니다. 이는 GPU 및 ASIC 가속화를 방지합니다. 이러한 장치들은 메모리 대역폭이 제한적이기 때문입니다. 수천 개의 병렬 bcrypt 계산을 실행할 수 있는 GPU를 가진 공격자도 메모리 제약 때문에 소수의 Argon2 계산만 실행할 수 있습니다.
크리덴셜 스터핑 WAF 규칙
WAF는 실패한 로그인 트래픽에서 특정 패턴을 식별하여 크리덴셜 스터핑을 탐지합니다. 이러한 패턴에는 단일 IP에서 발생하는 대량의 시도, 일반적인 사용자 이름 목록을 사용한 시도, 비정상적인 로그인 시도 지역 분포, 그리고 자동화된 도구와 일치하는 시간 패턴 등이 있습니다. WAF 규칙은 의심스러운 트래픽이 애플리케이션에 도달하기 전에 이를 차단하거나, 챌린지를 요구하거나, 속도를 늦출 수 있습니다. 최신 WAF는 알려진 봇넷 IP 범위에 대한 위협 인텔리전스 피드를 통합합니다.
HIBP API로 유출 비밀번호 확인
비밀번호 변경 흐름에 Have I Been Pwned API를 연동하면, 사용자들이 알려진 유출 데이터베이스에 있는 비밀번호를 설정하는 것을 방지할 수 있습니다. 이 API는 k-익명성을 사용하여 SHA-1 해시의 처음 5자리 16진수 문자만 전송합니다. 이는 사용자 프라이버시를 보호하면서 8억 5천만 개에 달하는 알려진 유출 비밀번호와 일치하는지 확인할 수 있도록 해줍니다. 회원가입 시 유출된 비밀번호를 차단하는 것은 크리덴셜 스터핑 취약점의 상당 부분을 제거합니다.
계정 잠금
계정을 영구적으로 잠그는 엄격한 계정 잠금 정책이 야기하는 주요 보안 위험은 무엇일까요?
레이트 리미팅 및 계정 잠금: 핵심
온라인 브루트 포스 공격은 네트워크 지연 시간에 의해 제한되며, 레이트 리미팅과 계정 잠금은 이를 활용합니다. 계정 잠금은 브루트 포스 공격을 막지만, 서비스 거부(DoS) 공격을 가능하게 합니다. 지수 백오프와 CAPTCHA는 두 가지 위험을 완화합니다. IP 기반 레이트 리미팅은 단일 소스 공격을 탐지합니다. TOTP MFA는 비밀번호 브루트 포스 공격을 효과적으로 무력화합니다. bcrypt와 Argon2는 오프라인 해시 크래킹 속도를 늦춥니다. HIBP API는 등록 시 알려진 유출된 비밀번호를 차단합니다.
자주 묻는 질문
“속도 제한과 계정 잠금 방어” 강의는 무료인가요?
네 — “속도 제한과 계정 잠금 방어” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cryptology Academy 강의 전체를 잠금 해제할 수 있습니다. Cryptology Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“속도 제한과 계정 잠금 방어”에서 뭘 배우나요?
무차별 대입 공격을 실제로 어렵게 만드는 서버 측 및 프로토콜 수준의 방어를 살펴봅니다. 브라우저에서 직접 실행하는 실습 코드로 Cryptology Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Cryptology Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Cryptology Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“속도 제한과 계정 잠금 방어” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Cryptology Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Cryptology Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 무차별 대입 공격의 작동 방식
- 사전 공격과 레인보 테이블
- 암호화 키 길이가 중요한 이유
- 속도 제한과 계정 잠금 방어