Operations Lab.

Posts Tagged ‘Windows Server 2012

Microsoft 2019-05 定例 Update

leave a comment »

出ています。

Topic

Intel CPU の脆弱性に対するアドバイザリが出ています。

以下の Intel CPU 脆弱性に対応するものです。

  • CVE-2018-12126 – Microarchitectural Store Buffer Data Sampling (MSBDS)
  • CVE-2018-12130 – Microarchitectural Fill Buffer Data Sampling (MFBDS)
  • CVE-2018-12127 – Microarchitectural Load Port Data Sampling (MLPDS)
  • CVE-2018-11091 – Microarchitectural Data Sampling Uncacheable Memory (MDSUM)

基本的には、マイクロコードのアップデートと OS 側でのセキュリティ更新プログラム適用、レジストリの設定変更が必要となります。

Windows Server における緩和策の詳細については、以下のアドバイザリが更新(追記)されています。本記事公開時点では、日本語版の記事は古いままですので、英語版の参照を推奨します。

Windows Server 2019 については、概ねデフォルト(更新プログラムの適用)で緩和策が有効となります。それ以前の OS の場合、更新プログラムを適用したうえでレジストリの設定変更(及び再起動など)が必要です。

ハイパースレッディングを有効にしたままで緩和策を適用する場合

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 72 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization" /v MinVmVersionForCpuBasedMitigations /t REG_SZ /d "1.0" /f

ハイパースレッディングを無効化して緩和策を適用する場合

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 8264 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization" /v MinVmVersionForCpuBasedMitigations /t REG_SZ /d "1.0" /f

緩和策を無効化する場合

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 3 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f

その他の情報(一覧)

