隐藏进程应急响应
首先状况是出现了系统卡顿,不知道怎么回事,查看了自己的CPU并未发现异常 查看是否有异常进程并未发现有异常进程,思考的问题来了为什么会有外网连接的ip 查看任务并未发现定时任务 在/etc下面的目录查找最近12小时被修改的文件,在这里第一开始的时候是在~目录下查找,由于文件太多不易分辨,所以就依次在一些常用的系统目录进行查找 /etc/ld.so.preload 文件的变更需要引起注意,这里涉及到 Linux 动态链接库预加载机制,是一种常用的进程隐藏方法,而 top 等命令都是受这个机制影响的。在 Linux 操作系统的动态链接库加载过程中,动态链接器会读取 LD_PRELOAD 环境变量的值和默认配置文件 /etc/ld.so.preload 的文件内容,并将读取到的动态链接库进行预加载,即使程序不依赖这些动态链接库,LD_PRELOAD 环境变量和 /etc/ld.so.preload 配置文件中指定的动态链接库依然会被装载,它们的优先级比 LD_LIBRARY_PATH 环境变量所定义的链接库查找路径的文件优先级要高,所以能够提前于用户调用的动态库载入。 查看该文件的内容有文件被加载 删除文件中的内容后,发现存在一个进程CPU利用率达到90%以上 先kill掉进程,此时恢复正常,并且也没有向外请求数据 直接找到该文件删除(其实这里可以查看备份一下该文件进行分析,但由于是二进制的内容不怎么会分析) 寻找index.py文件进行删除 再使用GScan扫描一下 此时问题已经解决,需要做的就是分析入侵的手段了 history查看历史命名并没有获取到很多有用的东西,应该是给清除了。 查看日志文件,怎么一大串都是乱码,此时很疑惑,我的知识盲区(留下了没技术的眼泪) 通过大量的资料查询了解到往往攻击者删除的文件可以通过一些手段进行恢复,攻击者更好、更安全的解决方案是分解日志文件。但是假设有一种方法可以删除文件并多次擦写覆盖它,这使得恢复变得更加困难。Linux有一个内置命令,名为shred,正是为了这个目的。就其本身而言,shred将删除文件并多次覆盖它——默认情况下,shred将覆盖4次。通常,文件被覆盖的次数越多,恢复起来就越困难,但是请记住,每次覆盖都需要时间,因此对于非常大的文件,碎片化可能会很耗时。主要包括两个有用的选项,一个是-f选项,它更改文件的权限,以便在需要更改权限时允许覆盖;另一个是-n选项,它允许您选择覆盖文件的次数。对于被覆盖的文件的内容可以对我们毫无用处,并且想要恢复这些数据是及其困难的。 查看了日志状态,日志都给关闭了,可以这样子说想要溯源几乎是非常困难的。
知识扩展
在经历这次的linux应急响应让我学到了很多东西,其中也包括攻击思路。查询了很多资料,现在将这些资料以及思路扩充。
极端条件
面对上面的极端的情形(无法溯源)我们能做什么呢?当然是提高自己的防御措施呀,发现系统的漏洞。对于一个应急人员想要全面的向管理人员进行询问有哪些应用是一件很难的事。所以这里推荐使用自动化脚本能够将linux系统中的服务、以及一些漏洞进行全面的扫描,节省了我们大量的时间,有可能攻击者并未通过该漏洞进行攻击,在上交报告的时候也更多东西可以写,让顾客更加满意。其实这也就是从一个攻击者去思考的问题,这里推荐LinEnum直接运行即可。 下载地址:https://github.com/rebootuser/LinEnum 进程分析 在最初的挖矿病毒中我依次清除了两个进程,要是进程非常多,这里有没有一种简单的方法将它全部清除。上面我并未分析是否有父子进程的关系,因为当时的知识有限,有的时候?个??或者后?如果主进程还存在?进程,仅仅杀死主进程可能是没?的,因为不会杀死?进程。有的是写脚本,有的是?动挨个杀,?killall、pkill等等,但是在遇到那种进程 pid,进程名称?直变化的又该怎么办呢?将下面文件保存为到以C为后缀的文件中。 编译fach.cgcc fach.c -o fach 运行fach即可
#include <unistd.h>
#include <stdio.h>
int main()
{
setbuf(stdout, NULL);
pid_t pid;
pid = fork();
if(pid == 0){
printf("child pid: %d\n", getpid());
while(1){
sleep(1);
printf("child\n");
}
} else {
printf("father pid %d\n", getpid());
while(1){
sleep(1);
printf("father\n");
}
}
}
此时我kill掉了父进程,不再打印father,可是子进程还在打印说明并未将它删除,kill - 9 表示强制杀死该进程。如果我想把这些??病毒进程都?掉,怎么操作?这里直接kill掉进程组 kill -9 -PGID 这??定要注意,你杀的是?个进程组,?定要注意,进程组?是否有正常业务进程,别杀错了,可以依次尝试加深印象。
防止爆破
现在很多攻击者都是通过爆破进去,提出以下方案: 1.将密码设置复杂,不定期更换密码 2.更改端口号 3.禁止root用户登陆 4.使用fail2ban防止暴力破解 具体使用请参考: https://www.cnblogs.com/operationhome/p/9184580.html
勒索病毒
判读勒索病毒其实很简单根据勒索加密?件的后缀名、联系邮箱,一般都会提示你。这里不做过多的演示(不好展开来讲),不过可以自己通过GitHub等去查找。 根据勒索病毒类型寻找解决?法 深信服千??实验室公众号直接回复病毒关键字 安全响应及EDR知识赋能平台 Freebuf 淘宝、闲? 、安全产商等等 解决勒索 有解密?具就?解密?具 ?解密?具就交钱 所以说面对勒索病毒真的挺难解决的,最好的办法就是防御,不然几乎一中勒索病毒就要花费大量的财力。
熟悉常用命令
常用的一些命令以及参数要熟练的使用(配合使用也要会)
ls、grep、find、locate、top、history、more、crontab、rm、用户的增删改查等等
以下命令是多种命令相互结合实现了其他功能
可通过grep命令查找文件里符合条件的字符串,定位有多少IP在爆破主机的 root 帐号(文件的位置根据不同系统定义):
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
定位有哪些 IP 在爆破:
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c
爆破用户名字典是什么?
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
登录成功的 IP 有哪些:
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
输出登录爆破的第一行和最后一行,确认爆破时间范围
grep "Failed pssword" /var/log/secure | head -1
grep "Failed pssword" /var/log/secure | tail -1
登录成功的日期、用户名、IP:
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
增加用户
grep "useradd" /var/log/secure删除用户
grep "userdel" /var/log/secure
熟悉文件
熟悉系统日志文件、第三方服务日志文件、Linux的框架、比较重要的文件
1、/var/log/boot.log(自检过程)
2、/var/log/cron (crontab守护进程crond所派生的子进程的动作)
3、/var/log/maillog (发送到系统或从系统发出的电子邮件的活动)
4、/var/log/syslog (它只记录警告信息,常常是系统出问题的信息,所以更应该关注该文件)
要让系统生成syslog日志文件,
在/etc/syslog.conf文件中加上:*.warning /var/log/syslog
该日志文件能记录当用户登录时login记录下的错误口令、Sendmail的问题、su命令执行失败等信息
5、/var/run/utmp
该日志文件需要使用lastlog命令查看
6、/var/log/wtmp
(该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件)
last命令就通过访问这个文件获得这些信息
7、/var/run/utmp
(该日志文件记录有关当前登录的每个用户的信息)
8、/var/log/xferlog
(该日志文件记录FTP会话,可以显示出用户向FTP服务器或从服务器拷贝了什么文件)
这里例举proc/pid/文件夹下的文件
Linux在启动一个进程时,系统会在/proc下创建一个以pid命名的文件夹,在该文件夹下会有我们的进程的信息,其中包括一个名为exe的文件即记录了绝对路径,通过ll或ls –l命令即可查看。exe实际运行程序的符号链接;
cmdline 一个只读文件,包含进程的完整命令行信息;
comm 包含进程的命令名;
cwd 进程当前工作目录的符号链接;
status 进程状态信息,包含的信息多于stat;
stat 进程状态信息;
cwd 进程当前工作目录的符号链接;
latency 显示哪些代码造成的延时比较大;
environ记录了进程运行时的环境变量;
fd目录下是进程打开或使用的文件的符号连接。
文件恢复
对于一些攻击者有可能会对一些文件进行删除,作为应急人员掌握一些基本的文件恢复的技巧可以说是必须的,下面这篇文章详细介绍了很多种文件恢复的方法,请参考: https://blog.csdn.net/qq_40907977/article/details/112134618
流量分析
流量分析在我们应急响应中也是非常重要的,流量分析主要分析流量的异常情况,熟悉各种协议传输过程中的差异很重要,下面举一个msf生成http协议的后门的例子,下列数据包,与普通流量有哪些不一样,其实很明显就能够看得出User-Agent异常。在很多攻击工具中其实都是有特征的,而防护软件正是根据这些特征来识别是否是恶意软件,在平常生活中做做有心人,将各种工具的特征收集起来,那也是相当不错的。面对这些特征能不能写一个简单的脚本进行删选出后门呢? 通过python脚本根据上面的信息来实现检测,可以进行改写
from scapy.all import *
def packet_callback(packet):
data=bytes(packet[TCP].payload)
if b'User-Agent' in data:
for info in data.split(b'\n'):
User_A=b'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko'
if User_A in info:
print(data.split(b'\n')[5])
print('msf后门控制中')
if __name__ == '__main__':
i=input('inet:')
sniff(filter='tcp',iface=i,prn=packet_callback,store=0)
#filter 筛选 iface 网卡,根据自己的选定 prn 调用函数 count 获取条数 store 内存清除
而对于一些隧道协议是非常难发现问题的比如SSH、DNS面对这些隧道协议又该怎么办呢?下面这篇文章详细介绍了对SSH隧道入侵的检测与响应的方法 https://www.freebuf.com/articles/system/194775.html
撰写报告
对于应急人员来说,一份完美的报告是必不可少的,往往很多人能够对应急问题处理清楚,但是在写报告的时候却是跟别人的差距很大,一份报告体现了许多东西,如何写好一份报告需要我们去思考,好比同样是挖到一个洞,但是别人就是会吹,明明危害并不是很大,通过别人的报告给我们的感觉就是危害很大,这里推荐一个网站,里面有很多优秀的报告模板。 https://vipread.com/index
如何防御
1、web网站及时修复漏洞 2、对服务器第三方服务比如MySQL、Redis、FTP等等漏洞防护 3、防止被社工、提高自己的安全意识,人为因素产生的比如一些密码之类的隐患要尽量避免。 4、加强防护软件的部署、及时做好数据备份等 5、部署监控器,当遭受攻击时第一时间通过邮箱、微信等通知你 请参考https://www.jianshu.com/p/800c1967c7e5
总结
应急响应是一个不断总结的过程,通过总结应急的能力也会提升,对每一次应急响应进行反思,及时扩充知识,那么学到的东西并不比红队差,同时也可以学到一些新的攻击手法比如如何更好的隐藏自己,当今主流的攻击手段是什么,对我们还是很有帮助的。时刻提醒自己问题解决了,还会不会要其他问题,往往风平浪静的表面,背地可能波涛汹涌,别大意了。
欢迎大家关注红云谈安全公众号,不定期分享安全知识
|