Чтение онлайн

на главную

Жанры

Техника сетевых атак
Шрифт:

Но злоумышленнику вовсе не обязательно знать имя файла. Достаточно воспользоваться… клонированием файловых манипуляторов! Такой прием продемонстрирован в примере, приведенном ниже (на диске, прилагаемом к книге, он находится в файле “/SRC/cpyfh.pl”):

· #…

· open( AH ,"«passwd");

·

· #…

· $file=$ARGV[0];

· if ($file =~ /passwd/) {die "Goodby, Hacker!\n";}

· open( BH ,"«$file");

· while (« BH »)

· {

· print;

·}

Если владельцем [299] (не разработчиком!) некой программы имя секретного файла (например, “passwd”) изменено до неузнаваемости, то вне зависимости от распространенности скрипта, злоумышленник, прежде чем сможет получить доступ к секретному файлу будет вынужден узнать его имя. Если нет возможности просмотреть исходный текст модифицированного скрипта, то для успешной атаки злоумышленнику потребуется не только получить доступ к хранящимся на сервере файлам, но и последовательно перебрать всех их один за другим, пока не встретится искомый.

Поэтому, при использовании общедоступных скриптов настоятельно рекомендуется изменять имена всех файлов, представляющих интерес для злоумышленника. Но в некоторых случаях такой прием оказывается бессилен предотвратить атаку, если разработчик допустит ошибку, в результате которой станет возможно клонирование файлового манипулятора, связанного с секретным файлом.

Например, в приведенном выше примере, секретный файл открывается в одной ветке программы, а где-то совершенно в другом месте присутствует код, выводящий на экран содержимое файла, указанного пользователем. Для предотвращения атаки выполняется проверка введенной пользователем строки на соответствие с именем секретного файла, и если злоумышленник решит действовать «в лоб», ничего не получится:

· GET /cgi-bin/cpyfh.pl?passwd

· Goodby, Hacker!

Однако если вместо имени файла ввести конструкцию “ amp;AH”, на экране появится содержимое секретного файла, что и продемонстрировано в примере, приведенном ниже:

· GET /cgi-bin/cpyfh.pl? amp;AH

· Vasia:qwerty

· Petja:admin

· Super:toyta

· Dimon:daemon

Вызов наподобие “open(F1,”x amp;F2”) [300], приводит к клонированию файлового манипулятора F2 в F1. Если переменной “$file” присвоить значение “ amp;AH”, то вызов “open (BH, “«$file”)” копирует файловый манипулятор AH в BH, а конструкция “while «BH»” становится равносильна “while «AH»” и читает содержимое секретного файла, имя которого злоумышленнику знать совершенно необязательно.

Врезка «замечание»

Иногда выгоднее использовать псевдонимы (alias), создаваемые с помощью конструкции ‘x amp;=’. При этом оригинальный файловый манипулятор на момент создания псевдонима может и не существовать.

Если в приведенной программе переставить строки, что бы она выглядела вот так, - попытка клонирования ни к чему не приведет, но псевдонимы будут по-прежнему работать.

$file=$ARGV[0];

if ($file =~ /passwd/) {die "Goodby, Hacker!\n";}

#…

open(BH,"«$file");

#…

open(AH,"«passwd");

#…

while («BH»)

{

print;

}

Поскольку сокеты с точки зрения подсистемы ввода-вывода - обычные файлы, корректно работающие с операторами ‘print’ и ‘«»’, возможна подмена файлового манипулятора открытым сокетом и, соответственно, наоборот.

Если скрипт устанавливает соединение с некоторым сервером (совершенно неважно, с каким именно, и по какому протоколу) и позволяет пользователю вместо имени файла задать манипулятор [301], у злоумышленника появляется возможность взаимодействия с этим сервером!

Пример, приведенный ниже (на диске, прилагаемом к книге, он находится в файле “/SRC/exchsc.pl”), демонстрирует ошибку, приводящую к перехвату трафика:

