amosk: (Default)
[personal profile] amosk

Источник: http://habrahabr.ru/blog/infosecurity/34142.html

XSS-червь: кто меньше?

Наткнулся на днях на новость о конкурсе, в котором предлагают создать минимальный JavaScript-код, который будет сам себя копировать дальше.

Автор конкурса — Robert Hansen aka RSnake, достаточно крупный специалист по информационной безопасности.

Условия

По условиям конкурса от кода требовалось следующее:

  1. Должен быть в кодировке UTF-8 или ISO-8859-1.
  2. Должен копировать себя путем POST-запроса на страницу post.php того же самого домена, откуда запускается (никаких GET'ов). В качестве текстового параметра должен выступать content. Можно предположить, что post.php будет соответствующим образом unescape'ить ваш код.
  3. Не должен возрастать в размерах при распространении (если код начинает с n байтов, он не должен возрастать на следующем шаге до n+x). Т.е. мы предполагаем, что контент будет игнорироваться скриптом post.php, если он больше n байтов.
  4. Должен запускаться в написанном виде (мы можем добавить все остальные параметры для соответствующей инъекции позже)
  5. Не должен использовать Cookie или GET-параметры строки запроса (все строки кода будут пребывать только на самой странице в качестве активного XSS).
  6. Не должен предполагать какие-либо сведения о DOM-дереве, хотя вы можете использовать class или id, если они есть в самом коде червя. Нельзя использовать поиск n-ого скрипта на странице, потому что эта информация может меняться от сайта к сайту.
  7. Должен работать, по крайней мере, в Internet Explorer 7.0 и Firefox 2.x.
  8. Должен выдавать XSS как сообщение на странице (в качестве «полезной нагрузки»).
  9. Должен работать, по крайней мере, на серверах Apache 1.3+ и Apache 2+ (т.е. не использовать какие-то серверно-зависимые вещи, связанные с другими серверами) ввиду их доминирования на рынке.
  10. Должен работать без участия пользователя или при минимальном участие, которое происходит на каждой странице (например, mouseover в произвольном месте страницы).

Проведение

Конкурс начался 4 января и закончился 10. Автор получил несколько сотен вариантов, но только два из них были минимальными и работали при всех заявленных условиях:

<form><input name="content"><img src="" onerror="with(parentNode)alert('XSS',submit(content.value='<form>'+ innerHTML.slice(action=(method='post')+'.php',155)))">

и

<form><INPUT name="content"><IMG src="" onerror="with(parentNode)submit(action=(method='post')+'.php',content.value= '<form>'+innerHTML.slice(alert('XSS'),155))">

Длина червей: 161 байт. Как видно по коду, варианты очень сильно похожи, если не сказать, идентичны, практически, посимвольно. Полное заключение по конкурсу.

Итоги

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

Также автор опубликовал большую статью, посвященной проблеме XSS-червей в общем, в которой утверждает, что бороться с ними очень сложно, но можно. Статья несколько длинная, но очень интересная.

Ссылки по теме

Profile

amosk: (Default)
amosk

December 2016

S M T W T F S
    123
45678910
11121314151617
18192021222324
252627 28293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 7th, 2026 03:11 am
Powered by Dreamwidth Studios