πŸ“Ί 쿠팑 λ“± API 인증 ν‚€(JWT) 유좜 사고, 'ν–‰μœ„ 기반' νƒμ§€λ‘œ λ°©μ–΄ν•˜λŠ” 방법 (λͺ¨μ˜ν•΄ν‚Ή μ˜μƒ 포함)

By PLURA

2025λ…„ 6μ›” 24일뢀터 μ•½ 5κ°œμ›”κ°„, μΏ νŒ‘μ€ 정상 둜그인 절차 없이도 고객 정보λ₯Ό μ‘°νšŒν•  수 μžˆλŠ” 인증 취약점을 κ³΅κ²©μžμ—κ²Œ λ…ΈμΆœν•œ 채 μš΄μ˜ν–ˆμŠ΅λ‹ˆλ‹€.

μ •λΆ€ 쑰사와 μ–Έλ‘  보도λ₯Ό μ’…ν•©ν•˜λ©΄, μ‚¬κ±΄μ˜ κ·Όλ³Έ 원인은 JWT μ„œλͺ…ν‚€ 관리 μ‹€νŒ¨ + λ‚΄λΆ€μž(ν‡΄μ‚¬μž)의 지식 μ•…μš© κ°€λŠ₯μ„±μœΌλ‘œ μ’ν˜€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

이번 사건은 β€œλ‚΄λΆ€ 지식 및 ν‚€ 유좜이 κ²°ν•©λœ μ™ΈλΆ€ 곡격”이 μ–Όλ§ˆλ‚˜ 치λͺ…적인 κ²°κ³Όλ₯Ό μ΄ˆλž˜ν•  수 μžˆλŠ”μ§€λ₯Ό λ³΄μ—¬μ£ΌλŠ” λŒ€ν‘œ μ‚¬λ‘€μž…λ‹ˆλ‹€.

특히 κ΅­λ‚΄ λŒ€κ·œλͺ¨ ν”Œλž«νΌ μ„œλΉ„μŠ€κ°€ μš”μ²­/응닡 λ³Έλ¬Έ 기반 κ΄€μ œ λΆ€μž¬λ‘œ 인해, μž₯κΈ°κ°„ μ§„ν–‰λœ λŒ€κ·œλͺ¨ 데이터 μœ μΆœμ„ μ „ν˜€ κ°μ§€ν•˜μ§€ λͺ»ν–ˆλ‹€λŠ” μ μ—μ„œ μ‹¬κ°ν•œ κ²½κ³  μ‹ ν˜Έλ‘œ λ°›μ•„λ“€μ—¬μ•Ό ν•©λ‹ˆλ‹€.

coupang_authkey


λ¨Όμ € λ³΄λŠ” 핡심 μš”μ•½

이 μ‚¬κ±΄μ˜ 핡심은 λ„€ κ°€μ§€μž…λ‹ˆλ‹€.

  1. JWT μ„œλͺ…ν‚€ μœ μΆœμ€ κ³§ 인증 체계 뢕괴에 κ°€κΉμŠ΅λ‹ˆλ‹€.
  2. μ •μˆ˜ 기반 μ‚¬μš©μž ID μ„€κ³„λŠ” μ „μˆ˜ 쑰회 곡격을 μ‰½κ²Œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.
  3. 정상 200 OK μ‘λ‹΅λ§Œ λ³Έ κΈ°μ‘΄ λ³΄μ•ˆ μ²΄κ³„λŠ” λŒ€κ·œλͺ¨ μœ μΆœμ„ λ†“μ³€μŠ΅λ‹ˆλ‹€.
  4. 이런 μ‚¬κ³ λŠ” IPκ°€ μ•„λ‹ˆλΌ ν–‰μœ„ νŒ¨ν„΄, μš”μ²­/응닡 λ³Έλ¬Έ, 민감 API μ‚¬μš© 흐름을 ν•¨κ»˜ 봐야 막을 수 μžˆμŠ΅λ‹ˆλ‹€.

1. 사건 κ°œμš”

