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).
以上