В моем уме не оставалось места для
беспокойства об успехе или провале
книги. Было лишь желание работать
над ее созданием.
Ф. Херберт. "Еритики Дюны"
Эта книга не предназначена специально для кракеров. Несмотря на то, что в ней рассматриваются и даются в виде законченных технологий механизмы атак на широко распространенные системы, эту информацию не стоит принимать как руководство к действию. В любом случае правовую ответственность за компьютерный вандализм еще никто отменял и прежде чем использовать полученные знания на деле неплохо бы ознакомиться с уголовным кодексом и запастись адвокатом.
Равно так же не предназначена эта книга и для разработчиков защит. Я не хотел делать упор ни на одну из социальных категорий, потому что проблемы защиты информации скорее организационные, чем технические. Разработчики ПО не нуждаются в таких книгах и вообще редко прислушиваются к советам по реализации защитных алгоритмов, а хакеры от всего этого просто морально разлагаются от отсутствия стимула к развитию.
Термин "хакер" имеет множественные трактовки, которые было бы бессмысленно перечислять здесь и тем более делать какой-либо выбор. Но в лучшем значении хакер - это индивидуум, смотрящий в корень и стремящийся разобраться во всем до конца. Для таких людей и предназначена эта книга.
Большую часть этой книги займет история и социология. Такова уж специфика проблемы защиты информации. Кроме того, знание истории - это долг каждого культурного человека. Невозможно глубокое понимание предмета без четкого представления его основ.
Везде где это только возможно я буду стремиться к обобщению и постараюсь не акцентировать внимание на конкретных реализациях. Это не означает, что в книге не встретится законченных схем. Напротив, они будут в изобилии. Но снабдить хакера готовым инструментарием не цель данного издания.
Я даже не буду пытаться научить читателей "ловить рыбу", а рискну пойти немного дальше и дать навыки самообучения. Из любой даже самой нестандартной ситуации с самым скудным инструментарием можно найти выход. Типовые схемы часто оказываются бессильными и бесполезными. Любые навыки слишком привязаны к конкретному окружению. В наше бурное время больших перемен уже поздно хвататься за традиционные схемы обучения. В самом деле, на обучение просто нет времени. Большинству программистов приходится осваивать новые технологии параллельно работе с последними, и задолго до конца обучения технологии уже полностью устаревают.
Возьмем популярную платформу Windows, находящуюся в состоянии бурного развития. Разве можно сопоставить это с вялым развитием компьютерных систем скажем десятилетней давности? Один объем электронной документации для сегодняшней платформы win32 перевалил за отметку одного гигабайта и стремительно продолжает расти!
Заметим, что системы защиты развиваются менее быстрыми темпами и за последние год или два ничего принципиально нового не было придумано или широко внедрено. Это обнадеживает, особенно на фоне деградации качества реализации широко распространенных систем безопасности.
С другой стороны, толковых учебников и изданий по данной тематике тоже не выходило. Это привело к тому, что действительно грамотно спроектированных и качественно реализованных защит сегодня на массовом рынке практически не наблюдается. Большинство авторов, смутно вспоминая школьный курс алгебры, разрабатывают собственные алгоритмы, которые при близком рассмотрении криптостойкими не являются.
Все математическое богатство валяется бесхозным и нетронутым, несмотря на то, что на рынке достаточно много качественных и достаточно современных изданий. Я не ставлю целью повторить уже проделанную работу, а просто по ходу дела буду отсылать читателя к конкретным источникам.
Цель этой книги - научить читателя самостоятельно добывать необходимые ему знания и навыки порой без соответствующей литературы и информации. Современное информационное изобилие приводит к атрофированию навыка самостоятельного получения необходимых знаний. Парадоксально на первый взгляд, но недостаток литературы развивает и тренирует мозги куда сильнее, чем ее избыток. Сам я ассемблер 80086 осваивал с помощью утилиты debug.com и кроме нее (и избытка свободного времени) у меня в то время не было НИЧЕГО. Логика работы команд изучалась анализом воздействия последних на регистры и память. Эта было утомительное занятие и свободное владение ассемблером (без учета ряда некритичных команд) ко мне пришло приблизительно через три месяца. Наличие инструкции сократило бы этот срок до двух-трех дней (с учетом знания ассемблера других платформ), но зато не дало бы никаких полезных навыков.
Инструкция - вещь, конечно, хорошая, но исключительно редко исчерпывающая и доступная. Полученные давным-давно навыки для меня актуальны и до сих пор, ибо тенденция обратной зависимости качества инструкции от ее объема в последнее время стала угрожающе превращаться из метафоры в реальность.
Главный психологический барьер для многих перед компьютером - это ощущение беспомощности. Человек не ощущает себя владельцем ситуации, а как незадачливый экзаменуемый наобум пытается угадать, чего же от него хочет машина. Знакомая ситуация - вызываемая функция упрямо ведет себя не так, как описано в документации и не работает.
В данном случае не помешает прибегнуть к дизассемблированию и анализу ситуации, но возможно оптимальным будет другое решение. В любом случае возможны свои нетривиальные варианты. Показать пути их поиска и есть цель данной книги. Наивно полагать, что схема "нажал на кнопку - получил банан" работает во всех ситуациях. Или для того, что бы сбить банан всегда под рукой окажется палка, ящик или дерево. А если нет? Если задача не имеет известного и апробированного решения? Вот тогда то и приходится действовать, как говорят "по обстоятельствам". Научить этому читателя - моя задача.