2016-12-02 2 views
1

Может ли моя система заразиться чем-то, посетив веб-сайт с помощью phantomJS? Я не знаю/доверяю веб-сайту, который я посещаю. И если да, то как предотвратить это/избежать ущерба?Может ли моя система заразиться, посетив неизвестный/ненадежный веб-сайт через PhantomJS?

ответ

2

Это не технически невозможно.

PhantomJS использует WebKit в качестве своего браузера (как и Safari и многие другие браузеры, включая более ранние версии Chrome), и его можно скомпилировать с любой версией WebKit. Это означает, что WebKit используется для синтаксического анализа и внутренней рендеринга веб-страницы.

Если версия WebKit, используемая вашей версией PhantomJS, уязвима, так будет PhantomJS. Если в WebKit есть что-то вроде переполнения буфера или аналогичного удаленного выполнения кода, возможно, он также может быть использован в PhantomJS, что может привести к тому, что вредоносный веб-сайт сможет запускать код на вашем компьютере. Эти типы недостатков (с серьезностью, сходными с эксплуатационным удаленным выполнением кода) не очень часты, но иногда случаются. Обратите внимание, что все другие уязвимости с низким уровнем риска WebKit также влияют на любую версию PhantomJS, которая скомпилирована с уязвимой версией WebKit. Что делает это более актуальным, так это то, что WebKit используется многими проектами, поэтому поиск и использование уязвимостей WebKit может оказаться полезным для злоумышленника.

Сам PhantomJS также может быть уязвим, но реальная опасная вещь заключается в анализе кода, написанного кем-то другим при посещении веб-сайта, и это делается с помощью WebKit. Использование ошибок в другом поддерживающем коде в PhantomJS через посещаемый веб-сайт, я думаю, будет более сложным. Не сказать, что это невозможно, но вероятность, я думаю, будет низкой.

Что касается того, как предотвратить это ... Самое главное - использовать версию PhantomJS, которая скомпилирована против очень новой версии WebKit. Если неизвестная уязвимость ни для версии WebKit, ни для версии PhantomJS, вам хорошо идти (но всегда может быть нулевой день, конечно).

Если вы действительно обеспокоены, вы можете запустить PhantomJS в изоляции. Вы можете настроить что-то похожее на chrooted среду или целую выделенную виртуальную машину. В последнем случае злоумышленник должен был бы скомпрометировать гипервизор в совершенно отдельной атаке, что, вероятно, не невозможно, но может быть трудным и сильно отличается от любого изъяна, используемого в PhantomJS.

Конечно, это также зависит от того, что вы хотите защитить от. Если вас беспокоит компрометация клиента, работающего с PhantomJS, запуск его по отдельности может быть адекватным для вашего сценария. Если PhantomJS является частью более крупного приложения, и вы обеспокоены тем, что злоумышленник может получить доступ к данным в этом конкретном приложении, вы, очевидно, не можете запускать PhantomJS отдельно от реального приложения с данными, поэтому VM тогда не поможет.

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

+1

Спасибо! Мне нужно сканировать 100 тыс. Случайных (= ненадежных и, вероятно, вредоносных) веб-сайтов и сохранять информацию о них в базе данных. Машина, на которой он будет работать, будет содержать учетные данные для других материалов, а база данных также будет иметь важные вещи. Поэтому я не хотел, чтобы у кого-то был доступ к этой базе данных/файловой системе. – userqwerty1

+0

Я не уверен, как защитить эту настройку, я попытаюсь использовать что-то вроде доспехов приложений и т. Д., И записать данные на диск, а затем получить с другим скриптом в базу данных. – userqwerty1

+1

AppArmor - это хорошо, это именно то, что я подразумевал под чем-то похожим на chroot. Со строгими правилами, которые определенно помогают.Обязательно назначьте наименьшие привилегии для каждого компонента в вашей настройке, например, PhantomJS должен иметь возможность писать несколько файлов или одну таблицу базы данных, и, возможно, только нужно прочитать несколько библиотек. Тогда любой компонент, который дополнительно анализирует данные, может проверить его ввод (который является выходом PhantomJS). Я считаю, что использование AppArmor со строгими правилами для компонента PhantomJS значительно снижает риск. –

Смежные вопросы