Автор: Пользователь скрыл имя, 29 Октября 2012 в 23:57, курс лекций
Совсем недавно появились такие словосочетания, как "информационная безопасность", "критичная информация", "коммерческая тайна" и пр. Все эти понятия раскрывают сущность проблемы под единым названием "защита информации".
Понимание проблемы информационной безопасности начинается с представления о существующих видах угроз, которым может подвергаться информация, а также факторах и обстоятельствах, оказывающих влияние на состояние информационной безопасности.
Internet - огромная сеть построенная из множества совершенно независимых компьютеров, принадлежащим самым разным людям и организациям. На них хранится огромное количество интересной и самой разнообразной информации, часть из которой интересует совсем не тех людей или мешает им фактом своего существования. Это приводит к тому, что в последнее время появилось большое количество компьютерных преступников (именуемых 'хакерами'), поставивших целью своего существования взлом компьютерных систем. Так как в интернете отсутствует какой-либо централизованый контроль за действиями подобных личностей, каждому конкретному администратору каждой конкретной системы, подключенной к интернету приходится самому заботиться о безопасности (security) в своей системе.
На данной страничке я рассматриваю довольно узкий диапазон вопросов безопасности в приложении к защите сетей персональных компьютеров и небольших серверов на базе Unix-систем, как наиболее знакомых мне по специфике моего текущего места работы.
Как известно, первые работоспособные
unix-системы появились в серед
Другим минусом Unix-системы, с точки зрения безопасности, является один из ее плюсов - практически с любой подобной системой можно работать удаленно по сети так, как с локальным компьютером. В сочетании с принципом "рут может все" и легкостью работы с практически любыми внешними устройствами на всех уровнях (вплоть до физических) под Unix-системами, это делает подобные системы просто опасными (в первую очередь - для самих владельцев таких систем, во вторую - для их клиентов и партнеров), при отсутствии достаточно строгой системы безопасности. Данная проблема преследовала Unix-системы с самого рождения, но по настоящему остро она встала после распространения сети Internet, в которой каждый компьютер может атаковать сразу несколько злоумышленников, сидящих к тому же на другом материке.
Разумеется, наибольшую опасность для современных систем, имеющих хорошую историю борьбы с различными багами и дырами, представляет человеческий фактор. Любой человек совершает ошибки. С этим нужно мириться и стараться строить всю систему безопасности так, чтобы подобные ошибки не причиняли ей серьезного вреда. Перечень распространенных ошибок, приводящих к появлению "дыр" в системах безопасности очень широк, но наиболее часто встречаются следующие: установка и/или запуск непроверенных программ, различные попытки упростить администрирование (повторяющиеся пароли, раздача одного и того же административного аккаунта нескольким людям, установка чрезмерного количества специальных программ и сервисов, расширяющих количество вариантов администрирования (особенно удаленного) и т.д.), отсутствие хорошего контроля за деятельностью "простых" пользователей. Как видно, это именно человеческие ошибки и основной упор в защите компьютерных систем нужно делать на уменьшение вероятности их появления.
От теории перейдем к рассмотрению практических вариантов противодействия возможным попыткам взлома.
В большинстве случаев, первое что нужно сделать - это спрогнозировать направленность, источники и частоту попыток взлома. Банки, заводы, издательства, консультационные фирмы, торговые дома, фонды и биржи - все имеют высокие шансы подвергнуться атакам хакеров, желающих разбогатеть, стать известными за счет шумихи (часто подобная тенденция наблюдается среди молодежи с ее часто увеличенными комплексом неполноценности и желанием выделиться), получить доступ к интересной информации (часто - для того чтобы реализовать первый вариант) и просто навредить (такой мотив часто встречается в случае обиженных клиентов и работников фирм, происков конкурентов, заметания следов взлома и т.д.). Также существует проблемы, связанные с промышленным шпионажем и конкуренцией на фоне чрезмерно "свободного" рынка и отсутствием законодательной базы в области компьютерных преступлений (это я, конечно, про Россию). Анализ всех возможных вариантов и направлений атак дает возможность правильно рассчитать направленность усилий по отдельным элементам систем безопасности и оптимально организовать доступ к защищаемой информации извне и изнутри. Разумеется, всегда следует правильно оценивать необходимые затраты по поддержанию требуемого уровня безопасности и стараться не впадать в паранойю на почве защиты от всего на свете (далее мы сможем увидеть, как подобная паранойя может даже облегчить возможный взлом).
Правильная организация
Фильтрация пакетов (файрволл) - очень
мощное и удобное средство для
ограничения доступа к
Одну из самых неприятных проблем в области безопасности компьютерных систем представляют из себя "баги" и "дыры" в программах и операционных системах. Они всплывают в самые неподходящие моменты и с самыми неприятными последствиями, зачастую сводя на нет старания администраторов в области безопасности. За время развития Unix-систем в них было найдено огромное количество багов и дыр, но до сих пор никто не сможет гарантировать, что не появится новых (более того - периодически обнаруживаются новые дыры, а благодаря Internet-у, подробные описания этих дыр (часто - с примерами программ) становятся известными за считанные часы). В общем случае, следует считать, что баги и дыры могут быть везде. Самые опасные из этих дыр - дыры в программах-серверах, предоставляющих сервис через Internet (ftp/www/mail-сервера и им подобные), так как их нельзя закрыть (иначе потеряется смысл самого подключения к Internet) и многие из них запускаются из под аккаунта с правами root. Дыры в ядрах систем не менее опасны, так как хотя и приводят в основном только к Denial of Service (DoS) или расширению средств "локального" взлома, тем не менее появления возможности использования подобных дыр и багов также следует опасаться (хакер может использовать, например, сценарий с подменой машин. Получив доступ к одному из компьютеров локальной сети или взломав роутер и изменяя таблицы роутинга, хакер может временно вывести из работспособного состояния выбранную машину и прописать в конфигурации взломанной машины адрес компьютера, подвергнутого DoS с целью получить доступ к сервисам, доступных только с этого компьютера). Большинство дыр в Unix-программах появляются по причине переполнения стека - пожалуй самой серьезной проблемы в области отладки программ. Программа, получающая какие-либо данные снаружи (а это делают практически все программы) и "забывающая" ограничивать или правильно контролировать размер вводимых данных может переполнить буфер данных процедуры, выделяемый обычно на стеке и вводимые данные заполняют области стека, в которых хранятся адреса возвратов из процедур, что делает возможным запуск на исполнение машинного кода, написанного хакером или передачи управления на неверные участки программы. Такая проблема связана с принципиальными ограничениями одностековой архитектуры, присущей большинству процессоров и компиляторов C, когда и данные и адреса возврата хранятся вперемешку в одном стековом сегменте. К сожалению, двухстековые системы (или c большим количеством стеков) не получили широкого распространения, а различного рода фиксы, делающие стековый сегмент недоступным для хранения исполняемого кода не дают полной гарантии отсутствия в программе подобных дыр (хакер не сможет исполнить свой собственный код, заполняя им стек, но легко сможет передать управление в нужный ему участок программы или код, лежащий в статическом сегменте данных). Конечно, использование данных дыр довольно сложно (требуется точно знать адреса возвратов, содержимое регистров и иметь полный код программы, а то и всей операционной системы, но в случае серьезно подготовленных атак хакер обычно имеет и то и другое). Такого рода дыры находили и находят практически во всех программах, поэтому максимум, что можно сделать - запускать минимум необходимых программ и полностью закрывать на файрволлах (или с помощью специальных tcp-враперов) соединения к программам, нужных только в пределах локальной сети или не прошедших достаточную проверку. В более выгодном положении оказываются программы и операционные системы со свободно распространяемыми исходными текстами - в них обычно "ковыряется" множество самых разных людей и баги обнаруживаются и фиксятся достаточно быстро. Разумеется, у свободно распространяемых исходных текстов есть и обратная сторона - среди "ковыряющихся" в них людей есть и хакеры, которые могут использовать обнаруженные баги в целях взлома. Однако, при необходимости обеспечить максимальный уровень безопасности, наличие исходных текстов и их полный анализ просто обязательны (к счастью, такие уровни безопасности требуются в очень редких случаях).