概要
TLSネゴシエーションには個々のクライアントごとにパラメータ等の十分な違いがあり、それらをハッシュ化して識別しようというもの。2015年頃に発表された研究が基礎になっているらしい。
フィンガープリント・・・指紋
なのでTLS接続を利用して採取する接続元クライアントの指紋、のようなイメージ。
IPブラックリストと同様にWAFに設定して利用するのが主流と思われる。
TLSとは
インターネットを経由するクライアントとサーバー間の通信を暗号化するためのプロトコル。SSLが進化してTLS。SSL/TLSとも呼ばれる。
セキュリティ的な観点では、SSL1.0/2.0/3.0及びTLS1.0/1.1には脆弱性が存在していることから現在は非推奨である。TLS1.2か1.3を使うのが一般的(2024年8月現在)
TLSフィンガープリントの取得
代表手法であるJA3について記述する。
TLSを用いた通信では、まずクライアントとサーバー間で暗号化のための「共通鍵」を交換しなければならない。この手順を、TLSハンドシェイクと呼ぶ。
TLSハンドシェイクは鍵交換の流れ全体を指すのに対し、TLSネゴシエーションは暗号アルゴリズム選択のステップに焦点をあてたものを指す。
TLSハンドシェイクは、クライアントからサーバーへの通信(Client Hello)から始まる。
SSL/TLS通信を開始するため、以下の情報をサーバーへ伝える。
- SSL/TLSのバージョン
- 受け入れられる暗号(暗号スイート)
- 拡張リスト
- サポートされるグループ
- 楕円曲線フォーマット
など
これらの情報はブラウザの実装に大きく依存しており、クライアントごとに固有のパラメータとなりやすい。そのためアクセスしてきたクライアントのパケット(Client Hello)を観測し、これらの情報をハッシュ化したものがTLSフィンガープリントとなる。
具体的な手順としては、下記の通り。
- それぞれの情報のバイト列を10進数に変換
- 10進数文字列を連結
- 連結文字列をMD5でハッシュ化
ちなみにMD5は脆弱なハッシュ関数として知られているが、目的が暗号化ではないため問題ないのだと思う。反対にコンパクトな形式であることから検索性の向上にも繋がるらしい。
誤検知について
TLSフィンガープリントの特徴として、誤検知の可能性が挙げられる。
接続元クライアントの識別方法としてはグローバルIPアドレスが最も一般的であるが、TLSフィンガープリントを利用した場合、正規のユーザーが攻撃者と同じ(あるいは似ている)動きをみせた場合に誤検知の可能性が生じる。
裏を返せば、攻撃者が正規のユーザーに似せた動きを取ることで検知を回避できてしまうことになる。
TLSフィンガープリントを利用したブラックリストを有効化する際は上記に注意が必要。
所感
IPアドレスをコロコロ変えるように、攻撃者もTLSネゴシエーションのパラメータを変更すれば異なるフィンガープリントを装えるため、結局イタチごっこにはなりそう。
ただTLSネゴシエーションを偽装させる手前をかける、という意味では効果はあるのかもしれない。
以上
参考文献
以下の情報を参考とさせていただきました。