应急响应流程总结
Windows
开机启动文件检测
有些病毒木马喜欢藏在系统文件里,开机后会随着系统文件的启动而自动运行木马程序。
1、查看启动菜单:
C:\Users\leo\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

2、运行执行msconfig命令


3、查看注册表自启动配置
Win10自启动注册表如下:
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

win7自启动注册表如下:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

4、检查服务自启动
在运行输入services.msc
查看服务启动状态
Temp临时文件异常
有些PE(exe,dll,sys)文件会隐藏在Temp文件目录里,还有一些比较大的TMP文件,这些都是比较可疑的,需将这些可疑的文件发到检测病毒的网站进行检测
Temp文件目录:
C:\Users\leo\AppData\Local\Temp
可以在运行里搜索%temp%
直接跳转到temp目录
浏览器信息分析
可以通过分析浏览器里的一些信息来判断服务器是否被黑客入侵了
1、分析浏览器的浏览记录
可以使用browserhistoryview工具进行查看
2、分析浏览器的下载记录
可以使用browserdownloadview工具进行查看

3、分析浏览器的cookie信息
可以使用IEcookieview工具进行查看

文件时间属性分析
文件的创建时间永远是早于或等于修改时间,如果修改时间早于创建时间,就说明该文件十分可疑,因为webshell管理工具是可以修改文件的修改时间
文件打开时间分析
Recent目录里含有最近打开过的文件,看看此目录下是否有可疑的文件,Recent目录地址如下
在运行输入%UserProfile%\Recent
来打开
C:\Users\leo\Recent

在cmd使用find
命令可以快速查询到含有指定内容的文件

分析可疑进程
如果计算机被种植了木马,那么木马肯定会与外部进行通信,每一次通信都会有不同的端口,可以通过网络连接状态来查找到木马的程序,以下是对进程操作的cmd命令。
netstat -ano | find "ESTABLISHED"
查看已建立的网络连接,可以通过非寻常的端口来确认可疑程序,443,80端口大部分都为正常,特别要注意那些不寻常的端口

tasklist /SVC | find "12760"
列出指定pid的任务进程,/svc是列出此进程调用的服务
taskkill /pid 12760 /F /T
强制终止指定pid进程

分析Windows计划任务
黑客会经常给受害机设置计划任务来维持木马的运行
创建任务计划的命令如下:
schtasks /create /tn test /sc DAILY /st 23:18 /tr C:\\beacon.exe /F


通过任务计划程序(可视化界面)查看


检查账号安全
分析服务器账号
检查服务器是否存在弱口令,远程端口是否对外开放
查看服务器是否存在可疑账号以及新增账号,可以通过cmd命令:lusrmgr.msc
进行查看
分析日志,打开时间查看器,可以在运行输入eventvwr.msc
打开时间查看器,当然也可以使用微软的LogParser进行分析日志
分析隐藏账户
在计算机建立隐藏账户来维持对其的控制权限,使用net user
命令也查询不到隐藏账户,以下是建立隐藏账户的cmd命令,你可以在用户管理界面将隐藏账户进行删除或者修改其权限
net user test$ qQ123456 /add //添加隐藏账户test
net user localgroup administrators test$ /add //将test账户权限提升至管理员

黑客还可以利用注册表新建账户,这种更难被察觉到,以下利用hideadmin工具针对注册表创建隐藏用户。

HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users
为注册表用户所在目录
注意:要进入此目录需要给SAM目录给予权限

进入目录后寻找隐藏账户并且将其删掉,注意:需删除两个目录

分析恶意进程
使用process exploer工具可以对任务管理器进程进行分析,可以直接将可疑进程发送到病毒检测网站进行检测,随后进行删除操作。


检查系统更新与补丁
执行cmd命令systeminfo
查看系统已安装补丁,也可以查看控制面板程序的已安装更新面板来查看补丁。win10直接在设置里的更新与安全进行查看更新。


Windows审核策略
本地审核策略
若系统出现问题,即可查询到日志信息或追踪入侵者。

Windows日志筛选
通过筛选功能可以更方便查询到指定的事件内容,不同的事件ID对应不同的事件操作
登录成功
登录失败
注销成功
用户启动的注销
超级用户(管理员)登录


使用管理员账户远程登录主机时,主机会出现以下的事件ID
凭据验证
凭据登录
登录成功
超级用户登录

在入侵提权过程中,黑客一般都会利用net user或者net localgroup语句创建用户,日志记录的事件ID为:4732,4722,4724
添加用户
重置用户密码
启用用户账号


