GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntuホストを保護するための究極のガイド

Ubuntuは、利用可能な高度にセキュリティ保護されたオペレーティングシステムと呼ばれていますが、他のすべてのオペレーティングシステムと同様に、デフォルトのインストールに欠陥があります。これらの弱点を取り除くために、ITセキュリティスペシャリストは、システムのバックドア/弱点に対抗し、Ubuntuの一般的なエクスプロイトのいくつかからユーザーを保護するためのガイドラインを発行しました。このガイドでは、すべてのシステム管理者が自分のサーバーに適用したいいくつかの重要なセキュリティ設定について説明します。

1。起動設定を強化する

ルート以外のユーザーが/boot/grub/grub.cfgであるブートローダー構成ファイルを変更できないようにするには、このファイルの所有者とグループをルートに設定します。次のコマンドを実行して、所有権をrootに変更します。

# chown root:root /boot/grub/grub.cfg

root以外のユーザーがブートパラメータを読み取れないようにするには、ブートローダーファイルのアクセス許可を読み取りと書き込みのみに設定します。このベンチマークを達成するには、次のコマンドを実行します。

# chmod og-rwx /boot/grub/grub.cfg

また、ブートローダーのパスワードを設定して、システムを再起動しようとする権限のないユーザーが次の手順に進むためにパスワードを提供する必要があるようにします。これにより、許可されていないユーザーがSELinuxの無効化やブートパーティションの変更などのブートパラメータを変更できないようになります。次のコマンドを実行して、ブートローダーのパスワードを作成します。

# grub-mkpasswd-pbkdf2

次に、/ etc / grub.d / 00_headerという名前で新しいファイルを作成し、次の行を追加します。

set superusers =""
password_pbkdf2

ファイル/etc/grub.d/10_linuxのCLASSパラメータの--unrestrictedオプションを削除します。これにより、次のステップ、つまりブートパラメータの編集に進むための必須のパスワード要件が保証されます。

グラブを更新する

# update-grub

2。安全なファイルシステム

/ homeパーティションのユーザーデータ、/ swapパーティションのスワップファイル、/ tmpパーティションの一時ファイル、/ etcパーティションのシステム構成ファイル、/ devパーティションのデバイスファイルなど、さまざまなカテゴリに基づいてパーティションを作成します。これにより、リソースの枯渇を防ぐことができます。データの使用目的に基づいた柔軟な取り付けオプションもあります。

2.1/tmpのパーティションを作成する

/ tmpに個別のパーティションを作成する最初の理由は、/ tmpディレクトリが誰でも書き込み可能であるため、リソースが使い果たされる可能性があることです。また、/ temp用に別のパーティションを作成すると、noexecオプションを設定して、許可されていないユーザーがコードを実行したり、システムsetuidプログラムにハードリンクしたりするのに役に立たないことを示すことができます。

2.2/tmpのnodevオプションを設定

/ tmpパーティションのnodevオプションを設定して、ユーザーがブロック/文字デバイスファイルを作成できないようにします。 / etc / fstabファイルを編集し、次の行を追加します。

# mount -o remount,nodev /tmp

2.3/tmpのnosuidオプションを設定

/ tmp file-systemは一時ファイルの保存に使用されるため、ユーザーが/tmpファイルシステムにsetuseridファイルを作成できないようにするには、/ etc/fstabに次の行を追加します。

# mount -o remount,nosuid /tmp

2.4/tmpにnoexecオプションを設定

ユーザーが実行可能バイナリを実行できないようにするには、/tmpパーティションにnoexecオプションを設定します。 / etc / fstabに次の行を追加して、実行可能バイナリの実行をブロックします。

# mount -o remount,noexec /tmp

2.5/var用に個別のパーティションを作成する

システムデーモンおよびその他のサービスは、動的データを一時的に/ varに格納し、一部のディレクトリは誰でも書き込み可能である可能性があります。したがって、/varでリソースが枯渇する可能性があります。 / varでのリソースの枯渇を防ぐには、新規インストールで/ var用に別のパーティションを作成し、以前にインストールしたシステム用に、LVMを使用して新しいパーティションを作成します。

2.6 / var/tmpを/tmpにバインド

/ var /tmpを/tmpにバインドすると、/ tmpが保護されるのと同じ方法で、/ var/tmpを保護できます。これにより、/varが一時ファイルで/var/tmpのメモリを使い果たすのを防ぐこともできます。次のコマンドを実行して、/tmpと/var / tmp

をバインドします。
# sudo mount --bind /tmp /var/tmp

永続的にするには、/ etc / fstab

に次の行を追加します。
# /tmp /var/tmp none bind 0 0

2.7 / var/log用に個別のパーティションを作成する

機密性の高い監査データを保護し、リソースの枯渇から保護するには、新規インストールで/ var / log用に別のパーティションを作成し、以前にインストールしたシステム用に、LVMを使用して新しいパーティションを作成します。

