Swift ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋ฐ ํ’ˆ์งˆ ์†”๋ฃจ์…˜

๊ทœ์ œ ๋Œ€์ƒ ๊ธฐ์—…์„ ์œ„ํ•œ ์‹ ์†ํ•œ ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋ฐ ํ’ˆ์งˆ ์†”๋ฃจ์…˜

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

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

Swift ์ฝ”๋“œ ์œ„ํ—˜ ๋ถ„์„

Smart TS XL์€ ์‹คํ–‰ ๊ฒฝ๋กœ์™€ ์•„ํ‚คํ…์ฒ˜ ์œ„ํ—˜ ๋…ธ์ถœ ๊ฐ„์˜ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•˜์—ฌ Swift ์ •์  ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

์ง€๊ธˆ ํƒ์ƒ‰

์ง€์†์  ํ†ตํ•ฉ ํŒŒ์ดํ”„๋ผ์ธ์€ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๋”์šฑ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Swift ์ฝ”๋“œ๋Š” ์ž๋™ํ™”๋œ ๋ฐฐํฌ ์ฒด์ธ ๋‚ด์—์„œ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ ๋ฐ ์„œ๋ช…๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ์ฒด์ธ์—๋Š” ํ™•์ •์ ์ธ ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ผ๊ด€์„ฑ ์—†๋Š” ๊ทœ์น™ ์ ์šฉ, ๊ณผ๋„ํ•œ ์˜คํƒ ๋˜๋Š” ์ทจ์•ฝํ•œ ์šฐ์„ ์ˆœ์œ„ ๋…ผ๋ฆฌ๋Š” ๋ฐฐํฌ ์†๋„๋ฅผ ์ €ํ•˜์‹œํ‚ค๊ณ  ๋ฆด๋ฆฌ์Šค ์ค€๋น„ ์ƒํƒœ์— ๋Œ€ํ•œ ์‹ ๋ขฐ๋„๋ฅผ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CI/CD ํŒŒ์ดํ”„๋ผ์ธ์— ์ •์  ๋ถ„์„์„ ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ๊ตฌ์กฐํ™”๋œ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋‹จ์ˆœํžˆ ๊ทœ์น™ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๊ฒƒ๋ณด๋‹ค ์‹ ํ˜ธ ํ’ˆ์งˆ๊ณผ ์ •์ฑ… ์ ์šฉ ๊ทœ์œจ์ด ๋” ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

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

์ฐจ๋ก€

Swift์˜ Smart TS XL์„ ์‚ฌ์šฉํ•œ ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋ฐ ์œ„ํ—˜ ์ƒ๊ด€๊ด€๊ณ„ ๋ถ„์„

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

๊ธฐ์—… ํ™˜๊ฒฝ์˜ Swift ๋ฐฐํฌ, ํŠนํžˆ iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์„œ๋ฒ„ ์ธก Swift ์„œ๋น„์Šค๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” ์œ„ํ—˜์ด ๋‹จ์ผ ํŒŒ์ผ์—๋งŒ ๊ตญํ•œ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ญ…๋‹ˆ๋‹ค. ์ทจ์•ฝ์ ๊ณผ ํ’ˆ์งˆ ์ €ํ•˜๋Š” ์ƒํ˜ธ ์ž‘์šฉ ํŒจํ„ด, ๊ณต์œ  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ, ๊ฐ„์ ‘ ํ˜ธ์ถœ ์ฒด์ธ ๋“ฑ์„ ํ†ตํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Smart TS XL์€ ํ–‰๋™ ๋ฐ ๊ตฌ์กฐ์  ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ๋„์ž…ํ•˜์—ฌ ๊ฐœ๋ณ„์ ์ธ ๊ทœ์น™ ์œ„๋ฐ˜์„ ๋„˜์–ด ์šฐ์„ ์ˆœ์œ„ ๊ฒฐ์ •์˜ ์ •ํ™•๋„๋ฅผ ๋†’์—ฌ์ค๋‹ˆ๋‹ค. Smart TS XL์˜ ๋ถ„์„์  ์—ญํ• ์€ ์ •์  ์ฝ”๋“œ ๋ถ„์„์„ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ณด์™„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

YouTube ๋™์˜์ƒ

Swift ๋ชจ๋“ˆ ๊ฐ„ ์‹คํ–‰ ๊ฒฝ๋กœ ์ƒ๊ด€๊ด€๊ณ„

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

Smart TS XL์€ ๋‹ค์Œ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • Swift ํŒจํ‚ค์ง€ ์ „๋ฐ˜์— ๊ฑธ์นœ ๋ชจ๋“ˆ ๊ฐ„ ํ˜ธ์ถœ ๊ทธ๋ž˜ํ”„ ์žฌ๊ตฌ์„ฑ
  • UI ์ง„์ž…์ ์—์„œ ๋ฐฑ์—”๋“œ ํ˜ธ์ถœ ๋กœ์ง๊นŒ์ง€์˜ ์ถ”์ ์„ฑ
  • ๋น„๋™๊ธฐ ์‹คํ–‰ ์ฒด์ธ ๋ฐ ์ฝœ๋ฐฑ ์ „ํŒŒ ๋งคํ•‘
  • ์ •์  ๊ทœ์น™ ์—”์ง„์ด ๋…๋ฆฝ์ ์ธ ์ด๋ฒคํŠธ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„์ ‘ ๋…ธ์ถœ ๊ฒฝ๋กœ ์‹๋ณ„

์ด๋Ÿฌํ•œ ์‹คํ–‰ ์ƒํ™ฉ ์ธ์‹ ๋ชจ๋ธ๋ง์€ ๊ฐœ๋ณ„์ ์œผ๋กœ๋Š” ์‚ฌ์†Œํ•ด ๋ณด์ด์ง€๋งŒ ์˜ํ–ฅ๋ ฅ์ด ํฐ ๊ฑฐ๋ž˜ ํ๋ฆ„ ๋‚ด์—์„œ ์ž‘์šฉํ•˜๋Š” ๋ฐœ๊ฒฌ ์‚ฌํ•ญ์„ ๊ณผ์†Œํ‰๊ฐ€ํ•  ์œ„ํ—˜์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.

์˜์กด์„ฑ ๋ฒ”์œ„ ๋ฐ ์ „์ด์  ์œ„ํ—˜ ๊ฐ€์‹œ์„ฑ

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

Smart TS XL์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๊ฐ€์‹œ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

  • Swift ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ๊ณ„์ธต ๊ตฌ์กฐ ์ „๋ฐ˜์— ๊ฑธ์นœ ์ „์ด์  ์ข…์†์„ฑ ๋งคํ•‘
  • ์ข…์†์„ฑ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ์‹คํ–‰ ๋นˆ๋„ ๋ฐ ๋Ÿฐํƒ€์ž„ ์ค‘์š”๋„ ๊ฐ„์˜ ์ƒ๊ด€๊ด€๊ณ„
  • ์ทจ์•ฝํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๊ฑฐ๋‚˜ ๊ต์ฒด๋  ๋•Œ์˜ ๊ตฌ์กฐ์  ์˜ํ–ฅ ๋ถ„์„
  • ์ €์žฅ์†Œ ์ „๋ฐ˜์— ๊ฑธ์นœ ๊ณต์œ  ์ข…์†์„ฑ ๋…ธ์ถœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์œ„ํ—˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง

์ด ๋ชจ๋ธ์„ ํ†ตํ•ด ๊ฑฐ๋ฒ„๋„Œ์Šค ํŒ€์€ ์ด๋ก ์  ๋…ธ์ถœ๊ณผ ๊ตฌ์กฐ์ ์œผ๋กœ ๋‚ด์žฌ๋œ ์˜์กด์„ฑ ์œ„ํ—˜์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„๊ตฌ ๊ฐ„ ์ƒ๊ด€๊ด€๊ณ„ ๋ฐ ์‹ ํ˜ธ ๊ฐ์†Œ

๊ธฐ์—…๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹จ์ผ ๋ถ„์„ ๋ฉ”์ปค๋‹ˆ์ฆ˜์—๋งŒ ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Swift ์ฝ”๋“œ๋ฒ ์ด์Šค๋Š” ๋ณดํ†ต ๋ฆฐํ„ฐ, SAST ๋„๊ตฌ, SCA ํ”Œ๋žซํผ, ํŒŒ์ดํ”„๋ผ์ธ ์ˆ˜์ค€์˜ ์ •์ฑ… ์—”์ง„ ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋„๊ตฌ๋Š” ์„œ๋กœ ์ค‘๋ณต๋˜๊ฑฐ๋‚˜ ๋ชจ์ˆœ๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๋Š” ๋…๋ฆฝ์ ์ธ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Smart TS XL์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์‹ ํ˜ธ ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

  • ์ •์  ๋ถ„์„ ๋ฐ ๊ตฌ์„ฑ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์ข…ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌ์กฐ์ ์œผ๋กœ ๊ด€๋ จ๋œ ๋ฌธ์ œ์˜ ์ค‘๋ณต ์ œ๊ฑฐ
  • ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„ ๋‚ด์—์„œ ๊ทœ์น™ ์œ„๋ฐ˜ ์‚ฌํ•ญ์„ ๋งฅ๋ฝํ™”ํ•˜๊ธฐ
  • ๊ฐœ๋ณ„์ ์ธ ์‹ฌ๊ฐ๋„๋ณด๋‹ค๋Š” ์—ฌ๋Ÿฌ ๋„๊ตฌ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ƒํ˜ธ ์ƒ๊ด€ ๋ถ„์„ ๊ธฐ๋Šฅ์€ ๊ณผ๋„ํ•œ ๊ฒฝ๊ณ ๋กœ ์ธํ•ด ๋ฒ• ์ง‘ํ–‰ ๊ทœ์œจ์ด ์ €ํ•˜๋˜๋Š” CI ํ™˜๊ฒฝ์—์„œ ์‹ ํ˜ธ ๋Œ€ ์žก์Œ๋น„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

๊ตฌ๋ฌธ ์ˆ˜์ค€ ๊ฒ€์‚ฌ๋ฅผ ๋„˜์–ด์„  ๋™์ž‘ ๊ฐ€์‹œ์„ฑ ํ™•๋ณด

Swift์˜ ํƒ€์ž… ์•ˆ์ •์„ฑ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์€ ํŠน์ • ๊ฒฐํ•จ ์œ ํ˜•์„ ์ค„์—ฌ์ฃผ์ง€๋งŒ, ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋…ผ๋ฆฌ ๊ตฌ์กฐ๋‚˜ ์ž˜๋ชป ๊ตฌ์„ฑ๋œ ํ†ตํ•ฉ์„ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜์ง€๋Š” ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ •์  ๊ทœ์น™ ์—”์ง„์€ ์ฃผ๋กœ ๊ตฌ๋ฌธ ๋ฐ ์˜๋ฏธ ๋ถ„์„ ๊ณ„์ธต์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Smart TS XL์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ํ–‰๋™ ๊ฐ€์‹œ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ๋Šฅ ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋‚˜๋“œ๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋งคํ•‘
  • ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ์ง€์  ์‹๋ณ„
  • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ์ „ํŒŒ ์‚ฌ์Šฌ ๋ถ„์„
  • ๋ฏผ๊ฐํ•œ ์—ฐ์‚ฐ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์กฐ๊ฑด ๋ถ„๊ธฐ์˜ ์‹œ๊ฐํ™”

์ด๋Ÿฌํ•œ ํ–‰๋™์  ๊ด€์ ์€ ์ •์ ์ธ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์šด์˜ ์œ„ํ—˜ ๋ชจ๋ธ๊ณผ ์—ฐ๊ณ„ํ•˜๊ณ  ์ง€๋ฐฐ๊ตฌ์กฐ ๊ฐ๋…์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์œ„ํ—˜ ์šฐ์„ ์ˆœ์œ„ ์„ค์ • ๋ฐ ๊ฑฐ๋ฒ„๋„Œ์Šค ์ •๋ ฌ

์ •์  ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ์‹ฌ๊ฐ๋„ ์ˆ˜์ค€ ๋˜๋Š” ๊ทœ์น™ ๋ฒ”์ฃผ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ง€์ •๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Swift ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ์•„ํ‚คํ…์ฒ˜ ๊ฐ€์ค‘์น˜๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ์‹ฌ๊ฐ๋„๋งŒ์œผ๋กœ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณ„ํš์„ ์™œ๊ณกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋นˆ๋ฒˆํ•˜๊ฒŒ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ ๊ฒฝ๋กœ์—์„œ ๋ฐœ๊ฒฌ๋˜๋Š” ์‹ฌ๊ฐ๋„๊ฐ€ ๋‚ฎ์€ ๋ฌธ์ œ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ชจ๋“ˆ์—์„œ ๋ฐœ๊ฒฌ๋˜๋Š” ์‹ฌ๊ฐ๋„๊ฐ€ ๋†’์€ ๋ฌธ์ œ๋ณด๋‹ค ์šด์˜์ƒ ๋” ํฐ ์œ„ํ—˜์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Smart TS XL์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ฑฐ๋ฒ„๋„Œ์Šค ์ •๋ ฌ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • ์‹คํ–‰ ๋นˆ๋„ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ์ค‘์‹ฌ์„ฑ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ์— ๊ฐ€์ค‘์น˜ ๋ถ€์—ฌ
  • ๊ตฌ์กฐ์  ์œ„ํ—˜ ์ง€ํ‘œ๋ฅผ ๊ฐœ์„  ๋Œ€์‹œ๋ณด๋“œ์— ํ†ตํ•ฉํ•˜๊ธฐ
  • ํ†ตํ•ฉ ์œ„ํ—˜ ๋งคํ•‘์„ ํ†ตํ•ด ์ด์‚ฌํšŒ ๋ณด๊ณ  ์ง€์›
  • CI ํŒŒ์ดํ”„๋ผ์ธ ๋‚ด์—์„œ ์ •์ฑ… ๊ธฐ๋ฐ˜ ๊ฒŒ์ดํŒ… ๊ฒฐ์ • ํ™œ์„ฑํ™”

Smart TS XL์€ ๊ตฌ์กฐ์ , ํ–‰๋™์ , ๊ทธ๋ฆฌ๊ณ  ๋„๊ตฌ ๊ฐ„ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ Swift ์ •์  ์ฝ”๋“œ ๋ถ„์„์˜ ๋ถ„์„ ๊ธฐ๋ฐ˜์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ํ’ˆ์งˆ ๋ฐ ๋ณด์•ˆ ์Šค์บ๋‹ ๋ฐฉ์‹์„ ๊ทœ์น™ ์—ด๊ฑฐ์—์„œ ๊ธฐ์—… ์•„ํ‚คํ…์ฒ˜ ๋‚ด์˜ ๋งฅ๋ฝ์— ๋งž๋Š” ์œ„ํ—˜ ์ธํ…”๋ฆฌ์ „์Šค๋กœ ์žฌ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Swift ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•œ ๊ธฐ์—… CI ๊ฒŒ์ดํŠธํ‚คํ•‘ ๋ฐ ํ’ˆ์งˆ ๊ด€๋ฆฌ

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

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

์ง€์†์  ํ†ตํ•ฉ ํŒŒ์ดํ”„๋ผ์ธ์€ ๊ทœ์น™ ์ค€์ˆ˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค. Swift ์ €์žฅ์†Œ๋Š” ์ž๋™ํ™”๋œ ์›Œํฌํ”Œ๋กœ๋ฅผ ํ†ตํ•ด ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ ๋ฐ ์„œ๋ช…๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ, ๊ทœ์น™ ์œ„๋ฐ˜์€ ๋ฆด๋ฆฌ์Šค ์ ๊ฒฉ์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์ผ๊ด€์„ฑ ์—†๋Š” ์ •์ฑ… ๊ตฌ์„ฑ, ๊ณผ๋„ํ•œ ์˜คํƒ ๋˜๋Š” ์ทจ์•ฝํ•œ ์šฐ์„ ์ˆœ์œ„ ๋ชจ๋ธ์€ CI ๊ฒŒ์ดํŠธํ‚คํ•‘์— ๋Œ€ํ•œ ์‹ ๋ขฐ๋ฅผ ์•ฝํ™”์‹œํ‚ต๋‹ˆ๋‹ค. CI/CD ํŒŒ์ดํ”„๋ผ์ธ์— ์ •์  ๋ถ„์„์„ ํ†ตํ•ฉํ•˜๋ฉด์„œ ์–ป์€ ๊ตํ›ˆ์€ ๊ฒฐ์ •๋ก ์  ๊ทœ์น™ ์ค€์ˆ˜์™€ ๊ตฌ์กฐํ™”๋œ ์ˆ˜์ • ์›Œํฌํ”Œ๋กœ๊ฐ€ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋„์ž…์˜ ํ•ต์‹ฌ์ด๋ผ๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

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

๊ธฐ์—… CI ๋ฐ ๊ฑฐ๋ฒ„๋„Œ์Šค๋ฅผ ์œ„ํ•œ Swift ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ ๋น„๊ต

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

CI ํ™˜๊ฒฝ์—์„œ ๋ฐœ๊ฒฌ ์‚ฌํ•ญ์ด ์–ด๋–ป๊ฒŒ ์ƒ์„ฑ๋˜๊ณ , ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ๋ถ„์„๋˜๊ณ , ์ ์šฉ๋˜๋Š”์ง€๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„ํ‚คํ…์ฒ˜ ๋ชจ๋ธ, ๊ทœ์น™ ์‚ฌ์šฉ์ž ์ •์˜ ๊ธฐ๋Šฅ์˜ ๊นŠ์ด, ์ €์žฅ์†Œ ์ „๋ฐ˜์— ๊ฑธ์นœ ํ™•์žฅ์„ฑ, ํ‹ฐ์ผ“ํŒ… ๋ฐ ๋ณด๊ณ  ์‹œ์Šคํ…œ๊ณผ์˜ ํ†ตํ•ฉ์€ ๋ชจ๋‘ ์šด์˜ ๊ฐ€๋Šฅ์„ฑ์„ ๊ฒฐ์ •ํ•˜๋Š” ์ค‘์š”ํ•œ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ๋„๊ตฌ๋“ค์€ Swift ๊ธฐ๋ฐ˜์˜ ํ’ˆ์งˆ ๋ถ„์„ ๋„๊ตฌ๋ถ€ํ„ฐ ๊ทœ์ œ๋œ ๋ฐฐํฌ ํ™˜๊ฒฝ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๊ตญ์–ด ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋ณด์•ˆ ํ”Œ๋žซํผ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ์ŠคํŽ™ํŠธ๋Ÿผ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

ํŠน์ • ๊ธฐ์—… ๋ชฉํ‘œ์— ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐœ๋ฐœ์ž ์ˆ˜์ค€์˜ ๋ฆฐํŒ… ๋ฐ ์Šคํƒ€์ผ ๊ฐ•์ œ ์ ์šฉ
    SwiftLint, SwiftFormat
  • CI ํŒŒ์ดํ”„๋ผ์ธ์—์„œ์˜ ๋ณด์•ˆ ์ค‘์‹ฌ ์ •์  ๋ถ„์„
    Checkmarx, Fortify Static Code Analyzer, GitHub Advanced Security
  • ๋Œ€๊ทœ๋ชจ ํฌํŠธํด๋ฆฌ์˜ค ์ „๋ฐ˜์— ๊ฑธ์นœ ๋‹ค๊ตญ์–ด ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ฑฐ๋ฒ„๋„Œ์Šค
    ์†Œ๋‚˜ํ๋ธŒ, ์ปค๋ฒ„๋ฆฌํ‹ฐ
  • ๊ฐ„ํŽธํ•œ ๊ทœ์น™ ์‚ฌ์šฉ์ž ์ง€์ • ๋ฐ DevSecOps ํ†ตํ•ฉ
    ์…ˆ๊ทธ๋ ™
  • iOS ๊ธฐ๊ธฐ์— ์ดˆ์ ์„ ๋งž์ถ˜ ์ƒ์—…์šฉ ๋ณด์•ˆ ํ‰๊ฐ€ ๋ฐ ๊ทœ์ • ์ค€์ˆ˜ ์ง€ํ–ฅ
    NowSecure

์Šค์œ„ํ”„ํŠธ๋ฆฐํŠธ

๊ณต์‹ ์‚ฌ์ดํŠธ: https://github.com/realm/SwiftLint

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

๊ฑด์ถ• ๋ชจ๋ธ

SwiftLint๋Š” Xcode ๋นŒ๋“œ ๋‹จ๊ณ„, ๋ช…๋ น์ค„ ์‹คํ–‰ ๋ฐ CI ์‹คํ–‰๊ธฐ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž ์›Œํฌํ”Œ๋กœ์— ์ง์ ‘ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๊ฐ€๋ฒผ์›Œ ์™ธ๋ถ€ ๋ณด๊ณ  ์‹œ์Šคํ…œ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ ์ค‘์•™ ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์€ ๋‹ค์Œ์„ ํ†ตํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. .swiftlint.yml ์ €์žฅ์†Œ ๋‚ด์— ์ €์žฅ๋œ ํŒŒ์ผ์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ณ„ ๋˜๋Š” ์กฐ์ง ์ „์ฒด์˜ ๊ทœ์น™ ํ‘œ์ค€ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๊ทœ์น™ ์—”์ง„์€ ๋‹ค์Œ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ตฌ๋ฌธ ๊ธฐ๋ฐ˜ ๊ทœ์น™ ํ‰๊ฐ€
  • ์ •๊ทœ ํ‘œํ˜„์‹ ๊ธฐ๋ฐ˜ ์‚ฌ์šฉ์ž ์ง€์ • ๊ทœ์น™ ์ •์˜
  • ์„ ํƒ๋œ ์œ„๋ฐ˜ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ž๋™ ์ˆ˜์ •
  • ์ค„ ๊ธธ์ด ๋ฐ ํŒŒ์ผ ํฌ๊ธฐ์™€ ๊ฐ™์€ ์ธก์ • ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ์ž„๊ณ„๊ฐ’ ๊ตฌ์„ฑ

