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サーバーにインストールし、ターミナルサーバーを上げて構成します。
- ubuntuone.com/4zOP5AR39vKxk0uF6rwxNMアーカイブをダウンロードして解凍します
- stunnel -installと言います(stunnelはサービスとして登録されます)
- システム環境変数OPENSSL_ENGINES = [アーカイブが解凍されたフォルダへのパス]を設定します
- sTunnel CA証明書、証明書、およびサーバーキーを配置します(構成に従って)
- 設定を配置します(stunnel.confファイルに保存し、c sTunnel.exeの隣に配置します)
- コンピューターを再起動します
サーバー構成:
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):
- ubuntuone.com/5D4sNc9i29MDgdW9KvROZaアーカイブをダウンロードして解凍します
- クライアント証明書とCA証明書を配置します(トークン上のクライアントキー)
- ユーザーの環境変数OPENSSL_ENGINES = [アーカイブの解凍先フォルダーへのパス]を設定します
- 私たちは設定を入れます
クライアント構成:
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に移動する必要があります。