Intel์€ ์ฝ”๋“œ์˜ ๋ฒ„๊ทธ๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ControlFlag ๊ธฐ๊ณ„ ํ•™์Šต ์‹œ์Šคํ…œ ์ฝ”๋“œ๋ฅผ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค.

Intel์€ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๊ธฐ๊ณ„ ํ•™์Šต ์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ControlFlag ์—ฐ๊ตฌ ํ”„๋กœ์ ํŠธ์™€ ๊ด€๋ จ๋œ ๊ฐœ๋ฐœ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ ์ค€๋น„ํ•œ ํˆดํ‚ท์„ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ€๋Ÿ‰์˜ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ํ•™์Šตํ•œ ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ C/C++์™€ ๊ฐ™์€ ๊ณ ๊ธ‰ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์†Œ์Šค ํ…์ŠคํŠธ์˜ ๋‹ค์–‘ํ•œ ์˜ค๋ฅ˜์™€ ์ด์ƒ ํ˜„์ƒ์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ์Šคํ…œ์€ ์˜คํƒ€ ๋ฐ ์ž˜๋ชป๋œ ์œ ํ˜• ์กฐํ•ฉ ์‹๋ณ„๋ถ€ํ„ฐ ํฌ์ธํ„ฐ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ์—์„œ ๋ˆ„๋ฝ๋œ NULL ๊ฐ’ ๊ฒ€์‚ฌ ์‹๋ณ„์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ์ฝ”๋“œ์˜ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋ฌธ์ œ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ControlFlag ์ฝ”๋“œ๋Š” C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ MIT ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ์˜คํ”ˆ ์†Œ์Šค๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์ด ์‹œ์Šคํ…œ์€ GitHub ๋ฐ ์œ ์‚ฌํ•œ ๊ณต๊ฐœ ์ €์žฅ์†Œ์— ๊ฒŒ์‹œ๋œ ๊ณต๊ฐœ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ์กด ์ฝ”๋“œ ๋ฐฐ์—ด์— ๋Œ€ํ•œ ํ†ต๊ณ„ ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•˜์—ฌ ์ž์ฒด ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. ํ›ˆ๋ จ ๋‹จ๊ณ„์—์„œ ์‹œ์Šคํ…œ์€ ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด์„ ๊ฒฐ์ •ํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ ์‹คํ–‰ ํ๋ฆ„์„ ๋ฐ˜์˜ํ•˜์—ฌ ์ด๋Ÿฌํ•œ ํŒจํ„ด ๊ฐ„์˜ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ, ๋ถ„์„๋œ ๋ชจ๋“  ์†Œ์Šค ์ฝ”๋“œ์˜ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ๊ฒฐํ•ฉํ•œ ์ฐธ์กฐ ์˜์‚ฌ๊ฒฐ์ • ํŠธ๋ฆฌ๊ฐ€ ํ˜•์„ฑ๋ฉ๋‹ˆ๋‹ค.

๊ฒ€ํ†  ์ค‘์ธ ์ฝ”๋“œ๋Š” ์ฐธ์กฐ ๊ฒฐ์ • ํŠธ๋ฆฌ์™€ ๋น„๊ตํ•˜์—ฌ ํ™•์ธ๋˜๋Š” ํŒจํ„ด์„ ์‹๋ณ„ํ•˜๋Š” ์œ ์‚ฌํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. ์ธ์ ‘ํ•œ ๊ฐ€์ง€์™€์˜ ํฐ ๋ถˆ์ผ์น˜๋Š” ํ™•์ธ ์ค‘์ธ ํŒจํ„ด์— ์ด์ƒ์ด ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋˜ํ•œ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ํ…œํ”Œ๋ฆฟ์˜ ์˜ค๋ฅ˜๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ œ์•ˆํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, OpenSSL ์ฝ”๋“œ์—์„œ โ€œ(s1 == NULL) โˆง (s2 == NULL)โ€ ๊ตฌ๋ฌธ์ด ์‹๋ณ„๋˜์—ˆ๋Š”๋ฐ, ์ด๋Š” ๊ตฌ๋ฌธ ํŠธ๋ฆฌ์— 8๋ฒˆ๋งŒ ๋‚˜ํƒ€๋‚œ ๋ฐ˜๋ฉด, โ€œ(s1 == ๊ฐ’์„ ๊ฐ€์ง„ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ถ„๊ธฐ)๋Š” NULL) || (s2 == NULL)'์ด ์•ฝ 7๋ฒˆ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์€ ๋˜ํ•œ โ€œ(s1 == NULL) | (s2 == NULL)โ€์ด ํŠธ๋ฆฌ์— 32๋ฒˆ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

Intel์€ ์ฝ”๋“œ์˜ ๋ฒ„๊ทธ๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ControlFlag ๊ธฐ๊ณ„ ํ•™์Šต ์‹œ์Šคํ…œ ์ฝ”๋“œ๋ฅผ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ์กฐ๊ฐ์„ ๋ถ„์„ํ•  ๋•Œ "if (x = 7) y = x;" ์‹œ์Šคํ…œ์€ "๋ณ€์ˆ˜ == ์ˆซ์ž" ๊ตฌ์„ฑ์ด ์ˆซ์ž ๊ฐ’์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด "if" ์—ฐ์‚ฐ์ž์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "if" ํ‘œํ˜„์‹์˜ "๋ณ€์ˆ˜ = ์ˆซ์ž" ํ‘œ์‹œ๋Š” ์˜ค์‹. ๊ธฐ์กด์˜ ์ •์  ๋ถ„์„๊ธฐ๋Š” ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋ฅผ ์žก์•„๋ƒˆ์„ ๊ฒƒ์ด์ง€๋งŒ ControlFlag๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์˜ต์…˜์„ ์ œ๊ณตํ•˜๊ธฐ ์–ด๋ ค์šด ๊ธฐ์„ฑ ๊ทœ์น™์„ ์ ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‹ค์–‘ํ•œ ๊ตฌ์กฐ์˜ ๋Œ€๋Ÿ‰ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ํ†ต๊ณ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜.

์‹คํ—˜์ ์œผ๋กœ ๊ณ ํ’ˆ์งˆ ๋ฐ ํ…Œ์ŠคํŠธ๋œ ์ฝ”๋“œ์˜ ์˜ˆ๋กœ ์ž์ฃผ ์ธ์šฉ๋˜๋Š” cURL ์œ ํ‹ธ๋ฆฌํ‹ฐ์˜ ์†Œ์Šค ์ฝ”๋“œ์— ControlFlag๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "s->keepon" ๊ตฌ์กฐ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ •์  ๋ถ„์„๊ธฐ์—์„œ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•œ ์˜ค๋ฅ˜๊ฐ€ ์‹๋ณ„๋˜์—ˆ์œผ๋ฉฐ, ์ˆซ์ž ์œ ํ˜•์ด ์žˆ์—ˆ์ง€๋งŒ ๋ถ€์šธ ๊ฐ’ TRUE์™€ ๋น„๊ต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. OpenSSL ์ฝ”๋“œ์—์„œ๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ "(s1 == NULL) โˆง (s2 == NULL)" ๋ฌธ์ œ ์™ธ์—๋„ "(-2 == rv)"๋ผ๋Š” ํ‘œํ˜„์—์„œ๋„ ์ด์ƒ์ด ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜คํƒ€) ๋ฐ "BIO_puts(bp, ":")

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€