ํ•ด์ปค๋“ค์ด ์‚ฌ๋ž‘ํ•˜๋Š” ํ•ดํ‚น ํ…Œํฌ๋‹‰ Stack Buffer Overflow์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค๐Ÿ™‚


ํ•ดํ‚น ์•Œ๋ ค์ค„๊ฒŒ
2ํ™”: Out-of-Bounds

๋งŽ์ด ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์…”์„œ ๋ฌด์‚ฌํžˆ ๋‘ ๋ฒˆ์งธ๋กœ ๋Œ์•„์˜จ ํ•ดํ‚น ๊ฐ€๋ฅด์ณ์ค„๊ฒŒ์ž…๋‹ˆ๋‹ค! ๐Ÿ˜Ž
์ด๋ฒˆ ์ฃผ๋Š” Out-of-Bounds ์ทจ์•ฝ์ ์— ๋Œ€ํ•ด ์–˜๊ธฐ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”. ์ค„์—ฌ์„œ OOB๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋Š”๋ฐ ํ˜น์‹œ ๋“ค์–ด๋ณธ ์  ์žˆ์œผ์‹ ๊ฐ€์š”? ๐Ÿค”
Out-of-Bounds read, Out-of-Bounds write, Out-of-Bounds access๊นŒ์ง€, ๋ชจ๋‘ ์ด ์ทจ์•ฝ์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์„ธ ๋งˆ๋ฆฌ ํ† ๋ผ ๐Ÿฐ๐Ÿฐ๐Ÿฐ ํ•œ ๋ฒˆ์— ์žก์œผ๋Ÿฌ ์ผ๋‹จ ๋”ฐ๋ผ์˜ค์„ธ์š”!

Out-of-Bounds๊ฐ€ ๋ญ์—์š”?

๊ตฌ๊ธ€๋‹˜๊ป˜์„œ๋Š” ์ถœ์ž… ๊ธˆ์ง€ ๊ตฌ์—ญ์˜ ๋ผ๊ณ  ์•Œ๋ ค์ฃผ์‹œ๋„ค์š”. ๐Ÿ˜†

Out-of-Bounds ์ทจ์•ฝ์ ์€ ๋ฐฐ์—ด ๋“ฑ ์ง€์ •ํ•ด๋†“์€ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ์ธ๋ฑ์Šค์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ถœ์ž… ๊ธˆ์ง€ ๊ตฌ์—ญ์ด๋ผ๋Š” ๋ง๋„ ์•„์ฃผ ํ‹€๋ฆฐ ๊ฑด ์•„๋‹Œ ๊ฒƒ ๊ฐ™๋„ค์š”!

Buffer Overflow๋ž‘ Out-of-Bounds๋ž‘ ํ—ท๊ฐˆ๋ ค์š”
'์ง€์ •ํ•ด๋†“์€ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ ์š”! ๊ทธ๋Ÿผ ์ง€๋‚œ์ฃผ์— ๊ณต๋ถ€ํ•œ Buffer Overflow(๋ณต์Šตํ•˜๋Ÿฌ ๋ฐ”๋กœ ๊ฐ€๊ธฐ!)๋ž‘ ์ฐจ์ด์ ์ด ๋ญ์ฃ ? ๐Ÿ˜ฑ' ๋ผ๊ณ  ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”. ํ•˜์ง€๋งŒ ์ด๋“ค์€ ์ทจ์•ฝ์ ์˜ ๋ฐœ์ƒ ์›์ธ๊ณผ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ๊ฒฐ๊ณผ๊ฐ€ ๋ชจ๋‘ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํ—ท๊ฐˆ๋ฆฌ์ง€ ์•Š๊ฒŒ ์งง๊ฒŒ ๋ณต์Šตํ•˜๊ณ  ๋„˜์–ด๊ฐ‘์‹œ๋‹ค!

