Мышление атакующего

Мышление атакующего

Ты видишь систему. Атакующий видит поверхность атаки.

Одна и та же система. Два разных взгляда. Один — видит как она работает. Другой — где она ломается. Разница не в знаниях. В способе думать.

📖 8 мин чтения  ·  Уровень: любой  ·  Хаос · #001


Есть два способа смотреть на любую систему — будь то сайт, замок на двери, корпоративная сеть или процесс найма в компании. Первый способ — функциональный: для чего это нужно, как это использовать, что это делает. Второй — атакующий: где это можно сломать, обойти или использовать не по назначению.

Большинство людей думают первым способом. Это нормально — системы создаются чтобы работать, а не чтобы ломаться. Но тот, кто думает вторым способом, всегда будет на шаг впереди первого.

Это не про «стать хакером». Это про понимание реальности такой, какая она есть.

Пример 01

Форма входа на сайт

🔐 Вход в аккаунт
👤 Обычный пользователь
Два поля: логин и пароль. Кнопка «Войти». Если введёшь правильно — войдёшь. Если нет — попробуй снова. Это просто дверь с замком.
☠ Атакующий
Это точка входа. Первый вопрос: есть ли ограничение на количество попыток? Второй: возвращает ли ошибка «неверный пароль» или «пользователь не найден» — потому что они говорят разное. Третий: принимает ли поле логина специальные символы как код?
Суть сдвига
Форма входа — не дверь. Это интерфейс между пользователем и базой данных. У каждого интерфейса есть граничные условия. Атакующий ищет что происходит на границах.

Конкретные точки сдвига

Обычный
Нажму «забыл пароль» чтобы сбросить его
Атакующий
Форма восстановления — отдельная точка атаки. Иногда слабее основной формы входа
Обычный
Войду через Google, так проще
Атакующий
OAuth-интеграция — третья поверхность. Ошибки в ней иногда позволяют войти за кого угодно
Обычный
Запомни меня на этом устройстве
Атакующий
Persistent токен в cookie. Если он не ротируется — его можно украсть один раз и использовать вечно

Пример 02

Сложный пароль

🔑 Ваш пароль
👤 Обычный пользователь
Придумал длинный сложный пароль: P@ssw0rd_2024! Восклицательный знак, цифры, заглавные. Сайт написал «надёжный». Я защищён.
☠ Атакующий
Слово + цифра + спецсимвол — это маска ?u?l?l?l?d?d?d?d! Это правило номер один в любом словаре перебора. Hashcat переберёт такие варианты за минуты при наличии хеша. Проблема не в сложности — в предсказуемости паттерна.
Суть сдвига
Сложность пароля для человека ≠ сложность для машины. Энтропия — единственная настоящая метрика. «Tr0ub4dor&3» хуже чем «correct horse battery staple» — несмотря на то что первый «выглядит» сложнее. Мозг предсказуем. Словари это учитывают.

Почему «сложный» может быть слабым

Обычный
Заменю буквы цифрами: a→4, e→3, o→0
Атакующий
Leet-speak — это правило №2 в любом словаре. Hashcat знает его по умолчанию. Добавляет секунды, не часы
Обычный
В конце поставлю год: …2024
Атакующий
Суффикс с годом — предсказуем. Атакующий проверит последние 5 лет автоматически
Обычный
Один хороший пароль на всех сайтах
Атакующий
Credential stuffing: один утёкший пароль = доступ ко всему. Проверка автоматизирована на тысячах сайтов за часы

Атакующий не ищет ошибки.
Он ищет предположения
то, что ты думал не нужно проверять.

Пример 03

Корпоративная инфраструктура

🏢 Сеть компании
👤 IT-менеджер
У нас есть файрвол, антивирус, VPN, политики паролей. Мы защищены. Подрядчики подключаются через отдельный аккаунт. Увольняем человека — блокируем его аккаунт в AD.
☠ Атакующий
Файрвол смотрит наружу — изнутри трафик чаще всего свободен. Подрядчик имеет доступ но слабее мониторится. Удалённый сотрудник работает с домашней сети — это его роутер с паролем admin. В AD удалён аккаунт, но есть ли service accounts которые никто не чистил?
Суть сдвига
Атакующий ищет несоответствие между политикой и реальностью. Политика говорит «всё заблокировано». Реальность говорит «у нас 200 устройств и 12 подрядчиков». В несоответствии живут уязвимости.

Пример 04

«Обновления можно подождать»

🔄 Системное обновление
👤 Пользователь
Опять просит обновиться. Сейчас некогда, отложу на неделю. Ничего не случится за неделю. Это же просто «исправления ошибок».
☠ Атакующий
Когда выходит патч — это публичное объявление уязвимости. Автоматические сканеры находят непропатченные системы в течение часов. Медианное время от публикации CVE до первой атаки — меньше двух недель. Иногда — 15 минут.
Суть сдвига
Патч не скрывает уязвимость — он её публично анонсирует. До патча уязвимость — секрет. После патча (но до установки на твою машину) — это дорожная карта для атакующего.

Ядро

Пять принципов мышления атакующего

Как устроена голова атакующего
01
Всё является входными данными
Любое поле, параметр, заголовок, куки — это ввод. Любой ввод может быть подделан. Атакующий проверяет что происходит когда ввод «неправильный», пустой, слишком длинный, содержит спецсимволы.
02
Предположения — это уязвимости
«Пользователь не знает эту страницу». «Это поле только для чтения». «Только авторизованные могут это видеть». Каждое предположение — потенциальная точка атаки если оно не подтверждено технически.
03
Доверие — это слабость
Система которая доверяет клиенту, пользователю или другой системе — уязвима. Атакующий будет имитировать доверенного участника. Нулевое доверие (Zero Trust) — это принцип проектирования, не паранойя.
04
Самое слабое звено определяет защиту
Не имеет значения насколько защищён сервер если фишинговое письмо позволяет получить учётные данные администратора. Атакующий не атакует лоб — он ищет обходной путь. Всегда.
05
Контекст меняет смысл
Одна и та же функция в разном контексте — разная уязвимость. Загрузка файла на публичном сайте и в корпоративной VPN — разные риски. Атакующий всегда рассматривает функцию в её реальном контексте, не в абстракции.

Практика

Упражнения на переключение взгляда

Мышление атакующего — это навык. Он тренируется. Вот три упражнения которые можно делать прямо сейчас — без специальных знаний.

Упражнение 1 · «А что если я введу X»

Возьми любую форму на любом сайте — поиск, регистрация, обратная связь. Задай себе пять вопросов: что будет если ввести очень длинный текст? Что если ввести только цифры там где ожидается имя? Что если ввести пустую строку? Что если скопировать URL формы и открыть без авторизации? Что произошло? Ошибка понятна? Или сервер ведёт себя странно? Это и есть начало атакующего мышления — не чтобы ломать, а чтобы понять границы.

Упражнение 2 · «Кому выгодно что это сломается»

Для любой системы или процесса: кто выигрывает если она не работает или работает неправильно? Конкурент, сотрудник, клиент, сам разработчик? Мотив определяет вектор. Понимание кому выгодно ломать — помогает понять где будут искать слабые места. Это threat modeling — и он начинается не с технических знаний, а с понимания интересов.

Упражнение 3 · «Что здесь предполагается»

Для любого правила или ограничения: что именно делает его работающим? Это технически enforced — или предполагается что пользователь не будет делать X? «Нельзя смотреть чужие заказы» — это проверяется на сервере, или только кнопка скрыта в интерфейсе? «Поле только для чтения» — или просто атрибут HTML который можно убрать в инструментах разработчика? Каждое «предполагается» — это потенциальная щель.

Важно понимать
Мышление атакующего — это инструмент защиты, не нападения. Лучшие специалисты по безопасности думают как атакующие — именно чтобы найти и закрыть дыры до того как их найдёт кто-то с плохими намерениями. Этот навык легален, востребован и хорошо оплачивается. Penetration testing, bug bounty, threat modeling — это профессии построенные на нём.

Итог

Что менять в голове

Разница между обычным и атакующим мышлением — не в знаниях и не в инструментах. Это сдвиг вопроса: от «как это работает» к «что здесь может пойти не так и кому это выгодно».

Большинство систем проектируются для happy path — когда всё идёт по плану. Атакующий живёт в edge cases: граничных условиях, нестандартных вводах, разрыве между политикой и реализацией.

Ты не можешь защитить то, что не можешь сломать мысленно. Начни смотреть на системы которые тебя окружают — и спрашивать «а где здесь щель».