# 信息收集

# 获取内核,操作系统和设备信息

  • 版本信息

    • uname -a 所有版本
    • uname -r 内核版本信息
    • uname -n 系统主机名字
    • uname -m Linux 内核架构
  • 内核信息 cat /proc/version

  • CPU 信息 cat /proc/cpuinfo

  • 发布信息

    • cat /etc/*-release
    • cat /etc/issue
  • 主机名 hostname

  • 文件系统 df -a

  • 内核日志 dmesg / /var/log/dmesg

# 用户和组

  • 列出系统所有用户 cat /etc/passwd

  • 列出系统所有组 cat /etc/group

  • 列出所有用户 hash(root) cat /etc/shadow

  • 用户

    • 查询用户的基本信息 finger
    • 当前登录的用户 users who -a /var/log/utmp
    • 查询无密码用户 grep 'x:0:' /etc/passwd
  • 目前登录的用户 w

  • 登入过的用户信息 last / /var/log/wtmp

  • 显示系统中所有用户最近一次登录信息 lastlog / /var/log/lastlog

  • 登录成功日志 /var/log/secure

  • 登录失败日志 /var/log/faillog

  • 查看特权用户 grep :0 /etc/passwd

  • 查看 passwd 最后修改时间 ls -l /etc/passwd

  • 查看是否存在空口令用户 awk -F: 'length($2)==0 {print $1}' /etc/shadow

  • 查看远程登录的账号 awk '/\$1|\$6/{print $1}' /etc/shadow

  • 查看具有 sudo 权限的用户

    • cat /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"

# 用户和权限信息

  • 当前用户 whoami
  • 当前用户信息 id
  • 可以使用 sudo 提升到 root 的用户(root) cat /etc/sudoers
  • 列出目前用户可执行与无法执行的指令 sudo -l

# 环境信息

  • 打印系统环境信息 env
  • 打印系统环境信息 set
  • 环境变量中的路径信息 echo $PATH
  • 打印历史命令 history / ~/.bash_history
  • 显示当前路径 pwd
  • 显示默认系统遍历 cat /etc/profile
  • 显示可用的 shell cat /etc/shells

# 进程信息

  • 查看进程信息 ps aux
  • 资源占有情况 top -c
  • 查看进程关联文件 lsof -c $PID
  • 完整命令行信息 /proc/$PID/cmdline
  • 进程的命令名 /proc/$PID/comm
  • 进程当前工作目录的符号链接 /proc/$PID/cwd
  • 运行程序的符号链接 /proc/$PID/exe
  • 进程的环境变量 /proc/$PID/environ
  • 进程打开文件的情况 /proc/$PID/fd

# 服务信息

  • 由 inetd 管理的服务列表 cat /etc/inetd.conf
  • 由 xinetd 管理的服务列表 cat /etc/xinetd.conf
  • nfs 服务器的配置 cat /etc/exports
  • 邮件信息 /var/log/mailog
  • ssh 配置 sshd_config

# 计划任务

  • 显示指定用户的计划作业(root) crontab -l -u %user%
  • 计划任务
    • /var/spool/cron/*
    • /var/spool/anacron/*
    • /etc/crontab
    • /etc/anacrontab
    • /etc/cron.*
    • /etc/anacrontab
  • 开机启动项
    • /etc/rc.d/init.d/

# 网络、路由和通信

  • 列出网络接口信息 /sbin/ifconfig -a / ip addr show
  • 列出网络接口信息 cat /etc/network/interfaces
  • 查看系统 arp 表 arp -a
  • 打印路由信息 route / ip ro show
  • 查看 dns 配置信息 cat /etc/resolv.conf
  • 打印本地端口开放信息 netstat -an
  • 列出 iptable 的配置规则 iptables -L
  • 查看端口服务映射 cat /etc/services
  • Hostname hostname -f
  • 查看进程端口情况 netstat -anltp | grep $PID

# 已安装程序

  • rpm -qa --last Redhat
  • yum list | grep installed CentOS
  • ls -l /etc/yum.repos.d/
  • dpkg -l Debian
  • cat /etc/apt/sources.list Debian APT
  • pkg_info xBSD
  • pkginfo Solaris
  • pacman -Q Arch Linux
  • emerge Gentoo

# 文件

  • 最近五天的文件 find / -ctime +1 -ctime -5
  • 文件系统细节 debugfs

# 公私钥信息

  • ~/.ssh
  • /etc/ssh

# 日志

  • /var/log/boot.log
  • /var/log/cron
  • /var/log/faillog
  • /var/log/lastlog
  • /var/log/messages
  • /var/log/secure
  • /var/log/syslog
  • /var/log/syslog
  • /var/log/wtmp
  • /var/log/wtmp
  • /var/run/utmp

# 虚拟环境检测

  • lsmod | grep -i "vboxsf\|vboxguest"
  • lsmod | grep -i "vmw_baloon\|vmxnet"
  • lsmod | grep -i "xen-vbd\|xen-vnif"
  • lsmod | grep -i "virtio_pci\|virtio_net"
  • lsmod | grep -i "hv_vmbus\|hv_blkvsc\|hv_netvsc\|hv_utils\|hv_storvsc"

# 容器内信息收集

  • capsh --print
  • cat /proc/1/cgroup
  • env | grep KUBE
  • ls -l .dockerenv
  • ls -l /run/secrets/Kubernetes.io/
  • mount
  • ps aux

# 持久化

# 权限提升

  • 内核漏洞利用
  • 攻击有 root 权限的服务
  • 利用第三方服务提权
  • 通过有 SUID 属性的可执行文件
    • 查找可能提权的可执行文件
    • find / -perm +4000 -ls
    • find / -perm -u=s -type f 2>/dev/null
    • find / -user root -perm -4000 -print 2>/dev/null
    • find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null
  • 利用可用的 root 权限
    • sudo -l
  • 利用误配置的 crontab 任务

# 自启动

  • /etc/init.d
  • /etc/rc.d/rc.local
  • ~/.bashrc
  • ~/.zshrc

# 后门

  • ssh 后门
    • alias ssh='strace -o /tmp/.ssh.log -e read,write,connect -s 2048 ssh'
    • 后门账户
  • 常见应用
    • ICMP
    • DNS
  • icmp 后门
  • 后门端口复用
  • . 开头隐藏文件
  • rootkit

# 痕迹清理

# 历史命令

  • unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null;
  • kill -9 $$ kill history
  • history -c
  • HISTSIZE=0 中设置 HISTSIZE=0

# 清除 / 修改日志文件

  • /var/log/btmp
  • /var/log/lastlog
  • /var/log/wtmp
  • /var/log/utmp
  • /var/log/secure
  • /var/log/message

# 登录痕迹

  • 删除 ~/.ssh/known_hosts 中记录
  • 修改文件时间戳
    • touch –r
  • 删除 tmp 目录临时文件

# 操作痕迹

  • vim 不记录历史命令 :set history=0
  • ssh 登录痕迹
    • 无痕登录 ssh -T user@host /bin/bash -i

# 覆写文件

  • shred
  • dd
  • wipe

# 难点

  • 攻击和入侵很难完全删除痕迹,没有日志记录也是一种特征
  • 即使删除本地日志,在网络设备、安全设备、集中化日志系统中仍有记录
  • 留存的后门包含攻击者的信息
  • 使用的代理或跳板可能会被反向入侵

# 注意

  • 在操作前检查是否有用户在线
  • 删除文件使用磁盘覆写的功能删除
  • 尽量和攻击前状态保持一致

# 参考链接

  • Linux 入侵痕迹清理技巧