适用于Java开发人员的微服务:安全测试和扫描

1.简介

本教程的这一部分专门讨论安全性测试,将围绕被证明在软件开发领域(包括微服务 )中无价的测试策略进行总结。 尽管软件项目中的安全性问题每天都变得越来越重要,但是令人惊讶的是有多少公司完全忽略了安全性实践。 每个月至少有一次您听到一个新的重大漏洞或数据泄露信息。 他们中的大多数人都可以在生产之前被阻止!

本教程这一部分的灵感主要来自开放Web应用程序安全性项目 (简称OWASP ),这是一个致力于改善软件安全性的全球性非营利慈善组织。 它是免费的,关于软件安全性的最新最佳资源之一。 您可能还记得本教程中已经看到的一些OWASP工具。

目录

1.简介
2.安全风险
3.从底部开始
4. Zed攻击代理
5.射箭
6. XSStrike
7. Vulas
8.另一位漏洞审核员
9.编排
10.云
11.结论
12.接下来是什么

2.安全风险

安全是一个非常非常广泛的主题。 那么, 微服务架构会带来什么样的安全风险呢? OWASP的一项举措是维护“ 十大应用程序安全风险” ,这是应用程序中最广泛发现和利用的安全漏洞的列表,主要是Web漏洞。 尽管最新版本的日期为2017年 ,但即使是最近几天,大多数风险(如果不是全部)仍然具有现实意义。

对于一般的开发人员而言,要知道应用程序可能会出现的所有可能的安全漏洞是非常困难的。 如果没有专业知识,专用工具或自动化,发现和消除这些缺陷就更加困难。 在团队中拥有安全专家可能是最好的投资,但是很难找到优秀的专家。 这样,工具方面正是我们将要重点关注的方面,仅将讨论范围缩小到开源解决方案。

3.从底部开始

安全应该是一项全面的措施,而不是事后的想法。 遵循安全编码惯例与保护基础架构同样重要。 像建筑行业一样,绝对有必要从坚实的基础开始。

有两种工具可以对Java代码库进行安全审核。 最广为人知的是Find Security Bugs ,这是SpotBugs插件,用于依赖静态代码分析的Java Web应用程序安全审核。 除了IDE集成之外,还有用于Apache Maven和Gradle的专用插件,因此可以将分析直接构建到构建过程中并自动进行。

让我们看一下“ 查找安全错误”的用法。 由于大多数JCG租车 微服务都是使用Apache Maven构建的,因此SpotBugs和Find Security Bug是必不可少的插件之一。


    com.github.spotbugs
    spotbugs-maven-plugin
    3.1.11
    
        Max
        Low
        true
        
            
                com.h3xstream.findsecbugs
                findsecbugs-plugin
                LATEST
            
        
    
    s
        
            
                check
            
            verify
        
    

默认情况下,如果在分析过程中发现任何问题,构建将失败(但是在这方面配置确实很灵活)。 尽管看起来有些废弃,但专门针对“ 查找安全错误” ,还有一个SBT集成 (用于基于Scala的项目)。

为了领先一点,如果您采用连续的代码质量解决方案,例如SonarQube (我们将在本教程的后面部分讨论),您将从代码安全审核中受益,这是质量检查管道的一部分。

4. Zed攻击代理

抛弃静态代码分析之后,我们要看的下一个工具是Zed Attack Proxy ,它被广泛称为ZAP 。

OWASP Zed攻击代理 ZAP )是世界上最受欢迎的免费安全工具之一,并由数百名国际志愿者积极维护。 它可以帮助您在开发和测试应用程序时自动查找Web应用程序中的安全漏洞。 对于经验丰富的渗透测试人员来说,这也是一个用于手动安全性测试的好工具。 https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project

ZAP可以利用多种模式。 最简单的方法是对托管Web前端的URL运行主动扫描 。 但是要充分利用ZAP ,建议将其配置为中间人代理 。

除此之外, ZAP有趣的是,可以使用ZAP通过使用OpenAPI或SOAP合同扫描Web服务和API来查找漏洞。 不幸的是, ZAP尚不支持OpenAPI v3.x ,但此问题已打开 ,希望可以在某个时候解决。

在所有JCG Car Rentals 微服务中,只有Reservation Service使用ZAP理解并能够执行扫描的较旧的OpenAPI规范。 假设从Keycloak获得了有效的访问令牌,让我们运行第一个ZAP API扫描。

$ 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 )。

射箭 是一个开源漏洞评估和管理工具,可帮助开发人员和渗透测试人员执行扫描和管理漏洞。 射箭使用流行的开源工具对Web应用程序和网络执行全面的扫描。 – https://github.com/archerysec/archerysec

射箭入门的最简单方法是使用预构建的Docker容器映像(但在这种情况下,与其他工具的集成将需要手动完成):

$ docker run -it -p 8000:8000 archerysec/archerysec:latest

可以说,在Docker中启动和运行Archery的更好方法是使用Docker Compose和提供的部署蓝图 。 它捆绑了所有工具并将其与Archery相连 。

