ΠœΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ услуТних ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π”ΠΎΡ†ΠΊΠ΅Ρ€ бСзбСдноснС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅

ΠœΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ услуТних ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π”ΠΎΡ†ΠΊΠ΅Ρ€ бСзбСдноснС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅
Π₯Сј Π₯Π°Π±Ρ€!

Π£ ΡΠ°Π²Ρ€Π΅ΠΌΠ΅Π½ΠΎΡ˜ стварности, Π·Π±ΠΎΠ³ свС Π²Π΅Ρ›Π΅ ΡƒΠ»ΠΎΠ³Π΅ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ˜Π΅ Ρƒ Ρ€Π°Π·Π²ΠΎΡ˜Π½ΠΈΠΌ процСсима, ΠΏΠΈΡ‚Π°ΡšΠ΅ ΠΎΠ±Π΅Π·Π±Π΅Ρ’ΠΈΠ²Π°ΡšΠ° бСзбСдности Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΡ… Ρ„Π°Π·Π° ΠΈ Π΅Π½Ρ‚ΠΈΡ‚Π΅Ρ‚Π° ΠΏΠΎΠ²Π΅Π·Π°Π½ΠΈΡ… са ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΠΌΠ° нијС најмањС Π²Π°ΠΆΠ½ΠΎ ΠΏΠΈΡ‚Π°ΡšΠ΅. Π‘ΠΏΡ€ΠΎΠ²ΠΎΡ’Π΅ΡšΠ΅ Ρ€ΡƒΡ‡Π½ΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€Π° ΠΎΠ΄ΡƒΠ·ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π°, Ρ‚Π°ΠΊΠΎ Π΄Π° Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠ·Π΅Ρ‚ΠΈ Π±Π°Ρ€Π΅ΠΌ ΠΏΠΎΡ‡Π΅Ρ‚Π½Π΅ ΠΊΠΎΡ€Π°ΠΊΠ΅ ΠΊΠ° Π°ΡƒΡ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡ˜ΠΈ ΠΎΠ²ΠΎΠ³ процСса.

Π£ ΠΎΠ²ΠΎΠΌ Ρ‡Π»Π°Π½ΠΊΡƒ Ρ›Ρƒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΠΈ Π³ΠΎΡ‚ΠΎΠ²Π΅ скриптС Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Ρƒ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π”ΠΎΡ†ΠΊΠ΅Ρ€ бСзбСдносних услуТних ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ΠΈ упутства ΠΎ Ρ‚ΠΎΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° поставитС ΠΌΠ°Π»ΠΈ Π΄Π΅ΠΌΠΎ ΡˆΡ‚Π°Π½Π΄ Π·Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ ΠΎΠ²ΠΎΠ³ процСса. ΠœΠΎΠΆΠ΅Ρ‚Π΅ користити ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»Π΅ Π·Π° Π΅ΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡΠ°ΡšΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΡ˜Π΅Ρ‚Π΅ процСс Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ° бСзбСдности Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅ слика ΠΈ упутстава. Јасно јС Π΄Π° јС инфраструктура Ρ€Π°Π·Π²ΠΎΡ˜Π° ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π° Π·Π° свакога, ΠΏΠ° Ρ›Ρƒ Ρƒ наставку Π΄Π°Ρ‚ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΌΠΎΠ³ΡƒΡ›ΠΈΡ… ΠΎΠΏΡ†ΠΈΡ˜Π°.

УслуТни ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π·Π° бСзбСдносну ΠΏΡ€ΠΎΠ²Π΅Ρ€Ρƒ

ΠŸΠΎΡΡ‚ΠΎΡ˜ΠΈ Π²Π΅Π»ΠΈΠΊΠΈ Π±Ρ€ΠΎΡ˜ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΡ… ΠΏΠΎΠΌΠΎΡ›Π½ΠΈΡ… Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΈ скрипти којС Π²Ρ€ΡˆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΠΌ аспСктима Π”ΠΎΡ†ΠΊΠ΅Ρ€ инфраструктурС. НСки ΠΎΠ΄ ΡšΠΈΡ… су Π²Π΅Ρ› описани Ρƒ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎΠΌ Ρ‡Π»Π°Π½ΠΊΡƒ (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security), Π° Ρƒ ΠΎΠ²ΠΎΠΌ Ρ‡Π»Π°Π½ΠΊΡƒ ΠΆΠ΅Π»Π΅ΠΎ Π±ΠΈΡ… Π΄Π° сС фокусирам Π½Π° Ρ‚Ρ€ΠΈ ΠΎΠ΄ ΡšΠΈΡ…, који ΠΏΠΎΠΊΡ€ΠΈΠ²Π°Ρ˜Ρƒ Π²Π΅Ρ›ΠΈΠ½Ρƒ бСзбСдносних Π·Π°Ρ…Ρ‚Π΅Π²Π° Π·Π° Π”ΠΎΡ†ΠΊΠ΅Ρ€ сликС којС сС ΠΏΡ€Π°Π²Π΅ Ρ‚ΠΎΠΊΠΎΠΌ процСса Ρ€Π°Π·Π²ΠΎΡ˜Π°. ΠŸΠΎΡ€Π΅Π΄ Ρ‚ΠΎΠ³Π°, ΠΏΠΎΠΊΠ°Π·Π°Ρ›Ρƒ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°ΠΊΠΎ сС ΠΎΠ²Π° Ρ‚Ρ€ΠΈ услуТна ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ΠΌΠΎΠ³Ρƒ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΎΠ²Π°Ρ‚ΠΈ Ρƒ јСдан Ρ†Π΅Π²ΠΎΠ²ΠΎΠ΄ Π·Π° ΠΎΠ±Π°Π²Ρ™Π°ΡšΠ΅ бСзбСдносних ΠΏΡ€ΠΎΠ²Π΅Ρ€Π°.

Π₯Π°Π΄ΠΎΠ»ΠΈΠ½Ρ‚
https://github.com/hadolint/hadolint

ΠŸΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π°Π½ услуТни ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ Π·Π° ΠΊΠΎΠ½Π·ΠΎΠ»Ρƒ који ΠΏΠΎΠΌΠ°ΠΆΠ΅ Π΄Π° сС ΠΏΡ€Π²ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π½ΠΈ исправност ΠΈ бСзбСдност Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ˜Π° (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ само Π΄ΠΎΠ·Π²ΠΎΡ™Π΅Π½ΠΈΡ… рСгистара слика ΠΈΠ»ΠΈ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ судо).

ΠœΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ услуТних ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π”ΠΎΡ†ΠΊΠ΅Ρ€ бСзбСдноснС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅

Π”ΠΎΡ†ΠΊΠ»Π΅
https://github.com/goodwithtech/dockle

