1. Введение
В этой части руководства, посвященной тестированию безопасности, будут обсуждаться стратегии тестирования, доказавшие свою бесценность в мире разработки программного обеспечения (включая микросервисы ). Хотя аспекты безопасности в программных проектах становятся все более важными с каждым днем, просто удивительно, сколько компаний вообще пренебрегают практикой безопасности. По крайней мере, раз в месяц вы слышите о новой серьезной уязвимости или раскрытии информации о нарушении. Большинству из них можно было помешать еще до выхода на производство!
Источником вдохновения для этой части учебного пособия послужил проект Open Web Application Security Project (в ближайшее время — OWASP ), всемирная некоммерческая благотворительная организация, ориентированная на повышение безопасности программного обеспечения. Это один из лучших и современных ресурсов по безопасности программного обеспечения, доступный бесплатно. Возможно, вы помните, что некоторые из инструментов OWASP мы уже видели в этом руководстве.
Содержание
2. Угрозы безопасности
Безопасность — очень и очень широкая тема. Так какие же риски безопасности приписывают архитектуре микросервиса ? Одна из инициатив OWASP состоит в том, чтобы поддерживать Топ-10 угроз безопасности приложений , список наиболее широко обнаруживаемых и эксплуатируемых уязвимостей в приложениях, в первую очередь веб-. Хотя последняя версия датирована 2017 годом, большинство рисков (если не все) все еще актуальны и в наши дни.
Для среднего разработчика очень сложно знать обо всех возможных недостатках безопасности, которые могут проявлять приложения. Еще сложнее обнаружить и устранить эти недостатки без опыта, специальных инструментов и / или автоматизации. Наличие экспертов по безопасности в команде, вероятно, лучшая инвестиция, но на удивление трудно найти хорошие. При этом инструментальный аспект — это именно то, на чем мы собираемся сосредоточиться, сужая обсуждение только с открытыми решениями.
3. Снизу
Безопасность должна быть всеобъемлющей мерой, а не запоздалой мыслью. В равной степени важно следовать правилам безопасного кодирования и защищать инфраструктуру. Как и в строительной отрасли, абсолютно необходимо начинать с прочного фундамента.
Есть несколько инструментов, которые выполняют аудит безопасности основ кода Java. Наиболее широко известным является Find Security Bugs , плагин SpotBugs для аудита безопасности веб-приложений Java, который основан на статическом анализе кода. Помимо интеграции IDE, есть специальные плагины для Apache Maven и Gradle, поэтому анализ может быть встроен прямо в процесс сборки и автоматизирован.
Давайте посмотрим на использование Find Security Bugs . Поскольку большинство микросервисов JCG Car Rentals построены с использованием Apache Maven , SpotBugs и Find Security Bugs входят в число обязательных плагинов.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<plugin> <groupId>com.github.spotbugs</groupId> <artifactId>spotbugs-maven-plugin</artifactId> <version>3.1.11</version> <configuration> <effort>Max</effort> <threshold>Low</threshold> <failOnError>true</failOnError> <plugins> <plugin> <groupId>com.h3xstream.findsecbugs</groupId> <artifactId>findsecbugs-plugin</artifactId> <version>LATEST</version> </plugin> </plugins> </configuration> s<executions> <execution> <goals> <goal>check</goal> </goals> <phase>verify</phase> </execution> </executions></plugin> |
По умолчанию сборка завершится сбоем в случае обнаружения каких-либо проблем во время анализа (но конфигурация действительно гибкая в этом отношении). Специально для Find Security Bugs есть также интеграция SBT (для проектов на основе Scala ), хотя она выглядит заброшенной.
Чтобы продвинуться немного вперед, если вы используете решение с непрерывным качеством кода, такое как, например, SonarQube (о котором мы поговорим позже в этом учебном пособии), вы получите выгоду от аудита безопасности кода как части конвейера проверки качества.
4. Zed Attack Proxy
Оставив позади статический анализ кода, мы рассмотрим следующий инструмент — Zed Attack Proxy , широко известный просто как ZAP .
OWASP Zed Attack Proxy ( ZAP ) является одним из самых популярных в мире бесплатных инструментов безопасности и активно поддерживается сотнями международных добровольцев. Это может помочь вам автоматически находить уязвимости в ваших веб-приложениях во время разработки и тестирования ваших приложений. Это также отличный инструмент для опытных пентестеров, который можно использовать для ручного тестирования безопасности. — https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project
Есть несколько режимов, которые ZAP может использовать. Самый простой из них — просто запустить активное сканирование по URL-адресу, на котором размещен веб-интерфейс. Но чтобы получить максимальную отдачу от ZAP , рекомендуется настроить его в качестве посредника .
Кроме того, в ZAP интересно то, что его можно использовать для поиска уязвимостей путем сканирования веб-сервисов и API-интерфейсов , используя их контракты OpenAPI или SOAP . К сожалению, ZAP пока не поддерживает OpenAPI v3.x, но проблема открыта и, надеюсь, в какой-то момент будет исправлена.
Из всех микросервисов JCG Car Rentals только служба бронирования использует более старую спецификацию OpenAPI, которую ZAP понимает и может выполнить сканирование. Предполагая, что действительный токен доступа получен из Keycloak , давайте запустим наше первое сканирование ZAP API.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
$ docker run -t owasp/zap2docker-weekly zap-api-scan.py -z "-config replacer.full_list(0).description=keycloak -config replacer.full_list(0).enabled=true -config replacer.full_list(0).matchtype=REQ_HEADER -config replacer.full_list(0).matchstr=Authorization -config replacer.full_list(0).regex=false -config replacer.full_list(0).replacement=Bearer\ $TOKEN" -t http://host.docker.internal:18900/v2/api-docs -f openapi -a...Total of 15 URLsPASS: Directory Browsing [0]PASS: In Page Banner Information Leak [10009]PASS: Cookie No HttpOnly Flag [10010]PASS: Cookie Without Secure Flag [10011]PASS: Incomplete or No Cache-control and Pragma HTTP Header Set [10015]PASS: Web Browser XSS Protection Not Enabled [10016]PASS: Cross-Domain JavaScript Source File Inclusion [10017]PASS: Content-Type Header Missing [10019]PASS: X-Frame-Options Header Scanner [10020]PASS: X-Content-Type-Options Header Missing [10021]PASS: Information Disclosure - Debug Error Messages [10023]PASS: Information Disclosure - Sensitive Information in URL [10024]PASS: Information Disclosure - Sensitive Information in HTTP Referrer Header [10025]...PASS: Cross Site Scripting (Persistent) [40014]PASS: Cross Site Scripting (Persistent) - Prime [40016]PASS: Cross Site Scripting (Persistent) - Spider [40017]PASS: SQL Injection [40018]PASS: SQL Injection - MySQL [40019]PASS: SQL Injection - Hypersonic SQL [40020]PASS: SQL Injection - Oracle [40021]PASS: SQL Injection - PostgreSQL [40022]PASS: Possible Username Enumeration [40023]PASS: Source Code Disclosure - SVN [42]PASS: Script Active Scan Rules [50000]PASS: Script Passive Scan Rules [50001]PASS: Path Traversal [6]PASS: Remote File Inclusion [7]...FAIL-NEW: 0 FAIL-INPROG: 0 WARN-NEW: 1 WARN-INPROG: 0 INFO: 0 IGNORE: 0 PASS: 97 |
Как говорится в отчете, никаких серьезных проблем обнаружено не было. Стоит отметить, что проект ZAP очень удобен для автоматизации и предоставляет удобный набор сценариев и образов Docker вместе с выделенным плагином Jenkins .
5. Стрельба из лука
Двигаясь вперед, давайте потратим некоторое время и посмотрим на Archery , в основном набор различных инструментов (кстати, включая Zed Attack Proxy ) для проведения всестороннего анализа безопасности.
Archery — это инструмент оценки и управления уязвимостями с открытым исходным кодом, который помогает разработчикам и пентестерам выполнять сканирование и управлять уязвимостями. Archery использует популярные инструменты с открытым исходным кодом для комплексного сканирования веб-приложений и сети. — https://github.com/archerysec/archerysec
Самый простой способ начать работу с Archery — это использовать предварительно скомпонованный образ контейнера Docker (но в этом случае интеграции с другими инструментами необходимо будет выполнить вручную):
|
1
|
$ docker run -it -p 8000:8000 archerysec/archerysec:latest |
Возможно, лучший способ запустить Archery в Docker — это использовать Docker Compose с предоставленным планом развертывания . Он связывает все инструменты и соединяет их с Archery .
Хотя типичным способом взаимодействия с Archery является его веб-интерфейс, он также имеет веб-API RESTful для целей автоматизации и может быть интегрирован в конвейеры CI / CD . Управляющая часть набора функций Archery включает интеграцию с JIRA для управления билетами.
Тем не менее, обратите внимание, что проект все еще находится в стадии разработки, он демонстрирует довольно многообещающее принятие , безусловно, стоит присмотреть.
6. XSStrike
Межсайтовый скриптинг ( XSS ) неизменно является одной из наиболее уязвимых уязвимостей в современных веб-приложениях (и является второй по распространенности проблемой в первой десятке OWASP , обнаруживаемой примерно в двух третях приложений). Поскольку платформа JCG Car Rentals имеет общедоступный веб-интерфейс, XSS — это реальная проблема, о которой нужно позаботиться, и такие инструменты, как XSStrike , чрезвычайно полезны для ее обнаружения.
XSStrike — это пакет обнаружения межсайтовых сценариев, оснащенный четырьмя рукописными синтаксическими анализаторами, интеллектуальным генератором полезной нагрузки, мощным механизмом фаззинга и невероятно быстрым сканером. — https://github.com/s0md3v/XSStrike
XSStrike написан на Python, поэтому вам необходимо заранее установить версию 3.7.x. К сожалению, XSStrike не очень хорошо работает с одностраничными веб-приложениями (например, с JCG Web Portal , основанным на Vue.js ). Но, тем не менее, мы могли бы выиграть, запустив его вместо JCG Admin Web Portal .
|
01
02
03
04
05
06
07
08
09
10
|
$ python3 xsstrike.py -u http://localhost:19900/portal?search=bmw XSStrike v3.1.2[~] Checking for DOM vulnerabilities[+] WAF Status: Offline[!] Testing parameter: search[!] Reflections found: 1[~] Analysing reflections[~] Generating payloads[-] No vectors were crafted. |
Он оказался не очень полезным для веб-интерфейсов JCG Car Rentals, но пусть этот факт не отговорит вас от попытки XSStrike .
7. Vulas
Всего несколько недель назад компания SAP открыла исходный код инструмента оценки уязвимостей ( Vulas ), состоящего из нескольких независимых микросервисов , который использовался для выполнения более 20 000 сканирований более 600+ проектов разработки Java.
Инструмент оценки уязвимостей с открытым исходным кодом поддерживает организации по разработке программного обеспечения в отношении безопасного использования компонентов с открытым исходным кодом во время разработки приложений. Инструмент анализирует приложения Java и Python… — https://github.com/SAP/vulnerability-assessment-tool
Инструмент Vulas предназначен для одной из 10 угроз безопасности OWASP , в частности, с использованием компонентов с известными уязвимостями . Он основан на базе знаний по оценке уязвимости , также SAP , который в основном собирает общедоступную информацию об уязвимостях в проектах с открытым исходным кодом.
После развертывания Vulas (использование Docker , вероятно, самый простой способ освоить скорость) и заполнение базы данных уязвимостей, вы можете использовать плагин Apache Maven, плагин Gradle или просто инструмент командной строки для интеграции сканирования в приложения на основе Java.
Чтобы проиллюстрировать, насколько полезными могут быть Vulas , давайте взглянем на примеры уязвимостей, обнаруженных в ходе аудита микросервиса обслуживания клиентов , одного из ключевых компонентов платформы JCG Car Rentals .
-
Vulas Workspace
Хотя веб-интерфейс Vulas довольно прост , количество деталей, представленных вместе с каждой обнаруженной уязвимостью, просто поразительно. Функционально это несколько похоже на проверку зависимостей OWASP, о которой мы говорили в предыдущей части руководства .
8. Еще один аудитор уязвимостей
AVA , или « Другой аудитор уязвимостей» в полном объеме, — это недавний вклад команды разработчиков безопасности действительно с открытым исходным кодом.
AVA — это веб-сканер, разработанный для использования в автоматизированных системах. Он принимает конечные точки через файлы в формате HAR и сканирует каждый запрос с помощью набора проверок и аудиторов. Проверки определяют уязвимости для проверки, такие как межсайтовый скриптинг или открытое перенаправление . Аудиторы определяют элементы HTTP для аудита, такие как параметры или файлы cookie. — https://github.com/indeedsecurity/ava
Как и XSStrike , он также основан на Python и довольно прост в установке. Давайте использовать AVA для проведения аудита XSS для JCG Admin Web Portal .
|
1
2
3
4
5
|
$ ava -a parameter -e xss vectors.har2019-03-27 01:56:38Z : INFO : Loading vectors.2019-03-27 01:56:38Z : INFO : Loading scanner.2019-03-27 01:56:41Z : INFO : Found 0 issues in 0:00:02. |
Результаты многообещающие, проблем не обнаружено.
9. Оркестровка
Огромная популярность решений для оркестровки и сервисных сеток может создать ложное впечатление, что вы получите безопасную инфраструктуру с минимальными усилиями. В действительности, есть много вещей, о которых нужно позаботиться, и такие инструменты, как kubeaudit от Shopify, могут быть здесь очень полезны .
10. Облако
Защищенные приложения, развернутые в плохо защищенных средах, могут вас не завести слишком далеко. Все становится еще хуже, если включить облачные вычисления в уравнение. Как бы вы обеспечили правильную защиту вашей конфигурации? Как уловить потенциальные недостатки безопасности? И как это масштабировать между несколькими облачными провайдерами , когда у каждого свое видение облачной безопасности?
Netflix столкнулась с этими проблемами на раннем этапе и внесла свой вклад в сообщество, открыв проект « Обезьяна безопасности ».
Security Monkey контролирует ваши учетные записи AWS и GCP на предмет изменений политики и оповещает о небезопасных конфигурациях. Поддержка доступна для публичных и частных облаков OpenStack. Security Monkey также может наблюдать и контролировать ваши организации, команды и репозитории GitHub. — https://github.com/Netflix/security_monkey
Существует также много других проектов с открытым исходным кодом для непрерывного аудита облачных развертываний, предназначенных для конкретного поставщика облачных услуг . Пожалуйста, убедитесь, что вы покрыты там.
11. Выводы
В этом разделе руководства мы поговорили о тестировании безопасности. Обсуждение было сосредоточено на трех основных темах: статический анализ кода, аудит уязвимых компонентов и сканирование экземпляров веб-приложений и API. Это отличное начало, но, конечно, недостаточно.
Сложные распределенные системы, такие как микросервисы , имеют очень большую площадь атаки. Наем экспертов по безопасности и включение их в состав вашей команды может значительно снизить риск взлома или непреднамеренной утечки конфиденциальных данных.
Одной из интересных инициатив в отношении экосистемы Java является создание Центрального проекта безопасности, который будет служить единой возможностью для сообщества безопасности сообщать о проблемах безопасности, обнаруженных в компонентах Apache Maven с открытым исходным кодом.
12. Что дальше
Эта часть завершает предмет тестирования. В следующей части урока мы перейдем к непрерывной доставке и непрерывной интеграции .
