通过沿着数据流的污点跟踪进行内容驱动的调试的制作方法

文档序号:25586167发布日期:2021-06-22 17:01阅读:147来源:国知局
通过沿着数据流的污点跟踪进行内容驱动的调试的制作方法

本公开的实施例涉及通过沿着数据流的污点跟踪进行内容驱动的调试。



背景技术:

在当今时代,由于编码方式、用户输入或其他各种原因,应用经常会因运行中可能出现的错误而失败。软件开发人员通常在被称为调试器的程序中使用调试技术,以逐步执行应用来检测和诊断应用中的这种错误。以这种方式,通过使用调试器,开发人员能够洞察应用的状态(例如,分配给变量的值、线程的状态等)。通常,开发人员能够设置断点,这些断点用于在不同的点暂停程序的运行,在这些不同的点处,开发人员或工程师想要分析运行并检查这些状态变量的值。这些断点又被绑定到给定行的源代码,其中程序可以每次在运行程序时在该点无条件地停止,或者其中条件可以被设置为每次在满足该条件时(例如,当变量超过或小于阈值时等)在该行停止程序。然后,在该行停止之后,使用调试器的开发人员可以逐步运行该行之后的后续行的代码的块。当调试器以这种方式逐步运行代码时,开发人员可以检查感兴趣的变量的状态。通过检查这些不同断点处的程序状态,以及对后续行的代码的可能的逐步监控,开发人员和工程师能够跟踪这些错误的源,并能够监控整个这些应用中的数据流。

尽管这种设置断点的构思很好地适用于小型非复杂代码,但是如果代码复杂,由多个开发人员编写,或者以其他方式以不可跟踪或难以跟踪的方式分割,那么要知道从哪里开始调试和/或分析代码,以及从这个起点开始直到遇到错误在哪里遵循代码,可能会很棘手。以这种方式利用断点进行调试需要一个起点(调试器从该起点逐步下降到下一个断点),将导致程序状态改变的变量的变化考虑在内,由此在某个断点,例如,状态程序变量的不希望的改变可能导致错误被发现。也就是说,可能要花不必要的时间来弄清楚这个起点在哪里,弄清楚如何精确地从一个断点到另一个断点(breakpoint-to-breakpoint)逐步下降,以便发现程序有错误,并且没有按预期执行。例如,如果程序员意识到变量的输出值是错误的,但不清楚在涉及该变量的多条语句中哪条代码语句可能是该变量产生错误输出的路径,那么就很难知道程序中的漏洞(bug)的确切位置。因此,很难分配起点或起点之后的断点,以确定在哪里确切地分析变量的变化值,从而导致错误诊断。通过在可能成百上千行的代码之间放置断点来确定从哪里开始调试分析所花的时间不利于快速诊断问题或检查数据流。

另一个问题是调试对于像工程师/开发人员这样实际上对所讨论的代码有工作知识的人来说更有用。对于像财务审计员、隐私专家等这样的人来说,他们可能对监控整个应用中的数据流感兴趣,但是他们可能没有对代码进行过复杂的处理或不具有代码知识,尽管他们希望监控数据流以分析异常输出值,或者如果他们怀疑可能发生错误,他们可能不知道在哪里设置适当的起点或断点,从而逐步跟踪错误源的流。这是因为他们可能不了解应用的代码,并且可能无法解释代码的含义以确定在哪里可以操纵变量,从而获得路径并获得错误或异常的值。

为了监控变量以确定它们可以在哪里被操纵,还可以在调试器中设置观察点(watchpoint)。当关于变量满足特定条件时,通常绑定到该变量的观察点可以在每次访问该变量时停止程序(例如,对于变量字符串a,当字符串a="bob"时,每次访问字符串a时程序可以停止,或者对于变量整数b,当b=50时,每次访问b时程序可以停止,或者当任何其他这样的条件语句变为真时)。对于可能不精通计算机语法的非技术人员(例如,财务审计师或隐私专家),可能难以在特定变量上设置各个观察点,因此这可能不是最佳的用户友好选项。

此外,即使在变量上设置了观察点,观察点也可能绑定到变量本身,而不是变量的内容。在这种情况下,如果第二变量通过被设置为等于具有观察点的第一变量而被直接导出(例如,在上面的示例中,在变量b上具有观察点,以查看是否满足上面b=50的条件,变量整数c可以被设置为使得c=b),则当条件被满足时,观察点可以在分配行处暂停。也就是说,如果b=50,如果在变量b上设置了观察点,程序可以在行c=b暂停。

然而,如果对于另一个变量整数d,如果在上面的示例中变量整数d被设置为等于变量整数c(d=c),并且观察点仍然被设置在变量b上,即使当b变成50时d的值可能是50,程序仍然不会在行d=c停止,因为观察点被绑定到变量。也就是说,因为观察点绑定到变量本身,而不是变量的内容,所以在这种情况下,如果b是要被监控和停止的变量,则停止可能不会传播到获取分配给变量b的值的其他变量(即,在上面的示例中,虽然整数d直接从被分配为50的b获取值,但由于d=c且c=b,调试器不会在其分配行d=c处停止,因为观察点仅在变量b上)。

最后,另一个问题是,典型的调试器绑定到应用或平台。如今,随着互联网、云计算和其他此类技术进步的出现,内容往往分散在不同的应用中。系统信息跨平台流动,特别是在互联网上、跨网络使用的应用、网络应用、云应用等。在这样的应用中,大量的微服务可能从其他服务或微服务接收数据,并且在不同的平台和应用之间有大量的数据来回交叉流动。一个微服务中发生的错误可能源于从另一个微服务接收到的数据,而另一个微服务又可能从第三个应用或微服务接收到错误数据,依次类推。如果没有清晰的方法来跟踪跨应用的数据流,以应用绑定的方式跟踪错误可能无法将错误追溯到不同的微服务。结果,除了浪费时间试图找到合适的起点和合适的断点之外,以应用绑定的方式进行操作实际上可能会对错误进行错误地分类或对错误进行不正确地分类,其中这些错误是由于正在调试的应用中未发生动作而导致的。此外,微服务的最终用户(end-user)可能希望调试源自不同的原始应用或服务的数据,其中这些应用或服务可能将数据发送到他们正在使用的微服务。但是,他们可能无法访问原始应用,因此可能无法跨平台调试异常或错误数据的源。



技术实现要素:

根据本公开的实施例,一种计算机实现的方法包括:由至少一个处理器运行收集例程以从用户收集原始数据;由至少一个处理器以原始数据的形式从用户接收收集例程的结果,收集例程的结果可以存储在中央数据储存库中;由至少一个处理器运行命令以生成图形用户界面(gui);由至少一个处理器显示gui;从gui接收用户输入,以指定至少一个要被监控的变量以进行污点分析;由至少一个处理器以规则的间隔实行污点分析,以针对预定义的规则检查原始数据,以确定原始数据的被污点或未被污点的污点状态;在gui上可视地表示污点分析的结果;由至少一个处理器根据污点状态,以规则的间隔将原始数据标记为被污点或未被污点;由至少一个处理器输入将在利用标记数据的过程中使用的标记数据;以及由至少一个处理器对污点数据进行周期性地丢弃、进一步监控或选择性地采取其他动作。

