소개
사이버 보안 분야, 무차별 대입 는 자격증명 또는 암호화 키를 성공할 때까지 체계적이고 철저하게 추측하는 시도를 말합니다. 이는 레드팀 운영, 모의 침투 테스트, 비밀번호 복구 연습을 위한 초석 기법입니다. 무차별 암호 대입은 '해킹 마법'이 아니라 정해진 범위 내에서 지속적이고 체계적인 검색을 실행하는 것입니다. 사전 공격부터 AI를 활용한 하이브리드 접근 방식에 이르기까지 무차별 암호 대입은 반복 계산이 인간과 시스템의 방어를 어떻게 극복할 수 있는지 보여줍니다.
자동화와 AI의 시대에도 무차별 암호 대입은 여전히 유효합니다. 엔지니어에게 공격 표면 노출, 비밀번호 정책의 효과, 속도 제한 메커니즘에 대해 알려줍니다. 또한 최신 AI 기반 보안 플랫폼은 이러한 기술을 기반으로 구축되어 공격을 제어하고 감사할 수 있으며 재현 가능한 방식으로 조율합니다.

무차별 대입이 중요한 이유
무차별 암호 대입은 실제 테스트 도구이자 개념적 벤치마크 역할을 합니다. 인증의 취약점을 강조하고, 비밀번호 정책의 엔트로피를 측정하며, 속도 제한과 같은 방어적 제어를 검증합니다, MFA및 잠금 메커니즘.
관련성의 주요 차원:
- 보안 제어 검증 - 방어가 철저한 공격 시도를 견뎌내는지 확인합니다.
- AI 트레이닝 그라운드 - AI 기반 침투 테스트 에이전트를 위한 경험적 데이터를 제공합니다.
- 레드-블루 팀 정렬 - 공격 기술에 대한 이해와 방어 전략 실행을 연결합니다.
무차별 대입 도구의 분류 및 기능
무차별 대입 작업은 대상, 전략 및 자동화 수준에 따라 분류할 수 있습니다.
| 카테고리 | 핵심 기능 | 능력 특성 | 도구 예제 |
|---|---|---|---|
| 비밀번호 추측 | 계정에 대한 사용자 비밀번호 시도 | 사전 및 하이브리드, 병렬 실행, 재시도 관리 | 히드라, 메두사, 파테이터 |
| 키 크래킹 | 암호화 키 복구 | GPU 가속, 규칙 기반 돌연변이, 분산형 | 존 더 리퍼, 해시캣, 카인과 아벨 |
| 웹 양식 공격 | 무차별 대입 로그인 엔드포인트 | 속도 제한 인식, 세션 관리, 캡차 처리 | 버프 스위트 인트루더, OWASP ZAP, wfuzz |
| 프로토콜 공격 | SSH, RDP, FTP와 같은 공격 프로토콜 | 연결 풀링, 자동 재시도, 스텔스 튜닝 | Ncrack, THC-Hydra, BruteSSH |
실제 엔지니어링: 무차별 대입 운영
운영화는 무차별 대입 테스트의 재현성, 감사 가능성 및 확장성을 보장합니다.
주요 사례
- 출력 계약매개변수, 타임스탬프, 결과를 포함한 구조화된 출력(JSON/SARIF/사용자 지정 스키마).
- 컨테이너화된 실행격리된 환경에서 각 도구를 실행하세요.
- 마이크로서비스 및 메시지 버스도구를 원격으로 호출 가능한 작업으로 래핑하고, Kafka/RabbitMQ를 통해 연결합니다.
- CI/CD 통합: 제어된 단계에서 공격을 트리거합니다.
- 증거 및 감사 추적: 캡처 명령, stdout/stderr, 종료 코드, 호스트 정보.
Python 예제 - 병렬 비밀번호 시도 및 통합 JSON 출력:
import subprocess, json, concurrent.futures, os, time
targets = ["10.0.0.5", "10.0.0.7"]
RESULT_DIR = "./out"
os.makedirs(RESULT_DIR, exist_ok=True)
def run_brute(tool_cmd):
meta = {"cmd": tool_cmd, "started_at": time.time()}
try:
proc = subprocess.run(tool_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=600, text=True)
meta.update({
"rc": proc.returncode,
"stdout": proc.stdout,
"stderr": proc.stderr,
"duration": time.time() - meta["started_at"]
})
예외는 e로 예외를 제외합니다:
meta.update({"rc": -1, "stdout": "", "stderr": str(e), "duration": time.time() - meta["started_at"]})
반환 메타
def brute_target(target):
hydra_cmd = ["hydra", "-L", "users.txt", "-P", "passwords.txt", f"ssh://{target}"]
hashcat_cmd = ["hashcat", "-m", "0", "hashes.txt", "wordlist.txt"]
res = {"target": target, "runs": {}}
res["runs"]["hydra"] = run_brute(hydra_cmd)
res["runs"]["hashcat"] = run_brute(hashcat_cmd)
반환 res
def main():
out = {"generated_at": time.time(), "results": {}}
concurrent.futures.ThreadPoolExecutor(max_workers=4)를 ex로 사용합니다:
futures = {ex.submit(brute_target, t): t for t in TARGETS}
for fut in concurrent.futures.as_completed(futures):
t = futures[fut]
out["results"][t] = fut.result()
open(f"{RESULT_DIR}/brute_results.json", "w")를 fh로 사용합니다:
json.dump(out, fh, indent=2)
if __name__ == "__main__":
main()
펜리전트: 200개 이상의 해킹 도구를 사용한 지능형 펜테스팅
Penligent는 무차별 암호 대입 및 광범위한 펜 테스트 워크플로를 AI가 조율하고 감사 가능한 프로세스로 전환합니다. 이 플랫폼은 자연어 지침을 구문 분석하여 적절한 도구(Hydra/Hashcat과 같은 무차별 대입 엔진 포함)를 자동으로 선택하고, 결과를 검증하고, 위험의 우선순위를 지정하고, 전문 보고서를 생성합니다.
예시 시나리오:
명령: "하위 도메인 X에서 취약한 비밀번호 및 SSH 노출 확인"
워크플로: 자산 검색 → 엔드포인트 열거 → 사전/하이브리드 무차별 대입 → 검증 → 보고서 생성. 모든 메타데이터, 로그, 출력은 추적을 위해 기록됩니다.
CI/CD 파이프라인에서 Penligent는 지속적인 보안 피드백을 보장합니다. 코드 또는 인프라 변경 시 표적 스캔이 트리거되고 우선 순위가 높은 발견 사항이 티켓을 생성하며 완화 지침이 자동으로 첨부됩니다. 따라서 무차별 암호 대입 공격은 기업 규정 준수 표준 내에서 안전하게 운영됩니다.
강화 플레이북 - 우선 순위가 지정된 엔지니어링 제어
빠른 우선순위 매트릭스
| 우선순위 | 제어 | 영향 | 노력 |
|---|---|---|---|
| P0 | 모든 권한 있는 계정에 MFA 적용 | 매우 높음 | 낮음-중간 |
| P0 | 인증 시 알려진 유출된 자격 증명(HIBP) 차단 | 매우 높음 | Medium |
| P0 | 적응형 속도 제한 + 인증 엔드포인트의 봇 관리 | 매우 높음 | Medium |
| P1 | 강력한 비밀번호 해싱(매개변수가 조정된 Argon2id) | 높음 | 낮음 |
| P1 | 멀티 IP/속도 이상 징후에 대한 SIEM 탐지 | 높음 | Medium |
| P2 | 세션 및 디바이스 위험 점수(SSO/위험 엔진) | Medium | 중간-높음 |
| P2 | 의심스러운 흐름에 대한 WAF 규칙 + 챌린지 페이지 | Medium | Medium |
| P3 | 인증정보 스터핑을 위한 카나리아 계정/기만 트랩 | Medium | Medium |
| P3 | SSH/RDP 강화(점프 호스트, 조건부 액세스) | Medium | 낮음-중간 |
다단계 인증(MFA) 시행 - 실용적인 정책
- 정책: 모든 권한 있는 역할과 프로비저닝/인프라/UI 콘솔에 액세스하는 모든 직원에 대한 필수 MFA. 모든 사용자에게 점진적으로 배포. 관리자를 위해 피싱 방지 방법(FIDO2/WebAuthn, 하드웨어 키)을 선호합니다.
- 구현 팁:
- SSO(OIDC/SAML)의 경우 다음이 필요합니다.
acr또는authnContextClassRef는 MFA를 나타냅니다. - 위험한 작업(비밀번호 변경, API 키 생성)에 대해 단계별 인증을 적용합니다.
- 기본적으로 MFA를 지원할 수 없는 레거시 앱의 경우, MFA를 적용하는 SSO 또는 프록시를 앱에 전달하세요.
- SSO(OIDC/SAML)의 경우 다음이 필요합니다.
- 모니터링MFA가 활성화된 권한 있는 사용자의 %, 실패한 MFA 시도 및 스텝업 이벤트를 추적합니다. 권한 있는 로그인 중 % 이상에 MFA가 없는 경우 알림을 보냅니다.
유출된 것으로 알려진 인증정보 차단 - HaveIBeenPwned(HIBP) 통합 예시
- 접근 방식: 등록할 때와 로그인(또는 비밀번호 변경)할 때마다 유출된 비밀번호 피드에서 후보 비밀번호를 확인합니다. 전체 비밀번호를 전송하지 않으려면 K-익명성 HIBP API를 사용하세요. 비밀번호 유출이 확인되면 비밀번호를 차단하고 강제로 교체하세요.
- HIBP K-익명성 흐름(스케치):
- SHA-1(비밀번호) → 접두사(처음 5개의 16진수 문자)와 접미사를 계산합니다.
- 쿼리
https://api.pwnedpasswords.com/range/{prefix}→ 접미사 목록 + 카운트 받기. - 접미사가 있는지 확인하고, 있다면 위반된 것으로 처리합니다.
- 정책유출된 상위 N개의 비밀번호 거부; 선택적으로 유출 횟수가 임계값(예: > 100)을 초과하는 모든 비밀번호를 거부합니다. 발생을 기록하고 사용자에게 알립니다.
코드(Python) 스케치:
해시리브 가져오기, 요청
def is_pwned(password):
s = hashlib.sha1(password.encode('utf-8')).hexdigest().upper()
접두사, 접미사 = s[:5], s[5:]
r = requests.get(f"")
r.text의 접미사 반환
# 사용법: 비밀번호 설정/변경 또는 주기적으로 저장된 크레딧(해시) 확인, 도용 시 차단
적응형 속도 제한 및 봇 관리 - 구체적인 설정
- 원칙(a) IP, (b) 계정, (c) IP+계정, (d) ASN/지리적 위치별 속도 제한. 버스트 내성을 위해 토큰 버킷과 반복적인 실패에 대한 점진적 백오프를 결합합니다.
- Nginx 예제 (IP별 기본 요금 제한):
# nginx.conf 스니펫
limit_req_zone $binary_remote_addr zone=auth_zone:10m 속도=5r/s;
서버 {
위치 /로그인 {
limit_req zone=auth_zone burst=10 nodelay;
proxy_pass http://auth_service;
}
}
- Cloudflare/WAF봇 관리 활성화, 의심스러운 점수에 대한 챌린지 설정, 요청 속도가 빠른 인증 POST에 대한 사용자 지정 WAF 규칙 생성.
- 점진적 대응첫 번째 임계값 → 429 또는 캡차 제공, 심각도가 높을 경우 → 임시 차단/비밀번호 재설정 요구.
계정 잠금 및 비밀번호 스프레이 완화 - 보정된 정책
- 문제계정별 잠금을 사용하면 공격자가 계정에 대한 서비스 거부를 테스트할 수 있습니다. 비밀번호 스프레이는 여러 계정에 걸쳐 몇 가지 공통된 비밀번호를 시도하여 계정별 잠금을 방지합니다.
- 권장 보정 정책:
- 계정별N_failures = 10 이후 10분 내 실패 → 챌린지 증가(CAPTCHA/MFA 단계적 강화) 또는 임시 소프트 잠금(예: 15분).
- 스프레이 감지동일한 IP/ASN에서 여러 개의 다른 계정이 단일 장애를 보이는 경우 → IP 스로틀을 트리거하거나 원본 IP에 캡차를 요구합니다.
- 프로그레시브영구 잠금이 아닌 에스컬레이션 정책(챌린지 → MFA → 임시 잠금 → 관리자 검토)을 구현합니다.
- 규칙 예시:
if failures(account) >= 10 && unique_ips(account) >= 5 -> 비밀번호 재설정 및 MFA 필요.
비밀번호 저장 및 해싱 - Argon2id 권장 매개변수
- 사용하지 마십시오.일반 SHA 또는 무염 MD5. 최신 KDF를 사용합니다. Argon2id 를 사용하는 것이 좋으며, 필요한 경우 bcrypt로 폴백합니다.
- 권장 기준 매개변수(2025 가이드라인):
time_cost = 3,memory_cost = 64 * 1024KB (64MB),병렬 처리 = 2- 하드웨어가 허용하는 대로 상향 조정합니다.- 소금(≥ 16바이트) 및 KDF 매개변수를 해시와 함께 저장합니다.
- 회전마이그레이션 경로 제공 - 매개변수가 오래된 경우 다음 로그인 시 다시 해시합니다. 값비싼 해싱을 통한 DOS를 피하기 위해 평균 bcrypt/Argon2 타이밍을 캐시/모니터링합니다.
SIEM/탐지 규칙 - Splunk 및 KQL 예제
동일한 IP에서 다른 계정으로 여러 번 로그인 실패를 감지합니다(자격 증명 스프레이 표시기):
index=auth_logs action=실패 | stats dc(user)를 사용자로, src_ip로 실패로 계산 | 여기서 사용자>20 AND 실패>50
5분 안에 고유 IP가 높은 의심스러운 계정을 탐지합니다:
index=auth_logs earliest=-5m | stats dc(src_ip)를 uniq_ips로, 사용자별 실패로 카운트 | where uniq_ips > 5 AND fails > 10.
KQL(Azure) 예제
SigninLogs
| 여기서 ResultType != 0 및 TimeGenerated > ago(10m)
| 요약 실패 = count(), distinctIPs = dcount(ClientIP) by UserPrincipalName
| where failures > 10, distinctIPs > 4
봇 관리 및 WAF 통합 - 플레이북 항목
- 봇 관리 솔루션(Cloudflare Bot Management, Akamai, PerimeterX)을 배포합니다. 봇 점수를 의사 결정에 반영합니다(예: 점수 80점 이상 → 도전, 95점 이상 → 차단).
- 중요한 인증 엔드포인트의 경우: WAF 규칙을 설정하여 POST 본문 패턴을 검사하고, 알려진 크리덴셜 스터핑 서명을 차단하고 의심스러운 IP를 스로틀링합니다.
- WAF 로그에 재생/POC 유효성 검사를 수행하기에 충분한 요청 컨텍스트가 SIEM에 제공되도록 하세요.
속임수 및 카나리아 계정 - 탐지 증폭
- 강력하지만 현실적인 이름으로 모니터링되는 '카나리아' 계정을 만들고, 이 계정에 대한 시도가 실패하면 (정상적으로 사용되지 않기 때문에) 높은 신뢰도의 위협이 됩니다.
- 우선 순위가 높은 알림을 생성하고 소스 IP를 자동 차단하도록 카나리아를 설정합니다. 합법적인 트래픽을 수신하지 않는 디코이 로그인 엔드포인트를 사용하세요.
테스트, 메트릭 및 SLA - 성공 측정 방법
추적해야 할 주요 지표
- 크리덴셜 스터핑 이벤트에 대한 평균 탐지 시간(MTTD)입니다.
- 소스 IP 차단/해결 에스컬레이션을 위한 평균 응답 시간(MTTR).
- MFA가 활성화된 % 권한 로그인.
- 무차별 대입 탐지 오탐률(튜닝 후 5% 미만 목표).
- 계정 탈취 성공 횟수(목표: 0), 탐지 후 차단까지 걸린 시간.
테스트
- 레드팀 시뮬레이션/에이전트 펜테스트 실행을 예약하여 제어를 검증합니다. 스테이징 환경을 사용하여 제어된 자격 증명 스프레이 테스트를 진행하세요. 실행을 인시던트 플레이북과 통합하세요.
결론
무차별 암호 대입은 교육 도구이자 운영상의 필수 요소로서 여전히 기본 기술로 남아 있습니다. 적절하게 설계되고, 모니터링되고, AI로 조율된 무차별 암호 대입은 단순한 공격 방법에서 재현 가능하고 감사 가능한 보안 테스트 전략으로 진화하고 있습니다. 펜리전트와 같은 플랫폼은 지능형 자동화를 통해 무차별 암호 대입을 안전하게 운영하고, 광범위한 펜 테스트 워크플로와 통합하며, 지속적으로 방어를 강화할 수 있는 방법을 보여줍니다.

