linux服务器沦陷为它人发送短信工具的原因:
今天上班产品经理说:公司的短信验证码剩余使用量为0,头一天我进行检查的时候还剩1万多条。震惊!震惊!震惊!
查找过程:
一:于是查看与我们第三方短信运营商进行沟通,查看相应的情况,具体如图:
当时的短信条数已经为0,我们继续查看下一条:
这个已经可以简单的发现问题了:
1.号码为空,发送状态为空。可能存在人为的绕过代码中的验证
2.发送时间(日期)是接连不断的发送。代表着代码中的验证10s,30s,60s这些验证被人为的跳过了。
3.短信运营商没有对号码进行过滤,审查。只要我们进行提交,短信运营商就进行发送,发送了就收费。
二:查看2017.05.04 00:00后端日志的情况,具体如图:
基本上日志上的内容都是这样的情况。遇到此种问题需要与开发进行沟通,协助开发解决此事。
这个日志是后端的日志,我们还有前端的一个访问日志,大概都是从registerGetPhoneCode当中访问来的。我们来通过grep和awk查看一下、命令如下:
cat www.log|grep registerGetPhoneCode|awk ‘{print $1}‘ |sort|uniq -c |sort -nr |head -n 40
如图:
命令详解:查看日志文件,首先使用grep对registerGetPhoneCode进行过滤,再通过awk倒序排序,去重,只显示行数之后取文件的第一列进行输出(被我马赛克是IP,想了想还是不暴露为好)。
很显然,由此可以看见在凌晨时它人对服务器别有用心。
三:解决办法:
1.将这些IP全部添加到防火墙中。。。
可使用shell脚本添加到防火墙中,可以挨个IP进行手动敲入。。。
2. 此处开发传来消息,代码中:前端‘代码没有对手机号进行过滤,导致可以随意拼接参数’。找到后端的发送网址,进行发送短信。
紧急开发代码,对手机号进行限制。增加相应的图形验证码。
开发也在加班加点的解决此事。。。
总结:
1.事情大概是5.4凌晨发生的,从凌晨到上班这段时间我们都没有发出报警,及时的通知相关人员,因此我们需要建立监控和报警体系。现在的开源监控框架不少,例如zabbix。
2.代码质量需要提升,公共方法需要写入相关说明文档。
3.建立相关安全组,减少暴露公网的端口。