再ネゴシエーション機能がオンされているかどうかを検出します.

8830 ワード

背景
サーバ端の再鍵交渉のオーバーヘッドは少なくともクライアントの10倍であるため、攻撃者は、このプロセスを利用してサーバにサービス拒否攻撃を開始することができる.OpenSSL 1.0.2および以前のバージョンは影響を受けます.
方法
OpenSSL(linuxシステムは基本的にすべて持ちます)を使ってサーバと接続してテストを行います.
-openssl s_client-connect ip:port-HEAD/HTTP/1.0-R

サーバ443ポートがオープンし、再交渉が行われます.client-connect 172.31.0.22:443接続テスト(証明書の一部を削除しました):
[root@localhost ~]# openssl s_client -connect 172.31.0.22:443 
CONNECTED(00000003)
depth=0 CN = HTTPS-Self-Signed-Certificate
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = HTTPS-Self-Signed-Certificate
verify return:1
---
Certificate chain
 0 s:/CN=HTTPS-Self-Signed-Certificate
   i:/CN=HTTPS-Self-Signed-Certificate
---
Server certificate
-----BEGIN CERTIFICATE-----
......
-----END CERTIFICATE-----
subject=/CN=HTTPS-Self-Signed-Certificate
issuer=/CN=HTTPS-Self-Signed-Certificate
---
No client certificate CA names sent
Server Temp Key: DH, 1024 bits
---
SSL handshake has read 1254 bytes and written 463 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: AAF98A92D700189C29EEFE766769E6E5641BAC6A9AB96BC7D1302AE79D21CA06
    Session-ID-ctx: 
    Master-Key: 36FC13A9ADBC82EB9E0CC60F9981E2A3D6A2BEC093A0415AFB2A843880174709BB1A87946AA698D95DA3788C72D621CB
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    TLS session ticket lifetime hint: 3600 (seconds)
    TLS session ticket:
    Start Time: 1567604880
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---
HEAD / HTTP/1.0
R
RENEGOTIATING
140432695093152:error:14094153:SSL routines:SSL3_READ_BYTES:no renegotiation:s3_pkt.c:1242:
SSLの握手が完了したら、HEAD/HTTP/1.0を入力して、車に戻って、“R”を入力して再協議をトリガします.この時、サーバーがエラーを報告し、接続を切断します.
140432695093152:error:14094153:SSL routines:SSL3_READ_BYTES:no renegotiation:s3_pkt.c:1242:
サーバ再ネゴシエーション機能がオフされていることを説明します.
 
サーバ4443ポートで再交渉を開始し、openssl s_を使用する.client-connect 172.31.0.22:4443接続テスト(証明書の一部を削除しました):
[root@localhost ~]# openssl s_client -connect 172.31.0.22:4443
CONNECTED(00000003)
depth=0 CN = HTTPS-Self-Signed-Certificate
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = HTTPS-Self-Signed-Certificate
verify return:1
---
Certificate chain
 0 s:/CN=HTTPS-Self-Signed-Certificate
   i:/CN=HTTPS-Self-Signed-Certificate
---
Server certificate
-----BEGIN CERTIFICATE-----
......
-----END CERTIFICATE-----
subject=/CN=HTTPS-Self-Signed-Certificate
issuer=/CN=HTTPS-Self-Signed-Certificate
---
No client certificate CA names sent
---
SSL handshake has read 845 bytes and written 463 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : AES256-SHA
    Session-ID: 6D0DF6EFC8491C9DEEB0161B85A47C101CF5DA9A9CD4EAA4EFCEEF46571A2A2F
    Session-ID-ctx: 
    Master-Key: B3BBD776EA24230B37E7EF4B2EAF02D6D66185F12D3C87640308FB1996E0BDA4A94CDB35455D0E98A5C34AAAF6EA1C7F
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    TLS session ticket lifetime hint: 3600 (seconds)
    TLS session ticket:
    ......
    Start Time: 1567605522
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---
HEAD / HTTP/1.0
R
RENEGOTIATING
depth=0 CN = HTTPS-Self-Signed-Certificate
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = HTTPS-Self-Signed-Certificate
verify return:1
HEAD / HTTP/1.0

HTTP/1.1 400 Bad request
Date: Wed, 04 Sep 2019 05:43:05
Content-Length: 0

^C
上記と同様の動作を用いて、「R」を送信して再交渉を開始し、再交渉が成功し、接続が正常であることが確認され、このとき再びHEAD/HTTP/1.0を送信し、2回のエコーをノックしてサーバ応答400を得る.サーバ再ネゴシエーション機能のオープンについて説明します.
締め括りをつける
OpenSSL接続サーバによる重ネゴシエーション機能のテストを行い、サーバ再ネゴシエーション機能がオフになったら端末が「R」を送信してエラーを出して接続を切断します.
参考資料
  https://mailarchive.ietf.org/arch/msg/tls/wdg46VE_jkYBbgJ 5 yE 4 P 9 nQ-8 IU
  https://blog.ivanristic.com/2009/12/testing-for-ssl-renegotiation.html
転載先:https://www.cnblogs.com/yurang/p/11532462.html