2.8 / var / log/audit用に個別のパーティションを作成する

監査デーモンは、ログデータを/ var / log/auditディレクトリに保存します。監査ログが大きくなる可能性があるため、リソースの枯渇を防ぎ、機密性の高い監査データを保護するには、新規インストールで/ var / log / audit用に別のパーティションを作成し、以前にインストールしたシステム用に、LVMを使用して新しいパーティションを作成します。

2.9/home用に個別のパーティションを作成する

ユーザーデータは/homeディレクトリに保存されます。 /homeに保存できるファイルの種類を制限することができます。これを実現するには、新規インストールで/ home用に、以前にインストールされたシステム用に個別のパーティションを作成し、LVMを使用して新しいパーティションを作成します。また、/home用の個別のパーティションがリソースの枯渇から保護します。

2.10/homeのnodevを設定

/ homeディレクトリが文字の定義と特殊デバイスのブロックに使用されないようにするには、nodevオプションを設定して、ユーザーがこれらのタイプのファイルを作成できないようにします。 / etc / fstabファイルを編集し、次の行を追加します。

# mount -o remount, nodev /home

2.11リムーバブルメディアのnodevを設定

ユーザーは、キャラクターを使用してセキュリティ制御を欺き、リムーバブルメディアから特別なデバイスをブロックして、/ dev/kmemなどの機密性の高いデバイスファイルにアクセスできます。 / etc / fstabファイルを編集し、次の行を追加します。

# mount -o remount, nodev { removable device like floppy or cdrom or USB stick etc. }

2.12noexecをリムーバブルメディアに設定

リムーバブルメディアからプログラムが実行されないようにして、悪意のあるプログラムがシステムに配置されないようにするには、/ etc / fstab

に次の行を追加します。
# mount -o remount,noexec { removable device like floppy or cdrom or USB stick etc. }

2.13リムーバブルメディアにnosuidを追加する

リムーバブルメディアがsetuid/setgidとして使用されないようにするため。これにより、root以外のユーザーが特権プログラムをシステムに配置できるようになります。 / etc / fstabを編集し、それに次の行を追加します

# mount -o remount,nosuid { removable device like floppy or cdrom or USB stick etc. }

2.14 / run/shmパーティションのnodevオプションを追加

ユーザーが/run/ shmパーティションに特別なデバイスファイルを作成できないようにするには、/ etc/fstabに次の行を追加します。これにより、ユーザーは/ run / shm

にデバイスを作成できなくなります。
# mount -o remount,nodev /run/shm

2.15 / run/shmパーティションにnosuidオプションを追加

/ run/shmがsetuid/setgidとして使用されないようにするために、root以外のユーザーがシステムに特権プログラムを配置できるようにします。ユーザーは自分のuidとgidを使用してプログラムを実行できます。 / etc / fstabを編集し、それに次の行を追加します

# mount -o remount,nosuid /run/shm

2.16 / run/shmパーティションにnoexecを追加

/ run / shmパーティションがプログラムの実行に使用されないようにするには、/ etc / fstab

に次の行を追加します。
# mount -o remount, noexec /run/shm

2.17スティッキービットを誰でも書き込み可能なディレクトリに設定

ユーザーが所有していないこのディレクトリ内のファイルを削除または名前変更できないようにするには、スティッキービットをオンに設定します。

# chmod +t /tmp
or
# chmod 1777 /tmp

3。レガシーシステムを破棄する

これらのシステム/ユーティリティには脆弱性があるため、次のレガシーサービスおよびユーティリティをインストール/使用しないでください。これらは、NIS、RSHサーバー/クライアント、トークサーバー/クライアント、テレネット、TFTP、XINETD、Chargen、Daytime、echo、discard、time

4。特別な目的のサービスを破棄する

以下のサービスには脆弱性がありますので、インストール/使用しないでください。これらは-
Xウィンドウシステム、Avahiサーバープリントサーバー、DHCPサーバー、LDAP、NFSおよびRPC、DNSサーバー、FTP、Samba、SNMP、Rsync、BIOSDEVNAME。上記のサービスのいくつかは、DNSサーバーのような日常の運用に実際に必要です。そのような状況では、これらのサーバーを機密データを含まない別のホストにインストールすることをお勧めします。

5。ネットワーク構成とファイアウォール

5.1IP転送を無効にする

サーバーがパケットの転送に使用されないように、つまりルーターとして機能するようにするには、/ etc / sysctl.conf

でnet.ipv4.ip_forwardパラメーターを0に設定します。
net.ipv4.ip_forward = 0

sysctl構成をリロードします

# sudo sysctl -p

5.2sendpacketリダイレクトを無効にする

権限のないユーザーは、侵害されたホストを使用して、ICMPリダイレクトパケットを他のルーティングデバイスに送信し、ルーティングを破壊する可能性があります。パケットのリダイレクトを無効にするには、/ etc / sysctl.conf

