セキュリティ実装技術
SSL/TLSやIPSecなどのセキュアプロトコル、SPF・DKIMなどのスパム対策とOAuth、パケットフィルタリングやハニーポット、セキュアプログラミングを理解できるようになります。
ねらい
セキュリティをシステムに実装する技術を学びます。このレッスンを終えると、通信を守るセキュアプロトコル、メールの送信元を確かめる認証技術、ネットワークとデータベースの防御、安全なプログラムの書き方の基本を説明できるようになります。
ストーリー
ブラウザのアドレス欄に表示される鍵のマーク。あの小さなマークの裏では、SSL/TLSというプロトコルが通信を暗号化し、証明書がサーバの身元を保証しています。守る技術は、こうして具体的なプロトコルやコードの形でシステムに実装されて、初めて力を発揮します。
セキュアプロトコル:通信を守る
盗聴や不正接続を防ぐ通信の約束ごとがセキュアプロトコルです。
| プロトコル | 守る場所 |
|---|---|
| SSL/TLS | トランスポート層の上で通信を暗号化する。Webで使うとHTTP over TLS(HTTPS) |
| IPSec | IP(ネットワーク層)のレベルで暗号化する。VPNの土台 |
| SSH | 遠隔ログインやファイル転送を暗号化する |
| WPA2、WPA3 | 無線LANの通信を暗号化する。WPA3がより新しい |
WPA2・WPA3は無線LANの区間、IPSecはIP(ネットワーク層)、SSL/TLSはトランスポート層より上と、それぞれ守る区間が異なります。SSHは通信の内容にかかわらず、遠隔ログインなどの通信を個別に暗号化します。
認証・認可の技術
メールのなりすまし・スパム対策
迷惑メール対策には、統計的に判定するベイジアンフィルタリングと、送信元ドメイン認証があります。送信元認証では、送信元のIPアドレスを確かめるSPF、デジタル署名で確かめるDKIM、両者の結果の扱いを定めるDMARCを組み合わせます。送信時の利用者認証にはSMTP-AUTH、プロバイダから外部への直接送信を止めるOP25Bという対策もあります。メール本文そのものの暗号化と署名には、PGPやS/MIMEを使います。
認可と接続時認証
パスワードを渡さずに「この範囲の操作を許可する」ことを実現する認可の仕組みがOAuthで、外部サービス連携の標準です。DNSの応答が本物であることを保証するDNSSEC、無線LANや有線LANの接続時認証の枠組みであるEAP(EAP-TLSやPEAP)と認証サーバのRADIUSも実装の道具です。
ネットワークとデータベースの防御
ネットワークの防御では、通信の宛先や種類で通すかを決めるパケットフィルタリング、機器を物理アドレスで絞るMACアドレスフィルタリング、認証してからVLANへつなぐ認証VLAN、NATや複数の端末で1つのアドレスを共有するIPマスカレード(NAPT)、公衆網上に安全な通信路を作るVPNを組み合わせます。わざと攻撃させて手口を観察するおとりのハニーポット、外部からの要求を仲介するリバースプロキシという仕掛けもあります。
データベースセキュリティの基本は、データベース暗号化、データベースアクセス制御、データベースバックアップ、そしてログの取得です。誰がいつ何をしたかの記録が、事故の検知と調査の土台になります。
アプリケーションセキュリティ
攻撃に耐えるプログラムを書く実践をセキュアプログラミングといいます。代表的な対策を攻撃と対で覚えましょう。
- SQLインジェクション対策は、入力値を問合せ文に直接埋め込まず、プレースホルダを使って値として渡します。同じ入力値でも、文に直接埋め込めば注入コードとして実行されてしまいますが、値として渡せば注入は成立しません。
- クロスサイトスクリプティング対策は、出力時に特殊文字を無害化します。
- バッファオーバーフロー対策は、入力の長さを検査します。
- パスワードクラック対策は、パスワードをそのまま保存せず、ソルトという乱数を加えてからハッシュ化します。
作ったプログラムは、脆弱性検査技術で確かめます。ソースコードを実行せずに調べるソースコード静的検査、動かして調べるプログラムの動的検査、異常なデータを大量に与えて挙動を見るファジングがあります。コンテナで動くシステムにはコンテナセキュリティ、Webシステム全体にはWebシステムのセキュリティ対策という観点で備えます。
例題
次の問いに答えてください。
問1 無線LANの通信を暗号化するプロトコルのうち、より新しい規格はWPA2とWPA3のどちらですか。
問2 パスワードを保存するとき、乱数を加えてからハッシュ化する対策で加える乱数を何といいますか。
解答と解説
問1の答えはWPA3です。無線LANの暗号化はWPA2からWPA3へと強化されてきました。
問2の答えはソルトです。同じパスワードでも異なるハッシュ値になるため、漏えいしたハッシュ値からの割り出しが難しくなります。
応用
本試験を意識した問題を解いてみましょう。
問 SQLインジェクション攻撃への対策として、適切なものはどれでしょうか。次の中から選んでください。
- 入力値を問合せ文に直接埋め込まず、プレースホルダを使って値として渡す
- パスワードにソルトを加えてからハッシュ化して保存する
- 通信をSSL/TLSで暗号化する
- 送信元ドメイン認証のSPFを導入する
解答と解説
答えは1です。プレースホルダを使うと、入力値は常に「データ」として扱われ、問合せ文の一部として解釈されないため、注入攻撃が成立しなくなります。2のソルトはパスワードクラック対策であり、データベースへの問合せ文の注入を防ぐものではありません。3のSSL/TLSは通信経路の盗聴を防ぐ対策で、アプリケーションに届いた入力値の扱いには関与しません。4のSPFはメールの送信元のなりすましを検出する仕組みであり、Webアプリケーションへの攻撃対策ではありません。
分からなかった点・気になった点
読み込み中です。