УслуТни ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ Π·Π° ΠΊΠΎΠ½Π·ΠΎΠ»Ρƒ који Ρ€Π°Π΄ΠΈ Π½Π° слици (ΠΈΠ»ΠΈ Π½Π° ΡΠ°Ρ‡ΡƒΠ²Π°Π½ΠΎΡ˜ Π°Ρ€Ρ…ΠΈΠ²ΠΈ слика) који ΠΏΡ€ΠΎΠ²Π΅Ρ€Π°Π²Π° исправност ΠΈ бСзбСдност ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½Π΅ сликС ΠΊΠ°ΠΎ Ρ‚Π°ΠΊΠ²Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ˜ΡƒΡ›ΠΈ њСнС слојСвС ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ – који су корисници ΠΊΡ€Π΅ΠΈΡ€Π°Π½ΠΈ, која упутства сС користС, који Π²ΠΎΠ»ΡƒΠΌΠ΅Π½ΠΈ сС ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Ρ˜Ρƒ , присуство ΠΏΡ€Π°Π·Π½Π΅ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ΅ ΠΈΡ‚Π΄. Π΅. Π”ΠΎΠΊ Π±Ρ€ΠΎΡ˜ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π° нијС Π²Π΅Π»ΠΈΠΊΠΈ ΠΈ заснива сС Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ сопствСних ΠΏΡ€ΠΎΠ²Π΅Ρ€Π° ΠΈ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡƒΠΊΠ° ЦИБ (Π¦Π΅Π½Ρ‚Π°Ρ€ Π·Π° Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ бСзбСдност) Π‘Π΅Π½Ρ†Ρ…ΠΌΠ°Ρ€ΠΊ Π·Π° Π΄ΠΎΡ†ΠΊΠ΅Ρ€.
ΠœΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ услуТних ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π”ΠΎΡ†ΠΊΠ΅Ρ€ бСзбСдноснС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅

Π’Ρ€ΠΈΠ²ΠΈ
https://github.com/aquasecurity/trivy

Овај услуТни ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ ΠΈΠΌΠ° Π·Π° Ρ†ΠΈΡ™ Π΄Π° ΠΏΡ€ΠΎΠ½Π°Ρ’Π΅ Π΄Π²Π΅ врстС Ρ€Π°ΡšΠΈΠ²ΠΎΡΡ‚ΠΈ - ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ са ΠΈΠ·Π³Ρ€Π°Π΄ΡšΠΎΠΌ ОБ (ΠΏΠΎΠ΄Ρ€ΠΆΠ°Π½ΠΈ ΠΎΠ΄ АлпинС, Π Π΅Π΄Π₯Π°Ρ‚ (Π•Π›), Π¦Π΅Π½Ρ‚ΠžΠ‘, Π”Π΅Π±ΠΈΠ°Π½ ГНУ, Π£Π±ΡƒΠ½Ρ‚Ρƒ) ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ са зависностима (Π“Π΅ΠΌΡ„ΠΈΠ»Π΅.Π»ΠΎΡ†ΠΊ, ΠŸΠΈΠΏΡ„ΠΈΠ»Π΅.Π»ΠΎΡ†ΠΊ, цомпосСр.Π»ΠΎΡ†ΠΊ, ΠΏΠ°Ρ†ΠΊΠ°Π³Π΅ -Π»ΠΎΡ†ΠΊ.јсон , ΠΈΠ°Ρ€Π½.Π»ΠΎΡ†ΠΊ, Ρ†Π°Ρ€Π³ΠΎ.Π»ΠΎΡ†ΠΊ). Π’Ρ€ΠΈΠ²ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° скСнира ΠΈ слику Ρƒ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Ρƒ ΠΈ Π»ΠΎΠΊΠ°Π»Π½Ρƒ слику, Π° Ρ‚Π°ΠΊΠΎΡ’Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° скСнира Π½Π° основу ΠΏΡ€Π΅Π½Π΅Ρ‚Π΅ .Ρ‚Π°Ρ€ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ са Π”ΠΎΡ†ΠΊΠ΅Ρ€ сликом.

ΠœΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ услуТних ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π”ΠΎΡ†ΠΊΠ΅Ρ€ бСзбСдноснС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅

ΠžΠΏΡ†ΠΈΡ˜Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ ΠΊΠΎΠΌΡƒΠ½Π°Π»Π½ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°

Π”Π° Π±ΠΈΡ… испробао описанС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Ρƒ ΠΈΠ·ΠΎΠ»ΠΎΠ²Π°Π½ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΡƒ, Π΄Π°Ρ›Ρƒ упутства Π·Π° ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ свих услуТних ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Ρƒ Π΄ΠΎΠ½Π΅ΠΊΠ»Π΅ ΠΏΠΎΡ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Ρ™Π΅Π½ΠΎΠΌ процСсу.

Π“Π»Π°Π²Π½Π° идСја јС Π΄Π° сС ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΠΊΠ°ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ аутоматску ΠΏΡ€ΠΎΠ²Π΅Ρ€Ρƒ ΡΠ°Π΄Ρ€ΠΆΠ°Ρ˜Π° Π·Π° ДоцкСрфилСс ΠΈ Π”ΠΎΡ†ΠΊΠ΅Ρ€ сликС којС сС ΠΊΡ€Π΅ΠΈΡ€Π°Ρ˜Ρƒ Ρ‚ΠΎΠΊΠΎΠΌ Ρ€Π°Π·Π²ΠΎΡ˜Π°.

Π‘Π°ΠΌΠ° Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° сС ΡΠ°ΡΡ‚ΠΎΡ˜ΠΈ ΠΎΠ΄ слСдСћих ΠΊΠΎΡ€Π°ΠΊΠ°:

  1. ΠŸΡ€ΠΎΠ²Π΅Ρ€Π° исправности ΠΈ бСзбСдности упутстава Π·Π° Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅ ΠΏΠΎΠΌΠΎΡ›Ρƒ услуТног ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π·Π° Π»ΠΈΠ½Ρ‚Π΅Ρ€ Π₯Π°Π΄ΠΎΠ»ΠΈΠ½Ρ‚
  2. ΠŸΡ€ΠΎΠ²Π΅Ρ€Π° исправности ΠΈ сигурности ΠΊΠΎΠ½Π°Ρ‡Π½ΠΈΡ… ΠΈ ΡΡ€Π΅Π΄ΡšΠΈΡ… слика - услуТни ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ Π”ΠΎΡ†ΠΊΠ»Π΅
  3. ΠŸΡ€ΠΎΠ²Π΅Ρ€Π° ΠΎΠΏΡˆΡ‚Π΅ ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈΡ… Ρ€Π°ΡšΠΈΠ²ΠΎΡΡ‚ΠΈ (Π¦Π’Π•) Ρƒ основној слици ΠΈ Π±Ρ€ΠΎΡ˜ зависности - ΠΏΠΎΠΌΠΎΡ›Ρƒ услуТног ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π’Ρ€ΠΈΠ²ΠΈ

КаснијС Ρƒ Ρ‡Π»Π°Π½ΠΊΡƒ Π΄Π°Ρ›Ρƒ Ρ‚Ρ€ΠΈ ΠΎΠΏΡ†ΠΈΡ˜Π΅ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Ρƒ ΠΎΠ²ΠΈΡ… ΠΊΠΎΡ€Π°ΠΊΠ°:
ΠŸΡ€Π²ΠΈ јС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡΠ°ΡšΠ΅ΠΌ ЦИ/Π¦Π” Ρ†Π΅Π²ΠΎΠ²ΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Π“ΠΈΡ‚Π›Π°Π±-Π° (са описом процСса подизања тСст инстанцС).
Π”Ρ€ΡƒΠ³ΠΈ јС ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ схСлл скриптС.
Π’Ρ€Π΅Ρ›ΠΈ јС ΡΡ‚Π²Π°Ρ€Π°ΡšΠ΅ Π”ΠΎΡ†ΠΊΠ΅Ρ€ сликС Π·Π° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅ Π”ΠΎΡ†ΠΊΠ΅Ρ€ слика.
ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ΄Π°Π±Ρ€Π°Ρ‚ΠΈ ΠΎΠΏΡ†ΠΈΡ˜Ρƒ која Π²Π°ΠΌ највишС ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°, ΠΏΡ€Π΅Π½Π΅Ρ‚ΠΈ јС Π½Π° ΡΠ²ΠΎΡ˜Ρƒ инфраструктуру ΠΈ ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄ΠΈΡ‚ΠΈ јС својим ΠΏΠΎΡ‚Ρ€Π΅Π±Π°ΠΌΠ°.