根据本公开的实施例,一种系统包括存储器和至少一个处理器,至少一个处理器耦合到所述存储器并且被配置为:运行收集例程以从用户收集原始数据;将原始数据存储在中央数据储存库中;运行命令以生成图形用户界面(gui);显示所述gui;从gui接收用户输入,以指定至少一个要被监控的变量以进行污点分析;以规则的间隔实行污点分析,以针对预定义的规则检查原始数据,以确定原始数据的被污点或未被污点的污点状态;在gui上可视地表示污点分析的结果;根据污点状态,以规则的间隔将原始数据标记为被污点或未被污点;输入将在利用标记数据的过程中使用的标记数据;以及对污点数据进行周期性地丢弃、进一步监控或选择性地采取其他动作。

根据本公开的实施例,一种其上存储有指令的非暂时性计算机可读设备,指令在由至少一个计算设备运行时,使至少一个计算设备执行以下操作,包括:运行收集例程以从用户收集原始数据;以原始数据的形式从用户接收收集例程的结果,收集例程的结果可以存储在中央数据储存库中;运行命令以生成图形用户界面(gui);显示gui;从gui接收用户输入,以指定至少一个要被监控的变量以进行污点分析;以规则的间隔实行污点分析,以针对预定义的规则检查原始数据,以确定原始数据的被污点或未被污点的污点状态;可视地表示污点分析的结果;根据污点状态,以规则的间隔将原始数据标记为被污点或未被污点;输入将在利用标记数据的过程中使用的标记数据;以及对污点数据进行周期性地丢弃、进一步监控或选择性地采取其他动作。

附图说明

附图并入本文并形成说明书的一部分。

图1是根据一些实施例的源模块与数据库和中央模块之间的交互的框图。

图2是示出中央模块接收污点跟踪数据的实施例的过程的流程图,其中源模块非管理员用户正在输入数据。

图3a是根据实施例的图形用户界面,其示出了在污点分析(taintanalysis)过程开始之前,从中央模块生成并由源模块访问的源模块上的显示界面,用于为由应用中的中央模块接收的监控/调试数据设置监控/调试参数。

图3b是根据实施例当用户已经检测到或访问污点点时,在污点分析过程期间显示的显示提示。

图4是示出污点跟踪的实施例的过程的流程图,其中源模块管理员用户正在监控由其他用户输入到中央模块的数据。

图5是根据一些实施例的示例的框图,其中云计算环境可以由源模块访问。

图6是用于实现各种实施例的示例计算机系统。

在附图中,相同的附图标记通常表示相同或相似的元件。此外,通常,附图标记的(多个)最左边的数字标识附图标记首次出现的附图。

具体实施方式

本文提供了用于通过沿着应用中的数据流的污点跟踪来进行有效的内容驱动调试或监控的系统、装置、设备、方法和/或计算机程序产品实施例,和/或它们的组合和子组合。

图1是数据传输环境100的框图,其示出了可以包括源储存库102a的源模块102和可以包括中央模块储存库104a的中央模块104之间的交互。使用所公开的实施例,源模块的用户可能能够输入诸如http请求、数据表、sql命令等的数据,该数据被中央模块104接收并且被监控是否被污点(tainted)。中央模块104可以实行该监控过程,其中结果可以在图形用户界面(graphicaluserinterface,gui)上显示给源模块用户。根据实施例,中央模块104和源模块102可以包括一个或多个单独的计算机系统,诸如计算机系统600,如图6所示,并且将在后面解释。根据实施例,源模块库102a本身可以包括一个或多个单独的计算机系统,诸如计算机系统600,或者源模块库102a可以存在于源模块102的现有计算机系统600上。

为了帮助描述随后的图2和图4的方法,将首先描述底层结构的示例实施例。如图6所示,计算机系统600的底层结构可以实现污点跟踪机制以及数据的发送和接收。根据上述实施例,这样的计算机系统可以包括源模块102、源模块储存库102a和中央模块104。计算机系统600可以包括一个或多个处理器(也称为中央处理单元或cpu),诸如处理器604。处理器604可以连接到通信基础设施或总线606。

计算机系统600可以被虚拟化,或者它也可以包括用户输入/输出设备603,诸如监控器、键盘、定点设备等,其可以通过(多个)用户输入/输出接口602与通信基础设施606通信。

一个或多个处理器604可以是图形处理单元(graphicsprocessingunit,gpu)。在实施例中,gpu可以是专用电子电路的处理器,该专用电子电路被设计成当数据要被大量处理时处理从源模块储存库102a接收的污点数据(tainteddata),使得在资源密集型应用中基于基于规则(rule-based)逻辑或布尔逻辑来检查数据是否被污点特别有效。此外,该gpu还可以在整个调试过程中用于对污点数据的监控的用户操作,诸如对某些变量的过滤和监控等。gpu可以具有并行结构,该并行结构对于大数据块的并行处理是高效的,诸如计算机图形应用、图像、视频、文字处理文档、pdf文件等共有的数学密集型数据,它们中的任何一个都可以包括从如上所述的源模块储存库101a接收的表数据。另外,gpu的寄存器表可用于存储变量的污点映射(taintmap),该变量在受监控的过程中可能被指定为被污点,从而利用gpu的比cpu更大的寄存器文件。使用快速访问寄存器来维护频繁访问的数据的污点映射可以提高动态污点性能,其中对应于潜在污点变量的存储器位置和来自这些位置的指针可以被存储,从而指向映射中的污点数据结构或空数据结构。

计算机系统600还可以包括主存储器或主要存储器608,诸如随机存取存储器(ram)。主存储器608可以包括一级或多级高速缓存(包括二级高速缓存),其可以用于层次(hierarchy)的高速缓存操作,这将在后面描述。

计算机系统600还可以包括一个或多个二级存储设备或存储器610。二级存储器610可以包括例如硬盘驱动器612和/或可移动存储设备或驱动器614,可移动存储设备或驱动器614可以与raid阵列616或可移动存储单元618交互,raid阵列616可以将多个物理硬盘驱动器组件(诸如ssd或基于sata的磁盘驱动器)组合成一个或多个逻辑单元。可移动存储单元618可以包括计算机可用或可读存储设备,计算机可用或可读存储设备上存储有计算机软件(控制逻辑)和/或数据,包括远程访问的网络驱动器。可移动存储单元618也可以是程序盒和盒接口、可移动存储芯片(诸如eprom或prom)和相关联的插座、记忆棒和usb端口、存储卡和相关联的存储卡插槽、和/或任何其他可移动存储单元和相关联的接口。可移动存储驱动器614可以从可移动存储单元618读取和/或向可移动存储单元618写入。

二级存储器610可以包括允许计算机系统600访问计算机程序和/或其他指令和/或数据的其他装置、设备、组件、工具或其他方法。这样的装置、设备、组件、工具或其他方法可以包括例如可移动存储单元622和接口620。可移动存储单元622和接口620的示例可以包括程序盒和盒接口(诸如在视频游戏设备中发现的)、可移动存储器芯片(诸如eprom或prom)和相关联的插座、记忆棒和usb端口、存储器卡和相关联的存储器卡插槽、和/或任何其他可移动存储单元和相关联的接口。

计算机系统600还可以包括通信或网络接口624。通信接口624可以使计算机系统600能够与外部设备、外部网络、外部实体等的任何组合(由参考编号628单独或共同引用)进行通信和交互。例如,通信接口624可以允许计算机系统600通过通信路径626与外部或远程实体628通信,通信路径626可以是有线和/或无线的(或其组合),并且可以包括lan、wan、互联网等的任意组合。控制逻辑和/或数据可以经由通信路径626传输到计算机系统600和从计算机系统600传输。

计算机系统600也可以是个人数字助理(personaldigitalassistant,pda)、台式工作站、膝上型或笔记本计算机、上网本、平板电脑、智能电话、智能手表或其他可穿戴设备、物联网的一部分和/或嵌入式系统中的任何一种,仅举几个非限制性的示例,或者它们的任意组合。

计算机系统600中的任何适用的输出数据结构、文件格式和模式可以从标准中导出,这些标准包括但不限于javascript对象符号(javascriptobjectnotation,json)、可扩展标记语言(extensiblemarkuplanguage,xml)、又一种标记语言(yetanothermarkuplanguage,yaml)、可扩展超文本标记语言(extensiblehypertextmarkuplanguage,xhtml)、无线标记语言(wirelessmarkuplanguage,wml)、消息包、xml用户界面语言(xmluserinterfacelanguage,xul)、结构化查询语言(structuredquerylanguage,sql)或任何其他单独或组合的功能相似的表示,并且可以用于发送或接收数据(例如,在图1中的源模块102、源储存库102a、中央模块102和中央储存库104a中的任何一个之间)。替代地,可以排他地或与已知或开放标准结合使用专有数据结构、格式或模式。

在一些实施例中,包括其上存储有控制逻辑(软件)的有形的、非暂时性的计算机可用或可读介质的有形的、非暂时性的设备或制品在本文中也可以被称为计算机程序产品或程序存储设备。这包括但不限于计算机系统600、主存储器608、二级存储器610和可移动存储单元618和622,以及体现上述任意组合的有形制品。这种控制逻辑在由一个或多个数据处理设备(诸如计算机系统600)运行时,可以使这种数据处理设备如本文所述进行操作。

计算机系统600可以是客户端或服务器,通过任何交付范例(deliveryparadigm)访问或托管任何应用和/或数据,包括但不限于远程或分布式云计算解决方案,诸如将在下面解释的云计算环境501;本地或本地部署(on-premise)软件(“本地部署”基于云解决方案);“即服务”模型(例如,内容即服务(contentasaservice,caas)、数字内容即服务(digitalcontentasaservice,dcaas)、软件即服务(softwareasaservice,saas)、管理软件即服务(managedsoftwareasaservice,msaas)、平台即服务(platformasaservice,paas)、桌面即服务(desktopasaservice,daas)、框架即服务(frameworkasaservice,faas)、后端即服务(backendasaservice,baas)、移动后端即服务(mobilebackendasaservice,mbaas)、基础设施即服务(infrastructureasaservice,iaas)等);和/或包括前述示例或其他服务或交付范例的任何组合的混合模型。

作为示例方法,在实现用于存储和访问其组成数据对象的源模块储存库102a或中央模块储存库104a时,计算机系统600可以使用具有持久性的内存(in-memory)数据库,其可以存储和访问来自计算机系统600的主存储器608的数据对象,并且将用于持久性的事务日志存储在二级存储器610中。对于储存库102a,计算机系统600可以使用比如上所述更少的主存储器608,仅将部分数据实现为内存数据库,以减少存储器中的占用空间,并且可以替代地将更大部分的数据作为基于磁盘的数据库存储在二级存储器610内,其中数据因此可以以分层方式存储(例如,更频繁访问的数据可以存储在主存储器608中,而不太频繁访问的数据可以存储在二级存储器610中)。

替代地,计算机系统可以不将任何数据存储在主存储器608或二级存储器610中,并且计算机系统600可以将数据写入存储在二级存储器中的单独的文件档案(例如,在raid阵列616中的硬盘驱动器上、在eprom芯片620上或其他类型的二级存储器610中的文件中等等)。

此外,如果源模块储存库102a被实现为单独的系统600,则其可以通过通信或网络接口624发送数据,其中源模块102和中央模块104可以包括存在于内部或外部网络上的实体628,可以通过通信路径626访问实体628。替代地,如果源模块102与源模块库102a一起共同存在于计算机系统600中,则计算机系统600可以使用用于源模块库102a和源模块102之间的通信的通信基础设施606来实现数据库,但是可以通过通信接口624、通过通信路径626将数据发送到中央模块104,其中中央模块104是网络实体628。关于中央模块库104a和中央模块104,类似的数据发送可以以类似的方式发生,这取决于中央模块库104a是否被实现为单独的系统600。

如图5所示,在其中可以实现本文描述的系统和/或方法的示例环境500的框图中,云计算环境501可以包含后端平台504。如上所述,图1的中央模块104还可以包括主机,诸如云计算环境501。云计算环境501可以由与上述的计算系统600的类型相同的中央模块计算系统502来访问。在这种情况下,图5的中央模块计算系统502可以通过如图5所示的通信或网络接口524访问云计算环境501,其中网络网关503可以包括由中央模块计算系统的通信路径626访问的远程实体628(其中图5中所示的三个实体501、502和503将共同对应于图1的中央模块102)。替代地,计算云环境501本身可以对应于图6中的远程实体628,并且可以由中央模块计算系统502通过通信路径626(例如,通过应用协议接口(applicationprotocolinterface,api))直接访问,从而消除了对网络网关503的需要(两个选项都在图5中示出,其中中央模块计算系统502上方的流路径使用网络网关503,并且中央模块计算系统502下方的流路径直接连接到云计算环境501,两者都使用双向虚线示出)。

环境600和100的设备可以通过有线连接、无线连接或有线和无线连接的组合来连接。

在一个示例实施例中,数据传输环境100的一个或多个部分可以是自组织网络(hocnetwork)、内联网、外联网、虚拟专用网络(virtualprivatenetwork,vpn)、局域网(localareanetwork,lan)、无线局域网(wirelesslan,wlan)、广域网(wideareanetwork,wan)、无线广域网(wirelesswideareanetwork,wwan)、城域网(metropolitanareanetwork,man)、互联网的一部分、公共交换电话网(portionofthepublicswitchedtelephonenetwork,pstn)的一部分、蜂窝电话网、无线网、wifi网、wimax网、任何其他类型的网络或者两个或多个这样的网络的组合。

如上所述,图1的中央模块104可以具有如图5所示的中央模块计算系统502,其包括与图6所示的计算机系统600的类型相同的计算机系统。源模块102或源模块储存库102a可以通过中央模块计算系统502访问中央模块104,其中在实施例中,从中央模块计算系统502的角度来看,源模块102或源模块储存库102a可以是外部网络实体628,并且可以使用例如tcp/udp/ftp/https/http协议通过系统502的通信接口624的通信路径626以数据包的形式来回发送数据。替代地,在实施例中,源模块可以通过前端网络应用(front-endweb-application)应用505a(例如,网络浏览器应用、网络浏览器扩展、专有os应用、独立可执行应用、命令行访问shell程序、ftp/udp/tcp/https/http协议等)来访问中央模块104,该前端网络应用505a作为应用505a托管在由中央模块104托管的云计算环境501内的计算资源505上(在下文解释)。如上所述,这种应用可以包括软件即服务(saas)类型的产品。

图5中的后端平台504可以包括一个服务器或一组服务器。在实施例中,后端平台504可以托管云计算环境501。可以理解,后端平台504可以不是基于云的,或者可以是部分基于云的。

云计算环境501包括交付计算即服务(如上所述的“caas”)的环境,由此共享资源、服务等可以被提供给中央模块计算系统502和/或后端平台504。云计算环境501可以提供计算、软件、数据访问、存储和/或其他服务,这些服务不需要最终用户了解交付服务的系统和/或设备的物理位置和配置。例如,中央模块计算系统502以及源模块102可以通过应用协议接口(api)或前面列出的各种通信协议中的任何一种,接收存储在后端平台504内的计算资源505内的数据库内或托管在该数据库上的数据。云计算环境501可以包括计算资源505。

每个计算资源505包括一个或多个个人计算机、工作站、计算机、服务器设备或其他类型的计算和/或通信设备,诸如上述计算机系统600。(多个)计算资源505可以托管后端平台504。云计算资源可以包括在云计算资源505中运行的计算实例。云计算资源505可以经由有线连接、无线连接或有线或无线连接的组合与其他云计算资源505通信。

计算资源505可以包括一组云资源,诸如一个或多个应用(“app”)505a、一个或多个虚拟机(“vm”)505b、虚拟化存储(“vs”)505c以及一个或多个管理程序(hypervisor)(“hyp”)505d。

应用505a可以包括一个或多个软件应用,其可以被提供给计算机系统600或由计算机系统600访问。在实施例中,中央模块104可以仅包括在中央模块计算系统502的计算机系统600上本地运行的云计算环境501。应用505a可以包括与后端平台504相关联的软件和/或被配置为跨云计算环境501(例如,向源模块102)提供的任何其他软件。应用505a可以经由一个或多个虚拟机505b从一个或多个其他应用505a发送/接收信息。以这种方式,计算资源505能够通过虚拟机505b访问彼此的应用505a。在替代实施例中,不需要单独的中央模块计算系统502,并且中央模块104仅包括云计算环境501,云计算环境501由计算资源505托管和执行,并且使用上述各种通信协议中的任何一种经由应用505a与源模块102通信。

虚拟机505b可以包括像物理机一样运行程序的机器(例如,计算机)的软件实现。这在没有计算机系统600类型的独立中央模块计算系统502的替代实施例中可能特别有用。在该实施例中,中央模块计算系统502可以是虚拟机505b,并且可以经由应用505a使用上面列出的各种通信协议与源模块101通信。虚拟机505b可以是系统虚拟机或过程虚拟机。系统虚拟机可以提供支持完整操作系统(os)的运行的完整系统平台。过程虚拟机可以运行单个程序,并且可以支持单个过程。虚拟机505b可以代表用户(例如,中央模块104的管理员)和/或代表一个或多个其他后端平台504运行,并且可以管理云计算环境501的基础设施,诸如数据管理、同步或长持续时间数据传输,以及访问源模块101的源模块储存库101a。

虚拟化存储505c可以包括在计算资源505的存储系统或设备中使用虚拟化技术的一个或多个存储系统和/或一个或多个设备。关于存储系统,虚拟化的类型可以包括块虚拟化和文件虚拟化。块虚拟化可以指将逻辑存储从物理存储中抽象(或分离),使得存储系统可以被访问而不考虑物理存储或异构结构。这种分离可以允许中央模块104的管理员灵活地管理评估数据的存储,以便从对从源模块储存库102a访问的数据的处理中进行调试(将在下文解释)。文件虚拟化可以消除在文件级别访问的数据和文件物理存储位置之间的依赖性。这种数据块和文件虚拟化方式可以优化存储使用、服务器整合和/或无中断文件迁移的性能,尤其是在跨应用传输污点数据存储位置的数据时。

超级管理程序(hypervisor)505d可以提供硬件虚拟化技术,该技术允许多个操作系统(例如,“客体操作系统”)在诸如计算资源505的主机上并发运行,该主机可以包括计算系统600类型的计算系统,并且可以以这种方式托管中央模块计算系统502的虚拟化硬件。超级管理程序505d可以向客体操作系统呈现虚拟操作平台,并且可以管理作为这些“客体操作系统”的各种操作系统的多个实例,其可以共享虚拟化硬件资源,诸如ram,其可以例如访问源模块储存库(图1中的102a)的数据库形式的数据。替代地,可以使用虚拟化存储505c或者在具有如计算系统600的类型的计算系统的计算资源505的物理存储(例如,硬盘驱动器6120)上访问二级存储器。在此前描述的实施例中,使用ram和二级存储器的组合来访问数据库,使得数据库的一部分可以在内存中且数据库的一部分存储在文件中,也是可以预见的,其中源模块102还可以包括具有云计算环境501的环境500,而不仅仅是计算系统600类型的计算系统。

图2和图4是描述用于根据源模块102处的用户收集的数据来监控在中央模块104上运行的过程中的污点数据的应用的实施例的流程的流程图。方法200和400均可由处理逻辑来执行,该处理逻辑可包括硬件(例如,电路、专用逻辑、可编程逻辑、微码等)、虚拟化硬件、软件(例如,在处理设备上运行的指令)、虚拟化软件或如上所述的它们的组合。应当理解,不是所有的步骤都需要执行本文提供的公开。此外,如本领域普通技术人员将理解的,一些步骤可以同时执行,或者以不同于图2和图4所示的顺序执行。

将参考图1、图3a、图3b和图5-图6描述方法200,尽管方法200不限于这些实施例。尽管本文描述了方法200的步骤,使得图1的源模块库102a被认为是包括源模块102的图6的计算系统600的一部分,但是该方法也可以在图1的源模块库102a本身包括图6的独立计算系统600的情况下类似地执行。在这种情况下,在方法200的相关步骤中描述的中央模块104和源模块102之间的通信将需要源模块102和源模块储存库102a之间的进一步网络通信,诸如通过使用如上所述的图6的通信路径626。如果图1的中央模块库104a本身包括图6的独立计算系统600,则相同的推理适用于图4中公开的方法。

图2的实施例可以是源模块102的源模块用户向要在中央模块104上运行的过程提交数据或输入变量的实施例,其中源模块102用户是非管理员。在该实施例中,单独的管理员或开发人员可能已经预先为污点点(taintpoint)设置了规则。污点点可以包括由在中央模块104上运行的过程的管理员设置的基于规则逻辑或机器学习逻辑的组合,用于指示数据可能何时被污点。

源模块102的用户可以看到如图3a所示的gui。该gui可以是例如从中央模块104生成并显示在源模块102的网页上的云应用505a、源模块102上的独立应用等的一部分。由于源模块102的用户没有被给予管理员权限,因此污点规则输入部分309a可以变灰。在数据输入301a框中,用户可以输入文件、数据库命令(例如,从数据库选择数据的sql选择命令)、http请求、文本框中的变量(浮点、整数、字符、字符串、表等),或者使用上述任何协议的命令(例如,sql创建命令)。这种形式的输入还可以从源模块储存库102a中选择数据库文件或数据库的一部分。然后,当被选择时,用户可以点击框301a来提交数据输入。在步骤201,该动作然后将由源模块102向中央模块104发送收集请求。

中央模块104然后可以在源模块102上运行收集例程(在步骤203中),以聚集来自在步骤201中选择的源的数据。在图2中,示出了数据源可能是源储存库102a的示例,其中收集例程将聚集来自源储存库102a的数据。然而,如上所述,源不仅可以是源储存库102a中的数据库,还可以是文件系统上的文件,在源模块102的计算机系统600的主存储器608或二级存储器610中。该源也可以是远程网络源,从该远程网络源可以选择数据库的一部分(例如,使用sql创建或sql选择命令,或上述任何其他协议),或任何其他链接的源。最后,源可以是由源模块102本身的用户以将变量键入数据字段的形式或者甚至是将整个表键入数据字段的形式输入到数据输入301a中的表。

在这些情况中的任何一种情况下,在中央模块104运行收集子例程之前,中央模块104可以记录已经输入的数据的源(它是否是由用户键入的、它是否是从源储存库102a中的数据库输入的、它是否是从具有特定url或ftp地址的远程网页访问的,等等)。在实施例中,这可能是重要的,因为标记污点点的一个标准可以是基于输入的源/供应(providence)的输入的可信度。

然后,在步骤205中,可以以规则的间隔(例如1-1000ms)检查图2的过程,以查看数据聚集是否已经完成。如果还没有完成(在步骤205为“否”),则不采取任何动作,并且该过程在步骤203处等待收集例程完成。如果聚集已经完成,则过程移动到下一步骤,即在步骤207由中央模块104完成聚集数据的接收。

在完成数据接收时,在步骤209,该过程评估先前在步骤203记录的源,以检查它是否可信任。污点规则309a可能已经由运行在中央模块104上的过程的管理员预先设置,其中这样的规则可以包括可信任的源的列表,其中所有其他源被认为是不可信任的,并且标记为被污点。替代地,这样的规则可以明确地包括被标记为不可信任的源的列表,其中只有那些与列表上的源相对应的源应该被标记为被污点。例如,这对于监控可能来自先前已知的恶意或不安全的应用/网页等的数据可能特别有用。基于这样的规则,如果在203记录的源不是不可信任(在步骤209为“否”),则在213接收的数据不被标记为被污点,并且不发生进一步的动作。

然而,如果在203记录的源不可信任(在步骤209为“是”),则在211数据被标记为被污点。数据可以以多种方式被标记为被污点。例如,对于要被标记为被污点的变量,指针(其在32位系统中可以包括例如4个字节)可以被添加到影子存储器中,被映射到变量的存储器位置,并且指向污点数据结构(其可以少于1位污点信息,或者可以包括布尔、字符、整数或其他结构)。另一方面,对于未污点数据,在实施例中,代替如上所述的步骤209(不发生进一步的动作),可以存储空指针。如上所述,这些指针可以存储在由中央模块104的cpu或gpu访问的主存储器或二级存储器608/610中。

例如,gpu的寄存器文件可用于存储包含上述影子存储器的污点图的一部分。此外,已经作为数据输入的表/变量的内容的存储器位置可以在数据库中被写入和标记为被污点,该数据库在主存储器608和/或二级存储器610中实现,并且以这种方式可以被写入存储在中央模块储存库104a中的数据库。这些将数据标记为被污点的各种方法能够以跨应用、跨平台的方式跟踪数据,即使它可能在变量之间被重新分配并在各种功能中使用,其中污点感知(taint-aware)平台和应用可以寻求在影子存储器位置中寻找指向污点数据结构的指针或解释存储的数据库信息(例如,在中央模块储存库104a中),以找到污点数据的存储器位置并将这种数据标记为被污点。随后,当变量值可以跨平台复制(例如,从一个计算机系统600到另一个、从虚拟化系统505b到另一个虚拟化系统505b等等)时,污点感知变量传输也可以将影子存储器中的污点数据结构从一个计算机系统600或虚拟化系统505b复制到另一个计算机系统600或虚拟化系统505b。

以这种方式,可以有多个源和中央模块102和104,并且到达当前中央模块104的先前已经污点数据可以在它被当前中央模块104接收时保持其污点性质,其中当用户引用例如来自特定远程源或来自源模块库102a的表、数据库或变量时,当用户在数据输入字段301a中输入数据时,来自先前污点的存储在影子存储器中的数据被隐式地与数据一起传递。

也就是说,当前中央模块104的污点感知过程的协议将知道在影子存储器中寻找与作为数据传递的变量、数组、表等的存储器位置相邻的指针(如上所述,当数据未被污点时可能有空指针,并且当数据被污点时有指向污点数据结构的指针,其中输入的每个这样的数据元素可以具有相关联的影子存储器指针)。污点性质还可以以影子数据库表的形式从先前的中央模块储存库104a传递到当前中央模块104,中央模块104识别并解释该表,以查看传递的数据的哪些存储器位置被污点,并相应地将它们标记为被污点。

一旦数据在上述过程中被中央模块104标记为被污点,根据管理员在309a中给出的规则,可以对该污点数据采取某些动作。例如,在步骤215,中央模块104可以在其过程运行期间周期性地监控污点数据(例如,1-1000毫秒)。根据管理员的目标,对污点数据采取的动作可能会有所不同。

例如,为了防止污点信息流入安全敏感区域,中央模块104可以充当缓冲系统,以检查来自给定源的信息是否可以被允许进一步推进。如果源被标记为不可信任,并且数据不允许进一步推进,则可能会被删除或丢弃。

另一方面,如果数据是从必须防止其被泄漏的内联网上的内部数据库(源模块102在具有中央模块104的内联网上)输入的,则它也可能因此而被污点(步骤207的规则将被修改以监控来自该特定源的数据,并且如果是这样,则被污点)。在这种情况下,污点数据可能被允许进入安全敏感区域,但可能会受到进一步监控,以免从内部网泄漏。

最后,如果源没有以这样或其他的方式被识别(遵循上面步骤207中的示例规则,其中如果源不是被识别的源的列表的一部分,则来自这样的源的数据被标记为被污点),则可以执行进一步的分析,例如,以防止用户操纵输入来实行攻击。一种这样的攻击可以是注入攻击,其中代替数字或字符串形式的输入,用户可以输入部分代码,部分代码在被输入时其目标是利用(exploit)中央模块104。因此,可以针对基于代码的语法(例如,java语法、perl语法、sql语法等)的痕迹来监控用户输入(例如,如果字符串被期望作为来自数据输入301a的输入),并且如果检测到这种基于代码的语法,则可以在步骤215中执行分析时丢弃这种污点字符串。这有助于监控和防止基于代码的攻击,诸如sql注入攻击、缓冲溢出攻击(buffer-overflowattack)和其他此类攻击。

