Race Condition ์ด๋?
์ํฉ ํ๋๋ฅผ ๊ฐ์ ํด๋ณด์. num์ด๋ผ๋ ํ๋์ ๋ฉ๋ชจ๋ฆฌ์ 5๋ฅผ ๋ฃ๊ณ , Process1์ ํด๋น ๋ฉ๋ชจ๋ฆฌ์ 1 ๋ํ๊ธฐ, Process2๋ 1 ๋นผ๊ธฐ๋ฅผ ์งํ ํ๋ค. ๋ง์ผ ๋ ํ๋ก์ธ์ค๊ฐ ๋์์ num ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ค๋ฉด ๊ฒฐ๊ณผ๊ฐ ์ด๋ป๊ฒ ๋ ๊น? 5๋ผ๋ ๊ฐ์ 1๋ํ๊ณ 1๋นผ๋ฉด ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ทธ๋๋ก ์ผ ๊ฒ ๊ฐ๋ค.
ํ์ง๋ง IMG1์ ์๋์ชฝ์ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด, num์ด ํญ์ 5๋ผ๊ณ ํ์ ์ง์ ์๋ ์๋ค. ์ ์ํฉ์ Race Condition์ด๋ผ ํ๋ค. Race Conditon์ ๋ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๊ณตํต ์์์ ๋์์ ์ ๊ทผํ ๋ ๋ฐ์ํ๋ ํ์์ด๋ค. 'race'์ ์๋ฏธ๋๋ก ํ์ ๋ ์์์ ๋๊ณ ์๋ก ์ฌ์ฉํ๋ ค๊ณ ๊ฒฝ์ํ๋ ์ํฉ์ด๋ค. ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐ๋ ํ๋ก์ธ์ค๋ผ๋ฆฌ๋ ์ด๋ฌํ Race Condition์ด ๋ฐ์ํ ์ ์๋๋ฐ, ์ ์ ํ ์กฐ์น๋ฅผ ์ทจํด์ฃผ์ง ์๋๋ค๋ฉด ๋น์ ์์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์๋ค.
๊ณต๊ฒฉ ์์ (Limit Overrun)
๊ฐ์ฅ ์ ์๋ ค์ง Race Condition์ ์ด์ฉํ ๊ณต๊ฒฉ์ ์๋๋ ์ ํ ์ฌํญ์ ์ด๊ณผํ๋ ๊ณต๊ฒฉ(Limit Overrun)์ด๋ค. ์ฒ์ ๋ง๋๋ดค๋ ์ํฉ๊ณผ ๋๋ถ์ด, ๊ธฐํํธ ์นด๋ ์ค๋ณต ์ ๋ ฅ, anti-brute-force ์์คํ ์ฐํ ๊ทธ๋ฆฌ๊ณ CAPTCHA ์ฐํ์ ๊ฐ์ ๋ค์ํ ๊ณต๊ฒฉ์ด ํฌํจ๋๋ค.
Limit Overrun Race Condition ๊ณต๊ฒฉ์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ํ์ด๋ฐ์ด๋ค. ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ ๊ตฌ๊ฐ์ "race window"๋ผ๊ณ ํ๋๋ฐ, ์ต์ ๋ ์ด์ ๋์์ ๋ง์ถฐ์ฃผ์ด์ผ ํ๋ค. race window์ ๋ฐ์ ์๊ฐ์ ๋ณดํต ๋ฐ๋ฆฌ์ธ์ปจ๋๋ ๊ทธ ์ดํ ๋จ์ ์์ค์ผ๋ก, ์ ๋ง ์์๊ฐ์ด๋ค. ์๋ฌด๋ฆฌ requests๋ค์ ๋์์ ๋ณด๋ด๋๋ผ๋ IMG2์ ๊ฐ์ด ์์ธก๋ถ๊ฐ๋ฅํ ์ธ๋ถ์ ์ธ ์์ธ๋ค๋ก ์ธํด ํ์ด๋ฐ์ ๋ง์ถ๊ธฐ๋ ์ด๋ ต๋ค. ๊ทธ๋ฆฌํ์ฌ 'single-packet attack'๊ธฐ์ ์ ํตํ์ฌ ์ต๋ํ์ ํ์ด๋ฐ์ ๋ง์ถฐ์ค ๊ฒ์ด๋ค.
PortSwigger์ Burp Suiteํด์ ์ด์ฉํ๋ฉด ์ฝ๊ฒ ๋ง์ถ ์ ์๊ฒ ๋๋ค. ์์ธํ ์๋ฆฌ๋ ๋ฐ๋ก ์ ๋ฆฌํ ํฌ์คํธ๋ฅผ ์ฐธ๊ณ ํ์. ์ด์ PortSwigger์์ ์ ๊ณตํ๋ ๊ณต๊ฒฉ ์ค์ต ํ๊ฒฝ์ ํตํด ์ง์ Race Condition ๊ณต๊ฒฉ์ ํด๋ณผ ์ฐจ๋ก๋ค.
์ฐ๋ฆฌ๊ฐ ๊ณต๊ฒฉํ ๋ถ๋ถ์ ์ฟ ํฐ ์ ๋ ฅ ์์คํ ์ด๋ค. ํ๋ก๋ชจ์ ์ฝ๋๋ฅผ ์ ๋ ฅ ํ Apply ๋ฒํผ์ ๋๋ฅด๋ฉด ์น Request๊ฐ ๋ฐ์ํ๋ ๋ฐ ๊ตฌ์ฑ์ ์๋์ ๊ฐ๋ค.
POST /cart/coupon HTTP/2
Host: ~~~~~~~~.web-security-academy.net
Cookie: session=~~~~~~~~
...
csrf=~~~~~~&coupon=PROMO20
Request ์ ๋ฌ ํ ์๋ฒ ๋ด์์ "์ด๋ฏธ ๋ฑ๋ก๋ ์ฟ ํฐ์ธ๊ฐ?", "์ฌ๋ฐ๋ฅธ ์ฟ ํฐ ์ฝ๋์ธ๊ฐ?"์ ๊ฐ์ ๊ฒ์ฆ์ ๊ฑฐ์น ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ฒ ๋๋ค. ์ฐ๋ฆฌ์ ๋ชฉํ๋ ์ฌ๋ฌ๊ฐ์ ์ฟ ํฐ์ ๋ฑ๋ก์ํค๋ ๊ฒ์ด๋ค. Repeater๋ฅผ ํตํด ๋์ผํ ํจํท์ ๋์์ ์ฌ๋ฌ๊ฐ ๋ณด๋ด๋ณด๋๋ก ํ์.
IMG5์ ๊ฐ์ด ๋์ผํ 20๊ฐ์ ํจํท ์์ฒญ ๊ทธ๋ฃน์ 'single-packet attack' ๋ฐฉ์์ผ๋ก ๋์์ ๋ณด๋ด๋ณด๋ฉด ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฟ ํฐ์ด ์ฌ๋ฌ๊ฐ ์ ๋ ฅ๋๋ ๊ฒ์ ์ ์ ์์ ๊ฒ์ด๋ค. ๊ฒฐ๊ณผ๋ IMG6์ ๊ฐ๋ค.
๋ณด์
Race Condition์ธ ๊ฒฝ์ฐ ์์ ๊ฐ์ ๋น์ ์์ ์ธ ์ํ๊ฐ ๋ฐํํ๋๋ฐ, ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์๋ฐฉํ๋ ๊ฒ์ ์ ๋ง ์ค์ํ๋ค. OS๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์๋์น ์์ ๊ฐ์ญ์ผ๋ก๋ถํฐ ๊ฐ ํ๋ก์ธ์ค์ ๋ฐ์ดํฐ ๋ฐ ๋ฌผ๋ฆฌ์ ์ธ ์์์ ๋ณดํธํดํ ํ๋ค. ๋ํ ํ๋ก์ธ์ค๊ฐ ์ํํ๋ ๋ด์ฉ๊ณผ ๊ฒฐ๊ณผ๋ ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก ์ด๋ฃจ์ด ์ ธ์ผ ํ๋ค. ๊ตฌ์ฒด์ ์ผ๋ก ๋ ๊ฐ์ง์ ์๋ฐฉ์ฑ ์ ๊บผ๋ด๋ณผ ์ ์๋ค. Semaphore์ Mutex.
Semaphore๋ ๊ณต์ ์์์ ๋ํด ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ์กฐ์ ํ๊ฑฐ๋ ๋๊ธฐํ ์ํค๋ ๊ธฐ์ ์ด๋ค. ์์ ์์ ๊ฐ ๋ถ๊ฐ๋ฅ ํ๋ฉฐ ์์คํ ๋ฒ์์ ๊ฑธ์ณ ์๊ณ ํ์ผ ์์คํ ์์ ํ์ผ๋ก ์กด์ฌํ๋ค.
Mutex๋ ๊ณต์ ์์์ ๋ํ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค์ Running Time์ด ์๋ก ๊ฒน์น์ง ์๊ฒํ๋ ๊ธฐ์ ์ด๋ค. locking๊ณผ unlocking์ ํตํด ์ ๊ทผ์ ์กฐ์จ ํ๊ณ , ์ด ๋๋ฌธ์ ๋ ์ค๋ ๋๊ฐ ๋์์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. Mutex๋ ํ๋ก์ธ์ค์ ๋ฒ์๋ฅผ ๊ฐ์ง๋ฉฐ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋ ์๋์ผ๋ก Clean Up ๋๋ค.
์ฐธ๊ณ
https://zero-zae.tistory.com/107
https://portswigger.net/web-security/race-conditions
'web hacking ๐ฅ > techniques โ principles' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HTTP Request Smuggling Exploit (0) | 2024.12.10 |
---|---|
HTTP Request Smuggling ์ทจ์ฝ์ (0) | 2024.12.08 |
SSTI - RCE(Remote Code Execution) ์ฐ๊ณ ๊ณต๊ฒฉ (0) | 2023.10.13 |
SSTI ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ์์ ์ค์ต (1) | 2023.09.12 |