software engineering/์†Œํ”„ํŠธ์›จ์–ด๊ฐœ๋ฐœ๋ณด์•ˆ 7

[Secure] API ์˜ค์šฉ ๋ณด์•ˆ์•ฝ์ 

API ์˜ค์šฉ ๋ณด์•ˆ์•ฝ์  ์˜๋„๋œ ์‚ฌ์šฉ์— ๋ฐ˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ API๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๋ณด์•ˆ์— ์ทจ์•ฝํ•œ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด์•ˆ ์•ฝ์  * DNS lookup ์— ์˜์กดํ•œ ๋ณด์•ˆ๊ฒฐ์ • 1. ์›์ธ ๋„๋ฉ”์ธ๋ช…์— ์˜์กดํ•ด์„œ ๋ณด์•ˆ๊ฒฐ์ •(์ธ์ฆ ๋ฐ ์ ‘๊ทผ ํ†ต์ œ ๋“ฑ)์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ 2. ์˜ํ–ฅ ๊ณต๊ฒฉ์ž๊ฐ€ DNS ์—”ํŠธ๋ฆฌ๋ฅผ ์†์ผ ์ˆ˜ ์žˆ์Œ(DNS spoofing) ๋กœ์ปฌ DNS ์„œ๋ฒ„์˜ ์บ์‹œ๊ฐ€ ๊ณต๊ฒฉ์ž์— ์˜ํ•ด ์˜ค์—ผ๋˜๋ฉด, ์‚ฌ์šฉ์ž์™€ ํŠน์ • ์„œ๋ฒ„๊ฐ„์— ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์ด ๊ณต๊ฒฉ์ž๋ฅผ ๊ฒฝ์œ ํ•˜๋„๋ก ์œ ๋„ ๊ณต๊ฒฉ์ž๊ฐ€ ๋งˆ์น˜ ๋™์ผ ๋„๋ฉ”์ธ์— ์†ํ•œ ์„œ๋ฒ„์ธ ๊ฒƒ ์ฒ˜๋Ÿผ ์œ„์žฅ (ํŒŒ๋ฐ) 3. ๋Œ€์‘ ๋ณด์•ˆ๊ฒฐ์ •์—์„œ ๋„๋ฉ”์ธ๋ช…์„ ์ด์šฉํ•œ DNS lookup์„ ํ•˜์ง€ ์•Š๋„๋ก ์กฐ์น˜ * ์ทจ์•ฝํ•œ API ์‚ฌ์šฉ 1. ์›์ธ ๋ณด์•ˆ์ƒ ๊ธˆ์ง€๋œ(banned) ํ•จ์ˆ˜์ด๊ฑฐ๋‚˜, ๋ถ€์ฃผ์˜ํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋งŽ์€ API๋ฅผ ์‚ฌ..

[Secure] ์บก์Šํ™” ๋ณด์•ˆ์•ฝ์ 

์บก์Šํ™” ๋ณด์•ˆ์•ฝ์  ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๊ธฐ๋Šฅ์„ฑ์„ ๋ถˆ์ถฉ๋ถ„ํ•˜๊ฒŒ ์บก์Šํ™”ํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ฐœ์ƒํ•˜๋Š” ๋ณด์•ˆ์•ฝ์ ์œผ๋กœ ์ •๋ณด ๋…ธ์ถœ, ๊ถŒํ•œ ๋ฌธ์ œ ๋“ฑ์ด ๋ฐœ์ƒ ์ž˜๋ชป๋œ ์„ธ์…˜์— ์˜ํ•œ ๋ฐ์ดํ„ฐ ์ •๋ณด ๋…ธ์ถœ ์ œ๊ฑฐ๋˜์ง€ ์•Š๊ณ  ๋‚จ์€ ๋””๋ฒ„๊ทธ ์ฝ”๋“œ Public ๋ฉ”์†Œ๋“œ๋กœ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜๋œ Private ๋ฐฐ์—ด Private ๋ฐฐ์—ด์— Public ๋ฐ์ดํ„ฐ ํ• ๋‹น * ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP; Object Oriented Programming) : ํ”„๋กœ๊ทธ๋žจ์„ ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ์™€ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, '๊ฐ์ฒด'๋ผ๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๊ณ  ๊ฐ์ฒด๋“ค์˜ ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ ์„œ์ˆ ํ•˜๋Š” ๋ฐฉ์‹ ํŠน์ง• ์„ค๋ช… ์บก์Šํ™” (Encapsulation) - ์„œ๋กœ ๊ด€๋ จ์„ฑ์ด ๋งŽ์€ ๋ฐ์ดํ„ฐ์™€ ์ด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํ•จ์ˆ˜๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํŠน์„ฑ - ์ •๋ณด ์€๋‹‰ : ์บก์Šํ™”์—์„œ ํ•œ๋‹จ๊ณ„ ๋” ๋‚˜์•„๊ฐ€..

