Linux应急响应思路详谈

一、主机篇:

1、自动化初筛,建议使用RootkitHunter

(1)安装

1 $sudo wget https://jaist.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.4/rkhunter-1.4.4.tar.gz
2 $sudo tar zxvf rkhunter-1.4.4.tar.gz
3 $sudo cd rkhunter-1.4.4
4 $sudo sh install.sh --install

(2)使用(主要看一下,常用的基础的命令有没有被替换)

1 $/usr/local/bin/rkhunter --propupd
2 $/usr/local/bin/rkhunter -c --sk --rwo

(3)详细使用部分--引用自:https://yq.aliyun.com/ziliao/75349

详细内容见附录一

2、确保命令没有被替换后进行排查,第一步查看在线连接和登录日志(无论从什么途径进来的,如果能进来说明登录了才能完成操作,因此查看登录日志)

 1 $sudo netstat -anpo #查看网络连接情况
 2 $ps -ef 或者 $ps aux   #查看异常进程
 3 $top #查看资源占用情况
 4 #查看登录操作情况
 5 $last > last.log
 6 $who /var/log/utmp #登录情况(很可能被删除)
 7 $who /var/log/wtmp #登录情况(很可能被删除)
 8 $cat /var/log/lastlog #最后登录日志(很可能被删除)
 9 $cat /var/log/secure #登录日志,成功失败都有(很可能被删除)
10 $cat /var/log/faillog #登录失败日志,未必有
11 $cat /var/log/cron #计划任务,恶意程序、木马后门启动集中地或者cd /etc/crontab && ls
12 $cat ~/.bash_history 记录操作指令,但是最好有shelllog,因为shelllog是内核hook的,及时攻击者敲了unset history也可以记录操作
13 #有异常进程和连接先干掉,从甲方首先保障回复切断攻击,保护自己然后再开始分析入侵细节。从乙方来说也可以避免干扰。
14 #综上:shelllog是最王道的

3、系统级的(例如redis未授权访问利用备份机制写ssh证书密钥获取登录权限的、或者ssh爆破的):

  根据上面查看的有漏洞修漏洞,弱密码改口令,清楚所有木马后门基本做不到,基本上对于安全制度要求都是重装机器,业务备份就非常重要,确保业务不中断。

  查看最近被修改的文件、创建的文件、隐藏的文件等等,争取找到后门或其他恶意程序。

1 #find /path/ -mtime -1 -type f -print
2 #find /path/ -ctime -1 -type f -print
3 #ls -alt

  提权检测(首先最好堵住臧脏牛等可以提权的漏洞,但出于业务对底层包文件、库文件的依赖无法升级的一定要做好边界防护)

1 $cat /etc/passwd  #查看异常id gid 为0的
2 $lsof -g gid 查看相关文件

4、WEB级的

   如果有网络流量的监控预警会大大便利web的入侵应急响应。因为可以获取到攻击时间、攻击来源、尤其是加载payload等重要信息,其实主机级别的一样,如果有网络级别的告警会更方便处理。

1 """
2 比如,利用java反序列化漏洞,把写好的后门文件类通过java反序列化的方式传到服务器上,甚至无需服务器运行web服务器(只要有java rmi仓库即可),可以运行后门程序,全程没有web日志。只能从tcp流量中查看。
3 """

  一般查看日志:

#如果可以,先停止服务:
#查看日志--确定攻击源、确定攻击操作:
#根据时间,现象等信息或者更多信息,确定攻击者IP、攻击操作:
#access_log/error.log
$sudo cat access_log | awk '{print $1}'|sort|uniq -c| sort -n -t ' ' #按访问次数排序(nr)
$sudo cat  access_log | grep a.b.c.d | grep "2018-01-09:10:10:10"
#一定要开启POST的部分的日志
#可以看出菜刀连接、木马后门访问、 SQL注入、反射性XSS、目录遍历、参数污染、文件上传、OS命令注入执行等。
#关于数据的库也可以去查看数据可的SQL运行日志,如果有后门去检查后门文件,命令执行看操作那些,一般命令执行了,肯定会弹shell。

  后门检查:很多人说查eval和system啊,也有很多有经验的工程师说不能查这些词,有网络流量分析监控多好,能考到请求,查参数名(无论是GET还是POST)感觉蛮快的。

 1 #找到所有的脚本文件打包:
 2 $sudo find /var/www/html/  |grep -E ".asp$|.aspx$|.jsp$|.jspx$|.jspf$|.php$|.php3$|.php4$|.php5$|.inc$|.phtml$|.jar$|.war$|.pl$|.py$|.cer$|.asa$|.cdx$|.ashx$|.ascx$|.cfm$|.cgi$ "|xargs tar zcvf /tmp/shellscript.tar.gz
 3 #解压缩后查找最近有改动的:
 4 $sudo ls -alt
 5 $sudo find ./ -mtime(ctime) x -name "*.[exetendfilename]"
 6 #x  第x天前那一天内修改过的文档
 7 #+x x天之前修改过的
 8 #-x x天之内修改过的
 9 #查看文件内容的:
10 $find ./ -name "x.[exetendfilename]" | xargs grep [neirong]