· socket(POP3, PF_INET, SOCK_STREAM, getprotobyname("tcp"));

· connect(POP3, sockaddr_in(110,inet_aton('zmail.ru')))

· $file=$ARGV[0];

· $x=«$file»;

· print $x;

· close(POP3);

· GET /cgi-bin/exchsc.pl?POP3

· +OK CommuniGate Pro POP3 Server 3.2.4 ready «1731731.956833213@backend1.aha.ru»

Приложения, имеющие такую уязвимость, способны выполнять запросы злоумышленника от имени сервера, на котором они расположены. Это может использоваться, например, для массовой почтовой рассылки.

Конечно, атакующий будет очень ограничен в своих возможностях. Стесненный уже существующим соединением с конкретным сервером по заданному протоколу он, скорее всего, не сможет причинить значительного ущерба. Наибольшая опасность заключается в том, что постороннее лицо способно получить доступ к секретным каналам связи, доступ к которым при нормальном ходе вещей был бы невозможен. Особенно это актуально для систем электронной коммерции, - если злоумышленнику удастся перехватить соединение с клиентом, он сможет «подсмотреть» номер кредитной карточки вместе с другими конфиденциальными данными, передаваемыми клиентом на сервер и даже исказить их!

Конечно, крупные on-line магазины, как правило, не содержат грубых ошибок. Но в сети огромное количество мелких поставщиков различного рода услуг, зачастую снабженных программным обеспечением, созданным «на коленках» Дядей Васей! Ошибки, описанные выше, очень характерны для кустарных разработок.

Врезка «информация»

Огромную опасность представляют недокументированные (или плохо документированные и малоизвестные) особенности интерпретаторов. И Perl в этом смысле не является исключением.

С его реализацией на платформе PC связан один громкий скандал. Фирма “Netscape” по некоторым причинам не поддержала в своем сервере ассоциации файловых расширений с исполняемыми приложениями. Вместо этого она предложила «волшебное» решение: вручную указывать требуемое приложение в самом URL. Так, например, вызвать “hello.pl” приходилось так: http://NetscapeServer/cgi-bin/perl.exe?hello.pl.

С первого взгляда ничем, кроме недовольного ворчания WEB-мастеров, это не чревато. Но уже беглое изучение документации по PC-версии Perl доказывает обратное. Особенность обработки командой строки приводит к тому, что на сервере может быть исполнена любая команда от имени интерпретатора. Достаточно воспользоваться конвейером, то есть конструкцией вида “| команда”.

Популярные книги

Восход. Солнцев. Книга VIII

Скабер Артемий
8. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга VIII

Невеста напрокат

Завгородняя Анна Александровна
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Невеста напрокат

Сердце Дракона. Том 12

Клеванский Кирилл Сергеевич
12. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.29
рейтинг книги
Сердце Дракона. Том 12

Вперед в прошлое 3

Ратманов Денис
3. Вперёд в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 3

Магия чистых душ 3

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Магия чистых душ 3

Вечный. Книга V

Рокотов Алексей
5. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга V

Радужная пони для Сома

Зайцева Мария
2. Не смей меня хотеть
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Радужная пони для Сома

Дурашка в столичной академии

Свободина Виктория
Фантастика:
фэнтези
7.80
рейтинг книги
Дурашка в столичной академии

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Исход

Рус Дмитрий
7. Играть, чтобы жить
Фантастика:
фэнтези
киберпанк
рпг
9.05
рейтинг книги
Исход

Измена. Не прощу

Леманн Анастасия
1. Измены
Любовные романы:
современные любовные романы
4.00
рейтинг книги
Измена. Не прощу

Неудержимый. Книга XIII

Боярский Андрей
13. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIII

Магия чистых душ 2

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.56
рейтинг книги
Магия чистых душ 2

Титан империи 6

Артемов Александр Александрович
6. Титан Империи
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Титан империи 6