基于模式匹配的数据集提取的制作方法

文档序号:15884440发布日期:2018-11-09 18:35阅读:181来源:国知局
基于模式匹配的数据集提取的制作方法

本申请要求于2016年1月22日提交的美国临时申请no.62/286,282的权益。上述申请的全部教导通过引用整体并入本文。

背景技术

随着每一天的过去,网络攻击变得越来越复杂。攻击的目标是利用特定应用中的特定漏洞。这种攻击的原因和影响在网络层是无法辨别的,因为这些攻击超出了最简单的攻击范围并且不会触发可以被视为明显恶意的网络活动。企业数据库是攻击者的优选目标,因为诸如信用卡号、客户社会安全号、健康记录、其他个人身份信息、详细客户列表、设计计划、源代码和其他知识产权等高价值信息都驻留在这些数据库中。为了应对这些针对性的攻击,很多供应商已经部署了网络安全产品,诸如试图将用户访问和行为与应用中的标记联系起来的下一代防火墙和面向web的应用防火墙、或者试图在沙盒中运行供应商认为是可疑代码的内容并且等待这样的代码执行可观察的恶意活动的沙盒技术。为了应对这种检测机制,恶意软件通常会调节其行为,诸如等待检测引擎在恶意软件释放其恶意意图之前放弃查看。这些行为上的变化阻碍了当代网络安全解决方案识别攻击的行为的能力,并且从而阻碍了他们以及时地检测到恶意软件的存在的能力。



技术实现要素:

如今,计算机应用的大量恶意软件攻击是由于恶意行为者通过提供特别制作的输入数据来注入和随后执行恶意内容或从数据库中提取数据的能力。这些恶意活动可以在企业的信息技术(it)组织不知情的情况下完成。注入这样的恶意内容的过程涉及标识和利用设计不良的代码,该代码执行不充分的输入验证。当前的网络安全技术或者试图观察网络流量中的恶意内容、其来源或者跟踪应用的网络行为,并且希望网络行为表现出一些先前编目的异常活动,或者在将可疑代码分发到服务器以供执行之前在沙箱中屏蔽可疑代码的行为。这些技术不具有以足够低的粒度实时地检查真实的面向web的应用以可靠地检测与这样的恶意内容的执行一起出现的根本原因触发的能力。

检测这种根本原因触发的障碍是无法跟踪通过应用的框架和业务逻辑对数据流的处理。本发明的实施例捕获在框架处接收的数据流的大量数据分组,并且进一步捕获在接收的数据流的处理期间触发的大量函数、它们的参数和数据库查询。这包括在框架和业务逻辑两者中捕获上述信息。本发明的其他实施例还捕获读取或写入存储器的指令的线程id和地址以及操作的存储器的地址和范围。这些实施例进一步使用模式匹配和机器学习来从该大量捕获数据中隔离分组、函数和数据库查询、特定于应用的线程id和存储器操作,并且关联这些隔离的分组、函数、查询和存储器访问之间的关系。隔离和相关的分组、函数、查询、线程id和存储器访问、以及诸如用户、会话、ip地址、端口、协议、线程、代码地址、存储器操作(读/写)所针对的存储器地址和范围等某些上下文数据被提取到数据集。可以根据数据集调节分析器以监听一组相关的分组、函数和查询以跟踪和探测与特定应用相关的活动。这种调节使得分析器能够可靠地检测在这样的恶意内容的执行之前的根本原因触发。例如,这种调节使得分析器能够在处理用户提供的数据的隔离函数和机器代码指令中检查,以确定它们如何处理恶意内容。

本公开的实施例涉及生成用于调节分析器以探测与特定应用相关的活动的数据集的系统和方法。该系统和方法捕获在应用的框架处接收的数据流。在示例实施例中,框架可以根据以下中的至少一项或多项来编写:二进制、.net、java、php、ruby和python语言。在一些实施例中,第一流量分析器或分组捕获工具可以被配置为捕获数据流。该系统和方法还捕获由框架触发的处理数据流的第一组函数。在一些实施例中,第一剖析器可以被配置为捕获由应用执行的函数、线程id和存储器访问。

该系统和方法将捕获的第一组函数的子集与捕获的数据流的数据分组相匹配。在一些实施例中,模式匹配引擎可以被配置为执行匹配。在一些实施例中,匹配捕获的第一组函数的子集包括对这些函数的参数中的数据、线程id和/或对数据分组的字段中的数据的存储器访问进行模式匹配。该系统和方法将捕获的第一组函数的匹配子集、和/或线程id以及存储器访问提取到数据集中。该系统和方法基于提取的数据集探测应用的活动以检测网络攻击。

在一些实施例中,该系统和方法捕获由框架触发的处理数据流的第二组函数。在一些实施例中,第二剖析器可以被配置为捕获由应用执行的第二组函数、线程id和存储器访问。在这些实施例中,该系统和方法还捕获由框架生成的对数据库服务器的数据库查询。在一些实施例中,第二流量分析器或分组捕获工具可以被配置为捕获数据库查询。在这些实施例中,该系统和方法将捕获的数据库查询中的一个或多个与捕获的第二组函数的子集相匹配。一个或多个捕获的数据库查询的匹配包括将捕获的第二组函数的参数中的数据与捕获的一个或多个数据库查询的表达式中的数据进行模式匹配。在这些实施例中,该系统和方法还将匹配的一个或多个捕获的数据库查询和捕获的第二组函数的匹配子集提取到提取的数据集中。

在这些实施例中的一些中,该系统和方法还关联匹配的数据分组、捕获的第一组函数的匹配子集、捕获的第二组函数的匹配子集、存储器访问的匹配内容、以及匹配的一个或多个数据库查询之间的关系。该系统和方法基于相关关系来映射数据集中的匹配的数据分组、捕获的函数的匹配子集、存储器访问的匹配内容、以及匹配的一个或多个数据库查询。该系统和方法还基于提取的数据集中的匹配的数据分组、捕获的函数的匹配子集、存储器访问的匹配内容、以及匹配的一个或多个数据库查询的映射来探测应用的活动。

