返回文章列表

Linux 系統安全標準與 CIS 關鍵控制措施

本文探討如何在 Linux 系統上實施 CIS 關鍵控制措施,涵蓋產業特定安全標準、硬體和軟體資產清查、以及使用原生 Linux 命令和 osquery 進行系統安全管理和資產清查實務。文章提供實用的指令碼範例和 osquery 指令,說明如何收集硬體資訊、列出已安裝的軟體套件、查詢執行中的程式以及蒐集程式的

資安 系統管理

隨著 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 <[email protected]> | admin   | optional |
| acl             | 2.2.53-6                 |        | 192  | amd64 | 6                 | install ok installed | Ubuntu Developers <[email protected]> | 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. 使用檔案中的稽核方法,檢查系統的安全狀態。