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
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.