Здрасти.
Хотел бы обсудить рк атаку на хэндлы. Суть в следующем. Nt-хэндлер выполняет некоторые дествия с обьектом, если они завершаются с ошибкой, то вызывается оригинальный сервис. В начале всегда ObReferenceObjectByHandle(), которая залочивает обьект и возвращает ссылку на него по описателю. Если передан инвалидный описатель, то вызывается оригинальный сервис с темже значением описателя. В это время другой тред может создать описатель и оригинальный сервис успешно отработает. Понятно что проблема в синхронизации - не вовремя созданный описатель приведёт к детекту. Чтобы это избежать необходимо каким то образом определить что поток покинул ObReferenceObjectByHandle(). Только тогда можно создать обьект. Возможный способ - использовать трассировку описателей. Но есть много подводных камней. Предлагайте ваше решение.
Хотел бы обсудить рк атаку на хэндлы. Суть в следующем. Nt-хэндлер выполняет некоторые дествия с обьектом, если они завершаются с ошибкой, то вызывается оригинальный сервис. В начале всегда ObReferenceObjectByHandle(), которая залочивает обьект и возвращает ссылку на него по описателю. Если передан инвалидный описатель, то вызывается оригинальный сервис с темже значением описателя. В это время другой тред может создать описатель и оригинальный сервис успешно отработает. Понятно что проблема в синхронизации - не вовремя созданный описатель приведёт к детекту. Чтобы это избежать необходимо каким то образом определить что поток покинул ObReferenceObjectByHandle(). Только тогда можно создать обьект. Возможный способ - использовать трассировку описателей. Но есть много подводных камней. Предлагайте ваше решение.