然而,除了防止来自用户的攻击之外,管理员也可以出于相反的原因使用污点信息,以帮助用户评估过程等。例如,如果用户希望在经历中央模块104中的用户不可见的循环过程时跟踪变量的值,则这样的变量可以由该过程的管理员根据规则309a标记为污点信息,并且在用于处理污点信息的记录模式中,在步骤215,可以在监控显示和输入区域307a中的gui300a上向源模块102的用户显示整个循环过程中的污点值的值。可以以这种方式显示大量变量,并且用户可以通过在过滤变量输入框305a中键入要过滤的期望变量并点击过滤器303a按钮来过滤它们。然后,当中央模块104运行时,该动作将在监控显示和输入307a中向源模块的用户显示中央模块104的整个过程中的期望变量的结果。

现在将描述图4的过程。与图2中示出的更适合不是源模块102的管理员的用户的过程相反,图4描述了实施例,其中源模块102的用户可以是对于发生在中央模块104中的过程具有管理员级别权限的人。重要的是要注意,当在中央模块104中发生过程时,因为中央模块104可以包括整个云网络501,所以中央模块104实际上可以包括多个计算机505或应用505a,这些计算机505或应用505a跨互联网被传递到其他计算系统600,并且因此在中央模块104中发生的过程实际上也可以包括进一步与作为互联网的一部分的外部计算机600或另一外部网络来回交互的过程。这也适用于上述实施例。

在图4所示过程的步骤401中,首先定义管理员的目标。例如,监控跨应用的数据流的一个用途是确保隐私得到维护以符合法律要求等。因此,在这种情况下,正在审核过程的隐私专家可以拥有管理员级别的特权来检查和监控来自中央模块104的过程的跨应用的用户数据流。

因此,用户可以首先在401中定义他们正在寻找的数据类型。特别地,为了更加用户友好,对于那些可能不熟悉基于计算机的编码语法的用户(诸如隐私数据专家),过程变量的非专业变量选择(laymanvariableselection)可以出现在监控显示和输入307a中,其中可以首先显示在中央模块104的过程中使用的变量的数据类型(“字符串”、“数字”、“表”等),这些变量将由管理员用户检查。然后,在步骤401,隐私数据专家或图4中的其他管理员用户可以选择他们感兴趣的变量的类别(可以选择多个类别,诸如字符串、数字、表等)。

然后在步骤403,由管理员用户选择的在过程中使用的类别中的所有这样的变量(例如,字符串、数字、表等)可以在监控显示和输入307a中以通俗(lay)术语(例如,“pc”可以是在中央模块104的过程中使用的指示用户邮政编码的字符串变量,并且变量和指示它存储邮政编码的通俗描述都将在307a中显示)显示,连同它们在过程中服务的角色的简要描述。从这个缩小的变量显示,在监控显示和输入307a中仍然可以显示多个变量(例如,在中央模块104的过程中可以分别使用几百个字符串、数字或表)。以与上面关于图2描述的方式相同的方式,管理员用户可以使用过滤变量输入框305a来进一步缩小监控显示和输入307a中的变量显示。

然后,仍然在步骤403,管理员用户可以定义某些污点点以及如何评估它们。在可以在监控显示和输入307a中显示的、过程中使用的变量的显示中,在用户通过点击303a等运行的任何过滤过程之后,管理员用户已经选择的类别中的变量(例如,字符串、数字、表等)及其伴随的通俗描述可以显示在变量311a区域中,如图3a所示。这里,管理员用户可以容易地(例如,通过右键单击或进行鼠标悬停动作)打开提示以设置在设置污点点313a区域中示出的污点点。因此,非计算机专家可以很容易地在选择的变量上设置污点点。首先,他们可以选择自己感兴趣的类别。其次,通过读取在变量311a区域中的307a中显示的变量的层描述,它们可以使用如上所述的过滤变量输入区域305a和按钮303a过滤数个变量。

例如,如果50个变量以某些字母开头,当用户开始在过滤变量输入区域305a中键入这样的单词(例如,“car”)时,变量可以在监控显示和输入区域307a中动态更新,以仅显示以用户输入的字母开头的变量(例如,“car1”、“car2”、“carburetor”等)。然后,第三,一旦由用户选择的过滤变量被显示在监控显示和输入307a区域中,通过简单地右击并选择在这些过滤变量的任何一个上设置污点点313a选项,污点点可以被设置在相应的变量上。

此外,一旦设置了污点点,管理员用户可以定义如何评估某些污点点,其中某些条件可以触发污点点,等等。这可以在污点规则输入309中进行,其中该字段可以具有几个按钮,诸如指定源315a、设置阈值317a等,这些按钮可以用于为非专业管理员建立基于规则的查询。例如,如果隐私数据专家想要将从某些源输入的邮政编码标记为被污点,他或她可以通过上述右击或鼠标悬停过程在监控显示和输入307a中选择变量,然后他或她可以选择字段309中基于规则的按钮(诸如315a中所示的指定源按钮),从而指定可以被标记为被污点的这些代码的源。然后,当中央模块104的过程被运行,并且源模块102的其他非管理员用户(如上图2中所述)向中央模块104的过程输入数据(或者其中图4中的管理员用户可以在下面描述的步骤415中输入他自己的数据)时,基于由图4中的源模块102的管理员用户设置的污点点规则,数据可以被标记为污点。

管理员也可以定义污点模式。对于污点模式,可能有被动模式和主动模式。被动模式用于记录污点数据或对标记为污点数据执行自主操作。另一方面,主动模式用于每次到达污点点时主动调试或监控跨应用的数据流和状态变量。可以例如通过gui300a的监控显示和输入区域307a中显示的每个选项旁边的单选按钮(radiobutton)来选择被动模式或主动模式。污点点规则可以从ui或后端设置。如上所述,不熟悉计算机语法污点点的非专业管理员用户,诸如隐私专家,可以使用按钮从ui单独设置污点点规则,以帮助他们构建基于规则的查询。开发人员/安全工程师管理员用户也可以通过复杂的基于规则的语法、代码或他们自己的机器学习逻辑来设置污点点,他们可以简单地将其作为例如文本或文件输入污点规则输入309a,诸如通过可以接收文本或文件作为输入的自定义输入319a字段。

此外,对输入到中央模块104中以进行污点的输入本身的分析可以在全变量或逐字符的基础上进行。在步骤405,在为多个输入中的特定输入定义污点点时,该过程检查输入的数据类型是布尔型、单字符型还是单数字串、浮点型还是整数型。在这些情况中的一种情况下(在步骤405为“是”),数据只有一个字符或数字长,因此在步骤413可以在数据类型级别上进行分析。在数据类型级别,污点分析侧重于一个数字或字符是否被污点。

另一方面,如果数据类型不是这些情况之一(在步骤405为“否”),这意味着数据类型可以是多位字符串、浮点、整数等。在这种情况下,用户然后需要在步骤407决定是否需要字符级别精度。在一个组成部分足以污点整体的应用中,可能不需要这种精度级别(在步骤411中)。在这些情况下,例如对于字符串,当该字符串中的至少一个字符来自污点源时(因为这样整个字符串应该被标记为被污点),那么整个字符串被标记为被污点,并且不跟踪字符级别信息。本质上,数据类型的组成部分的可能为真的特征可以定义数据类型。

