ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° внСдряванС Π½Π° инструмСнти Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° сигурността Π½Π° Docker

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° внСдряванС Π½Π° инструмСнти Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° сигурността Π½Π° Docker
Π—Π΄Ρ€Π°Π²Π΅ΠΉ, Π₯Π°Π±Ρ€!

Π’ ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ‚Π° рСалност, ΠΏΠΎΡ€Π°Π΄ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Ρ‰Π°Ρ‚Π° сС роля Π½Π° контСйнСризацията Π² процСситС Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Π²Π°ΠΆΠ΅Π½ Π΅ Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚ Π·Π° осигуряванСто Π½Π° бСзопасността Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ Π΅Ρ‚Π°ΠΏΠΈ ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ vα»›i ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅. ΠŸΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ€ΡŠΡ‡Π½ΠΎ Π΅ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠ° Π·Π°Π΄Π°Ρ‡Π°, Π·Π°Ρ‚ΠΎΠ²Π° Π΅ Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° сС направят ΠΏΠΎΠ½Π΅ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ към автоматизация Π½Π° Ρ‚ΠΎΠ·ΠΈ процСс.

Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ сподСля Π³ΠΎΡ‚ΠΎΠ²ΠΈ скриптовС Π·Π° внСдряванС Π½Π° няколко инструмСнта Π·Π° осигуряванС Π½Π° бСзопасността Π½Π° Docker ΠΈ инструкции ΠΊΠ°ΠΊ Π΄Π° Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅ малък Π΄Π΅ΠΌΠΎ-стСнд Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΎΠ·ΠΈ процСс. ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ, Π·Π° Π΄Π° СкспСримСнтиратС с организацията Π½Π° процСса Π½Π° тСстванС Π½Π° бСзопасността Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ ΠΈ инструкциитС Dockerfile. Ясно Π΅, Ρ‡Π΅ инфраструктурата Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° ΠΈ внСдряванСто Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Π° Π·Π° всички, Π·Π°Ρ‚ΠΎΠ²Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ Ρ‰Π΅ прСдставя няколко възмоТни Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΠΈ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° бСзопасността

Π‘ΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° голямо количСство Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈ прилоТСния ΠΈ скриптовС, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΈ аспСкти Π½Π° Docker инфраструктурата. Част ΠΎΡ‚ тях Π²Π΅Ρ‡Π΅ бСшС описана Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° статия (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security), Π° Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π±ΠΈΡ… искал Π΄Π° сС спра Π½Π° Ρ‚Ρ€ΠΈ ΠΎΡ‚ тях, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠΊΡ€ΠΈΠ²Π°Ρ‚ основната част ΠΎΡ‚ изискванията Π·Π° бСзопасност Π½Π° Docker ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅, ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π°. ОсвСн Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π΄Π°ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°ΠΊ Ρ‚Π΅Π·ΠΈ Ρ‚Ρ€ΠΈ инструмСнта ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ Π² Π΅Π΄ΠΈΠ½ pipeline Π·Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π° бСзопасност.

Hadolint
https://github.com/hadolint/hadolint

Доста проста ΠΊΠΎΠ½Π·ΠΎΠ»Π½Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°, която ΠΏΠΎΠΌΠ°Π³Π° Π² ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½Π°Ρ‚Π° ΠΎΡ†Π΅Π½ΠΊΠ° Π½Π° корСктността ΠΈ бСзопасността Π½Π° инструкциитС Π² Dockerfile-ΠΈΡ‚Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ само Π½Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ рСгистри Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° sudo).

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° внСдряванС Π½Π° инструмСнти Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° сигурността Π½Π° Docker

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

Конзолна ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π° с ΠΎΠ±Ρ€Π°Π·Π° (ΠΈΠ»ΠΈ със Π·Π°ΠΏΠ°Π·Π΅Π½ tar Π°Ρ€Ρ…ΠΈΠ² Π½Π° ΠΎΠ±Ρ€Π°Π·Π°), която провСрява корСктността ΠΈ бСзопасността Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΠΎΠ±Ρ€Π°Π·, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΉΠΊΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ слоСвС ΠΈ конфигурация – ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ са създадСни, ΠΊΠ°ΠΊΠ²ΠΈ инструкции сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚, ΠΊΠ°ΠΊΠ²ΠΈ Ρ‚ΠΎΠΌΠΎΠ²Π΅ са ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π°Π·Π½Π° ΠΏΠ°Ρ€ΠΎΠ»Π° ΠΈ Ρ‚.Π½. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° броят Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈΡ‚Π΅ Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ голям ΠΈ Π΅ Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° няколко собствСни ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠΈ. CIS (Π¦Π΅Π½Ρ‚ΡŠΡ€ Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ сигурност) Benchmark Π·Π° Docker.
ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° внСдряванС Π½Π° инструмСнти Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° сигурността Π½Π° Docker

