Майкл Джонсон - Разработка приложений в среде Linux. Второе издание
- Название:Разработка приложений в среде Linux. Второе издание
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:2007
- Город:Москва
- ISBN:978-5-8459-1143-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Майкл Джонсон - Разработка приложений в среде Linux. Второе издание краткое содержание
Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет собой отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из других операционных систем. Подробно рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование свободно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Изобилие хорошо документированных примеров кода помогает лучше усвоить особенности программирования в Linux.
Книга рассчитана на разработчиков разной квалификации, а также может быть полезна для студентов и преподавателей соответствующих специальностей.
Разработка приложений в среде Linux. Второе издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
В каждом атрибутном байте отдельные биты интерпретируются так, как описано в табл. 21.12. Это VGA представление; некоторые цветовые устройства заменяют мерцание ярким задним фоном. Монохромное изображение использует нулевой бит цвета переднего плана для указания подчеркивания.
Таблица 21.12. Атрибуты
Бит (биты) | Результат |
---|---|
7 | Мерцание |
6-4 | Фон |
3 | Полужирный шрифт |
2-0 | Передний план |
Глава 22
Написание защищенных программ
Подавляющее большинство компьютеров, на которых работает система Linux, подключены к Internet, и многие из них используются большим количеством людей. Для того чтобы сохранить компьютер и его программное обеспечение в безопасности, предотвратить анонимные угрозы, поступающие через сетевое соединение, а также от локальных пользователей, которые пытаются проникнуть на несанкционированные уровни доступа, требуется тщательное программирование как основной операционной системы, так и множества приложений.
В данной главе предлагается краткий обзор тех важных моментов, которые необходимо учитывать при создании защищенных программ на языке С. Мы выясним, какие типы программ нуждаются в особом уровне надежности и защищенности, а также как минимизировать риски. Мы обратим внимание на самые общие ошибки в вопросе обеспечения безопасности. Все это может послужить введением в написание безопасных программ. Если вам необходима более глубокая информация, обратитесь к книге Давида Вилера (David A. Wheeler) Secure Programming for Linux and UNIX HOW TO . В нее входит также замечательная биография автора, а найти эту книгу можно по адресу http://www.dwheeler.com/secure-programs.
22.1. Когда безопасность имеет значение?
Компьютерные программы — это очень сложные вещи. Даже самая простая программа "Hello World" является на удивление запутанной. Игнорируя все, что происходит в ядре, библиотека С должна отыскать соответствующие совместно используемые библиотеки, загрузить их в систему, инициализировать стандартные методы ввода-вывода. На компьютере, с помощью которого готовилась данная глава, полная программа состояла из 25 системных вызовов. Только один из них оказался вызовом функции write()
, который использовался непосредственно для вывода слов "Hello World".
С увеличением функциональности программ очень быстро возрастает их сложность. Большинство реально работающих программ принимают входные данные из нескольких источников (например, из командной строки, файлов конфигурации, терминала) и обрабатывают полученные данные сложными способами. Любая ошибка в процессе может вызвать непредсказуемое поведение, однако опытный программист чаще всего обрабатывает такие сюрпризы без появления нежелательных последствий. Если в эту "адскую смесь" добавить еще несколько сложных библиотек, то любому программисту (не говоря о команде программистов) будет очень трудно полностью представить себе реакцию программы на определенный набор входных данных.
Большинство программ очень внимательно тестируются, для гарантии того, что они дают соответствующие результаты для корректных наборов входных данных. При этом работа большинства программ с неожиданными входными данными проверяется недостаточно [156] Популярным способом проверки в ранних ядрах Linux было создание последовательности абсолютно случайных байтов и запуск их на выполнение как программы. Кроме того, что таким методом невозможно сделать что-либо полезное, он довольно часто вызывает полную блокировку ядра. Поскольку попытки выполнения совершенно случайных последовательностей кодов не входят в "должностные инструкции" ядра, пользовательские программы не должны вызывать остановку корректной работы ядра. Таким образом, этот прием помогает находить большое число дефектов, которые необходимо устранить.
. Несмотря на то что при проектировании ядра тщательно учитывается необходимость предотвращения риска для системы из-за неисправностей в пользовательских программах, все же ошибки в некоторых типах программ могут отразиться на целостности системы.
Существуют три типа программ, при создании которых программисты должны постоянно помнить о безопасности.
• Программы, обрабатывающие данные, которые могут поступать из ненадежных источников, очень уязвимы. Такие данные могут содержать скрытые атаки, использующие программные ошибки и вызывающие непредсказуемое поведение программ. Нередко целью таких атак является получение полного доступа к компьютеру для анонимных пользователей. Любая программа, имеющая доступ к данным через сеть (как клиентская, так и серверная) становится потенциальным мишенью для атак. Но даже безобидные программы вроде текстовых процессоров, могут быть поражены через поврежденные файлы данных [157] Атака на программное обеспечение приложений сейчас является основным способом распространения вирусов.
.
• Программы, которые во время запуска могут переключаться между пользовательскими или групповыми контекстами (через биты setuid и setgid в исполняемом файле), несут потенциальную опасность передачи прав и информации привилегированного пользователя другому (непривилегированному) пользователю.
• Любая программа, работающая как системный демон, может вызвать проблему безопасности. Подобные программы работают в системе как привилегированные пользователи (довольно часто они выступают в качестве root), поэтому любое взаимодействие с обычными пользователями подвергает систему опасности.
22.1.1. Когда выходит из строя система безопасности?
Дефекты в системе безопасности программ являются причиной четырех обширных категорий атак: удаленная эксплуатация, локальная эксплуатация, удаленные атаки отказа в обслуживании и локальные атаки отказа в обслуживании. Удаленные эксплуатации позволяют пользователям, имеющим доступ к сетевым службам компьютера, запустить на этом компьютере произвольный код. Для того чтобы удаленная атака могла иметь место, в программе, обращающейся к сети, должна быть некоторая неисправность. Обычно такие ошибки встречаются в сетевых серверах, что позволяет удаленному взломщику ввести сервер в заблуждение и получить доступ в систему. С недавних пор начали эксплуатироваться и ошибки в сетевых клиентах. Например, если Web-браузер имеет изъян в способе анализа HTML-данных, то Web-страница, загружаемая этим браузером, может побудить браузер активизировать произвольную последовательность кодов.
Локальная эксплуатация дает пользователям возможность выполнять такие действия, на которые у них обычно нет полномочий (на них часто ссылаются как на разрешение превышения локальных полномочий ), например, нелегально проникать в систему под видом другого пользователя. Такой тип эксплуатации, как правило, направлен на локальных демонов (таких как серверы cron
или sendmail
) и setuid-программы (вроде mount
или passwd
).
Интервал:
Закладка: