์์ ์ ์ฌ๋ฏธ๋ ๊ธ์ ์ฝ์๋ค. ๋ฐ๋ก ์ด ๊ธ์ธ๋ฐ, ๋ด์ฉ์ ์งง๊ฒ ์์ฝํด ๋ณด์๋ฉด, HTTP/2์ ํต์ฌ ๊ธฐ๋ฅ์ธ Stream muliplexing์ ์ด์ฉํ DDoS ๊ณต๊ฒฉ์ ์๋ํด ์ ์ ๊ท๋ชจ์ ํด๋ผ์ด์ธํธ๋ก ์ด๋น ์์ต ์ด์์ ์์ฒญ์ ๋ณด๋๋ค๋ ๋ด์ฉ์ด๋ค.
HTTP/2
HTTP/2(Hypertext Transfer Protocol Version 2)๋ SPDY๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์๋ค. 1997๋ ํ์คํ๋ HTTP/1.1์ ๋๋ถ๋ถ์ ๊ฐ์ ํ ํ์ค์ผ๋ก 2015๋ 2์ 17์ผ IESG์์ ์น์ธ๋์๋ค.
Stream multiplexing
์ด ๊ธ์ ์ฃผ์ ์ธ CVE-2023-44487์ ์ดํดํ๊ธฐ ์ํด์ HTTP/2์ ํต์ฌ ๊ธฐ๋ฅ์ธ, Stream multiplexing์ ๋ํด์ ์์๋ณผ ํ์๊ฐ ์๋ค.
์ค๋๋ ์ ๋๋ถ๋ถ์ ์นํ์ด์ง๋ ์ด๋ฏธ์ง, css, javascript, html๋ฑ ๋ง์ ๋ฆฌ์์ค๋ฅผ ํฌํจํ๋ค. ์ฌ์ฉ์๊ฐ ์น ํ์ด์ง์ ์ ๊ทผ ์ ๋ฆฌ์์ค๋ฅผ ๋ค์ด๋ก๋ํ๊ธฐ ์ํด ๋ง์ TCP ํต์ ์ ํ๋๋ฐ, ๋ฆฌ์์ค ๋น ํ๋์ ์์ฒญ์ ํ๊ฒ ๋๋ฉด์ ๋ง์ TCP ์ฐ๊ฒฐ ๋น์ฉ์ ์ง๋ถํ๊ฒ ๋๋ค. ์ด๋ HTTP/2๋ ๋จ์ผ ์ฐ๊ฒฐ์์ Stream multiexpling ํตํด ์๋ก ๋ค๋ฅธ ์ฌ๋ฌ ์์ฒญ์ ๋ณด๋ผ ์ ์๊ฒ ํ๋ค.
๋จ์ผ ์ฐ๊ฒฐ์์ ์ฌ๋ฌ ์์ฒญ์ Multiplexing์ ํ๋ค๋ฉด, ์๋ต๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ Demultiplexing ๊ณผ์ ์ด ํ์ํ๋ค. ์ด ๊ณผ์ ์์ ๊ฐ ์์ฒญ๊ณผ ์๋ต์ ์ฐ๊ฒฐํ๊ธฐ ์ํด์ Stream ID๊ฐ ์ฌ์ฉ๋๋ค.
RST_STREAM
RST_STREAM์ TCP ์ฐ๊ฒฐ์ ์ ์งํ๋ฉฐ, ์ผ๋ถ Stream์ ๋ํด์๋ง ์ทจ์ํ ๋ ๋ณด๋ด๋ ํ๋ ์์ด๋ค. ์ด๋ฌํ ๋ฐฉ์์ ํด๋ผ์ด์ธํธ์ ์๋ฒ์์ ๋ถํ์ํ ์์ฒญ/์๋ต์ ๋ถ๋ถ์ ์ผ๋ก ์ทจ์ํจ์ผ๋ก์จ ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค์ด์ค๋ค.
HTTP/2 Rapid Reset
์์ ์งง๊ฒ HTTP/2์ Stream multiplexing๊ณผ RST_STREAM์ ์ดํด๋ดค๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ ๊ฒ ํจ์จ์ ์ธ ๊ธฐ๋ฅ๋ค์ด ์ด๋ป๊ฒ ์ด๋ง์ด๋งํ DDoS ๊ณต๊ฒฉ์ผ๋ก ์ด์ฉ๋์๊น? HTTP/2๋ ์์ ์์๋ณธ Stream multiplexing, RST_STREAM ๋ฑ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ ์ฐ๊ฒฐ ์ ํ ์์์๋ ํด๋ผ์ด์ธํธ๋ ๋์ ๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ์ง๋ง, ๊ทธ๋งํผ ์๋ฒ์ ๋ ๋ง์ ์์ฒญ์ ๋ณด๋ผ ์ ์๊ฒ๋๋ค๋ ์ ๋ ์กด์ฌํ๋ค. ์ด๋ฅผ ์ํด์ HTTP/2 ์คํ์ ์ดํด๋ณด๋ฉด SETTINGS_MAX_CONCURRENT_STREAMS๋ก ์ต๋ ์คํธ๋ฆผ ์์ฑ์ ์ ํํ ์ ์์ง๋ง, ์ด๋ ์คํธ๋ฆผ ๋ผ์ดํ ์ฌ์ดํด ๋ด open ๋ ์คํธ๋ฆผ์ ์ ํ์ ๋๊ธฐ ๋๋ฌธ์ half-closed ์ํ๋ ํฌํจ๋์ง ์๋๋ค. ๋ฐ๋ผ์ ์ ์์ ์ธ ํด๋ผ์ด์ธํธ๊ฐ ์ฐ์์ ์ผ๋ก ์์ฒญ/์ทจ์๋ฅผ ๋ฐ๋ณตํ๋ฉด ์ค์ ๋ ์คํธ๋ฆผ ๊ฐ์๋ณด๋ค ๋ง์ ์คํธ๋ฆผ์ ์์ฑํ ์ ์๋ค.
์ฐธ๊ณ
- https://cloud.google.com/blog/ko/products/identity-security/how-it-works-http2-rapid-reset-ddos
- https://www.rfc-editor.org/rfc/rfc9113
- https://blog.cloudflare.com/technical-breakdown-http2-rapid-reset-ddos-attack