でnet.ipv4.conf.all.send_redirectsおよびnet.ipv4.conf.default.send_redirectsパラメーターを0に設定します。
# net.ipv4.conf.all.send_redirects = 0

#net.ipv4.conf.default.send_redirects =0

sysctl構成をリロードします

# sudo sysctl -p

5.3ソースルートパケットの受け入れを無効にする

ソースルーティングされたパケットを使用すると、ルートを指定できるため、ユーザーはシステムのプライベートアドレスにアクセスできます。
/etc/sysctl.confでnet.ipv4.conf.all.accept_source_routeおよびnet.ipv4.conf.default.accept_source_routeパラメーターを0に設定します

# net.ipv4.conf.all.accept_source_route=0
# net.ipv4.conf.default.accept_source_route=0

sysctl構成をリロードします

# sudo sysctl -p

5.4ICMPリダイレクトの受け入れを無効にする

ユーザーはルーティングテーブルを変更して、偽のICMPリダイレクトを使用して誤ったネットワークにパケットを送信し、パケットをキャプチャできるようにすることができます。 ICMPリダイレクトアクセプタンスを無効にするには、/ etc / sysctl.conf

でnet.ipv4.conf.all.accept_redirectsおよびnet.ipv4.conf.default.accept_redirectsパラメーターを0に設定します。
# net.ipv4.conf.all.accept_redirects = 0
# net.ipv4.conf.default.accept_redirects parameters = 0

sysctl構成をリロードします

# sudo sysctl -p

5.5安全なICMPリダイレクトの受け入れを無効にする

セキュアICMPリダイレクトとICMPリダイレクトはほぼ同じですが、違いは、セキュアICMPリダイレクトパケットの送信元がゲートウェイであるということだけです。ソースゲートウェイが危険にさらされている場合、ユーザーはセキュアICMPリダイレクトを使用してルーティングテーブルを更新できます。
/etc/sysctl.confでnet.ipv4.conf.all.secure_redirectsおよびnet.ipv4.conf.default.secure_redirectsパラメーターを0に設定して、セキュアICMPリダイレクト受け入れを無効にします。

net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0

sysctl構成をリロードします

# sudo sysctl -p

5.6疑わしいパケットのログ

管理者は、攻撃者がなりすましパケットを送信しているときにシステムを診断できます。

これを防ぐには、net.ipv4.conf.all.log_martiansおよびnet.ipv4.conf.default.log_martiansパラメーターを/etc/sysctl.confで1に設定します。

#net.ipv4.conf.all.log_martians =1

#net.ipv4.conf.default.log_martians =1

sysctl構成をリロードします

# sudo sysctl -p

5.7ブロードキャスト要求の無視を有効にする

ネットワークでのsmurf攻撃を防ぐには、net.ipv4.icmp_echo_ignore_broadcastsを1に設定します。これにより、システムは、ブロードキャストアドレスとマルチキャストアドレスへのすべてのICMPエコーとタイムスタンプ要求を無視できます。 /etc/sysctl.confでnet.ipv4.icmp_echo_ignore_broadcastsパラメーターを1に設定します

# net.ipv4.icmp_echo_ignore_broadcasts=1

sysctl構成をリロードします

# sudo sysctl -p

5.8不正なエラーメッセージ保護を有効にする

攻撃者がRFC-1122に違反する応答を送信して、役に立たないエラーメッセージを含むシステムログファイルを挿入しようとするのを防ぐため。 /etc/sysctl.confでnet.ipv4.icmp_ignore_bogus_error_responsesパラメーターを1に設定して、偽のエラー応答をブロックします。

# net.ipv4.icmp_ignore_bogus_error_responses=1

sysctl構成をリロードします

# sudo sysctl -p

5.9RFC推奨のソースルート検証を有効にする

カーネルは、リバースパスフィルタリングを使用して、パケットが有効かどうかを判断できます。有効でない場合は、パケットをドロップします。
/etc/sysctl.confでnet.ipv4.conf.all.rp_filterおよびnet.ipv4.conf.default.rp_filterパラメーターを1に設定します

# net.ipv4.conf.all.rp_filter=1
# net.ipv4.conf.default.rp_filter=1

sysctl構成をリロードします

# sudo sysctl -p

5.10TCPSYNクッキーを有効にする

攻撃者は、3ウェイハンドシェイクを初期化せずにSYNパケットをフラッドすることにより、サーバーでDOS攻撃を開始できます。これを防ぐには、/ etc / sysctl.conf

でnet.ipv4.tcp_syncookiesパラメータを1に設定します。
# net.ipv4.tcp_syncookies=1

sysctl構成をリロードします

# sudo sysctl -p

5.10IPv6ルーターアドバタイズメントを無効にする

