跳转至

Unix Shell 配置修改

对手可能通过执行由用户的 shell 触发的恶意命令来建立持久性。用户Unix Shell在会话的不同点执行几个配置脚本,基于事件。例如,当用户打开命令行界面或远程登录(例如通过 SSH)时,会启动登录 shell。登录 shell 从系统 (/etc) 和用户的主目录 (~/) 执行脚本以配置环境。系统上的所有登录 shell 都使用 /etc/profile 启动。这些配置脚本以其目录的权限级别运行,通常用于设置环境变量、创建别名和自定义用户的环境。当 shell 退出或终止时,将执行其他 shell 脚本以确保 shell 正常退出。 对手可能会尝试通过将命令插入到 shell 自动执行的脚本中来建立持久性。以 bash 为例,大多数 GNU/Linux 系统的默认 shell,对手可能会将启动恶意二进制文件的命令添加到 /etc/profile/etc/profile.d 文件中。(引用: intezer-kaiji-malware)(引用: bencane blog bashrc) 这些文件通常需要 root 权限才能修改,并且每次系统上的任何 shell 启动时都会执行。对于用户级权限,对手可以将恶意命令插入 ~/.bash_profile~/.bash_login~/.profile,这些命令在用户打开命令行界面或远程连接时会被调用。(引用: anomali-rocke-tactics)(引用: Linux manual bash invocation) 由于系统仅执行列表顺序中的第一个现有文件,因此对手使用 ~/.bash_profile 来确保执行。对手还利用 ~/.bashrc 文件,如果连接是远程建立的或打开了额外的交互式 shell(例如命令行界面中的新选项卡),则会额外执行。(引用: Tsunami)(引用: anomali-rocke-tactics)(引用: anomali-linux-rabbit)(引用: Magento) 一些恶意软件在程序终止时触发执行,对手可以使用 ~/.bash_logout 文件在会话结束时执行恶意命令。 对于 macOS,此技术的功能类似,但可能利用 zsh,这是 macOS 10.15+ 的默认 shell。当打开 Terminal.app 时,应用程序会启动 zsh 登录 shell 和 zsh 交互式 shell。登录 shell 使用 /etc/profile/etc/zshenv/etc/zprofile/etc/zlogin 配置系统环境。(引用: ScriptingOSX zsh)(引用: PersistentJXA_leopitt)(引用: code_persistence_zsh)(引用: macOS MS office sandbox escape) 然后,登录 shell 使用 ~/.zprofile~/.zlogin 配置用户环境。交互式 shell 使用 ~/.zshrc 配置用户环境。退出时,执行 /etc/zlogout~/.zlogout。对于旧版程序,macOS 在启动时执行 /etc/bashrc