Windowsのhot-patch機構、想定外のパッチが当たると再起動不能に
If somebody tries to hot-patch an already-hot-patched function
Windowsのhot-patchはWindows Update専用に設計されており、他のコードによるパッチを想定していない。もし不正なパッチが検出されると、そのファイルはhot-patch不可と判断され再起動が必要になる。さらに、プリスキャン後に別のパッチが当たる競合状態では、途中まで適用されたバイナリがメモリ上に残り、ロールバックも失敗する可能性がある。Raymond Chenがこの危険性を指摘する。
アプリケーションがhot-patchingスペースを使うのは、火災報知器の区域に駐車するようなものだ。消防車が来るまでは何も問題ないように見えるが、消防車が到着できずに家が全焼してしまう。
HNでの議論
23- drdexebtjl
関数をフックすることをMicrosoftが「rogue」とみなしたり、あなたが「許可されていない」行為だとするのは興味深い枠組みだ。Microsoft自身がdetoursライブラリを作っているのに、以前はこんなふうに枠組み付けしたことはなかった。
さらに、この説明から抜けている点:フックは通常、プロセスごとに、ユーザー空間から適用される。動的ライブラリのコードページは、パッチを適用するために書き込むと、共有ページからCoWされる。
Windows Updateも同様に動作するのか、それとも何らかの形で元の共有ページを変更し、すべてのプロセスに影響を与えるのか?単一プロセス内のフックがシステム全体のhot patchingを無効にするのか?
- jonhohle
以前の仕事で、モノリシックなdockerイメージの上に個々のJavaクラスファイルをパッチするdocker buildを書いた。これはランタイムパッチではなく、緊急時に数キロバイトだけの単一レイヤーを素早くデプロイできるようにするものだった。
興味深いことに、同様の制約があり、ビルド時にそれをチェックしていた:公開ABIの変更であってはならず、一度に1つのパッチのみ。
- fsfod
Windowsの並列DLLローディングも、一部のNT DLL関数がフックされているのを検出すると、プロセスに対して防御的に自身を無効化する https://stackoverflow.com/questions/42789199/why-there-are-t...