Майкл Джонсон - Разработка приложений в среде Linux. Второе издание

Тут можно читать онлайн Майкл Джонсон - Разработка приложений в среде Linux. Второе издание - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство Вильямс, год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Разработка приложений в среде Linux. Второе издание
  • Автор:
  • Жанр:
  • Издательство:
    Вильямс
  • Год:
    2007
  • Город:
    Москва
  • ISBN:
    978-5-8459-1143-8
  • Рейтинг:
    3.8/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Майкл Джонсон - Разработка приложений в среде Linux. Второе издание краткое содержание

Разработка приложений в среде Linux. Второе издание - описание и краткое содержание, автор Майкл Джонсон, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет собой отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из других операционных систем. Подробно рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование свободно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Изобилие хорошо документированных примеров кода помогает лучше усвоить особенности программирования в Linux.

Книга рассчитана на разработчиков разной квалификации, а также может быть полезна для студентов и преподавателей соответствующих специальностей.

Разработка приложений в среде Linux. Второе издание - читать онлайн бесплатно полную версию (весь текст целиком)

Разработка приложений в среде Linux. Второе издание - читать книгу онлайн бесплатно, автор Майкл Джонсон
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

Довольно часто между главным приложением и вспомогательной программой передаются конфиденциальные данные. Например, для программы unix_chkpwdнеобходимо передавать незакодированный пароль пользователя для подтверждения его правильности. При передаче такой информации нужно принять некоторые меры предосторожности. Очень заманчиво использовать аргумент командной строки, однако это позволит любому пользователю, который в нужное время запустит ps, увидеть незакодированные пользовательские пароли. Если вместо этого для подачи данных применяется канал (обычно указанный в качестве стандартного ввода для вспомогательной программы), то во время передачи ни одна другая программа не сможет увидеть данные.

Вспомогательные программы также должны тщательно проверять тот факт, что вызывающая их программа имеет разрешение на выполнение запрашиваемого действия. Вспомогательная программа unx_chkpwdне позволяет программе проверять пароли ни одного пользователя, кроме того, который ее запустил. Здесь применяется свой собственный uid для подтверждения того, что активизирующая программа может проверять пароль пользователя. Вспомогательная программа utempterвыполняет аналогичные проверки для того, чтобы убедиться, что программы не могут удалять терминалы из базы данных utmp, если только они не предназначены делать это.

22.2.3. Ограничение доступа к файловой системе

Еще одним способом устранения ошибок в кодах, предоставляющих возможность для атак, является ограничение набора файлов, к которым программа имеет доступ, с помощью системного вызова chroot(). Как обсуждалось в главе 14, метод chroot(), сопровождающийся вызовом chdir(), изменяет корневой каталог процесса, ограничивая совокупность файлов, доступных процессу. Это не предотвращает возможность эксплуатации, но иногда может нарушать работу приложения. Если сетевой сервер, работающий как не root, эксплуатируется удаленно, то данному удаленному пользователю значительно труднее применить этот сервер в качестве базы локальной эксплуатации, поскольку он не сможет получить доступ ни к каким setuid-файлам (этим могут воспользоваться наиболее простые локальные эксплуатации программ).

Анонимные ftp-серверы являются наиболее распространенными программами, использующими преимущества механизма chroot(). В последнее время он становится более популярным и в других программах, многие системные администраторы применяют команду chrootдля того, чтобы перевести работу системных демонов в ограниченное окружение и предусмотреть проникновение "незваных гостей".

22.3. Общие бреши системы безопасности

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

22.3.1. Переполнение буфера

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

1: /* bufferoverflow.с */

2:

3: #include

4: #include

5: #include

6:

7: int main(int argc, char ** argv) {

8: char path[_POSIX_PATH_MAX];

9:

10: printf("копирование строки длиной %d\n", strlen(argv[1]));

11:

12: strcpy(path, argv[1]);

13:

14: return 0;

15: }

16:

На первый взгляд код кажется довольно безопасным; хотя в итоге эта программа фактически даже ничего не делает. Она копирует строку, передаваемую пользователем, в фиксированное пространство стека, даже не проверяя, есть ли в стеке для этого свободное место. Попробуйте запустить эту программу с одним длинным аргументом командной строки (скажем, 300 символов). Это вызовет ошибку сегментации, когда strcpy()попытается записать информацию, превышающую пространство, выделенное для массива path.

Чтобы лучше понять, как происходит распределение памяти для программного стека, взгляните на рис. 22.1. В большинстве систем стек процессора растет вниз; то есть, чем раньше какой-либо объект размещается в стеке, тем больший адрес логической памяти он получает. К тому же первый элемент стека является защищенной областью памяти; любая попытка получить к нему доступ приводит к ошибке сегментации.

Рис 221 Карта памяти стека приложения Следующий участок стека содержит - фото 7

Рис. 22.1. Карта памяти стека приложения

Следующий участок стека содержит локальные переменные, используемые кодом, который запускает остальную часть программы. Здесь мы вызываем функцию _main(), несмотря на то что это может принести дополнительные сложности, поскольку касается таких моментов, как динамическая загрузка. Когда запускающий код вызывает для программы метод main(), он сохраняет адрес, который метод main()возвращает при завершении работы со стеком. Когда активизируется main(), может понадобиться сохранение некоторых регистров микропроцессора в стеке с возможностью повторного использования этих регистров. Затем метод выделяет пространство для своих локальных переменных.

Возвращаясь к нашему примеру переполнения буфера, следует отметить, что для переменной pathвыделяется память на верхушке стека. Байт path[0]находится на самом верху, затем следующий байт — path[1]и так далее. Если наша программа-пример записывает в pathболее _ POSIX_PATH_MAXбайтов, то начинается перезапись остальных элементов стека. Если этот процесс продолжается, то происходит попытка записи за пределами верхушки стека, что вызывает ошибку сегментации.

Существенная проблема возникает, если программа записывает возвращаемый адрес вне пределов стека, но не порождает ошибку сегментации. Это позволяет изменять адрес, возвращаемый из работающей функции, на любой случайный адрес в памяти. Когда функция возвращает управление, программа переходит к данному случайному адресу и продолжает выполнение с этой точки.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Майкл Джонсон читать все книги автора по порядку

Майкл Джонсон - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Разработка приложений в среде Linux. Второе издание отзывы


Отзывы читателей о книге Разработка приложений в среде Linux. Второе издание, автор: Майкл Джонсон. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x