Lynisとは

Linux向けのセキュリティ監査ツール。
http://www.rootkit.nl/projects/lynis.html

Linux向けではあるが、Linux以外でも使える。
FreeBSD, Solarisに加えてなんとOS Xまで。
このツールを実行すると、OSだけでなく、そこにインストールされているソフトウェアのセキュリティチェックもしてくれる。

Lynisのいいところ

Lynisのポイントは、問題のある設定、状態を指摘してくれるところにある。
具体的には、期限切れになっているSSLや、パスワード設定のないユーザアカウントや、不適切なパーミッションとか、そういったものを指摘してくれる。
指摘のしかたも、「Warnings」で危険性を挙げることのほかに、「Suggestions」で推奨対応方法も教えてくれる。

たとえばこれが「インストールされているソフトウェアに脆弱性があるよ」というレベルであれば大したことない。
FreeBSDの場合、portauditとかpkg auditで十分。
しかしLynisは、上述の通りソフトウェアやOSの設定にまで踏み込んでチェックしてくれるんである。

なじみのないソフトウェアをインストールするとき、初めてのOSをセットアップするときはもちろん、普段から使っているOS、ソフトウェアに対しても、「あ、これ危なかったんだ」と気づきを与えてくれる。

これはありがたい。
さっそく試してみる。

インストール

適当にどうぞ。
FreeBSDならportsにもpkgにもあるよ。
Linuxならapt-getでもyumでもどうぞ。

使いかた

まず最初に、lynisの実行にはroot権限が必要。
使い方はlynis -helpでズラズラと出てくる。

# lynis --help

------------------------------------
  Scan options:
    --auditor "<name>"            : Auditor name
    --check-all (-c)              : Check system
    --no-log                      : Don't create a log file
    --profile <profile>           : Scan the system with the given profile file
    --quick (-Q)                  : Quick mode, don't wait for user input
    --tests "<tests>"             : Run only tests defined by <tests>
    --tests-category "<category>" : Run only tests defined by <category>

  Layout options:
    --no-colors                   : Don't use colors in output
    --quiet (-q)                  : No output, except warnings
    --reverse-colors              : Optimize color display for light backgrounds

  Misc options:
    --check-update                : Check for updates
    --view-manpage (--man)        : View man page
    --version (-V)                : Display version number and quit

  See man page and documentation for all available options.

Exiting..

フルチェック

-cオプションを与えて実行すればよい、。

# lynis -c

[ Lynis 1.3.0 ]

(略)

[+] Initializing program
------------------------------------
  - Detecting OS...                                           [ DONE ]
  - Clearing log file (/var/log/lynis.log)...                 [ DONE ]

  ---------------------------------------------------
  Program version:           1.3.0
  Operating system:          FreeBSD
  Operating system name:     FreeBSD
  Operating system version:  10.0-BETA1
  Kernel version:            GENERIC
  Hardware platform:         amd64
  Hostname:                  cal01
  Auditor:                   [Unknown]
  Profile:                   /usr/local/etc/lynis/default.prf
  Log file:                  /var/log/lynis.log
  Report file:               /var/log/lynis-report.dat
  Report version:            1.0
  ---------------------------------------------------

[ Press [ENTER] to continue, or [CTRL]+C to stop ]

まず基本的な情報が表示される。
チェック対象ホストの情報と、profile、ログとレポートの場所である。
profileとは、いわばチェック方法の設定のようなもの。指定なしだとdefault.prfが選択される。
lynis.logにはlynisの動作ログが、lynis-report.datにはチェック結果が書き込まれる。

ENTERキーで先に進む。

- Checking profile file (/usr/local/etc/lynis/default.prf)...
  - Program update status...                                  [ UNKNOWN ]

