Много лет назад, когда мне впервые пришлось обучать молодых специалистов работе с Active Directory, я с тоской подсчитывал, какие вычислительные мощности мне потребуются от обучающего центра. Это было то далекое время, когда виртуализация еще только начала покорять IT. Я в столбик складывал требования к рабочим местам, контроллерам домена, прикладным серверам, и цифры меня совсем не радовали. Не радовали они и администратора обучающего центра.
С тех пор было прочитано большое количество курсов, но проблема ресурсов никуда не исчезала, пока на горизонте на замаячило огромное синее млекопитающее, груженое контейнерами.
Конечно, я думаю все гуглили “Container vs VM” и получали примерно такую картинку.
![](https://habrastorage.org/r/w1560/webt/s5/9v/hp/s59vhphkozrbpt4zafhkx1caeee.png)
Она мало что объясняет, но общая суть понятна: вместо большого количества операционных систем и приложений на них, мы запускаем одну операционную систему, а внутри нее стартуют нужные приложения. У этого подхода есть как свои плюсы, так и минусы, но сегодня мы поговорим, как контейнеры могут помочь при обучении пентестеров и аудиторов.
Самое простое, что может быть, это использование контейнеров для создания намеренно уязвимых рабочих сред. Теперь вместо разворачивая нужных версий apache, mysql и прочего мы можем получить готовый контейнер со всем необходимым. Начнем, конечно, с классики:
• Самое популярное и чертовски уязвимое веб-приложение DVWA. Классическое php/mysql приложение с вашими любимыми XSS, CSRF, LFI и прочим. Немного устарело, зато продолжает встречаться на каждом втором пентесте:
Damn Vulnerable Web Application (DVWA) (docker pull citizenstig/dvwa)
• Еще одно популярное приложение, в котором уязвимости структурированы в соответствии с OWASP TOP10:
OWASP Mutillidae II Web Pen-Test Practice Application (docker pull citizenstig/nowasp)
• Магазин соков фирмы OWASP, созданный на основе популярных angular, node.js, nosql, но от этого не менее уязвимый. Мой выбор для всех, кто погружается в дивный мир тестирования на проникновение:
OWASP Juice Shop (docker pull bkimminich/juice-shop).
• Тот же OWASP TOP10, только на базе Node.js:
OWASP NodeGoat (docker-compose build && docker-compose up)
• Еще одно приложение от OWASP со всё тем же набором уязвимостей:
OWASP WebGoat Project 8.0 docker image (docker pull webgoat/webgoat-8.0)
• Раз есть козел, должен быть и пастух. В нашем случае это OWASP Security Shepherd, позволяющий посмотреть на клиентскую сторону веб-приложений, а также мобильные приложения:
OWASP Security Shepherd (docker pull ismisepaul/securityshepherd)
Периодически, когда вскрывается очередная уязвимость, бывает полезно потрогать её руками. Для этого не нужно поднимать виртуальную машину. У нас же есть VaaS – уязвимость как услуга:
• Vulnerability as a service: Heartbleed (docker pull hmlio/vaas-cve-2014-0160)
• Vulnerability as a service: SambaCry (docker pull vulnerables/cve-2017-7494)
• Vulnerability as a service: Shellshock (docker pull hmlio/vaas-cve-2014-6271)
Можно также поизучать конкретные продукты, с которыми вы чаще всего сталкиваетесь на пентестах, например, уязвимый WordPress:
• Vulnerable WordPress Installation (docker pull wpscanteam/vulnerablewordpress)
Кроме этого, сами инструменты для проведения тестирования можно получить в виде контейнеров: nmap, zap, wpscan, metasploit и т.д.
И даже целый образ Kali Linux можно получить командой docker pull kalilinux/kali-linux-docker
Кстати, теперь и сами контейнеры стали объектами тестирования, поэтому начали появляться и соответствующие виртуальные машины для самостоятельного изучения – Vulnerable Docker: 1, BSidesTLV: 2018 CTF, myHouse7: 1, DonkeyDocker: 1.
Преимуществ у контейнеров много, однако, очевидно, что и количество приверженцев классических виртуальных машин не становится меньше. Для этого есть много причин, но на самом деле, если ресурсы вашего учебного центра позволяют, а автоматизировать работу удается с помощью Packer и Vagrant, то пока рано думать на эту тему.
Сергей Полунин,
руководитель группы департамента проектирования ООО «Газинформсервис»
С тех пор было прочитано большое количество курсов, но проблема ресурсов никуда не исчезала, пока на горизонте на замаячило огромное синее млекопитающее, груженое контейнерами.
Конечно, я думаю все гуглили “Container vs VM” и получали примерно такую картинку.
![](https://habrastorage.org/webt/s5/9v/hp/s59vhphkozrbpt4zafhkx1caeee.png)
Она мало что объясняет, но общая суть понятна: вместо большого количества операционных систем и приложений на них, мы запускаем одну операционную систему, а внутри нее стартуют нужные приложения. У этого подхода есть как свои плюсы, так и минусы, но сегодня мы поговорим, как контейнеры могут помочь при обучении пентестеров и аудиторов.
Самое простое, что может быть, это использование контейнеров для создания намеренно уязвимых рабочих сред. Теперь вместо разворачивая нужных версий apache, mysql и прочего мы можем получить готовый контейнер со всем необходимым. Начнем, конечно, с классики:
• Самое популярное и чертовски уязвимое веб-приложение DVWA. Классическое php/mysql приложение с вашими любимыми XSS, CSRF, LFI и прочим. Немного устарело, зато продолжает встречаться на каждом втором пентесте:
Damn Vulnerable Web Application (DVWA) (docker pull citizenstig/dvwa)
• Еще одно популярное приложение, в котором уязвимости структурированы в соответствии с OWASP TOP10:
OWASP Mutillidae II Web Pen-Test Practice Application (docker pull citizenstig/nowasp)
• Магазин соков фирмы OWASP, созданный на основе популярных angular, node.js, nosql, но от этого не менее уязвимый. Мой выбор для всех, кто погружается в дивный мир тестирования на проникновение:
OWASP Juice Shop (docker pull bkimminich/juice-shop).
• Тот же OWASP TOP10, только на базе Node.js:
OWASP NodeGoat (docker-compose build && docker-compose up)
• Еще одно приложение от OWASP со всё тем же набором уязвимостей:
OWASP WebGoat Project 8.0 docker image (docker pull webgoat/webgoat-8.0)
• Раз есть козел, должен быть и пастух. В нашем случае это OWASP Security Shepherd, позволяющий посмотреть на клиентскую сторону веб-приложений, а также мобильные приложения:
OWASP Security Shepherd (docker pull ismisepaul/securityshepherd)
Периодически, когда вскрывается очередная уязвимость, бывает полезно потрогать её руками. Для этого не нужно поднимать виртуальную машину. У нас же есть VaaS – уязвимость как услуга:
• Vulnerability as a service: Heartbleed (docker pull hmlio/vaas-cve-2014-0160)
• Vulnerability as a service: SambaCry (docker pull vulnerables/cve-2017-7494)
• Vulnerability as a service: Shellshock (docker pull hmlio/vaas-cve-2014-6271)
Можно также поизучать конкретные продукты, с которыми вы чаще всего сталкиваетесь на пентестах, например, уязвимый WordPress:
• Vulnerable WordPress Installation (docker pull wpscanteam/vulnerablewordpress)
Кроме этого, сами инструменты для проведения тестирования можно получить в виде контейнеров: nmap, zap, wpscan, metasploit и т.д.
И даже целый образ Kali Linux можно получить командой docker pull kalilinux/kali-linux-docker
Кстати, теперь и сами контейнеры стали объектами тестирования, поэтому начали появляться и соответствующие виртуальные машины для самостоятельного изучения – Vulnerable Docker: 1, BSidesTLV: 2018 CTF, myHouse7: 1, DonkeyDocker: 1.
Преимуществ у контейнеров много, однако, очевидно, что и количество приверженцев классических виртуальных машин не становится меньше. Для этого есть много причин, но на самом деле, если ресурсы вашего учебного центра позволяют, а автоматизировать работу удается с помощью Packer и Vagrant, то пока рано думать на эту тему.
Сергей Полунин,
руководитель группы департамента проектирования ООО «Газинформсервис»