Buffer Overflow๋Š” ๋ฒ„ํผ์˜ ๊ธธ์ด์— ๋Œ€ํ•œ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•„ C์–ธ์–ด์˜ gets(), scanf() ๋“ฑ์˜ ํ•จ์ˆ˜๋กœ ์›ํ•˜๋Š” ๊ฐ’์„ return address๊นŒ์ง€ ๋ฎ์„ ์ˆ˜ ์žˆ์—ˆ์–ด์š”. ๋”ฐ๋ผ์„œ Buffer Overflow์˜ ๋ชฉ์ ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ๋งˆ์Œ๋Œ€๋กœ ์ •ํ•˜๋Š” ๊ฑฐ์˜€์ฃ .
Out-of-Bounds๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ๋•Œ ์ธ๋ฑ์Šค์˜ ๋ฒ”์œ„์— ๋Œ€ํ•œ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•„ ์ง€์ •ํ•ด๋†“์€ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ”์œ„ ์˜์—ญ ๋ฐ–์— ์žˆ๋Š” ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์˜์—ญ์˜ ๊ฐ’์„ ์ฝ์„ ์ˆ˜๋„ ์žˆ๊ณ (Outs-of-Bounds read), ์›ํ•˜๋Š” ๊ฐ’์„ ์“ธ ์ˆ˜๋„ ์žˆ์–ด์š”(Out-of-Bounds write)!

๊ทธ๋Ÿผ ๋„๋Œ€์ฒด ์ธ๋ฑ์Šค ๋ฒ”์œ„์— ๋Œ€ํ•œ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒŒ ๋ญ์—์š”? ๐Ÿ˜•
ํ•ด๋‹น ์ฝ”๋“œ๋Š” ์ธ๋ฑ์Šค ๋ฒ”์œ„์— ๋Œ€ํ•œ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ์—์š”. ๋ฌด์Šจ ๋ฌธ์ œ๊ฐ€ ์žˆ์„๊นŒ์š”? ๐Ÿค”

์ง€์ •ํ•ด๋†“์€ ๋ฐฐ์—ด์€ 10๊ฐœ์ธ๋ฐ ํ™•์ธํ•  ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š” ๊ณผ์ •์—์„œ "0~9 ์ค‘ ํ™•์ธํ•  index ๋ฒˆํ˜ธ๋ฅผ ์„ ํƒํ•ด ์ฃผ์„ธ์š”."๋ผ๊ณ  ๋งํ•˜๋ฉฐ ์ •๋ง๋กœ 0~9 ์ค‘์— ์ž…๋ ฅํ–ˆ๋Š”์ง€ ๊ฒ€์‚ฌ๋ฅผ ํ•˜์ง€ ์•Š๋„ค์š”.
-100 ๋˜๋Š” 100์„ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ํ˜น์‹œ.. ๋น„๋ฐ€ ์ •๋ณด๊ฐ€ ์žˆ๋Š” ๊ณณ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ฒŒ ๋ ๊นŒ์š”?

array[10]์œผ๋กœ ์ •ํ•ด๋†จ๋Š”๋ฐ ์–ด๋–ป๊ฒŒ? ์™œ? array[10]์„ ๋ณธ๋‹ค๋Š” ๊ฑฐ์—์š”?
์šฐ์„  ๋ฐฐ์—ด์˜ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ์—ฐ์†๋œ ์—ฌ๋Ÿฌ ๋ณ€์ˆ˜๊ฐ€ ๋ชจ์—ฌ์„œ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์„ ์ด๋ฃฌ๋‹ค๋Š” ๊ฑฐ์—์š”.
์œ„์˜ ์ฝ”๋“œ๋Š” ์ด๊ฒƒ์ฒ˜๋Ÿผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ทธ๋ ค๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”.

