ashirt-ops/ashirt

GitHub: ashirt-ops/ashirt

ASHIRT 是一个 Qt 系统托盘客户端,用于截取屏幕截图和捕获代码块,并将这些证据提交到远程 ASHIRT 后端进行管理。

Stars: 57 | Forks: 9

# ASHIRT 一个 Qt 托盘类应用程序,允许通过用户选择的区域或整个窗口捕获屏幕截图,或捕获与特定 ASHIRT 实例关联的代码块。此仓库仅包含客户端。如果您正在寻找服务端,可以在[这里](https://www.github.com/theparanoids/ashirt-server)找到。 ## 目录 - [背景](#background) - [安装](#install) - [配置](#configuration) - [贡献](#contribute) - [许可证](#license) ## 背景 此应用程序允许用户连接到远程 ASHIRT 后端,并创建和提交新的证据。屏幕截图是通过自定义的用户设置按键捕获的,或者也可以通过在托盘菜单中选择相应的操作来捕获。可以通过托盘中的操作添加代码块。这两者都可以在应用程序内进行管理。 ## 安装 Mac 和 Linux 的官方版本将通过 GitHub 的 releases 标签页提供,同时提供源代码,供用户在需要时自行构建。 ### 在 Linux 上安装 官方 Linux 版本以 AppImage 格式提供。某些系统可能需要特定的设置信息。对于大多数发行版,“安装”非常简单:只需在 AppImage 上设置可执行标志,然后在终端中或通过 UI 运行该应用程序即可。 #### 支持情况矩阵 | 发行版 | 支持状态 | 备注 | | -------------------------- | ----------------- | ----------------------------------------------------------------- | | Kali (xfce) | 受支持¹ | 状态截至 2021 年 3 月 | | Ubuntu 20.04 (Gnome) | 受支持¹ | 操作菜单无法正常更新 | | Fedora 33 (Gnome) | 部分支持¹² | 按键捕获可能无法正常工作 | | KDE Neon | 受支持¹ | 状态截至 2021 年 1 月 | | Linux Mint 20.1 (Cinnamon) | 受支持¹ | | | Linux Mint 20.1 (Mate) | 部分支持¹ | 需要替代的截图工具。例如 gnome-screenshot | ¹ 应用程序图标无法正常显示 ² 纯净的 Gnome 安装需要任务栏实现,而较新版本的 gnome 缺少此功能。这可以通过安装 gnome 扩展来解决。请参阅下方兼容的 Gnome 扩展列表。 请注意,由于 Wayland 的运行机制根本不同,因此这些平台不支持全局热键。 ##### 有效的 Gnome 扩展 各种 gnome 扩展都可以使用。以下列表只是一个子集。在使用其中任何一个之前,请检查它们所针对的 gnome 版本是否与您正在使用的版本相同。版本不匹配可能会导致错误,或者完全无法工作。 | 扩展名称 | 备注 | | ------------------------------------------------------------------------------------------ | ----- | | [Tray Icons](https://extensions.gnome.org/extension/1503/tray-icons/) | | | [Tray Icons: Reloaded](https://extensions.gnome.org/extension/2890/tray-icons-reloaded/) | | | [TopIcons Plus](https://extensions.gnome.org/extension/1031/topicons/) | | ## 无托盘的操作系统 当前状态:无法使用 某些操作系统/桌面不支持托盘(例如 ice3 窗口管理器)。目前,在这些情况下,应用程序将无法运行并直接退出。最终,将设置一个简单的 CLI 来继续与此应用程序进行交互。 ## 快速入门 首次启动时,用户必须首先设置适当的配置。当托盘显示时,打开托盘并选择 `Settings`。在这里,您将看到一些选项: | 字段 | 含义 | | ------------------------------ | ------------------------------------------------------------------------------------------------------------ | | Evidence Repository | 证据的存储位置。请注意,这只是一个起始路径。文件将存储在使用操作名称的子目录中 | | Access Key | ASHIRT 前端提供的(较短的)base-64 密钥(在 Account Settings 中查找) | | Secret Key | ASHIRT 前端提供的(较长的)base-64 密钥 | | Host Path | 指向 ASHIRT 服务器的 http 地址 | | Capture Area Command | 用于截取任意区域屏幕截图并保存到文件的 CLI 命令。下面有更多相关介绍 | | [Capture Area Command] Shortcut| 用于(在系统级别)触发捕获区域命令的组合键 | | Capture Window Command | 用于捕获给定窗口并保存到文件的 CLI 命令 | | [Capture Area Command] Shortcut| 用于(在系统级别)触发捕获窗口命令的组合键 | 配置好上述内容后,保存设置,您现在就可以选择一个操作了。打开托盘,在 `Select Operation` 下,选择一个操作以开始使用该应用程序。请注意,每当您更改 host path 时,操作列表都会被更新。 ## 屏幕截图命令 此应用程序需要从命令行进行屏幕截图。该应用程序_必须_满足: 1. 允许将屏幕截图保存为指定文件名的文件。 2. _必须_在应用程序退出之前创建文件。 3. 支持 png 输出格式。 理论上,任何满足此要求的应用程序都可以工作。对于 Mac,执行此操作的系统命令是预先填好的,因为这是一项标准功能。对于 Linux,有许多截图命令,因此没有提供任何默认命令。对于 Windows,必须使用第三方应用程序,因为目前无法将屏幕截图保存为指定文件名的文件。 此工具将使用 `%file` 替换上面提到的文件名,如下所示: | OS/DE/App | 捕获窗口 | 捕获区域 | 备注 | | ---------------- | ---------------------------------- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | | Linux/Gnome | `gnome-screenshot -w -f %file` | `gnome-screenshot -a -f %file` | 捕获窗口会捕获聚焦的窗口,而不是允许进行选择;添加 `--delay` 标志有助于避免选错窗口 | | Linux/Xfce4 | `xfce4-screenshooter -w -s %file` | `xfce4-screenshooter -r -s %file` | 捕获窗口会捕获聚焦的窗口,而不是允许进行选择;添加 `--delay` 标志有助于避免选错窗口 | | Linux/KDE Plasma | `spectacle -a -bno %file` | `spectacle -r -bno %file` | 捕获窗口会捕获聚焦的窗口,而不是允许进行选择;添加 `--delay` 标志有助于避免选错窗口 | | MacOS X | `screencapture -w %file` | `screencapture -s %file` | | 注意:此应用程序需要_单一的、基本的命令_。虽然将输出通过管道传递给另一个命令_可能_可行,但并不保证一定能正常工作。同样,在同一“行”上提供多个命令也_可能_会起作用,但同样无法保证。正式来说,这两种技术都不受支持。 注意 2:不支持 Mate-screenshot,因为如果不打开 GUI 窗口,似乎无法指定文件的写入位置。 ### 快捷键 根据具体的操作系统的不同,可以在您的计算机上注册全局快捷键。这些快捷键可能会与某个特定应用程序的快捷键发生冲突,且目前尚不清楚哪个快捷键会被触发。综上所述,此功能虽然受支持,但可能无法每次都完美运行。话虽如此,以下是配置快捷键的方法: 在 `Settings` 中,每个捕获命令旁边都有一个小文本框,用于提供快捷键。每个快捷键都应该添加一个或多个修饰键(例如 `ctrl`),以减少干扰其他系统/应用程序命令的可能性。这些修饰键在快捷键中有保留名称,如下表所示: | 按键 | 名称 | 备用名称 | | ------------------------------ | ---------- | ---------------- | | Shift | `shift` | `shft` | | Control | `control` | `ctrl` | | Alt | `alt` | -- | | Windows/Meta/MacOS Command key | `meta` | `win` | 要指定快捷键模式,只需决定您想要的一组修饰键,加上一个字母数字键(或 F- 功能键),并用 `+` 将它们分隔开即可。 例如:`Ctrl+Shift+p` ## 切换操作 要更改操作,请导航到 `Select Operation` 并选择列表中显示的某个操作。如果您要查找的操作不在列表中,您可以通过关闭并重新打开托盘菜单来刷新列表,或者与操作所有者确认以确保您拥有该操作的写入权限。 ### 多后端 某些用户可能最终会将此应用程序用于多个后端——无论是为了测试,还是由于多个社区使用相同的软件。目前,此应用程序并不强烈支持切换后端,尽管这是可能的。要切换后端,只需在设置菜单中输入新的 API Key、Secret Key 和 Host Path。请注意,切换时,您当前选择的操作很可能会被清除,您将需要选择一个新的操作。 一个不受支持的特定边缘情况是,多个后端对不同操作使用相同的名称。在这些情况下,用户有责任保持警惕,并确保将正确的数据发送到正确的后端。 ## 管理证据 可以通过导航到 `View Accumulated Evidence` 来查看以前的证据,这将显示一个包含当前操作证据的屏幕。在证据列表中选择一行将显示: - 证据的预览(可以通过更改窗口大小或缩小描述框来缩放图像——将鼠标悬停在分隔描述和图像的分割线上) - 证据的描述 - 与证据关联的任何(活动的)标签。 如果尚未提交,您可以在此处提交证据。或者,您可以删除文件(即使之前已经提交过——这样做将在本地删除文件,但保留网站上的副本)。 ### 过滤证据 可以通过以 `key:value` 格式指定项目来进行过滤。可以通过在每个过滤器之间添加空格来添加多个过滤器。键和值不区分大小写。 | 操作 | 键 | 值 | 别名 | 备注 | | ----------------------------------------- | ----------- | -------------------------------------------------- | ------------------------- | ------------------------------------------------------------------ | | 显示提交错误 | `err` | `t`/`f` 或 `y`/`n` | `error`, `fail`, `failed` | 也支持 `true`/`false` `yes`/`no` | | 显示操作的证据 | `op` | operation slug | `operation` | 按下重置按钮时,会预先填入当前操作 | | 显示在给定日期_之前_获取的证据 | `before` | `today`、`yesterday` 或 yyyy-MM-dd 格式的日期, | `to`, `til`, `until` | 从给定当天的午夜开始 | | 显示在给定日期_之后_获取的证据 | `after` | `today`、`yesterday` 或 yyyy-MM-dd 格式的日期, | `from` | 在_下一个_给定日期的午夜之前开始 | | 显示在给定日期_当天_获取的证据 | `on` | `today`、`yesterday` 或 yyyy-MM-dd 格式的日期, | -- | | | 显示尚未提交的证据 | `submitted` | `t`/`f` 或 `y`/`n` | -- | 也支持 `true`/`false`、`yes`/`no` | #### 日期过滤 当尝试同时应用“之前”日期和“之后”日期过滤器时,系统将调整时间,使得“之前”日期始终在“之后”日期_之后_。这意味着,时间跨度必须是包含的。例如,“3 月之前”和“5 月之后”(不包括 3 月和 4 月)的范围是无效的,它将被修改为“3 月之后,5 月之前”。 当仅应用一个日期时,另一端的范围是无限制的。也就是说,日期隐含地是从“时间起始”到“时间结束”。 ## 迁移数据 从 ASHIRT 应用程序收集的所有数据都可以导出,然后重新导入到新的 ASHIRT 实例中。这样做会在新系统上创建一个_副本_,用户可以从他们上次中断的地方继续。目前建议仅在将数据从一个计算机_移动_(而不是复制)到另一个计算机,并且后者将_替换_前者时使用此功能。对于共享内容,建议改用 Web UI。 要开始导出,请打开托盘菜单,然后选择 Edit > Export。这将打开一个窗口,用户可以在其中选择目标位置,并选择仅导出配置详细信息(特别是服务器连接详细信息)、仅导出累积的证据,还是两者都导出。最后,按下“Export”按钮。这将启动一个收集这些数据的过程,并开始将其移动到一个中央目录中,以便于迁移。 要导入内容,请打开托盘并选择 Edit > Import。这将打开一个类似于导出的对话框,但用于导入内容。导航到导出目录,选择 `system.json` 文件,然后按下“Import”按钮。这将启动一个将导出的数据引入新系统的过程。 导入或导出开始后,您可以关闭窗口。操作完成后将显示一条托盘消息。要获取进度更新,您只需重新打开导入/导出菜单。进度会在已知文件总数时更新,并在复制每个文件时更新。 ### 注意事项 在导入和导出时,有几点需要注意。 1. **您只能选择导出所有或不导出任何内容** 目前不支持选择单个资产。 2. **导入和导出一旦开始便无法取消** 3. **在导入期间创建或编辑证据可能会变慢** 底层数据库只允许单个写入连接,这意味着导入进程和允许写入本地数据库的主进程需要轮流进行写入。根据您的使用场景和系统,这可能会也可能不会延迟并发工作。 4. **在导出时导入(反之亦然)可能会造成混乱** 导入和导出操作是作为特定时间点的操作完成的。这意味着导出将仅导出在按下“Export”按钮时它已知的数据。这对于导入也是如此,尽管它与并发操作的相关性较小。作为一般性建议,不应同时进行导入和导出。 5. **导入可以重新运行,尽管这样做的价值值得怀疑** 目前无法知道导入是否以前运行过。重新导入_证据_会导致重复的文件和数据库记录。这不会阻碍系统,但清理起来很困难(且需要手动进行)。在按下导入按钮之前,请确保内容之前没有被导入过。 6. **导出文件不受保护且易于共享** 不管怎样,在创建导出文件时,请知道任何人都可以读取或复制这些数据。如果用户愿意,加密或解密的工作需要留给他们自己来完成。 7. **限制** 目前,导入和导出数据存在以下限制: 1. “Settings”不会被转移——特别是上次使用的标签和操作 2. 可能依赖于操作系统的内容不会被转移。这包括大部分配置:热键绑定、屏幕截图命令和证据目录。 ## 本地文件 您永远不需要在应用程序之外访问这些文件,但是,为了清晰起见,以下文件由此应用程序生成和维护: | 文件类型 | 路径 | 备注 | | -------------- | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | | Screenshots | `$eviRepo/$operationSlug/ashirt_screenshot_$randomCharacters.png` | 目前,在屏幕截图的末尾附加随机的(英文)字符,以增加唯一性并防止被覆盖 | | Codeblocks | `$eviRepo/$operationSlug/ashirt_codeblock_$randomCharacters.json` | 目前,在代码块文件名的末尾附加随机的(英文)字符,以增加唯一性并防止被覆盖 | | Configuration | `$userDataDirectory/ashirt/config.json` | 在“settings”菜单中管理连接信息/配置 | | Local Database | `$userDataDirectory/ashirt/evidence.sqlite` | | | Settings | `$userDataDirectory/Unknown Organization/ashirt.conf` | 管理状态信息——例如上次使用的操作;由 Qt 管理 | ### 变量位置 上述路径引用了一些变量。其中一些值会根据所使用的操作系统(或其配置方式)而变化。确切的路径是未知的,但这可能有助于您找到这些文件: | 路径变量 | 备注 | | -------------------- | -------------------------------------------------------------------------------------------------------------- | | `$userDataDirectory` | 存储用户特定数据文件的位置。 | | [对于 Linux] | 在命令行中运行 `echo $XDG_CONFIG_HOME`(默认情况下,这通常是 `~/.config` 目录) | | [对于 Mac OSX] | 检查 `/Users/(username)/Application Support/` | | [对于 Windows] | 检查 `C:\Users\(username)\AppData\Local\` | | `$eviRepo` | “settings”窗口中的 Evidence Repository 值 | | `$operationSlug` | 给定操作的 operation slug。这是操作名称的唯一表示形式 | | `$randomCharacters` | 六个随机英文字符,不区分大小写(适用于支持此特性的操作系统)。例如 `fTaNpS` | ## 开发者说明 有兴趣做出贡献吗?请参阅[开发者说明](Readme_Developer.md)以了解风格指南、组织结构等。 ## 配置 所有配置选项均通过应用程序 UI 进行管理。 ## 许可证 本项目基于 [MIT](LICENSE) 开源许可证的条款进行授权。有关完整条款,请参阅 [LICENSE](LICENSE)。 ## 致谢 / 贡献者 / 感谢 - Joel Smith - Alex David ## 维护者 - Joe Rozner - John Kennedy
标签:ESC漏洞, 安全取证, 截图工具, 数据展示, 桌面客户端, 红队, 证据收集