基於等保3.0的MySQL資料庫審計日誌外掛實踐
背景
網路安全等級保護制度3.0
等保3.0(即網路安全等級保護制度3.0版本)資訊保安技術等級保護基本要求(GB/T 22239-2019),作為資訊保安等級保護的最新標準,對資料審計日誌的要求是出於多方面的考慮。對MySQL資料庫審計日誌的要求主要體現在以下幾個方面:
1.審計日誌的完整性
全面記錄:要求MySQL資料庫審計日誌能夠全面記錄所有對資料庫的訪問和操作行為,包括但不限於登入、查詢、修改、刪除等關鍵操作。這有助於在發生安全事件時進行追溯和分析。
關鍵資訊:審計日誌應包含足夠的關鍵資訊,如操作時間、操作型別、操作物件、操作結果以及執行操作的使用者等,以便後續的安全審計和合規性檢查。
2.審計日誌的保密性
訪問控制:對審計日誌的訪問應進行嚴格的控制,確保只有授權使用者才能檢視和操作審計日誌,防止敏感資訊洩露。
加密儲存:對於敏感資訊或高安全要求的審計日誌,應採用加密方式進行儲存,以提高資料的保密性。
3.審計日誌的可用性
儲存要求:根據《網路安全法》和相關等級保護要求,審計日誌應至少儲存六個月以上,以便在需要時進行回溯和調查。
易於查詢:審計日誌應具備良好的查詢功能,支援按時間、操作型別、使用者等多種維度進行快速檢索,提高審計效率。
4.審計日誌的合規性
符合標準:MySQL資料庫審計日誌的生成、儲存和管理應符合國家相關法律法規以及行業標準的要求,如《網路安全法》、《網路安全等級保護基本要求》等。
定期審查:應定期對審計日誌進行審查,確保審計日誌的完整性和準確性,及時發現並處理潛在的安全威脅。
MySQL預設審計日誌general存在的問題
等保3.0需要MySQL啟用審計日誌,MySQL資料審計日誌general.log的缺點,有以下幾點:
1)日誌量龐大,篩選難度大
全量記錄:general.log會記錄所有到達MySQL Server的SQL語句,包括資料庫連線資訊、資料庫和表的開啟資訊、連線執行緒、CRUD操作等。這意味著,無論SQL語句是否正確執行,都會被記錄下來,導致日誌量非常龐大。
篩選困難:由於記錄的是全量資訊,當需要從中篩選出特定的操作或錯誤時,難度會大大增加,尤其是在併發量高的情況下,篩選工作幾乎不可行。
1)對效能有較大影響
IO壓力:大量的日誌記錄會對磁碟IO造成較大壓力,尤其是在高併發場景下,這種壓力會進一步加劇,從而影響到資料庫的整體效能。
效能測試資料:有研究表明,啟用審計日誌後,資料庫效能可能會下降約22.9%,事務處理速度也會明顯減緩。
3)安全性與隱私風險
敏感資訊洩露:general.log記錄的是明文SQL語句,如果其中包含敏感資訊(如使用者密碼、隱私資料等),則存在洩露的風險。
控制不足:無法精細控制需要記錄的SQL型別(如只記錄查詢語句,不記錄更新語句等),這進一步增加了資訊洩露的風險。
4)管理與維護成本
日誌檔案快速膨脹:由於日誌量龐大,general.log檔案會迅速膨脹,佔用大量磁碟空間。如果不及時處理,可能會影響到資料庫的正常執行。
定期清理與備份:為了避免日誌檔案過大帶來的問題,需要定期清理舊的日誌檔案並進行備份。這增加了運維人員的工作量和維護成本。
實踐
實施MySQL安全審計配置,我們在這兒可以使用社群版的AWS MariaDB Audit Plugin, MySQL 8.0以上版本從這兒下載。
audit-plugin-for-mysql
這個外掛基於MariaDB審計外掛。在MySQL 5.6中,外掛API與MariaDB審計外掛相容。但在MySQL 5.7和8.0中,外掛API卻有了顯著的差異。因此,針對MariaDB的Amazon RDS建立了一個修改版,使其與MySQL 5.7和8.0相容。此版本在可能的情況下保留了原始審計外掛的功能,但使外掛適應了MySQL 8.0的外掛API。
MariaDB Audit Plugin是一個用於記錄資料庫操作的日誌外掛。它可以記錄各種資料庫事件,如使用者登入、查詢操作、表結構變更等。這些資訊會被寫入到一個檔案中(例如:server_audit.log
)。
特點:
- 細粒度審計: 可以配置外掛來記錄不同型別的資料庫事件。
- 靈活配置: 支援配置哪些事件需要被記錄,以及記錄的詳細程度。
- 高效能: 對資料庫效能的影響較小。
具體使用參考
- system variables
- status variables
- logging settings
安裝過程
進入伺服器審計外掛位置
cd /home/devops/
將外掛複製到資料容器
sudo docker cp /home/devops/server_audit.so c2mysql:/tmp/
進入資料庫容器
docker exec -it c2mysql /bin/bash
mysql -u root -p
密碼
檢視外掛安裝目錄
show variables like '%plugin%';
Plugin_dir 就是外掛的目錄 一般為/usr/lib/mysql/plugin
將剛才tmp目錄下的so檔案放到對應外掛目錄
mv /tmp/server_audit.so /usr/lib/mysql/plugin/
執行安裝命令
install plugin server_audit SONAME 'server_audit.so'
檢視外掛配置資訊
show variables like '%audit%'
預設審計日誌是關閉狀態
開啟日誌記錄
set global server_audit_logging=on
設定日誌檔案大小和個數
set global server_audit_file_rotate_size = 100000000
set global server_audit_file_rotations = 100;
驗證是否成功
進入/data/docker/mysqldata/data/目錄
cd /data/docker/mysqldata/data/
ls
檢視是否有server_audit.log 日誌檔案產生
示例配置引數
100個審計日誌檔案,每個100MB,最大10GB
server_audit_events
value
server_audit_excl_users
server_audit_file_path
server_audit.log
server_audit_file_rotate_now
OFF
server_audit_file_rotate_size
100000000
server_audit_file_rotations
100
server_audit_incl_users
server_audit_loc_info
server_audit_logging
ON
server_audit_output_type
file
server_audit_query_log_limit
1024
server_audit_syslog_facility
LOG_USER
server_audit_syslog_ident
mysql-server_auditing
server_audit_syslog_info
server_audit_syslog_priority
LOG_INFO
示例我們MySQL資料庫審計日誌 路徑
/data/docker/mysqldata/data
-rw-r----- 1 polkitd input 97951700 Jun 28 11:09 server_audit.log
-rw-r----- 1 polkitd input 98070901 Jun 28 11:13 server_audit.log
-rw-r----- 1 polkitd input 100000062 Jun 26 11:30 server_audit.log.001
-rw-r----- 1 polkitd input 100000056 Jun 24 10:49 server_audit.log.002
-rw-r----- 1 polkitd input 100000094 Jun 22 06:45 server_audit.log.003
-rw-r----- 1 polkitd input 100000094 Jun 20 01:46 server_audit.log.004
-rw-r----- 1 polkitd input 100000323 Jun 17 21:32 server_audit.log.005
-rw-r----- 1 polkitd input 100000304 Jun 15 19:35 server_audit.log.006
-rw-r----- 1 polkitd input 100000566 Jun 13 17:05 server_audit.log.007
-rw-r----- 1 polkitd input 100000710 Jun 11 14:34 server_audit.log.008
-rw-r----- 1 polkitd input 100000485 Jun 9 12:04 server_audit.log.009
-rw-r----- 1 polkitd input 100000147 Jun 7 10:07 server_audit.log.010
-rw-r----- 1 polkitd input 100000090 Jun 5 07:37 server_audit.log.011
-rw-r----- 1 polkitd input 100000143 Jun 3 06:06 server_audit.log.012
-rw-r----- 1 polkitd input 100000444 Jun 1 04:09 server_audit.log.013
-rw-r----- 1 polkitd input 100000860 May 30 01:40 server_audit.log.014
-rw-r----- 1 polkitd input 100000106 May 28 00:14 server_audit.log.015
-rw-r----- 1 polkitd input 100000427 May 25 22:19 server_audit.log.016
-rw-r----- 1 polkitd input 100000007 May 23 20:16 server_audit.log.017
-rw-r----- 1 polkitd input 100000081 May 21 17:46 server_audit.log.018
-rw-r----- 1 polkitd input 100000789 May 19 15:20 server_audit.log.019
-rw-r----- 1 polkitd input 100000683 May 17 13:47 server_audit.log.020
-rw-r----- 1 polkitd input 100000908 May 15 11:52 server_audit.log.021
-rw-r----- 1 polkitd input 100000346 May 13 10:30 server_audit.log.022
-rw-r----- 1 polkitd input 100000098 May 11 08:32 server_audit.log.023
-rw-r----- 1 polkitd input 100000060 May 9 06:02 server_audit.log.024
-rw-r----- 1 polkitd input 100000027 May 7 03:32 server_audit.log.025
-rw-r----- 1 polkitd input 100000856 May 5 01:02 server_audit.log.026
-rw-r----- 1 polkitd input 100000110 May 2 23:05 server_audit.log.027
-rw-r----- 1 polkitd input 100000894 Apr 30 20:34 server_audit.log.028
-rw-r----- 1 polkitd input 100000102 Apr 28 18:04 server_audit.log.029
-rw-r----- 1 polkitd input 100000071 Apr 26 16:18 server_audit.log.030
-rw-r----- 1 polkitd input 100000331 Apr 24 13:48 server_audit.log.031
-rw-r----- 1 polkitd input 100000041 Apr 22 11:18 server_audit.log.032
-rw-r----- 1 polkitd input 100000725 Apr 20 09:21 server_audit.log.033
-rw-r----- 1 polkitd input 100000029 Apr 18 06:51 server_audit.log.034
-rw-r----- 1 polkitd input 100000068 Apr 16 05:33 server_audit.log.035
-rw-r----- 1 polkitd input 100000079 Apr 14 05:09 server_audit.log.036
-rw-r----- 1 polkitd input 100000027 Apr 12 03:12 server_audit.log.037
-rw-r----- 1 polkitd input 100000100 Apr 10 01:29 server_audit.log.038
-rw-r----- 1 polkitd input 100000066 Apr 7 22:59 server_audit.log.039
-rw-r----- 1 polkitd input 100000192 Apr 5 21:01 server_audit.log.040
-rw-r----- 1 polkitd input 100000903 Apr 3 18:31 server_audit.log.041
-rw-r----- 1 polkitd input 100000826 Apr 1 16:01 server_audit.log.042
-rw-r----- 1 polkitd input 100000544 Mar 30 14:04 server_audit.log.043
-rw-r----- 1 polkitd input 100000140 Mar 28 11:33 server_audit.log.044
-rw-r----- 1 polkitd input 100000162 Mar 26 09:03 server_audit.log.045
-rw-r----- 1 polkitd input 100000296 Mar 24 06:33 server_audit.log.046
-rw-r----- 1 polkitd input 100000520 Mar 22 04:36 server_audit.log.047
-rw-r----- 1 polkitd input 100000027 Mar 20 02:08 server_audit.log.048
-rw-r----- 1 polkitd input 100000058 Mar 18 01:04 server_audit.log.049
-rw-r----- 1 polkitd input 100000675 Mar 15 23:07 server_audit.log.050
-rw-r----- 1 polkitd input 100000743 Mar 13 20:37 server_audit.log.051
-rw-r----- 1 polkitd input 100000049 Mar 11 18:06 server_audit.log.052
-rw-r----- 1 polkitd input 100000262 Mar 9 16:09 server_audit.log.053
-rw-r----- 1 polkitd input 100000764 Mar 7 13:39 server_audit.log.054
-rw-r----- 1 polkitd input 100000031 Mar 5 12:41 server_audit.log.055
-rw-r----- 1 polkitd input 100000089 Mar 3 10:11 server_audit.log.056
-rw-r----- 1 polkitd input 100000054 Mar 1 08:13 server_audit.log.057
-rw-r----- 1 polkitd input 100000736 Feb 28 06:19 server_audit.log.058
-rw-r----- 1 polkitd input 100000407 Feb 26 06:09 server_audit.log.059
-rw-r----- 1 polkitd input 100000574 Feb 24 04:11 server_audit.log.060
-rw-r----- 1 polkitd input 100000230 Feb 22 03:36 server_audit.log.061
-rw-r----- 1 polkitd input 100000564 Feb 20 05:33 server_audit.log.062
-rw-r----- 1 polkitd input 100000686 Feb 18 08:31 server_audit.log.063
-rw-r----- 1 polkitd input 100000049 Feb 16 06:34 server_audit.log.064
-rw-r----- 1 polkitd input 100000016 Feb 14 04:03 server_audit.log.065
-rw-r----- 1 polkitd input 100000483 Feb 12 01:34 server_audit.log.066
-rw-r----- 1 polkitd input 100000088 Feb 9 23:37 server_audit.log.067
-rw-r----- 1 polkitd input 100000230 Feb 7 21:06 server_audit.log.068
-rw-r----- 1 polkitd input 100000083 Feb 5 19:53 server_audit.log.069
-rw-r----- 1 polkitd input 100000030 Feb 3 22:01 server_audit.log.070
-rw-r----- 1 polkitd input 100000196 Feb 1 20:24 server_audit.log.071
-rw-r----- 1 polkitd input 100000048 Jan 31 02:38 server_audit.log.072
-rw-r----- 1 polkitd input 100000541 Jan 29 21:02 server_audit.log.073
-rw-r----- 1 polkitd input 100000424 Jan 27 20:57 server_audit.log.074
-rw-r----- 1 polkitd input 100000092 Jan 25 19:34 server_audit.log.075
-rw-r----- 1 polkitd input 100000079 Jan 23 18:26 server_audit.log.076
-rw-r----- 1 polkitd input 100000569 Jan 21 17:51 server_audit.log.077
-rw-r----- 1 polkitd input 100000034 Jan 19 15:53 server_audit.log.078
-rw-r----- 1 polkitd input 100000455 Jan 17 13:40 server_audit.log.079
-rw-r----- 1 polkitd input 100000512 Jan 15 11:09 server_audit.log.080
-rw-r----- 1 polkitd input 100000028 Jan 13 10:55 server_audit.log.081
-rw-r----- 1 polkitd input 100000584 Jan 11 10:02 server_audit.log.082
-rw-r----- 1 polkitd input 100000045 Jan 9 08:22 server_audit.log.083
-rw-r----- 1 polkitd input 100000389 Jan 7 13:16 server_audit.log.084
-rw-r----- 1 polkitd input 100000022 Jan 5 13:07 server_audit.log.085
-rw-r----- 1 polkitd input 100000001 Jan 3 10:37 server_audit.log.086
-rw-r----- 1 polkitd input 100000094 Jan 1 08:08 server_audit.log.087
-rw-r----- 1 polkitd input 100000014 Dec 30 06:10 server_audit.log.088
-rw-r----- 1 polkitd input 100000763 Dec 28 2023 server_audit.log.089
-rw-r----- 1 polkitd input 100000033 Dec 26 2023 server_audit.log.090
-rw-r----- 1 polkitd input 100000015 Dec 23 2023 server_audit.log.091
-rw-r----- 1 polkitd input 100000049 Dec 21 2023 server_audit.log.092
-rw-r----- 1 polkitd input 100000049 Dec 19 2023 server_audit.log.093
-rw-r----- 1 polkitd input 100000156 Dec 17 2023 server_audit.log.094
-rw-r----- 1 polkitd input 100000119 Dec 15 2023 server_audit.log.095
-rw-r----- 1 polkitd input 100000080 Dec 13 2023 server_audit.log.096
-rw-r----- 1 polkitd input 100000757 Dec 11 2023 server_audit.log.097
-rw-r----- 1 polkitd input 100000316 Dec 9 2023 server_audit.log.098
-rw-r----- 1 polkitd input 100000220 Dec 7 2023 server_audit.log.099
-rw-r----- 1 polkitd input 100000009 Dec 5 2023 server_audit.log.100
整合日誌審計系統
在大型或複雜的網路環境中,可以將MySQL資料庫的審計日誌整合到統一的日誌審計系統中,實現對多種裝置和系統的集中審計和管理。
開源方案FEK
資料流
方案優勢
端到端解決方案: 從資料生成、收集、儲存到視覺化,提供了一站式的解決方案。
高可擴充套件性: 各個元件都支援分散式架構,可以輕鬆擴充套件以應對大規模資料。
易於維護: 各個元件都是獨立執行的,方便進行維護和升級。
豐富的功能: 支援細粒度的資料審計、實時資料收集、高效資料儲存和強大的資料視覺化。
FileBeat是一個輕量級的日誌收集工具,主要用於將日誌檔案中的資料傳送到ElasticSearch或其他資料收集平臺。它能夠實時監控日誌檔案的變化,並將新的日誌內容傳送出去。
特點:
- 實時監控: 可以實時監控日誌檔案的變化,確保資料的及時性。
- 穩定可靠: 具有高可靠性,支援日誌資料的持久化。
- 易於配置: 配置簡單,支援多種輸出方式。
ElasticSearch是一個分散式搜尋引擎和資料分析平臺,用於儲存、搜尋和分析大規模資料。它能夠對收集到的日誌資料進行索引,以便於快速檢索和分析。
特點:
- 高效能搜尋: 支援全文搜尋和複雜的查詢語法。
- 分散式架構: 支援大規模資料的分散式儲存和處理。
- 豐富的分析功能: 提供聚合分析、機器學習等功能。
Kibana是一個資料視覺化和探索工具,用於展示和分析ElasticSearch中的資料。它提供了豐富的圖表和儀表板功能,幫助使用者更好地理解和利用資料。
特點:
- 強大的視覺化能力: 支援多種圖表型別,如折線圖、柱狀圖、餅圖等。
- 直觀的使用者介面: 操作簡單,使用者可以輕鬆建立和管理儀表板。
- 實時更新: 支援實時更新資料,確保使用者看到的是最新的資訊。
IBM Security QRadar Community Edition日誌審計
IBM Security QRadar包含日誌審計功能:
IBM Security QRadar套件是一個全面的威脅檢測和響應解決方案,旨在提高安全分析師在整個事件生命週期中的響應速度。該套件配備了企業級AI和自動化技術,可以顯著提高分析師的工作效率,幫助資源緊張的安全團隊更有效地開展工作。
IBM Security QRadar在日誌審計方面的特點:
統一化分析師體驗:透過直觀的使用者介面、各產品的共享洞察和自動化操作,分析師能夠在整個調查和響應過程中更快更高效地工作。使用獨特的企業級AI功能,分析師可以自動將威脅情境化,並確定各項威脅的優先順序。
雲交付、速度和規模:IBM Security QRadar Suite產品是在AWS上提供的一項服務,支援跨雲環境簡化部署,以及與公有云和SaaS日誌資料攝取。這使得大規模的資料獲取、亞秒級搜尋和快速分析成為可能。
開放平臺和預構建整合:該套件整合了當今安全運營中心所需的各種核心技術,包括日誌管理。基於開放平臺和廣泛的合作伙伴生態系統,IBM Security QRadar擁有900多項預構建整合,可靈活選擇IBM各款產品和第三方產品。
定製日誌源型別:使用者還可以使用IBM QRadar的DSM(裝置支援模組)編輯器來建立和定製日誌源型別,以適應特定的日誌審計需求。這包括將叢集審計事件對映到QRadar事件模型,新增定製屬性來解析定製欄位等。
綜上所述,IBM Security QRadar不僅包含日誌審計功能,而且透過其強大的功能集和靈活的定製選項,能夠為企業提供全面的日誌管理和審計解決方案。
IBM Security QRadar 三級等保
等保三級指國家標準《計算機資訊系統安全保護等級保護三級》,QRadar 是一款由 IBM 提供的安全資訊和事件管理(SIEM)產品,可以幫助監控和分析安全事件。要將 QRadar 與等保三級保護需求相結合,需要確保 QRadar 部署滿足等保要求。具體操作可能包括物理安全、網路安全、主機安全和應用安全等方面的配置和監控。
使用QRadar的Syslog協議:
- MariaDB Audit Plugin可以配置為將日誌以Syslog格式傳送到QRadar,這是一種常見的整合方法。
總結
由於篇幅有限,暫沒有編寫其他日誌審計平臺。等保3.0的推出是響應國家關於網路安全和資訊保安相關法律法規的要求,如《網路安全法》等。這些法律法規明確規定了網路運營者應採取技術措施記錄並儲存網路日誌,以應對可能的安全事件和調查取證。資料審計日誌記錄了系統的所有操作行為和事件,包括正常操作和異常行為。透過對這些日誌的實時監測和分析,可以及時發現潛在的安全威脅,並採取相應的響應措施,防止安全事件的發生或擴大。在發生安全事件後,資料審計日誌是進行事後追溯和調查的重要依據。透過審查日誌記錄,可以還原事件發生的整個過程,確定事件的原因、責任人和影響範圍,為事件的處理和整改提供有力支援。資料審計日誌也是運維監控的重要手段之一。透過對日誌的定期審查和分析,可以瞭解系統的執行狀況和效能瓶頸,為運維團隊提供最佳化和改進的依據。透過對資料訪問和操作行為的審計記錄,可以及時發現並阻止資料洩露等安全事件。同時,在發生資料洩露事件後,也可以快速定位洩露源和洩露路徑,減少損失和影響。
在實踐產品與架構選型設計中,我們應以實踐為主,官方提供功能不一定適合我們實踐情況,通常我們可以挖掘更優秀的技術方案。
今天先到這兒,希望對雲原生,技術領導力, 企業管理,系統架構設計與評估,團隊管理, 專案管理, 產品管理,資訊保安,團隊建設 有參考作用 , 您可能感興趣的文章:
構建創業公司突擊小團隊
國際化環境下系統架構演化
微服務架構設計
影片直播平臺的系統架構演化
微服務與Docker介紹
Docker與CI持續整合/CD
網際網路電商購物車架構演變案例
網際網路業務場景下訊息佇列架構
網際網路高效研發團隊管理演進之一
訊息系統架構設計演進
網際網路電商搜尋架構演化之一
企業資訊化與軟體工程的迷思
企業專案化管理介紹
軟體專案成功之要素
人際溝通風格介紹一
精益IT組織與分享式領導
學習型組織與企業
企業創新文化與等級觀念
組織目標與個人目標
初創公司人才招聘與管理
人才公司環境與企業文化
企業文化、團隊文化與知識共享
高效能的團隊建設
專案管理溝通計劃
構建高效的研發與自動化運維
某大型電商雲平臺實踐
網際網路資料庫架構設計思路
IT基礎架構規劃方案一(網路系統規劃)
餐飲行業解決方案之客戶分析流程
餐飲行業解決方案之採購戰略制定與實施流程
餐飲行業解決方案之業務設計流程
供應鏈需求調研CheckList
企業應用之效能實時度量系統演變
如有想了解更多軟體設計與架構, 系統IT,企業資訊化, 團隊管理 資訊,請關注我的微信訂閱號:
作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。
該文章也同時釋出在我的獨立部落格中-Petter Liu Blog。