Skip to content

Latest commit

 

History

History
451 lines (402 loc) · 19 KB

212-system-security.md

File metadata and controls

451 lines (402 loc) · 19 KB

システムセキュリティ

ポイント

理解しておきたい用語と概念

  • パケットフィルタリング
  • ProFTPD
  • vsftpd
  • Pure-FTPD
  • 匿名FTP
  • OpenSSH
  • ポートスキャン
  • セキュリティスキル
  • TCP Wrapperとlibwrap
  • OpenVPN

習得しておきたい技術

  • iptablesによるパケットフィルタリング設定
  • IP転送
  • OpenSSHの設定
  • OpenSSHの認証の仕組み
  • SSHを使ったポート転送
  • OpenSSHのセキュリティ
  • 開いているポートの確認
  • TCP Wrapperの設定
  • OpenVPNの設定

ルータを構成する

パケットフィルタリング

  • パケットの情報からパケットを通過させたり遮断したりする
  • チェイン
    • パケットを検査するための一連のルールセット
  • テーブル
    • チェインのまとまり

iptablesコマンド

  • チェイン、ターゲット、ルール、オプションを設定できる
  • 書式
    • iptables -[AD] チェイン ルール
    • iptables -P チェイン ターゲット
    • iptables -[LFNX] [チェイン]
    • iptables -I チェイン [ルール番号] ルール
  • オプション
    • -P, --policy 指定したチェインのポリシー(デフォルトターゲット)を変更
    • -A, --append チェインにルールを追加
    • -D, --delete チェインにルールを削除
    • -N, --new-chain チェインを作成
    • -L, --list チェインのルールを一覧表示
    • -F, --flush チェイン内のルールを全て削除
    • -X, --delete-chain 空のユーザ独自のチェインを削除
  • チェイン
    • パケットの処理方法を定義したルール群
    • テーブル
      • iptablesで作成するチェインの使用目的を決定する
      • 主なテーブル
        • filter
          • パケットフィルタリング用
          • デフォルト設定
          • デフォルトで使用できるチェインは、INPUT OUTPUT、FORWARD
        • nat
          • NAT用
          • デフォルトで使用できるチェインは、OUTPUT, PREROUTING, POSTROUTING
          • IPマスカレードではPOSTROUTING
    • INPUT
      • ホストに入ってくるパケット
    • OUTPUT
      • ローカルマシンで生成されたパケット
    • FORWARD
      • ホストを経由するパケット
    • PREROUTING
      • 入ってきたパケットを変換
    • POSTROUTING
      • 出ていくパケットを変換
  • ターゲット
    • ACCEPT
      • 通過を許可
    • DROP
      • 破棄
  • ルール
    • -s IPアドレス
      • 送信元のIPアドレスの指定
    • -d IPアドレス
      • 送信先のIPアドレスの指定
    • --sport ポート番号
      • 送信元のポート番号
    • --dport ポート番号
      • 送信先のポート番号
    • -p プロトコル
      • プロトコルの指定
      • tcp, udp, icmp, all
    • -i インターフェース名
      • 受信するインターフェースの指定
    • -o インターフェース名
      • 送信するインターフェースの指定
    • -j ターゲットを指定
  • ターゲット
    • ACCEPT
      • 通貨を許可
    • DROP
      • 破棄
    • REJECT
      • 拒否
    • MASQUERADE
      • 送信元IPアドレスと送信元ポート番号を変更
    • SNAT
      • 送信元IPアドレスを指定したIPアドレスに変更
    • LOG
      • ログに記録
  • iptables-saveコマンド
    • iptablesの現在の設定をファイルに保存
    • リダイレクト「>」で保存
  • iptables-restoreコマンド
    • iptablesの設定をファイルから復元する
    • 標準入力でファイルを渡す

