Secure your Wordpress

A presentation at Null Bachaav Workshop in November 2013 in Bengaluru, Karnataka, India by Anant Shrivastava

Slide 1

Slide 1

Secure Wordpress Bachaav Session A Null Community Initiative 30 – Nov - 2013

Slide 2

Slide 2

Agenda • Understand • How to Setup • Security Configuration

Slide 3

Slide 3

Agenda • Understand – How Wordpress Works – File and Folder Co-relations • How to Setup • Security Configuration

Slide 4

Slide 4

Demo Setup • VirtualBox VM – NAT interface for Internet Access – Hostonly connection for normal testing – sudo ifconfig => get the IP Address • Various URL – http://IP/wordpress – http://IP/phpmyadmin • Credentials – Username:wordpress – Password:wordpress

Slide 5

Slide 5

How Wordpress Works ● ● Index.php – Define WP_USE_THEMES – include(wp-blog-header.php) Wp-blog-header – include(wp-config.php) -> db and other constants – include(wp-settings.php) ● ● ● lots and lots of includes Plugins from PLUGIN_DIR Pluggable_functions loaded (can be overridden by plugins) – Path Declaration – Query Parsing and assignment – HTTP Headers – Request Parsing – Template Redirections – Theme ● ● ● ● Header Loop Widget / Sidebar Footer Reference : http://codex.wordpress.org/User:DavidHouse/Wordpress_Code_Flow

Slide 6

Slide 6

Slide 7

Slide 7

File and Folders Co-relations ● wp-config.php ● wp-settings.php ● index.php ● .htaccess ● /wp-admin/ ● /wp-content ● – /plugins – /themes /wp-includes

Slide 8

Slide 8

Agenda • Understand • How to Setup – Setup over FTP / SSH – Setup via SVN • Security Configuration

Slide 9

Slide 9

Setup • Shared hosting – Use Hosting Control Panel – Upload Via FTP and run install.php • VPS / Dedicated / Cloud Server – Upload via ssh / ftp – Sync via SVN

Slide 10

Slide 10

Wordpress Setup

Slide 11

Slide 11

Agenda • Understand • How to Setup • Security Configuration – Basic Server hardening – Understanding attack vectors – Implement Protections

Slide 12

Slide 12

Base Server Hardening • This session is wordpress focused so we will not cover about server hardening in details

Slide 13

Slide 13

Core Level Attacks ● Present Unpatched Issues – Full Path Disclosures – Enumeration Issues ● ● ● ● ● Username Attachment Plugins Themes – Account Bruteforce – Version disclosure and Multiple places Previously exploited issues – XMLRPC based SSRF attack – D-DoS and more

Slide 14

Slide 14

Other Attacks ● Plugin / Theme using old Files ● Vulnerable Code in Core ● Vulnerable Code in Plugin / Themes ● Permission and Access Issues

Slide 15

Slide 15

How to Defend ● ● ● ● Core Modifications is not recommended as every upgrade modifies core files. Implement Custom HTACCESS based restrictions Implement Hook / function override via custom theme templates Even theme modification is a absolute no – no as new update will override it.

Slide 16

Slide 16

HTACCESS ● ● Redirections – RewriteCond %{REQUEST_URI} robots.txt – RewriteRule ^abracadabra/ http://google.com [R=301,L] Custom Directives – DirectoryIndex index.html – ServerSignature Off – Header unset Etag

Slide 17

Slide 17

Theme modification the right way ● Child Theme folder : all files picked first from this and then from parent ● style.css /* ● – Theme Name: Anantshri – Theme URI: – Description: – Author: – Author URI: – Template: – Version: – */ – @import url(“../twentytwelve/style.css”); http://www.anantshri.info/ Child theme for the twenty twelve Anant Shrivastava http://anantshri.info/about/ twentytwelve 0.1.0 functions.php : Can be used to provide all function overrides – remove_action( ‘widgets_init’, ‘xyz_widgets_init’ ); – add_action( ‘widgets_init’, ‘abc_widgets_init’ );

Slide 18

Slide 18

User / Attachment Enumeration ● Index.php?author=1 – ● Redirects to /author/<username> Index.php?attachment=1 – Redirects to Individual Attachment URL

Slide 19

Slide 19

Plugin / Theme Enumeration ● How it is identified – Predictable URL : wp-content/plugin , themes – Predictable file : readme.txt and plugin specific assets(js or css)

Slide 20

Slide 20

Account Bruteforce / Enumeration ● Possible to Enumerate Accounts due to different Error Messages

Slide 21

Slide 21

More Issues ● Full Path Disclosures display_error : Off (php.ini) ● ClickJacking protection ● swf and timthumb related attacks ● Issues related to wp-includes folder ● Comment Spam ● Dangerous Methods (PUT and more) ● XMLRPC issues ● Automated scanners ● Wordpress header code

Slide 22

Slide 22

Plus a lot more ● This should help us in getting started and since you are now aware of various functions and ways to control them its an open playground now.