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


ํ•ดํ‚น ์•Œ๋ ค์ค„๊ฒŒ
1ํ™”: Stack Buffer Overflow

๋ฐ˜๊ฐ€์›Œ์š”. ์ฒ˜์Œ ๋งŒ๋‚˜๊ฒŒ ๋˜์—ˆ๋„ค์š”! ๐Ÿ™‚
ํ•ด์ปค๋“ค์ด ์‚ฌ๋ž‘ํ•˜๋Š” ํ•ดํ‚น ํ…Œํฌ๋‹‰ Stack Buffer Overflow์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. 
Buffer Overflow๋Š” 2019๋…„ MITRE Corporation์ด ๋ฐœํ‘œํ•œ '๊ฐ€์žฅ ์œ„ํ—˜ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์˜ค๋ฅ˜ 25๊ฐœ' ์ค‘์— 1์œ„๐Ÿฅ‡์— ์˜ค๋ฅผ ๋งŒํผ ์œ ๋ช…ํ•œ ํ•ดํ‚น ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.

Buffer Overflow๊ฐ€ ๋ญ์—์š”?

Buffer Overflow๋Š” ํ•ดํ‚น ์•ˆ ํ•˜๋Š” ์ œ ์ปด๋Œ์ด ์นœ๊ตฌ๋„ ์•Œ ๋งŒํผ ๋„๋ฆฌ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งž์•„์š”, ๋ง ๊ทธ๋Œ€๋กœ์˜ ์˜๋ฏธ์ž…๋‹ˆ๋‹ค! ๐Ÿ˜Ž ์ง€์ •๋œ ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋œปํ•˜๋Š” Buffer์™€ ๋„˜์ณํ๋ฅธ๋‹ค๋Š” Overflow์˜ ํ•ฉ์„ฑ์–ด๋กœ ์šฐ๋ฆฌ์˜ ์ €์žฅ ๊ณต๊ฐ„์ด ๋„˜์ณ์„œ ํ๋ฅด๊ณ  ์žˆ์„ ๋•Œ ๊ณผ์—ฐ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์•Œ์•„๋ณผ๊นŒ์š”?

Stack? Heap? ์ด๊ฑด ๋˜ ๋ญ์—์š”?
๋จผ์ € Buffer Overflow๋Š” ๋ฐœ์ƒํ•˜๋Š” ์œ„์น˜์— ๋”ฐ๋ผ์„œ Stack Buffer Overflow, Heap Buffer Overflow๋กœ ๋‚˜๋‰˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 
Stack์€ ํ•จ์ˆ˜ ๋งค๊ฐœ ๋ณ€์ˆ˜, ์ง€์—ญ ๋ณ€์ˆ˜ ๋ฐ ๊ธฐํƒ€ ํ•จ์ˆ˜ ๊ด€๋ จ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๊ณ , Heap์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ malloc ๋“ฑ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•œ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด์ฃ .

์˜ค๋Š˜์€ ๊ทธ์ค‘์—์„œ๋„ Stack Buffer Overflow์— ์ดˆ์ ์„ ๋งž์ถฐ์„œ ๊ฐ™์ด ํ•˜๋‚˜์”ฉ ์•Œ์•„๋ด์š”! ๋„๋Œ€์ฒด ์ €์žฅ ๊ณต๊ฐ„์ด ๋„˜์ณ์„œ ํ๋ฅธ๋‹ค๋Š” ๊ฑด ๋ญ๊ณ  ์™œ ์ผ์–ด๋‚˜๋Š” ๊ฑธ๊นŒ์š”? ๐Ÿค”

c์–ธ์–ด์˜ gets(), scanf(), strcpy() ๋“ฑ์˜ ํ•จ์ˆ˜๋Š” ๋ชจ๋‘ ์ž…๋ ฅ๋ฐ›๊ฑฐ๋‚˜ ์ €์žฅํ•˜๋Š” ๋ฒ„ํผ์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„์š”. Enter๋ฅผ ์ž…๋ ฅํ•˜๊ธฐ ์ „๊นŒ์ง€ ๋ชจ๋‘ ์ž…๋ ฅ๋ฐ›๋Š” gets() ํ•จ์ˆ˜๋ฅผ ์˜ˆ์‹œ๋กœ ์ž์„ธํžˆ ์‚ดํŽด๋ณผ๊ฒŒ์š”.

ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” '์‚ฌ๋žŒ๋“ค์ด ๋‹น์—ฐํžˆ 10๊ธ€์ž๋งŒ ์ž…๋ ฅ์„ ํ•˜๊ฒ ์ง€?'๋ผ๋Š” ๊ฐ•ํ•œ ๋ฏฟ์Œ์„ ๊ฐ€์ง€๊ณ  ์ง  ๊ฒƒ ๊ฐ™๋„ค์š”. 