Version KB 更新プログラム 脆弱性詳細 タイトル
Windows Server 2008 R2 4499164 Monthly Rollup ADV190013 ADV190013 | マイクロアーキテクチャ データ サンプリングの脆弱性を軽減するためのマイクロソフト ガイダンス
Windows Server 2008 R2 4499175 Security Only ADV190013 ADV190013 | マイクロアーキテクチャ データ サンプリングの脆弱性を軽減するためのマイクロソフト ガイダンス
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0708 CVE-2019-0708 | リモート デスクトップ サービスのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0708 CVE-2019-0708 | リモート デスクトップ サービスのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0725 CVE-2019-0725 | Windows DHCP Server のリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0725 CVE-2019-0725 | Windows DHCP Server のリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0734 CVE-2019-0734 | Windows の特権の昇格の脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0734 CVE-2019-0734 | Windows の特権の昇格の脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0758 CVE-2019-0758 | Windows GDI の情報漏えいの脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0758 CVE-2019-0758 | Windows GDI の情報漏えいの脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0863 CVE-2019-0863 | Windows エラー報告の特権の昇格の脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0863 CVE-2019-0863 | Windows エラー報告の特権の昇格の脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0881 CVE-2019-0881 | Windows カーネルの特権の昇格の脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0881 CVE-2019-0881 | Windows カーネルの特権の昇格の脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0882 CVE-2019-0882 | Windows GDI の情報漏えいの脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0882 CVE-2019-0882 | Windows GDI の情報漏えいの脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0885 CVE-2019-0885 | Windows OLE のリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0885 CVE-2019-0885 | Windows OLE のリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0889 CVE-2019-0889 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0889 CVE-2019-0889 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0890 CVE-2019-0890 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0890 CVE-2019-0890 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0891 CVE-2019-0891 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0891 CVE-2019-0891 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0893 CVE-2019-0893 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0893 CVE-2019-0893 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0894 CVE-2019-0894 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0894 CVE-2019-0894 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0895 CVE-2019-0895 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0895 CVE-2019-0895 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0896 CVE-2019-0896 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0896 CVE-2019-0896 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0897 CVE-2019-0897 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0897 CVE-2019-0897 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0898 CVE-2019-0898 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0898 CVE-2019-0898 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0899 CVE-2019-0899 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0899 CVE-2019-0899 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0900 CVE-2019-0900 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0900 CVE-2019-0900 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0901 CVE-2019-0901 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0901 CVE-2019-0901 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0902 CVE-2019-0902 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0902 CVE-2019-0902 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0903 CVE-2019-0903 | GDI+ のリモート コードが実行される脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0903 CVE-2019-0903 | GDI+ のリモート コードが実行される脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0936 CVE-2019-0936 | Windows の特権の昇格の脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0936 CVE-2019-0936 | Windows の特権の昇格の脆弱性
Windows Server 2008 R2 4499164 Monthly Rollup CVE-2019-0961 CVE-2019-0961 | Windows GDI の情報漏えいの脆弱性
Windows Server 2008 R2 4499175 Security Only CVE-2019-0961 CVE-2019-0961 | Windows GDI の情報漏えいの脆弱性
Windows Server 2012 4499171 Monthly Rollup ADV190013 ADV190013 | マイクロアーキテクチャ データ サンプリングの脆弱性を軽減するためのマイクロソフト ガイダンス
Windows Server 2012 4499158 Security Only ADV190013 ADV190013 | マイクロアーキテクチャ データ サンプリングの脆弱性を軽減するためのマイクロソフト ガイダンス
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0707 CVE-2019-0707 | Windows NDIS の特権の昇格の脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0707 CVE-2019-0707 | Windows NDIS の特権の昇格の脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0725 CVE-2019-0725 | Windows DHCP Server のリモートでコードが実行される脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0725 CVE-2019-0725 | Windows DHCP Server のリモートでコードが実行される脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0734 CVE-2019-0734 | Windows の特権の昇格の脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0734 CVE-2019-0734 | Windows の特権の昇格の脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0758 CVE-2019-0758 | Windows GDI の情報漏えいの脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0758 CVE-2019-0758 | Windows GDI の情報漏えいの脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0863 CVE-2019-0863 | Windows エラー報告の特権の昇格の脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0863 CVE-2019-0863 | Windows エラー報告の特権の昇格の脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0881 CVE-2019-0881 | Windows カーネルの特権の昇格の脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0881 CVE-2019-0881 | Windows カーネルの特権の昇格の脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0882 CVE-2019-0882 | Windows GDI の情報漏えいの脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0882 CVE-2019-0882 | Windows GDI の情報漏えいの脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0885 CVE-2019-0885 | Windows OLE のリモートでコードが実行される脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0885 CVE-2019-0885 | Windows OLE のリモートでコードが実行される脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0889 CVE-2019-0889 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0889 CVE-2019-0889 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0890 CVE-2019-0890 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0890 CVE-2019-0890 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0891 CVE-2019-0891 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0891 CVE-2019-0891 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0893 CVE-2019-0893 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0893 CVE-2019-0893 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0894 CVE-2019-0894 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0894 CVE-2019-0894 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0895 CVE-2019-0895 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0895 CVE-2019-0895 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0896 CVE-2019-0896 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0896 CVE-2019-0896 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0897 CVE-2019-0897 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0897 CVE-2019-0897 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0898 CVE-2019-0898 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0898 CVE-2019-0898 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0899 CVE-2019-0899 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0899 CVE-2019-0899 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0900 CVE-2019-0900 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0900 CVE-2019-0900 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0901 CVE-2019-0901 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0901 CVE-2019-0901 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0902 CVE-2019-0902 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0902 CVE-2019-0902 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0903 CVE-2019-0903 | GDI+ のリモート コードが実行される脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0903 CVE-2019-0903 | GDI+ のリモート コードが実行される脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0936 CVE-2019-0936 | Windows の特権の昇格の脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0936 CVE-2019-0936 | Windows の特権の昇格の脆弱性
Windows Server 2012 4499171 Monthly Rollup CVE-2019-0961 CVE-2019-0961 | Windows GDI の情報漏えいの脆弱性
Windows Server 2012 4499158 Security Only CVE-2019-0961 CVE-2019-0961 | Windows GDI の情報漏えいの脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup ADV190013 ADV190013 | マイクロアーキテクチャ データ サンプリングの脆弱性を軽減するためのマイクロソフト ガイダンス
Windows Server 2012 R2 4499165 Security Only ADV190013 ADV190013 | マイクロアーキテクチャ データ サンプリングの脆弱性を軽減するためのマイクロソフト ガイダンス
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0707 CVE-2019-0707 | Windows NDIS の特権の昇格の脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0707 CVE-2019-0707 | Windows NDIS の特権の昇格の脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0725 CVE-2019-0725 | Windows DHCP Server のリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0725 CVE-2019-0725 | Windows DHCP Server のリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0734 CVE-2019-0734 | Windows の特権の昇格の脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0734 CVE-2019-0734 | Windows の特権の昇格の脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0758 CVE-2019-0758 | Windows GDI の情報漏えいの脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0758 CVE-2019-0758 | Windows GDI の情報漏えいの脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0863 CVE-2019-0863 | Windows エラー報告の特権の昇格の脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0863 CVE-2019-0863 | Windows エラー報告の特権の昇格の脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0881 CVE-2019-0881 | Windows カーネルの特権の昇格の脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0881 CVE-2019-0881 | Windows カーネルの特権の昇格の脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0882 CVE-2019-0882 | Windows GDI の情報漏えいの脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0882 CVE-2019-0882 | Windows GDI の情報漏えいの脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0885 CVE-2019-0885 | Windows OLE のリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0885 CVE-2019-0885 | Windows OLE のリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0889 CVE-2019-0889 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0889 CVE-2019-0889 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0890 CVE-2019-0890 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0890 CVE-2019-0890 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0891 CVE-2019-0891 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0891 CVE-2019-0891 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0893 CVE-2019-0893 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0893 CVE-2019-0893 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0894 CVE-2019-0894 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0894 CVE-2019-0894 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0895 CVE-2019-0895 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0895 CVE-2019-0895 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0896 CVE-2019-0896 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0896 CVE-2019-0896 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0897 CVE-2019-0897 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0897 CVE-2019-0897 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0898 CVE-2019-0898 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0898 CVE-2019-0898 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0899 CVE-2019-0899 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0899 CVE-2019-0899 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0900 CVE-2019-0900 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0900 CVE-2019-0900 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0901 CVE-2019-0901 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0901 CVE-2019-0901 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0902 CVE-2019-0902 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0902 CVE-2019-0902 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0903 CVE-2019-0903 | GDI+ のリモート コードが実行される脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0903 CVE-2019-0903 | GDI+ のリモート コードが実行される脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0936 CVE-2019-0936 | Windows の特権の昇格の脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0936 CVE-2019-0936 | Windows の特権の昇格の脆弱性
Windows Server 2012 R2 4499151 Monthly Rollup CVE-2019-0961 CVE-2019-0961 | Windows GDI の情報漏えいの脆弱性
Windows Server 2012 R2 4499165 Security Only CVE-2019-0961 CVE-2019-0961 | Windows GDI の情報漏えいの脆弱性
Windows Server 2016 4494440 Security Update ADV190013 ADV190013 | マイクロアーキテクチャ データ サンプリングの脆弱性を軽減するためのマイクロソフト ガイダンス
Windows Server 2016 4494440 Security Update CVE-2019-0707 CVE-2019-0707 | Windows NDIS の特権の昇格の脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0725 CVE-2019-0725 | Windows DHCP Server のリモートでコードが実行される脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0727 CVE-2019-0727 | Diagnostic Hub Standard Collector、Visual Studio Standard Collector の特権の昇格の脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0733 CVE-2019-0733 | Windows Defender アプリケーション制御のセキュリティ機能のバイパスの脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0734 CVE-2019-0734 | Windows の特権の昇格の脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0758 CVE-2019-0758 | Windows GDI の情報漏えいの脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0863 CVE-2019-0863 | Windows エラー報告の特権の昇格の脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0881 CVE-2019-0881 | Windows カーネルの特権の昇格の脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0882 CVE-2019-0882 | Windows GDI の情報漏えいの脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0885 CVE-2019-0885 | Windows OLE のリモートでコードが実行される脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0886 CVE-2019-0886 | Windows Hyper-V の情報漏えいの脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0889 CVE-2019-0889 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0890 CVE-2019-0890 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0891 CVE-2019-0891 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0893 CVE-2019-0893 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0894 CVE-2019-0894 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0895 CVE-2019-0895 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0896 CVE-2019-0896 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0897 CVE-2019-0897 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0898 CVE-2019-0898 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0899 CVE-2019-0899 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0900 CVE-2019-0900 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0901 CVE-2019-0901 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0902 CVE-2019-0902 | Jet データベース エンジンのリモートでコードが実行される脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0903 CVE-2019-0903 | GDI+ のリモート コードが実行される脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0936 CVE-2019-0936 | Windows の特権の昇格の脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0942 CVE-2019-0942 | 統合書き込みフィルターの特権の昇格の脆弱性
Windows Server 2016 4494440 Security Update CVE-2019-0961 CVE-2019-0961 | Windows GDI の情報漏えいの脆弱性