サーバーがルーターアドバタイズメントを受け入れないようにします。これは、侵害されたシステムへのルーティングトラフィックにトラップされる可能性があるためです。
/etc/sysctl.confでnet.ipv6.conf.all.accept_raおよびnet.ipv6.conf.default.accept_raパラメーターを0に設定します

# net.ipv6.conf.all.accept_ra=0
# net.ipv6.conf.default.accept_ra=0

sysctl構成をリロードします

# sudo sysctl -p

5.12IPv6リダイレクトの受け入れを無効にする

サーバーがルーターアドバタイズメントを受け入れないようにします。これは、侵害されたシステムへのルーティングトラフィックにトラップされる可能性があるためです。悪いルートからシステムを保護するために、システム内にハードルートを設定することをお勧めします。

/etc/sysctl.confでnet.ipv6.conf.all.accept_redirectsおよびnet.ipv6.conf.default.accept_redirectsパラメーターを0に設定します

# net.ipv6.conf.all.accept_redirects=0
# net.ipv6.conf.default.accept_redirects=0

sysctl構成をリロードします

# sudo sysctl -p

5.13IPv6を無効にする

システムでの攻撃の可能性を減らすには、IPv6を無効にします
ファイル/etc/sysctl.confを編集し、次の行を追加します。

# net.ipv6.conf.all.disable_ipv6=1
# net.ipv6.conf.default.disable_ipv6=1
# net.ipv6.conf.lo.disable_ipv6=1

sysctl構成をリロードします

# sudo sysctl -p

5.14TCPラッパーをインストールする

TCPラッパーをサポートするすべてのサービスにTCPラッパーを使用します。

tcpdをインストールします:

# apt-get install tcpd

5.15/etc/hosts.allowを作成

許可されたシステムのみがサーバーに接続できるようにするには、/ etc/hosts.allowを使用します
/etc/hosts.allowを編集して、以下を追加します

"ALL: <net>/<mask>, <net>/<mask>, …"
e.g <net> = 192.168.10.100 , <mask> = 255.255.255.0

5.16 /etc/hosts.allow

の権限を確認します

/etc/hosts.allowを不正な書き込みアクセスから保護することが重要です。次のコマンドを実行して、/ etc / hosts.allow

の権限を見つけます。

#ls -l /etc/hosts.allow

-rw-r--r--1ルートルート20552月15日11:30/etc/hosts.allow

権限が正しくない場合は、次のコマンドを使用して修正してください

#chmod 644 /etc/hosts.allow

5.17 / etc/hostを作成 s.deny

/etc/hosts.denyを使用してサーバーへのアクセスを拒否します。ファイル/etc/hosts.denyは、拒否するように構成されています

/etc/hosts.allowに記載されていないすべてのホスト。ファイル/etc/hosts.deny

を作成します

echo "ALL:ALL">> /etc/hosts.deny

5.18/etc/hosts.denyの権限を確認する

/etc/hosts.denyを不正な書き込みアクセスから保護することが重要です。次のコマンドを実行して、/ etc / hosts.deny

の権限を見つけます。
# ls -l /etc/hosts.deny
-rw-r--r-- 1 root root 2055 Feb 15 11:30 /etc/hosts.deny

5.19ファイアウォールがアクティブであることを確認する

ボックス内外の通信を特定のIPアドレスとポートに制限するには、ファイアウォールを使用します。 Ubuntuには、ファイアウォール構成を簡単に構成するためのUncomplicated Firewall(UFW)が用意されています。
UFWをインストールする

# sudo apt-get install ufw

ufwをアクティブにする:

# sudo ufw enable

例:
SSHおよびhttpサービスを許可します。

# sudo ufw allow TCP/80
# sudo ufw allow TCP/22
# sudo ufw reload

6。ロギングと監査

強力な監査フレームワークを使用することにより、システムは多くのイベントタイプを追跡して、システムを監視および監査できます。
次のコマンドを使用してauditdをインストールします

sudo apt-get install auditd audispd-plugins

必要に応じて、関連する各ディレクトリから次のコマンドを実行して、/ etc / rc*.dにauditdの適切な開始リンクを作成します。

# ln -s /etc/init.d/auditd S37auditd

実行レベルの開始リンクを作成する必要があります

6.1監査ログのストレージサイズの構成

監査ログファイルのサイズは、システムに影響を与えず、監査データが失われないように慎重に選択する必要があります。
/etc/audit/auditd.confでmax_log_fileパラメータを設定します

max_log_file = <MB>

6.2監査ログがいっぱいになったときにシステムを無効にする

auditdデーモンは、監査ログがいっぱいになったときにシステムを停止するように構成できます。次の手順を実行して、auditdが管理者に通知し、監査ログがいっぱいになったときにシステムを停止するように構成されているかどうかを確認します。

space_left_action = email
action_mail_acct = root
admin_space_left_action = halt

