自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何使用Osquery在Linux上監(jiān)控文件完整性?

譯文
系統(tǒng) Linux
本教程介紹如何安裝該應(yīng)用程序、如何運(yùn)行基本查詢以及如何在Linux系統(tǒng)管理工作中使用FIM(文件完整性監(jiān)控)。

【51CTO.com快譯】使用Osquery應(yīng)用程序方面的基本概念是對(duì)操作系統(tǒng)的許多方面(進(jìn)程和用戶等)執(zhí)行的“表格抽象”。數(shù)據(jù)存儲(chǔ)在表中,可以使用SQL語法、直接通過osqueryi外殼或通過osqueryd守護(hù)程序來查詢。

本教程介紹如何安裝該應(yīng)用程序、如何運(yùn)行基本查詢以及如何在Linux系統(tǒng)管理工作中使用FIM(文件完整性監(jiān)控)。

本教程將介紹:

  • 如何安裝Osquery
  • 如何列出可用表
  • 如何從osqueryi外殼執(zhí)行查詢
  • 如何使用osqueryd守護(hù)程序監(jiān)控文件完整性

軟件需求和使用的約定

  • 對(duì)SQL概念有基本知識(shí)
  • 擁有執(zhí)行管理任務(wù)的root權(quán)限

軟件需求和Linux命令行約定 

 

安裝

我們基本上有兩種方法來安裝Osquery:第一種是從官方網(wǎng)站下載適合我們系統(tǒng)的軟件包;第二種(通常是優(yōu)選方法)是將Osquery存儲(chǔ)庫添加到發(fā)行版軟件源。下面簡(jiǎn)要介紹這兩種方法。

圖1

通過軟件包安裝

