ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ Π·Π° бСзбСдносна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Docker

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ Π·Π° бСзбСдносна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Docker
Π•Ρ˜ Π₯Π°Π±Ρ€!

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

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

ΠšΠΎΠΌΡƒΠ½Π°Π»Π½ΠΈ услуги Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° бСзбСдноста

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

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

ΠŸΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ Сдноставна Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π° која ΠΏΠΎΠΌΠ°Π³Π° ΠΏΡ€Π²ΠΎ Π΄Π° сС ΠΏΡ€ΠΎΡ†Π΅Π½ΠΈ исправноста ΠΈ бСзбСдноста Π½Π° упатствата Π·Π° Dockerfile (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ само Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΈ рСгистри Π½Π° слики ΠΈΠ»ΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ sudo).

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ Π·Π° бСзбСдносна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Docker

Dockle
https://github.com/goodwithtech/dockle

УслуТна Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π° која Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° слика (ΠΈΠ»ΠΈ Π½Π° Π·Π°Ρ‡ΡƒΠ²Π°Π½Π° слика tarball) која ја ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° исправноста ΠΈ бСзбСдноста Π½Π° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° слика ΠΊΠ°ΠΊΠΎ Ρ‚Π°ΠΊΠ²Π° ΠΏΡ€Π΅ΠΊΡƒ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π½Π΅Ρ˜Π·ΠΈΠ½ΠΈΡ‚Π΅ слоСви ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° - ΠΊΠΎΠΈ корисници сС ΠΊΡ€Π΅ΠΈΡ€Π°Π½ΠΈ, ΠΊΠΎΠΈ инструкции сС Π²ΠΎ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°, ΠΊΠΎΠΈ Π²ΠΎΠ»ΡƒΠΌΠ΅Π½ΠΈ сС ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½ΠΈ , присуство Π½Π° ΠΏΡ€Π°Π·Π½Π° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°, ΠΈΡ‚Π½. Π΄. Π”ΠΎΠ΄Π΅ΠΊΠ° Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³Ρƒ Π³ΠΎΠ»Π΅ΠΌ ΠΈ сС заснова Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ сопствСни ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ ΠΏΡ€Π΅ΠΏΠΎΡ€Π°ΠΊΠΈ ЗНД (Π¦Π΅Π½Ρ‚Π°Ρ€ Π·Π° Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ бСзбСдност) Π Π΅ΠΏΠ΅Ρ€ Π·Π° Π΄ΠΎΠΊΠ΅Ρ€.
ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ Π·Π° бСзбСдносна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Docker

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

Оваа Π°Π»Π°Ρ‚ΠΊΠ° Π΅ насочСна ΠΊΠΎΠ½ Π½Π°ΠΎΡ“Π°ΡšΠ΅ Π΄Π²Π° Π²ΠΈΠ΄Π° пропусти - ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ со ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°Ρ‚Π° Π½Π° ОБ (ΠΏΠΎΠ΄Π΄Ρ€ΠΆΠ°Π½ΠΈ сС Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu) ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ со зависноста (Gemfile.lock, Pipfile.lock, composer.lock, ΠΏΠ°ΠΊΠ΅Ρ‚-Π·Π°ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ .json , yarn.lock, Cargo.lock). Trivy ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ скСнира ΠΈ сликата Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ ΠΈ Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° слика, Π° исто Ρ‚Π°ΠΊΠ° Π΄Π° скСнира Π²Ρ€Π· основа Π½Π° прСнСсСната Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° .tar со сликата Π½Π° Docker.

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ Π·Π° бСзбСдносна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Docker

ΠžΠΏΡ†ΠΈΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΊΠΎΠΌΡƒΠ½Π°Π»Π½ΠΈ услуги

Π—Π° Π΄Π° Π³ΠΈ испробам ΠΎΠΏΠΈΡˆΠ°Π½ΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π²ΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ услови, ќС Π΄Π°Π΄Π°ΠΌ упатства Π·Π° ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ Π½Π° ситС ΠΊΠΎΠΌΡƒΠ½Π°Π»Π½ΠΈ услуги ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ поСдноставСн процСс.

