Jak si (ne)nechat hacknout 
Wordpress stránky 
Michal Kubíček 
How to have unhackableWordPress site 
Webexpo > Praha > 14-09-2014
BEZPEČNOST VE WORDPRESS
CO Z TOHO MAJÍ? 
- Rozesílání nevyžádané pošty 
- DDoS útoky 
- Podvodná přesměrování 
- Pozměňování obsahu stránek 
- Vkládání skrytých zpětných odkazů a iframes 
- Vkládání reklamy 
- Znevěrohodnění webu 
- Přístup k osobním údajům a heslům uživatelů 
- Přístup k platebním bránám 
- Odcizení služeb 
- Vložení škodlivého kódu do PC uživatele 
- Ukládání nelegálního materiálu na „bezpečném“ stroji 
- Osobní důvody 
- Jen tak/LOL
JÁDRO
ŠABLONY
PLUGINY
USD: UPDATE, SOURCE, DELETE
USD: UPDATE, SOURCE, DELETE 
LFI: /wp-admin/admin-ajax.php?action=revslider_show_image&img=../wp-config.php
UPLOAD ŠKODLIVÉHO KÓDU
UPLOAD ŠKODLIVÉHO KÓDU 
#zákaz spouštění nechtěných souborů z /uploads/ 
<Files ~ ".*..*"> 
Order Allow,Deny 
Deny from all </Files> 
<FilesMatch ".(jpg|jpeg|jpe|gif|png|tif|tiff)$"> 
Order Deny,Allow 
Allow from all 
</FilesMatch>
POVOLENÁ EDITACE SOUBORŮ Z ADMINU
PINGBACK & TRACKBACK, XMLRPC, DDoS ÚTOKY
<IfModule mod_alias.c> 
RedirectMatch 403 /(.*)/xmlrpc.php$ 
</IfModule> 
<Files xmlrpc.php> 
Order Deny,Allow 
Deny from all 
</Files> 
RewriteEngine On 
RewriteCond %{REQUEST_METHOD} ^TRACE 
RewriteRule .* - [F]
ÚTOKY HRUBOU SILOU
ÚTOKY HRUBOU SILOU: PŘEJMENOVAT NICK I LOGIN 
Source: http://blog.sucuri.net
ÚTOKY HRUBOU SILOU: OMEZENÍ PROBLÉMOVÝCH IP 
<Limit GET POST PUT> 
Order allow,deny 
Allow from all 
# zakaze 110.89.*.* 
Deny from 110.89.0.0/16 
# zakaze 208.43.251.* 
Deny from 208.43.251.0/24 
</Limit>
ÚTOKY HRUBOU SILOU: OMEZENÍ ZEMÍ (ISO CODES) 
<IfModule mod_geoip.c> 
GeoIPEnable ON 
#Vietanm 
SetEnvIF GEOIP_COUNTRY_CODE VN BlockThese 
#russia 
SetEnvIF GEOIP_COUNTRY_CODE RU BlockThese 
#romania 
SetEnvIF GEOIP_COUNTRY_CODE RO BlockThese 
#turkey 
SetEnvIF GEOIP_COUNTRY_CODE TR BlockThese 
#China 
SetEnvIF GEOIP_COUNTRY_CODE CN BlockThese 
#Nigeria 
SetEnvIF GEOIP_COUNTRY_CODE NG BlockThese 
#Iran 
SetEnvIF GEOIP_COUNTRY_CODE IR BlockThese 
Deny from env=BlockThese 
</IfModule>
ÚTOKY HRUBOU SILOU: PŘEJMENOVAT WP-LOGIN
ÚTOKY HRUBOU SILOU: ZABEZPEČIT WP-LOGIN 
#Ochrana wp-login pomocí .htpasswd 
<Files wp-login.php> 
AuthUserFile ~/.htpasswd 
AuthName “Private access” 
AuthType Basic 
require user mysecretuser 
</Files>
ÚTOKY HRUBOU SILOU: KONTROLA REFFERERU 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{REQUEST_METHOD} POST 
RewriteCond %{REQUEST_URI} .(wp-comments-post|wp-login).php* 
RewriteCond %{HTTP_REFERER} !.*vasedomena.cz.* [OR] 
RewriteCond %{HTTP_USER_AGENT} ^$ 
RewriteRule (.*) http://%{REMOTE_ADDR}/$ [R=301,L] 
</ifModule>
ÚTOKY HRUBOU SILOU: SILNĚJŠÍ HESLO
ÚTOKY HRUBOU SILOU: OMEZENÍ POČTU PŘIHLÁŠENÍ
ONLINE NA http://michalkubicek.cz/tahak-pro-wp-config-php/ 
WP-CONFIG TAHÁK 
zápis Co umí 
define('FORCE_SSL_LOGIN', true); Vynucení https protokolu na přihlašovací stránku (SSL) 
define('FORCE_SSL_ADMIN', true); Vynucení https protokolu na administraci 
define('DISALLOW_FILE_EDIT', true); Vypnutí editace PHP v administraci 
define('WP_AUTO_UPDATE_CORE', true); Zapnutí automatické aktualizace jádra 
add_filter( 'auto_update_plugin', '__return_true'); Zapnutí automatické aktualizace pluginů 
add_filter( 'auto_update_theme', '__return_true'); Zapnutí automatické aktualizace šablon 
define('DISALLOW_FILE_MODS', true); Vypnutí instalace pluginů a šablon z administrace 
define('WP_HTTP_BLOCK_EXTERNAL', true); Zablokování externích požadavků (např. pluginy) 
define('WP_ACCESSIBLE_HOSTS', 'povolenaurl.cz'); Povolení externího požadavku z konkrétní URL 
error_reporting(0); 
Vypnutí chybových hlášek 
@ini_set('display_errors', 0); 
define('WP_MEMORY_LIMIT', '96M'); Zvýšení limitu PHP paměti 
define('FS_CHMOD_FILE', 0755); 
define('FS_CHMOD_DIR', 0644); 
Nastavení oprávnění pro soubory a složky 
define('WP_POST_REVISIONS', 2 ); Omezení počtu revizí dokumentu
OPRÁVNĚNÍ SLOŽEK A SOUBORŮ 
root (kořenový adresář) 0755 
wp-includes/ 0755 
.htaccess 0644 
wp-admin/index.php 0644 
wp-admin/js/ 0755 
wp-content/themes/ 0755 
wp-content/plugins/ 0755 
wp-admin/ 0755 
wp-content/ 0755 
wp-config.php 0644
MASKOVÁNÍ 
Bývá 
- license.txt, readme.txt 
- <head> signatura
<Files license.txt> 
order allow,deny 
deny from all 
</files> 
<Files wp-config-sample.php> 
order allow,deny 
deny from all 
</Files> 
<Files readme.html> 
order allow,deny 
deny from all 
</Files> 
ServerSignature Off 
RewriteCond %{REQUEST_FILENAME} wp-.*$ [NC] 
RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteCond %{REQUEST_FILENAME} -f [NC,OR] 
RewriteCond %{REQUEST_FILENAME} -d [NC] 
RewriteRule .* - [F,L] 
# přejmenování wp-login na 'administrace' 
RewriteCond %{REQUEST_URI} administrace/?$ [NC] 
RewriteRule backend/?$ /wp-login.php [NC,L] 
MASKOVÁNÍ
MASKOVÁNÍ 
/wp-content/themes/vase-sablona/function.php 
remove_action('wp_head', 'feed_links', 2); 
remove_action('wp_head', 'feed_links_extra', 3); 
remove_action('wp_head', 'rsd_link'); 
remove_action('wp_head', 'wlwmanifest_link'); 
remove_action('wp_head', 'index_rel_link'); 
remove_action('wp_head', 'start_post_rel_link', 10, 0); 
remove_action('wp_head', 'parent_post_rel_link', 10, 0); 
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0); 
remove_action('wp_head', 'wp_generator'); 
remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0);
WEB APPLICATION FIREWALL 
CloudFlare 
Incapsula 
cloudproxy.sucuri 
easywaf Kona Akamai 
modsecurity
UŽITEČNÉ PLUGINY A STRÁNKY 
• Google Authenticator – dvoufázové ověření 
• All In One WP Security 
• Ochrana proti brute force - přejmenování účtu, změní login stránku, captcha 
• Změna prefixu DB 
• Automatické backupy (pozor na procházení adresáři) 
• Jednoduchá změna oprávnění složek a souborů 
• Firewall, blacklist, whitelist 
• Bot Honeypot 
• Comment spam captcha 
• Detekce změn souborů 
• Acunetix SecureWordPress, AcunetixWP Security – scaner zranitelností 
• Sucuri Security - zjistí neobvyklé soubory, Malware Scaner 
• Change DB Prefix Plugin 
• https://api.wordpress.org/secret-key/1.1/salt/ - generování tajných slovíček 
• http://bezpecnostwebu.cz/ukazky/htaccess.txt - vytuněný htaccess 
• http://wordpress.bigdrobek.com/bezpecnost/ - fajn přehled základních kroků, jak zabezpečit WP 
• http://musilda.cz 
• http://wpsecure.net/ - EN 
• http://blog.sucuri.net - EN
KAŽDÁ APLIKACE JE BEZPEČNÁ. 
DO CHVÍLE, NEŽ V NÍ NĚKDO NAJDE CHYBU.
DĚKUJI ZA POZORNOST 
@MICHALKUBICEK 
www.pronetmedia.cz 
www.michalkubicek.cz 
www.bezpecnostwebu.cz

