Linux セキュリティを対策してみよう 研修コースに参加してみた
今回参加した研修コースは Linux セキュリティを対策してみよう です。
SE カレッジでもセキュリティ関連のコースは、かなり多く開催していますが、このコースは Linux サーバに特化したセキュリティでした。
範囲が限定的なので、結構、初歩的な内容かなぁと思っていると、どっこい、かなり広範囲にわたって対策を解説いただけました!
auditd や ssh 、rootkit 対策など様々に扱い、セキュリティとは奥が深く、かつ広いことを実感しました。
セキュリティという観点だけでなく、Linux のどこにどんな設定ファイルがあり、どのように設定するのか、Linux サーバを立てるスキルの仕上げとしても有効でした!
では、どんな内容だったのか、レポートします!!
もくじ
コース情報
想定している受講者 | Linuxの基本操作ができること |
---|---|
受講目標 | Linuxの安全性を高める方法を理解する |
講師紹介
インフラと言えば、今回のレポートで14回目の登場となる 新谷 泰英 さん です。
このコースでもササッとお名前の自己紹介だけしてコースがスタートしますが、1つだけここで補足します。
この前にレポートした 仮想環境で学ぶセキュリティ実践 はセキュリティ全般の話でしたが、今回は Linux システム をどのようにセキュアにするのか、というお話です。
研修コースに参加してみた
安全性と利便性のトレードオフ
まずはセキュリティ対策のお話です。
- 例えばドアに鍵をかけない
- スグにドアは開く
- 安全性は高くない
- ドアに鍵を 10 個つける
- 安全性は高くなる
- ドアは開けにくい
- 常にトレードオフなので必要最小限の構成を考えることが重要
- 今日話すことを全部実現するのではなく、必要に応じて選ぶことが重要
- 今日の CentOS も最小構成
私どもでも以前にメール送信ミス防止の SaaS を入れたのですが、ミスは激減し、手間は激増し、このトレードオフを身をもって感じました。。
今日のLinux
- 最小構成 ( minimal ) の CentOS
man
など主要コマンドでも使えないことがあります
- ディスクの暗号化が適用されているものを使います
- LUKS (Linux)
- 管理者パスワードもこだわりましょう
- なお実システムではパスワードに頼るのも NG
- 認証システムも入れましょう
セキュアにしよう
ここからは演習しながら、セキュアにします。
VirtualBoxでCentOSをインストール -> 起動しますが、ディスクのパスワードが聞かれます。
この設定をやっていると、起動のたびに毎回聞かれるので、サーバでLinuxを利用するときは注意が必要です。
このパスフレーズの入力も自動化できますが、ここでもその分、安全性が下がります。
システムの更新
まずは、Windowsアップデート同様にLinuxでも更新が必要です。なので、定期更新しましょう。
サーバなら、なおさらです。
- 更新内容は 2 通り
- 新しく何か追加されている
- 何か修正されている
- セキュリティ的なものも含まれている
定期更新
yum -y update
これで更新ができます。
ただ、毎回、手動入力するのは大変なので自動化しましょう。
自動更新
- yum-cron というパッケージでできます
- ただし再起動してしまったり更新プログラムにバグが入ったりするので設定が必要です
- yum-cron の設定ファイルを編集しましょう
- /etc/sysconfig/yum-cron
- 設定できること
- 作業内容
- メール通知
- 定期更新日
- /etc/sysconfig/yum-cron
- コマンド
yum -y install yum-cron
# vi /etc/sysconfig/yum-cron # vi エディタに慣れましょう
- 設定ファイル編集
Check to see if you can reach the repos before updating (valid: yes|no)
CHECK_FIRST=yes
:
:
# by default MAILTO is unset, so crond mails the output by itself
# example: MAILTO=root
MAILTO=root
:
:
# you may set DAYS_OF_WEEK to the days of the week you want to run
# default is every day
#DAYS_OF_WEEK="0123456" # 実行する日 (0が日曜, 6が土曜)
- コマンド (apply)
service yum-cron start 夜間 yum 更新の有効化中: [ OK ]
chkconfig yum-cron on
ブートローダーの保護
ひきつづき、メジャーな攻撃手法の対策をします。
- 起動プロセス
- 電源 ON -> POSTと呼ばれるH/Wの診断 -> BIOS ( HDD から OS を起動) -> ブートローダーが起動 -> OS が起動
- 攻撃者は OS が起動する前にアタックしたい
- ブートローダーがターゲットになりやすい
- セキュアブートを設定
- BIOS パスワードを設定すると有効
BIOS パスワード
- まずハッシュ化されたパスワードを作成
grub-md5-crypt
Password:
Retype password:
$1$b/K2E0$g4EpYodue9JYMdiY8Jzdr1
- 作成したパスワードを設定ファイルに入力
vi /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
# ここに先程のハッシュ値を入れる
password --md5 $1$b/K2E0$g4EpYodue9JYMdiY8Jzdr1
title CentOS (2.6.32-754.10.1.el6.x86_64)
実際 reboot してデモを新谷さんから紹介いただきました。
不要なサービスを停止しましょう
続いて、シンプルな構成ということで、不要に動いているものをストップします。
Windows に限らず、 OS は様々なバックグラウンドサービスが動きます。
- 稼働中のサービスを確認
chkconfig | grep 3:on # 3: が自動起動しているもの
auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
blk-availability 0:off 1:on 2:on 3:on 4:on 5:on 6:off
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ip6tables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
iscsi 0:off 1:off 2:off 3:on 4:on 5:on 6:off
iscsid 0:off 1:off 2:off 3:on 4:on 5:on 6:off
lvm2-monitor 0:off 1:on 2:on 3:on 4:on 5:on 6:off
mdmonitor 0:off 1:off 2:on 3:on 4:on 5:on 6:off
netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
udev-post 0:off 1:on 2:on 3:on 4:on 5:on 6:off
yum-cron 0:off 1:off 2:on 3:on 4:on 5:on 6:off
- 稼働中のサービスを確認
service iscsi stop
iscsi を停止中: [ OK ]
:
:
ただ、これを停止しても、reboot するとまた起動するので、自動起動を無効化することもできます。
chkconfig iscsi off
その他のセキュリティ
最小構成のシステムということで、今度は余計な通信をしないようにネットワークもみます。
ネットワークセキュリティ
具体的にはリッスンポート、つまり接続待ち状態のとき、パケットが送られる可能性があるので、そこが狙われやすくなります。
- 開いているポートを確認
ss -natu
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 *:68 *:*
tcp LISTEN 0 100 ::1:25 :::*
tcp LISTEN 0 100 127.0.0.1:25 *:*
tcp LISTEN 0 128 :::22 :::*
tcp LISTEN 0 128 *:22 *:*
:
- ファイアウォールの設定を確認しましょう
iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
2028 240K ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- any any anywhere anywhere
0 0 ACCEPT all -- lo any anywhere anywhere
1 52 ACCEPT tcp -- any any anywhere anywhere state NEW tcp dpt:ssh
2143 235K REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 1335 packets, 216K bytes)
pkts bytes target prot opt in out source destination
iptable には ipv6 版もあるので、そっちも忘れずに。 ( ipt6ables -L -v
)
なお、以降はネットワークセキュリティになるので、必要な人はそっちに出てみましょう。
システムファイルの監査
セキュアな基本設定には含まれにくいものですが、大事なものなので取り上げます。
監査というのは、会計監査のように調査のようなニュアンスですが、いわゆるロギングの機能のことです。誰がアクセスしているのかなどを確認します。
標準の auditd で出来ます。
- 監査ルールを確認
auditctl -l No rules
- 監査ルールを指定
vi /etc/audit/audit.rules
# This file contains the auditctl rules that are loaded # whenever the audit daemon is started via the initscripts. # The rules are simply the parameters that would be passed # to auditctl. # First rule - delete all -D # Increase the buffers to survive stress events. # Make this bigger for busy systems -b 320 # Feel free to add below this line. See auditctl man page # 一番下にルールを書く # サンプルの書式 # -w /etc/passwd -p wa -k passwd_changes
- 記録の確認
tail /var/log/audit/audit.log type=USER_AUTH msg=audit(1548727536.902:20): user pid=1368 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=success acct="root" exe="/usr/sbin/sshd" hostname=? addr=192.168.2.63 terminal=ssh res=success' type=CRED_ACQ msg=audit(1548727536.902:21): user pid=1368 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=PAM:setcred acct="root" exe="/usr/sbin/sshd" hostname=192.168.2.63 addr=192.168.2.63 terminal=ssh res=success' : :
SELinux
セキュアな Linux 構成となると、よく出てくるものですね。
ただ、よくOFFにされます。。
- 設定した許可ルールが OK でも、 SELinux が拒否することがある
- 一次元、深いところで設定している
- が、できるだけ、使っていきましょう、という趣旨
- もし最悪なにかで侵入されたとしても、例えば DB へのアクセスは出来ないようにできる
- 侵入されたところを切り捨てる、ということができる
- 一方で、挙動不審になってしまうので、対策が必要
もし、SELinuxが効いて、うまく動作しない場合
- 雑だけど、SELinuxを一時的に停止して、改めて動作してみる
- うまく行けば、SELinuxが原因、そうでなければ違うとして切り分け
getenforce
-> ステータス確認- Enforcing と表示されれば有効化されている
setenforce 0
-> SELinuxをオフ- Permissive になり、遮断はしてないが、ログはとっているという状態
- 他の方法
- サービス毎にSELinuxの制限実施のON/OFFを設定
今日演習しなかった Linux セキュリティ
あとはユーザの管理ということで、パスワードの設定ルールや root ログインの制限などを解説いただきました。
ただ、root ログインを制限しただけでは逃げ道があります。それが ssh ログインです。
ssh の制限
ssh によるパスワード認証のやり方の説明のあと、証明書を使う方法について補足いただきました。
- 鍵のペアの作成と公開外の登録
$ ssh-keygen -t rsa
$ cd .ssh # .ssh のディレクトリに移動
$ cat id_rsa.pub >> authorized_keys
$ chomd 600 authrized_keys # 600 は本人しか読み書きできない
これでかなり外部からログインできない状態になっています。
そのほか ssh 経由の攻撃対策として、パスワードアタック対策でも出てきた fail2ban(EPL) を使って自動的にアクセス遮断できます。
いろいろな対策
そのほか色々な攻撃に対する対策方法について紹介いただきました。
- rootkit 対策
- Rootkit Hunter (EPL) を使います
- Rootkit という root 権限を奪いに来るソフトを防ぐソフト
- バックドア対策
- log 監視
- 攻撃監視/検出
- logwatch というパッケージがよく使われている
- cron 実行でまわっている
- レポートを動作状況を報告してくれる
- アンチマルウェア
- ほとんどのウイルスソフトはWindows向け
- Clam AntiVirus がフリーソフトウェアとして公開されている
- SELinuxの設定で有効化できないことが多いので注意
- アンチマルウェア検知テスト
- ウイルスが発見できるかテストできる
- wget というパッケージがある
- 安全なウィルス
- 改ざんの検知
- システムファイルの改竄を検出できる aide というパッケージがある
- 雑にいうと、ファイルをキャプチャして、一定期間後に差分を確認する
- checksum や メッセージダイジェストを生成する
最後、このいろいろな対策を思い思いに試して、このコースは修了しました。
まとめ
Linuxサーバをセキュアにする設定をひと通りまとめたコースでした。
一つ一つの設定だけでご飯 3 杯いけるものでしたが、ひとまとめにしたことで、逆に視野が広がるものでした。
一方で、セキュアにすればするほど、手間も面倒も増えることもわかり (特に SELinux ) 、利便性とのトレードオフも感じることができました。
それにしてもセキュアにするというのは奥が深く広いですね。。最小構成を心がけないと無限に対策できそうです。
セキュリティという観点だけでなく、Linuxサーバを設定できる、というゴールの仕上げにもとっても良いコースでした!
label SE カレッジの無料見学、資料請求などお問い合わせはこちらから!!
label SEカレッジを詳しく知りたいという方はこちらから !!
IT専門の定額制研修 月額28,000円 ~/ 1社 で IT研修 制度を導入できます。
年間 670 講座をほぼ毎日開催中!!
SEプラスにしかないコンテンツや、研修サービスの運営情報を発信しています。