Как стать автором
Обновить

Комментарии 14

По существу написать нечего, но такие истории всегда захватывающие и читаются на одном дыхании, из минусов только навязчивое послевкусие, что я не true-программист.

А ещё я впервые читаю расследование, в конце которого "убийцу" так и не нашли.
Интересно, такие книги-детективы существуют?

А если в объявлении функции явно указать extern __attribute__((__sysv_abi__)) void my_linux_style_assembly_function(); компилятор под виндой сам не сохранит недостающие регистры?

Сохранит, если поймёт этот атрибут.

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Поэтому пожалуйста, восстанавливайте регистры, завершив с ними работу

Поэтому пожалуйста не используйте компиляторы которые делают оптимизации на не обоснованных утверждениях. Каким надо быть наивным что бы вызывать внешние библиотеки и ожидать что там нет ошибок и регистры будут сохранены. Особенно с компиляторами которые любят накинуть на вентилятор в случае UB. При вызове сторонних библиотек надо самим всё сохранять и отлавливать отклонения инвариантов (хотя бы для выявления подобных граблей в будущем, а не полагаться на авось, призывая всех к порядку).

Если ко мне придёт гость и нагадит в гостиной, я перестану пускать его, а не стану надевать памперсы на каждого входящего.

Иными словами, если библиотека не выполняет требования ABI, надо решать проблему с библиотекой, а не оборачивать всё в дополнительные защиты.

От кривых изменений памяти как защититься, кстати? Всю доступную память на диск сбросить, после вызова функции раскатать обратно?

Я про это и говорю. Что гости бывают разные и у вас должны быть органы чувств что бы обнаружить подобное. А не просто верить что всё нормально.

Судя по статье, в регистры гадила не какая-то прилинкованная либа, а вообще другой процесс (шифрования диска). Как такое вообще возможно-то? В операционной системе, которая при переключении задач должна сохранить вообще весь контекст, включая любые регистры.

Эта либа устанавливала хуки на системные вызовы, которые работают с диском.

And I was able to confirm (in some of the dumps, we don't collect the right heap information in all dumps) that Trend Micro code (one region is a DLL that seems to be called ApiHookStub.x64.dll, another is not a direct DLL copy) which has been allocated on our process heap without going through the loader, presumably via something like ::VirtualProtectEx and ::WriteProcessMemory. This is a pattern I see used broadly in Edge crashes we root cause to third-party software.

https://bugs.chromium.org/p/chromium/issues/detail?id=1218384#c81

хуки на системные вызовы, которые работают с диском

Но т.к. с диском работает примерно весь софт, она должна была валить любой софт, который использует диск и регистр XMM7. И, как видим, в данном случае XMM7 используется компилятором просто как ещё один регистр общего назначения для хранения константы.

Вообще конечно жесть. МакАффи как были руко*опами 20 лет назад, так и остались.

Помню, в середине-конце нулевых был аналогичный случай, когда корпоративный McAfee Antivirus заставлял вылетать Recovery Manager for Active Directory, при попытке этого ПО осуществить вполне легитимный вызов DLL-injection.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории