Сканирование Javascript для нарушающих функции и шаблонов

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

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

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

  • выполнение запросов страницы
  • попытки обфускации

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

  • btoa
  • eval
  • окно.
  • регулярное выражение для URL-адреса /^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*) +):??? (\ d +)//я
  • приведенное выше регулярное выражение url настроено на escape, encode, encodeURI, encodeURIComponent v.versa

Что может помочь:

  • другие возможные неправильные шаблоны и функции
  • регулярное выражение для фильтрации для попыток обфускации

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

EDIT:

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

Ответ 1

Сообщество wiki

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

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

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

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 со строковым аргументом - скрытая скрытая оболочка
  • 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 - создание произвольных документов.
  • 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 - шаблон для соответствия закодированным символам.
  • Объекты HTML (в сочетании с атрибутами событий).

Поиск обфускации Выход:

  • Regex для поиска строк больше X, например, 23 [^']{23,}?