정상 둜그인 없이 3,370만 계정 정보 유좜

  • μ •λΆ€ λ°œν‘œμ— λ”°λ₯΄λ©΄ κ³΅κ²©μžλŠ” 쿠팑 λ‚΄λΆ€ 인증에 μ‚¬μš©λ˜λ˜ JWT μ„œλͺ…ν‚€λ₯Ό μ΄μš©ν•΄, 정상 둜그인 절차 없이도 μ„œλ²„κ°€ μ‹ λ’°ν•˜λŠ” JWT 토큰을 직접 μƒμ„±ν•œ κ²ƒμœΌλ‘œ νŒŒμ•…λ©λ‹ˆλ‹€.
  • 이 μœ„μ‘° ν† ν°μœΌλ‘œ APIλ₯Ό λŒ€λŸ‰ ν˜ΈμΆœν•΄ μ΄λ¦„Β·μ „ν™”λ²ˆν˜ΈΒ·μ£Όμ†ŒΒ·μ΄λ©”μΌΒ·μ£Όλ¬Έ 정보 λ“± κ°œμΈμ •λ³΄λ₯Ό μœ μΆœν•œ κ²ƒμœΌλ‘œ μ‘°μ‚¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • μ΄ˆκΈ°μ—λŠ” β€œ4,500개 계정 λ…ΈμΆœβ€ μ •λ„λ‘œ μ•Œλ €μ‘Œμ§€λ§Œ, 이후 μ‹€μ œ ν”Όν•΄κ°€ μ•½ 3,370만 계정 유좜둜 ν™•μΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • 일뢀 배솑지 λ©”λͺ¨μ—λŠ” κ³΅λ™ν˜„κ΄€ λΉ„λ°€λ²ˆν˜ΈκΉŒμ§€ ν¬ν•¨λ˜μ–΄ μžˆμ–΄, μ£Όκ±° μΉ¨μž…Β·νƒλ°° 사칭 λ“± 2μ°¨ λ²”μ£„λ‘œ μ΄μ–΄μ§ˆ μœ„ν—˜λ„ μ§€μ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ•…μ„±μ½”λ“œ 흔적 μ—†μŒ β†’ ν‚€ μœ μΆœΒ·λ‚΄λΆ€ 지식 μ•…μš© 쀑심 사고

  • μ„œλ²„ λ‚΄λΆ€μ—μ„œ μ•…μ„±μ½”λ“œλ‚˜ 웹셸은 λ°œκ²¬λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
  • 즉, 이번 μ‚¬κ³ λŠ” 전톡적인 β€œμ·¨μ•½μ  침투 β†’ μ•…μ„±μ½”λ“œ μ„€μΉ˜β€ν˜• κ³΅κ²©λ³΄λ‹€λŠ”, λ‚΄λΆ€ 지식과 μ„œλͺ…ν‚€ μœ μΆœμ„ λ°”νƒ•μœΌλ‘œ ν•œ μ™ΈλΆ€ API λ‚¨μš© 곡격에 κ°€κΉμŠ΅λ‹ˆλ‹€.

2. 곡격에 μ‚¬μš©λœ 핡심 취약점

JWT μ„œλͺ…ν‚€ 유좜: 인증 체계가 κ·ΈλŒ€λ‘œ λΆ•κ΄΄

JWT μ„œλͺ…ν‚€λŠ” β€œμ΄ 토큰이 정말 μ„œλ²„κ°€ λ°œκΈ‰ν•œ 것인지”λ₯Ό κ²€μ¦ν•˜λŠ” λΉ„λ°€ν‚€μž…λ‹ˆλ‹€.

이 ν‚€κ°€ 유좜되면 κ³΅κ²©μžλŠ” λ‹€μŒμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  1. μž„μ˜μ˜ 계정(sub)에 λŒ€ν•œ 토큰 생성
  2. 만료 μ‹œκ°„(exp) μ‘°μž‘
  3. κΆŒν•œ(role) λ˜λŠ” scope μ‘°μž‘
  4. 둜그인 μ„œλ²„μ™€ 인증 μ„œλ²„λ₯Ό μš°νšŒν•˜κ³  κ³§λ°”λ‘œ API 호좜

즉,

JWT μ„œλͺ…ν‚€ 유좜 = 인증 μ‹œμŠ€ν…œ λΆ•κ΄΄

라고 봐도 κ³Όμž₯이 μ•„λ‹™λ‹ˆλ‹€.

