реклама
Бургер менюБургер меню

Роберт Стен – Мы не защищены. Почему системы подводят, люди ошибаются, а иллюзии стоят слишком дорого (страница 1)

18

Роберт Стен

43

Глава 1. Как медленный черепах обыгрывает быстрого Ахилла

Я хочу начать с простой сцены, которая кажется далёкой от компьютеров, но на самом деле объясняет почти всё, что дальше будет происходить. Представь спор. Один уверен, что прав. Второй – что нет. Первый каждый раз подсовывает ещё одно объяснение, ещё один довод, ещё одно «ну это же очевидно». А второй каждый раз спокойно кивает и говорит: «Да, согласен. Но вот здесь ты кое-что пропустил». И так бесконечно. Спор не двигается вперёд не потому, что аргументов мало, а потому что стороны говорят на разных уровнях. Один обсуждает факты, другой – правила, по которым из фактов вообще что‑то следует.

Это и есть история про Ахилла и Черепаху, только без философского пафоса. В нашем мире Ахилл – это программист, администратор, инженер, любой человек, который уверен: «Если я всё правильно написал, всё будет работать». А Черепаха – это тот, кто понимает: важнее не то, что написано, а то, как машина понимает, что с этим делать.

Чтобы разобраться, мне придётся замедлиться и проговорить базовые вещи. Не потому что они сложные, а потому что именно на них почти все не смотрят.

Код и данные – не одно и то же

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

Код – это приказы. Сделай это. Перейди туда. Сложи, сравни, выведи на экран.

Данные – это сырьё. Числа, буквы, строки, имена, тексты, картинки. Они сами по себе ничего не делают. С ними что‑то делают.

Это различие кажется очевидным, пока ты не сталкиваешься с тем, что внешне код и данные выглядят одинаково. Для компьютера и то и другое – просто набор нулей и единиц. Он не «видит» смысла. Он действует строго по правилам, которые ему задали заранее.

И вот здесь появляется главная уязвимость.

Почему компьютер можно обмануть

Компьютер не думает. Он исполняет. Если ему сказали: «Всё, что лежит вот здесь, – это данные», он будет обращаться с этим как с данными. Если ему сказали: «А вот здесь – инструкции», он будет их выполнять.

Но компьютер сам не проверяет, не перепутали ли мы одно с другим. Он верит разметке памяти, расширениям файлов, указателям, которые ему дали люди.

Если по ошибке или по злому умыслу скормить ему инструкции там, где он ждёт безобидный текст – он их выполнит. Без сомнений. Без вопросов.

Это не баг мышления. Это прямое следствие того, как вообще возможны вычисления.

Физика важнее логики

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

Каждый раз, когда программа принимает ввод – имя пользователя, сообщение, запрос – она выделяет под это конкретное место в памяти. Ровно столько, сколько программист посчитал достаточным.

Если данных приходит больше, чем ожидали, лишнее никуда не исчезает. Оно проливается дальше, затирая соседние области памяти.

Это похоже на ситуацию, когда ты наливаешь воду в стакан до краёв, а потом продолжаешь лить и удивляешься, почему мокрый стол.

Как работает трюк Черепахи

Теперь можно вернуться к атаке, которая сделала черепаху знаменитой.

Служба Finger была простой и удобной. Ты отправляешь имя пользователя – получаешь информацию о том, где он сейчас. Программа ждала короткую строку. Несколько символов.

Но она не проверяла длину ввода.

Роберт сделал то, чего от него не ждали. Он отправил длинную строку. Очень длинную. Настолько длинную, что она переполнила буфер и затёрла служебные данные – в том числе указатель, который говорил системе, куда вернуться после обработки запроса.

А в середину этой строки он аккуратно вложил код. Настоящие инструкции.

В итоге программа честно сделала всё, что от неё требовали:

– приняла ввод;

– положила его в память;

– выполнила переход по адресу, который оказался не тем;

– начала исполнять то, что считала данными.

Никакой магии. Никакого взлома «в лоб». Только использование правил против тех, кто их писал.

Почему это не случайная ошибка

Важно понять одну вещь. Такие атаки не возникают из‑за одной опечатки. Они рождаются из культуры.

Программы писались в среде, где все друг другу доверяли. Где удобство было важнее защиты. Где считалось, что если ты запускаешь сервис, то ты свой, а не враг.

Эта логика была разумной – тогда.

Но когда система выросла, а правила остались прежними, Черепахи получили фору.

Закон как ещё один уровень кода

Пока инженеры разбирались с техническими деталями, юристы пытались понять, что вообще произошло.

Закон – это тоже код. Только для людей. В нём есть условия, элементы, последствия.

Проблема была в том, что старые законы не различали «вошёл» и «заставил выполнить». Не различали ошибку и намерение. Не понимали, что значит «доступ» в мире, где нет дверей.

Суду пришлось решать: считать ли запуск червя действием, даже если результат оказался больше, чем ожидали. И это решение определило всё будущее компьютерного права.

Главный вывод этой главы

Черепаха побеждает не потому, что она быстрее. А потому что она играет на другом уровне.

Хакер почти никогда не ломает систему силой. Он не бьётся лбом в пароль. Он ищет место, где правила начинают работать против их создателя.

И пока мы путаем код с данными, намерение с эффектом, удобство с безопасностью – Ахилл будет снова и снова удивляться, как он проиграл.

Практика к главе

Вопросы для саморефлексии:

Где в твоей работе ты принимаешь ввод «на веру», не проверяя границы?

Какие правила ты считаешь очевидными, но никогда не проговаривал?

В каких ситуациях ты путаешь результат с намерением – своим или чужим?

Практические задания:

Возьми любой процесс, за который ты отвечаешь, и опиши, какие данные он принимает. Где там может быть «слишком много»?

Найди одно место, где удобство явно перевешивает контроль, и зафиксируй это письменно.

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

Почему компьютер не отличает код от данных сам по себе?

Как физические ограничения памяти влияют на безопасность?

В чём сходство между программным кодом и законом?

Почему переполнение буфера – не редкость, а закономерность?

Как доверие внутри системы превращается в уязвимость?

Что значит «играть на другом уровне» в реальной жизни?

Мини‑чек‑лист

Признаки старого мышления:

– «Этого никто не будет делать»