SwiftLint๋Š” ์ž์ฒด ์ทจ์•ฝ์  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉฐ CVE ๋ถ„๋ฅ˜๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. SwiftLint์˜ ๋ฒ”์œ„๋Š” ์†Œ์Šค ์ฝ”๋“œ ๊ฒ€์‚ฌ ๋ฐ ์Šคํƒ€์ผ ๋˜๋Š” ๊ตฌ์กฐ์  ๊ทœ์น™ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๊ตญํ•œ๋ฉ๋‹ˆ๋‹ค.

CI์—์„œ์˜ ์‹คํ–‰ ๋™์ž‘

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

ํ•˜์ง€๋งŒ ๊ทœ์ • ์ค€์ˆ˜์˜ ํšจ๊ณผ๋Š” ๊ทœ์น™ ๊ตฌ์„ฑ์˜ ์™„์„ฑ๋„์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ ์ค‘ํ•˜๊ฒŒ ๊ตฌ์„ฑ๋œ ๊ทœ์น™ ์„ธํŠธ๊ฐ€ ์—†๋‹ค๋ฉด ์กฐ์ง์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ณผ๋„ํ•œ ์Šคํƒ€์ผ์  ์†Œ์Œ
  • ์ผ๊ด€์„ฑ ์—†๋Š” ๊ทœ์น™ ์–ต์ œ ๊ด€ํ–‰
  • ์ €์žฅ์†Œ ๊ฐ„์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๊ตฌ์„ฑ

SwiftLint๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ์œ„ํ—˜๋„๋‚˜ ์•„ํ‚คํ…์ฒ˜ ์˜ํ–ฅ์— ๋”ฐ๋ผ ๋ฐœ๊ฒฌ ์‚ฌํ•ญ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์œ„๋ฐ˜ ์‚ฌํ•ญ์€ ๊ตฌ์„ฑ์— ์ •์˜๋œ ์‹ฌ๊ฐ๋„ ์ˆ˜์ค€์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ์ด๋Ÿฌํ•œ ์‹ฌ๊ฐ๋„ ์ˆ˜์ค€์€ ์ •์ฑ… ๋ ˆ์ด์–ด๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š๋Š” ํ•œ ๋Œ€๋ถ€๋ถ„ ํ˜•์‹์ ์ธ ์ˆ˜์ค€์— ๊ทธ์นฉ๋‹ˆ๋‹ค.

๊ธฐ์—… ๊ทœ๋ชจ ํ™•์žฅ์˜ ํ˜„์‹ค

๊ธฐ์—… ๊ทœ๋ชจ์—์„œ SwiftLint๋Š” ์ฃผ์š” ๋ณด์•ˆ ์ œ์–ด๋ณด๋‹ค๋Š” ๊ธฐ๋ณธ ์œ„์ƒ ๊ด€๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ํ™œ์šฉ๋  ๋•Œ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค. SwiftLint๋Š” ๊ณต์œ  ํ…œํ”Œ๋ฆฟ์ด๋‚˜ ๋‚ด๋ถ€ ํ”Œ๋žซํผ ์—”์ง€๋‹ˆ์–ด๋ง ๋ฐฉ์‹์„ ํ†ตํ•ด ๊ตฌ์„ฑ ํ‘œ์ค€์ด ๊ด€๋ฆฌ๋  ๋•Œ์—๋งŒ ์ค‘์•™ ์ง‘์ค‘์‹ ๊ฑฐ๋ฒ„๋„Œ์Šค๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ตœ์†Œํ•œ์˜ ์ธํ”„๋ผ ๊ตฌ์ถ• ๋น„์šฉ
  • Swift ํŒ€์„ ์œ„ํ•œ ๋น ๋ฅธ ์˜จ๋ณด๋”ฉ
  • ๊ฐ•๋ ฅํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›๊ณผ ๊ทœ์น™ ํ™•์žฅ์„ฑ
  • CI์—์„œ์˜ ๊ฒฐ์ •๋ก ์  ์„ฑ๋Šฅ

๋Œ€๊ทœ๋ชจ ํฌํŠธํด๋ฆฌ์˜ค์—์„œ๋Š” ํ•œ๊ณ„์ ์ด ๋“œ๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค.

  • ํŒŒ์ผ ๊ฐ„ ์ข…์†์„ฑ ๋ชจ๋ธ๋ง ์—†์Œ
  • ์ „์ด์  ์ข…์†์„ฑ ์œ„ํ—˜ ๊ฐ€์‹œ์„ฑ ์—†์Œ
  • ๊ธฐ๋ณธ ์ทจ์•ฝ์„ฑ ๋ถ„๋ฅ˜ ์ฒด๊ณ„ ์ •๋ ฌ ์—†์Œ
  • ์™ธ๋ถ€ ๋„๊ตฌ ์—†์ด ๋ณด๊ณ ์„œ๋ฅผ ์ง‘๊ณ„ํ•˜๋Š” ๋ฐ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทœ์ œ ์‚ฐ์—…์—์„œ SwiftLint๋งŒ์œผ๋กœ๋Š” ๋ณด์•ˆ ๊ทœ์ • ์ค€์ˆ˜ ๊ฒ€์ฆ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฒด๊ณ„์ ์ธ ๊ด€๋ฆฌ์— ํ•„์š”ํ•œ ๊ฐ์‚ฌ ๋ณด๊ณ  ๋ฐ ์ทจ์•ฝ์  ์ ์ˆ˜ ๋งค๊ธฐ๊ธฐ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ฐ€๊ฒฉ ํŠน์ง•

SwiftLint๋Š” ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์—… ๋น„์šฉ์€ ๊ตฌ์„ฑ ๊ด€๋ฆฌ, ์ •์ฑ… ๊ด€๋ฆฌ, CI ํ†ตํ•ฉ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ค‘์•™ ์ง‘์ค‘์‹ ๋Œ€์‹œ๋ณด๋“œ ๋˜๋Š” ๊ทœ์ • ์ค€์ˆ˜ ๋ณด๊ณ ๊ฐ€ ํ•„์š”ํ•œ ์กฐ์ง์€ ํƒ€์‚ฌ ์ง‘๊ณ„ ๋„๊ตฌ๋ฅผ ํ†ตํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์กฐ์  ํ•œ๊ณ„

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

๊ธฐ์—…์šฉ Swift ์ƒํƒœ๊ณ„์—์„œ SwiftLint๋Š” ๊ธฐ๋ณธ์ ์ธ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๊ณ„์ธต ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๊ด€์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค์ง€๋งŒ, ํฌ๊ด„์ ์ธ ๊ฑฐ๋ฒ„๋„Œ์Šค๋ฅผ ๋‹ฌ์„ฑํ•˜๋ ค๋ฉด ๋”์šฑ ์‹ฌ์ธต์ ์ธ ์ •์  ๋ณด์•ˆ ํ…Œ์ŠคํŠธ ๋ฐ ์ข…์†์„ฑ ๋ถ„์„ ์†”๋ฃจ์…˜์œผ๋กœ ๋ณด์™„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์†Œ๋‚˜ํ๋ธŒ

๊ณต์‹ ์‚ฌ์ดํŠธ: https://www.sonarsource.com/products/sonarqube/

SonarQube๋Š” ๊ธฐ์—… ์†Œํ”„ํŠธ์›จ์–ด ํฌํŠธํด๋ฆฌ์˜ค ์ „๋ฐ˜์— ๊ฑธ์ณ ์ค‘์•™ ์ง‘์ค‘์‹ ํ’ˆ์งˆ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋œ ๋‹ค๊ตญ์–ด ์ •์  ์ฝ”๋“œ ๋ถ„์„ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. Swift ๊ธฐ๋ฐ˜ ๋ฆฐํ„ฐ์™€ ๋‹ฌ๋ฆฌ SonarQube๋Š” ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ๋ถ„์„ ๋ฐ ๋ณด๊ณ  ์‹œ์Šคํ…œ์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ, ์ €์žฅ์†Œ, ์–ธ์–ด ๋ฐ ํŒ€ ์ „๋ฐ˜์— ๊ฑธ์ณ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค. Swift ์ง€์›์€ ์ฝ”๋“œ ํ’ˆ์งˆ ๊ทœ์น™, ๋ณด์•ˆ ์ทจ์•ฝ์  ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ์„ฑ ์ง€ํ‘œ๋ฅผ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์ „์šฉ ๋ถ„์„๊ธฐ๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๊ฑด์ถ• ๋ชจ๋ธ

SonarQube๋Š” ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. CI ์‹คํ–‰ ์ค‘์— ์–ธ์–ด๋ณ„ ์Šค์บ๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ณ , ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์ค‘์•™ ์ง‘์ค‘์‹ SonarQube ์„œ๋ฒ„์— ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ๊ณผ๊ฑฐ ์ถ”์„ธ, ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ, ์ •์ฑ… ๊ตฌ์„ฑ ๋ฐ ํ”„๋กœ์ ํŠธ ๊ฐ„ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Swift ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ SonarQube๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ์ •์  ๊ทœ์น™ ๊ธฐ๋ฐ˜ ์ฝ”๋“œ ๋ถ„์„
  • OWASP ๋ฒ”์ฃผ์— ๋งž์ถ˜ ๋ณด์•ˆ ๊ทœ์น™ ๊ฒ€์‚ฌ
  • ์ฝ”๋“œ ์Šค๋ฉœ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํƒ์ง€
  • ๋ณต์žก์„ฑ ๋ฐ ์ค‘๋ณต ์ธก์ • ์ง€ํ‘œ
  • ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ ๊ฐ•์ œ ์‹คํ–‰ ๋กœ์ง

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์—๋””์…˜์€ ํฌํŠธํด๋ฆฌ์˜ค ์ˆ˜์ค€์˜ ๊ฑฐ๋ฒ„๋„Œ์Šค, ๋‹ค์ค‘ ์ง€์  ๋ถ„์„, ๊ทธ๋ฆฌ๊ณ  ID ๋ฐ ์•ก์„ธ์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ๊ณผ์˜ ํ†ตํ•ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋ฐœ๊ฒฌ ์‚ฌํ•ญ์€ ๋ฒ„๊ทธ, ์ทจ์•ฝ์ , ๋ณด์•ˆ ํ•ซ์ŠคํŒŸ, ์œ ์ง€ ๊ด€๋ฆฌ ๋ฌธ์ œ๋กœ ๋ถ„๋ฅ˜๋˜์–ด ์ฒด๊ณ„์ ์ธ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

SonarQube๋Š” ์™ธ๋ถ€ ์ข…์†์„ฑ ๋ถ„์„ ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ ๋ฐœ๊ฒฌ ์‚ฌํ•ญ์„ CVE ์‹๋ณ„์ž์— ์ง์ ‘ ๋งคํ•‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. SonarQube์˜ ๋ณด์•ˆ ๊ทœ์น™์€ ํƒ€์‚ฌ ์ทจ์•ฝ์  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณด๋‹ค๋Š” ์•ˆ์ „ํ•œ ์ฝ”๋”ฉ ํŒจํ„ด์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

CI์—์„œ์˜ ์‹คํ–‰ ๋™์ž‘

CI ํŒŒ์ดํ”„๋ผ์ธ์—์„œ SonarQube ๋ถ„์„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์Šค์บ๋„ˆ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ๋‹จ๊ณ„ ์ค‘์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ์ค‘์•™ ์„œ๋ฒ„๋กœ ์ „์†ก๋˜๋ฉฐ, ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ๋ฅผ ํ†ตํ•ด ํ•ฉ๊ฒฉ ๋˜๋Š” ๋ถˆํ•ฉ๊ฒฉ ์—ฌ๋ถ€๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชจ๋ธ์€ ๋ถ„์„ ์‹คํ–‰๊ณผ ๊ฑฐ๋ฒ„๋„Œ์Šค ํ‰๊ฐ€๋ฅผ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ํŠน์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํ’€ ๋ฆฌํ€˜์ŠคํŠธ์— ๋Œ€ํ•œ ์ฆ๋ถ„ ๋ถ„์„ ์ง€์›
  • ์ง€์ ๋ณ„ ๋ณด๊ณ 
  • ์ •์ฑ… ๊ธฐ๋ฐ˜ ๋ณ‘ํ•ฉ ์ œํ•œ
  • ์ฃผ์š” CI ํ”Œ๋žซํผ๊ณผ์˜ ํ†ตํ•ฉ

๋Œ€๊ทœ๋ชจ Swift ์ €์žฅ์†Œ์—์„œ๋Š” ์„ฑ๋Šฅ์ด ๋น„๊ต์  ์–‘ํ˜ธํ•˜๊ฒŒ ํ™•์žฅ๋˜์ง€๋งŒ, ๋‹ค๊ตญ์–ด ๋ชจ๋…ธ๋ ˆํฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” ํŠœ๋‹์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘์•™ ์ง‘์ค‘์‹ ์„œ๋ฒ„๋Š” ๋™์‹œ ๋ถ„์„ ๋ถ€ํ•˜๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ ์ ˆํ•˜๊ฒŒ ํ”„๋กœ๋น„์ €๋‹๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์—… ๊ทœ๋ชจ ํ™•์žฅ์˜ ํ˜„์‹ค

SonarQube์˜ ์ฃผ์š” ๊ธฐ์—… ๊ฐ€์น˜๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์— ์žˆ์Šต๋‹ˆ๋‹ค. Swift ์‹œ์Šคํ…œ๊ณผ ๋น„ Swift ์‹œ์Šคํ…œ ์ „๋ฐ˜์— ๊ฑธ์ณ ํ†ตํ•ฉ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ด๊ธฐ์ข… ํ™˜๊ฒฝ ์ „๋ฐ˜์— ๊ฑธ์ณ ์ผ๊ด€๋œ ๊ฑฐ๋ฒ„๋„Œ์Šค ํ‘œ์ค€์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํฌํŠธํด๋ฆฌ์˜ค ์ „๋ฐ˜์— ๊ฑธ์นœ ํ’ˆ์งˆ ๊ฐ€์‹œ์„ฑ
  • ์—ญ์‚ฌ์  ์ถ”์„ธ ์ถ”์ 
  • ํ’ˆ์งˆ ๊ด€๋ฆฌ ์ž๋™ํ™”
  • ๊ธฐ์—… ์ธ์ฆ ๋ฐ ํ‹ฐ์ผ“ํŒ… ์‹œ์Šคํ…œ๊ณผ์˜ ํ†ตํ•ฉ

ํ•˜์ง€๋งŒ ๊ตฌ์กฐ์  ์ œ์•ฝ ์กฐ๊ฑด์€ ๋ฐ˜๋“œ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ œํ•œ์ ์ธ ์‹ฌ์ธต ์ ˆ์ฐจ ๊ฐ„ ์ทจ์•ฝ์„ฑ ๋ชจ๋ธ๋ง
  • ๋„ค์ดํ‹ฐ๋ธŒ ์ „์ด ์ข…์†์„ฑ ์ทจ์•ฝ์  ์ถ”์  ๊ธฐ๋Šฅ ์—†์Œ
  • ๋ณด์•ˆ ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ํ–‰๋™ ์‹คํ–‰ ๋ชจ๋ธ๋ง๋ณด๋‹ค๋Š” ๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ทœ์น™ ์ง‘ํ•ฉ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.
  • ์กฐ์ง ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๊ตฌ์„ฑ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

Swift, Java, C#, ๊ธฐํƒ€ ์–ธ์–ด ์ „๋ฐ˜์— ๊ฑธ์ณ ์ผ๊ด€๋œ ๊ทœ์น™ ์ ์šฉ์„ ์›ํ•˜๋Š” ๊ธฐ์—…์—๊ฒŒ SonarQube๋Š” ์ผ๊ด€๋œ ๊ฑฐ๋ฒ„๋„Œ์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๊ธ‰ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ ๋˜๋Š” ์ข…์†์„ฑ ์ˆ˜์ค€์˜ ์ทจ์•ฝ์  ์ œ์–ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ „์šฉ SAST ๋˜๋Š” SCA ํ”Œ๋žซํผ์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ฐ€๊ฒฉ ํŠน์ง•

SonarQube ์ปค๋ฎค๋‹ˆํ‹ฐ ์—๋””์…˜์€ ๋ฌด๋ฃŒ์ด์ง€๋งŒ ๊ณ ๊ธ‰ ๋ณด์•ˆ ๊ธฐ๋Šฅ๊ณผ ๋ถ„๊ธฐ ๋ถ„์„ ๊ธฐ๋Šฅ์— ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž, ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋ฐ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์—๋””์…˜์€ ๋ถ„์„๋œ ์ฝ”๋“œ ๋ผ์ธ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋Š” ์ƒ์šฉ ๋ผ์ด์„ ์Šค๋ฅผ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์—๋””์…˜์€ ํฌํŠธํด๋ฆฌ์˜ค ๊ด€๋ฆฌ, ๊ณ ๊ธ‰ ๋ณด์•ˆ ๊ทœ์น™ ๋ฐ ๊ทœ์ œ ํ™˜๊ฒฝ์— ํ•„์š”ํ•œ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋น„์šฉ ๊ณ ๋ ค ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์„œ๋ฒ„ ์ธํ”„๋ผ
  • ๋ผ์ด์„ ์Šค ๋“ฑ๊ธ‰ ์„ ํƒ
  • ๊ทœ์น™ ๊ด€๋ฆฌ ๊ด€๋ จ ํ–‰์ • ๋ถ€๋‹ด
  • ํ’ˆ์งˆ ๊ด€๋ฆฌ ๊ฒŒ์ดํŠธ ๊ต์œก

๊ตฌ์กฐ์  ํ•œ๊ณ„

SonarQube์˜ ๊ทœ์น™ ์—”์ง„์€ ์™„์ „ํ•œ ๊ธฐํ˜ธ ์‹คํ–‰์ด๋‚˜ ๊ณ ๊ธ‰ ์˜ค์—ผ ์ถ”์ ๋ณด๋‹ค๋Š” ํŒจํ„ด ๊ธฐ๋ฐ˜ ํƒ์ง€์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ํŒจํ„ด์ด๋‚˜ ๋ณต์žกํ•œ ๋™์‹œ์„ฑ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” Swift ํ™˜๊ฒฝ์—์„œ๋Š” ๊ทœ์น™์˜ ์ •ํ™•๋„๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๊ธฐ์—… Swift ์ƒํƒœ๊ณ„ ๋‚ด์—์„œ SonarQube๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๊ณ„์ธต์œผ๋กœ์„œ ํšจ๊ณผ์ ์œผ๋กœ ๊ธฐ๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” CI ๊ฒŒ์ดํŠธ ์‹œํ–‰ ๋ฐ ์–ธ์–ด ๊ฐ„ ์ •์ฑ… ์ผ๊ด€์„ฑ์„ ๊ฐ•ํ™”ํ•˜์ง€๋งŒ, ์ทจ์•ฝ์  ๋ถ„์„์˜ ๊นŠ์ด์™€ ์ข…์†์„ฑ ์œ„ํ—˜ ๊ฐ€์‹œ์„ฑ์ด ์ „๋žต์  ์šฐ์„ ์ˆœ์œ„์ธ ๊ฒฝ์šฐ์—๋Š” ๋ณด๋‹ค ๊ด‘๋ฒ”์œ„ํ•œ ๋ณด์•ˆ ์•„ํ‚คํ…์ฒ˜์— ํ†ตํ•ฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Checkmarx ์ •์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ

๊ณต์‹ ์‚ฌ์ดํŠธ: https://checkmarx.com/product/static-application-security-testing/

Checkmarx SAST๋Š” Swift๋ฅผ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์‹๋ณ„ํ•˜๋„๋ก ์„ค๊ณ„๋œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์ •์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ๊ฐ€๋ฒผ์šด ๋ฆฐํŒ… ๋„๊ตฌ๋‚˜ ํ’ˆ์งˆ ์ค‘์‹ฌ ๋ถ„์„๊ธฐ์™€ ๋‹ฌ๋ฆฌ, Checkmarx๋Š” ์‹ฌ์ธต์ ์ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ฐ ์ œ์–ด ํ๋ฆ„ ๋ถ„์„์„ ํ†ตํ•ด ์•…์šฉ ๊ฐ€๋Šฅํ•œ ๋ณด์•ˆ ๊ฒฐํ•จ์„ ํƒ์ง€ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ์Šคํƒ€์ผ์ ์ธ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๋„๊ตฌ๋ผ๊ธฐ๋ณด๋‹ค๋Š” ๋ณด์•ˆ ๊ฑฐ๋ฒ„๋„Œ์Šค ์‹œ์Šคํ…œ์œผ๋กœ ์ž๋ฆฌ๋งค๊น€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฑด์ถ• ๋ชจ๋ธ

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

Swift ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๊ฒฝ์šฐ Checkmarx๋Š” ๋‹ค์Œ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • ์ฃผ์ž… ์ทจ์•ฝ์ ์— ๋Œ€ํ•œ ์˜ค์—ผ ๋ถ„์„
  • ์•ˆ์ „ํ•˜์ง€ ์•Š์€ API ์‚ฌ์šฉ ๊ฐ์ง€
  • ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๋น„๋ฐ€ ์‹๋ณ„
  • ์‚ฌ์šฉ์ž ์ง€์ • ๋ณด์•ˆ ์ฟผ๋ฆฌ ๊ตฌ์„ฑ
  • ์ทจ์•ฝ์  ๋ถ„๋ฅ˜ ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ํ†ตํ•ฉ

๋ฐœ๊ฒฌ๋œ ์ทจ์•ฝ์ ์€ OWASP ๋ฒ”์ฃผ ๋ฐ CWE ์‹๋ณ„์ž์™€ ๊ฐ™์€ ํ‘œ์ค€ํ™”๋œ ๋ถ„๋ฅ˜ ์ฒด๊ณ„์— ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค. Checkmarx๋Š” ์ž์ฒด ๊ฐœ๋ฐœ ์ฝ”๋“œ์— ๋Œ€ํ•œ CVE ์‹๋ณ„์ž๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ๋ฐœ๊ฒฌ๋œ ์ทจ์•ฝ์ ์„ ๊ทœ์ • ์ค€์ˆ˜ ๋ณด๊ณ  ๋ฐ ๊ฐ์‚ฌ ๋ฌธ์„œ ์ž‘์„ฑ์— ๋„์›€์ด ๋˜๋Š” ์ทจ์•ฝ์  ๋ถ„๋ฅ˜์™€ ์—ฐ๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