μ„œλͺ…ν‚€λ₯Ό μ¦‰μ‹œ νšŒμˆ˜Β·κ΅μ²΄ν•˜μ§€ μ•ŠλŠ” ν•œ, κ³΅κ²©μžλŠ” 반영ꡬ적으둜 합법 μ‚¬μš©μžμ²˜λŸΌ μ‹œμŠ€ν…œμ„ μ•…μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν‡΄μ‚¬μžμ™€ μ—°κ΄€λœ μ„œλͺ…ν‚€κ°€ νκΈ°λ˜μ§€ μ•ŠμŒ

  • μ–Έλ‘  보도에 λ”°λ₯΄λ©΄ κ΄€λ ¨ μ„œλͺ…ν‚€λŠ” 쿠팑 인증 μ‹œμŠ€ν…œ λ‹΄λ‹Ή 전직원과 μ—°κ΄€λœ κ²ƒμœΌλ‘œ μΆ”μ •λ©λ‹ˆλ‹€.
  • 퇴사 이후에도 이 ν‚€κ°€ μ¦‰μ‹œ νκΈ°Β·κ΅μ²΄λ˜μ§€ μ•Šμ€ 채 μ„œλΉ„μŠ€μ— 남아 μžˆμ—ˆλ‹€λŠ” 정황이 μ œκΈ°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • κ³΅κ²©μžλŠ” ν•΄μ™Έ VPSλ₯Ό μ΄μš©ν•΄ 쿠팑이 λ°œκΈ‰ν•œ κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” JWTλ₯Ό λŒ€λŸ‰ μƒμ„±ν•˜λ©° APIλ₯Ό ν˜ΈμΆœν•  수 μžˆλŠ” μƒνƒœμ˜€μŠ΅λ‹ˆλ‹€.

3. 곡격 흐름 뢄석

곡격 μ‹œλ‚˜λ¦¬μ˜€ μž¬κ΅¬μ„±

1) JWT μ„œλͺ…ν‚€ 유좜 λ˜λŠ” 사전 지식 νšλ“

  • 인증 λ‹΄λ‹ΉμžλŠ”
    • JWT μ„œλͺ…ν‚€ 자체
    • λ˜λŠ” 이λ₯Ό μž¬κ΅¬μ„±ν•  수 μžˆλŠ” 섀계 μ •λ³΄Β·ν™˜κ²½ 정보 에 μ ‘κ·Όν•  수 μžˆλŠ” μœ„μΉ˜μ— μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
  • 퇴사 μ „ν›„ κ³Όμ •μ—μ„œ 이 정보가 μ™ΈλΆ€λ‘œ λ‚˜κ°”κ³ ,
  • 퇴사 후에도 ν‚€κ°€ κ΅μ²΄λ˜μ§€ μ•Šμ•„ 곡격 κ°€λŠ₯ μƒνƒœκ°€ μœ μ§€λœ κ²ƒμœΌλ‘œ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

2) ν•΄μ™Έ VPSμ—μ„œ μœ„μ‘° JWT λŒ€λŸ‰ 생성

κ³΅κ²©μžλŠ” ν•΄μ™Έ VPS μ—¬λŸ¬ λŒ€λ₯Ό μ€€λΉ„ν•œ λ’€,
유좜된 μ„œλͺ…ν‚€λ‘œ μ„œλ²„κ°€ μ‹ λ’°ν•˜λŠ” ν˜•μ‹μ˜ JWTλ₯Ό λŒ€λŸ‰ μƒμ„±ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ λ‹€μŒκ³Ό 같은 μš”μ†Œλ₯Ό μ •μƒμ²˜λŸΌ 맞μΆ₯λ‹ˆλ‹€.

  • Header: μ„œλΉ„μŠ€μ—μ„œ μ‚¬μš©ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜κ³Ό 동일
  • Payload:
    • sub: 쑰회 λŒ€μƒ μ‚¬μš©μž ID
    • exp: μΆ©λΆ„νžˆ κΈ΄ 만료 μ‹œκ°„
  • Signature: 유좜된 μ‹€μ œ μ„œλͺ…ν‚€λ‘œ 생성

3) μ •μˆ˜ 기반 μ‚¬μš©μž IDκ°€ λŒ€λŸ‰ 쑰회λ₯Ό μ‰½κ²Œ λ§Œλ“¦

이번 μ‚¬κ³ μ—μ„œ 특히 치λͺ…적인 뢀뢄은
μ‚¬μš©μž IDκ°€ λ‚œμˆ˜ν˜• UUIDκ°€ μ•„λ‹ˆλΌ μ •μˆ˜ 기반 μ‹λ³„μž(1, 2, 3, …) μ˜€λ‹€λŠ” μ μž…λ‹ˆλ‹€.

이 경우 κ³΅κ²©μžλŠ”

  • sub=1 토큰 생성 β†’ μ‚¬μš©μž 1 정보 쑰회
  • sub=2 토큰 생성 β†’ μ‚¬μš©μž 2 정보 쑰회
  • sub=3 토큰 생성 β†’ μ‚¬μš©μž 3 정보 쑰회

처럼 맀우 λ‹¨μˆœν•œ λ°©μ‹μœΌλ‘œ 전체 고객을 μˆœνšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

즉,

