鉴于.NET Framework 中对反序列化问题的实际利用,信息保障公司NCC Group的研究者认为识别.NET Framework 4.7.2方法和使用反序列化的类可能是有用的,因为它可以帮助安全研究人员和开发人员找到并解决潜在问题。研究的初步结果可以从以下网址下载:
https://www.nccgroup.trust/uk/our-research/use-of-deserialisation-in-.net-framework-methods-and-classes/?research=Whitepapers
8月与微软分享调查结果后,研究人员在代码文档中添加了新的安全说明,如下所示:https://github.com/dotnet/dotnet-api-docs/pull/502。我们的白皮书还应该包含.NET
Framework中几乎所有的方法和类,这些方法和类在编写时都有安全说明,这些方法和类可能也很有用。
通过粘贴和反序列化执行代码
其中最有趣的发现之一是从剪贴板粘贴后可以利用的反序列化问题。
在.NET框架中,对象可以序列化并存储在剪贴板的数据对象中、这些对象可以在粘贴时自动反序列化。与任何其他反序列化问题类似,当攻击者在剪贴板中创建任意对象时,可以利用这一点。虽然无法找到将任意对象远程存储到剪贴板的方法,但这对于破坏沙箱环境仍然有用(沙箱环境中无法执行直接命令但允许剪贴板对象通过)。当受影响的.NET应用程序以更高的权限运行时,权限升级也可能是另一种途径,但是在没有限制的情况下,可能还有其他更简单的技术可以在本地执行此操作。
技术细节
数据对象类使用BinaryFormatter反序列化某些剪贴板对象。
以下格式通过System.Windows.DataFormats,System.Windows.Forms.DataFormats受到影响:
CommaSeparatedValue,Dib,Dif,Locale(有被影响的潜在可能),PenData,Riff,Serializable,StringFormat,SymbolicLink,Tiff,WaveAudio
这些与以下格式名称相同:
Csv,DeviceIndependentBitmap,DataInterchangeFormat,Locale(可能),PenData,RiffAudio,WindowsForms10PersistentObject,System.String,SymbolicLink,TaggedImageFileFormat,WaveAudio
这已作为插件添加到ysoserial.net项目:
https ://github.com/pwntester/ysoserial.net/blob/master/ysoserial/Plugins/ClipboardPlugin.cs
因此可以存储有效负载使用以下命令进入剪贴板:
ysoserial.exe -p剪贴板-c calc -F System.String
受影响对象
除了从剪贴板读取特殊对象的应用程序之外,任何使用文本框、密码框或RichTextBox的WPF应用程序[也会受到影响。
下列应用程序易受攻击:
PowerShell ISE
Visual Studio(右上角快速启动)
net - 修补[6](单击编辑菜单或粘贴在文本框中)
LINQPad - 修补[7]
建议
由于微软已将此作为预期行为接受,因此在处理剪贴板中的数据对象时,将由底层应用程序使用未受影响的数据格式(如文本、Rtf、Tiff或位图)来确保它们不会受到攻击。在使用沙箱环境时,建议不允许剪贴板访问或将其限制为文本对象。从剪贴板粘贴代码执行相关的风险应该基于这样一个事实,即攻击者可能首先需要执行一些代码,以便在剪贴板中存储任意对象。