しばらく前から、やけにメモリが不足するなと思ってたら、どうも svchost.exe が戦犯らしい。
以下の service をホストしてる svchost が 9GB 超食いつぶして、メモリを圧迫していた。
この2つのどちらかが戦犯じゃないかって雰囲気。
ただし、svchost 自体がメモリリークさせてる可能性もあるので、それが確実ってわけじゃない。
この 2 つのサービスは restart させようとしても、エラーが出て出来ない。
どうも依存関係のあるサービスを一旦停止させようとして失敗してる模様。
とりあえず、svchost まるごとだと restart は可能なので、
なんで、個別サービスだと強制的に restart 出来ないのかは謎。
使用中のメモリは 9MB 程度に減ったので、対処療法的にはこれで問題ないんだけど、凄い面倒くさい。、
あと、以下のような記事を見つけた。
これを見ると、
今回、問題を生じている svchost がホストしている service からすると前者の可能性はありそうな気がする。
Event log のクリアはちょと嫌な気がするので、試してみるべきかどうかは、ちょっと悩ましい。
追記:
svchost の restart は一見大丈夫そうに見えたんだけど、SMB によるファイル共有が腐ってた。
上手く直せなかったので、あえなく reboot、orz
以下の service をホストしてる svchost が 9GB 超食いつぶして、メモリを圧迫していた。
- COM+ Event System
- Function Discovery Host
- Windows Font Cache Service
- Network List Service
- Network Store Interaface Service
- Diagnostic Service Host
- WinHTTP Web Proxy Auto-Discovery Service
- Network Store Interaface Service
- Diagnostic Service Host
この2つのどちらかが戦犯じゃないかって雰囲気。
ただし、svchost 自体がメモリリークさせてる可能性もあるので、それが確実ってわけじゃない。
この 2 つのサービスは restart させようとしても、エラーが出て出来ない。
どうも依存関係のあるサービスを一旦停止させようとして失敗してる模様。
とりあえず、svchost まるごとだと restart は可能なので、
なんで、個別サービスだと強制的に restart 出来ないのかは謎。
使用中のメモリは 9MB 程度に減ったので、対処療法的にはこれで問題ないんだけど、凄い面倒くさい。、
あと、以下のような記事を見つけた。
- Windows tips & how-tos / How to fix: Svchost.exe (netsvcs) memory leak or high CPU usage problems
これを見ると、
- Event viewer log の肥大化
- Windows Update の不具合
今回、問題を生じている svchost がホストしている service からすると前者の可能性はありそうな気がする。
Event log のクリアはちょと嫌な気がするので、試してみるべきかどうかは、ちょっと悩ましい。
追記:
svchost の restart は一見大丈夫そうに見えたんだけど、SMB によるファイル共有が腐ってた。
上手く直せなかったので、あえなく reboot、orz
念のために各サービスのバイナリの SHA256 取って VirusTotal に投げてみる。
まず、
まぁ、当然なんだけど、どれもアラートには引っかからない状態。
また、
C:\Windows\system32\FntCache.dll
以外は
"Trusted source! This file belongs to the Microsoft Corporation software catalogue."
って言われて、
"Signature verification" も "Signed file, verified signature"
って出る。
まぁ、検証出来てるよってのは良いんだけど、
これは一体何を根拠にしているんだろう?
少なくとも手元のバイナリ見る限り、
これらのファイルの「プロパティ」を開いてみても「デジタル署名」のタブが出て来ないので、
コードサイニングはされてない気がするのだが、
"Signed file, verified signature"
は何を根拠にそう言っているのかが不明。
また、FntCache.dll だけがそこから除外されているのはなぜなのか???
改めて、C:\Windos 以下のバイナリを眺めてみると sytem32\drivers 以下の .sys ファイルは「プロパティ」開くとある程度の確率で「デジタル署名」のタブが出て来るんだけど、例えば、system32\drivers\1394ophci.sys なんかは「詳細」タブ見ると Microsoft 製って出てるのに、「デジタル署名」のタブ出て来ない。
これは、ちょっと驚きと言うか、ドライバは要コードサイニングになったって話はどこに行った???って感じ。
Windows SDK に入ってる signtool.exe も使って確認してみたけど、以下の様な感じで、やっぱり「プロパティ」に「デジタル署名」のタブがないファイルは検証出来ない。
Windows 10 だと流石に explorer.exe くらいにはコードサイニングされているのは確認したけど、少なくとも Windows 7 だと explorer.exe でさえもコードサイニングされてない。
コードサイニングの枠組み入れておきながら、なんで、こんなにガバガバなの!?
コアなバイナリにさえも使ってないとか、そりゃ、世間一般にウイルスにも蔓延するわって思う。
コードサイニングのない野良バイナリを一切実行させるなとは言わないし、現実問題としてそれをされてしまうと、自分でビルドしたバイナリの実行に不自由生じて地味に困る状況が目に見えるため、流石にそこまではやってくれるなとは思うけど、
少なくとも Microsoft 製を名乗るバイナリが偽造や改竄されてない事は検証できて然るべきだろう。
ウイルス対策ソフトによる誤検出対策としても極めて有効なはずだし。
Microsoft は阿呆なんだろうか?
まず、
$ cat <<EOD | while read -r i; do sha256sum "$(cygpath -m "$i")"; done | awk '{url="https://www.virustotal.com/ja/file/" $1 "/analysis/";print "- [[" gensub("^.", "\\h", 1, url) ">" url "]]";}' C:\Windows\system32\es.dll C:\Windows\system32\FntCache.dll C:\Windows\system32\netprofm.dll C:\Windows\system32\nsisvc.dll C:\Windows\system32\wdi.dll c:\windows\system32\winhttp.dll EODとして以下の URL を得た。
- https://www.virustotal.com/ja/file/24121751b7306225ad1c808442d7b030def377e9316aa0a3c5c7460e87317881/analysis/
- https://www.virustotal.com/ja/file/737b5e89a858d7e3aec8bf660aa4fcc56501a69468ea143531286016af7c0b33/analysis/
- https://www.virustotal.com/ja/file/2e8645285921edb98bb2173e11e57459c888d52e80d85791d169c869de8813b9/analysis/
- https://www.virustotal.com/ja/file/497a1dcc5646ec22119273216df10d5442d16f83e4363770f507518cf6eaa53a/analysis/
- https://www.virustotal.com/ja/file/4bab9274ded8f7ac4a52b8739f501323fffa0367caa24bfafdb5523812e0ce39/analysis/
- https://www.virustotal.com/ja/file/07f820e462885e671023074ebf69c99a87352bf5f00a47b9efbe164463f8dba9/analysis/
まぁ、当然なんだけど、どれもアラートには引っかからない状態。
また、
C:\Windows\system32\FntCache.dll
以外は
"Trusted source! This file belongs to the Microsoft Corporation software catalogue."
って言われて、
"Signature verification" も "Signed file, verified signature"
って出る。
まぁ、検証出来てるよってのは良いんだけど、
これは一体何を根拠にしているんだろう?
少なくとも手元のバイナリ見る限り、
これらのファイルの「プロパティ」を開いてみても「デジタル署名」のタブが出て来ないので、
コードサイニングはされてない気がするのだが、
"Signed file, verified signature"
は何を根拠にそう言っているのかが不明。
また、FntCache.dll だけがそこから除外されているのはなぜなのか???
改めて、C:\Windos 以下のバイナリを眺めてみると sytem32\drivers 以下の .sys ファイルは「プロパティ」開くとある程度の確率で「デジタル署名」のタブが出て来るんだけど、例えば、system32\drivers\1394ophci.sys なんかは「詳細」タブ見ると Microsoft 製って出てるのに、「デジタル署名」のタブ出て来ない。
これは、ちょっと驚きと言うか、ドライバは要コードサイニングになったって話はどこに行った???って感じ。
Windows SDK に入ってる signtool.exe も使って確認してみたけど、以下の様な感じで、やっぱり「プロパティ」に「デジタル署名」のタブがないファイルは検証出来ない。
C:\Windows\system32>"C:\Program Files (x86)\Windows Kits\8.0\bin\x64\signtool.exe" verify C:\Windows\system32\drivers\acpi.sys File: C:\Windows\system32\drivers\acpi.sys Index Algorithm Timestamp ======================================== 0 sha1 Authenticode Successfully verified: C:\Windows\system32\drivers\acpi.sys
C:\Windows\system32>"C:\Program Files (x86)\Windows Kits\8.0\bin\x64\signtool.exe" verify C:\Windows\system32\drivers\1394ohci.sys File: C:\Windows\system32\drivers\1394ohci.sys Index Algorithm Timestamp ======================================== SignTool Error: WinVerifyTrust returned error: 0x00000057 Number of errors: 1
C:\Windows\system32>"C:\Program Files (x86)\Windows Kits\8.0\bin\x64\signtool.exe" verify C:\Windows\system32\es.dll File: C:\Windows\system32\es.dll Index Algorithm Timestamp ======================================== SignTool Error: WinVerifyTrust returned error: 0x00000057 Number of errors: 1
Windows 10 だと流石に explorer.exe くらいにはコードサイニングされているのは確認したけど、少なくとも Windows 7 だと explorer.exe でさえもコードサイニングされてない。
コードサイニングの枠組み入れておきながら、なんで、こんなにガバガバなの!?
コアなバイナリにさえも使ってないとか、そりゃ、世間一般にウイルスにも蔓延するわって思う。
コードサイニングのない野良バイナリを一切実行させるなとは言わないし、現実問題としてそれをされてしまうと、自分でビルドしたバイナリの実行に不自由生じて地味に困る状況が目に見えるため、流石にそこまではやってくれるなとは思うけど、
少なくとも Microsoft 製を名乗るバイナリが偽造や改竄されてない事は検証できて然るべきだろう。
ウイルス対策ソフトによる誤検出対策としても極めて有効なはずだし。
Microsoft は阿呆なんだろうか?
タグ
コメントをかく