JWT μ„œλͺ…ν‚€λŠ” 만λŠ₯ 도μž₯이고,
μ •μˆ˜ν˜• IDλŠ” λˆ„κ΅¬λ₯Ό μ°μ„μ§€λ§Œ μ •ν•˜λ©΄ λ˜λŠ” λ²ˆν˜Έν‘œ
κ°€ λ©λ‹ˆλ‹€.

4) μ™œ 5κ°œμ›” λ™μ•ˆ νƒμ§€λ˜μ§€ μ•Šμ•˜λŠ”κ°€

  • λͺ¨λ“  호좜이 정상 HTTP 200 OK 응닡
  • JWT μ„œλͺ…도 정상
  • ν•΄μ™Έ IP라 해도 속도 쑰절 μ‹œ β€œνŠΈλž˜ν”½μ΄ 쑰금 λ§Žμ€ μ΄μš©μžβ€μ²˜λŸΌ 보일 수 있음
  • 그리고 κ°€μž₯ μ€‘μš”ν•œ λ¬Έμ œλŠ”:

μš”μ²­κ³Ό 응닡 본문에 μ–΄λ–€ 데이터가 μ˜€κ°”λŠ”μ§€,
κ·Έ 전체 흐름을 κ΄€μ œν•˜λŠ” 체계가 사싀상 μ—†μ—ˆλ‹€λŠ” 점
μž…λ‹ˆλ‹€.


4. μ™œ 막지 λͺ»ν–ˆλŠ”κ°€ β€” ꡬ쑰적 λ³΄μ•ˆ μ‹€νŒ¨

4.1 JWT μ„œλͺ…ν‚€ 관리 μ‹€νŒ¨

  • ν‡΄μ‚¬μžμ™€ μ—°κ΄€λœ μ„œλͺ…ν‚€λ₯Ό μ¦‰μ‹œ 폐기 λ˜λŠ” κ΅μ²΄ν•˜μ§€ μ•ŠμŒ
  • μ„œλͺ…ν‚€ ν•˜λ‚˜κ°€ 전체 인증 μ²΄κ³„μ˜ 단일 μ‹€νŒ¨ 지점(SPOF)이 됨

4.2 μ‚¬μš©μž ID 섀계 μ·¨μ•½

  • μ •μˆ˜ 기반 μ‹λ³„μž μ‚¬μš©μœΌλ‘œ μ „μˆ˜ 쑰회 곡격이 μ‰¬μš΄ ꡬ쑰
  • μ™ΈλΆ€ λ…ΈμΆœ μ˜μ—­μ—μ„œλŠ” μ΅œμ†Œν•œ λ‚œμˆ˜ν˜• ID / 토큰화 / μΆ”κ°€ 검증 둜직이 ν•„μš”ν–ˆμœΌλ‚˜ λ―Έν‘ν–ˆμŠ΅λ‹ˆλ‹€

4.3 λŒ€λŸ‰ 쑰회 μ΄μƒν–‰μœ„ 탐지 λΆ€μž¬

  • β€œν•΄μ™Έ IP + 반볡 호좜 + 민감 API + 응닡 크기 증가”λ₯Ό ν•˜λ‚˜μ˜ μ‹œλ‚˜λ¦¬μ˜€λ‘œ λ¬Άμ–΄ νƒμ§€ν•˜λŠ” 체계가 μ—†μ—ˆμŠ΅λ‹ˆλ‹€
  • λ‹¨μˆœ λΆ„λ‹Ή 호좜 수만 보면 속도 쑰절이 λ“€μ–΄κ°„ 곡격은 λ†“μΉ˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€

4.4 μš”μ²­/응닡 λ³Έλ¬Έ 기반 κ΄€μ œ λΆ€μž¬

이 μ‚¬κ±΄μ˜ 핡심 ꡬ쑰적 λ¬Έμ œλŠ” μ΄κ²ƒμž…λ‹ˆλ‹€.

  • 응닡 λ³Έλ¬Έ μ•ˆμ—

    • 이름
    • μ „ν™”λ²ˆν˜Έ
    • μ£Όμ†Œ
    • 이메일
    • μ£Όλ¬Έ λ‚΄μ—­
    • κ³΅λ™ν˜„κ΄€ λΉ„λ°€λ²ˆν˜Έ

    같은 민감정보 덩어리가 반볡적으둜 μ‹€λ € λ‚˜κ°”λŠ”λ°λ„, 이λ₯Ό 아무도 유좜 μ§•ν›„λ‘œ 보지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

μš”μ²­/응닡 본문을 보지 μ•ŠλŠ” ν•œ,
β€œμ •μƒ 200 응닡”과 β€œλŒ€λŸ‰ 데이터 덀프 응닡”을 κΈ°κ³„μ μœΌλ‘œ κ΅¬λΆ„ν•˜κΈ°λŠ” 맀우 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.