在一些实施例中,该系统和方法在数据流的处理期间捕获每个存储器访问的内容。该系统和方法将提取的数据集与每个捕获的存储器访问相比较,以标识用于在处理用户数据时使用的捕获的第一组函数和第二组函数的指令。该系统和方法创建所标识指令的链,使得被提取到数据集的链表示要在面向web的应用中监测的漏洞。该系统和方法通过监测所创建的指令链来在运行时探测面向web的应用的活动,该探测包括在每个捕获的函数的输出处添加用户内容以及从每个捕获的函数的输入中移除上下文。在示例实施例中,捕获的第一组函数由框架在去往框架的业务逻辑层的接口处触发,并且捕获的第二组函数由框架在来自框架的业务逻辑层的接口处触发。

在一些示例实施例中,数据流的捕获还包括该系统和方法基于框架的协议配置来解密数据流。在一些示例实施例中,该系统和方法还提取以下中的至少一项:用户、用户数据、会话信息、ip地址、端口号、协议上下文、线程上下文、以及将数据流处理成提取的数据集以探测面向web的应用的活动的流量方向。

在一些示例实施例中,该系统和方法通过在运行时捕获在面向web的应用的框架处接收的数据分组来探测活动。在示例实施例中,第三流量分析器被配置为捕获数据分组。该系统和方法进一步捕获数据集中的提取的数据集中的捕获的第一组函数的匹配子集和捕获的第二组函数的匹配子集的每个触发函数,并且捕获数据集中的捕获的数据库查询的每个触发数据库查询。在示例实施例中,第三和第四剖析器被配置为分别捕获第一和第二组函数,并且第四流量分析器被配置为捕获数据库查询。该系统和方法对于第一组函数的每个触发函数,检查第二组函数的映射子集的触发以及映射的一个或多个数据库查询的触发。如果捕获的分组的数据与每个触发函数的参数中的数据和每个触发数据库查询的表达式中的数据不匹配,则该系统和方法声明安全攻击。

附图说明

从附图中所示的示例实施例的以下更具体的描述,前述内容将是很清楚的,附图中的相同的附图标记在不同视图中指代相同的部分。附图不一定按比例绘制,而是将重点放在说明本公开的实施例。

图1示出了高级持久性恶意软件攻击的示例配置。

图2示出了本公开的实施例中的示例应用基础设施。

图3示出了本公开的实施例中的应用框架的框图。

图4示出了本公开的实施例中的未加密数据流中的基于模式匹配的数据集提取的框图。

图5示出了本公开的实施例中的加密数据流中的基于模式匹配的数据集提取的框图。

图6示出了描绘本公开的实施例中的基于模式匹配的数据集提取的示例方法的流程图。

图7a示出了本公开的实施例中的应用运行时监测和分析(armas)的示例框图。

图7b示出了用于在图7a的armas基础设施内传输数据的示例协议数据单元(pdu)。

图8示出了可以实现本公开的实施例的计算机网络或类似的数字处理环境。

图9示出了图8的计算机系统中的计算机(例如,客户端处理器/设备或服务器计算机)的示例内部结构的图。

具体实施方式

以下是对本公开的示例实施例的描述。

本文中引用的所有专利、公开的申请和参考文献的教导通过引用整体并入。

示例恶意软件攻击

图1示出了预先持续恶意软件攻击的示例。在这种情况下,来自行为者自己的基础设施102的恶意行为者(或黑客)使用诸如nmap104等扫描工具远程扫描企业108的面向客户的基础设施。当扫描发现具有已知漏洞或零日漏洞的代码时,行为者安装shell代码106以获取对远程企业服务器(即,目标)110的控制并且访问企业网络。一旦进入网络,恶意行为者就会加载附加工具来支持攻击应用。这些工具可以包括nmap、端口扫描程序、密码破解工具、ftp客户端、压缩工具、散列和/或加密和解密工具。

然后,行为者访问企业基础设施,以寻找机器114或116,具有提升的特权的用户能够从该机器114或116登录到有价值的目标,诸如数据库和文件存储库。行为者正在寻找机器114或116,以便报废用户的访问凭证并且寻找更多黑客工具的家。在找到具有易受攻击的应用114或116的机器时,恶意行为者可以连接回他们的远程黑客命令控制中心112,报废凭证,渗透并且随后访问目标110。一旦目标被访问,交易的附加工具被加载到目标110上。恶意软件也可以存放到诸如特权用户的诸如智能电话和笔记本计算机等移动设备上,因为他们将机器带到诸如咖啡店、机场和酒店等不受保护的网络。在另一种情况下,即使应用执行的进程正在运行,内部人员也可能使目标计算机感染病毒或其他恶意软件攻击。

企业数据库是恶意行为者的优选目标,因为对于企业非常有价值的信息可以被特权用户访问。例如,在这些数据库中,特权用户可以访问关于所有客户的大量机密客户信息,而普通用户只能访问仅与他们自己相关的部分机密信息。在获取凭证之后,恶意行为者可以作为特权用户连接到数据库和文件存储库118并且提取有价值的机密信息,诸如真实姓名、家庭地址、社会保障、驾驶执照、出生日期、医疗记录、财务信息(诸如信用卡/借记卡号)、电话号码、电子邮件地址、用户名和密码、保险信息、详细客户列表、设计计划和源代码或其他知识产权。

恶意行为者可以可选地压缩和加密该信息并且以小块的形式将其上传到黑客命令控制中心112以便不引起企业安全分析师的注意。为了实现该目的,恶意行为者可以每天改变黑客命令控制中心112的ip地址或使用代理,使得企业中的入侵检测系统不能建立模式。企业通常每天发送和接收超过10gb的数据;因此,在短时间内上传相对少量的数据往往不被注意。

在另一种情况下,恶意行为者可以使用数据库查询注入攻击(诸如sql注入攻击)来首先丢弃webshell并且然后继续提取关于企业客户端或客户的有价值的机密信息。此外,以相同的方式,恶意行为者可以利用远程文件注入(rfi)攻击将附加功能插入到面向web的应用中。这样的功能可以由恶意行为者使用完全良性的用户输入来访问,但是当注入的功能被执行时,它可能无意地安装webshell和/或向恶意行为者泄露机密信息。

这种攻击成功是因为无法探测特定的面向web的应用的面向web的应用框架中的处理流水线,网络安全解决方案无法确定恶意行为者是否干扰或改变了与特定的面向web的应用的处理相关的数据。无法调节网络安全解决方案(诸如面向web的应用防火墙和入侵检测/预防引擎)以跟踪面向web的应用框架中的特定的面向web的应用的粒度处理。这部分是因为不存在如下网络安全工具,其能够从由面向web的应用框架接收和处理的大量数据(特定数据、函数、数据库查询、线程id和用于处理应用的存储器访问的内容)中隔离和关联。在没有隔离和相关的数据的情况下,这些网络安全解决方案无法有效地检测恶意行为者通过应用进行的攻击。