Jak si (ne)nechat hacknout Wordpress stránky - How to have unhackable WordPress site

  • 1.
    Jak si (ne)nechathacknout Wordpress stránky Michal Kubíček How to have unhackableWordPress site Webexpo > Praha > 14-09-2014
  • 2.
  • 3.
    CO Z TOHOMAJÍ? - Rozesílání nevyžádané pošty - DDoS útoky - Podvodná přesměrování - Pozměňování obsahu stránek - Vkládání skrytých zpětných odkazů a iframes - Vkládání reklamy - Znevěrohodnění webu - Přístup k osobním údajům a heslům uživatelů - Přístup k platebním bránám - Odcizení služeb - Vložení škodlivého kódu do PC uživatele - Ukládání nelegálního materiálu na „bezpečném“ stroji - Osobní důvody - Jen tak/LOL
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
    USD: UPDATE, SOURCE,DELETE LFI: /wp-admin/admin-ajax.php?action=revslider_show_image&img=../wp-config.php
  • 9.
  • 10.
    UPLOAD ŠKODLIVÉHO KÓDU #zákaz spouštění nechtěných souborů z /uploads/ <Files ~ ".*..*"> Order Allow,Deny Deny from all </Files> <FilesMatch ".(jpg|jpeg|jpe|gif|png|tif|tiff)$"> Order Deny,Allow Allow from all </FilesMatch>
  • 11.
  • 12.
    PINGBACK & TRACKBACK,XMLRPC, DDoS ÚTOKY
  • 13.
    <IfModule mod_alias.c> RedirectMatch403 /(.*)/xmlrpc.php$ </IfModule> <Files xmlrpc.php> Order Deny,Allow Deny from all </Files> RewriteEngine On RewriteCond %{REQUEST_METHOD} ^TRACE RewriteRule .* - [F]
  • 14.
  • 15.
    ÚTOKY HRUBOU SILOU:PŘEJMENOVAT NICK I LOGIN Source: http://blog.sucuri.net
  • 16.
    ÚTOKY HRUBOU SILOU:OMEZENÍ PROBLÉMOVÝCH IP <Limit GET POST PUT> Order allow,deny Allow from all # zakaze 110.89.*.* Deny from 110.89.0.0/16 # zakaze 208.43.251.* Deny from 208.43.251.0/24 </Limit>
  • 17.
    ÚTOKY HRUBOU SILOU:OMEZENÍ ZEMÍ (ISO CODES) <IfModule mod_geoip.c> GeoIPEnable ON #Vietanm SetEnvIF GEOIP_COUNTRY_CODE VN BlockThese #russia SetEnvIF GEOIP_COUNTRY_CODE RU BlockThese #romania SetEnvIF GEOIP_COUNTRY_CODE RO BlockThese #turkey SetEnvIF GEOIP_COUNTRY_CODE TR BlockThese #China SetEnvIF GEOIP_COUNTRY_CODE CN BlockThese #Nigeria SetEnvIF GEOIP_COUNTRY_CODE NG BlockThese #Iran SetEnvIF GEOIP_COUNTRY_CODE IR BlockThese Deny from env=BlockThese </IfModule>
  • 18.
    ÚTOKY HRUBOU SILOU:PŘEJMENOVAT WP-LOGIN
  • 19.
    ÚTOKY HRUBOU SILOU:ZABEZPEČIT WP-LOGIN #Ochrana wp-login pomocí .htpasswd <Files wp-login.php> AuthUserFile ~/.htpasswd AuthName “Private access” AuthType Basic require user mysecretuser </Files>
  • 20.
    ÚTOKY HRUBOU SILOU:KONTROLA REFFERERU <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_METHOD} POST RewriteCond %{REQUEST_URI} .(wp-comments-post|wp-login).php* RewriteCond %{HTTP_REFERER} !.*vasedomena.cz.* [OR] RewriteCond %{HTTP_USER_AGENT} ^$ RewriteRule (.*) http://%{REMOTE_ADDR}/$ [R=301,L] </ifModule>
  • 21.
    ÚTOKY HRUBOU SILOU:SILNĚJŠÍ HESLO
  • 22.
    ÚTOKY HRUBOU SILOU:OMEZENÍ POČTU PŘIHLÁŠENÍ
  • 23.
    ONLINE NA http://michalkubicek.cz/tahak-pro-wp-config-php/ WP-CONFIG TAHÁK zápis Co umí define('FORCE_SSL_LOGIN', true); Vynucení https protokolu na přihlašovací stránku (SSL) define('FORCE_SSL_ADMIN', true); Vynucení https protokolu na administraci define('DISALLOW_FILE_EDIT', true); Vypnutí editace PHP v administraci define('WP_AUTO_UPDATE_CORE', true); Zapnutí automatické aktualizace jádra add_filter( 'auto_update_plugin', '__return_true'); Zapnutí automatické aktualizace pluginů add_filter( 'auto_update_theme', '__return_true'); Zapnutí automatické aktualizace šablon define('DISALLOW_FILE_MODS', true); Vypnutí instalace pluginů a šablon z administrace define('WP_HTTP_BLOCK_EXTERNAL', true); Zablokování externích požadavků (např. pluginy) define('WP_ACCESSIBLE_HOSTS', 'povolenaurl.cz'); Povolení externího požadavku z konkrétní URL error_reporting(0); Vypnutí chybových hlášek @ini_set('display_errors', 0); define('WP_MEMORY_LIMIT', '96M'); Zvýšení limitu PHP paměti define('FS_CHMOD_FILE', 0755); define('FS_CHMOD_DIR', 0644); Nastavení oprávnění pro soubory a složky define('WP_POST_REVISIONS', 2 ); Omezení počtu revizí dokumentu
  • 24.
    OPRÁVNĚNÍ SLOŽEK ASOUBORŮ root (kořenový adresář) 0755 wp-includes/ 0755 .htaccess 0644 wp-admin/index.php 0644 wp-admin/js/ 0755 wp-content/themes/ 0755 wp-content/plugins/ 0755 wp-admin/ 0755 wp-content/ 0755 wp-config.php 0644
  • 25.
    MASKOVÁNÍ Bývá -license.txt, readme.txt - <head> signatura
  • 26.
    <Files license.txt> orderallow,deny deny from all </files> <Files wp-config-sample.php> order allow,deny deny from all </Files> <Files readme.html> order allow,deny deny from all </Files> ServerSignature Off RewriteCond %{REQUEST_FILENAME} wp-.*$ [NC] RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{REQUEST_FILENAME} -f [NC,OR] RewriteCond %{REQUEST_FILENAME} -d [NC] RewriteRule .* - [F,L] # přejmenování wp-login na 'administrace' RewriteCond %{REQUEST_URI} administrace/?$ [NC] RewriteRule backend/?$ /wp-login.php [NC,L] MASKOVÁNÍ
  • 27.
    MASKOVÁNÍ /wp-content/themes/vase-sablona/function.php remove_action('wp_head','feed_links', 2); remove_action('wp_head', 'feed_links_extra', 3); remove_action('wp_head', 'rsd_link'); remove_action('wp_head', 'wlwmanifest_link'); remove_action('wp_head', 'index_rel_link'); remove_action('wp_head', 'start_post_rel_link', 10, 0); remove_action('wp_head', 'parent_post_rel_link', 10, 0); remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0); remove_action('wp_head', 'wp_generator'); remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0);
  • 28.
    WEB APPLICATION FIREWALL CloudFlare Incapsula cloudproxy.sucuri easywaf Kona Akamai modsecurity
  • 29.
    UŽITEČNÉ PLUGINY ASTRÁNKY • Google Authenticator – dvoufázové ověření • All In One WP Security • Ochrana proti brute force - přejmenování účtu, změní login stránku, captcha • Změna prefixu DB • Automatické backupy (pozor na procházení adresáři) • Jednoduchá změna oprávnění složek a souborů • Firewall, blacklist, whitelist • Bot Honeypot • Comment spam captcha • Detekce změn souborů • Acunetix SecureWordPress, AcunetixWP Security – scaner zranitelností • Sucuri Security - zjistí neobvyklé soubory, Malware Scaner • Change DB Prefix Plugin • https://api.wordpress.org/secret-key/1.1/salt/ - generování tajných slovíček • http://bezpecnostwebu.cz/ukazky/htaccess.txt - vytuněný htaccess • http://wordpress.bigdrobek.com/bezpecnost/ - fajn přehled základních kroků, jak zabezpečit WP • http://musilda.cz • http://wpsecure.net/ - EN • http://blog.sucuri.net - EN
  • 30.
    KAŽDÁ APLIKACE JEBEZPEČNÁ. DO CHVÍLE, NEŽ V NÍ NĚKDO NAJDE CHYBU.
  • 31.
    DĚKUJI ZA POZORNOST @MICHALKUBICEK www.pronetmedia.cz www.michalkubicek.cz www.bezpecnostwebu.cz