針對Linux 文件完整性監控的實現 摘要 電腦和互聯網是20世紀以來最偉大的發明之一,隨著電腦技術的不斷發展,人們的生活方式發生了巨大的變化。電腦和互聯網的發展給人們的生產生活帶來了極大的便利,但同時也存在一定的安全隱患。在人們藉助互聯網展開一系列活動的時候,個人信息和交易信息就會在網路中儲 ...
針對Linux 文件完整性監控的實現
摘要
電腦和互聯網是20世紀以來最偉大的發明之一,隨著電腦技術的不斷發展,人們的生活方式發生了巨大的變化。電腦和互聯網的發展給人們的生產生活帶來了極大的便利,但同時也存在一定的安全隱患。在人們藉助互聯網展開一系列活動的時候,個人信息和交易信息就會在網路中儲存並傳輸。網路安全方面還存在一定的隱患,當前各種病毒層出不窮,黑客襲擊事件也十分常見,如何去保護網路信息安全是當前全人類共同關註的重點問題。本文從網路安全的角度出發來Linux系統信息安全進行分析。osquery是一個安全開源工具,它採用操作系統並將其轉換為一個巨大的資料庫,使用可以使用類似SQL的語句進行查詢的表。通過這些查詢,可以監控文件完整性,檢查防火牆的狀態和配置,執行目標伺服器的安全審核等。它是一個跨平臺的應用程式,支持最新版本的macOS,Windows 10,CentOS和Ubuntu。它被官方描述為“基於SQL的操作系統儀器,監控和分析”框架,起源於Facebook。本設計將會利用osquery 去實時的監控linux 系統,對系統做出保護,可以快速的響應非法分子對系統的破壞。
關鍵詞:osquery 文件監控 日誌分析 信息安全
目錄
第一章 緒論
1. 1 Linux文件完整性的重要性
Linux 支持的文件系統種類繁多,他們為用戶的數據存儲和管理提供了良好的操作和使用界面。在文件系統中,存在著文件 / 目錄訪問許可權管理和控制. 加密文件系統等的安全機制和問題需要考慮,本設計將詳細介紹保證 Linux 文件系統安全的技術和方法。在黑客攻擊伺服器中會對伺服器的文件進行修改或者刪除,只有掌握了對文件完整性的實時監控,才可以的有效的防禦黑客的攻擊,和應急響應的速度。
1. 2 項目概況
當前形勢是特別發達的信息化時代,為了防止信息的泄露和系統遭受攻擊,可以用最快的速度響應系統出現的問題,所以本設計將要使用osquery監控系統和ELK日誌分析系統,搭建一個可以實時的文件監控系統監控的屬性變化主要包括:許可權. 屬主. 屬組. 文件大小. 創建時間. 最後修改時間. 最後訪問時間。
在本設計將會涉及到:
• 安裝osquery。
• 配置操作系統的各個方面,如Rsyslog,osquery需要正常運行。
• 設置可通過兩種使用的配置文件osqueryi和osqueryd。
• 使用osquery 包,它是可以添加到計劃中的預定義查詢組。
• 使用特殊查詢osqueryi來查找安全問題。
• 啟動守護程式,以便它可以自動運行查詢。
• 日誌轉發。
1. 3 Osquery 背景
osquery是Windows,OS X如圖macOS,Linux和FreeBSD的操作系統檢測框架。這些工具使低級操作系統分析和監控既高效又直觀。
osquery將操作系統公開為高性能關係資料庫。這允許編寫SQL查詢以探索操作系統數據。使用osquery,SQL表表示抽象概念,例如運行進程,載入的內核模塊,開放網路連接,瀏覽器插件,硬體事件或文件哈希。
osquery,可以訪問以下組件:
osqueryi:互動式osquery shell,用於執行即席查詢。
osqueryd:用於在後臺調度和運行查詢的守護程式。
osqueryctl:用於測試osquery的部署或配置的幫助程式腳本。它也可以用來代替操作系統的服務管理器來啟動/停止/重啟osqueryd。
osqueryi與osqueryd都是獨立的工具。他之間並沒有聯繫,你可以使用一個而不用另一個。運行每個標誌和選項所需的大多數標誌和選項都是相同的,可以使用osqueryd的配置文件啟動osqueryi,這樣就可以在不使用大量命令行開關的情況下自定義環境。
第二章 安裝使用osquery 監控系統
2. 1 安裝osquery
在centos7 上安裝osquery
- 將osquery密鑰添加到系統。
curl -L https://pkg. osquery. io/rpm/GPG | sudo tee /etc/pki/rpm-gpg/RPM-GPG-KEY-osquery如圖2-1所示。
圖2-1 添加秘鑰到系統
- 添加並啟用osquery存儲庫,然後安裝該軟體包
yum-config-manager --add-repo https://pkg. osquery. io/rpm/osquery-s3-rpm. repo如圖2-2所示。
圖2-2 添加並啟用osquery存儲庫
- 安裝osquery-s3 Sudo yum-config-manager --enable osquery-s3-rpm如圖2-3所示。
圖2-3 安裝osquery-s3
- 使用yum 安裝 osquery Sudo yum install osquery如圖2-4所示。
圖2-4 安裝osquery
5. 安裝後的osquery並不是可以立即使用的; 它不是一個即開即用的應用程式。無論是使用互動式shell還是守護進程,都必須從命令行或通過配置文件傳遞一些標誌和選項。要查看守護程式可用的標誌和選項。
6. 運行osqueryi是列出和查詢打開後的osquery表的最簡單方法。例如,使用以下命令啟動它:osqueryi –verbose 如圖2-5所示。
圖2-5 啟動osqueryi
7. 其他查詢,如select time, severity, message from syslog;將返回如下消息,這說明還有好多配置沒有完成。如圖2-6所示。
圖2-6 time查詢
修改操作系統的syslog應用程式,以允許osquery使用和查詢系統日誌。在centos7上,這需要修改Rsyslog配置文件。需要進行的唯一修改是在配置文件中附加幾行代碼。
首先,打開/etc/rsyslog. conf文件:sudo vim /etc/rsyslog. conf
添加一些配置行來告訴Rsyslog要寫入哪個管道,以及要寫入該管道的syslog參數。在預設情況下,管道為/var/osquery/syslog_pipe。然後,osquery從寫入該管道的信息中填充其syslog表。
將以下行附加到文件:如圖2-7所示。
/etc/rsyslog. conf
template(
name="OsqueryCsvFormat"
type="string"
string="%timestamp:::date-rfc3339,csv%,%hostname:::csv%,%syslogseverity:::csv%,%syslogfacility-text:::csv%,%syslogtag:::csv%,%msg:::csv%\n"
)
*. * action(type="ompipe" Pipe="/var/osquery/syslog_pipe" template="OsqueryCsvFormat")
圖2-7 添加管道配置
保存並關閉文件。要應用更改,重新啟動syslog守護程式:
sudo systemctl restart rsyslog
2. 2 配置與管理osquery
2.2.1 修改配置文件
創建配置文件可以更容易地運行osqueryi。osqueryi可以從/etc/osquery/osquery. conf中的配置文件中讀取這些選項,而不必傳遞大量命令行選項。當然,配置文件也可供守護進程使用。
配置文件還包含需要按計劃執行的查詢。但是,可以按計劃運行的大多數查詢都將作為所謂的packs發送。軟體包packs是位於/usr/share/osquery/packs目錄中的文件。
osquery沒有配置文件,但是有一個示例配置文件可以複製到/etc/osquery並修改。但是,該文件沒有在Ubuntu等Linux發行版上運行它所需的所有選項,因此創建自己的文件。
- 使用以下命令創建並打開配置文件:
sudo vim /etc/osquery/osquery. conf
使用JSON格式配置文件。將以下內容複製到配置文件中:如圖2-8所示。
/etc/osquery/osquery. conf
"options": {
"config_plugin": "filesystem",
"logger_plugin": "filesystem",
"logger_path": "/var/log/osquery",
"disable_logging": "false",
"log_result_events": "true",
"schedule_splay_percent": "10",
"pidfile": "/var/osquery/osquery. pidfile",
"events_expiry": "3600",
"database_path": "/var/osquery/osquery. db",
"verbose": "false",
"worker_threads": "2",
"enable_monitor": "true",
"disable_events": "false",
"disable_audit": "false",
"audit_allow_config": "true",
"host_identifier": "hostname",
"enable_syslog": "true",
"audit_allow_sockets": "true",
"schedule_default_interval": "3600"
},
圖2-8 修改配置文件
配置文件的下一部分是調度部分。每個查詢都由一個鍵或名稱標識,該鍵或名稱在文件中必須是唯一的,然後是要運行的查詢以及運行查詢的間隔如圖以秒為單位。
- 添加一個每300秒查看crontab表的預定查詢,將這些行添加到配置文件中:如圖2-9所示。
/etc/osquery/osquery. conf
"schedule": {
"crontab": {
"query": "SELECT * FROM crontab;",
"interval": 300
}
},
圖2-9 添加配置
3. 編寫任意數量的查詢。只需保持正確的格式。如果不這樣做,該文件將無法通過驗證。例如,要添加更多查詢,請添加以下行:如圖2-10所示。
/etc/osquery/osquery. conf
"schedule": {
"crontab": {
"query": "SELECT * FROM crontab;",
"interval": 300
},
"system_profile": {
"query": "SELECT * FROM osquery_schedule;"
},
"system_info": {
"query": "SELECT hostname, cpu_brand, physical_memory FROM system_info;",
"interval": 3600
}
},
圖2-10 任意數量查詢
4. 查詢之後,可以添加稱為裝飾器如圖decorators的特殊查詢,這些查詢是將數據添加到其他計劃查詢的查詢。此處顯示的裝飾器查詢將將運行osquery的主機的UUID和用戶的用戶名添加到每個計劃的查詢中。
將這些行附加到文件:如圖2-11所示。
/etc/osquery/osquery. conf
"decorators": {
"load": [
"SELECT uuid AS host_uuid FROM system_info;",
"SELECT user AS username FROM logged_in_users ORDER BY time DESC LIMIT 1;"
]
},
圖2-11 添加查詢計劃
5. osquery指向包含更多特定查詢的包列表。每次安裝osquery都會在/usr/share/osquery/packs中的提供一組預設包。其中一個包用於macOS,其餘用於Linux系統。雖然可以使用預設位置的包,但也可以將它複製到/etc/osquery目錄中。
將這些行添加到文件中以完成該文件。如圖2-12所示。
/etc/osquery/osquery. conf
"packs": {
"osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring. conf",
"incident-response": "/usr/share/osquery/packs/incident-response. conf",
"it-compliance": "/usr/share/osquery/packs/it-compliance. conf",
"vuln-management": "/usr/share/osquery/packs/vuln-management. conf"
}
}
圖2-12 特定查詢
保存並關閉該文件,然後使用以下命令對其進行驗證:sudo osqueryctl config-check
2.2.2 osquery文件完整性監
密切關註伺服器上文件的完整性是監控其系統安全性的關鍵方面。為此,osquery提供了一個現成的解決方案。將向列表中添加一個包,其中包含將用於文件完整性監視的查詢和指令,將調用該文件fim. conf。
創建此文件併在編輯器中打開它:sudo vim /usr/share/osquery/packs/fim. conf
1. 創建一個軟體包,每隔300秒監視/home,/etc以及/tmp目錄中的文件事件。軟體包文件的完整設置顯示在以下文件列表中。將其複製到文件中。如圖2-13所示。
/usr/share/osquery/packs/fim. conf
{
"queries": {
"file_events": {
"query": "select * from file_events;",
"removed": false,
"interval": 300
}
},
"file_paths": {
"homes": [
"/root/. ssh/%%",
"/home/%/. ssh/%%"
],
"etc": [
"/etc/%%"
],
"home": [
"/home/%%"
],
"tmp": [
"/tmp/%%"
]
}
}
圖2-13 配置監視時間
2. 使新文件及其規則可用於osquery,請在/etc/osquery/osquery. conf末尾的包列表中引用它。打開文件進行編輯:
$ sudo vim /etc/osquery/osquery. conf
然後修改包部分以包含新文件:如圖2-14所示。
/etc/osquery/osquery. conf
"packs": {
"fim": "/usr/share/osquery/packs/fim. conf",
"osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring. conf",
"incident-response": "/usr/share/osquery/packs/incident-response. conf",
"it-compliance": "/usr/share/osquery/packs/it-compliance. conf",
"vuln-management": "/usr/share/osquery/packs/vuln-management. conf"
}
圖2-14 新文件用於osquery
保存並關閉文件。只是為了確保沒有在文件中出錯,再次驗證它:
$ sudo osqueryctl config-check,現在就可以開始使用osqueryi查詢系統。
有很多地方可以使用osquery。使用osqueryi互動式shell對系統執行各種安全檢查。請記住,此時,沒有啟動osquery守護程式。這就是osquery的優點。
即使守護程式未處於活動狀態,也可以使用osqueryi來運行查詢,同時仍然使用構建的配置文件來配置環境。
- osquery使用配置文件啟動,配置如下:如圖2-15所示。
$ sudo osqueryi - config_path / etc / osquery / osquery 。conf – verbose
圖2-15 使用配置文件啟動
註:傳遞osqueryi狀語從句:osqueryd的冗長。選項是一個好的做法,因為它可以讓你看到任何可能表明osquery問題的錯誤或警告通常,osqueryi可以在沒有根許可權的情況下運行,但如果在指定守護程式的配置文件時調用它,則必須以root身份運行它。
2. 管理員以外的其他人現在登錄系統狀況,查詢命令:osquery>; select * from logged_in_users ;
輸出結果應如下所示:如圖2-16所示。
圖2-16 登錄系統狀況
在此輸出中,有兩個真實用戶帳戶登錄到電腦,它都來自相同的IP地址。該IP地址應該是已知的IP地址。如果不是,應該調查登錄的來源。
3. 上一個查詢會告訴現在登錄的是誰,但之前登錄的是什麼?可以通過查詢最後一個表來查找,如下所示:如圖2-17所示。
osquery>; select * from last ;
圖2-17 上次登錄人員
輸出結果沒有任何異常,因此最近沒有其他人登錄過這台機器。
4. 查看防火牆是否已配置並激活?防火牆是否仍在運行?如果有疑問,請運行此查詢以查找:如圖2-18所示。
osquery>; select * from iptables ;
圖2-18 查看防火牆
如果沒有輸出,則表示尚未配置IPTables防火牆。對於面向Internet的伺服器而言,這不是一件好事,因此可以更好地配置防火牆。
- 運行上一個命令,修改為對特定列進行過濾,如下所示:
osquery>; select chain, policy, src_ip, dst_ip from iptables ;
該查詢應該提供如下輸出結果。查找未配置的任何異常源和目標IP地址:如圖2-19所示。
圖2-19 查找未配置的任何異常源和目標
6. 在crontab中設置了哪些類型的查詢,此查詢將幫助查找已按計劃間隔運行的惡意軟體:如圖2-20所示osquery\>: select command, path from crontab ;
圖2-20 查詢惡意軟體
系統上是否有啟用setuid的文件,在任何centos7伺服器上都有相當多的,但是它是哪些,是否有任何不應該出現在系統上。
檢測backdoored二進位文件。定期運行此查詢並將其結果與較舊的結果進行比較,以便可以密切關註任何添加。該查詢如下:osquery>: select * from suid_bin ;
此查詢的部分輸出結果可能如下所示:如圖2-21所示。
圖2-21 檢測backdoored二進位文件
7. 要查看已載入的內核模塊列表,請運行以下查詢:
osquery>; select name, used_by, status from kernel_modules where status="Live";如圖2-22所示。
圖2-22 已載入的內核模塊
這是希望定期運行的另一個查詢,並將其輸出結果與較舊的結果進行比較,以查看是否有任何更改。
另一種可以幫助管理員在伺服器上找到後門的方法是運行一個列出所有偵聽埠的查詢。為此,查詢語句如圖2-23所示。
osquery>; select * from listening_ports
圖2-23 所有偵聽埠
在伺服器上,如果輸出只包含知道伺服器應該監聽的埠,則無需擔心。但如果有其他埠打開,將需要調查這些埠是什麼。
8. 要查看伺服器上的文件活動,請運行以下查詢:如圖2-24所示。
osquery>; select target_path, action, uid from file_events ;
輸出結果顯示伺服器上的所有最近文件活動,以及負責該活動的用戶標識。
圖2-24 伺服器上的文件活動
有許多查詢,例如可以在伺服器上運行的查詢,以瞭解可能存在的安全問題。可以列出可用的表格:如圖2-25所示。
osquery>: . tables
圖2-25 可查詢的列表
守護進程osqueryd允許osquery以設定的時間間隔運行查詢。這些查詢包括在第四步中配置的查詢,在該步驟中指定的包中的查詢,以及在第四步中配置的FIM包中的查詢。如果尚未研究它,現在是時候應該看一下/usr/share/osquery/packs的內容。如圖2-26所示。
圖2-26 查詢可用包
1. osqueryd生成的結果將寫入/var/log/osquery目錄中調用的文件osqueryd. results. log中。打開後,該文件不存在。它僅在守護程式啟動時創建並開始生成結果。如圖2-27所示。
圖2-27 查看日誌
可以開始使用systemctl或osqueryctl啟動osqueryd。兩者都完成了同樣的事情,所以你使用哪一個並不重要。osqueryd將在啟動時檢查配置文件是否存在,併在未找到配置文件時提醒。它將在沒有配置文件的情況下繼續運行,儘管它不會做任何有用的事情。但是,由於已經設置了配置文件,因此需要在此處啟動守護程式:sudo systemctl start osqueryd或者可以輸入: sudo osqueryctl start
2. 在啟動守護進程後的幾分鐘內,/var/log/osquery/osqueryd. results. log的大小應該增加。可以通過輸入並重覆下一個命令來查看這種情況:
ls -lh /var/log/osquery/osqueryd. results. log
文件大小的增加表示已將計劃查詢的結果寫入磁碟。不幸的是,osquery沒有像OSSEC這樣的警報工具,因此除非查看結果文件,否則無法查看計劃查詢的結果。可以使用該tail命令執行此操作,該命令將持續將該文件的最後10行流式傳輸到的屏幕:sudo tail -f /var/log/osquery/osqueryd. results. log 如圖2-28所示。
圖2-28 查詢該文件的最後10行內容
按CTRL+C停止拖尾日誌。從長遠來看,需要將查詢結果日誌發送到可以使用的外部分析平臺。
osquery為用戶提供了兩個主要介面,osqueryi和osqueryd。
osqueryi是osquery互動式查詢控制台。 它就像MySQL上的'mysql'命令shell和PostgreSQL資料庫上的'psql'shell。在伺服器終端上鍵入“osqueryi”命令,將獲得osquery互動式控制台模式。接下來,將瞭解osqueryi控制台模式的基本命令。在交互模式osqueryi上顯示所有基本可用命令。如圖2-29所示。
osquery> . help
圖2-29 基本可用命令
- 顯示當前的osquery配置和設置。如圖2-30所示。
圖2-30 顯示當前的osquery配置
Osquery提供多種視圖模式來顯示查詢結果。 預設模式是“漂亮”模式。
現在將更改查詢結果的查看模式,對於本設計,將使用'line'模式。
osquery>. mode csv
osquery>. mode list
osquery>. mode column
osquery>. mode line
osquery>. mode pretty
Osquery將操作系統公開為關係資料庫系統。 有關係統的所有信息都存儲在osquery表中,可以通過查詢所有可用表來探索整個系統信息。
- 要獲取osquery中所有可用表的列表,請運行以下命令。如圖2-31所示。
osquery>. tables
圖2-31 osquery中所有可用表的列表
一旦知道了osquery系統中的所有可用表,將查看列。
- 使用以下命令獲取表的模式如圖,列,類型架構列。如圖2-32所示。
osquery>. schema users
osquery>. schema processes
圖2-32 獲取表的模式
在此步驟中,將使用osquery監視實時Linux系統。 將通過osqueryi交互模式監控系統配置文件信息,用戶,網路介面等。
- 獲取系統信息如圖2-32所示。
osquery> SELECT * FROM system_info;
圖2-32 獲取系統信息
顯示有關係統硬體的詳細信息。如圖2-33 所示。
osquery> SELECT hostname, cpu_type, physical_memory, hardware_vendor, hardware_model FROM system_info;
圖2-33 統硬體的詳細信息
顯示當前的操作系統信息,包括操作系統版本,平臺,操作系統補丁和代號。如圖2-34所示。
osquery>SELECT * FROM os_version;
圖2-34 操作系統信息
2. 查看內核版本和模塊,為了檢查系統的內核信息,osquery提供了表'kernel_info'和'kernel_modules'。顯示系統使用的內核。如圖2-35所示。
osquery> SELECT * FROM kernel_info;
圖2-35 內核版本和模塊
3. 顯示系統上所有已載入的內核模塊。如圖2-36所示。
osquery> SELECT * FROM kernel_modules LIMIT 5;
圖2-36 已載入的內核模塊
4. 檢查存儲庫和包osquery提供了用於檢查Linux Ubuntu和CentOS上的存儲庫和已安裝軟體包的表。在CentOS上,們可以通過'yum_sources'檢查可用的存儲庫,並檢查通過'rpm_packages'安裝的軟體包。
檢查所有可用的CentOS存儲庫。如圖2-37所示。
osquery> SELECT * FROM yum_sources;
圖2-37 CentOS存儲庫
5. 查詢yum源osquery> SELECT name, baseurl, enabled FROM yum_sources; 如圖2-38所示。
圖2-38 查詢yum 源
- 通過添加“已啟用”過濾器檢查已啟用的存儲庫。如圖2-39所示。
osquery> SELECT name, baseurl, enabled FROM yum_sources WHERE enabled=1;
圖2-39 已啟用的存儲庫
- 使用rpm_packages表檢查所有安裝的軟體包。如圖2-40所示。
osquery> SELECT * FROM rpm_packages;
osquery> SELECT name, version FROM rpm_packages ORDER BY name;
圖2-40 所有安裝的軟體包
對於特定包名稱,請添加名稱過濾器。如圖2-41所示。
osquery> SELECT name, version FROM rpm_packages WHERE name="firewalld";
圖2-41 特定包名稱
裝載磁碟信息可以使用mounts表來檢查有關係統驅動器的所有詳細信息,包括免費的inode,標誌,類型等。
檢查系統安裝的所有磁碟。如圖2-42所示。
osquery>SELECT * FROM mounts;
osquery>SELECT device, path, type, inodes_free, flags FROM mounts;
圖2-42 裝載磁碟信息
- 對於特定類型的設備。如圖2-43所示。
osquery>SELECT device, path, type, inodes_free, flags FROM mounts WHERE type="tmpfs";
圖2-43 特定類型的設備
記憶信息以位元組為單位檢查系統記憶體。如圖2-44所示。
osquery>SELECT * FROM memory_info;
圖2-44 檢查系統記憶體
網路介面信息使用“interface_addresses”檢查網路地址。如圖2-45所示。
osquery>SELECT * FROM interface_addresses;
圖2-45 網路介面信息
- 伺服器正常運行,檢查伺服器正常運行時間。如圖2-46所示。
osquery>SELECT * FROM uptime;
圖2-46 正常運行時間
檢查用戶,osqery提供了用於檢查系統用戶的詳細信息表。 可以使用'users'表來檢查系統上的所有用戶,使用'last'表檢查用戶上次登錄,並使用'logged_in_users'來獲取具有活動shell的登錄用戶。
- 要檢查伺服器上的所有可用用戶,請使用“用戶”表。如圖2-47
osquery>SELECT * FROM users;
圖2-47 所有可用用戶
- 對於普通用戶,們可以將uid指定為'> = 1000'。如圖2-48所示。
osquery>SELECT * FROM users WHERE uid>=1000;
圖2-48 查詢普通用戶
要檢查上次登錄用戶,請使用“last”表。如圖2-49所示。
osquery>SELECT * FROM last;
圖2-49上次登錄用戶
- 對於普通用戶,請將'type'填入'7'。如圖2-50所示。
osquery>SELECT username, time, host FROM last WHERE type=7;
圖2-50 過濾普通用戶
使用活動shell檢查登錄用戶,使用'logged_in_users'表。如圖2-51所示。
圖2-51 活動shell登錄用戶
1. 修改/etc/rsyslog. conf文件,增加下麵5行語句 如圖2-29所示。
module(load="imfile" PollingInterval="5")
$InputFileName /var/log/osquery/osqueryd. results. log
$InputFileTag osquery:
$InputFileStateFile osqueryd. results. log
$InputRunFileMonitor
圖2-29 配置日誌轉發
- 修改/etc/rsyslog. conf文件,修改日誌接受伺服器地址如圖2-30所示。
圖2-30 配置接受伺服器
- 打開日誌接收系統利用3CDaemon 軟體進行接收日誌如圖2-31所示。
圖2-31 日誌接收系統
2. 3 測試監控文件
1. 通過在定義的目錄“home”和“他tmp”上創建一個新文件來測試文件完整性監控包。轉到“/var”目錄,創建一個名為“nzy. txt”的新文件。
cd /tmp
touch nzy. txt
轉到'/ home 目錄並創建一個名為'nzy. py'的新文件。
cd / home
nzy. Py
- 使用實時交互模式osqueryi日誌檢查所有日誌監控。
osqueryi運行下麵的osqueryi命令。
- 對於'/home'目錄。
select target_path, category, action, atime, ctime, mtime from file_events WHERE category="home"; 如圖 2-32所示。
圖 2-32 查詢home 文件的修改
- 對於/tmp目錄。
select target_path, category, action, atime, ctime, mtime from file_events WHERE category="tmp"; 如圖 2-33所示。
圖2-33 查詢tmp 文件的修改
第三章 利用ELK搭建日誌分析系統
為什麼用到ELK:
一般需要進行日誌分析場景:直接在日誌文件中 grep. awk 就可以獲得自己想要的信息。但在規模較大的場景中,此方法效率低下,面臨問題包括日誌量太大如何歸檔. 文本搜索太慢怎麼辦. 如何多維度查詢。需要集中化的日誌管理,所有伺服器上的日誌收集彙總。常見解決思路是建立集中式日誌收集系統,將所有節點上的日誌統一收集,管理,訪問。一般大型系統是一個分散式部署的架構,不同的服務模塊部署在不同的伺服器上,問題出現時,大部分情況需要根據問題暴露的關鍵信息,定位到具體的伺服器和服務模塊,構建一套集中式日誌系統,可以提高定位問題的效率。
一個完整的集中式日誌系統,需要包含以下幾個主要特點:
收集-能夠採集多種來源的日誌數據
傳輸-能夠穩定的把日誌數據傳輸到中央系統
存儲-如何存儲日誌數據
分析-可以支持 UI 分析
警告-能夠提供錯誤報告,監控機制
ELK提供了一整套解決方案,並且都是開源軟體,之間互相配合使用,完美銜接,高效的滿足了很多場合的應用。目前主流的一種日誌系統。
不管是用於記錄,監控或者程式的Debug,日誌,對於任何系統來說都是一個及其重要的部分。但一般日誌的數據量會比較大,並且分散在各個地方。如果管理的伺服器或者程式比較少的情況還可以逐一登錄到各個伺服器去查看,分析。但如果伺服器或者程式的數量比較多了之後這種方法就顯得力不從心。基於此,一些集中式的日誌系統也就應用而生。
目前比較有名成熟的有,Splunk(商業). FaceBook 的Scribe. Apache 的 Chukwa
Cloudera 的 Fluentd. 還有ELK 等等。
3. 1 ELK簡介
ELK不是一款軟體,是三個軟體產品的首字母縮寫,Elasticsearch,Logstash 和 Kibana。這三款軟體都是開源的,現在歸於 Elastic. co 公司。
Elasticsearch 是一個實時的分散式搜索和分析引擎,它可以用於全文搜索,結構化搜索以及分析。它是一個建立在全文搜索引擎 Apache Lucene 基礎上的搜索引擎,使用 Java 語言編寫。作為ELK協議棧的核心,它用於集中存儲數據。特點:
- 實時如圖準實時
- 分散式
- 面向文檔
- 高可用性,易擴展,支持集群如圖Cluster. 分片和複製如圖Shards 和 Replicas。
- 介面友好如圖RESTful
Logstash 是一個具有實時渠道能力的數據收集引擎。使用 JRuby 語言編寫。其作者是世界著名的運維工程師喬丹西塞 (JordanSissel)。目前最新的版本是 5. 3。特點:
- 幾乎可以訪問任何數據
- 可以和多種外部應用結合
- 支持彈性擴展
Kibana 是一款基於 Apache 開源協議,使用 JavaScript 語言編寫,為 Elasticsearch 提供分析和可視化的 Web 平臺。它可以在 Elasticsearch 的索引中查找,交互數據,並生成各種維度的表圖。目前最新的版本是 5. 3。
3. 2 ELK的環境準備
1. 修改文件限制
# 修改系統文件;vi /etc/security/limits.conf
#增加的內容;* soft nofile 65536;* hard nofile 65536;* soft nproc 2048;* hard nproc 4096
2. 調整進程數
#修改系統文件;vi /etc/security/limits.d/20-nproc.conf
#調整成以下配置
soft nproc 4096;soft nproc unlimited
3. 調整虛擬記憶體&最大併發連接
#修改系統文件;vi /etc/sysctl.conf
#增加的內容;vm.max_map_count=655360;fs.file-max=655360
4. JDK8安裝
CentO安裝JDK8:https://ken.io/note/centos-java-setup
5. 創建ELK專用用戶
useradd elk
6. 創建ELK相關目錄並賦權
#創建ELK APP目錄mkdir /usr/elk
#創建ELK 數據目錄mkdir /elk
#更改目錄Owner;chown -R elk:elk /usr/elk;chown -R elk:elk /elk
7. 下載ELK包並解壓
https://www.elastic.co/downloads
#打開文件夾cd /home/download
#下載
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.tar.gz
wget wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-linux-x86_64.tar.gz
#解壓tar -zvxf elasticsearch-6.0.0.tar.gz;tar -zvxf logstash-6.0.0.tar.gz;tar -zvxf kibana-6.0.0-linux-x86_64.tar.gz
3. 3ELK的安裝
[root@elk ~]# ntpdate 0. centos. pool. ntp. org
[root@elk ~]# vim /etc/yum. repos. d/elk. repo
[elk]
name=elk
baseurl=https://mirrors. tuna. tsinghua. edu. cn/elasticstack/yum/elastic-6. x/
enable=1
gpgcheck=0
1.用yum 源 安裝Elasticsearch Logstash Kibana
[root@elk ~]# yum install elasticsearch logstash kibana nodejs filebeat -y
修改elasticsearch 節點配置文件以便伺服器連通
[root@elk ~]# grep -v ^# /etc/elasticsearch/elasticsearch. yml
cluster. name: elk-stack
node. name: elk. node1
path. data: /var/lib/elasticsearch
path. logs: /var/log/elasticsearch
network. host: 0. 0. 0. 0
http. port: 9200
discovery. zen. ping. unicast. hosts: ["192. 168. 12. 148:9300"]
discovery. zen. minimum_master_nodes: 1
[root@elk ~]# systemctl start elasticsearch
[root@elk ~]# ss -ntlup| grep -E "9200|9300"
修改kibana 節點訪問ip 地址
[root@elk ~]# egrep -v "^#|^$" /etc/kibana/kibana. yml
server. port: 5601
server. host: "0. 0. 0. 0"
elasticsearch. url: "http://192. 168. 12. 148:9200"
kibana. index: ". kibana"
Kibnan 預設語言是英文的為方便配置故改為中文版
[root@elk ~]# yum install -y git
[root@elk ~]# git clone https://github. com/anbai-inc/Kibana_Hanization. git
[root@elk ~]# cd Kibana_Hanization
[root@elk ~]# python main. py /usr/share/kibana
[root@elk ~]# systemctl restart kibana
[root@elk ~]# ss -ntlup| grep 5601
[root@elk ~]# echo 'path. config: /etc/logstash/conf. d' >>/etc/logstash/logstash. yml
添加日誌處理文件,以便接受osquery 系統日誌文件
[root@elk ~]# vim /etc/logstash/conf. d/local_syslog. conf
input {
#filebeat客戶端
beats {
port => 5044
}
}
#篩選
#filter { }
output {
# 輸出到es
elasticsearch {
hosts => ["http://192. 168. 12. 148:9200"]
index => "syslog-%{+YYYY. MM. dd}"
}
}
[root@elk ~]# systemctl start logstash
[root@elk ~]# lsof -i:5044
圖3-1 kibana 界面
3. 3 利用ELK分析Osquery 日誌數據
Kibana:
1. 選擇管理 - >索引模式 - >創建索引模式在“索引模式”框中,輸入osquery-result- *並選擇“下一步”。從Time Filter欄位名稱下拉列表中,選擇@timestamp,然後選擇Create index pattern。如圖3-2所示。
圖3-2 Kibana 配置
2. 現在轉到Discover並從Index下拉列表中選擇osquery-result- *。應該看到的查詢過濾了。轉至管理 - >導入並導入此要點中的兩個文件。一個是可視化,一個是osquery的儀錶板。如圖3-3所示。
圖3-3 Kibana 配置
第四章 總結與展望
在本次畢業設計中我對系統安全有了更深層次的理解,論文設計過程當中,我通過對論文的不斷研究和學習,使我自己的專業水準更上一層樓。在當前社會高速發展的大環境下,隨著我國信息化的不斷推進,系統安全的需求已經達到了一定的高度。本文當中提到了osquery和elk工具的應用,這倆款工具都對系統安全的監測起到了一定的作用。但是在學習和使用這兩款工具的時候,我依然還有很多不足的地方,例如:elk接收日誌以及該工具功能更深層次的使用。有句話說“活到老學到老”,“學無止境”我相信,在我參加工作以後,我還會對這兩個工具的功能繼續研究,以及諸多類似工具的學習和使用,達到對系統安全維護的新高度。
致謝
時光匆匆如流水,轉眼便是大學畢業時節,春夢秋雲,聚散真容易。離校日期已日趨漸進,畢業論文的完成也隨之進入了尾聲。從開始進入課題到論文的順利完成,一向都離不開老師. 同學. 朋友給熱情的幫忙,在那裡請理解誠摯的謝意!在此向電子學院信息安全與管理專業的所有老師表示衷心的感謝,多謝你們三年的辛勤栽培,多謝你們在教學的同時更多的是傳授們做人的道理,多謝三年裡面你們孜孜不倦的教誨!
本設計在甘志偉老師的悉心指導下完成的,淵博的專業知識嚴謹的治學態度,精益求精的工作作風,誨人不倦的高尚師德,嚴於律己。以待人的崇高風範,朴實無法,平易近人的人格魅力對本人影響深遠。不僅僅使本人樹立了遠大的學習目標,掌握了基本的研究方法,還使本人明白了許多為人處事的道理。本次設計從選題到完成,每一步都是在導師的悉心指導下完成的,傾註了導師很多心血。在此,謹向老師表示崇高的敬意和衷心的感謝!在寫論文的過程中,遇到了很多的問題,在老師的耐心指導下,問題都得以解決。所以在此,再次對老師道一聲:老師,多謝您!
三年寒窗,所收穫的不僅僅僅是愈加豐厚的知識,更重要的是在閱讀,實踐中所培養的思維方式,表達潛力和廣闊視野。很慶幸這三年來遇到瞭如此多的良師益友,無論在學習上,生活上,還是工作上,都給予了無私的幫忙和熱心的照顧,讓在一個充滿溫馨的環境中度過三年的大學生活。感恩之情難以用言語量度,謹以最朴實的話語致以最崇高的敬意。
“長風破浪會有時,直掛雲帆濟滄海。”這是少年時最喜歡的詩句。就用這話作為這篇論文的一個結尾,也是一段生活的結束。期望自能夠繼續少年時的夢想,永不放下。
參考文獻
[1] Saurabh Chhajed, Learning ELK Stack中文版
[2] 高凱,大數據搜索與日誌挖掘及可視化方案:ELK stack: elasticsearch. logstash. kibana.
[3] 劉衍衍等編著. 電腦安全技術. 吉林:吉林科技技術出版社. 1997. 8
[4] 馮元等. 電腦網路安全基礎. 北京;科學出版社. 2003. 10
[5] 張千里,陳光英 . 網路安全新技術. 北京:人民郵電出版社,2003. 1
[6] 石志國等編著. 電腦網路安全教程. 北京:清華大學出版社,2004. 2
[7] 岳 浩《Linux操作系統教程》機械工業出版社 2005. 4
[8] 邱世華. Linux操作系統之奧秘. 北京:電子工業出版社,2008
[9] 曹天傑等編著. 電腦系統安全. 北京:高等教育出版社,2003. 9
[10] 韓海東,王超,李群. 入侵檢測系統實例剖析 北京:清華大學出版社 2002年5月
[11] 石志國等編著. 電腦網路安全教程. 北京:清華大學出版社,2004. 2
[12] Digital Fore nsic Research Workshop. “A Road Map for Digital Forensic Research”,2001.
[13] Jun-Sun Kim, Minsoo Kim and Bong-Nam Noth . A Fuzzy Expert System for Network Forensics.