下载地址:https://github.com/wsfengfan/SecurityTraceability/
目录
一、 window系统溯源
1、 检查系统账号安全
1.1查看服务器是否存在可疑账号、新增账号
1.2 查看服务器是否存在隐藏账号、克隆账号
1.3 查看window日志,检查登入时间,是否存在暴力破解等行为
2、 检查异常端口、进程
2.1检查端口连接情况,查看是否有可疑IP外连。
2.2查看进程
3、 检查启动项、计划任务、服务
3.1检查启动项
3.2查看计划任务
3.3排查服务自启动
4、 检查系统相关信息
4.1查看系统补丁信息
4.2查看近期创建修改的文件
二、 Linux系统溯源
1、 系统排查
1.1 系统信息
1.2用户账号
1.3启动项
1.4定时任务
2、 服务排查
2.1进程查看
2.2线程查看
2.3进程查杀
2.4调试分析
2.5查看服务
3、 网络排查
3.1分析可疑端口、可疑IP、可疑PID及程序进程
4、 文件排查
4.1find命令的使用
4.2敏感目录
4.3基于时间点查找
三、日志分析
1、window日志分析
1.1安全日志分析
2、Linux日志分析
2.1分析secure日志
2.2分析应用日志
四、文件恢复
1、 Window
1.1WinFR
1.2Windows File Recovery
2、 Linux
2.1losf命令
2.2extundelete
2.3testdisk
五、溯源到人
1、IP溯源
2、ID溯源
3、手机号溯源
4、EMail溯源
5、域名溯源
6、木马分析(云沙箱)
Linux系统溯源排查
1、系统排查
1.1 系统信息
$ lscpu #查看CPU信息
$ uname -a #操作系统信息
$ cat /proc/version #系统版本信息
$ cat /etc/redhat-release #查看系统发行版
$ lsmod #查看模块信息
$ lsblk #列出块设备信息
$ ifconfig eth0 | grep -w inet #显示网卡IP信息
$ curl cip.cc #查看主机公网IP信息
$ hostname #查看系统主机名称
$ cat /etc/resolv.conf #DNS配置查看
1.2用户账号
(1) 查看系统用户信息
$ cat /etc/passwd
用户名:密码加密:用户ID:用户组ID:注释:用户主目录:默认登录shell
最后一列:/bin/bash表示用户状态可登录; /sbin/nologin表示账户状态不可登录
$ history 查看用户历史操作命令
(2) 查询超级权限账户: UID为0
$ awk -F: '{if($3==0)print $1}' /etc/passwd
(3) 查看可登录账户
$ grep '/bin/bash' /etc/passwd
(4) 查看空口令账户
$ awk -F: 'length($2)==0 {print $1}' /etc/shadow
(5) 登录信息查看
$ lastlog | more #查看用户最后登录信息
$ lastb | more #显示用户错误的登录信息
$ last | more #查看用户最近登录信息
$ uptime #查看登陆多久、多少用户,负载
$ who #查看当前登录用户(tty本地登陆 pts远程登录)
$ w #查看系统信息,想知道某一时刻用户的行为
/var/log/wtmp: 存储登录成功的信息
/var/log/btmp: 存储登录失败的信息
/var/log/utmp: 存储当前正在登录的信息
(6) 查看除root账号外其他帐号是否存在sudo权限
$ more /etc/sudoers | grep -v "^#|^$" | grep "ALL=(ALL)"
(7) 禁用或删除多余及可疑的帐号
$ usermod -L user #禁用帐号,帐号无法登录,/etc/shadow第二栏为!开头
$ userdel user #删除user用户
$ userdel -r user #将删除user用户,并且将/home目录下的user目录一并删除
1.3启动项
$ cat /etc/init.d/rc.local
$ cat /etc/rc.local
$ ls -alt /etc/init.d/ | head
1.4定时任务
crontab -u <-l, -r, -e>
-u 指定一个用户
-l 列出某个用户的任务计划
-r 删除某个用户的任务
-e 编辑某个用户的任务
$ crontab -u root -l # 列出root用户的任务计划
2、服务排查
2.1进程查看
$ ps -elf | grep pid # 以长格式显示系统中的进程信息
$ ps -aux --sort -pcpu | less # 根据cpu使用率进行排序
$ ps -aux --sort -pmem | less # 根据内存使用来升序排序
$ ps -axjf # 以树形结构显示进程
$ top 动态查看进程状态, 可分析CPU占用较高的进程, 排查挖矿木马
<查看进程打开的文件>
$ lsof -p pid # 查看指定进程ID已打开的内容
$ lsof -i # 显示所有连接
$ lsof -i:port # 查看与指定端口相关的网络信息
$ lsof -i@ip # 查看与指定IP相关的网络信息
$ lsof -i -sTCP:LISTEN # 找出正等待连接的端口
$ lsof -i | grep -i ESTABLISHED # 找出已经建立的连接
$ lsof -u user # 使用-u显示指定用户打开哪些文件
$ lsof -u ^root # 查看除指定用户以外的其它所有用户所做的事情
$ lsof -c command # 查看指定的命令正在使用的文件和网络连接
$ lsof | grep deleted # 查看被删除的文件信息
$ kill -9 `lsof -t -u user` # 杀死指定用户运行的所有进程
$ lsof -u user -i @ip # 显示用户user连接到指定IP所做的一切
2.2线程查看
<根据pid查看由进程起的线程>
$ ps H -T -p pid
$ ps -Lf pid
$ top -H -p pid -H 选项可以显示线程
$ pstree -acU 推荐,非常全面展示进程与线程间的关系
$ ps -eLFa # 查看全部线程
2.3进程查杀
<kill进程>
$ kill -9 pid #强制终止进程
$ killall name #依据进程名称杀死进程
$ killall -u user #杀死指定用户的进程
$ kill -9 -pid # 如果进程起子进程,可以使用此命令,这里pid前有个减号,表示杀掉这个进程组
$ pkill name #杀死指定进程名的进程
2.4调试分析
<跟踪进程执行时的系统调用和所接收的信号,可跟踪用户进程与 Linux内核之间的交互>
$ strace -p `pidof AliYunDun` # 依据pid跟踪进程正在进行的系统调用
$ strace -o trace.log ls testdir/ #将输出记录到文件中
$ strace -v ls testdir #在每个系统调用中提供附加信息
$ strace -f ls testdir #对当前正在跟踪的进程创建的任何子进程进行跟踪
$ strace -e open ls testdir #使用-e标志跟上系统调用的名称
$ strace -e write,getdents ls testdir #查看多个系统调用
$ strace -t ls testdir/ #查看所有的系统调用的时间戳
$ strace -r ls testdir/ #显示执行每个系统调用所花费的时间
<显示每个进程的栈跟踪>
$ pstack pid
2.5查看服务
$ chkconfig --list #查看系统运行的服务
# 0-6表示等级
1 单用户模式
2 无网络连接的多用户命令模式
3 有网络连接的多用户命令模式
4 表示不可用
5 带图形界面的多用户模式
6 重新启动
$ service --status-all | grep running | more #显示正在运行的服务
$ systemctl list-unit-files | grep enabled | more #列出 systemd 下正在运行服务
3、网络排查
3.1分析可疑端口、可疑IP、可疑PID及程序进程
$ sudo netstat -ltpe | more # 查看监听中的网络连接并显示进程ID、进程所有者用户名
$ sudo netstat -antp | grep "ESTABLISHED'' # 查看正在通信中的连接信息
$ sudo netstat -antpe # -n 和 -e 选项连用,显示进程所有者的用户ID 号
$ netstat -ts # 打印出tcp协议下的收发包数量等统计数据
$ watch -d -n0 "netstat -atnp | grep "ESTA" # 监视active状态的连接
$ ss -plat # 检查哪些进程在监听端口
<网络占用查看>
# Debian/Ubuntu
apt-get install nethogs
# Centos/RHEL
yum -y install epel-release
yum -y install nethogs
4、文件排查
4.1find命令的使用
基础使用
find / -name evil.sh
忽略大小写
find / -iname evil.sh
查找时排除某个/类文件
find / -name *evil* ! -name *.log
查找时排除目录
find / -name *evil* -path "/root/home/aaa" -prune
查找目录
find / -type d -name eval
<根据文件大小搜索>
$ find / -size -1223124c -size 1223122c -exec ls -id {} ; #搜索1223123大小的文件
$ find /usr/bin -type f -size 2k # 查找大小等于2KB的文件
$ find / -size 10MB -20M # 寻找 10M到20M之间的文件
<特殊文件匹配>
$ find /var/www/ -name "*.php" |xargs egrep 'assert|phpspy|c99sh|milw0rm|eval|(gunerpress|(base64_decoolcode|spider_bc|shell_exec|passthru|($_POST[|eval (str_rot13|.chr(|${"_P|eval($_R|file_put_contents(.*$_|base64_decode'
匹配webshell
$ find /tmp -perm 777 # 打印出权限为777的文件, -perm选项指明find应该只匹配具有特定权限值的文件
$ find / -type f -user root -print # 打印出用户root拥有的所有文件, 选项-user USER找出由某个特定用户所拥有的文件
$ find / -type f -perm -04000 -ls -uid 0 2>/dev/null # 查找具有SUID位文件
$ find / -perm -u=s -type f 2>/dev/null
$ find / -perm -g=s -type f 2>/dev/null # 查看具有SGID位文件
4.2敏感目录
(1) 临时目录/tmp、/var/tmp、/dev/shm下的文件,目录权限是1777,容易被上传木马文件
(2) 命令目录/usr/bin、/usr/sbin等下的二进制文件容易被替换,替换后可下载busybox使用被替换命令
$ ls -alt /usr/bin | head #按照最新修改时间显示,排查可疑文件
(3) ~/.ssh、/etc/ssh 经常作为一些后门配置的路径,需重点排查
$ cat ~/.ssh/authorized_keys #检查公钥是存在否异常写入
4.3基于时间点查找
<列出攻击日志内变动的文件,排查恶意软件>
$ ls --full-time ./ | sed -n '/2019-01-01/p' #查找当前文件夹下的某个日期产生的文件
$ find / -ctime 0 -name ".sh" #查找一天内新增的sh文件
-type b/c/d/f/l/p: 查找快设备、字符设备、目录、普通文件、符号链接、管道
-mtime -n n # 按文件更改时间来查找文件,-n 指 n 天以内, n 指 n 天前
-atime -n n # 按文件访问时间来查找文件,-n 指 n 天以内, n 指 n 天前
-ctime -n n # 按文件创建时间来查找文件,-n 指 n 天以内, n 指 n 天前
$ find /tmp -type f -amin -10 -print #打印出10分钟内访问的所有文件