[12์›” 1์ฃผ์ฐจ]


ํ•ดํ‚น ์•Œ๋ ค์ค„๊ฒŒ
17ํ™”: Numeric Truncation Error

์•ˆ๋…•ํ•˜์„ธ์š”! ํ•ดํ‚น ์•Œ๋ ค์ค„๊ฒŒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜Ž
์˜ค๋Š˜์€ ์ˆซ์ž์—์„œ ๋ฐœ์ƒํ•˜๋Š” Numeric Truncation Error๋ฅผ ๊ฐ€์ ธ์™”์–ด์š”. โœ‚๏ธ
์ˆซ์ž๊ฐ€ ์ž˜๋ฆฐ๋‹ค๋‹ˆ! ๐Ÿ˜ฒ ์ด๊ฒŒ ๋„๋Œ€์ฒด ์–ด๋–ป๊ฒŒ ๋œ ์ผ์ด์ฃ ?

์ˆซ์ž์—์„œ ๋ฐœ์ƒ๋˜๋Š” ๋ฌธ์ œ์ ์ด์š”? Integer Overflow๊ฐ€ ์žˆ์—ˆ์ฃ !
Integer Overflow ์ทจ์•ฝ์  ์•Œ๋ ค๋“œ๋ฆฐ ๊ฒƒ ๊ธฐ์–ต๋‚˜์‹œ๋‚˜์š”? ๐Ÿ™‚ (๊ธฐ์–ต๋‚˜์‹œ๋Š” ๋ถ„์€ ์ €ํฌ ๋‰ด์Šค๋ ˆํ„ฐ๋ฅผ ์ดˆ์ฐฝ๊ธฐ๋ถ€ํ„ฐ ๋ด์ฃผ์‹  50์—ฌ ๋ถ„ ์ค‘์— ํ•œ ๋ถ„์ž…๋‹ˆ๋‹ค...! ๐Ÿ‘๐Ÿป )

Integer Overflow ๋‹ค์‹œ ๋ณด๋Ÿฌ ๊ฐ€๊ธฐ! ๐Ÿ˜Ž ๐Ÿ‘†๐Ÿป ๐Ÿ‘†๐Ÿป

Integer Overflow๋Š” ์ •์ˆ˜ ์ž๋ฃŒํ˜•์— ๋”ฐ๋ผ์„œ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ 1 ๋ฐ”์ดํŠธ์˜ signed char์ธ 127์—์„œ 1์„ ๋”ํ•˜๋ฉด -128์ด ๋˜๋Š” ์ทจ์•ฝ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ทจ์•ฝ์ ์ด ์ž˜ ๊ธฐ์–ต์ด ์•ˆ ๋‚˜์‹œ๊ฑฐ๋‚˜, ์™œ -128์ด ๋˜๋Š”์ง€ ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ ๋˜์‹œ๋ฉด ๋‹ค์‹œ ๋ณด๊ณ  ์˜ค์‹œ๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ด ๋“œ๋ ค์š”!

๊ทธ๋Ÿผ ์ด์ œ Numeric Truncation Error๊ฐ€ ๋ญ”์ง€ ์•Œ์•„๋ณด๋ฉด์„œ, ๋‘˜์˜ ์ฐจ์ด์ ์„ ํ™•์‹คํžˆ ์•Œ์•„๋ณด์ž๊ตฌ์š”!
๐Ÿ“Œ 2์ง„์ˆ˜๋Š” ์•ž์˜ 0b๋ฅผ ๋ถ™์—ฌ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค! ํ•˜์ง€๋งŒ ํ•ด๋‹น ๊ธ€์—์„œ๋Š” ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ํŒŒ๋ž€์ƒ‰์œผ๋กœ ํ‘œ์‹œํ•˜์˜€์Šต๋‹ˆ๋‹ค. 
(5 = 0b0101 = 0101)