Trivy
https://github.com/aquasecurity/trivy

Π’Π°Π·ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° уязвимости ΠΎΡ‚ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° – ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с вСрсиитС Π½Π° ОБ (ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈ Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu) ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ със зависимоститС (Gemfile.lock, Pipfile.lock, composer.lock, package-lock.json, yarn.lock, Cargo.lock). Trivy ΠΌΠΎΠΆΠ΅ Π΄Π° сканира ΠΊΠ°ΠΊΡ‚ΠΎ ΠΎΠ±Ρ€Π°Π· Π² рСпозитория, Ρ‚Π°ΠΊΠ° ΠΈ Π»ΠΎΠΊΠ°Π»Π΅Π½ ΠΎΠ±Ρ€Π°Π·, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° сканиранС въз основа Π½Π° прСдоставСн .tar Ρ„Π°ΠΉΠ» с Docker ΠΎΠ±Ρ€Π°Π·.

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° внСдряванС Π½Π° инструмСнти Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° сигурността Π½Π° Docker

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈ Π·Π° внСдряванС Π½Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΈ

Π—Π° Π΄Π° ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ описанитС прилоТСния Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ условия, Ρ‰Π΅ прСдставя инструкции Π·Π° инсталиранС Π½Π° всички ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΈ Π² контСкста Π½Π° опростСн процСс.

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° идСя Π΅ Π΄Π° сС дСмонстрира ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²Π½Π΅Π΄Ρ€ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Dockerfile ΠΈ Docker ΠΎΠ±Ρ€Π°Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ Π² процСса Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

Π‘Π°ΠΌΠ°Ρ‚Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ слСднитС ΡΡ‚ΡŠΠΏΠΊΠΈ:

  1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° правилността ΠΈ сигурността Π½Π° инструкциитС Π² Dockerfile с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π»ΠΈΠ½Ρ‚Π΅Ρ€ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Hadolint
  2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° правилността ΠΈ сигурността Π½Π° крайния ΠΈ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π·ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Dockle
  3. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° общСствСно извСстни уязвимости (CVE) Π² основния ΠΎΠ±Ρ€Π°Π· ΠΈ Ρ€Π΅Π΄ΠΈΡ†Π° зависимости с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Trivy

По-Π½Π°Π΄ΠΎΠ»Ρƒ Π² статията Ρ‰Π΅ прСдставя Ρ‚Ρ€ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π·Π° внСдряванС Π½Π° Ρ‚Π΅Π·ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ:
ΠŸΡŠΡ€Π²ΠΈΡΡ‚ – Ρ‡Ρ€Π΅Π· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° CI/CD pipeline Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π° GitLab (с описаниС Π½Π° процСса Π·Π° стартиранС Π½Π° тСстов инстанс).
Вторият – с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° shell скрипт.
ВрСтият – с построяванС Π½Π° 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  docker

3. НамСрСтС своя IP:

ip addr

4. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΈ стартирайтС GitLab Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, замСняйки IP адрСса Π² hostname с вашия:

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-bit):

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 ΠΈ Registration token:
ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° внСдряванС Π½Π° инструмСнти Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° сигурността Π½Π° Docker
11. РСгистрирамС Runner, подставяйки URL ΠΈ Registration token:

