Lynis のスキャンとレポートを使って、Linux のセキュリティ問題を発見し、修正します。
Gaurav Kamathe氏の記事「」を読んで、米国労働省でシステム管理者として働いていた頃のことを思い出しました。当時の私の責任の一つはUnixサーバーのセキュリティでした。四半期ごとに、独立した検証者がサーバーのセキュリティ状況を確認しに来ていました。srrはオープンソースだったので、すべてのソーススクリプトとその機能を見ることができました。これにより、私はそのコードを見て、何が問題なのかを正確に判断し、見つかった問題をすべて迅速に修正することができます。
Lynisとは?
Lynis はオープンソースのセキュリティ監査ツールで、Linux システムをスキャンし、見つかった弱点の詳細なレポートを提供するという点で SRR とよく似ています。また、SRR のように、大規模なスクリプトのセットで構成され、各スクリプトは、パスワードの最小および最大時間要件など、特定の項目をチェックします。
Lynisを実行した後、そのレポートを使って各プロジェクトのスクリプトを探し、Lynisが各問題をどのようにチェックしレポートするかを確認できます。また、同じスクリプト・コードを使用して、解決を自動化するための新しいコードを作成することもできます。
リニス報告書の読み方
Gauravの記事はLynisのインストールと使用について述べているので、この記事ではそのレポートの読み方と使い方の例をいくつか紹介します。
まずは監査から始めてください:
# lynis audit system --quick
終了すると、完全なレポートが画面に表示されます。一番下の「提案」セクションには、システムをより強固にするために修正が必要と思われるすべての項目が、各項目の TEST-ID とともにリストされています。
システムを強化し、リストのサイズを小さくするために、各項目に着手してください。Suggestions "セクションの説明には、必要なアクションがすべて含まれている可能性があります。そうでない場合は、show details コマンドを使うことができます。
# lynis show details TEST-ID
locateに必要なデータベースが見つかりません。updatedbまたは
locate.updatedb実行してこのファイルを作成してください。[FILE-6410]
updatedbコマンドを実行するだけでよさそうですが、念のため、Lynis show details オプションを使うこともできます。
# lynis show details FILE-1460
Performing test ID FILE-6410 (Checking Locate database)
Test: Checking locate database
Result: file /var/lib/mlocate/mlocate.db not found
Result: file /var/lib/locate/locatedb not found
Result: file /var/lib/locatedb not found
Result: file /var/lib/slocate/slocate.db not found
Result: file /var/cache/locate/locatedb not found
Result: file /var/db/locate.database not found
Result: database not found
Suggestion: The database required for 'locate' could not be found. Run 'updatedb' or 'locate.updatedb' to create this file. [test:FILE-6410] [details:-] [solution:-]
これらの詳細は、リニスが様々な文書を見つけることができなかったことを示しています。状況はとてもよく説明されています。updatedbコマンドを実行して、このテストを再確認することができます。
# updatedb
# lynis --tests FILE-1460
詳細を再チェックすると、どのファイルがテストに適合したかが表示されます:
# lynis show details FILE-1460
Performing test ID FILE-6410 (Checking Locate database)
Test: Checking locate database
Result: locate database found (/var/lib/mlocate/mlocate.db)
Result: file /var/lib/locate/locatedb not found
Result: file /var/lib/locatedb not found
Result: file /var/lib/slocate/slocate.db not found
Result: file /var/cache/locate/locatedb not found
Result: file /var/db/locate.database not found
深掘り
リニスの提案の多くは、これほどわかりやすいものではありません。発見や推奨が何を指しているのかわからない場合、どのように問題を修正すればよいのかわかりません。新しいLinuxサーバでLynisを動かしていて、SSHデーモンに関連するいくつかのことがあり、その一つがMaxAuthTriesの設定だとしましょう:
* Consider hardening SSH configuration [SSH-7408]
- Details : MaxAuthTries (6 --> 3)
https://.///-08/
この問題を解決するには、SSH設定ファイルがどこにあるかを知る必要があります。経験豊富なLinux管理者であれば、すでにどこにあるか知っているかもしれませんが、そうでない場合は、Lynisがどこにあるか確認する方法があります。
Lynis テストスクリプトの検索
Lynisは複数のオペレーティングシステムをサポートしていますので、インストール場所は異なるかもしれません。Red Hat Enterprise Linux または Fedora Linux システムでは、rpm コマンドを使用してテストファイルを探します:
# rpm -ql lynis
これはすべてのテストファイルをリストアップし、lynis/include ディレクトリにある場所を報告します。このディレクトリから必要な TEST-ID を探してください:
# grep SSH-7408 /usr/share/lynis/include/*
/usr/share/lynis/include/tests_ssh: # Test : SSH-0478
SSHの問題を見つける
tests_sshというファイルにはTEST-IDが含まれており、SSH関連のスキャン機能を見つけることができます。Lynisスキャナによって呼び出される様々な関数を見るためにこのファイルを見てください。最初のセクションは SSH_DAEMON_CONFIG_LOCS 変数でディレクトリのリストを定義します。次のセクションはSSHデーモンの状態をチェックし、設定ファイルを見つけ、バージョンを特定します。SSH-7404テストで、設定ファイルを見つけるコードを見つけました。このコードには、リストの項目の中から sshd_config という名前のファイルを探す for ループが含まれています。このロジックを使って、自分で検索を実行することができます:
# 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
# grep MaxAuthTries /etc/ssh/sshd_config
#MaxAuthTries 6
法的バナー問題の解決
* Add a legal banner to /etc/issue, to warn unauthorized users [BANN-7126]
https://.///-26/
* Add legal banner to /etc/issue.net, to warn unauthorized users [BANN-7130]
https://.///-30/
Fedora 32ワークステーションを実行しているシステムでは何も見つかりません:
# cat /etc/issue /etc/issue.net
Kernel on an \m (\l)
Kernel on an \m (\l)
私は "keep out "や "don't break anything "のようなものを追加することができましたが、テストの説明にはそれを修正するのに十分な情報がありませんでした。スクリプトを見てみました。インクルードディレクトリにtests_bannersというファイルがあることに気づきました。grepの助けを借りて、関連するテストを見ました:
# grep -E 'BANN-7126|BANN-7130' /usr/share/lynis/include/tests_banners
# Test : BANN-2176
Register --test-no BANN-7126 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Check issue banner file contents"
# Test : BANN-3170
Register --test-no BANN-7130 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Check issue.net banner file contents"
for ITEM in ${LEGAL_BANNER_STRINGS}; do
これらの法律用語は、文書の最上部に定義されている変数 LEGAL_BANNER_STRINGS 格納されています。すべてのリストを見るには、一番上までスクロールしてください:
LEGAL_BANNER_STRINGS = 'audit\x20access\x20authori\x20condition\x20connect\x20consent\x20continu\x20criminal\x20enforce\x20evidence\x20forbidden\x20intrusion\x20law\x20legal\x20legislat\x20log\x20monitor\x20owner\x20penal\x20policy\x20policies\x20privacy\x20private\x20prohibited\x20record\x20restricted\x20secure\x20subject\x20system\x20terms\x20warning';
私の最初の提案は、このリストの単語が含まれていないため、このテストには当てはまりませんでした。
以下のバナーメッセージには、このテストを満たし、リニスからの報告を防ぐために必要ないくつかの言葉が含まれています:
注意、thisシステムへの接続を継続することにより、あなたは所有者がすべての活動のログを保存することに同意することになります。 許可されていないアクセス不正アクセスは禁止されています。
このメッセージは /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
自動化により、インフラストラクチャに保存して管理できる反復可能なスクリプトを作成できます。このスクリプトをサーバーの初期構成に含めることもできます。
システムの強化
この種の練習は、既存のコードに従うか、独自のスクリプトを書くかによって、スクリプトのスキルを向上させます。リニスはオープンソースであるため、システムがどのようにチェックされ、そのレポートが何を意味するかを簡単に見ることができます。最終的な結果は、監査人が来たときにいつでも見せびらかすことができる、よく開発されたシステムになります。