IPv6

  • IPv6ではip6tablesコマンドを使う
  • アドレス範囲
    • ループバックアドレス
      • 自身のアドレス
      • ルーティングされないアドレス
      • IPv6: ::1/128
      • IPv4: 127.0.0.0/8
    • リンクローカルアドレス(ユニキャスト)
      • ゲートウェイとなるルータから発信されたルータ広告(RA)と呼ばれるメッセージを受信するのに使用される
      • DHCPを使わず自ホストだけで完結できる
      • ルーティングされないアドレス
      • IPv6: fe80::/10
      • IPv4: リンクローカルアドレス
    • ユニークローカルアドレス(ユニキャスト)
      • プライベートなIPv6ネットワークでのみ使用されるアドレス
      • ルーティングされるアドレス
      • IPv6: fc00::/7
      • IPv4: (プライベートアドレス)
    • グローバルアドレス(ユニキャスト)
      • 全世界で一意のIPv6アドレス
      • ルーティングされるアドレス
      • IPv6: 2000::3
      • IPv4: グローバルアドレス
    • マルチキャストアドレス
      • ブロードキャストアドレス
      • IPv6: ff00::/8
      • IPv4: 224.0.0.0/4
    • エニーキャストアドレス
      • マルチキャストの動きをしつつ、同じアドレスを持つノードの中で最も近い1つがパケットを受け取り動作するアドレス
      • グローバルアドレスと同じ構造
    • 一時アドレス
      • 秘匿性が要求される用途のために利用されるアドレス
      • グローバルアドレスと同じ構造
      • ルーティングされるアドレス

セキュリティ

  • Smurf攻撃
    • 「ICMP Echo Request」パケットの送信元を攻撃対象のIPアドレスに書き換えてブロードキャスト宛てに送り、受信したホストは送信元へ「ICMP Echo Reply」パケットを送る
    • /proc/sys/net/ipv4/icmp_echo_ignore_broadcastsファイルの内容を1にすることで、ブロードキャスト宛のICMP Echo Requestパケットを無視することができる
  • SYN flood攻撃
    • TCP接続の確率準備が整った状態で接続を放置し、ユーザが正規のサーバに接続できないようにする攻撃。DoS攻撃の一種
    • セッションの正当性を確認するSYNクッキーを有効にする
      • /proc/sys/net/ipv4/tcp_syncookies ファイルの内容を1にすることでSYNクッキーを有効にする

ルーティングテーブル

  • パケット転送を処理するルールが書かれたテーブル
  • routedデーモン
  • ルーティングテーブルの表示
    • route コマンド
    • netstat -r コマンド
  • ルーティングテーブルの主な項目
    • Destination
      • 宛先ネットワークアドレス
      • defaultのGateway欄のアドレスがデフォルトゲートウェイ
    • Gateway
      • 宛先ネットワークへのゲートウェイ
      • デフォルトゲートウェイ
    • Genmask
      • 宛先ネットワークのサブネットマスク
    • Flags
      • 状態フラグ
        • U 経路が有効
        • H 対象をホストとして設定
        • G ゲートウェイを使用
        • ! 拒否する経路
    • Iface
      • 宛先ネットワークへの送信に使用するインターフェース
  • ルータとして使用するためには、パケットの転送を許可する必要がある
    • echo 1 > /proc/sys/net/ipv4/ip_forward
  • IPマスカレード
    • プライベートIPアドレスとグローバルIPアドレスのアドレス変換

FTPサーバの管理

  • FTPサーバの種類
    • wu-ftpd
      • 古くからUNIX系OSで利用されている
    • ProFTPD
      • 設定が用意
    • vsftpd
      • 設定の容易さと高い安全性を兼ね備えたFTPサーバ
    • Pure-FTPD
      • セキュリティと実用性を重視
  • /etc/ftpusers
    • アクセス制御で許可しないユーザを記述
    • 1行につき1ユーザで記載
  • パッシブモードとアクティブモード
    • パッシブモード
      • データ転送用ポートの接続要求をクライアント側から行う
    • アクティブモード
      • データ転送用ポートの接続要求をサーバ側から行う

ProFTPDの設定

  • proftpd.conf
  • Apacheの設定と似ている

vsftpdの設定

  • vsftpd.conf
    • anonymous_enable= YES | NO
      • 匿名ユーザのログインを許可|禁止
    • anon_upload_enable = YES | NO
      • 匿名ユーザによるアップロードを許可|禁止
    • ftp_username=ftp
      • 匿名ユーザ名を指定。デフォルトは「ftp」
  • ftp_username
    • 匿名ユーザを設定
    • デフォルトはftp

Pure-FTPD

  • pure-ftpd.conf
  • pure-ftpdコマンド
    • 起動時にオプションを使用して動作を指定
    • オプション
      • -E 匿名ユーザによるログインを禁止。
      • -e 匿名ユーザのみログインを許可
      • -i 匿名ユーザによるファイルアップロードを禁止

匿名FTPサーバ

  • wu-ftpd
    • 匿名FTPサービスを利用する場合には、chrootを使ってセキュリティを高める

chroot

プロセスによってのルートディレクトリを指定したディレクトリに変更することで、プロセスがシステム全体へのアクセスをできないように閉じ込めた環境

セキュアシェル

OpenSSH

  • LinuxのSSHの実装で利用されている
  • SSHサーバの機能はsshdデーモンにより提供
    • sshdの設定ファイルは/etc/ssh/sshd_config
    • クライアント側のプログラムはsshであり、設定ファイルは/etc/ssh/ssh_config
    • 設定項目
      • Protocol [1|2|1,2|2,1]
        • 受け付けるSSHプロトコルのバージョンを指定
        • デフォルトは2
      • PasswordAuthentication [yes|no]
        • パスワード認証を許可するかを指定
        • デフォルトはyes
      • PermitRootLogin [yes|no]
        • rootユーザのsshログインを許可するかを指定
      • PubkeyAuthentication [yes}no]
        • SSHプロトコルバージョン2で公開鍵認証を許可するかを指定
      • PermitEmptyPasswords [yes|no]
        • 空のパスワードを許可するかを指定
        • デフォルトはno
      • X11Forwarding [yes|no]
        • X11転送を許可するかを指定
        • デフォルトはno
      • AllowUsers,DenyUsers
        • ログインを許可/禁止するユーザ
      • AllowGroups, DenyGroups
        • ログインを許可/禁止するユーザ
  • sshポートフォワーディング
    • あるポートに送られてきたTCPパケットをSSHを使ってリモートホストの任意のポートに転送
    • SSHトンネリングとも呼ぶ
    • 書式
      • ssh -L 転送対象ポート番号:SSHサーバから見た接続先アドレス:SSHサーバからの接続先ポート番号 [SSH接続ユーザー名@]SSHサーバアドレス
      • -L Local port forwarding
    • リモートポートフォワーディング
      • SSHサーバが転送用ポートを用意し、SSHクライアントの指定されたポートの転送する
      • ssh -R 転送対象ポート番号:SSHクライアントから見た接続先アドレス:SSHクライアントからの接続先ポート番号 [SSH接続ユーザー名@]SSHサーバアドレス
      • -R Remote port forwarding

ホスト認証

  • ユーザ認証の前に接続先ホストの正当性を確認する認証
  • 公開鍵暗号方式でホストの正当性を確認。なりすましを防ぐ
  • SSHで接続するリモートホストの公開鍵は「~/ssh/known_hosts」に格納される
  • SSHサーバの秘密鍵と公開鍵(/etc/ssh配下)
    • v1 RSA
      • ssh_host_key
      • ssh_host_key.pub
    • v2 RSA
      • ssh_host_rsa_key
      • ssh_host_rsa_key.pub
    • v2 DSA
      • ssh_host_dsa_key
      • ssh_host_dsa_key.pub
  • ユーザの秘密鍵と公開鍵(~/.ssh/配下)
    • v1 RSA
      • identity
      • identity.pub
    • v2 RSA
      • id_rsa
      • id_rsa.pub
    • v2 DSA
      • id_dsa
      • id_dsa.pub
    • 作成した公開鍵はあらかじめサーバの「~/.ssh/authorized_keys」ファイルに登録しておく

ユーザ認証(公開鍵認証)

  • 公開鍵暗号方式を使ってユーザ認証をする

  • 公開鍵認証の手順

    • あらかじめサーバ側に公開鍵を登録
    • SSH接続時に公開鍵が利用できるかの確認
    • クライアント側は公開鍵にユーザ名等のデータを加え、秘密鍵で署名してサーバ側に送信される
    • サーバ側ではユーザの公開鍵を使って署名を確認する
    • 確認できればログインを許可
  • ssh-agent

    • SSHのクライアント側で稼働するデーモン
    • パスフレーズ入力を省略できる
  • SSHサーバのセキュリティ

    • SSHバージョン1の利用禁止
    • パスワード認証の禁止
    • rootログイン禁止
    • ログインユーザの制限
    • 接続元の制限

セキュリティ業務

セキュリティツール

  • Snort
    • ネットワークインターフェース上のトラフィックを監視し、攻撃や侵入を捕えるIDS
    • ルールセットを参照して不正なパケットを検出
    • ルールヘッダに検出ルールを記載、オプションヘッダにメッセージなどを記載
  • Tripwire
    • ファイルの改竄を検知するためのセキュリティルール
    • ファイルシステムの状況を記録しておくことでファイルの改竄を検知する
    • 検査できる主な項目
      • アクセス日時
      • 更新日時
      • iノード番号
  • OpenVAS
    • オープンソースのセキュリティスキャナでネットワーク経由で脆弱性のチェックができるツール
  • Fail2ban
    • ログファイルを監視して攻撃を検知し、攻撃元のIPアドレスを遮断するソフトウェア。IPS(侵入防止システム)
    • 以下の仕組みで侵入防止を実現
      • jail
        • 「フィルタ」と「アクション」を組み合わせ、アクションとその発動条件を指定
      • iptables
        • jailによって侵入防止の対象となったIPアドレスからのアクセスはiptablesによって接続拒否される
      • /etc/fail2ban/action.d
        • 「アクション名.conf」という定義ファイルに、アクセス遮断動作の実行コマンドなどが記載されている
      • /etc/fail2ban/filter.d
        • 「フィルタ名.conf」という定義ファイルに、監視するログファイルやアクセス遮断を行う対象を抽出するための正規表現などが記載されている
      • /etc/fail2ban/jail.d
        • 個別に作成したjailの定義ファイルを配置するディレクトリ

ポートスキャン

  • 開いてるポート表示のコマンド
    • nmap
    • netstat -atun
    • ss -atun
    • lsof -i -n
    • fuser -v -n tcp 22
  • Nmap
    • ポートスキャンを実行し、ネットワークの調査を行うためのセキュリティツール
    • 空いているポートで提供しているサービスや、ホストで使用しているOSの種類などを調べることができる
    • 書式
      • nmap [スキャンタイプ] [オプション] ターゲット
    • スキャンタイプ
      • -sS
        • TCP SYNスキャン
        • デフォルト
      • -sT
        • TCP connect()スキャン
        • システムコールを使いユーザ権限で動作するTCPスキャン
      • -sU
        • UDPスキャン
    • オプション
      • -F ウェルノウンポートを対象にした高速スキャン
      • -O 相手ホストのOSを検出
      • -p ポート番号 スキャンするポート番号の指定

TCP Wrapper

  • アクセス制御を集中的に管理する仕組み
  • /etc/hosts.allow, /etc/hosts.deny

セキュリティ情報

  • セキュリティの情報源
    • CERT/CC
      • セキュリティインシデントの受付、発生状況の把握を行い、技術支援を行っている組織
    • JPCERT
      • 日本国内におけるCERTの組織
    • CIAC
      • セキュリティインシデントに関する報告を行っている期間
      • 米エネルギー省が運営
    • Bugtraq
      • ソフトウェアのバグ情報を公開するためのメーリングリスト
  • セキュリティ侵害への対応
    • 攻撃
      • 主なコマンドの改ざん
      • ログの改ざんやsyslogの停止
      • 悪意のあるソフトウェア(malware)の導入と使用

OpenVPN

  • VPN
    • Virtual Private Network
    • インターネットを介して専用回線で接続されているかのようにプライベートなネットワークを構築する技術
    • 利用するプロトコルによって強力な暗号化を施し、通信のセキュリティ強度を高めることができる
  • OpenVPN
    • LinuxでVPNを利用するのに使われるソフトウェア
    • 通信はサーバ-クライアント間が基本
    • クライアント同士の通信は通常許可されていない。設定したい場合は以下
      • サーバ側の設定にclient-to-clientディレクティブを使う
      • pushディレクティブを使って、クライアント側にルートを伝達できる
    • PKIを利用する
  • デフォルトで使用するポートは、1194
  • OpenVPNクライアントとOpenVPNサーバを接続する形態には、ルーティング接続とブリッジ接続がある
  • 仮想ネットワークデバイスにTUNおよびTAPを使用する * TUNは仮想PPPネットワークデバイス * TAPは仮想Ethernetネットワークデバイス
  • OpenVPNサーバの設定ファイル
    • /etc/openvpn/server.conf
    • 通信に利用するプロトコル、ポート、認証用のファイルしていなどを行う
    • status項目には、接続中のクライアント、ルーティング情報が書き込まれるファイルが指定されている。1分間隔で更新される
  • OpenVPNクライアントの設定ファイル
    • /etc/openvpn/client.conf
    • 主な設定
      • nobind
        • クライアント側のポート番号を自動割り当てする