面向web的应用基础设施

图2示出了可能易受安全攻击的示例性的面向web的应用基础设施。基础设施包括远程web客户端220,用户或机器从该远程web客户端220生成对于在特定网站处执行交易的web请求。用户或机器可以通过输入url,选择为用户输入url的图形选项等来生成web请求。web客户端220将web请求(例如,作为http、soap、rest或者其他标准或非标准化请求)发送到web服务器240,web服务器240可以接收web请求以及来自大量其他用户的web请求作为数据流。web服务器240可操作地耦合到应用服务器260以处理数据流。web服务器240和应用服务器260被配置为面向web的应用框架类型,包括但不限于binary、.net、java、php、ruby、python等。面向web的应用框架可以分成逻辑层,包括但不限于表示逻辑层、业务逻辑层、数据逻辑层等。

所接收的数据流通过面向web的应用框架的逻辑层(在web服务器240和应用服务器260处)在流水线中拦截和处理。典型的面向web的应用还查询数据库以利用在框架的输出处提供的更多服务。因此,在面向web的应用框架的处理流水线内,应用服务器260还可以将数据流发送到数据库服务器270。在处理流水线的末尾,应用服务器260可以将数据流传送到(后端)数据库275。数据库服务器270可以将数据流作为数据库查询(例如,sql查询、存储的过程调用等)传送到数据库275以从数据库275检索与web请求有关的数据记录。数据库服务器270可以将来自检索到的数据记录的数据返回给请求用户。为此,数据服务器270将该数据作为数据流在与web服务器240相反的方向上通过框架的处理流水线发送回。web服务器240将该数据(例如,作为http响应)发送回与对应的用户相关联的远程web客户端220。

本发明的实施例通过框架的逻辑层捕获处理流水线中的不同阶段处的数据流。取决于阶段,数据流可以被捕获作为来自数据分组的原始数据(例如,原始tcp数据),被捕获作为由框架触发以处理数据流的函数,被捕获作为存储器访问,被捕获作为由框架触发以检索数据库记录的数据库查询,等等。这些实施例对捕获的原始数据、函数和数据库查询执行模式匹配和关联,以提取指示在框架的各个阶段处特定网站(面向web的应用)的处理模式的数据集。

面向web的应用框架

图3示出了本公开的实施例中的面向web的应用框架的框图。大多数面向web的应用被构建为在由应用框架提供的“容器”中运行或被托管在其中,如图3所示。在这个范例中,应用框架提供常用能力,诸如对用户进行认证、加密、会话管理、sql连接器等。容器的一些示例包括apachetomcat、jboss、oracleweblogic、ibmwebsphere等。这些框架极大地减轻了应用开发人员的负担,应用开发人员现在可以专注于开发业务逻辑。在示例实施例中,面向web的应用框架可以跨越图2的web服务器240和应用服务器260进行配置。面向web的应用框架可以是以下类型:二进制、.net、java、php、ruby、python或者任何其他这样的标准或专有框架语言类型。

在图3中,包括数据1的大量数据的数据流305从通信网络(例如,因特网)输入到框架的处理流水线。注意,不同的web服务器240/应用服务器260可以在具有不同处理流水线的不同框架中配置。数据流305的数据来自同时使用应用的多个用户。数据流305可以作为来自诸如http、ftp、smtp、voip、rdp、websocket等通信协议的原始数据分组(例如,以太网帧)到达框架的处理流水线(框架输入310)。这些数据流305可以被加密和/或分段。例如,在一些实施例中,数据1可以是经由用户客户端设备220的来自用户的对特定网站(面向web的应用)的http请求。在框架的业务逻辑层配置处的业务逻辑320可以是针对该特定网站的逻辑。

包括数据1的数据流305在处理流水线中继续通过框架的一个或多个层,诸如图3中所示的业务逻辑层320。当数据流305继续通过处理流水线时,它们通过多个处理阶段来被消耗和生成为经改变的数据流315、325、335。这些处理阶段通过特定函数或方法的触发来执行,并且更具体地当执行cpu指令时通过cpu指令来执行。例如,包括数据1的数据流315由业务逻辑层320在处理流水线中消耗以生成包括数据2的数据流325。数据流335可以退出处理流水线(框架输出330)并且通过触发数据库查询以从后端数据库(诸如图2的数据库275)检索记录数据来完成处理。包括从后端数据库检索的记录数据的数据流可以通过框架的处理流水线(在相反的方向上)被发送回,其中数据流类似地由多个处理阶段消耗/生成。

非加密数据流的基于模式匹配的数据集提取

图4示出了本公开的实施例中的未加密数据流中的基于模式匹配的数据集提取的框图。在图4中,分组捕获应用或工具302被配置为捕获到达框架的处理流水线(框架输入310)的大量数据(包括数据1)的输入数据流305。图4示出了wireshark分组捕获工具的使用,但是在其他实施例中,可以使用任何其他分组捕获工具/应用而没有限制。分组捕获工具/应用基于框架类型从包括数据1的数据流305捕获原始数据分组。例如,与特定框架(例如,php)相关联的数据分组可以包括特定数据报头或可以由分组捕获工具/应用识别(监听)的其他特定字段。分组捕获工具/应用从捕获的原始数据分组向模式匹配/机器学习引擎360发送一部分(pm)数据(例如,tcp数据)以进行记录和处理。在一些实施例中,可以使用诸如管道等流传输将数据变换到模式匹配/机器学习引擎360。从一部分数据,模式匹配/机器学习引擎360可以提取特定数据项,包括用户、会话信息、通信协议、ip地址、端口号、业务方向等,但不限于此。

