針對Linux 文件完整性監控的實現

来源:https://www.cnblogs.com/xyongsec/archive/2019/06/22/11067937.html
-Advertisement-
Play Games

針對Linux 文件完整性監控的實現 摘要 電腦和互聯網是20世紀以來最偉大的發明之一,隨著電腦技術的不斷發展,人們的生活方式發生了巨大的變化。電腦和互聯網的發展給人們的生產生活帶來了極大的便利,但同時也存在一定的安全隱患。在人們藉助互聯網展開一系列活動的時候,個人信息和交易信息就會在網路中儲 ...


 

針對Linux 文件完整性監控的實現

 

摘要

 

電腦和互聯網是20世紀以來最偉大的發明之一,隨著電腦技術的不斷發展,人們的生活方式發生了巨大的變化。電腦和互聯網的發展給人們的生產生活帶來了極大的便利,但同時也存在一定的安全隱患。在人們藉助互聯網展開一系列活動的時候,個人信息和交易信息就會在網路中儲存並傳輸。網路安全方面還存在一定的隱患,當前各種病毒層出不窮,黑客襲擊事件也十分常見,如何去保護網路信息安全是當前全人類共同關註的重點問題。本文從網路安全的角度出發來Linux系統信息安全進行分析。osquery是一個安全開源工具,它採用操作系統並將其轉換為一個巨大的資料庫,使用可以使用類似SQL的語句進行查詢的表。通過這些查詢,可以監控文件完整性,檢查防火牆的狀態和配置,執行目標伺服器的安全審核等。它是一個跨平臺的應用程式,支持最新版本的macOS,Windows 10,CentOS和Ubuntu。它被官方描述為“基於SQL的操作系統儀器,監控和分析”框架,起源於Facebook。本設計將會利用osquery 去實時的監控linux 系統,對系統做出保護,可以快速的響應非法分子對系統的破壞。

 

關鍵詞:osquery 文件監控 日誌分析 信息安全

 

 

 

 

 

 

 

 

 

 

 

 

目錄

 

第一章 緒論. 1

1.1 Linux文件完整性的重要性. 1

1.2 項目概況. 1

1.3 Osquery 背景. 2

第二章 安裝使用osquery 監控系統. 3

2.1 安裝osquery 3

2.2 配置與管理osquery 5

2.3 測試監控文件. 30

第三章 利用ELK搭建日誌分析系統. 32

3.1 ELK簡介. 33

3.2 ELK的環境準備. 33

3.3 利用ELK分析Osquery 日誌數據. 37

第四章 總結與展望. 39

致謝. 40

參考文獻. 41

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第一章 緒論

 

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

  1. 將osquery密鑰添加到系統。

curl -L https://pkg. osquery. io/rpm/GPG | sudo tee /etc/pki/rpm-gpg/RPM-GPG-KEY-osquery如圖2-1所示。

 

圖2-1 添加秘鑰到系統

  1. 添加並啟用osquery存儲庫,然後安裝該軟體包

yum-config-manager --add-repo https://pkg. osquery. io/rpm/osquery-s3-rpm. repo如圖2-2所示。

 

圖2-2 添加並啟用osquery存儲庫

  1. 安裝osquery-s3  Sudo yum-config-manager --enable osquery-s3-rpm如圖2-3所示。

 

圖2-3 安裝osquery-s3

  1. 使用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查詢

 

2. 1. 1配置osquery訪問系統日誌

修改操作系統的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發行版上運行它所需的所有選項,因此創建自己的文件。

  1. 使用以下命令創建並打開配置文件:

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 修改配置文件

配置文件的下一部分是調度部分。每個查詢都由一個鍵或名稱標識,該鍵或名稱在文件中必須是唯一的,然後是要運行的查詢以及運行查詢的間隔如圖以秒為單位。

  1. 添加一個每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查詢系統。

2.2.3 osqueryi安全檢查

有很多地方可以使用osquery。使用osqueryi互動式shell對系統執行各種安全檢查。請記住,此時,沒有啟動osquery守護程式。這就是osquery的優點。

