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
基本設定例
デフォルトの構成を使用することがサーバの設定を最も破壊せずに使用できる方法といえる。 この場合、ユーザとパスワードの設定のみでよくなる。 手順は以下の通り。
- /etc/raddb/clients.confを編集してエントリ追加する
- ipaddrにクライアントIP、- secretには通信の暗号化と復号化に使用される共有秘密を指定
- /etc/raddb/usersを編集しユーザアカウントを作成する
- testing Cleartext-Password := "password"のように設定
- サーバーをデバッグモードで起動する(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}| オプション | 説明 | 
|---|---|
| -4 | RADIUSサーバのIP指定にIPv4を使用 | 
| -6 | RADIUSサーバのIP指定にIPv6を使用 | 
| -t [認証方式] | pap,chap,mschap,eap-md5のいずれかを指定 | 
使用例は以下の通り。
radtest testing mypass localhost 0 s3cre3tradiusedコマンド
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 | プロミスキャスモードにしない | 
| -m | MIBモジュールを読み込む | 
| 条件式修飾子 | 説明 | 
|---|---|
| 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.0Wireshark/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-1599Tshark
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_clientとkismet_drone、kismet_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を検出することができる。