Π“Π»Π°Π²Π½Π°Ρ‚Π° идСја Π΅ Π΄Π° сС дСмонстрира ΠΊΠ°ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Ρ‚Π΅ автоматска ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° содрТината Π·Π° Dockerfiles ΠΈ Docker сликитС ΡˆΡ‚ΠΎ сС создаваат Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π·Π²ΠΎΡ˜ΠΎΡ‚.

Π‘Π°ΠΌΠ°Ρ‚Π° Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° сС состои ΠΎΠ΄ слСднивС Ρ‡Π΅ΠΊΠΎΡ€ΠΈ:

  1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° исправноста ΠΈ бСзбСдноста Π½Π° упатствата Π½Π° Dockerfile со помошна Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° Π»ΠΈΠ½Ρ‚Π΅Ρ€ Π₯Π°Π΄ΠΎΠ»ΠΈΠ½Ρ‚
  2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° исправноста ΠΈ бСзбСдноста Π½Π° ΠΊΡ€Π°Ρ˜Π½ΠΈΡ‚Π΅ ΠΈ срСднитС слики - Π°Π»Π°Ρ‚ΠΊΠ° Dockle
  3. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΎΠΏΡˆΡ‚ΠΎ ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ ранливости (CVE) Π²ΠΎ основната слика ΠΈ Π³ΠΎΠ»Π΅ΠΌ Π±Ρ€ΠΎΡ˜ Π½Π° зависности - ΠΎΠ΄ Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π° Π’Ρ€ΠΈΠ²ΠΈ

ΠŸΠΎΠ΄ΠΎΡ†Π½Π° Π²ΠΎ ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π° ќС Π΄Π°Π΄Π°ΠΌ Ρ‚Ρ€ΠΈ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° ΡΠΏΡ€ΠΎΠ²Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΎΠ²ΠΈΠ΅ Ρ‡Π΅ΠΊΠΎΡ€ΠΈ:
ΠŸΡ€Π²ΠΈΠΎΡ‚ Π΅ со ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° гасоводот CI / CD ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ Π½Π° GitLab (со опис Π½Π° процСсот Π½Π° подигањС тСст ΠΏΡ€ΠΈΠΌΠ΅Ρ€).
Π’Ρ‚ΠΎΡ€ΠΈΠΎΡ‚ Π΅ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° скрипта Π½Π° школка.
Π’Ρ€Π΅Ρ‚ΠΈΠΎΡ‚ Π΅ со ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° Π½Π° Docker слика Π·Π° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅ Π½Π° Docker слики.
ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΎΠΏΡ†ΠΈΡ˜Π°Ρ‚Π° ΡˆΡ‚ΠΎ Π½Π°Ρ˜ΠΌΠ½ΠΎΠ³Ρƒ Π²ΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°, Π΄Π° ја прСнСсСтС Π²ΠΎ Π²Π°ΡˆΠ°Ρ‚Π° инфраструктура ΠΈ Π΄Π° ја ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈ.

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

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π° Π½Π° GitLab CI/CD

Π’ΠΎ ΠΏΡ€Π²Π°Ρ‚Π° ΠΎΠΏΡ†ΠΈΡ˜Π°, ќС ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ бСзбСдноснитС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π°Ρ‚ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ систСмот Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ GitLab ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ОвдС ќС Π³ΠΈ ΠΏΠΎΠΌΠΈΠ½Π΅ΠΌΠ΅ Ρ‡Π΅ΠΊΠΎΡ€ΠΈΡ‚Π΅ ΠΈ ќС Π²ΠΈΠ΄ΠΈΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° поставимС срСдина Π·Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ со GitLab ΠΎΠ΄ Π½ΡƒΠ»Π°, Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΠΌΠ΅ процСс Π½Π° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅ ΠΈ Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΠΌΠ΅ Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° тСст Dockerfile ΠΈ ΡΠ»ΡƒΡ‡Π°Ρ˜Π½Π° слика - Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° JuiceShop.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ Π½Π° GitLab
1. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π³ΠΎ Docker:

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

2. Π”ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ Π³ΠΎ Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ‚ корисник Π²ΠΎ docker Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ со docker Π±Π΅Π· Π΄Π° користитС sudo:

