Linuxマシンが実際にどれほど安全かについて考えたことはありますか?多数のLinuxディストリビューションがあり、それぞれに独自のデフォルト設定があり、バージョン番号の異なる数十のソフトウェアパッケージを実行し、バックグラウンドで多数のサービスを実行していますが、これらはほとんどわかりません。
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
Linuxマシンで実行されているソフトウェア、ネットワーク、およびサービスの全体的なセキュリティステータスであるセキュリティ体制を見つけるには、いくつかのコマンドを実行して関連情報を取得できますが、解析する必要のあるデータの量は膨大です。 。
マシンのセキュリティ体制に関するレポートを生成するツールを実行できれば、はるかに優れています。そして幸いなことに、Lynisが1つあります。これは、LinuxおよびUnixベースのシステムの強化に役立つ非常に人気のあるオープンソースのセキュリティ監査ツールです。プロジェクトによると:
「詳細なセキュリティスキャンを実行し、システム自体で実行します。主な目標は、セキュリティ防御をテストし、システムをさらに強化するためのヒントを提供することです。また、一般的なシステム情報、脆弱なソフトウェアパッケージ、および考えられる構成の問題をスキャンします。 Lynisは、システム管理者や監査人がシステムのセキュリティ防御を評価するために一般的に使用しています。」
Lynisをインストール
Lynisは、Linuxソフトウェアリポジトリで利用できる場合があります。その場合は、次を使用してインストールできます:
dnf install lynis
または
apt install lynis
ただし、リポジトリ内のバージョンが最新でない場合は、GitHubからインストールすることをお勧めします。 (私はRed Hat Linuxシステムを使用していますが、どのLinuxディストリビューションでも実行できます。)すべてのツールと同様に、最初に仮想マシンで試してみるのが理にかなっています。 GitHubからインストールするには:
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.8 (Maipo)
$
$ uname -r
3.10.0-1127.el7.x86_64
$
$ git clone https://github.com/CISOfy/lynis.git
Cloning into 'lynis'...
remote: Enumerating objects: 30, done.
remote: Counting objects: 100% (30/30), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 12566 (delta 15), reused 8 (delta 0), pack-reused 12536
Receiving objects: 100% (12566/12566), 6.36 MiB | 911.00 KiB/s, done.
Resolving deltas: 100% (9264/9264), done.
$
リポジトリのクローンを作成したら、リポジトリに移動して、何が利用できるかを確認します。メインツールはlynisというファイルにあります 。これは実際にはシェルスクリプトなので、開いて実行内容を読み取ることができます。実際、Lynisは主にシェルスクリプトを使用して実装されています:
$ cd lynis/
$ ls
CHANGELOG.md CONTRIBUTING.md db developer.prf FAQ include LICENSE lynis.8 README SECURITY.md
CODE_OF_CONDUCT.md CONTRIBUTORS.md default.prf extras HAPPY_USERS.md INSTALL lynis plugins README.md
$
$ file lynis
lynis: POSIX shell script, ASCII text executable, with very long lines
$
Lynisを実行
-h を指定して、Lynisを試してみてください ヘルプセクションを表示するオプション:
$ ./lynis -h
短い情報画面に続いて、Lynisがサポートするすべてのコマンドが表示されます。
次に、いくつかのテストコマンドを試して、物事の感触をつかみ、快適になります。使用しているLynisのバージョンを確認するには、次のコマンドを実行します。
$ ./lynis show version
3.0.0
$
Lynisで使用可能なすべてのコマンドを表示するには:
$ ./lynis show commands
Commands:
lynis audit
lynis configure
lynis generate
lynis show
lynis update
lynis upload-only
$
Linuxシステムを監査する
システムのセキュリティ体制を監査するには、次のコマンドを実行します。
$ ./lynis audit system
これはすばやく実行され、詳細なレポートが返されます。出力は最初は威圧的に見えるかもしれませんが、以下で説明します。コマンドの出力もログファイルに保存されるため、後でいつでも戻って、関心のある可能性のあるものをすべて確認できます。
Lynisはここにログを保存します:
Files:
- Test and debug information : /var/log/lynis.log
- Report data : /var/log/lynis-report.dat
ログファイルが作成されたかどうか、実際に作成されたかどうかを確認できます。
$ ls -l /var/log/lynis.log
-rw-r-----. 1 root root 341489 Apr 30 05:52 /var/log/lynis.log
$
$ ls -l /var/log/lynis-report.dat
-rw-r-----. 1 root root 638 Apr 30 05:55 /var/log/lynis-report.dat
$
Lynisはかなり包括的なレポートを提供しているので、重要なセクションのいくつかを取り上げます。 Lynisが初期化の一部として最初に行うことは、マシンで実行されているオペレーティングシステムに関する完全な情報を見つけることです。続いて、インストールされているシステムツールとプラグインを確認します。
[+] Initializing program
------------------------------------
- Detecting OS... [ DONE ]
- Checking profiles... [ DONE ]
---------------------------------------------------
Program version: 3.0.0
Operating system: Linux
Operating system name: Red Hat Enterprise Linux Server 7.8 (Maipo)
Operating system version: 7.8
Kernel version: 3.10.0
Hardware platform: x86_64
Hostname: example
---------------------------------------------------
<<snip>>
[+] System Tools
------------------------------------
- Scanning available tools...
- Checking system binaries...
[+] Plugins (phase 1)
------------------------------------
Note: plugins have more extensive tests and may take several minutes to complete
- Plugin: pam
[..]
- Plugin: systemd
[................]
次に、レポートはさまざまなセクションに分割され、各セクションは [+]で始まります。 シンボル。いくつかのセクションを以下に示します。 (うわー、監査する領域は非常に多く、Lynisはその仕事に適したツールです!)
[+] Boot and services
[+] Kernel
[+] Memory and Processes
[+] Users, Groups and Authentication
[+] Shells
[+] File systems
[+] USB Devices
[+] Storage
[+] NFS
[+] Name services
[+] Ports and packages
[+] Networking
[+] Printers and Spools
[+] Software: e-mail and messaging
[+] Software: firewalls
[+] Software: webserver
[+] SSH Support
[+] SNMP Support
[+] Databases
[+] LDAP Services
[+] PHP
[+] Squid Support
[+] Logging and files
[+] Insecure services
[+] Banners and identification
[+] Scheduled tasks
[+] Accounting
[+] Time and Synchronization
[+] Cryptography
[+] Virtualization
[+] Containers
[+] Security frameworks
[+] Software: file integrity
[+] Software: System tooling
[+] Software: Malware
[+] File Permissions
[+] Home directories
[+] Kernel Hardening
[+] Hardening
[+] Custom tests
Lynisは、色分けを使用してレポートを解析しやすくしています。
- 緑:すべて良い
- 黄色:スキップされたか、見つからなかったか、提案がある可能性があります
- 赤:これを詳しく見る必要があるかもしれません
私の場合、赤いマークのほとんどはカーネル硬化セクションで見つかりました。カーネルには、カーネルの機能を定義するさまざまな調整可能な設定があり、これらの調整可能なものの一部にはセキュリティコンテキストがある場合があります。ディストロはさまざまな理由でデフォルトでこれらを設定していない可能性がありますが、それぞれを調べて、セキュリティ体制に基づいて値を変更する必要があるかどうかを確認する必要があります:
[+] Kernel Hardening
------------------------------------
- Comparing sysctl key pairs with scan profile
- fs.protected_hardlinks (exp: 1) [ OK ]
- fs.protected_symlinks (exp: 1) [ OK ]
- fs.suid_dumpable (exp: 0) [ OK ]
- kernel.core_uses_pid (exp: 1) [ OK ]
- kernel.ctrl-alt-del (exp: 0) [ OK ]
- kernel.dmesg_restrict (exp: 1) [ DIFFERENT ]
- kernel.kptr_restrict (exp: 2) [ DIFFERENT ]
- kernel.randomize_va_space (exp: 2) [ OK ]
- kernel.sysrq (exp: 0) [ DIFFERENT ]
- kernel.yama.ptrace_scope (exp: 1 2 3) [ DIFFERENT ]
- net.ipv4.conf.all.accept_redirects (exp: 0) [ DIFFERENT ]
- net.ipv4.conf.all.accept_source_route (exp: 0) [ OK ]
- net.ipv4.conf.all.bootp_relay (exp: 0) [ OK ]
- net.ipv4.conf.all.forwarding (exp: 0) [ OK ]
- net.ipv4.conf.all.log_martians (exp: 1) [ DIFFERENT ]
- net.ipv4.conf.all.mc_forwarding (exp: 0) [ OK ]
- net.ipv4.conf.all.proxy_arp (exp: 0) [ OK ]
- net.ipv4.conf.all.rp_filter (exp: 1) [ OK ]
- net.ipv4.conf.all.send_redirects (exp: 0) [ DIFFERENT ]
- net.ipv4.conf.default.accept_redirects (exp: 0) [ DIFFERENT ]
- net.ipv4.conf.default.accept_source_route (exp: 0) [ OK ]
- net.ipv4.conf.default.log_martians (exp: 1) [ DIFFERENT ]
- net.ipv4.icmp_echo_ignore_broadcasts (exp: 1) [ OK ]
- net.ipv4.icmp_ignore_bogus_error_responses (exp: 1) [ OK ]
- net.ipv4.tcp_syncookies (exp: 1) [ OK ]
- net.ipv4.tcp_timestamps (exp: 0 1) [ OK ]
- net.ipv6.conf.all.accept_redirects (exp: 0) [ DIFFERENT ]
- net.ipv6.conf.all.accept_source_route (exp: 0) [ OK ]
- net.ipv6.conf.default.accept_redirects (exp: 0) [ DIFFERENT ]
- net.ipv6.conf.default.accept_source_route (exp: 0) [ OK ]
SSHは重要な領域であり、保護する必要があるため、例を見てください。ここには赤いものは何もありませんが、Lynisは私のセットアップでSSHサービスを強化することについて多くの提案をしています:
[+] SSH Support
------------------------------------
- Checking running SSH daemon [ FOUND ]
- Searching SSH configuration [ FOUND ]
- OpenSSH option: AllowTcpForwarding [ SUGGESTION ]
- OpenSSH option: ClientAliveCountMax [ SUGGESTION ]
- OpenSSH option: ClientAliveInterval [ OK ]
- OpenSSH option: Compression [ SUGGESTION ]
- OpenSSH option: FingerprintHash [ OK ]
- OpenSSH option: GatewayPorts [ OK ]
- OpenSSH option: IgnoreRhosts [ OK ]
- OpenSSH option: LoginGraceTime [ OK ]
- OpenSSH option: LogLevel [ SUGGESTION ]
- OpenSSH option: MaxAuthTries [ SUGGESTION ]
- OpenSSH option: MaxSessions [ SUGGESTION ]
- OpenSSH option: PermitRootLogin [ SUGGESTION ]
- OpenSSH option: PermitUserEnvironment [ OK ]
- OpenSSH option: PermitTunnel [ OK ]
- OpenSSH option: Port [ SUGGESTION ]
- OpenSSH option: PrintLastLog [ OK ]
- OpenSSH option: StrictModes [ OK ]
- OpenSSH option: TCPKeepAlive [ SUGGESTION ]
- OpenSSH option: UseDNS [ SUGGESTION ]
- OpenSSH option: X11Forwarding [ SUGGESTION ]
- OpenSSH option: AllowAgentForwarding [ SUGGESTION ]
- OpenSSH option: UsePrivilegeSeparation [ OK ]
- OpenSSH option: AllowUsers [ NOT FOUND ]
- OpenSSH option: AllowGroups [ NOT FOUND ]
システムで実行されている仮想マシンまたはコンテナがないため、空の結果が表示されます:
[+] Virtualization
------------------------------------
[+] Containers
------------------------------------
Lynisは、セキュリティの観点から重要ないくつかのファイルのファイル権限をチェックします:
[+] File Permissions
------------------------------------
- Starting file permissions check
File: /boot/grub2/grub.cfg [ SUGGESTION ]
File: /etc/cron.deny [ OK ]
File: /etc/crontab [ SUGGESTION ]
File: /etc/group [ OK ]
File: /etc/group- [ OK ]
File: /etc/hosts.allow [ OK ]
File: /etc/hosts.deny [ OK ]
File: /etc/issue [ OK ]
File: /etc/issue.net [ OK ]
File: /etc/motd [ OK ]
File: /etc/passwd [ OK ]
File: /etc/passwd- [ OK ]
File: /etc/ssh/sshd_config [ OK ]
Directory: /root/.ssh [ SUGGESTION ]
Directory: /etc/cron.d [ SUGGESTION ]
Directory: /etc/cron.daily [ SUGGESTION ]
Directory: /etc/cron.hourly [ SUGGESTION ]
Directory: /etc/cron.weekly [ SUGGESTION ]
Directory: /etc/cron.monthly [ SUGGESTION ]
レポートの下部に向かって、Lynisはレポートの調査結果に基づいて提案を提供します。各提案の後にはTEST-IDが続きます (次のパートのためにこれを手元に置いておきます):
Suggestions (47):
----------------------------
* If not required, consider explicit disabling of core dump in /etc/security/limits.conf file [KRNL-5820]
https://cisofy.com/lynis/controls/KRNL-5820/
* Check PAM configuration, add rounds if applicable and expire passwords to encrypt with new values [AUTH-9229]
https://cisofy.com/lynis/controls/AUTH-9229/
Lynisには、各提案に関する詳細情報を検索するオプションがあり、詳細を表示を使用してアクセスできます。 コマンドの後にテストID番号を続ける:
./lynis show details TEST-ID
これにより、そのテストに関する追加情報が表示されます。たとえば、SSH-7408の詳細を確認しました:
$ ./lynis show details SSH-7408
2020-04-30 05:52:23 Performing test ID SSH-7408 (Check SSH specific defined options)
2020-04-30 05:52:23 Test: Checking specific defined options in /tmp/lynis.k8JwazmKc6
2020-04-30 05:52:23 Result: added additional options for OpenSSH < 7.5
2020-04-30 05:52:23 Test: Checking AllowTcpForwarding in /tmp/lynis.k8JwazmKc6
2020-04-30 05:52:23 Result: Option AllowTcpForwarding found
2020-04-30 05:52:23 Result: Option AllowTcpForwarding value is YES
2020-04-30 05:52:23 Result: OpenSSH option AllowTcpForwarding is in a weak configuration state and should be fixed
2020-04-30 05:52:23 Suggestion: Consider hardening SSH configuration [test:SSH-7408] [details:AllowTcpForwarding (set YES to NO)] [solution:-]
Linuxマシンのセキュリティについて詳しく知りたい場合は、Lynisをチェックしてください。また、Lynisがどのように機能するかを知りたい場合は、シェルスクリプトを調べて、このすべての情報がどのように収集されるかを確認してください。