4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Windows 10 SecurityCenterを無効化してバックアップをするまでの長い道のり

Posted at

#事の始まり

2018/04の大型アップデートを当てたあたりから、イベントビューアにへんなエラーログがいっぱい出て、アプリの起動や動作が重くなる現象が発生するようになった。以下が変なログの例だ。

ソース(S) : SecurityCenter
イベントID(E) : 16
レベル(L) : エラー
ユーザー(U) : N/A
オペコード(O) : 
タグの日付(D) : YYYY/MM/DD HH:MM:SS
タスクカテゴリ(Y) : なし
キーワード(K) : クラシック
コンピューター(R) : (自分のPC名)
EventData : SECURITY_PRODUCT_STATE_ON 02000000 
全般 : 
 の状態を SECURITY_PRODUCT_STATE_ON に更新中にエラーが発生しました。
ソース(S) : DistributedCOM
イベントID(E) : 10010
レベル(L) : エラー
ユーザー(U) : (自分のPC名)\(ユーザ名)
オペコード(O) : 情報
タグの日付(D) : YYYY/MM/DD HH:MM:SS
タスクカテゴリ(Y) : なし
キーワード(K) : クラシック
コンピューター(R) : (自分のPC名)
EventData : param1 {AB8902B4-09CA-4BB6-B78D-A8F59079A8D5}
全般 : 
 サーバー {AB8902B4-09CA-4BB6-B78D-A8F59079A8D5} は、必要なタイムアウト期間内に DCOM に登録しませんでした。

とよくわからない、正体不明エラーがものすごい出るようになりました、何もしないのに、5秒間隔くらいで出まくる
確かWindowsのSecurityCenterは他社のセキュリティツールを使っているとよく問題を起こすうえ、回復方法が復元ポイントからの復帰しかない。

問い合わせてみた

念のためMicroSoftのサポートに連絡をしてみたが案の定

・「新規アカウントを作成」して同じ問題が起きるかどうか確認する。

・システム ファイルの修復などを行う以下の手順を実行する。

1. 左下のスタート メニューを右クリックし、[コマンド プロンプト (管理者) ] を選択します。

2. [このアプリが PC に変更を加えることを許可しますか?] と表示された場合は [はい (Y)] を選択します。

3. 黒いコマンド プロンプト画面に以下を入力して Enter キーを押します。
dism /online /cleanup-image /restorehealth

4. 同じプロンプト画面に以下を入力して Enter キーを押します。
sfc /scannow

・復元ポイントから問題の発生する前の日付に復元してみる

というお決まり回答をもらった、なお、「新規アカウントを作成」と「ファイルの修復」は試してみてダメだった。
「復元ポイント」は経過日数がありすぎて、戻すといろいろ巻き戻るのであきらめた。

悪あがきしてみよう

これは、最終手段としてクリーンインストールしかないかな。とあきらめモードでしたが、1つ思いついたことがあったので試してみることに。
Windows Security Centerはあくまでセキュリティ関連の告知とセキュリティーツールの集約をしているだけのはずなので、サードパーティ製のツールで一時しのぎできないかと。
というのも、バックアップを取ろうにも謎のエラーイベントのおかげで、ツール類の動作が遅くて話にならないため、一旦SecurityCenterを止めて、バックアップデータを確保したい。

一旦問題のサービスを止めたい

確か、Windows7の時は管理者起動した、コマンドプロンプトでsc.exeでサービスが停止できたはず。
SecurityCenterの実体はwscsvcなので、以下のように停止を打ち込んでみた

sc.exe stop "wscsvc"

[SC] OpenService FAILED 5:

アクセスが拒否されました。

あれ?、じゃあ起動無効化にして再起動すればいいのでは、と思って無効化コマンド

sc.exe config "wscsvc" start=disabled

[SC] OpenService FAILED 5:

アクセスが拒否されました。

む、管理者なのにアクセスできない…じゃあ、サービスのACLを確認してみると

sc.exe sdshow "wscsvc"

D:(A;;CCLCSWRPLORC;;;BU)
(A;;CCLCSWRPLOCRRC;;;SY)
(A;;CCLCSWRPLOCRRC;;;BA)
(A;;CCLCSWRPLORC;;;IU)
(A;;CCLCSWRPLORC;;;SU)
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464)
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-80-259296475-4084429506-1152984619-38739575-565535606)
S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

なんだと…、管理者でも扱えない権限だと…
やむを得ず、一旦Taskkillでつぶすか

まず該当プロセスを探して

tasklist /SVC /FI "SERVICES eq wscsvc"

イメージ名                     PID サービス
========================= ======== ============================================
svchost.exe                  12164 wscsvc

見つけた、PIDは12164だった。で、これを

taskkill /F /PID 12164

成功: PID 12164 のプロセスは強制終了されました。

お、止められた。確認してみる

tasklist /SVC /FI "SERVICES eq wscsvc"
情報: 指定された条件に一致するタスクは実行されていません。

よし、止まってる、今のうちにバックアップだ…
と思ってたら、10分ほどで…急にバックアップが激重になったので、再度プロセスを確認してみると

tasklist /SVC /FI "SERVICES eq wscsvc"

イメージ名                     PID サービス
========================= ======== ============================================
svchost.exe                   7696 wscsvc

あれ、復活してるやん。だめか。無効化して止めるしかないか。

Windows10のサービスにはACLが付与されたんだよ!!

たしか、WindowsのサービスのACL変更は、sc.exe sdset "サービス名" "SDDL表記"だったと記憶してる
sc.exe sdshow "wscsvc"で確認した限り、DACLの指定とSACLの指定が指定されているので、これにのっとって権限を追加する

  • SDDL表記について
SDDL表記 用途
O:ユーザーSID オブジェクト所有者のSIDの指定
G:グループSID オブジェクトのプライマリグループのSIDの指定
D:DACLフラグ(ACE文字列1)(ACE文字列2)……(ACE文字列n) DACLの指定
S:SACLフラグ(ACE文字列1)(ACE文字列2)……(ACE文字列n) SACLの指定
  • DACLの指定 - DACLフラグ(SACLフラグも同じものになる)
文字列 フラグ名 意味
"P" SE_DACL_PROTECTED DACLが継承されたACEによって変更されないように保護する
"AR" SE_DACL_AUTO_INHERIT_REQ DACLを子オブジェクトへ継承するように要求する
"AI" SE_DACL_AUTO_INHERITED 継承によって作成されたDACLであることを示す
  • DACLの指定 - ACE文字列
書式:(ACEタイプ;ACEフラグ;権利;オブジェクトGUID;継承オブジェクトGUID;アカウントSID)
  • ACEタイプ
文字列 タイプ名 意味
"A" SDDL_ACCESS_ALLOWED アクセス許可
"D" SDDL_ACCESS_DENIED アクセス拒否
"OA" SDDL_OBJECT_ACCESS_ALLOWED オブジェクトアクセス許可
"OD" SDDL_OBJECT_ACCESS_DENIED オブジェクトアクセス拒否
"AU" SDDL_AUDIT 監査
"AL" SDDL_ALARM 警告
"OU" SDDL_OBJECT_AUDIT オブジェクト監査
"OL" SDDL_OBJECT_ALARM オブジェクト警告
  • 権利
文字列 権利名 意味
"GA" SDDL_GENERIC_ALL 全アクセス権(読み書き実行)
"GR" SDDL_GENERIC_READ 読み出し
"GW" SDDL_GENERIC_WRITE 書き込み
"GX" SDDL_GENERIC_EXECUTE 実行
"RC" SDDL_READ_CONTROL ACL情報の読み取り
"SD" SDDL_STANDARD_DELETE 削除
"WD" SDDL_WRITE_DAC DACLの書き込み
"WO" SDDL_WRITE_OWNER 所有者情報の書き込み
"RP" SDDL_READ_PROPERTY オブジェクトのプロパティの読み出し
"WP" SDDL_WRITE_PROPERTY オブジェクトのプロパティの書き込み
"CC" SDDL_CREATE_CHILD 子オブジェクトの作成
"DC" SDDL_DELETE_CHILD 子オブジェクトの削除
"LC" SDDL_LIST_CHILDREN 子オブジェクトの一覧
"SW" SDDL_SELF_WRITE 検証済み書き込みアクセス権によって制御される操作の実行
"LO" SDDL_LIST_OBJECT オブジェクトの一覧
"DT" SDDL_DELETE_TREE 全ての子オブジェクトの削除
"CR" SDDL_CONTROL_ACCESS 拡張アクセス権によって制御される操作の実行
"FA" SDDL_FILE_ALL 全アクセス権(読み書き実行)
"FR" SDDL_FILE_READ 読み出し
"FW" SDDL_FILE_WRITE 書き込み
"FX" SDDL_FILE_EXECUTE 実行
"KA" SDDL_KEY_ALL 全アクセス権(読み書き実行)
"KR" SDDL_KEY_READ 読み出し
"KW" SDDL_KEY_WRITE 書き込み
"KX" SDDL_KEY_EXECUTE 実行
  • オブジェクトGUID
