来源:阿里先知
1 事件分类常见的安全事件: - Web入侵:挂马、篡改、Webshell
- 系统入侵:系统异常、RDP爆破、SSH爆破、主机漏洞
- 病毒木马:远控、后门、勒索软件
- 信息泄漏:拖裤、数据库登录(弱口令)
- 网络流量:频繁发包、批量请求、DDOS攻击
2 排查思路一个常规的入侵事件后的系统排查思路: ​a) 文件日期、新增文件、可疑/异常文件、最近使用文件、浏览器下载文件 ​b) Webshell 排查与分析 ​c) 核心应用关联目录文件分析 ​a) 当前活动进程 & 远程连接 ​b) 启动进程&计划任务 ​c) 进程工具分析 ​ i. Windowschunter ​ ii. Linux: Chkrootkit&Rkhunter ​a) 环境变量 ​b) 帐号信息 ​c) History ​d) 系统配置文件 ​a) 操作系统日志 ​ i. Windows: 事件查看器(eventvwr) ​ ii. Linux: /var/log/ ​b) 应用日志分析 ​ i. Access.log ​ ii. Error.log 3 分析排查3.1 Linux系列分析排查3.1.1 文件分析- 敏感目录的文件分析(类/tmp目录,命令目录/usr/bin /usr/sbin)
​例如: ​查看tmp目录下的文件: ls –alt /tmp/ ​查看开机启动项内容:ls -alt /etc/init.d/ ​查看指定目录下文件时间的排序:ls -alt | head -n 10 ​针对可疑文件可以使用stat进行创建修改时间、访问时间的详细查看,若修改时间距离事件日期接近,有线性关联,说明可能被篡改或者其他。 ​例如要查找24小时内被修改的JSP文件: find ./ -mtime 0 -name "*.jsp" ​(最后一次修改发生在距离当前时间n24小时至(n+1)24 小时) ​查找72小时内新增的文件find / -ctime -2 ​S:-ctime 内容未改变权限改变时候也可以查出 ​根据确定时间去反推变更的文件 ​ls -al /tmp | grep "Feb 27" ​查找777的权限的文件 find / *.jsp -perm 4777 隐藏的文件(以 "."开头的具有隐藏属性的文件) - 在文件分析过程中,手工排查频率较高的命令是 find grep ls 核心目的是为了关联推理出可疑文件。
3.1.2 进程命令- 使用netstat 网络连接命令,分析可疑端口、可疑IP、可疑PID及程序进程
netstat –antlp | more ps aux | grep pid | grep –v grep 将netstat与ps 结合,可参考vinc牛的案例: (可以使用lsof -i:1677 查看指定端口对应的程序) - 使用ls 以及 stat 查看系统命令是否被替换。
​两种思路:第一种查看命令目录最近的时间排序,第二种根据确定时间去匹配。 ​ls -alt /usr/bin | head -10 ​ls -al /bin /usr/bin /usr/sbin/ /sbin/ | grep "Jan 15" PS:如果日期数字<10,中间需要两个空格。比如1月1日,grep “Jan 1” ps -ef | awk '{print}' | sort -n | uniq >1ls /proc | sort -n |uniq >2diff 1 23.1.3 系统信息history (cat /root/.bash_history)/etc/passwdcrontab /etc/cron*rc.local /etc/init.d chkconfiglast$PATHstrings- 查看分析history (cat /root/.bash_history),曾经的命令操作痕迹,以便进一步排查溯源。运气好有可能通过记录关联到如下信息:
a) wget 远程某主机(域名&IP)的远控文件; b) 尝试连接内网某主机(ssh scp),便于分析攻击者意图; c) 打包某敏感数据或代码,tar zip 类命令 d) 对系统进行配置,包括命令修改、远控木马类,可找到攻击者关联信息… ​a) useradd userdel 的命令时间变化(stat),以及是否包含可疑信息 b) cat /etc/passwd 分析可疑帐号,可登录帐号 查看UID为0的帐号:awk -F: '{if($3==0)print $1}' /etc/passwd 查看能够登录的帐号:cat /etc/passwd | grep -E "/bin/bash$" PS:UID为0的帐号也不一定都是可疑帐号,Freebsd默认存在toor帐号,且uid为0.(toor 在BSD官网解释为root替代帐号,属于可信帐号) a) 通过crontabl –l 查看当前的任务计划有哪些,是否有后门木马程序启动相关信息; b) 查看etc目录任务计划相关文件,ls /etc/cron* a) 查看rc.local文件(/etc/init.d/rc.local /etc/rc.local) b) ls –alt /etc/init.d/ c) chkconfig a) 使用lastlog命令,系统中所有用户最近一次登录信息。 b) 使用lastb命令,用于显示用户错误的登录列表 c) 使用last命令,用于显示用户最近登录信息(数据源为/var/log/wtmp,var/log/btmp) ​ utmp文件中保存的是当前正在本系统中的用户的信息。 ​ wtmp文件中保存的是登录过本系统的用户的信息。 ​ /var/log/wtmp 文件结构和/var/run/utmp 文件结构一样,都是引用/usr/include/bits/utmp.h 中的struct utmp a) echo $PATH 分析有无敏感可疑信息 a) strings命令在对象文件或二进制文件中查找可打印的字符串 b) 分析sshd 文件,是否包括IP信息strings /usr/bin/.sshd | egrep '[1-9]{1,3}.[1-9]{1,3}.' PS:此正则不严谨,但匹配IP已够用 c) 根据关键字匹配命令内是否包含信息(如IP地址、时间信息、远控信息、木马特征、代号名称) a) Redis(6379) 未授权恶意入侵,即可直接通过redis到目标主机导入公钥。 b) 目录: /etc/ssh ./.ssh/ 3.1.4 后门排查除以上文件、进程、系统 分析外,推荐工具: Ø chkrootkit (迭代更新了20年)主要功能: 检测是否被植入后门、木马、rootkit 检测系统命令是否正常 检测登录日志 - 详细参考README
Ø rkhunter主要功能: 系统命令(Binary)检测,包括Md5 校验 Rootkit检测 本机敏感目录、系统配置、服务及套间异常检测 - 三方应用版本检测
Ø RPM check检查 系统完整性也可以通过rpm自带的-Va来校验检查所有的rpm软件包,有哪些被篡改了,防止rpm也被替换,上传一个安全干净稳定版本rpm二进制到服务器上进行检查 ./rpm -Va > rpm.log如果一切均校验正常将不会产生任何输出。如果有不一致的地方,就会显示出来。输出格式是8位长字符串, c 用以指配置文件, 接着是文件名. 8位字符的每一个 用以表示文件与RPM数据库中一种属性的比较结果 。 . (点) 表示测试通过。.下面的字符表示对RPM软件包进行的某种测试失败: 5 MD5 校验码S 文件尺寸L 符号连接T 文件修改日期D 设备U 用户G 用户组M 模式e (包括权限和文件类型)借用sobug文章案例:如下图可知ps, pstree, netstat, sshd等等系统关键进程被篡改了 Ø Webshell查找 ​ Webshell的排查可以通过文件、流量、日志三种方式进行分析,基于文件的命名特征和内容特征,相对操作性较高,在入侵后应急过程中频率也比较高。 可根据webshell特征进行命令查找,简单的可使用(当然会存在漏报和误报) 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的排查可以通过 - Github上存在各种版本的webshell查杀脚本,当然都有自己的特点,可使用河马shell查杀(shellpub.com)
综上所述,通过chkrootkit 、rkhunter、RPM check、Webshell Check 等手段得出以下应对措施: 根据进程、连接等信息关联的程序,查看木马活动信息。 假如系统的命令(例如netstat ls 等)被替换,为了进一步排查,需要下载一新的或者从其他未感染的主机拷贝新的命令。 发现可疑可执行的木马文件,不要急于删除,先打包备份一份。 - 发现可疑的文本木马文件,使用文本工具对其内容进行分析,包括回连IP地址、加密方式、关键字(以便扩大整个目录的文件特征提取)等。
3.1.5 日志分析 日志文件 /var/log/message 包括整体系统信息 /var/log/auth.log 包含系统授权信息,包括用户登录和使用的权限机制等 /var/log/userlog 记录所有等级用户信息的日志。 /var/log/cron 记录crontab命令是否被正确的执行 /var/log/xferlog(vsftpd.log)记录Linux FTP日志 /var/log/lastlog 记录登录的用户,可以使用命令lastlog查看 /var/log/secure 记录大多数应用输入的账号与密码,登录成功与否 var/log/wtmp 记录登录系统成功的账户信息,等同于命令last var/log/faillog 记录登录系统不成功的账号信息,一般会被黑客删除 /var/log/wtmp /var/run/utmp /var/log/lastlog(lastlog) /var/log/btmp(lastb) lastlog 记录最近几次成功登录的事件和最后一次不成功的登录 who 命令查询utmp文件并报告当前登录的每个用户。Who的缺省输出包括用户名、终端类型、登录日期及远程主机 w 命令查询utmp文件并显示当前系统中每个用户和它所运行的进程信息 users 用单独的一行打印出当前登录的用户,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名把显示相同的次数 last 命令往回搜索wtmp来显示自从文件第一次创建以来登录过的用户 finger 命令用来查找并显示用户信息,系统管理员通过使用该命令可以知道某个时候到底有多少用户在使用这台Linux主机。 - 几个语句
定位有多少IP在爆破主机的root帐号 grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more 登录成功的IP有哪些 grep "Accepted " /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more tail -400f demo.log #监控最后400行日志文件的变化 等价与 tail -n 400 -f (-f参数是实时) less demo.log #查看日志文件,支持上下滚屏,查找功能 uniq -c demo.log #标记该行重复的数量,不重复值为1 grep -c 'ERROR' demo.log #输出文件demo.log中查找所有包行ERROR的行的数量
3.1.6 相关处置kill -9 chattr –i rm setfacl ssh chmod 3.2 Windows系列分析排查3.2.1 文件分析开机启动有无异常文件 各个盘下的temp(tmp)相关目录下查看有无异常文件 浏览器浏览痕迹、浏览器下载文件、浏览器cookie信息 查看文件时间,创建时间、修改时间、访问时间。对应linux的ctime mtime atime,通过对文件右键属性即可看到详细的时间(也可以通过dir /tc 1.aspx 来查看创建时间),黑客通过菜刀类工具改变的是修改时间。所以如果修改时间在创建时间之前明显是可疑文件。 - 查看用户recent相关文件,通过分析最近打开分析可疑文件
a) C:\Documents and Settings\Administrator\Recent b) C:\Documents and Settings\Default User\Recent c) 开始,运行 %UserProfile%\Recent - 根据文件夹内文件列表时间进行排序,查找可疑文件。当然也可以搜索指定日期范围的文件及文件件
Server 2008 R2系列 Win10 系列 3.2.2 进程命令3.2.3 系统信息 例如系统的远程命令执行漏洞MS08-067、MS09-001、MS17-010(永恒之蓝)… 若进行漏洞比对,建议使用Windows-Exploit-Suggester 3.2.4 后门排查PC Hunter是一个Windows系统信息查看软件 功能列表如下: 1.进程、线程、进程模块、进程窗口、进程内存信息查看,杀进程、杀线程、卸载模块等功能2.内核驱动模块查看,支持内核驱动模块的内存拷贝3.SSDT、Shadow SSDT、FSD、KBD、TCPIP、Classpnp、Atapi、Acpi、SCSI、IDT、GDT信息查看,并能检测和恢复ssdt hook和inline hook4.CreateProcess、CreateThread、LoadImage、CmpCallback、BugCheckCallback、Shutdown、Lego等Notify Routine信息查看,并支持对这些Notify Routine的删除5.端口信息查看,目前不支持2000系统6.查看消息钩子7.内核模块的iat、eat、inline hook、patches检测和恢复8.磁盘、卷、键盘、网络层等过滤驱动检测,并支持删除9.注册表编辑10.进程iat、eat、inline hook、patches检测和恢复11.文件系统查看,支持基本的文件操作12.查看(编辑)IE插件、SPI、启动项、服务、Host文件、映像劫持、文件关联、系统防火墙规则、IME13.ObjectType Hook检测和恢复14.DPC定时器检测和删除15.MBR Rootkit检测和修复16.内核对象劫持检测17.WorkerThread枚举18.Ndis中一些回调信息枚举19.硬件调试寄存器、调试相关API检测20.枚举SFilter/Fltmgr的回调PS:最简单的使用方法,根据颜色去辨识——可疑进程,隐藏服务、被挂钩函数:红色,然后根据程序右键功能去定位具体的程序和移除功能。根据可疑的进程名等进行互联网信息检索然后统一清除并关联注册表。 Webshell 排查 - 也可以使用盾类(D盾、暗组盾),如果可以把web目录导出,可以在自己虚拟机进行分析
3.2.5 日志分析#分析IIS日志LogParser.exe "select top 10 time, c-ip,cs-uri-stem, sc-status, time-taken from C:\Users\sm0nk\Desktop\iis.log" -o:datagrid有了这些我们就可以对windows日志进行分析了 比如我们分析域控日志的时候,想要查询账户登陆过程中,用户正确,密码错误的情况,我们需要统计出源IP,时间,用户名时,我们可以这么写(当然也可以结合一些统计函数,分组统计等等):LogParser.exe -i:EVT "SELECT TimeGenerated,EXTRACT\_TOKEN(Strings,0,'|') AS USERNAME,EXTRACT\_TOKEN(Strings,2,'|') AS SERVICE\_NAME,EXTRACT\_TOKEN(Strings,5,'|') AS Client_IP FROM 'e:\logparser\xx.evtx' WHERE EventID=675"事件ID是很好的索引 Windows server 2008系列参考event ID:4624 - 帐户已成功登录4625 - 帐户登录失败4648 - 试图使用明确的凭证登录(例如远程桌面)3.2.6 相关处置3.3 应用类Apache、tomcat、Nginx、IIS 无论任何web服务器其实日志需要关注的东西是一致的,即access_log和error_log。一般在确定ip地址后,通过: find . access_log |grep xargs ip攻击地址 find . access_log| grep xargs 木马文件名 页面访问排名前十的IPcat access.log | cut -f1 -d " " | sort | uniq -c | sort -k 1 -r | head -10页面访问排名前十的URLcat access.log | cut -f4 -d " " | sort | uniq -c | sort -k 1 -r | head -10查看最耗时的页面cat access.log | sort -k 2 -n -r | head 10在对WEB日志进行安全分析时,可以按照下面两种思路展开,逐步深入,还原整个攻击过程。 - 首先确定受到攻击、入侵的时间范围,以此为线索,查找这个时间范围内可疑的日志,进一步排查,最终确定攻击者,还原攻击过程。
- 一般攻击者在入侵网站后,通常会上传一个后门文件,以方便自己以后访问。我们也可以以该文件为线索来展开分析。
4 应急总结核心思路是“顺藤摸瓜” 碎片信息的关联分析 时间范围的界定以及关键操作时间点串联 Web入侵类,shell定位很重要 假设与求证 - 攻击画像与路线确认
5 渗透反辅 a) Windows: Mimikatz b) Linux: mimipenguin a) 操作系统帐号 b) 数据库帐号 c) 应用帐号信息 a) 配置信息 b) 数据库信息 c) 服务端口信息 d) 指纹信息 a) 密码口令类拓展(远控) b) 典型漏洞批量利用 a) WEB入侵 ​ i. 典型漏洞:注入Getshell , 上传Getshell,命令执行Getshell,文件包含Getshell,代码执行Getshell,编辑器getshell,后台管理Getshell,数据库操作Getshell ​ ii. 容器相关:Tomcat、Axis2、WebLogic等中间件弱口令上传war包等,Websphere、weblogic、jboss反序列化,Struts2代码执行漏洞,Spring命令执行漏洞 b) 系统入侵 ​ i. SSH 破解后登录操作 ​ ii. RDP 破解后登录操作 ​ iii. MSSQL破解后远控操作 ​ iv. SMB远程命令执行(MS08-067、MS17-010、CVE-2017-7494) c) 典型应用 ​ i. Mail暴力破解后信息挖掘及漏洞利用 ​ ii. VPN暴力破解后绕过边界 ​ iii. Redis 未授权访问或弱口令可导ssh公钥或命令执行 ​ iv. Rsync 未授权访问类 ​ v. Mongodb未授权访问类 ​ vi. Elasticsearch命令执行漏洞 ​ vii. Memcache未授权访问漏洞 ​ viii. 服务相关口令(mysql ldap zebra squid vnc smb) 6 资源参考7 FAQ a) 被谁入侵了? 关联 攻击IP 攻击者信息 b) 怎么入侵的? 关联 入侵时间轴、漏洞信息 c) 为什么被入侵? 关联 行业特性、数据信息、漏洞信息 d) 数据是否被窃取? 关联 日志审计 e) 怎么办? 关联 隔离、排查分析、删马(解密)、加固、新运营 - 关于windows的日志工具(log parser)有无图形界面版?
Log Parser Lizard 是一款用Vc++.net写的logParser增强工具。主要有以下特点: a) 封装了logParser命令,带图形界面,大大降低了LogParser的使用难度。 b) 集成了几个开源工具,如log4net等。可以对IIS logs\EventLogs\active directory\log4net\File Systems\T-SQL进行方便的查询。 c) 集成了Infragistics.UltraChart.Core.v4.3、Infragistics.Excel.v4.3.dll等,使查询结果可以方便的以图表或EXCEL格式展示。 d) 集成了常见的查询命令,范围包含六大模块:IIS e) 可以将查询过的命令保存下来,方便再次使用。
PS:软件是比较老的,对新系统兼容性不好,还是建议微软原生态log parser - 在linux日志中,有无黑客入侵后的操作命令的统计****
a) 可以根据history信息进行溯源分析,但一般可能会被清除 b) 还有方法是需要结合accton 和 lastcomm - 3.2.3 提到了Windows-Exploit-Suggester,有无linux版?
Autopsy 是sleuthkit提供的平台工具,Windows 和 Linux磁盘映像静态分析、恢复被删文件、时间线分析,网络浏览历史,关键字搜索和邮件分析等功能 新型业务安全中安全事件,例如撞库、薅羊毛、支付、逻辑校验等敏感环节,未在本文体现,所以后续有必要针对业务侧的应急排查方法归纳。
|