Хакинг и антихакинг
Шрифт:
Компьютер-отправитель посылает пакет, используя электронное оборудование и физический канал связи. Первоначально предполагали, что пакет должен «путешествовать» по каналам, которые повторяют физическую структуру сети. Каждый сетевой компьютер должен проверить адрес назначения пакета. Если компьютер не является получателем пакета, то пакет передается дальше по сети к следующему компьютеру.
После того как пакет достигает пункта своего назначения, программное обеспечение компьютера-получателя преобразует все пакеты в один файл данных. Сетевое программное обеспечение каждого компьютера контролирует поток пакетов и распределяет их, отводя каждому тот канал, который окажется свободным. Для этого используется
Если один из каналов выходит из строя или по каким-то причинам становится недоступным, сетевое программное обеспечение старается автоматически перераспределить пакеты на соседние свободные каналы. В устройстве большинства сетей предусмотрено выделение отдельного компьютера для управления процессом движения пакетов. В большинстве случаев сообщения, переданные другими входящими в сеть компьютерами, могут достичь лишь этого управляющего компьютера, который называется сетевым сервером (network server computer). Обычно специалисты употребляют для обозначения сетевых серверов термин «коммутатор пакетов» (packet switch) или, более формально, «процессор интерфейсов сообщений» (Interface Message Processor).
Принципы коммутации пакетов легли в основу подавляющего большинства сетевых коммуникаций. Однако именно коммутация является источником многих проблем, связанных с безопасностью передачи сообщений по сети.
Как было объяснено в предыдущем разделе, сетевой сервер передает пакет по тому каналу, который в данный момент наиболее доступен. В локальных сетях коммутатор передает пакеты, не заботясь о защите информации от доступа извне. Однако, когда информация передается по Интернету, может возникнуть следующая ситуация: при передаче пакета из компьютера, находящегося у вас дома, на компьютер, стоящий у вас в офисе, пакет может пройти сквозь сервер, принадлежащий фирме-конкуренту. В следующих главах вы узнаете, как шифровать сообщения и информацию, чтобы защитить их от перехвата при передаче.
Глава 3. Что необходимо знать для понимания хакинга
В этой главе я постараюсь очень кратко наметить то, что нужно знать хакеру и грамотному системному администратору, на которого легла задача по обеспечению безопасности сети. В рамках данного руководства невозможно описать все эти вещи полностью.
3.1. Языки программирования
Основой хакерства является вовсе не умение картинно сидеть перед экраном монитора, азартно топча клавиатуру, а знание языков программирования. Каких именно? Кратко расскажем о языках, которые используются для хакинга.
Год рождения ARPANET был также годом, когда хакер из «Bell Labs» по имени Кен Томпсон (Ken Thompson) создал Unix. Томпсон был вовлечен в работу по разработке операционной системы, называемой Multics. Multics должна была облегчить использование и программирование ЭВМ, чтобы увеличить производительность работы. Этот проект был выставлен на продажу, но никогда не пользовался таким успехом, как операционная система. Томпсон отказался от среды Multics и начал обыгрывать смесь идей Multics’a со своими собственными.
Другой хакер по имени Деннис Ричи (Dennis Ritchie) придумал новый язык, названный «С», для использования под «изначальным» Unix’oM Томпсона. Подобно Unix, «С» был разработан, чтобы быть естественным и гибким. Интерес к этим инструментам распространился в Bell Labs, и они получили популярность в 1971 г., когда Thompson и Ritchie выиграли тендер на
Традиционно операционные системы писались на ассемблере, чтобы извлечь максимально возможную эффективность (КПД) из хост-машин. Томпсон и Ричи были среди первых, кто понял, что аппаратные средства и технология компилирования стали достаточно хороши, чтобы операционная система полностью могла быть написана на «С», и к 1974 г. среда целиком была успешно перенесена на несколько машин различных типов.
Такого раньше никогда не было, и результаты были впечатляющими. Раз Unix мог представлять одинаковый интерфейс, одинаковые возможности на машинах многих различных типов, то он мог стать средой стандартного программного обеспечения для всех них. Пользователям не надо было больше платить за разработку нового программного обеспечения всякий раз, когда машины устаревали.
Помимо переносимости, Unix и «С» имели еще одну важную силу. Они были сконструированы как философия «для самых тупых». Программист мог легко удерживать полную логическую структуру «С» в своей голове (в отличие от большинства других языков), вместо того чтобы постоянно обращаться к справочникам; и Unix был структурирован как гибкий инструментарий простых программ, разработанных для комбинирования друг с другом в необходимых направлениях.
В начале 1996 г. появился новый язык программирования – «Java». На домашней странице Consortium Java была внесена в список так называемых Мобильных кодов – одного из перспективных направлений развития технологии World Wide Web. И вот в конце 1996 г. на Западе начался бум Java, который к моменту проведения выставки Unix-Expo-96 докатился и до нашей страны. Согласно истории технология Java (кофе) роди-лась из проекта Oak (дуб), основной целью которого была разработка объектно-ориентированных средств описания и коммуникации различного рода электронных устройств. Из-за неудачи Oak в 1994 г. опыт, накопленный в рамках его реализации, было решено применить к продуктам, ориентированным на применение в Интернете. С апреля 1995 г. по сети свободно распространяется Hotjava – интерфейс просмотра страниц World Wide Web для платформ Sun.
Буквально через месяц Netscape Communication – тогдашний законодатель моды в разработке программ-интерфейсов Интернета – покупает лицензию на Java. С этого момента начинается золотое время для этой технологии. В настоящее время Hotjava реализована не только для Sun-. OS и Solaris, но и для многих других платформ и Windows.
Система программирования на Java позволяет компилировать программы для компьютерной платформы, на которой она стоит в том же ключе, как и любая другая, например С или C++. В этом случае основным отличием Java-программ, которые называются Java-applications, является использование библиотеки Java-классов, которые обеспечивают разработку безопасных, распределенных систем. При этом утверждается, что язык позволяет делать гораздо меньше ошибок при разработке программ. Главным при этом является тот факт, что в Java напрочь отсутствует адресная арифметика. Гораздо более интересным является разработка мобильных Java-байт-кодов, которые в терминах Java-технологии называются applets.
Известный в свое время язык программирования Модула-2 был создан Н. Виртом в 1979 г. и впервые реализован на мини-ЭВМ PDP-11. В 1970-х гг. Паскаль получил широкое признание у пользователей ЭВМ и преподавателей, однако первоначально он был разработан для обучения программированию и как язык разработки програмного обеспечения имел много недостатков. В Модуле-2 эти недостатки были устранены, но при этом сохранены логическая структура и характерные черты его предшественника. Кроме того, в Модуле-2 были введены новые мощные языковые средства.