6.3すべての監査情報を保持する

高度なセキュリティのコンテキストでは、長い監査履歴を維持することの利点は、監査履歴を保存するコストを上回ります。次の行を/etc/audit/auditd.confファイルに追加します。

max_log_file_action = keep_logs

6.4日付と時刻の情報を変更するイベントを記録する

システムでの不正なアクティビティの兆候である、システムの日付や時刻の異常な変化を監視するため。
64ビットシステムの場合、次の行を/etc/audit/audit.rulesファイルに追加します。

-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change
-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -F arch=b64 -S clock_settime -k time-change
-a always,exit -F arch=b32 -S clock_settime -k time-change -w /etc/localtime -p wa -k time-change

#次のコマンドを実行してauditdを再起動します

# sudo service auditd restart

32ビットシステムの場合、次の行を/etc/audit/audit.rulesファイルに追加します。

-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -F arch=b32 -S clock_settime -k time-change -w /etc/localtime -p wa -k time-change

#次のコマンドを実行してauditdを再起動します

# sudo service auditd restart

6.6ユーザー/グループ情報を変更するイベントの記録

/ etc / group、/ etc / passwd、/ etc / gshadow、/ etc / shadow、/ etc / security / opasswdへの予期しない変更は、許可されていないユーザーがアクティビティを隠そうとしている、または追加のアカウントを侵害しようとしていることを明確に示しています。
次の行を/etc/audit/audit.rulesファイルに追加します。

-w /etc/group -p wa -k identity
-w /etc/passwd -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/security/opasswd -p wa -k identity

#次のコマンドを実行してauditdを再起動します

# sudo service auditd restart

6.7システムのネットワーク環境を変更するイベントの記録

システムのホストとドメイン名が不正に変更されて、それらの名前に基づいて設定されたセキュリティパラメータが破られるのを防ぐには、/ etc / audit/audit.rulesに次の行を追加します。
64ビットシステムの場合、次の行を/etc/audit/audit.rulesファイルに追加します。

-a exit,always -F arch=b64 -S sethostname -S setdomainname -k system-locale
-a exit,always -F arch=b32 -S sethostname -S setdomainname -k system-locale
-w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale
-w /etc/hosts -p wa -k system-locale -w /etc/network -p wa -k system-locale

#次のコマンドを実行してauditdを再起動します

# sudo service auditd restart

32ビットシステムの場合、次の行を/etc/audit/audit.rulesファイルに追加します。

-a exit,always -F arch=b32 -S sethostname -S setdomainname -k system-locale
-w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale
-w /etc/hosts -p wa -k system-locale -w /etc/network -p wa -k system-locale

#次のコマンドを実行してauditdを再起動します

# sudo service auditd restart

6.8システムの強制アクセス制御を変更するイベントを記録する

/ etc / selinux内のファイルへの変更は、許可されていないユーザーがアクセス制御を変更し、セキュリティコンテキストを変更してシステムにアクセスしようとしていることを示しています。
次の行を/etc/audit/audit.rules

に追加します
-w /etc/selinux/ -p wa -k MAC-policy

#次のコマンドを実行してauditdを再起動します

# sudo service auditd restart

6.9ログインおよびログアウトイベントの収集

ログイン/ログアウト/ブルートフォース攻撃に関連する情報を監視するには、/ etc / audit/audit.rulesファイルに次の行を追加します。

-w /var/log/faillog -p wa -k logins
-w /var/log/lastlog -p wa -k logins
-w /var/log/tallylog -p wa -k logins

#次のコマンドを実行してauditdを再起動します

# sudo service auditd restart

6.10セッション開始情報の収集

セッション開始イベントを監視します。システム管理者は、異常な時間に発生するログインを監視できます。これは、不正なアクティビティを示している可能性があります。
次の行を/etc/audit/audit.rulesファイルに追加します。

-w /var/run/utmp -p wa -k session
-w /var/log/wtmp -p wa -k session
-w /var/log/btmp -p wa -k session

#次のコマンドを実行してauditdを再起動します

# sudo service auditd restart

6.11随意アクセス制御許可変更イベントの収集

侵入者の活動を示すファイル属性の変更を見つけます。
64ビットシステムの場合、次の行を/etc/audit/audit.rulesファイルに追加します。

-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod

#次のコマンドを実行してauditdを再起動します

#sudo service auditd restart

32ビットシステムの場合、次の行を/etc/audit/audit.rulesファイルに追加します。

-a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod

#次のコマンドを実行してauditdを再起動します

# sudo service auditd restart

6.12ファイルへの不正アクセスの試みの失敗を収集する

システムへの不正アクセスを取得するためにファイルを開いたり、作成したり、切り捨てたりする試みの失敗を見つけます。
64ビットシステムの場合、次の行を/etc/audit/audit.rulesファイルに追加します。

-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access

