こんにちは!インフラやセキュリティの世界へようこそ。これからサーバーの管理や開発を始めていくにあたって、「セキュリティをしっかりしなきゃいけないけれど、何から手をつければいいか分からない…」と悩んでいませんか?
大丈夫です。一歩ずつ、身近な例えから紐解いていけば必ず理解できますよ。今回は、Windowsサーバーの安全性を高めるための超重要テクニックである「PowerShellの実行ポリシーの制限」について、お話ししていきたいと思います。
—
家の鍵に例えて考える「PowerShell」の脅威
みなさんの家には、玄関の鍵がありますよね。信頼できる家族や、合鍵を渡した信頼できる人だけが家に入ってこられるように、普段はしっかりと鍵をかけているはずです。
では、Windowsに最初から入っている管理ツール「PowerShell(パワーシェル)」はどうでしょうか?
PowerShellは、システム管理者がサーバーを効率よく管理するための、いわば「家中の電気や水道を自由自在に操る万能のリモコン」のようなものです。非常に便利で強力なツールなんですが、もし泥棒が勝手にこのリモコンを手に入れたらどうなるでしょうか?
泥棒は、あなたのパソコンの裏口からこっそり忍び込み、インターネットの海から「悪いことをするプログラム(悪意あるスクリプト)」をダウンロードして、このリモコンで実行してしまいます。しかも、ファイルとしてハードディスクに形を残さずにメモリ上で直接実行する、いわゆる「ファイルレス攻撃」と呼ばれる、警察(アンチウイルスソフト)に見つかりにくい狡猾な手口を使われることが多いのです。
この「勝手に知らないプログラムを実行されてしまう状態」を防ぐための最初の防壁が、今回解説する「実行ポリシー(Execution Policy)」という設定になります。
—
PowerShellの実行ポリシーとは?
実行ポリシーとは、一言で言うと「見知らぬ他人が書いた怪しいスクリプトを、勝手に動かさないための交通ルール」です。
初期状態のままだと、Windowsはセキュリティの扉が少し開いた状態になっています。「誰が書いたか分からない(署名のない)プログラムでも、とりあえず動かしてしまおう」という設定になっていることがあるため、ここをしっかりと締め直してあげる(要塞化する)必要があります。
設定できる主なポリシーには、以下のようなものがあります。
- Restricted(レストリクテッド)
- すべてのスクリプトの実行を禁止する、一番鉄壁のモードです。手動でコマンドを打つ分にはいいですが、スクリプトファイルは一切動かせません。(※現在のWindows 10や11、Windows Serverのデフォルトはこの制限がやや緩めになっていることが多いです)
- AllSigned(オールサインド)
- 信頼できる開発者の「電子署名」がついているスクリプトだけ実行を許可するモードです。身元が保証されているので安全ですね。
- RemoteSigned(リモートサインド) ★実務でよく使われるおすすめ
- 自分がこのパソコンで作ったスクリプトはそのまま動かせますが、インターネットの遠くからダウンロードしてきたスクリプトは、「信頼できる作者の署名」がないと動かさないよ、という現実的でバランスの取れたモードです。
私たちインフラエンジニアや開発者が現場で目指すのは、この RemoteSigned 以上の厳格なポリシーを適用し、勝手なスクリプトの実行を防ぐことです。
—
実際に設定を確認・変更してみましょう
それでは、実際に私たちのサーバーが今どうなっているか確認し、安全な状態に設定していきましょう!
作業をするには、管理者権限でPowerShellを開く必要があります。スタートメニューから「PowerShell」と検索し、「管理者として実行」をクリックしてください。
1. 現在の設定を確認する
まずは、今のパソコンがどんなルールになっているか覗いてみましょう。以下のコマンドを打ってエンターキーを押してみてください。
# 現在のスコープ(システム全体)における実行ポリシーを確認する
Get-ExecutionPolicy -List
もしここで Unrestricted(何でも実行OK!)や Bypassed(制限を無視する)といった危険な状態が表示されたら、それは玄関の鍵が開けっ放しになっているのと同じ状態です。すぐに直しましょう!
2. 安全なポリシー(RemoteSigned)に設定する
インターネットから持ってきた怪しいスクリプトを勝手に動かさないよう、ポリシーを RemoteSigned に変更します。以下のコマンドを実行してください。
# 実行ポリシーを「RemoteSigned」に変更し、安全性を高める
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
コマンドを実行すると、「本当にポリシーを変更しますか?」という確認メッセージ(Y/Nの選択肢)が出てくることがありますので、キーボードの Y を押してEnterを押せば設定完了です!
※もし組織全体で厳しく管理したい場合は、ドメインのグループポリシー(GPO)などを使って一括で強制することも、実務ではよく行われます。
—
現場のエンジニアから、あなたへ伝えたいこと
ここまで設定できたら、「これで完璧、絶対に安全だ!」と安心したくなるかもしれませんが、セキュリティの世界に「100パーセントの絶対」はありません。
今回設定した実行ポリシーは、あくまで「うっかりミスや、簡単な自動化プログラムによる不正実行を防ぐためのシートベルト」のようなものです。攻撃者が本気で権限を奪いにきた場合、このポリシーを一時的にすり抜ける技術も存在します。
だからこそ、
1. 不要な権限は持たせない(最小権限の原則)
2. 管理者権限で動かすアカウントは厳重に管理する
3. 定期的にサーバーのログを監視する
といった、他の泥臭い対策と組み合わせることが、真に強固なインフラを守るカギになります。
最初は覚えることが多くて大変に感じるかもしれませんが、「一つひとつ、家の鍵をしっかり閉めていく感覚」を大切にすれば、自然と安全なシステムが作れるようになりますよ。
一歩ずつ、確実に対策を学んでいきましょう!応援しています!
コメント