可以從Osquery官方網(wǎng)站(https://osquery.io/downloads/official)下載簽名的deb和rpm軟件包,或下載更通用的打包文件。我們先選擇要安裝的版本,然后下載軟件包。

建議選擇最新的可用版本(截至發(fā)稿時(shí)4.1.2)。下載軟件包后,我們可以使用發(fā)行版軟件包管理器來安裝。比如想在Fedora系統(tǒng)上安裝該軟件(假設(shè)軟件包在當(dāng)前的工作目錄中),我們將運(yùn)行:

  1. $ sudo dnf install ./osquery-4.1.2-1.linux.x86_64.rpm 

使用存儲(chǔ)庫

我們還可以將rpm或deb存儲(chǔ)庫添加到發(fā)行版中。如果我們使用基于rpm的發(fā)行版,可以運(yùn)行以下命令來完成任務(wù): 

  1. $ curl -L https://pkg.osquery.io/rpm/GPG | sudo tee 
  2. /etc/pki/rpm-gpg/RPM-GPG-KEY-osquery  
  3. $ sudo yum-config-manager --add-repo https://pkg.osquery.io/rpm/osquery-s3-rpm.repo  
  4. $ sudo yum-config-manager --enable osquery-s3-rpm-repo  
  5. $ sudo yum install osquery  

借助上述Linux命令,我們可以將用來簽名軟件包的gpg公鑰添加到系統(tǒng)中,然后添加存儲(chǔ)庫。最后,我們安裝Osquery軟件包。注意,在近期版本的Fedora和CentOS/RHEL中,yum只是dnf的符號(hào)鏈接,所以我們調(diào)用前者時(shí),使用的卻是后者。

如果你運(yùn)行基于Debian的發(fā)行版,可以將deb存儲(chǔ)庫添加到軟件源中,只要運(yùn)行: 

  1. $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys  
  2. 1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B  
  3. $ sudo add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main'  
  4. $ sudo apt-get update  
  5. $ sudo apt-get install osquery  

一旦軟件包安裝完畢,我們可以看一下軟件的基本用法。

基本用法

Osquery讓我們可以監(jiān)控采用“表格抽象”的操作系統(tǒng)的不同方面,使用類似sqlite數(shù)據(jù)庫上所用語法的SQL語法。針對(duì)表執(zhí)行查詢,表對(duì)操作系統(tǒng)的不同方面(比如進(jìn)程和服務(wù))進(jìn)行抽象處理。

我們可以直接使用osqueryi交互式外殼來運(yùn)行查詢,也可以通過osqueryd守護(hù)程序來安排查詢。下面這個(gè)例子顯示了列出所有可用表的查詢(還可以在此處https://osquery.io/schema/4.1.2#processes看到附有表描述的完整列表): 

  1. $ osqueryi  
  2. osquery> .tables  
  3. => acpi_tables  
  4. => apt_sources  
  5. => arp_cache 
  6. => atom_packages  
  7. => augeas  
  8. => authorized_keys  
  9. => block_devices  
  10. => carbon_black_info  
  11. => carves  
  12. => chrome_extensions  
  13. => cpu_time  
  14. => cpuid  
  15. => crontab  
  16. => curl  
  17. => curl_certificate  
  18. => deb_packages  
  19. => device_file  
  20. => device_hash  
  21. => device_partitions  
  22. => disk_encryption  
  23. => dns_resolvers  
  24. => docker_container_labels  
  25. => docker_container_mounts  
  26. => docker_container_networks  
  27. => docker_container_ports  
  28. => docker_container_processes  
  29. => docker_container_stats  
  30. => docker_containers  
  31. => docker_image_labels  
  32. => docker_images  
  33. => docker_info  
  34. => docker_network_labels  
  35. => docker_networks  
  36. => docker_version  
  37. => docker_volume_labels  
  38. => docker_volumes  
  39. => ec2_instance_metadata  
  40. => ec2_instance_tags  
  41. => elf_dynamic  
  42. => elf_info  
  43. => elf_sections  
  44. => elf_segments  
  45. => elf_symbols  
  46. => etc_hosts  
  47. => etc_protocols  
  48. => etc_services  
  49. => file  
  50. => file_events  
  51. => firefox_addons  
  52. => groups  
  53. => hardware_events  
  54. => hash  
  55. => intel_me_info  
  56. => interface_addresses  
  57. => interface_details  
  58. => interface_ipv6  
  59. => iptables  
  60. => kernel_info  
  61. => kernel_integrity  
  62. => kernel_modules  
  63. => known_hosts  
  64. => last  
  65. => listening_ports  
  66. => lldp_neighbors  
  67. => load_average  
  68. => logged_in_users  
  69. => magic  
  70. => md_devices  
  71. => md_drives  
  72. => md_personalities 
  73. => memory_array_mapped_addresses  
  74. => memory_arrays  
  75. => memory_device_mapped_addresses  
  76. => memory_devices  
  77. => memory_error_info  
  78. => memory_info  
  79. => memory_map  
  80. => mounts  
  81. => msr  
  82. => npm_packages  
  83. => oem_strings  
  84. => opera_extensions  
  85. => os_version  
  86. => osquery_events  
  87. => osquery_extensions  
  88. => osquery_flags  
  89. => osquery_info  
  90. => osquery_packs  
  91. => osquery_registry  
  92. => osquery_schedule  
  93. => pci_devices  
  94. => platform_info  
  95. => portage_keywords  
  96. => portage_packages  
  97. => portage_use  
  98. => process_envs  
  99. => process_events  
  100. => process_file_events  
  101. => process_memory_map  
  102. => process_namespaces  
  103. => process_open_files  
  104. => process_open_sockets  
  105. => processes  
  106. => prometheus_metrics  
  107. => python_packages  
  108. => routes  
  109. => rpm_package_files  
  110. => rpm_packages  
  111. => selinux_events  
  112. => shadow  
  113. => shared_memory  
  114. => shell_history  
  115. => smart_drive_info  
  116. => smbios_tables  
  117. => socket_events  
  118. => ssh_configs  
  119. => sudoers  
  120. => suid_bin  
  121. => syslog_events  
  122. => system_controls  
  123. => system_info  
  124. => time  
  125. => ulimit_info  
  126. => uptime  
  127. => usb_devices  
  128. => user_events  
  129. => user_groups  
  130. => user_ssh_keys  
  131. => users  
  132. => yara  
  133. => yara_events  
  134. => yum_sources  

運(yùn)行osqueryi命令,我們進(jìn)入交互式外殼;我們可以從該外殼執(zhí)行查詢或指令。這是查詢的另一個(gè)例子,這回列出所有運(yùn)行中進(jìn)程的pid和name。對(duì)process表執(zhí)行查詢(為便于閱讀,查詢的輸出已截短): 

  1. osquery> SELECT pid, name FROM processes;  
  2. +-------+------------------------------------+  
  3. | pid | name |  
  4. +-------+------------------------------------+  
  5. | 1 | systemd |  
  6. | 10 | rcu_sched |  
  7. | 10333 | kworker/u16:5-events_unbound |  
  8. | 10336 | kworker/2:0-events |  
  9. | 11 | migration/0 |  
  10. | 11002 | kworker/u16:1-kcryptd/253:0 |  
  11. | 11165 | kworker/1:1-events |  
  12. | 11200 | kworker/1:3-events |  
  13. | 11227 | bash |  
  14. | 11368 | osqueryi |  
  15. | 11381 | kworker/0:0-events |  
  16. | 11395 | Web Content |  
  17. | 11437 | kworker/0:2-events |  
  18. | 11461 | kworker/3:2-events_power_efficient |  
  19. | 11508 | kworker/2:2 |  
  20. | 11509 | kworker/0:1-events |  
  21. | 11510 | kworker/u16:2-kcryptd/253:0 |  
  22. | 11530 | bash |  
  23. [...] |  
  24. +-------+------------------------------------+  

甚至可以使用JOIN語句對(duì)連接表執(zhí)行查詢,就像我們?cè)陉P(guān)系數(shù)據(jù)庫中操作那樣。在下面例子中,我們對(duì)processes表執(zhí)行查詢,通過uid列與users表進(jìn)行連接: 

  1. osquery> SELECT processes.pid, processes.name, users.username FROM processes JOIN 
  2. users ON processes.uid = users.uid;  
  3. +-------+-------------------------------+------------------+  
  4. | pid | name | username |  
  5. +-------+-------------------------------+------------------+  
  6. | 1 | systemd | root |  
  7. | 10 | rcu_sched | root |  
  8. | 11 | migration/0 | root |  
  9. | 11227 | bash | egdoc |  
  10. | 11368 | osqueryi | egdoc |  
  11. | 13 | cpuhp/0 | root |  
  12. | 14 | cpuhp/1 | root |  
  13. | 143 | kintegrityd | root |  
  14. | 144 | kblockd | root |  
  15. | 145 | blkcg_punt_bio | root |  
  16. | 146 | tpm_dev_wq | root |  
  17. | 147 | ata_sff | root |  
  18. [...]  
  19. | 9130 | Web Content | egdoc |  
  20. | 9298 | Web Content | egdoc |  
  21. | 9463 | gvfsd-metadata | egdoc |  
  22. | 9497 | gvfsd-network | egdoc |  
  23. | 9518 | gvfsd-dnssd | egdoc |  
  24. +-------+-------------------------------+------------------+  

文件完整性監(jiān)控(FIM)

前面我們使用交互式外殼osqueryi來使用Osquery。想使用FIM(文件完整性監(jiān)控),我們改用osqueryd守護(hù)程序。通過配置文件,我們列出了想要監(jiān)控的文件。file_events 表中記錄了涉及指定文件和目錄的事件,比如屬性變化。守護(hù)程序在指定的時(shí)間間隔后對(duì)該表運(yùn)行查詢,并在日志中通知何時(shí)發(fā)現(xiàn)新記錄。不妨看看配置示例。

配置結(jié)構(gòu)

Osquery的主配置文件是/etc/osquery/osquery.conf。該文件默認(rèn)情況下不存在,于是我們要?jiǎng)?chuàng)建它。配置以JSON格式來提供。假設(shè)我們想要監(jiān)控/etc下的所有文件和目錄;下面顯示了我們?nèi)绾闻渲迷搼?yīng)用程序: 

  1.  
  2. "options": {  
  3. "disable_events""false"  
  4. },  
  5. "schedule": {  
  6. "file_events": {  
  7. "query""SELECT * FROM file_events;" 
  8. "interval": 300  
  9.  
  10. },  
  11. "file_paths": {  
  12. "etc": [  
  13. "/etc/%%"  
  14. ],  
  15. },  
  16.  

不妨分析上述配置。首先在options部分,我們將disable_events設(shè)為“false”,以便啟用文件事件。

之后我們創(chuàng)建schedule部分:在該部分,我們可以描述和創(chuàng)建各種命名的調(diào)度查詢。我們?cè)诒疚闹袆?chuàng)建了一個(gè)查詢,以便從file_events表選擇所有列,這意味著每300秒(5分鐘)執(zhí)行一次。

安排查詢后,我們創(chuàng)建了file_paths部分,在該部分指定要監(jiān)控的文件。在該部分,每個(gè)鍵代表要監(jiān)控一組文件的名稱(Osquery術(shù)語中的類別)。這里“etc”鍵引用僅含有一個(gè)條目/etc/%%的列表。

%符號(hào)代表什么?指定文件路徑時(shí),我們可以使用標(biāo)準(zhǔn)通配符(*)或SQL通配符(%)。如果提供單通配符,它​將選擇位于指定級(jí)別的所有文件和目錄。如果提供雙通配符,它​​將遞歸選擇所有文件和文件夾。比如說,/etc/%表達(dá)式匹配/etc下面一級(jí)的所有文件和文件夾,而/etc/%%遞歸匹配/etc下的所有文件和文件夾。

如果需要,我們還可以使用配置文件中的exclude_paths部分,從提供的路徑中排除特定文件。在該部分,我們只能引用file_paths部分中定義的類別(本例中是“etc”)。我們提供了要排除的文件列表: 

  1. "exclude_paths": {  
  2. "etc": [  
  3. "/etc/aliases"  
  4.  
  5.  

僅作為例子,我們從列表中排除了/etc/aliases文件。下面是最終配置的樣子: 

  1.  
  2. "options": {  
  3. "disable_events""false"  
  4. },  
  5. "schedule": {  
  6. "file_events": {  
  7. "query""SELECT * FROM file_events;" 
  8. "interval": 20  
  9.  
  10. },  
  11. "file_paths": {  
  12. "etc": [  
  13. "/etc/%%"  
  14.  
  15. },  
  16. "exclude_paths": {  
  17. "etc": [  
  18. "/etc/aliases"  
  19.  
  20.  
  21.  

開啟守護(hù)程序

配置已到位,我們可以開啟osqueryd守護(hù)程序:

  1. $ sudo systemctl start osqueryd 

為了使守護(hù)程序在系統(tǒng)啟動(dòng)時(shí)自動(dòng)開啟,我們要運(yùn)行:

  1. $ sudo systemctl enable osqueyd 

一旦守護(hù)程序運(yùn)行,我們可以核實(shí)配置有效。僅舉個(gè)例子,我們將修改/etc/fstab文件的許可權(quán),將它們從644改為600:

  1. $ sudo chmod 600 /etc/fstab 

現(xiàn)在我們可以核實(shí)文件更改以記錄下來,只需閱讀/var/log/osquery/osqueryd.results.log文件。下面是該文件的最后一行: 

  1.  
  2. "name":"file_events" 
  3. "hostIdentifier":"fingolfin" 
  4. "calendarTime":"Mon Dec 30 19:57:31 2019 UTC" 
  5. "unixTime":1577735851,  
  6. "epoch":0,  
  7. "counter":0,  
  8. "logNumericsAsNumbers":false 
  9. "columns": {  
  10. "action":"ATTRIBUTES_MODIFIED" 
  11. "atime":"1577735683" 
  12. "category":"etc" 
  13. "ctime":"1577735841" 
  14. "gid":"0" 
  15. "hashed":"0" 
  16. "inode":"262147" 
  17. "md5":"" 
  18. "mode":"0600" 
  19. "mtime":"1577371335" 
  20. "sha1":"" 
  21. "sha256":"" 
  22. "size":"742" 
  23. "target_path":"/etc/fstab" 
  24. "time":"1577735841" 
  25. "transaction_id":"0" 
  26. "uid":"0"  
  27. },  
  28. "action":"added"  
  29.  

在上述日志中,我們可以清楚地看到在target_path "/etc/fstab"(第23行)上進(jìn)行了ATTRIBUTES_MODIFIED操作(第10行),/etc/fstab是“etc”類別(第12行)的一部分。有必要注意這點(diǎn):如果我們從osqueryi外殼查詢file_events表,由于osqueryd守護(hù)程序和osqueryi無法聯(lián)系,因此看不到任何行。

結(jié)論

本教程介紹了使用Osquery應(yīng)用程序方面的基本概念,該應(yīng)用程序使用我們可以使用SQL語法查詢的表格數(shù)據(jù)對(duì)操作系統(tǒng)的各個(gè)概念進(jìn)行抽象。我們看到如何安裝該應(yīng)用程序、如何使用osqueryi外殼執(zhí)行基本查詢以及最后如何使用osqueryd守護(hù)程序設(shè)置文件監(jiān)控。與往常一樣,想更深入地了解該應(yīng)用程序,建議查看項(xiàng)目文檔:https://osquery.readthedocs.io/en/stable/。

原文標(biāo)題:How to monitor file integrity on Linux using Osquery,作者:Egidio Docile

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】

 

責(zé)任編輯:龐桂玉 來源: 51CTO
相關(guān)推薦

2013-12-05 13:11:33

2014-11-05 11:08:55

2018-06-22 23:14:19

完整性監(jiān)測(cè)FIM信息安全

2018-02-05 22:41:35

2010-06-01 18:11:25

Rsync 使用

2010-04-14 09:28:44

Unix操作系統(tǒng)

2015-03-12 15:44:59

2023-03-17 16:32:51

測(cè)試軟件開發(fā)

2010-02-26 15:41:16

WCF分布事務(wù)

2023-05-23 11:14:59

2022-03-14 22:55:54

人工智能數(shù)據(jù)機(jī)器學(xué)習(xí)

2010-12-14 14:36:57

Tripwire

2023-05-22 11:26:45

2015-06-08 13:48:15

數(shù)據(jù)庫數(shù)據(jù)完整性約束表現(xiàn)

2009-09-25 11:03:35

PCI DSS數(shù)據(jù)完整數(shù)據(jù)安全

2022-03-22 12:56:53

垃圾數(shù)據(jù)數(shù)據(jù)完整性

2010-06-10 15:52:04

MySQL參照完整性

2021-11-02 11:55:07

macOS macOS Monte漏洞

2010-06-01 18:14:55

Rsync 使用

2016-12-08 09:03:07

大數(shù)據(jù)證據(jù)標(biāo)準(zhǔn)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)