隨著 Linux 系統在企業和雲端環境中廣泛應用,系統安全的重要性日益凸顯。本文將探討如何利用 CIS 關鍵控制措施來強化 Linux 主機的安全性,並介紹如何使用原生 Linux 命令和專業工具 osquery 進行硬體和軟體資產清查,以及如何利用 osquery 查詢系統資訊和蒐集程式的 SHA256 雜湊值,以提升系統安全性和符合相關安全標準。同時,文章也將探討不同產業的特定安全標準和法規要求,並提供實用的指令碼範例和 osquery 指令,協助系統管理員有效地管理 Linux 系統安全。

Linux 安全標準與實務範例:產業特定安全標準與 CIS 關鍵控制措施解析

隨著雲端運算和本地佈署的 Linux 環境日益普及,不同產業對於安全性的需求也有所不同。許多產業都有特定的安全指引和法規要求,本文將探討這些產業特定安全標準,並介紹如何利用 Center for Internet Security(CIS)提出的關鍵控制措施來加強 Linux 主機的安全性。

產業特定安全標準簡介

不同的產業有各自的安全標準和法規要求,這些標準通常針對特定產業的特點制定。例如,金融業、醫療保健業等都有各自的嚴格法規。雖然這些標準各不相同,但大多數都關注於保護敏感資料和系統安全。

CIS 關鍵控制措施

CIS 提出的關鍵控制措施是一套廣泛被採用的安全最佳實踐,適用於不同產業和組織規模。這些控制措施並非用於滿足特定的法規遵從需求,而是專注於抵禦現實世界中的攻擊,提供了一套務實的安全框架。

CIS 關鍵控制措施的版本與實施群組

CIS 關鍵控制措施(第 8 版,發布於 2021 年)分為三個實施群組:

  1. 實施群組 1(IG1):基礎控制措施,適用於小型組織和商業現貨(COTS)硬體及軟體。
  2. 實施群組 2(IG2):擴充套件的技術指引,適用於中型企業和有資訊安全負責人的組織。
  3. 實施群組 3(IG3):針對大型企業,包含更全面性的安全團隊和流程。

每個實施群組都是前一組的超集,因此 IG3 包含了 IG1 和 IG2 的所有控制措施。詳細的控制措施和實施群組分類別可參考 CIS 官方網站提供的免費下載檔案。

將 CIS 關鍵控制措施應用於 Linux 主機安全

要將 CIS 關鍵控制措施應用於 Linux 主機安全,首先需要了解如何進行硬體和軟體資產清查。以下是利用原生 Linux 命令實作關鍵控制措施 1 和 2 的範例:

硬體資產清查(關鍵控制措施 1)

Linux 系統提供了豐富的資訊儲存在 /proc 目錄下,這些檔案反映了系統的執行狀態。例如,要檢視 CPU 資訊,可以使用以下命令:

$ cat /proc/cpuinfo
processor : 0

這個命令顯示了第一顆 CPU 的資訊。/proc 目錄下的檔案是虛擬檔案,不佔用實際磁碟空間,但提供了系統硬體和執行狀態的重要資訊。

軟體資產清查(關鍵控制措施 2)

對於軟體資產清查,可以使用 dpkgrpm 等套件管理工具來列出已安裝的軟體包。例如,在根據 Debian 的系統上,可以使用:

$ dpkg --list

這個命令會列出系統上所有已安裝的軟體包。

程式碼解密:

上述命令能夠幫助管理員建立一個基本的資產清單。

  • cat /proc/cpuinfo 命令用於檢視 CPU 的詳細資訊,包括處理器型別、核心數等,這對於瞭解系統硬體組態至關重要。
  • dpkg --list 命令則列出了系統中所有已安裝的軟體包,有助於管理員掌握系統的軟體資產狀況。

