应急响应
分类
应急响应根据平台划分,可以分为Windows、Linux平台,但是根据事件类型分析,种类繁多,根据目前遇到的应急事件,简单分为:
- 系统入侵:弱口令、主机漏洞
- web入侵:篡改、webshell
- 病毒木马:挖矿病毒、勒索病毒、后门、蠕虫
- 网络攻击:DDOS攻击、频繁发包、批量请求
思路
一、收集信息
首先根据报警设备(IDS、态势感知、EDR等),查询首先产生报警的时间,以及详情。有时需要了解报警设备的触发规则,方便对事件性质进行判断。
根据报警设备锁定需要排查的一台或者多台机器。与客户进行沟通,得到机器中运行的系统详情、启用服务等信息。
二、接触服务器
一、查看端口情况
接触到服务器之后,首先应该查询端口情况。
Windows
-
netstat -ano
查看目前的网络连接,定位可疑的ESTABLISHED,得到可疑PID。 -
tasklist | findstr "PID"
ortasklist /svc | findstr "PID"
查看PID对应的进程 -
dir /s ****(文件)
查找进程文件所在位置 -
netstat -ano | findstr "port"
查看端口对应的PID -
使用
Process Hacker
工具进行查看可疑进程、服务 -
分析进程参数:
wmic process get caption,commandline /value >> tmp.txt
-
在 windows 下查看某个运行程序(或进程)的命令行参数,使用下面的命令:
wmic process get caption,commandline /value
-
如果想查询某一个进程的命令行参数,使用下列方式:
wmic process where caption="****.exe" get caption,commandline /value
Linux
使用netstat 网络连接命令,分析可疑端口、IP、PID
-
netstat -antlp|more
查看下pid所对应的进程文件路径 -
ls -l /proc/PID/exe
orfile /proc/PID/exe
(PID 为对应的pid 号)查看下pid所对应的进程文件路径 -
ps aux | grep pid
分析进程
在端口情况查看时,留意特殊端口,例如Windows中的445、3389等端口,Linux中的22、21、23等常用端口。注意这些常用端口的连接情况。留意外网ip对这些常用端口的连接。如果遇到挖矿应急响应,需要尤其注意 7777、8888等有规律端口(其端口有可能用来服务器连接矿池)。
二、查看系统账户安全
检查完毕端口情况之后,需要对系统账户进行排查。
Windows
- 查看服务器是否有弱口令,远程管理端口是否对公网开放。
检查方法: 据实际情况咨询相关服务器管理员。
- 查看服务器是否存在可疑账号、新增账号。
检查方法: 使用
lusrmgr.msc
命令,查看是否有新增/可疑的账号,如有管理员群组的(Administrators)里的新增账户。或者net user
命令。
- 查看服务器是否存在隐藏账号、克隆账号。
检查方法:
a、打开注册表 ,查看管理员对应键值。
b、使用D盾_web查杀工具,集成了对克隆账号检测的功能。
Linux
- 查看服务器是否有弱口令,远程管理端口是否对公网开放
检查方法: 据实际情况咨询相关服务器管理员。
- 查看服务器是否存在可疑账号、新增账号
检查方法:
a、用户信息文件/etc/passwd
root:x:0:0:root:/root:/bin/bash
account:password:UID:GID:GECOS:directory:shell
用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后shell
注意:无密码只允许本机登陆,远程不允许登陆b、影子文件/etc/shadow
root:oGs1PqhL2p3ZetrE:16809:0:99999:7:::
用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期的警告天数:密码过期之后的宽限天数:账号失效时间:保留
- 查看当前登录账户
who
查看当前登录账户(tty本地登陆 pts远程登录)w
查看系统信息,想知道某一时刻账户的行为uptime
查看登陆多久、多少账户,负载
- 查看账户特权
1、查询特权账户(uid 为0)
awk -F: '$3==0{print $1}' /etc/passwd
2、查询可以远程登录的帐号信息
awk '/\$1|\$6/{print $1}' /etc/shadow
3、除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限
more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
4、禁用或删除多余及可疑的帐号
usermod -L user
禁用帐号,帐号无法登录,/etc/shadow第二栏为!开头
userdel user
删除user用户
userdel -r user
将删除user用户,并且将/home目录下的user目录一并删除
三、检查启动项、计划任务、服务
Windows
- 检查服务器是否有异常的启动项
检查方法:
a、单击【开始】>【所有程序】>【启动】,默认情况下此目录在是一个空目录,确认是 否有非业务程序在该目录下。b、单击开始菜单 >【运行】,输入 msconfig,查看是否存在命名异常的 启动项目,是则取消勾选命名异常的启动项目,并到命令中显示的路径删除文件。
c、单击【开始】 >【运行】,输入 regedit,打开注册表,查看开机启动项是否正常,特别注意如下三个注册表项:
HKEY_CURRENT_USER\software\micorsoft\windows\currentversion\run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runonce
检查右侧是否有启动异常的项目,如有请删除,并建议安装杀毒软件进行病毒查杀,清除残留病毒或木马。d、使用
autorun、Process Hacker
等工具进行查看。
- 检查计划任务
检查方法:
a、单击【开始】>【设置】>【控制面板】>【任务计划】,查看计划任务属性,便可以发现木马文件 的路径。
b、单击【开始】>【运行】;输入 cmd,然后输入at,检查计算机与网络上的其它计算机之间的会话 或计划任务,如有,则确认是否为正常连接。
- 服务自启动
检查方法:
单击【开始】>【运行】,输入services.msc,注意服务状态和启动类型,检查是否有异常服务。
Linux
- 开机启动项
开机启动配置文件
/etc/rc[0~6].d
例子:当我们需要开机启动自己的脚本时,只需要将可执行脚本丢在/etc/init.d目录下,然后在/etc/rc.d/rc*.d中建立软 链接即可
root@localhost ~]# ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh
此处sshd是具体服务的脚本文件,S100ssh是其软链接,S开头代表加载时自启动;如果是K开头的脚本文件,代表运行级别加载时需要关闭的。
检查方法:ls -l /etc/rc[0~6].d
- 定时任务
crontab -l
列出某个用户cron服务的详细内容
crontab -r
删除每个用户cront任务(谨慎:删除所有的计划任务)
crontab -e
使用编辑器编辑当前的crontab文件
四、查看日志
Windows
- 系统日志
分析方法:
a、前提:开启审核策略,若日后系统出现故障、安全事故则可以查看系统的日志文件,排除故障,追查入侵者的信息等。
b、Win+R打开运行,输入“eventvwr.msc”,回车运行,打开“事件查看器”。
c、导出应用程序日志、安全日志、系统日志,利用Log Parser进行分析。
- 安全日志
安全日志包含诸如有效和无效的登录尝试等事件,以及与资源使用相关的事件,如创建、打开或删除文件或其他对象。管理员可以指定在安全日志中记录什么事件。例如,如果已启用登录审核,则安全日志将记录对系统的登录尝试。
安全日志登录部分的事件 ID 和登录类型代码的含义
Event ID(2000/XP/2003) | Event ID(Vista/7/8/2008/2012) | 描述 | 日志名称 |
---|---|---|---|
528 | 4624 | 成功登录 | Security |
529 | 4625 | 失败登录 | Security |
680 | 4776 | 成功/失败的账户认证 | Security |
624 | 4720 | 创建用户 | Security |
636 | 4732 | 添加用户到启用安全性的本地组中 | Security |
632 | 4728 | 添加用户到启用安全性的全局组中 | Security |
2934 | 7030 | 服务创建错误 | System |
2944 | 7040 | IPSEC服务服务的启动类型已从禁用更改为自动启动 | System |
2949 | 7045 | 服务创建 | System |
---- | 4648 | 使用明文凭证尝试登录 | Security |
---- | 4778 | 重新连接到一台Windows主机会话 | Security |
---- | 4779 | 断开到一台Windows主机会话 | Security |
登录类型 | 登录行为 | 描述 |
---|---|---|
2 | Interactive | 用户登录到本机 |
3 | Network | 用户或计算手机从网络登录到本机,如果网络共享,或使用 net use 访问网络共享,net view 查看网络共享 |
4 | Batch | 批处理登录类型,无需用户干预 |
5 | Service | 服务控制管理器登录 |
7 | Unlock | 用户解锁主机 |
8 | NetworkCleartext | 用户从网络登录到此计算机,用户密码用非哈希的形式传递 |
9 | NewCredentials | 进程或线程克隆了其当前令牌,但为出站连接指定了新凭据 |
10 | Remotelnteractive | 使用终端服务或远程桌面连接登录 |
11 | Cachedlnteractive | 用户使用本地存储在计算机上的凭据登录到计算机(域控制器可能无法验证凭据),如主机不能连接域控,以前使用域账户登录过这台主机,再登录就会产生这样日志 |
12 | CachedRemotelnteractive | 与 Remotelnteractive 相同,内部用于审计目的 |
13 | CachedUnlock | 登录尝试解锁 |
- 应用程序和服务日志
应用程序和服务日志是一种新类别的事件日志。这些日志存储来自单个应用程序或组件的事件,而非可能影响整个系统的事件。
查看PowerShell日志
Microsoft->Windows->PowerShell->OPtions
查看远程连接日志
应用程序和服务日志->Microsoft->Windows->TerminalServices->RemoteConnectionManager->Operational
远程连接日志事件ID和含义
事件ID | 含义 |
---|---|
1149 | 用户认证成功 |
21 | 远程桌面服务:会话登录成功 |
24 | 远程桌面服务:会话已断开连接 |
25 | 远程桌面服务:会话重新连接成功 |
- WEB访问日志
分析方法:
a、找到中间件的web日志,打包到本地方便进行分析。
b、推荐用 EmEditor 进行日志分析,支持大文本,搜索效率还不错。
Linux
- 系统日志
日志默认存放位置:/var/log/
查看日志配置情况:more /etc/rsyslog.conf
文件 | 说明 |
---|---|
/var/log/cron | 记录了系统定时任务相关的日志 |
/var/log/cups | 记录打印信息的日志 |
/var/log/dmesg | 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
/var/log/mailog | 记录邮件信息 |
/var/log/message | 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件 |
/var/log/btmp | 记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看 |
/var/log/lastlog | 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用 lastlog命令查看 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是 一个二进制文件,不能直接vi,而需要使用last命令来查看 |
/var/log/utmp | 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户 的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询 |
/var/log/secure | 录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
- web日志
查一句话木马
grep -i -r "eval(\$_post" /path/*
其中-i表示不区分大小写,-r表示搜索指定目录及其子目录
- 日志分析技巧
1、定位有多少IP在爆破主机的root帐号:
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort - nr | more
2、定位有哪些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
3、爆破用户名字典是什么?
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print
"$1\n";}'|uniq -c|sort -nr4、登录成功的IP有哪些:
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
5、登录成功的日期、用户名、IP:
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
四、特殊技巧
Windows
- 检查系统相关信息
1、查看系统版本以及补丁信息
检查方法:单击【开始】>【运行】,输入systeminfo,查看系统信息
2、查找可疑目录及文件 检查方法:
a、查看用户目录,新建账号会在这个目录生成一个用户目录,查看是否有新建用户目录。
Window 2003 C:\Documents and Settings\
Window 2008R2 C:\Users\b、单击【开始】>【运行】,输入%UserProfile%\Recent,分析最近打开可疑文件。
c、在服务器各个目录,可根据文件夹内文件列表时间进行排序,查找可疑文件。
- 连接无法建立,端口连接信息查询不到
通过更改hosts文件,将解析域名改为自己的vps,自己vps开启监听,即可连接。(该技巧,适用于对域名进行连接的方案)
- 查看防火墙配置
netsh firewall show all
Linux
- 历史命令
通过
.bash_history
查看帐号执行过的系统命令历史操作命令的清除:
history -c
但此命令并不会清除保存在文件中的记录,因此需要手动删除.bash_profile文件中的记录。