Π‘Π²Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ ΠΈ Π΄ΠΎΠ΄Π°Ρ‚Π½Π° упутства сС Ρ‚Π°ΠΊΠΎΡ’Π΅ Π½Π°Π»Π°Π·Π΅ Ρƒ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Ρƒ: https://github.com/Swordfish-Security/docker_cicd

Π“ΠΈΡ‚Π›Π°Π± ЦИ/Π¦Π” ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π°

Π£ ΠΏΡ€Π²ΠΎΡ˜ ΠΎΠΏΡ†ΠΈΡ˜ΠΈ Ρ›Π΅ΠΌΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π°Ρ‚ΠΈ ΠΊΠ°ΠΊΠΎ сС бСзбСдноснС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅ ΠΌΠΎΠ³Ρƒ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Ρ‚ΠΈ користСћи Π“ΠΈΡ‚Π›Π°Π± систСм Ρ€ΠΈΠ·Π½ΠΈΡ†Π΅ ΠΊΠ°ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ОвдС Ρ›Π΅ΠΌΠΎ ΠΏΡ€ΠΎΡ›ΠΈ ΠΊΡ€ΠΎΠ· ΠΊΠΎΡ€Π°ΠΊΠ΅ ΠΈ Π²ΠΈΠ΄Π΅Ρ‚ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° подСсимо тСстно ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ΅ са Π“ΠΈΡ‚Π›Π°Π±-ΠΎΠΌ ΠΎΠ΄ Π½ΡƒΠ»Π΅, ΠΊΡ€Π΅ΠΈΡ€Π°ΠΌΠΎ процСс ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ° ΠΈ ΠΏΠΎΠΊΡ€Π΅Π½Π΅ΠΌΠΎ услуТнС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅ Π·Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ тСстног Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅-Π° ΠΈ насумичнС сликС - ΠˆΡƒΠΈΡ†Π΅Π‘Ρ…ΠΎΠΏ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ Π“ΠΈΡ‚Π›Π°Π±-Π°
1. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π”ΠΎΡ†ΠΊΠ΅Ρ€:

sudo apt-get update && sudo apt-get install docker.io

2. Π”ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ Ρ‚Ρ€Π΅Π½ΡƒΡ‚Π½ΠΎΠ³ корисника Ρƒ Π΄ΠΎΡ†ΠΊΠ΅Ρ€ Π³Ρ€ΡƒΠΏΡƒ Ρ‚Π°ΠΊΠΎ Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π΄ΠΈΡ‚Π΅ са Π΄ΠΎΡ†ΠΊΠ΅Ρ€-ΠΎΠΌ Π±Π΅Π· ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π΅ судо:

sudo addgroup <username> docker

3. ΠŸΡ€ΠΎΠ½Π°Ρ’ΠΈΡ‚Π΅ ΡΠ²ΠΎΡ˜Ρƒ ИП адрСсу:

ip addr

4. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΠΈ ΠΏΠΎΠΊΡ€Π΅Π½ΠΈΡ‚Π΅ Π“ΠΈΡ‚Π›Π°Π± Ρƒ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Ρƒ, Π·Π°ΠΌΠ΅ΡšΡƒΡ˜ΡƒΡ›ΠΈ ИП адрСсу Ρƒ ΠΈΠΌΠ΅Π½Ρƒ хоста својом:

docker run --detach 
--hostname 192.168.1.112 
--publish 443:443 --publish 80:80 
--name gitlab 
--restart always 
--volume /srv/gitlab/config:/etc/gitlab 
--volume /srv/gitlab/logs:/var/log/gitlab 
--volume /srv/gitlab/data:/var/opt/gitlab 
gitlab/gitlab-ce:latest

Π§Π΅ΠΊΠ°ΠΌΠΎ Π΄Π° Π“ΠΈΡ‚Π›Π°Π± Π·Π°Π²Ρ€ΡˆΠΈ свС Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½Π΅ инсталационС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ (процСс ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π°Ρ‚ΠΈΡ‚ΠΈ ΠΊΡ€ΠΎΠ· ΠΈΠ·Π»Π°Π· Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ Π΅Π²ΠΈΠ΄Π΅Π½Ρ†ΠΈΡ˜Π΅: Π΄ΠΎΡ†ΠΊΠ΅Ρ€ логс -Ρ„ Π³ΠΈΡ‚Π»Π°Π±).

5. ΠžΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ свој Π»ΠΎΠΊΠ°Π»Π½ΠΈ ИП Ρƒ ΠΏΡ€Π΅Ρ‚Ρ€Π°ΠΆΠΈΠ²Π°Ρ‡Ρƒ ΠΈ Π²ΠΈΠ΄ΠΈΡ‚Π΅ страницу која Π½ΡƒΠ΄ΠΈ ΠΏΡ€ΠΎΠΌΡ˜Π΅Π½Ρƒ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ΅ Π·Π° Ρ€ΠΎΠΎΡ‚ корисника:
ΠœΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ услуТних ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π”ΠΎΡ†ΠΊΠ΅Ρ€ бСзбСдноснС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅
ΠŸΠΎΡΡ‚Π°Π²ΠΈΡ‚Π΅ Π½ΠΎΠ²Ρƒ Π»ΠΎΠ·ΠΈΠ½ΠΊΡƒ ΠΈ ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π° Π“ΠΈΡ‚Π›Π°Π±.

6. ΠšΡ€Π΅ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π½ΠΎΠ²ΠΈ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ†ΠΈΡ†Π΄-тСст ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·ΡƒΡ˜Ρ‚Π΅ Π³Π° са ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΎΠΌ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΎΠΌ Π Π•ΠΠ”ΠœΠ•.ΠΌΠ΄:
ΠœΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ услуТних ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π”ΠΎΡ†ΠΊΠ΅Ρ€ бСзбСдноснС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅
7. Π‘Π°Π΄Π° ΠΌΠΎΡ€Π°ΠΌΠΎ Π΄Π° инсталирамо Π“ΠΈΡ‚Π›Π°Π± Π ΡƒΠ½Π½Π΅Ρ€: Π°Π³Π΅Π½Ρ‚ који Ρ›Π΅ Π½Π° Π·Π°Ρ…Ρ‚Π΅Π² ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ свС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ˜Π΅.
ΠŸΡ€Π΅ΡƒΠ·ΠΌΠΈΡ‚Π΅ Π½Π°Ρ˜Π½ΠΎΠ²ΠΈΡ˜Ρƒ Π²Π΅Ρ€Π·ΠΈΡ˜Ρƒ (Ρƒ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ, ΠΏΠΎΠ΄ Π›ΠΈΠ½ΡƒΠΊΠΎΠΌ 64-Π±ΠΈΡ‚):

sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

8. Π£Ρ‡ΠΈΠ½ΠΈΡ‚Π΅ Π³Π° ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈΠΌ:

sudo chmod +x /usr/local/bin/gitlab-runner

9. Π”ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ корисника ОБ-Π° Π·Π° Π ΡƒΠ½Π½Π΅Ρ€ ΠΈ ΠΏΠΎΠΊΡ€Π΅Π½ΠΈΡ‚Π΅ услугу:

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

Π’Ρ€Π΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΎΡ‚ΠΏΡ€ΠΈΠ»ΠΈΠΊΠ΅ ΠΎΠ²Π°ΠΊΠΎ:

local@osboxes:~$ sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
Runtime platform arch=amd64 os=linux pid=8438 revision=0e5417a3 version=12.0.1
local@osboxes:~$ sudo gitlab-runner start
Runtime platform arch=amd64 os=linux pid=8518 revision=0e5417a3 version=12.0.1

10. Π‘Π°Π΄Π° Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΡƒΡ˜Π΅ΠΌΠΎ Π ΡƒΠ½Π½Π΅Ρ€ Ρ‚Π°ΠΊΠΎ Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π° са нашом Π“ΠΈΡ‚Π›Π°Π± инстанцом.
Π”Π° бистС Ρ‚ΠΎ ΡƒΡ€Π°Π΄ΠΈΠ»ΠΈ, ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ страницу БСттингс-ЦИ/Π¦Π” (Ρ…Ρ‚Ρ‚ΠΏ://ОУР_ ИП_АДДРЕББ/Ρ€ΠΎΠΎΡ‚/Ρ†ΠΈΡ†Π΄-тСст/-/сСттингс/Ρ†ΠΈ_Ρ†Π΄) ΠΈ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΡ†ΠΈ РуннСрс ΠΏΡ€ΠΎΠ½Π°Ρ’ΠΈΡ‚Π΅ Π£Π Π› ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ Π·Π° Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Ρƒ:
ΠœΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ услуТних ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π”ΠΎΡ†ΠΊΠ΅Ρ€ бСзбСдноснС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅
11. Π Π΅Π³ΠΈΡΡ‚Ρ€ΡƒΡ˜Ρ‚Π΅ Ρ‚Ρ€ΠΊΠ°Ρ‡Π° Π·Π°ΠΌΠ΅Π½ΠΎΠΌ Π£Π Π›-Π° ΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π° Π·Π° Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Ρƒ:

sudo gitlab-runner register 
--non-interactive 
--url "http://<URL>/" 
--registration-token "<Registration Token>" 
--executor "docker" 
--docker-privileged 
--docker-image alpine:latest 
--description "docker-runner" 
--tag-list "docker,privileged" 
--run-untagged="true" 
--locked="false" 
--access-level="not_protected"

Као Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚, добијамо Π³ΠΎΡ‚ΠΎΠ² Ρ€Π°Π΄Π½ΠΈ Π“ΠΈΡ‚Π›Π°Π±, Ρƒ који Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π΄ΠΎΠ΄Π°ΠΌΠΎ упутства Π·Π° ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ Π½Π°ΡˆΠΈΡ… услуТних ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°. Π£ овој Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜ΠΈ, Π½Π΅ΠΌΠ°ΠΌΠΎ ΠΊΠΎΡ€Π°ΠΊΠ΅ ΠΈΠ·Π³Ρ€Π°Π΄ΡšΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ˜Π΅, Π°Π»ΠΈ Ρƒ стварном ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΡƒ ΠΎΠ½ΠΈ Ρ›Π΅ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄ΠΈΡ‚ΠΈ ΠΊΠΎΡ€Π°Ρ†ΠΈΠΌΠ° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ° ΠΈ гСнСрисати сликС ΠΈ Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅ Π·Π° Π°Π½Π°Π»ΠΈΠ·Ρƒ.

ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Ρ†Π΅Π²ΠΎΠ²ΠΎΠ΄Π°

1. Π”ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ Ρƒ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π΅ ΠΌΠΈΠ΄ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅.Π΄Ρ„ (ΠΎΠ²ΠΎ јС тСст Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅ који Ρ›Π΅ΠΌΠΎ тСстирати) ΠΈ Π“ΠΈΡ‚Π›Π°Π± ЦИ/Π¦Π” ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½ΠΈ Ρ„Π°Ρ˜Π» процСса .Π³ΠΈΡ‚Π»Π°Π±-Ρ†ΠΈΡ†Π΄.ΠΈΠΌΠ», који Π½Π°Π²ΠΎΠ΄ΠΈ упутства Π·Π° скСнСрС (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ ΠΏΠ°ΠΆΡšΡƒ Π½Π° Ρ‚Π°Ρ‡ΠΊΡƒ Ρƒ Π½Π°Π·ΠΈΠ²Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅).

Π˜ΠΠœΠ› ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° садрТи упутства Π·Π° ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ Ρ‚Ρ€ΠΈ услуТна ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° (Π₯Π°Π΄ΠΎΠ»ΠΈΠ½Ρ‚, Π”ΠΎΡ†ΠΊΠ»Π΅ ΠΈ Π’Ρ€ΠΈΠ²ΠΈ) који Ρ›Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ΠΈ ΠΈΠ·Π°Π±Ρ€Π°Π½ΠΈ Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅ ΠΈ слику Π½Π°Π²Π΅Π΄Π΅Π½Ρƒ Ρƒ ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²ΠΎΡ˜ Π”ΠžΠ¦ΠšΠ•Π Π€Π˜Π›Π•. Π‘Π²Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅ΡƒΠ·Π΅Ρ‚ΠΈ ΠΈΠ· ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π°: https://github.com/Swordfish-Security/docker_cicd/

Извод ΠΈΠ· ΠΌΠΈΠ΄ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅.Π΄Ρ„ (ΠΎΠ²ΠΎ јС апстрактна Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° са скупом ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΡ™Π½ΠΈΡ… ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ˜Π° само Π΄Π° Π±ΠΈ сС ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ ΠΊΠ°ΠΊΠΎ услуТни ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡˆΠ΅). Π”ΠΈΡ€Π΅ΠΊΡ‚Π½Π° Π²Π΅Π·Π° Π΄ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅: ΠΌΠΈΠ΄ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅.Π΄Ρ„

Π‘Π°Π΄Ρ€ΠΆΠ°Ρ˜ ΠΌΠΈΠ΄ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅.Π΄Ρ„

FROM amd64/node:10.16.0-alpine@sha256:f59303fb3248e5d992586c76cc83e1d3700f641cbcd7c0067bc7ad5bb2e5b489 AS tsbuild
COPY package.json .
COPY yarn.lock .
RUN yarn install
COPY lib lib
COPY tsconfig.json tsconfig.json
COPY tsconfig.app.json tsconfig.app.json
RUN yarn build
FROM amd64/ubuntu:18.04@sha256:eb70667a801686f914408558660da753cde27192cd036148e58258819b927395
LABEL maintainer="Rhys Arkins <[email protected]>"
LABEL name="renovate"
...
COPY php.ini /usr/local/etc/php/php.ini
RUN cp -a /tmp/piik/* /var/www/html/
RUN rm -rf /tmp/piwik
RUN chown -R www-data /var/www/html
ADD piwik-cli-setup /piwik-cli-setup
ADD reset.php /var/www/html/
## ENTRYPOINT ##
ADD entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
USER root

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π˜ΠΠœΠ›-Π° ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΎΠ²Π°ΠΊΠΎ (сама Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° сС ΠΌΠΎΠΆΠ΅ Π½Π°Ρ›ΠΈ ΠΏΡ€Π΅ΠΊΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½Π΅ Π²Π΅Π·Π΅ ΠΎΠ²Π΄Π΅: .Π³ΠΈΡ‚Π»Π°Π±-Ρ†ΠΈ.ΠΈΠΌΠ»):

Π‘Π°Π΄Ρ€ΠΆΠ°Ρ˜ .Π³ΠΈΡ‚Π»Π°Π±-Ρ†ΠΈ.ΠΈΠΌΠ»

variables:
    DOCKER_HOST: "tcp://docker:2375/"
    DOCKERFILE: "mydockerfile.df" # name of the Dockerfile to analyse   
    DOCKERIMAGE: "bkimminich/juice-shop" # name of the Docker image to analyse
    # DOCKERIMAGE: "knqyf263/cve-2018-11235" # test Docker image with several CRITICAL CVE
    SHOWSTOPPER_PRIORITY: "CRITICAL" # what level of criticality will fail Trivy job
    TRIVYCACHE: "$CI_PROJECT_DIR/.cache" # where to cache Trivy database of vulnerabilities for faster reuse
    ARTIFACT_FOLDER: "$CI_PROJECT_DIR"
 
services:
    - docker:dind # to be able to build docker images inside the Runner
 
stages:
    - scan
    - report
    - publish
 
HadoLint:
    # Basic lint analysis of Dockerfile instructions
    stage: scan
    image: docker:git
 
    after_script:
    - cat $ARTIFACT_FOLDER/hadolint_results.json
 
    script:
    - export VERSION=$(wget -q -O - https://api.github.com/repos/hadolint/hadolint/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/hadolint/hadolint/releases/download/v${VERSION}/hadolint-Linux-x86_64 && chmod +x hadolint-Linux-x86_64
     
    # NB: hadolint will always exit with 0 exit code
    - ./hadolint-Linux-x86_64 -f json $DOCKERFILE > $ARTIFACT_FOLDER/hadolint_results.json || exit 0
 
    artifacts:
        when: always # return artifacts even after job failure       
        paths:
        - $ARTIFACT_FOLDER/hadolint_results.json
 
Dockle:
    # Analysing best practices about docker image (users permissions, instructions followed when image was built, etc.)
    stage: scan   
    image: docker:git
 
    after_script:
    - cat $ARTIFACT_FOLDER/dockle_results.json
 
    script:
    - export VERSION=$(wget -q -O - https://api.github.com/repos/goodwithtech/dockle/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.tar.gz && tar zxf dockle_${VERSION}_Linux-64bit.tar.gz
    - ./dockle --exit-code 1 -f json --output $ARTIFACT_FOLDER/dockle_results.json $DOCKERIMAGE   
     
    artifacts:
        when: always # return artifacts even after job failure       
        paths:
        - $ARTIFACT_FOLDER/dockle_results.json
 
Trivy:
    # Analysing docker image and package dependencies against several CVE bases
    stage: scan   
    image: docker:git
 
    script:
    # getting the latest Trivy
    - apk add rpm
    - export VERSION=$(wget -q -O - https://api.github.com/repos/knqyf263/trivy/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/knqyf263/trivy/releases/download/v${VERSION}/trivy_${VERSION}_Linux-64bit.tar.gz && tar zxf trivy_${VERSION}_Linux-64bit.tar.gz
     
    # displaying all vulnerabilities w/o failing the build
    - ./trivy -d --cache-dir $TRIVYCACHE -f json -o $ARTIFACT_FOLDER/trivy_results.json --exit-code 0 $DOCKERIMAGE    
    
    # write vulnerabilities info to stdout in human readable format (reading pure json is not fun, eh?). You can remove this if you don't need this.
    - ./trivy -d --cache-dir $TRIVYCACHE --exit-code 0 $DOCKERIMAGE    
 
    # failing the build if the SHOWSTOPPER priority is found
    - ./trivy -d --cache-dir $TRIVYCACHE --exit-code 1 --severity $SHOWSTOPPER_PRIORITY --quiet $DOCKERIMAGE
         
    artifacts:
        when: always # return artifacts even after job failure
        paths:
        - $ARTIFACT_FOLDER/trivy_results.json
 
    cache:
        paths:
        - .cache
 
Report:
    # combining tools outputs into one HTML
    stage: report
    when: always
    image: python:3.5
     
    script:
    - mkdir json
    - cp $ARTIFACT_FOLDER/*.json ./json/
    - pip install json2html
    - wget https://raw.githubusercontent.com/shad0wrunner/docker_cicd/master/convert_json_results.py
    - python ./convert_json_results.py
     
    artifacts:
        paths:
        - results.html

Ако јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ, Ρ‚Π°ΠΊΠΎΡ’Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ скСнирати сачуванС сликС ΠΊΠ°ΠΎ .Ρ‚Π°Ρ€ Π°Ρ€Ρ…ΠΈΠ²Ρƒ (ΠΌΠ΅Ρ’ΡƒΡ‚ΠΈΠΌ, ΠΌΠΎΡ€Π°Ρ›Π΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΡƒΠ»Π°Π·Π½Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ Π·Π° услуТнС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅ Ρƒ Π˜ΠΠœΠ› Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ†ΠΈ)

НапомСна: Π’Ρ€ΠΈΠ²ΠΈ Π·Π°Ρ…Ρ‚Π΅Π²Π° инсталиран Ρ€ΠΏΠΌ ΠΈ git. Π£ супротном Ρ›Π΅ гСнСрисати Π³Ρ€Π΅ΡˆΠΊΠ΅ ΠΏΡ€ΠΈΠ»ΠΈΠΊΠΎΠΌ ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ° слика заснованих Π½Π° Π Π΅Π΄Π₯Π°Ρ‚-Ρƒ ΠΈ добијања Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ° Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° Ρ€Π°ΡšΠΈΠ²ΠΎΡΡ‚ΠΈ.

2. Након додавања Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Ρƒ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π΅, ΠΏΡ€Π΅ΠΌΠ° упутствима Ρƒ нашој ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½ΠΎΡ˜ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ†ΠΈ, Π“ΠΈΡ‚Π›Π°Π± Ρ›Π΅ аутоматски ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ процСс ΠΏΡ€Π°Π²Ρ™Π΅ΡšΠ° ΠΈ ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ°. На ΠΊΠ°Ρ€Ρ‚ΠΈΡ†ΠΈ ЦИ / Π¦Π” β†’ Π¦Π΅Π²ΠΎΠ²ΠΎΠ΄ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΠΈ Π½Π°ΠΏΡ€Π΅Π΄Π°ΠΊ упутстава.

Као Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚, ΠΈΠΌΠ°ΠΌΠΎ Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Π·Π°Π΄Π°Ρ‚ΠΊΠ°. Π’Ρ€ΠΈ ΠΎΠ΄ ΡšΠΈΡ… су Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΡƒΠΊΡ™ΡƒΡ‡Π΅Π½Π΅ Ρƒ ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅, Π° послСдњи (Π˜Π·Π²Π΅ΡˆΡ‚Π°Ρ˜) ΠΏΡ€ΠΈΠΊΡƒΠΏΡ™Π° Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π°Π½ ΠΈΠ·Π²Π΅ΡˆΡ‚Π°Ρ˜ ΠΈΠ· Ρ€Π°ΡˆΡ‚Ρ€ΠΊΠ°Π½ΠΈΡ… Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° са Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΠΌΠ° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ°.
ΠœΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ услуТних ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π”ΠΎΡ†ΠΊΠ΅Ρ€ бСзбСдноснС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅
Π’Ρ€ΠΈΠ²ΠΈ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½ΠΎ зауставља својС ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ΅ Π°ΠΊΠΎ сС Π½Π° слици ΠΈΠ»ΠΈ зависностима ΠΏΡ€ΠΎΠ½Π°Ρ’Ρƒ ΠšΠ Π˜Π’Π˜Π§ΠΠ• Ρ€Π°ΡšΠΈΠ²ΠΎΡΡ‚ΠΈ. Π£ исто Π²Ρ€Π΅ΠΌΠ΅, Π₯Π°Π΄ΠΎΠ»ΠΈΠ½Ρ‚ ΡƒΠ²Π΅ΠΊ Π²Ρ€Π°Ρ›Π° БуццСсс Ρƒ ΠΊΠΎΠ΄Ρƒ Π·Π° ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ΅, ΠΏΠΎΡˆΡ‚ΠΎ њСгово ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ΅ ΡƒΠ²Π΅ΠΊ ΠΈΠΌΠ° Π½Π°ΠΏΠΎΠΌΠ΅Π½Π΅, ΡˆΡ‚ΠΎ Π΄ΠΎΠ²ΠΎΠ΄ΠΈ Π΄ΠΎ Π·Π°ΡƒΡΡ‚Π°Π²Ρ™Π°ΡšΠ° ΠΈΠ·Π³Ρ€Π°Π΄ΡšΠ΅.

Π£ зависности ΠΎΠ΄ Π²Π°ΡˆΠΈΡ… спСцифичних Π·Π°Ρ…Ρ‚Π΅Π²Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΠ΅Ρ‚Π΅ ΠΈΠ·Π»Π°Π·Π½ΠΈ ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΎ Π΄Π° ΠΊΠ°Π΄Π° ΠΎΠ²ΠΈ услуТни ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΎΡ‚ΠΊΡ€ΠΈΡ˜Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½Π΅ критичности, Ρ‚Π°ΠΊΠΎΡ’Π΅ Π·Π°ΡƒΡΡ‚Π°Π²Ρ™Π°Ρ˜Ρƒ процСс ΠΏΡ€Π°Π²Ρ™Π΅ΡšΠ°. Π£ нашСм ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ, ΠΈΠ·Π³Ρ€Π°Π΄ΡšΠ° Ρ›Π΅ сС зауставити само Π°ΠΊΠΎ Π’Ρ€ΠΈΠ²ΠΈ ΠΎΡ‚ΠΊΡ€ΠΈΡ˜Π΅ Ρ€Π°ΡšΠΈΠ²ΠΎΡΡ‚ са ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎΡˆΡ›Ρƒ ΠΊΠΎΡ˜Ρƒ смо Π½Π°Π²Π΅Π»ΠΈ Ρƒ ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²ΠΎΡ˜ Π‘Π₯ΠžΠ’Π‘Π’ΠžΠŸΠŸΠ•Π  Ρƒ .Π³ΠΈΡ‚Π»Π°Π±-Ρ†ΠΈ.ΠΈΠΌΠ».
ΠœΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ услуТних ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π”ΠΎΡ†ΠΊΠ΅Ρ€ бСзбСдноснС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Ρ€Π°Π΄Π° сваког услуТног ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ΠΌΠΎΠΆΠ΅ сС Π²ΠΈΠ΄Π΅Ρ‚ΠΈ Ρƒ Π΅Π²ΠΈΠ΄Π΅Π½Ρ†ΠΈΡ˜ΠΈ сваког Π·Π°Π΄Π°Ρ‚ΠΊΠ° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ°, Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Ρƒ јсон Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°ΠΌΠ° Ρƒ ΠΎΠ΄Π΅Ρ™ΠΊΡƒ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΠ°Ρ‚Π° ΠΈΠ»ΠΈ Ρƒ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎΠΌ Π₯Π’ΠœΠ› ΠΈΠ·Π²Π΅ΡˆΡ‚Π°Ρ˜Ρƒ (вишС ΠΎ Ρ‚ΠΎΠΌΠ΅ Ρƒ наставку):
ΠœΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ услуТних ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π”ΠΎΡ†ΠΊΠ΅Ρ€ бСзбСдноснС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅

3. Π”Π° Π±ΠΈ сС ΠΈΠ·Π²Π΅ΡˆΡ‚Π°Ρ˜ΠΈ ΠΎ корисности прСдставили Ρƒ ΠΌΠ°Π»ΠΎ Ρ‡ΠΈΡ‚Ρ™ΠΈΠ²ΠΈΡ˜ΠΎΡ˜ Ρ„ΠΎΡ€ΠΌΠΈ, ΠΌΠ°Π»Π° ΠŸΠΈΡ‚Ρ…ΠΎΠ½ скрипта сС користи Π·Π° ΠΏΡ€Π΅Ρ‚Π²Π°Ρ€Π°ΡšΠ΅ Ρ‚Ρ€ΠΈ јсон Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ Ρƒ Ρ˜Π΅Π΄Π½Ρƒ Π₯Π’ΠœΠ› Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ са Ρ‚Π°Π±Π΅Π»ΠΎΠΌ нСдостатака.
Ова скрипта сС ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ посСбним Π·Π°Π΄Π°Ρ‚ΠΊΠΎΠΌ Π˜Π·Π²Π΅ΡˆΡ‚Π°Ρ˜Π°, Π° њСн ΠΊΠΎΠ½Π°Ρ‡Π½ΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ јС Π₯Π’ΠœΠ› Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° са ΠΈΠ·Π²Π΅ΡˆΡ‚Π°Ρ˜Π΅ΠΌ. Π˜Π·Π²ΠΎΡ€ скриптС сС Ρ‚Π°ΠΊΠΎΡ’Π΅ Π½Π°Π»Π°Π·ΠΈ Ρƒ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Ρƒ ΠΈ ΠΌΠΎΠΆΠ΅ сС ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄ΠΈΡ‚ΠΈ вашим ΠΏΠΎΡ‚Ρ€Π΅Π±Π°ΠΌΠ°, бојама ΠΈΡ‚Π΄.
ΠœΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ услуТних ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π”ΠΎΡ†ΠΊΠ΅Ρ€ бСзбСдноснС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅

Π‘Ρ…Π΅Π»Π» скрипта

Π”Ρ€ΡƒΠ³Π° ΠΎΠΏΡ†ΠΈΡ˜Π° јС ΠΏΠΎΠ³ΠΎΠ΄Π½Π° Π·Π° ΡΠ»ΡƒΡ‡Π°Ρ˜Π΅Π²Π΅ ΠΊΠ°Π΄Π° Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π”ΠΎΡ†ΠΊΠ΅Ρ€ сликС којС нису Ρƒ ΠΎΠΊΠ²ΠΈΡ€Ρƒ ЦИ/Π¦Π” систСма, ΠΈΠ»ΠΈ ΠΌΠΎΡ€Π°Ρ‚Π΅ Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ свС ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ˜Π΅ Ρƒ ΠΎΠ±Π»ΠΈΠΊΡƒ који сС ΠΌΠΎΠΆΠ΅ ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π½Π° хосту. ΠžΠ²Ρƒ ΠΎΠΏΡ†ΠΈΡ˜Ρƒ ΠΏΠΎΠΊΡ€ΠΈΠ²Π° Π³ΠΎΡ‚ΠΎΠ²Π° схСлл скрипта која сС ΠΌΠΎΠΆΠ΅ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ Π½Π° Ρ‡ΠΈΡΡ‚ΠΎΡ˜ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΎΡ˜ (ΠΈΠ»ΠΈ Ρ‡Π°ΠΊ ΡΡ‚Π²Π°Ρ€Π½ΠΎΡ˜) машини. Π‘ΠΊΡ€ΠΈΠΏΡ‚Π° ΠΏΡ€Π°Ρ‚ΠΈ иста упутства ΠΊΠ°ΠΎ Π³ΠΈΡ‚Π»Π°Π±-Ρ€ΡƒΠ½Π½Π΅Ρ€ ΠΈΠ·Π½Π°Π΄.

Π”Π° Π±ΠΈ скрипта ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ функционисала, Π”ΠΎΡ†ΠΊΠ΅Ρ€ ΠΌΠΎΡ€Π° Π±ΠΈΡ‚ΠΈ инсталиран Π½Π° систСму ΠΈ Ρ‚Ρ€Π΅Π½ΡƒΡ‚Π½ΠΈ корисник ΠΌΠΎΡ€Π° Π±ΠΈΡ‚ΠΈ Ρƒ Π³Ρ€ΡƒΠΏΠΈ Π·Π° Π΄ΠΎΡ†ΠΊΠ΅Ρ€.

Π‘Π°ΠΌΠ° скрипта сС ΠΌΠΎΠΆΠ΅ Π½Π°Ρ›ΠΈ ΠΎΠ²Π΄Π΅: Π΄ΠΎΡ†ΠΊΠ΅Ρ€_сСц_Ρ†Ρ…Π΅Ρ†ΠΊ.сх

На ΠΏΠΎΡ‡Π΅Ρ‚ΠΊΡƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅, ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ ΠΎΠ΄Ρ€Π΅Ρ’ΡƒΡ˜Ρƒ ΠΊΠΎΡ˜Ρƒ слику Ρ‚Ρ€Π΅Π±Π° скСнирати ΠΈ који Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΈ критичности Ρ›Π΅ ΠΏΡ€ΠΎΡƒΠ·Ρ€ΠΎΠΊΠΎΠ²Π°Ρ‚ΠΈ Π΄Π° услуТни ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ Π’Ρ€ΠΈΠ²ΠΈ ΠΈΠ·Π°Ρ’Π΅ са Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π³Ρ€Π΅ΡˆΠΊΠ΅.

Π’ΠΎΠΊΠΎΠΌ ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ° скриптС, сви услуТни ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΠΏΡ€Π΅ΡƒΠ·Π΅Ρ‚ΠΈ Ρƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ Π΄ΠΎΡ†ΠΊΠ΅Ρ€_тоолс, Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΡšΠΈΡ…ΠΎΠ²ΠΎΠ³ Ρ€Π°Π΄Π° - Ρƒ ΠΈΠΌΠ΅Π½ΠΈΠΊΡƒ Π΄ΠΎΡ†ΠΊΠ΅Ρ€_тоолс/јсон, Π° Π₯Π’ΠœΠ› са ΠΈΠ·Π²Π΅ΡˆΡ‚Π°Ρ˜Π΅ΠΌ Ρ›Π΅ Π±ΠΈΡ‚ΠΈ Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ†ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ.Ρ…Ρ‚ΠΌΠ».

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ·Π»Π°Π·Π° скриптС

~/docker_cicd$ ./docker_sec_check.sh

[+] Setting environment variables
[+] Installing required packages
[+] Preparing necessary directories
[+] Fetching sample Dockerfile
2020-10-20 10:40:00 (45.3 MB/s) - β€˜Dockerfile’ saved [8071/8071]
[+] Pulling image to scan
latest: Pulling from bkimminich/juice-shop
[+] Running Hadolint
...
Dockerfile:205 DL3015 Avoid additional packages by specifying `--no-install-recommends`
Dockerfile:248 DL3002 Last USER should not be root
...
[+] Running Dockle
...
WARN    - DKL-DI-0006: Avoid latest tag
        * Avoid 'latest' tag
INFO    - CIS-DI-0005: Enable Content trust for Docker
        * export DOCKER_CONTENT_TRUST=1 before docker pull/build
...
[+] Running Trivy
juice-shop/frontend/package-lock.json
=====================================
Total: 3 (UNKNOWN: 0, LOW: 1, MEDIUM: 0, HIGH: 2, CRITICAL: 0)

+---------------------+------------------+----------+---------+-------------------------+
|       LIBRARY       | VULNERABILITY ID | SEVERITY | VERSION |             TITLE       |
+---------------------+------------------+----------+---------+-------------------------+
| object-path         | CVE-2020-15256   | HIGH     | 0.11.4  | Prototype pollution in  |
|                     |                  |          |         | object-path             |
+---------------------+------------------+          +---------+-------------------------+
| tree-kill           | CVE-2019-15599   |          | 1.2.2   | Code Injection          |
+---------------------+------------------+----------+---------+-------------------------+
| webpack-subresource | CVE-2020-15262   | LOW      | 1.4.1   | Unprotected dynamically |
|                     |                  |          |         | loaded chunks           |
+---------------------+------------------+----------+---------+-------------------------+

juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)

...

juice-shop/package-lock.json
============================
Total: 5 (CRITICAL: 5)

...
[+] Removing left-overs
[+] Making the output look pretty
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html

Π”ΠΎΡ†ΠΊΠ΅Ρ€ слика са свим услуТним ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΠΌΠ°

Као Ρ‚Ρ€Π΅Ρ›Ρƒ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρƒ, саставио сам Π΄Π²Π° Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½Π° Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅-Π° Π΄Π° Π±ΠΈΡ… Π½Π°ΠΏΡ€Π°Π²ΠΈΠΎ слику ΠΏΠΎΠΌΠΎΡ›Ρƒ сигурносних услуТних ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°. ЈСдан Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅ Ρ›Π΅ ΠΏΠΎΠΌΠΎΡ›ΠΈ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ скуп Π·Π° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅ сликС ΠΈΠ· ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π°, Π΄Ρ€ΡƒΠ³ΠΈ (Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅_Ρ‚Π°Ρ€) Ρ›Π΅ ΠΏΠΎΠΌΠΎΡ›ΠΈ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ сСт Π·Π° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅ Ρ‚Π°Ρ€ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ са сликом.

1. Π£Π·ΠΈΠΌΠ°ΠΌΠΎ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Ρ˜ΡƒΡ›Ρƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ ΠΈ скриптС ΠΈΠ· ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π° https://github.com/Swordfish-Security/docker_cicd/tree/master/Dockerfile.
2. ΠŸΠΎΠΊΡ€Π΅Π½ΠΈΡ‚Π΅ Π³Π° Π·Π° склапањС:

docker build -t dscan:image -f docker_security.df .

3. Након ΡˆΡ‚ΠΎ јС Π³Ρ€Π°Π΄ΡšΠ° Π·Π°Π²Ρ€ΡˆΠ΅Π½Π°, ΠΊΡ€Π΅ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ ΠΎΠ΄ сликС. Π˜ΡΡ‚ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½ΠΎ, ΠΏΡ€ΠΎΡΠ»Π΅Ρ’ΡƒΡ˜Π΅ΠΌΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Ρƒ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ° Π”ΠžΠ¦ΠšΠ•Π Π˜ΠœΠΠ“Π• са ΠΈΠΌΠ΅Π½ΠΎΠΌ сликС која нас Π·Π°Π½ΠΈΠΌΠ° ΠΈ ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°ΠΌΠΎ Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅ који ΠΆΠ΅Π»ΠΈΠΌΠΎ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠΎ са нашС машинС Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ /Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅ (ΠΈΠΌΠ°Ρ˜Ρ‚Π΅ Π½Π° ΡƒΠΌΡƒ Π΄Π° јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° апсолутна ΠΏΡƒΡ‚Π°ΡšΠ° Π΄ΠΎ ΠΎΠ²Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅):

docker run --rm -v $(pwd)/results:/results -v $(pwd)/docker_security.df:/Dockerfile -e DOCKERIMAGE="bkimminich/juice-shop" dscan:image


[+] Setting environment variables
[+] Running Hadolint
/Dockerfile:3 DL3006 Always tag the version of an image explicitly
[+] Running Dockle
WARN    - DKL-DI-0006: Avoid latest tag
        * Avoid 'latest' tag
INFO    - CIS-DI-0005: Enable Content trust for Docker
        * export DOCKER_CONTENT_TRUST=1 before docker pull/build
INFO    - CIS-DI-0006: Add HEALTHCHECK instruction to the container image
        * not found HEALTHCHECK statement
INFO    - DKL-LI-0003: Only put necessary files
        * unnecessary file : juice-shop/node_modules/sqlite3/Dockerfile
        * unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm64/Dockerfile
        * unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm/Dockerfile
[+] Running Trivy
...
juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)
...
[+] Making the output look pretty
[+] Starting the main module ============================================================
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html

Налази

ΠŸΠΎΠΊΡ€ΠΈΠ»ΠΈ смо само јСдан основни скуп Π”ΠΎΡ†ΠΊΠ΅Ρ€ услуТних ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π·Π° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΠ°Ρ‚Π°, Π·Π° који мислим Π΄Π° ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ Сфикасно ΠΏΠΎΠΊΡ€ΠΈΠ²Π° Π΄ΠΎΠ±Π°Ρ€ Π΄Π΅ΠΎ Π·Π°Ρ…Ρ‚Π΅Π²Π° Π·Π° бСзбСдност сликС. ΠŸΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ»Π°Ρ›Π΅Π½ΠΈΡ… ΠΈ бСсплатних Π°Π»Π°Ρ‚Π° који ΠΌΠΎΠ³Ρƒ Π΄Π° Π²Ρ€ΡˆΠ΅ истС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅, Ρ†Ρ€Ρ‚Π°Ρ˜Ρƒ ΠΏΡ€Π΅Π»Π΅ΠΏΠ΅ ΠΈΠ·Π²Π΅ΡˆΡ‚Π°Ρ˜Π΅ ΠΈΠ»ΠΈ Ρ€Π°Π΄Π΅ искључиво Ρƒ Ρ€Π΅ΠΆΠΈΠΌΡƒ ΠΊΠΎΠ½Π·ΠΎΠ»Π΅, ΠΏΠΎΠΊΡ€ΠΈΠ²Π°Ρ˜Ρƒ систСмС Π·Π° ΡƒΠΏΡ€Π°Π²Ρ™Π°ΡšΠ΅ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΠΌΠ°, ΠΈΡ‚Π΄. ΠŸΡ€Π΅Π³Π»Π΅Π΄ ΠΎΠ²ΠΈΡ… Π°Π»Π°Ρ‚Π° ΠΈ Π½Π°Ρ‡ΠΈΠ½Π° Π½Π° који ΠΈΡ… ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡˆΠ΅ΠΌΠΎ ΠΌΠΎΠΆΠ΅ сС ΠΏΠΎΡ˜Π°Π²ΠΈΡ‚ΠΈ ΠΌΠ°Π»ΠΎ каснијС.

ΠŸΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Π° страна скупа Π°Π»Π°Ρ‚Π° описаних Ρƒ Ρ‡Π»Π°Π½ΠΊΡƒ јС Π΄Π° су сви ΠΈΠ·Π³Ρ€Π°Ρ’Π΅Π½ΠΈ Π½Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΎΠΌ ΠΊΠΎΠ΄Ρƒ ΠΈ Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ СкспСримСнтисати са њима ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ сличним Π°Π»Π°Ρ‚ΠΈΠΌΠ° Π΄Π° бистС ΠΏΡ€ΠΎΠ½Π°ΡˆΠ»ΠΈ ΡˆΡ‚Π° Ρ‚Π°Ρ‡Π½ΠΎ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π° вашим Π·Π°Ρ…Ρ‚Π΅Π²ΠΈΠΌΠ° ΠΈ инфраструктурним карактСристикама. Наравно, свС Ρ€Π°ΡšΠΈΠ²ΠΎΡΡ‚ΠΈ којС сС ΠΏΡ€ΠΎΠ½Π°Ρ’Ρƒ Ρ‚Ρ€Π΅Π±Π° ΠΏΡ€ΠΎΡƒΡ‡ΠΈΡ‚ΠΈ Π·Π° примСнљивост Ρƒ ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½ΠΈΠΌ условима, Π°Π»ΠΈ ΠΎΠ²ΠΎ јС Ρ‚Π΅ΠΌΠ° Π·Π° Π±ΡƒΠ΄ΡƒΡ›ΠΈ Π²Π΅Π»ΠΈΠΊΠΈ Ρ‡Π»Π°Π½Π°ΠΊ.

Надам сС Π΄Π° Ρ›Π΅ Π²Π°ΠΌ ΠΎΠ²Π° упутства, скриптС ΠΈ услуТни ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΏΠΎΠΌΠΎΡ›ΠΈ ΠΈ постати ΠΏΠΎΠ»Π°Π·Π½Π° Ρ‚Π°Ρ‡ΠΊΠ° Π·Π° ΡΡ‚Π²Π°Ρ€Π°ΡšΠ΅ ΡΠΈΠ³ΡƒΡ€Π½ΠΈΡ˜Π΅ инфраструктурС Ρƒ области ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ˜Π΅.

Π˜Π·Π²ΠΎΡ€: Π²Π²Π².Ρ…Π°Π±Ρ€.Ρ†ΠΎΠΌ

Π”ΠΎΠ΄Π°Ρ˜ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€