суббота, 2 июля 2011 г.

Тонкие способы, которыми ваша невинная программа может стать Интернет-ориентированной

Это перевод Subtle ways your innocent program can be Internet-facing. Автор: Реймонд Чен.

В последний раз я грозился обсудить способы, которыми ваша обычная невинная программа может быть подвержена атакам из Интернета, когда вы даже не осознаёте этого - и, вероятно, наиболее частым местом для этой проблемы является командная строка.

Благодаря CIFS файлы теперь могут быть расшарены по Интернету и доступны через UNC нотацию. Это означает, что любой может поднять CIFS сервер и создавать файлы вроде \\server.example.com\some\file.ext - и они будут видимы в мире как файлы на файловом сервере (потому что, фактически, это они и есть). Когда вы дважды щёлкаете по файлу, вы открываете документ.

И вот откуда идёт атака через командную строку. Предположим что ваша программа регистрирует обработчик для файлов определённого типа. Скажем, ваша программа litware.exe и она зарегистрирована для открытия файлов .lit. Атакующий может просто создать файл \\server.example.com\some\path\target.lit и уговорить пользователя дважды щелкнуть на него. Когда это будет сделано, ваша программа будет запущена с командной строкой, которую вы зарегистрировали - вроде:
"C:\Program Files\Litsoft\litware.exe" \\server.example.com\some\path\target.lit
Заметьте, что атакующий контролирует путь. Это означает, что если у вас есть баг в парсере командной строки, то атакующий сможет им воспользоваться.
Внедрение кода через командную строку является багом повышения привилегий.
Заметьте, что это вектор атаки не ограничивается только очень длинными именами файлов. Если вы регистрируете себя, забыв указать кавычки вокруг %1, то атакующий может запустить файл со странным именем вроде \\server.example.com\strange -uninstall path.lit. В результате командная строка будет выглядеть так:
"C:\Program Files\Litsoft\litware.exe" \\server.example.com\strange -uninstall path.lit
Ваш парсер разделит строку на три параметра:
  • Файл \\server.example.com\strange
  • Переключатель командной строки -uninstall
  • Файл path.lit
Программа попробует загрузить файл \\server.example.com\strange и потерпит неудачу (возможно, показав сообщение об ошибке), затем она удалит себя. Результат: пользователь возможно увидит странные сообщения об ошибках и программа будет удалена.

Конечно же, атакующий также контролирует содержимое файла, так что уязвимости в вашем парсере формата файла также могут быть использованы атакующим.
Внедрение кода через содержимое файла является багом повышением привилегий.
Если вы пишите расширение Оболочки (Shell), то ваше расширение будет работать, когда пользователь что-то делает с файлом. К примеру, если у вас есть расширение контекстного меню, то оно будет создано и инициализировано для удалённого файла. Многие расширения меню содержат баги переполнения буфера в обработке имён файлов, по которым щёлкает пользователь (заметьте, что я сказал "имён" - множественное число; пользователь может выбрать несколько файлов и щёлкнуть правой кнопкой по группе файлов). К примеру, известная программа архиватор файлов отвечает на запрос GCS_HELPTEXT беря все файлы и комбинируя их в сообщение "Добавить файлы A, B, C, D и E в архив". К сожалению, когда имена A, B, C, D и E имеют большую длину, происходит переполнение буфера.
Внедрение кода через длинное имя файла является багом повышением привилегий.
Просто потому, что ваша программа явно не работает с Интернетом, ещё не означает, что она не подвержена атакам из Интернета.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

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