web-dev-qa-db-ja.com

インターネットに接続しているマシンでWinRM / PSRemotingを有効にするのはどのくらい安全ですか?

運用サーバーのリモートPowershell(別名PSRemoting)エンドポイントをインターネットからアクセスできるようにすることはどの程度安全ですか?
私たちは銀行などではありませんが、サーバーは企業の機密データを保持しています。

私はそれを次の方法で確保するつもりです:

  • IPフィルタリングを使用して、独自のパブリックIP範囲からの接続のみを受け入れるため、ネットワークの別の部分から接続を管理できます。
  • エンドポイントにSSL接続のみを受け入れるようにする
  • 複雑なパスワード(最大150ビットのエントロピー)を持つ限られたユーザーセットからの接続のみを許可する
  • LanguageModeNoLanguageに設定されているPSSessionConfigurationを使用して、スクリプトのみを実行できるようにします
  • この方法で実行されるすべてのPowershellスクリプトが署名されている必要があります(Set-ExecutionPolicy RemoteSigned

一方:

  • リモートスクリプトは、ローカル管理者アカウントで実行されます
  • 呼び出すことができるコマンドレット/モジュールに制限はありません。
  • WinRMサービス(PSRemotingを可能にする)はインターネットに公開するのに十分安全だと思いますが(Azure VMにはデフォルトでこれがあります)、その証拠はありません。

だから、私の質問は次のとおりだと思います:これは「安全」ですか、それとも私がここで見逃している攻撃ベクトルはありますか?

ちなみに、私は無料の電子ブックから私の情報のほとんどを持っています Powershellリモーティングの秘密

5
Astrotrain

一般的に言って、あなたは決してあなたが望むサービスでない限り、インターネットから本番サーバーまで何でも開くべきです使用するパブリック。マシンがWebサーバーの場合、ポート80のみがWebサーバーに対して開かれている必要があります。ファイアウォールを介して他のポートが開いていない場合、攻撃者が侵入する方法はありません。

VPNは最良のソリューションであり、ユーザーが認証してから、insideからのみ本番システムにアクセスする必要があります。 VPNは、他のどの方法よりもはるかに柔軟で安全です。

3
Keltari

役立つかもしれないいくつかのこと:

  1. クライアントを TrustedHosts リストに追加します。

    Set-Item wsman:\localhost\Client\TrustedHosts -Value Server01.Domain01.Fabrikam.com
    
  2. ログから不正なIPを取得し、それらのIPをブロックするファイアウォールルールを作成するログスキャンスクリプトを作成します。 (私のPSライティングテクニックを失礼します:-))

    アクティビティログにリストされている不正なIPを持つファイルの内容を取得します。独自のWebログファイルをスキャンするスクリプトを作成し、クライアントがWebサーバーをプローブしているのを見つけたので、クライアントのIPをbadips.txtファイルにドロップしました。

    $ips = get-content c:\powershell\utilities\badips.txt
    

    次に、不正なIPアドレスをブロックするファイアウォールルールを作成します

    foreach ($i in $ips){
    [string]$rulename = "disallow-" + $i
    [string]$remoteip = $i + "/32"
    [string]$description = $i
    

    すでにブロックルールを持っている悪いIPのリストを取得する

    $processed = get-content c:\powershell\utilities\processedips.txt
    

    リストをチェックして、IPがすでにブロックされているかどうかを確認します

    $count = ($processed|select-string $i).count
    

    これが新しいIPアドレスの場合は、ファイアウォールルールを作成し、処理済みリストのテキストファイルにIPを追加します。

    if ($count -lt 1){
    invoke-expression ("netsh advfirewall firewall add rule name=" + $rulename + " action=block enable=yes
    localip=any dir=in profile=public remoteip=" + $remoteip + " description=" + $description)
    $i|add-content c:\powershell\utilities\processedips.txt
    }}
    

これは、サーバーがどの程度保護されるかについての質問には実際には答えませんが、潜在的な脅威を制限するためにさらに2つの項目を提供します。

2
UsPeoples