CI์—์„œ์˜ ์‹คํ–‰ ๋™์ž‘

Checkmarx๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ API ๊ธฐ๋ฐ˜ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ํ†ตํ•ด CI ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. ์Šค์บ”์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ „์ฒด ๊ธฐ์ค€์„  ๋ถ„์„
  • ์ฆ๋ถ„ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ์Šค์บ”
  • ์‹ฌ๊ฐ๋„ ์ž„๊ณ„๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ •์ฑ… ์ค‘์‹ฌ์˜ ๊ฒŒ์ดํŒ…
  • ๋ฆด๋ฆฌ์Šค ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ์œ„ํ•œ ์ข…ํ•ฉ ๊ฒ€์‚ฌ ์ผ์ • ์ˆ˜๋ฆฝ

์‹คํ–‰ ์‹œ๊ฐ„์€ ์ €์žฅ์†Œ ํฌ๊ธฐ์™€ ๋ถ„์„ ๊นŠ์ด์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์‹ฌ์ธต์ ์ธ ํ”„๋กœ์‹œ์ € ๊ฐ„ ์Šค์บ”์€ ํŠนํžˆ ๋น„๋™๊ธฐ ๋˜๋Š” ๋ชจ๋“ˆ์‹ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋งŽ์€ ๋Œ€๊ทœ๋ชจ Swift ํ”„๋กœ์ ํŠธ์—์„œ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์—…์—์„œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋น ๋ฅธ ์ฆ๋ถ„ ์Šค์บ”๊ณผ ์ „์ฒด ๋ณด์•ˆ ๊ฐ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์Šค์บ” ๊นŠ์ด์™€ CI ์‘๋‹ต์„ฑ ๊ฐ„์˜ ๊ท ํ˜•์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ๋Œ€์‹œ๋ณด๋“œ์— ํ†ตํ•ฉ๋˜์–ด ๋ฌธ์ œ ๋ถ„๋ฅ˜ ์›Œํฌํ”Œ๋กœ ๋ฐ ์ด์Šˆ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ๊ณผ์˜ ํ†ตํ•ฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์—… ๊ทœ๋ชจ ํ™•์žฅ์˜ ํ˜„์‹ค

Checkmarx๋Š” ๊ทœ์ œ ์‚ฐ์—… ๋ฐ ๊ณ ๋ณด์•ˆ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ญํ•  ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด, ๊ฐ์‚ฌ ์ถ”์ , ๊ฑฐ๋ฒ„๋„Œ์Šค ๋ณด๊ณ  ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ๊ทœ์ • ์ค€์ˆ˜๋ฅผ ์ค‘์‹œํ•˜๋Š” ๊ธฐ์—…์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์‹ฌ์ธต์ ์ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ฐ ์˜ค์—ผ ์ถ”์  ๊ธฐ๋Šฅ
  • ๊ด‘๋ฒ”์œ„ํ•œ ๋ณด์•ˆ ๊ทœ์น™ ์ ์šฉ ๋ฒ”์œ„
  • ์ค‘์•™ ์ง‘์ค‘์‹ ์ •์ฑ… ๊ด€๋ฆฌ
  • DevSecOps ํˆด์ฒด์ธ๊ณผ์˜ ํ†ตํ•ฉ

ํ•˜์ง€๋งŒ ๊ทœ๋ชจ ํ™•์žฅ ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์˜จํ”„๋ ˆ๋ฏธ์Šค ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ธํ”„๋ผ ์š”๊ตฌ ์‚ฌํ•ญ
  • ๋ผ์ด์„ ์Šค ๋น„์šฉ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํฌ๊ธฐ ๋˜๋Š” ์Šค์บ” ๋ณผ๋ฅจ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.
  • ๊ทœ์น™ ์กฐ์ • ๋ฐ ์˜คํƒ ๊ด€๋ฆฌ ๊ด€๋ จ ์šด์˜ ์˜ค๋ฒ„ํ—ค๋“œ
  • ๋Œ€๊ทœ๋ชจ Swift ๋ชจ๋…ธ๋ ˆํฌ์— ๋Œ€ํ•œ CI ์„ฑ๋Šฅ์— ๋ฏธ์น  ์ˆ˜ ์žˆ๋Š” ์ž ์žฌ์  ์˜ํ–ฅ

์˜คํƒ ๊ด€๋ฆฌ์—๋Š” ์ „๋‹ด ๋ณด์•ˆ ์—”์ง€๋‹ˆ์–ด๋ง ๊ฐ๋…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฒด๊ณ„์ ์ธ ๋ถ„๋ฅ˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†์œผ๋ฉด ํŒ€์€ ๊ฒฝ๊ณ  ํ”ผ๋กœ๊ฐ์„ ๋А๋‚„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€๊ฒฉ ํŠน์ง•

Checkmarx๋Š” ๊ธฐ์—…์šฉ ๋ผ์ด์„ ์Šค ๋ชจ๋ธ์„ ์ œ๊ณตํ•˜๋Š” ์ƒ์šฉ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. ๊ฐ€๊ฒฉ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜, ์ฝ”๋“œ ๋ผ์ธ ์ˆ˜ ๋˜๋Š” ๊ฒ€์‚ฌ ๋นˆ๋„์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œ ํ˜ธ์ŠคํŒ… ์˜ต์…˜์„ ์„ ํƒํ•˜๋ฉด ์ธํ”„๋ผ ๋ถ€๋‹ด์„ ์ค„์ด๋ฉด์„œ๋„ ๊ตฌ๋… ๊ธฐ๋ฐ˜ ๋น„์šฉ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์—…์€ ๋‹ค์Œ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์ฑ…์ž„์„ ์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • ํ”Œ๋žซํผ ๋ผ์ด์„ผ์‹ฑ
  • ์ „๋‹ด ๋ณด์•ˆ ๋ถ„์„๊ฐ€ ๋ฆฌ์†Œ์Šค
  • CI ํ†ตํ•ฉ ์—”์ง€๋‹ˆ์–ด๋ง
  • ์ง€์†์ ์ธ ๊ทœ์น™ ์กฐ์ • ๋ฐ ๊ฑฐ๋ฒ„๋„Œ์Šค ์œ ์ง€ ๊ด€๋ฆฌ

๊ตฌ์กฐ์  ํ•œ๊ณ„

Checkmarx๋Š” ์ •์  ์†Œ์Šค ์ˆ˜์ค€ ๋ณด์•ˆ ๋ถ„์„์—๋งŒ ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค. ๋ณด์™„ ๋ชจ๋“ˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ๋ถ„์„ ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ข…์†์„ฑ ์œ„ํ—˜ ๊ฐ€์‹œ์„ฑ์„ ํ™•๋ณดํ•˜๋ ค๋ฉด ์™ธ๋ถ€ SCA ์ œํ’ˆ๊ณผ์˜ ํ†ตํ•ฉ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Swift ์ƒํƒœ๊ณ„์—์„œ Checkmarx๋Š” ์ฒด๊ณ„์ ์ธ DevSecOps ์ •์ฑ…์„ ์‹œํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ๋ณด์•ˆ ์Šค์บ” ์—”์ง„ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. Checkmarx๋Š” ๊ฐ•๋ ฅํ•œ ์ทจ์•ฝ์  ํƒ์ง€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ํฌ๊ด„์ ์ธ ๊ฑฐ๋ฒ„๋„Œ์Šค๋ฅผ ๋‹ฌ์„ฑํ•˜๋ ค๋ฉด ๋” ๊ด‘๋ฒ”์œ„ํ•œ ํ’ˆ์งˆ ์ง€ํ‘œ ๋ฐ ์ข…์†์„ฑ ๊ด€๋ฆฌ ํ”Œ๋žซํผ๊ณผ ํ†ตํ•ฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Fortify ์ •์  ์ฝ”๋“œ ๋ถ„์„๊ธฐ

๊ณต์‹ ์‚ฌ์ดํŠธ: https://www.microfocus.com/en-us/cyberres/application-security/static-code-analyzer

Fortify Static Code Analyzer๋Š” ๋Œ€๊ทœ๋ชจ์˜ ์ด๊ธฐ์ข… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํฌํŠธํด๋ฆฌ์˜ค ์ „๋ฐ˜์— ๊ฑธ์ณ ์‹ฌ์ธต์ ์ธ ์ทจ์•ฝ์  ํƒ์ง€๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ SAST ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. Swift๋ฅผ ๋น„๋กฏํ•œ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•˜๊ฑฐ๋‚˜ ๊ทœ์ • ์ค€์ˆ˜๋ฅผ ์ค‘์‹œํ•˜๋Š” ์กฐ์ง์— ์ฃผ๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. Fortify๋Š” ์ •๋ฐ€ํ•œ ์ทจ์•ฝ์  ๋ชจ๋ธ๋ง, ๊ฐ์‚ฌ ์ถ”์ ์„ฑ, ๊ทธ๋ฆฌ๊ณ  ๊ณต์‹์ ์ธ ๊ฑฐ๋ฒ„๋„Œ์Šค ํ”„๋กœ์„ธ์Šค์™€์˜ ํ†ตํ•ฉ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.

๊ฑด์ถ• ๋ชจ๋ธ

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

ํ•ด๋‹น ํ”Œ๋žซํผ์€ ์ค‘์•™ ์ง‘์ค‘์‹ ๋Œ€์‹œ๋ณด๋“œ, ์—ญํ•  ๊ธฐ๋ฐ˜ ์•ก์„ธ์Šค ์ œ์–ด ๋ฐ ์ทจ์•ฝ์  ์ˆ˜๋ช… ์ฃผ๊ธฐ ๊ด€๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” Fortify Software Security Center์™€ ํ†ตํ•ฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

Swift ํ™˜๊ฒฝ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ ˆ์ฐจ ๊ฐ„ ์˜ค์—ผ ๋ถ„์„
  • OWASP ๋ฐ CWE์— ๋ถ€ํ•ฉํ•˜๋Š” ์•ˆ์ „ํ•œ ์ฝ”๋”ฉ ๊ทœ์น™ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • ์กฐ์ง ์ •์ฑ…์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ๊ทœ์น™ ์ž‘์„ฑ
  • ๊ฐ์‚ฌ ๋ณด๊ณ ๋ฅผ ์œ„ํ•œ ๊ตฌ์กฐํ™”๋œ ์ทจ์•ฝ์  ๋ถ„๋ฅ˜

Fortify๋Š” ์ž์ฒด Swift ์ฝ”๋“œ์— CVE ์‹๋ณ„์ž๋ฅผ ํ• ๋‹นํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ๊ทœ์ œ ๋ฌธ์„œ ์ž‘์„ฑ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ํ‘œ์ค€ํ™”๋œ ๋ถ„๋ฅ˜ ์ฒด๊ณ„์— ๋งž์ถฐ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

CI์—์„œ์˜ ์‹คํ–‰ ๋™์ž‘

Fortify๋Š” ๋ช…๋ น์ค„ ๋„๊ตฌ์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด CI ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. ์กฐ์ง์—์„œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ๋น ๋ฅธ ์Šค์บ”
  • ์ถœ์‹œ ํ›„๋ณด ํ‰๊ฐ€๋ฅผ ์œ„ํ•œ ์ „์ฒด ์Šค์บ”
  • ์‹ฌ๊ฐ๋„๊ฐ€ ๋†’์€ ๋ฐœ๊ฒฌ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ •์ฑ… ๊ธฐ๋ฐ˜ ๊ฒŒ์ดํŒ…
  • ๊ธฐ์—… ์ „์ฒด ์žฌ๋ถ„์„ ์ฃผ๊ธฐ ๊ณ„ํš

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

๊ฒ€์‚ฌ ๊ฒฐ๊ณผ๋Š” ์ค‘์•™ ๊ด€๋ฆฌ ์ฝ˜์†”์— ์—…๋กœ๋“œ๋˜๋ฉฐ, ๋ณด์•ˆ ํŒ€์€ ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ฌธ์ œ๋ฅผ ๋ถ„๋ฅ˜ํ•˜๊ณ  ํ•ด๊ฒฐ ์กฐ์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์—… ๊ทœ๋ชจ ํ™•์žฅ์˜ ํ˜„์‹ค

Fortify๋Š” ๋Œ€๊ทœ๋ชจ ๊ธฐ์—… ๊ฑฐ๋ฒ„๋„Œ์Šค ๋ฐ ์—„๊ฒฉํ•œ ๊ทœ์ • ์ค€์ˆ˜ ํ™˜๊ฒฝ์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์กฐํ™”๋œ ๊ฐ์‚ฌ ์ถ”์ , ์ทจ์•ฝ์  ๊ฒฝ๊ณผ ์‹œ๊ฐ„ ์ง€ํ‘œ ๋ฐ ์—ญํ•  ๊ธฐ๋ฐ˜ ๊ฒ€ํ†  ์›Œํฌํ”Œ๋กœ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์„ฑ์ˆ™ํ•œ ์ทจ์•ฝ์  ๋ชจ๋ธ๋ง ์—”์ง„
  • ์ƒ์„ธํ•œ ๊ฐœ์„  ์ง€์นจ
  • ์ค‘์•™ ์ง‘์ค‘์‹ ๊ฑฐ๋ฒ„๋„Œ์Šค ๋Œ€์‹œ๋ณด๋“œ
  • ๊ทœ์ • ์ค€์ˆ˜ ์ค‘์‹ฌ์˜ ๋ณด๊ณ  ์ฒด๊ณ„

์‹ค์ œ ์šด์˜์ƒ์˜ ๊ณ ๋ ค ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ƒ๋‹นํ•œ ์ธํ”„๋ผ ๋˜๋Š” ํด๋ผ์šฐ๋“œ ๊ตฌ๋… ๋น„์šฉ
  • ๋ถ„๋ฅ˜ ๋ฐ ์กฐ์ • ์ž‘์—…์„ ์œ„ํ•œ ์ „๋‹ด ๋ณด์•ˆ ์ธ๋ ฅ ํ•„์š”
  • ๋Œ€๊ทœ๋ชจ ๋‹ค์ค‘ ํŒ€ ์กฐ์ง์˜ ๊ตฌ์„ฑ ๋ณต์žก์„ฑ
  • ๊ณ ๊ธ‰ ์ทจ์•ฝ์  ์ถ”์  ๋ถ„์„ ํ•™์Šต ๊ณก์„ 

DevSecOps ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ œ๋Œ€๋กœ ๊ฐ–์ถฐ์ง€์ง€ ์•Š์€ ์กฐ์ง์—์„œ๋Š” Fortify ๋ฐฐํฌ ์‹œ ์ƒ๋‹นํ•œ ์–‘์˜ ๋ฌธ์ œ์ ์ด ๋ฐœ๊ฒฌ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฒด๊ณ„์ ์ธ ๊ฑฐ๋ฒ„๋„Œ์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๊ฒฉ ํŠน์ง•

Fortify๋Š” ์ƒ์šฉ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ๋ผ์ด์„ ์Šค ๋ชจ๋ธ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜, ์ฝ”๋“œ ๋ผ์ธ ์ˆ˜ ๋˜๋Š” ๊ตฌ๋… ๋“ฑ๊ธ‰์„ ๊ธฐ์ค€์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์†Œ์œ  ๋น„์šฉ์—๋Š” ์ธํ”„๋ผ ๊ตฌ์ถ•, ํ”Œ๋žซํผ ๋ผ์ด์„ ์Šค ๋ฐ ๋ณด์•ˆ ์—”์ง€๋‹ˆ์–ด๋ง ๋ฆฌ์†Œ์Šค๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์—…์€ ๋‹ค์Œ ์‚ฌํ•ญ์„ ๊ณ„ํšํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์žฅ๊ธฐ์ ์ธ ๊ฑฐ๋ฒ„๋„Œ์Šค ๋ถ€๋‹ด
  • ๊ทœ์น™ ์กฐ์ • ์ฃผ๊ธฐ
  • ๊ฐœ๋ฐœ์ž ๊ต์œก
  • CI ๋ฐ ํ‹ฐ์ผ“ํŒ… ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•œ ํ†ตํ•ฉ ์—”์ง€๋‹ˆ์–ด๋ง

๊ตฌ์กฐ์  ํ•œ๊ณ„

Fortify๋Š” ๊ณ ๊ธ‰ ์ •์  ์ทจ์•ฝ์  ํƒ์ง€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์†Œ์Šค ์ฝ”๋“œ ์ˆ˜์ค€ ๋ถ„์„์—๋งŒ ๊ตญํ•œ๋ฉ๋‹ˆ๋‹ค. ๋™์  ๊ตฌ์„ฑ ๋กœ๋”ฉ์ด๋‚˜ ํ™˜๊ฒฝ์— ๋”ฐ๋ฅธ ์‹คํ–‰ ๊ฒฝ๋กœ์™€ ๊ฐ™์€ ๋Ÿฐํƒ€์ž„ ๊ด€๋ จ ๋™์ž‘์€ ์™„๋ฒฝํ•˜๊ฒŒ ๋ฐ˜์˜๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๊ธฐ์—… Swift ์ƒํƒœ๊ณ„ ๋‚ด์—์„œ Fortify๋Š” ๊ทœ์ œ๋œ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ ๊ฐ•ํ™” ๊ณ„์ธต ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์‹ฌ์ธต์ ์ธ ์ทจ์•ฝ์  ๋ถ„์„๊ณผ ๊ฐ•๋ ฅํ•œ ๊ฑฐ๋ฒ„๋„Œ์Šค ์—ฐ๊ณ„๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋ถ„์„ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ง€์†์ ์ธ ๊ฐ€์น˜๋ฅผ ์–ป์œผ๋ ค๋ฉด ์กฐ์ง์˜ ์„ฑ์ˆ™๋„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ปค๋ฒ„๋ฆฌํ‹ฐ ์ •์  ๋ถ„์„

๊ณต์‹ ์‚ฌ์ดํŠธ: https://www.synopsys.com/software-integrity/security-testing/static-analysis-sast.html

์‹œ๋†‰์‹œ์Šค(Synopsys)์—์„œ ๊ฐœ๋ฐœํ•œ ์ปค๋ฒ„๋ฆฌํ‹ฐ(Coverity)๋Š” ํ’ˆ์งˆ ์—”์ง€๋‹ˆ์–ด๋ง๊ณผ ๋ณด์•ˆ ๋ณด์ฆ์˜ ๊ต์ฐจ์ ์— ์œ„์น˜ํ•œ ์ •์  ๋ถ„์„ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. C ๋ฐ C++ ์‹œ์Šคํ…œ์˜ ๊ฒฐํ•จ ํƒ์ง€ ๊ธฐ๋Šฅ์œผ๋กœ ๋„๋ฆฌ ์•Œ๋ ค์ ธ ์žˆ์ง€๋งŒ, ์Šค์œ„ํ”„ํŠธ(Swift)๋ฅผ ๋น„๋กฏํ•œ ์ตœ์‹  ์–ธ์–ด๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฒ„๋ฆฌํ‹ฐ์˜ ๊ธฐ์—… ๊ฐ€์น˜๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ฒฐํ•จ ๋ชจ๋ธ๋ง, ํ”„๋กœ์ ํŠธ ๊ฐ„ ๊ด€๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ๊ด‘๋ฒ”์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๋ฌด๊ฒฐ์„ฑ ์ƒํƒœ๊ณ„์™€์˜ ํ†ตํ•ฉ์— ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฑด์ถ• ๋ชจ๋ธ

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

Swift ํ™˜๊ฒฝ์—์„œ Coverity๋Š” ๋‹ค์Œ ์‚ฌํ•ญ์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

  • ๋…ผ๋ฆฌ์  ๊ฒฐํ•จ ๋ฐ ์‹ ๋ขฐ์„ฑ ๋ฌธ์ œ ๊ฐ์ง€
  • ํŠน์ • ๋ณด์•ˆ ์ทจ์•ฝ์  ์‹๋ณ„
  • ์ž์› ์˜ค์šฉ ๋ฐ ๋™์‹œ์„ฑ ๋ชจ๋ธ๋ง
  • ์ฝ”๋“œ ํ’ˆ์งˆ ์ธก์ • ์ง€ํ‘œ์—๋Š” ์ฝ”๋“œ ๋ณต์žก์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ ์ง€ํ‘œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๋ณด์•ˆ ๋ฐœ๊ฒฌ ์‚ฌํ•ญ์€ CVE ์‹๋ณ„์ž ๋Œ€์‹  CWE ๋ถ„๋ฅ˜ ์ฒด๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋žซํผ์€ ์ข…์†์„ฑ ์ˆ˜์ค€์˜ ์ทจ์•ฝ์  ๊ด€๋ฆฌ๋ณด๋‹ค๋Š” ๊ตฌ์กฐ์  ๊ฒฐํ•จ ํƒ์ง€ ๋ฐ ์ฝ”๋“œ ์•ˆ์ •์„ฑ์— ์ค‘์ ์„ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

CI์—์„œ์˜ ์‹คํ–‰ ๋™์ž‘

Coverity๋Š” ๋ถ„์„ ์ „์— ์ปดํŒŒ์ผ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์บก์ฒ˜ํ•˜๋Š” ๋นŒ๋“œ ํ†ตํ•ฉ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CI ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ์ˆœ ์†Œ์Šค ์ฝ”๋“œ ์Šค์บ”๊ณผ๋Š” ๋‹ค๋ฅด๋ฉฐ Swift ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ๋นŒ๋“œ ๊ตฌ์„ฑ์„ ์กฐ์ •ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ CI ํŒจํ„ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ƒˆ๋กœ์šด ์ฝ”๋“œ ๋˜๋Š” ์ˆ˜์ •๋œ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ฆ๋ถ„ ๋ถ„์„
  • ์•ผ๊ฐ„ ์ „์ฒด ๋ถ„์„ ์Šค์บ”
  • ์‹ฌ๊ฐ๋„๊ฐ€ ๋†’์€ ๊ฒฐํ•จ์— ๋Œ€ํ•œ ์ •์ฑ… ๊ธฐ๋ฐ˜ ๊ฒŒ์ดํŒ…
  • ํ™•์ธ๋œ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ž๋™ ํ‹ฐ์ผ“ ์ƒ์„ฑ

