T1690: 阻止命令历史记录

Defense Impairment

摘要

攻击者可能损害命令历史记录,以隐藏他们在被攻陷系统上运行的命令。各种命令解释器会跟踪用户在终端中输入的命令,以便用户可以追溯他们所做的操作。 在 Linux 和 macOS 上,命令历史记录在一个由环境变量 `HISTFILE` 指向的文件中跟踪。当用户注销系统时,此信息会被刷写到用户主目录中名为 `~/.bash_history` 的文件中。`HISTCONTROL` 环境变量跟踪 history 命令应保存什么,并最终在用户注销时保存到 `~/.bash_history` 文件中。macOS 上默认不存在 `HISTCONTROL`,但用户可以设置它,且它会被遵循。`HISTFILE` 环境变量也在某些 ESXi 系统中使用。(Citation: Google Cloud Threat Intelligence ESXi VIBs 2022) 攻击者可能清除历史环境变量(`unset HISTFILE`)或将命令历史记录大小设置为零(`export HISTFILESIZE=0`)以阻止命令的记录。此外,可以通过简单地将 `HISTCONTROL` 设置为 "ignorespace" 来配置它忽略以空格开头的命令。还可以通过将 `HISTCONTROL` 设置为 "ignoredups" 来忽略重复命令。在某些 Linux 系统中,这默认设置为 "ignoreboth",涵盖上述两个示例。这意味着 " ls" 不会被保存,而 "ls" 会被 history 保存。攻击者可以利用这一点,通过简单地在所有终端命令前添加一个空格来不留痕迹地操作。 在 Windows 系统上,`PSReadLine` 模块跟踪所有 PowerShell 会话中使用的命令,并将它们写入一个文件(默认情况下为 `$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt`)。攻击者可能使用 `Set-PSReadLineOption -HistorySavePath {File Path}` 更改这些日志保存的位置。这将导致 `ConsoleHost_history.txt` 停止接收日志。此外,可以使用 PowerShell 命令 `Set-PSReadlineOption -HistorySaveStyle SaveNothing` 关闭对此文件的日志记录。(Citation: Microsoft about_History prevent command history)(Citation: Sophos PowerShell Command History Forensics) 攻击者还可能利用网络设备上的[网络设备 CLI](https://attack.mitre.org/techniques/T1059/008) 来禁用历史命令日志记录(例如 `no logging`)。

来源归属

来源:MITRE ATT&CK · 置信度:high

平台

  • ESXi
  • Linux
  • macOS
  • Network Devices
  • Windows

战术

Defense Impairment

参考来源