#次のコマンドを実行してauditdを再起動します

# sudo service auditd restart

32ビットシステムの場合、次の行を/etc/audit/audit.rulesファイルに追加します。

-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access

#次のコマンドを実行してauditdを再起動します

# sudo service auditd restart

6.13特権コマンドの使用を収集する

システムにアクセスするために、非特権ユーザーによる特権コマンドの使用があるかどうかを調べます。最初に次のコマンドを実行してから、次のコマンドの出力を/etc/audit/audit.rulesファイルに追加します

# find PART -xdev \( -perm -4000 -o -perm -2000 \) -type f | awk '{print \ "-a always,exit -F path=" $1 " -F perm=x -F auid>=500 -F auid!=4294967295 \ -k privileged" }'

6.14失敗したファイルシステムマウントの収集

非特権ユーザーによるファイルシステムのマウントを追跡するには、/ etc / audit/audit.rulesファイルに次のルールを追加します
64ビットシステムの場合、次の行を/etc/audit/audit.rulesファイルに追加します。

-a always,exit -F arch=b64 -S mount -F auid>=500 -F auid!=4294967295 -k mounts
-a always,exit -F arch=b32 -S mount -F auid>=500 -F auid!=4294967295 -k mounts

#次のコマンドを実行してauditdを再起動します

# sudo service auditd restart

32ビットシステムの場合、次の行を/etc/audit/audit.rulesファイルに追加します。

-a always,exit -F arch=b32 -S mount -F auid>=500 -F auid!=4294967295 -k mounts

#次のコマンドを実行してauditdを再起動します

# sudo service auditd restart

6.15ユーザーによるファイル削除イベントの収集

保護されたファイルに関連付けられているファイルとファイル属性の削除が発生しているかどうかを確認するには、次のルールを追加します。
64ビットシステムの場合、以下を/etc/audit/audit.rulesファイルに追加します。

-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete
-a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete

次のコマンドを実行して、auditdを再起動します

# sudo service auditd restart

32ビットシステムの場合、以下を/etc/audit/audit.rulesファイルに追加します。

-a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete

#次のコマンドを実行してauditdを再起動します

# sudo service auditd restart

6.16システム管理スコープへの変更を収集する

/ etc / sudoersファイルの変更は、システム管理者のアクティビティの範囲に不正な変更が加えられたことを示している可能性があります。

次の行を/etc/audit/audit.rulesファイルに追加します。

-w /etc/sudoers -p wa -k scope

#次のコマンドを実行してauditdを再起動します

# sudo service auditd restart

6.17システム管理者アクションの収集(sudolog)

権限のないユーザーが特権コマンドを使用できないようにするには、/ var / log/sudo.logで変更が行われていないかどうかを確認します。
次の行を/etc/audit/audit.rulesファイルに追加します。

-w /var/log/sudo.log -p wa -k actions

auditdを再起動します

# sudo service auditd restart

6.18カーネルモジュールのロードとアンロードの収集

許可されていないユーザーがinsmod、rmmod、modprobeを使用していて、システムのセキュリティを侵害していないかどうかを確認するには、次の行を/etc/audit/audit.rulesファイルに追加します。

-w /sbin/insmod -p x -k modules
-w /sbin/rmmod -p x -k modules
-w /sbin/modprobe -p x -k modules

32ビットシステムの場合、追加

-a always,exit -F arch=b32 -S init_module -S delete_module -k modules

64ビットシステムの場合、追加

-a always,exit -F arch=b64 -S init_module -S delete_module -k modules

auditdを再起動します

# sudo service auditd restart

6.19監査構成を不変にする

権限のないユーザーが監査システムに変更を加えて悪意のあるアクティビティを非表示にし、監査ルールを元に戻すことを防ぐには、次の行を

に追加します。

/etc/audit/audit.rulesファイル。

-e 2

これは、/ etc / audit/audit.rulesファイルの最後の行である必要があります
auditdを再起動します

# sudo service auditd restart

7。システムアクセス、認証、承認

7.1cronにユーザー/グループの所有者と権限を設定する

次のコマンドを実行して、rootユーザーおよびグループへの読み取り/書き込みおよび検索アクセスを制限し、通常のユーザーがこれらのファイル/ディレクトリにアクセスできないようにします。

# chown root:root /etc/crontab
# chmod og-rwx /etc/crontab
# chown root:root /etc/cron.hourly
# chmod og-rwx /etc/cron.hourly
# chown root:root /etc/cron.daily
# chmod og-rwx /etc/cron.daily
# chown root:root /etc/cron.weekly
# chmod og-rwx /etc/cron.weekly
# chown root:root /etc/cron.monthly
# chmod og-rwx /etc/cron.monthly
# chown root:root /etc/cron.d
# chmod og-rwx /etc/cron.d

7.2PAMの構成