์‹คํ–‰ ์‹œ๊ฐ„์€ ์ €์žฅ์†Œ ํฌ๊ธฐ์™€ ๋ถ„์„ ๊นŠ์ด์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Coverity๋Š” ์ƒ์„ธํ•œ ์˜๋ฏธ ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ๋ฌธ ๊ธฐ๋ฐ˜ ๋ถ„์„๊ธฐ๋ณด๋‹ค ์Šค์บ” ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์—…๋“ค์€ ํŒŒ์ดํ”„๋ผ์ธ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋นˆ๋„์™€ ๊นŠ์ด ์‚ฌ์ด์—์„œ ๊ท ํ˜•์„ ๋งž์ถ”๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๋Š” Coverity Connect ๋Œ€์‹œ๋ณด๋“œ์— ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ๊ด€๋ฆฌ๋˜๋ฉฐ, ์ด ๋Œ€์‹œ๋ณด๋“œ๋Š” ๋ฌธ์ œ ์ถ”์ , ๋ฌธ์ œ ๋ถ„๋ฅ˜ ์›Œํฌํ”Œ๋กœ ๋ฐ ๊ณผ๊ฑฐ ๊ฒฐํ•จ ์ถ”์„ธ ๋ถ„์„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์—… ๊ทœ๋ชจ ํ™•์žฅ์˜ ํ˜„์‹ค

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

์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์‹ฌ์ธต ์˜๋ฏธ ๊ฒฐํ•จ ํƒ์ง€
  • ๋‹ค๊ตญ์–ด ํฌํŠธํด๋ฆฌ์˜ค ๊ฐ€์‹œ์„ฑ
  • ๊ตฌ์กฐํ™”๋œ ํ™˜์ž ๋ถ„๋ฅ˜ ์›Œํฌํ”Œ๋กœ
  • ๊ณผ๊ฑฐ ๊ฒฐํ•จ ๋ฐ€๋„ ์ถ”์ 

ํ•˜์ง€๋งŒ ๊ตฌ์กฐ์  ์ œ์•ฝ ์กฐ๊ฑด์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • ์ „์šฉ ๋ชจ๋ฐ”์ผ ๋ณด์•ˆ ๋„๊ตฌ์— ๋น„ํ•ด Swift ํŠน์œ ์˜ ๋ณด์•ˆ ์ฝ”๋”ฉ ์„ธ๋ถ€ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๊ฐ•์กฐ๊ฐ€ ์ ์Šต๋‹ˆ๋‹ค.
  • ๋„ค์ดํ‹ฐ๋ธŒ ์ „์ด ์ข…์†์„ฑ ์ทจ์•ฝ์  ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค.
  • ๋นŒ๋“œ ์บก์ฒ˜ ๊ตฌ์„ฑ์˜ ์ž ์žฌ์  ๋ณต์žก์„ฑ
  • ๋ผ์ด์„ ์Šค ๋น„์šฉ์€ ๊ธฐ์—… ํฌํŠธํด๋ฆฌ์˜ค์— ๋งž์ถฐ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ํŒ€์ด ํ˜‘์—…ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” ๊ทœ์น™ ์ง‘ํ•ฉ ๋ฐ ๊ฒฐํ•จ ๋ถ„๋ฅ˜์˜ ์ฐจ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๊ด€๋œ ๊ตฌ์„ฑ ๊ด€๋ฆฌ๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

๊ฐ€๊ฒฉ ํŠน์ง•

Coverity๋Š” ์ƒ์šฉ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ”Œ๋žซํผ์œผ๋กœ, ๋ผ์ด์„ ์Šค ๋ชจ๋ธ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ”๋“œ ๋ผ์ธ ์ˆ˜ ๋˜๋Š” ํ”„๋กœ์ ํŠธ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋น„์šฉ์—๋Š” ํ”Œ๋žซํผ ๋ผ์ด์„ ์Šค, ์„œ๋ฒ„ ์ธํ”„๋ผ ๋˜๋Š” ํด๋ผ์šฐ๋“œ ๊ตฌ๋…, ์šด์˜ ๊ด€๋ฆฌ ๋ฆฌ์†Œ์Šค๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์—…์€ ๋‹ค์Œ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • Swift ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ํ†ตํ•ฉ ์—”์ง€๋‹ˆ์–ด๋ง
  • ๊ทœ์น™ ์กฐ์ • ์ง„ํ–‰ ์ค‘
  • ์ „์šฉ ๋ถ„๋ฅ˜ ์›Œํฌํ”Œ๋กœ
  • ๊ฒฐํ•จ ์ˆ˜์ • ํ•ด์„์— ๋Œ€ํ•œ ๊ฐœ๋ฐœ์ž ๊ต์œก

๊ตฌ์กฐ์  ํ•œ๊ณ„

Coverity์˜ ๊ฐ•์ ์€ ์‹ฌ์ธต์ ์ธ ์ทจ์•ฝ์  ์•…์šฉ ๋ชจ๋ธ๋ง๋ณด๋‹ค๋Š” ๊ตฌ์กฐ์  ๊ฒฐํ•จ ๋ถ„์„์— ์žˆ์Šต๋‹ˆ๋‹ค. Coverity๋Š” ํŠน์ • ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์‹๋ณ„ํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ํฌ๊ด„์ ์ธ ๋ณด์•ˆ ๋ถ„์„์„ ์œ„ํ•ด์„œ๋Š” ์ „๋ฌธ์ ์ธ SAST ํ”Œ๋žซํผ์„ ๋Œ€์ฒดํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ์ข…์†์„ฑ ์ˆ˜์ค€์˜ CVE ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ๋ถ„์„์„ ์œ„ํ•ด์„œ๋Š” Synopsys ์ƒํƒœ๊ณ„ ๋‚ด์˜ ๋ณ„๋„ ๋„๊ตฌ ๋˜๋Š” ์™ธ๋ถ€ ํ”Œ๋žซํผ๊ณผ์˜ ํ†ตํ•ฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์—…์šฉ Swift ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ Coverity๋Š” ๊ฐ•๋ ฅํ•œ ์‹ ๋ขฐ์„ฑ ๋ฐ ๊ตฌ์กฐ์  ๊ฒฐํ•จ ํƒ์ง€ ํ”Œ๋žซํผ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์žฅ๊ธฐ์ ์ธ ์œ ์ง€ ๊ด€๋ฆฌ์„ฑ์„ ๊ฐ•ํ™”ํ•˜๊ณ  ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์œผ๋กœ์˜ ๊ฒฐํ•จ ์œ ์ถœ์„ ์ค„์—ฌ์ฃผ์ง€๋งŒ, ํฌ๊ด„์ ์ธ ์ทจ์•ฝ์  ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” ๊ณ„์ธตํ˜• ๋ณด์•ˆ ์•„ํ‚คํ…์ฒ˜์— ํ†ตํ•ฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์…ˆ๊ทธ๋ ™

๊ณต์‹ ์‚ฌ์ดํŠธ: https://semgrep.dev

Semgrep์€ Swift๋ฅผ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ์–ธ์–ด์—์„œ ์œ ์—ฐํ•˜๊ณ  ํŒจํ„ด ๊ธฐ๋ฐ˜์˜ ๋ณด์•ˆ ๋ฐ ํ’ˆ์งˆ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค๊ณ„๋œ ๊ทœ์น™ ๊ธฐ๋ฐ˜ ์ •์  ๋ถ„์„ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. Semgrep์€ ๊ฒฝ๋Ÿ‰ํ™”๋˜๋ฉด์„œ๋„ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ DevSecOps ์†”๋ฃจ์…˜์œผ๋กœ, ๊ธฐ์—…์ด ๊ณ ์šฉ๋Ÿ‰ ๊ฒ€์‚ฌ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•˜์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉ์ž ์ง€์ • ๊ทœ์น™์„ ์ •์˜ํ•˜๊ณ  ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Swift ํ™˜๊ฒฝ์—์„œ Semgrep์€ ๊ฐœ๋ฐœ์ž ์ค‘์‹ฌ์˜ ๋ฆฐํŒ…๊ณผ ๋ณธ๊ฒฉ์ ์ธ SAST ํ”Œ๋žซํผ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ€๊ต ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๊ฑด์ถ• ๋ชจ๋ธ

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

Swift ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๊ฒฝ์šฐ Semgrep์€ ๋‹ค์Œ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • ์•ˆ์ „ํ•˜์ง€ ์•Š์€ API ์‚ฌ์šฉ ํŒจํ„ด ๊ฐ์ง€
  • ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๋น„๋ฐ€ ํ‚ค ๋ฐ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ๋…ธ์ถœ ์‹๋ณ„
  • ๋‚ด๋ถ€ ์ฝ”๋”ฉ ์ •์ฑ… ์‹œํ–‰
  • ์กฐ์ง ํ‘œ์ค€์— ๋งž์ถ˜ ์‚ฌ์šฉ์ž ์ง€์ • ๊ทœ์น™ ์ž‘์„ฑ
  • ์—„์„ ๋œ ๋ณด์•ˆ ๊ทœ์น™ ํŒฉ๊ณผ์˜ ํ†ตํ•ฉ

Semgrep ๊ทœ์น™์€ ๋ฐœ๊ฒฌ ์‚ฌํ•ญ์„ CWE ๋ถ„๋ฅ˜์™€ ์ผ์น˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Semgrep์€ ์ž์ฒด Swift ์ฝ”๋“œ์— CVE ์‹๋ณ„์ž๋ฅผ ํ• ๋‹นํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ „์ด์  ์ข…์†์„ฑ ์ทจ์•ฝ์  ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Semgrep์€ ์˜คํ”ˆ ์†Œ์Šค ๋ฒ„์ „๊ณผ ์ƒ์šฉ ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ๋ฒ„์ „์œผ๋กœ ์ œ๊ณต๋˜๋ฉฐ, ์ƒ์šฉ ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ๋ฒ„์ „์€ ์ค‘์•™ ์ง‘์ค‘์‹ ๋Œ€์‹œ๋ณด๋“œ, ๋ฌธ์ œ ๋ถ„๋ฅ˜ ์›Œํฌํ”Œ๋กœ ๋ฐ ์ •์ฑ… ์ œ์–ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

CI์—์„œ์˜ ์‹คํ–‰ ๋™์ž‘

Semgrep์€ ์†๋„์™€ CI ํ†ตํ•ฉ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์ค„ ๋„๊ตฌ ๋˜๋Š” CI ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด ์‹คํ–‰๋˜๋ฉฐ, ์ฝ”๋“œ ํ˜ธ์ŠคํŒ… ํ”Œ๋žซํผ๊ณผ ํ†ตํ•ฉ๋˜๋Š” ๊ตฌ์กฐํ™”๋œ JSON ๋˜๋Š” SARIF ํ˜•์‹์˜ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ CI ์‚ฌ์šฉ ํŒจํ„ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ƒˆ๋กœ์šด ์ฝ”๋“œ ํ™•์ธ์„ ์œ„ํ•ด ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์Šค์บ”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ •์˜๋œ ๊ทœ์น™ ์œ„๋ฐ˜์— ๋Œ€ํ•œ ์ •์ฑ… ๊ธฐ๋ฐ˜ ๋ณ‘ํ•ฉ ์ฐจ๋‹จ
  • ์˜ˆ์•ฝ๋œ ์ €์žฅ์†Œ ์ „์ฒด ์Šค์บ”
  • GitHub ๋˜๋Š” GitLab ๋ณด์•ˆ ๋Œ€์‹œ๋ณด๋“œ์™€์˜ ํ†ตํ•ฉ

Semgrep์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‹ฌ์ธต์ ์ธ ํ”„๋กœ์‹œ์ € ๊ฐ„ ๋ถ„์„๋ณด๋‹ค๋Š” ํŒจํ„ด ๊ธฐ๋ฐ˜ ํ‰๊ฐ€๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์‹œ๊ฐ„์ด ๋น ๋ฆ…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ง€์—ฐ ์‹œ๊ฐ„ ์ œ์•ฝ์œผ๋กœ ์ธํ•ด ๊ณ ์„ฑ๋Šฅ SAST ์—”์ง„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ณ ๋นˆ๋„ ํŒŒ์ดํ”„๋ผ์ธ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ทœ์น™์˜ ์ •ํ™•๋„๋Š” ๊ตฌ์„ฑ ํ’ˆ์งˆ์— ํฌ๊ฒŒ ์ขŒ์šฐ๋ฉ๋‹ˆ๋‹ค. ์ง€๋‚˜์น˜๊ฒŒ ๊ด‘๋ฒ”์œ„ํ•œ ํŒจํ„ด์€ ์˜คํƒ์„ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ณ , ์ง€๋‚˜์น˜๊ฒŒ ์ข์€ ๊ทœ์น™์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ์ทจ์•ฝ์ ์„ ๋†“์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์—… ๊ทœ๋ชจ ํ™•์žฅ์˜ ํ˜„์‹ค

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

์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์‹ ์†ํ•œ CI ์‹คํ–‰
  • ์‚ฌ์šฉ์ž ์ง€์ • ๊ทœ์น™ ํ™•์žฅ์„ฑ
  • ๊ฐœ๋ฐœ์ž ์นœํ™”์ ์ธ ํ†ตํ•ฉ
  • ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ์ค‘์•™ ์ง‘์ค‘์‹ ๊ฑฐ๋ฒ„๋„Œ์Šค ์˜ต์…˜

์ œํ•œ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ œํ•œ์ ์ธ ์‹ฌ์ธต ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ชจ๋ธ๋ง
  • ๋„ค์ดํ‹ฐ๋ธŒ ํ˜ธ์ถœ ๊ทธ๋ž˜ํ”„ ์ „๋ฐ˜์— ๊ฑธ์นœ ์ทจ์•ฝ์„ฑ ์ถ”๋ก  ์—†์Œ
  • ๋‚ด์žฅ๋œ ์ข…์†์„ฑ CVE ์ถ”์  ๊ธฐ๋Šฅ ์—†์Œ
  • ์ •ํ™•์„ฑ์„ ์œ„ํ•œ ๊ทœ์น™ ์ž‘์„ฑ ํ’ˆ์งˆ์— ๋Œ€ํ•œ ์˜์กด

DevSecOps ์„ฑ์ˆ™๋„๊ฐ€ ๋†’์€ ๊ธฐ์—…์—์„œ๋Š” Semgrep์ด ๋งค์šฐ ์œ ์—ฐํ•œ ์ •์ฑ… ์‹œํ–‰ ์—”์ง„ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฒด๊ณ„์ ์ธ ๊ทœ์น™ ๊ด€๋ฆฌ ์ฒด๊ณ„๊ฐ€ ๋ถ€์กฑํ•œ ์กฐ์ง์—์„œ๋Š” ๊ตฌ์„ฑ์ด ๋ณต์žกํ•˜๊ฒŒ ์–ฝํ˜€ ํšจ๊ณผ๊ฐ€ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€๊ฒฉ ํŠน์ง•

Semgrep์€ ๋ฌด๋ฃŒ ์˜คํ”ˆ ์†Œ์Šค ๋ฒ„์ „๊ณผ ์ƒ์šฉ SaaS ํ”Œ๋žซํผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์—…์šฉ ๊ฐ€๊ฒฉ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ €์žฅ์†Œ ์ˆ˜, ๊ฐœ๋ฐœ์ž ์ขŒ์„ ์ˆ˜ ๋˜๋Š” ์‚ฌ์šฉ๋Ÿ‰ ์ง€ํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฑ…์ •๋ฉ๋‹ˆ๋‹ค.

์ด ๋น„์šฉ ๊ณ ๋ ค ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ค‘์•™ ์ง‘์ค‘์‹ ๋Œ€์‹œ๋ณด๋“œ ๊ตฌ๋…๋ฃŒ
  • ๊ทœ์น™ ์ž‘์„ฑ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ
  • CI ํ†ตํ•ฉ ์—”์ง€๋‹ˆ์–ด๋ง
  • ๋ณด์•ˆ ์—”์ง€๋‹ˆ์–ด๋ง ๊ฒ€ํ†  ํ”„๋กœ์„ธ์Šค

์˜คํ”ˆ์†Œ์Šค ๋ฒ„์ „์€ ์ง์ ‘์ ์ธ ๋ผ์ด์„ ์Šค ๋น„์šฉ์„ ์ค„์—ฌ์ฃผ์ง€๋งŒ, ๊ด€๋ฆฌ ์ฑ…์ž„์€ ์ „์ ์œผ๋กœ ๋‚ด๋ถ€ ํŒ€์œผ๋กœ ์ด์ „๋ฉ๋‹ˆ๋‹ค.

๊ตฌ์กฐ์  ํ•œ๊ณ„

Semgrep์€ ์™„์ „ํ•œ ํ”„๋กœ์‹œ์ € ๊ฐ„ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณต์žกํ•œ Swift ๋™์‹œ์„ฑ ๋ชจ๋ธ, ๋น„๋™๊ธฐ ํŒจํ„ด ๋˜๋Š” ๊ฐ„์ ‘ ํ˜ธ์ถœ ์ฒด์ธ์€ ํŒจํ„ด ๊ธฐ๋ฐ˜ ํƒ์ง€์—์„œ ์™„์ „ํžˆ ํ‘œํ˜„๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ Semgrep์€ ์ž์ฒด์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ๋ถ„์„ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ์—…์€ ์ข…์†์„ฑ ์ˆ˜์ค€์˜ ์œ„ํ—˜์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ SCA ๋„๊ตฌ๋ฅผ ํ†ตํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์—… Swift ์ƒํƒœ๊ณ„์—์„œ Semgrep์€ ์œ ์—ฐํ•˜๊ณ  DevSecOps์— ๋ถ€ํ•ฉํ•˜๋Š” ์ •์  ์Šค์บ๋‹ ์—”์ง„์œผ๋กœ ๊ธฐ๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋›ฐ์–ด๋‚œ ์ ์‘์„ฑ๊ณผ CI ํšจ์œจ์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์‹ฌ์ธต์ ์ธ ํ”„๋กœ๊ทธ๋žจ ๋ชจ๋ธ๋ง ๊ธฐ๋Šฅ์ด ์ œํ•œ์ ์ด๋ฏ€๋กœ ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„์ธตํ˜• ๋ณด์•ˆ ์•„ํ‚คํ…์ฒ˜์— ํ†ตํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

GitHub ๊ณ ๊ธ‰ ๋ณด์•ˆ

๊ณต์‹ ์‚ฌ์ดํŠธ: https://github.com/security/advanced-security

GitHub Advanced Security๋Š” GitHub ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ง์ ‘ ํ†ตํ•ฉ๋œ ํ”Œ๋žซํผ ์ˆ˜์ค€์˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ •์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ, ์ข…์†์„ฑ ์ทจ์•ฝ์  ๋ชจ๋‹ˆํ„ฐ๋ง, ๋น„๋ฐ€ ํ‚ค ์Šค์บ” ๊ธฐ๋Šฅ์„ ํ†ตํ•ฉ๋œ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ ๋‚ด์—์„œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. GitHub์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Swift ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ, ์™ธ๋ถ€ ์„œ๋ฒ„ ์ธํ”„๋ผ ์—†์ด๋„ CI(์ง€์†์  ํ†ตํ•ฉ)์— ์ตœ์ ํ™”๋œ ๋ณด์•ˆ ์ œ์–ด ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฑด์ถ• ๋ชจ๋ธ

GitHub Advanced Security๋Š” ์ €์žฅ์†Œ ํ˜ธ์ŠคํŒ… ํ”Œ๋žซํผ ๋‚ด์— ๋‚ด์žฅ๋œ ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ๋ถ„์„ ๊ณ„์ธต์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„์€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์˜๋ฏธ๋ก ์  ์ฝ”๋“œ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๋Š” CodeQL์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ ์ฟผ๋ฆฌ๋Š” ์ธ์ ์…˜ ์ทจ์•ฝ์ , ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ API ์‚ฌ์šฉ๊ณผ ๊ด€๋ จ๋œ ํŒจํ„ด์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

Swift ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ GitHub ๊ณ ๊ธ‰ ๋ณด์•ˆ ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • CodeQL ๊ธฐ๋ฐ˜ ์ •์  ๋ณด์•ˆ ๋ถ„์„
  • CVE ๋งคํ•‘์„ ํ†ตํ•œ ์ข…์†์„ฑ ์ทจ์•ฝ์  ๋ชจ๋‹ˆํ„ฐ๋ง
  • ์†Œ์Šค ๊ธฐ๋ก ๋ฐ ์ปค๋ฐ‹์—์„œ ๋น„๋ฐ€ ํ‚ค ๊ฐ์ง€
  • ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ์ˆ˜์ค€ ๋ณด์•ˆ ์ฃผ์„
  • ์ง€์  ๋ณดํ˜ธ ๊ทœ์น™์„ ํ†ตํ•œ ์ •์ฑ… ์‹œํ–‰

๋…๋ฆฝํ˜• ๋ฆฐํ„ฐ์™€ ๋‹ฌ๋ฆฌ ์ด ํ”Œ๋žซํผ์€ ์ž์ฒด ์ฝ”๋“œ ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ๋ฅผ ์ข…์†์„ฑ ์ˆ˜์ค€์˜ CVE ๋…ธ์ถœ๊ณผ ์—ฐ๊ด€์‹œํ‚ต๋‹ˆ๋‹ค. ์ข…์†์„ฑ ์Šค์บ”์„ ํ†ตํ•ด ์ทจ์•ฝํ•œ ํŒจํ‚ค์ง€๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๊ณต๊ฐœ ์ทจ์•ฝ์  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งž์ถฐ ์‹ฌ๊ฐ๋„ ์ˆ˜์ค€์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

CI์—์„œ์˜ ์‹คํ–‰ ๋™์ž‘

