Keniver's Blog

Lynis: Linux 主機安全性掃描工具

作為一個主機維運人員, 資訊安全一直都是我們非常注重的一個目標, 但主機一多就不容易顧及到所有細節.

本篇文章介紹的 Lynis 是一套 Linux 的主機稽核工具, 可以用來檢查主機的漏洞與弱點, 以及簡易的後門檢查, 也可以針對各種設定做出建議, 是一套非常好用的主機安全維護工具

安裝 Lynis

方法一: 使用 apt-get

使用 Debian, Ubuntu 的使用者可以使用 apt-get 進行安裝

apt-get install lynis 

雖然 apt 很方便, 但 apt 上的版本不會是最新的, 安全檢測工具最好要維持在最新版, 才能提供最完善的檢測效果, 建議從官方網站下載最新版本

方法二: 從官方網站下載(建議)

前往 官方網站 下載最新的版本

我在寫這邊文章的時候最新版本是 2.3.4, 下方指令使用 2.3.4 版作為示範, 記得要更換為最新版本喔!

wget https://cisofy.com/files/lynis-2.3.4.tar.gz
tar zxvf lynis-2.3.4.tar.gz
cd lynis

執行 Lynis

Lynis 的執行分為 root 模式與一般使用者模式, root 模式會檢查所有細節, 一般使用者模式僅檢查一些通用項目, 在這邊建議各位使用 root 模式

使用 root 執行 Lynis

sudo ./lynis audit system -Q

新版本還可以檢查 dockerfile, 挺厲害的呢

Lynis 將會開始進行各項稽核

執行完成後 Lynis 會將 log 放置於

/var/log/lynis.log

Lynis 結果報告

報告解讀與改善

透過 Lynis 的執行結果, 我們會發現 [FOUND], [NONE] 各種檢測結果, 這些結果根據不同的分類會有不同的解釋, 最簡易的判定方式是藉由顏色分辨, 綠色正常, 黃色提醒, 紅色警告, 但這不是絕對, 實際上需要依據實際需求狀況去做探討.


上圖就是一個例子, 由於這台主機的角色為路由器, 因此很多特殊的設定都被打開, 在這邊的紅字反而但表著正常.

在 Lynis 檢查結果的最後會附上如下圖的建議事項表

拿其中的一項做舉例

Warnings (1):
  ----------------------------
  ! Found one or more vulnerable packages. [PKGS-7392]
      https://cisofy.com/controls/PKGS-7392/

這個例子中舉例有弱點套件沒有更新, 前往下方的網址 PKGS-7392 就可以了解詳細的內容, 像是如何修補的建議與漏洞成因之類的, 在這次的範例中給出了下方的指令, 看樣子是更新系統的指令

apt-get update
apt-get upgrade

更新之後再一次的執行 Lynis, 就發現這個項目消失了, 代表我們解決了這個問題, 主機的安全更進一步了.

報告細節

有些公司可能會要求記錄稽核改善過程, Lynis 可以幫助你寫出好像很厲害的細節, 延續上面的例子, 我們針對 PKGS-7392 這個稽核項目進行更深入的了解

Lynis 提供的 show details 指令, 讓我們可以查詢每一項稽核結果的細節, 下方以PKGS-7392為例

sudo ./lynis show details PKGS-7392

Lynis 就會從 /var/log/lynis.log 中取出關於 PKGS-7392 的部分

2016-10-21 12:49:46 Performing test ID PKGS-7392 (Check for Debian/Ubuntu security updates)
2016-10-21 12:49:46 Action: updating repository with apt-get
2016-10-21 12:49:51 Result: apt-get finished
2016-10-21 12:49:51 Test: Checking if /usr/lib/update-notifier/apt-check exists
2016-10-21 12:49:51 Result: apt-check (update-notifier-common) not found
2016-10-21 12:49:51 Result: found vulnerable package(s) via apt-get (-security channel)
2016-10-21 12:49:51 Found vulnerable package: bind9-host
2016-10-21 12:49:51 Found vulnerable package: dnsutils
2016-10-21 12:49:51 Found vulnerable package: exim4
2016-10-21 12:49:51 Found vulnerable package: exim4-base
2016-10-21 12:49:51 Found vulnerable package: exim4-config
2016-10-21 12:49:51 Found vulnerable package: exim4-daemon-light
2016-10-21 12:49:51 Found vulnerable package: fontconfig
2016-10-21 12:49:51 Found vulnerable package: fontconfig-config
2016-10-21 12:49:51 Found vulnerable package: host
2016-10-21 12:49:51 Found vulnerable package: libbind9-90
2016-10-21 12:49:51 Found vulnerable package: libcurl3-gnutls
2016-10-21 12:49:51 Found vulnerable package: libdns-export100
2016-10-21 12:49:51 Found vulnerable package: libdns100
2016-10-21 12:49:51 Found vulnerable package: libfontconfig1
2016-10-21 12:49:51 Found vulnerable package: libgcrypt20
2016-10-21 12:49:51 Found vulnerable package: libgd3
2016-10-21 12:49:51 Found vulnerable package: libgdk-pixbuf2.0-0
2016-10-21 12:49:51 Found vulnerable package: libgdk-pixbuf2.0-common
2016-10-21 12:49:51 Found vulnerable package: libgraphite2-3
2016-10-21 12:49:51 Found vulnerable package: libidn11
2016-10-21 12:49:51 Found vulnerable package: libintl-perl
2016-10-21 12:49:51 Found vulnerable package: libirs-export91
2016-10-21 12:49:51 Found vulnerable package: libisc-export95
2016-10-21 12:49:51 Found vulnerable package: libisc95
2016-10-21 12:49:51 Found vulnerable package: libisccc90
2016-10-21 12:49:51 Found vulnerable package: libisccfg-export90
2016-10-21 12:49:51 Found vulnerable package: libisccfg90
2016-10-21 12:49:51 Found vulnerable package: libjasper1
2016-10-21 12:49:51 Found vulnerable package: liblwres90
2016-10-21 12:49:51 Found vulnerable package: libmodule-build-perl
2016-10-21 12:49:51 Found vulnerable package: libtasn1-6
2016-10-21 12:49:51 Found vulnerable package: linux-image-3.16.0-4-amd64
2016-10-21 12:49:51 Found vulnerable package: linux-libc-dev
2016-10-21 12:49:51 Found vulnerable package: ntp
2016-10-21 12:49:51 Found vulnerable package: ntpdate
2016-10-21 12:49:51 Found vulnerable package: openssh-client
2016-10-21 12:49:51 Found vulnerable package: openssh-server
2016-10-21 12:49:51 Found vulnerable package: openssh-sftp-server
2016-10-21 12:49:51 Found vulnerable package: python-pil
2016-10-21 12:49:51 Found vulnerable package: qemu-guest-agent
2016-10-21 12:49:51 Warning: Found one or more vulnerable packages. [test:PKGS-7392] [details:-] [solution:-]
2016-10-21 12:49:51 Suggestion: Update your system with apt-get update, apt-get upgrade, apt-get dist-upgrade and/or unattended-upgrades [test:PKGS-7392] [details:-] [solution:-]
2016-10-21 12:49:51 ===---------------------------------------------------------------===

這樣我們就可以依據Log結果來寫稽核報告了呢

定時執行

稽核要定時執行才能達到最好的效果, 我們可以藉由加入 crontab 來達到自動重複執行的目的

crontab -e

這邊假設 每天凌晨四點執行 (小提醒: 請注意主機時區)

0  4   *   *   *   root    /were/is/the/lynis audit system --no-colors -q -Q

這樣每天凌晨四點就可以去 /var/log/lynis.log 取得 分析結果, 有空的網管可以自己寫一支程式去分析結果然後寄送mail, Lynis 有提供可程式讀取的報告檔案

/var/log/lynis-report.dat

更新 Lynis

Lynis 要積極更新才能發揮他完整的作用, 可以使用以下指令來查詢是否有新的版本

./lynis update info

這部分有點可惜的是, Lynis 2.2 以後免費版就不再提供官方更新點了

雖然 Lynis 內建了更新指令, 但要自行架設更新主機

./lynis update release

由於不能直接更新, 各位要記得定時到官方網站下載最新版, 至於更新點的架設, 下次有機會的時候再來與各位分享