Hyper-V の Guest OS Support に対する考え方

leave a comment »

公式なドキュメントが公開された場所に無い気がするのですが、とりあえずメモ。

Hyper-V 上で Windows OS を Guest として動作する場合

ホスト OS よりも 2 世代以上新しい OS は、ゲストとしてサポートされません。言い換えると、ゲスト OS のバージョンより(少なくとも)1 世代前のホスト OS を使用する必要があります。

例1

Windows Server 2012 R2 を Hyper-V 上で VM ゲストとして動作させる場合、Windows Server 2012 または Windows Server 2012 R2 (または、現時点でリリースされていませんが Windows Server 2016)を使用する必要があります。

Windows Server 2008 R2 の Hyper-V では、Windows Server 2012 R2 ゲストはサポートされません。

Important
Windows Server 2012 is the last version of Windows that will be supported as a guest operating system on this platform. There will be no further additions to the list of supported Windows guest operating systems.

例2

Windows Server 2016 (まだ正式リリースされていませんが)をゲスト OS として動作させる場合は、Windows Server 2012 R2 より新しい Hyper-V ホストのみがサポートされる予定です。

公式な公開されたドキュメント(TechNet や MSDN)で、ポリシーに関する明確な記述を見つけられないのですが(ご存知の方がいたらぜひ教えてください)、以下にそれらしい情報があります。

A: From a support standpoint, Microsoft uses a consistent support policy for guest operating systems where we support a guest operating system (N) on an N-1 guest. Thus, Windows Server 2012 R2 is supported as a guest on a Windows Server 2012 Hyper-V, but it is not supported on Windows Server 2008 R2 SP1 (N-2).

※上記の “N-1 guest” は “N-1 host” の間違えなのではないかと思います。

Q: I want to deploy Windows 10 within Hyper-V VMs. What Hyper-V host is required?

A: From a support standpoint, Microsoft uses a consistent support policy for guest operating systems that are newer than the Host OS. Specifically, Microsoft supports a guest operating system (N) on an N-1 HOST. Thus, Windows Server 2012 R2 is supported as a guest on a Windows Server 2012 Hyper-V HOST, but it is not supported on a Windows Server 2008 R2 -SP1 Hyper-V HOST (N-2).

まとめ

Hyper-V ホストのバージョン N に対して、Windows Guest は N+1 までしかサポートされません。言い換えると、ゲスト OS バージョン N を Hyper-V ホスト上で使用したい場合、ホスト側は N-1 以上のバージョンである必要があります。

Written by kazu

2016/07/09 at 19:43

SCOM タスクから PowerShell スクリプトを実行する

leave a comment »

System Center 2012 SP1 Operations Manager のタスクとして、PowerShell スクリプトを実行する方法です。

System Center Operations Manager のエージェントタスク

System Center Operations Manager (SCOM)のエージェントタスクは、管理対象(ターゲット)コンピューター上で実行されるスクリプトまたはプログラムです。エージェントタスクを実行すると、ターゲットコンピューター上で処理が実行され、その出力が SCOM コンソールに表示されます。

エージェントタスクは以下の 3 種類(Windows コンピューター向けには 2 種類)です。

  1. コマンドライン タスク
  2. UNIX/Linux シェルコマンド タスク
  3. スクリプト タスク

PowerShell スクリプトを実行したい場合、スクリプト タスクを使用したくなりますが、スクリプト タスクは VBScript および JScript を実行するためのタスクです。PowerShell スクリプトは実行できません。

PowerShell スクリプトを実行する場合は、コマンドライン タスクを使用します。

PowerShell スクリプトを実行するタスクの作成