[Secure] ์ฝ”๋“œ ์˜ค๋ฅ˜ ๋ณด์•ˆ ์•ฝ์ 

์ฝ”๋“œ์˜ค๋ฅ˜ ๋ณด์•ˆ์•ฝ์  ํƒ€์ž… ๋ณ€ํ™˜ ์˜ค๋ฅ˜, ์ž์›(๋ฉ”๋ชจ๋ฆฌ ๋“ฑ) ์˜ ๋ถ€์ ์ ˆํ•œ ๋ฐ˜ํ™˜ ๋“ฑ๊ณผ ๊ฐ™์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฒ”ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋”ฉ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์œ ๋ฐœ * Null Pointer ์—ญ์ฐธ์กฐ ์›์ธ Null๋กœ ์„ค์ •๋œ ์ฐธ์กฐ ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๊ฐ’์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ '์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ ๊ฐ์ฒด๊ฐ€ Null์ด ๋  ์ˆ˜ ์—†๋‹ค'๋ผ๊ณ  ํ•˜๋Š” ๊ฐ€์ •์„ ์œ„๋ฐ˜ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒ ์˜ํ–ฅ : ๊ณต๊ฒฉ์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ Null ํฌ์ธํ„ฐ ์—ญ์ฐธ์กฐ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ทธ ๊ฒฐ๊ณผ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์„ ์ด์šฉํ•˜์—ฌ ์ถ”ํ›„์˜ ๊ณต๊ฒฉ์„ ๊ณ„ํšํ•˜๋Š”๋ฐ ์‚ฌ์šฉ ๋Œ€์‘ : Null์ด ๋  ์ˆ˜ ์žˆ๋Š” Reference๋Š” ์ฐธ์กฐํ•˜๊ธฐ ์ „์— Null ๊ฐ’์ธ์ง€๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์•ˆ์ „ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ * ๋ถ€์ ์ ˆํ•œ ์ž์› ํ•ด์ œ ์›์ธ : ๋ฉ”๋ชจ๋ฆฌ, ํŒŒ์ผ, DB ์—ฐ๊ฒฐ๊ณผ ๊ฐ™์€ ์ž์›๋“ค์„ ์‚ฌ์šฉ ํ›„ ๋ฐ˜๋“œ์‹œ ์ž์›์„ ํ•ด์ œํ•ด์•ผํ•˜๋Š”๋ฐ, ํ”„๋กœ๊ทธ๋žจ ์˜ค๋ฅ˜ ๋˜๋Š” ์—๋Ÿฌ๋กœ ์‚ฌ์šฉ์ด ๋..

[Secure] ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ณด์•ˆ ์•ฝ์ 