另一方面,当字符串的不同字符没有被污点时,可能需要字符级别精度(在步骤409中),并且可以以逐字符的方式对这些特定字符进行操作,其中将污点归属到它们作为一个整体(如在上述实施例中)可能会破坏它们的使用。例如,如果字符串中的选定字符没有被污点,而其他字符被污点,则这些字符可能会在以后从字符串中级联(concatenate)出来,这意味着级联中的所有数据都不会被污点。在这种情况下,执行步骤411(因为即使存在一个被污点的字符也会将整个字符串表示为被污点)可能会产生不正确的结果。因此,根据应用和中央模块104的过程,源模块102的管理员用户可以相应地以字符级别精度或数据类型级别精度定义污点点和污点规则。

此外,如上所述,通过污点规则输入309a,可以使用包括布尔逻辑和机器学习的基于规则的语法,其中不同输入的规则可以被组合以形成复合规则等。这可以是通俗方式或自定义输入方式,如上所述。例如,对于非专业管理员用户来说,诸如温度的变量仅在超过或低于某个阈值时可以被设置为被污点以便进行调试,该阈值可以使用设置阈值317a按钮来设置。在点击这样的按钮时,非专业管理员用户可能经历一系列提示,询问阈值、是否应该指定上限或下限、用户是否想要指定阈值范围等,并且可以将用户的选择翻译成基于语法的语句,该语句由程序在运行时自动实现以将温度数据指定为被污点的,用于调试。

对于专业用户管理员,如上所述,基于规则的语法、条件语句、布尔逻辑和机器学习规则可以被输入到自定义输入319a字段中。对于机器学习,不同的分类器可以与相关联的输入一起使用,并且具有不同的权重,诸如具有一个输入层、一个隐藏层和一个输出层的前馈神经网络。反向传播可以与该网络的训练集一起使用来校正权重量。因此,这样的分类器可以将数个输入分类为可靠的或不可靠的一组(其中输出层可以具有两个节点,一个表示输入是可靠的,一个表示输入是不可靠的,并且基于权重和前馈传播,将选择具有较大值的节点),并且因此定义用于选择污点点的规则(当不可靠节点可能具有比输出层中的可靠节点更大的值时)。

其他机器学习分类器,诸如k最近邻(k-nearest-neighbor)、支持向量机等,可用于评估来自输入的数据是否应该被污点。使用这种基于机器学习的分类器进行污点的好处可能是,随着时间的推移,数据会发生改变,并且基于输入的关联因子,当数据跨应用流动时,在某些节点会变得不可靠。利用诸如当前实施例的鲁棒污点跟踪系统,这种不可靠性可以通过这种分类器来检测,并且可以被迅速标记为被污点,并且相应地被监控或采取行动。

接下来,在步骤415,可以执行污点分析。如上文关于图2所述,其他非管理员用户可以输入将在中央模块104的过程中使用的数据,其中已经由管理员输入的规则309a可以用于评估在所述过程中由来自非管理员用户的输入触发的污点点。此外,如上所述,管理员用户可以以与关于图2所述的将数据输入到字段301a中的方式类似的方式输入他们自己的数据,以随后监控他们自己的数据在中央模块104的过程中的流动,以及它可能从那里流向的任何其他应用。

在任一情况下输入这种数据后,过程进行到步骤417进行污点分析,其中有两种形式的监控,这取决于如上所述并在步骤403中选择的污点模式。对于那些不必对其污点数据立即采取动作或者可以对他们不需要通知任何用户的数据采取自主动作的管理员来说,被动形式的监控(在步骤417为“否”)可能是优选的。在这种情况下,过程进行到步骤421,在步骤421中,数据可以在中央模块104的过程中被监控是否被污点,因为它跨不同的变量并且跨越应用被重新分配,其中它可以离开中央模块104,作为输入去往另一个应用,然后在相同的过程中作为输出返回到中央模块104。在这种情况下,存在标记,该标记指示数据在存储在每个系统600的主/二级存储器608/610中的数据类型的影子存储器中被污点,每个系统600具有数据遇到的应用,因此以跨应用和跨平台的方式跟踪变量的污点。

替代地,如上所述,通过在中央模块储存库104a中的适当描述,来自该储存库104a的表可以在污点感知应用之间来回传递,以跟踪被污点的存储器位置和数据。监控可以以规则的或周期性的时间间隔(例如0-1000ms)进行,并且可以采取适当的动作,诸如记录污点数据、删除污点数据或者在监控显示和输入307a中向管理员用户显示污点数据。

替代地,在步骤417,基于在步骤403选择的污点模式,可以选择污点分析的交互模式(在步骤417为“是”),并且该过程可以进行到步骤419。对于那些希望逐步调试或主动监控中央模块104的过程内的数据流的管理员来说,这种模式可能是优选的,并且当数据离开中央模块104并从中央模块104去往其他污点感知应用时,可能会回到中央模块104的过程。可以应用的一个领域是数据隐私和保密性。

如上所述,管理员隐私专家可以基于用于污点的给定规则309a,在字段301a中输入他或她自己想要观察的数据。这种数据可以是适用的数据保护法的一部分,或者也可以以任何其他方式保密。然后,在处理过程中,数据可能会按照规则被污点,并会流过应用。

在调试期间,污点点可能在污点数据被读取或写入的任何时候被触发(只有一个可能被监控以更快地跟踪漏洞)。如上所述,当在309a中定义的任何规则被触发时(机器学习输出层、阈值或其他用户定义的上述条件变为现实),则数据可以被标记为被污点。然后,根据步骤417,每当读取或写入污点数据时,或者在由如309a中定义的其他规则(其可以包括布尔逻辑或机器学习逻辑)定义的时间点,可以触发污点点,其中对被触发的污点点的监控可以以规则的间隔(例如0-1000ms)发生。此时,可以向用户显示图3b所示的gui300b,其中显示“用户x已经检测到/访问了污点点!”303b可以被显示给管理员,其中已经访问污点数据的用户的名字可以显示为“用户x”。这是值得注意的,因为如果管理员知道某个用户是可信任的,他可以通过简单地按下忽略307b按钮来忽略这样的警告,并且该过程将继续。为了自动忽略所有这样的未来警告,管理员可以选中记住我的选择复选框309b。

此外,可以根据例如隐私立法来制定规则,该隐私立法可能要求数据只能为特定目的而被处理。例如,在程序本身内,为特定目的运行的一个模块可以被授予访问数据的权限,并且该数据可能是程序本身内其他模块的禁区(off-limit)。与上面描述的外部用户(实际的人)相比,这些模块可以被称为内部用户。例如,根据诸如gdpr的立法或多个其他司法管辖区的其他隐私权立法,出于未定义的目的处理个人数据可能是违法的。因此,也可以以这种方式对内部用户进行监控。

也就是说,当污点点被触发时,图3b中所示的gui300b可以被显示给用户,其中显示“内部用户x已经检测到/访问了污点点!”的消息,其中正在访问污点变量或数据的程序本身内的模块、函数、子类或其他模块化结构的名称可以显示为内部用户。可选地,区域303b可以仅保留给外部用户,但是如图3b所示的弹出窗口(popup)也可以在每次内部用户访问污点数据时显示,并且通过点击监控305b按钮,管理员用户可以在监控显示和输入区域307a中看到访问污点数据的模块化结构。

至少地,在实施例中,在每次内部用户模块结构访问污点数据时,可以显示提示,并且可以在gui300b的区域303b、图gui300a的监控显示和输入区域307a或者任一gui的任何其他部分中保留用于显示访问所述数据的内部用户的区域。以这种方式,通过能够监控污点数据的内部用户模块结构,对计算机语法几乎不了解的非专业管理员用户(诸如隐私专家或审计员)可以确保性能符合严格定义的访问规则。

除了以上所述,如果管理员用户想要在污点点处监控中央模块104中的过程的变量的状态,那么他/她可以点击监控305b按钮,其中gui300a上的监控显示和输入307a字段然后再次向用户显示在过程已经暂停的污点点处的变量的更新值。在实施例中,当用户点击监控305b按钮时,中央模块104中的过程的变量及其当前状态值显示在监控显示和输入区域307a中,而不仅仅是那些被指定为被污点的变量。在这样的实施例中,可以显示过程变量。替代地,在另一个实施例中,不仅可以显示污点变量,而且可以显示接触具有设定污点点的变量的内容或值的过程变量(例如,在上面的示例中,观察点可以被放置在变量b上,如果使用本文定义的实施例的污点点被设置在变量b上,尽管d=c,并且c=b,其中d没有被直接分配给变量b,d的值将仍然在变量b的整个污点点监控过程中显示)。如果污点值可能仅仅用作检查其他变量的值的过程中的停止点,则可以这样做,这可能有助于问题诊断或故障排除,并且可以通过跟踪错误的数据流来帮助快速诊断问题的源。

以这种方式,隐私数据专家可以在中央模块104的整个过程中动态地观察各种数据的流动。这可能包括任何保密数据、外部用户的个人数据或管理员用户自己的个人数据。恢复按钮可以出现在监控显示和输入307a区域中,当点击恢复按钮时将恢复中央模块104的过程。

在实施例中,如果污点数据或信息从中央模块104的过程去往其他污点感知应用(例如,另一个中央模块104的应用505a),则原始中央模块104可以接收变量信息,并且甚至能够检测其他应用中的污点点,以暂停其他应用中的运行,并且如上所述向源模块102的管理员用户显示污点点处的状态变量。通过这种方式,用户可以跨多个链接的污点感知应用检查污点点处的数据值。

该过程的进一步应用可能是简化常规调试。例如,软件开发人员可以使用诸如温度、一年中的时间、历史天气模式等相关因素来定义天气模型,以使用神经网络来制作机器学习模型,以对不规则天气模式进行分类(如上所述使用输出层中的两个节点),并将不规则天气模式指定为被污点,以便进一步分析。以这种方式,通过规则监控,应用处理将在处理污点数据的每个步骤暂停。在常规调试中,软件开发人员必须为变量定义观察点,每次访问该变量时暂停处理,删除观察点,并对每个关注的数据点重复。这里,应用可以仅根据输入的内容来支持条件污点点,并且可以在自动访问它们的每一步处暂停应用。

步骤419的交互式污点模式监控的另一个应用是注入攻击预防。这里,用户可以在规则309a中输入条件规则,以定义某些数据不应流入输入字段的位置。该数据可以被认为是被污点的,并且步骤419中的过程将在处理污点数据的每个步骤暂停。这也适用于污点数据的所有部分和派生数据。如果运行添加命令或级联命令时只有部分数据被污点(例如,a+b,其中a被污点),则结果也被认为是被污点的,并且应用在处理这种结果的每个步骤都被暂停。结果,可以立即停止应用,例如,如果中央模块104中的过程将要将字符串输入数据发送到sql数据库,其中恶意用户输入了有害的sql命令来破坏或接管数据库,而不是正常的字符串。

这样的条件可以包括终止条件(由步骤423表示),其中中央模块104的过程可以立即终止。当执行步骤419时,可以以规则的间隔(例如0-1000ms)监控步骤423的终止条件,其中如果终止条件存在(步骤423为“是”),则步骤419和中央模块104的过程立即终止。另外,在监控显示和输入307a区域中,可以为管理员用户呈现终止按钮,其中管理员用户可以点击307a这样的区域来将终止条件设置为存在,其中在步骤423中,中央模块104的过程随后被终止(例如,在看到用户将要注入恶意的sql命令时,等等)。在步骤419,终止条件可以被标记为存在的其他方式是经过一定量的预定时间(以秒、分、小时、天等为单位),或者在中央模块104的过程以正常方式结束之后。

否则,如果对终止条件的监控发生,并且终止条件不存在,则监控停止并返回到步骤415中的污点分析的实行。这里,再次,取决于如上所述指定的污点模式,该过程分别在步骤417或419中继续以被动或主动方式进行监控,并且在步骤423中再次周期性地检查终止条件监控。如果再次没有达到终止条件,该过程以循环方式贯穿这些步骤而继续。应当理解,详细描述部分,而不是任何其他部分,旨在用于解释权利要求。其他部分可以阐述一个或多个但不是(多个)发明人所设想的所有示例性实施例,因此,并不旨在以任何方式限制本公开或所附权利要求。

虽然本公开描述了用于示例性领域和应用的示例性实施例,但是应当理解,本公开不限于此。其他实施例和对其的修改是可能的,并且在本公开的范围和精神内。例如,在不限制本段的一般性的情况下,实施例不限于在附图中示出和/或在本文描述的软件、硬件、固件和/或实体。此外,实施例(无论是否在本文明确描述)对除了在本文描述的示例之外的领域和应用具有显著的效用。

本文已经借助于说明特定功能的实现及其关系的功能构建块描述了实施例。为了描述的方便,这些功能构建块的边界在本文被任意定义。只要适当地执行指定的功能和关系(或其等价物),就可以定义替代边界。此外,替代实施例可以使用不同于本文描述的排序来执行功能块、步骤、操作、方法等。

本文对“一个实施例”、“实施例”、“示例实施例”或类似短语的引用指示所描述的实施例可以包括特定的特征、结构或特性,但是每个实施例不一定包括特定的特征、结构或特性。此外,这样的短语不一定指同一实施例。此外,当结合实施例描述特定的特征、结构或特性时,将这样的特征、结构或特性结合到其他实施例中,无论是否本文明确提及或描述,都在相关领域的技术人员的知识范围内。另外,一些实施例可以使用表达“耦合”和“连接”以及它们的派生词来描述。这些术语不一定是彼此的同义词。例如,可以使用术语“连接”和/或“耦合”来描述一些实施例,以指示两个或更多个元件彼此直接物理或电接触。然而,术语“耦合”也可以表示两个或更多个元件彼此不直接接触,但是仍然相互合作或相互作用。

本公开的广度和范围不应受任何上述示例性实施例的限制,而应仅根据所附权利要求及其等同物来定义。

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