PAM(Pluggable Authentication Modules)は、UNIXシステムにモジュラー認証モジュールを実装するサービスです。 PAMは、システム認証を保護するために慎重に構成する必要があります。

7.2.1pam_cracklibを使用したパスワード作成要件パラメータの設定

pam_cracklibモジュールは、パスワードの強度をチェックします。パスワードが辞書の単語ではないこと、特定の長さであること、文字が混在していること(アルファベット、数字、その他など)などを確認するなどのチェックを実行します。
/etc/pam.d/common-password

で次のようにpam_cracklib.soパラメーターを設定します。
password required pam_cracklib.so retry=3 minlen=14 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1

7.2.2失敗したパスワード試行のロックアウトを設定する

連続したログイン試行が失敗した後にユーザーをロックアウトして、システムに対するブルートフォースパスワード攻撃を防ぎます。
/etc/pam.d/loginファイルを編集し、以下に認証行を追加します。

auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900

7.2.3パスワードの再利用を制限する

ユーザーに過去5つのパスワードを再利用しないように強制すると、攻撃者がパスワードを推測できる可能性が低くなります。 /etc/pam.d/common-password

でpam_unix.sorememberパラメーターを5に設定します
password sufficient pam_unix.so remember=5

8。 SSHを構成する

/ etc / ssh / sshd_configファイルを編集して、次のパラメータを次のように設定し、安全にします。

Protocol 2
LogLevel INFO
X11Forwarding no
MaxAuthTries 4
IgnoreRhosts yes
HostbasedAuthentication no
PermitRootLogin no
PermitEmptyPasswords no
PermitUserEnvironment no
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
ClientAliveInterval 300
ClientAliveCountMax 0
AllowUsers <userlist>
AllowGroups <grouplist>
DenyUsers <userlist>
DenyGroups <grouplist>
Banner <your bannerfile>

9。 Restrict Access to the su Command

Use sudo instead of su as it provides a better logging out and audit mechanism. The another motivation for using sudo is to restrict the uses of su. Uncomment the pam_wheel.so line in /etc/pam.d/su, so that su command will be available to users in the wheel group to execute su.

# grep pam_wheel.so /etc/pam.d/su
auth required pam_wheel.so use_uid
# grep wheel /etc/group
wheel:x:10:root, <user list>.....

10。 User Accounts and Environment

10.1 Set Password Expiration Days

Reduce the maximum age of a password.

Set the PASS_MAX_DAYS parameter to 120 in /etc/login.defs

PASS_MAX_DAYS 60

Modify active user parameters to match:

# chage --maxdays 120 <user>

10.2 Set Password Change Minimum Number of Days

To prevent the user from changing their password until a minimum no of days have passed since the user changed the password. Set the PASS_MIN_DAYS parameter to 7 in /etc/login.defs

PASS_MIN_DAYS 7

Modify active user parameters to match:
# chage --mindays 7

10.3 Set Password Expiring Warning Days

The administrator can notify the users about the expiry of their password using ASS_WARN_AGE parameter in /etc/login.defs.

Set the PASS_WARN_AGE parameter to 7 in /etc/login.defs

PASS_WARN_AGE  7

Modify active user parameters to match

# chage --warndays 7 <user>

11。 System Accounts

11.1 Disable System Accounts

To prevent the system account from being used to get an interactive shell, append “/usr/sbin/nologin” at the end of each system accounts in /etc/passwd

11.2 Set Default

umask for Users
Set umask of 022 will make files readable by every user on the system.
Edit the /etc/login.defs file and add the following line

UMASK 022

11.3 Lock Inactive User Accounts

To make the system more secure, execute the following command to lock the inactive accounts.

# useradd -D -f 35

11.4 Remove OS Information from Login Warning Banners

To prevent the OS and patch level information from login banners, edit the /etc/motd, /etc/issue and /etc/issue.net files and remove any lines containing \m, \r, \s or \v.

12。 Verify System File Permissions

12.1 Verify Permissions on /etc/passwd, /etc/shadow, /etc/group

These file needs to be protected from unauthorized changes by non-privileged users as well as needs to be readable as this information is used by non-privileged programs.
Execute the following commands to correct the permissions for these files

# chmod 644 /etc/passwd
# chmod o-rwx,g-rw /etc/shadow
# chmod 644 /etc/group

12.2 Verify User/Group Ownership on /etc/passwd, /etc/shadow, /etc/group

These file needs to be protected from unauthorized changes by non-privileged users as well as needs to be readable as this information is used by non-privileged programs.
Execute the following commands to correct the ownership for these files

# chown root:root /etc/passwd
# chown root:shadow /etc/shadow
# chown root:root /etc/group

13。 Check for rootkits

There are few tools available through which you can check for rootkit in the server. The two popular rootkit hunters are RKHunte and CHKRootKit, use anyone of them periodically to check for rootkit in the system

Install chkrootkit

# sudo apt-get install chkrootkit

To run chkrootkit, execute the following command in the terminal

# chkrootkit

14。 PSAD IDS/IPS

To detect the intrusion in your network, you can use toos like snort or cipherdyne's psad. The later has the capability of intrusion detection and log analysis with iptables. PSAD is a lightweight system daemons that analyze the iptables log message to detect scans and other spurious traffic.

Install PSAD

#sudo apt-get install psad

Now configure psad to detect scans, Intrusion Detection and Intrusion Prevention

15. Prevent IP Spoofing

Add following lines in /etc/host.conf to prevent IP spoofing

order bind,hosts
nospoof on

16. Enabling automatic security updates

It is highly recommended to enable automatic security updates and patches to keep the system secure. You will be notified every time you logged in to the system using SSH about security updates and patches. In Ubuntu Desktop, to enable automatic security updates, click on "System" select "Administration" and then "Software Sources" menu. Now select the "Internet Updates" and enable "Check for updates automatically" specifying daily". If Ubuntu issues a new security release then you will be notified via the "Update Manager" icon in the system tray. You can use unattended-upgrades which can handle automatic installation of security upgrades in Ubuntu system. Running sudo unattended-upgrade will install all the security package available for upgrade.

Install this package if it isn't already installed using

# sudo apt-get install unattended-upgrades

To enable it type

# sudo dpkg-reconfigure unattended-upgrades

and select "yes".

17. Harden PHP

Edit the php.ini file /etc/php5/apache2/php.ini and add uncomment/add following lines.

safe_mode = On

safe_mode_gid = On

disable_functions = hp_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, set_time_limit, exec,

system, highlight_file, source, show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid,

posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix, _getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit,

posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times,

posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo

register_globals = Off

expose_php = Off

display_errors = Off

track_errors = Off

html_errors = Off

magic_quotes_gpc = Off

mail.add_x_header = Off

session.name = NEWSESSID

allow_url_fopen = Off

allow_url_include = Off

session.save_path = A secured location in the server

18. Harden Apache

Edit Apache2 configuration security file /etc/apache2/conf-available/security.conf and add the following-

ServerTokens Prod

ServerSignature Off

TraceEnable Off

Header unset ETag

FileETag None

The web application firewall ModSecurity is effective way to protect web server so that it's much less vulnerable to probes/scans and attacks. First install mod_security using following command.

# sudo apt-get install libapache2-mod-security2

# mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

Edit /etc/modsecurity/modsecurity.conf

Activate the rules by editing the SecRuleEngine option and set to On and modify your server signature

SecRuleEngine On

SecServerSignature FreeOSHTTP

Now edit the following to increase the request limit to 16 MB

SecRequestBodyLimit 16384000

SecRequestBodyInMemoryLimit 16384000

Download and install the latest OWASP ModSecurity Core Rule Set from their website.

# wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/master.zip

# unzip master.zip

# cp -r owasp-modsecurity-crs-master/* /etc/modsecurity/

# mv /etc/modsecurity/modsecurity_crs_10_setup.conf.example /etc/modsecurity/modsecurity_crs_10_setup.conf

# ls /etc/modsecurity/base_rules | xargs -I {} ln -s /etc/modsecurity/base_rules/{} /etc/modsecurity/activated_rules/{}

# ls /etc/modsecurity/optional_rules | xargs -I {} ln -s /etc/modsecurity/optional_rules/{} /etc/modsecurity/activated_rules/{}

Now add the following line in /etc/apache2/mods-available/mod-security.conf

Include "/etc/modsecurity/activated_rules/*.conf"

Check if the modules has been loaded-

# sudo a2enmod headers

# sudo a2enmod mod-security

Now restart Apache2

# service apache2 restart

Apart from ModSecurity, install modevasive to protect your server from DDOS (Denial of Service) attacks

Once you've hardened the system, run some vulnerability scans and penetration tests against it in order to check that it's actually rock solid as you're now expecting it. However attack on your server can happen, it is up-to you to scan the log files regularly to find out any breaches have been occurred. You can use log analyzer tool like ELK stack to drill through servers log files quickly. If you find evidences of breaches then quickly disconnect your server from the internet and take remedial measures.


Ubuntu
  1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  2. Debian – / var、/ homeを別のパーティションに移動しますか?

  3. Ubuntu – / usr / bin/hostは再起動後も/etc/ hostsへの変更を取得しませんか?

  1. Ubuntu 14.04「エントリーファイルで再生Uriを取得しませんでした:/// *」?

  2. ターミナルUbuntu14.04でのプロキシ認証?

  3. 別のパーティションを/homeとして再マウントする方法は?

  1. なぜ /home 以外のものを別のパーティションに入れるのですか?

  2. デフォルトの /tmp を /home/user/tmp に変更する方法

  3. /tmp と /var/tmp の違いと正しい使い方