+ All Categories
Home > Technology > WordPress Security

WordPress Security

Date post: 15-Jul-2015
Category:
Upload: veselin-nikolov
View: 1,832 times
Download: 3 times
Share this document with a friend
63
Security Ruins everything on the Internet since 1920*
Transcript

SecurityRuins everything on the Internet since 1920*

About me

● Веселин Николов

● Automattic

● WP от 1.2

● PHP и MySQL от 3.0

About me

● Веселин Николов

● Automattic

● WP от 1.2

● PHP и MySQL от 3.0

● Опит с IRC*

Acid Burn

● Контролира светофарите

● Притежава 686

90-те

● mIRC, @

● MSIE хакове

● DoS, ботнети

● Проксита, шелове, IRC сървъри

● Confidentiality

● Integrity

● Availability

Сигурност

● Превенция

● Идентификация

● Реакция

(^^ цитирам Тони Перез)

Сигурност

● Собствения ни хардуер – компютри, рутери

● Интернет връзката

● Сървърите, които ползваме

● Пароли за достъп, ключове

● Плъгини и теми

● Нашият код

● Meatware

Компоненти

● Собствения ни хардуер – компютри, рутери

● Интернет връзката

● Сървърите, които ползваме

● Пароли за достъп, ключове

● Плъгини и теми

● Нашият код

● Meatware

Компоненти

● Thunderstrike, USB, вируси и трояни

● Software Update, Antivirus

Хардуер

● MITM, хакнати рутери, Wi-Fi, Poodle, http

● VPN, Proxy, Software Update

Интернет

● Legacy software

● Managed hosting, админи

Сървъри

Пароли...

Пароли...

Your password is OK, as long as it's 6 caracters and ends with 123.

I recommend qwe123 :D

● 30%+ от сайтовете съхраняват паролите в явен вид*http://plaintextoffenders.com/about/

● Phishing, Social Engineering, Brute Force, MITM, keyloggers, human errors, бази данни с пароли

Пароли...

Някой някъде има списък с пароли, които сте ползвали.

Пароли...

'my secret password' ->

● phpass:

● $P$BXT7cDEtQXkAVarv7mh8WZux1euzwI/

md5:

● a7303f3eee5f3ff1942bfbb1797ea0af

Хешове

● Използвайте силни алгоритми за хеширане на пароли (phpass е ок засега)

● Много внимавайте като логвате или дебъгвате $_POST, в който може да се съдържат пароли.

Превенция

Password Manager

За съжаление не всички потребители ще опазят паролите си.

Права на достъп

Права на достъп

2FA

● https://wordpress.org/plugins/two-factor-auth/

● 2FA на всичките ви пощи, социални мрежи и тн.

Плъгини и теми

● Официалните хранилища

● Не ползвайте безплатни версии на платени теми и плъгини

Code Review

● XSS

● CSRF

● Remote code execution

● SQL injection

● Privilege escalation

● Open redirects

Code Review

● XSS

● CSRF

● Remote code execution

● SQL injection

● Privilege escalation

● Open redirects

XSS

● Има известни филтри в модерните браузъри, тества се по-трудно

XSS

mysite.com/?ref=">HI!, ASL PLS

XSS

XSS

● Late escaping:

● esc_url, esc_attr, esc_url, esc_textarea, esc_url_raw, ...

За какво да внимаваме

● Непочистен output

● Погрешна употреба на функции

● Неправилна валидация

● Правописни грешки

XSS

Погрешна употреба на функции

<script>

var a = '<?php echo strip_tags( $a ) ?>';

XSS

Погрешна употреба на функции

<script>

var a = '<?php echo strip_tags( $a ) ?>';

$a = “'; alert(7) //”;

XSS

Погрешна употреба на функции

<?php echo json_encode( $a ); ?>

XSS

Погрешна употреба на функции

<?php echo json_encode( $a ); ?>

http://h43z.blogspot.com/2012/06/phps-jsonencode-and-xss.html

XSS

Употреба на esc_* без валидация:

<script src="<?php echo esc_url( $js ) ?>">

където

$js = 'http://evil-project.com/js';

XSS

