web hacking ๐Ÿ–ฅ/techniques โŒ principles

Race Condition

Kortsec1 2024. 4. 5. 18:48

Race Condition ์ด๋ž€?

์ƒํ™ฉ ํ•˜๋‚˜๋ฅผ ๊ฐ€์ •ํ•ด๋ณด์ž. num์ด๋ผ๋Š” ํ•˜๋‚˜์˜ ๋ฉ”๋ชจ๋ฆฌ์— 5๋ฅผ ๋„ฃ๊ณ , Process1์€ ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ์— 1 ๋”ํ•˜๊ธฐ, Process2๋Š” 1 ๋นผ๊ธฐ๋ฅผ ์ง„ํ–‰ ํ•œ๋‹ค. ๋งŒ์ผ ๋‘ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— num ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•œ๋‹ค๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? 5๋ผ๋Š” ๊ฐ’์„ 1๋”ํ•˜๊ณ  1๋นผ๋ฉด ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ทธ๋Œ€๋กœ ์ผ ๊ฒƒ ๊ฐ™๋‹ค.

 

IMG1 _ Race Condition

 

ํ•˜์ง€๋งŒ IMG1์˜ ์•„๋ž˜์ชฝ์„ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, num์ด ํ•ญ์ƒ 5๋ผ๊ณ  ํ™•์ •์ง€์„ ์ˆ˜๋Š” ์—†๋‹ค. ์œ„ ์ƒํ™ฉ์„ Race Condition์ด๋ผ ํ•œ๋‹ค. Race Conditon์€ ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณตํ†ต ์ž์›์— ๋™์‹œ์— ์ ‘๊ทผํ• ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์ด๋‹ค. 'race'์˜ ์˜๋ฏธ๋Œ€๋กœ ํ•œ์ •๋œ ์ž์›์„ ๋‘๊ณ  ์„œ๋กœ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๊ฒฝ์Ÿํ•˜๋Š” ์ƒํ™ฉ์ด๋‹ค. ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์“ฐ๋Š” ํ”„๋กœ์„ธ์Šค๋ผ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ Race Condition์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ ์ ˆํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋น„์ •์ƒ์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๊ณต๊ฒฉ ์˜ˆ์‹œ (Limit Overrun)

๊ฐ€์žฅ ์ž˜ ์•Œ๋ ค์ง„ Race Condition์„ ์ด์šฉํ•œ ๊ณต๊ฒฉ์€ ์˜๋„๋œ ์ œํ•œ ์‚ฌํ•ญ์„ ์ดˆ๊ณผํ•˜๋Š” ๊ณต๊ฒฉ(Limit Overrun)์ด๋‹ค. ์ฒ˜์Œ ๋งŒ๋‚˜๋ดค๋˜ ์ƒํ™ฉ๊ณผ ๋”๋ถˆ์–ด, ๊ธฐํ”„ํŠธ ์นด๋“œ ์ค‘๋ณต ์ž…๋ ฅ, anti-brute-force ์‹œ์Šคํ…œ ์šฐํšŒ ๊ทธ๋ฆฌ๊ณ  CAPTCHA ์šฐํšŒ์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๊ณต๊ฒฉ์ด ํฌํ•จ๋œ๋‹ค. 

 

IMG2 _ timing the requests _ ์ถœ์ฒ˜:portswigger.net/web-security/race-conditions

 

Limit Overrun Race Condition ๊ณต๊ฒฉ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ํƒ€์ด๋ฐ์ด๋‹ค. ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ๊ฐ„์„ "race window"๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์ตœ์†Œ ๋‘˜ ์ด์ƒ ๋™์‹œ์— ๋งž์ถฐ์ฃผ์–ด์•ผ ํ•œ๋‹ค. race window์˜ ๋ฐœ์ƒ ์‹œ๊ฐ„์€ ๋ณดํ†ต ๋ฐ€๋ฆฌ์„ธ์ปจ๋“œ๋‚˜ ๊ทธ ์ดํ•˜ ๋‹จ์œ„ ์ˆ˜์ค€์œผ๋กœ, ์ •๋ง ์ˆœ์‹๊ฐ„์ด๋‹ค. ์•„๋ฌด๋ฆฌ requests๋“ค์„ ๋™์‹œ์— ๋ณด๋‚ด๋”๋ผ๋„ IMG2์™€ ๊ฐ™์ด ์˜ˆ์ธก๋ถˆ๊ฐ€๋Šฅํ•œ ์™ธ๋ถ€์ ์ธ ์š”์ธ๋“ค๋กœ ์ธํ•ด ํƒ€์ด๋ฐ์„ ๋งž์ถ”๊ธฐ๋Š” ์–ด๋ ต๋‹ค. ๊ทธ๋ฆฌํ•˜์—ฌ 'single-packet attack'๊ธฐ์ˆ ์„ ํ†ตํ•˜์—ฌ ์ตœ๋Œ€ํ•œ์˜ ํƒ€์ด๋ฐ์„ ๋งž์ถฐ์ค„ ๊ฒƒ์ด๋‹ค.

 

IMG3 _ single-packet attack _ ์ถœ์ฒ˜:portswigger.net/research/smashing-the-state-machine

 

