close
プログラミング クラウド Microsoft Azure 情報処理資格 基本情報技術者 IT基礎 応用情報技術者 開発・設計方法 オブジェクト指向 内定者・新人研修 プログラミング基礎 アルゴリズム コンピュータ数学 内定者研修 新人研修 ヒューマンスキル プロジェクトマネジメント プレゼンテーション リーダーシップ 組織マネジメント ネゴシエーション ロジカルシンキング Java UI/UX HTTP JavaScript基礎 情報処理資格 ネットワークスペシャリスト ネットワーク インターネットルーティング応用 IPアドレス データベース応用 SQL応用 パフォーマンスチューニング データベース設計 ER図 概念設計(データベース) 論理設計(データベース) IT資格 Linux基礎 OS・システム基盤 セキュリティ TCP/IP OSI参照モデル データベースセキュリティ ファイアウォール 標的型攻撃 SQLインジェクション ネットワーク基本設計 CCNA Cisco プロジェクトマネジメント資格 情報処理資格プロジェクトマネージャ 情報処理安全確保支援士 人事給与 財務会計 管理会計 簿記 生産管理 在庫管理 ERP バランススコアカード 情報処理資格 ITアーキテクト 情報処理資格 ITストラテジスト 情報処理資格 ITサービスマネジメント 情報処理資格 システム監査 PMBOK® PMP® プロジェクト計画 WBS リスクコントロール ITIL ITサービスマネジメント 要求定義 要件定義 見積手法 ビジネスインダストリ 業種・業界知識 業務知識 提案力 ソフトウェアテスト基礎 情報処理資格 データベーススペシャリスト ハードウェア基礎 外部設計(基本設計) 内部設計(詳細設計) データベース基礎 SQL基礎 RDBMS 物理設計(データベース) C++ Ruby MVC基礎 Webアプリケーション開発 JavaEE Javaプログラミング応用 フレームワーク MVC応用 Spring フレームワーク ソフトウェアテスト応用 テスト手法 JUnit スマートフォンアプリ開発 Androidアプリ開発 C# 基礎 C# 応用 負荷テスト Javaプログラミング基礎 ソフトウェアテスト コーチング メンタリング HTML/CSS サーバー構築 仮想化技術 KVS (NoSQL) アジャイル スクラム ファシリテーション C言語 ITパスポート JSTQB データサイエンス 単体テスト ユニットテスト キャリアアップ インターネットルーティング基礎 パケット解析 LAN構築 データベース データサイエンティスト トレンド 障害対応 インフラ監視 HTTP/2.0 コンピュータサイエンス VPN ネットワーク物理設計 データベース障害 JavaScript モダンJS (Modern JavaScript) 応用 MVS応用 バックアップ/リカバリ 分散処理 Hadoop Hive Python AI 深層学習(DeepLearning) CentOS Linux応用 Zabbix シェルスクリプト Infrastructure as Code Windowsサーバー基礎 内部設計 Docker DevOps Windowsサーバー応用 NginX chef Ainsible ロジカルライティング R テスト自動化 Jenkins Git 継続的インテグレーション (CI) バージョン管理 Vagrant 要求分析 Redmine 継続的インテグレーション(CI) 継続的デリバリー (CD) ヒューマンリソース管理 Web API マイクロサービス コミュニケーション 業務知識/業界知識 マーケティング 語学 AWS 法務 IoT ビジネスマナー OJT 業務効率化 表計算ソフト オフィスソフト コンプライアンス フロントエンド Subversion PHP 関数型プログラミング Laravel モダンJS (Modern JavaScript) 基礎 Android Studio 機械学習 iOSアプリ開発 ぷプログラミング React 次世代高度IT人材 共創 IPA Raspberry Pi Xamarin スクリプト言語 GoF CUI VBA 資格 ビジネス文書 jQuery 研修参加レポート マネジメント OSPF テーブル設計 アンガーマネジメント クリティカル・シンキング PDU 経営改善 Pマーク 問題解決技法 サイバー攻撃 エンジニア 参加してみた エンゲージメントマネジメント 労働関連法 新人育成 ネットワーク構築 情報セキュリティマネジメント デザインパターン リファクタリング マルチスレッドプログラミング ベンダーコントロール Modern JavaScript 冗長化 VLAN インフラエンジニア チームビルディング テストケース リーダブルコード セキュリティ入門 ネットワーク入門 Node.js npm gulp ビルドツール Python入門 冗長化入門 インフラ実機演習 プロジェクト管理 Active Directory ネットワーク管理 コンテナ 正規化理論 Haskell 品質管理 OpenStack シンギュラリティ DBA中級 プロトコル UX 基本設計 FinTech トラブルシューティング 並列処理 見える化 PMO ロジカルコミュニケーション Deep Learning インデックス設計 超上流工程 BGP Excel C-CENT Selenide プライベートクラウド アセンブラ コンピュータ基礎 工数見積 CCENT 法律知識 失敗から学ぶ プロジェクト失敗事例 PDCA プログラミング入門 非エンジニア向け 4Biz DNS セルフマネジメント 片付け術 サーバーダウン サーバー タイムマネジメント GO言語 プロダクトマネジメント プロダクトマネージャ LVS ロードバランサー 負荷分散 仮想通過 犯罪心理学 情報漏えい SEカレッジ導入事例 IT研修を聞いてみた 会社規模 (100~300名) IT研修制度を聞いてみた CentOS7 開発環境構築 数字力 財務 IT人材 UI Machine Learning Go言語 (golang) データマイニング 統計学 新人教育 やり直し数学 RDB つながる工場 モチベーション WebSocket WebWorker HTML5 CSS3 Bootstrap 微分・積分 システム設計 決断力 LAMP環境 トレ担 教育研修担当者向け ルーティング Linux入門 図解術 目標設定 試験対策 インタビュー技法 Vue.js ブロックチェーン 会社規模 (~50名) DHCP 仕掛け学 BSC 財務諸表 自己分析 RIP スタティックルート バッファオーバーフロー DoS攻撃 システム開発 会社規模 (~99名) Wireshark パケットキャプチャ 管理職研修 部下育成 ワークあり 文章力 情報システム部門向け プロジェクトリーダー プロジェクトマネージャ 塗り絵 リスク管理 法改定 会社の仕組み Chainer AI人材 会話術 会社規模 (~25名) テスト技法 組織規模 51名~99名 組織規模:~199名 [組織規模]199名まで 組織規模 199名まで 組織規模199名まで 会社規模199名まで 会社規模49名まで 会社規模99名まで アプリ開発 サーバサイドJava 営業知識 Cloud 栄養学 基本コマンド ウォーターフォールモデル ヘルスケア 論理設計 ニューラルネットワーク ハンズオン UML 顧客ヒアリング マウスで学ぶ Apache EC2 Lightsail M5Stack DevSecOps プロジェクト成果 画像認識 チャットポット コマンド レビュー 基本用語 自動構築 LPIC-1 サーバーサイドJavascript キャリア形成 ワークライフバランス インバスケット テック用語 GitHub Windows エディタ 教養 令和時代 RESTful API 物理設計 会社規模300名以上 データモデリング サーバーサイドJava Webサーバー基礎 Webサーバー応用 Watson IBMWatson Learning Topics OS モバイル コンテスト トレーニング手法 アーキテクチャ 人材モデル インフラ CI/CD Infrastructure as a Code チーム開発 制度づくり Special_Intro AI市場分析 研修ロードマップ 仕事術 デジタルトランスフォーメーション 財務分析手法 情報整理 PowerPoint 新しい研修 オンライン研修 見どころ紹介 統計分析 ディープラーニング G検定 情報処理技術者試験 販売管理 C# テスト計画 Linuxサーバー WEBサーバ構築 http/2 Postfix イーサリアム プロジェクト・メンバ 正規化 パケット実験 作業分解 トラブル調査 ネットワーク設計 Windows server 2016 ネットワーク機器 DX 管理職 最新動向

Linux セキュリティを対策してみよう 研修コースに参加してみた


2020-05-12 更新

今回参加した研修コースは 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
      • 設定できること
      • 作業内容
      • メール通知
      • 定期更新日
  • コマンド
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 で出来ます。

  1. 監査ルールを確認
    auditctl -l
    No rules
  2. 監査ルールを指定
    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
  3. 記録の確認
    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 カレッジの無料見学、資料請求などお問い合わせはこちらから!!


SEカレッジについて

label SEカレッジを詳しく知りたいという方はこちらから !!

SEcollege logo
SEカレッジ
IT専門の定額制研修 月額28,000円 ~/ 1社 で IT研修 制度を導入できます。
年間 670 講座をほぼ毎日開催中!!

午前免除 FAQ

タグ一覧