PRO вирусы. Версия 4.0 (Холмогоров) - страница 92

Примечательно, что на девайсах с 32-разрядным ROM (A7, A10, A10X, A11 и A11X) указанный механизм не работает, поскольку буфер там аллоцируется всякий раз в одном и том же месте при каждой инициализации USB-стека. Тем не менее, обнаруживший данную уязвимость хакер axi0mX нашел способ обойти такую предопределенность с использованием правильно подобранного сценария эксплуатации Use-afer-Free. Для этого он использовал то обстоятельство, что система одновременно может инициализировать несколько USB-передач. Например, в ответ на некоторые запросы устройство не сможет отправить данные, если получатель занят, до тех пор, пока конечная точка (endpoint) не освободится или не будет сброшен USB, то есть не будут устранены условия блокировки. Отправленные в таком состоянии запросы попадают в очередь. После устранения блокировки выполняется обход очереди и все запросы поочередно завершаются. Информация о конечной точке (endpoint) обнуляется, а запросы нулевой длины остаются в куче. Управляя запросами и тайм-аутами, теоретически можно создать такие условия формирования кучи, которые в итоге повлияют на следующее выделение памяти при создании буфера.

Обобщая, можно сказать, что из-за найденной в SecureROM ошибки в механизме создания и уничтожения USB-стека происходит утечка памяти, которая может использоваться для формирования состояния кучи, дающего возможность управлять выделением памяти при размещении буфера. В результате с помощью UaF можно выполнить запись в выделенную память для получения контролируемого косвенного перехода (controlled indirect branch) при выходе из DFU. Это, в свою очередь, позволяет взломать устройство еще до момента загрузки iOS и получить полный контроль над файловой системой.

В целом, природа уязвимостей может быть различной: некоторые из них связаны с недостатками архитектуры операционной системы или приложения, другие — с ошибками разработчиков ПО. Например, какая-либо программа может выполнять проверку недостаточно эффективно или вовсе не проверять обрабатываемые ею и загружаемые в память данные, чем могут воспользоваться злоумышленники, либо передавать в буфер информацию без фактической проверки его границ (атака на переполнение буфера). Для закрытия уязвимостей разработчики операционных систем и прикладных программ периодически выпускают обновления своих продуктов, также порой называемые в обиходе «заплатками», или «патчами» (от англ. patch — «заплатка», «пластырь»). Среди уязвимостей принято особо выделять критические уязвимости — с помощью которых имеется возможность полностью нарушить работоспособность операционной системы или программы, а также