sudo gitlab-runner register 
--non-interactive 
--url "http:///" 
--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 Π·Π° Π°Π½Π°Π»ΠΈΠ·.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π½Π° pipeline

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 <rhys@arkins.net>"
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

ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ:
    DOCKER_HOST: "tcp://docker:2375/"
    DOCKERFILE: "mydockerfile.df" # ΠΈΠΌΠ΅ Π½Π° Dockerfile Π·Π° Π°Π½Π°Π»ΠΈΠ·
    DOCKERIMAGE: "bkimminich/juice-shop" # ΠΈΠΌΠ΅ Π½Π° Docker ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π° Π°Π½Π°Π»ΠΈΠ·
    # DOCKERIMAGE: "knqyf263/cve-2018-11235" # тСстово Docker ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ със сСриозни CVE
    SHOWSTOPPER_PRIORITY: "ΠšΠ Π˜Π’Π˜Π§Π•Π" # ΠΊΠ°ΠΊΠ²ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° критичност Ρ‰Π΅ ΠΏΡ€ΠΎΠ²Π°Π»ΠΈ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π½Π° Trivy
    TRIVYCACHE: "$CI_PROJECT_DIR/.cache" # къдС Π΄Π° ΠΊΠ΅ΡˆΠΈΡ€Π°ΠΌΠ΅ Trivy Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π·Π° уязвимости Π·Π° ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅
    ARTIFACT_FOLDER: "$CI_PROJECT_DIR"

услуги:
    - docker:dind # Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°ΠΌΠ΅ docker изобраТСния Π²ΡŠΡ‚Ρ€Π΅ Π² Runner

Π΅Ρ‚Π°ΠΏΠΈ:
    - сканиранС
    - ΠΎΡ‚Ρ‡Π΅Ρ‚
    - ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅

HadoLint:
    # ОсновСн Π°Π½Π°Π»ΠΈΠ· Π½Π° инструкции Π² Dockerfile
    Π΅Ρ‚Π°ΠΏ: сканиранС
    ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅: docker:git

    слСд_скрипт:
    - cat $ARTIFACT_FOLDER/hadolint_results.json

    скрипт:
    - 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 Π²ΠΈΠ½Π°Π³ΠΈ Ρ‰Π΅ ΠΈΠ·Π»Π΅Π·Π΅ с ΠΊΠΎΠ΄ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄ 0
    - ./hadolint-Linux-x86_64 -f json $DOCKERFILE > $ARTIFACT_FOLDER/hadolint_results.json || exit 0

    Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ:
        ΠΊΠΎΠ³Π°Ρ‚ΠΎ: Π²ΠΈΠ½Π°Π³ΠΈ # Π²ΡŠΡ€Π½Π΅Ρ‚Π΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ Π΄ΠΎΡ€ΠΈ слСд ΠΏΡ€ΠΎΠ²Π°Π» Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π°
        ΠΏΡŠΡ‚ΠΈΡ‰Π°:
        - $ARTIFACT_FOLDER/hadolint_results.json

Dockle:
    # Анализ Π½Π° Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π·Π° Docker ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (ΠΏΡ€Π°Π²Π° Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅, инструкции слСдвани ΠΏΡ€ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ Ρ‚.Π½.)
    Π΅Ρ‚Π°ΠΏ: сканиранС
    ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅: docker:git

    слСд_скрипт:
    - cat $ARTIFACT_FOLDER/dockle_results.json

    скрипт:
    - 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

    Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ:
        ΠΊΠΎΠ³Π°Ρ‚ΠΎ: Π²ΠΈΠ½Π°Π³ΠΈ # Π²ΡŠΡ€Π½Π΅Ρ‚Π΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ Π΄ΠΎΡ€ΠΈ слСд ΠΏΡ€ΠΎΠ²Π°Π» Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π°
        ΠΏΡŠΡ‚ΠΈΡ‰Π°:
        - $ARTIFACT_FOLDER/dockle_results.json