PortSwigger์˜ Burp Suiteํˆด์„ ์ด์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ๋งž์ถœ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ƒ์„ธํ•œ ์›๋ฆฌ๋Š” ๋”ฐ๋กœ ์ •๋ฆฌํ•œ ํฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜์ž. ์ด์ œ PortSwigger์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ณต๊ฒฉ ์‹ค์Šต ํ™˜๊ฒฝ์„ ํ†ตํ•ด ์ง์ ‘ Race Condition ๊ณต๊ฒฉ์„ ํ•ด๋ณผ ์ฐจ๋ก€๋‹ค.

 

IMG4 _ Attack Point

 

์šฐ๋ฆฌ๊ฐ€ ๊ณต๊ฒฉํ•  ๋ถ€๋ถ„์€ ์ฟ ํฐ ์ž…๋ ฅ ์‹œ์Šคํ…œ์ด๋‹ค. ํ”„๋กœ๋ชจ์…˜ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅ ํ›„ Apply ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์›น Request๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ ๊ตฌ์„ฑ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

POST /cart/coupon HTTP/2
Host: ~~~~~~~~.web-security-academy.net
Cookie: session=~~~~~~~~

...

csrf=~~~~~~&coupon=PROMO20

 

Request ์ „๋‹ฌ ํ›„ ์„œ๋ฒ„ ๋‚ด์—์„œ "์ด๋ฏธ ๋“ฑ๋ก๋œ ์ฟ ํฐ์ธ๊ฐ€?", "์˜ฌ๋ฐ”๋ฅธ ์ฟ ํฐ ์ฝ”๋“œ์ธ๊ฐ€?"์™€ ๊ฐ™์€ ๊ฒ€์ฆ์„ ๊ฑฐ์นœ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค. ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ฟ ํฐ์„ ๋“ฑ๋ก์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค. Repeater๋ฅผ ํ†ตํ•ด ๋™์ผํ•œ ํŒจํ‚ท์„ ๋™์‹œ์— ์—ฌ๋Ÿฌ๊ฐœ ๋ณด๋‚ด๋ณด๋„๋ก ํ•˜์ž.

 

IMG5 _ Repeater์˜ single-packet attack

 

IMG5์™€ ๊ฐ™์ด ๋™์ผํ•œ 20๊ฐœ์˜ ํŒจํ‚ท ์š”์ฒญ ๊ทธ๋ฃน์„ 'single-packet attack' ๋ฐฉ์‹์œผ๋กœ ๋™์‹œ์— ๋ณด๋‚ด๋ณด๋ฉด ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ฟ ํฐ์ด ์—ฌ๋Ÿฌ๊ฐœ ์ž…๋ ฅ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ฒฐ๊ณผ๋Š” IMG6์™€ ๊ฐ™๋‹ค.

 

IMG6 _ Coupon Applied Succesfully

 

 

๋ณด์•ˆ

Race Condition์ธ ๊ฒฝ์šฐ ์œ„์™€ ๊ฐ™์€ ๋น„์ •์ƒ์ ์ธ ์ƒํƒœ๊ฐ€ ๋ฐœํ–‰ํ•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์˜ˆ๋ฐฉํ•˜๋Š” ๊ฒƒ์€ ์ •๋ง ์ค‘์š”ํ•˜๋‹ค. OS๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์˜๋„์น˜ ์•Š์€ ๊ฐ„์„ญ์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ๋ฐ์ดํ„ฐ ๋ฐ ๋ฌผ๋ฆฌ์ ์ธ ์ž์›์„ ๋ณดํ˜ธํ•ดํ– ํ•œ๋‹ค. ๋˜ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‚ด์šฉ๊ณผ ๊ฒฐ๊ณผ๋Š” ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์ด๋ฃจ์–ด ์ ธ์•ผ ํ•œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€์˜ ์˜ˆ๋ฐฉ์ฑ…์„ ๊บผ๋‚ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. Semaphore์™€ Mutex.

 

IMG7 _ Semaphore

 

Semaphore๋Š” ๊ณต์œ  ์ž์›์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์กฐ์ •ํ•˜๊ฑฐ๋‚˜ ๋™๊ธฐํ™” ์‹œํ‚ค๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ์ž์› ์†Œ์œ ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋ฉฐ ์‹œ์Šคํ…œ ๋ฒ”์œ„์— ๊ฑธ์ณ ์žˆ๊ณ  ํŒŒ์ผ ์‹œ์Šคํ…œ ์ƒ์˜ ํŒŒ์ผ๋กœ ์กด์žฌํ•œ๋‹ค.

 

IMG8 _ Mutex

 

Mutex๋Š” ๊ณต์œ  ์ž์›์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค์˜ Running Time์ด ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š๊ฒŒํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. locking๊ณผ unlocking์„ ํ†ตํ•ด ์ ‘๊ทผ์„ ์กฐ์œจ ํ•˜๊ณ , ์ด ๋•Œ๋ฌธ์— ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. Mutex๋Š” ํ”„๋กœ์„ธ์Šค์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๋ฉฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์ž๋™์œผ๋กœ Clean Up ๋œ๋‹ค.

 

์ฐธ๊ณ 

https://zero-zae.tistory.com/107

https://portswigger.net/web-security/race-conditions

https://portswigger.net/research/smashing-the-state-machine

https://cyberw1ng.medium.com/limit-overrun-race-conditions-in-web-app-penetration-testing-2023-41576b6f5898