๋ฐฐ์—ด์˜ ์—ฐ์†์„ฑ ๋•๋ถ„์— ๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๊ฐ ์›์†Œ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ๋ถ„ํ•˜๊ณ  ๋ฐฐ์—ด ์‹œ์ž‘ ์ฃผ์†Œ + ์ž๋ฃŒํ˜• ํฌ๊ธฐ * ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด array[9]๋Š” array[0]์˜ ์‹œ์ž‘ ์ฃผ์†Œ + 4 * 9๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์š”.
๊ทธ๋Ÿผ ์ธ๋ฑ์Šค๋กœ 10์„ ์ฃผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? array[0]์˜ ์‹œ์ž‘ ์ฃผ์†Œ + 4 * 10์„ ์ฐพ์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— printf("array[%d]: %d", index, array[index]); ์—์„œ password ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์ „ํ˜€ ์˜๋„ํ•˜์ง€ ๋ชปํ•œ ๊ฐ’์— ์ ‘๊ทผํ•ด ์ถœ๋ ฅ๋˜๋Š” ๊ฑฐ์ฃ .
๋งŒ์•ฝ ์ธ๋ฑ์Šค๋ฅผ ์ž…๋ ฅ๋ฐ›์•„์„œ ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค๋ฉด, ์˜๋„ํ•˜์ง€ ๋ชปํ•œ ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ’์„ ์ž…๋ ฅํ•  ์ˆ˜๋„ ์žˆ๊ณ ์š”! ๋ฌผ๋ก  ๊ทธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๋‹ค์Œ์— ์‹คํ–‰ํ•  ์ฃผ์†Œ๋ผ๋ฉด ๊ฒฐ๊ณผ์ ์œผ๋กœ ์›ํ•˜๋Š” ์ฝ”๋“œ๊นŒ์ง€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”. ๐Ÿ˜Ž

Out-of-Bounds๋ฅผ ์–ด๋–ป๊ฒŒ ๋ง‰์„ ์ˆ˜ ์žˆ์„๊นŒ์š”?
์ง€์ •ํ•ด๋†“์€ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ”์œ„ ๋ฐ–์€ โœ–๏ธ์ถœ์ž… ๊ธˆ์ง€ ๊ตฌ์—ญโ€ผ๏ธโœ–๏ธ์ด๋ผ๋Š” ํ‘œ์‹œํŒ์„ ๋”ฑ ์„ค์น˜ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”. ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•ด์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์œ„ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•ด์ฃผ๋ฉด Out-of-Bounds๋ฅผ ์‰ฝ๊ฒŒ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

ํ•ดํ‚น ๊ฐ€๋ฅด์ณ์ค„๊ฒŒ๋Š” ๋‹ค์Œ ์ฃผ์— ์ƒˆ๋กœ์šด ์ทจ์•ฝ์ ์œผ๋กœ ๋Œ์•„์˜ฌ๊ฒŒ์š”! ๐Ÿ˜‰
์˜ค๋Š˜ ์ „ํ•ด๋“œ๋ฆฐ ๋‚ด์šฉ์ด ๋งˆ์Œ์— ๋“œ์…จ๋‚˜์š”?
์ฃผ์œ„ ์นœ๊ตฌ๋“ค์—๊ฒŒ ๋‰ด์Šค๋ ˆํ„ฐ๋ฅผ ์ถ”์ฒœํ•ด์ฃผ์„ธ์š”!
๋‹ค์Œ์ฃผ์—๋„ ์•Œ์ฐฌ ๋‚ด์šฉ์œผ๋กœ ๋Œ์•„์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜™
ํ˜น์‹œ ๋งˆ์Œ์— ์•ˆ๋“œ๋Š” ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋‚˜์š”? ์—ฌ๊ธฐ์—์„œ ํ”ผ๋“œ๋ฐฑ์„ ์ „๋‹ฌํ•ด์ฃผ์„ธ์š”!
์—ฌ๋Ÿฌ๋ถ„์˜ ์˜๊ฒฌ๋“ค์„ ์ ๊ทน ๋ฐ˜์˜ํ•ด์„œ ๋”์šฑ ์œ ์ตํ•œ ๋‰ด์Šค๋ ˆํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ƒ
๊ตฐ์ž๋™ ํ•ดํ‚น์—ฐ๊ตฌ์†Œ
hackyboizteam@gmail.com
์„œ์šธ์‹œ ๊ด‘์ง„๊ตฌ ๊ตฐ์ž๋™ 134-33 3์ธต
์ˆ˜์‹ ๊ฑฐ๋ถ€ Unsubscribe