Trivy:
    # Анализ Π½Π° Docker ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΈ зависимости спрямо мноТСство CVE Π±Π°Π·ΠΈ
    Π΅Ρ‚Π°ΠΏ: сканиранС
    ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅: docker:git

    скрипт:
    # ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π½Π°ΠΉ-новия 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

    # ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° всички уязвимости Π±Π΅Π· ΠΏΡ€ΠΎΠ²Π°Π» Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ
    - ./trivy -d --cache-dir $TRIVYCACHE -f json -o $ARTIFACT_FOLDER/trivy_results.json --exit-code 0 $DOCKERIMAGE

    # записванС Π½Π° информация Π·Π° уязвимоститС Π² стандартния ΠΈΠ·Ρ…ΠΎΠ΄ Π² Ρ‡Π΅Ρ‚ΠΈΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (Ρ‡Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ Π½Π° чист json Π½Π΅ Π΅ Π·Π°Π±Π°Π²Π½ΠΎ, Π½Π°Π»ΠΈ?). ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅Ρ‚Π΅ Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ Π½Π΅ Π²ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.
    - ./trivy -d --cache-dir $TRIVYCACHE --exit-code 0 $DOCKERIMAGE

    # ΠΏΡ€ΠΎΠ²Π°Π» Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ, Π°ΠΊΠΎ сС Π½Π°ΠΌΠ΅Ρ€ΠΈ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ SHOWSTOPPER
    - ./trivy -d --cache-dir $TRIVYCACHE --exit-code 1 --severity $SHOWSTOPPER_PRIORITY --quiet $DOCKERIMAGE

    Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ:
        ΠΊΠΎΠ³Π°Ρ‚ΠΎ: Π²ΠΈΠ½Π°Π³ΠΈ # Π²ΡŠΡ€Π½Π΅Ρ‚Π΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ Π΄ΠΎΡ€ΠΈ слСд ΠΏΡ€ΠΎΠ²Π°Π» Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π°
        ΠΏΡŠΡ‚ΠΈΡ‰Π°:
        - $ARTIFACT_FOLDER/trivy_results.json

    кСш:
        ΠΏΡŠΡ‚ΠΈΡ‰Π°:
        - .cache

ΠžΡ‚Ρ‡Π΅Ρ‚:
    # обСдиняванС Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° инструмСнтитС Π² Π΅Π΄ΠΈΠ½ HTML
    Π΅Ρ‚Π°ΠΏ: ΠΎΡ‚Ρ‡Π΅Ρ‚
    ΠΊΠΎΠ³Π°Ρ‚ΠΎ: Π²ΠΈΠ½Π°Π³ΠΈ
    ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅: python:3.5

    скрипт:
    - 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

    Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ:
        ΠΏΡŠΡ‚ΠΈΡ‰Π°:
        - results.html

ΠŸΡ€ΠΈ нСобходимост ΡΡŠΡ‰ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сканиратС ΠΈ Π·Π°ΠΏΠ°Π·Π΅Π½ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ Π² .tar Π°Ρ€Ρ…ΠΈΠ² (Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Ρ‰Π΅ трябва Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π²Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΈΡ‚Π΅ Π² YAML Ρ„Π°ΠΉΠ»Π°)

NB: Trivy изисква инсталирани rpm ΠΈ git. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай Ρ‰Π΅ сС появят Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΡ€ΠΈ сканиранС Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° RedHat, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° уязвимости.

2. Π‘Π»Π΅Π΄ добавянС Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π² рСпозитория, Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с инструкциитС Π² нашия ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π°ΠΉΠ», GitLab Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π΅ процСса Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΈ сканиранС. Π’ Ρ‚Π°Π±Π° CI/CD β†’ Pipelines ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π°ΠΏΡ€Π΅Π΄ΡŠΠΊΠ° Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° инструкциитС.

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ°ΠΌΠ΅ Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ. Π’Ρ€ΠΈ ΠΎΡ‚ тях сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ със сканиранСто, Π° послСдната (Report) ΡΡŠΠ±ΠΈΡ€Π° прост ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΎΡ‚ Ρ€Π°Π·ΠΏΠΎΠΊΡŠΡΠ°Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ сканиранСто.
ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° внСдряванС Π½Π° инструмСнти Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° сигурността Π½Π° Docker
По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Trivy спира ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ си, Π°ΠΊΠΎ Π±ΡŠΠ΄Π°Ρ‚ ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈ CRITICAL уязвимости Π² ΠΎΠ±Ρ€Π°Π·Π° ΠΈΠ»ΠΈ зависимоститС. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Hadolint Π²ΠΈΠ½Π°Π³ΠΈ Π²Ρ€ΡŠΡ‰Π° ΠΊΠΎΠ΄ Success ΠΏΡ€ΠΈ изпълнСниС, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ слСд Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ изпълнСниС Π²ΠΈΠ½Π°Π³ΠΈ ΠΈΠΌΠ° Π±Π΅Π»Π΅ΠΆΠΊΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ спиранС Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ.

