
Omnibus 的定义是“一本包含多部先前单独出版的小说或其他内容的合集”,这正是 InQuest Omnibus 项目对于开源情报收集、研究和工件管理的目标。
通过提供易于使用的交互式命令行应用程序,用户可以创建会话以调查各种工件,例如 IP 地址、域名、电子邮件地址、用户名、文件哈希、比特币地址等,并且我们将继续扩展。
该项目借鉴了之前出色的工具,如 SpiderFoot、Harpoon 和 DataSploit。非常感谢这些优秀作者为开源世界所做的贡献。
该应用程序使用 Python 2.7 编写,并已在 OSX 和 Ubuntu 16.04 环境中成功测试。
这是最终应用程序的测试版,因此在使用过程中可能会出现一些错误或其他异常情况。总体而言,Omnibus 功能完整,可以立即用于开始 OSINT 调查。
Omnibus 采用模块化方式构建,允许轻松添加 OSINT 数据源模块和导入/导出模块。每个类别的模块都包含在单个目录中,只需添加几行代码,您的模块就可以成为下一个!
随着 Wiki 的持续发展,我们将提供编写自定义插件的完整示例。
如果您发现任何错误或其他问题,请创建一个 Issue 和/或 Pull Request。我们也非常希望社区支持创建更多模块并扩展 Omnibus 的用例。欢迎 Fork 和 Pull Request 来添加新功能!
本 README 文件作为 Omnibus 及其功能的快速概述。完整文档位于此存储库的 'docs' 文件夹中。
在开始之前,我们需要了解一些 Omnibus 使用的术语。
new 命令,或通过模块执行发现启动 Omnibus 进行调查只需克隆此 GitHub 存储库,使用 pip install -r requirements.txt 安装 Python 依赖项,然后运行 python omnibus-cli.py 即可。
Omnibus Shell - 主启动画面

关于 CLI 的可视化参考,上图显示的是 Omnibus 控制台,其中新会话已启动,已向会话中添加 2 个工件,并显示了 help 菜单。
您必须在 omnibus/etc/apikeys.json 文件中设置要使用的任何 API 密钥。
该文件是一个 JSON 文档,其中包含了所有需要 API 密钥的服务的占位符,Omnibus 仅在每个模块的基础上访问该文件,以检索模块执行所需的确切 API 密钥。
需要注意的是,大多数需要 API 密钥的服务都提供免费账户和 API 密钥。某些免费账户可能有较低的资源限制,但在较小的日常调查或测试应用程序期间,这通常不是问题。
实用提示:使用 cat apikeys 命令查看您已存储的密钥。
如果模块失败或未返回结果,请先检查此处以确保您的 API 密钥已正确保存。
当您首次运行 CLI 时,会看到一个帮助菜单,其中包含一些基本信息。
Omnibus 尝试使用模仿一些常见 Linux 命令的命令,以提供熟悉感和易用性。例如,命令 cat 用于显示工件信息,rm 用于从数据库中移除工件,ls 用于查看当前会话工件,以及使用 > 字符支持任何命令的输出重定向。
作为输出重定向的示例,如果您想检索名为 "inquest.net" 的工件的详细信息并保存到本地磁盘上的 JSON 文件中,只需运行以下命令:
cat inquest.net > inquest-report.json 就可以了!
此功能也支持完整文件路径而非相对路径。
Omnibus 中最常用的高级命令有:
session
new <工件名称>
modules
open <文件路径>
ls
rm
wipe
cat <工件名称 | 会话 ID>
<模块名称> <工件名称 | 会话 ID>
<机名称> <工件名称 | 会话 ID>
如果您需要快速参考应用程序不同区域可用的不同命令,有专门为此目的设计的子帮助菜单。使用这些命令将仅显示与特定区域相关的可用命令:
general
artifacts
sessions
modules
大多数网络调查从一个或多个技术指标开始,例如 IP 地址、文件哈希或电子邮件地址。在搜索和分析之后,关系开始形成,您可以围绕连接的数据点进行 pivot。这些数据点在 Omnibus 中被称为工件,代表您想要调查的任何项目。
工件可以是以下类型之一:
命令“new”后跟一个工件将在您的 Omnibus 会话中创建该工件,并将工件的记录存储在 MongoDB 中。该记录包含工件名称、类型、子类型、模块结果、来源、备注、标签、子工件信息(根据需要)以及创建时间。 每次您对已创建或已存储的工件运行模块时,数据库文档都会更新以反映新发现的信息。
要创建新工件并将其添加到 MongoDB 进行跟踪,请运行命令 new <工件名称>。例如,要开始调查域名 inquest.net,您可以运行 new inquest.net。
Omnibus 会自动确定工件的类型,并确保仅对该类型执行相应的模块。如果您尝试对不支持该工件类型的模块运行工件,您会收到一条警告消息,其中列出可接受的类型。
当执行模块时,可能会在发现过程中找到新的工件。例如,运行“dnsresolve”命令可能会发现 Omnibus 之前未见过的新 IPv4 地址。在这种情况下,这些新发现的工体会自动作为新工件在 Omnibus 中创建,并通过一个额外的字段“source”链接到其父工件,以标识它们最初是从哪个模块发现的。在此示例中,新创建工件的来源将是“dnsresolve”。
可以使用“rm”命令从数据库中移除工件。如果您不再需要某个工件,只需运行删除命令并指定工件的名称或会话 ID(如果有的话)。
Omnibus 使用一项称为“会话”的功能。会话是每次启动 CLI 会话时通过 Redis 创建的临时缓存。每次创建工件时,该工件名称都会与会话一起添加,并附带一个数字键,以便于检索、搜索和针对相关工件的操作。
例如,如果您的会话中只有一个项目“inquest.net”,则无需执行 virustotal inquest.net,您也可以运行 virustotal 1,并且会得到相同的结果。实际上,这对任何将工件名称作为第一个参数的模块或命令都有效。
使用会话 ID 而非工件名称进行交互