์—ฌ๊ธฐ์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ์ ์€ '์‚ฌ๋žŒ๋“ค์ด 11๋ฒˆ์งธ, 12๋ฒˆ์งธ ๊ธ€์ž๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์–ด๋–กํ•˜์ง€?'๋ผ๋Š” ์ƒ๊ฐ์„ ํ•˜์ง€ ์•Š๊ณ  ์ž…๋ ฅ๋ฐ›์„ ๋ฒ„ํผ์˜ ๊ธธ์ด์— ๋Œ€ํ•œ ๊ฒ€์ฆ์„ ์ •ํ™•ํžˆ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด์ฃ ! ๐Ÿ˜“

11๋ฒˆ์งธ, 12๋ฒˆ์งธ ๊ธ€์ž๋ฅผ ์ž…๋ ฅํ•˜๋Š”๊ฒŒ ๋ฌด์Šจ ๋ฌธ์ œ๊ฐ€ ๋˜๋‚˜์š”?

๊ฐ€์žฅ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฑด ๋ญ๋‹ˆ ๋ญ๋‹ˆ ํ•ด๋„ ๋ฐ”๋กœ return address๊นŒ์ง€ ๊ฐ’์ด ๋ฎ์—ฌ ์“ฐ์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜ฑ
๋ฆฌํ„ด ์–ด๋“œ๋ ˆ์Šค์—๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋ณต๊ท€ํ•  ๋•Œ ์ฐธ์กฐํ•  ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ๊ณณ์˜ ์ฃผ์†Œ๋ฅผ ์ ์œผ๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ๋งˆ์Œ๋Œ€๋กœ ์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.
๊ทธ๋Ÿผ ์›ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜๋„, ์‰˜์ฝ”๋“œ๊ฐ€ ์œ„์น˜ํ•˜๋Š” ์ฃผ์†Œ๋ฅผ ์•Œ๋ฉด ์‰˜์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜๋„, ๋” ๋‚˜์•„๊ฐ€ buf์— ์›ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ ๊ณ  buf์˜ ์œ„์น˜๋กœ ๋ฎ์œผ๋ฉด ๊ทธ buf์— ์ ํžŒ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ๊ฒŒ ๋˜์ฃ .

์ฐธ๊ณ ๋กœ ์˜ˆ์‹œ์— ์žˆ๋Š” Segmentation Fault๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผ ์‹œ์— ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์„ ๊ณ„์†ํ•ด์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒํ•ด์š”.

Stack Buffer Overflow๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ์š”?
๋ฌผ๋ก  ์žˆ์ฃ ! ๐Ÿ˜
์šฐ์„  ๊ฐœ๋ฐœ์ž์˜ ๊ด€์ ์—์„œ ์ด๋Ÿฐ ์ทจ์•ฝ์ ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธธ์ด ์ œํ•œ ์—†๋Š” ํ•จ์ˆ˜์˜ ์‚ฌ์šฉ์„ ํ•˜์ง€ ๋ง์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธธ์ด ์ œํ•œ ์—†๋Š” gets(char *s) ๋Œ€์‹  fgets(char *s, int n, FILE *stream) ๊ฐ™์ด ๊ธธ์ด ์ œํ•œ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด 'n๋งŒํผ๋งŒ ์ž…๋ ฅ์„ ๋ฐ›๊ฒ ๋‹ค!'๊ณ  ์•Œ๋ ค์ค˜์•ผ ํ•ด์š”.

Stack Canary๋Š” ๋ฆฌํ„ด ์–ด๋“œ๋ ˆ์Šค ์ „์— ์‚ฝ์ž…๋˜์–ด Buffer Overflow๊ฐ€ ๋ฐœ์ƒํ•ด ๊ฐ’์ด ๋ณ€์กฐ๋˜์—ˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•ด Buffer Overflow๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด ๊ทธ๋Œ€๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒ์‹œํ‚ค๊ณ , ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ์ฃผ์†Œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋žœ๋คํ™”ํ•˜๋Š” ASLR, ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” NX๊ฐ™์€ ๋ณดํ˜ธ ๊ธฐ๋ฒ•์ด ์กด์žฌํ•ด์š”.

ํ•˜์ง€๋งŒ ์ด๊ฑธ๋กœ ๋‹ค ๋ณดํ˜ธ๋˜๋ฉด ๊ดœํžˆ '๊ฐ€์žฅ ์œ„ํ—˜ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์˜ค๋ฅ˜ 25๊ฐœ' ์ค‘์— 1์œ„๊ฐ€ ์•„๋‹ˆ๊ฒ ์ฃ ? ๋ณดํ˜ธ ๊ธฐ๋ฒ•๋“ค ๋ชจ๋‘ ์šฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ต๋‹ˆ๋‹ค. ๐Ÿ˜ฑ ์–ธ์  ๊ฐ€ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด๋“œ๋ฆด ์ทจ์•ฝ์ ์œผ๋กœ ์ฐพ์•„์˜ฌ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋„ค์š”. ๐Ÿ˜‰

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