Numeric Truncation Error๊ฐ€ ๋ญ์˜ˆ์š”? ๐Ÿคจ
Numeric Truncation Error๋Š” ๊ธฐ๋ณธ ์š”์†Œ๊ฐ€ ๋” ์ž‘์€ ๊ธฐ๋ณธ ์š”์†Œ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋˜์–ด ์›๋ž˜ ๊ฐ’๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ๊ฐ’์œผ๋กœ ์ €์žฅ๋  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
์—ญ์‹œ ๋ง๋งŒ ๋“ค์–ด์„œ๋Š” ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ฆฌ์ฃ ? ๐Ÿค”
16bit๋กœ ์ˆซ์ž 256์€ 00000001 00000000์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ 8bit๋กœ ๋ณ€ํ™˜ํ•˜๊ฒŒ ๋˜๋ฉด ์ƒ์œ„ 8๋น„ํŠธ๊ฐ€ ์†์‹ค๋˜์–ด์„œ 00000000๋งŒ ๋‚จ๊ฒŒ ๋˜๋Š” ๊ฑฐ์˜ˆ์š”!

int์˜ ๋ฒ”์œ„๋Š” 32bit๋กœ -2,147,483,648 ~ 2,147,483,647๊นŒ์ง€ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•˜๊ณ  short๋Š” 16bit๋กœ -32,768 ~ 32,767๊นŒ์ง€ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์œ„ ์ฝ”๋“œ์˜ ๋„ท์งธ ์ค„์ธ short_number = int_numer; ์—์„œ int๊ฐ€ short๋กœ ๋ณ€ํ™˜๋˜์–ด ์ €์žฅ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
2,147,483,647์ธ 01111111 11111111 11111111 11111111๊ฐ€ 16bit๋กœ ๋ณ€ํ™˜๋˜๋ฉด ์ƒ์œ„ 16bit๊ฐ€ ์†์‹ค๋˜์–ด 11111111 11111111์ด ๋‚จ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ shortPrimitive์— ์˜ˆ์ƒํ•œ ๊ฐ’์ด ์•„๋‹Œ -1์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
์™œ 11111111 11111111๊ฐ€ -1์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ์•„๋ž˜์— ์žˆ๋Š” ํ•ดํ‚คํ”ผ๋””์•„๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!

์™œ Numeric Truncation Error๊ฐ€ ์ค‘์š”ํ•œ๊ฐ€์š”? ๐Ÿ˜
Numberic Truncation Error๋Š” Integer Overflow์™€ ๋น„์Šทํ•ด์š”. ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๋“ฑ์˜ ์ง์ ‘์ ์ธ Exploit์—๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š์ง€๋งŒ, ์ค‘์š”ํ•œ ๋ณ€์ˆ˜์—์„œ ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ๊ฐ’์œผ๋กœ Buffer / Heap Overflow, out-of-bounds, ๊ถŒํ•œ ์ƒ์Šน ๋“ฑ์˜ ๋˜ ๋‹ค๋ฅธ ์ทจ์•ฝ์ ์œผ๋กœ ์ด์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!!
์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ ์ทจ์•ฝ์ ์œผ๋กœ ์ด์–ด์ง€๋Š”์ง€ ๋ณด์—ฌ๋“œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋“œ๋ฆด๊ฒŒ์š”. ๐Ÿ˜Ž

