Информационная безопасность

OWASP Top 10

2017 год: Equifax взломан через Apache Struts уязвимость (injection в OGNL). Утекли данные 147 миллионов американцев. 2019: Capital One - SSRF через WAF, 100 миллионов записей. OWASP Top 10 - это не академический список, это реальные уязвимости реальных систем, которые стоят миллиарды долларов и репутацию компаний.

  • **Equifax (2017):** Apache Struts RCE через OGNL injection, 147M записей, $575M штраф FTC
  • **Capital One (2019):** SSRF через WAF -> AWS IAM credentials -> S3 с данными 100M клиентов
  • **LinkedIn (2012):** 6.5M хешей паролей MD5 без соли - все взломаны за дни

Injection: SQL, Command, LDAP

2010 год, онлайн-магазин. Поле поиска: `телефон`. URL становится `?q=телефон`. Хакер вводит `' OR '1'='1`. SQL-запрос превращается в `SELECT * FROM products WHERE name='' OR '1'='1'` - и возвращает все товары. Меняет на `'; DROP TABLE products;--` - таблица исчезает. **SQL Injection** - это когда пользовательские данные интерпретируются как код.

  • **SQL Injection:** конкатенация строк в SQL-запросах -> использовать prepared statements / ORM
  • **Command Injection:** вызов shell с пользовательским вводом -> `subprocess.run([...], shell=False)`
  • **LDAP Injection:** спецсимволы в LDAP-фильтрах -> экранировать через библиотеку
  • **Template Injection:** пользовательский ввод в шаблонизатор (Jinja2, Pebble) -> никогда не рендерить пользовательский ввод как шаблон

**ORM не защищает автоматически.** `db.query(f'SELECT * FROM users WHERE id={id}')` - инъекция даже с ORM. Защищает только параметризация: `User.objects.filter(id=id)` или `db.query('SELECT * WHERE id = :id', {'id': id})`.

Какой из вариантов защищает от SQL injection?

Broken Authentication

Слабая аутентификация - не всегда взлом пароля. Иногда достаточно просто угадать session ID, который состоит из timestamp. Или воспользоваться функцией «Забыл пароль», которая отправляет пароль в открытом виде. **Broken Authentication** охватывает весь спектр ошибок в механизмах проверки личности.

  • **Rate limiting** на `/login`: заблокировать после 5 неудачных попыток
  • **Bcrypt/Argon2** для паролей - не MD5/SHA1 (слишком быстрые для брутфорса)
  • **Session ID** из `secrets.token_hex(32)` - не timestamp и не UUID v1
  • **Logout** должен инвалидировать сессию на сервере, не только удалять cookie
  • **MFA** (многофакторная аутентификация) - даже взломанный пароль не даёт доступ

Пользователь вышел из аккаунта. Cookie `session_id` удалена из браузера. Сессия безопасно завершена?

Sensitive Data Exposure

2019 год: база данных 540 миллионов пользователей Facebook утекла с AWS S3 - бакет был публичным. Данные не были зашифрованы. Sensitive Data Exposure - это не только про взлом; часто это просто отсутствие шифрования там, где оно должно быть, и избыточный сбор данных.

**Data minimization:** не собирай данные которые не нужны. Нет данных - нет утечки. GDPR требует иметь явное обоснование для каждого поля персональных данных.

Приложение хранит номера кредитных карт в БД. Как правильно организовать хранение?

XXE и SSRF атаки

XML пришёл с XML-парсером, который умеет загружать внешние ресурсы. **XXE (XML External Entity)** - это когда XML из пользовательского ввода содержит ссылку на `/etc/passwd`, и сервер покорно его читает и возвращает. **SSRF (Server-Side Request Forgery)** - шире: любая возможность заставить сервер выполнить HTTP-запрос к произвольному адресу, включая внутреннюю сеть.

**defusedxml** - Python-библиотека, которая отключает опасные XML-фичи: external entities, billion laughs атаку (экспоненциальное раскрытие entities), quadratic blowup. Замените `xml.etree.ElementTree` на `defusedxml.ElementTree` без изменений API.

Сервер на AWS получил SSRF-запрос к `http://169.254.169.254/latest/meta-data/iam/credentials`. Что произойдёт?

OWASP Top 10: главные угрозы

  • **Injection:** пользовательские данные интерпретируются как код -> параметризованные запросы, shell=False
  • **Broken Authentication:** слабые сессии, MD5 пароли, нет rate limiting -> bcrypt/Argon2, secrets.token_hex, MFA
  • **Sensitive Data Exposure:** plaintext в БД и логах, лишние данные -> шифрование, токенизация, data minimization
  • **XXE/SSRF:** XML загружает файлы, сервер делает запросы во внутреннюю сеть -> defusedxml, IP whitelist

Связанные темы

OWASP Top 10 пересекается со специфическими атаками и механизмами аутентификации.

  • SQL Injection: детальный разбор — Injection - самая опасная из OWASP Top 10
  • CSRF, SSRF, CORS — SSRF и CORS детально разобраны здесь
  • JWT, OAuth 2.0, OpenID Connect — Современные механизмы аутентификации решают Broken Auth проблемы

Вопросы для размышления

  • Почему параметризованные запросы защищают от SQL injection лучше чем экранирование символов?
  • Как data minimization снижает риски не только утечки, но и compliance (GDPR)?
  • В чём разница между XXE и SSRF? Могут ли они использоваться в комбинации?

Связанные уроки

  • net-21-http-basics
OWASP Top 10

0

1

Войти