透過實施 CIS 關鍵控制措施,組織可以有效地提升 Linux 主機的安全性,無論是在本地佈署還是雲端環境中。這些控制措施提供了一個務實且靈活的安全框架,有助於抵禦常見的攻擊和威脅。

Linux 系統安全標準與實務範例:硬體與軟體清單管理

在維護Linux系統的安全與穩定運作時,硬體與軟體清單的管理是至關重要的第一步。無論是對於企業級的伺服器管理還是個人電腦的維護,瞭解系統的硬體組態和已安裝的軟體列表都是基礎且關鍵的工作。本文將介紹如何利用Linux內建的命令和工具來收集硬體和軟體資訊,並提供實用的指令碼範例。

硬體清單管理

硬體清單的管理涉及收集系統的CPU、記憶體、磁碟等關鍵硬體資訊。Linux提供了多種方法來取得這些資訊。

使用 /proc 檔案系統

/proc 檔案系統提供了豐富的系統資訊,包括CPU、記憶體等。

$ cat /proc/cpuinfo

輸出範例:

vendor_id : GenuineIntel
cpu family : 6
model : 158
model name : Intel(R) Xeon(R) CPU E3-1505M v6 @ 3.00GHz
...
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves arat md_clear flush_l1d arch_capabilities
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds
bogomips : 6000.00
...

使用 lshw 命令

lshw 是一個用於顯示硬體組態的工具,可以提供詳細的硬體資訊。

$ sudo lshw

硬體清單收集指令碼

下面是一個簡單的指令碼,用於收集基本的硬體和作業系統資訊。

#!/bin/bash

echo -n "Basic Inventory for Hostname: "
uname -n
echo =====================================
dmidecode | sed -n '/System Information/,+2p' | sed 's/\x09//'
dmesg | grep Hypervisor
dmidecode | grep "Serial Number" | grep -v "Not Specified" | grep -v None
echo =====================================
echo "OS Information:"
uname -o -r
if [ -f /etc/redhat-release ]; then
    echo -n " "
    cat /etc/redhat-release
fi
if [ -f /etc/issue ]; then
    cat /etc/issue
fi
echo =====================================
echo "IP information: "
ip ad | grep inet | grep -v "127.0.0.1" | grep -v "::1/128" | tr -s " " | cut -d " " -f 3
echo =====================================
echo "CPU Information: "
cat /proc/cpuinfo | grep "model name\|MH\|vendor_id" | sort -r | uniq
echo -n "Socket Count: "
cat /proc/cpuinfo | grep processor | wc -l
echo -n "Core Count (Total): "
cat /proc/cpuinfo | grep cores | cut -d ":" -f 2 | awk '{sum+=$1} END {print sum}'
echo =====================================
echo "Memory Information: "
grep MemTotal /proc/meminfo | awk '{print $2,$3}'
echo =====================================
echo "Disk Information: "
fdisk -l | grep Disk | grep dev

內容解密:

  1. uname -n:輸出主機名稱。
  2. dmidecode:用於提取硬體資訊,如系統製造商、產品名稱和序號。
  3. dmesg | grep Hypervisor:檢查系統是否執行在虛擬機器環境下。
  4. uname -o -r:顯示作業系統型別和版本。
  5. ip ad:顯示網路介面的IP位址資訊。
  6. /proc/cpuinfo:提供CPU的詳細資訊,包括型號、頻率和核心數。
  7. /proc/meminfo:顯示記憶體總量。
  8. fdisk -l:列出磁碟分割槽資訊。

軟體清單管理

軟體清單的管理主要涉及收集系統中已安裝的軟體套件列表。在根據Debian的Linux發行版(如Ubuntu)中,可以使用 aptdpkg 命令來實作。

使用 apt 命令

$ sudo apt list --installed | wc -l

這個命令會列出所有已安裝的軟體套件,並統計總數。

內容解密:

  • apt list --installed:列出所有已安裝的軟體套件。
  • wc -l:統計列表中的行數,即已安裝的軟體套件總數。

