「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》
最近老是有粉丝问我,被黑客攻击了,一定要拔网线吗?还有没有别的方法?
按理说,如果条件允许,一定是先拔网线,防止横向传播。
但很多时候并不能拔网线,比如云服务器这种,网线咱也碰不到呀。
实际上,遇到黑客攻击,并非只有拔网线这一条路,黑客也是人,只要他来攻击,就一定会留下蛛丝马迹。
接下来,我们从7个方向入手,讲解一下分析思路,了解黑客的攻击路径,甚至反制。
- 一、账户分析
- 1、排查可疑账户
- 2、登录情况
- 3、历史命令
- 二、日志分析
- 三、进程分析
- 1、查看进程
- 2、查看进程执行文件
- 四、网络连接
- 1、查看网络链接状态
- 2、威胁情报分析
- 五、启动项
- 1、开机启动文件
- 2、开机启动命令
- 3、环境变量配置文件
- 六、计划任务
- 七、敏感目录文件
- 1、近期被修改的文件
- 2、敏感目录
一、账户分析
/erc/passwd
文件存放用户信息。
/bin/bash 表示账户状态为可登录;/sbin/nologin 表示用户状态为不可登录。
/etc/group
文件存放用户组信息
1、排查可疑账户
重点排查id大于1000的用户(新建的用户,id会大于1000,系统用户均小于500)。
awk -F: '($2=="")' /etc/shadow
查找空口令账号
awk -F: '($3==0)' /etc/passwd
或 grep "0:0" /etc/passwd
查找UID为0的超级权限账号,确保只有root。
grep "/bin/bash" /etc/passwd
查找可登录的账号
2、登录情况
who -b
上一次启动时间
w
查看登录的用户(登录时间、登录IP、正在执行的程序)。
lastb
查看用户失败信息。
lastlog
查看所有用户最后登录的信息。
last
查看最近的登录信息(包含系统开关机)
3、历史命令
history
查看历史命令。( 会被 history -c
清除)。
/root/.bash_history
文件保存root用户的历史命令
/home/user001/.bash_history
文件保存普通用户的历史命令
history 的历史命令会被 history -c
清除,而 bash_history 文件中的历史命令需要删除文件才能清除。
重点查看可疑历史命令,比如:wget(远程下载),ssh(连接内网),tar zip(压缩打包)
针对重装带后门的SSH服务(内置一个账户,不在系统中显示),可以检查修改修改时间,或者 ssh -V
查看版本。
二、日志分析
Linux系统日志默认放在 /var/log/
- /var/log/cron 计划任务日志。
- /var/log/dmesg 开机自检日志(dmesg命令查看)。
- /var/log/maillog 邮件日志。
- /var/log/messages 系统日志(系统出现问题时,重点查看此日志)。
- /var/log/secure 应用的登录信息及输入的账号密码。
grep "Accepted" /var/log/secure
过滤登录成功的日志
grep "Failed" /var/log/secure
过滤登录失败的日志
/var/log/apache2/access.log
Apache访问日志
三、进程分析
重点关注那些结束后会重新启动的进程,按照启动项的步骤分析它重启的方式。
1、查看进程
ps -ef
查看所有进程
ps -aux
查看所有进程,同时显示CPU和内存的使用情况。
top
查看CPU占用特别高(80%以上)的进程,可能是挖矿或业务高峰。
kill -9 PID
根据PID结束进程。
2、查看进程执行文件
ls0f -p 1546
查看PID为1546的进程打开的文件,第三行是进程对应的执行文件。
ll /proc/1546/exe
查看PID为1546的进程对应的执行程序。
lsof -i:22
查看22端口对应的进程。
四、网络连接
检查可疑的网络连接,可疑IP、域名、文件可疑拿到威胁情报平台去分析。
1、查看网络链接状态
netstat -anopt
检查网络连接状态,LISTEN表示监听状态(等待连接);ESTABLISHED表示打开的连接。
如果已经知道恶意IP,可以过滤查看与恶意IP通信的网络连接 netstat -anopt | grep 192.168.31.28
。
如果只知道恶意域名,可以修改 /etc/hosts
文件,将恶意域名重定向到其他任意IP,然后再过滤跟这个IP通信的网络连接。
2、威胁情报分析
威胁情报平台可以查询域名、IP、文件的可信度,存在攻击痕迹就立即封禁。
奇安信威胁情报:https://ti.qianxin.com/
微步在线:https://x.threatbook.com/
VirusTotal:https://www.virustotal.com/gui/home/upload
安恒威胁情报:https://ti.dbappsecurity.com.cn/
深信服威胁情报:https://ti.sangfor.com.cn/analysis-platform
VenusEye威胁情报:https://www.venuseye.com.cn/
360威胁情报:https://ti.360.net/#/homepage
五、启动项
为了防止被控机器失联,很多恶意程序会将自己放到开机启动项中。
1、开机启动文件
检查是否有异常的自启动文件,同时注意文件内容是否被篡改,插入恶意指令。
1)/etc/rc.local
最后一行是脚本,开机引导期间执行。
/etc/rc.local
是 /etc/rc.d/rc.local
的软连接,两个文件作用相同。
2)/etc/init.d/
目录下有很多系统服务的启动脚本,在系统启动(引导完成)后执行。
/etc/init.d/
是 /etc/rc.d/init.d/
的软连接,两个文件作用相同。
Ubuntu没有 /etc/rc.d/init.d
这个目录,为了保持同一种服务在CentOS和Ubuntu使用的统一性,将服务脚本都放在 /etc/init.d
目录下。
3)/etc/rc*.d
检查其他开机启动目录中,服务启动脚本是否被篡改。
2、开机启动命令
systemctl list-unit-files
查看服务状态
systemctl list-unit-files | grep firewalld
查看指定服务状态
systemctl stop firewalld.service
停止服务
systemctl disable firewalld.service
禁止开机自启动
查看服务启动状态,enabled表示能够开机自启动;disabled表示不能开机自启动。
查看指定服务是否开机自启动,并关闭开机自启动。
3、环境变量配置文件
这些文件用来配置环境变量和启动程序,开机登录用户或者切换用户时触发。
- /etc/bashrc
- /etc/profile
- ~/.bashrc
- ~/.bash_profile
六、计划任务
crontab -l
查看当前用户的计划任务。
crontab -l -u root
查看指定用户的计划任务。
/etc/crontab
保存定时任务
/etc/anacrontab
保存异步定时任务
/var/spool/cron/
目录存放每个用户的的定时任务。
/etc/cron.d
目录存放需要执行的定时任务文件。
/etc/cron.hourly/
每小时执行一次的任务
/etc/cron.daily/
每天执行一次的任务
/etc/cron.weekly/
每周执行一次的任务
/etc/cron.monthly/
每月执行一次的任务
七、敏感目录文件
webshell通常会包含恶意函数,比如:
- PHP:eval()、system()、assert()
- JSP:getRunTime()、FileOutputStream()
- ASP:eval()、execute()、ExecuteGlobal()
寻找可疑文件,并检查文件中是否包含这类恶意函数,从而确定它是不是webshell。
1、近期被修改的文件
find /root/ -ctime -2
查找/root/目录下,两天内新创建的文件。
find /root/ -mtime -2
查找/root/目录下,两天内被修改过的文件。
stat text.txt
查看文件的详细信息,重点看访问/修改/时间。
ls -alt
按照文件修改时间排序
2、敏感目录
/tmp/ 临时目录,普通用户对其目录内的文件都具有读写的权限,通常用于提权。
/usr/bin/
/usr/sbin/
/etc/ssh/
总结:
应急响应思路大致分为三个部分:
- 找到webshell
- 确定攻击IP
- 回溯攻击操作并梳理攻击过程。