์šฐ์„  ์ตœ์ข… ๋ชฉํ‘œ๋Š” get_shell() ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œ์ผœ์„œ system("/bin/sh"); ๊นŒ์ง€ ์‹คํ–‰์‹œ์ผœ์•ผ ๊ฒ ๋„ค์š”. buf์˜ ์‚ฌ์ด์ฆˆ๋Š” 32์ด๊ณ , buf์˜ ์‚ฌ์ด์ฆˆ์ธ len์„ ์ž…๋ ฅ๋ฐ›์•„ ํ•ด๋‹น len๋งŒํผ buf์— ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์š”.
์—ฌ๊ธฐ๊นŒ์ง€ ์ƒ๊ฐํ•˜๋ฉด buf์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฌด์ง€๋ง‰์ง€ํ•˜๊ฒŒ ์ž…๋ ฅ๋ฐ›์•„์„œ Stack Buffer Overflow๋ฅผ ์ผ์œผํ‚ค์ž! ๐Ÿค” ์ƒ๊ฐ์ด ๋“ค์ฃ ? ํ•˜์ง€๋งŒ ์ž…๋ ฅ๋ฐ›์€ len์ด 32๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด Buffer Overflow๋ฅผ ํƒ์ง€ํ•˜๊ณ  ์ข…๋ฃŒ์‹œ์ผœ๋ฒ„๋ฆฌ๋„ค์š”. ๐Ÿ˜ž

ํ•˜์ง€๋งŒ ์ค‘์š”ํ•œ ๊ฒƒ์€! len์ด 32์ด์ƒ์ผ ๋•Œ๋งŒ ์ข…๋ฃŒ์‹œํ‚ค์ง€ 0๋ณด๋‹ค ํฌ๋ผ๋Š” ๋ฒ•์€ ์—†์ž–์•„์š”? ๐Ÿ˜ƒ -65281(11111111 11111111 00000000 11111111)์„ ์ž…๋ ฅํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
if(len > 32)์—์„œ๋Š” len์˜ ๊ฐ’์ด -65281์ด๋ฏ€๋กœ ์ข…๋ฃŒ๋˜์ง€ ์•Š๊ณ  ์‹คํ–‰์„ ์ด์–ด๊ฐ€๊ฒŒ ๋˜๊ณ , short_len = len; ์—์„œ ๋ฐ”๋กœ Numeric Truncation Error๊ฐ€ ๋ฐœ์ƒํ•ด ์ƒ์œ„ 16bit๊ฐ€ ์†์‹ค๋˜์–ด 00000000 11111111๋งŒ ๋‚จ์•„ 255๊ฐ€ ๋ฉ๋‹ˆ๋‹ค! ๐Ÿคญ
buf์˜ ํฌ๊ธฐ๊ฐ€ 32์ด์ธ๋ฐ 255๋งŒํผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ตฐ์š”. Stack Buffer Overflow๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ get_shell() ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ return address์— ๋„ฃ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

์‹ค์ œ๋กœ ๋ฐœ์ƒํ•œ ์ทจ์•ฝ์ ์ด ๊ถ๊ธˆํ•˜์‹  ๋ถ„๋“ค์€ ํ•˜๋ฃจํ•œ์ค„๋„ ๋ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•ด์š”. ๐Ÿฅบ ๋ชจ๋‘ 64๋น„ํŠธ๋ฅผ 32๋น„ํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•ด๋‹น ์ทจ์•ฝ์ ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค!

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‚˜์š”?
์ œ์ผ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์—ญ์‹œ ์•„์˜ˆ ๋” ํฐ ํฌ๊ธฐ์˜ ์ž๋ฃŒํ˜•์—์„œ ๋” ์ž‘์€ ํฌ๊ธฐ์˜ ์ž๋ฃŒํ˜•์œผ๋กœ์˜ ๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•ญ์ƒ ๊ทธ๋Ÿด ์ˆ˜๋Š” ์—†๋Š” ์ผ์ด์ฃ . ๐Ÿ˜‘ ์‹ฑ๊ฑฐ์šด ํ•ด๊ฒฐ๋ฐฉ์•ˆ์ด์ง€๋งŒ ํ˜•๋ณ€ํ™˜ ์ด์ „์— Numeric Truncation Error๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์ตœ๋Œ€ํ•œ ๊ฒ€์‚ฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์–ด์š”. ๐Ÿ™‚
์˜ค๋Š˜์˜ ํ•ดํ‚น ์•Œ๋ ค์ค„๊ฒŒ๋„ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜Š

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