二、对于非传统攻击(例如APT攻击的)的应急处置:

1、快速断网:

  根据上文中的对网络连接的查询, 快速查找到可以连接直接切断,疑似受控危险情况下,直接断网。(记录下可以IP、Domain)

2、进程排查:

  根据进程,找到样本(木马、蠕虫、病毒、downloader),交由沙箱快速分析重点找到网络行为,如果已知更好。

  可以采取的措施:

  1、对于c&c的IP、域名要直接在防火墙上deny掉,或者直接托管(dns代理),dga类型的可以定期的检测dga域名,尝试预测或者根据逆向分析恶意样本得到的dga算法进行封堵或者托管。

  2、已经感染的和未感染的机器进行隔离措施。

  3、分析恶意样本行为以及失陷主机日志,分析评估损失。

  4、进行全面的主机恶意样本检查。

  5、回复或重装系统。

3、排查rookit,或许有深度隐藏恶意后门、如有可能,重新全面评估内部安全包括渗透测试,风险评估等。

三、小技巧(引用自同学兼同行hyber博客http://www.cnblogs.com/Hyber/p/6039551.html

四、附录:

1、附录一RootkitHunter的详细使用:

指令参数说明:

/usr/local/bin/rkhunter
Usage: rkhunter {--check | --update | --versioncheck |
                 --propupd [{filename | directory | package name},...] |
                 --list [{tests | {lang | languages} | rootkits},...] |
                 --version | --help} [options]
Current options are:
         --append-log                  在日志文件后追加日志,而不覆盖原有日志
         --bindir <directory>...       Use the specified command directories
     -c, --check                       检测当前系统
  --cs2, --color-set2                  Use the second color set for output
         --configfile <file>           使用特定的配置文件
         --cronjob                     作为cron定期运行
                                       (包含参数 -c, --sk , --nocolors )
         --dbdir <directory>           Use the specified database directory
         --debug                       Debug模式(不要使用除非要求使用)
         --disable <test>[,<test>...]  跳过指定检查对象(默认为无)
         --display-logfile             在最后显示日志文件内容
         --enable  <test>[,<test>...]  对指定检测对象进行检查
                                       (默认检测所有对象)
         --hash {MD5 | SHA1 | NONE |   使用指定的文件哈希函数
                 <command>}            (Default is SHA1)
     -h, --help                        显示帮助菜单
 --lang, --language <language>         指定使用的语言
                                       (Default is English)
         --list [tests | languages |   罗列测试对象明朝,使用语言,可检测的木马程序
                 rootkits]             
     -l, --logfile [file]              写到指定的日志文件名
                                       (Default is /var/log/rkhunter.log)
         --noappend-log                不追加日志,直接覆盖日志文件
         --nocolors                    输出只显示黑白两色
         --nolog                       不写入日志文件
--nomow, --no-mail-on-warning          如果有警告信息,不发送邮件
   --ns, --nosummary                   不显示检查结果的统计数据
 --novl, --no-verbose-logging          不显示详细记录
         --pkgmgr {RPM | DPKG | BSD |  使用特定的包管理用于文件的哈希值验证
                   NONE}               (Default is NONE)
         --propupd [file | directory | 更新整个文件属性数据库或仅仅更新指定条目
                    package]...        
     -q, --quiet                       安静模式(no output at all)
  --rwo, --report-warnings-only        只显示警告信息
     -r, --rootdir <directory>         使用指定的root目录
   --sk, --skip-keypress               自动完成所有检测,跳过键盘输入
         --summary                     显示检测结果的统计信息
                                       (This is the default)
         --syslog [facility.priority]  记录检测启动和结束时间到系统日志中
                                       (Default level is authpriv.notice)
         --tmpdir <directory>          使用指定的临时目录
         --update                      检测更新内容
   --vl, --verbose-logging             使用详细日志记录 (on by default)
     -V, --version                     显示版本信息
         --versioncheck                检测最新版本
     -x, --autox                       当X在使用时,自动启动检测
     -X, --no-autox                    当X在使用时,不自启检测

有了rootkit hunter,侦测 rootkit 程序、侦测后门程序、以及主机端的套件检查问题就变得简单了,很多时候,rootkit hunter可以自动帮我们完成这些复杂的工作。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索日志 , 文件 , 对象 , 程序 , 系统 哈希 linux rootkit扫描、rootkit扫描工具、linux rootkit工具、rootkit hunter、rootkithunter,以便于您获取更多的相关知识。

2、附录二:关于一些命令的使用我自己原来的博客合并过来:

(1)首先查看网络连接情况:

1 #netstat -anop | grep "ssh" /*查看ssh连接或者telent*/
2 #netstat -anop | grep "a.b.c.d" /*查看连接的IP*/
3 #ps aux /*查看可以进程*/ 
4 /*
5 可以结合起来,因为netstat -anop里面有pid
6 */

由上面确认是否攻击者仍在连接。如果连接,建议关闭网络或直接下线脱机应急。

(2)查看history

1 #history /*查看历史命令*/=》即使攻击者敲击了unset history 也至少会被记录这一条

如果觉得history历史记录太少请查看历史命令文件:

1 #vim ~/.bash_history

(3)查看用户:

1 #who        /*查看登录情况*/
2 #whoami   /*查看自己是谁*/
3 #vim /etc/passwd
4 #vim /etc/shadow

(4)查看最近被改过的文件:

1 #find /path/ -mtime -1 -type f -print
2 #find /path/ -ctime -1 -type f -print
3 #ls -alt

(5)查看所有脚本文件打包:

1 find /var/www/html/  |grep -E ".asp$|.aspx$|.jsp$|.jspx$|.jspf$|.php$|.php3$|.php4$|.php5$|.inc$|.phtml$|.jar$|.war$|.pl$|.py$|.cer$|.asa$|.cdx$|.ashx$|.ascx$|.cfm$|.cgi$ "|xargs tar zcvf /tmp/shellscript.tar.gz

(6)查看web日志:

 1 /*access_log:/var/log/httpd/access_log*/
 2 #cat access_log | awk '{print $1}'|sort|uniq -c  查看访问的ip
 3 #cat access_log | awk '{print $1}'|sort|uniq -c| sort -n -t ' ' 按访问次数排序(nr)
 4 #find ./ -name "*.php" |grep 404|xargs ls -la//(xargs)把前面的结果传到后面作为输入 
 5 /*awk指定符号切:-F '切割符号'
 6 /*复杂的awk*/
 7 #cat access_log | awk '{print $1"	"$2}'
 8 #cat access_log | awk'(/404/)'|wc -l
 9 #cat access_log | awk '($1>2000&&$1~/172/)'#awk可以是表达式
10 #find /var/www/html/ -name "*.php" |xargs grep chenran 查看文件里面的内容

 3、附录三:Unix日志分析读书笔记:

一、文件分析:
知识点1、敏感目录
(1)/tmp 临时文件
(2)/usr/bin , /usr/sbin , /bin 命令所在目录
(3)/etc/init.d 开机启动目录
知识点2、敏感文件
(1)/etc/rc.local 开机启动文件
(2)/root/.bash_history 命令执行历史信息文件
(3)/etc/password /etc/shadow 用户账户信息文件
(4)/etc/cron* 计划任务信息
知识点3、常用命令
(1)ls -alt [a 查看以.开头的隐藏文件;t 按时间排序;l 查看列表详细信息 ]
(2)取前x(x为正整数集合)项 head -n X
(3)查看文件详细信息 stat
(4)find ./ -mtime(ctime) x -name "*.php"
[-mtime 指不包含权限的文件修改时间]
[-ctime包含权限的文件修改时间]
[-name 后面是文件名的正则
(5)查看文件权限 find ./*.py -perm 4777 [-perm 后面权限号]
(6)查看命令文件是否替换 可以直接MD5检查。

二、网络与进程分析
知识点一、查看进程
(1)ps aux
(2)连接grep使用,例如grep xxx 或者 grep -v xxx [-v 排出xxx]
知识点二、查看网络
(1)netstat -antlp | more 基本信息关联查看
(2)lsof -i port 查看端口对应程序
知识点三、查看隐藏进程
(1)ps -ef | awk '{print}' | sort -n | uniq > 1
ls /proc | sort -n | uniq >2
diff 1 2

三、系统信息分析
知识点1、history分析 /root/.bash_history 分析历史执行命令
知识点2、敏感文件分析(参考敏感文件)
知识点3、开机启动分析(chkconfig)
知识点4、用户信息分析cat /etc/passwd | grep -E "/bin/bash$"能登录的用户
知识点5、环境变量系统路径分析 echo $PATH
知识点6、ssh分析 /etc/ssh /etc/.ssh

四、日志分析
知识点1、日志文件
(1)/var/log/wtmp
(2)/var/run/utmp
(3)/var/log/lastlog
(4)/var/log/btmp
知识点2、关键字
(1)Accepted
(2)Failed
(3)password
(4)invalid
知识点3、登录日志分析
(1)lastlog最近几次登录成功和最后一次登录失败相关信息
(2)who 查询当前用户信息
(3)whois 类似(2)
(4)users 类似(2)
(5)lastb 类似(1)
(6)finger
知识点4、两条语句
(1)grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -nr | more
(2)grep "Accepted" /var/log/auth.log | awk '{print $11}' | sort |uniq -c | sort -nr | more

四、后门排查
知识点1、webshell查找
(a)命令:
find /var/www/ -name "*.php" | xargs egrep 'assert | phpspy | c99sh | milw0rm | eval | ( gunerpress | (bas464_encode | spider _bc | shell_exec | passthru | ($\_POST[|eval(str_rotl3 | .chrc|${"\_P|evalC$\_R | file_put_contentsC.*$\_ | base64_decode'

五、应用类日志的几个小技巧:
知识点1、
find .access_log | grep xargs ip a.b.c.d
find .access_log | grep xargs trojan_name
cat access.log | cut -f 1(ip)/4(url) "" | sort | uniq -c | sort -k | -r head -10
cat access.log | sort -k 2 -n -r | head -10

原文地址:https://www.cnblogs.com/KevinGeorge/p/8257831.html