Π’ зависимост ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈΡ‚Π΅ изисквания ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° ΠΊΠΎΠ΄ΡŠΡ‚ Π·Π° ΠΈΠ·Ρ…ΠΎΠ΄, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‚Π΅Π·ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΈ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° критичност Π΄Π° спират ΡΡŠΡ‰ΠΎ ΠΈ процСса Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅. Π’ нашия случай ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Ρ‰Π΅ спрС само Π°ΠΊΠΎ Trivy ΠΎΡ‚ΠΊΡ€ΠΈΠ΅ уязвимост с критичност, която смС посочили Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° SHOWSTOPPER Π² .gitlab-ci.yml.
ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° внСдряванС Π½Π° инструмСнти Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° сигурността Π½Π° Docker

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° всяка ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²ΠΈΠ΄ΠΈ Π² Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° всяка сканираща Π·Π°Π΄Π°Ρ‡Π°, Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² json Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π² сСкцията artifacts ΠΈΠ»ΠΈ Π² прост HTML ΠΎΡ‚Ρ‡Π΅Ρ‚ (Π·Π° Π½Π΅Π³ΠΎ Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ):
ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° внСдряванС Π½Π° инструмСнти Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° сигурността Π½Π° Docker

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

Shell-скрипт

Вторият Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΅ подходящ Π·Π° случаи, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° провСряватС Docker изобраТСния извън CI/CD систСмата ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π°Ρ‚ΠΎ трябва Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ всички инструкции Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС изпълни Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π½Π° хоста. Π’ΠΎΠ·ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ сС ΠΏΠΎΠΊΡ€ΠΈΠ²Π° ΠΎΡ‚ Π³ΠΎΡ‚ΠΎΠ² shell скрипт, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° стартиратС Π½Π° чиста Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° (ΠΈΠ»ΠΈ Π΄ΠΎΡ€ΠΈ Ρ€Π΅Π°Π»Π½Π°) машина. Π‘ΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ изпълнява ΡΡŠΡ‰ΠΈΡ‚Π΅ инструкции, ΠΊΠΎΠΈΡ‚ΠΎ са описани ΠΏΠΎ-Π³ΠΎΡ€Π΅ Π·Π° gitlab-runner.

Π—Π° ΡƒΡΠΏΠ΅ΡˆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° скрипта Π² систСмата трябва Π΄Π° бъдС инсталиран Docker, Π° тСкущият ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» трябва Π΄Π° Π΅ Π² Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° docker.

Бамият скрипт ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ Ρ‚ΡƒΠΊ: docker_sec_check.sh

Π’ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ»Π° сС Π·Π°Π΄Π°Π²Π°Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΡƒΠΊΠ°Π·Π²Π°Ρ‰ΠΈ ΠΊΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ трябва Π΄Π° сС сканира ΠΈ ΠΊΠ°ΠΊΠ²Π° критичност Π½Π° Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΈΡ‚Π΅ Ρ‰Π΅ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° ΠΈΠ·Ρ…ΠΎΠ΄ ΠΎΡ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ‚Π° Trivy с указания ΠΊΠΎΠ΄ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°.

По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° скрипта всички ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΈ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ΠΈ Π² дирСкторията docker_tools, Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ тяхната Ρ€Π°Π±ΠΎΡ‚Π° β€” Π² дирСкторията docker_tools/json, Π° HTML ΠΎΡ‚Ρ‡Π΅Ρ‚ΡŠΡ‚ Ρ‰Π΅ бъдС Π² Ρ„Π°ΠΉΠ»Π° results.html.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π΅Π½ ΠΈΠ·Ρ…ΠΎΠ΄ ΠΎΡ‚ скрипта

~\/docker_cicd$ .\/docker_sec_check.sh

[+] НастройванС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° срСдата
[+] Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ
[+] ΠŸΠΎΠ΄Π³ΠΎΡ‚Π²ΡΠ½Π΅ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ
[+] Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Dockerfile
2020-10-20 10:40:00 (45.3 MB/s) - β€˜Dockerfile’ спСстСн [8071/8071]
[+] Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π° сканиранС
latest: Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ ΠΎΡ‚ bkimminich\/juice-shop
[+] ИзпълнСниС на Hadolint
...
Dockerfile:205 DL3015 Π˜Π·Π±ΡΠ³Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΊΠ°Ρ‚ΠΎ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ `--no-install-recommends`
Dockerfile:248 DL3002 ΠŸΠΎΡΠ»Π΅Π΄Π½ΠΈΡΡ‚ USER Π½Π΅ трябва Π΄Π° Π΅ root
...
[+] ИзпълнСниС на Dockle
...
WARN    - DKL-DI-0006: Π˜Π·Π±ΡΠ³Π²Π°ΠΉΡ‚Π΅ послСдния Ρ‚Π°Π³
        * Π˜Π·Π±ΡΠ³Π²Π°ΠΉΡ‚Π΅ 'latest' Ρ‚Π°Π³Π°
