トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

・PowerShellの悪用 のバックアップ差分(No.22)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
#author("2020-10-20T16:54:01+09:00","","")
#author("2020-10-23T14:27:33+09:00","","")
[[情報システム開発契約のセキュリティ仕様作成のためのガイドライン(案)]]~
[[MITRE ATT&CKに基づく詳細設定対策]]

*戦術:悪意あるプログラムの実行[#f2437572]
-MITRE ATT&CK 
--[[T1059.001 Command and Scripting Interpreter: PowerShell>https://attack.mitre.org/techniques/T1059/001/]]

*概説 [#raff5281]
Windowsの設定管理を行うスクリプト言語であるPowerShellを悪用し、悪意あるプログラム(マルウェア)を実行します。PowerShell は、Windows の API にアクセス可能であり、インターネットアクセスなどの機能も提供されているため、攻撃の中核となるテクノロジーともいえます。そのため、外部との通信(新たなプログラムのダウンロード)や端末情報や認証情報の窃取など、多種多様なコマンドの実行が考えられます。~
スクリプトは難読化されることが多く、侵入検知システムやアンチウイルスでの検知が困難な場合があり注意が必要です。~
DefaultではPowerShellの実行は無効に制限されていますが、実行が有効となっている端末では攻撃を受ける可能性が高く、慎重な運用が必要です。~
古いバージョンである PowerShell2.0 は、ログ機能などのセキュリティ機能がないため、検出を免れるためにダウングレード攻撃が発生しています。また、制限設定を回避する手法も多数研究されていることから、緩和策設定後も、定期的に新たなバイパス手法の情報入手と対策を講じる必要があります。

*緩和の方針 [#cc0ff728]
さまざまな緩和策に対して、それをバイパスする方法が研究されています。完全な防御は困難ですが、多角的な緩和措置が必要です。
-管理端末以外はPowerShellスクリプトを無効(Default)にします。
-PowerShell が許可された端末、サーバーでは、PowerShellスクリプトに電子署名を実施し、署名付きPowerShellスクリプトのみ実行許可とするか、 AppLocker 等でのホワイトリストを導入を検討します。

*運用やNetworkが変更された場合の影響の有無 [#ea5988f3]
-PowerShellの実行が有効とした端末では、メール添付のファイルの実行、Webサイトの閲覧などで、悪意あるプログラムの実行のリスクが高まります。

*優先すべき措置 [#e3c52f83]
-ダウングレード攻撃を阻止するため、役割と機能の削除ウィザードで Windows PowerShell 2.0 エンジン を削除します。
-PowerShell スクリプトの実行可能端末・サーバーを限定し、文書化した上で、PowerShell スクリプトに電子署名を実施します。その他の端末・サーバーではグループポリシーで PowerShell スクリプトの実行を禁止します。
-管理上、PowerShell を必要とするサーバー、端末のログの取得と監査を実施します。
-AppLocker もしくは、Windows Defender アプリケーション制御による、以下のモジュールの制御、スクリプト制御の併用を検討します。 
--powershell.exe、powershell_ise.exe (32bit, 64bit)
--System.Management.Automation.dll (32bit, 64bit)
--System.Management.Automation.ni.dll (32bit, 64bit)
--WinRMサービスを無効化/制限して、リモート実行でPowerShellが使用されないようにします。

*ユーザー運用管理責任 [#f6993622]
**リスクの受容 [#v060ce86]
PowerShellスクリプトの実行可能端末・サーバーは、設定されたセキュリティポリシーだけでなく、端末・サーバーのネットワーク構成、運用方法によって影響が異なるため、慎重なリスクの見極めが必要です。
-ドメインコントローラー、DHCPサーバー、開発用端末、管理用端末~
これらはシステム設定管理上、PowerShell は必須といえます。従って、ホワイトリストの導入、PowerShell スクリプトの署名やログ監査による早期検出でのリスク受容を検討します。
-アプリケーションサーバー、ファイルサーバー、業務端末~
これらは PowerShell は必須といえないので、AppLocker等での実行制御をするか、Office VBA(マクロ)の厳格運用とVBScript の運用停止による初期侵入~悪意のあるプログラムの実行までのベクトルの遮断とログ監査による早期検出でリスク受容することが考えられます。
~
|150|70|70|70||c
|COLOR(WHITE):BGCOLOR(#44546A):CENTER:実行ポリシー|COLOR(WHITE):BGCOLOR(#44546A):CENTER:署名付き|COLOR(WHITE):BGCOLOR(#44546A):CENTER:署名なし ローカル|COLOR(WHITE):BGCOLOR(#44546A):CENTER:署名なし 非ローカル|COLOR(WHITE):BGCOLOR(#44546A):CENTER:概要|h
|Restricted|×|×|×|全てのスクリプトが実行禁止。PowerShellまたはWindows OSインストール直後のデフォルト設定(Windows Server 2012 R2を除く)|
|AllSigned|○|×|×|署名されているスクリプトのみが実行可能。署名されていないスクリプトは実行禁止|
|RemoteSigned|○|○|×|ローカルに保存されているスクリプトは実行可能。インターネットからダウンロードしたスクリプト(非ローカルのスクリプト)は、署名されているもののみが実行可能。Windows Server 2012 R2では、この設定がデフォルト|
|Unrestricted|○|○|△|全てのスクリプトが実行可能。ただしインターネットからダウンロードしたスクリプトは、実行するかどうかが確認されるので、ユーザーが明示的に許可した場合のみ実行される|
|Bypass|○|○|○|警告やユーザーへの確認なしに、全てのスクリプトが実行可能|
~
-atmarkIT WindowsでPowerShellスクリプトの実行セキュリティポリシーを変更する:~
https://www.atmarkit.co.jp/ait/articles/0805/16/news139.html
|180|||c
|COLOR(WHITE):BGCOLOR(#44546A):CENTER:業務|COLOR(WHITE):BGCOLOR(#44546A):CENTER:特権|COLOR(WHITE):BGCOLOR(#44546A):CENTER:リスク受容のための条件例|h
|プログラム開発担当者|Local Administrator|PowerShell スクリプト開発環境の分離(リリース後は署名する)|
|Help Desk 担当者|Domain/Local Administrator|AllSigned適用、侵入監視、PowerShell スクリプトログ監査、定期的なトレーニング|
|システム管理者|Enterprise/Domain/Local Administrator|~|
|部門管理者(OUの委任)|OUのパスワードリセット、グループ管理、ドメイン参加等|~|
|役職者、研究者、秘書|標準ユーザー|Restricted適用、Local Administrators に含めない|
|上記以外の一般業務担当者|標準ユーザー|Restricted適用、Local Administrators に含めない|



**啓発・教育 [#qa4fa30f]
-対象:ローカル Administrator メンバー、開発者
--PowerShell を利用した攻撃方法の理解を求め、PowerShell 利用端末の危険性の認識、管理規程の正しい理解を求めます。

**利用規定 [#r7cb1504]
管理上、PowerShellが必要な端末、サーバーの文書化及び監査規程。

*情報システム設計開発部門・運用部門(ベンダー代行を含む) [#w1a0780d]
**ポリシー [#ha094e85]
+13章・レベル1セキュリティ構成(Windows 10)及び14章・Windows Server 2016 Domain Controller の適用を検討して下さい。
+PowerShellの制御設定 の適用を検討して下さい。


**モニタリング [#l68de27a]
グループポリシーで PowerShellのログを有効にします。
-[コンピュータの構成]>[ポリシー]>[管理用テンプレート]>[Windowsコンポーネント]>[Windows PowerShell]>[モジュールログを有効にする] を [有効] に設定し、[オプション]>[モジュール名]>[表示] をクリックします。
-[モジュール名] の入力画面で、[値] に [Microsoft.PowerShell.*] [Microsoft.WSMan.Management] の2行を入力し、[OK] をクリックします。
&ref(https://www.softwareisac.jp/ipa/image/data/powershell.jpg)
~
但し、攻撃者はレジストリを書き換え、PowerShell のログを無効にすることがあります。
[[・Windows Group Policyの再読み込み]]を設定していない場合は、定期的に以下のレジストリの値をチェックしてください。
~
|COLOR(WHITE):BGCOLOR(#44546A):CENTER:項目|COLOR(WHITE):BGCOLOR(#44546A):CENTER:値|h
|レジストリハイブ|HKEY_LOCAL_MACHINE|
|キー|\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging|
|名前|EnableScriptBlockLogging|
|種類|REG_DWORD|
|データ|0x00000001(1) (有効)|


**NWデザイン [#s139fb71]
該当しません。

***アクセスコントロール [#e45798e9]
以下を参考にWindows Defender アプリケーション制御 もしくは Windows AppLocker でコマンドの実行を制限します。※Windows AppLocker は Windows 10 はEnterprise Editionが必要です。 
+WDAC または AppLocker のどちらを使用するかを選ぶ:https://docs.microsoft.com/ja-jp/windows/security/threat-protection/windows-defender-application-control/windows-defender-application-control~
Microsoft が推奨するブロックの規則:https://docs.microsoft.com/ja-jp/windows/security/threat-protection/windows-defender-application-control/microsoft-recommended-block-rules~
ただし、PowerShell without PowerShell などの Bypass 方法が研究されているため検討が必要です。 ~
https://www.ired.team/offensive-security/code-execution/powershell-without-powershell~
+PowerShell Constrained Language Mode  (制約付き言語モード)の導入を検討する。
+WinRMサービスを無効化する。(WinRMサービスを無効化/制限を参照)



***フィルタリング [#s2ef1f8b]
該当しません。

***仮想端末運用 [#k53a311c]
該当しません。
***エンドポイント対策 [#y7f8d442]
Endpoint Detection and Response もしくは、侵入検知システムの導入を検討してください。

*受託開発ベンダー管理責任 [#oac483c2]
**セキュアコーディング [#se219e91]
-作成したPowerShellスクリプトへのタイムスタンプ付き署名の実施。~
-実行運用環境に限定した実行ポリシーの適用(対象端末・サーバーはAllSigned、対象外はRestricted)。
**開発環境管理 [#ka04cf99]
ユーザー運用管理責任、情報システム設計開発部門・運用部門責任に準じます。 例外はすべて文書化し、適切な監査を実施します。
**サプライチェーン正常性維持" [#o5f84efe]
ユーザー運用管理責任、情報システム設計開発部門・運用部門責任に準じます。 例外はすべて文書化し、適切な監査を実施します。

*WinRMサービスを無効化/制限 [#h9135668]
**グループ ポリシーを使用してリモート管理を無効にする [#gf1c0de7]
ローカルグループポリシーエディターを開くには、次のいずれかの操作を行います。
+Windows Server 2016、Windows Server 2012 R2、または Windows Server 2012 を実行しているサーバーで、「グループポリシーの管理」を起動します。
+ポリシーオブジェクトを選択し、右クリックして編集をクリックします。
+グループポリシー管理エディターで、[コンピューターの構成]>[管理用テンプレート]>[Windows コンポーネント]>[windows リモート管理 (winrm)]>[Winrm サービス] を開きます。
+コンテンツ ウィンドウで [WinRM によるリモート サーバー管理を許可する] をダブルクリックします。
+[WinRM によるリモート サーバー管理を許可する] ポリシー設定のダイアログ ボックスで、[無効] をクリックしてリモート管理を無効にします。[OK] をクリックして変更内容を保存し、ポリシー設定のダイアログ ボックスを閉じます。
**WinRM が使用するポートをパーソナルFirewallで閉じる [#db39c169]
PowerShell を管理者モードで起動し、以下のコマンドを実行します。
 Set-NetFirewallRule -name WINRM-HTTP-In-TCP -Enabled False
 Set-NetFirewallRule -Name WINRM-HTTP-In-TCP-PUBLIC -Enabled False
**WinRM機能を無効化する [#ha878ff8]
PowerShell を管理者モードで起動し、以下のコマンドを実行します。
 Disable-PSRemoting -Force