์ •์  ๋ถ„์„์€ ์ผ๋ฐ˜์ ์œผ๋กœ GitHub Actions ์›Œํฌํ”Œ๋กœ๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. CodeQL ์Šค์บ”์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹คํ–‰๋˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ’€ ๋ฆฌํ€˜์ŠคํŠธ์— ๋Œ€ํ•ด
  • ๋ณดํ˜ธ๋œ ๊ฐ€์ง€๋กœ ๋ฐ€์–ด๋‚ผ ๋•Œ
  • ์ •ํ•ด์ง„ ๊ฐ„๊ฒฉ์œผ๋กœ
  • ๋ฆด๋ฆฌ์Šค ํ›„๋ณด ๊ฒ€์ฆ์˜ ์ผํ™˜์œผ๋กœ

์ข…์†์„ฑ ๊ฒ€์‚ฌ๋Š” ํŒจํ‚ค์ง€ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ทจ์•ฝ์  ๊ณต๊ฐœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ ์ง€์†์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ์‹œ๊ฐ„์€ ์ €์žฅ์†Œ ํฌ๊ธฐ์™€ ์ฟผ๋ฆฌ ๋ณต์žก์„ฑ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. CodeQL ๋ถ„์„์€ ์Šค์บ” ๊นŠ์ด์™€ ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰ ์‹œ๊ฐ„ ๊ฐ„์˜ ๊ท ํ˜•์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ์กฐ์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ„์„์€ ์ €์žฅ์†Œ ํ”Œ๋žซํผ์— ํ†ตํ•ฉ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๊ฒฐ๊ณผ๋Š” ํ’€ ๋ฆฌํ€˜์ŠคํŠธ์™€ ๋ณด์•ˆ ๋Œ€์‹œ๋ณด๋“œ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์—… ๊ทœ๋ชจ ํ™•์žฅ์˜ ํ˜„์‹ค

GitHub Advanced Security๋Š” GitHub Enterprise๋ฅผ ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์กฐ์ง์— ํšจ๊ณผ์ ์œผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ค‘์•™ ์ง‘์ค‘์‹ ์ •์ฑ… ์‹œํ–‰, ์กฐ์ง ์ˆ˜์ค€ ๋ณด์•ˆ ๋Œ€์‹œ๋ณด๋“œ ๋ฐ ์•ก์„ธ์Šค ์ œ์–ด๋Š” ๊ธฐ์—… ๊ฑฐ๋ฒ„๋„Œ์Šค ๊ตฌ์กฐ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ์™€์˜ ๋„ค์ดํ‹ฐ๋ธŒ ํ†ตํ•ฉ
  • ์ฝ”๋“œ ์ทจ์•ฝ์  ๋ฐ ์ข…์†์„ฑ CVE์— ๋Œ€ํ•œ ํ†ตํ•ฉ๋œ ๊ด€์ 
  • ๊ณผ๊ฑฐ ์ €์žฅ์†Œ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ํฌํ•จํ•œ ๋น„๋ฐ€ ์Šค์บ”
  • ์ตœ์†Œํ•œ์˜ ์ธํ”„๋ผ ๊ตฌ์ถ• ๋น„์šฉ

ํ•˜์ง€๋งŒ ๊ตฌ์กฐ์  ๊ณ ๋ ค ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํ˜ธ์ŠคํŒ… ํ”Œ๋žซํผ์œผ๋กœ์„œ GitHub์— ๋Œ€ํ•œ ์˜์กด์„ฑ
  • ์ „์šฉ SAST ์—”์ง„์— ๋น„ํ•ด ์‚ฌ์šฉ์ž ์ง€์ • ๊นŠ์ด๊ฐ€ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ฅธ ์ž ์žฌ์  ๋น„์šฉ ์˜ํ–ฅ
  • ๋ถ„์„ ๊นŠ์ด๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ํ™•์žฅ๋˜์ง€ ์•Š๋Š” ํ•œ ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ฟผ๋ฆฌ ํŒฉ์— ์˜ํ•ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

์ €์žฅ์†Œ ํ˜ธ์ŠคํŒ… ๋ฐฉ์‹์ด ์„œ๋กœ ๋‹ค๋ฅด๊ฑฐ๋‚˜ ์˜จํ”„๋ ˆ๋ฏธ์Šค ์†Œ์Šค ์ œ์–ด ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ์กฐ์ง์€ ํ†ตํ•ฉ ๋ฌธ์ œ์— ์ง๋ฉดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€๊ฒฉ ํŠน์ง•

GitHub Advanced Security๋Š” GitHub Enterprise ํ”Œ๋žœ์šฉ ์œ ๋ฃŒ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๊ฐ€๊ฒฉ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ™œ์„ฑ ์ปค๋ฏธํ„ฐ ์ˆ˜ ๋˜๋Š” ์ €์žฅ์†Œ ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฑ…์ •๋ฉ๋‹ˆ๋‹ค.

๋น„์šฉ ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ์ž๋ณ„ ๋ผ์ด์„ผ์‹ฑ
  • CI ์ปดํ“จํŒ… ์†Œ๋น„๋Ÿ‰
  • ๊ด€๋ฆฌ ๊ตฌ์„ฑ ์˜ค๋ฒ„ํ—ค๋“œ
  • ๊ณ ๊ธ‰ ์ •์ฑ…์„ ์œ„ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • CodeQL ์ฟผ๋ฆฌ ๊ฐœ๋ฐœ

ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋ธ์€ ์ธํ”„๋ผ ๊ด€๋ฆฌ ๋ถ€๋‹ด์„ ์ค„์—ฌ์ฃผ์ง€๋งŒ, ํ”Œ๋žซํผ ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ฅธ ๋ฐ˜๋ณต์ ์ธ ๊ตฌ๋… ๋น„์šฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์กฐ์  ํ•œ๊ณ„

CodeQL์€ ์˜๋ฏธ ๋ถ„์„์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์ง€๋งŒ, ํŠน์ • ์˜ˆ์™ธ์ ์ธ ์ทจ์•ฝ์  ๋ชจ๋ธ๋ง ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ์ „๋ฌธ์ ์ธ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ SAST ์—”์ง„๋งŒํผ ์‹ฌ์ธต์ ์ธ ๋ถ„์„์„ ์ œ๊ณตํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ •์  ๋ถ„์„์€ GitHub์— ํ˜ธ์ŠคํŒ…๋œ ์ €์žฅ์†Œ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

์ข…์†์„ฑ ๊ฒ€์‚ฌ๋Š” ์•Œ๋ ค์ง„ CVE๋ฅผ ์‹๋ณ„ํ•˜์ง€๋งŒ ๋Ÿฐํƒ€์ž„ ๋„๋‹ฌ ๊ฐ€๋Šฅ์„ฑ์ด๋‚˜ ์ปจํ…์ŠคํŠธ ์•…์šฉ ๊ฐ€๋Šฅ์„ฑ์„ ๋ณธ์งˆ์ ์œผ๋กœ ํŒ๋‹จํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋„๋‹ฌ ๊ฐ€๋Šฅ์„ฑ ๋ถ„์„์ด ํ•„์š”ํ•œ ๊ธฐ์—…์€ ๋ณด์™„์ ์ธ ๋„๊ตฌ๋ฅผ ํ†ตํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

GitHub์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Swift ์ƒํƒœ๊ณ„์—์„œ GitHub Advanced Security๋Š” ์ •์  ๋ถ„์„, CVE ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋น„๋ฐ€ ํ‚ค ํƒ์ง€๋ฅผ ๊ฒฐํ•ฉํ•œ ํ†ตํ•ฉ๋œ ๊ฑฐ๋ฒ„๋„Œ์Šค ์ง€ํ–ฅ ๋ณด์•ˆ ๊ณ„์ธต์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ฒด๊ณ„์ ์ธ CI ๊ฒŒ์ดํŠธํ‚คํ•‘๊ณผ ์—ฐ๊ณ„๋  ๋•Œ ํŠนํžˆ ํšจ๊ณผ์ ์ด์ง€๋งŒ, ๊ทœ์ œ๊ฐ€ ์—„๊ฒฉํ•˜๊ฑฐ๋‚˜ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋งค์šฐ ๋ณต์žกํ•œ ํ™˜๊ฒฝ์—์„œ๋Š” ์ถ”๊ฐ€์ ์ธ ๋ณด์•ˆ ๊ฐ•ํ™”๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

NowSecure

๊ณต์‹ ์‚ฌ์ดํŠธ: https://www.nowsecure.com

NowSecure๋Š” iOS ๋ฐ Android ์ƒํƒœ๊ณ„์— ํŠนํ™”๋œ ์ƒ์šฉ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ •์  ๋ถ„์„ ๋„๊ตฌ์™€ ๋‹ฌ๋ฆฌ NowSecure๋Š” ์ •์  ๋ถ„์„, ๋™์  ๋ถ„์„ ๋ฐ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์— ์ตœ์ ํ™”๋œ ๋ณด์•ˆ ํ‰๊ฐ€ ๊ธฐ๋Šฅ์„ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๊ณต์šฉ ๋˜๋Š” ๊ธฐ์—…์šฉ ์•ฑ ์Šคํ† ์–ด๋ฅผ ํ†ตํ•ด ๋ฐฐํฌ๋˜๋Š” iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ค‘์‹ฌ์œผ๋กœ ํ•˜๋Š” ๊ธฐ์—… Swift ํ™˜๊ฒฝ์—์„œ NowSecure๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ๋‹ค๊ตญ์–ด SAST ์—”์ง„๋ณด๋‹ค๋Š” ๋ชจ๋ฐ”์ผ ๋ณด์•ˆ ๋ณด์ฆ ๊ณ„์ธต ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๊ฑด์ถ• ๋ชจ๋ธ

NowSecure๋Š” ์ฃผ๋กœ ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ํ”Œ๋žซํผ์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ, ์ปดํŒŒ์ผ๋œ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฌผ๋ก  ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์†Œ์Šค ์ฝ”๋“œ๋„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. Swift ๊ธฐ๋ฐ˜ iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ, ์ด ํ”Œ๋žซํผ์€ ๋‹ค์Œ์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • ์•ˆ์ „ํ•˜์ง€ ์•Š์€ API ์‚ฌ์šฉ ํŒจํ„ด
  • ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ์•”ํ˜ธํ™” ์„ค์ • ์˜ค๋ฅ˜
  • ๋„คํŠธ์›Œํฌ ํ†ต์‹  ์ทจ์•ฝ์ 
  • ๋ฐ”์ด๋„ˆ๋ฆฌ ์ˆ˜์ค€ ๋ณด์•ˆ ์†์„ฑ
  • ๊ทœ์ œ ์‚ฐ์—…์„ ์œ„ํ•œ ๊ทœ์ • ์ค€์ˆ˜ ์ •๋ ฌ

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

๋ฐœ๊ฒฌ ์‚ฌํ•ญ์€ OWASP Mobile Top 10 ๋ฐ CWE ๋ถ„๋ฅ˜์™€ ๊ฐ™์€ ์—…๊ณ„์—์„œ ์ธ์ •ํ•˜๋Š” ๋ถ„๋ฅ˜ ์ฒด๊ณ„์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค. CVE ์‹๋ณ„์ž๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ž์ฒด Swift ์ฝ”๋“œ๋ณด๋‹ค๋Š” ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ทจ์•ฝ์ ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

CI์—์„œ์˜ ์‹คํ–‰ ๋™์ž‘

NowSecure๋Š” ์ž๋™ํ™”๋œ ์•ฑ ์—…๋กœ๋“œ ๋ฐ ์Šค์บ” ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ํ†ตํ•ด CI ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. Swift ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ CI ํ™˜๊ฒฝ์—์„œ ๋นŒ๋“œ๋˜๊ณ  ์„œ๋ช…๋œ ํ›„ ๋ถ„์„์„ ์œ„ํ•ด NowSecure ํ”Œ๋žซํผ์œผ๋กœ ์ œ์ถœ๋ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ CI ํŒจํ„ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์‚ฌ์ „ ์ถœ์‹œ ๋ณด์•ˆ ๊ฒ€์ฆ ์Šค์บ”
  • ์šด์˜ ํ™˜๊ฒฝ ๋นŒ๋“œ์— ๋Œ€ํ•œ ๋ณด์•ˆ ํ‰๊ฐ€ ์ผ์ •
  • ๊ทœ์ • ์ค€์ˆ˜ ์ค‘์‹ฌ์˜ ์ •๊ธฐ ๊ฐ์‚ฌ
  • ๋ฌธ์ œ ํ•ด๊ฒฐ ์ถ”์ ์„ ์œ„ํ•œ ํ‹ฐ์ผ“ํŒ… ์‹œ์Šคํ…œ๊ณผ์˜ ํ†ตํ•ฉ

๋ถ„์„์— ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฒ€์‚ฌ ๋ฐ ๋™์  ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜๋ฏ€๋กœ ์‹คํ–‰ ์‹œ๊ฐ„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆœ์ˆ˜ ์†Œ์Šค ์ˆ˜์ค€ ๋„๊ตฌ๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ NowSecure ์Šค์บ”์€ ๋นˆ๋ฒˆํ•œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ๊ฒ€์‚ฌ๋ณด๋‹ค๋Š” ๋ฆด๋ฆฌ์Šค ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ด€๋ฌธ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

๊ธฐ์—… ๊ทœ๋ชจ ํ™•์žฅ์˜ ํ˜„์‹ค

NowSecure๋Š” ๊ธˆ์œต, ์˜๋ฃŒ, ์ •๋ถ€์™€ ๊ฐ™์€ ๊ทœ์ œ ๋Œ€์ƒ ๋˜๋Š” ๊ณ ์œ„ํ—˜ ๋ถ„์•ผ์—์„œ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ์กฐ์ง์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ผ์ƒ์ ์ธ ๊ฐœ๋ฐœ ์ฝ”๋“œ ๊ฒ€์‚ฌ๋ณด๋‹ค๋Š” ๊ทœ์ • ์ค€์ˆ˜ ๋ฌธ์„œํ™” ๋ฐ ๋ณด์•ˆ ๊ฒ€์ฆ์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ ํŠนํ™” ์ทจ์•ฝ์„ฑ ๋ชจ๋ธ๋ง
  • ์ด์ง„ ์ˆ˜์ค€ ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ
  • ๊ทœ์ • ์ค€์ˆ˜ ๋ณด๊ณ  ์ง€์›
  • ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ ์˜ค๋ฅ˜ ์œ„ํ—˜์— ๋Œ€ํ•œ ๋ณด์žฅ

๊ตฌ์กฐ์  ์ œ์•ฝ ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ์— ๋Œ€ํ•œ ์ข์€ ์ดˆ์ 
  • ์„œ๋ฒ„ ์ธก Swift ์„œ๋น„์Šค์—๋Š” ์ ์šฉ ๊ฐ€๋Šฅ์„ฑ์ด ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.
  • ์‹ฌ๋„ ์žˆ๋Š” ๊ตฌ์กฐ์  ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜์„ฑ ์ง€ํ‘œ ์—†์Œ
  • ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ์Šค์บ๋‹ ์ธํ”„๋ผ์— ๋Œ€ํ•œ ์˜์กด์„ฑ

๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ํฌํ•จํ•˜๋Š” ๋‹ค์–‘ํ•œ Swift ํฌํŠธํด๋ฆฌ์˜ค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ์—…์˜ ๊ฒฝ์šฐ NowSecure๋Š” ๋ชจ๋ฐ”์ผ ๋ถ€๋ฌธ๋งŒ ์ง€์›ํ•˜๋ฏ€๋กœ ๋ณด๋‹ค ํฌ๊ด„์ ์ธ ์ •์  ๋ถ„์„ ์†”๋ฃจ์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๊ฒฉ ํŠน์ง•

NowSecure๋Š” ์œ ๋ฃŒ ๊ตฌ๋… ๊ธฐ๋ฐ˜ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ๊ฐ€๊ฒฉ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜, ๊ฒ€์‚ฌ ๋นˆ๋„ ๋ฐ ๊ธฐ์—…์˜ ๊ทœ์ • ์ค€์ˆ˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

๋น„์šฉ ๊ณ ๋ ค ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ณ„ ๊ตฌ๋…๋ฃŒ
  • CI ํ†ตํ•ฉ ์—”์ง€๋‹ˆ์–ด๋ง
  • ๋ณด์•ˆ ๊ฒ€ํ†  ๋ฐ ์šฐ์„ ์ˆœ์œ„ ๊ฒฐ์ • ๋ฆฌ์†Œ์Šค
  • ์ง€์†์ ์ธ ๊ทœ์ • ์ค€์ˆ˜ ๋ฌธ์„œํ™” ํ”„๋กœ์„ธ์Šค

์ด ๋„๊ตฌ๋Š” ํŠน์ˆ˜ ๋ณด์•ˆ ๊ฒ€์ฆ ํ”Œ๋žซํผ์œผ๋กœ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์ธ ๋ฆฐํŒ… ๋„๊ตฌ์— ๋น„ํ•ด ๋ผ์ด์„ ์Šค ๋น„์šฉ์ด ๋” ๋†’์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์กฐ์  ํ•œ๊ณ„

NowSecure๋Š” ์‹ฌ์ธต์ ์ธ ํ”„๋กœ์‹œ์ € ๊ฐ„ ์ฝ”๋“œ ๋ถ„์„์„ ์œ„ํ•œ ์†Œ์Šค ๋ ˆ๋ฒจ SAST ์—”์ง„์„ ๋Œ€์ฒดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์ •์  ๊ฒ€์‚ฌ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์•„ํ‚คํ…์ฒ˜ ์ฝ”๋“œ ๋ณต์žก์„ฑ ๋ชจ๋ธ๋ง๋ณด๋‹ค๋Š” ๋ชจ๋ฐ”์ผ ๋ณด์•ˆ ์ƒํƒœ์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

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

๊ธฐ์—… Swift ์ƒํƒœ๊ณ„ ๋‚ด์—์„œ NowSecure๋Š” iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์œ„ํ—˜์— ๋งž์ถ˜ ๋ชจ๋ฐ”์ผ ๋ณด์•ˆ ๋ณด์ฆ ๊ณ„์ธต ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ทœ์ • ์ค€์ˆ˜ ๊ฒ€์ฆ ๋ฐ ๋Ÿฐํƒ€์ž„ ๋ณด์•ˆ ์ƒํƒœ๋ฅผ ๊ฐ•ํ™”ํ•˜์ง€๋งŒ, ๊ธฐ์—… ์ „๋ฐ˜์— ๊ฑธ์นœ ๋ณด์•ˆ์„ ์œ„ํ•ด์„œ๋Š” ๋ณด๋‹ค ๊ด‘๋ฒ”์œ„ํ•œ ์ •์  ๋ถ„์„ ๋ฐ ์ข…์†์„ฑ ๊ด€๋ฆฌ ์•„ํ‚คํ…์ฒ˜์— ํ†ตํ•ฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

SwiftFormat

๊ณต์‹ ์‚ฌ์ดํŠธ: https://github.com/nicklockwood/SwiftFormat

SwiftFormat์€ Swift ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „๋ฐ˜์— ๊ฑธ์ณ ์ผ๊ด€๋œ ์ฝ”๋“œ ์Šคํƒ€์ผ๊ณผ ๊ตฌ๋ฌธ ์ •๊ทœํ™”๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘” ์˜คํ”ˆ ์†Œ์Šค Swift ํฌ๋งทํŒ… ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋ณด์•ˆ ์ค‘์‹ฌ์˜ ์ •์  ๋ถ„์„๊ธฐ๋‚˜ ๊ฒฐํ•จ ํƒ์ง€ ์—”์ง„๊ณผ๋Š” ๋‹ฌ๋ฆฌ, SwiftFormat์€ ์ž๋™ํ™”๋œ ํฌ๋งทํŒ… ๊ทœ์น™์—๋งŒ ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ SwiftFormat์€ ๋…๋ฆฝ์ ์ธ ํ’ˆ์งˆ ๊ด€๋ฆฌ ์†”๋ฃจ์…˜์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” ๋ฆฐํ„ฐ ๋ฐ SAST ํ”Œ๋žซํผ๊ณผ ํ•จ๊ป˜ ๋ณด์™„์ ์ธ ์ฝ”๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ๋กœ ํ™œ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

๊ฑด์ถ• ๋ชจ๋ธ

SwiftFormat์€ ์†Œ์Šค ์ฝ”๋“œ ๊ฐ„ ๋ณ€ํ™˜ ์—”์ง„์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Swift ์ฝ”๋“œ๋ฅผ ๊ตฌ์กฐํ™”๋œ ํ‘œํ˜„์œผ๋กœ ํŒŒ์‹ฑํ•˜๊ณ , ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ํฌ๋งทํŒ… ๋ณ€ํ™˜์„ ์ ์šฉํ•œ ํ›„ ์ˆ˜์ •๋œ ์ฝ”๋“œ๋ฅผ ๋””์Šคํฌ์— ๋‹ค์‹œ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ์•„ํ‚คํ…์ฒ˜๋Š” ๊ฒฐํ•จ ์‹๋ณ„๋ณด๋‹ค๋Š” ๊ฒฐ์ •๋ก ์  ์ถœ๋ ฅ์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์„ค์ • ๊ฐ€๋Šฅํ•œ ๊ทœ์น™์— ๊ธฐ๋ฐ˜ํ•œ ์ž๋™ ์ฝ”๋“œ ํฌ๋งทํŒ…
  • ์‚ฌ์šฉ์ž ์ •์˜ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋ผ์ธ ์ง€์›
  • CLI ์‹คํ–‰ ๋ฐ Xcode ํ†ตํ•ฉ
  • ํ”„๋ฆฌ์ปค๋ฐ‹ ๋ฐ CI ํ›… ํ˜ธํ™˜์„ฑ

SwiftFormat์€ ์˜๋ฏธ๋ก ์  ์ทจ์•ฝ์  ๋ถ„์„, ํ”„๋กœ์‹œ์ € ๊ฐ„ ๋ชจ๋ธ๋ง ๋˜๋Š” ์ข…์†์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ CVE๋ฅผ ํƒ์ง€ํ•˜๊ฑฐ๋‚˜ ๋ฐœ๊ฒฌ๋œ ์ทจ์•ฝ์ ์„ ์ทจ์•ฝ์  ๋ถ„๋ฅ˜ ์ฒด๊ณ„์— ๋งคํ•‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. SwiftFormat์˜ ์—ญํ• ์€ ๊ตฌ๋ฌธ ๋ฐ ์Šคํƒ€์ผ ์ผ๊ด€์„ฑ ์œ ์ง€์—๋งŒ ๊ตญํ•œ๋ฉ๋‹ˆ๋‹ค.

