Неизвестная уязвимость функции printf
Статья была опубликована в журнале
"Машинная программа выполняет то, что вы ей приказали делать, а не то, что бы вы хотели, чтобы она делала".
Третий закон Грида
В настоящей статье на примере функции printf рассматриваются ситуации, в которых отсутствие в языке Си встроенных средств определения количества переданных функции аргументов приводит к несанкционированному вторжению в защищенные системы, и предлагаются некоторые пути выхода из таких ситуаций.
У разработчиков существует шутливое высказывание: "Программ без ошибок не бывает. Бывает – плохо искали". Пример программы, приведенной ниже, позволяет убедиться, насколько эта шутка порой близка к истине. На первый (и даже на второй!) взгляд здесь нет ни одной ошибки, способной привести к несанкционированному вторжению в систему.
Использование функции fgets надежно защищает от угрозы переполнения буфера, а все строки гарантированно умещаются в отведенные им буфера. Тривиальность и типичность кода создает обманчивую иллюзию, что ошибиться здесь просто негде (обработка ошибок чтения из файла для простоты опущена, и заранее оговаривается, что используются стандартные библиотеки и обычный, а не какой-то там специальным образом модифицированный компилятор).
#include <string.h>
void main() { FILE *psw; char buff[32]; char user[16]; char pass[16]; char _pass[16];
printf("printf bug demo\n"); if (!(psw=fopen("buff.psw","r"))) return; fgets(&_pass[0],8,psw);
printf("Login:");fgets(&user[0],12,stdin); printf("Passw:");fgets(&pass[0],12,stdin);
if (strcmp(&pass[0],&_pass[0])) sprintf(&buff[0],"Invalid password: %s",&pass[0]); else sprintf(&buff[0],"Password ok\n");
printf(&buff[0]);
}
Неуловимость допущенной ошибки объясняется психологической инерцией мышления: вместо тщательного анализа кода к нему последовательно примеряются типовые штаммы и шаблоны. Если ни один из них не подходит, – программа считается защищенной.
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий