Межпротокольная эксплуатация
Межпротокольная эксплуатация (англ. Inter-protocol exploitation) — это класс уязвимостей безопасности, использующих взаимодействие между двумя коммуникационными протоколами[1], например, протоколами, используемыми в Интернете. Чаще всего обсуждается в контексте HTTP[2]. Эта атака использует возможность того, что два разных протокола могут успешно и осмысленно обмениваться командами и данными.
Явление было популяризировано в 2007 году и публично описано в исследовании[3] того же года. Однако общий класс подобных атак был известен не позднее 1994 года.
Реализации Интернет-протоколов допускают возможность инкапсуляции эксплойт-кода для компрометации удалённых программ, использующих другой протокол. Межпротокольная эксплуатация может применять межпротокольное взаимодействие для создания предпосылок запуска межпротокольного эксплойта. Например, этот процесс может инициировать начальную аутентификацию для эксплуатации уязвимости при разборе паролей. Межпротокольная эксплуатация — это когда один протокол атакует сервис, работающий на другом протоколе. Это типичная наследственная проблема, поскольку спецификации протоколов зачастую не учитывали возможность такого рода атак.
Технические особенности
Два протокола, задействованных в уязвимости, называются несущим и целевым. Несущий протокол осуществляет инкапсуляцию команд и/или данных. Целевой протокол используется для взаимодействия с сервисом-жертвой. Межпротокольное взаимодействие будет успешным, если несущий протокол способен инкапсулировать команды и/или данные достаточно, чтобы осмысленно донести их до целевого сервиса[4].
Для успешного межпротокольного взаимодействия должны выполняться два условия: инкапсуляция и устойчивость к ошибкам. Несущий протокол должен инкапсулировать данные и команды так, чтобы целевой протокол был способен их распознать. При этом весьма вероятно, что итоговый поток данных вызовет ошибки разбора на стороне целевого протокола.
Целевой протокол должен проявлять достаточную устойчивость к ошибкам. В процессе межпротокольного соединения возможно, что часть обмена будет некорректной и приведёт к ошибкам. Для этого требования реализация целевого протокола должна продолжать обработку данных несмотря на возникновение ошибок.
Современные значения
Одной из главных проблем является возможность преодоления этим вектором атаки межсетевых экранов и DMZ. Межпротокольные эксплойты могут быть переданы по HTTP и запущены из веб-браузера, работающего во внутренней подсети. При этом важно, что веб-браузер не эксплуатируется обычными способами[4].
Пример
Пример передачи JavaScript по HTTP с дальнейшей коммуникацией по протоколу IRC:
var form = document.createElement('form');
form.setAttribute('method', 'post');
form.setAttribute('action', 'http://irc.example.net:6667');
form.setAttribute('enctype', 'multipart/form-data');
var textarea = document.createElement('textarea');
textarea.innerText = "USER A B C D \nNICK turtle\nJOIN #hack\nPRIVMSG #hackers: I like turtles\n";
form.appendChild(textarea);
document.body.appendChild(form);
form.submit();
Известны также случаи, когда файлы специально создавались одновременно валидными для HTML и BMP-изображения[5][6][7].