본문 바로가기
C.W.K.
Stream
Lesson 03 of 05 · published

Hard Lockout 너머 — Backoff, Jitter, Honeypot

~15 min · backoff, honeypot, jitter

Level 0Greenhorn
0 XP0/53 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

Hard lockout-after-N 이 제일 단순한 방어야. threat model 이 더 정교한 걸 요구할 때 알아둘 만한 기법이 셋 더 있어.

1. Exponential backoff — 늦추기, lockout 아님

"다섯 번 헛스윙이면 아웃" 대신, 실패가 이어질수록 시간 비용이 커지게 해. 사용자는 거의 못 느끼고, 공격자는 벽에 부딪혀.

2. Jitter — timing side channel 격퇴

0.5초 고정 지연 (Track 5) 이 *응답 시간* 으로 정보가 새는 걸 막아. 여기에 무작위 jitter 를 얹으면 (딱 0.5s 대신 0.4–0.6s) 시간을 통계로 공략하는 것까지 더 흐려져.

3. Honeypot 엔드포인트 — 정찰 발견

/wp-admin 이나 /.env 같은 가짜 엔드포인트를 추가해. 언제나 404 를 돌려주지만 "scanner detected" 이벤트를 로그하고, 원하면 source IP 를 blacklist 에 넣어.

하지 말 것

  • "PIN 틀림" 과 "사용자 없음" 에 다른 에러를 주지 마. user enumeration 이 새거든. 언제나 같은 응답을 줘.
  • 다중 사용자 시스템에서 username 만 잠그지 마. 공격자가 한 사용자한테 틀린 PIN 을 퍼부어 DOS 를 만들 수 있어. per-IP lockout 이 답이야.
  • 남은 시도 횟수를 알려주지 마. ("3번 남았습니다") 공격자한테 공짜로 주는 정보야. "Invalid PIN" 만 보여줘.

Code

Exponential backoff·python
# delay = 2 ** (fail_count - 1) 초
# 실패 1: 1s, 실패 2: 2s, 실패 3: 4s, 실패 4: 8s, 실패 5: 16s, ...
delay = min(60, 2 ** (attempt_count(ip)))
await asyncio.sleep(delay)
Jitter·python
import random
await asyncio.sleep(0.4 + random.random() * 0.2)   # 0.4 – 0.6 sec
Honeypot middleware — 스캐너 자동 blacklist·python
HONEYPOTS = ("/wp-admin", "/wp-login.php", "/.env", "/.git/config",
             "/admin.php", "/phpmyadmin")

@app.middleware("http")
async def honeypot(request, call_next):
    if request.url.path in HONEYPOTS:
        ip = client_ip(request)
        log_scanner_hit(ip, request.url.path)
        blacklist(ip, "honeypot_" + request.url.path)
        return Response("Not Found", status_code=404)
    return await call_next(request)

External links

Exercise

앱에 honeypot middleware 추가. 다른 머신에서 (또는 그냥 curl) /wp-admin 쳐봐. 확인: (1) 응답이 404, (2) source IP 가 reason 이 honeypot_ 로 시작하는 채로 security_blacklist 에 나타남, (3) 그 IP 의 후속 요청이 middleware 에서 403. 이제 스캐너를 미리 끊어내는 장치가 생겼어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.