Webシステムで「セキュリティ」といってまず最初に名前が上がるのがSSLかと思いますが、SSLはどういう攻撃を防げて、どのような攻撃には耐えられないのでしょうか。
SSL/TLSの概要
SSL/TLSの通信を確立する際には、以下のような処理が行われます(参考)。
- 証明書の提示、相手の認証1
- 暗号鍵の交換
暗号接続が失敗すれば、(きちんと設定して2)接続自体が成立しないということになります。逆に接続が成立すれば、あとの通信は暗号化した通信路上で行なわれます。
防げる攻撃
これで防げる攻撃としては、「相手の認証」によるものと「暗号化・認証符号」によるものに分けられます。
- 相手先を認証することによるもの→なりすましや中間者攻撃によって、一時的に接続を奪った第三者が本来のサイトになりすますのを防ぐ、EV SSLとして団体名を表示するなど
- 暗号化・認証符号によるもの…第三者の盗聴・改ざんに対する対策となる
防げない攻撃
ほぼすべてのセキュリティ対策3は、ある特定の攻撃に対しての対策でしかありません。SSLのプロトコルやその実装に脆弱性が出ることもありますし、そうでなくても以下のような攻撃は成立します。
- SSLのかかっていない、サーバそのもの、あるいはブラウザ~ユーザーに対する攻撃(サーバへの不正侵入、Man in the Browser、ソーシャルエンジニアリングなど)
- SSLに載せたリクエスト上から行える攻撃(SQLインジェクション、XSS、CSRFなど)
- ルート証明書の不正追加(Superfishなど、実際に問題となりました)
- 中間者による通信の切断
- 攻撃者自身が自分のサイトでSSLを適用する、という手段もあります(間違ったドメインで来た人を相手に攻撃を仕掛ける)
- 証明書発行時にDNS偽装を行うことで、不適切なSSL証明書を発行させる