在图4中,剖析器应用/工具312被配置为在框架的处理流水线和特定应用的业务逻辑320中剖析(捕获)包括数据1的数据流315。注意,实施例使用拦截函数入口点的语言特定剖析器和拦截个体指令的二进制剖析器两者。在该处理阶段,框架触发触发存储器访问以处理(消耗和生成)包括数据1的数据流315的函数或方法和指令。为了确定用于处理数据1的特定函数,剖析器312捕获由框架在处理流水线的这个阶段触发的所有函数。例如,剖析器312捕获由框架触发的函数foo(p1,p2..pn)。然后,剖析器312将剖析的函数、线程id和参数的内容发送到模式匹配/机器学习引擎360,模式匹配/机器学习引擎360将剖析的函数与由分组捕获工具/应用302捕获的原始数据分组相匹配。特别地,模式匹配/机器学习引擎360执行模式匹配,模式匹配将所剖析的函数的数据参数与所捕获的原始数据分组的所提取的数据项相关联,以标识和隔离被触发以处理数据1的特定函数。模式匹配/机器学习引擎360在数据集中提取并且记录这些特定函数,作为特定应用的(相关数据1集)350。在数据集中,可以将特定函数映射(链接)到相关联的原始数据分组的数据,其指示框架和特定应用的处理模式。

在图4中,另一剖析器应用/工具(例如,sql剖析器)322也被配置为在访问后端系统或数据库的框架的处理流水线中剖析包括数据2的数据流325。注意,包括数据1的数据流315由应用的核心业务逻辑320在处理流水线中消耗,以生成包括数据2的数据流325。在该处理阶段,框架触发函数或方法以及存储器访问以处理(消耗并且生成)包括数据2的数据流。剖析器剖析由框架在处理流水线的这个阶段触发的所有函数、线程id和存储器访问,并且将剖析的函数、线程id和存储器访问发送到模式匹配/机器学习引擎。例如,剖析器322剖析/发送由框架触发的函数bar(p1,sqli,…pq)。模式匹配/机器学习引擎260可以特别地标识和隔离与从后端数据库340访问数据记录相关的函数,诸如包括与数据库特定推荐(例如,sql命令)相关的参数的函数。

此外,另一分组捕获工具/应用332(例如,wireshark或tcpdump)被配置为捕获与后端数据库340相关的包括数据2的数据流335。分组捕获工具/应用332可以在数据流335离开服务器270时捕获数据流335并且通过ipc机制(诸如tcp/ip套接字)遍历数据库。包括d2的这些数据流332在框架的处理流水线中从触发的函数来生成。分组捕获工具/应用基于框架类型从包括数据2的数据流332捕获原始数据分组。例如,与特定数据库类型相关联的数据分组可以包括可以由分组捕获工具/应用识别(监听)的特定字段。分组捕获工具/应用332从捕获的原始数据分组中收集一部分数据(例如,sql数据)并且将其发送到模式匹配/机器学习引擎360以进行记录和处理。从一部分数据,模式匹配/机器学习引擎360可以提取特定数据项,诸如sql查询或存储的过程调用。

然后,模式匹配/机器学习引擎360将与数据库访问相关的剖析的函数与涉及后端数据库340(由分组捕获工具/应用捕获)的数据分组(数据库查询)相匹配。特别地,模式匹配/机器学习引擎360执行模式匹配,模式匹配将这些剖析的函数的数据参数与sql查询(sqli)的表达式相关联以标识和隔离基于数据2而触发的特定函数和特定数据库查询。模式匹配/机器学习引擎360在特定网站(面向web的应用)的数据集(相关数据2集)355中提取并且记录这些特定函数和数据库查询。在数据集中,特定函数被映射(链接)到特定数据库查询。数据集355指示用于特定网站(面向web的应用)的框架的后端的处理模式。

关联提取的数据集

模式匹配/机器学习引擎360还可以将相关数据1集数据集350与相关数据2集数据集355关联。模式匹配/机器学习引擎360可以通过使用针对框架的进程或线程之间的通信而配置的上下文数据结构来执行关联。这种上下文数据结构用于面向web的应用框架的处理流水线中。剖析器312、322或可操作地耦合的计算机应用可以将标识信息(例如,用户、会话或这样的信息)插入到这些上下文数据结构中,这使得能够跟踪用于处理数据1的进程/线程到用于处理数据2的进程/线程。当捕获由包括数据2的数据流325、335触发的函数或数据库查询时,剖析器还可以捕获相关联的进程/线程和对应的插入的标识信息。剖析器312、322还将进程/线程和对应的标识信息发送到模式匹配/机器学习引擎360,在那里它们被记录并且映射到相应数据集中的相关联的函数和数据库查询。模式匹配/机器学习引擎360可以通过将被映射到数据集2的数据/函数的标识信息与被映射到数据集1的数据/函数或数据集1的数据/函数的字段/参数的标识信息相匹配来确定与数据集2的函数/查询相关联的数据集1的数据/函数。

以这种方式使用上下文数据结构的示例如下。在应用基础设施(如图2所示)中,web服务器240(经由web服务客户端)从用户接收web请求(例如,http请求)。使用web请求中包括的信息(例如,url),web服务器240对用户进行认证,并且如果认证成功,则为用户建立用于访问面向web的应用基础设施内的数据的连接(或会话)。web服务器240维护用户和会话数据以在会话内与用户交换web请求和web响应。web服务器240和应用服务器260被配置在面向web的应用框架中,如图3所示。在会话期间,web服务器240通过经由利用跨上下文容器和本地进程通信/进程间通信(lpc/ipc)的相互依赖机制和线程与面向web的应用框架(图3)内的应用服务器260通信来处理web请求。在其他实施例中,web服务器240和应用服务器260可以使用任何其他上下文数据存储器结构和任何其他进程通信方法在面向web的应用框架内进行通信。注意,上下文数据可以是用于在面向web的应用框架内的服务器或其他这样的设备之间传输数据的任何数据结构,包括在二进制、.net、java、php、ruby、python或任何其他面向web的应用框架语言类型(没有限制)中使用的任何数据结构。

跨上下文容器(上下文数据)包括用于保存在web服务器240与应用服务器260之间共享的数据的多条存储器(数据对象),包括http/同步、调用/操作等。这些数据对象可以被格式化为内部数据结构或基于文本的存储器元件(例如,以xml、json、原始数据格式)。图4的剖析器312、322经由检测(instrumented)代码与web服务器240和应用服务器260通信以根据附录a中所示的相应数据结构扩展上下文数据。例如,剖析器312、322经由检测代码从在web服务器2400处接收的web请求中检索用户、会话和用户输入信息,包括用户名(例如,uuid)、ip地址、端口号、url、会话id、http数据、线程id、存储器访问类型和内容以及任何其他这样的用户/会话信息。

以这种方式,剖析器312、322具有对与在框架(图4)的处理流水线中使用以处理数据1和数据2的线程相关联的用户、会话等的可见性。此外,剖析器312、322可以在数据1和数据2的处理流水线中捕获线程和相关联的用户、会话等、以及数据分组、触发的函数、存储器访问和触发的数据库查询。剖析器312、322可以将来自上下文数据的扩展的数据结构的线程和相关联的用户/会话数据发送到模式匹配/机器学习引擎360,以将这些线程和相关联的用户/会话数据记录在被映射到相关的数据分组、触发的函数和触发的查询的相关数据2集数据集335中。基于用户/会话数据或数据1的数据/函数的字段/参数中的类似数据,模式匹配/机器学习引擎360可以使用用户/会话数据来将数据2(在相关数据2集数据集355中)的相关函数/查询与数据1的数据/函数(在相关数据1集数据集350中)关联。相关数据集350、355可以被一起包括在框架的各个阶段(端到端)为特定应用提供处理模式的累积数据集中。

加密数据流的基于模式匹配的数据集提取

图5示出了在本公开的实施例中的加密数据流中的基于模式匹配的数据集提取的框图。在图5的实施例中,包括到达框架的数据1的数据流505被加密。分组捕获工具301在加密的数据流到达框架之前拦截加密的数据流。然后,加密变换模块510被配置为将数据流505转换为等效的解密数据流305。加密变换模块510可以通过确定由框架使用的加密协议(例如,ssl)来提供这种转换,并且根据确定的加密协议来解密数据流的数据分组以清除文本。加密变换模块510可以参考库函数(例如,ssl_read、ssl_write等)、应用编程接口(api)函数以及与确定加密协议相关的其他这样的功能,以便执行数据流505的数据分组的解密。解密的数据流305将在到达框架(框架输入310)时由剖析器308(而不是分组捕获工具)捕获。出于可缩放性目的,数据流305在框架的边缘处被解密。也就是说,通过在框架的边缘执行解密,可以在本发明的实施例中处理利用给定框架和访问类型(http、rest、soa、非标准等)的任何业务逻辑。包括数据1的解密的数据流305将以与图4中所述的相同的方式继续通过框架的处理流水线。

提取的数据集的使用

来自图4或5的结果数据集可以用于跨越框架的各个阶段(端到端)探测应用的活动以检测网络攻击。经由框架中的检测代码,可以基于结果数据集调节分析引擎以监听特定函数和数据库查询以监测和探测特定的面向web的应用的活动。以这种方式,分析引擎可以消除数据流中的噪声并且仅关注或过滤处理应用中的用户数据的特定函数或方法、线程和存储器访问。数据集还可以基于记录在数据集中的与分组、函数、数据库查询、线程和存储器访问相关的上下文来进一步探测分组、函数、数据库查询、线程和存储器访问的数据参数和字段。此外,基于数据集,可以转向分析引擎以针对特定用户、会话等跟踪和探索跨越框架的活动。

基于模式匹配的数据集提取的方法

图6示出了描绘本公开的实施例中的基于模式匹配的数据集提取的示例方法600的流程图。图6的方法开始于在步骤610捕获在面向web的应用的框架处接收的数据流。该方法可以使用分组捕获工具来监听特定于应用的框架的数据分组,并且提取数据分组的特定数据部分(例如,tcp数据)。在步骤620,该方法接下来捕获由框架触发以在由业务逻辑处理数据流之前处理数据流的第一组函数(或方法)、线程id和存储器访问。在步骤625,该方法接下来捕获由框架触发以在由业务逻辑处理数据流之后处理数据流的第二组函数(或方法)、线程id和存储器访问。在一些实施例中,该方法还可以捕获框架的每个方向上的最后的函数,作为第一和第二组函数的一部分。如果捕获的函数处理数据片段,则该方法还可以捕获函数的处理流水线中的前一和下一函数。在步骤620,该方法还可以提取参数、线程id、存储器访问以及这样的访问的内容和捕获的各组函数的相关数据。在步骤630,该方法然后通过网络将由框架生成的数据库查询、线程id和存储器访问捕获到数据库服务器以查询后端数据库。该方法在步骤630还可以提取捕获的数据库查询的表达式、字段和相关联的数据。该方法可以使用剖析器来捕获第一和第二组函数(步骤620和625)并且使用第二分组捕获工具来捕获数据库查询(步骤630)。

在该方法的步骤640,分组捕获工具和剖析器将捕获的数据发送到模式匹配/机器学习引擎,模式匹配/机器学习引擎通过模式将数据分组、触发的第一和第二组函数、线程id、对数据流的存储器访问和数据库查询相匹配。捕获的数据分组和触发的第一组函数、线程id和来自框架的前端的存储器访问可以与第一数据流相匹配,并且触发的第二组函数和框架的后端的捕获的数据库查询可以与第二数据流相匹配。在步骤650,该方法在一个或多个数据集中提取匹配的函数(来自第一和第二组函数)、匹配的线程id、匹配的存储器访问、匹配的查询和数据分组。该方法可以将第一数据流(框架的前端)的分组和匹配的第一组函数提取到第一数据集,并且将第二数据流(框架的后端)的匹配的第二组函数和捕获的数据库查询提取到第二数据流。

该方法还可以将与一些或所有数据分组、函数和查询相关的信息提取到相应的数据集中,信息是诸如用户、用户数据、会话信息、ip地址、端口号、协议上下文、线程上下文、线程id、存储器访问(例如,读取或写入存储器的指令的地址和由应用操作的存储器的范围)、流量方向等。提取的结果是用于处理由框架处理的用户提供的数据的一组连结的函数、线程、存储器访问指令等。该方法可以捕获应用中的每个存储器访问(读/写)的内容。然后,通过跟踪存储器访问并且将数据集与存储器访问相比较,该方法可以标识应用中的哪些指令(读/写)参与处理用户数据。通过捕获这些函数、存储器访问、指令等,该方法可以在运行时隔离需要更详细检查的应用或框架的一个或多个潜在漏洞。在运行时,可以隔离地执行这些标识的指令以确定它们是否错误地处理了在框架处接收的狡猾和恶意创建的用户数据(例如,在面向web的应用请求中)。此外,通过不包括(从数据集中丢弃)不处理所标识的用户指令的函数,该方法可以避免更深地搜索那些丢弃的函数,从而提高探测面向web的应用的活动的检测的效率。

