[2026-07-06] Detecting Asymmetric Application-layer Denial of Service Attacks In Flight with FINELAME

Motivation & Background

Asymmetric DoS

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ , ์˜๋ฏธ๋ก ์  ๋˜๋Š” ๊ตฌํ˜„์ƒ์˜ ํŠน์„ฑ์„ ํ‘œ์ ์œผ๋กœ ์‚ผ์•„ ์ ์€ ์–‘์˜ ํŠธ๋ž˜ํ”ฝ๊ณผ ๊ณต๊ฒฉ์ž์˜ ์ž์›๋งŒ์œผ๋กœ ์ž์›์˜ ๊ฐ€์šฉ์„ฑ์„ ์นจํ•ดํ•˜๋Š” ๊ณต๊ฒฉ.

  • Type
    • Regular-expression DoS (ReDoS) : ์ •๊ทœํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ํ‘œ์ ์œผ๋กœ ์‚ผ์Œ. ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ worst case๋ฅผ ์œ ๋„
      • ex) (a+)+ ๊ฐ™์€ ์ •๊ทœ์‹ : a๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ์ƒ์ž๊ฐ€ 1๊ฐœ ์ด์ƒ ์žˆ๋Š” ์ง€ ํ™•์ธ. aaaaX์ธ ๊ฒฝ์šฐ.
        • ์ƒ์ž 1๊ฐœ : aaaa ํ™•์ธ ํ›„ X๊ฐ€ ์žˆ์Œ์œผ๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐ
        • ์ƒ์ž 2๊ฐœ : aaa a ํ™•์ธ ํ›„ X๊ฐ€ ์žˆ์Œ์„ ํ™•์ธ. aa aa ์ดํ›„ X๊ฐ€ ์žˆ์Œ์„ ํ™”ใ„ฑใ„ฑ์ธ
        • ์ด ๊ณผ์ •์„ ์ƒ์ž 4๊ฐœ๊นŒ์ง€ ํ•ด์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ํ•จ
    • XML Bomb : XML ๋ฌธ์„œ์— Entity๋ผ๋Š” ๋‹จ์ถ•์–ด ๊ธฐ๋Šฅ์ด ์žˆ์Œ. ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์•…์šฉํ•˜์—ฌ ์ง€์—ฐ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€
      • ex) &A; โ†’ ํ•˜ํ•˜ํ•˜ํ•˜ํ•˜ํ•˜ํ•˜ํ•˜ํ•˜, &B; โ†’ &A;&A;&A;&A;&A;&A; &C; โ†’ &B;&B;&B;โ€ฆ
      • ๊ณต๊ฒฉ์ž์˜ ํ…์ŠคํŠธ๋Š” ์กฐ๊ธˆ์ด์ง€๋งŒ ์„œ๋ฒ„์—์„œ ํŒŒ์‹ฑ์„ ํ•  ๋•Œ ์šฉ๋Ÿ‰์ด ์ปค์ง
    • Improper (de-)serialization : ๋””์ฝ”๋”ฉํ•˜๋Š” ๊ณผ์ •์—์„œ for (;;) {} ๊ฐ™์€ ๋ฌดํ•œ ๋ฃจํ”„ ์ฝ”๋“œ๋ฅผ ์ฃผ์ž…ํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘๋‹จ
    • Event-handler Poisoning (EHP) : ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ Node.js ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ํ•˜๋‚˜์˜ ์š”์ฒญ์ด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ถ™์žก๊ณ  ์žˆ๋Š” ์ˆœ๊ฐ„์— ๋‹ค๋ฅธ ์›น ์š”์ฒญ์ด ๋ฉˆ์ถฐ ๋ฒ„๋ฆผ
  • ๋ฐฉ์–ด ๋ฐฉ๋ฒ•์˜ ๋ถ€์žฌ
    • ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜ ๋ฐฉ์–ด : ๋„คํŠธ์›Œํฌ ์ˆ˜์ค€์—์„œ ์‹๋ณ„ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ ํŒจํ„ด์ด ๋ถ€์กฑ
    • DPI ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์–ด๋–ค ์š”์ฒญ์ด ์ž์›์„ ๋…์ ํ•˜๋Š” ์ง€ ์‚ฌ์ „์— ์˜ˆ์ธกํ•ด์•ผ ํ•˜์ง€๋งŒ ์‹คํ–‰ ์ „๊นŒ์ง€๋Š” ๋ชจ๋ฆ„
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€ ๋ฐฉ์–ด
      • ํ˜„๋Œ€ ์›น ์„œ๋น„์Šค์˜ ์ฝ”๋“œ๋Š” ์˜คํ”ˆ ์†Œ์Šค์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์œ„์ฃผ์ด๋ฉฐ ์™ธ๋ถ€ ํŒจํ‚ค์ง€๋“ค์€ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์—†๋Š” ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ธ”๋ž™ ๋ฐ•์Šค ํ™˜๊ฒฝ์— ๋ฐฉ์–ด ๋กœ์ง์„ ๋„ฃ๊ธฐ ํž˜๋“ฆ
      • ํ˜„๋Œ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์—ฌ๋Ÿฌ ์–ธ์–ด๋กœ ๋งŒ๋“ค์–ด์ง. ๋ชจ๋“  ์–ธ์–ด์™€ ๋Ÿฐํƒ€์ž„์˜ ํŠน์„ฑ์„ ๋‹ค ์ดํ•ดํ•˜๊ณ  ๋งž๋Š” ๋ฐฉ์–ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ค์›€
      • ์ˆ˜๋™์œผ๋กœ ์š”์ฒญ์„ ์ถ”์ ํ•˜๋Š” ๊ฐ์‹œ ์ฝ”๋“œ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๋ฉฐ ์œ„ํ—˜ํ•œ ์ž‘์—…

Design goal

  • ์‹คํ–‰ ์ค‘ ํƒ์ง€ : ์š”์ฒญ์„ ์‹คํ–‰ํ•ด์•ผ ์•…์„ฑ์ž„์„ ์•Œ์•„์ฐจ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•˜๋‚˜์˜ ์š”์ฒญ๋งŒ์œผ๋กœ ์‹œ์Šคํ…œ์ด ๋ฌด๋„ˆ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌํ›„ ๋Œ€์‘ ๋ฐฉ์‹ ์—ญ์‹œ ๋ถˆ๊ฐ€๋Šฅ
  • ์ž์› ๋…๋ฆฝ์„ฑ : ADoS๋Š” ์—ฌ๋Ÿฌ ์ž์›์„ ํƒ€๊ฒŸ์œผ๋กœ ํ•ด์„œ Solution์€ ์ž์› ์ข…๋ฅ˜์— ์ข…์†๋˜๋ฉด ์•ˆ๋จ.
  • ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ์ถ”์  : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์—ฌ๋Ÿฌ ๋‚ด๋ถ€ ์ปดํฌ๋„ŒํŠธ๋‚˜ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„˜. ๊ณต๊ฒฉ์ž๋Š” ์ด ์ปดํฌ๋„ŒํŠธ ์‚ฌ์ด์˜ ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋‚˜๋“ค๋ฉฐ ์ž์›์„ ๊ฐ‰์•„๋จน๊ธฐ ๋•Œ๋ฌธ์—, ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์›์ด ์†Œ๋ชจ๋˜๋“  ์ƒ๊ด€์—†์ด ์ตœ์ดˆ์˜ ์›น ์š”์ฒญ ID ํ•˜๋‚˜๋กœ ๋๊นŒ์ง€ ์ถ”์ ํ•ด์„œ ์ž์› ์‚ฌ์šฉ๋Ÿ‰์„ ์ผ์›ํ™”
  • ์–ธ์–ด ๋…๋ฆฝ์„ฑ : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์ด ์—ฌ๋Ÿฌ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜๋ฉฐ ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ข…์†๋˜๋ฉด ์•ˆ๋จ.
  • ๊ฐœ๋ฐœ์ž ๋…ธ๋ ฅ์˜ ์ตœ์†Œํ™” : ํƒ์ง€ ์‹œ์Šคํ…œ์€ DevOps ํ™˜๊ฒฝ์— ์ตœ์†Œํ•œ์˜ ๋ถ€๋‹ด์„ ์ค˜์•ผ ํ•˜๋ฉฐ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์ž˜ ๋ชฐ๋ผ๋„ ๋จ.

Threat Model

Threat Model

  1. ๊ณต๊ฒฉ์ž๋Š” ์ทจ์•ฝํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์„œ๋น„์Šค์— ์ž„์˜์˜ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ
  2. ๊ณต๊ฒฉ์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์žˆ๋Š” ๋ชจ๋“  ์ผ๋ฐ˜ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ œ์–ด
  3. ๊ณต๊ฒฉ์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ์™€ ์ทจ์•ฝ์ ์„ ์•Œ๊ณ  ์žˆ์Œ
    • CPU ์ž์›๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ์ž์›์„ ๋Œ€์ƒ์œผ๋กœ ๊ณต๊ฒฉ
    • ์ผ๋ฐ˜ ํด๋ผ์ด์–ธํŠธ์™€ ์•…์„ฑ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Œ

Assumptions

  1. ๋ฐฑ๋„์–ด ๊ฐ™์€ ์•…์„ฑ ์ฝ”๋“œ๊ฐ€ ์•„๋‹˜
  2. ์ตœ์†Œํ•œ ์–ด๋А ์ •๋„์˜ ์ •์ƒ์ ์ธ ํŠธ๋ž˜ํ”ฝ(benign traffic)์ด ๋“ค์–ด์™€์•ผ ํ•จ
    • 100% ์•…์„ฑ ํŠธ๋ž˜ํ”ฝ๋งŒ ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ ML์ด ์ž˜๋ชป ํ•™์Šต
  3. ๋‹จ์ผ ์š”์ฒญ์ด ์‚ฌ์šฉํ•˜๋Š” ์†Œ๋น„๋œ ์ž์›์„ ์•Œ ์ˆ˜ ์žˆ์Œ

FINELAME

image.png

Request Mapping

๊ฐ ์ปดํฌ๋„ŒํŠธ์™€ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌ์˜ ์‹œ์ž‘๊ณผ ๋, ๊ทธ๋ฆฌ๊ณ  ์ž์› ์‚ฌ์šฉ๋Ÿ‰์ด ๊ท€์†๋˜์–ด์•ผ ํ•  ๋Œ€์ƒ ์š”์ฒญ์„ ๊ตฌ๋ถ„

  • startProcessing() : ์ฒ˜๋ฆฌ ๋‹จ๊ณ„์˜ ์‹œ์ž‘์„ ๋‚˜ํƒ€๋ƒ„. ์ด ์ง€์  ์ดํ›„์— ๋ฐœ์ƒํ•˜๋Š” ์ž์› ์‚ฌ์šฉ์ด๋‚˜ ํ• ๋‹น๋„ ์ƒˆ๋กญ๊ฒŒ ๋“ค์–ด์˜จ ๊ณ ์œ ํ•œ ์š”์ฒญ์˜ ๋ชซ์œผ๋กœ ํ• ๋‹น
  • attributeRequest(reqId) : PID๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉด ์ฒ˜๋ฆฌ ๋‹จ๊ณ„๋ฅผ ์š”์ฒญ ID์— ๋งคํ•‘
  • endProcessing() : ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ.
  • EX) ๋„คํŠธ์›Œํฌ ํŒจํ‚ท ๊ณผ์ •
    1. NIC์— ํŒจํ‚ท์ด ๋“ค์–ด์˜ค๋ฉด Queue์—์„œ ํŒจํ‚ท์„ ๊บผ๋‚ผ ๋•Œ startProcessing์„ ์‹คํ–‰ํ•˜๋ฉฐ ์ž์›์„ ๊ธฐ๋ก
    2. ์ฒ˜์Œ์—๋Š” ํŒจํ‚ท์ด ์–ด๋–ค ์›น ์š”์ฒญ์ธ์ง€ ๋ชจ๋ฅด์ง€๋งŒ TCP ๊ณ„์ธต์ด ๋˜์–ด์„œ์•ผ 5-tuple์„ ํ™•์ธํ•˜์—ฌ ID๋ฅผ ๊ธฐ๋ก. ์ด ์ˆœ๊ฐ„ attributeRequest(reqID)๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ startProcessing์—์„œ๋ถ€ํ„ฐ ์ธก์ •ํ•œ ์ž์›์„ ํ•ด๋‹น ID์— ํ• ๋‹นํ•˜๋ฉฐ ์ดํ›„ ๊ณผ์ •๋„ ํ•ด๋‹น ID๋กœ ํ• ๋‹น
  • ๋ฐฐ๊ฒฝ ์ž‘์—… (ex. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜) ๊ฐ™์€ ๊ณต์œ  ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ๋ถ„ํ• ํ•˜๊ฑฐ๋‚˜ ํ™•๋ฅ ์ ์œผ๋กœ ํ• ๋‹น
    • ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐœ์ƒํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ํ• ๋‹นํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ
  • OS์˜ thread/process์™€ ์‹๋ณ„์ž(ID)์˜ ๋™๊ธฐํ™” : ์–ด๋–ค thread๊ฐ€ ์–ด๋–ค ID๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ง€ ๋งคํ•‘
    • ์‹๋ณ„์ž๋Š” ๋„คํŠธ์›Œํฌ ๋‹จ์—์„œ๋Š” 5-tuple, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์ผ ์ˆ˜ ์žˆ์Œ.
    • ํ›„์— ์‹๋ณ„์ž๊ฐ€ ํ†ตํ•ฉ๋จ.
    • ์ตœ์ ํ™” : ID ๋ฐœ๊ธ‰๊ณผ OS ์Šค๋ ˆ๋“œ ๊ฐ„ ๋งคํ•‘์ด ํ•œ ๋ฒˆ์— ํ•ด๊ฒฐ
      • ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ์Šค๋ ˆ๋“œ ํ’€ ๊ธฐ๋ฐ˜์€ ์š”์ฒญ์˜ entry point๊ฐ€ ํ•˜๋‚˜๊ฑฐ๋‚˜ ์ ์Œ
        • ํ•ด๋‹น ์ง„์ž…์ ์— request-mapper๋ฅผ ์†์‰ฝ๊ฒŒ ๋ถ€์ฐฉ

Resource Monitoring

context switches, mallocs, page faults ๊ฐ™์€ ์ž‘์€ ๋‹จ์œ„์—์„œ ์‹คํ–‰์ค‘์ธ ์š”์ฒญ์˜ ์ž์› ์‚ฌ์šฉ๋Ÿ‰์„ ์ถ”์ 

eBPF

  • BPF : ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๋„คํŠธ์›Œํ‚น ํ•˜์œ„ ์‹œ์Šคํ…œ์˜ ๊ตฌ์„ฑ ์š”์†Œ. ์ปค๋„ ์ด๋ฒคํŠธ์—์„œ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์ˆœํ•œ ์–ธ์–ด๋ฅผ ํ•ด์„ํ•˜๋Š” ๊ฐ€์ƒ ๋จธ์‹ (Virtual Machine)
    • JIT(Just-In-Time) ์ปดํŒŒ์ผ๋Ÿฌ ๊ฐœ๋ฐœ๋กœ ์‹คํ–‰ ์ค‘์— ์ตœ์ ํ™”
  • eBPF : BPF + ๋” ๋งŽ์€ ๋ ˆ์ง€์Šคํ„ฐ์™€ ๋„ค์ดํ‹ฐ๋ธŒ RISC ISA(๋ช…๋ น์–ด ์ง‘ํ•ฉ ์•„ํ‚คํ…์ฒ˜)๋ฅผ ๋ชจ๋ฐฉํ•œ ๋ช…๋ น์–ด ์ง‘ํ•ฉ์„ ์‚ฌ์šฉ + ์ œํ•œ๋œ ์ปค๋„ ํ•จ์ˆ˜์˜ ์ผ๋ถ€๋ฅผ ํ˜ธ์ถœ + ํ•ด์‹œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด kernel-space์—์„œ user-space์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ 
    • ์‚ฌ์šฉ์ž๊ฐ€ C์–ธ์–ด๋ฅผ ํ†ตํ•ด ์ž‘์„ฑํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด low-level์˜ eBPF ์ฝ”๋“œ ์ƒ์„ฑ
    • ๊ฒ€์ฆ๊ธฐ์—์„œ ๋ถ€๋™ ์†Œ์ˆ˜์  ๊ธˆ์ง€, ๋ช…๋ น์–ด ์ˆ˜ ์ œํ•œ, ๋ฌดํ•œ ๋ฃจํ”„ ๊ธˆ์ง€ ๋“ฑ์˜ ์ œ์•ฝ์ด ์žˆ์Œ

Architecture

๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ๋ฐ ์ปค๋„ ๊ณต๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์†Œ์Šค (์Šค์ผ€์ฅด๋Ÿฌ, TCP ์Šคํƒ) ๋“ฑ์— attach

  • Feature

    image.png

  • ๋™์ž‘ ํ๋ฆ„
    1. ํ˜„์žฌ PID์— ์š”์ฒญ mapping ํ™œ์„ฑํ™” ํ™•์ธ. ์•„๋‹Œ ๊ฒฝ์šฐ exit
    2. ํ™œ์„ฑํ™”๋œ PID์ธ ๊ฒฝ์šฐ metrics๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  timestamp์™€ ํ•จ๊ป˜ ๊ณต์œ  ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ์ €์žฅ
    3. ์ž์› ์‚ฌ์šฉ๋Ÿ‰์„ ๋ฐ”ํƒ•์œผ๋กœ ๋ชจ๋ธ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋น„๊ตํ•˜์—ฌ ์š”์ฒญ์— ๋Œ€ํ•ด ์ด์ƒ ํƒ์ง€ ์ˆ˜ํ–‰
  • ์ปค๋„ ํ•จ์ˆ˜
    • CPU ์ž์› : ์ ์œ  ์‹œ๊ฐ„ (cputime)์„ ์ธก์ •
      • scheduler_tick() : ํƒ€์ด๋จธ ์ธํ„ฐ๋ŸฝํŠธ
      • finish_task_switch() : ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜
      • ์Šค๋ ˆ๋“œ๊ฐ€ ์Šค์ผ€์ฅด๋ง๋˜์–ด ์‹œ์ž‘ํ•  ๋•Œ๋ถ€ํ„ฐ ์Šค์™‘ ์•„์›ƒ(CPU์—์„œ ๋‚ด๋ ค์˜ด)
    • TCP ์ž์›
      • ์†ก์‹  ๋ฐ”์ดํŠธ(tcp_sent), ์ˆ˜์‹  ๋ฐ”์ดํŠธ (tcp_rcvd) ์ถ”์ 
        • tcp_sendmsg(), tcp_rcleanbuf()
      • TCP ์†ก์‹ ์ž ์œ ํœด ์‹œ๊ฐ„ (tcp_idle_time)
        • ๋‘ ๋ฒˆ์˜ tcp_cleanup_rbuf() ์‚ฌ์ด์˜ ๊ฒฝ๊ณผ ์‹œ๊ฐ„
        • ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์—ฐ ์ „์†กํ•˜๋Š” Slowloris๋‚˜ RUDY์™€ ๊ฐ™์€ ์ €์† ๊ณต๊ฒฉ ํƒ์ง€์— ํ•„์ˆ˜์ 
      • ๋ฉ”๋ชจ๋ฆฌ ์ž์›
        • ํž™ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๋Ÿ‰
          • malloc
        • ํŽ˜์ด์ง€ ํดํŠธ ๋ฐœ์ƒ ํšŸ์ˆ˜
          • exception:page_fault_user : ์ปค๋„ ํŠธ๋ ˆ์ด์Šค ํฌ์ธํŠธ
  • ์ด์™ธ์—๋„ ์‚ฌ์šฉ์ž ์ •์˜ eBPF ํ”„๋กœ๊ทธ๋žจ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์˜ ์ž„์˜์˜ ์ง€์ (probe points)๋ฅผ ๋ถ€์ฐฉํ•  ์ˆ˜ ์žˆ์Œ
    • ํ ๊ธธ์ด๋‚˜ ํ•ด์‹œ ํ…Œ์ด๋ธ” ์ ์œ ์œจ๊ณผ ๊ฐ™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŠนํ™” ์ง€ํ‘œ๋ฅผ ์ถ”๊ฐ€๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ ํƒ์ง€ ๋ฒ”์œ„ ํ™•์žฅ

Attack Detection in FINELAME

  • ์ˆ˜์ง‘ํ•œ ๊ฐ feature์— ๋Œ€ํ•œ n ์ฐจ์› ๊ณต๊ฐ„์—์„œ ์ „์ฒด์ ์ธ ์ขŒํ‘œ์˜ ์œ„์น˜๋ฅผ ์ข…ํ•ฉ์ ์œผ๋กœ ํ‰๊ฐ€. ์—ฌ๋Ÿฌ feature๋ฅผ ์†์ด๋Š” mutil-vector ๊ณต๊ฒฉ์„ ์‹๋ณ„
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ์„ ์ •
      • ํ•™์Šต ๋ณต์žก๋„, ์˜ˆ์ธก ๋ณต์žก๋„, ํ•™์Šต ๋ฐ์ดํ„ฐ์˜ ์–‘ ๋•Œ๋ฌธ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ œํ•œ์ 
      • ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ˜ : ์ •์ƒ Cluster๋ฅผ ํ˜•์„ฑํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ์™€์˜ ๊ฑฐ๋ฆฌ ์ธก์ •์„ ํ†ตํ•ด ์ด์ƒ ํƒ์ง€
        • DBSCAN ๊ฐ™์€ ๊ฒฝ์šฐ ๋ชจ๋“  core์™€ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•™์Šต ๋ณต์žก๋„ ์ฆ๊ฐ€๋กœ ํž˜๋“ฆ
      • ์˜ˆ์ธก ๊ธฐ๋ฐ˜ : function์„ ๋งŒ๋“ค์–ด์„œ ์˜ค์ฐจ๊ฐ€ ํฐ ๊ฐ’์„ ํ†ตํ•ด ์ด์ƒ ํƒ์ง€
        • ์‹ ๊ฒฝ๋ง ๊ฐ™์€ ๊ฒฝ์šฐ ๋งŽ์€ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํ–‰๋ ฌ ๊ณฑ์…ˆ์„ ๋ฌดํ•œํžˆ ๋ฐ˜๋ณตํ•ด์•ผ ํ•˜๋Š” ๋ฐ eBPF ๋‚ด์—์„œ ๋ฌดํ•œ ๋ฃจํ”„๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ. eBPF์˜ ๋ช…๋ น์–ด ์ œํ•œ์— ๊ฑธ๋ฆผ
    • K-Means ์‚ฌ์šฉ : user-space์—์„œ ํ•™์Šต๋œ K-means์˜ centroid๋ฅผ ํ†ตํ•ด ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ •ํ•˜์—ฌ ์ด์ƒ ํƒ์ง€
      • K ๊ฐ’ ์„ค์ • : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ฒ˜๋ฆฌํ•˜๋Š” ์š”์ฒญ ์œ ํ˜•์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ค์ •ํ–ˆ์„ ๋•Œ, ํƒ์ง€ ์ •ํ™•๋„๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ตœ์†Œํ™”
      • ํ•™์Šต ๊ณผ์ •
        1. ์ •์ƒ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ : ํƒ์ง€๋ฅผ ๋ณด๋ฅ˜ํ•˜๊ณ  eBPF ๊ณต์œ ๋งต์— ์ถ•์ 
        2. ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ : ๋ชจ๋“  ์ž์› ์ง€ํ‘œ ๋‹จ์œ„ ์ฐจ์ด๋ฅผ ์—†์• ๊ธฐ ์œ„ํ•ด ํ‰๊ท  0, ํ‘œ์ค€ ํŽธ์ฐจ 1๋กœ ๋งž์ถ”๋Š” ํ‘œ์ค€ํ™” ์ž‘์—… ์ˆ˜ํ–‰
        3. ํ•™์Šต ํ›„ eBPF๋กœ ๋ชจ๋ธ ๋ฐฐํฌ
          • ํŒŒ๋ผ๋ฏธํ„ฐ : Centroid, ํ‰๊ท  ๋ฐ ํ‘œ์ค€ํŽธ์ฐจ(๋ฐ์ดํ„ฐ๋“ค์„ ํ‘œ์ค€ํ™” ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ’), ์ž„๊ณ„๊ฐ’
  • ๋ชจ๋ธ ํ•™์Šต ๋ฐ ๋ฐฐํฌ
    • eBPF์—์„œ๋Š” ๋ถ€๋™ ์†Œ์ˆ˜์  ๋ช…๋ น์–ด์— ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์—ฌ ํ‰๊ท ๊ณผ ํ‘œ์ค€ ํŽธ์ฐจ ๋“ฑ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ.
      • ๊ณ ์ • ์†Œ์ˆ˜์  ์—ฐ์‚ฐ ๋ฐ ๋น„ํŠธ ์‹œํ”„ํŠธ. $10^a$๋ฅผ ๊ณฑํ•ด ์ •์ˆ˜๋กœ ๋งŒ๋“ฆ
      • ํ‘œ์ค€ํ™” ๊ณต์‹ :
      \[x_{new} = \frac{x \cdot 10^a - \mu \cdot 10^a}{\sigma \cdot 10^b}\]
    • ๋ฐ˜๋ณต๋ฌธ ๋ฐ ๋ฃจํŠธ ์—ฐ์‚ฐ์ด ๊ธˆ์ง€๋˜์–ด ์œ ํด๋ฆฌ๋””์•ˆ ๊ฑฐ๋ฆฌ ๋Œ€์‹  ์ ˆ๋Œ“๊ฐ’์„ ๋”ํ•˜๋Š” L1 ๊ฑฐ๋ฆฌ ์ ์ˆ˜๋ฅผ ์‚ฌ์šฉ
    • ๋‹จ์ˆœ DDoS ๊ณต๊ฒฉ์€ ์ž์›์„ ๊ทน๋‹จ์ ์œผ๋กœ ์ ๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ƒ์น˜๋กœ ํƒ์ง€๋  ์ˆ˜ ์žˆ์Œ. ๊ฑฐ๋ฆฌ ์ ์ˆ˜์— ์Œ์ˆ˜ ์ ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด DDoS์— ๋Œ€ํ•ด์„œ ADoS ์š”์ฒญ๋งŒ ์–‘์ˆ˜๋ฅผ ๊ฐ–๊ณ  flag๋ฅผ ๊ฝ‚์•„ ์ฐจ๋‹จํ•จ
      • DDoS๋Š” ์ œ์™ธํ•˜๊ณ  ADoS๋งŒ ํƒ€๊ฒŸํŒ…

Use Case

  • Apache ์›น ์„œ๋ฒ„ : ๋‹ค์ค‘ ์ฒ˜๋ฆฌ ๋ชจ๋“ˆ(MPM, Multi-Processing Modules)์— ์˜ํ•ด ๊ตฌํ˜„. ์—ฌ๋Ÿฌ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ(worker threads)๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ(connection)์„ ์ฒ˜๋ฆฌ
    1. ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ž‘์—…์ž ์Šค๋ ˆ๋“œ์— ๋ฐฐ์ •(dispatch)๋˜๊ธฐ ์ „์— ์ด๋ฅผ ๋‹ด์•„๋‘˜ conn ๊ฐ์ฒด๊ฐ€ core_create_conn ํ•จ์ˆ˜์— ์˜ํ•ด ์ƒ์„ฑ
      • core_create_conn์— 1๊ฐœ์˜ ์š”์ฒญ-๋งตํผ๋ฅผ ๋ถ€์ฐฉ. ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ์ƒ์„ฑ
      • HTTP ์ฒ˜๋ฆฌ ํ•จ์ˆ˜๋“ค์— 2๊ฐœ์˜ ์š”์ฒญ-๋งตํผ๋ฅผ ๋ถ€์ฐฉ
        • ํ•จ์ˆ˜ ์ง„์ž… ์‹œ ํ˜ธ์ถœ๋˜๋Š” uprobe
        • ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ ์‹œ ํ˜ธ์ถœ๋˜๋Š” uretprobe
      • conn ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ณ ์œ  ์‹๋ณ„์ž(ID)๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž‘์—…์ž ์Šค๋ ˆ๋“œ์— ๋งตํ•‘
        • ์ด ๋งตํ•‘์€ ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜(return)๋˜๊ณ  ์š”์ฒญ์ด ์‹œ์Šคํ…œ์„ ๋น ์ ธ๋‚˜๊ฐˆ ๋•Œ ํ•ด์ œ(undone)
        • ์ž‘์—…์ž ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒˆ๋กœ์šด ์š”์ฒญ์„ ์‹คํ–‰ํ•  ๋•Œ, ์š”์ฒญ-๋งตํผ๋Š” ์ƒˆ๋กœ์šด ์š”์ฒญ์˜ ID๋กœ ๋งตํ•‘์„ ์—…๋ฐ์ดํŠธ
    2. conn ๊ฐ์ฒด๋Š” ap_process_http_sync_connection ๋˜๋Š” p_process_http_async_connection ํ•จ์ˆ˜์— ์˜ํ•ด ์ฒ˜๋ฆฌ
  • Node.js : ์ž‘์—… ํ’€์— ์ž‘์—…์„ ๋– ๋„˜๊ธฐ๋Š” ๋น„๋™๊ธฐ์  ๋ชจ๋ธ. ๊ณ„์ธก์ด ์–ด๋ ค์›€. 7๊ฐœ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ํ•จ์ˆ˜์— eBPF ํ”„๋กœ๋ธŒ๋ฅผ ๋ถ€์ฐฉ
    • uv_accept: ์ƒˆ๋กœ์šด ์š”์ฒญ์ด ์ดˆ๊ธฐํ™”๋˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ์™€์˜ ํ†ต์‹ ์„ ์ฒ˜๋ฆฌํ•˜๋Š” uv_stream_t ๊ตฌ์กฐ์ฒด์™€ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
    • uv__read ๋ฐ uv__write: ํด๋ผ์ด์–ธํŠธ์˜ ์ŠคํŠธ๋ฆผ๊ณผ ์—ฐ๊ฒฐ๋œ ์š”์ฒญ์ด ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ โ€˜ํ˜„์žฌ ์Šค๋ ˆ๋“œโ€™์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
    • uv__work_submit: โ€˜ํ˜„์žฌ ์Šค๋ ˆ๋“œโ€™์— ํ• ๋‹น๋œ ์š”์ฒญ์ด ์ž‘์—… ํ’€(worker pool)์— ์ œ์ถœ๋˜๋Š” ์ž‘์—… ์š”์ฒญ(work-request)๊ณผ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
    • uv__fs_work ๋ฐ uv__fs_done: ์ž‘์—… ์š”์ฒญ๊ณผ ์—ฐ๊ฒฐ๋œ ์š”์ฒญ์ด ํ˜„์žฌ (์ž‘์—…์ž) ์Šค๋ ˆ๋“œ์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
    • uv_async_send: ์š”์ฒญ์ด ํ˜„์žฌ ์Šค๋ ˆ๋“œ์—์„œ ํ• ๋‹น ํ•ด์ œ(unassigned)๋ฉ๋‹ˆ๋‹ค.
  • DeDoS : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์ด๋ฒคํŠธ ํ(Queue)๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•˜๋Š” ๋ถ„์‚ฐํ˜• ๊ตฌ์กฐ
    • ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” โ€˜๋ถ„์‚ฐ ์š”์ฒญ ์ถ”์  IDโ€™๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์Šค๋ ˆ๋“œ์˜ PID์™€ ์ง์ ‘ ๋งตํ•‘
    • ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋‹จ์ผ ์ด๋ฒคํŠธ ์ˆ˜์‹  ํ•จ์ˆ˜์ธ receive() ํด๋ž˜์Šค์— ํ”„๋กœ๋ธŒ๋ฅผ ๋ถ€์ฐฉ

Evaluation

Setup

  • ํ•˜๋“œ์›จ์–ด ๋ฐ ์‹œ์Šคํ…œ ์ธํ”„๋ผ
    • ์„œ๋ฒ„ ๋จธ์‹ : Intel Xeon Silver 4114 (12 Cores, 2.20GHz), 62GB RAM
    • ํด๋ผ์ด์–ธํŠธ ๋จธ์‹ : Intel Xeon E5-2630L v3 (1.80GHz), 62GB RAM
    • ํ†ต์ œ ์กฐ๊ฑด: ํ•˜๋“œ์›จ์–ด ๋ ˆ๋ฒจ์˜ ์„ฑ๋Šฅ ์™œ๊ณก์„ ๋ง‰๊ธฐ ์œ„ํ•ด ํ•˜์ดํผ์Šค๋ ˆ๋”ฉ(Hyperthreading) ๋ฐ DVFS(๋™์  ์ „์•• ๋ฐ ์ฃผํŒŒ์ˆ˜ ์Šค์ผ€์ผ๋ง)๋ฅผ ๋ชจ๋‘ ๋น„ํ™œ์„ฑํ™” ์ฒ˜๋ฆฌํ•จ
      • ํ•˜์ดํผ์Šค๋ ˆ๋”ฉ : ๋ฌผ๋ฆฌ์  CPU 1๊ฐœ๋ฅผ ๋‘ ๊ฐœ์˜ ๋…ผ๋ฆฌ์ ์ธ ์ฝ”์–ด 2๊ฐœ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์ž‘๋™. CPU ์‚ฌ์šฉ๋Ÿ‰ ์ธก์ •์ด ํž˜๋“ค์–ด์ง
      • DVFS : ์ €๋ถ€ํ•˜์—์„œ๋Š” ์ „๋ ฅ ์†Œ๋ชจ๋ฅผ ์ค„์ด๊ณ  ๊ณ ๋ถ€ํ•˜ ์ž‘์—…์—์„œ๋Š” ์†๋„๋ฅผ ์˜ฌ๋ฆฌ๋Š” ์ „๋ ฅ ๊ด€๋ฆฌ ๊ธฐ์ˆ 
  • ์›น ํ”Œ๋žซํผ ๋ฐ ์ทจ์•ฝ์  ์„ธํŒ…
    • Apache (v2.4.38)
      • ๊ตฌ์กฐ: ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์‹ฑ ๋ชจ๋“ˆ(MPM) ๊ธฐ๋ฐ˜, 50๊ฐœ์˜ Worker threadsํ• ๋‹น.
      • ์ฝ˜ํ…์ธ  ๋ฐ ์ œ์•ฝ: ์œ„ํ‚คํ”ผ๋””์•„ ํŽ˜์ด์ง€ ์„œ๋น„์Šค ์ œ๊ณต, ๋ชจ๋“  ์—ฐ๊ฒฐ์— 20์ดˆ์˜ ํƒ€์ž„์•„์›ƒ ๊ฐ•์ œ.
    • Node.js (v12.0.0-pre)
      • ๊ตฌ์กฐ: ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ๋ฃจํ”„ ๊ธฐ๋ฐ˜, libuv ์ž‘์—… ํ’€์— ๊ธฐ๋ณธ๊ฐ’์ธ 4๊ฐœ Worker threads ํ• ๋‹น.
        • ๋ฉ”์ธ ๋กœ์ง์€ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์ด์ง€๋งŒ ๋ฌด๊ฑฐ์šด I/O ์ž‘์—…์€ libuv ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด worker thread๊ฐ€ ์ž‘์—…
      • ์ทจ์•ฝ์  ์„ธํŒ…: ํŒŒ์ผ ๊ฒฝ๋กœ ํƒ์ƒ‰์„ ์œ„ํ•ด URI ์ •๊ทœํ‘œํ˜„์‹์„ ํŒŒ์‹ฑํ•˜๋Š” ๊ณผ์ •์—์„œ ReDoS(์ •๊ทœํ‘œํ˜„์‹ DoS, CPU ๋งˆ๋น„) ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•œ liburi ํŒŒ์„œ๋ฅผ ์—ฐ๋™ํ•จ.
        • liburi : URL์ด ๋งž๋Š” ์ง€ ๋ถ„์„(Parse) ํ•ด์ฃผ๋Š” ๋ชจ๋“ˆ
    • DeDoS (์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ”„๋ ˆ์ž„์›Œํฌ)
      • ๊ตฌ์กฐ: ์†Œ์ผ“ ์ฝ๊ธฐ, HTTP ํŒŒ์‹ฑ, ํŒŒ์ผ ์„œ๋น„์Šค, XML ํŒŒ์‹ฑ, ์ •๊ทœํ‘œํ˜„์‹ ํŒŒ์‹ฑ, ์‘๋‹ต ์“ฐ๊ธฐ ๋“ฑ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„์‚ฐ ๊ตฌํ˜„.
      • ์ทจ์•ฝ์  ์„ธํŒ…: POST ์š”์ฒญ์œผ๋กœ ์—…๋กœ๋“œ๋œ ๋ฌด์ž‘์œ„ XML ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์— Billion Laughs(XML ๋ถ, ๋ฉ”๋ชจ๋ฆฌ ํญํŒŒ) ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•œ libxml2 ํŒŒ์„œ๋ฅผ ์—ฐ๋™ํ•จ.
        • libxml2 : XML ๋ฌธ์„œ ํŒŒ์„œ
  • ํŠธ๋ž˜ํ”ฝ ์ƒ์„ฑ ๋ชจ๋ธ
    • ์ •์ƒ ํŠธ๋ž˜ํ”ฝ: ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๋„๊ตฌ์ธ Tsung์„ ํ™œ์šฉํ•˜์—ฌ ์„œ๋ฒ„๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ท ๋“ฑํ•˜๊ฒŒ ํƒ์ƒ‰.
      • ์‹ค์ œ ์‚ฌ์šฉ์ž ์ ‘์† ํŒจํ„ด๊ณผ ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ์ง€์ˆ˜ ๋ถ„ํฌ๋ฅผ ๋”ฐ๋ฅด๋„๋ก ์œ ๋™์ ์ธ ๋ถ€ํ•˜ ์ƒ์„ฑ.
        • ์ •์ƒ ํŠธ๋ž˜ํ”ฝ์€ ๋ชฐ๋ฆด ๋•Œ๊ฐ€ ์žˆ๊ณ  ํŠธ๋ž˜ํ”ฝ์ด ๊ฑฐ์˜ ์—†์„ ๋•Œ๋„ ์žˆ์Œ. ์ด๋Ÿฐ ํŒจํ„ด๊ณผ ์œ ์‚ฌํ•œ ํ†ต๊ณ„ ๋ชจ๋ธ์ด ์ง€์ˆ˜ ๋ถ„ํฌ
    • ์•…์„ฑ ํŠธ๋ž˜ํ”ฝ
      • ReDoS ๋ฐ Billion Laughs ๊ณต๊ฒฉ: ์—ฐ๊ตฌ์ง„์ด ์ž์ฒด ์ œ์ž‘ํ•œ C ์–ธ์–ด ๊ธฐ๋ฐ˜ ๊ณต๊ฒฉ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์šฉ.
      • Slowloris ๊ณต๊ฒฉ: ๊ณต๊ฐœ๋œ ๊ณต๊ฒฉ ๋„๊ตฌ์ธ pylorys ์‚ฌ์šฉ.
      • ์ •์ƒ ํŠธ๋ž˜ํ”ฝ๊ณผ ๋‹ฌ๋ฆฌ ๊ณต๊ฒฉ ํšจ๊ณผ๋ฅผ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์˜ ๊ณ ์ •๋œ ๋ถ€ํ•˜(Fixed load)๋ฅผ ์ง€์†ํ•ด์„œ ์ „์†กํ•˜๋„๋ก ์„ค์ •.

FineLame Performance

attack

์„œ๋ฒ„ ๋‹ค์šด๋ณด๋‹ค๋Š” QoS ์ €ํ•˜ ์ˆ˜์ค€์œผ๋กœ ์ง„ํ–‰

  • ์ข…๋ฅ˜
    • ReDoS (์ •๊ทœํ‘œํ˜„์‹ DoS)
      • ์›๋ฆฌ: ์•…์˜์ ์œผ๋กœ ์กฐ์ž‘๋œ ์ •๊ทœํ‘œํ˜„์‹์„ ์ „์†ก. ์•…์„ฑ ๋ฌธ์ž์˜ ์ˆ˜์— ๋”ฐ๋ผ CPU ์ฒ˜๋ฆฌ ๋ถ€ํ•˜๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€.
      • ์˜ํ–ฅ: CPU ์ž์› ์„ ์ ์œผ๋กœ ์ธํ•ด ์ •์ƒ ์š”์ฒญ๋“ค์ด Queue์— ์˜ค๋ž˜ ๋จธ๋ฌผ๊ฒŒ ๋˜์–ด ์‘๋‹ต ์†๋„๊ฐ€ ํ˜„์ €ํžˆ ๋А๋ ค์ง.
    • Billion Laughs (XML Bomb)
      • ์›๋ฆฌ: ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ์ค‘์ฒฉ๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํฌํ•จํ•œ XML ํŒŒ์ผ ์ „์†ก. ๋ฌธ์„œ ๊นŠ์ด์— ๋น„๋ก€ํ•˜์—ฌ Parsing. ๋น„์šฉ์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€.
      • ์˜ํ–ฅ: ReDoS์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์‹œ์Šคํ…œ ์ž์›์„ ๊ณ ๊ฐˆ์‹œํ‚ด.
    • SlowLoris
      • ์›๋ฆฌ: ์„œ๋ฒ„์˜ ํƒ€์ž„์•„์›ƒ๋ณด๋‹ค ์งง์€ ์ฃผ๊ธฐ๋กœ HTTP ํ—ค๋”๋ฅผ ๊ฐœ๋ณ„ ์ „์†กํ•˜์—ฌ ์š”์ฒญ์„ ์™„๋ฃŒํ•˜์ง€ ์•Š๊ณ  ์—ฐ๊ฒฐ์„ ์žฅ์‹œ๊ฐ„ ์œ ์ง€.
      • ์˜ํ–ฅ: ์„œ๋ฒ„์˜ Connection pool์„ ๊ณ ๊ฐˆ์‹œ์ผœ ์ƒˆ๋กœ์šด ์ •์ƒ ์š”์ฒญ์„ ๋ฐ›์„ ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“ฆ. ์ •์ƒ ํŠธ๋ž˜ํ”ฝ ๊ธ‰์ฆ ์‹œ ์„œ๋ฒ„ ๋Œ€์‘๋ ฅ์„ ๋ฌด๋ ฅํ™”ํ•˜๋Š” ํœด๋ฉด ๊ณต๊ฒฉ(Dormant attack)์œผ๋กœ๋„ ์ž‘์šฉํ•จ.

