9.1. ネットワークセキュリティの強化

9.1.1. ネットワークノードの認証とアクセス制御 (FreeRADIUS)

RADIUSの理解

RADIUS

Radius(Remote Authentication Dial-In User Service)は接続するユーザーとネットワーク サービスに一元的な認証、認可、アカウンティング(通称AAA)を提供するプロトコルのこと。

  • 認証(Authentication) … クライアント (ユーザー、デバイス、またはプロセス) がシステムの本物のユーザーであるかどうかを判断するプロセス
  • 認可(Authorization) … クライアントがネットワーク上で何を行うことが許可されているかを決定するプロセス
  • アカウンティング … ネットワーク上のクライアントのアクティビティを監視し、サービスのコストを計算するために必要な情報を提供するプロセス

実装にあたって、3つの AAA プロトコルすべてを使用する必要はなく、必要なプロトコルのみを使用する。

RADIUSの特徴

Radiusの特徴は以下の通り。

  • AAAの採用
  • UDPベースでやり取りを行う
  • 基本機能でPPPのPAP認証のサポート
  • 拡張機能としてCHAP機能のサポート
  • ユーザ認証を一元管理できる

FreeRADIUSの設定と利用

FreeRADIUS

FreeRADIUSはOSSのRadius実装で最も広く使用されている RADIUS サーバのこと。
FreeRADIUSは認証サービスを提供するradiusdデーモンを提供する。

インストールとサービスの開始

# インストール
dnf install  freeradius freeradius-utils freeradius-mysql freeradius-perl
# サービスの開始
systemctl enable radiusd --now