์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ณด์•ˆ ์•ฝ์  ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ๋ถˆ์ถฉ๋ถ„ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ์—๋Ÿฌ ์ •๋ณด์— ์ค‘์š”์ •๋ณด(์‹œ์Šคํ…œ ๋‚ด๋ถ€ ์ •๋ณด ๋“ฑ)๊ฐ€ ํฌํ•จ๋  ๋•Œ ๋ฐœ์ƒ, ์—๋Ÿฌ๋ฅผ ๋ถ€์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฐœ์ƒํ•˜๋Š” ๋ณด์•ˆ์•ฝ์  * ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ •๋ณด ๋…ธ์ถœ ์›์ธ : ์‘์šฉํ”„๋กœ๊ทธ๋žจ์ด (์‹คํ–‰ํ™˜๊ฒฝ, ์‚ฌ์šฉ์ž ๋“ฑ ๊ด€๋ จ ๋ฐ์ดํ„ฐ ๋˜๋Š” ์‹œ์Šคํ…œ์˜ ๋‚ด๋ถ€๋ฐ์ดํ„ฐ ๋“ฑ) ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์™ธ๋ถ€์— ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ ์˜ํ–ฅ ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ, ์—๋Ÿฌ ์ด๋ฆ„์ด๋‚˜ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ ํ”„๋กœ๊ทธ๋žจ ๋‚ด๋ถ€๊ตฌ์กฐ๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Œ ๊ณต๊ฒฉ์ž๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๋ฐœ์ƒ๋œ ์ƒ์„ธํ•œ ์˜ค๋ฅ˜ ์ •๋ณด๋ฅผ ์–ป๊ณ , ๊ณต๊ฒฉ์— ํ™œ์šฉ ๋Œ€์‘ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋Š” ์ •ํ•ด์ง„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์œ ์šฉํ•œ ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋งŒ ํฌํ•จํ•˜๋„๋ก ์กฐ์น˜ ์†Œ์Šค์ฝ”๋“œ์—์„œ ์˜ˆ์™ธ ์ƒํ™ฉ์€ ๋‚ด๋ถ€์ ์œผ๋กœ๋งŒ ์ฒ˜๋ฆฌํ•˜๊ณ , ์‚ฌ์šฉ์ž์—๊ฒŒ ์‹œ์Šคํ…œ ๋‚ด๋ถ€ ์ •..

[Secure] ์‹œ๊ฐ„ ๋ฐ ์ƒํƒœ ๋ณด์•ˆ ์•ฝ์ 

์‹œ๊ฐ„ ๋ฐ ์ƒํƒœ ๋ณด์•ˆ ์•ฝ์  ๋™์‹œ ๋˜๋Š” ๊ฑฐ์˜ ๋™์‹œ ์ˆ˜ํ–‰์„ ์ง€์›ํ•˜๋Š” ๋ณ‘๋ ฌ ์‹œ์Šคํ…œ์ด๋‚˜, ํ•˜๋‚˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ž‘๋˜๋Š” ํ™˜๊ฒฝ์—์„œ ์‹œ๊ฐ„ ๋ฐ ์ƒํƒœ๋ฅผ ๋ถ€์ ์ ˆํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜์—ฌ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด์•ˆ ์•ฝ์  * ๊ฒฝ์Ÿ์กฐ๊ฑด: ๊ฒ€์‚ฌ์‹œ์ ๊ณผ ์‚ฌ์šฉ ์‹œ์ (TOCTOU) ์›์ธ : ๋ณ‘๋ ฌ ์‹คํ–‰ ํ™˜๊ฒฝ์˜ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์—์„œ ์ž์›(ํŒŒ์ผ, ์†Œ์ผ“ ๋“ฑ)์„ ๊ฒ€์‚ฌํ•˜๋Š” ์‹œ์ ๊ณผ, ์ž์›์„ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์ ์˜ ์ƒํƒœ๊ฐ€ ๋‹ฌ๋ผ ์˜ค๋™์ž‘์„ ์ผ์œผํ‚ค๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ ์˜ํ–ฅ : ํ”„๋กœ๊ทธ๋žจ์ด ๊ต์ฐฉ ์ƒํƒœ(dead lock)์— ๋น ์ง€๊ฑฐ๋‚˜, ๊ฒฝ์Ÿ(๊ณต์œ ) ์ž์›์˜ ๋ณ€์กฐ๋‚˜ ์‚ญ์ œ ๋ฐ ๊ธฐํƒ€ ๋™๊ธฐํ™” ์˜ค๋ฅ˜ ๋“ฑ์ด ๋ฐœ์ƒ ๋Œ€์‘ ๋™๊ธฐํ™” ๊ตฌ๋ฌธ(Synchronized, Mutex ๋“ฑ) ์„ ์ด์šฉํ•˜์—ฌ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ž„๊ณ„์ฝ”๋“œ ์ฃผ๋ณ€๋งŒ ๋™๊ธฐํ™” ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉ..

[Secure] ๋ณด์•ˆ ๊ธฐ๋Šฅ ๋ณด์•ˆ ์•ฝ์ 

