Date post: | 15-Jul-2015 |
Category: |
Technology |
Upload: | veselin-nikolov |
View: | 1,832 times |
Download: | 3 times |
● Собствения ни хардуер – компютри, рутери
● Интернет връзката
● Сървърите, които ползваме
● Пароли за достъп, ключове
● Плъгини и теми
● Нашият код
● Meatware
Компоненти
● Собствения ни хардуер – компютри, рутери
● Интернет връзката
● Сървърите, които ползваме
● Пароли за достъп, ключове
● Плъгини и теми
● Нашият код
● Meatware
Компоненти
● 30%+ от сайтовете съхраняват паролите в явен вид*http://plaintextoffenders.com/about/
● Phishing, Social Engineering, Brute Force, MITM, keyloggers, human errors, бази данни с пароли
Пароли...
'my secret password' ->
● phpass:
● $P$BXT7cDEtQXkAVarv7mh8WZux1euzwI/
md5:
● a7303f3eee5f3ff1942bfbb1797ea0af
Хешове
● Използвайте силни алгоритми за хеширане на пароли (phpass е ок засега)
● Много внимавайте като логвате или дебъгвате $_POST, в който може да се съдържат пароли.
Превенция
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
За какво да внимаваме
● Непочистен output
● Погрешна употреба на функции
● Неправилна валидация
● Правописни грешки
XSS
Погрешна употреба на функции
<script>
var a = '<?php echo strip_tags( $a ) ?>';
$a = “'; alert(7) //”;
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/'
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
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
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
Response
● Трябва да имате backup винаги
● Трябва да имате логове, за да разберете какво се е случило
Упс.
● http://codex.wordpress.org/FAQ_My_site_was_hacked
Stay calm and use version control.