sudo addgroup <username> docker

3. ΠΠ°Ρ˜Π΄Π΅Ρ‚Π΅ ја Π²Π°ΡˆΠ°Ρ‚Π° IP адрСса:

ip addr

4. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΠΈ ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°Ρ˜Ρ‚Π΅ Π³ΠΎ GitLab Π²ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΎΡ‚, Π·Π°ΠΌΠ΅Π½ΡƒΠ²Π°Ρ˜ΡœΠΈ ја IP адрСсата Π²ΠΎ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π΄ΠΎΠΌΠ°ΡœΠΈΠ½ΠΎΡ‚ со ваша:

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

Π§Π΅ΠΊΠ°ΠΌΠ΅ GitLab Π΄Π° Π³ΠΈ Π·Π°Π²Ρ€ΡˆΠΈ ситС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΈ Π·Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° (процСсот ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ слСдитС ΠΏΡ€Π΅ΠΊΡƒ ΠΈΠ·Π»Π΅Π·ΠΎΡ‚ ΠΎΠ΄ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π·Π° Π΅Π²ΠΈΠ΄Π΅Π½Ρ†ΠΈΡ˜Π°: docker logs -f gitlab).

5. ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ ја Π²Π°ΡˆΠ°Ρ‚Π° Π»ΠΎΠΊΠ°Π»Π½Π° IP адрСса Π²ΠΎ прСлистувачот ΠΈ Π²ΠΈΠ΄Π΅Ρ‚Π΅ страница ΡˆΡ‚ΠΎ Π½ΡƒΠ΄ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π° Π½Π° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°Ρ‚Π° Π·Π° root корисникот:
ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ Π·Π° бСзбСдносна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Docker
ΠŸΠΎΡΡ‚Π°Π²Π΅Ρ‚Π΅ Π½ΠΎΠ²Π° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° ΠΈ ΠΎΠ΄Π΅Ρ‚Π΅ Π²ΠΎ GitLab.

