PowerShell

【PowerShell】スクリプトに署名する方法について

2018年8月5日


Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548

Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548

Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548

Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548

Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548

こんにちは!SE ブログの相馬です。

 

 

 

今回は、PowerShell のスクリプトに署名を付けて、特定のスクリプトのみ動作する方法について書きました。

 

 

 

PowerShell の実行ポリシーについて

 

 

まず、PowerShell には実行ポリシーというものがあります。

 

 

実は、PowerShell ではどんなスクリプトでも実行ができるわけではありません。

 

 

PowerShell のデフォルト設定では、Restricted という状態になっておりこれではいかなるスクリプトでも実行する事が許可されていません。

 

 

理由としては、スクリプトによってコンピューターを攻撃したりする事ができてしまう為です。

 

 

そこで、PowerShell は実行ポリシーという機能を付ける事で、環境に合わせて実行ができるスクリプトをレベル別に許可するように設定されています。

 

 

という事で、実行ポリシーを Restricted から変更する場合ですが、いくつか種類があります。以下の記事に詳しく書いてありますので見て頂ければと思います。

 

 

https://soma-engineering.com/coding/powershell/change-executinpolicy-powershell/2018/04/27/

 

 

 

PowerShell の実行ポリシーを変更する

 

 

実行ポリシーが Restricted になっている状態で、PowerShell を実行すると、以下の画像のように「スクリプトの実行が無効になっているため...」という内容が表示され、スクリプトが実行できません。

 

 

ですので、これをどの実行ポリシーに変更するか、考えなくてはなりませんが、ここでは AllSigned に変更します。

 

 

 

 

AllSigned の内容は上の記事から引用すると以下のとおりです。

 

スクリプトは実行できますが、デジタル署名が付いてなければなりません。

(そのスクリプトをローカル PC で書いても同じです。)

未署名のスクリプトを実行すると、実行を許可するか拒否するか確認ダイアログが表示されます。

(ユーザーが許可を選べば実行します。)

 

 

という事で、デジタル署名が付いているスクリプトのみ実行ができます。では、どうやってデジタル署名を付けるのかをこの記事で説明します。

 

 

 

デジタル署名

 

 

ではどうやってデジタル署名を作るのかみてゆきましょう。検証目的で自己証明書を作るには New-SelfSignedCertificate コマンドレットを使います。

 

 

New-SelfSignedCertificate | Microsoft Developer Network

 

 

補足:この記事は検証目的で自己証明書を作っています。本番環境では証明書は企業のルート証明書で署名するのが一般的かもしれません。

 

 

 

 

では、$mycert を実行して、証明書が生成されたか確認します。

 

 

 

 

自己証明書を以下の Move-Item コマンドレットでルート証明書に移動します。

 

 

 

 

スクリプトに署名するには、thumbprint が代入されている変数を以下のように書けば簡単にできます。

 

 

 

 

これで以下の方法で スクリプトに署名ができるようになりました。

 

 

 

 

これでスクリプトが正しく署名されました。但し、ここで署名したのは信頼できる証明書プロバイダではなく、あくまでも自己証明書です。

 

 

それでは、署名されたスクリプトが AllSigned の実行ポリシーでも動くかどうか、確認しましょう。その前に実行ポリシーを AllSigned に変更しておきます。

 

 

 

 

では署名されたスクリプトを実行してみましょう。実行すると以下のようなメッセージが表示されますので、[一度だけ実行する] をクリックします。

 

 

 

 

 

 

やっと問題なく実行ができましたね。そこで署名されたスクリプトファイルの中身ってどうなんでしょう。

 

 

 

署名されたスクリプトファイルの中身

 

 

実行はこんなかんじで、ものすごい多くの文字列が書いてあります。これが署名になっています。

 

 

 

実際、ファイルの中身を変更して実行してみましたところ、セキュリティエラーが発生して実行できませんでした。

 

 

 

 

以上になります。いかがでしょうか。

 

 

署名されたスクリプトのみ実行する環境でなければ特に必要はないですが、どのような方法で署名して実行されるのかが、ここで把握できました。

 

 

また、今回は検証環境での方法で自己証明書を使ってやりましたが、実際は企業のルート証明書などを使用するかもしれません。

 

 

では最後までお読みいただきありがとうございました!

 

  • この記事を書いた人

そーまん

セキュリティエンジニアやってます。
ブログ歴3年。PVは月15万PV程度。
趣味はボクシング、筋トレ、登山です。
穏やかで人見知りな性格です。

人気記事

1

こんにちは!そーまんです。 今回は、PC に適用されている GPO を確認する方法について書きました。 本題に入る前に、一応参考までにGPOの適用タイミングについての記事をここに貼りましたので、必要に ...

2

こんにちは!そーまんです。 今回は sysprep について、全体的に PC をセットアップする観点から書いてみました。長々と書いてあります。まずは前置きからです。 まずはじめに 組織では PC のラ ...

3

こんにちは!そーまんです。 今回は、グループポリシー (GPO) を使って、特定のコンピューターに対して、ドメインユーザーに ローカル管理者権限 (以下は特権と記載) を付与する方法について書きました ...

4

こんにちは!そーまんです。 今回は、Windows サインイン後に一時ユーザープロファイルが読み込まれてしまった場合の解決方法について書きました。 Windows 10 の検証環境をいじってたらサイン ...

5

こんにちは!そーまんです。 今回は、ユーザープロファイルを削除する方法について書いてみました。 企業の場合よくあることですが、1 台の PC を共有 PC として複数人で使ったり、また余り無いかもしれ ...

6

こんにちは!SE ブログの相馬です。       今回は、繰り返し文について書いてみました。PowerShell では他のプログラミング言語同様、繰り返し処理を行うことが ...

7

コマンドを使って CPU とメモリの使用率をデータで取得してみましたので、例えば PC のトラブルシューティングで問題を再現させる際にデータを取得しておくと、原因の特定に役立つ場合があるかと思います。

8

既存の PC と同じ構成で別のメーカーの PC でマスターイメージを作る際、インストールされているアプリを同一にする為に必要になるかと思います。

9

企業で多くの GPO が適用されている環境では、PC に GPO が適用されなかったりする問題が発生する場合があるかと思います。その中でも、コンピューターの構成またはユーザーの構成のどちらかで、...

10

こんにちは!そーまんです。 今回は、Windows Server 2019 で NTP サーバーと同期する方法について書きました。 NTP サーバーの必要性や時刻同期の重要性を理解することは社内のシス ...

-PowerShell
-


Warning: Trying to access array offset on value of type null in /home/r5652521/public_html/soma-engineering.com/wp-content/plugins/amazonjs/amazonjs.php on line 637

Warning: Trying to access array offset on value of type null in /home/r5652521/public_html/soma-engineering.com/wp-content/plugins/amazonjs/amazonjs.php on line 637

Warning: Trying to access array offset on value of type null in /home/r5652521/public_html/soma-engineering.com/wp-content/plugins/amazonjs/amazonjs.php on line 637