在该方法的步骤660,模式匹配/机器学习引擎基于函数、查询、线程id、存储器访问和数据分组的参数和字段中的数据来关联相应数据集的函数、查询、线程id、存储器访问和数据分组之间的关系。关联可以在数据集中创建必须在运行时检查以防止漏洞被利用的线程、函数、指令等的链。关联还可以包括基于上下文数据结构的用户将第一数据集的数据分组和函数与第二数据集的函数和查询关联,以跟踪和映射第一数据流与第二数据流之间的进程/线程。跟踪和映射可以创建线程id链,其用于每个用户建立应用的上下文。进程/线程的跟踪和映射可以通过将标识信息(用户、会话等)放置和处理到框架内的跨上下文容器和本地进程通信/进程间通信(lpc/ipc)中来执行。第一数据集与第二数据集之间的关联可以导致累积数据集,其指示针对特定的面向web的应用的跨框架的端到端处理。在步骤670,该方法在分析器(分析引擎)处对累积数据集进行编程以调节分析器以基于数据集探测特定的面向web的应用的活动以检测安全攻击。在探测期间,数据集中的线程、函数、指令等的链可以在运行时被标识,并且由该方法用于在每个函数的输出侧添加用户上下文,从输入中移除上下文,以及向分析引擎报告这些情况。

应用运行时监测和分析(armas)基础设施

图7a描绘了示例应用运行时监测和分析(armas)基础设施的高级框图。从图2至6的系统和方法生成的数据集可以用于调节分析引擎737以监测和分析与特定应用相关的活动。该基础设施可以被配置在各种硬件上,包括计算设备,范围从智能电话、平板计算机、笔记本计算机、台式计算机到高端服务器。如该图所示,监测代理702执行的数据收集可以与分析引擎737执行的分析分开,以减少对应用强加开销并且从而降低其性能。基础设施提供高可用性以防止黑客破坏其对恶意软件攻击的保护。监测代理702与应用交互以收集加载时间和运行时数据。在一些实施例中,监测代理702可以是用于捕获由应用框架接收和处理的数据流的图4和5的分组捕获工具和剖析器。监测代理702还可以与模式匹配/机器学习引擎通信以从捕获的数据流生成数据集。

应用701的基础设施包括进程存储器703、第三方库704、内核服务706和指令流水线707。监测代理702的基础设施包括检测和分析引擎(检测引擎)705、图形用户界面(gui)711、客户端守护程序708、配置数据库709、以及流式传输和压缩引擎710、以及中央处理单元(cpu)736。应用701的本地或远程用户750通过诸如键盘、鼠标或类似的i/o设备等设备或通过可以借助于管道、共享存储器或套接字来建立的通信信道在网络上与应用交互。作为响应,应用进程703将适当的指令集分派到指令流水线707中以供执行。应用还可以利用其自己的或第三方库704,诸如libc.so(linux)或msvcrtxx.dll(windows)。当调用来自这些库的函数时,来自这些库的适当指令也被插入到指令流水线中以供执行707。此外,应用可以利用来自内核706的系统资源,诸如存储器、文件i/o等。按时间顺序放置在一起的来自应用、库和内核的这些指令序列提供给定用户所需要的应用功能。

当应用的代码开始加载到存储器中时,检测引擎705执行若干不同的加载时间动作。一旦所有模块都加载完毕,应用的检测指令生成运行时数据。客户端守护程序708通过从配置数据库709读取一个或多个配置文件来在736处初始化cpu中的检测和分析引擎705、流式传输引擎710和gui711进程。它还初始化检测引擎、流式传输引擎、gui、分析引擎737和它自己之间的相互通信管道。客户端守护程序还确保任何监测代理702进程(包括其自身)是否变得无响应或死亡,它将被重新生成。这确保了监测代理702是高可用性企业级产品。

检测和分析引擎737将从应用收集的加载和运行时数据推送到流式传输引擎中。检测和分析引擎737可以基于由图4和5的模式匹配/机器学习引擎生成的数据集来推送数据。流式传输引擎将来自监测代理702的原始数据封装到pdu中。然后,它通过高带宽低时延通信信道712将pdu推送到分析引擎737。如果监测代理702和分析引擎737位于同一机器上,则该信道可以是存储器总线。如果这些实体位于不同的硬件上但位于相同的物理附近,则该信道可以是基于以太网或光纤的传输,其允许在实体之间建立远程连接以跨因特网传输加载和运行时数据。

分析引擎737的基础设施包括组成regex引擎740的网络接口卡(nic)713、分组池714、时间戳引擎715、处理器结构716、散列引擎717、tcam引擎718、应用映射数据库719、以及线程上下文数据库720。分析引擎737的基础设施还包括内容分析引擎721、事件和事件链722、事件管理引擎723、事件日志724、应用守护程序725、分析引擎配置数据库726、网络接口727、仪表板或cms728、sms/smtp服务器729、otp服务器730、升级客户端731、软件升级服务器732、软件映像733、事件更新客户端734和事件升级服务器735。

在网络接口卡713处拦截pdu以及协议报头,pdu从网络接口卡713处被拉取并且被放入分组池714中。pdu中的时间戳字段由时间戳引擎715填充。这有助于确保分组池缓冲器中没有分组过度地长时间停留。

处理器结构716从分组缓冲器中拉取分组,并且地址字段在分组中的适当位置被散列和替换。该操作由散列引擎717执行。然后,处理器结构开始按照它们到达的顺序从分组缓冲器中移除分组。处理具有来自加载时间阶段的信息的分组,以便提取相关数据并且将其存储在应用映射数据库719中。根据图6处理具有来自运行时阶段的信息的分组。分析引擎737的效率可以基于处理器结构中的处理器数目而增加或减少。

转换目标数据被保存在线程上下文数据库720中,线程上下文数据库720具有用于每个线程的表。处理器结构还利用tcam引擎718执行转换和存储器区域搜索。由于处理器结构使用散列执行查找,因此实际使用的时间是可预测的并且非常短。通过仔细选择结构中的处理器数目,可以适当地改变每个分组的吞吐量。

当分析引擎737执行搜索时,它可能不时地发现无效转换、关键/管理函数或系统调用的无效操作,或者在不期望的位置上发现存储器写入。在每种情况下,分析引擎737将存储在事件和事件链数据库722中的策略所描述的编程的严重性事件发送到事件管理引擎723。原始事件日志存储在事件日志数据库724中。仪表板也可以访问事件日志并且显示应用状态。