6. НаправСтС Π½ΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ cicd-test ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π³ΠΎ со ΠΏΠΎΡ‡Π΅Ρ‚Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° README.md:
ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ Π·Π° бСзбСдносна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Docker
7. Π‘Π΅Π³Π° Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ инсталирамС GitLab Runner: Π°Π³Π΅Π½Ρ‚ кој ќС Π³ΠΈ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° ситС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π±Π°Ρ€Π°ΡšΠ΅.
ΠŸΡ€Π΅Π·Π΅ΠΌΠ΅Ρ‚Π΅ ја Π½Π°Ρ˜Π½ΠΎΠ²Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° (Π²ΠΎ овој ΡΠ»ΡƒΡ‡Π°Ρ˜, ΠΏΠΎΠ΄ Linux 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. Π”ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ корисник Π½Π° ОБ Π·Π° Runner ΠΈ ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°Ρ˜Ρ‚Π΅ ја услугата:

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. Π‘Π΅Π³Π° Π³ΠΎ рСгистрирамС Runner Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π° со Π½Π°ΡˆΠ°Ρ‚Π° GitLab инстанца.
Π—Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, ΠΎΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ ја страницата Settings-CI/CD (http://OUR_ IP_ADDRESS/root/cicd-test/-/settings/ci_cd) ΠΈ Π½Π° Ρ‚Π°Π±ΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΎΡ‚ Runners ΠΏΡ€ΠΎΠ½Π°Ρ˜Π΄Π΅Ρ‚Π΅ ја URL-Ρ‚ΠΎ ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΡ‚ Π·Π° Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Π°:
ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ Π·Π° бСзбСдносна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Docker
11. Π Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π³ΠΎ Runner со Π·Π°ΠΌΠ΅Π½Π° Π½Π° URL-Ρ‚ΠΎ ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΡ‚ Π·Π° Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Π°:

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"

Како Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ°, Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ Π³ΠΎΡ‚ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π΅Π½ GitLab, Π²ΠΎ кој Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ инструкции Π·Π° Π΄Π° Π³ΠΈ стартувамС Π½Π°ΡˆΠΈΡ‚Π΅ ΠΊΠΎΠΌΡƒΠ½Π°Π»Π½ΠΈ услуги. Π’ΠΎ ΠΎΠ²Π°Π° Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Π°, Π½Π΅ΠΌΠ°ΠΌΠ΅ Ρ‡Π΅ΠΊΠΎΡ€ΠΈ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ, Π½ΠΎ Π²ΠΎ Ρ€Π΅Π°Π»Π½ΠΎ ΠΎΠΏΠΊΡ€ΡƒΠΆΡƒΠ²Π°ΡšΠ΅ Ρ‚ΠΈΠ΅ ќС ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π°Ρ‚ Π½Π° Ρ‡Π΅ΠΊΠΎΡ€ΠΈΡ‚Π΅ Π½Π° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅ ΠΈ ќС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π°Ρ‚ слики ΠΈ Dockerfile Π·Π° Π°Π½Π°Π»ΠΈΠ·Π°.

ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π½Π° гасоводот

1. Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ mydockerfile.df (ΠΎΠ²Π° Π΅ тСст Dockerfile ΡˆΡ‚ΠΎ ќС Π³ΠΎ тСстирамС) ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π½Π° процСсот GitLab CI/CD .gitlab-cicd.yml, кој Π½Π°Π²Π΅Π΄ΡƒΠ²Π° инструкции Π·Π° скСнСри (Π·Π°Π±Π΅Π»Π΅ΠΆΠ΅Ρ‚Π΅ ја Ρ‚ΠΎΡ‡ΠΊΠ°Ρ‚Π° Π²ΠΎ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°).

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡΠΊΠ°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° .yaml содрТи инструкции Π·Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° Ρ‚Ρ€ΠΈ Π°Π»Π°Ρ‚ΠΊΠΈ (Hadolint, Dockle ΠΈ Trivy) ΠΊΠΎΠΈ ќС Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π°Ρ‚ ΠΈΠ·Π±Ρ€Π°Π½ΠΈΠΎΡ‚ Dockerfile ΠΈ сликата Π½Π°Π²Π΅Π΄Π΅Π½Π° Π²ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° DOCKERFILE. Π‘ΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€Π΅Π·Π΅ΠΌΠ°Ρ‚ ΠΎΠ΄ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ: https://github.com/Swordfish-Security/docker_cicd/

Извадок ΠΎΠ΄ mydockerfile.df (ΠΎΠ²Π° Π΅ апстрактна Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° со мноТСство ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ инструкции само Π·Π° Π΄Π° сС ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΠΊΠ°ΠΊΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π°). Π”ΠΈΡ€Π΅ΠΊΡ‚Π΅Π½ Π»ΠΈΠ½ΠΊ Π΄ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°: mydockerfile.df

Π‘ΠΎΠ΄Ρ€ΠΆΠΈΠ½Π° Π½Π° mydockerfile.df

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

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° YAML ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ° (самата Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅ ΠΎΠ΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½Π°Ρ‚Π° врска ΠΎΠ²Π΄Π΅: .gitlab-ci.yml):

Π‘ΠΎΠ΄Ρ€ΠΆΠΈΠ½Π° Π½Π° .gitlab-ci.yml

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

Π”ΠΎΠΊΠΎΠ»ΠΊΡƒ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈ Π΄Π° Π³ΠΈ скСниратС Π·Π°Ρ‡ΡƒΠ²Π°Π½ΠΈΡ‚Π΅ слики ΠΊΠ°ΠΊΠΎ .tar Π°Ρ€Ρ…ΠΈΠ²Π° (сСпак, ќС Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π²Π»Π΅Π·Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° YAML)

НапомСна: Trivy Π±Π°Ρ€Π° инсталирано Π²Ρ€Ρ‚Π΅ΠΆΠΈ Π²ΠΎ ΠΌΠΈΠ½ΡƒΡ‚Π° ΠΈ ΠΎΠ΄ΠΈ. Π’ΠΎ спротивно, ќС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΡ€ΠΈ ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅ Π½Π° слики Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° RedHat ΠΈ добивањС Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° ранливост.

2. По Π΄ΠΎΠ΄Π°Π²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ, спорСд упатствата Π²ΠΎ Π½Π°ΡˆΠ°Ρ‚Π° конфигурациска Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°, GitLab автоматски ќС Π³ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π΅ процСсот Π½Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΠΈ ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅. На ΠΊΠ°Ρ€Ρ‚ΠΈΡ‡ΠΊΠ°Ρ‚Π° CI / CD β†’ Pipelines, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π°ΠΏΡ€Π΅Π΄ΠΎΠΊΠΎΡ‚ Π½Π° инструкциитС.

Како Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ°, ΠΈΠΌΠ°ΠΌΠ΅ Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ. Π’Ρ€ΠΈ ΠΎΠ΄ Π½ΠΈΠ² сС Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΊΠ»ΡƒΡ‡Π΅Π½ΠΈ Π²ΠΎ ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ, Π° послСдниот (Π˜Π·Π²Π΅ΡˆΡ‚Π°Ρ˜) собира СдноставСн ΠΈΠ·Π²Π΅ΡˆΡ‚Π°Ρ˜ ΠΎΠ΄ расфрлани Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ со Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΎΠ΄ ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅.
ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ Π·Π° бСзбСдносна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Docker
Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π½ΠΎ, Trivy Π³ΠΎ Π·Π°ΠΏΠΈΡ€Π° Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π°ΠΊΠΎ сС Π½Π°Ρ˜Π΄Π°Ρ‚ КРИВИЧНИ ранливости Π½Π° сликата ΠΈΠ»ΠΈ зависноститС. Π’ΠΎ исто Π²Ρ€Π΅ΠΌΠ΅, Hadolint сСкогаш Π³ΠΎ Π²Ρ€Π°ΡœΠ° Success Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚ Π·Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅, бидСјќи Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ сСкогаш ΠΈΠΌΠ° забСлСшки, ΡˆΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΡƒΠ²Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°Ρ‚Π° Π΄Π° прСстанС.

Π’ΠΎ зависност ΠΎΠ΄ Π²Π°ΡˆΠΈΡ‚Π΅ спСцифични Π±Π°Ρ€Π°ΡšΠ°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ ΠΈΠ·Π»Π΅Π·Π½Π° ΡˆΠΈΡ„Ρ€Π° Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ ΠΎΠ²ΠΈΠ΅ услуТни ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, исто Ρ‚Π°ΠΊΠ°, Π³ΠΎ Π·Π°ΠΏΠΈΡ€Π°Π°Ρ‚ процСсот Π½Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΠΊΠΎΠ³Π° ќС сС ΠΎΡ‚ΠΊΡ€ΠΈΡ˜Π°Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ со ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° критичност. Π’ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ˜, ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°Ρ‚Π° ќС прСстанС само Π°ΠΊΠΎ Trivy ΠΎΡ‚ΠΊΡ€ΠΈΠ΅ ранливост со сСриозност ΡˆΡ‚ΠΎ ја Π½Π°Π²Π΅Π΄ΠΎΠ²ΠΌΠ΅ Π²ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° SHOWSTOPPER Π²ΠΎ .gitlab-ci.yml.
ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ Π·Π° бСзбСдносна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Docker

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° сСкоја Π°Π»Π°Ρ‚ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²ΠΈΠ΄ΠΈ Π²ΠΎ Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ‚ Π½Π° сСкоја Π·Π°Π΄Π°Ρ‡Π° Π·Π° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅, Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΎ json-Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π²ΠΎ Π΄Π΅Π»ΠΎΡ‚ Π·Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ ΠΈΠ»ΠΈ Π²ΠΎ СдноставСн HTML ΠΈΠ·Π²Π΅ΡˆΡ‚Π°Ρ˜ (повСќС Π·Π° Ρ‚ΠΎΠ° ΠΏΠΎΠ΄ΠΎΠ»Ρƒ):
ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ Π·Π° бСзбСдносна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Docker

3. Π—Π° Π΄Π° сС прСтстават ΠΈΠ·Π²Π΅ΡˆΡ‚Π°ΠΈΡ‚Π΅ Π·Π° помошни услуги Π²ΠΎ ΠΌΠ°Π»ΠΊΡƒ ΠΏΠΎΡ‡ΠΈΡ‚Π»ΠΈΠ²Π° Ρ„ΠΎΡ€ΠΌΠ°, сС користи ΠΌΠ°Π»Π° Python скрипта Π·Π° ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° Ρ‚Ρ€ΠΈ json-Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΎ Π΅Π΄Π½Π° HTML-Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° со Ρ‚Π°Π±Π΅Π»Π° Π½Π° Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΈ.
Оваа скрипта сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° со посСбна Π·Π°Π΄Π°Ρ‡Π° Π·Π° Π˜Π·Π²Π΅ΡˆΡ‚Π°Ρ˜, Π° Π½Π΅Ρ˜Π·ΠΈΠ½ΠΈΠΎΡ‚ послСдСн Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ Π΅ HTML-Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° со ΠΈΠ·Π²Π΅ΡˆΡ‚Π°Ρ˜. Π˜Π·Π²ΠΎΡ€ΠΎΡ‚ Π½Π° скриптата Π΅ исто Ρ‚Π°ΠΊΠ° Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄ΠΈ Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈ, Π±ΠΎΠΈ ΠΈΡ‚Π½.
ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ Π·Π° бСзбСдносна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Docker

Π‘ΠΊΡ€ΠΈΠΏΡ‚Π° Π½Π° школка

Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° ΠΎΠΏΡ†ΠΈΡ˜Π° Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π½Π° Π·Π° случаи ΠΊΠΎΠ³Π° Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ сликитС Π½Π° Docker ΠΊΠΎΠΈ Π½Π΅ сС Π²ΠΎ систСмот CI / CD, ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ ΠΈΠΌΠ°Ρ‚Π΅ ситС инструкции Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ° ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π½Π° Π΄ΠΎΠΌΠ°ΡœΠΈΠ½ΠΎΡ‚. Оваа ΠΎΠΏΡ†ΠΈΡ˜Π° Π΅ ΠΏΠΎΠΊΡ€ΠΈΠ΅Π½Π° со Π³ΠΎΡ‚ΠΎΠ²Π° скрипта Π·Π° школка ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠΈ Π½Π° чиста Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° (ΠΈΠ»ΠΈ Π΄ΡƒΡ€ΠΈ ΠΈ Ρ€Π΅Π°Π»Π½Π°) машина. Π‘ΠΊΡ€ΠΈΠΏΡ‚Π°Ρ‚Π° Π³ΠΈ слСди иститС инструкции ΠΊΠ°ΠΊΠΎ gitlab-runner ΠΏΠΎΠ³ΠΎΡ€Π΅.

Π—Π° сцСнариото Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Docker ΠΌΠΎΡ€Π° Π΄Π° Π±ΠΈΠ΄Π΅ инсталиран Π½Π° систСмот ΠΈ Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ‚ корисник ΠΌΠΎΡ€Π° Π΄Π° Π±ΠΈΠ΄Π΅ Π²ΠΎ Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° docker.

Π‘Π°ΠΌΠΎΡ‚ΠΎ сцСнарио ΠΌΠΎΠΆΠ΅ Π΄Π° сС најдС ΠΎΠ²Π΄Π΅: docker_sec_check.sh

На ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊΠΎΡ‚ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°, ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ ΠΎΠ΄Ρ€Π΅Π΄ΡƒΠ²Π°Π°Ρ‚ која слика Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС скСнира ΠΈ ΠΊΠ°ΠΊΠ²Π° сСриозност Π½Π° Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΈ ќС ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π°Ρ‚ Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π° Trivy Π΄Π° ΠΈΠ·Π»Π΅Π·Π΅ со Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΎΡ‚ ΠΊΠΎΠ΄ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ°.

Π—Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° скриптата, ситС Π°Π»Π°Ρ‚ΠΊΠΈ ќС Π±ΠΈΠ΄Π°Ρ‚ ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Π½ΠΈ Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ docker_tools, Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ΄ Π½ΠΈΠ²Π½Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° - Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ docker_tools/json, Π° HTML со ΠΈΠ·Π²Π΅ΡˆΡ‚Π°Ρ˜ΠΎΡ‚ ќС Π±ΠΈΠ΄Π΅ Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ.html.

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

~/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

Π”ΠΎΠΊΠ΅Ρ€ слика со ситС ΠΊΠΎΠΌΡƒΠ½Π°Π»Π½ΠΈ услуги

Како Ρ‚Ρ€Π΅Ρ‚Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°, составив Π΄Π²Π΅ Сдноставни Dockerfiles Π·Π° Π΄Π° создадам слика со бСзбСдносни Π°Π»Π°Ρ‚ΠΊΠΈ. Π•Π΄Π΅Π½ Dockerfile ќС ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° сС ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ сСт Π·Π° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅ Π½Π° сликата ΠΎΠ΄ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ, Π²Ρ‚ΠΎΡ€ΠΈΠΎΡ‚ (Dockerfile_tar) ќС ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ сСт Π·Π° ΡΠΊΠ΅Π½ΠΈΡ€Π°ΡšΠ΅ Π½Π° tar-Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° со сликата.

1. Ја Π·Π΅ΠΌΠ°ΠΌΠ΅ соодвСтната Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Docker ΠΈ скрипти ΠΎΠ΄ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ https://github.com/Swordfish-Security/docker_cicd/tree/master/Dockerfile.
2. Π‘Ρ‚Π°Ρ€Ρ‚ΡƒΠ²Π°Ρ˜Ρ‚Π΅ Π³ΠΎ Π·Π° ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅:

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

3. ΠžΡ‚ΠΊΠ°ΠΊΠΎ ќС Π·Π°Π²Ρ€ΡˆΠΈ ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°Ρ‚Π°, ΠΊΡ€Π΅ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ ΠΎΠ΄ сликата. Π’ΠΎ исто Π²Ρ€Π΅ΠΌΠ΅, ја прСнСсувамС ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π° DOCKERIMAGE со ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° сликата Π·Π° која Π½Γ¨ интСрСсира ΠΈ Π³ΠΎ ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Dockerfile ΡˆΡ‚ΠΎ сакамС Π΄Π° Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΠΎΠ΄ Π½Π°ΡˆΠ°Ρ‚Π° машина Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° /Dockerfile (Π·Π°Π±Π΅Π»Π΅ΠΆΠ΅Ρ‚Π΅ Π΄Π΅ΠΊΠ° Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° апсолутна ΠΏΠ°Ρ‚Π΅ΠΊΠ° Π΄ΠΎ ΠΎΠ²Π°Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°):

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

Наоди

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

ΠŸΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Π°Ρ‚Π° страна Π½Π° мноТСството Π°Π»Π°Ρ‚ΠΊΠΈ опишани Π²ΠΎ ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π° Π΅ Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ ситС Ρ‚ΠΈΠ΅ сС ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΈ Π½Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° СкспСримСнтиратС со Π½ΠΈΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ слични Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° Π΄Π° Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ ΡˆΡ‚ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π° Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ Π±Π°Ρ€Π°ΡšΠ° ΠΈ инфраструктурни карактСристики. Π‘Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°, ситС ΠΏΡ€ΠΎΠ½Π°Ρ˜Π΄Π΅Π½ΠΈ пропусти Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΠΏΡ€ΠΎΡƒΡ‡Π°Ρ‚ Π·Π° примСнливост Π²ΠΎ спСцифични услови, Π½ΠΎ ΠΎΠ²Π° Π΅ Ρ‚Π΅ΠΌΠ° Π·Π° ΠΈΠ΄Π½Π° Π³ΠΎΠ»Π΅ΠΌΠ° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°.

Π‘Π΅ Π½Π°Π΄Π΅Π²Π°ΠΌ Π΄Π΅ΠΊΠ° ΠΎΠ²ΠΈΠ΅ упатства, скрипти ΠΈ Π°Π»Π°Ρ‚ΠΊΠΈ ќС Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ‚ ΠΈ ќС станат ΠΏΠΎΡ‡Π΅Ρ‚Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π·Π° создавањС посигурна инфраструктура Π²ΠΎ областа Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°.

Π˜Π·Π²ΠΎΡ€: www.habr.com

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