映像劫持
简单来说就是打开了程序A,而却运行了程序B
利用修改注册表的方式实现映像劫持, 下面列举两种不同的劫持姿势
劫持步骤
1、旧方式劫持
此处演示的案例是五次shift键触发后门,Optionssethc.exe为五次shift键触发程序
按五次shift键后并不会执行原程序,而是会执行我们设置的后门程序calc.exe
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\Optionssethc.exe" /v debugger /t REG_SZ /d "c:\windows\system32\calc.exe"

2、新方式劫持
按五次shift键后会执行原程序, 原程序关闭后执行后门程序calc.exe
将MonitorProcess 的值修改成后门程序的地址
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\Optionssethc.exe" /v GlobalFlag /t REG_DWORD /d 512
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /t REG_SZ /d "c:\windows\system32\calc.exe"
劫持的应急
查看以下两个注册表目录,看看有没有可疑的东西
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit
如下图所示, 这种目录就是可疑目录, 可直接删除IFEO(Image File Execution Options)项或者设置管理员不可修改


分析系统日志,日志ID为3000和3001,即有可能存在后门威胁。
定义恶意进程
使用OpenArk来定位CS恶意进程,首先通过网络流量来识别
LINUX
分析敏感文件或目录
TMP临时目录
tmp目录是一个放置临时文件的目录,普通用户对其目录内的文件都具有读写的权限,因此tmp目录通常用于提权

开机自启动文件分析
查看自启动文件:ls -alh /etc/init.d/
(-h显示文件大小)



查询敏感文件
以下是常用到的find命令:
查询一些敏感的文件后缀名, 例如php
, aspx
, jsp
等webshell常用后缀
find ./ mtime 0 name "*.php" //查找24小时内修改过的指定文件 mtime(修改时间) 0表示24小时
find ./ ctime -2 name "*.php" //查找72小时内生成的指定文件 ctime(创建时间)
find ./ iname "*.php*" -perm 777 //查找权限为777的指定文件 iname表示不区分大小写 perm表示权限

分析可疑进程
分析网络连接
常用命令:
netstat -pantl
,列出TCP相关的服务连接。
netstat -pantl | grep "ESTABLISHED"
,查看已建立的TCP服务连接。
以下是netstat的使用参数
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
对进程文件分析
以下是常用到的linux命令:
ps -aux
:列出所有的进程ps -aux | grep pid
:列出指定pid的进程lsof -i:端口号
:列出指定端口的进程kill -9 pid
: 关闭指定pid进程


分析异常登录
在linux的操作都会被记录在系统日志中,可以通过查询日志信息判断是否有异常登录
last -i | grep -v 0.0.0.0
: 查询非本地登录的日志信息,-i表示IP

w
命令 : 实时查看登录日志

分析异常用户
提权root用户实操
新建用户,随后修改用户uid为0, 以此获取root权限
useradd test
passwd test {输入密码}
vim /etc/passwd //修改用户uid为0


排查异常用户
grep "0:0" /etc/passwd
: 查找root权限用户

ls -l /etc/passwd
: 查看用户文件最近修改时间

awk -F: '$3==0 {print $1}' /etc/passwd
: 查看root权限用户


awk -F: '$2=="!" {print $1}' /etc/shadow
: 查看空密码用户

禁用以及删除可疑账号
usermod -L user //禁用帐号,帐号无法登录
userdel user //删除
userdel -r user //将删除user用户,并且将/home目录下的user目录一同删去
分析历史命令
linux系统之前执行的命令会保存在/root/.bash_history文件中,以下是查看history的命令。
cat /root/.bash_history

history

**常见的可疑历史命令:**wegt(远程下载)、ssh(连接内网)、tar zip(压缩打包)
特别要注意, 有些黑客还会修改你的系统命令,例如把netstat命令给改成别的了,从而导致无法使用此命令
分析计划任务
crontab命令排查计划任务
crontab -l //列出计划任务
crontab -r //删除计划任务
crontab -e //编辑计划任务