Linux 系統安全管理與資產清查實務

在維護 Linux 系統的安全與合規性時,資產清查是一項至關重要的任務。本文將探討如何使用原生命令和專業工具(如 OSQuery)來進行系統資產清查,並確保符合相關安全標準。

使用原生命令進行資產清查

在 Linux 系統中,可以使用 dpkgrpm 命令來列出已安裝的軟體包。

Debian/Ubuntu 系統

在 Debian 或 Ubuntu 系統上,可以使用 dpkg 命令來列出已安裝的軟體包:

dpkg -l

輸出範例:

Name        Version
===============================================================
acpi-support 0.136.1
acpid       1.0.10-5ubuntu2.1
adduser     3.112ubuntu1
...

若要查詢特定軟體包所包含的檔案,可以使用:

dpkg -L openssh-client

輸出範例:

/.
/etc
/etc/ssh
/etc/ssh/ssh_config
/usr/bin/scp
/usr/bin/sftp
/usr/bin/ssh
...

紅帽系列系統

在紅帽系列的 Linux 發行版(如 Fedora、CentOS)上,可以使用 rpm 命令來列出已安裝的軟體包:

rpm -qa

輸出範例:

libsepol-devel-2.0.41-3.fc13.i686
wpa_supplicant-0.6.8-9.fc13.i686
system-config-keyboard-1.3.1-1.fc12.i686
...

若要查詢特定軟體包的詳細資訊,可以使用:

rpm -qi python

輸出範例:

Name : python
Version : 2.6.4
Vendor: Fedora Project
Release : 27.fc13
Build Date: Fri 04 Jun 2010 02:22:55 PM EDT
...

使用 OSQuery 進行資產清查

OSQuery 是一個開源工具,提供了一個類別似資料函式庫的介面來查詢系統資訊。它支援多種作業系統,包括 Linux、macOS 和 Windows。

安裝 OSQuery

在 Ubuntu 系統上安裝 OSQuery 的步驟如下:

  1. 新增 OSQuery 的軟體源:

    echo "deb [arch=amd64] https://pkg.osquery.io/deb deb main" | sudo tee /etc/apt/sources.list.d/osquery.list
    
  2. 匯入軟體源的簽名金鑰:

    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B
    
  3. 更新軟體包列表並安裝 OSQuery:

    sudo apt update
    sudo apt-get install osquery
    

使用 OSQuery 的互動式 Shell

安裝完成後,可以使用 osqueryi 命令啟動互動式 Shell:

osqueryi

在 OSQuery 的互動式 Shell 中,可以使用 .help 命令檢視可用指令:

osquery> .help

查詢系統資訊

可以使用 .tables 命令檢視可用的資料表:

osquery> .tables

查詢作業系統版本資訊:

osquery> select * from os_version;

輸出範例:

+
---
-
---
-+
---
-
---
-
---
-
---
-
---
-
---
-
---
+
---
-
---
+
---
-
---
+
---
-
---
+
---
---
+
---
-
---
---
+
---
-
---
-
---
-
---
+
---
-
---
---
+
---
-
---
-+
| name   | version                   | major | minor | patch | build | platform | platform_like | codename | arch   |
+
---
-
---
-+
---
-
---
-
---
-
---
-
---
-
---
-
---
+
---
-
---
+
---
-
---
+
---
-
---
+
---
---
+
---
-
---
---
+
---
-
---
-
---
-
---
+
---
-
---
---
+
---
-
---
-+
| Ubuntu | 20.04.1 LTS (Focal Fossa) | 20    | 4     | 0     |       | ubuntu   | debian        | focal    | x86_64 |
+
---
-
---
-+
---
-
---
-
---
-
---
-
---
-
---
-
---
+
---
-
---
+
---
-
---
+
---
-
---
+
---
---
+
---
-
---
---
+
---
-
---
-
---
-
---
+
---
-
---
---
+
---
-
---
-+