「ファイルへの完全パス」に powershell.exe のパスを、「パラメーター」にスクリプトファイルの指定を含む、各種引数を設定します。

scom-task-powershell

ここでは、mgr01 の管理共有経由でアクセス可能なスクリプトファイルを実行するスクリプトとして指定しています。-NoLogo で powershell.exe 起動時のロゴ表示を抑制し、-ExecutionPolicy でこのタスクのみ実行ポリシーを Bypass に変更しています。(管理共有上のスクリプトが、外部スクリプトと認識されるため。)

参考

SCOM タスクとして登録する際に、該当のスクリプトのみ実行ポリシーを変更する方法は、以下のポストをご確認ください。

一時的に PowerShell スクリプト実行ポリシーを変更する

with one comment

意外と知らないという方が多かったので、まとめておきます。

PowerShell でスクリプトを実行するには

PowerShell でスクリプトを実行するためには、実行ポリシー(Execution Policy)が適切に設定されている必要があります。実行ポリシーは、ヘルプ トピックの about_Execution_Policies に詳しく書かれています。

Windows PowerShell の実行ポリシーを使用して、Windows PowerShell によって構成ファイルが読み込まれてスクリプトが実行される条件を決定できます。

実行ポリシーは、ローカル コンピューター、現在のユーザー、特定のセッションに設定できます。グループ ポリシー設定を使用して、複数のコンピューターやユーザーに実行ポリシーを設定することもできます。

ローカル コンピューターの実行ポリシーと現在のユーザーの実行ポリシーは、レジストリに格納されます。Windows PowerShell プロファイルに実行ポリシーを設定する必要はありません。特定のセッションの実行ポリシーは、メモリ内にのみ格納され、セッションが閉じられると失われます。

実行ポリシーはユーザーの操作を制限するセキュリティ システムではありません。たとえば、ユーザーはスクリプトを実行できないとき、コマンド ラインでスクリプトの内容を入力すると、容易にポリシーを回避できます。一方で、実行ポリシーを使用して基本的な規則を設定することで、意図せずに違反することを防止することができます。

PowerShell コンソール上でヘルプを表示する場合は、以下を実行します。

Get-Help about_Execution_Policies

現在の設定を取得する場合は、Get-ExecutionPolicy コマンドレットを使用します。

PS C:\> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned


PS C:\>

各スコープに対して、現在どのようなポリシーが適用されているか確認できます。

Execution Policy の種類

簡潔に記載すると以下の通りです。詳細は、TechNet を参照してください。

Restricted

  • いかなる場合もスクリプトや外部モジュールの実行は禁止
  • クライアント系 OS および 2012 までのサーバー系 OS の既定

AllSigned

  • 全てのスクリプトに電子署名が必要
  • 電子署名の証明書が信頼されていない場合は、確認メッセージを表示

RemoteSigned

  • 原則 AllSigned と同じだが、ローカル(NTFS Zone.Identifier 的な意味で)のスクリプトについては署名なしで実行可能
  • 2012 R2 以降のサーバ系 OS の既定

Unrestricted

  • 全てのスクリプトを実行可能だが、ローカルのスクリプト以外は警告を表示

Bypass

  • 全てのスクリプトを実行可能で、かつ警告も出さない

スコープ

実行ポリシーはスコープに対して適用されます。スコープごとに異なるポリシーを設定することもできます。その場合、上位のスコープに設定されたポリシーが優先されます。(全て Undefined の場合は、Restricted とみなされます。)

  1. MachinePolicy : グループポリシーのコンピューターポリシーによる設定
  2. UserPolicy : グループポリシーのユーザーポリシーによる設定
  3. Process : ある PowerShell プロセス内(のみ)
  4. CurrentUser : あるコンピューターの、あるユーザーのみ(あるコンピューターの、特定ユーザーのグローバル設定)
  5. LocalMachine : あるコンピューターのみ(あるコンピューターの、全ユーザーのグローバル設定)

1 と 2 はグループポリシーによる設定、3 ~ 5 は、Set-ExecutionPolicy を使用して設定します。

一時的に Execution Policy を変更する

やっと本題です。上記に記載の通り、PowerShell の実行ポリシーはグループポリシーで強制されていない限りプロセス単位で変更が可能です。かつ、Process スコープ(および CurrentUser スコープ)は、管理者でなくともポリシーの設定が可能です。

PowerShell 起動後(開始後)に変更

PowerShell プロセス起動後は、Set-ExecutionPolicy の –Scope パラメーターで Process を指定すると、それ以降のポリシーを変更できます。