CI์—์„œ์˜ ์‹คํ–‰ ๋™์ž‘

CI ํŒŒ์ดํ”„๋ผ์ธ์—์„œ SwiftFormat์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์ฝ”๋“œ ๋ณ‘ํ•ฉ ์ „์— ์ผ๊ด€๋œ ์„œ์‹์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์‚ฌ์ „ ์ปค๋ฐ‹ ํ›…
  • ํ˜•์‹ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๋นŒ๋“œ๋ฅผ ์‹คํŒจ์‹œํ‚ค๋Š” CI ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋‹จ๊ณ„
  • ๋ธŒ๋žœ์น˜ ๊ฐ„ ์ฝ”๋“œ ํ‘œ์ค€ํ™”๋ฅผ ์œ„ํ•œ ์ž๋™ ์ˆ˜์ • ๋„๊ตฌ

SwiftFormat์€ ๊ตฌ๋ฌธ ์ˆ˜์ค€์˜ ๊ตฌ์กฐ๋งŒ์„ ๋Œ€์ƒ์œผ๋กœ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๊ทœ๋ชจ Swift ์ €์žฅ์†Œ์—์„œ๋„ ์‹คํ–‰ ์‹œ๊ฐ„์ด ์ตœ์†Œํ™”๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ง€์—ฐ ์‹œ๊ฐ„์— ๋ฏผ๊ฐํ•œ ๊ณ ๋นˆ๋„ ํŒŒ์ดํ”„๋ผ์ธ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์†Œ์Šค ํŒŒ์ผ์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฑฐ๋ฒ„๋„Œ์Šค ํ”„๋กœ์„ธ์Šค์—์„œ๋Š” ์„œ์‹ ์ˆ˜์ •์ด ์ž๋™์œผ๋กœ ์ ์šฉ๋ ์ง€ ์•„๋‹ˆ๋ฉด ๊ฐœ๋ฐœ์ž ๊ฐœ์ž…์ด ํ•„์š”ํ•œ ์ฐจ๋‹จ ์œ„๋ฐ˜ ์‚ฌํ•ญ์œผ๋กœ ๊ฐ„์ฃผํ•˜์—ฌ ๊ฐ•์ œ ์ ์šฉ๋ ์ง€๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์—… ๊ทœ๋ชจ ํ™•์žฅ์˜ ํ˜„์‹ค

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

์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ฒฐ์ •๋ก ์  ๋ฐ ์ž๋™ ์„œ์‹ ์ง€์ •
  • ๋‚ฎ์€ ์šด์˜ ๊ฐ„์ ‘๋น„
  • ๊ฐœ๋ฐœ์ž ์›Œํฌํ”Œ๋กœ์šฐ์™€์˜ ์™„๋ฒฝํ•œ ํ†ตํ•ฉ
  • ๋ผ์ด์„ ์Šค ๋น„์šฉ ์—†์Œ

์ œํ•œ ์‚ฌํ•ญ์€ ๊ตฌ์กฐ์ ์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ๊ฒฐํ•จ ๊ฐ์ง€ ์•ˆ ๋จ
  • ์ทจ์•ฝ์  ๋ชจ๋ธ๋ง ์—†์Œ
  • ๋ณต์žก์„ฑ์ด๋‚˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ ์ง€ํ‘œ ์—†์Œ
  • ๋ณด์•ˆ ๋˜๋Š” ๊ทœ์ • ์ค€์ˆ˜ ๋ถ„๋ฅ˜ ์ฒด๊ณ„์™€์˜ ํ†ตํ•ฉ์€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทœ์ œ ํ™˜๊ฒฝ์—์„œ SwiftFormat์€ ๊ฐ€๋…์„ฑ๊ณผ ๊ฒ€ํ†  ํšจ์œจ์„ฑ์„ ํ–ฅ์ƒ์‹œ์ผœ ๊ฐ„์ ‘์ ์œผ๋กœ ๊ฑฐ๋ฒ„๋„Œ์Šค์— ๊ธฐ์—ฌํ•˜์ง€๋งŒ ๋ณด์•ˆ ๋˜๋Š” ๊ฐ์‚ฌ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐ€๊ฒฉ ํŠน์ง•

SwiftFormat์€ ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šด์˜ ๋น„์šฉ์€ ํ†ตํ•ฉ ์—”์ง€๋‹ˆ์–ด๋ง, CI ๊ตฌ์„ฑ ๋ฐ ๋‚ด๋ถ€ ๊ทœ์น™ ํ‘œ์ค€ํ™” ๊ด€๋ฆฌ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ๊ตฌ์„ฑ ์š”์†Œ, ๊ตฌ๋…๋ฃŒ ๋˜๋Š” ๊ธฐ์—…์šฉ ๋ผ์ด์„ ์Šค ๋“ฑ๊ธ‰์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ตฌ์กฐ์  ํ•œ๊ณ„

SwiftFormat์€ ํฌ๋งทํŒ… ๊ณ„์ธต์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ๊ฒฝ๋กœ, ๋ฐ์ดํ„ฐ ํ๋ฆ„, ๋™์‹œ์„ฑ ์œ„ํ—˜ ๋˜๋Š” ์ข…์†์„ฑ ๋…ธ์ถœ์„ ํ‰๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ํ—˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•˜๊ฑฐ๋‚˜, ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ฝ”๋”ฉ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง€ํ•˜๊ฑฐ๋‚˜, ์•„ํ‚คํ…์ฒ˜์˜ ๊ฑด์ „์„ฑ์„ ํ‰๊ฐ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ธฐ์—… Swift ์ƒํƒœ๊ณ„์—์„œ SwiftFormat์€ ๊ธฐ๋ณธ์ ์ธ ์ฝ”๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. SwiftFormat์€ ์ผ๊ด€์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ํ˜‘์—… ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋งˆ์ฐฐ์„ ์ค„์—ฌ์ฃผ์ง€๋งŒ, ํฌ๊ด„์ ์ธ ํ’ˆ์งˆ ๋ฐ ์œ„ํ—˜ ๊ด€๋ฆฌ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๋ฉด ๋ฆฐํŒ…, ์ •์  ๋ณด์•ˆ ํ…Œ์ŠคํŠธ, ์˜์กด์„ฑ ๋ถ„์„ ์†”๋ฃจ์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Xcode ์ •์  ๋ถ„์„๊ธฐ

๊ณต์‹ ์‚ฌ์ดํŠธ: https://developer.apple.com/documentation/xcode/analyzing-your-app-s-code-for-problems

Xcode Static Analyzer๋Š” Apple์—์„œ Xcode ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ์ง์ ‘ ํ†ตํ•ฉํ•œ ๋‚ด์žฅ ์ •์  ๋ถ„์„ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ์—… ๊ทœ๋ชจ์˜ ๊ด€๋ฆฌ๋ณด๋‹ค๋Š” ์ฃผ๋กœ ๋กœ์ปฌ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ ์ดˆ๊ธฐ ๊ฒฐํ•จ ๋ฐœ๊ฒฌ์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Swift ๊ธฐ๋ฐ˜ iOS ๋ฐ macOS ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ํˆด์ฒด์ธ์— ๋‚ด์žฅ๋œ 1์ฐจ ์ง„๋‹จ ๋„๊ตฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๊ฑด์ถ• ๋ชจ๋ธ

Xcode ์ •์  ๋ถ„์„๊ธฐ๋Š” Clang ๋ฐ Swift ์ปดํŒŒ์ผ๋Ÿฌ ํˆด์ฒด์ธ์˜ ์ผ๋ถ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ถ„์„ ๊ณผ์ •์—์„œ ์‹คํ–‰ ๊ฒฝ๋กœ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒฝ๋กœ ๊ฐ์ง€ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ค๋ฅ˜๋ฅผ ํƒ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ด์ƒ, ๋…ผ๋ฆฌ ์˜ค๋ฅ˜ ๋ฐ ํŠน์ • ์•ˆ์ „ํ•˜์ง€ ์•Š์€ API ์‚ฌ์šฉ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Swift ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ๋ถ„์„๊ธฐ๋Š” ๋‹ค์Œ ์‚ฌํ•ญ์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

  • ๋„ ๊ฐ€๋Šฅ์„ฑ ๋ฐ ์„ ํƒ์  ์˜ค์šฉ
  • ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ ์˜ค๋ฅ˜
  • ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ถˆ์ผ์น˜
  • API ์˜ค์šฉ ํŒจํ„ด
  • ๋™์‹œ์„ฑ ๊ด€๋ จ ์˜ค์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค

์ด ๋ถ„์„ ๋„๊ตฌ๋Š” IDE ๋‚ด์—์„œ ๋กœ์ปฌ๋กœ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ๋ช…๋ น์ค„ ๋นŒ๋“œ๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ค‘์•™ ์ง‘์ค‘์‹ ๋Œ€์‹œ๋ณด๋“œ, ๊ธฐ์—… ์ •์ฑ… ๊ด€๋ฆฌ ๋˜๋Š” ํฌํŠธํด๋ฆฌ์˜ค ์ „์ฒด ๋ณด๊ณ  ์ฒด๊ณ„๋Š” ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋‚ด์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

CVE ์‹๋ณ„์ž๋Š” ํ•ด๋‹น ๋ชจ๋ธ์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด ๋ถ„์„๊ธฐ๋Š” ์•Œ๋ ค์ง„ ์ทจ์•ฝ์  ์‹œ๊ทธ๋‹ˆ์ฒ˜๋‚˜ ์ข…์†์„ฑ ์œ„ํ—˜์ด ์•„๋‹Œ ์ž ์žฌ์ ์ธ ์ฝ”๋”ฉ ์˜ค๋ฅ˜๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

CI์—์„œ์˜ ์‹คํ–‰ ๋™์ž‘

Xcode ์ •์  ๋ถ„์„๊ธฐ๋Š” CI ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋กœ์ปฌ ๋ถ„์„์ž…๋‹ˆ๋‹ค.

CI ํ™˜๊ฒฝ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ณ‘ํ•ฉ ์ „ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์Šค์บ”
  • ์ž๋™ํ™”๋œ ๋นŒ๋“œ ์‹œ๊ฐ„ ์ง„๋‹จ
  • ์น˜๋ช…์ ์ธ ๊ฒฐํ•จ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ฒŒ์ดํŒ…

์‹คํ–‰ ์‹œ๊ฐ„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋น ๋ฅด๋ฉฐ ๋นŒ๋“œ ์ž‘์—…๊ณผ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ ์›Œํฌํ”Œ๋กœ์— ํ†ตํ•ฉ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€์ ์ธ ๊ตฌ์„ฑ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ตœ์†Œํ™”๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ธฐ์—…์—์„œ ๋ฐœ๊ฒฌ ์‚ฌํ•ญ์„ ์ฒด๊ณ„์ ์œผ๋กœ ์ˆ˜์ง‘ํ•˜๊ณ  ์ถ”์ ํ•˜๋ ค๋ฉด CI ์ถœ๋ ฅ ํ˜•์‹ ์ง€์ • ๋ฐ ์ค‘์•™ ์ง‘์ค‘์‹ ์ง‘๊ณ„๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์—… ๊ทœ๋ชจ ํ™•์žฅ์˜ ํ˜„์‹ค

Xcode Static Analyzer๋Š” ์ ‘๊ทผ์„ฑ์ด ๋งค์šฐ ๋›ฐ์–ด๋‚˜์ง€๋งŒ ๊ธฐ์—… ๊ฑฐ๋ฒ„๋„Œ์Šค ๋ฒ”์œ„์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์šฉ๋„์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

  • ์ดˆ๊ธฐ ๊ฒฐํ•จ ์˜ˆ๋ฐฉ
  • ์ง€์—ญ ๊ฐœ๋ฐœ์ž ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„
  • ๊ธฐ๋ณธ ์‹ ๋ขฐ์„ฑ ๊ฒ€์‚ฌ

์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Swift ๊ฐœ๋ฐœ๊ณผ์˜ ๋„ค์ดํ‹ฐ๋ธŒ ํ†ตํ•ฉ
  • ์ถ”๊ฐ€ ๋ผ์ด์„ ์Šค ๋น„์šฉ ์—†์Œ
  • ๊ฒฝ๋กœ ๊ฐ์ง€ ๊ธฐ๋Šฅ
  • ๋งˆ์ฐฐ์ด ์ ์€ ์ฑ„ํƒ

๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ๊ตฌ์กฐ์  ํ•œ๊ณ„๊ฐ€ ๋ช…ํ™•ํ•ด์ง„๋‹ค:

  • ์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ ๋Œ€์‹œ๋ณด๋“œ ์—†์Œ
  • ์ €์žฅ์†Œ ๊ฐ„ ํ†ตํ•ฉ ์—†์Œ
  • ์ข…์†์„ฑ ์ทจ์•ฝ์  ๊ฐ€์‹œ์„ฑ ์—†์Œ
  • ๊ทœ์น™ ๋…ผ๋ฆฌ์— ๋Œ€ํ•œ ์ œํ•œ์ ์ธ ์‚ฌ์šฉ์ž ์ง€์ •

์—ฌ๋Ÿฌ Swift ์ €์žฅ์†Œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ๋ถ„์‚ฐ๋œ ํŒ€์„ ์šด์˜ํ•˜๋Š” ๊ธฐ์—…์˜ ๊ฒฝ์šฐ, ํฌํŠธํด๋ฆฌ์˜ค ์ˆ˜์ค€์˜ ๊ฐ๋… ๋ถ€์กฑ์œผ๋กœ ์ธํ•ด ์ „๋žต์  ๊ฑฐ๋ฒ„๋„Œ์Šค ๊ฐ€์น˜๊ฐ€ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

๊ฐ€๊ฒฉ ํŠน์ง•

Xcode Static Analyzer๋Š” Apple์˜ ๊ฐœ๋ฐœ์ž ์ƒํƒœ๊ณ„์— ์ถ”๊ฐ€ ๋น„์šฉ ์—†์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ๋ผ์ด์„ ์Šค, ๊ตฌ๋… ๋“ฑ๊ธ‰ ๋˜๋Š” ์ธํ”„๋ผ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค.

์šด์˜ ๋น„์šฉ์€ ์ฃผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•ญ๋ชฉ๊ณผ ๊ด€๋ จ๋ฉ๋‹ˆ๋‹ค.

  • ๊ฐœ๋ฐœ์ž ๊ต์œก
  • CI ํ†ตํ•ฉ ์Šคํฌ๋ฆฝํŒ…
  • ์ค‘์•™ ์ง‘์ค‘์‹ ์ถ”์ ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ถ”๊ฐ€ ๋ณด๊ณ  ๋„๊ตฌ ์ œ๊ณต

๊ตฌ์กฐ์  ํ•œ๊ณ„

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

๋˜ํ•œ, ์—ฐ๊ตฌ ๊ฒฐ๊ณผ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ง€์—ญ์ ์ด๋ฉฐ ์•„ํ‚คํ…์ฒ˜ ์ค‘์‹ฌ์„ฑ์ด๋‚˜ ๋Ÿฐํƒ€์ž„ ์ ‘๊ทผ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋งฅ๋ฝ์  ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์—…์šฉ Swift ์ƒํƒœ๊ณ„์—์„œ Xcode Static Analyzer๋Š” ๋‚ด์žฅ๋œ ์•ˆ์ •์„ฑ ๋ณดํ˜ธ ์žฅ์น˜ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ์ˆ˜์ค€์˜ ์ฝ”๋“œ ์ •ํ™•์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค์ง€๋งŒ, ๊ธฐ์—… ์ˆ˜์ค€์˜ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๋ฐ ์œ„ํ—˜ ์ œ์–ด๋ฅผ ๋‹ฌ์„ฑํ•˜๋ ค๋ฉด ์ค‘์•™ ์ง‘์ค‘์‹ ์ •์  ๋ถ„์„ ๋ฐ ๋ณด์•ˆ ํ”Œ๋žซํผ์œผ๋กœ ๋ณด์™„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Swift ์ •์  ์ฝ”๋“œ ๋ถ„์„ ํ”Œ๋žซํผ ๋น„๊ต ๋ถ„์„

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ Swift์šฉ ์ •์  ๋ถ„์„ ์†”๋ฃจ์…˜์„ ์„ ํƒํ•  ๋•Œ๋Š” ์•„ํ‚คํ…์ฒ˜์˜ ๊นŠ์ด, ๊ฑฐ๋ฒ„๋„Œ์Šค ๊ธฐ๋Šฅ, CI ํ†ตํ•ฉ ๋ชจ๋ธ ๋ฐ ๊ตฌ์กฐ์  ์ œ์•ฝ ์กฐ๊ฑด์„ ํ‰๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋„๊ตฌ๋“ค์€ ๊ฐ„๋‹จํ•œ ํฌ๋งทํŒ… ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ถ€ํ„ฐ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ทœ๋ชจ์˜ ๋ณด์•ˆ ๊ฑฐ๋ฒ„๋„Œ์Šค ํ”Œ๋žซํผ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋งค์šฐ ๋‹ค์–‘ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋น„๊ต์—์„œ๋Š” ํ‘œ๋ฉด์ ์ธ ๊ธฐ๋Šฅ ๋ชฉ๋ก๋ณด๋‹ค๋Š” ์•„ํ‚คํ…์ฒ˜์  ์ฐจ์ด์ , ์œ„ํ—˜ ๋ชจ๋ธ๋ง ์ ‘๊ทผ ๋ฐฉ์‹, ์‹คํ–‰ ํŠน์„ฑ ๋ฐ ์šด์˜ ํ™•์žฅ์„ฑ ๊ณ ๋ ค ์‚ฌํ•ญ์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