INFO    - CIS-DI-0005: АктивирайтС Π΄ΠΎΠ²Π΅Ρ€ΠΈΠ΅ Π² ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° Docker
        * export DOCKER_CONTENT_TRUST=1 ΠΏΡ€Π΅Π΄ΠΈ docker pull/build
...
[+] ИзпълнСниС на Trivy
juice-shop\/frontend\/package-lock.json
=====================================
ΠžΠ±Ρ‰ΠΎ: 3 (UNKNOWN: 0, LOW: 1, MEDIUM: 0, HIGH: 2, CRITICAL: 0)

+---------------------+------------------+----------+---------+-------------------------+
|       Π‘Π˜Π‘Π›Π˜ΠžΠ’Π•ΠšΠ     | ID Π½Π° Уязвимост   | Π‘Π•Π Π˜ΠžΠ—ΠΠžΠ‘Π’ | Π’Π•Π Π‘Π˜Π― |             ΠΠΠ—Π’ΠΠΠ˜Π•   |
+---------------------+------------------+----------+---------+-------------------------+
| object-path         | CVE-2020-15256   | Π’Π˜Π‘ΠžΠšΠ   | 0.11.4  | Π—Π°ΠΌΡŠΡ€ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΈ |
|                     |                  |          |         | object-path             |
+---------------------+------------------+          +---------+-------------------------+
| tree-kill           | CVE-2019-15599   |          | 1.2.2   | Π˜Π½ΠΆΠ΅ΠΊΡ†ΠΈΡ Π½Π° ΠΊΠΎΠ΄        |
+---------------------+------------------+----------+---------+-------------------------+
| webpack-subresource | CVE-2020-15262   | НИБКА    | 1.4.1   | НС Π·Π°Ρ‰ΠΈΡ‚Π΅Π½ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ  |
|                     |                  |          |         | Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΈ части         |
+---------------------+------------------+----------+---------+-------------------------+

juice-shop\/package-lock.json
============================
ΠžΠ±Ρ‰ΠΎ: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)

...

juice-shop\/package-lock.json
============================
ΠžΠ±Ρ‰ΠΎ: 5 (CRITICAL: 5)

...
[+] ΠŸΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ
[+] ΠŸΠΎΠ΄Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π°
[+] ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° JSON Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ
[+] ЗаписванС Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π² HTML
[+] Чисто ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ ============================================================
[+] Всичко Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ. НамСрСтС рСзултатния HTML ΠΎΡ‚Ρ‡Π΅Ρ‚ Π² results.html

Docker ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°ΠΌΠΈ

ΠšΠ°Ρ‚ΠΎ Ρ‚Ρ€Π΅Ρ‚Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° ΡΡŠΡΡ‚Π°Π²ΠΈΡ… Π΄Π²Π° прости Dockerfile Π·Π° създаванС Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с инструмСнти Π·Π° сигурност. Единият 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


[+] НастройванС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π·Π° срСда
[+] ИзпълнСниС на Hadolint
\/Dockerfile:3 DL3006 Π’ΠΈΠ½Π°Π³ΠΈ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°ΠΉΡ‚Π΅ вСрсията Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ явно
[+] ИзпълнСниС на Dockle
WARN    - DKL-DI-0006: Π˜Π·Π±ΡΠ³Π²Π°ΠΉΡ‚Π΅ Π½Π°ΠΉ-Π½ΠΎΠ²Π°Ρ‚Π° ΠΌΠ°Ρ€ΠΊΠ°
        * Π˜Π·Π±ΡΠ³Π²Π°ΠΉΡ‚Π΅ 'latest' ΠΌΠ°Ρ€ΠΊΠ°
