๋ฐ๋ธ์น์ต์ค ์๋ํ๋ฅผ ์ํ โ๋์ ๋ณด์ ํ ์คํ (DAST)โ
๋ฐ๋ธ์น์ต์ค ์๋ํ๋ฅผ ์ํ โ๋์ ๋ณด์ ํ ์คํ (DAST)โ ๊ด๋ จ
์ง๋ ๋ ํธ์ ๊ธ์ ํตํด ๋ฐ๋ธ์น์ต์ค(DevSecOps)์ ์ ์ ๋ณด์ ํ ์คํ (SAST)์ ๋ํด ์์๋ดค์ต๋๋ค. ์ด๋ฒ ๊ธ์์๋ ์ ์ ๋ณด์ ํ ์คํ ์ ์ํธ ๋ณด์ํ ์ ์๋ โ๋์ ๋ณด์ ํ ์คํ (DAST)โ ๋๊ตฌ๋ฅผ ์ค์ต ์ฌ๋ก์ ํจ๊ป ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋์ ๋ณด์ ํ ์คํ (DAST)์ด๋?
๋์ ๋ณด์ ํ ์คํ ์ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ผ๋ก, ๋ณด์ ์ทจ์ฝ์ ์ ์๋ณํ๋ ๋ณด์ ํ ์คํธ ๋ฐฉ๋ฒ์ ๋๋ค. SQL ์ธ์ ์ , ํฌ๋ก์ค ์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS), ์ธ์ฆ ๋ฐ ์ธ์ ๊ด๋ฆฌ ์ทจ์ฝ์ , ์๋ฒ ๊ตฌ์ฑ ์ค๋ฅ ๋ฑ์ ์ค์ ์ด์ ํ๊ฒฝ์์ ๋ฐ์ํ ์ ์๋ ๋ณด์ ๋ฌธ์ ๋ฅผ ํ์งํฉ๋๋ค. ๋์ (dynamic)์ด๋ผ๋ ์ฉ์ด๋ ์ค์ ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด์ ํ ์คํธ๋ฅผ ์ํํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ์์ค ์ฝ๋๋ง์ ๋ถ์ํ์ฌ ๋ณด์ ์ทจ์ฝ์ ์ ๊ฒ์ฌํ๋ ์ ์ ๋ณด์ ํ ์คํ ๊ณผ ๋์กฐ๋ฉ๋๋ค.
๋์ ๋ณด์ ํ ์คํ ์ ์ฃผ์ ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1) ์ค์ ํ๊ฒฝ์์์ ์ทจ์ฝ์ ๋ฐ๊ฒฌ
๋์ ๋ณด์ ํ ์คํ ์ ์ค์ ์ด์ ํ๊ฒฝ๊ณผ ์ ์ฌํ ์กฐ๊ฑด์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ๋ฏ๋ก, ์ค์ ๊ณต๊ฒฉ ์๋๋ฆฌ์ค๋ฅผ ์๋ฎฌ๋ ์ด์ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ ์ ๋ถ์์ผ๋ก๋ ๋ฐ๊ฒฌํ๊ธฐ ์ด๋ ค์ด ๋ฐํ์(์ด์ ์ค) ์ทจ์ฝ์ ์ด๋ ์ค์ ์ ์ค๋ฅ๋ฅผ ์๋ณํ ์ ์์ต๋๋ค.
2) ๋ฎ์ ์คํ์จ
๋์ ๋ณด์ ํ ์คํ ์ ์ค์ ๋ก ์ทจ์ฝ์ ์ ๊ณต๊ฒฉํด ๋ณด๋ ๋ฐฉ์์ผ๋ก ์งํ๋์ด, ์ ์ ๋ถ์์ ๋นํด ์คํ์จ(False Positive)์ด ๋ฎ์ต๋๋ค. ๋ํ ๋๋ถ๋ถ์ ๋์ ๋ณด์ ํ ์คํ ๋๊ตฌ๊ฐ ์ทจ์ฝ์ ๋ฐ๊ฒฌ ์ ์ค์ ์์ฒญ๊ณผ ์๋ต ๋ฉ์์ง๋ฅผ ์ฆ๊ฑฐ๋ก์จ ๊ฐ์ด ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ค์ด ์๋์ ์ผ๋ก ์ค์ ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํ์ ํ ์ ์์ต๋๋ค.
3) ์ธ๋ถ ์ข ์์ฑ ๋ฐ ๊ตฌ์ฑ ๋ฌธ์ ํ์ง
๋์ ๋ณด์ ํ ์คํ ์ ์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฒด ์คํ์ ๋์์ผ๋ก ํ ์คํธ๋ฅผ ์ํํ๋ฏ๋ก, ์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์น ์๋ฒ ๊ตฌ์ฑ, API ์ฐ๋ ๋ฑ๊ณผ ๊ด๋ จ๋ ๋ณด์ ๋ฌธ์ ๋ ์๋ณํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ๋์ ๋ณด์ ํ ์คํ ์๋ ๋ช ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค.
๊ฐ๋ฐ ์ฃผ๊ธฐ์ ์๋์ ์ผ๋ก ํ๋ฐ ๋จ๊ณ์ ๊ตฌํ
๋์ ๋ณด์ ํ ์คํ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ ๊ฐ๋ฅํ ์ํ์ฌ์ผ ํ๋ฏ๋ก, ์ ์ ๋ณด์ ํ ์คํ ๊ณผ๋ ๋ฌ๋ฆฌ ๊ฐ๋ฐ ์ฃผ๊ธฐ์ ํ๋ฐ๋ถ์ ์ํ๋ฉ๋๋ค. ์ด๋ ์ทจ์ฝ์ ์ ๋ฐ๊ฒฌํ๊ณ ์์ ํ๋ ๋ฐ ๋ ํฐ ๋น์ฉ๊ณผ ์๊ฐ์ด ์์๋ ์ ์์์ ์๋ฏธํฉ๋๋ค.
์ ํ๋ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง
๋์ ๋ณด์ ํ ์คํ ์ ์ค์ ์คํ ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ง์ ํ ์คํธํ๋ฏ๋ก, ๋ชจ๋ ์ฝ๋ ๊ฒฝ๋ก๋ฅผ ์ปค๋ฒํ๊ธฐ ์ด๋ ต์ต๋๋ค. ํนํ ๋ณต์กํ ์กฐ๊ฑด๋ฌธ์ด๋ ์์ธ ์ฒ๋ฆฌ ๋ก์ง์ ๊ฒฝ์ฐ ํ ์คํธํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋จ์ ์๋ ๋ถ๊ตฌํ๊ณ , ๋์ ๋ณด์ ํ ์คํ ์ ์ค์ ์ด์ ํ๊ฒฝ์์ ๋ฐ์ํ ์ ์๋ ์ทจ์ฝ์ ์ ํจ๊ณผ์ ์ผ๋ก ์๋ณํ ์ ์๋ ์ค์ํ ๋ณด์ ํ ์คํ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ณด์ ํ ์คํ ์ ์ํด์๋ ์ ์ ๋ณด์ ํ ์คํ ๊ณผ ๋์ ๋ณด์ ํ ์คํ ์ ํจ๊ป ์ฌ์ฉํ๋ ํตํฉ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด ๊ถ์ฅ๋ฉ๋๋ค.
API ๋ณด์ ๊ฒ์ฌ ์๋ํ
์ต๊ทผ ์น ์๋น์ค๋ค์ด ๋ง์ดํฌ๋ก ์๋น์ค๋ก ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค. ๋ง์ดํฌ๋ก ์๋น์ค ์ํคํ ์ฒ๋ ์ฌ๋ฌ ์๋น์ค๊ฐ ๋ณ๋๋ก ๊ตฌํ๋๊ณ ์๋ก ํต์ ํ๋ ๊ตฌ์กฐ์ด๊ธฐ์, ์ํธ ๊ฐ์ ํต์ ์ ์ํด API๋ฅผ ํ์ฉํฉ๋๋ค. ๊ณ์ํด์ ๋ ๋ง์ ์๋น์ค๊ฐ API๋ก ๊ตฌํ๋จ์ ๋ฐ๋ผ, API ๋ณด์ ์ญ์ ์ ์ ๋ ์ค์ํด์ง๊ณ ์์ต๋๋ค. DAST๋ฅผ ๊ฐ๋ฐ ๊ณผ์ ์ ์ ์ฉํ ๋, API ๋ณด์ ์ญ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
API ๋์ ๋์ ๋ณด์ ํ ์คํ ๋๊ตฌ ์ค์ต
๊ธฐ์กด์ ์น ์ค์บ๋์ ํ์ฉํ ๋์ ๋ณด์ ํ ์คํ ์ฌ๋ก๋ ์ด๋ฏธ ์๋ ค์ง ๋ด์ฉ์ด ๋ง์ต๋๋ค. ๊ทธ๋์ ์ด ๊ธ์์๋ ์ต๊ทผ ๊ฐ๋ฐ ํธ๋ ๋์ธ API๋ฅผ ๋์์ผ๋ก, ๋์ ๋ณด์ ํ ์คํ ์ ์๋ํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
์ฌ๋ฌ ์์ฉ ๋๊ตฌ๋ฅผ ํ์ฉํ ์๋ ์์ง๋ง, ๊ฐ๋ฐ์๋ค์ด ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์๋ ์คํ์์ค ๋๊ตฌ โRapiDAST (RedHatProductSecurity/rapidast
)โ๋ก ์ค์ต ๊ณผ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ํ์๊ฐ ์ฌ๋ด ๋ฐ๋ธ์น์ต์ค ์คํ์ ์ํด ๋๋ฃ๋ค๊ณผ ๊ฐ๋ฐํ์ฌ ๊นํ๋ธ์ ๊ณต๊ฐํ ์คํ์์ค ํ๋ก์ ํธ๋ก ๊ณ์ ๋ฐ์ ํ๊ณ ์์ต๋๋ค. RapiDAST๋ ํนํ API ๋ณด์ ๊ฒ์ฌ ์๋ํ์ ์ ์ฉํ๊ฒ ํ์ฉํ ์ ์์ต๋๋ค.
ํ ์คํธ ๋์ ์๋น์ค ์ค๋น
๋ง์ฝ API ์๋น์ค๋ฅผ ๊ฐ๋ฐ ์ค์ธ ๋ถ์ด ์๋ค๋ฉด, ์ง์ ๊ฐ๋ฐํ๊ณ ์๋ ์๋น์ค์ ํ ์คํธ ํ๊ฒฝ์์ ์ค์ตํด ๋ณด๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค. ์ด ๊ธ์์๋ ํ์์ ํ ๋๋ฃ๊ฐ ๊ฐ๋ฐํ ๊ฐ๋จํ ์ค์ต์ฉ ์น ์๋น์ค๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
์ค์ต์ฉ ์น ์๋น์ค๋ฅผ ๊ตฌ๋ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋์ปค ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
docker pull ghcr.io/jeremychoi/vapi:latest
docker run -it --rm -p 3000:3000 -p 5000:5000 -e API_HOST=192.168.1.100:5000 ghcr.io/jeremychoi/vapi
192.168.1.100
์ ๊ฐ์์ ํ
์คํธ ํ๊ฒฝ์ ๋ง์ถ์ด ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
์ด ์๋น์ค๋ ๋ณด์ ํ
์คํธ์ฉ ํ๋ก์ ํธ๋ก SQL ์ธ์ ์
์ทจ์ฝ์ ์ ํฌํจํ๊ณ ์์ต๋๋ค. ํ๋ก ํธ์๋๋ Next.js(๋ฆฌ์กํธ ๊ธฐ๋ฐ)๋ก, ๋ฐฑ์๋๋ ํ์ด์ฌ Flask๋ก ๊ฐ๋ฐ๋์์ต๋๋ค. ์์ค์ฝ๋๋ ๊นํ๋ธ (jeremychoi/vapi
)๋ฅผ ์ฐธ๊ณ ํ์ธ์.
๋ช ๋ น์ด ์คํ ํ ์๋น์ค๊ฐ ๊ตฌ๋๋ ํ, (ํฌํธ 3000๋ฒ์ ํ๋ก ํธ์๋ ์๋น์ค์ ๊ฒฝ์ฐ ์์คํ ํ๊ฒฝ์ ๋ฐ๋ผ ์์ญ ์ด ์ ๋ ๊ฑธ๋ฆด ์ ์์), 192.168.1.100:3000์ผ๋ก ์ ์ํ๋ฉด ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ํ๋ก ํธ์๋ ํ๋ฉด์ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํฌํธ 5000๋ฒ์ ๋ฐฑ์๋ API ์๋น์ค๋ API์ OpenAPI(์์ Swagger) ๋ฌธ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
RapidDAST ์ค์ต ์ฌ๋ก
์ค์ต์ฉ ์น ์๋น์ค์ ๊ฐ์ ์์ฆ ์ฃผ๋ก ์ฌ์ฉ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ์ API ์ํคํ ์ฒ ๊ธฐ๋ฐ์ ์น ์๋น์ค๋ฅผ ๊ธฐ์กด์ ์ ํต์ ์ธ ํฌ๋กค๋ง ๊ธฐ๋ฐ ์น ์ค์บ๋ ๋๊ตฌ๋ก ๊ฒ์ฌํ๋ ค๋ฉด, ์ค์ API ์๋ ํฌ์ธํธ๋ฅผ ํ์ธํ๋ ๋ฐ ์ด๋ ค์์ด ๋ง์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ, OpenAPI ๋ฌธ์๋ฅผ ํ์ฉํ๋ฉด ์ฝ๊ฒ ์ ์ฒด API๋ฅผ ๊ฒ์ฌํ ์ ์์ต๋๋ค. OpenAPI ๋ฌธ์์๋ API ์๋ ํฌ์ธํธ์ ๋ํ ๊ฒฝ๋ก, ํ๋ผ๋ฏธํฐ ๋ฑ ์ ๋ณด๊ฐ ๊ธฐ์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
RapiDAST๋ฅผ ํ์ฉํ๋ฉด ํ ์คํธ ๋์ API ์๋น์ค์ URL, ํด๋น API๋ฅผ ๊ธฐ์ ํ๋ OpenAPI ๋ฌธ์ URL๋ง ์๋ฉด, ์๋์ ๊ฐ์ ์ค์ ํ์ผ์ ์์ฑ(์ฝ๋ ์ ์ฅ์์ ์์ ํ์ผ ํฌํจ)ํ์ฌ ๊ฒ์ฌ๋ฅผ ์๋ํํ ์ ์์ต๋๋ค.
v5-yozm-demo.yaml
config:
configVersion: 5 # ๋ํดํธ ์ค์ ๊ฐ
application:
shortName: "yozmit-demo" # ์๋น์ค ์ด๋ฆ. ์์ ์
๋ ฅ
url: "http://192.168.50.143:5000" # ์๋น์ค URL. ์
๋ ฅ ํ์
scanners:
zap: # ZAP ๋๊ตฌ ์ฌ์ฉ
apiScan:
apis:
apiUrl: "http://192.168.50.143:5000/docs/openapi.json" # OpenAPI ๋ฌธ์ URL. ์
๋ ฅ ํ์
passiveScan:
disabledRules: "2,10015,10027,10096,10024,10098,10023,10105" # ํจ์๋ธ ๊ฒ์ฌ ๋ฃฐ ์ค์ - ์คํ/์ค๋ณต ์ด์ ํด๊ฒฐ
activeScan:
policy: API-scan-minimal # ์ค์บ ๋ฃฐ ์ค์ . RapiDAST ์ ์ฅ์ ๊ธฐ๋ณธ ์ ๊ณต
report:
format: ["json","html"] # ๋ณด๊ณ ์ ํ์ ์ง์
container:
parameters:
executable: "/Applications/ZAP.app/Contents/Java/zap.sh" # Mac OS ๊ธฐ์ค ZAP ์ค์น ๊ฒฝ๋ก
์ฌ๋ฌ ์ค์ ๊ฐ์ด ๋ณด์ด์ง๋ง, ๋๋ถ๋ถ์ RapiDAST ์ฝ๋ ์ ์ฅ์์ ์๋ ์์ ํ์ผ์ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ ์ ์์ด, ์ค์ ํ์ผ์ ์ค๋นํ๋ ๊ฒ์ ์ด๋ ต์ง ์์ต๋๋ค. ์ค์ ํ์ผ์ ์์ฑํ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ๊ฒ์ฌ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
./rapidast.py --config v5-yozm-demo.yaml
๊ฒ์ฌ ์ค์๋ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์์ผ๋ฉฐ, ๊ฒ์ฌ๊ฐ ๋๋๋ฉด ๊ฒฐ๊ณผ ํ์ผ์ด results
๋๋ ํ ๋ฆฌ์ ์์ฑ๋ฉ๋๋ค.
๊ฒ์ฌ ๊ฒฐ๊ณผ ํ์ผ์ ํ์ธํ์ฌ, SQL ์ธ์ ์ ์ทจ์ฝ์ ์ด ๋ฐ๊ฒฌ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ถ๊ฐ๋ก ์ ๊ฒ์ฌ ์คํ ๊ณผ์ ์ ์ ํจ์ค(Jenkins)๋ ๊นํ๋ธ ์ก์ ๋ฑ์ ์ด์ฉํด, CI/CD ํ์ดํ๋ผ์ธ์ ํตํฉํ์ฌ DAST๋ฅผ ์๋ํํ๊ณ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ํฌํจ์ํฌ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ RapiDAST๋ฅผ ํตํด ๋ณด์ ๊ฒ์ฌ ์๋ํ๋ฅผ ๊ตฌํํ๋ ๊ณผ์ ์ ์ดํด๋ดค์ต๋๋ค. ๋ชจ๋ ๊ฒ์ฌ ๊ณผ์ ์ด CLI๋ฅผ ํตํด ์งํ๋๊ธฐ์ ์ฝ๊ฒ ์๋ํํ ์ ์์ต๋๋ค.
๊ฐ์ฅ ๊ฐ๋จํ ์์ ๋ฅผ ๋ณด์ฌ๋๋ ธ์ง๋ง, ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ ์์ฑ๋๋ ๊ฒ์ฌ ๊ฒฐ๊ณผ๋ค์ ๊ตฌ๊ธ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง, ๋ค๋ฅธ ์ทจ์ฝ์ ๊ด๋ฆฌ ๋๊ตฌ๋ก ์ฐ๋ํ๋ ๋ฑ ๋ค์ํ ํ์ฉ๋ฒ์ด ์์ต๋๋ค. (RapiDAST ๊นํ๋ธ (RedHatProductSecurity/rapidast
)์์ ์ค์น ๋ฐฉ๋ฒ๊ณผ ์ถ๊ฐ ์ค์ ์์ ๋ฐ ๋ฐฉ๋ฒ์ ์ฐธ๊ณ ํด ๋ณด์ธ์.) ์ฐธ๊ณ ๋ก RapiDAST๋ ์คํ์์ค ํ๋ก์ ํธ๋ก ๋๊ตฌ๋ ์ธ์ ๋ ๊นํ๋ธ ํ๋ก์ ํธ์ ํ๋ฆฌํ์คํธ(pull request)๋ก ๊ธฐ์ฌํ ์ ์์ผ๋ฉฐ, ์ฌ์ฉ ์ค ๋ฌธ์ ๊ฐ ์์ ๋ ๊นํ๋ธ ์ด์ ๋ฑ๋ก(์์ด๋ก ๋ฆฌํฌํธ ์ถ์ฒ)ํ๋ฉด ์ง์๋ ๋ฐ์ ์ ์์ต๋๋ค.
๋์ ๋ณด์ ํ ์คํ ์๋ํ ๋ฐ ๊ณ ๋ ค ์ฌํญ
์ด์ ๊ธ์์ ์ ์ ๋ณด์ ํ ์คํ (SAST) ์๋ํ ์ ๊ณ ๋ ค ์ฌํญ์ ๋ํด์ ์ดํด๋ดค์ต๋๋ค. ์ด ์ค ๋ง์ ๋ถ๋ถ์ด ๋์ ๋ณด์ ํ ์คํ (DAST)์๋ ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋ ์ ์์ต๋๋ค. ๊ทธ๋์ ์ด๋ฒ ๊ธ์์๋ DAST์ SAST์ ์ฐจ์ด์ ์ ์์ฃผ๋ก ์ดํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
1) ์๋ํ ๊ณํ ์๋ฆฝ
SAST์ ๋ง์ฐฌ๊ฐ์ง๋ก DAST๋ ์ฒด๊ณ์ ์ธ ๊ณํ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ DAST๋ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ผ๋ก ํด, ํ ์คํธ ์๋๋ฆฌ์ค ๊ฐ๋ฐ๊ณผ ์ค์ ์ฌ์ฉ ํ๊ฒฝ์ ๋ชจ๋ฐฉํ ํ ์คํธ ๋ฐ์ดํฐ ์ค๋น๊ฐ ๋์ฑ ์ค์ํฉ๋๋ค. ์๋ฒ ๊ตฌ์ฑ, ๋คํธ์ํฌ ์ค์ ๋ฑ ์ธํ๋ผ ์์๋ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์ด ์ ์ SAST ์๋ํ ์์๋ ๊ณ ๋ คํ์ง ์์๋ ์๋ก์ด ์์์ ๋๋ค.
์ฃผ์ํ ์ ์ DAST ๊ณผ์ ์์๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ๋ก ์์ฑํ๊ฑฐ๋, ๋ณ์กฐํ๋ ํ ์คํธ๊ฐ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ ๋๋ก ์ค์ ์ด์ ์ค์ ์๋น์ค๋ฅผ ๋์์ผ๋ก ํ ์คํธํด์๋ ์ ๋๋ค๋ ์ ์ ๋๋ค. ์ค์ ์ด์ ํ๊ฒฝ์ ๊ฒ์ฆ์ ๋ชจ์ํดํน/์นจํฌ ํ ์คํธ ์ ๋ฌธ๊ฐ์๊ฒ ๋งก๊ฒจ๋๊ณ , DAST๋ ๋ณ๋์ ํ ์คํธ ํ๊ฒฝ์ ๊ตฌ์ฑํด์ ๊ตฌํํด์ผ ํฉ๋๋ค.
2) CI/CD ํ์ดํ๋ผ์ธ ํตํฉ
DAST๋ CI/CD ํ์ดํ๋ผ์ธ์ ํตํฉ๋์ด์ผ, ์ํํธ์จ์ด ๊ฐ๋ฐ ์ฃผ๊ธฐ์์์์ ๋ณด์ ๊ฒ์ฌ ์๋ํ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค. DAST๋ ์คํ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ์ํ๋ฏ๋ก, ์ผ๋ฐ์ ์ผ๋ก ๋น๋๊ฐ ์๋ฃ๋ ํ ํ ์คํธ ๋จ๊ณ(๋๋ ํ ์คํธ ํ์ดํ๋ผ์ธ)์์ ์ํ๋ฉ๋๋ค.
์ด ์ ์ SAST๊ฐ ์ฝ๋ ์ปค๋ฐ ๋จ๊ณ์์ ์ํ๋ ์ ์๋ ๊ฒ๊ณผ๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค. DAST๋ฅผ ์ํ ๊ฐ์ฅ ์ข์ ์์ ์ ํตํฉ(integration test) ํ ์คํธ๋ฅผ ํ๋ ์์ ์ ๋๋ค. ๋ฐ๋ผ์ QA ํ์ ์ญํ ์ด ์ค์ํฉ๋๋ค. ๊ฐ๋ฐํ๊ณผ QA ํ์ด ๋ถ๋ฆฌ๋์ด ์๋ ๊ฒฝ์ฐ, ์ํธ ๊ฐ ํ์ ๊ณํ์ ์ธ์ฐ๋ฉด ์ข์ต๋๋ค. API ์๋น์ค์ ๊ฒฝ์ฐ, OpenAPI๋ฅผ ํ์ฉํ ์ ๋ฐ์ ์ธ ๊ฐ๋ฐ/ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ถํ๋ค๋ฉด ํจ์ฌ ์์ํ๊ฒ ์๋ํ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
3) ์ธ์ฆ ๋ฐ ์ธ์ ๊ด๋ฆฌ
SAST์๋ ๋ฌ๋ฆฌ, ์ค์ ํ๊ฒฝ์ ๊ฐ์ ํ๊ณ ํ ์คํธํ๋ DAST์์๋ ์ธ์ฆ ๋ฐ ์ธ์ ๊ด๋ฆฌ์ ๋ํด ๊ณ ๋ คํด์ผ ํฉ๋๋ค. DAST๋ ๋ฏธ์ธ์ฆ๋ ์ํ์์์ ํ ์คํธ์ ๋๋ถ์ด, ์ธ์ฆ๋ ์ํ์์์ ํ ์คํธ๋ ๋ณ๋๋ก ์ํํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์๋ํ ๊ณผ์ ์์ ๋ค์ํ ์ฌ์ฉ์ ์ญํ ๋ก ๋ก๊ทธ์ธํ๊ณ ์ธ์ ์ ์ ์งํ๋ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํด์ผ ํฉ๋๋ค.
4) ์ง์์ ์ธ ์ ๋ฐ์ดํธ ๋ฐ ๊ฐ์
SAST์ ๋ง์ฐฌ๊ฐ์ง๋ก DAST๋ ์ง์์ ์ธ ์ ๋ฐ์ดํธ์ ๊ฐ์ ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ DAST๋ ์ค์ ๋ก ๊ณต๊ฒฉ์ด ์์ฐ๋ ์ ์๋ ์ํฉ์ ๋ง์ฃผํ๋ฏ๋ก, ์๋ก์ด ๊ณต๊ฒฉ ๊ธฐ๋ฒ๊ณผ ์ทจ์ฝ์ ์ ํ์ ๋ ๋ฏผ๊ฐํ๊ฒ ๋์ํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ณด์ ์ปค๋ฎค๋ํฐ์ ๋ํฅ์ ์ฃผ์ํ๊ณ , ์๋ก์ด ๊ณต๊ฒฉ ํจํด์ ์ ์ํ๊ฒ ํ ์คํธ ์๋๋ฆฌ์ค์ ๋ฐ์ํ๋ ์ฒด๊ณ๊ฐ ํ์ํฉ๋๋ค. ๋ชจ์ํดํน๊ณผ ๊ฐ์ ์ค์ ์น ๊ณต๊ฒฉ ์ฌ๋ก์ ๋ํ ๊ต์ก์ ๋ด๋น์์๊ฒ ์ ๊ณตํ๊ณ , ์ง์์ ์ธ ๊ด์ฌ์ ๊ฐ๊ฒ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋ง์น๋ฉฐ
์ง๊ธ๊น์ง ์ค์ต ์์ ์ ํจ๊ป ๋์ ๋ณด์ ํ ์คํ ์ ๋ํด ์ดํด๋ดค๋๋ฐ์. ๋์ ๋ณด์ ํ ์คํ ๋๊ตฌ๋ฅผ ์๋ํํ์ฌ ํ์ฉํ๋ค๋ฉด, ์์ค ์ฝ๋ ๊ฒ์ฌ์์ ๋์น ๋ณด์ ์ทจ์ฝ์ ์ ๊ฐ๋ฐ ํ๋ก์ธ์ค ์ด๊ธฐ ๋จ๊ณ์์ ๋ฐ๊ฒฌํ๊ณ ํด๊ฒฐํ ์ ์์ต๋๋ค. ๋ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์์ฑ์ ๋์ด๊ณ ์ ์ฌ์ ์ธ ์ํ๊ณผ ๋น์ฉ์ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก DAST ์๋ํ๋ SAST์ ์ฌ๋ฌ ๊ณตํต์ ์ ๊ฐ์ง๊ณ ์์ง๋ง, ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ผ๋ก ํ๋ค๋ ํน์ฑ์ผ๋ก ์ถ๊ฐ์ ์ธ ๊ณ ๋ ค ์ฌํญ์ด ์์ต๋๋ค. SAST์ DAST๋ฅผ ์ํธ ๋ณด์์ ์ผ๋ก ํ์ฉํ๋ฉด, ๋์ฑ ํจ๊ณผ์ ์ธ ๋ฐ๋ธ์น์ต์ค ๊ตฌํ์ ์ด๋ฃจ์ด๋ผ ์ ์์ ๊ฒ์ ๋๋ค.