5. μ™œ κΈ°μ‘΄ λ°©μ–΄ μ²΄κ³„λŠ” λ†“μ³€μ„κΉŒ?

이 사건은 ν”ν•œ μ•…μ„±μ½”λ“œ 사고가 μ•„λ‹ˆμ—ˆμŠ΅λ‹ˆλ‹€.
κ·Έλž˜μ„œ 전톡적인 λ°©μ–΄ μ²΄κ³„λŠ” λ‹€μŒκ³Ό 같은 이유둜 무λ ₯화될 수 μžˆμŠ΅λ‹ˆλ‹€.

κΈ°μ‘΄ λ³΄μ•ˆ μž₯λΉ„κ°€ λ†“μΉ˜κΈ° μ‰¬μš΄ 이유

관점 κΈ°μ‘΄ 방식 이번 μ‚¬κ³ μ—μ„œμ˜ ν•œκ³„
인증 검증 토큰 μ„œλͺ… 유효 μ—¬λΆ€ 확인 유좜된 μ‹€μ œ ν‚€λ‘œ λ§Œλ“  토큰은 μ •μƒμ²˜λŸΌ λ³΄μž„
IP 차단 λΈ”λž™λ¦¬μŠ€νŠΈ / κ΅­κ°€ 차단 ν•΄μ™Έ VPS λΆ„μ‚°, 속도 쑰절 μ‹œ 우회 κ°€λŠ₯
WAF/λ°©ν™”λ²½ 비정상 μš”μ²­ 차단 μš”μ²­ μžμ²΄λŠ” 정상 API 호좜처럼 보일 수 있음
응닡 뢄석 λŒ€κ°œ μ œν•œμ  200 OK 응닡 μ•ˆμ˜ 민감정보 λŒ€λŸ‰ λ°˜ν™˜μ„ 놓침
λŒ€λŸ‰ 쑰회 탐지 λ‹¨μˆœ μž„κ³„μΉ˜ 기반 μž₯κΈ° 저속 곡격, λΆ„μ‚° 곡격에 μ·¨μ•½

즉, 이 μ‚¬κ³ λŠ”
β€œμœ νš¨ν•œ 토큰을 κ°€μ§„ 정상 μ‚¬μš©μžκ°€ 민감 데이터λ₯Ό λ„ˆλ¬΄ 많이 λ³Έλ‹€β€λŠ”
ν–‰μœ„ 기반 λ¬Έμ œμ˜€μ§€, 전톡적인 μ‹œκ·Έλ‹ˆμ²˜ 기반 λ¬Έμ œλ§Œμ€ μ•„λ‹ˆμ—ˆμŠ΅λ‹ˆλ‹€.


6. PLURA-XDR: 유좜된 킀도 β€˜ν–‰μœ„β€™λ‘œ 막아야 ν•©λ‹ˆλ‹€

PLURA-XDRκ³Ό PLURA-WAFλŠ”
ν‚€ 유좜 사싀 자체λ₯Ό μ¦‰μ‹œ μ•Œμ•„λ‚΄μ§€ λͺ»ν•˜λ”라도,
κ·Έ 결과둜 λ‚˜νƒ€λ‚˜λŠ” 비정상적 데이터 μ ‘κ·Ό ν–‰μœ„λ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ νƒμ§€ν•˜κ³  μ°¨λ‹¨ν•˜λŠ” 데 μ΄ˆμ μ„ λ‘‘λ‹ˆλ‹€.

이 μƒν™©μ—μ„œ λ³΄μ•ˆ λ‹΄λ‹ΉμžλŠ” λ°˜λ“œμ‹œ 두 κ°€μ§€ μ΅œμ•…μ˜ μ‹œλ‚˜λ¦¬μ˜€μ— λ‹΅ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

  1. λ‚΄λΆ€ κ°œλ°œμžκ°€ μ•…μ˜λ₯Ό ν’ˆκ³  JWT λ§ˆμŠ€ν„° ν‚€λ₯Ό κ°€μ§€κ³  ν‡΄μ‚¬ν–ˆλ‹€λ©΄?
  2. 개발자의 μ‹€μˆ˜λ‘œ λ§ˆμŠ€ν„° ν‚€κ°€ μœ μΆœλ˜μ—ˆκ³ , 해컀가 이λ₯Ό μŠ΅λ“ν–ˆλ‹€λ©΄?

이 경우 κ³΅κ²©μžλŠ” κΈ°μˆ μ μœΌλ‘œλŠ” 정상 인증 κΆŒν•œμ„ κ°€μ§€κ³  λ“€μ–΄μ˜΅λ‹ˆλ‹€.
λ”°λΌμ„œ λ‹¨μˆœνžˆ β€œμœ νš¨ν•œ 토큰인가?β€λ§Œ 보면 λŒ€λΆ€λΆ„ ν†΅κ³Όν•©λ‹ˆλ‹€.

κ·Έλž˜μ„œ ν•„μš”ν•œ 것은
λˆ„κ°€ λ“€μ–΄μ™”λŠ”κ°€κ°€ μ•„λ‹ˆλΌ,
그듀이 무엇을 ν•˜κ³  μžˆλŠ”κ°€λ₯Ό λ³΄λŠ” κ²ƒμž…λ‹ˆλ‹€.


7. PLURA의 ν–‰μœ„ 기반 νƒμ§€λŠ” 무엇을 λ³΄λŠ”κ°€?

핡심은 IP μˆ«μžκ°€ μ•„λ‹ˆλΌ νŒ¨ν„΄μž…λ‹ˆλ‹€.

PLURAκ°€ λ³΄λŠ” μ£Όμš” ν–‰μœ„ κΈ°μ€€ μ˜ˆμ‹œ

  • 짧은 μ‹œκ°„ μ•ˆμ— λ°˜λ³΅λ˜λŠ” 민감 API 호좜
  • 동일 λ¦¬μ†ŒμŠ€ λ˜λŠ” μœ μ‚¬ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ 순차 쑰회
  • 정상 μ‚¬μš©μž λŒ€λΉ„ λΉ„μ •μƒμ μœΌλ‘œ 높은 μš”μ²­ 밀도
  • 응닡 λ³Έλ¬Έ 크기 증가 λ˜λŠ” 민감정보 νŒ¨ν„΄ 반볡
  • 동일 토큰 λ˜λŠ” 동일 μ„Έμ…˜μ—μ„œ μ§€μ†λ˜λŠ” μžλ™ν™” 호좜
  • κ΅­κ°€, IP, 토큰, μ„Έμ…˜μ΄ λ°”λ€Œμ–΄λ„ μœ μ§€λ˜λŠ” 곡격 νŒ¨ν„΄μ˜ 일관성

예λ₯Ό λ“€μ–΄,

  • 10초 λ‚΄ 20회 이상 민감 API 호좜
  • 동일 μ„Έμ…˜μ—μ„œ 연속적인 μ‚¬μš©μž ID 증가 νŒ¨ν„΄
  • 응닡 본문에 반볡적으둜 κ°œμΈμ •λ³΄ ν•„λ“œ 포함
  • 정상 μ‚¬μš©μž 평균 λŒ€λΉ„ κ³Όλ„ν•œ 반볡 쑰회

같은 기쀀은
λ‹¨μˆœ IP 차단보닀 훨씬 더 ν˜„μ‹€μ μΈ 탐지 기쀀이 λ©λ‹ˆλ‹€.

즉,

κ³΅κ²©μžλŠ” IPλ₯Ό λΆ„μ‚°ν•  수 μžˆμ–΄λ„,
μžλ™ν™”λœ 쑰회 νŒ¨ν„΄κ³Ό 데이터 μ ‘κ·Ό νλ¦„κΉŒμ§€ μ™„μ „νžˆ μˆ¨κΈ°κΈ°λŠ” μ–΄λ ΅μŠ΅λ‹ˆλ‹€.


8. [μ˜μƒ μ‹œμ—°] 유좜된 JWTλ₯Ό μ΄μš©ν•œ λŒ€λŸ‰ 쑰회 곡격 λ°©μ–΄

μ•„λž˜ μ‹œμ—°μ€
νƒˆμ·¨λœ JWTλ₯Ό μ΄μš©ν•΄ 정상 μ‚¬μš©μžμ²˜λŸΌ APIλ₯Ό ν˜ΈμΆœν•˜λ©΄μ„œ
짧은 μ‹œκ°„ μ•ˆμ— λŒ€λŸ‰ 쑰회λ₯Ό μ‹œλ„ν•˜λŠ” 상황을 λ³΄μ—¬μ€λ‹ˆλ‹€.