查詢網路介面的 IP 位址和子網路遮罩(排除迴路介面):

osquery> select interface, address, mask from interface_addresses where interface NOT LIKE '%lo%';

輸出範例:

+
---
-
---
-
---
+
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
+
---
-
---
-
---
-
---
--+
| interface | address                       | mask            |
+
---
-
---
-
---
+
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
+
---
-
---
-
---
-
---
--+
| ens33     | 192.168.122.170               | 255.255.255.0   |
| ens33     | fe80::1ed6:5b7f:5106:1509%ens33 | ffff:ffff:ffff::|
+
---
-
---
-
---
+
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
+
---
-
---
-
---
-
---
--+

Linux 安全標準實務範例

在前述章節中,我們探討瞭如何利用 osquery 這個工具來查詢系統資訊。現在,讓我們進一步深入瞭解如何運用 osquery 來強化 Linux 系統的安全性。

利用 osquery 查詢系統資訊

osquery 是一個強大的工具,可以用來查詢系統的各種資訊,包括 ARP 快取、已安裝的套件、執行中的程式等。以下是一些範例:

查詢 ARP 快取

要檢索本地 ARP 快取,可以使用以下指令:

osquery> select * from arp_cache;

輸出結果如下:

+
---
-
---
-
---
-
---
--+
---
-
---
-
---
-
---
-
---
+
---
-
---
-
---
+
---
-
---
-
---
+
| address         | mac               | interface | permanent |
+
---
-
---
-
---
-
---
--+
---
-
---
-
---
-
---
-
---
+
---
-
---
-
---
+
---
-
---
-
---
+
| 192.168.122.201 | 3c:52:82:15:52:1b | ens33     | 0         |
| 192.168.122.1   | 00:0c:29:3b:73:cb | ens33     | 0         |
| 192.168.122.241 | 40:b0:34:72:48:e4 | ens33     | 0         |
+
---
-
---
-
---
-
---
--+
---
-
---
-
---
-
---
-
---
+
---
-
---
-
---
+
---
-
---
-
---
+

列出已安裝的套件

要列出已安裝的套件,可以使用以下指令:

osquery> select * from deb_packages limit 2;

輸出結果如下:

+
---
-
---
-
---
-
---
--+
---
-
---
-
---
-
---
-
---
-
---
---
+
---
-
---
-+
---
---
+
---
-
---
+
---
-
---
-
---
-
---
-
---
+
---
-
---
-
---
-
---
-
---
---
+
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
+
---
-
---
--+
---
-
---
+
| name            | version                  | source | size | arch  | revision          | status               | maintainer                                   | section | priority |
+
---
-
---
-
---
-
---
--+
---
-
---
-
---
-
---
-
---
-
---
---
+
---
-
---
-+
---
---
+
---
-
---
+
---
-
---
-
---
-
---
-
---
+
---
-
---
-
---
-
---
-
---
---
+
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
+
---
-
---
--+
---
-
---
+
| accountsservice | 0.6.55-0ubuntu12~20.04.4 |        | 452  | amd64 | 0ubuntu12~20.04.4 | install ok installed | Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> | admin   | optional |
| acl             | 2.2.53-6                 |        | 192  | amd64 | 6                 | install ok installed | Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> | utils   | optional |
+
---
-
---
-
---
-
---
--+
---
-
---
-
---
-
---
-
---
-
---
---
+
---
-
---
-+
---
---
+
---
-
---
+
---
-
---
-
---
-
---
-
---
+
---
-
---
-
---
-
---
-
---
---
+
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
+
---
-
---
--+
---
-
---
+

查詢執行中的程式

要查詢執行中的程式,可以使用以下指令:

osquery> SELECT pid, name FROM processes order by start_time desc limit 10;

輸出結果如下:

+
---
-
---
+
---
-
---
-
---
-
---
-
---
-
---
-
---
-+
| pid   | name                       |
+
---
-
---
+
---
-
---
-
---
-
---
-
---
-
---
-
---
-+
| 34790 | osqueryi                   |
| 34688 | sshd                       |
| 34689 | bash                       |
| 34609 | sshd                       |
| 34596 | systemd-resolve            |
| 34565 | dhclient                   |
| 34561 | kworker/0:3-cgroup_destroy |
| 34562 | kworker/1:3-events         |
| 34493 | kworker/0:0-events         |
| 34494 | kworker/1:2-events         |
+
---
-
---
+
---
-
---
-
---
-
---
-
---
-
---
-
---
-+

利用 osquery 蒐集程式的 SHA256 雜湊值

我們可以利用 osquery 蒐集執行中程式的 SHA256 雜湊值,以偵測惡意軟體。以下是一個範例:

osquery> SELECT DISTINCT h.sha256, p.name, u.username
...> FROM processes AS p
...> INNER JOIN hash AS h ON h.path = p.path
...> INNER JOIN users AS u ON u.uid = p.uid
...> ORDER BY start_time DESC
...> LIMIT 5;

輸出結果如下:

+
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
---
+
---
-
---
-
---
-
---
--+
---
-
---
---
+
| sha256                                                       | name            | username |
+
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
---
+
---
-
---
-
---
-
---
--+
---
-
---
---
+
| 45fc2c2148bdea9cf7f2313b09a5cc27eead3460430ef55d1f5d0df6c1d96ed4 | osqueryi        | robv     |
| 04a484f27a4b485b28451923605d9b528453d6c098a5a5112bec859fb5f2eea9 | bash            | robv     |
| 45368907a48a0a3b5fff77a815565195a885da7d2aab8c4341c4ee869af4c449 | gvfsd-metadata  | robv     |
| d3f9c91c6bbe4c7a3fdc914a7e5ac29f1cbfcc3f279b71e84badd25b313fea45 | update-notifier | robv     |
| 83776c9c3d30cfc385be5d92b32f4beca2f6955e140d72d857139d2f7495af1e | gnome-terminal- | robv     |
+
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
---
+
---
-
---
-
---
-
---
--+
---
-
---
---
+

程式碼解說:

此查詢結合了 processeshashusers 三個表格,以取得執行中程式的 SHA256 雜湊值、程式名稱和使用者名稱。

  1. SELECT DISTINCT h.sha256, p.name, u.username:選取唯一的 SHA256 雜湊值、程式名稱和使用者名稱。
  2. FROM processes AS p:從 processes 表格中選取資料,並將其別名設為 p
  3. INNER JOIN hash AS h ON h.path = p.path:將 hash 表格與 processes 表格結合,條件是 hash 表格中的 path 欄位與 processes 表格中的 path 欄位相符。
  4. INNER JOIN users AS u ON u.uid = p.uid:將 users 表格與 processes 表格結合,條件是 users 表格中的 uid 欄位與 processes 表格中的 uid 欄位相符。
  5. ORDER BY start_time DESC:按照程式的啟動時間進行降序排序。
  6. LIMIT 5:限制輸出結果為前 5 筆資料。

CIS Benchmark 的應用

CIS(Center for Internet Security)發布了一系列的安全基準(Benchmark),這些基準描述了各種基礎設施元件的安全組態。CIS Benchmark 的特點是具有很強的指導性,每一項建議都描述了問題、解決方案和稽核方法。

CIS Benchmark 的優點

  1. 由行業專家編寫和維護,代表了業界的最佳實踐。
  2. 不受廠商影響,具有很強的中立性。
  3. 詳細描述了安全組態的每一項建議,具有很強的可操作性。

如何應用 CIS Benchmark

  1. 下載相關的 CIS Benchmark 檔案。
  2. 根據檔案中的建議,對系統進行安全組態。
  3. 使用檔案中的稽核方法,檢查系統的安全狀態。