HTTPSを介したPowerShellリモート処理(WinRM)の構成
既定では、PowerShell Remotingセッションのトラフィックは、HTTP(TCP / 5985)またはHTTPS(TCP / 5986)のどちらのトランスポートプロトコルが使用されているかに関係なく暗号化されます。とにかく、すべてのトラフィックはAES-256キーを使用して暗号化されます。ただし、ADフォレストの外部またはワークグループ内のリモートコンピューターに接続する場合(Kerberosはとの信頼関係を確立できません)、中間者攻撃のリスクがあります。サードパーティのコンピューターに接続するときは、PSRemotingに常にHTTPSトランスポートを使用することをお勧めします。
この記事では、HTTPS経由でPowerShellRemotingを構成する方法を説明します。 SSL証明書を使用します。 HTTPSを介したPSRemotingセッションは、ADドメイン/フォレスト外のコンピューターに接続するときに高いセッションセキュリティレベルを提供します。
以下の手順では、PowerShell RemotingoverHTTPSを使用して接続するWindowsを実行しているリモートデバイスを構成する方法について説明します。
Windowsのネットワークの場所がプライベートまたはドメインに設定されていることを確認してください:
Get-NetConnectionProfile
次のコマンドを使用して、WinRMとPSRemotingを有効にします。
Enable-PSRemoting -Force
WinRMのHTTPSを構成するには、最初に、接続するコンピューターでSSL証明書を作成する必要があります。証明書は、WinRMトラフィックを暗号化するために使用されます。 PowerShellを使用して自己署名証明書を作成する方が簡単です。ドメイン環境では、自動登録を使用してWinRM証明書を自動的に発行できます。
証明書のDNS名としてコンピューター名とそのIPアドレスを指定します(ネットワークにDNSサーバーがない場合に便利です)。証明書のサブジェクト代替名の両方の値を取得し、PowerShellを使用して自己署名証明書を生成できます:
$hostName = $env:COMPUTERNAME
$hostIP=(Get-NetAdapter| Get-NetIPAddress).IPv4Address|Out-String
$srvCert = New-SelfSignedCertificate -DnsName $hostName,$hostIP -CertStoreLocation Cert:\LocalMachine\My
$srvCert
新しいSSL証明書は、コンピューターの個人証明書ストアに表示されます。
デフォルトでは、WindowsのPowerShell Remoting用に異なるポートに2つのリスナーが作成されます:
- ポート5985のHTTP
- ポート5986のHTTPS
以下に示すように、アクティブなWSManリスナーのリストを取得できます。
Get-ChildItem wsman:\localhost\Listener
デフォルトのHTTPおよびHTTPSリスナーを削除します:
Get-ChildItem wsman:\localhost\Listener\ | Where-Object -Property Keys -like 'Transport=HTTP*' | Remove-Item -Recurse
新しいHTTPSリスナーを作成し、それに証明書をバインドします:
New-Item -Path WSMan:\localhost\Listener\ -Transport HTTPS -Address * -CertificateThumbPrint $srvCert.Thumbprint -Force
WinRM HTTPSトラフィックを許可するWindowsファイアウォールルールを作成するか、アクティブであることを確認します。
New-NetFirewallRule -Displayname 'WinRM - Powershell remoting HTTPS-In' -Name 'WinRM - Powershell remoting HTTPS-In' -Profile Any -LocalPort 5986 -Protocol TCP
WinRMサービスを再起動します:
Restart-Service WinRM
次のコマンドを使用して、WinRMHTTPSリスナーがバインドされている証明書のフィンガープリントを確認できます。
WinRM e winrm/config/listener
リモートホストが構成されます。次に、SSL証明書をCERファイルにエクスポートする必要があります。
Export-Certificate -Cert $srvCert -FilePath c:\PS\SSL_PS_Remoting.cer
dir WSMan:\localhost\Service | ? Name -eq AllowUnencrypted
dir WSMan:\localhost\Client | ? Name -eq AllowUnencrypted
必要に応じて、次のように暗号化されていない接続を無効にすることができます。
winrm set winrm/config/service '@{AllowUnencrypted="false"}'
‘
winrm set winrm/config/client '@{AllowUnencrypted="false"}
CERファイルを管理コンピューターにコピーし、以下のコマンドを使用してインポートします(または、GPOを使用して証明書を他のコンピューターに展開します):
Import-Certificate -FilePath c:\PS\SSL_PS_Remoting.cer -CertStoreLocation Cert:\LocalMachine\root\
次に、WinRM HTTPSを使用してリモートWindowsホストに接続するには、 -UseSSLを使用する必要があります Enter-PSSessionおよびInvoke-Commandコマンドレットの引数。次の例では、PowerShellコンソールからIPアドレスを使用してリモートホストに接続します(このIPアドレスをTrustedHostsに追加していないことに注意してください):
$SessionOption = New-PSSessionOption -SkipCNCheck
Enter-PSSession -Computername 192.168.13.4 -UseSSL -Credential maxbak -SessionOption $SessionOption
SkipCNCheckを使用せずにIPアドレスで接続する場合 オプションの場合、次のエラーが発生します。
The SSL certificate contains a common name (CN) that does not match the hostname
。 -
BITSとPowerShellを使用して信頼性の低いネットワーク経由で大きなファイルをコピーする
原則として、ローカルおよびグローバルネットワークでは、ファイルはSMB、FTP、またはHTTPプロトコルを使用してデバイス間で転送されます。これらすべてのプロトコルの問題は、大きなファイルのダウンロードを再開する際の問題です。これは、ネットワークの速度が遅い場合や信頼性が低い場合にさらに悪化する可能性があります。さらに、これらのプロトコルを使用してファイルをコピーする場合、サーバーと受信者の間で使用可能なすべての帯域幅が使用されるため、ネットワークパフォーマンスや他のネットワークアプリの動作に悪影響を与える可能性があります(ネットワークで正しいQoSポリシーを構成できるとは限りません)。装置)
-
Windows10でDNSoverHTTPS(DoH)を有効にする
DNS over HTTPS ( DoH )サポートはWindows 10 2004ビルド(2020年5月の更新)に表示されました。これで、Windows 10は、組み込みのDoHクライアントを使用してHTTPSプロトコルを介して名前を解決できます。この記事では、DNS over HTTPSプロトコルの用途、最新のWindows10ビルドでDNSoverHTTPSプロトコルを有効にして使用する方法について説明します。コンピューターがDNSサーバーに接続して名前を解決すると、クリアテキストでインターネット経由でDNS要求/応答を受信します。攻撃者は、man-in-the-middleタイプの