/etc/raddb/*

/etc/raddb/*以下にFreeRADIUSの設定ファイルが格納される。
代表的な設定ファイルは以下の通り。

  • radiusd.conf … FreeRADIUSのプライマリ設定ファイル。サーバーのログ記録とパフォーマンスの設定ができる
  • client.conf … クライアント構成ディレクティブ
  • proxy.conf … プロキシ半径およびrealm設定ディレクティブ
  • policy.d

基本設定例

デフォルトの構成を使用することがサーバの設定を最も破壊せずに使用できる方法といえる。 この場合、ユーザとパスワードの設定のみでよくなる。 手順は以下の通り。

  1. /etc/raddb/clients.confを編集してエントリ追加する
  2. ipaddrにクライアントIP、secretには通信の暗号化と復号化に使用される共有秘密を指定
  3. /etc/raddb/usersを編集しユーザアカウントを作成する
  4. testing Cleartext-Password := "password"のように設定
  5. サーバーをデバッグモードで起動する(radiusd -X)

なお、クライアントの設定方式は以下のようになる。

client test {
    ipaddr = 192.168.0.0/24
    secret = test_abcz
}

Radmin

radminは実行中のサーバーの制御ソケットに接続し、それにCLIを提供するFreeRADIUSサーバー管理ツールのこと。

radmin <オプション>
オプション説明
-dデフォルトは/etc/raddb。 radmin はここでサーバー構成ファイルを検索し、制御ソケットのファイル名を定義する「listen」セクションを見つけます。
-D 辞書ディレクトリメイン辞書ディレクトリを設定する。 デフォルトは/usr/share/freeradiusとなる
-e コマンドコマンドを実行して終了する
-E実行中のコマンドをEchoする
-f ソケットファイルソケットファイル名を直接指定する
-hヘルプ情報の表示
-i 入力ファイル指定されたファイルから入力を読み取る。指定しない場合はstdin が使用される
-n 名前/raddb/radiusd.confの代わりに/raddb/name.confを読み取る

radtestコマンド

FreeRADIUS サーバーが動作可能になった際に、アカウントをテストできるコマンド。

radtest {username} {password} Pradius-server} {nas-port-number} {radius_secret}
オプション説明
-4RADIUSサーバのIP指定にIPv4を使用
-6RADIUSサーバのIP指定にIPv6を使用
-t [認証方式]pap,chap,mschap,eap-md5のいずれかを指定

使用例は以下の通り。

radtest testing mypass localhost 0 s3cre3t

radiusedコマンド

RADIUSサーバのデーモンでAAAとして動作する。

radiused -p 11812
オプション説明
-p [ポート]受信するポートを指定
-Xデバックモード

radlastコマンド

radlastコマンドはlastコマンドのFreeRADIUS サーバーにおけるフロントエンド。
RADIUSクライアントに最近ログインしたユーザを表示できる。

radlast <オプション>

radwhoコマンド

radwhoコマンドは現在ログオンしているユーザーを表示するコマンド。

radwho <オプション>

9.1.2. ネットワークトラフィックの分析とフィルタリング

tcpdumpによるトラフィックのキャプチャと分析

tcpdumpコマンド

tcpdumpはシステムを通過する TCP/IP パケットなどのネットワーク トラフィックをキャプチャ、フィルタリング、分析するために使用できるコマンド。
システム管理者が Linux での接続の問題をトラブルシューティングするためのコマンドともいえる。

なおtcpdumpを用いて.pcapファイルにパケット情報を保存することもできる。

tcpdump <オプション> [条件式]
オプション説明
-i <インターフェイス>指定したインターフェイスの監視
-nホスト名ではなくIPアドレスの表示
-r <ファイル>ファイルからパケット情報を取得
-w <ファイル>パケット情報をファイルへ出力する
-s <バイト数>パケットを取り出すバイト数を指定する
-xパケット内容を16進数で表示する
-Xパケット内容を16進数とASCII文字列で表示する
-pプロミスキャスモードにしない
-mMIBモジュールを読み込む
条件式修飾子説明
host <ホスト>送信先/送信元がホストならば真
port <ポート番号>送信元/送信先がポート番号ならば真
src <送信元>
dst <送信元>
送信元/送信先の条件指定
and , or複合条件の設定
# 192.168.1.22のパケットを表示
tcpdump host 192.168.1.22
# 192.168.1.22のポート80のパケットを表示
tcpdump host 192.168.1.22 and port 80
# 192.168.3.0/24のパケットをASCIIと16進数で表示
tcpdump -s0 -i eth0 -X net 192.168.3.0 mask 255.255.255.0

Wireshark/TSharkによるパケット分析

WireShark

Wireshark はパケットを分析するためのGUIツール。 Wireshark は GUI ツールだが、tshark として知られる CLI に相当するツールがある。

Wiresharkでは、条件を指定することで表示するパケットをフィルタリングすることができる。

フィルタ条件説明
gateway <ゲートウェイ>特定のゲートウェイを通過するパケットのみキャプチャ
host <ホスト>送信先/送信元がホストのパケットをキャプチャ
net <ネットワーク>対象のネットワークを流れるパケットをキャプチャ
[tcp/udp] port <ポート>対象プロトコルのポートが流れるパケットをキャプチャ
src/dst <送信元>送信先/送信元が送信元/送信先のパケットのみをキャプチャ
portrange A-Bポート番号A-Bの範囲のパケットをキャプチャ

条件式は以下の通り。

  • A eq B … A=B
  • A gt B … A>B
  • A ge B … A>=B
  • A lt B … A<B
  • A le B … A<=B
  • A and B … AかつB
  • A or B … AまたはB
  • not <条件式> … 条件満たさないとき
  • A[パターン] == B … パターンがBに合致でおk
# =============
# 各フィルタ式
# =============
# ゲートウェイのキャプチャ
gateway gwhost
# 送信先が192.168.21.0/24のパケットすべてをキャプチャ
dst net 192.168.21.0/24
# 送信元/送信先ポートが12345を利用すrパケットすべてをキャプチャ
tcp port 12345
# IPアドレスが192.168.0.240のパケットのみを表示
ip.addr == 192.168.0.240
# TCPポートが8080のパケットのみを表示
tcp.port == 8080
# HTTP/DNSパケットのみを表示
http or dns
# TCPポート1500~1599までのパケットのみを表示
tcp portrange 1500-1599

Tshark

TSharkはWireSharkのCUIユーティリティ。 使用できるコマンドは以下の通り。

tshark [オプション]
オプション説明
-D有効なネットワークインターフェイス一覧表示
-i <インターフェイス>ネットワークインターフェイスを指定
-f <フィルタ条件>キャプチャするパケットフィルタ
-w <ファイル>キャプチャしたパケットをファイルへ保存
-r <ファイル>ファイルからパケット情報を読みこむ
-z <項目>項目に対する統計情報を出力
-V詳細表示
# 送信元/送信先IPが172.10.0.20のパケットをキャプチャ
tshark -i 1 -f 'host 172.10.0.20'
# ポート80を通過するパケットの詳細情報のキャプチャ
tshark -i 1 -V -f 'port 80'
  • A eq B … A=B
  • A gt B … A>B
  • A ge B … A>=B
  • A lt B … A<B
  • A le B … A<=B
  • A and B … AかつB
  • A or B … AまたはB
  • not <条件式> … 条件満たさないとき
  • A[パターン] == B … パターンがBに合致でおk

9.1.3. ワイヤレスネットワークのセキュリティと脅威

ワイヤレスネットワークの解析とトラフィック取得

Kismet

Kismetはワイヤレス ネットワークとデバイスの検出器、スニファー、ワードライビング ツール、および WIDS (ワイヤレス侵入検出) フレームワークのこと。

kismet_clientkismet_dronekismet_serverコマンド/ユーティリティで構成される。

ワイヤレスネットワークのセキュリティ機構と攻撃

aircrack_ng

aircrack_ngはWiFi ネットワークのセキュリティを評価するためのツール。 可能なことは以下の通り。

  • モニタリング … パケットのキャプチャとデータのテキスト ファイルへのエクスポートにより、サードパーティ ツールによるさらなる処理が可能
  • 攻撃 … パケットインジェクションによるリプレイ攻撃、認証解除、偽のアクセスポイントなど
  • テスト … WiFi カードとドライバーの機能を確認する (キャプチャとインジェクション)
  • クラッキング … WEP および WPA PSK (WPA 1 および 2)

Bettercap

BettercapはIEEE.802.11、BLE、IPv4、IPv6 ネットワークの偵察と MITM 攻撃用のツール。

不正なネットワークメッセージの確認と取り扱い

不正ルーターによるアドバタイズメント

不正ルータによるルータ通知(アドバタイズメント)を防ぐにはカーネルを調整することで軽減できる。設定すべきファイルは以下の通り。

  • /proc/sys/net/ipv6/conf/<interface>/forwarding
  • /proc/sys/net/ipv6/conf/<interface>/accept_ra

Rouge DHCP メッセージ

DHCP スヌーピングを使用して対処できる。

ndpmon

ndpmonはNDP(Neighbor Discovery Protocol)を監視するツール
NDPに関する状況をlogに記載したり、アラートメールを送信することも可能。

NDPはIPv6においてデータリンク層のアドレス解決を行うプロトコル。 NDPで利用されるメッセージの一つに、IPv6ルータからの応答であるルータ広告(RA:Router Advertisement)がある。RAはICMPv6を用いたグローバルIPアドレスのプレフィックスなどの情報で、悪意ある攻撃者がルータに成りすますとRAが書き換えられ不正なRAが発信される可能性がある。

ndpmonは、NDPをモニタリングすることにより、不正なRAを検出することができる。