anacron命令实现异步定时任务调度
vi /etc/anacrontab
@daily 10 example.daily /bin/bash /home/shell.sh //每天机器开机十分钟之后运行shell.h。
排查定时任务
使用more命令查询以下目录,重点查询/etc/cron.d/*
目录
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*
分析开机自启动项
设置开机自启动
ls /etc/init.d/
查看开机自启动文件
update-rc.d apache2 enable
设置apache2服务开机自启动
通过创建软连接设置自启动,将脚本文件放在/etc/init.d目录下,然后在/etc/rc.d/rc*.d
中建立软连接即可。
S100ssh是sshd脚本的软连接,S表示运行级别加载时自启动,K则表示加载时需关闭
ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh
ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/K100ssh
关闭开机自启动
update-rc.d apache2 disable
取消apache2服务开机自启动
排查启动项文件
more /etc/rc.local
more /etc/rc.d/rc[0~6].d
ls -l /etc/rc.d/rc3.d/
分析服务自启动项
修改服务自启动
1、使用chkconfig命令(红帽linux)
命令参数:chkconfig [--level 运行级别][独立服务名][on|off]
chkconfig –level 2345 httpd on //自动启动http服务
chkconfig httpd on //若没填写level参数,默认值为2345
2、修改/etc/rc.local文件,加入 /etc/init.d/httpd start

3、使用ntsysv
命令管理自启动,该命令适用于红帽linux
入侵排查
chkconfig --list //查看服务自启动状态,可以看到所有的RPM包安装的服务
ps aux | grep crond //查看当前服务
查看3与5级别下的启动项
chkconfig --list | grep "3:启用|5:启用" //中文环境下
chkconfig --list | grep "3:on|5:on" //英文环境下
$PATH变量异常
$PATH就是环境变量,分析是否有异常环境变量
echo $PATH
: 输出环境变量目录

export PATH=$PATH:/usr/lol/theshy
添加环境变量,临时有效,重启无效

vim /etc/profile
,随后添加export PATH=$PATH:/usr/lol/faker
,再source /etc/profile
。这个是永久修改$PATH变量的方法


系统日志分析
日志存放位置
日志默认存放位置:/var/log/
查看日志配置:more /etc/rsyslog.conf
/var/log/cron
记录定时任务日志
/var/log/cups
记录打印信息日志
/var/log/mailog
记录邮件信息日志
/var/log/message
记录系统重要信息日志,若出问题,首先检查该日志
/var/log/btmp
记录错误信息日志,二进制文件,要用lastb命令查看
/var/log/lastlog
记录所有用户最后一次登录时间日志,二进制文件
/var/log/wtmp
记录所有用户的登录、注销信息,同时记录系统的启动、重启等事件,是个二进制文件
/var/log/utmp
记录当前登录用户信息,会随着用户注销而不断变化,只能通过w,who,users命令查看
日志分析技巧
==注意:Centos系统登录日志记录在/var/log/secure,Ubuntu系统登录日志记录在/var/log/auth.log。==
1、分析爆破root账户的ip相关信息
查看爆破root用户的IP数量
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
查看爆破的IP以及时间
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c
查看爆破所用到的用户名字典
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
2、分析登录成功的ip
查看所有的登录成功的ip
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
查看登录成功的ip,用户及日期
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
3、查看用户操作的日志
grep "useradd" /var/log/secure //查看“useradd”命令的操作日志
grep "userdel" /var/log/secure //查看“userdel”命令的操作日志
rkhunter工具使用
rkhunter工具会自动为我们排查linux系统的安全隐患
安装工具:apt-get install rkhunter
常用命令:rkhunter --check --sk
//--sk表示自动补全


安全加固
阻止非root用户登录
touch /etc/nologin
给密码文件设置权限
chmod命令的使用可以看我linux专栏的文章,这里不过多解释
chmod 644 /etc/passwd
chmod 600 /etc/shadow
chmod 644 /etc/group
修改文件默认权限
umask=027
给日志或其他重要文件加固
chattr +a /var/log/messages //设置此文件只能追加数据
chattr +i /var/log/messages.* //设置文件不能被修改且删除
chattr +i /etc/shadow
chattr +i /etc/passwd
chattr +i /etc/group
屏蔽banner信息
vi /etc/ssh/sshd_config 将banner设置成NONE

增强秘钥
authconfig --passalgo=sha512 --update //启用 SHA512 替代 MD5加密
限制登录次数
auth required pam_tally2.so deny=3 unlock_time=5 even_deny_root root_unlock_time=120
//登录三次后锁定账户,普通用户5秒后解锁,root用户120秒后解锁
设置历史命令最大保存条数
vim /etc/profile
,修改HISTSIZE为20(默认是1000)

应急响应案列
勒索病毒
处理方式
勒索病毒是无解的,要是被感染了基本上很难恢复数据,所以说备份数据很重要
上传被加密的文件至360病毒分析网站,网站如下
http://lesuobingdu.360.cn
有一些简单的勒索病毒或许可以进行解密,以下是解密的网站
https://www.nomoreransom.org/zh/index.html
安全防范
安装杀毒软件,保持监控开启,定期全盘扫描
及时更新 Windows 安全补丁,开启防火墙临时关闭端口,如 445、135、137、138、139、3389 等端口
及时更新 web 漏洞补丁,升级 web 组件
备份。重要的资料一定要备份,谨防资料丢失
强化网络安全意识,陌生链接不点击,陌生文件不要下载,陌生邮件不要打开
挖矿病毒(Windows)
一些计算机若被挖矿病毒感染了,大部分都会出现cpu负载率过高,有些挖矿病毒还可以通过类似永恒之蓝等漏洞,或者服务器爆破进行横向渗透内网,感染其他主机
处理方法:
通过任务管理器确定CPU占用高的程序

使用wmic
命令列举所有进程的命令行参数并将其导出至tmp.txt
通过分析下图可知,有异常程序通过powershell远程执行目标网址的命令
wmic process get caption,commandline /value >> tmp.txt

通过访问指定网站,发现其内容是一些powershell命令,分析可得是在tmp目录创建挖矿木马


你也可以用wmic命令列出指定进程的命令行参数
wmic process where caption=”svchost.exe” get caption,commandline /value
随后清除挖矿木马,对全盘进行杀毒扫描,及时更新补丁,开启防火墙。
SSH爆破(Linux)
1、22端口异常连接
通过查看端口连接信息,发现22端口存在可疑的连接

2、应急响应流程
分析特权用户
awk -F: '$3==0 {print $1}' /etc/passwd` //查看除root用户外其他特权用户
awk '/$1|$6/{print $1}' /etc/shadow //查看可远程登录的用户账号信息
分析爆破信息
//查看爆破者ip以及爆破次数
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
//查看爆破攻击的时间范围
grep "Failed password" /var/log/secure|head -1
grep "Failed password" /var/log/secure|tail -1
//查看爆破攻击所用到的字典
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
分析管理员登录情况
//查看登录成功的ip以及日期
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
3、防护措施
禁止公网开放管理端口,若确实需要开放,则需限定IP以及加强密码的组成
更改服务器ssh的默认端口
部署入侵检测设备,例如安全厂商的防火墙之类的
短连接捕捉(Linux)
简介
相对长连接而言,指的是在数据传送过程中,只需要发送数据时间,才会去建立一个连接,数据发送完毕后则断开连接,这样的短连接对于系统维护来说是很难被察觉到的
管理员在出口waf检测到服务器不停向外部发送请求,进入服务器发现短连接进程。

应急处理
手动捕捉是很麻烦的,所以可以通过脚本进行捕捉进程,将下面脚本的ip值设置成短连接的外部ip
#!/bin/bash
ip=118.184.15.40
i=1
while :
do
tmp=`netstat -anplt|grep $ip|awk -F '[/]' '{print $1}'|awk '{print $7}'`
#echo $tmp
if test -z "$tmp"
then
((i=i+1))
else
for pid in $tmp; do
echo "PID: "${pid}
result=`ls -lh /proc/$pid|grep exe`
echo "Process: "${result}
kill -9 $pid
done
break
fi
done
echo "Total number of times: "${i}
运行结果如下,可以发现短连接的进程pid一直在变,进程源文件也被捕捉到了:/usr/lib/nfsiod

挖矿病毒(Linux)
应急场景
某台网站服务器持续向境外ip发起连接下载病毒源
应急处理
查看网络进程连接状态,发现远程下载一个jpg文件


分析下载的jpg文件可以发现,里面包含了执行代码,可以判断攻击者通过远程下载脚本图片并执行了图片里的脚本代码

分析定时任务计划,发现攻击者在添加了一项计划任务

在tomcat日志文件中找到一条记录,发现攻击代码和计划任务里的一致

删除木马的定时任务,以及终结异常进程


盖茨木马
盖茨木马简述:
Linux盖茨木马是一类有着丰富历史,隐藏手法巧妙,网络攻击行为显著的DDoS木马,并且会伪装成系统文件。木马得名于其在变量函数的命名中,大量使用Gates这个单词。
应急场景
发现服务器cpu占用异常,发现有几个进程占用大量的网络带宽

最后更新于