μ˜μƒ μš”μ•½

  1. 곡격 λ°œμƒ
    κ³΅κ²©μžκ°€ νƒˆμ·¨ν•œ JWT둜 인증을 ν†΅κ³Όν•œ λ’€, 슀크립트λ₯Ό μ΄μš©ν•΄ μˆ˜μ‹­~수백 번의 API μš”μ²­μ„ μ „μ†‘ν•©λ‹ˆλ‹€.

  2. PLURA 탐지
    PLURA-XDR은 단일 IPλ‚˜ 토큰보닀 κ³Όλ„ν•œ μš”μ²­ νŒ¨ν„΄ 자체λ₯Ό κΈ°μ€€μœΌλ‘œ
    [Brute Force] API κ³Όμš”μ²­κ³Ό 같은 고신뒰도 이벀트λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

  3. μ¦‰μ‹œ 차단
    미리 μ„€μ •λœ μž„κ³„μΉ˜λ₯Ό μ΄ˆκ³Όν•˜λ©΄ μ¦‰μ‹œ μ°¨λ‹¨ν•˜μ—¬
    λŒ€κ·œλͺ¨ 데이터 유좜둜 μ΄μ–΄μ§€λŠ” 것을 λ§‰μŠ΅λ‹ˆλ‹€.


9. μ™œ 일반 방화벽은 λͺ» λ§‰μ„κΉŒ?

일반적인 λ³΄μ•ˆ μž₯λΉ„λŠ” 보톡 μ΄λ ‡κ²Œ λ¬»μŠ΅λ‹ˆλ‹€.

β€œμ΄ ν‚€κ°€ μœ νš¨ν•œκ°€?”

ν•˜μ§€λ§Œ ν›”μΉœ 킀도 κΈ°μˆ μ μœΌλ‘œλŠ” μœ νš¨ν•œ μ„œλͺ…을 κ°–κ³  μžˆμŠ΅λ‹ˆλ‹€.
κ·Έλž˜μ„œ 일반 μž₯λΉ„λŠ” 이λ₯Ό 정상 μ‚¬μš©μžμ²˜λŸΌ ν†΅κ³Όμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

반면 PLURA-XDR은
인증 자체λ₯Ό λ„˜μ–΄ λ‹€μŒμ„ λ΄…λ‹ˆλ‹€.

β€œμΈμ¦λœ μ‚¬μš©μžκ°€ μ™œ 같은 νŒ¨ν„΄μœΌλ‘œ μˆ˜μ‹­, 수백 번 민감 APIλ₯Ό μ‘°νšŒν•˜λŠ”κ°€?”

즉, μ°¨μ΄λŠ” ν† ν°μ˜ μœ νš¨μ„±μ΄ μ•„λ‹ˆλΌ
ν–‰μœ„μ˜ 비정상성을 λ³Ό 수 μžˆλŠλƒμž…λ‹ˆλ‹€.


10. λŒ€ν˜• ν”Œλž«νΌμ΄ λ°˜λ“œμ‹œ 점검해야 ν•  5κ°€μ§€ ν•­λͺ© βœ…

ν•­λͺ© 핡심 질문 체크
μ„œλͺ…ν‚€ 관리 ν‡΄μ‚¬μžΒ·μ „ν™˜ 인λ ₯ λ°œμƒ μ‹œ ν‚€ μ¦‰μ‹œ 폐기/ꡐ체 μ ˆμ°¨κ°€ μžˆλŠ”κ°€? β–‘
ID 섀계 μ™ΈλΆ€ λ…ΈμΆœ μ‹λ³„μžκ°€ μˆœμ°¨ν˜• μ •μˆ˜λ‘œ μ„€κ³„λ˜μ–΄ μžˆμ§€ μ•Šμ€κ°€? β–‘
민감 API 탐지 λŒ€λŸ‰ 쑰회, 순차 쑰회, 반볡 ν˜ΈμΆœμ„ 별도 νƒμ§€ν•˜λŠ”κ°€? β–‘
μš”μ²­/응닡 λ³Έλ¬Έ κ΄€μ œ μ–΄λ–€ 데이터가 μš”μ²­Β·μ‘λ‹΅μœΌλ‘œ μ˜€κ°€λŠ”μ§€ μ‹€μ‹œκ°„μœΌλ‘œ λ³Ό 수 μžˆλŠ”κ°€? β–‘
μžλ™ 차단 운영 μž„κ³„κ°’κ³Ό 차단 정책이 μ‹€μ œλ‘œ 켜져 있고 κ²€μ¦λ˜κ³  μžˆλŠ”κ°€? β–‘

11. μœ„ν˜‘ μΈμ‚¬μ΄νŠΈ: ν‚€ ν•˜λ‚˜λ‘œ ν”Œλž«νΌ 전체가 털릴 수 μžˆλ‹€

