Pull to refresh
67
0
Aleksey R. @kITerE

system programming

Send message

Гипервизоры вообще слабо совместимы друг с другом.

Вопрос будет ли в Sailfish Mobile OS RUS включен эмулятор (https://sailfishos.org/wiki/Android_Compatibility):


This support requires the inclusion of an implementation of the Android run-time virtual machine (Dalvik or ART).

Выпущенное на рынок решения под брендом Inoi (https://inoi.com/2344/inoi-r7/) не включает Alien Dalvik.

https://devblogs.microsoft.com/commandline/announcing-wsl-2/


Here’s a quick demo of WSL 2 in action. When we start our distro we get access to a working bash shell in under two seconds, and can run services and apps like docker right away.

GIF

Я совершенно не ожидал того, что для моего VPS хостер включит ещё и свой фильтр. Может быть это обычная практика.

А что за хостер, если не секрет?


В конце концов РКН присылает запрос на удаление ресурса как раз хостеру.

Запрос ведь должен был быть тому хостеру, который был актуальным на момент вынесения решения о блокировке. Предполагаете РКН как-то мониторит новые экземпляры заблокированных ресурсов и рассылает новые запросы? Мне видится более вероятным, что это (мониторинг списков заблокированных) личная инициатива хостера (что еще более подогревает узнать что же это за хостер такой)?

Так же в ключе темы публикации интересно то, что (вероятно для WSL) Microsoft все же добавила новую POSIX-семантику удаления файлов (https://docs.microsoft.com/windows-hardware/drivers/ddi/content/ntddk/ns-ntddk-_file_disposition_information_ex):


When FILE_DISPOSITION_POSIX_SEMANTICS is not set, a file marked for deletion is not actually deleted until all open handles for the file have been closed and the link count for the file is zero. When FILE_DISPOSITION_POSIX_SEMANTICS is set, the link is removed from the visible namespace as soon as the POSIX delete handle has been closed, but the file’s data streams remain accessible by other existing handles until the last handle has been closed. That is, applications that already had the file open can still use their handle to read/write even though the name they used to open it is gone and the file's link count may have reached zero.
If the file is being deleted at user request, using POSIX semantics allows the system to delete the file as requested, but also allows any process with an open handle to continue to access the file's data as long as the handle is open.

Если я правильно понимаю POSIX-семантику, то создание нового файла поверх удаленного должно быть возможным сразу, а не по закрытию последнего описателя на него.
Проверил: нет, FILE_DISPOSITION_POSIX_SEMANTICS не позволяет создавать файлы поверх удаляемого.

Виновник нашелся благодаря SysInternals и их ProcessMonitor.

На мой взгляд немаловажной частью проблемы понимания этой ситуации является усечение более информативных NT Status'ов нативного API до более обобщенных Win32 кодов.


https://web.archive.org/web/20150317121919/https://support.microsoft.com/en-us/kb/113996:


WINDOWS NT STATUS CODE                  WIN32 ERROR CODE
------------------------------------------------------------------
STATUS_CANNOT_DELETE                    ERROR_ACCESS_DENIED
STATUS_FILE_DELETED                     ERROR_ACCESS_DENIED
STATUS_FILE_RENAMED                     ERROR_ACCESS_DENIED
STATUS_DELETE_PENDING                   ERROR_ACCESS_DENIED
Сложно представить такой сценарий. Привилегированный процесс даёт свой хендл для чего?

В этом случае лучше дать ссылку на Event, который сигналить снаружи.

Сложно, но, к сожалению, не невозможно. Никто не утверждал, что это best practices, но я неоднократно встречал решения, которые специально обходят механизмы безопасности Windows, например инсталляцией драйвера, что бы открывать описатели объектов с ExGetPreviousMode() == KernelMode и возвращать их в User Mode процесс.


Пример навскидку: есть процесс, сканирующий (а возможно и закрывающий, например для безопасного извлечения флешки) открытые описатели системы. Для детализированной информации нужно получить описатель этого самого объекта. Как его можно получить, учитывая что есть процессы в соседних сессиях и более привилегированные процессы? Более привилегированным кодом, например драйвером. Но авторам кода можно не дергать драйвер на каждый описатель целевого процесса, достаточно из драйвера вернуть описатель на этот процесс с правом PROCESS_DUP_HANDLE. А затем уже процесс собственноручно сможет дублировать интересующие описатели из целевого процесса себе.


Если рассматривать такой дырявый драйвер (а с учетом политики подписей, таскать с собой эксплуатируемый чужой подписанный драйвер уже давно не ново для вредоносного ПО), то может показаться, что поверхность атаки не велика: можно попробовать вызвать падение более привилегированного процесса, просто позакрывав ему описатели (DUPLICATE_CLOSE_SOURCE). Но, учитывая легкость и стабильность получения PROCESS_ALL_ACCESS можно запустить произвольный код в более привилегированном процессе, что (IMHO) много более опаснее.


Менее детализированный пример навскидку #2: процесс редактирует описатель безопасности (ACL'и) у некоторого объекта процесса. С учетом представленной информации нужно осознавать, что разрешение маски доступа PROCESS_DUP_HANDLE дает полный доступ к процессу, что не очевидно.

(промахнулся)

Более привелегированный процесс может дублировать описатель на себя (или другой привелегированный процесс) в процесс с урезанными правами, как результат какого-нибудь IPC, например.

Еще интересно разбирались ли вы с эльбрусовским защищенным режимом? Будете ли пробовать внедрять его поддержку в Embox?
Было бы очень интересно почитать про него отдельную статью.

Спасибо за интересную серию.


Заметил (еще с первой статьи), что в макросах с assembler'ными вставками используются nop'ы с численным аргументом:


#define E2K_DONE \
do { \
asm volatile ("{nop 3} {done}" ::: "ctpr3"); \
} while (0)

#define E2K_ASM_FLUSH_CPU \
flushr; \
nop 2;  \
flushc; \
nop 3;

Это "No OPeration" инструкция? Зачем она в приведенных макросах? Зачем ей аргумент?

Есть копия, например, тут: https://bitbucket.org/ValdikSS/goodbyedpi
Не знаю, правда, насколько актуальная версия.

а 207 — сделали ее форки. Но это три дня назад, а теперь — ошибка 404.

Интересно, а что с форками? Их тоже по-удаляли?


P.S. Собственно уровнем выше (https://github.com/ValdikSS) тоже Page not found. А там, судя по google-кэшу, было 37 репозиториев.

А там есть какой-нибудь механизм/плагин/поддержка из коробки для конвертации готовых IDA файлов в Гидру?

Есть полный экспорт из IDA c использованием плагина — 7xx/xml_exporter.py и 6xx/xmlexp.py с последующим импортом в Ghidra.

Если в магазине будет банкомат, принимающий деньги, то это уже будет аналог обычной кассы без кассира (что внедрено уже достаточно широко — кассы самообслуживания). А в статье рассматриваются именно магазины без касс (вообще).

На хабре внедрили интересную фичу — Отправка сообщений об опечатках в публикациях. Проверено — работает ;)

Десятичные значения чисел, а заодно и соответствующие ASCII-символы можно подсмотреть, удерживая курсор над соответствующим шестнадцатеричным литералом. Отображение ASCII не всегда работает (?), поэтому рекомендую глядеть ASCII таблицу в Интернете.

В окне листинга дизассемблера:


Convert - Char Sequence


В результате меняется константа как в листинге ассемблера, так и в листинге декомпилятора.

Дальше у нас цикл из 2 итераций.

Судя по приведенному листингу итераций все же будет три (0, 1 и 2):


    local_18 = 0;
    while (local_18 < 3) {

      local_18 = local_18 + 1;
    }

То есть автор crackme зачем-то анализирует и argv[0].

Это уже сделано, просто нужно придерживаться C++ Core Guidelines (анонс был еще в сентябре 2015).

Information

Rating
Does not participate
Registered
Activity