2010-07-03 3 views
4

Мне было интересно, какие шаги вы используете, чтобы загружать плагины из-за злонамеренного?Уменьшить вероятность взлома плагинов PHP

Например, что делает WordPress сделать, чтобы гарантировать, что плагины вы загружаете не просто выполнить unlink('/')

Я предполагаю, что это частично зависит частично от загрузчика для установки плагин, чтобы использовать свое собственное усмотрение, но делать плагиновые системы принимают меры для минимизации риска безопасности для сторонних плагинов?

Спасибо! Matt Mueller

+4

РНР команда попросила Linux распределение продавцов лет назад, чтобы прекратить называть «интерпретатор аварии ошибки» проблемы безопасности, поскольку PHP-скрипты могут сделать все и вся система управления доступом к операционной системе позволяет это делать. (Они также спрашивали то же самое для всех «перерывов» safe_mode.) Независимо от того, какие скрипты вы используете, есть полный доступ ко всему, что имеет владелец процесса, и это по дизайну. Выполняйте только код, которому вы доверяете. – sarnold

ответ

5

Простой ответ: вы не можете делать это программно. Просто невозможно сделать. Конечно, Wordpress имеет валидатор какого-то рода, чтобы определить, является ли плагин абсолютно противным, но нет никакого способа сказать наверняка, что он безопасен.

Я стажер в Mozilla этим летом, и я работаю над валидатором, который сканирует надстройки, поскольку они представлены в addons.mozilla.org. Я могу только представить, что Wordpress имеет очень похожий инструмент на их конце. Идея заключается в том, что приложение прямо отвергает вопиющий вредоносный код (eval("evil nasty code");), а остальная часть анализируется с помощью некоторых простых эвристик. Используемые алгоритмы отмечают некоторые потенциальные красные флаги на основе того, что он видит в дополнительном пакете, и отправляют эти заметки редакторам, которые затем просматривают код. Это эффективно заканчивается тем, что это процесс, основанный на человеке, но программное обеспечение помогает позаботиться о большой тяжелой работе.

Некоторые методы, которые использует валидатор Mozilla:

  • Синтаксис проверки
  • кода и разметки разборе (HTML/CSS), чтобы найти удаленный код уязвимости
  • Javascript синтаксического анализа и анализа (разбора JS Ань AST и проанализировать каждое утверждение, как можно более глубокое оценивание статических выражений)
  • Совместимость/испытания на устаревание

Вы можете проверить код здесь:

http://github.com/mattbasta/amo-validator

Надеется, что это помогает!

+0

Удивительный! Большое спасибо - это невероятно полезно! Я обязательно проверю валидатор, спасибо! – Matt

+0

@ The Rook: Вот почему я сказал: «Вы не можете делать это программно». Так много всего может повлиять на функцию кода, что на лучшее, на что вы можете надеяться, - это достойный первый проход, который сканирует очевидные вещи перед тем, как фактический код передается вместе с редакторами. – mattbasta

+0

@mattbasta Это интересно, я не очень внимательно прочитал ваше сообщение. Хотя я видел, как некоторые разработчики Mozilla отреагировали на разговор в Defcon о взломе плагинов Mozilla, в основном они пожали плечами и грустно, что это не их вина, и отвергли идею ограничения прав доступа плагина. Теперь я использую хром. – rook

3

unlink('/') не сделает никакого вреда, так как он удаляет только файлы, вы должны использовать rmdir или точнее рекурсивныйrmdir реализации. Я не думаю, что есть способ предотвратить запуск вредоносного кода, потому что существует множество способов быть вредоносным. Вы можете ограничить выполнение определенных функций в php.ini, но это поможет вам только в определенной точке. Например, str_repeat и unserialize являются общими функциями, но если они вызываются с правильными аргументами, они могут мгновенно выслать всю память, выделенную для ваших PHP-скриптов. Но это всего лишь пример, более гнусный может действовать как бэкдор или отправлять по электронной почте все логины разработчику. Думаю, в конце вам придется доверять разработчику и сообществу, если вы не хотите самостоятельно проверять код.

+0

О, ха-ха, ладно .. Я видел это где-то, и это выглядело плохо, поэтому я воспользовался случаем и включил его в сообщение. В любом случае, спасибо за понимание! – Matt

+0

+1 Да, нет способа защитить установку WordPress от плагинов убегающего. Доступ к Wordpress имеет доступ к плагину. Такие вещи, как 'safe_mode' и блокирующие функции, могут быть настроены только на всю установку, а не на ее часть. Загружайте только из источников, которым вы доверяете, и, возможно, выполните быструю проверку подозрительных 'eval() и других вещей, это лучшее, что можно сделать. –

+0

@ Пекка, ты мужчина - ты всегда помогаешь мне с моими вопросами. Благодаря! – Matt

1

Для поиска уязвимостей в PHP, требуется Static Source Code Analysis. Инструменты анализа исходного кода для php включают RATS и PHP-SAT.

Если вы когда-либо использовали анализ статического исходного кода, то вы знаете, что эти инструменты создадут ложные срабатывания и ложные отрицания TON. Инструмент анализа исходного кода не может сообщать вам о 100% -ной погоде, или нет, программа имеет бэкдор или может быть вредоносной. Если бы это было возможно, у нас не было бы так много проблем с взломом веб-сайтов. Wordpress сам по себе крайне небезопасен, так что все плагины, и это из-за ошибок, а не злобы.

Вредоносный код может быть запутан, скрыт и использован во многих формах. Попытка найти случайную уязвимость - задача намного проще, чем преднамеренная. Бэкдор на PHP может быть таким же простым, как добавление или удаление 2 байта.

Удаление 2 байта:

$id=mysql_real_escape_string($id); 
"select * from test where id=$id" 
vs 
"select * from test where id='$id'" 

или добавление 2 байта:

`$_GET[b]`;