이번 사고가 λ³΄μ—¬μ£ΌλŠ” 핡심 κ΅ν›ˆμ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. λ‚΄λΆ€ 지식 및 ν‚€ μœ μΆœμ€ μ™ΈλΆ€ 곡격 λͺ»μ§€μ•Šκ²Œ 치λͺ…μ μž…λ‹ˆλ‹€.
  2. 인증 체계와 데이터 μ‚¬μš© κ΄€μ œλŠ” λ°˜λ“œμ‹œ ν•¨κ»˜ κ°€μ•Ό ν•©λ‹ˆλ‹€.
  3. ν‡΄μ‚¬μžΒ·λ‚΄λΆ€μž μœ„ν˜‘ λͺ¨λΈλ§μ€ 더 이상 선택이 μ•„λ‹™λ‹ˆλ‹€.
  4. ν”Œλž«νΌ 규λͺ¨κ°€ 클수둝 단일 ν‚€ μ‹€νŒ¨μ˜ ν”Όν•΄λŠ” κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ μ»€μ§‘λ‹ˆλ‹€.

즉,

JWT μ„œλͺ…ν‚€ ν•˜λ‚˜κ°€ 3,370만 계정 전체 유좜둜 μ΄μ–΄μ§ˆ 수 μžˆλ‹€λ©΄,
λ¬Έμ œλŠ” λ‹¨μˆœ 인증이 μ•„λ‹ˆλΌ 운영 μ „μ²΄μ˜ κ΅¬μ‘°μž…λ‹ˆλ‹€.


✍️ 결둠

이번 쿠팑 μ‚¬κ³ λŠ”
β€œν‚€κ°€ 유좜되면 λβ€μ΄λΌλŠ” λ‹¨μˆœν•œ μ΄μ•ΌκΈ°λ‘œ λλ‚˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

더 μ •ν™•νžˆ λ§ν•˜λ©΄,

  • ν‚€λŠ” μ™œ μ¦‰μ‹œ κ΅μ²΄λ˜μ§€ μ•Šμ•˜λŠ”κ°€
  • μ™œ μ •μˆ˜ν˜• IDκ°€ κ·ΈλŒ€λ‘œ μ™ΈλΆ€ μ‘°νšŒμ— μ‚¬μš©λ˜μ—ˆλŠ”κ°€
  • μ™œ 민감 API의 λŒ€λŸ‰ 쑰회λ₯Ό κ°μ§€ν•˜μ§€ λͺ»ν–ˆλŠ”κ°€
  • μ™œ μš”μ²­/응닡 λ³Έλ¬Έ 속 데이터 유좜 μ§•ν›„λ₯Ό 보지 λͺ»ν–ˆλŠ”κ°€

이 μ§ˆλ¬Έμ— λ‹΅ν•΄μ•Ό ν•©λ‹ˆλ‹€.

그리고 κ·Έ 닡은 κ²°κ΅­ ν•˜λ‚˜λ‘œ λͺ¨μž…λ‹ˆλ‹€.

인증만 λ΄μ„œλŠ” λΆ€μ‘±ν•©λ‹ˆλ‹€.
μ‹€μ œ 데이터 μ ‘κ·Ό ν–‰μœ„μ™€ 응닡 νλ¦„κΉŒμ§€ ν•¨κ»˜ 봐야 ν•©λ‹ˆλ‹€.

이 사건은
Q21μ—μ„œ 닀룬 β€œν‡΄μ‚¬μž ν‚€ 유좜 + Brute Force λŒ€μ‘β€ 문제λ₯Ό
μ‹€μ œ λŒ€κ·œλͺ¨ 사고 μ‚¬λ‘€λ‘œ μž…μ¦ν•œ λŒ€ν‘œμ  사건이라고 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

즉, ν•„μš”ν•œ 것은:

  • ν‚€ μ¦‰μ‹œ ꡐ체
  • ν–‰μœ„ 기반 탐지
  • μžλ™ 차단
  • μš”μ²­/응닡 λ³Έλ¬Έ 기반 κ΄€μ œ
  • μš΄μ˜λ˜λŠ” λ³΄μ•ˆ 체계

μž…λ‹ˆλ‹€.

λ³΄μ•ˆμ€ κΈ°μˆ μ„ λ³΄μœ ν•˜κ³  μžˆλ‹€λŠ” 사싀이 μ•„λ‹ˆλΌ,

섀정이 켜져 μžˆλŠ”κ°€,
μ‹€μ œλ‘œ νƒμ§€λ˜λŠ”κ°€,
μ‹€μ œλ‘œ μ°¨λ‹¨λ˜λŠ”κ°€

둜 νŒλ‹¨ν•΄μ•Ό ν•©λ‹ˆλ‹€.


πŸ“š μ°Έκ³ ν•˜κΈ°