【51CTO.com原创稿件】小伙伴们,您是否还对近期发生的勒索软件全球肆虐事件心有余悸呢?是否还未走出本周繁复的系统检查与补救阴霾呢?这让我突然想起了上个月底和大家分享过的一篇原创文章--《安全事件应急响应新思路》。说那是“一语成谶”也好,安全事件的新常态也罢,反正安全攻击这个“杀手可没有假期”哦。依稀记得我在那里以五步流程的方式提出了实现安全事件管控的整体框架。那么,这一次就让我“以CISSP的名义”,来深入地给大家讲解一下在面对可疑的信息安全入侵事件时,如何采取的实际操作各个步骤和相关的知识点吧。想必大家都知道这么一个道理吧:没有人只是通过阅读钢琴谱,就能够学会弹钢琴的。所以,我强烈建议您:一边阅读本文,一边动动手指头来跟着操作一番吧。
第一阶段:基础与准备
1. 确保能够以最直接的物理访问方式登录到可疑的系统上进行各种取证操作。
2. 断开可疑系统与外界的任何网络以及USB方式的连接。
3. 准备好用于对物理硬盘进行扫描和镜像的各种工具。
4. 事先识别出系统处于正常网络和服务状态的特征,并有相关知识储备。在安全之处(如配置管理数据库)存放相关文件,并记录着系统中所有正常活动所用到的端口,以及各种进程的特征列表。其中,在Windows里以:“服务名—端口号—进程名”的对应格式,而Unix/Linux里则可以是:“端口号—数据流规则”的map形式。在必要时,可以将其与可疑系统的当前状态做比较。
5. 识别出系统处于正常服务状态时所用到的系统级别的特有服务与相关技术(如系统自带的VPN服务)。必要的时候,可以事先向Windows或Unix/Linux专家咨询或是从网上获取相关知识与经验。
6. 如果企业较大,所有用户的操作系统(特别是Windows)应被统一的镜像文件所安装。所有被预安装的应用程序及其版本号等信息,都应当被记录在案。考虑到可能增加的任何不安全的进程与服务,不允许用户擅自安装的软件。
7. 另外,对于安装有Unix/Linux的服务器系统,其所有的重要文件(特别是SUID和GUID文件)列表同样应当被编录到文件中。在必要时,可以将其与可疑的SUID文件做比对检查。
总之,我们对系统的“清洁”状态越了解、掌握得越全面,我们就越容易越及时地检测出那些正在进行的异常活动。
第二阶段:识别与检查
由于这次我们针对讨论的是操作系统,而众所周知一般分Windows和Unix/Linux两大阵营,因此我将采用并行比较的方式来逐步展开和推进。大家可以操起吃饭的家伙了。对,是电脑+键盘!不是饭碗+筷子哦!
1. 非正常账号的检查
· 对于Windows
◆运用C:\> lusrmgr.msc或是C:\> net localgroup administrators命令来检查是否有被Administrators所创建的非正常的账号。
· 对于Unix/Linux
◆查看/etc/passwd、/etc/group和/etc/shadow里的可疑条目,特别是那些UID 0的。
◆运用# find / \( -nouser -o -nogroup \) -print命令来查看哪些在攻击中被删除的账号所遗留的孤独文件(orphaned files)。
2. 非正常文件的检查
· 对于Windows
◆考虑到系统可能被一些非法文件所滥用,应运用高级查找或特殊工具来扫描系统中大于10MB的文件,并逐一进行甄选。
◆检查新近增加的非正常的系统文件,特别是在C:\WINDOWS\system32下的。
◆运用C:\> dir /S /A:H命令来检查具有隐藏属性的各种文件。
◆运用“windirstat”之类的工具来获知各类文件在硬盘上所占的空间比例。
· 对于Unix/Linux
◆运用# find / -uid 0 \( –perm -4000 –o –perm 2000 \) –print命令来检查所有SUID和GUID文件。
◆运用如下命令来检查所有以“. ”or “.. ” or “ ”开头的非正常的文件名。
# find / -name “ *“ –print
# find / -name “. *“ –print
# find / -name “.. *“ –print
◆运用# find / -size +10MB –print命令来查找大于10MB 的文件。
◆运用# lsof +L1命令来查找那些不再关联(unlinked)的文件的各种进程。
◆检查/proc和/tmp目录下是否存在非正常的文件,特别是/tmp目录可能会被攻击者用来存放数据和恶意的二进制文件。
3. 非正常注册表项的检查
◆运用“HiJackThis”之类的工具扫描Windows的如下注册表项,以检查是否有在启动时自动运行的非正常的程序。
HKLM\Software\Microsoft\Windows\CurrentVersion\Run HKLM\Software\Microsoft\Windows\CurrentVersion\Runonce HKLM\Software\Microsoft\Windows\CurrentVersion\RunonceEx
◆检查账号的开始目录(Startup folder),以及如下自动运行(Autostart folder)目录。
C:\Documents and Settings\user\Start Menu\Programs\Startup
C:\WinNT\Profiles\user\Start Menu\Programs\Startup
4. 非正常进程与服务的检查
· 对于Windows
◆运用C:\> taskmgr.exe或tasklist命令,以及“psexplorer”之类的工具来检查所有的,特别是用户名为“SYSTEM”和“ADMINISTRATOR”的,非正常的或未知的进程。
◆运用C:\> services.msc和C:\> net start命令来检查已安装和开启的非正常的网络服务。
· 对于Unix/Linux
◆运用# chkconfig –list命令来检查所有开启的服务。
◆运用# ps –aux命令来查看所有正在运行的进程;对于未知进程,可用到 lsof –p [pid] 命令。特别关注运行在UID 0下的那些进程。
5. 非正常网络活动的检查
· 对于Windows
◆运用C:\> net view 127.0.0.1命令,以及“tcpview”之类的工具来检查各个文件的共享,及其共享用途。
◆运用C:\> net session命令来检查本机上已经开启的各种会话。
◆运用C:\> net use命令来检查在本机上被其他系统所开启的各种会话。
◆运用C:\> nbtstat –S命令来检查任何可疑的Netbios连接。
◆运用C:\> netstat –na 5命令(这里的5代表每5秒钟刷新一次),以及“fport”之类的工具来检查本机各个端口上的任何可疑活动。另外,如果增加-o的参数,如C:\> netstat –nao 5,还能看到各个进程的所有者。
· 对于Unix/Linux
◆检查内核文件的“kernel: device eth0 entered promiscuous mode”来确认网卡是否处于“混杂”模式,从而发现局域网络中出现的非正常的IP地址。
◆运用# netstat –nap和 # lsof –i命令来检查各个进程的侦听端口和非正常的端口活动。
◆运用# arp -a命令来检查局域网中的非正常的MAC地址记录。
6. 非正常计划任务的检查
· 对于Windows
◆运用C:\> schtasks命令来检查计划任务列表中的非正常的条目。
· 对于Unix/Linux
◆检查/etc/cron.allow文件里的非正常条目,以及运用# crontab -u root –l命令来罗列出那些被UID 0的账号(即root)所设置自动运行的任务。
◆运用# cat /etc/crontab和# ls -la /etc/cron.*命令来检查各种系统级别的计划任务。
7. 非正常日志条目的检查
· 对于Windows
◆运用C:\> eventvwr.msc命令来检查日志文件中是否有可疑条目。
◆运用“Event Log Viewer”之类的工具来查看与防火墙、防病毒软件、文件保护以及新的可疑服务有关的事件。特别注意那些大量的登录失败和被锁账号的日志条目。
· 对于Unix/Linux
◆运用cat和grep命令的组合(例如:cat /var/log/httpd/access.log | grep "GET /signup.jsp")来检查存放在/var/log下的各种日志文件。这里给大家罗列一下,该目录下不同类型日志文件的功能,当然熟悉的朋友可以直接略过:
/var/log/message: 通用的系统消息
/var/log/auth.log: 认证日志
/var/log/kern.log: 内核日志
/var/log/cron.log: 计划任务日志
/var/log/maillog: 邮件服务器日志
/var/log/httpd/: Apache 访问与错误日志目录
/var/log/boot.log: 系统启动日志
/var/log/mysqld.log: MySQL 数据库服务器日志
/var/log/secure: 认证安全日志
/var/log/utmp 或/var/log/wtmp: 登录记录文件
◆检查来自本地和远程访问工具(如sshd和ftpd等)所记录的、大量的认证和登录失败的日志条目。
◆检查各个远程过程调用(RPC)程序的日志里所包含的具有大量奇怪字符的条目。
◆检查Apache的日志里所包含的大量“error”的条目。
◆检查各种硬件和软件的重启日志。
◆运用# dmesg命令来检查系统各个内核日志文件里的可疑事件;并用# lsmod和# lspci来列出重要的内核与系统信息。
8. 恶意软件的检查
· 对于Windows,可组合使用“Rootkit Revealer”、“Rootkit Hooker”、“Ice Sword”、“Rk Detector”、“SysInspector”、“Rootkit Buster”等工具。
· 对于Unix/Linux,则可使用“rkhunter”之类的工具。
第三阶段:取证与补救
还记得那首《见或不见》的小诗吗?可惜的是各种攻击者的入侵证据可不像诗中的爱那样:你查,或者不查,证据就在那里,不增不减。我们一旦确认的入侵之后就要迅速、立刻、马上用正确的方式进行取证和系统的补救。其中要注意如下几点:
1. 对被攻击系统的硬盘采用比特级别(bit by bit)的物理全盘拷贝。
· 对于Windows,可以使用EnCase和ddrescure等磁盘克隆工具。
· 对于Unix/Linux则可以使用Sleuth Kit或Autopsy之类的取证工具。
2. 运用Memoryze和win32dd之类的工具,对被攻击系统的内存里的数据进行复制,以便进一步的分析。
3. 在适合的情况下,安装针对操作系统和应用程序的各种修复补丁,以“堵上”那些尚未被攻击者所使用到的漏洞,以及再次可能被利用的漏洞。
4. 根据检查结果和准备阶段的记录,恢复所用被改动过的文件。例如Windows上的svchost.exe,以及Unix/Linux上/bin/su下的各个二进制文件等。
小结
我身边的搞信息安全的朋友们经常慨叹:为什么看过这么多安全的道理,却依然过不好系统运维与事件处理的职场人生呢?其实我个人觉得咱们有时候与“人家的无故障系统”之间就差着一份勤奋和坚持。如果我们能够勤给系统打补丁、坚持对系统做检查、勤对蛛丝马迹进行分析的话,很多一般性的入侵都会被拒之门外的。好了,希望这次有关操作系统方面的安全入侵应对实务能够帮助您打通任督二脉、疏通思路与“经骨”,哥会在下一次给您带来更多干货的。
【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】