会话用于方便访问工件,每次退出命令行会话时都会被清除。 如果您希望提前清除会话,请运行命令“wipe”,您将获得一个干净的 slate。
Omnibus 目前支持以下模块列表。如果您有模块建议或想自己编写一个,请创建一个 pull request。
另外,在 Omnibus 控制台中,输入模块名称将显示与该模块相关的帮助信息。
模块
机是一种简单的方法,可以针对给定的工件运行该工件类型的所有可用模块。如果您想使用单个命令快速收集尽可能多的目标信息,这是一种快速的方式。
要执行此操作,只需运行命令 machine <工件名称|会话 ID>,然后等待几分钟直到模块执行完毕。
唯一的缺点是,根据工件类型和每个模块的结果,这可能会返回大量数据和子工件。为了解决这个问题,我们正在研究一种方法,可以从存储的数据库文档中移除特定的工件字段,以便用户更容易修剪不需要的数据。
一些需要记住的快速命令:
session - 启动新的工件缓存cat <工件名称>|apikeys - 美化打印工件文档或查看您存储的 API 密钥open <文件路径> - 加载文本文件工件列表到 Omnibus 中进行调查new <工件名称> - 创建新工件并将其添加到 MongoDB 和您的会话中find <工件名称> - 检查工件是否存在于数据库中并显示结果报告是工件数据库文档的 JSON 输出,本质上是“cat”命令输出的文本文件版本。但是,通过使用 report 命令,您可以指定一个工件和要保存输出的文件路径:
omnibus >> report inquest.net /home/adam/intel/osint/reports/inq_report.json上面的命令会覆盖默认的报告目录 omnibus/reports。默认情况下,如果您没有指定报告路径,所有报告都将保存到该位置。另外,如果您没有指定文件名,报告将使用以下格式:
[工件名称]_[时间戳].json命令的输出也可以使用标准 Linux 字符 > 保存到任意文本文件中。
例如,如果您想将主机 VirusTotal 查找的输出存储到一个名为 "vt-lookup.json" 的文件中,您只需执行:
virustotal inquest.net > vt-lookup.json默认情况下,重定向的输出文件保存在当前工作目录中,即 "omnibus/"。但如果您指定完整路径,例如 virustotal inquest.net > /home/adam/intel/cases/001/vt-lookup.json,JSON 格式的输出将保存在那里。