尽管与Archery进行交互的典型方式是通过其Web UI,但它也具有用于自动化目的的RESTful Web API ,并且可以集成到CI / CD管道中。 射箭功能集的管理部分包括与JIRA集成以进行票务管理。

但是请注意,该项目仍处于开发阶段, 已经显示出相当有希望的采用 ,当然值得关注。

6. XSStrike

跨站点脚本 ( XSS )一直是现代Web应用程序中利用最多的漏洞之一(并且是OWASP Top 10中排名第二的普遍问题,大约在三分之二的应用程序中都存在)。 由于JCG租车平台具有公共Web前端,因此XSS是真正需要解决的问题,并且XSStrike之类的工具对于检测它很有帮助。

XSStrike 是一个跨站点脚本检测套件,配备了四个手写的解析器,智能的有效负载生成器,强大的模糊引擎和非常快的爬虫。 https://github.com/s0md3v/XSStrike

XSStrike用Python编写,因此您需要提前安装3.7.x版本。 遗憾的是, XSStrike在单页Web应用程序 (例如基于Vue.js的 JCG Web Portal)中不能很好地运行 。 但是,仍然可以通过在JCG Admin Web Portal上运行它而受益。

$ 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 Web前端不是很有帮助,但是不要让这个事实阻止您尝试XSStrike 。

7. Vulas

就在几周前, SAP公开了由几个独立的微服务组成的漏洞评估工具 ( Vulas )的源代码,该工具已用于对600多个Java开发项目进行20K +扫描。

开源 漏洞评估工具 支持软件开发组织在应用程序开发过程中安全使用开源组件。 该工具分析Java和Python应用程序……– https://github.com/SAP/vulnerability-assesssment-tool

Vulas工具针对OWASP十大安全威胁之一,更具体地说,是使用具有已知漏洞的组件 。 它由漏洞评估知识库提供支持,该知识库也由 SAP基本上可以汇总有关开源项目中安全漏洞的公共信息。

部署Vulas (使用Docker可能是最简单的方法)并填充漏洞数据库后,您可以使用Apache Maven插件 , Gradle插件或仅使用简单的命令行工具将扫描功能集成到基于Java的应用程序中。

为了说明Vulas有多么有用,让我们看一下在客户服务服务JCG租车平台的关键组件之一)审核期间发现的示例漏洞。

尽管Vulas Web UI非常基本,但所呈现的详细信息数量以及每个未发现的漏洞令人惊讶。 从功能上讲,它有点类似于本教程前面部分中讨论的OWASP依赖项检查 。

8.另一位漏洞审核员

AVA 或另一个漏洞审计全面,是从一个相当最近的开源贡献确实安全团队。

AVA 是设计用于自动化系统中的网络扫描仪。 它通过HAR格式的文件接受端点,并使用一组检查和审核员扫描每个请求。 这些检查确定了要检查的漏洞,例如“ 跨站点脚本” 或“ 打开重定向” 审核员确定 要审核 HTTP 元素,例如参数或cookie。 https://github.com/indeedsecurity/ava

与XSStrike相似 ,它也是基于Python的并且易于安装。 让我们使用AVA对JCG Admin Web Portal执行XSS审核。

$ 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.编排

编排解决方案和服务网格的广泛普及可能给人一种错误的印象,那就是您将零努力获得安全的基础架构。 实际上,有很多事情需要处理, Shopify的kubeaudit之类的工具可能在这里很有帮助 。

10.云

部署到安全性较差的环境中的安全应用程序可能不会使您望而却步。 通过将云计算纳入方程式,事情变得更加疯狂。 您如何确保配置得到正确加固? 如何发现潜在的安全漏洞? 当每个人对云安全性都有自己的愿景时,如何在多个云提供商之间进行扩展?

Netflix早已面对这些挑战,并通过将Security Monkey项目开源来为社区做出了贡献。

Security Monkey会监视您的AWS和GCP帐户是否有策略更改以及有关不安全配置的警报。 支持OpenStack公共云和私有云。 Security Monkey还可以监视和监视您的GitHub组织,团队和存储库。 – https://github.com/Netflix/security_monkey

还有许多其他开源项目可用于持续审核云部署,这些项目是针对特定云提供商量身定制的。 请确保您被覆盖在那里。

11.结论

在本教程的这一部分中,我们讨论了安全性测试。 讨论围绕三个主要主题:静态代码分析,审核易受攻击的组件以及扫描Web应用程序和API的实例。 这是一个很好的开始,但肯定还不够。

像微服务这样的复杂的分布式系统,其攻击范围非常广。 雇用安全专家并使其成为团队的一部分可以极大地降低被黑客入侵或无意间泄漏敏感数据的风险。

关于Java生态系统的有趣举措之一是建立中央安全项目,以作为安全社区报告在开源Apache Maven组件中发现的安全问题的一站式平台。

12.接下来是什么

这部分总结了测试主题。 在本教程的下一部分中,我们将切换到持续交付和持续集成 。

翻译自: https://www.javacodegeeks.com/2019/04/microservices-for-java-developers-security-testing-scanning.html

你可能感兴趣的:(适用于Java开发人员的微服务:安全测试和扫描)