Сканирование Javascript на наличие оскорбительных функций и шаблонов - PullRequest
10 голосов
/ 25 февраля 2012

У нас есть расширение OpenSource, подобное Greasemonkey , используемое только в Firefox .Пользователи могут отправлять (Java) сценарии для запуска других пользователей. Этим злоупотребляют, посылая вредоносный код.

Мы хотим выполнить автоматическую проверку в будущем с помощью скрипта переданного кода.

Мы не разрешаем или хотите продолжить расследование:

  • отправка запросов на страницу
  • попытки запутывания

Мы уже фильтруем:

  • btoa
  • eval
  • окно.
  • регулярное выражение для URL / ^ (http | https |FTP): // ([А-Z0-9] [А-Z0-9_-] * (?:. [А-Z0-9] [А-Z0-9_-] *) +): (\ d +?
    • другие возможные плохие шаблоны и функции
    • регулярное выражение для фильтрации попыток запутывания

    Спасибо за вашеидеи !!

    РЕДАКТИРОВАТЬ:

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

1 Ответ

7 голосов
/ 25 февраля 2012

Сообщество вики

Добавьте любые ваши идеи, и имейте в виду, что это грубая проверка .

Советзаранее: Также запустите код через Компилятор Google Closure , чтобы легко избавиться от конструкций, таких как window['e'+'v'+'a'+l]('....'), и escape-последовательностей символов, таких как \x65\x76\x61\x6c.

.функциональные опасности.Например, типизированные массивы - это простой способ заполнить память мусором, вызывая нестабильность в операционной системе пользователя.Если объем сценариев позволяет это сделать, я рекомендую проверить сценарий в песочнице, например в виртуальной машине.

window.pollute = new ArrayBuffer(2e9); // Reserves 2 GB of memory
while(1);                              // Infinite loops

Глобальные объекты (любая их перестановка):

  • window
  • document.defaultView
  • top
  • parent
  • frames
  • self
  • content

Другое:

  • Конструктор Function и setTimeout / setIntervalсо строковым аргументом - замаскированный Eval
  • document.createElement - возможно внедрение кода или внешних ресурсов.
  • cloneNode / appendChild / replaceChild / insertBefore - Опасно в сочетании с динамическими элементами.
  • document.scripts -В основном любые манипуляции с DOM!
  • document.cookie / localStorage / globalStorage
  • XMLHttpRequest
  • document.forms - HTTP-запросы
  • document.anchors / document.links - Спуфинг ссылки?
  • document.applets / document.embeds / document.plugins
  • document.load - загружает (XML) документ
  • document.execCommand - выполняет команду натекущий документ
  • Image / Audio - HTTP-запросы
  • open (всплывающие окна)
  • document.open / document.write / document.writeln - Замена или вставка произвольных данных на текущей странице
  • innerHTML / outerHTML - То же, что и предыдущий (outerHTML не существует в FF)
  • Многие события плюсsetAttribute, addEventListener и т. Д.
  • Worker - загрузка веб-работников из внешних источников (!)
  • location /document.URL - Изменение местоположения страницы
  • history - История / манипулирование местоположением (!)
  • document.implementation - Создание произвольных документов.
  • DOMParser - Creatiи произвольные документы.
  • Object.defineProperty / __defineGetter__ / __defineSetter__ и т. д.
  • WebSocket / MozWebSocket
  • console или любое их имущество
  • debuggerоператор - действует как точка останова для целей отладки
  • InstallTrigger - специфичный для Firefox объект для управления установками .
  • File / FileReader / FormData / MozBlobBuilder
  • Packages/ java

Обфускация

.. Обнаружение может быть выполнено двумя способами (поиск функций или выход).

Поиск запутывания Функции:

  • unescape / escape
  • encodeURIComponent / decodeURIComponent
  • encodeURI / decodeURI
  • btoa / atob
  • /\\x[0-9a-f]{2}|\\u\d{4}/i - шаблон для сопоставления закодированных символов.
  • HTОбъекты ML (вместе с атрибутами событий).

Поиск запутывания Вывод:

  • Регулярное выражение для поиска строк больше X, например, 23 [^']{23,}?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...