Статьи

Микросервисы для разработчиков Java: тестирование и сканирование безопасности

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 URLs
PASS: 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 довольно прост , количество деталей, представленных вместе с каждой обнаруженной уязвимостью, просто поразительно. Функционально это несколько похоже на проверку зависимостей 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.har
 
2019-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. Что дальше

Эта часть завершает предмет тестирования. В следующей части урока мы перейдем к непрерывной доставке и непрерывной интеграции .