补救动作也与事件和事件链数据库722中的每个事件相关联。用户可以从一系列动作中设置补救动作,从一个极端的忽略事件到另一极端的终止线程。可以使用事件更新客户端734和事件升级服务器735向分析师推荐建议的补救措施。为了更改上述推荐动作,分析师可以相应地使用仪表板728。仪表板提供显示每个受监测应用的状态的gui界面,并且允许安全分析师对应用进行某些控制,诸如启动和停止应用。在事件被生成时,事件链从正常状态进入后续状态。可以采取与新状态相关的补救措施。如果补救措施涉及非忽略操作,则使用sms或smtp服务器729向安全分析师发送通知。可以使用ldap或其他目录协议确定安全分析师的sms/smtp地址。从仪表板启动或停止应用的过程需要提升权限,因此安全分析师必须使用otp服务器730进行认证。

新事件也可以被创建并且与向分析师推荐的严重性和补救措施一起被链接到事件和事件链数据库722中。这允许将对一个安装的新攻击的独特事件和事件链分派给其他安装。为此目的,将所有新事件和事件链加载到事件升级服务器735中。事件更新客户端734定期连接并且认证事件升级服务器735以检索新事件和事件链。然后,事件更新客户端将这些新事件和事件链加载到事件和事件链数据库722中。内容分析引擎721可以开始跟踪应用以获取被封装到新事件链中的新攻击。

与客户端守护程序一样,设备守护程序725负责启动在分析引擎737上运行的各种进程。为此,它必须从分析引擎配置数据库726读取配置信息。守护程序也负责为分析引擎737中的所有进程运行心跳轮询。这可以确保分析引擎373生态系统中的所有设备始终处于最佳工作状态。三次连续心跳的丢失表明目标进程没有响应。如果任何进程过早退出,则守护程序将重新启动该进程,包括自身。

有时,可以在设备主机或分析引擎737或客户端升级软件,以用于诸如修复软件中的错误等目的。为此,升级客户端731不断地向软件升级服务器732检查最新软件是否可用。如果客户端发现分析引擎737或客户端中的实体正在运行较旧的映像,则它将允许分析师使用来自软件升级服务器732的新映像升级旧映像。新映像作为系统映像733捆绑在一起。这使得可以为设备或主机提供经过测试的兼容映像。如果分析引擎737或监测代理702中的子系统的一个映像与系统映像中的相同组件的映像不匹配,则所有映像将被滚动到先前已知的良好的系统映像。

用于armas通信的pdu

图7b示出了用于在图7a的监测代理702和分析引擎737之间传输数据的示例协议数据单元(pdu)。为了使监测代理702和分析引擎737彼此有效地工作,它们使用pdu彼此通信。pdu可以由监测代理702专门使用来封装应用的所提取的模型和/或收集的运行时数据以便传输到分析引擎737。pdu包含要在监测代理702与分析引擎737之间传输的每种类型信息的字段。pdu分为应用提供数据部分、hw/cve生成部分和内容分析引擎部分或原始数据部分。

应用提供数据部分包含来自各种寄存器的数据以及放置在这个部分中的各个字段中的源和目标地址。协议版本包含pdu752的版本号。随着协议版本随时间变化,源和目标必须能够继续相互通信。该8比特字段描述了由源实体生成的分组的版本号。当前未使用的保留字段756在协议版本字段之后。

应用提供数据部分的下一字段是消息源/目的地标识符757、753和754,其用于在分析引擎基础设施内交换流量,如图7a所示。有时,图7中所示的各种实体在它们自己之间交换流量。并非所有这些设备都具有或需要ip地址,并且因此两个(硬件和主机)查询路由器引擎使用消息源和目的地字段在内部路由流量。某些消息需要通过网络到达分析引擎737中的实体。为此,将为实体指派以下id。给定的分析引擎设备可以具有多于一个加速卡。每张卡将具有唯一的ip地址;因此,各种实体将具有唯一的id。上述基础设施也可以运行多于一个应用。由于每个应用服务器将具有唯一的ip地址,因此对应的监测代理侧实体也将具有唯一的id。

监测代理侧实体

1.gui

2.检测和分析引擎

3.客户端消息路由器

4.流式传输引擎

5.客户端守护程序

6.cli引擎

7.客户端看门狗

8.客户端压缩块

9.客户端iwarp以太网驱动程序(100mb/1gb/10gb)

每pci卡实体(起始地址=20+n*20)

20.securalyzertoe块

21.securalyzerpci桥

22.解压块

23.消息验证块

24.分组散列块

25.时间戳块

26.消息超时定时器块

27.统计计数器块

28.securalyzer查询路由器引擎

29.securalyzer辅助

securalyzer主机实体

200.securalyzerpcie驱动程序

201.主机路由引擎

202.内容分析引擎

203.日志管理器

204.守护程序

205.web引擎

206.看门狗

207.ipc消息传送总线

208.配置数据库

209.日志数据库

siem连接器

220.siem连接器1-virsec仪表板

221.siem连接器2-hparcsight

222.siem连接器3-ibmqradar

223.siem连接器4-alienvaultusm

securalyzer基础设施实体

230.virsec仪表板

231.smtp服务器

232.ldap服务器

233.sms服务器

234.权利服务器

235.数据库备份服务器

236.otp客户端

237.otp服务器

238.校验和服务器

239.票据服务器

240.virsec规则服务器

241.virsec更新服务器

所有用户应用

255.用户应用-应用pid用于标识发出查询的应用

应用提供数据部分的另一字段是指示正在传输的数据的类型的消息类型字段755。在最高级别,有三种不同类型的消息在各种本地监测代理程序侧实体之间、在分析引擎设备侧实体之间以及在客户端侧与设备侧实体之间流动。此外,需要通过网络传输的消息必须符合osi模型和其他协议。

应用提供数据部分的以下字段是包含分组的序列标识符的分组序列号字段779。流式传输引擎将对丢失的分组执行错误恢复。为此,它需要唯一地标识分组。递增的带符号的64位分组序列号由流式传输引擎插入,并且简单地通过剩余的分析引擎基础设施。如果序列号包含在64位边界处,则它可以在0处重新启动。在非应用分组(诸如心跳或日志消息等)的情况下,分组序列号可以是-1。

应用提供数据部分还包含包含用于加密目的的canary(金丝雀)的canary消息字段761。监测代理702和分析引擎737知道如何从一些公共信息计算canary,但是具有新鲜的性质,诸如应用启动时间、pid、许可证字符串和授权用户名称。

应用提供数据部分还包含在所有消息中使用的通用字段。应用源指令地址780、应用目的地指令地址758、存储器起始地址指针759、存储器结束地址指针760、应用pid762、线程id763、分析引擎到达时间戳764和分析引擎离开时间戳765字段,其保持一般应用数据。

pdu还包含hw/cae生成部分。为了支持分析和维持固定的时间预算,分析引擎737对源和目的地地址字段进行散列并且在处理之前更新pdu。pdu的hw/cae生成部分是放置散列数据以供以后使用的部分。该部分包括散列应用源指令地址766、散列应用目的地指令地址767、散列存储器起始地址768和散列存储器结束地址769字段。hw/caw生成部分还包含与canary相关的其他字段771,包括硬编码内容起始magic(魔力)报头、api名称magic报头、调用上下文magic报头和调用原始数据magic报头,其存在于所有pdu分组中。

hw/caw生成部分还包括用于标识包括结果、配置位、操作模式、错误代码和操作模式数据的其他配置和错误数据的字段770。对字段的结果部分进行分段以返回不同分析引擎查询的布尔结果——转换手册、代码布局、存储器(堆栈或堆)溢出和深度检查查询。字段的配置位部分指示何时设置压缩标志、演示标志或共址标志。该字段中标志的存在向分析引擎737指示是否应当以压缩模式返回分组。演示标志指示系统处于演示模式,因为系统没有有效的许可证。在这种模式下,日志和事件将无法完整获取。共址标志指示应用正在分析引擎737中运行,以便主机查询路由器引擎可以确定将需要返回到应用的分组发送到何处。如果设置了这个标志,则经由pci桥发送分组,否则通过pci卡上的以太网接口发送分组。字段的“操作模式”部分指示系统是处于猜疑(paranoid)、监测还是学习模式。这些模式将在这个部分稍后详细讨论。最后,字段的错误代码部分指示系统中的错误。错误代码的前8位将对应于消息源。其余的12位将对应于由每个子系统报告的实际错误。

pdu还包含内容分析引擎或原始数据。所有可变数据(诸如os库调用和系统调用的参数和返回值)都放在pdu的这个部分中。这个部分中的数据包含从应用收集的数据的内容,并且主要针对内容分析引擎721。这个部分包含可变大小的api名称或号码772、调用内容magic报头777、可变大小的调用内容774、调用原始数据magic报头778、可变大小的原始数据内容776、以及两个保留的773和775字段。此外,可以为管理消息重载这些字段。

数字处理环境

图8示出了其中可以实现本公开的实施例的计算机网络或类似的数字处理环境。

(多个)客户端计算机/设备50和(多个)服务器计算机60提供执行应用等的处理、存储和输入/输出设备。(多个)客户端计算机/设备50也可以通过通信网络70链接到其他计算设备,包括其他客户端设备/进程50和(多个)服务器计算机60。通信网络70可以是远程访问网络、全球网络(例如,因特网)、全球计算机的集合、局域网或广域网、以及当前使用相应协议(tcp/ip、等)彼此通信的网关的一部分。其他电子设备/计算机网络架构也是合适的。

客户端计算机/设备50可以被配置为捕获由面向web的应用框架中的处理流水线触发的数据分组、函数和/或数据库查询的分组捕获工具或剖析器。服务器计算机60可以被配置为将由客户端计算机/设备50捕获的数据分组、函数和数据库查询匹配并且关联到一个或多个数据集中的模式匹配/机器学习引擎。服务器计算机60可以不是单独的服务器计算机而是云网络70的一部分。在一些实施例中,服务器计算机60还可以将一个或多个数据集传输到被配置为分析器(分析引擎)的第二服务器计算机60。第二服务器计算机60基于一个或多个数据集调节分析器以监听与特定的面向web的应用相关的处理活动(接收的数据分组、触发的函数和触发的数据库查询)以检测安全事件。在一些实施例中,客户端50和服务器60可以包括在客户端和服务器上执行用于执行所描述的捕获、关联和调节的客户端应用或组件。

图9是图8的计算机系统中的计算机(例如,客户端处理器/设备50或服务器计算机60)的示例内部结构的图。每个计算机50、60包含系统总线79,其中总线是用于计算机或处理系统的组件之间的数据传输的一组硬件线。系统总线79本质上是连接能够在元件之间传输信息的计算机系统的不同元件(例如,处理器、磁盘存储装置、存储器、输入/输出端口、网络端口等)的共享管道。附接到系统总线79的是用于将各种输入和输出设备(例如,键盘、鼠标、显示器、打印机、扬声器等)连接到计算机50、60的i/o设备接口82。网络接口86允许计算机连接到附接到网络(例如,图8的网络70)的各种其他设备。存储器90为用于实现本公开的实施例的计算机软件指令92和数据94提供易失性存储(例如,本文中描述的安全监测代理、检测引擎和分析引擎元件)。磁盘存储装置95为用于实现本公开的实施例的计算机软件指令92和数据94提供非易失性存储。中央处理器单元84也附接到系统总线79并且提供计算机指令的执行。

其实施例或方面可以以硬件、固件或软件的形式实现。如果以软件实现,则软件可以存储在被配置为使得处理器能够加载软件或其指令子集的任何非暂态计算机可读介质上。处理器然后执行指令并且被配置为操作或引起装置以本文中描述的方式进行操作。

此外,本文中可以将固件、软件、例程或指令描述为执行数据处理器的某些动作和/或函数。然而,应当理解,本文中包含的这种描述仅仅是为了方便,并且这些动作实际上是由计算设备、处理器、控制器或执行固件、软件、例程、指令等的其他设备产生的。

应当理解,流程图、框图和网络图可以包括更多或更少的元件,可以不同地布置,或者以不同的方式表示。但是还应当理解,某些实现可以规定块和网络图以及块和网络图的数目,以示出以特定方式实现的实施例的执行。

因此,另外的实施例也可以在各种计算机架构、物理、虚拟、云计算机和/或其某种组合中实现,并且因此,本文中描述的数据处理器仅用于说明的目的而不是作为实施例的限制。

虽然已经参考其示例实施例具体示出和描述了本公开,但是本领域技术人员将理解,在不脱离由所附权利要求所涵盖的本公开的范围的情况下,可以在形式和细节上进行各种改变。

附录a

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1