PS C:\> Get-Content C:\ps\sample01.ps1
$PSHOME
PS C:\> .\ps\sample01.ps1
.\ps\sample01.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\ps\sample01.ps1 を読み込むこと
ができません。詳細については、「about_Execution_Policies」(http://go.microsoft.com/fwlink/?LinkID=135170) を参照してく
ださい。
発生場所 行:1 文字:1
+ .\ps\sample01.ps1
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess
PS C:\> Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y
PS C:\> .\ps\sample01.ps1
C:\Windows\System32\WindowsPowerShell\v1.0
PS C:\>

PowerShell 起動時に変更

PowerShell 起動時に、その(これから起動する)PowerShell プロセスのみポリシーを変更したい場合は、powershell.exe のオプションとしてポリシーを渡します。

C:\>powershell.exe -NoLogo -ExecutionPolicy RemoteSigned -File .\ps\sample01.ps1
C:\Windows\System32\WindowsPowerShell\v1.0

C:\>

まとめ

  • 特定のバッチやタスクのみ、一時的な対応などでスクリプトの実行が必要な場合は、一時的に(該当プロセスのみ)実行ポリシーを変更してスクリプトを実行できます。
  • 管理者としてユーザーによる一時的な実行ポリシーの変更が許容できない場合は、グループポリシーでのポリシー配布が必要です。

PowerShell でコード署名用の証明書を作成する

with 2 comments

この Post は PowerShell Advent Calendar 2014 の 12/16 分です。

PowerShell 3.0 からは PKI モジュールに含まれる New-SelfSignedCertificate コマンドレットで自己証明書を作成できるようになりました。検証用証明書の作成に makecert.exe コマンドを利用(用意)しなくてもよくなったため大変便利ですが、New-SelfSignedCertificate で作成した証明書はコード署名には利用できません。

PS C:\> New-SelfSignedCertificate -DnsName test@operationslab.local -CertStoreLocation Cert:\CurrentUser\My

    ディレクトリ: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

Thumbprint                                Subject
----------                                -------
A9E494C41DFD461E94EB3C11790AD11B50F8E5DA  CN=test@operationslab.local

# 自己証明書が作成、保管されます
PS C:\> Get-ChildItem Cert:\CurrentUser\My

    ディレクトリ: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

Thumbprint                                Subject
----------                                -------
A9E494C41DFD461E94EB3C11790AD11B50F8E5DA  CN=test@operationslab.local

# コード署名に利用可能な証明書はありません
PS C:\> Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert
PS C:\>

about_Signing のヘルプ項目には以下のような記述があり、あたかも New-SelfSignedCertificate で新規に作成した証明書を使用して PowerShell スクリプトに署名できそうですが、実際にはできません。これは、証明書の利用用途として「コード署名」が指定されていないためです。

CREATE A SELF-SIGNED CERTIFICATE

——————————–

To create a self-signed certificate in use the New-SelfSignedCertificate cmdlet in the PKI module. This module is introduced in Windows PowerShell 3.0 and is included in Windows 8 and Windows Server 2012. For more information, see the help topic for the New-SelfSignedCertificate cmdlet.

New-SelfSignedCertificate のヘルプを参照すると、以下のパラメータで証明書が構成される旨が記載されています。

  • Subject: Empty
  • Key: RSA 2048
  • EKUs: Client Authentication and Server Authentication
  • Key Usage: Digital Signature, Key Encipherment (a0)
  • Validity Period: One year

このうち、Subject については New-SelfSignedCertificate の DnsName オプションで上書きできますが、その他のパラメータは上書きできません。(CloneCert で複製を行った場合を除きます。)

コード署名を行うためには、EKU(Enhanced Key Usage)に「コード署名(Code Signing)」が含まれている必要があるため、New-SelfSignedCertificate は利用できません。

about_Signing では自己証明書を作成するもう一つの方法として makecert.exe が紹介されていますが、makecert.exe のためだけに Windows SDK をインストールするのは大変手間がかかります。(時間とディスク容量も。)外部コマンドを利用せず証明書を作成する方法はいくつかありますが、COM(Component Object Model)を利用する方法が一番簡単そうでしたので、今回は COM を使います。

※正直、COM は好きではないですが…。開発者ではないのと、レガシー感が払拭できないので…。

以下のコードを実行すると、CurrentUser\My 証明書ストアにコード署名用の証明書が作成されます。(サブジェクトやフレンドり名は適宜読み替えてください。)

# サブジェクト
$subject = "CN=admin@operationslab.local"

# フレンドリ名
$fn = "Operations Lab Code Signing"

# Enhanced Key Usage
# 日本語環境の場合は、日本語又はOIDで指定
# 複数指定する場合は、カンマ区切り(配列)
# $EKU = [Security.Cryptography.Oid[]]("サーバー認証", "クライアント認証")
$eku = [Security.Cryptography.Oid[]]"コード署名"

# Key Usage
# 日本語環境であっても、英語指定
# 複数指定する場合は、カンマ区切りの文字列
$ku = [Security.Cryptography.X509Certificates.X509KeyUsageFlags]"KeyEncipherment, DigitalSignature"

# 有効期限
# NotBefore
$start = [DateTime]::Now.AddDays(-1)
# NotAfter
$end = $start.AddYears(1)


# アルゴリズムと鍵長
$provider = "Microsoft Enhanced Cryptographic Provider v1.0"
$kalgo = [Security.Cryptography.Oid]"RSA"
$klength = 2048
$halgo = [Security.Cryptography.Oid]"SHA1"

# X509KeySpec
# 1: The key can be used to encrypt (including key exchange) or sign depending on the algorithm. For RSA algorithms, if this value is set, the key can be used for both signing and encryption.
# 2: The key can be used for signing.
$kspec = 1

# 保存先
# 現在のユーザーの「個人」証明書ストアに保存
$slocation = [Security.Cryptography.X509Certificates.StoreLocation]"CurrentUser"
$sname = [Security.Cryptography.X509Certificates.StoreName]"My"

$oidlist = New-Object -ComObject X509Enrollment.CObjectIDs
$eku | % {
    $o = New-Object -ComObject X509Enrollment.CObjectID
    $o.InitializeFromValue($_.Value)
    $oidlist.Add($o)
}

$x509eku = New-Object -ComObject X509Enrollment.CX509ExtensionEnhancedKeyUsage
$x509eku.InitializeEncode($oidlist)

$x509ku = New-Object -ComObject X509Enrollment.CX509ExtensionKeyUsage
$x509ku.InitializeEncode([int]$ku)
$x509ku.Critical = $true

$algo = New-Object -ComObject X509Enrollment.CObjectId
$algo.InitializeFromValue($kalgo.Value)

$key = New-Object -ComObject X509Enrollment.CX509PrivateKey
$key.ProviderName = $provider
$key.Algorithm = $algo
$key.Length = $klength
$key.KeySpec = $kspec
$key.ExportPolicy = 0
$key.MachineContext = $false
$key.Create()

$dn = New-Object -ComObject X509Enrollment.CX500DistinguishedName
$dn.Encode($subject, 0)

$hash = New-Object -ComObject X509Enrollment.CObjectId
$hash.InitializeFromValue($halgo.Value)

$req = New-Object -ComObject X509Enrollment.CX509CertificateRequestCertificate
$req.InitializeFromPrivateKey(1, $key, "")
$req.Subject = $dn
$req.Issuer = $dn
$req.NotBefore = $start
$req.NotAfter = $end
$req.SignatureInformation.HashAlgorithm = $hash
$req.X509Extensions.Add($x509eku)
$req.X509Extensions.Add($x509ku)
$req.Encode()

$enroll = New-Object -ComObject X509Enrollment.CX509enrollment
$enroll.InitializeFromRequest($req)
$enroll.CertificateFriendlyName = $fn
$enroll.InstallResponse(2, $enroll.CreateRequest(1), 1, "")

一番のハマり所は、EKU を [Security.Cryptography.Oid[]] にキャストする際、日本語環境では日本語の用途名を指定する必要があるところでしょうか。英語環境の場合は英語で指定する必要があります。分かりやすさのために EKU を文字列からキャストしていますが、ハマらないためには、OID を直接指定したほうが良いかもしれません。

なお、上記のコード実行後に確認すると、コード署名に利用可能な証明書が表示され、署名を行うことができます。

PS C:\> Get-ChildItem Cert:\CurrentUser\My

    ディレクトリ: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

Thumbprint                                Subject
----------                                -------
A9E494C41DFD461E94EB3C11790AD11B50F8E5DA  CN=test@operationslab.local
3AB427ABF2A2C141156D6B5925D88180A120B394  CN=admin@operationslab.local

PS C:\> Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert

    ディレクトリ: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

Thumbprint                                Subject
----------                                -------
3AB427ABF2A2C141156D6B5925D88180A120B394  CN=admin@operationslab.local

PS C:\> $cert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert
PS C:\> Set-AuthenticodeSignature C:\test.ps1 $cert

    ディレクトリ: C:\

SignerCertificate                         Status        Path
-----------------                         ------        ----
3AB427ABF2A2C141156D6B5925D88180A120B394  UnknownError  test.ps1

因みに、Set-AuthenticodeSignature の結果、Status が UnknownError となるのは、自己証明書を使用しているためです。正規の認証局から発行された証明書を使用するか、自己証明書を「信頼されたルート証明機関」ストアへ(にも)配置する(つまりルート証明書として登録する)と、以下のように Status が Vaild になります。

PS C:\> Set-AuthenticodeSignature C:\test.ps1 $cert

    ディレクトリ: C:\

SignerCertificate                         Status  Path
-----------------                         ------  ----
3AB427ABF2A2C141156D6B5925D88180A120B394  Valid   test.ps1

ssh っぽく PowerShell Remoting する

leave a comment »

PowerShell でリモートサーバのシェルを取得する場合、Enter-PSSession するか、New-PSSession した後に Enter するかだと思いますが、毎回 Credential を取得してセッションを生成する(コマンドを入力する)のが面倒になってきたので、最低限の入力でつながるようにしてみました。

function psh {
    [CmdletBinding(SupportsShouldProcess = $false, SupportsPaging = $false, SupportsTransactions = $false, PositionalBinding = $true)]
    param(
        [Parameter(ValueFromPipeline = $false, Mandatory = $true)]
        [ValidateNotNull()]
        [string]$RemoteHost,

        [Parameter(ValueFromPipeline = $false, Mandatory = $false)]
        [switch]$Persist
    )

    $cred = Get-Credential -ErrorAction Stop
    if($Persist) {
        $session = New-PSSession -ComputerName $RemoteHost -Credential $cred -ErrorAction Stop
        Enter-PSSession $session
    } else {
        Enter-PSSession -ComputerName $RemoteHost -Credential $cred
    }
}

使い方

psh [-RemoteHost] <RemoteHostName> [-Persist]

必要なものは <RemoteHostName> 接続先のホスト名のみです。-Persist スイッチを付けると、セッションを永続化します。

個人的には、リモートホストに対して localhost\Administrator でログオンする事がほとんどなので、Credential のアカウント初期値も指定してあげた方が、よりタイプ数を減らせると思いつつも、思い付きで書いたので一旦この辺で。

Written by kazu

2014/08/11 at 22:41

Windows Server 2012 Community Day で使用したデモスクリプト

leave a comment »

Windows Server 2012 Community Day で使用したデモスクリプトを公開します。

デモ用に作成していて、そのまま公開する予定はなかったのですが(きちんとまとめて、別のエントリとしてブログに書こうと思っていた)、まとめるのに時間がかかりそうなので、一旦あるがままで載せておきます。特定の環境でしか動かない様な書き方をしている部分もありますので、ご了承ください。エラー処理が絶対的に足りていないので、本番環境へそのまま適用することはお勧めしません。

※利用は、自己責任でお願いします。

DSC の構成

cls
Set-Location C:\PowerShell

$cred = Get-Credential
$s = New-PSSession 10.200.0.100 -Credential $cred
Enter-PSSession $s

cls
New-Item -ItemType Directory C:\PowerShell -Force
Set-Location C:\PowerShell

# Azure の場合は必要
#Enable-PSRemoting -Force
Get-WindowsFeature | ? Installed

Configuration WebServerConfig
{
    param($Name)

    Node $Name
    {
        WindowsFeature FTPRole
        {
            Name = "Web-FTP-Server"
            Ensure = "Present"
            IncludeAllSubFeature = $true
        }
        
        WindowsFeature TelnetRole
        {
            Name = "Telnet-Client"
            Ensure = "Present"
        }
        
        WindowsFeature TelnetServerRole
        {
            Name = "Telnet-Server"
            Ensure = "Absent"
        }
        
        WindowsFeature WSBRole
        {
            Name = "Windows-Server-Backup"
            Ensure = "Absent"
        }
    }
}

WebServerConfig -Name svw12r2-sv31
Get-WindowsFeature Telnet*,Web-FTP*,*Backup
Start-DscConfiguration -Wait -Verbose -Path .\WebServerConfig
Get-WindowsFeature Telnet*,Web-FTP*,*Backup

exit
Disconnect-PSSession $s
Remove-PSSession $s

Copy-VMFile

cls
Set-Location C:\PowerShell

Copy-VMFile -FileSource Host -Name svw12r2-sv31 -SourcePath C:\PowerShell\_Unattend.xml C:\
Copy-VMFile -FileSource Host -Name svw12r2-sv31 -SourcePath C:\PowerShell\_Unattend.xml C:\Windows

Cross-version Live Migration

cls
Set-Location "C:\PowerShell"

$vmprefix = "test"
$vhdbase = "C:\Hyper-V\vhd\"
$memsize = 256MB
$hvsw = "external"

$sb = {
    param($vmprefix, $vhdbase, $memsize, $hvsw)
    1..3 | % {
        $vmname = $vmprefix + $_.ToString("00")
        $vhdfile = $vhdbase + $vmname + ".vhdx"
        New-VHD -Path $vhdfile -SizeBytes 100MB -Dynamic
        New-VM -Name $vmname -MemoryStartupBytes $memsize -VHDPath $vhdfile -SwitchName $hvsw -BootDevice IDE
        Set-VMProcessor -VMName $vmname -CompatibilityForMigrationEnabled $true
        Start-VM -Name $vmname
    }
}

$clean = {
    param($vmprefix = "test", $vhdbase = "C:\Hyper-V\vhd\")
    Stop-VM -Name ${vmprefix}* -Force -TurnOff
    Remove-VM -Name ${vmprefix}* -Force
    Remove-Item -Path ${vhdbase}${vmprefix}* -Force
}

$srchv = "svw12-hv11"
$dsthv = "svw12r2-hv01"
$dstpath = "C:\Hyper-V\vhd"

Get-VM -ComputerName $srchv
Invoke-Command -ComputerName $srchv -ScriptBlock $clean
Invoke-Command -ComputerName $srchv -ScriptBlock $sb -ArgumentList $vmprefix,$vhdbase,$memsize,$hvsw

$targetvm = "test01"
Get-VM -ComputerName $srchv
#Start-VM -ComputerName $srchv -Name $targetvm
Get-VM -ComputerName $srchv -Name $targetvm

Move-VM -ComputerName $srchv -Name $targetvm -DestinationHost $dsthv -IncludeStorage -DestinationStoragePath $dstpath
#Measure-Command { Move-VM -ComputerName $srchv -Name $targetvm -DestinationHost $dsthv -IncludeStorage -DestinationStoragePath $dstpath }

Get-VM -ComputerName $srchv
Get-VM -ComputerName $dsthv

構成変更前にスナップショットを作成し、構成変更に失敗したら元に戻す

成功するパターン

cls
Set-Location "C:\PowerShell"

$target = "svw12r2-sv01"
$s = { Install-WindowsFeature Telnet-Client | Out-Null ; $? }
#$s = { Install-WindowsFeature Hyper-V | Out-Null ; $? }

Get-VM -Name $target
Get-VMSnapshot -VMName $target

$sn = $target + " # " + (Get-Date -UFormat "%Y-%m-%d %H:%M:%S")
Write-Host "スナップショットを取得します..."
Checkpoint-VM -Name $target -SnapshotName $sn
Get-VMSnapshot -VMName $target

$ss = Get-VMSnapshot -VMName $target -Name $sn
$ret = Invoke-Command -ComputerName $target -ScriptBlock $s
if($ret) {
    Write-Host "スナップショットを削除します..."
    Remove-VMSnapshot -VMSnapshot $ss
} else {
    Write-Host "スナップショットの状態へ復元します..."
    Restore-VMSnapshot -VMSnapshot $ss -Confirm:$false
    #Write-Host "スナップショットを削除します..."
    #Remove-VMSnapshot -VMSnapshot $ss
}

Get-VMSnapshot -VMName $target

失敗するパターン

cls
Set-Location "C:\PowerShell"

$target = "svw12r2-sv01"
#$s = { Install-WindowsFeature Telnet-Client | Out-Null ; $? }
$s = { Install-WindowsFeature Hyper-V | Out-Null ; $? }

Get-VM -Name $target
Get-VMSnapshot -VMName $target

$sn = $target + " # " + (Get-Date -UFormat "%Y-%m-%d %H:%M:%S")
Write-Host "スナップショットを取得します..."
Checkpoint-VM -Name $target -SnapshotName $sn
Get-VMSnapshot -VMName $target

$ss = Get-VMSnapshot -VMName $target -Name $sn
$ret = Invoke-Command -ComputerName $target -ScriptBlock $s
if($ret) {
    Write-Host "スナップショットを削除します..."
    Remove-VMSnapshot -VMSnapshot $ss
} else {
    Write-Host "スナップショットの状態へ復元します..."
    Restore-VMSnapshot -VMSnapshot $ss -Confirm:$false
    #Write-Host "スナップショットを削除します..."
    #Remove-VMSnapshot -VMSnapshot $ss
}

Get-VMSnapshot -VMName $target

Hyper-V Replica Test Failover

cls
Set-Location "C:\PowerShell"

$replicahost = "svw12r2-hv02"

$target = @("svw12r2-dc01", "svlwr7-sv61", "svw12r2-sv01")
#$target = @("svw12r2-sv01")
$network = "external-test"

$fo = {
    param($target, $network)
    New-VMSwitch -Name $network -SwitchType Private | Out-Null
    $target | % {
        $vm = Start-VMFailover -AsTest -VMName $_ -Confirm:$false
        Connect-VMNetworkAdapter -VMName $vm.VMName -SwitchName $network | Out-Null
        Start-VM -VM $vm | Out-Null
        $vm.VMName
    }
}

$clean = {
    param($target, $network)
    $target | % {
        Stop-VMFailover -VMName $_
    }
    Remove-VMSwitch -Name $network -Force
}

Get-VM -ComputerName $replicahost
Get-VMSwitch -ComputerName $replicahost

$fovm = Invoke-Command -ComputerName $replicahost -ScriptBlock $fo -ArgumentList $target,$network

Get-VM -ComputerName $replicahost
Get-VMSwitch -ComputerName $replicahost
Get-VMNetworkAdapter -VMName $fovm[0] -ComputerName $replicahost | Format-List VMName,SwitchName

Invoke-Command -ComputerName $replicahost -ScriptBlock $clean -ArgumentList $target,$network

Get-VM -ComputerName $replicahost
Get-VMSwitch -ComputerName $replicahost

VM の展開(DHCP 版)

cls
Set-Location C:\PowerShell

$vmname = "svw12r2-sv111"
$ipaddr = "10.200.0.111"
$netmask = 24

$vhdbase = "D:\Hyper-V\Virtual Hard Disks\"
$vmtpl = "D:\Hyper-V\Virtual Hard Disks\svw12r2-template-sysprep.vhdx"
$unattend = "C:\PowerShell\Unattend-static.xml"
#$unattend = "C:\Users\Administrator\Documents\Unattend.xml"

$tmpvhd = "D:\Hyper-V\Virtual Hard Disks\tmp.vhdx"
$vhdfile = $vhdbase + $vmname + ".vhdx"
$driveletter = "F:\"
$dstfile = $driveletter + "Unattend.xml"

New-VHD -Path $vhdfile -ParentPath $vmtpl -Differencing

$memsize = 2048MB
$hvsw = "Internal"
$gen = 2

$vm = New-VM -Name $vmname -MemoryStartupBytes $memsize -VHDPath $tmpvhd -SwitchName $hvsw -Generation $gen -BootDevice VHD
$vm | Set-VMProcessor -Count 2 -CompatibilityForMigrationEnabled $true
$vm | Enable-VMIntegrationService -Name "Guest Service Interface"

Start-VM $vm
Start-Sleep -Seconds 3
Stop-VM $vm -TurnOff

$macaddr = (Get-VMNetworkAdapter -VM $vm).MacAddress
$s = $macaddr[0] + $macaddr[1] + "-" + $macaddr[2] + $macaddr[3] + "-" + $macaddr[4] + $macaddr[5] + "-" + $macaddr[6] + $macaddr[7] + "-" + $macaddr[8] + $macaddr[9] + "-" + $macaddr[10] + $macaddr[11]

Set-VMHardDiskDrive -VMName $vmname -ControllerType SCSI -ControllerLocation 0 -Path $vhdfile

Mount-VHD -Path $vhdfile
$(Get-Content -Encoding UTF8 $unattend) -replace "@@@@vmname@@@@", $vmname -replace "@@@@ipaddr@@@@", ($ipaddr + "/" + [string]$netmask) -replace "@@@@macaddr@@@@", $s | Out-File -Encoding utf8 $dstfile
Dismount-VHD -Path $vhdfile
Start-VM $vm

VM の展開(Static IP 版)

cls
Set-Location C:\PowerShell

$vmname = "svw12r2-sv199"
$vhdbase = "D:\Hyper-V\Virtual Hard Disks\"
$vmtpl = "D:\Hyper-V\Virtual Hard Disks\svw12r2-template-sysprep-vmmode.vhdx"
$unattend = "C:\PowerShell\Unattend-dhcp.xml"

$vhdfile = $vhdbase + $vmname + ".vhdx"
$driveletter = "F:\"
$dstfile = $driveletter + "Unattend.xml"

New-VHD -Path $vhdfile -ParentPath $vmtpl -Differencing

$memsize = 2048MB
$hvsw = "Internal"
$gen = 2

$vm = New-VM -Name $vmname -MemoryStartupBytes $memsize -VHDPath $vhdfile -SwitchName $hvsw -Generation $gen -BootDevice VHD
$vm | Set-VMProcessor -Count 2 -CompatibilityForMigrationEnabled $true
$vm | Enable-VMIntegrationService -Name "Guest Service Interface"

Mount-VHD -Path $vhdfile
$(Get-Content -Encoding UTF8 $unattend) -replace "@@@@vmname@@@@", $vmname | Out-File -Encoding utf8 $dstfile
Dismount-VHD -Path $vhdfile
Start-VM $vm