パスワードの変更やリセットなど、特別なタスクの実行を許可するための権利を表すオブジェクトのGUID文字列
  • 継承オブジェクトGUID
ACEを継承するオブジェクトのGUIDを表す文字列
  • アカウントSID
文字列 アカウント名
"AO" Account operators
"AN" Anonymous Logon
"AU" Authenticated Users
"BA" ビルトイン(Built-in) Administrators
"BG" ビルトイン(Built-in) Guests
"BO" Backup Operators
"BU" ビルトイン(Built-in) Users
"CA" Cert Server Admins
"CG" Creator Group
"CO" Creator Owner
"DA" Domain Administrators
"DC" Domain Computers
"DD" Domain Controllers
"DG" Domain Guests
"DU" Domain Users
"EA" Enterprise Administrators
"ED" Enterprise Domain Controllers
"IU" Interactive
"LA" ローカル(Local) Administrator
"LG" ローカル(Local) Guest
"LS" ローカル(Local) Service
"NO" Network Configuration Operators
"NS" Network Service
"NU" Network
"PA" Group Policy Administrators
"PO" Printer Operators
"PS" Principal Self
"PU" Power Users
"RC" Restricted Code
"RD" Terminal Server Users (RD=Remote Desktop)
"RE" Replicator
"RS" RAS Servers
"RU" Pre-Windows 2000 Compatible Access
"SA" Schema Administrators
"SO" Server Operators
"SU" Service
"SY" ローカル(Local) System
"WD" Everyone (WD=world)
"S-1-……" 標準的な表記によるSID

DACLのまとめ

つまり、sc.exe sdshow "wscsvc"で見えた、以下を例にとると

書式:(ACEタイプ;ACEフラグ;権利;オブジェクトGUID;継承オブジェクトGUID;アカウントSID)なので

D:(A;;CCLCSWRPLORC;;;BU)

権利の"CCLCSWRPLORC"は2文字ずつ区切るので

DACLキー指定:
 フラグなし
  (
   アクセス許可;
   ACEフラグなし;
    CC: SDDL_CREATE_CHILD
    LC: SDDL_LIST_CHILDREN
    SW: SDDL_SELF_WRITE
    RP: SDDL_READ_PROPERTY
    LO: SDDL _LIST_OBJECT
    RC: READ_CONTROL
    ;
   オブジェクトGUIDなし;
   継承オブジェクトGUIDなし;
   BU:ビルトイン(Built-in)Users
  )

っていう意味になる、ややこしい、上にわからん

実際にアクセス許可を与えてみよう。

※ここで注意してほしいのが、設定は追加じゃなくて上書きなので、必ず前のACLはバックアップしておくこと

バックアップに自信がなかったらレジストリの以下のキーをエクスポートしておくといい

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<該当のサービス名>\Security

最終確認

まず、自分のユーザのSIDを確認する

whoami /user

USER INFORMATION
----------------

ユーザー名        SID
================= ==============================================
localpc0001\owner S-1-5-21-2379077036-1330717485-1244253989-1001

こんな感じに、ユーザ名にホスト名\ユーザ名、SIDに自分のSIDが確認できる

次に対象サービスのACLを確認する

sc.exe sdshow "wscsvc"

実際に書き換えるのは矢印のついてるところとモノを自分のSIDで一行追加する
わかりやすいように、ACEごとに改行してる

D:(A;;CCLCSWRPLORC;;;BU)
(A;;CCLCSWRPLOCRRC;;;SY)
(A;;CCLCSWRPLOCRRC;;;BA)
(A;;CCLCSWRPLORC;;;IU)
(A;;CCLCSWRPLORC;;;SU)
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464) ← 参考にする
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-80-259296475-4084429506-1152984619-38739575-565535606) ← 参考にする
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-2379077036-1330717485-1244253989-1001) ← 追加する
S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

実際に設定する
sc.exe "ホスト名" sdset "サービス名" "SDDL"
なので、分解したのを1行に戻して実行

sc.exe "localpc0001" sdset "wscsvc" "D:(A;;CCLCSWRPLORC;;;BU)(A;;CCLCSWRPLOCRRC;;;SY)(A;;CCLCSWRPLOCRRC;;;BA)(A;;CCLCSWRPLORC;;;IU)(A;;CCLCSWRPLORC;;;SU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-80-259296475-4084429506-1152984619-38739575-565535606)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-2379077036-1330717485-1244253989-1001)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"

終わったら、今度こそ

sc.exe config "wscsvc" start=disabled

[SC] ChangeServiceConfig SUCCESS

よし、止まった、これで再起動してバックアップしたら、クリーンインストールだ!!
長かった、ほんと、WindowsのACLは厄介すぎる。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?