Системный шпионаж в *nix часть 2 Крис Касперски ака мыщъх Хакер, номер #088, стр. 088-098-5 Чтобы "обезопасить" перехват, необходимо сократить длину внедряемой инструкции до одного байта, но таких инструкций просто нет! То есть как это нет? А INT 03h (CCh) на что? Традиционно она используется для организации точек останова и на прикладном уровне защищенного режима возбуждает исключение, которое легко перехватить из ядра, а точнее из загружаемого модуля. Об этом уже писалось в статье Handling Interrupt Descriptor Table for fun and profit, опубликованной в 59 номере phrack, так что не будем повторяться. Заметим, что CCh конфликтует с некоторыми защитными механизмами и, естественно, с отладчиками, поэтому лучше внедрять не INT 03h, а какую-нибудь "запрещенную" однобайтовую команду типа CLI (FAh), возбуждающую исключение, которое мы будем отлавливать. [точки останова] Отладчики могут устанавливать программные точки останова на библиотечные функции, внедряя в их начало команду INT 03h (CCh). В этом случае наш перехватчик не сможет распознать пролог, что не есть хорошо. Выход очевиден: сравнивать только 2-й, 3-й, 4-й и 5-й байты пролога, игнорируя первый байт. А что делать с точкой останова? Если записать call поверх нее, то она будет затерта, и отладчик потеряет контроль за функцией, что в некоторых случаях неприемлемо, и тогда необходимо внедряться со 2-го байта, но в этом случае команда call полностью затрет SUB ESP,XXh, и XXh придется сохранять где-то в другом месте. [заключение] Механизмы перехвата API-функций под Windows хорошо исследованы, и предложить радикально новый трюк довольно трудно. UNIX-системы исследованы намного хуже и таят множество нераскрытых возможностей, притягивающих хакеров и прочих творческих людей. Описанный мыщъх'ем способ - не единственный и, вероятно, не самый удобный, к тому же до "промышленного применения" ему еще расти и расти. Тем не менее в мыщъхиных утилитах, написанных на скорый хвост, он вполне нормально работает — как под Linux, так и под BSD. |