Anomaly Detection Performance

  • ์ž„๊ณ„๊ฐ’์˜ ์„ค์ •: ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์…‹ ๋‚ด ๊ฐ Cluster์˜ ์ตœ์™ธ๊ณฝ ์ (๊ฐ€์žฅ ์ž์›์„ ๋งŽ์ด ์†Œ๋น„ํ•œ ์ •์ƒ ์š”์ฒญ)์œผ๋กœ ์„ค์ •
  • ํŠธ๋ ˆ์ด๋“œ์˜คํ”„
    • ์žฅ์  : ์ž„๊ณ„๊ฐ’์„ ๋†’๊ฒŒ(๋ณด์ˆ˜์ ์œผ๋กœ) ์žก์Œ์œผ๋กœ์จ ์šด์˜์ž๊ฐ€ ๊ธฐํ”ผํ•˜๋Š” ์˜คํƒ๋ฅ ์„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Œ.
    • ๋‹จ์  : ๊ณต๊ฒฉ ๊ฐ•๋„๊ฐ€ ์•ฝํ•  ๊ฒฝ์šฐ ํƒ์ง€๊ฐ€ ๋Šฆ์–ด์ง€๊ฑฐ๋‚˜ ์•ˆ ๋  ์ˆ˜ ์žˆ์Œ.
    • ํƒ€๋‹น์„ฑ: ์•ฝํ•œ ๊ณต๊ฒฉ๋งŒ์œผ๋กœ๋Š” ์‹œ์Šคํ…œ์„ ๋งˆ๋น„์‹œํ‚ฌ ์ˆ˜ ์—†์œผ๋ฉฐ, ๊ณต๊ฒฉ์ž๊ฐ€ ์„œ๋ฒ„๋ฅผ ๋‹ค์šด์‹œํ‚ค๋ ค๋ฉด ๊ณต๊ฒฉ ๋ฐฉ์‹์„ Volumetric์œผ๋กœ ์ „ํ™˜ํ•˜์—ฌ ์ž์› ์†Œ๋น„๋Ÿ‰์„ ๋Š˜๋ ค์•ผ ํ•˜๋ฏ€๋กœ ํƒ์ง€๊ฐ€ ๊ฐ€๋Šฅํ•จ.
  • ํ‰๊ฐ€ ์ง€ํ‘œ (Metrics):
    • TPR(์‹ค์ œ ๊ณต๊ฒฉ ํƒ์ง€์œจ), TNR(์ •์ƒ ์š”์ฒญ ํŒ๋ณ„์œจ), F1-Score(์ •๋ฐ€๋„์™€ ์žฌํ˜„์œจ์˜ ์กฐํ™”ํ‰๊ท )๋ฅผ ์ข…ํ•ฉ์ ์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ํ‰๊ฐ€.
  • ์‹คํ—˜
    • ํƒ€์ž„๋ผ์ธ
      • 0 ~ 180์ดˆ: ์ •์ƒ ํŠธ๋ž˜ํ”ฝ๋งŒ ์œ ์ž…. FINELAME์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋ฉฐ ํ•™์Šต ์ค€๋น„.
      • 180 ~ 200์ดˆ: K-means ์ด์ƒ ํƒ์ง€ ๋ชจ๋ธ ํ›ˆ๋ จ ์™„๋ฃŒ ๋ฐ ์ปค๋„(eBPF)์— ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐฐํฌ.
      • 200 ~ 350์ดˆ: ํ•ด์ปค์˜ ๊ณต๊ฒฉ(ADoS) ์‹œ์ž‘ (150์ดˆ๊ฐ„ ์ง€์†).
      • 350 ~ 400์ดˆ: ๊ณต๊ฒฉ ์ข…๋ฃŒ, ๋‹ค์‹œ ์ •์ƒ ํŠธ๋ž˜ํ”ฝ๋งŒ ์œ ์ž….
    • ์ œ์•ˆ ๋ฐฉ์‹์ธ ์ปค๋„ ๋‚ด ์ •์ˆ˜ ์—ฐ์‚ฐ + L1 ๊ฑฐ๋ฆฌ์™€์˜ ๋น„๊ต๋ฅผ ์œ„ํ•ด user-space์—์„œ ์‹ค์ˆ˜ ์—ฐ์‚ฐ + L2 ๊ฑฐ๋ฆฌ
    • ์„ค์ •๊ฐ’ : $K=3$ (์š”์ฒญ ์œ ํ˜•), ์‹œํ”„ํŠธ ๊ณ„์ˆ˜ $a=10, b=6$
  • ๊ฒฐ๊ณผ

    image.png

    • ReDoS
      • ํƒ€๊ฒŸ : Node.js / CPU ๊ณ ๊ฐˆ
      • ๊ณต๊ฒฉ ๊ฐ•๋„๋ณ„ ์ง€์—ฐ ํ˜„์ƒ
        • ์ •์ƒ ์ƒํƒœ : 0.8ms
        • ์•ฝํ•œ ๊ณต๊ฒฉ (10 req/s): ์•…์„ฑ ์š”์ฒญ ์ฒ˜๋ฆฌ์— 23ms(28.75๋ฐฐ) ์†Œ์š”. ์ •์ƒ ์š”์ฒญ๋„ 4ms๋กœ ์ง€์—ฐ.
        • ์ค‘๊ฐ„ ๊ณต๊ฒฉ: ์•…์„ฑ ์š”์ฒญ ์ฒ˜๋ฆฌ์— 45.6ms(57๋ฐฐ) ์†Œ์š”. ์ •์ƒ ์š”์ฒญ 13.5ms๋กœ ํฌ๊ฒŒ ์ง€์—ฐ.
        • ๊ฐ•ํ•œ ๊ณต๊ฒฉ (1 req/s): ์•…์„ฑ ์š”์ฒญ ์ฒ˜๋ฆฌ์— 90.9ms(113.6๋ฐฐ) ์†Œ์š”. ์ •์ƒ ์š”์ฒญ 6ms ์ง€์—ฐ.
      • ๋ฐฉ์–ด ์„ฑ๊ณผ : ์ตœ์†Œ 80.9% ~ ์ตœ๋Œ€ 95.3% ๋” ์ผ์ฐ ํƒ์ง€. ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ์˜ ์›๋ณธ K-means์™€๋„ ์ •ํ™•๋„ ์ฐจ์ด๊ฐ€ ๋ฏธ๋ฏธ
    • Billion Laughs / XML Bomb
      • ํƒ€๊ฒŸ : DeDoS / ๋ฉ”๋ชจ๋ฆฌ ๋ฐ CPU ๊ณ ๊ฐˆ
      • ๊ณต๊ฒฉ ๊ฐ•๋„๋ณ„ ์ง€์—ฐ ํ˜„์ƒ : ํŠธ๋ž˜ํ”ฝ ํ™˜๊ฒฝ์€ 250~750 req/s๋กœ ๋ณ€๋™์„ฑ ์žˆ
        • ์ •์ƒ ์ƒํƒœ : 6.87ms
        • ์•ฝํ•œ ๊ณต๊ฒฉ (15 req/s): ํ‰๊ท  29.28ms (4.26๋ฐฐ ์ง€์—ฐ).
        • ๊ฐ•ํ•œ ๊ณต๊ฒฉ (1 req/s): ํ‰๊ท  203ms (29.55๋ฐฐ ์ง€์—ฐ).
      • ๋ฐฉ์–ด ์„ฑ๊ณผ : ์•ฝํ•œ ๊ณต๊ฒฉ์€ 78.83%, ๊ฐ•ํ•œ ๊ณต๊ฒฉ์€ ์ตœ๋Œ€ 97% ๋” ๋น ๋ฅด๊ฒŒ ํƒ์ง€
    • SlowLoris
      • ํƒ€๊ฒŸ: Apache / ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ๊ณ ๊ฐˆ
      • ๋ฐฉ์–ด ์„ฑ๊ณผ : TCP ์œ ํœด ์‹œ๊ฐ„์ด ๋น„์ •์ƒ์ ์œผ๋กœ ๊ธธ์–ด์ง€๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ๋‹จ 5์ดˆ ๋งŒ์— ํƒ์ง€. 75% ๋น ๋ฆ„

