前言
由於對安全防禦缺乏認識,在管理阿里雲服務器一年半時間後,出現了一次業務數據庫被勒索事件。具體記錄就是業務數據庫被刪除,勒索病毒自己創建一個數據庫,插入一條數據,數據大概內容就是你們的數據庫已經被我黑了,我們現在還保有備份,請在什麼什麼日期之前轉多少比特幣到哪,如果不轉,我們將把數據庫備份刪除。大概這些內容,這件事發生在要爲客戶演示之前一天,演示數據庫丟失,由於之前已經跟開發人員溝通做好數據庫備份,演示問題不大。其實在阿里雲平臺報告系統漏洞等安全隱患時,我也曾給出建議,建議公司老大購買安全產品進行防禦,但是公司老大可能感覺測試服務器無關痛癢沒必要把錢花在雲服務器上。所以一直沒去特意處理雲平臺安全中心報出的漏洞和隱患,這其實也爲以後中勒索病毒埋下了伏筆。這其中還有很重要的一個原因,事發之後我和其它公司做技術的朋友聊過這件事,發現大家都有一個共同的錯誤概念:雲服務器怎麼可能被黑?大家都錯誤得以爲雲服務器已經自帶很多安全機制了·····而實際上我當初租的就是隻帶操作系統的最基礎的ESC雲服務器而已。
安全隱患解決記錄
根據阿里雲基線檢查,進行解決,修改安全隱患:
1.修改服務器root密碼
切換到root賬號,輸入:passwd,輸入新密碼即可
阿里雲修改建議:請修改爲12位以上,數字/字母/特殊字符組合的強密碼
2.開啓服務器防火牆,開啓所需端口
常用端口:mysql端口,nginx端口,tomcat端口,redis端口等
開啓防火牆:sudo ufw enable 關閉防火牆:ufw disable 防火牆狀態:ufw status
外來訪問默認允許/拒絕:ufw default allow/deny
允許/拒絕 訪問20端口:ufw allow/deny 20 (20後可跟/tcp或/udp,表示tcp或udp封包)
ufw allow/deny servicename:ufw從/etc/services中找到對應service的端口,進行過濾。
ufw allow proto tcp from 10.0.1.0/10 to 本機ip port 25:允許自10.0.1.0/10的tcp封包訪問本機的25端口。
ufw delete allow/deny 20:刪除以前定義的"允許/拒絕訪問20端口"的規則
3.修改mysql默認的端口號
命令行用root賬號登錄mysql,查看端口號:
show global variables like 'port';
查看到端口號爲3306
ubuntu16.04編輯的配置文件爲:
/etc/mysql/mysql.conf.d/mysqld.cnf
/etc/mysql/mysql.cnf
修改這兩個文件的端口號爲2032
修改後,重啓mysql服務
再次查看端口號爲2302:show global variables like 'port';
在阿里雲控制檯的安全組規則開啓2032端口
4.mysql禁用符號鏈接以防止各種安全風險
編輯Mysql配置文件/etc/my.cnf,在mysqld 段落中配置symbolic-links=0,5.6及以上版
本應該配置爲skip_symbolic_links=yes或skip-symbolic-links,並重啓mysql服務。
mysql5.7中編輯文件:/etc/mysql/mysql.conf.d/mysqld.cnf
阿里雲安全中心怎麼改配置此項檢查都過不去,而且確實也改了,最後根據客服回覆:選擇忽略
驗證修改成功:show variables like 'have_symlink';
顯示爲:DISABLED
5.確保沒有用戶配置了通配符主機名
避免在主機名中只使用通配符,有助於限定可以連接數據庫的客戶端,否則服務就開放到了公網
加固建議:
執行SQL更新語句,爲每個用戶指定允許連接的host範圍。
①登錄數據庫,執行use mysql;
②執行語句select user,Host from user where Host='%';查看HOST爲通配符的用戶;
③刪除用戶或者修改用戶host字段,刪除語句:DROP USER 'user_name'@'%';
更新語句:update user set host = 'new_host' where host = '%';
④執行SQL語句: OPTIMIZE TABLE user; flush privileges;
6.禁止自動部署(Tomcat)---此問題忽略
配置自動部署,容易被部署惡意或未經測試的應用程序,應將其禁用
解決辦法:
修改Tomcat 跟目錄下的配置文件conf/server.xml,將host節點的autoDeploy屬性設置爲“false”,如果host的deployOnStartup屬性(如沒有deployOnStartup配置可以忽略)爲“true”,則也將其更改爲“false”
7.刪除項目無關文件和目錄
Tomcat安裝提供了示例應用程序、文檔和其他可能不用於生產程序及目錄,存在極大安全風險,建議移除
解決辦法:
請刪除Tomcat示例程序和目錄、管理控制檯等,即從Tomcat根目錄的webapps目錄,移出或刪除docs、examples、host-manager、manager目錄。
8.Tomcat目錄權限檢測
在運行Tomcat服務時,避免使用root用戶運行,tomcat目錄(catalina.home、 catalina.base目錄)所有者應改爲非root的運行用戶
解決辦法:
使用chown -R <Tomcat啓動用戶> <Tomcat目錄>修改tomcat目錄文件所有者,
如chown -R tomcat /usr/local/tomcat
路徑添加用戶組:chown -R tomcat.tomcatgroup /usr/local/apache-tomcat-8.5.27/
查看用戶組:cat /etc/group
查看用戶:cat /etc/shadow
增加用戶組tomcatgroup:groupadd tomcatgroup
增加用戶tomcat並指定該用戶home目錄和用戶組:useradd tomcat -d 目錄 -g tomcatgroup爲tomcat用戶設定密碼:passwd tomcat #添加已存在的用戶tomcat到用戶組tomcatgroup中:usermod -a -G tomcatgroup tomcat
9.禁止顯示異常調試信息
當請求處理期間發生運行時錯誤時,ApacheTomcat將向請求者顯示調試信息。建議不要向請求者提供此類調試信息。
解決辦法:
在Tomcat根目錄下的conf/web.xml文件裏面的web-app添加子節點:
<error-page><exception-type>java.lang.Throwable</exception-type><location>/error.jsp</location></error-page>
在webapps目錄下創建error.jsp,定義自定義錯誤信息。
10.設置密碼過期時間
設置密碼失效時間,強制定期修改密碼,減少密碼被泄漏和猜測風險,使用非密碼登陸方式(如密鑰對)請忽略此項。
解決辦法:
在 /etc/login.defs中將 PASS_MAX_DAYS 參數設置爲 60-180之間,如
PASS_MAX_DAYS 90
需同時執行命令設置root密碼失效時間:
chage --maxdays 90 root
11.設置密碼修改最小間隔時間--忽略
設置密碼修改最小間隔時間,限制密碼更改過於頻繁
在 /etc/login.defs 中將 PASS_MIN_DAYS 參數設置爲7-14之間,建議爲7
PASS_MIN_DAYS 7
需同時執行命令爲root用戶設置:
chage --mindays 7 root
12.設置SSH空閒超時退出時間--忽略
設置SSH空閒超時退出時間,可降低未授權用戶訪問其他用戶ssh會話的風險
解決辦法:
編輯/etc/ssh/sshd_config,將ClientAliveInterval =設置爲300到900,即5-15分鐘,
將ClientAliveCountMax設置爲0-3之間。
ClientAliveInterval 600
ClientAliveCountMax 2
13.設置用戶權限配置文件的權限
設置用戶權限配置文件的權限
解決辦法:
執行以下5條命令
chown root:root /etc/passwd /etc/shadow /etc/group /etc/gshadow
chmod 0644 /etc/group
chmod 0644 /etc/passwd
chmod 0400 /etc/shadow
chmod 0400 /etc/gshadow
14.密碼複雜度檢查--忽略
檢查密碼長度和密碼是否使用多種字符類型
解決辦法:
1、安裝PAM的cracklib模塊,執行命令:
apt-get update&&apt-get install libpam-cracklib
2、編輯/etc/pam.d/common-password,
在password requisite pam_cracklib.so開頭的這一行配置
minclass(至少包含小寫字母、大寫字母、數字、特殊字符等4類字符中的3類或4類)
設置爲3或4,即在行末尾加上參數minclass=3;在password [success=1 default=ignore] pam_unix.so
開頭的這一行增加配置minlen(密碼最小長度)設置爲9-32位,建議爲9,即在行末尾加上參數minlen=9
15.檢查密碼重用是否受限制--忽略
強制用戶不重用最近使用的密碼,降低密碼猜測攻擊風險
解決辦法:
編輯/etc/pam.d/common-password,在password [success=1 default=ignore] pam_unix.so開頭的
這一行增加配置remember設置爲5-24之間,建議爲5,即在行末尾加上參數remember=5
16.USN-3932-1: Linux內核漏洞
修復命令:apt-get update && apt-get install linux-image-generic
17.阿里雲標準-Redis安全基線檢查
①禁止監聽在公網
Redis監聽在0.0.0.0,可能導致服務對外或內網橫向移動滲透風險,極易被黑客利用入侵。
加固建議:
在redis的配置文件redis.conf中配置如下: bind 127.0.0.1或者內網IP,然後重啓redis
②限制redis 配置文件訪問權限
因爲redis密碼明文存儲在配置文件中,禁止不相關的用戶訪問改配置文件是必要的,設置redis配置文件權限爲600
加固建議:
執行以下命令修改配置文件權限:
chmod 600 /<filepath>/redis.conf
③修改默認6379端口
避免使用熟知的端口,降低被初級掃描的風險
加固建議:
編輯文件redis的配置文件redis.conf,找到包含port的行,將默認的6379修改爲自定義的端口號,然後重啓redis
④開啓redis密碼認證,並設置高複雜度密碼
redis在redis.conf配置文件中,設置配置項requirepass, 開戶密碼認證。 redis因查詢效率高,auth
這種命令每秒能處理9w次以上,簡單的redis的密碼極容易爲攻擊者暴破。
加固建議:
打開redis.conf,找到requirepass所在的地方,修改爲指定的密碼,密碼應符合複雜性要求:
a、長度8位以上
b、包含以下四類字符中的三類字符:
英文大寫字母(A 到 Z)
英文小寫字母(a 到 z)
10 個基本數字(0 到 9)
非字母字符(例如 !、$、%、@、^、&等,#除外)
c、避免使用已公開的弱密碼,如:abcd.1234 、admin@123等
再去掉前面的#號註釋符,然後重啓redis
⑤禁用或者重命名危險命令
Redis中線上使用keys *命令,也是非常危險的。因此線上的Redis必須考慮禁用一些危險的命令,或
者儘量避免誰都可以使用這些命令,Redis沒有完整的管理系統,但是也提供了一些方案。
加固建議:
修改 redis.conf 文件,添加
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command KEYS ""
rename-command SHUTDOWN ""
rename-command DEL ""
rename-command EVAL ""
然後重啓redis。 重命名爲"" 代表禁用命令,如想保留命令,可以重命名爲不可猜測的字符串,
如: rename-command FLUSHALL joYAPNXRPmcarcR4ZDgC
18.mysql:禁用local-infile選項---暫時忽略
禁用local_infile選項會降低攻擊者通過SQL注入漏洞器讀取敏感文件的能力
加固建議:
編輯Mysql配置文件/etc/my.cnf,在mysqld 段落中配置local-infile參數爲0,並重啓mysql服務:
local-infile=0
local-infile:本地批量導入和導出數據
19.SSH暴力破解,如何防禦?
參照URL:
https://www.freebuf.com/sectool/159488.html
https://blog.csdn.net/openinfra/article/details/88872989
更改ssh端口號爲2323
vim /etc/ssh/sshd_config
在/etc/hosts.allow中設置允許的IP訪問,例如sshd:192.168.17.144:allow
如果開啓左右訪問:ufw allow 2323
如果阿里雲服務器在雲服務器實例中需要添加安全組2323
結論
發生勒索病毒,雖然可以直接刪除勒索數據庫,把備份的數據庫再構建回去,但是從此也開始注意服務器安全問題,聯繫阿里雲客服尋求解決方案。以下是阿里雲客服的回覆:
[問題定義] 描述問題:業務數據庫被黑,並創建數據庫,在數據庫中寫入勒索信息 實例ID: 接下來,我們將對上述問題進行分析排 查,如果針對上述問題定義及範圍有任何疑問,歡迎隨時聯繫我們。 [處理建議] 您好,非常抱歉讓您久等了,經過我們排查分 析,我們針對於這種加密勒索病毒的情況也無能爲力。這種情況下恢復類似於破譯密碼,難度幾乎不可能完成的,由於您沒有更早時間的快照備份,因此目前我們無法恢復。建議您看下市面上第三方數據恢復公司看下能否幫您處理。後續還請您務必做好服務器以及數據庫等應用安全加固工作,給您提供以下建議和方案:
1. 建議使用安騎士企業版病毒自動隔離(即病毒自動查殺)功能爲您提供精準防禦能力。目前已支持主流勒索病毒、DDOS木馬、挖礦和木馬程序、惡意程序、後門程序和蠕蟲病毒等類型。
2. 加密勒索事件防護方案 https://help.aliyun.com/knowledge_detail/48701.html
3. 預防數據庫勒索事件https://help.aliyun.com/knowledge_detail/60893.html
通過阿里雲工單的迴應及電話客服的建議,得出結論:
對於已經發生勒索病毒,屬於強力破解,問題很嚴重,出現這種情況只有兩種解決方案:①重做系統②換雲服務器否則已經被黑客定位到ip很難做到全新防範。換服務器後,最好也爲阿里雲ECS服務器配置企業級病毒查殺和安全漏洞的檢測,因爲一切嚴重安全事件的發生都是從漏洞開始的。(冰凍三尺非一日之寒)
以阿里雲平臺解決方案,爲了防止數據丟失情況,使用"企業版雲安全中心"是基礎,最保險的方法是購買RDS阿里雲專業數據庫服務,此服務使數據絕不會出現安全事件。
根據以下配置,以下是雲安全中心、RDS、阿里雲的一年的租金:
①RDS阿里雲專業數據庫服務
8G內存+2核心+2000連接數+500GB存儲,一年5900¥。
②雲安全中心
企業版安全防護,企業級基礎版,一年1785¥。
③阿里雲ECS雲服務器
2核8G內存,2MB帶寬,100GB系統盤20GB數據盤,一年3988¥
ECS+RDS+安全防護一年一共:5900+1785+3988=11673¥
這只是當前時間點基礎版的配置參數,具體參照阿里雲平臺。