Linux中國

如何閱讀 Lynis 報告提高 Linux 安全性

當我讀到 Gaurav Kamathe 的文章《使用 Lynis 掃描 Linux 安全性》時,讓我想起了我在美國勞工部擔任系統管理員的日子。我那時的職責之一是保證我們的 Unix 伺服器的安全。每個季度,都會有一個獨立的核查員來審查我們伺服器的安全狀態。每次在核查員預定到達的那一天,我都會運行 Security Readiness Review(SRR),這是一個掃描工具,它使用一大套腳本來識別和報告任何安全線索。SRR 是開源的,因此我可以查看所有源碼腳本及其功能。這使我能夠查看其代碼,確定具體是什麼問題,並迅速修復它發現的每個問題。

什麼是 Lynis

Lynis 是一個開源的安全審計工具,它的工作原理和 SRR 很像,它會掃描 Linux 系統,並提供它發現的任何弱點的詳細報告。同樣和 SRR 一樣,它也是由一大套腳本組成的,每個腳本都會檢查一個特定的項目,例如,最小和最大密碼時間要求。

運行 Lynis 後,你可以使用它的報告來定位每個項目的腳本,並了解 Lynis 是如何檢查和報告每個問題的。你也可以使用相同的腳本代碼來創建新的代碼來自動解決。

如何閱讀 Lynis 報告

由於 Gaurav 的文章介紹了 Lynis 的安裝和使用,在本文中,我將展示一些如何閱讀和使用其報告的例子。

請從運行一次審計開始:

# lynis audit system --quick

完成後,完整的報告將顯示在你的屏幕上。在底部,「Suggestions」 部分列出了所有可能需要修復以更好地加固系統的項目,以及每個項目的 TEST-ID。

要想加固系統並減少列表的大小,請開始解決每個項目。在 「Suggestions」 部分的描述可能包含了你需要採取的全部行動。如果沒有,你可以使用 show details 命令。

# lynis show details TEST-ID

例如,在我的系統中,有一條建議是:

找不到 locate 所需的資料庫,運行 updatedblocate.updatedb 來創建這個文件。[FILE-6410]

看起來我只需要運行 updatedb 命令就行,但如果我想確定一下,我可以使用 Lynis 的 show details 選項。

# lynis show details FILE-6410
2020-06-16 20:54:33 Performing test ID FILE-6410 (Checking Locate database)
2020-06-16 20:54:33 Test: Checking locate database
2020-06-16 20:54:33 Result: file /var/lib/mlocate/mlocate.db not found
2020-06-16 20:54:33 Result: file /var/lib/locate/locatedb not found
2020-06-16 20:54:33 Result: file /var/lib/locatedb not found
2020-06-16 20:54:33 Result: file /var/lib/slocate/slocate.db not found
2020-06-16 20:54:33 Result: file /var/cache/locate/locatedb not found
2020-06-16 20:54:33 Result: file /var/db/locate.database not found
2020-06-16 20:54:33 Result: database not found
2020-06-16 20:54:33 Suggestion: The database required for 'locate' could not be found. Run 'updatedb' or 'locate.updatedb' to create this file. [test:FILE-6410] [details:-] [solution:-]
2020-06-16 20:54:33 ====

這些細節表明 Lynis 無法找到各種文件。這個情況描述的非常清楚。我可以運行 updatedb 命令,然後重新檢查這個測試。

# updatedb
# lynis --tests FILE-6410

重新檢查細節時,會顯示它發現哪個文件滿足了測試:

# lynis show details FILE-6410
2020-06-16 21:38:40 Performing test ID FILE-6410 (Checking Locate database)
2020-06-16 21:38:40 Test: Checking locate database
2020-06-16 21:38:40 Result: locate database found (/var/lib/mlocate/mlocate.db)
2020-06-16 21:38:40 Result: file /var/lib/locate/locatedb not found
2020-06-16 21:38:40 Result: file /var/lib/locatedb not found
2020-06-16 21:38:40 Result: file /var/lib/slocate/slocate.db not found
2020-06-16 21:38:40 Result: file /var/cache/locate/locatedb not found
2020-06-16 21:38:40 Result: file /var/db/locate.database not found
2020-06-16 21:38:40 ====

深入挖掘

Lynis 的許多建議並不像這個建議那樣直接。如果你不確定某個發現或建議指的是什麼,就很難知道如何解決問題。假設你在一個新的 Linux 伺服器上運行 Lynis,有幾項與 SSH 守護進程有關的內容,其中一項是關於 MaxAuthTries 的設置:

* Consider hardening SSH configuration [SSH-7408]
    - Details  : MaxAuthTries (6 --> 3)
      https://cisofy.com/lynis/controls/SSH-7408/

要解決這個問題,你需要知道 SSH 配置文件的位置。一個經驗豐富的 Linux 管理員可能已經知道在哪裡找到它們,但如果你不知道,有一個方法可以看到 Lynis 在哪裡找到它們。

定位 Lynis 測試腳本

Lynis 支持多種操作系統,因此你的安裝位置可能有所不同。在 Red Hat Enterprise Linux 或 Fedora Linux 系統中,使用 rpm 命令來查找測試文件:

# rpm -ql lynis

這將列出所有測試文件,並報告它們在 lynis/include 目錄下的位置。在這個目錄下搜索你想知道的 TEST-ID(本例中為 SSH-7408):

# grep SSH-7408 /usr/share/lynis/include/*
/usr/share/lynis/include/tests_ssh:    # Test        : SSH-7408

查找 SSH 問題

名為 tests_ssh 的文件中包含了 TEST-ID,在這裡可以找到與 SSH 相關的掃描函數。看看這個文件,就可以看到 Lynis 掃描器調用的各種函數。第一部分在一個名為 SSH_DAEMON_CONFIG_LOCS 的變數中定義了一個目錄列表。下面幾節負責檢查 SSH 守護進程的狀態、定位它的配置文件,並識別它的版本。我在 SSH-7404 測試中找到了查找配置文件的代碼,描述為 「確定 SSH 守護進程配置文件位置」。這段代碼包含一個 for 循環,在列表中的項目中搜索一個名為 sshd_config 的文件。我可以用這個邏輯來自己進行搜索:

# find /etc /etc/ssh /usr/local/etc/ssh /opt/csw/etc/ssh -name sshd_config
/etc/ssh/sshd_config
/etc/ssh/sshd_config
find: 『/usr/local/etc/ssh』: No such file or directory
find: 『/opt/csw/etc/ssh』: No such file or directory

進一步探索這個文件,就會看到尋找 SSH-7408 的相關代碼。這個測試涵蓋了 MaxAuthTries 和其他一些設置。現在我可以在 SSH 配置文件中找到該變數:

# grep MaxAuthTries /etc/ssh/sshd_config
#MaxAuthTries 6

修復法律橫幅問題

Lynis 還報告了一個與登錄系統時顯示的法律橫幅有關的發現。在我的家庭桌面系統上(我並不希望有很多其他人登錄),我沒有去改變默認的 issue 文件。企業或政府的系統很可能被要求包含一個法律橫幅,以警告用戶他們的登錄和活動可能被記錄和監控。Lynis 用 BANN-7126 測試和 BANN-7130 測試報告了這一點:

* Add a legal banner to /etc/issue, to warn unauthorized users [BANN-7126]
      https://cisofy.com/lynis/controls/BANN-7126/

* Add legal banner to /etc/issue.net, to warn unauthorized users [BANN-7130]
      https://cisofy.com/lynis/controls/BANN-7130/

我在運行 Fedora 32 工作站的系統上沒有發現什麼:

# cat /etc/issue /etc/issue.net
S
Kernel r on an m (l)

S
Kernel r on an m (l)

我可以添加一些諸如 「keep out」 或 「don't break anything」 之類的內容,但測試的描述並沒有提供足夠的信息來解決這個問題,所以我又看了看 Lynis 的腳本。我注意到 include 目錄下有一個叫 tests_banners 的文件;這似乎是一個很好的地方。在 grep 的幫助下,我看到了相關的測試:

# grep -E 'BANN-7126|BANN-7130' /usr/share/lynis/include/tests_banners
    # Test        : BANN-7126
    Register --test-no BANN-7126 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Check issue banner file contents"
    # Test        : BANN-7130
    Register --test-no BANN-7130 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Check issue.net banner file contents"

在檢查了測試文件中的相關代碼後,我發現這兩個測試都是通過一個 for 循環來迭代一些預定義的法律術語:

for ITEM in ${LEGAL_BANNER_STRINGS}; do

這些法律術語存儲在文件頂部定義的變數 LEGAL_BANNER_STRINGS 中。向後滾動到頂部可以看到完整的清單:

LEGAL_BANNER_STRINGS="audit access authori condition connect consent continu criminal enforce evidence forbidden intrusion law legal legislat log monitor owner penal policy policies privacy private prohibited record restricted secure subject system terms warning"

我最初的建議(「keep out」 或 「don't break anything」)不會滿足這個測試,因為它們不包含這個列表中的任何單詞。

下面這條橫幅信息包含了幾個必要的詞,因此,它將滿足這個測試,並防止 Lynis 報告它:

Attention, by continuing to connect to this system, you consent to the owner storing a log of all activity. Unauthorized access is prohibited.

請注意,這條信息必須被添加到 /etc/issue/etc/issue.net 中。

使其可重複

你可以手動進行這些編輯,但你可能要考慮自動化。例如,可能有許多設置需要更改,或者你可能需要在許多伺服器上定期進行這些編輯。創建一個加固腳本將是簡化這個過程的好方法。對於 SSH 配置,在你的加固腳本中的一些 sed 命令可以解決這些發現。或者,你可以使用 echo 語句來添加合法的橫幅。

sed -i '/MaxAuthTries/s/#MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config

echo "Legal Banner" | tee -a /etc/issue /etc/issue.net

自動化使你能夠創建一個可重複的腳本,可以在你的基礎設施中保存和管理。你也可以在你的初始伺服器配置中加入這個腳本。

加固你的系統

這種類型的練習可以提高你的腳本技能,既可以跟著現有的代碼走,也可以寫自己的腳本。因為 Lynis 是開源的,所以你可以很容易地看到你的系統是如何被檢查的,以及它的報告意味著什麼。最終的結果將是一個完善的系統,你可以在審計人員來的時候隨時向他們炫耀。

via: https://opensource.com/article/20/8/linux-lynis-security

作者:Alan Formy-Duval 選題:lujun9972 譯者:wxy 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國