In-kernel Detection

  • Radmin, Cogo ๋“ฑ ๊ธฐ์กด์˜ ์ปค๋„ ๊ธฐ๋ฐ˜ ๋ฐฉ์–ด ์‹œ์Šคํ…œ
    • ํ•™์Šต์— ์ˆ˜ ๋ถ„~์ˆ˜ ์ผ์ด ์†Œ์š”๋˜๋ฉฐ, ๊ณต๊ฒฉ์„ ํƒ์ง€ํ•˜๋Š” ๋ฐ ์ˆ˜ ์ดˆ๊ฐ€ ๊ฑธ๋ฆผ
    • ์ถ”์  ๋‹จ์œ„๊ฐ€ ํ”„๋กœ์„ธ์Šค๋‚˜ ์—ฐ๊ฒฐ ๋‹จ์œ„์—ฌ์„œ ์ •๋ฐ€ํ•œ ์•…์„ฑ ์š”์ฒญ ํŒ๋ณ„์ด ์–ด๋ ค์›€
  • FINELAME : ํ•™์Šต์€ ์ˆ˜ ์ดˆ~๋งˆ์ดํฌ๋กœ์ดˆ ๋‚ด์— ์™„๋ฃŒํ•˜๋ฉฐ ๊ณต๊ฒฉ ํƒ์ง€๋Š” ms ๋‹จ์œ„์˜ In-flight ํƒ์ง€.
    • ๊ฐœ๋ณ„ ์š”์ฒญ ๋‹จ์œ„๋กœ ์ถ”์ ํ•˜์—ฌ ์ •์ƒ ํŠธ๋ž˜ํ”ฝ ์‚ฌ์ด์— ์„ž์–ด ๋ณด๋‚ด๋Š” ๊ณต๊ฒฉ์„ ํƒ์ง€ ๋ฐ ์›์ธ ๋ถ„์„์ด ๊ฐ€๋Šฅ

Application-based Detection

  • ๊ธฐ์กด ๊ธฐ์ˆ ์˜ ํ•œ๊ณ„
    • DSHIELD : ์„œ๋ฒ„์˜ ๋ชจ๋“  ์‹คํ–‰ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์ „์— ํŒŒ์•…ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•จ
    • BreakApp : ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ฐจ๋‹จ ๊ธฐ์ค€(Threshold)์„ ์ˆ˜๋™์œผ๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•จ
    • Rampart : PHP ๋“ฑ ํŠน์ • ์–ธ์–ด๋‚˜ CPU ์ž์›์—๋งŒ ๊ตญํ•œ๋˜์–ด ์ž‘๋™ํ•จ.
  • FINELAME : ์ •์ƒ ํŠธ๋ž˜ํ”ฝ์„ ๊ด€์ฐฐํ•˜์—ฌ ์Šค์Šค๋กœ ํ•™์Šตํ•˜๋ฏ€๋กœ ์‚ฌ์ „ ์ง€์‹์ด๋‚˜ ์†Œ์Šค ์ฝ”๋“œ ์ˆ˜์ •์ด ์ „ํ˜€ ํ•„์š” ์—†์Œ
    • ์—ฌ๋Ÿฌ ์–ธ์–ด๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฒ”์šฉ์„ฑ ์žˆ๊ฒŒ ํƒ์ง€

Performance Anomaly Detection

  • Magpie, X-trace, X-ray ๋“ฑ์˜ ๊ธฐ์กด ์„ฑ๋Šฅ ์ด์ƒ ํƒ์ง€ : ์‚ฌํ›„ ๋ถ„์„์— ๋จธ๋ญ„
  • FINELAME : In-flight์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ํƒ์ง€

๊ธฐํƒ€ ๊ธฐ์กด ๋ฐฉ์–ด ๊ธฐ๋ฒ•

  • Volumetric DoS : ADoS์—๋Š” ๋ฌด์šฉ์ง€๋ฌผ
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ ์ˆ˜๋™ ์–ด๋…ธํ…Œ์ด์…˜ : ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ์— ์ง์ ‘ ์ž์› ํ•œ๋„๋ฅผ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์€ ๋น„ํ˜„์‹ค์ 

Contribution

  • ์—ญํ˜ธํ™˜์„ฑ : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ์ฝ”๋“œ๋‚˜ ๋ฆฌ๋ˆ…์Šค OS ์ปค๋„ ์ˆ˜์ •์ด ํ•„์š” ์—†๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ํ˜•ํƒœ
  • in-flight ํƒ์ง€ ์ฒด๊ณ„
  • ํ”Œ๋žซํผ/์–ธ์–ด์™€ ์ƒ๊ด€ ์—†๋Š” ์ž์› ๋ชจ๋‹ˆํ„ฐ ๋ฐ ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณต
  • FINELAME์˜ eBPF ๊ธฐ๋ฐ˜ ๊ตฌํ˜„ ๋ฐ ํ‰๊ฐ€
  • ์ปค๋„ ๋‚ด ์ดˆ๊ฒฝ๋Ÿ‰ ML ๊ตฌํ˜„

๋‚ด ์ƒ๊ฐ

  1. ํ•œ๊ณ„
    • ADoS๋กœ ํƒ€๊ฒŸ์ด ์ž‘์Œ.
    • ํƒ์ง€ ์‹œ ์ •์ƒ ํŠธ๋ž˜ํ”ฝ๋งŒ ์˜จ๋‹ค๋Š” ๊ฐ€์ •์ด ์žˆ์–ด์•ผ ํ•จ
    • ML์ด๋ผ ์—ญ์‹œ concept drift
    • ์œ ์ง€ ๋ณด์ˆ˜ : Apache์˜ core_create_conn์ด๋‚˜ Node.js์˜ uv_stream_t ๊ฐ™์€ ๋‚ด๋ถ€ ํ•ต์‹ฌ ํ•จ์ˆ˜๋ช…๊ณผ ๊ตฌ์กฐ์ฒด๊ฐ€ ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ
    • ๋…ผ๋ฌธ์—์„œ๋Š” ์‹คํ—˜์„ ์œ„ํ•ด ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ์š”์ฒญ์˜ ์ข…๋ฅ˜(K)๋ฅผ 3๊ฐœ($K=3$)๋กœ ๋‹จ์ˆœํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ(์˜ˆ: ๋„ทํ”Œ๋ฆญ์Šค, ์•„๋งˆ์กด)์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” ์ˆ˜๋ฐฑ~์ˆ˜์ฒœ ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ API(์š”์ฒญ ์œ ํ˜•)๋ฅผ ๊ฐ€์ง. ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋“  ์ค‘์‹ฌ์ (Centroid)๊ณผ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค๋ฉด eBPF์˜ ์—ฐ์‚ฐ ์ œ์•ฝ(๋ช…๋ น์–ด ์ˆ˜ ์ œํ•œ)์— ๊ฑธ๋ฆฌ๊ฑฐ๋‚˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๊ธ‰์ฆํ•  ์œ„ํ—˜์ด ์žˆ์Œ

Categories:

Updated:

Leave a comment