์ˆ˜๋‹จ์ฃผ์š” ์ดˆ์ ๊ฑด์ถ• ๋ชจ๋ธCI ํ†ตํ•ฉ ๋ชจ๋ธCVE/์ข…์†์„ฑ ์ฒ˜๋ฆฌ๊ธฐ์—… ์ง€๋ฐฐ๊ตฌ์กฐ ๊ฐ•์ ๊ตฌ์กฐ์  ํ•œ๊ณ„
์Šค์œ„ํ”„ํŠธ๋ฆฐํŠธ์Šคํƒ€์ผ ๊ฐ•์ œ ๋ฐ ๊ธฐ๋ณธ ๊ทœ์น™ ๊ฒ€์‚ฌ์„ค์ • ๊ฐ€๋Šฅํ•œ ๊ทœ์น™ ์—”์ง„์„ ๊ฐ–์ถ˜ ๋กœ์ปฌ ์†Œ์Šค ๋ ˆ๋ฒจ ๋ฆฐํ„ฐCLI ์‹คํ–‰, ๋นŒ๋“œ ๋‹จ๊ณ„ ํ†ตํ•ฉ, ๋น ๋ฅธ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ํ™•์ธCVE ๋งคํ•‘ ์—†์Œ, ์ข…์†์„ฑ ๋ถ„์„ ์—†์Œ๋‚ฎ์Œ; ๊ฑฐ๋ฒ„๋„Œ์Šค๋ฅผ ์œ„ํ•ด ์™ธ๋ถ€ ์ง‘๊ณ„๊ฐ€ ํ•„์š”ํ•จ์ ˆ์ฐจ ๊ฐ„ ๋ชจ๋ธ๋ง ์—†์Œ, ์œ„ํ—˜ ์šฐ์„ ์ˆœ์œ„ ์ง€์ • ์—†์Œ, ํฌํŠธํด๋ฆฌ์˜ค ๋Œ€์‹œ๋ณด๋“œ ์—†์Œ
SwiftFormat์ž๋™ ์ฝ”๋“œ ์„œ์‹ ์ง€์ •์†Œ์Šค ๊ฐ„ ๋ณ€ํ™˜ ์—”์ง„์ปค๋ฐ‹ ์ „ ํ›…, CI ํฌ๋งทํŒ… ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์—†์Œ์ตœ์†Œํ•œ์˜ ์œ„์ƒ ๊ด€๋ฆฌ๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.๊ฒฐํ•จ ํƒ์ง€ ๋ถˆ๊ฐ€, ์ทจ์•ฝ์  ๋ถ„์„ ๋ถˆ๊ฐ€
Xcode ์ •์  ๋ถ„์„๊ธฐ์ปดํŒŒ์ผ๋Ÿฌ ํ†ตํ•ฉ ๊ฒฐํ•จ ๊ฐ์ง€IDE ํ†ตํ•ฉ ๊ฒฝ๋กœ ๋ฏผ๊ฐ ๋ถ„์„๋นŒ๋“œ ์‹œ๊ฐ„ ์ง„๋‹จ, ์„ ํƒ์  CI ํ˜ธ์ถœ์—†์Œ์ œํ•œ์ ์ž„; ์ค‘์•™ ์ง‘์ค‘์‹ ๋ณด๊ณ  ์‹œ์Šคํ…œ ์—†์ŒํฌํŠธํด๋ฆฌ์˜ค ๊ฐ€์‹œ์„ฑ ์—†์Œ, ์ข…์†์„ฑ ์ถ”์  ๋ถˆ๊ฐ€
์†Œ๋‚˜ํ๋ธŒ์ค‘์•™ ์ง‘์ค‘์‹ ํ’ˆ์งˆ ๊ด€๋ฆฌ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ๋‹ค๊ตญ์–ด ๋ถ„์„ ํ”Œ๋žซํผ์Šค์บ๋„ˆ ๊ธฐ๋ฐ˜ CI ์—…๋กœ๋“œ(ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ ํฌํ•จ)Swift ์ฝ”๋“œ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ CVE ๋งคํ•‘ ๊ธฐ๋Šฅ์ด ์—†์œผ๋ฏ€๋กœ SCA ํ†ตํ•ฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.ํ’ˆ์งˆ ์ง€ํ‘œ ๋ฐ ์ •์ฑ… ์‹œํ–‰ ์ธก๋ฉด์—์„œ ๋†’์€ ์ ์ˆ˜๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.์ œํ•œ์ ์ธ ์‹ฌ์ธต ์˜ค์—ผ ๋ชจ๋ธ๋ง, ๋‚ด์žฅ๋œ ์ข…์†์„ฑ CVE ๋„๋‹ฌ ๊ฐ€๋Šฅ์„ฑ ์—†์Œ
์ฒดํฌ๋งˆํฌ์Šค SAST์‹ฌ์ธต์ ์ธ ๋ณด์•ˆ ์ทจ์•ฝ์  ํƒ์ง€์ค‘์•™ ์ง‘์ค‘์‹ ์ ˆ์ฐจ ๊ฐ„ ์ •์  ๋ถ„์„ ์—”์ง„CI ํŠธ๋ฆฌ๊ฑฐ ๋ฐฉ์‹์˜ ์ •์ฑ… ๊ฒŒ์ดํŒ…์„ ์ด์šฉํ•œ ์ „์ฒด ๋ฐ ์ฆ๋ถ„ ์Šค์บ”CWE์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. ์ข…์†์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.๋†’์Œ; ๊ทœ์ • ์ค€์ˆ˜ ์ค‘์‹ฌ์˜ ๋Œ€์‹œ๋ณด๋“œ ๋ฐ ์—ญํ•  ์ œ์–ดCI ์ง€์—ฐ ์‹œ๊ฐ„ ์ฆ๊ฐ€, ์ธํ”„๋ผ ์˜ค๋ฒ„ํ—ค๋“œ ์ฆ๊ฐ€
SCA๋ฅผ ๊ฐ•ํ™”ํ•˜์„ธ์š”๊ฐ์‚ฌ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ SAST์ค‘์•™ ์ง‘์ค‘์‹ ๋ณด์•ˆ ์„ผํ„ฐ๋ฅผ ๊ฐ–์ถ˜ ์˜๋ฏธ ๋ชจ๋ธ๋ง ์—”์ง„CLI ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ธฐ๋ฐ˜ CI ํ†ตํ•ฉCWE ์ •๋ ฌ; ๋ณด์™„ ๋„๊ตฌ๋ฅผ ํ†ตํ•œ CVE๋งค์šฐ ๋†’์Œ; ๊ฐ์‚ฌ ์ถ”์  ๋ฐ ๊ฑฐ๋ฒ„๋„Œ์Šค ์›Œํฌํ”Œ๋กœ๋ณต์žกํ•œ ๊ตฌ์„ฑ, ์ƒ๋‹นํ•œ ์šด์˜ ๋น„์šฉ
์ปค๋ฒ„๋ฆฌํ‹ฐ๊ตฌ์กฐ์  ๊ฒฐํ•จ ํƒ์ง€ ๋ฐ ์‹ ๋ขฐ์„ฑ๋นŒ๋“œ ์บก์ฒ˜ ์˜๋ฏธ ๋ถ„์„ ํ”Œ๋žซํผ์ ์ง„์  CI ์Šค์บ” ๋ฐ ์ „์ฒด CI ์Šค์บ”CWE ํ‘œ์ค€ ์ค€์ˆ˜; ๋„ค์ดํ‹ฐ๋ธŒ ์ข…์†์„ฑ ์—†์Œ, CVE ๊ด€๋ฆฌ ๊ธฐ๋Šฅ ์ œ๊ณต๊ฒฐํ•จ ์ˆ˜๋ช…์ฃผ๊ธฐ ์ถ”์ ์— ๋งค์šฐ ์œ ์šฉํ•จ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ ํŠนํ™” ๋ณด์•ˆ ์‹ฌ๋„ ๊ฐ์†Œ
์…ˆ๊ทธ๋ ™ํŒจํ„ด ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ๋ฐ ์ •์ฑ… ์‹œํ–‰์‚ฌ์šฉ์ž ์ •์˜ ๊ทœ์น™ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” AST ํŒจํ„ด ๋งค์นญ ์—”์ง„๋น ๋ฅธ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ์Šค์บ”, DevSecOps ํ†ตํ•ฉ๊ทœ์น™ ํŒฉ์„ ํ†ตํ•œ CWE ์ •๋ ฌ; CVE ์ถ”์  ๊ธฐ๋Šฅ์€ ๋‚ด์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.๊ทœ์น™ ๊ด€๋ฆฌ ์„ฑ์ˆ™๋„์— ๋”ฐ๋ผ ์ค‘๊ฐ„์—์„œ ๋†’์Œ์ œํ•œ์ ์ธ ์‹ฌ์ธต ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ชจ๋ธ๋ง
GitHub ๊ณ ๊ธ‰ ๋ณด์•ˆ์ฝ”๋“œ ๋ฐ ์ข…์†์„ฑ ๋ณด์•ˆ ํ†ตํ•ฉ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ†ตํ•ฉ์„ ํ†ตํ•œ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ CodeQL ์˜๋ฏธ ๋ถ„์„GitHub Actions ๊ธฐ๋ฐ˜ ์Šค์บ”, ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ ๊ฐ•์ œ ์ ์šฉ์ข…์†์„ฑ์— ๋Œ€ํ•œ ๋„ค์ดํ‹ฐ๋ธŒ CVE ๋งคํ•‘GitHub ์ค‘์‹ฌ ๊ธฐ์—… ๋‚ด์—์„œ ๋†’์€ ์œ„์น˜GitHub์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ์ €์žฅ์†Œ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.
NowSecure๋ชจ๋ฐ”์ผ ๋ณด์•ˆ ๊ฒ€์ฆํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ์†Œ์Šค ๋ฐ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ถ„์„ ํ”Œ๋žซํผ๋ฆด๋ฆฌ์Šค ๋‹จ๊ณ„ CI ํ†ตํ•ฉ๋ชจ๋ฐ”์ผ ์ข…์†์„ฑ์— ๋Œ€ํ•œ CVE ๋งคํ•‘๋ชจ๋ฐ”์ผ ๊ทœ์ • ์ค€์ˆ˜ ํ™˜๊ฒฝ์— ์ ํ•ฉํ•จ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ง‘์ค‘

ํŠนํ™”๋˜์–ด ์žˆ์ง€๋งŒ ์ž˜ ์•Œ๋ ค์ง€์ง€ ์•Š์€ Swift ์ •์  ๋ถ„์„ ๋ฐ ํ’ˆ์งˆ ๋„๊ตฌ

์ฃผ๋ฅ˜ ํ”Œ๋žซํผ์ด ๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ ๋…ผ์˜์˜ ์ค‘์‹ฌ์„ ์ฐจ์ง€ํ•˜๋Š” ๋ฐ˜๋ฉด, Swift์˜ ํ’ˆ์งˆ, ๋ณด์•ˆ ๋˜๋Š” ์•„ํ‚คํ…์ฒ˜์™€ ๊ด€๋ จ๋œ ํŠน์ • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ „๋ฌธํ™”๋œ ๋„๊ตฌ๋“ค๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์†”๋ฃจ์…˜๋“ค์€ ํฌ๊ด„์ ์ธ ๊ฑฐ๋ฒ„๋„Œ์Šค ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์œ ์šฉํ•œ ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ฃผ์œ„
    Periphery๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ, ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์„ ์–ธ, ์ค‘๋ณต ์‹ฌ๋ณผ์„ ํƒ์ง€ํ•˜๋„๋ก ์„ค๊ณ„๋œ Swift ๊ธฐ๋ฐ˜ ์ •์  ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Periphery๋Š” ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‹๋ณ„ํ•˜์—ฌ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋น„๋Œ€ํ™”๋ฅผ ์ค„์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์ทจ์•ฝ์  ํƒ์ง€๋‚˜ CVE ๋งคํ•‘ ๊ธฐ๋Šฅ์€ ์ œ๊ณตํ•˜์ง€ ์•Š์ง€๋งŒ, ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์ž”์—ฌ ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ๋‚จ๋Š” ๋Œ€๊ทœ๋ชจ Swift ํ”„๋กœ์ ํŠธ์—์„œ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. Periphery์˜ ๊ฐ€์น˜๋Š” ๋ณด์•ˆ ๊ฐ•ํ™”๋ณด๋‹ค๋Š” ํ˜„๋Œ€ํ™” ์ค€๋น„ ํƒœ์„ธ๋ฅผ ๊ฐ–์ถ”๊ณ  ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ค„์ด๋Š” ๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ถ”๋ก (๋ฉ”ํƒ€)
    Infer๋Š” Meta์—์„œ ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ ์†Œ์Šค ์ •์  ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Swift๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ๊ธฐํ˜ธ ์‹คํ–‰ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ null ์—ญ์ฐธ์กฐ, ๋ฆฌ์†Œ์Šค ๋ˆ„์ˆ˜, ๋™์‹œ์„ฑ ๊ด€๋ จ ๋ฌธ์ œ ํƒ์ง€์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. Infer๋Š” ํฌ๊ด„์ ์ธ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ฑฐ๋ฒ„๋„Œ์Šค ํ”Œ๋žซํผ์œผ๋กœ ์ž๋ฆฌ๋งค๊น€ํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ, ๊ธฐ๋ณธ์ ์ธ ๋ฆฐํ„ฐ๋ณด๋‹ค ์‹ฌ์ธต์ ์ธ ๊ฒฐํ•จ ๋ชจ๋ธ๋ง ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์ข…์†์„ฑ CVE ์ถ”์  ๊ธฐ๋Šฅ์€ ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋Œ€๊ทœ๋ชจ ์กฐ์ง์—์„œ CI ํ™•์žฅ์„ ์œ„ํ•ด์„œ๋Š” ํ†ตํ•ฉ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • MobSF(๋ชจ๋ฐ”์ผ ๋ณด์•ˆ ํ”„๋ ˆ์ž„์›Œํฌ)
    MobSF๋Š” Swift ๊ธฐ๋ฐ˜ iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์†Œ์Šค ์ฝ”๋“œ ๋ฐ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ˆ˜์ค€์—์„œ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ ์†Œ์Šค ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ •์  ๋ฐ ๋™์  ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๊ตฌ์„ฑ์ด๋‚˜ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ๋…ธ์ถœ ํŒจํ„ด์„ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MobSF๋Š” ์—ฐ๊ตฌ ์ค‘์‹ฌ์˜ ๋ณด์•ˆ ํŒ€์ด๋‚˜ ์†Œ๊ทœ๋ชจ ๊ธฐ์—…์— ์ ํ•ฉํ•˜์ง€๋งŒ, ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ ๋Œ€์‹œ๋ณด๋“œ ๋ฐ ์›Œํฌํ”Œ๋กœ ์ž๋™ํ™” ๊ธฐ๋Šฅ์€ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • OCLint
    OCLint๋Š” ์›๋ž˜ Objective-C ๋ฐ C ๊ณ„์—ด ์–ธ์–ด๋ฅผ ์œ„ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ์ง€๋งŒ, Swift๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ˜ผํ•ฉ ์–ธ์–ด ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์ ์šฉ ๊ฐ€๋Šฅํ•œ ์ •์  ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ์Šค๋ฉœ, ๋ณต์žก๋„ ์ง€ํ‘œ, ์œ ์ง€๋ณด์ˆ˜์„ฑ ์ง€ํ‘œ์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. OCLint๋Š” ๋ณด์•ˆ์— ์ดˆ์ ์„ ๋งž์ถ”์ง€ ์•Š์œผ๋ฉฐ ์ทจ์•ฝ์  ๋ถ„๋ฅ˜ ์ฒด๊ณ„์™€์˜ ์—ฐ๊ด€์„ฑ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. OCLint์˜ ๊ฐ•์ ์€ Objective-C์™€ Swift๋ฅผ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ํ˜„๋Œ€ํ™” ํ™˜๊ฒฝ์—์„œ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ธก์ •ํ•˜๋Š” ๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์ธ์ € ์Šค์œ„ํ”„ํŠธ
    Danger Swift๋Š” CI ํŒŒ์ดํ”„๋ผ์ธ ๋‚ด์—์„œ ์ฝ”๋“œ ๊ฒ€ํ†  ์ •์ฑ… ์‹œํ–‰์„ ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๋ˆ„๋ฝ, ๋ฌธ์„œ ๋ถ€์กฑ ๋˜๋Š” ์ •์ฑ… ์œ„๋ฐ˜๊ณผ ๊ฐ™์€ ์‚ฌ์ „ ์ •์˜๋œ ๊ทœ์น™์— ๋”ฐ๋ผ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜๋ฏธ๋ก ์  ์ทจ์•ฝ์  ๋ถ„์„์€ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์ง€๋งŒ ์›Œํฌํ”Œ๋กœ์šฐ ๊ด€๋ฆฌ๋ฅผ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์กฐํ™”๋œ ์ฝ”๋“œ ๊ฒ€ํ†  ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘์‹œํ•˜๋Š” ๊ธฐ์—…์—์„œ Danger Swift๋Š” ์ ˆ์ฐจ์  ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ๋ฅผ ์‹œํ–‰ํ•จ์œผ๋กœ์จ ์ •์  ๋ถ„์„์„ ๋ณด์™„ํ•ฉ๋‹ˆ๋‹ค.
  • ์•ฑ์Šค์œ•(๊ฐ€๋“œ์Šคํ€˜์–ด)
    AppSweep์€ Swift ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์ •์  ๊ฒ€์‚ฌ ๋ฐ ํƒ€์‚ฌ SDK ์œ„ํ—˜ ๋ถ„์„์„ ํฌํ•จํ•œ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ๋ถ„์„ ์ „๋ฌธ ๊ธฐ์—…์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์— ํŠนํ™”๋œ ์ทจ์•ฝ์ ๊ณผ ๊ทœ์ • ์ค€์ˆ˜ ์ œ์–ด์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ๋‹ค๊ตญ์–ด SAST ์—”์ง„๋ณด๋‹ค๋Š” ๋ฒ”์œ„๊ฐ€ ์ข์ง€๋งŒ, ์œ„ํ—˜๋„๊ฐ€ ๋†’์€ iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ๊ธฐ์—…์—๊ฒŒ๋Š” ์œ ์šฉํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
  • CodeClimate(Swift ์ง€์›)
    CodeClimate๋Š” Swift ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋Š” ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋ฐ ์ฝ”๋“œ ํ’ˆ์งˆ ๋ถ„์„ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‹ฌ์ธต์ ์ธ ์ทจ์•ฝ์  ํƒ์ง€๋ณด๋‹ค๋Š” ๊ธฐ์ˆ  ๋ถ€์ฑ„ ์ถ”์ , ๋ณต์žก์„ฑ ์ง€ํ‘œ, ํ’ˆ์งˆ ์ถ”์„ธ ๋ถ„์„์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. CodeClimate๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์—…๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ทœ์ • ์ค€์ˆ˜์— ๊ธฐ๋ฐ˜ํ•œ ๋ณด์•ˆ ๊ฐ•ํ™”๋ณด๋‹ค๋Š” ์—”์ง€๋‹ˆ์–ด๋ง ์ƒ์‚ฐ์„ฑ ์ง€ํ‘œ๋ฅผ ์šฐ์„ ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • DeepSource (Swift ๋ฒ ํƒ€ ์ง€์›)
    DeepSource๋Š” ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ†ตํ•ด ์ž๋™ํ™”๋œ ์ฝ”๋“œ ๊ฒ€ํ†  ๋ฐ ์ •์  ๋ถ„์„ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Swift ์ง€์› ๊ธฐ๋Šฅ์€ ์ง€์†์ ์œผ๋กœ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ๋ฐœ์ž ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„์™€ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ์ฃผ์„ ๊ธฐ๋Šฅ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์ˆ˜์ค€์˜ SAST(์‹œ์Šคํ…œ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ) ๋˜๋Š” CVE(์ƒ์—…์  ์œ„ํ—˜ ์š”์†Œ) ์ข…์†์„ฑ ๋ชจ๋ธ๋ง์€ ์ œ๊ณตํ•˜์ง€ ์•Š์ง€๋งŒ, ๊ฐ„ํŽธํ•œ ํ’ˆ์งˆ ์ž๋™ํ™” ๊ธฐ๋Šฅ์„ ์ฐพ๋Š” ์กฐ์ง์— ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ShiftLeft Ocular (Swift ์ ์šฉ ๋ฒ”์œ„ ์ œํ•œ์ )
    ShiftLeft ํ”Œ๋žซํผ์€ ์ฝ”๋“œ ์†์„ฑ ๊ทธ๋ž˜ํ”„ ๋ชจ๋ธ๋ง๊ณผ ๋ณด์•ˆ ๋ถ„์„์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. Swift ์ง€์›์€ Java๋‚˜ JavaScript์— ๋น„ํ•ด ์ œํ•œ์ ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ฐ˜ ์ทจ์•ฝ์  ์ถ”๋ก ์ด๋ผ๋Š” ๊ฐœ๋…์  ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ฃผ๋ชฉํ•  ๋งŒํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ํŒจํ„ด ๊ธฐ๋ฐ˜ ๋„๊ตฌ๋ณด๋‹ค ๋” ์‹ฌ์ธต์ ์ธ ๊ตฌ์กฐ์  ๋ถ„์„์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์šด์˜ ์„ฑ์ˆ™๋„๋Š” ํ”Œ๋žซํผ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
  • Swift ์ƒํƒœ๊ณ„์— ๋งž๊ฒŒ ์กฐ์ •๋œ Retire.js ์Šคํƒ€์ผ์˜ ์˜์กด์„ฑ ์Šค์บ๋„ˆ
    ์ผ๋ถ€ ๊ธฐ์—…์—์„œ๋Š” ์Šคํฌ๋ฆฝํŠธ๋‚˜ ๊ฒฝ๋Ÿ‰ ์Šค์บ” ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Swift Package Manager ์•„ํ‹ฐํŒฉํŠธ์— ๋Œ€ํ•œ ๋งž์ถคํ˜• ์ข…์†์„ฑ ๋ชจ๋‹ˆํ„ฐ๋ง ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์†”๋ฃจ์…˜์€ ๊ณต๊ฐœ ์ทจ์•ฝ์  ํ”ผ๋“œ๋ฅผ ํ†ตํ•ด ์ทจ์•ฝํ•œ ํŒจํ‚ค์ง€๋ฅผ ์‹๋ณ„ํ•˜์ง€๋งŒ, ํ†ตํ•ฉ๋œ ์ ‘๊ทผ์„ฑ ๋ถ„์„์ด๋‚˜ ๊ธฐ์—…์šฉ ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ โ€‹โ€‹๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์™„์ „ํ•œ SCA ํ”Œ๋žซํผ์ด ์—†๋Š” ํ™˜๊ฒฝ์—์„œ ์ž„์‹œ ๋ฐฉํŽธ์œผ๋กœ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๊ธฐ์—…์€ Swift ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ์š”?

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

๋‹ค์Œ ์ฐจ์›๋“ค์€ ๊ตฌ์กฐํ™”๋œ ๊ธฐ์—… ํ‰๊ฐ€ ๋ชจ๋ธ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ์ˆ˜๋ช…์ฃผ๊ธฐ ์ „๋ฐ˜์— ๊ฑธ์นœ ๊ธฐ๋Šฅ์  ๋ฒ”์œ„

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

SwiftLint๋‚˜ Xcode Static Analyzer์™€ ๊ฐ™์€ ๊ฐœ๋ฐœ์ž ์ค‘์‹ฌ ๋„๊ตฌ๋Š” ์ดˆ๊ธฐ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ์ค‘์•™ ์ง‘์ค‘์‹ ์ •์ฑ… ์ถ”์  ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ SAST ํ”Œ๋žซํผ์€ ์‹ฌ์ธต์ ์ธ ์ทจ์•ฝ์  ๋ชจ๋ธ๋ง์„ ์ œ๊ณตํ•˜์ง€๋งŒ CI ์ง€์—ฐ์„ ์œ ๋ฐœํ•˜์—ฌ ๊ฐœ๋ฐœ์ž ์ƒ์‚ฐ์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋„๊ตฌ ์„ ํƒ ์‹œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์ˆ˜๋ช…์ฃผ๊ธฐ์˜ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„์—์„œ ๊ฐ ๋„๊ตฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ ๋ณด์™„์ ์ธ์ง€ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ์ œํ’ˆ ์ˆ˜๋ช…์ฃผ๊ธฐ ํ‰๊ฐ€ ์งˆ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํ•ด๋‹น ๋„๊ตฌ๋Š” ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ๊ฒŒ์ดํŒ…์— ์ ํ•ฉํ•œ ๋น ๋ฅธ ์ฆ๋ถ„ ๋ถ„์„ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๊นŒ?
  • ๋ฆด๋ฆฌ์Šค ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ์˜ˆ์•ฝ๋œ ์ „์ฒด ๊ฒ€์‚ฌ๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
  • ์ƒˆ๋กœ์šด ์ฝ”๋“œ ๊ด€๋ จ ๋ฐœ๊ฒฌ ์‚ฌํ•ญ๊ณผ ๊ธฐ์กด ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
  • ํ–ฅํ›„ ํšŒ๊ท€ ๋ถ„์„์„ ๊ฐ€๋ฆฌ์ง€ ์•Š๊ณ  ๊ธฐ์ค€์„  ์–ต์ œ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋ฐ”์ผ ๋ฆด๋ฆฌ์Šค ์ฃผ๊ธฐ๊ฐ€ ๋น ๋ฅธ ๊ธฐ์—…์€ ๊ฒ€์‚ฌ ๊นŠ์ด์™€ ์‹คํ–‰ ์‹œ๊ฐ„ ์‚ฌ์ด์˜ ๊ท ํ˜•์„ ๋งž์ถฐ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ณ ์„ฑ๋Šฅ ์—”์ง„์€ ์•ผ๊ฐ„ ๋นŒ๋“œ ๋˜๋Š” ๋ฆด๋ฆฌ์Šค ๋‹จ๊ณ„ ๊ฒ€์ฆ์— ์‚ฌ์šฉํ•˜๊ณ , ๊ฒฝ๋Ÿ‰ ๊ทœ์น™ ์—”์ง„์€ ๋ชจ๋“  ์ปค๋ฐ‹์—์„œ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋ช… ์ฃผ๊ธฐ ๋‹จ๊ณ„ ์ „๋ฐ˜์— ๊ฑธ์นœ ์•„ํ‚คํ…์ฒ˜ ์ผ๊ด€์„ฑ์€ ๋ณด์•ˆ์„ ์œ ์ง€ํ•˜๋ฉด์„œ CI ํŒŒ์ดํ”„๋ผ์ธ์˜ ๊ณผ๋ถ€ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์‚ฐ์—…๊ณผ ๊ทœ์ œ์˜ ์กฐํ™”

๊ธˆ์œต, ์˜๋ฃŒ, ์ค‘์š” ์ธํ”„๋ผ์™€ ๊ฐ™์€ ๊ทœ์ œ ์‚ฐ์—…์—์„œ๋Š” ์ •์  ๋ถ„์„ ๋„๊ตฌ๊ฐ€ ๊ฐ์‚ฌ ์ถ”์ ์„ฑ๊ณผ ๊ตฌ์กฐํ™”๋œ ์ทจ์•ฝ์  ๋ณด๊ณ ๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์‹ฌ๊ฐ๋„ ๋ถ„๋ฅ˜๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ์—…์€ CWE์™€ ๊ฐ™์€ ๊ณต์ธ๋œ ๋ถ„๋ฅ˜ ์ฒด๊ณ„์™€์˜ ๋งคํ•‘ ๋ฐ ๊ธฐ์—… IT ์œ„ํ—˜ ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ •์˜๋œ ๊ฑฐ๋ฒ„๋„Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ์—ฐ๊ณ„๋ฅผ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.

ํ‰๊ฐ€ ์‹œ ๋‹ค์Œ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ํ•ด๋‹น ๋„๊ตฌ๋Š” ์—ญํ•  ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด ๋ฐ ๊ฐ์‚ฌ ๋กœ๊ทธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๊นŒ?
  • ์กฐ์‚ฌ ๊ฒฐ๊ณผ๋ฅผ ๊ทœ์ • ์ค€์ˆ˜ ๋ฌธ์„œ ์ž‘์„ฑ์„ ์œ„ํ•ด ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
  • ํŒ€ ๊ฐ„ ๋ฌธ์ œ ํ•ด๊ฒฐ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
  • ์‚ฌ๊ณ  ๊ด€๋ฆฌ ๋ฐ ๊ฑฐ๋ฒ„๋„Œ์Šค ํ”Œ๋žซํผ๊ณผ ์—ฐ๋™๋ฉ๋‹ˆ๊นŒ?

๊ณต์šฉ ์•ฑ ์Šคํ† ์–ด๋ฅผ ํ†ตํ•ด ๋ฐฐํฌ๋˜๋Š” ๋ชจ๋ฐ”์ผ ์ „์šฉ Swift ์•ฑ์€ ๋ชจ๋ฐ”์ผ ๋ณด์•ˆ ํ‘œ์ค€์— ๋Œ€ํ•œ ๊ทœ์ • ์ค€์ˆ˜ ๊ฒ€์ฆ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. NowSecure์™€ ๊ฐ™์€ ํ”Œ๋žซํผ์€ ์ด๋Ÿฌํ•œ ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š” ๋ฐ˜๋ฉด, ๋ณด๋‹ค ๊ด‘๋ฒ”์œ„ํ•œ SAST ์—”์ง„์€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•„ํ‚คํ…์ฒ˜ ์ „๋ฐ˜์— ๊ฑธ์ณ ์–ธ์–ด ๊ฐ„ ๊ฑฐ๋ฒ„๋„Œ์Šค๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

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

ํ’ˆ์งˆ ์ง€ํ‘œ ๋ฐ ์‹ ํ˜ธ ๋Œ€ ์žก์Œ๋น„ ํ‰๊ฐ€

์ •์  ๋ถ„์„ ํ”Œ๋žซํผ์˜ ํšจ๊ณผ๋Š” ์‹ ํ˜ธ์˜ ์ •ํ™•๋„์— ํฌ๊ฒŒ ์ขŒ์šฐ๋ฉ๋‹ˆ๋‹ค. ๋†’์€ ์˜คํƒ๋ฅ ์€ ๊ฐœ๋ฐœ์ž์˜ ์‹ ๋ขฐ๋ฅผ ๋–จ์–ด๋œจ๋ฆฌ๊ณ  ๊ทœ์ œ ์ค€์ˆ˜ ๊ธฐ๊ฐ•์„ ์•ฝํ™”์‹œํ‚ต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ์ง€๋‚˜์น˜๊ฒŒ ์ข์€ ๊ทœ์น™ ์ง‘ํ•ฉ์€ ์‚ฌ๊ฐ์ง€๋Œ€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‰๊ฐ€์— ์‚ฌ์šฉ๋˜๋Š” ํ’ˆ์งˆ ์ง€ํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์‹ค์ œ ์ฝ”๋“œ ๋ณต์žก์„ฑ ์กฐ๊ฑด์—์„œ์˜ ์˜คํƒ๋ฅ 
  • ์œ„ํ—˜์„ ์˜๊ตฌ์ ์œผ๋กœ ์ˆจ๊ธฐ์ง€ ์•Š๊ณ  ์กฐ์‚ฌ ๊ฒฐ๊ณผ๋ฅผ ์–ต์ œํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ
  • ๋‚ด๋ถ€ ์ •์ฑ…์— ๋งž์ถฐ ์‚ฌ์šฉ์ž ์ง€์ • ๊ทœ์น™ ์ž‘์„ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์Šคํƒ€์ผ์ ์ธ ๋ฌธ์ œ์™€ ๋ณด์•ˆ์ƒ ์ค‘์š”ํ•œ ๊ฒฐํ•จ์˜ ๊ตฌ๋ถ„

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

์‹ ํ˜ธ ๋Œ€ ์žก์Œ๋น„๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ์†๋„์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์ฒด๊ณ„์ ์ธ ๊ฑฐ๋ฒ„๋„Œ์Šค ๋ชจ๋ธ์€ ์ •์ ์ธ ๋ฐœ๊ฒฌ ์‚ฌํ•ญ์„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ํ•ญ๋ชฉ์ด ์•„๋‹Œ ์œ„ํ—˜ ์ง€ํ‘œ๋กœ ๊ฐ„์ฃผํ•˜์—ฌ ๊ธฐ์—… ์œ„ํ—˜ ๊ด€๋ฆฌ ๊ด€ํ–‰์—์„œ ๋…ผ์˜๋˜๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ์œ„ํ—˜ ๊ธฐ๋ฐ˜ ์šฐ์„ ์ˆœ์œ„ ์ง€์ • ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ์ผ์น˜์‹œํ‚ต๋‹ˆ๋‹ค.

์˜ˆ์‚ฐ ๋ฐ ์šด์˜ ํ™•์žฅ์„ฑ

ํˆด ๋ผ์ด์„ ์Šค ๋น„์šฉ์€ ์ „์ฒด ์†Œ์œ  ๋น„์šฉ์˜ ํ•œ ๊ตฌ์„ฑ ์š”์†Œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ธฐ์—…์€ ์ธํ”„๋ผ ์š”๊ตฌ ์‚ฌํ•ญ, CI ์ปดํ“จํŒ… ์˜ค๋ฒ„ํ—ค๋“œ, ๊ทœ์น™ ์กฐ์ • ๋…ธ๋ ฅ ๋ฐ ์ง€์†์ ์ธ ๋ฌธ์ œ ํ•ด๊ฒฐ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋ชจ๋‘ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์šด์˜ ํ™•์žฅ์„ฑ ๊ณ ๋ ค ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํ•ด๋‹น ๋„๊ตฌ๋Š” ์ „์šฉ ์„œ๋ฒ„ ์ธํ”„๋ผ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?
  • ํด๋ผ์šฐ๋“œ ๋ฐฐํฌ๋Š” ๋ฐ์ดํ„ฐ ์ฃผ๊ถŒ ์š”๊ฑด๊ณผ ํ˜ธํ™˜๋ฉ๋‹ˆ๊นŒ?
  • ์Šค์บ” ์‹œ๊ฐ„์€ ์ €์žฅ์†Œ ์ฆ๊ฐ€์— ๋”ฐ๋ผ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”ํ•ฉ๋‹ˆ๊นŒ?
  • ๊ทœ์น™ ๊ตฌ์„ฑ์„ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด ์ „๋ฌธ ๋ณด์•ˆ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ํ•„์š”ํ•œ๊ฐ€์š”?

์—ฌ๋Ÿฌ ํŒ€์— ๊ฑธ์ณ ์žˆ๋Š” ๋Œ€๊ทœ๋ชจ Swift ํฌํŠธํด๋ฆฌ์˜ค๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ๊ตฌ์„ฑ ์ œ์–ด๋ฅผ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ๋ฒ„๋„Œ์Šค ๊ทœ์œจ์ด ์—†์œผ๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ๊ทœ์น™ ์„ธํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ผ๊ด€์„ฑ์ด ์ €ํ•˜๋˜๊ณ  ํŒ€ ๊ฐ„ ๋น„๊ต ๊ฐ€๋Šฅ์„ฑ์ด ์•ฝํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

๊ธฐ์—… ๋ชฉํ‘œ๋ณ„ ์ฃผ์š” ์ถ”์ฒœ ์ œํ’ˆ

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Swift ํ™˜๊ฒฝ์—์„œ๋Š” ๋‹จ์ผ ์ •์  ๋ถ„์„ ์†”๋ฃจ์…˜์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ญ…๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค ๋„๊ตฌ ์„ ํƒ์€ ์ฃผ์š” ์œ„ํ—˜ ์š”์ธ, ๊ทœ์ œ ํ™˜๊ฒฝ, ์ €์žฅ์†Œ ํ˜ธ์ŠคํŒ… ๋ชจ๋ธ ๋ฐ CI ์„ฑ๋Šฅ ํ—ˆ์šฉ ์˜ค์ฐจ๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์„ ์ • ํ•ญ๋ชฉ๋“ค์€ ๊ธฐ๋Šฅ ๋งˆ์ผ€ํŒ…๋ณด๋‹ค๋Š” ์•„ํ‚คํ…์ฒ˜ ์ ํ•ฉ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ„์„์ ์œผ๋กœ ๋„์ถœ๋œ ์กฐํ•ฉ์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž ์œ„์ƒ ๋ฐ ์ฝ”๋“œ ์ผ๊ด€์„ฑ ์œ ์ง€์— ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๋…์„ฑ, ์ผ๊ด€๋œ ํ˜•์‹, ๊ทธ๋ฆฌ๊ณ  ์ดˆ๊ธฐ ๋‹จ๊ณ„์˜ ๊ฒฐํ•จ ์˜ˆ๋ฐฉ์„ ์šฐ์„ ์‹œํ•˜๋Š” ์กฐ์ง์„ ์œ„ํ•ด:

์ถ”์ฒœ ์กฐํ•ฉ:
SwiftLint + SwiftFormat + Xcode ์ •์  ๋ถ„์„๊ธฐ

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

๋ณด์•ˆ์„ ์ตœ์šฐ์„ ์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ๊ทœ์ œ๋ฅผ ๋ฐ›๋Š” ๊ธฐ์—…์— ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๊ณต์‹์ ์ธ ๊ทœ์ • ์ค€์ˆ˜ ์š”๊ฑด์„ ๋”ฐ๋ฅด๊ฑฐ๋‚˜ ๋ฏผ๊ฐํ•œ ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ์—…์˜ ๊ฒฝ์šฐ:

์ถ”์ฒœ ์กฐํ•ฉ:
Fortify ๋˜๋Š” Checkmarx + ์ค‘์•™ ์ง‘์ค‘์‹ ๊ฑฐ๋ฒ„๋„Œ์Šค ์›Œํฌํ”Œ๋กœ

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

์ด ๋ฒ”์ฃผ๋Š” ์ทจ์•ฝ์„ฑ ์ฆ๊ฑฐ, ์ •์ฑ… ์ง‘ํ–‰ ์ถ”์ ์„ฑ ๋ฐ ์ด์‚ฌํšŒ ๋ณด๊ณ ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

GitHub ์ค‘์‹ฌ ์กฐ์ง์— ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์ œ๊ณต ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” GitHub Enterprise๋ฅผ ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์—…์˜ ๊ฒฝ์šฐ:

๊ถŒ์žฅ ์†”๋ฃจ์…˜:
GitHub ๊ณ ๊ธ‰ ๋ณด์•ˆ

์ด ํ”Œ๋žซํผ์€ CodeQL ๊ธฐ๋ฐ˜ ์ •์  ๋ถ„์„, ์ข…์†์„ฑ CVE ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋น„๋ฐ€ ํ‚ค ํƒ์ง€ ๊ธฐ๋Šฅ์„ ์ €์žฅ์†Œ ์›Œํฌํ”Œ๋กœ์— ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ธํ”„๋ผ ๋ณต์žก์„ฑ์„ ์ค„์ด๊ณ  ํ†ตํ•ฉ๋œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ GitHub Actions๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ CI ํŒŒ์ดํ”„๋ผ์ธ์ด ๊ตฌ์ถ•๋œ ๊ฒฝ์šฐ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋”์šฑ ์‹ฌ์ธต์ ์ธ ๋งž์ถคํ˜• ์ทจ์•ฝ์  ๋ชจ๋ธ๋ง์ด๋‚˜ GitHub ์ด์™ธ์˜ ํ˜ธ์ŠคํŒ… ์ง€์›์ด ํ•„์š”ํ•œ ๊ธฐ์—…์€ ๋ณด์™„์ ์ธ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ฐ”์ผ ๊ทœ์ • ์ค€์ˆ˜ ๋ฐ ์•ฑ ์Šคํ† ์–ด ๋ณด์•ˆ ํƒœ์„ธ์— ์ตœ์ 

๊ทœ์ œ ๋Œ€์ƒ ์‹œ์žฅ ๋˜๋Š” ๊ณ ์œ„ํ—˜ ์‹œ์žฅ์—์„œ iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ๊ธฐ์—…์˜ ๊ฒฝ์šฐ:

์ถ”์ฒœ ์กฐํ•ฉ:
NowSecure + ๊ธฐ๋ณธ ์ •์  ๋ถ„์„ ๋„๊ตฌ

NowSecure๋Š” ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์— ํŠนํ™”๋œ ๋ณด์•ˆ ๊ฒ€์ฆ, ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฒ€์‚ฌ ๋ฐ ์—…๊ณ„ ํ‘œ์ค€์— ๋ถ€ํ•ฉํ•˜๋Š” ๊ทœ์ • ์ค€์ˆ˜ ๋ณด๊ณ  ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฆด๋ฆฌ์Šค ๋‹จ๊ณ„์—์„œ ๊ฒ€์ฆ ๋„๊ตฌ๋กœ ํ™œ์šฉํ•  ๋•Œ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค. ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์„œ๋ฒ„ ์ธก Swift ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ๋ณด๋‹ค ๊ด‘๋ฒ”์œ„ํ•œ ์ •์  ๋ถ„์„ ํ”Œ๋žซํผ๊ณผ ํ†ตํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋Œ€๊ธฐ์—…์„ ์œ„ํ•œ ์ตœ์ ์˜ ๊ท ํ˜• ์žกํžŒ ๊ณ„์ธตํ˜• ๋ชจ๋ธ

๋ชจ๋ฐ”์ผ ๋ฐ ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ ์ „๋ฐ˜์— ๊ฑธ์ณ ์ด๊ธฐ์ข… Swift ํฌํŠธํด๋ฆฌ์˜ค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ์กฐ์ง์˜ ๊ฒฝ์šฐ:

๊ถŒ์žฅ๋˜๋Š” ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜:
CI ์œ„์ƒ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด SwiftLint ๋˜๋Š” Semgrep์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
SonarQube๋ฅผ ํ™œ์šฉํ•œ ์ค‘์•™ ์ง‘์ค‘์‹ ํ’ˆ์งˆ ๊ด€๋ฆฌ
์‹ฌ์ธต์ ์ธ ์ทจ์•ฝ์  ๋ชจ๋ธ๋ง์„ ์œ„ํ•œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ SAST ์—”์ง„
CI์— ํ†ตํ•ฉ๋œ ์˜์กด์„ฑ ์Šค์บ๋‹

์ด๋Ÿฌํ•œ ๊ณ„์ธต์  ์ ‘๊ทผ ๋ฐฉ์‹์€ ์šฐ๋ ค ์‚ฌํ•ญ์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • ๋น ๋ฅธ ๊ฐœ๋ฐœ์ž ํ”ผ๋“œ๋ฐฑ
  • ํฌํŠธํด๋ฆฌ์˜ค ์ˆ˜์ค€์˜ ๊ฐ€์‹œ์„ฑ
  • ์‹ฌ์ธต์ ์ธ ๋ณด์•ˆ ๊ฐ•ํ™”
  • ์˜์กด์„ฑ ์œ„ํ—˜ ๊ด€๋ฆฌ

์ด๋Ÿฌํ•œ ์•„ํ‚คํ…์ฒ˜๋Š” ์œ„ํ—˜ ๊ธฐ๋ฐ˜ ์šฐ์„ ์ˆœ์œ„ ๋ชจ๋ธ๊ณผ ์ผ์น˜ํ•˜๋ฉฐ, ์ƒ์ถฉ๋˜๋Š” ๋ชฉํ‘œ๋กœ ์ธํ•ด ๋‹จ์ผ ๋„๊ตฌ์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

Swift์—์„œ์˜ ์ •์  ๋ถ„์„์€ ๋‹จ์ผ ๋„๊ตฌ์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ณ„์ธตํ™”๋œ ๊ด€๋ฆฌ ์ฒด๊ณ„๋ฅผ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.

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

๊ฒฝ๋Ÿ‰ ๋„๊ตฌ๋Š” ๊ฐœ๋ฐœ์ž ๊ทœ์œจ์„ ๊ฐ•ํ™”ํ•˜๊ณ  ์Šคํƒ€์ผ์˜ ๋ฌด์งˆ์„œ๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค. ์ค‘์•™ ์ง‘์ค‘์‹ ํ”Œ๋žซํผ์€ ์ €์žฅ์†Œ ๊ฐ„ ๊ฐ€์‹œ์„ฑ์„ ์ œ๊ณตํ•˜๊ณ  ํ’ˆ์งˆ ๊ฒ€์ฆ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์‹ฌ์ธต์ ์ธ SAST ์—”์ง„์€ ์‹คํ–‰ ๊ฒฝ๋กœ ์ „๋ฐ˜์— ๊ฑธ์นœ ์ทจ์•ฝ์  ์ „ํŒŒ๋ฅผ ๋ชจ๋ธ๋งํ•ฉ๋‹ˆ๋‹ค. ์ข…์†์„ฑ ์Šค์บ๋„ˆ๋Š” ์™ธ๋ถ€ ํŒจํ‚ค์ง€ ๋ฐ ๊ณต๊ฐœ๋œ CVE์™€ ๊ด€๋ จ๋œ ์ „์ด์  ์œ„ํ—˜์„ ๋“œ๋Ÿฌ๋ƒ…๋‹ˆ๋‹ค. ๊ฐ ๊ณ„์ธต์€ ์„œ๋กœ ๋‹ค๋ฅธ ์œ„ํ—˜ ์š”์†Œ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๋‹จ์ผ ์ •์  ๋ถ„์„ ์†”๋ฃจ์…˜์— ์˜์กดํ•˜๋ฉด ๊ตฌ์กฐ์  ์‚ฌ๊ฐ์ง€๋Œ€๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ์ค‘์‹ฌ ๋„๊ตฌ๋Š” ๊ฑฐ๋ฒ„๋„Œ์Šค ์ถ”์ ์„ฑ์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ SAST ์—”์ง„์€ ๋ชจ๋“  ์ปค๋ฐ‹์— ์ ํ•ฉํ•˜์ง€ ์•Š์€ ์šด์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋žซํผ ํ†ตํ•ฉ ์†”๋ฃจ์…˜์€ ํ˜ธ์ŠคํŒ… ์ƒํƒœ๊ณ„์— ๋”ฐ๋ผ ์•„ํ‚คํ…์ฒ˜ ์œ ์—ฐ์„ฑ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ํšจ๊ณผ์ ์ธ Swift ๊ฑฐ๋ฒ„๋„Œ์Šค๋ฅผ ์œ„ํ•ด์„œ๋Š” ์กฐ์ง์˜ ์„ฑ์ˆ™๋„ ๋ฐ ๊ทœ์ œ ํ™˜๊ฒฝ์— ๋งž์ถฐ ์ ์ ˆํžˆ ์กฐํ•ฉ๋œ ์†”๋ฃจ์…˜๋“ค์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Swift๊ฐ€ ๋ฏธ์…˜ ํฌ๋ฆฌํ‹ฐ์ปฌ ๋ฐ ๊ทœ์ œ ์˜์—ญ์œผ๋กœ ์ง€์†์ ์œผ๋กœ ํ™•์žฅ๋จ์— ๋”ฐ๋ผ ๊ธฐ์—…์€ ๋ฆฐํŒ… ๋ฐ ์Šคํƒ€์ผ ๊ฐ•์ œ ์ ์šฉ์„ ๋„˜์–ด ์ •์  ๋ถ„์„ ๋ฐฉ์‹์„ ๋ฐœ์ „์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์šฐ์„ ์ˆœ์œ„ ์ง€์ •, ์ข…์†์„ฑ ๊ฐ€์‹œ์„ฑ ํ™•๋ณด, CI(์ง€์†์  ํ†ตํ•ฉ) ๊ธฐ๋ฐ˜ ๊ฐ•์ œ ์ ์šฉ์€ ์ง€์† ๊ฐ€๋Šฅํ•œ ๊ฑฐ๋ฒ„๋„Œ์Šค ๋ชจ๋ธ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋„๊ตฌ ํ†ตํ•ฉ์ด ์•„๋‹Œ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๊ฐ€ ํƒ„๋ ฅ์ ์ธ ํ’ˆ์งˆ ๋ฐ ๋ณด์•ˆ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.