目錄
- 前言
- 1 安全評估報告的漏洞信息
- 1.1 nginx漏洞概況
- 1.2 nginx漏洞詳細信息
- 1.3 安裝的軟件信息
- 2 問題分析
- 3 Nginx從1.18版本升級到1.26版本的步驟與說明
- 3.1 查看現有Nginx配置參數
- 3.2 下載新版本Nginx
- 3.3 配置新版本Nginx
- 3.4 編譯新版本Nginx
- 3.5 備份舊版本Nginx的二進制文件
- 3.6 替換Nginx二進制文件
- 3.7 測試新版本Nginx
- 3.8 查看Nginx運行情況
- 3.9 發送信號停止舊版本Nginx接受請求
- 3.10 再次查看Nginx運行情況
- 3.11 發送WINCH信號關閉舊的Nginx工作進程
- 3.12 關閉舊的Nginx master進程
- 結語
前言
在軟件開發完成并交付給客戶后,經過一段時間,客戶的上級部門要求對服務器進行安全檢測。通過漏洞掃描,發現了服務器存在安全漏洞,并要求在規定期限內完成漏洞修補。由于客戶通常缺乏技術能力,他們會求助于軟件開發公司來協助解決服務器的安全問題。作為軟件開發人員,我們不僅會為客戶開發軟件,還會幫助他們解決服務器安全方面的難題,確保其系統的安全性和穩定性。
1 安全評估報告的漏洞信息
1.1 nginx漏洞概況
首先看一下安全評估報告,報告中對服務器的漏洞,漏洞概況是一個所有漏洞的列表。此處只針對nginx的漏洞進行展示和處理。
端口 | 協議 | 服務 | 漏洞 |
---|---|---|---|
– | ICMP | – | ICMP timestamp請求響應漏洞 |
80 | TCP | http | nginx 安全漏洞(CVE-2021-23017) nginx 緩沖區錯誤漏洞(CVE-2022-41741) nginx 越界寫入漏洞(CVE-2022-41742) Nginx 信任管理問題漏洞(CVE-2021-3618) 通過HTTP獲取遠端WWW服務信息 |
1.2 nginx漏洞詳細信息
然后針對每個漏洞的說明,如nginx漏洞,以下是幾個典型的nginx嚴重漏洞詳細信息。
漏洞名稱 | nginx 安全漏洞(CVE-2021-23017) |
---|---|
詳細描述 | Nginx是美國Nginx公司的一款輕量級Web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。 nginx存在安全漏洞,該漏洞源于一個離一錯誤在該漏洞允許遠程攻擊者可利用該漏洞在目標系統上執行任意代碼。 受影響版本:0.6.18-1.20.0 |
解決辦法 | 廠商補丁: 目前廠商已發布升級補丁以修復漏洞,補丁獲取鏈接: https://www.nginx.com/blog/updating-nginx-dns-resolver-vulnerability-cve-2021-23017/ |
威脅分值 | 7.7 |
危險插件 | 否 |
發現日期 | 2021-05-25 |
CVE編號 | CVE-2021-23017 |
CNNVD編號 | CNNVD-202105-1581 |
CNCVE編號 | CNCVE-202123017 |
CVSS評分 | 6.8 |
漏洞名稱 | nginx 緩沖區錯誤漏洞(CVE-2022-41741) |
---|---|
詳細描述 | 此插件基于版本檢測,有可能誤報,未開啟 MP4 模塊的nginx屬于誤報,請忽略該漏洞。 Nginx是美國Nginx公司的一款輕量級Web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。 Nginx在 ngx_http_mp4_module 中存在漏洞,這可能允許攻擊者激發 worker 進程的崩潰,或者通過使用特制的 mp4 文件致使 worker 進程出現內存泄露。該問題僅影響啟用了 ngx_http_mp4_module 模塊(默認不啟用)并在配置文件中使用 .mp4 指令的 NGINX。此外,只有當攻擊者能夠觸發使用 ngx_http_mp4_module 對特制 mp4 文件的進行處理時,攻擊才有可能成功。 https://mailman.nginx.org/pipermail/nginx-announce/2022/RBRRON6PYBJJM2XIAPQBFBVLR4Q6IHRA.html |
解決辦法 | 緩解措施:只允許受信用戶發布音頻和視頻文件,或者在 NGINX 配置中禁用 MP4 模塊,直到升級至修復版本。 廠商補丁: 目前廠商已發布升級補丁以修復漏洞,補丁獲取鏈接: http://nginx.org/download/patch.2022.mp4.txt |
威脅分值 | 7.8 |
危險插件 | 否 |
發現日期 | 2022-10-19 |
CVE編號 | CVE-2022-41741 |
CNNVD編號 | CNNVD-202210-1419 |
CNCVE編號 | CNCVE-202241741 |
漏洞名稱 | nginx 越界寫入漏洞(CVE-2022-41742) |
---|---|
詳細描述 | 此插件基于版本檢測,有可能誤報。 Nginx是美國Nginx公司的一款輕量級Web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。 Nginx Plus 的模塊 ngx_http_hls_module 中存在一個漏洞,該漏洞可能允許本地攻擊者破壞 NGINX 的工作進程內存,從而導致其崩潰或在使用特制的音頻或視頻文件時產生其他潛在的影響。只有當配置文件中使用 hls 指令時,該問題才會影響 Nginx Plus。 此外,只有當攻擊者可以觸發使用模塊 ngx_http_hls_module 對特制音頻或視頻文件進行 處理時,攻擊才有可能成功。一次成功的利用可能允許一個本地攻擊者破壞 NGINX 的 worker 進程,導致其中止或其他潛在的影響。 https://mailman.nginx.org/pipermail/nginx-announce/2022/RBRRON6PYBJJM2XIAPQBFBVLR4Q6IHRA.html |
解決辦法 | 緩解措施:只允許受信用戶發布音頻和視頻文件。或者在 NGINX 配置中禁用 HLS 模塊,直到升級至修復版本,可緩解此風險。 廠商補丁: 目前廠商已發布升級補丁以修復漏洞,補丁獲取鏈接: http://nginx.org/download/patch.2022.mp4.txt |
威脅分值 | 7.1 |
危險插件 | 否 |
發現日期 | 2022-12-08 |
CVE編號 | CVE-2022-41742 |
CNNVD編號 | CNNVD-202210-1409 |
CNCVE編號 | CNCVE-202241742 |
漏洞名稱 | Nginx 信任管理問題漏洞(CVE-2021-3618) |
---|---|
詳細描述 | 此插件基于nginx版本檢測,有可能誤報。 Nginx是美國F5公司的一款輕量級Web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,在BSD-like協議下發行。 Nginx存在信任管理問題漏洞,該漏洞源于存在 ALPACA(應用層協議內容混淆)攻擊,這會破壞TLS的身份驗證,并且可能會發生跨協議攻擊。 |
解決辦法 | 廠商升級: Nginx ----- 目前廠商已經發布了新版本以修復這個安全問題,請到廠商的主頁下載: 下載鏈接:http://nginx.org/en/download.html |
威脅分值 | 7.4 |
危險插件 | 否 |
發現日期 | 2022-03-23 |
CVE編號 | CVE-2021-3618 |
CNNVD編號 | CNNVD-202107-216 |
CNCVE編號 | CNCVE-20213618 |
CVSS評分 | 5.8 |
1.3 安裝的軟件信息
軟件名稱 | 版本號 |
---|---|
nginx | 1.18.0 |
2 問題分析
查看漏洞信息的詳細說明,里面有解決辦法一項,我們可以看一下解決辦法。
漏洞名稱 | 解決辦法 |
---|---|
nginx 安全漏洞(CVE-2021-23017) | 緩解措施:只允許受信用戶發布音頻和視頻文件,或者在 NGINX 配置中禁用 MP4 模塊,直到升級至修復版本。 廠商補丁: 目前廠商已發布升級補丁以修復漏洞,補丁獲取鏈接: http://nginx.org/download/patch.2022.mp4.txt |
nginx 緩沖區錯誤漏洞(CVE-2022-41741) | 緩解措施:只允許受信用戶發布音頻和視頻文件,或者在 NGINX 配置中禁用 MP4 模塊,直到升級至修復版本。 廠商補丁: 目前廠商已發布升級補丁以修復漏洞,補丁獲取鏈接: http://nginx.org/download/patch.2022.mp4.txt |
nginx 越界寫入漏洞(CVE-2022-41742) | 緩解措施:只允許受信用戶發布音頻和視頻文件。或者在 NGINX 配置中禁用 HLS 模塊,直到升級至修復版本,可緩解此風險。 廠商補丁: 目前廠商已發布升級補丁以修復漏洞,補丁獲取鏈接: http://nginx.org/download/patch.2022.mp4.txt |
Nginx 信任管理問題漏洞(CVE-2021-3618) | 廠商升級: Nginx ----- 目前廠商已經發布了新版本以修復這個安全問題,請到廠商的主頁下載: 下載鏈接:http://nginx.org/en/download.html |
上面四個nginx的漏洞,解決辦法都有說明通過升級可以修復漏洞。所以我們修復漏洞的方法就是升級nginx。
服務器的nginx版本是1.18,nginx的穩定版本都是偶數,也就是1.20,1.22,1.24,1.26等,通過查閱nginx官網,可以看到nginx偶數版本的最新版本,就是1.26,所以我們選用1.26做為升級后的版本。
3 Nginx從1.18版本升級到1.26版本的步驟與說明
3.1 查看現有Nginx配置參數
首先,使用以下命令查看當前Nginx的編譯配置參數:
/usr/local/nginx/sbin/nginx -V
說明:這一步可以獲取當前Nginx版本的編譯配置參數,這些參數將在配置新版本時使用,確保新舊版本的配置一致性。
3.2 下載新版本Nginx
從Nginx官網或使用wget下載最新版本的Nginx:
wget http://nginx.org/download/nginx-1.26.0.tar.gz
解壓下載的壓縮包:
tar -zxvf nginx-1.26.0.tar.gz
cd nginx-1.26.0
說明:這一步下載并解壓最新版本的Nginx源碼,準備進行配置和編譯。
3.3 配置新版本Nginx
在新版本Nginx的根目錄下,使用從第1步獲取的配置參數進行配置:
./configure <configuration arguments from nginx -V>
說明:這一步通過./configure
命令使用舊版本的配置參數對新版本進行配置,以確保新版本Nginx的配置和舊版本一致。
3.4 編譯新版本Nginx
執行以下命令進行編譯:
make
說明:make
命令將源碼編譯為二進制文件。編譯過程根據配置參數生成符合需求的Nginx可執行文件。
3.5 備份舊版本Nginx的二進制文件
備份當前正在使用的Nginx二進制文件:
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
說明:這一步是為了安全起見,備份舊版本的Nginx可執行文件。如果新版本出現問題,可以快速恢復舊版本。
3.6 替換Nginx二進制文件
將新編譯的Nginx二進制文件拷貝到原來的Nginx二進制文件位置:
cp objs/nginx /usr/local/nginx/sbin/nginx
說明:這一步將新版本的Nginx二進制文件替換舊版本文件,以便使用新版本Nginx。
3.7 測試新版本Nginx
測試新版本Nginx是否正確編譯和安裝:
/usr/local/nginx/sbin/nginx -V
說明:確認新版本Nginx的編譯配置參數是否正確,以確保新版本已經成功安裝且配置無誤。
3.8 查看Nginx運行情況
查看當前Nginx的運行情況:
ps -ef | grep nginx
說明:檢查Nginx進程的運行情況,獲取Nginx主進程(master)和工作進程(worker)的進程ID。
3.9 發送信號停止舊版本Nginx接受請求
發送USR2信號給舊版本Nginx的master進程(假設PID為4148):
kill -USR2 4148
說明:kill -USR2 <PID>
命令會通知Nginx啟動新的master進程和worker進程,繼續接受新的請求,而舊的master進程和worker進程則完成現有請求后停止工作。
3.10 再次查看Nginx運行情況
確認新的Nginx進程是否已啟動:
ps -ef | grep nginx
說明:再次檢查Nginx進程的運行情況,確保新的master和worker進程已經啟動。
3.11 發送WINCH信號關閉舊的Nginx工作進程
發送WINCH信號關閉舊的Nginx工作進程(假設舊的master進程PID為4118):
kill -WINCH 4118
說明:kill -WINCH <PID>
命令會通知舊的master進程關閉其管理的worker進程,舊的worker進程將優雅地停止接受新請求,完成處理中的請求后退出。
3.12 關閉舊的Nginx master進程
發送QUIT信號關閉舊的Nginx master進程(假設PID為4148):
kill -QUIT 4148
說明:kill -QUIT <PID>
命令會通知舊的master進程優雅地關閉,即完成所有正在處理的請求后退出。至此,舊的Nginx版本已完全停止工作,新版本Nginx開始處理所有請求。
結語
升級Nginx是修復nginx漏洞的關鍵方法,需要仔細規劃和執行以確保服務不中斷。首先,確保備份舊版本的二進制文件和配置文件,以便在新版本出現問題時能夠快速恢復。其次,在配置和編譯新版本時,確保使用與舊版本相同的編譯參數,保持配置一致性。使用kill
命令時,注意正確發送信號以實現平滑過渡,避免服務中斷。尤其在發送USR2
、WINCH
和QUIT
信號時,需確認進程ID正確無誤。最后,升級后仔細測試新版本Nginx的運行情況,確保其正常工作并能滿足業務需求。通過上述步驟和注意事項,可以有效地完成Nginx的升級任務。