Rutoken EDSを使用したGOSTに基づくRDPの保護。 二重TLS

画像



RDPはアプリケーション層プロトコルであるため、トランスポート層で機能するTLSは、それを保護するのに理想的です。



このトピックでは、オープンソースのOpenSSLおよびsTunnelアプリケーションの助けを借りて、ロシアの暗号スイート(GOST2001-GOST89-GOST89)をサポートするTLSプロトコルを使用してRDP接続を保護します。GOST証明書に基づくクライアント認証は、USBトークンRutoken EDSスキームVKO GOST 34-10.2001に基づく主要な合意。 ただし、認証キーは回復不能であり、盗むことはできません。 Rutoken EDSは、ハードウェア周波数変換器としても使用されます。



RSA証明書を使用したActive Directoryに関するターミナルサーバーでの認証の場合、GOSTに従ってTLSでTLSをRSAでラップします。 したがって、2レベルのTLSを取得します。クライアント認証を使用するRSAは、GOSTで保護されたチャネル内に入ります。







OpenSSLには、 draft-chudov-cryptopro-cptlsに従ってロシアのアルゴリズムに基づいたTLS暗号スイートが実装されています。



sTunnelはコンパクトなTLSプロキシです。安全でないTCP接続を入力として受け入れ、TLSがそれらを呼び出してリモートサーバーに転送します。 「暗号コア」として、stunnelはOpenSSLを使用します。



「ボックス」からのsTunnelはGOSTの操作方法を知らないため、パッチを適用して再構築しました。 サイズが約2行のパッチ。



Rutoken EDSは、ベンダーフォーラムforum.rutoken.ru/topic/1639で説明されている方法でOpenSSLに接続されます。 この場合、ロシアの暗号化アルゴリズムのハードウェア実装が「オンボード」のRutoken EDSを使用します。



GOSTに従った保護





基本的なスキームを図に示します。



画像



まず、sTunnelサーバーとsTunnelクライアントにGOST証明書を発行する小さなCAを作成する必要があります。 これを行うには、OpenSSLを使用するのが理にかなっています。 トークン上のクライアントキーの生成、証明書のアプリケーションの形成については、記事habrahabr.ru/blogs/infosecurity/134725で説明されています。 サーバーキーと証明書は、通常のファイルの形で意味をなします。



このトピックの詳細は停止しません。



サーバーのセットアップ:



sTunnelをサービスとしてWindowsサーバーにインストールし、ターミナルサーバーを上げて構成します。



サーバー構成:

verify = 2 cafile = crypto/ca.crt cert = crypto/server.crt key = crypto/server.key engine=gost socket = l:TCP_NODELAY=1 socket = r:TCP_NODELAY=1 debug = 7 output = stunnel.log client = no [RDP-TLS-GOST] ciphers = GOST2001-GOST89-GOST89 accept = 1494 connect = localhost:3389
      
      







突き出ているIPアドレスのファイアウォール3389ポートを閉じることをサーバーで忘れないでください!



クライアントのセットアップ(Windows):





クライアント構成:

 verify=2 client=yes CAFile=ca.crt output=stunnel.log sslVersion=TLSv1 taskbar=yes DEBUG=7 engine=pkcs11_gost engineCtrl=MODULE_PATH:rtPKCS11ECP.dll engineCtrl=INIT engineCtrl=PIN:12345678 [RDP-TLS-GOST] engineNum=1 key=100 cert=client.crt accept = 127.0.0.1:8088 connect = xxxx:1494 ciphers = GOST2001-GOST89-GOST89 TIMEOUTclose = 1
      
      







重要なポイント 。 sTunnelは、管理者権限でインストールする必要はありません。 一般的には、 Rutoken EDS Flashと組み合わせて使用​​できます。

Rutoken EDS Flashは、最新のOSにドライバーをインストールする必要のないCCIDデバイスです。 必要なファイルがフラッシュメモリに配置され、小さなファイルが書き込まれます

目的の環境でsTunnelプロセスを開始し(OPENSSL_ENGINES =)、目的のホストでWindows RDPクライアントを実行するWindows用のスクリプト:port(mstsc /v:127.0.0.1:8088)



二重TLS





RSA証明書を使用したActive Directoryに関するユーザー認証の場合、通常のTLSを使用してRSA認証クライアントキーをRootoken EDSに保存することをお勧めしますが、sTunnelを通過します。 この場合、RSA経由のTLSは、GOSTを使用してTLSチャネル内に送信されます。



2つのスキームが可能です。 RSAを使用した最初のTLSでは、RDPクライアントが直接編成します。 同時に、2つのキーがトークンに保存されます-GOST(「友人または敵」認証、sTunnelサーバーにログインするため)

RSA(ユーザーが最初の障壁を通過できた場合、このキーはADに関する認証に使用され、ユーザーはRDPサーバーのアカウントにすぐにアクセスします)。



画像



Rutoken EDSに保存されているRSAキー/証明書と「ボード」上のRSAのハードウェア実装にアクセスするために、WindowsではRutoken EDSが使用されます。



2番目のTLSスキームでは、RSAとGOSTはsTunnel自体によって提供されます。 私はすぐにこの2番目のサーキットを試したことがないと警告します。



画像



RSAキーとRSAハードウェア実装に「オンボード」でアクセスするために、Rutoken EDSはOpenSCプロジェクトwww.opensc-project.org/engine_pkcs11のエンジンpkcs11を使用します。



したがって、sTunnelクライアントの構成には2つのセクションがあります。



 [RDP-TLS-GOST] engineNum=1 key=100 cert=client_gost.crt accept = 127.0.0.1:8088 connect = xxxx:1494 ciphers = GOST2001-GOST89-GOST89 TIMEOUTclose = 1 [RDP-TLS-RSA] engineNum=2 key=101 cert=client_rsa.crt accept = 127.0.0.1:8087 connect = 127.0.0.1:8088 TIMEOUTclose = 1
      
      







また、RDPクライアントは127.0.0.1:8087に移動する必要があります。



All Articles