INFO    - CIS-DI-0005: Π’ΠΊΠ»ΡŽΡ‡Π΅Ρ‚Π΅ Π΄ΠΎΠ²Π΅Ρ€ΠΈΠ΅ Π² ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° Docker
        * СкспортирайтС DOCKER_CONTENT_TRUST=1 ΠΏΡ€Π΅Π΄ΠΈ docker pull\/build
INFO    - CIS-DI-0006: Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ HEALTHCHECK инструкция към ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°
        * Π½Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π° инструкция HEALTHCHECK
INFO    - DKL-LI-0003: ΠŸΠΎΡΡ‚Π°Π²ΡΠΉΡ‚Π΅ само Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅
        * Π½Π΅Π½ΡƒΠΆΠ΅Π½ Ρ„Π°ΠΉΠ» : juice-shop\/node_modules\/sqlite3\/Dockerfile
        * Π½Π΅Π½ΡƒΠΆΠ΅Π½ Ρ„Π°ΠΉΠ» : juice-shop\/node_modules\/sqlite3\/tools\/docker\/architecture\/linux-arm64\/Dockerfile
        * Π½Π΅Π½ΡƒΠΆΠ΅Π½ Ρ„Π°ΠΉΠ» : juice-shop\/node_modules\/sqlite3\/tools\/docker\/architecture\/linux-arm\/Dockerfile
[+] ИзпълнСниС на Trivy
...\njuice-shop\/package-lock.json
============================
ΠžΠ±Ρ‰o: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)
...
[+] ΠŸΡ€Π°Π²ΠΈΠΌ ΠΈΠ·Ρ…ΠΎΠ΄Π° Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ…ΡƒΠ±Π°Π²ΠΎ
[+] Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° основния ΠΌΠΎΠ΄ΡƒΠ» ============================================================
[+] ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° JSON Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ
[+] ЗаписванС Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ HTML
[+] Чисто ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ ============================================================
[+] Всичко Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ. НамСрСтС получСния HTML Π΄ΠΎΠΊΠ»Π°Π΄ Π² results.html

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ

Π Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ само Π΅Π΄ΠΈΠ½ основСн ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ инструмСнти Π·Π° сканиранС Π½Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ Docker, ΠΊΠΎΠΉΡ‚ΠΎ, ΠΏΠΎ ΠΌΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅, ΠΌΠ½ΠΎΠ³ΠΎ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΠΎΠΊΡ€ΠΈΠ²Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½Π° част ΠΎΡ‚ изискванията Π·Π° сигурност Π½Π° изобраТСнията. Π‘ΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ ΠΎΡ‰Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ»Π°Ρ‚Π΅Π½ΠΈ ΠΈ Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½ΠΈ инструмСнти, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ ΡΡŠΡ‰ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ красиви ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΈ ΠΈΠ»ΠΈ Π΄Π° работят чисто Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ, Π΄Π° ΠΎΠ±Ρ…Π²Π°Ρ‰Π°Ρ‚ систСми Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΈ Ρ‚.Π½. ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° Ρ‚Π΅Π·ΠΈ инструмСнти ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ Π·Π° тяхната интСграция, възмоТно Π΅ Π΄Π° сС появи ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-късно.

ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° страна Π½Π° инструмСнти, описани Π² статията, Π΅, Ρ‡Π΅ всички Ρ‚Π΅ са ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΈ Π½Π° Π±Π°Π·Π° Π½Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° СкспСримСнтиратС с тях ΠΈ с Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ инструмСнти, Π·Π° Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ отговаря Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ изисквания ΠΈ спСцификации Π½Π° инфраструктурата. Π Π°Π·Π±ΠΈΡ€Π° сС, всички уязвимости, ΠΊΠΎΠΈΡ‚ΠΎ Π±ΡŠΠ΄Π°Ρ‚ ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈ, трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€ΠΎΡƒΡ‡Π΅Π½ΠΈ Π·Π° прилоТимост Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ условия, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΅ Ρ‚Π΅ΠΌΠ° Π·Π° Π±ΡŠΠ΄Π΅Ρ‰Π° голяма статия.

Надявам сС, Ρ‡Π΅ Ρ‚Π°Π·ΠΈ инструкция, скриптовС ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΈ Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ‚ ΠΈ Ρ‰Π΅ станат ΠΎΡ‚ΠΏΡ€Π°Π²Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π·Π° ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠΎ-сигурна инфраструктура Π² областта Π½Π° контСйнСризацията.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster