2

我是一名安全人员,我已经对此进行了广泛的研究,此时我正在寻找下一步该去哪里的指导。

另外,对不起,很长的帖子,我把重要的部分加粗了。

我试图在高层次上做的事情很简单: 我试图将一些数据输入到程序中,并“跟踪”这些数据,并跟踪它是如何处理的,以及它在哪里结束。

例如,如果我将我的登录凭据输入到 FileZilla,我想跟踪访问的每个内存引用,并启动跟踪以跟踪该数据的去向、发送到哪些库,如果我什至可以将其关联到网络数据包。

现在我专注于 Windows 平台,我认为我的主要问题归结为: 是否有任何好的 API 可以远程控制理解 Windows 窗体和系统库的调试器?

以下是我迄今为止发现的关键属性:

  • 这种分析技术的名称是“动态污点分析”
  • 这将需要调试器或分析器
  • Inspect.exe 是查找接受输入的 Windows UI 元素的有用工具
  • Windows 自动化框架通常可能有用
  • 自动化调试器似乎很痛苦。IDebugClient 接口允许更丰富的数据,但像 IDAPro 甚至 CheatEngine 这样的调试器具有更好的内存分析实用程序
  • 我将需要放置内存断点,并跟踪与输入关联的引用和寄存器。

以下是我尝试过的一系列工具:

我玩过以下所有工具:WinDBG(很棒的工具)、IDA Pro、CheatEngine、x64dbg、vdb(python 调试器)、Intel 的 PIN、Valgrind 等...

接下来是一些动态污染分析工具,但它们不支持检测 .NET 组件或 Windows 调试框架提供的其他便利,这些便利由 Inspect.exe 等实用程序提供:

然后我尝试使用 IDebugClient 接口编写我自己的 C# 程序,但是它的文档记录很差,我能找到的最好的项目来自这个家伙,并且已经 3 岁了: C# app to act like WINDBG's "step into" feature

我愿意为适合此用例的现有项目贡献代码,但此时我什至不知道从哪里开始。

我觉得作为一个整体的动态程序分析和调试工具可以使用一些爱......我觉得有点卡住了,不知道从哪里开始。有很多不同的工具和方法可以解决这个问题,而所有这些工具和方法都以某种方式缺乏另一种。

无论如何,我感谢任何方向或指导。如果你能做到这一点,谢谢!!

-戴夫

4

1 回答 1

1

如果你坚持在运行时这样做,Valgrind 或 Pin 可能是你最好的选择。据我了解(从未使用过),您可以配置这些工具以任意方式解释每条机器指令。您希望通过机器指令跟踪数据流以跟踪受污染的数据(读取此类数据,然后写入寄存器或条件代码位)。复杂性可能是将违规指令的起源追溯到程序元素(DLL?链接模块?命名子程序),以便您可以适当地抱怨。

就努力而言,您作为个人可能会成功完成这项任务。

这应该适用于应用程序。

我怀疑您的问题之一将是跟踪操作系统的位置。尽管同样的原则适用,但这要困难得多。您的困难在于让操作系统供应商让您跟踪在操作系统中执行的指令。

这样做作为运行时分析的缺点是,如果恶意应用程序在您的特定执行中没有做任何坏事,您将不会发现任何问题。这是动态分析的经典缺点。

您可以考虑使用经典编译器技术在源代码级别跟踪数据。这要求您可以访问所有可能涉及的源代码(如果您的应用程序依赖于各种各样的库,这实际上非常困难),您拥有可以通过源模块解析和跟踪数据流的工具,并且这些工具用不同的语言(汇编、C、Java、SQL、HTML,甚至 CSS ......)相互交谈。

作为静态分析,无论执行哪个执行,这都有可能检测到不需要的数据流。图灵限制意味着您可能无法检测到所有此类问题。这就是静态分析的缺点。

构建自己的工具,甚至集成个人工具,这样做可能超出了您作为个人可以合理做的事情。您需要找到构建此类工具的统一框架。[检查我的简历]。

于 2019-01-20T11:19:42.310 回答