[+] System Tools
------------------------------------
  - Scanning available tools...
  - Checking system binaries...
    - Checking /bin...                                        [ FOUND ]
    - Checking /sbin...                                       [ FOUND ]
    - Checking /usr/bin...                                    [ FOUND ]
    - Checking /usr/sbin...                                   [ FOUND ]
    - Checking /usr/local/bin...                              [ FOUND ]
    - Checking /usr/local/sbin...                             [ FOUND ]
    - Checking /usr/local/libexec...                          [ FOUND ]
    - Checking /usr/libexec...                                [ FOUND ]
    - Checking /usr/sfw/bin...                                [ NOT FOUND ]
    - Checking /usr/sfw/sbin...                               [ NOT FOUND ]
    - Checking /usr/sfw/libexec...                            [ NOT FOUND ]
    - Checking /opt/sfw/bin...                                [ NOT FOUND ]
    - Checking /opt/sfw/sbin...                               [ NOT FOUND ]
    - Checking /opt/sfw/libexec...                            [ NOT FOUND ]
    - Checking /usr/xpg4/bin...                               [ NOT FOUND ]
    - Checking /usr/css/bin...                                [ NOT FOUND ]
    - Checking /usr/ucb...                                    [ NOT FOUND ]

[ Press [ENTER] to continue, or [CTRL]+C to stop ]

とまあこんな感じで、1ステップごとにキー入力を求められる。
ウンザリしてきたなら一度Ctrl+Cで止めて、-Qオプションで実行すればユーザ入力を待たずに一気にやってくれる。

# lynis -Q

[ Lynis 1.3.0 ]

(中略)

[+] Initializing program
------------------------------------
  - Detecting OS...                                           [ DONE ]
  - Clearing log file (/var/log/lynis.log)...                 [ DONE ]
(後略)

サマリのみかた

システム強度
実行結果の一番最後の部分は下記のようになる。

================================================================================
  Files:
  - Test and debug information      : /var/log/lynis.log
  - Report data                     : /var/log/lynis-report.dat
================================================================================
  Hardening index : [28]     [#####               ]
================================================================================

lynisの動作に関わるログが/var/log/lynis.logに、レポート結果が/var/log/lynis-report.datに書き込まれているよ、と。

Hardening indexとは、監査対象ホストのセキュリティ強度を示す。
上記の例だと28。28がどんなもんかは公式のドキュメントを見てもよく分からない。
別マシンでやったら33だった。

Warning/Suggestions

上記のさらに上にはWarningsとSuggestionsが表示される。

-[ Lynis 1.3.0 Results ]-

  Tests performed: 120
  Warnings:
  ----------------------------
   - [13:33:50] Warning: Multiple users with UID 0 found in passwd file [test:AUTH-9204] [impact:H]
(中略)

  Suggestions:
  ----------------------------
   - [13:33:50] Suggestion: Use vipw to delete the 'toor' user if not used. [test:AUTH-9204]
   - [13:33:50] Suggestion: Default umask in /etc/profile could be more strict like 027 [test:AUTH-9328]

(略)

Warningsから以下の一行を見てみよう。

[13:33:50] Warning: Multiple users with UID 0 found in passwd file [test:AUTH-9204] [impact:H]

「UID 0(要するにスーパーユーザ)権限を持つユーザが複数いる」との指摘である。
FreeBSDをお使いの方ならお分かりだろうが、これは“toor"ユーザのことである。

Lynisの監査項目にはすべてIDが与えられており、[test:AUTH-9204]のAUTH-9204がそれ。
[impact:H]で、impactがHigh、つまり危ないぞと教えてくれている。

Suggestionsでは、同じ[test:AUTH-9204]に対して、“toor"ユーザを使ってないならvipwで消してしまえと提案がある。

Suggestion: Use vipw to delete the 'toor' user if not used. [test:AUTH-9204]

なおSuggestionはWarningと必ずペア、というわけではない。
危険とまでは言わないけれども、やった方がよい対策も提案してくれる。
以下の例だと、/etc/profileのumaskをもっと厳しくしたら?との提案。

Suggestion: Default umask in /etc/profile could be more strict like 027 [test:AUTH-9328]

対策と再チェック

lynisの結果を受けて、何らかの対策をしたら再チェックをする。
充分なセキュリティを確保できたと判断できるまで、この繰り返しである。

しかしその都度、あんなに長い結果を見せられるのは苦痛だろう。
そういう場合には、-qオプションを与えればWarningだけを表示してくれる。

# lynis -q
  - Search administrator accounts...                          [ WARNING ]
  - Checking UIDs...                                          [ WARNING ]
  - Checking login shells...                                  [ WARNING ]
  - Checking console TTYs...                                  [ WARNING ]
  - Querying UFS mount points (fstab)...                      [ WARNING ]
  - Checking for a running NTP daemon or client...            [ WARNING ]

このあと、vipwでユーザtoorの行をコメントアウトし、もう一回実行すると、変化が現れる。
administrator accountsとUIDsのWarningが無くなっているのである。

# lynis -q
  - Checking login shells...                                  [ WARNING ]
  - Checking console TTYs...                                  [ WARNING ]
  - Querying UFS mount points (fstab)...                      [ WARNING ]
  - Checking for a running NTP daemon or client...            [ WARNING ]

また、-qにしてもレポートはしっかり記録されるので、grepを使いながら対策をしていけばいい。

まずレポートからWarningを探す。

# grep warn /var/log/lynis-report.dat
warning[]=SHLL-6202|M|Found unprotected console in /etc/ttys|
warning[]=FILE-6329|L|No single UFS mount point found|
suggestion[]=BANN-7122|Add legal banner to /etc/motd, to warn unauthorized users|
warning[]=TIME-3104|M|No running NTP daemon or available client found|

監査項目SHLL-6202に注目し、今度はこのIDでgrep。

# grep SHLL-6202 /var/log/lynis-report.dat
warning[]=SHLL-6202|M|Found unprotected console in /etc/ttys|
suggestion[]=SHLL-6202|Change the console line from 'secure' to 'insecure'.|

言われたとおりに/etc/ttysの設定を変えてまたlynis -qで確認。
というように繰り返す。
なお、以下のようにしてSHLL-6202だけ確認することも出来るが、出力が長いままなのであまり勧めない。

# lynis --tests "SHLL-6202" -Q

指摘されてもどうしようもない項目の対処について

例えば以下のWarning。

warning[]=FILE-6329|L|No single UFS mount point found|

UFSマウントポイントが一つもないとの仰せであるが、監査対象マシンのファイルシステムは、実際のところすべてZFSであってUFSは一つもない。
なので、これは筋違い。

こういう場合は、監査項目を無効にする。
具体的には、監視対象マシン向けに専用のプロファイルを作って対応する。

Profileの設定。

FreeBSDだと、profileは以下の場所にある。
/usr/local/etc/lynis
デフォルトの状態では、default.prfというprofileがインストールされるはず。

これをたとえばthisHost.prfとしてコピーし、修正する。

# cd /usr/local/etc/lynis
# cp default.prf thisHost.prf

ここに以下の一行を加えればよい。

config:test_skip_always:FILE-6329:

文字通り、監査項目FILE-6329をスキップする、という指定。
もし複数の監査項目をスキップしたい場合には、スペースで区切って書く。

あとはlynis実行時に、作成したprofileを-profileに続けて指定すればよい。

# lynis -q --profile copper.prf
- Checking login shells...                                  [ WARNING ]
- Checking for a running NTP daemon or client...            [ WARNING ]

Querying UFS mount points (fstab)という出力が消えている。

レポートの中身を見ても、以下のようにきれいさっぱり。

# grep FILE-6329 /var/log/lynis-report.dat
#
# grep warn /var/log/lynis-report.dat
suggestion[]=BANN-7122|Add legal banner to /etc/motd, to warn unauthorized users|
warning[]=TIME-3104|M|No running NTP daemon or available client found|

cronに設定したいとき。

以上の手順を繰り返し、満足な結果が得られたら、あとはcronにlynisを登録し、定期的にチェックしてもらおう。
cronからlynisを呼ぶときは-cronjobを付けるよろし。

--cronjob
Perform automatic scan with cron safe  options  (no  colors,  no
questions, no breaks).

以上