即使守護程式未處於活動狀態,也可以使用osqueryi來運行查詢,同時仍然使用構建的配置文件來配置環境。

  1. 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的伺服器而言,這不是一件好事,因此可以更好地配置防火牆。

  1. 運行上一個命令,修改為對特定列進行過濾,如下所示:

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 可查詢的列表

2.2.4運行osqueryd

守護進程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停止拖尾日誌。從長遠來看,需要將查詢結果日誌發送到可以使用的外部分析平臺。

2.2.5. osqueryi交互模式

osquery為用戶提供了兩個主要介面,osqueryi和osqueryd。

osqueryi是osquery互動式查詢控制台。 它就像MySQL上的'mysql'命令shell和PostgreSQL資料庫上的'psql'shell。在伺服器終端上鍵入“osqueryi”命令,將獲得osquery互動式控制台模式。接下來,將瞭解osqueryi控制台模式的基本命令。在交互模式osqueryi上顯示所有基本可用命令。如圖2-29所示。

osquery> . help

 

圖2-29 基本可用命令

  1. 顯示當前的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表中,可以通過查詢所有可用表來探索整個系統信息。

  1. 要獲取osquery中所有可用表的列表,請運行以下命令。如圖2-31所示。

osquery>. tables

 

圖2-31 osquery中所有可用表的列表

一旦知道了osquery系統中的所有可用表,將查看列。

  1. 使用以下命令獲取表的模式如圖,列,類型架構列。如圖2-32所示。

osquery>. schema users

osquery>. schema processes

 

圖2-32 獲取表的模式

 

 

2.2.6. 查詢Linux文件監控

在此步驟中,將使用osquery監視實時Linux系統。 將通過osqueryi交互模式監控系統配置文件信息,用戶,網路介面等。

  1. 獲取系統信息如圖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 源

  1. 通過添加“已啟用”過濾器檢查已啟用的存儲庫。如圖2-39所示。

osquery> SELECT name, baseurl, enabled FROM yum_sources WHERE enabled=1;

 

圖2-39 已啟用的存儲庫

  1. 使用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 裝載磁碟信息

  1. 對於特定類型的設備。如圖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 網路介面信息

  1. 伺服器正常運行,檢查伺服器正常運行時間。如圖2-46所示。

osquery>SELECT * FROM uptime;

 

圖2-46 正常運行時間

檢查用戶,osqery提供了用於檢查系統用戶的詳細信息表。 可以使用'users'表來檢查系統上的所有用戶,使用'last'表檢查用戶上次登錄,並使用'logged_in_users'來獲取具有活動shell的登錄用戶。

  1. 要檢查伺服器上的所有可用用戶,請使用“用戶”表。如圖2-47

osquery>SELECT * FROM users;

 

圖2-47 所有可用用戶

  1. 對於普通用戶,們可以將uid指定為'> = 1000'。如圖2-48所示。

osquery>SELECT * FROM users WHERE uid>=1000;

 

圖2-48 查詢普通用戶

要檢查上次登錄用戶,請使用“last”表。如圖2-49所示。

osquery>SELECT * FROM last;

 

圖2-49上次登錄用戶

  1. 對於普通用戶,請將'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登錄用戶

2.2.7 . osquery轉發日誌

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 配置日誌轉發

  1. 修改/etc/rsyslog. conf文件,修改日誌接受伺服器地址如圖2-30所示。

 

圖2-30 配置接受伺服器

  1. 打開日誌接收系統利用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

  1. 使用實時交互模式osqueryi日誌檢查所有日誌監控。

osqueryi運行下麵的osqueryi命令。

  1. 對於'/home'目錄。

select target_path, category, action, atime, ctime, mtime from file_events WHERE category="home"; 如圖 2-32所示。

 

圖 2-32 查詢home 文件的修改

  1. 對於/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的安裝

3.3.1 配置清華鏡像站yum源

