应急响应资料整理

趁着最近不是很忙,整理了下最近学习的一些应急响应的一些命令、资料,方便以后查看,有什么问题还望指出,多多交流! 0.0

怎么做应急响应?

具体怎么做应急响应,根据网上应急响应的经验总结几点:

  1. 确定攻击时间
  2. 查找攻击线索
  3. 梳理攻击流程
  4. 实施解决方案
  5. 定位攻击者
1
2
3
4
5
1、确定攻击时间能够帮助我们缩小应急响应的范围,有助于我们提高效率,
2、查找攻击线索,能够让我们知道攻击者都做了什么事情,
3、梳理攻击流程则是还原整个攻击场景,
4、实施解决方案就是修复安全漏洞,切断攻击途径,
5、最后就是定位攻击人,则是取证。

常用命令

全是套路,但一般很有用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
1、备份系统日志及默认的httpd服务日志
linux:
tar -cxvf secure_logs.tar.gz /var/log/secure
tar -cxvf messages_logs.tar.gz /var/log/messeges
tar -cxvf httpd_logs.tar.gz /var/log/httpd/
windows:
应用程序日志、系统日志、安全日志;默认情况下,如果系统不对事件做审核则不会生成安全日志。
开始→设置→控制面板→管理工具→事件查看器
Windows日志文件默认位置是%systemroot%\system32\config
安全日志文件:%systemroot%\system32\config \SecEvent.EVT
系统日志文件:%systemroot%\system32\config \SysEvent.EVT
应用程序日志文件:%systemroot%\system32\config \AppEvent.EVT
FTP连接日志和HTTPD事务日志:%systemroot% \system32\LogFiles\
IIS日志默认存放在System32\LogFiles目录下,使用W3C扩展格式
2、备份last可以查看登录信息(登录时间能不能跟运维人员时间对上)
last > last.log
3、查询utmp文件并显示当前系统中每个用户和它所运行的进程信息
w > w.log
4、系统服务备份
chkconfig --list > services.log
5、查看可疑进程
linux:
ps -aux或ps -ef 查看进程文件路径、pid号(一般ps -ef能比较清晰的看出反弹shell
ps -aux的结果比较杂乱,pstree -a的结果比较简单明了
lsof -i :port 检查哪个进程使用这个端口
lsof -p 1234 检查pid号为1234进程调用情况
strace -f -p 1234 跟踪分析pid号为1234的进程
windows:
tasklist
taskkill
6、监听端口备份(查看端口及对应服务对外开放情况)
linux: netstat -antup > port-listen.log
windows: netstat -ano > port-listen.log
7、查看用户信息
linux: cat /etc/passwd
windows: net user
8、查找最近5天内更改的文件
find /home/work -type f -mtime -5
9、Rootkit查找
linux: Rootkit Hunter、chkrootkit
windows: 勒索软件终结者
10、查看服务占用资源情况
top > top.log
11、查看计划任务(很多后门程序通过crontab完成自启)
linux: crontab -l
不过有时候crontab -l并不能解决问题,通常还要做如下操作:
cd /etc/crontab
ls
crontab -r 删除计划任务
windows: 管理->任务计划程序->任务计划程序库
12、查看有没有提权痕迹
cat /etc/passwd 极有可能其他用户出现id,组id 00的情况
lsof -g gid号 通常能找到恶意文件关联的lib文件
13、显示最后登录系统的倒数10条记录
last -10
14、查看执行过什么命令
cat ~/.bash_history
history | grep '2017-2-12' 根据时间查看干了什么
history | tail -n 5 显示最近5次执行的命令
history -c 清空history历史
15、查找777的权限的文件
find / *.jsp -perm 777
16、网络连接
查看与该ip链接的进程及文件路径、pid号
netstat -anp| grep 8.8.8.8 linux
netstat -ano|find "8.8.8.8" windows

WEB方式入侵

主要通过web应用程序、strust2、数据库等其他高危漏洞
例如apache

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apache的默认重要配置信息如下:
配置文件:`/etc/httpd/conf/http.conf`
服务器的根目录:`/var/www/html`
访问日志文件:`/var/log/httpd/access_log`
错误日志文件:`/var/log/httpd/error_log`
运行apache的用户:apache
模块存放路径:`/usr/lib/httpd/modules`
1、查看日志文件
2、根据日志文件信息定位恶意文件位置
3、`stat`记录恶意文件信息
4、找到恶意进程
比如恶意进程名是fu4k
5、进入proc/对应pid目录/fd
ps -aux | grep fu4k
cd /proc/fu4k/fd
/usr/bin目录下,stat信息:
stat /usr/bin/fu4k
6、查找系统中包含指定字符的所有文件(可以拿已知shell密码及特定字符作为关键字)
find /|xargs grep -ri "caidao" -l 2> webshell.log(执行后会改变所有文件的atime)

非web方式入侵

主要通过bash其他高危服务,大多属于ssh(22)、vnc(5900)对外且弱口令的情况,主要结合syslog/var/log/message.*判断

1
2
3
4
5
6
7
8
1、判断服务器是否支持访问外网,如支持,通过netstat –an查看是否已与外部可疑服务器建立连接,如已建立需及时断开
2、记录后门文件stat信息,根据mtime查找其他后门文件,同时根据文件属组与属组对应运行服务判断入侵方式
3、如果权限组为root,需要检测是否被种rootkit
4、非web类后门,大部分人习惯把恶意文件放置在`/tmp`目录下;
5、通过可疑进程名与cpu占用率排查,有些后门会伪装正常进程名;
使用`top`命令查看cpu占用率,找出后门进程
6、获取进程pid后可cd到`/proc/对应pid/fd
7、查看是否有相关计划任务,后门程序为保证自启动往往会添加新的计划任务

入侵后需要被关注的文件

linux:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/var/log/messages — 包括整体系统信息,其中也包含系统启动期间的日志。此外,mail,cron,daemon,kern和auth等内容也记录在var/log/messages日志中。
/var/log/dmesg — 包含内核缓冲信息(kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。可以用dmesg查看它们。
/var/log/auth.log — 包含系统授权信息,包括用户登录和使用的权限机制等。
/var/log/boot.log — 包含系统启动时的日志。
/var/log/daemon.log — 包含各种系统后台守护进程日志信息。
/var/log/dpkg.log – 包括安装或dpkg命令清除软件包的日志。
/var/log/kern.log – 包含内核产生的日志,有助于在定制内核时解决问题。
/var/log/lastlog — 记录所有用户的最近信息。这不是一个ASCII文件,因此需要用lastlog命令查看内容。
/var/log/maillog /var/log/mail.log — 包含来着系统运行电子邮件服务器的日志信息。例如,sendmail日志信息就全部送到这个文件中。
/var/log/user.log — 记录所有等级用户信息的日志。
/var/log/Xorg.x.log — 来自X的日志信息。
/var/log/alternatives.log – 更新替代信息都记录在这个文件中。
/var/log/btmp – 记录所有失败登录信息。使用last命令可以查看btmp文件。例如,”last -f /var/log/btmp | more“。
/var/log/cups — 涉及所有打印信息的日志。
/var/log/anaconda.log — 在安装Linux时,所有安装信息都储存在这个文件中。
/var/log/yum.log — 包含使用yum安装的软件包信息。
/var/log/cron — 每当cron进程开始一个工作时,就会将相关信息记录在这个文件中。
/var/log/secure — 包含验证和授权方面信息。例如,sshd会将所有信息记录(其中包括失败登录)在这里。
/var/log/wtmp或/var/log/utmp — 包含登录信息。使用wtmp可以找出谁正在登陆进入系统,谁使用命令显示这个文件或信息等。
/var/log/faillog – 包含用户登录失败信息。此外,错误登录命令也会记录在本文件中。
除了上述Log文件以外, /var/log还基于系统的具体应用包含以下一些子目录:
/var/log/httpd/或/var/log/apache2 — 包含服务器access_log和error_log信息。
/var/log/lighttpd/ — 包含light HTTPD的access_log和error_log。
/var/log/mail/ – 这个子目录包含邮件服务器的额外日志。
/var/log/prelink/ — 包含.so文件被prelink修改的信息。
/var/log/audit/ — 包含被 Linux audit daemon储存的信息。
/var/log/samba/ – 包含由samba存储的信息。
/var/log/sa/ — 包含每日由sysstat软件包收集的sar文件。
/var/log/sssd/ – 用于守护进程安全服务。
~/.bash_history 至关重要的日志,往往黑客会使用history -c清理相关的日志

入侵后web服务器日志分析
web服务器的种类很多,接触比较多的为apache、tomcat、nagix为主。无论任何web服务器其实日志需要关注的东西是一致的,即access_logerror_log
查看哪些IP在暴力破解root

1
2
3
grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
cat /var/log/messeges|grep root
cat /var/log/messages |grep 'root from' | wc -l 查看爆破次数

一般确定ip地址后,通过:

1
2
3
find . access_log |grep xargs ip攻击地址
find . access_log| grep xargs 木马文件名
tail -F /var/log/httpd/error_log | grep ip攻击地址 动态查看日志

通过access_logerror_log中的数据我们一般能明确以下几件事情:

  1. 文件是什么时刻上传的,应急响应中确定攻击发生的攻击点十分重要。通过时间点可以有效的查找加密木马,隐蔽的后门等。
  2. 攻击的IP地址是多少,当然一般情况是跳板地址T_T
  3. 传了什么文件上来

筛选指定IP访问的URL,并按照访问数量排序
cat access.log |grep "192.168.11.37" | awk '{print $7}' | sort | uniq -c |sort -nr
筛选出访问状态码是500的所有IP地址,并按照访问次数排序
cat access.log |grep "HTTP/1.1\" 500" | awk '{print $1}' | sort | uniq -c |sort -nr

筛选/var/log/secure日志找到爆破ssh的ip
cat /var/log/secure |grep 'Accepted password'
查看cron日志

1
2
3
4
/etc/cron.hourly/cron.sh
/etc/cron.hourly/udev.sh
查看第一次计划任务时间:
cat /var/log/cron |grep '恶意文件名'|sort|head

windows:

1
2
3
4
5
6
7
x:\RECYCLER\
C:\Documents and Settings\
c:\users\
c:\windows\temp\
IIS的默认上传目录
日志分析工具:
[Web日志安全分析工具 v2.0.exe]()

应用系统日志

1
2
3
4
MySQL; 在mysql.log找错误消息,看看有没有结构损坏的表, 是否有innodb修复进程在运行,是否有disk/index/query 问题.
PHP-FPM; 如果设定了 php-slow 日志, 直接找错误信息 (php, mysql, memcache, …)。
Varnish; 在varnishlog 和 varnishstat 里, 检查 hit/miss比. 看看配置信息里是否遗漏了什么规则,使最终用户可以直接攻击你的后端?
HA-Proxy; 后端的状况如何?健康状况检查是否成功?是前端还是后端的队列大小达到最大值了?

入侵后恶意文件查找

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
find -mtime -2 -type f -name \*.php 查找近2天被修改过的文件
find /app -user root 查找app目录下属于root用户的文件
查找存在制定关键字的恶意脚本木马
find ./ -name "*.php" |xargs egrep "phpspy|c99sh|milw0rm|eval\(gunerpress|eval\(base64_decode|spider_bc"> /tmp/php.txt
grep -r --include=*.php '[^a-z]eval($_POST' . > /tmp/eval.txt
grep -r --include=*.php 'file_put_contents(.*$_POST\[.*\]);' . > /tmp/file_put_contents.txt
find ./ -name "*.php" -type f -print0 | xargs -0 egrep "(phpspy|c99sh|milw0rm|eval\(gzuncompress\(base64_decode|eval\(base64_decode|spider_bc|gzinflate)" | awk -F: '{print $1}' | sort | uniq
linux 下webshell查杀:
find /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查杀脚本.py]()
[webshellkill_linux.py]()
rootkit查找
windows下:
[PC Hunter]http://www.xuetr.com/)
[PowerTool] (http://about.me/ithurricanept)
linux下:
[Rootkit Hunter](http://rkhunter.sourceforge.net/)
常规后门查找
shift后门等
[D盾_Web查杀](http://d99net.net/News.asp?id=62)
[Safe3 WebShell Scanner](http://www.273tech.com/works/884981847/view.htm)
[暗组Web杀毒 2.6](http://forum.cnsec.org/thread-93025-1-1.html)

其他方面检测

  • 网络相关
  • 异常流量
  • DDOS
  • ARP
  • DNS
  • 数据库

常见问题

关键文件设置
使用chattr命令防止系统中某个关键文件被修改:chattr +i /etc/resolv.conf
查看使用:lsattr /etc/resolv.conf
会显示如下属性

—-i——– /etc/resolv.conf

要想修改此文件就要把i属性去掉: chattr -i /etc/resolv.conf
让某个文件只能往里面追加数据,但不能删除(用于各种日志文件上):chattr +a /var/log/messages
系统命令被替换

1、可以选择重新还原回去:yum install e2fsprogs;
2、也可以使用系统命令工具包busybox,最后busybox 要还原的命令 -i
日志查看
/var/log/secure日志可以查看Accept关键字;
查找访问和错误日志, 直接找5xx错误, 再看看是否有limit_zone错误;

日志文件恢复
linux下日志文件恢复可使用lsof恢复删除的日志文件(前提是不能关闭服务器,不能关闭相关服务或进程)

1
2
lsof | grep access_log
cat /proc/$PID/fd/$文件描述符 > /var/log/httpd/access_log

部分命令无法执行

当用户环境变量配置不当时,部分命令无法直接执行,需要在命令之前加上路径,如:/etc/sbin/ifconfig

大爷,赏个铜板呗!