SyuchiNikuRingの備忘録

お勉強したことをまとめておく場所。中の人の理解や感覚で書いているから不正確なことも多いかも。

TLS/SSLのお話。

やっほー。前回のエントリで書いた通り、今回はTLS/SSLについて勉強したことをまとめます。

SSL(Secure Socket Layer)とは?
Socketとあることから通信に関係するものであることは何となくわかります。そしてSecureとありますから、通信を安全に行うための何かであろうという予想はつきますね。
SSLTCPの上位ProtocolとしてTCP Socketインターフェイスとアプリケーションの間を構成し、authenticity/confidentiality/integrity/non-repudiationの機能を提供します。またUDPをサポートしません。

  • integrityを実現する暗号方式

message authentication code HMACを使用。
SHA-384/256,SHA-1,MD5が使えます。

  • confidentialityを実現する暗号方式

symmetric key encryptionを使用。
AES/Camellia/IDEA/RC4/RC"/DES3が使えます(versionによります)。

  • non-repudiationを実現する暗号方式(Key Exchangeとdigital signatureのための暗号方式)

TLS/SSLを用いたmessageの暗号化用のKey ExchangeはDH,ECDH,ECDHEなど。
Digital SignatureはRSA, DSA,ECDSAなど。
PSKを用いる方式も存在します。

暗号方式に関してまとめましたが、実際にTLS/SSLで選択される暗号方式の組合せは、clientとserverとの通信で決まります。

TLS/SSL脆弱性に関して
2014年2月に発見されたheartbleedバグはOpenSSLの特定バージョンに存在します。このバグは、攻撃者がいつでもどこでも何度でも痕跡を残さずにサーバ内のメモリからデータを読み出すことを可能にします。脆弱性はCVE2014-0160,CVE2013-0169,CVE2013-2566です。特に,CVE2013-0169はOpenSSLなどでTLS1.1又は1.2をブロック暗号モードで使うとLucky Thirteen攻撃*を受けうるもので、,CVE2013-2566はTLS/SSL通信にRC4を使うとコネクションから平文を得られるというものです。
[Lucky Thirteen攻撃]
攻撃者がリモートから端数が出るパケットを投げて、TLSがブロック長形成のためにパディング処理を行っているときのメッセージ認証コードの値の計算時間差をタイミング攻撃で統計的に解析して平文回復攻撃などを行うこと。

ここからはProtocolのお話になります。

  • FTP(File Transfer Protocol)

そのままですね。ファイル転送用のProtocolとプログラムです。
FTPの通信は制御用(TCP21番)とデータ転送用です。

◎Active Mode
データ転送portはTCP20番。clientがデータ転送用にオープンし待機するportをserverに通知。serverはTCP20番を送信元として通知されたclinet portに対してデータ転送用のTCPコネクションを3 way handshakeで確立します。
FTP Clientがファイアウォール内の場合】
FTP Serverからの接続要求は拒否される。当たり前ですね。
ファイアウォールを通過するためには、ServerからClientへの【ソースPort=TCP20番、宛先Port=TCP任意】という着信パケットを通過させるようにファイアウォールを設定しなければなりません。
しかしこれは脆弱な設定です。ではどうするのか。もう一つのModeを使います。

◎Passive Mode
Clientがアクセスするときにpassiveであることとデータportを通知して、serverが自身のデータ転送port番号を通知します。その後、clientからserverにデータ転送用のTCPコネクションを3 way handshakeで確立します。clientからinternetの流れなので、脆弱な設定をすることなくファイアウォールFTPパケットを通過せることができます。

SSLを用いてFTP serverのauthenticationと通信の暗号化を行います。デフォルトのportはTCP990番。暗号化ModeにはImplicitとExplicitの2種類あります。
◎Implicit
FTPS Serverにclientが接続するとTLS/SSL通信を開始します。確かに黙示的ですね。
◎Explicit
clientが認証コマンドを実行してTLS/SSL protocolの選択を行います。コマンドを実行しなければFTPに接続します。確かに明示的ですね。

ではFTPのセキュリティはどうなっているのでしょうか。
FTPの認証は、誰でもアクセス可能な匿名認証とuser-nameとpasswordが要求される基本認証があります。基本認証のuser-nameとpasswordは暗号化されずプレーンな状態でネットワークを流れます。(‼)

  • TFTP(Trivial FTP)

これはUDPを用いたconnection-less Modeで動作します。接続時の認証はありません。デフォルトのportはUDP69番です。Protocolが単純なのでアプリのサイズを小型化でき、ネットワーク機器やdisk-lessのコンピュータなどのROMにアプリを搭載可能で、シスコのルータなどに利用されています。

今回はいったんここまで。次回はTelnetなどに関してまとめます。