* ๋ถ€์ ์ ˆํ•œ ์ „์ž์„œ๋ช… ํ™•์ธ ์›์ธ : ํ”„๋กœ๊ทธ๋žจ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์ฝ”๋“œ์˜ ์ „์ž์„œ๋ช…์— ๋Œ€ํ•œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ์ ์ ํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์˜ํ–ฅ : ์ „์ž์„œ๋ช…์„ ๊ฒ€์ฆํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ๊ฒ€์ฆ์ ˆ์ฐจ๊ฐ€ ๋ถ€์ ์ ˆํ•˜๋ฉด ์œ„๋ณ€์กฐ๋œ ํŒŒ์ผ๋กœ ๊ณต๊ฒฉ์ž์˜ ์•…์˜์ ์ธ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๊ฐ€๋Šฅ ๋Œ€์‘ ์ „์ž์„œ๋ช…์„ ํฌํ•จํ•˜๋Š” ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ํ•ญ์ƒ ์ „์ž์„œ๋ช…์„ ํ™•์ธ ์ „์ž์„œ๋ช… ํŒŒ์ผ์˜ ์ถœ์ฒ˜ ๋“ฑ์„ ํ™•์ธํ•˜์—ฌ, ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๊ณณ์—์„œ ์ƒ์„ฑ๋œ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์กฐ์น˜ * ๋ถ€์ ์ ˆํ•œ ์ธ์ฆ์„œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ ์›์ธ : ์ธ์ฆ์„œ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ์ธ์ฆ์„œ ํ™•์ธ ์ ˆ์ฐจ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฐœ์ƒ ์˜ํ–ฅ : ์•…์˜์ ์ธ ํ˜ธ์ŠคํŠธ์— ์—ฐ๊ฒฐ๋˜๊ฑฐ๋‚˜, ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ํ˜ธ์ŠคํŠธ์—์„œ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹  ๊ฐ€๋Šฅ ๋Œ€์‘ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์ธ์ฆ์„œ์˜ ์œ ํšจ์„ฑ์„ ํ™•์ธ ์ธ์ฆ์„œ์˜ Subject(Common Name)์™€ ..

[Secure] ์ธ์ฆ ๋ฐ ๊ถŒํ•œ๊ด€๋ฆฌ / ์ ‘๊ทผ ์ œ์–ด

1. ์ธ์ฆ ๋ฐ ๊ถŒํ•œ๊ด€๋ฆฌ(์‹๋ณ„, ์ธ์ฆ, ์ธ๊ฐ€) ์ฃผ์ฒด(Subject)๊ฐ€ ๊ฐ์ฒด(Object)๋ฅผ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ํ†ต์ œํ•˜๋Š” ๊ฒƒ Accounting(๊ณ„์ •๊ด€๋ฆฌ) -> Authentication(์ธ์ฆ) -> Authorization(๊ถŒํ•œ๋ถ€์—ฌ) * ์‹๋ณ„ ์œ ์ผํ•œ ์‹๋ณ„์ž(ID) ๋ถ€์—ฌ -> ์ฑ…์ž„ ์ถ”์ •์„ฑ(Accountability) ํ™•๋ณด ๊ณ„์ • ๊ณต์œ  ์‚ฌ์šฉ ์ œํ•œ ์ถ”์ธก ๊ฐ€๋Šฅํ•œ ์‹๋ณ„์ž ์‚ฌ์šฉ ์ œํ•œ (ex. root, admin, manager..) -> ์‹๋ณ„์ž ๋ณ€๊ฒฝ, ๋น„ํ™œ์„ฑํ™” * ์ธ์ฆ ์ •๋ณด์˜ ์ฃผ์ฒด๊ฐ€ ๋˜๋Š” ์†ก์‹ ์ž์™€ ์ˆ˜์‹ ์ž๊ฐ„์— ๊ต๋ฅ˜ํ•˜๋Š” ์ •๋ณด์˜ ๋‚ด์šฉ์ด ๋ณ€์กฐ, ์‚ญ์ œ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธ ์ฃผ์ฒด๊ฐ€ ๋˜๋Š” ์†ก์ˆ˜์‹ ์ž๊ฐ€ ์ •๋‹นํ•œ์ง€ ํ™•์ธ ์ธ์ฆ ์œ ํ˜• (์ˆ˜๋‹จ) ์ง€์‹ : ์‚ฌ์šฉ์ž๊ฐ€ ์•Œ๊ณ ์žˆ๋Š” ์ •๋ณด์— ๊ธฐ๋ฐ˜ (PIN, ํŒจ์Šค์›Œ๋“œ, ๊ณ„์ขŒ๋ฒˆํ˜ธ..) ์†Œ์œ  : ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š”..