GauravKamatheの記事を読んだときLynisでLinuxセキュリティをスキャンする 、米国労働省のシステム管理者としての時間を思い出しました。私の義務の1つは、Unixサーバーを強化しておくことでした。四半期ごとに、独立した検証者がサーバーのセキュリティステータスを確認するためにやって来ました。検証者が到着する予定の日に毎回、セキュリティ準備レビュー(SRR)を実行しました。これは、セキュリティの結果を特定して報告するために大量のスクリプトを使用するスキャンツールです。 SRRはオープンソースだったので、すべてのソーススクリプトとその機能を表示できました。これにより、コードを調べて、具体的に何が間違っているのかを判断し、見つかった各問題をすばやく修正することができました。
Lynisとは何ですか?
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
Lynisはオープンソースのセキュリティ監査ツールであり、Linuxシステムをスキャンし、見つかった弱点に関する詳細なレポートを提供することで、SRRのように機能します。また、SRRと同様に、スクリプトの大規模なセットで構成されており、各スクリプトは特定の項目(たとえば、パスワードの最小および最大の有効期間の要件)をチェックします。
Lynisを実行した後、そのレポートを使用して各アイテムのスクリプトを見つけ、Lynisが各問題をチェックして報告した方法を正確に知ることができます。同じスクリプトコードを使用して、解決を自動化するための新しいコードを作成することもできます。
Lynisレポートの読み方
Gauravの記事では、Lynisのインストールと使用法について説明しているため、この記事では、レポートを読んで使用する方法の例をいくつか示します。
開始するには、監査を実行します:
# lynis audit system --quick
完了すると、完全なレポートが画面に表示されます。下に向かって、提案 セクションには、システムをより適切に強化するためにトリアージする必要がある可能性のあるすべての項目と、それぞれのTEST-IDがリストされています。
システムを強化し、リストのサイズを小さくするには、各アイテムの追跡を開始します。 提案の説明 セクションは、実行するアクションを知るために必要なすべてのものである可能性があります。そうでない場合は、show details
を使用できます コマンド:
# lynis show details TEST-ID
たとえば、私のシステムに関する提案の1つは次のとおりです。
locate
に必要なデータベース 見つかりませんでした。updatedb
を実行します またはlocate.updatedb
このファイルを作成します。 [ファイル-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)デーモンに関連するいくつかの項目があり、そのうちの1つが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 EnterpriseLinuxまたはFedoraLinuxシステムでは、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デーモン構成ファイルの場所を特定する」と説明されている、SSH-7404のテストのセクションで構成ファイルを検索するコードを見つけました。このコードには、 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)
「Keepout」や「Dontobreakthing」などを追加することもできますが、テストの説明では問題を解決するのに十分な情報が得られないため、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"
私の最初の提案(「立ち入り禁止」と「何も壊さない」)は、このリストの単語が含まれていないため、テストを満たしていませんでした。
このバナーメッセージには必要な単語がいくつか含まれているため、このテストを満たし、Lynisが報告するのを防ぎます。
注意、このシステムに接続し続けることにより、所有者がすべてのアクティビティのログを保存することに同意したことになります。不正アクセスは禁止されています。
このメッセージは、/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はオープンソースであるため、システムがどのようにチェックされ、そのレポートが何を意味するのかを内部で簡単に確認できます。最終的には、監査人が来たときにいつでも見せびらかすことができる、十分に強化されたシステムになります。