[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

2. Elasticsearch 節點配置

    修改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"

3. Kibana 配置

修改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"

4.漢化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

5. Logstash 配置

[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

 

 

 

 

 

 

 

 

 

6. 訪問 Kibana 如圖3-1所示。

 

圖3-1  kibana 界面

 

3. 3 利用ELK分析Osquery 日誌數據

Kibana

1. 選擇管理 - >索引模式 - >創建索引模式在“索引模式”框中,輸入osquery-result- *並選擇“下一步”。從Time Filter欄位名稱下拉列表中,選擇@timestamp,然後選擇Create index pattern。如圖3-2所示。

https://i2.wp.com/jordanpotti.com/wp-content/uploads/2018/02/index_pattern_1.png?resize=660%2C198

https://i1.wp.com/jordanpotti.com/wp-content/uploads/2018/02/index_pattern_2.png?resize=660%2C191

圖3-2 Kibana 配置

2. 現在轉到Discover並從Index下拉列表中選擇osquery-result- *。應該看到的查詢過濾了。轉至管理 - >導入並導入此要點中的兩個文件。一個是可視化,一個是osquery的儀錶板。如圖3-3所示。

https://i1.wp.com/jordanpotti.com/wp-content/uploads/2018/02/dashboard_osquery.png?resize=660%2C340

圖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. 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一個.NET庫,可以讀取/寫入沒有安裝Microsoft Office的Office格式。沒有COM +,沒有互操作。 ...
  • 思路:改解析度。 步驟: 對桌面空白處單擊右鍵 -> 顯示設置 -> 選擇其它的解析度 選擇還原 ok。 ...
  • 介紹: FastDFS:開源的高性能分散式文件系統;主要功能包括:文件存儲,文件同步和文件訪問,以及高容量和負載平衡 FastDFS:角色:跟蹤伺服器(Tracker Server)、存儲伺服器(Storage Server)和客戶端(Client) FastDfs+nginx緩存高可用集群環境流程 ...
  • 前言 說到linux基礎命令,網上一搜一籮筐,想學也有很多教程,如果你不幸看到此篇文章,想看就認真看完,畢竟你點進來了不是嘛? 我每次寫的文章都是為了分享自己的學習成果或重要知識點,希望能幫助更多的人。但今天這篇文章是為自己加深linux命令印象而寫的,奈何經常忘記也是無奈啊! 推薦工具 FileZ ...
  • 1、常用熱鍵 【Tab】它具有“命令補全”與“文件補全”的功能【Ctrl+C】中斷執行中的程式組合鍵【Ctrl+d】鍵盤輸入結束。也可以用來替代 exit 2、Linux 常用編輯器 vi 和 vim vi 編輯器(vim 大同小異) (1)一般模式 【可以 刪除,複製,粘貼】 (2)編輯模式【可以 ...
  • 準備:客戶端centos6.10 服務端Centos7.6 實驗:客戶端生成證書請求,服務端頒發證書,最後吊銷其中一個證書 1、先在服務端上的/etc/pki/CA/目錄生成rsa的私鑰: 2、在服務端上生成自簽名證書 ① ②查看自簽名證書的詳細內容 ③ 查看自簽名證書簡要內容和查看證書的有效期 3 ...
  • 本篇為WEB環境配置的彙總篇,其中PHP以FASTCGI方式來運行,這種方式性能更高。經過配置後,我們的伺服器將同時可以運行PHP和.NET的程式,屬稱全能伺服器。所有配置可以根據自身實際需要進行增減。 準備 先準備以下軟體版本: PHP,MYSQL,phpMyAdmin 1、PHP在windows ...
  • 1. ls 作用:列出文件信息,預設為當前目錄下 常用選項: -a: 列出所有的文件,包括所有以.開頭的隱藏文件 -d: 列出目錄本身,並不包含目錄中的文件 -h: 和-l一起使用,文件大小人類易讀 -l: 長輸出 3.pwd顯示出當前/活動目錄的名稱 4. cd切換目錄 5. mkdir創建目錄常 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...