POODLE (Padding Oracle On Downgraded Legacy Encryption) と呼ばれる攻撃方法を回避するために、SSL 3.0 の無効化が推奨されました。
apache, sendmail 等メジャーなプログラムはその方法が多く掲載されていますが、マイナーな FTP サーバプログラム bsdftpd-ssl 1.1.0 における無効化の方法を記載します。
調べた限りでは、apache, sendmail 等と異なり設定ファイルでの調整では無効化出来ませんでした。そのため、ソースファイルを修正して再度コンパイルします。
ポイントは sslapp.c で SSL 2.0, 3.0 の無効を明言することです。
ログファイルや ftps コマンドでのプロンプトでは、SSLv3, TLSv1 どちらのバージョンでも TLSv1/SSLv3 と表記されるため、ftpd.c, util.c の修正により明示することが可能です。
# diff update/ftpd.c bsdftpd-ssl-1.1.0/ftpd/ 4773c4773 < SSL_get_version(ssl_con), SSL_CIPHER_get_name(ssl_cipher), ssl_bits); --- > ssl_version, SSL_CIPHER_get_name(ssl_cipher), ssl_bits); # diff update/sslapp.c bsdftpd-ssl-1.1.0/ssl/ 137,138c137 < /* SSL_CTX_set_options(ssl_ctx, SSL_OP_ALL); */ < SSL_CTX_set_options(ssl_ctx, SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3); --- > SSL_CTX_set_options(ssl_ctx, SSL_OP_ALL); # diff update/util.c bsdftpd-ssl-1.1.0/ftp/ 1002c1002 < SSL_get_version(ssl_con), SSL_CIPHER_get_name(ssl_cipher), --- > ssl_version, SSL_CIPHER_get_name(ssl_cipher),
sslapp.c で意図的に無効化することで挙動の確認を取りました。まずは TLSv1 を無効化して、SSLv2, SSLv3 が有効化されている状態です。
SSL_CTX_set_options(ssl_ctx, SSL_OP_ALL | SSL_OP_NO_TLSv1);
# /var/log/xferlog Dec 23 09:47:40 hs ftpd[47022]: TLS/SSL SUCCEEDED WITH hs (FTP-TLS, SSLv3, cipher AES256-SHA, 256 bits) # ftps Connected to hs.drive.ne.jp. 220 Drive Network FTP Server Ready Name (hs:adn): 234 AUTH TLS command successful. [SSLv3, cipher AES256-SHA, 256 bits]
次に、本来の措置 SSLv2, SSLv3 を無効化した場合です。
SSL_CTX_set_options(ssl_ctx, SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3)
# /var/log/xferlog Dec 23 09:54:52 hs ftpd[6198]: TLS/SSL SUCCEEDED WITH hs (FTP-TLS, TLSv1, cipher AES256-SHA, 256 bits) # ftps Connected to hs.drive.ne.jp. 220 Drive Network FTP Server Ready Name (hs:adn): 234 AUTH TLS command successful. [TLSv1, cipher AES256-SHA, 256 bits]