DoS в онлайн інтерпретаторах

22:45 22.05.2013

В 2010 році я писав про Міжмовний XSS (Cross-Language Scripting) - XSS уразливості в онлайн інтерпретаторах, а зараз розповім про DoS уразливості в онлайн інтерпретаторах.

Denial of Service уразливості я знаходив у двох інтерпретаторах: в 2009 році в MustLive Perl Pascal Programs Interpreter та в 2012 році в TryRuby. В обох виявлених випадках, це були DoS атаки через споживання ресурсів (в даному випадку пам’яті сервера). Відповідно до класифікації DoS уразливостей у веб додатках - це DoS перенавантаження.

MustLive Perl Pascal Programs Interpreter

Коли я створив свій інтерпретатор в 2006 році, зокрема у версії Perl Pas Interpreter 1.2, коли я додав веб інтерфейс, я зробив надійних захист від DoS атак. Але у 2009 році я виявив можливості для обходу захисних механізмів та проведення DoS атак.

Тоді один відвідувач мого сайту виявив можливість DoS атаки на поглинання пам’яті сервера через функцію concat. Після перевірки, я підтвердив уразливість в цій функції, а також виявив ще інші функції через які можна провести подібну атаку. Що я виправив у своєму інтерпретаторі у березні 2009 року.

Код для проведення DoS атаки:

s := ‘Hello world!’;
for i:=0 to 25 do s := concat(s, s);

25.03.2009 у версії 1.4.8 я покращив захист від DoS, шляхом обмеження розміру строкових даних до 255 символів (бо з перших версій інтерпретатора я не робив обмежень на розмір строкових даних, хоча у класичному Паскалі вони обмежені 255 символами, і в цій версії я зробив їх розмір як у класичному Паскалі). Це обмеження розміру строкових даних я додав в оператор присвоєння та у функції concat та insert, а пізніше у версії 1.4.10 я додав це обмеження у функції pos, delete та copy (через pos атаку не проведеш, але для уніфікації функцій). Таким чином всі функції для роботи зі строковими даними захищені від DoS атак.

TryRuby

Даний інтерпретатор розміщений на сайті tryruby.org і доступний на різних уроках (http://tryruby.org/levels/1/challenges/0). Як я вияснив, він використовує JRuby Sandbox, тому DoS також стосуються цієї програми. При відправленні спеціального коду в інтерпретатор (наприклад, повторенні рядка на 1 мільйон або більше разів), відбувається сильне навантаження сервера.

"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" * 1000000

DoS уразливість наявна в строкових функціях: в операторі повтору (*), в операторах конкатенації (+, << і методі concat) та в insert.

str = "DoS"
for i in 1..50 do str.concat(str) end

Для атаки потрібно постійно слати подібний код (з оператором повтору, конкатенації чи включення) через спеціальний PUT запит веб додатку http://tryruby.org/levels/1/challenges/0/play, щоб тримати сервер недоступним.

Висновки.

Наведені приклади продемонстрували DoS уразливості через споживання ресурсів, зокрема пам’яті сервера. Такі уразливості мали місце при роботі з строковими даними.

Вони можуть бути використані для атак на сервери з онлайн інтерпретаторами. Так що такі уразливості трапляються в онлайн інтерпретаторах і розробникам подібних програм потрібно звертати на це увагу, щоб надійно захищати їх від DoS атак.


Одна відповідь на “DoS в онлайн інтерпретаторах”

  1. MustLive каже:

    You can read this article on English in The Web Security Mailing List: Infected Dropbox and DoS in online interpreters.

Leave a Reply

You must be logged in to post a comment.