Contents
1. Application Layer Inspection とは?
簡単にいうと:
L7(アプリケーション層)のプロトコルの中身を理解して、正しい通信か・許可すべき内容かを判断する機能
従来の ACL やステートフルは、
- IP(送信元/宛先)
- ポート番号(80, 443, 53…)
- TCP/UDP/ICMP
といった L3/L4 情報までしか見ません。
でも現実の攻撃や制御は:
- HTTP の URL パス
- HTTP メソッド(GET, POST, PUT, DELETE…)
- FTP のコマンド(PUTは禁止、GETだけ許可 など)
- DNS クエリの中身(サイズ異常、トンネリング)
- SIP の中に書かれている音声用ポート番号
など、もっと中身を見ないと判断できないことが多い。
ここをやるのがアプリケーションインスペクションです。
2. 何ができるのか?
代表的には、以下のようなことをします。
① プロトコルが正しいかチェック
- HTTP, FTP, DNS, SIP などの フォーマットを検証
- 不正なヘッダ構造・変な長さ・仕様外の動きを検出
→ 単純なバグ悪用・脆弱性攻撃の一部を防げる
② 中身を見て「細かい制御」ができる
- HTTP の URL・メソッド・ヘッダ を見て制御
- FTP の PUT(アップロード)禁止、GETのみ許可
- SMTP で添付ファイルのサイズ制御 など
③ 複雑なプロトコルの補助(ALG 的な役割)
FTP / SIP / H.323 / RTSP などは、
- 「制御チャネル(決めごと)」の中で
- 「データチャネル(実際の通信)のIPとポート」を決める
例:FTPの PORT / PASV コマンドの中に「このIP:portに接続してね」と書いてある。
FW はこの部分を読んで、
必要なポートだけを一時的に開ける(ピンホール)という賢いことができる。
3. L7インスペクションの代表プロトコル
🔹 HTTP インスペクション
- メソッド(GET/POST/PUT/DELETE…)を見て制御
- URL や ホストヘッダ、User-Agent などをチェック
- 異常な長さのリクエストやヘッダをブロック
→ WAFほど細かくはないが、簡易的な HTTP 防御と制御に使える
🔹 FTP インスペクション
- PORT / PASV コマンドを解析
- 制御チャネル(21番)だけ ACL で許可しておけば、
データ用ポートは FW が自動で判断して開ける - PUT/GET コマンドを見て「アップロード禁止」なども可能(機種による)
🔹 DNS インスペクション
- DNS メッセージサイズのチェック(DNSアンプ攻撃対策や異常トラフィック検出)
- 不正な形式のクエリをブロック
- DNSトンネリングの一部検出に寄与(高度なのは IPS 領域)
🔹 SIP / H.323 / RTSP など(VoIP・メディア系)
- INVITE / SDP メッセージの中の メディアポート情報 を読む
- そこに書かれている IP:port だけ一時的に許可
→ 「全部の高番ポートを開けなくても VoIP を通せる」
🔹 SMTP / POP3 / IMAP
- メールのコマンド・ヘッダをチェック
- メールサイズ、宛先ドメインなどで制御
- 一部のマルウェア的な挙動をブロック(高度な部分は IPS/AV)
4. ASA / Firepower でのインスペクションの位置づけ
🔸 ASA(クラシック)では
ASA では MPF(Modular Policy Framework) を使って L7インスペクションを設定します。
典型的なデフォルト設定イメージ:
class-map inspection_default
match default-inspection-traffic
policy-map global_policy
class inspection_default
inspect dns
inspect ftp
inspect http
inspect icmp
inspect icmp error
inspect sip
...
!
service-policy global_policy global
class-map inspection_default:よく使うプロトコルをまとめたクラス
policy-map global_policy:上記に対して inspect xxx を有効化
service-policy ... global:全トラフィックに適用
「inspect http」「inspect ftp」などが アプリケーションインスペクションのON だと思ってOKです。
例:HTTPインスペクションを細かくする
policy-map type inspect http HTTP_POLICY
parameters
protocol-violation action drop-connection log
max-header-length 8192
max-url-length 1024
!
policy-map global_policy
class inspection_default
inspect http HTTP_POLICY
こうすると:
- RFC違反のHTTPはドロップ&ログ
- 異常に長いURLやヘッダもドロップ
などの制御が可能。
5. L7インスペクションと「URLフィルタ」「IPS」との違い
よく混ざるので整理しておきます。
Application Inspection(L7インスペクション)
- HTTP/FTP/DNS/SIP などの「プロトコルの構造」を理解して処理
- プロトコル違反・変なサイズ・変なコマンドを検出
- FTPやSIPのような 複雑プロトコルの動作補助(ALG) も担当
URLフィルタリング
- 「どの URL / ドメイン / カテゴリのサイトか?」で制御
- カテゴリDB(ギャンブル/アダルト/SNS/ニュース…)を参照
IPS / IDS
- 既知の攻撃シグネチャで検査
- 「このパターンはこの脆弱性攻撃」という形で検出・ブロック
→L7インスペクションは「プロトコルの文法チェック+動作の補助」
→ URLフィルタ・IPSはその上に乗る高度なセキュリティレイヤというイメージです。
6. HTTPS(暗号化)時の制限
アプリケーションインスペクションが本気を出せるのは 平文のとき(HTTPなど)。
HTTPS になると中身が暗号化されるので、FWからは
- 宛先IP
- ポート(443)
- SNI(Server Name Indication:アクセス先ホスト名)くらい
しか見えません。
より深いHTTP中身を見たい場合:
- TLS復号(SSL Decrypt / SSL Inspection) を有効にして
- FWで一旦復号 → L7インスペクションやIPS/URLフィルタをかける
という構成が必要になります(主にNGFWでやる世界)。
7. まとめ
アプリケーションインスペクションとは:
- L7プロトコルの中身(コマンド・ヘッダ・URLなど)を理解して
- 異常や危険な振る舞いをブロックしつつ
- FTP/SIPなど複雑プロトコルのために
必要なポートだけを自動で開ける頭脳 のような役割
ASA では inspect http / ftp / dns / sip ... の設定が、
まさにこの Application Layer Inspection に相当します。