中午在吃饭,手机响了,运维告诉我有一台内部系统的server的CPU负载达到了80%,一共两次,每次持续3分钟左右。
我让运维先别慌,去server上取Apache的apache_access.log出来
apache_access.log文件打开来一看,每次CPU负载狂飙的时候,都密集了出现了以下的http请求,3分钟内达到了4000次以上。
XX.XX.201.254 - - [16/Oct/2012:11:43:55 +0900] "GET /api/resizeimage.php?image=banner/08071002.png&width=320&height=100 HTTP/1.1" 200 55703 "http://xxx.xxx.com/admin/image.php?" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)"
分析日志可以看到,XX.XX.201.254的客户端,在【http://xxx.xxx.com/admin/image.php?】的画面上,发送GET请求【/api/resizeimage.php?image=banner/08071002.png&width=320&height=100】到我们的server上。
第一,我们这台server位于公司防火墙背后,运行的是名为[http://xxx.xxx.com/admin/]的公司内部系统。这个系统的域名也是公司内部DNS的域名,因此从外网直接发起攻击可能性不大。
第二, image.php?这个画面上确实有调用【api/resizeimage.php】的接口,但是如此频繁的访问,绝对不可能是正常的画面操作。
第三,api/resizeimage.php的代码的作用是将客户上传到server硬盘上的image文件读入内存,然后在CPU中进行计算,生成符合参数要求大小的缩小图,然后作为http响应返回回来。并且在内存中将缩小图释放掉。。。。。。。这么坑爹的代码,负载一上去,CPU肯定挂
我先把注意力放在client的XX.XX.201.254上,经过调查,这台服务器是另一个项目组的一台公用server。。。。
果然是高手,利用这台公用server作为跳板。
这台肉鸡上发生的事情和调查还在进行中,汇总之后也想写出来。
作为补救,我们先修改了resizeimage.php的代码逻辑,其次在Apache前方前置一个软件级别的防火墙,发现多次频繁同一IP请求则禁IP。
结论: 不能以为是内部系统就可以放松系统安全的考量
- 6楼daisuo2599昨天 13:09
- 学习了
- 5楼snrrk11843天前 15:48
- 哇,好酷呀。。。
- 4楼XmlRequest5天前 19:27
- 学习
- 3楼qq3454251706天前 09:05
- 一次虚惊
- 2楼maomaozhy19936天前 20:43
- 好棒。。。。。。。。。。。
- 1楼danhuang20126天前 20:19
- 学习啦