跳转至

操作系统安全

6.1 Windows 系统安全要点

账户安全检查清单

检查项 命令/方法 风险
空口令账户 net user 查看各账户状态 任何人可直接登录
弱口令 hydramedusa 爆破 暴力破解成功即获得权限
隐藏账户 账户名以 $ 结尾,控制面板不显示 攻击者维持权限的后门
UID 为 0 的非 root 注册表 SAM 中检查 后门账户拥有最高权限
远程登录审计 事件 ID 4624/4625 发现异常登录时间和来源

隐藏账户的发现方法: Windows 控制面板和 net user 命令不会显示以 $ 结尾的账户。需要在注册表 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users 中查看,或使用 wmic useraccount get name

NTFS 权限配置原则

目录/文件 推荐权限
Web 根目录 IIS 用户:读取和执行
上传目录 IIS 用户:读取(禁止执行)
日志目录 管理员:完全控制;其他用户:拒绝访问
配置文件 管理员:完全控制;IIS 用户:读取

Windows 日志审计重点

安全日志中的关键事件 ID:

事件 ID 含义 审计价值
4624 登录成功 检查异常时间、异常来源 IP 的登录
4625 登录失败 大量 4625 可能表示暴力破解
4672 特殊权限登录 检查哪些账户获得了管理员权限
4720 创建用户 发现攻击者创建的后门账户
4726 删除用户 攻击者清理痕迹
7045 创建服务 攻击者通过服务方式安装后门

登录类型对照:

类型 含义 关注场景
2 交互式(本地登录) 物理接触服务器
3 网络(SMB、共享) 内网横向移动
10 远程交互(RDP) 外部远程登录

实际案例: 审计安全日志发现凌晨 3 点有大量事件 ID 4625(登录失败),登录类型 10(RDP),来源 IP 为外网地址。随后在 4624 中发现一次成功登录,同一 IP。接着出现事件 ID 4720(创建用户 hack$)。这是一条清晰的入侵证据链:暴力破解 → 成功登录 → 创建后门账户。


6.2 Linux 系统安全要点

账户安全检查命令

# 查看所有用户,关注 UID 为 0 的非 root 账户
cat /etc/passwd | awk -F: '{print $1, $3}'

# 检查空口令(shadow 第二列为空)
awk -F: '$2=="" {print "空口令用户: " $1}' /etc/shadow

# 检查是否有多个 UID 为 0 的账户(后门)
awk -F: '$3==0 {print $1}' /etc/passwd

# 检查 sudo 权限过大的用户
cat /etc/sudoers | grep -v "^#" | grep -v "^$"

文件系统安全

SUID 和 SGID 文件是 Linux 提权的重要切入点。SUID 文件在执行时临时获得文件所有者的权限(通常是 root)。

# 查找所有 SUID 文件(权限位 4000)
find / -perm -4000 -type f 2>/dev/null

# 查找所有 SGID 文件(权限位 2000)
find / -perm -2000 -type f 2>/dev/null

# 查找全局可写目录
find / -type d -perm -002 2>/dev/null

# 查找全局可写文件
find / -type f -perm -002 2>/dev/null

SUID 提权案例: 某系统上 /usr/local/bin/backup 是 SUID 且所有者为 root,功能是备份指定目录。但该程序未对用户输入的路径做校验,存在缓冲区溢出。攻击者利用缓冲区溢出覆盖返回地址,跳转到 exec("/bin/sh") 的 gadget,获得 root shell。

Linux 日志审计

日志文件 路径 审计重点
认证日志 /var/log/auth.log(Debian)
/var/log/secure(RHEL/CentOS)
SSH 登录成功/失败、sudo 使用
系统日志 /var/log/syslog / /var/log/messages 系统级事件、服务异常
Web 访问日志 /var/log/nginx/access.log 异常请求、攻击痕迹
Web 错误日志 /var/log/nginx/error.log 500 错误、文件包含尝试
Cron 日志 /var/log/cron 异常定时任务
最后登录 /var/log/lastlog 所有用户的最后登录时间
登录历史 /var/log/wtmp last 命令查看
# 统计 SSH 登录失败最多的 IP
grep "Failed password" /var/log/auth.log | \
  awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -20

# 查找异常的命令执行(wget、curl、nc 等)
grep -E "wget|curl|python|nc -e|bash -i" /var/log/auth.log


总结

  • 6.1 Windows 系统安全要点
  • 6.2 Linux 系统安全要点