8 Марта, 2011

nmap 5.51 DLL Hijacking (airpcap.dll)

Агиевич Игорь aka Shanker
В последней, на текущий момент, версии nmap (5.51) обнаружилась возможность провести атаку типа DLL Hijacking.

Происходит это в случае запуска с параметром вроде:
nmap t
. Т.е. через пробел мы указываем любое слово (или букву) без дефиса.

Как видно из рисунка ниже, nmap пытается загрузить библиотеку airpcap.dll, обращаясь кроме своей рабочей директории, в директории, перечисленные в переменной окружения %PATH%


В случае наличия доступа к папке, попадающей в список %PATH% мы можем выполнить произвольный код:



Сама по себе уязвимость не особо страшная, т.к. нужно иметь хоть какой-то доступ компьютеру жертвы. Но в принципе в определённых ситуациях может использоваться для повышения привилегий.

В случае использования zenmap попытка загрузки библиотеки срабатывает, когда происходит работа с профилем (редактирование существующего или создание нового).

Я связался с разработчиками по этому поводу. Однако, вряд ли в скором времени появится какое-либо решение. Если вообще появится:

Thanks for the note. It is certainly important for users to be
careful about their DLL paths. If some program (like Borland
CaliberRM, apparently) adds to the DLL path and then a malicious party
is able to write DLLs to that directory, they can perform DLL
hijacking against Nmap (and many other programs). This is true with
Linx shared libraries too, but I think people are more careful about
their shared library paths there (and the platform itself is more
secure).

Cheers,
Fyodor

В предыдущей версии nmap для защиты от таких вещей было принято такое изменение:

Nmap 5.50 and above contain this change to reduce the risk of DLL hijacking:

o Restrict the default Windows DLL search path by removing the current
directory. This adds extra protection against DLL hijacking attacks,
especially if we were to add file type associations to Nmap in the
future. We implement this with the SetDllDirectory function when
available (Windows XP SP1 and later). Otherwise, we call
SetCurrentDirectory with the directory containing the
executable. [David]

Так что следите за своими переменными окружения :)
или введите имя

CAPTCHA