Неправилна валидация

1. Проверка вместо cast

if ( intval( $myfield ) )

echo $myfield;

// $myfield = '1 <script...';

XSS

Неправилна валидация на ID-та

2. Липса на ^ и $ в regexp

if ( ! preg_match( '/[a-z0-9_-]/i', $myfield ) ) {

return 'You are trying to hack me!';

}

// $myfield = '<script ...'

XSS

Неправилна валидация на адреси

2. Липса на ^ и $ в RegExp

if ( preg_match ( '!https?://(www\.)*good-host.com/js/!i', $myjs)

http://dzver.com/bad.js?http://good-host.com/js/

if ( preg_match( '!^http://good-host.com!', $myjs )

http://good-host.com.dzver.com/

XSS

Неправилна валидация на адреси

3. Точката в RegExp е wildcard.

if ( preg_match ( '!^https?://(www.)*good-host.com/js/!i', $myjs) ...

// $myjs = http://wwwwgoodhost.com/js

XSS

Неправилна валидация на адреси

4. Позволен / в хост-а

if ( ! preg_match( '!^https?://[^\.]+\.whatever\.com/.+$!i', $url ) )

// $myjs = 'http://3254656436/or.whatever.com/evil.js'

// $myjs = '<script.../.whatever.com/'

Open Redirect

Всичко, което казахме за валидация на адреси

wp_redirect();

wp_safe_redirect();

XSS

Правописни грешки:

echo esc_html( printf( __( "My name is %s", $name ) ) );

CSRF

Позволяване на чужд сайт да имитира дейност от името на потребителя ни чрез последователни request-и

Solution:

nonces

CSRF

Позволяване на чужд сайт да имитира дейност от името на потребителя ни чрез последователни request-и

Solution:

nonces

http://codex.wordpress.org/Function_Reference/wp_create_nonce

Code Review

● XSS

● CSRF

● Remote code execution

● SQL injection

● Privilege escalation

● Open redirects

Remote Code Execution

Някои скорошни много лоши бъгове в плъгини, води до пълна загуба на контрол

Remote Code Execution

eval()

create_function()

assert()

`` (backticks)

system()

Извор на проблеми

extract()

parse_str()

Remote Code Execution

preg_match( '/.../e', $_GET )

/e позволява eval върху match

RFI, LFI

include( $_GET['action'] . '.php' );

XXE

<?php

$xml = simplexml_load_file( $uploaded_file );

?>

<h1><?php echo esc_html( $xml->title );

?></h1>

XXE

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE something

[<!ENTITY awesome SYSTEM

"file:///home/www/public_html/db-config.php"

>]

>

<something>

<title>&awesome;</title>

</something>

● https://www.owasp.org/index.php/XML_External_Entity_%28XXE%29_Processing

XXE

libxml_disable_entity_loader(true)

Code Review

● XSS

● CSRF

● Remote code execution

● SQL injection

● Privilege escalation

● Open redirects

$wpdb->prepare

Всяка заявка, която не използва prepare е потенциален таргет.

$wpdb->query( $wpdb->prepare( "DELETE FROM wp_users WHERE user_id = %d", $id ) );

Code Review

● XSS

● CSRF

● Remote code execution

● SQL injection

● Privilege escalation

● Open redirects

Разни

● current_user_can – всеки път, когато се налага

● switch_to_blog – в Multisite с повишено внимание.

Възможни защити

● Ограничаване на папки за писане до uploads

● Инсталиране на WordPress със SVN

● Диагонален преглед на изтеглените теми и плъгини за curly code:

eval(base64_decode("09B2459...

Възможни защити

● define('DISALLOW_FILE_EDIT', true);

● Употреба на user/db само за този сайт

● http://codex.wordpress.org/Hardening_WordPress

Плъгини, които забелязват

● VaultPress

● Sucuri

● ?

Имате нужда от между 0 и 1

Response

● Трябва да имате backup винаги

● Трябва да имате логове, за да разберете какво се е случило

Упс.

● http://codex.wordpress.org/FAQ_My_site_was_hacked

Stay calm and use version control.

Това беше

Питайте


Recommended