Начинающий
- Статус
- Оффлайн
- Регистрация
- 1 Фев 2020
- Сообщения
- 74
- Реакции
- 3
Я нашел программу, у которой есть драйвер с дырами, а главное, что он еще подписан и не находится в паблике. Драйвер работает, как SCSI miniport, что позволяет ему получать команды от юзермода через SCSI.
Проблема оказывается в том, что у программы два драйвера, которые тесно между собой связаны и делят между собой функционал. Я в иде обращался по путям их связи, в первом драйвере я нашел лишь виртуальное чтение через mdl, потом пытался отыскать физ чтение/запись, и наткнулся на строки, что отсылают ко второму драйверу, откуда поступают команды от системы в драйверное пространство.
В итоге я нашел этот драйвер и начал проводить его анализ. И обнаружил, что второй драйвер имеет полностью противоположный функционал первому, а т.е имеет физ чтение и запись, но без проверки ключа/валидации он не будет что-либо читать или изменять, а первый будет от имени любой программы даже с минимальными привилегиями. Данные юзермода записываются в реестр без валидации.
Пытаясь получить код, чтобы выполнять произвольные команды, я лишь натыкаюсь на дефолтный функционал пользовательской программы. А при тестировании физ чтения/записи я получаю лишь ошибки с NtCreateSection с разными доступами 0x2, 0x4, 0x5, 0x6, где постоянно возвращает 0xC00000F2.
Мозг чешется, помогите.
Проблема оказывается в том, что у программы два драйвера, которые тесно между собой связаны и делят между собой функционал. Я в иде обращался по путям их связи, в первом драйвере я нашел лишь виртуальное чтение через mdl, потом пытался отыскать физ чтение/запись, и наткнулся на строки, что отсылают ко второму драйверу, откуда поступают команды от системы в драйверное пространство.
В итоге я нашел этот драйвер и начал проводить его анализ. И обнаружил, что второй драйвер имеет полностью противоположный функционал первому, а т.е имеет физ чтение и запись, но без проверки ключа/валидации он не будет что-либо читать или изменять, а первый будет от имени любой программы даже с минимальными привилегиями. Данные юзермода записываются в реестр без валидации.
Пытаясь получить код, чтобы выполнять произвольные команды, я лишь натыкаюсь на дефолтный функционал пользовательской программы. А при тестировании физ чтения/записи я получаю лишь ошибки с NtCreateSection с разными доступами 0x2, 0x4, 0x5, 0x6, где постоянно возвращает 0xC00000F2.