Docker ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์šฉ ๋ณด์•ˆ ์Šค์บ๋„ˆ์˜ ์ทจ์•ฝ์ 

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

๊ณต๊ฒฉํ•˜๋ ค๋ฉด ๊ณต๊ฒฉ์ž๋Š” ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ Dockerfile ๋˜๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ.json ๊ฒ€์‚ฌ๋ฅผ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ Podfile ๋ฐ gradlew ํŒŒ์ผ์„ ์ด๋ฏธ์ง€ ๋‚ด์— ๋ฐฐ์น˜ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ† ํƒ€์ž… ํ™œ์šฉ ์ค€๋น„์— ์„ฑ๊ณตํ–ˆ๋‹ค ์‹œ์Šคํ…œ์šฉ
ํ™”์ดํŠธ ์†Œ์Šค, ์Šค ๋‹ˆํฌ,
์™€ ะธ
์•ต์ปค. ํŒจํ‚ค์ง€๋Š” ์ตœ๊ณ ์˜ ๋ณด์•ˆ์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค ๋ช…ํ™•ํ•œ, ์›๋ž˜ ๋ณด์•ˆ์„ ์—ผ๋‘์— ๋‘๊ณ  ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€์—์„œ๋„ ๋ฌธ์ œ๊ฐ€ ํ™•์ธ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์‚ฌ์†Œํ•œ. ๊ฒฐ๊ณผ์ ์œผ๋กœ Docker ์ปจํ…Œ์ด๋„ˆ ์Šค์บ๋„ˆ๋Š” ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ์ž์ฒด ์ด๋ฏธ์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋ฅผ ์ž๋™ํ™”๋œ ์ง€์†์  ํ†ตํ•ฉ ์‹œ์Šคํ…œ์— ์—ฐ๊ฒฐํ•  ๋•Œ๋Š” ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒฐ๋ก ์ด ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

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

Snyk์™€ WhiteSource๋„ ์ถ”๊ฐ€๋กœ ๋…น์ด๋‹ค ์ทจ์•ฝ์ , ๊ด€๋ จ๋œ Dockerfile์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ๋•Œ ์‹œ์Šคํ…œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์„ฑ์œผ๋กœ(์˜ˆ๋ฅผ ๋“ค์–ด Snyk์—์„œ๋Š” Dockefile์„ ํ†ตํ•ด ์Šค์บ๋„ˆ๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” /bin/ls ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  WhiteSurce์—์„œ๋Š” ๋‹ค์Œ์˜ ์ธ์ˆ˜๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค) "echo ';touch /tmp/hacked_whitesource_pip;=1.0 '" ํ˜•์‹).

์•ต์ปค ์ทจ์•ฝ์  ๋ถˆ๋ ค์กŒ๋‹ค ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Skopeo ๋„์ปค ์ด๋ฏธ์ง€ ์ž‘์—…์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž‘์—…์€ '"os": "$(touch hacked_anchore)"'์™€ ๊ฐ™์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋งค๋‹ˆํŽ˜์ŠคํŠธ.json ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์š”์•ฝ๋ฉ๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ ์ ˆํ•œ ์ด์Šค์ผ€์ดํ”„ ์—†์ด skopeo๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค(";&<>" ๋ฌธ์ž๋งŒ ์ž˜๋ฆผ, ๊ทธ๋Ÿฌ๋‚˜ "$( )" ๊ตฌ์„ฑ).

๊ฐ™์€ ์ €์ž๋Š” Docker ์ปจํ…Œ์ด๋„ˆ ๋ณด์•ˆ ์Šค์บ๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจ์น˜๋˜์ง€ ์•Š์€ ์ทจ์•ฝ์ ์„ ์‹๋ณ„ํ•˜๋Š” ํšจ๊ณผ์™€ ์˜คํƒ ์ˆ˜์ค€์— ๋Œ€ํ•œ ์—ฐ๊ตฌ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค(์ผ๋ถ€ 1, ์ผ๋ถ€ 2, ์ผ๋ถ€ 3). ๋‹ค์Œ์€ ์•Œ๋ ค์ง„ ์ทจ์•ฝ์ ์ด ํฌํ•จ๋œ 73๊ฐœ์˜ ์ด๋ฏธ์ง€๋ฅผ ํ…Œ์ŠคํŠธํ•œ ๊ฒฐ๊ณผ์ด๋ฉฐ, ์ด๋ฏธ์ง€์— ์ผ๋ฐ˜์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(nginx, tomcat, haproxy, gunicorn, redis, ruby, node)์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํšจ์œจ์„ฑ๋„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

Docker ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์šฉ ๋ณด์•ˆ ์Šค์บ๋„ˆ์˜ ์ทจ์•ฝ์ 

Docker ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์šฉ ๋ณด์•ˆ ์Šค์บ๋„ˆ์˜ ์ทจ์•ฝ์ 

์ถœ์ฒ˜ : opennet.ru

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