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進行手動敲入。。。
也可使用ipset集合對多量IP實行一條iptables規則
2. 此處開發傳來消息,代碼中:前端‘代碼沒有對手機號進行過濾,導致可以隨意拼接參數’。找到後端的發送網址,進行發送短信。
緊急開發代碼,對手機號進行限制。增加相應的圖形驗證碼。
開發也在加班加點的解決此事。。。
總結:
1.事情大概是5.4凌晨發生的,從凌晨到上班這段時間我們都沒有發出報警,及時的通知相關人員,因此我們需要建立監控和報警體系。現在的開源監控框架不少,例如zabbix。
2.代碼質量需要提升,公共方法需要寫入相關說明文檔。
3.建立相關安全組,減少暴露公網的端口。