Библиотека knigago >> Компьютеры: Языки и системы программирования >> C, C++, C# >> 19 смертных грехов, угрожающих безопасности программ


Книга "DEEP PURPLE. Звезда автострады" авторства Владимира Дрибущака представляет собой исчерпывающую биографию одной из самых влиятельных и легендарных рок-групп всех времен. Автор погружает читателя в захватывающую историю группы, начиная с ее зарождения в конце 1960-х годов и заканчивая современным периодом. Дрибущак умело сочетает глубокие исторические исследования с яркими личными анекдотами, создавая хорошо продуманный и увлекательный отчет о карьере Deep Purple. Биография...

Дэвид Лебланк , Майкл Ховард , Джон Виега - 19 смертных грехов, угрожающих безопасности программ

19 смертных грехов, угрожающих безопасности программ
Книга - 19 смертных грехов, угрожающих безопасности программ.  Дэвид Лебланк , Майкл Ховард , Джон Виега  - прочитать полностью в библиотеке КнигаГо
Название:
19 смертных грехов, угрожающих безопасности программ
Дэвид Лебланк , Майкл Ховард , Джон Виега

Жанр:

Другие языки и системы программирования, Учебники и самоучители по компьютеру, Компьютерная безопасность, Современные российские издания, Литература ХXI века (эпоха Глобализации экономики), .NET Framework, Basic, Visual Basic, VB Script, VBA и т.п., C, C++, C#, PHP, Python, Java, Java Script

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

-

ISBN:

неизвестно

Отзывы:

1 комментарий

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "19 смертных грехов, угрожающих безопасности программ"

Эта книга необходима всем разработчикам программного обеспечения, независимо от платформы, языка или вида приложений. В ней рассмотрены 19 грехов, угрожающих безопасности программ, и показано, как от них избавиться. Рассмотрены уязвимости на языках C/C++, C#, Java, Visual Basic, Visual Basic.NET, Perl, Python в операционных системах Windows, Unix, Linux, Mac OS, Novell Netware. Авторы издания, Майкл Ховард и Дэвид Лебланк, обучают программистов, как писать безопасный код в компании Microsoft. На различных примерах продемонстрированы как сами ошибки, так и способы их исправления и защиты от них. Если вы программист, то вам просто необходимо прочесть эту книгу.

Перевод: А. Слинкин

Читаем онлайн "19 смертных грехов, угрожающих безопасности программ" (ознакомительный отрывок). [Страница - 6]

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

Возникает вопрос: почему мы продолжаем пользоваться столь очевидно опасной системой? Избежать проблемы, по крайней мере частично, можно было бы, перейдя на 64–разрядный процессор Intel Itanium, где адрес возврата хранится в регистре. Но тогда пришлось бы смириться с утратой обратной совместимости, хотя на момент работы над этой книгой представляется, что процессор х64 в конце концов станет популярным.

Можно также спросить, почему мы не переходим на языки, осуществляющие строгий контроль массивов и запрещающие прямую работу с памятью. Дело в том, что для многих приложений производительность высокоуровневых языков недостаточно высока. Возможен компромисс: писать интерфейсные части программ, с которыми взаимодействуют пользователи, на языке высокого уровня, а основную часть кода – на низкоуровневом языке. Другое решение–в полной мере задействовать возможности С++ и пользоваться написанными для него библиотеками для работы со строками и контейнерными классами. Например, в Web–сервере Internet Information Server (IIS) 6.0 обработка всех входных данных переписана с использованием строковых классов; один отважный разработчик даже заявил, что даст отрезать себе мизинец, если в его коде отыщется хотя бы одно переполнение буфера. Пока что мизинец остался при нем, и за два года после выхода этого сервера не было опубликовано ни одного сообщения о проблемах с его безопасностью. Поскольку современные компиляторы умеют работать с шаблонными классами, на С++ теперь можно создавать очень эффективный код.

Но довольно теории, рассмотрим пример.

...
tinclude <stdio.h>

void DontDoIhis (char* input)

{

char buf[16];

strcpy(buf, input);

printf("%s\n» , buf);

}

int main(int argc, char* argv[])

{

// мы не проверяем аргументы

// а чего еще ожидать от программы, в которой используется

// функция strcpy?

DontDoThis(argv[l]);

return 0;

}

Откомпилируем эту программу и посмотрим, что произойдет. Для демонстрации автор собрал приложение, включив отладочные символы и отключив контроль стека. Хороший компилятор предпочел бы встроить такую короткую функцию, как DontDoThis, особенно если она вызывается только один раз, поэтому оптимизация также была отключена. Вот как выглядит стек непосредственно перед вызовом strcpy:

...
0x0012FEC0  с8  fe 12 00 .. <– адрес аргумента buf

0x0012FEC4  с4 18 32 00 .2. <– адрес аргумента input

0x0012FEC8  d0 fe 12 00 .. <– начало буфера buf

0x0012FECC  04 80 40 00  .<<Unicode: 80>>@.

0x0012FED0  el 02 3f 4f     .?0

0x0012FED4  66 00 00 00    f… <– конец buf

0x0012FED8  e4 fe 12 00     .. <– содержимое регистра EBP

0x0012FEDC  3f 10 40 00  ?.@. <– адрес возврата

0x0012FEE0  c4 18 32 00    .2. <– адрес аргумента DontDoThis

0x0012FEE4  cO ff 12 00     ..

0x0012FEE8  10 13 40 00  ..@. <– адрес, куда вернется main()

Напомним, что стек растет сверху вниз (от старших адресов к младшим). Этот пример выполнялся на процессоре Intel со схемой адресации «little–endian». Это означает, что младший байт хранится в памяти первым, так что адрес возврата «3f104000» на самом деле означает 0x0040103f.

А теперь посмотрим, что происходит, когда буфер buf переполняется. Сразу вслед за buf находится сохраненное значение регистра EBP (Extended Base Pointer – расширенный указатель на базу). ЕВР содержит указатель кадра стека; при ошибке на одну позицию его значение будет затерто. Если противник сможет получить контроль над областью памяти, начинающейся с адреса 0x0012fe00 (последний байт вследствие ошибки обнулен), то программа перейдет по этому адресу и выполнит помещенный туда противником код.

Если не ограничиваться переполнением на один байт, то следующим будет затерт адрес возврата. Коль скоро противник сумеет получить контроль над этим значением и записать в буфер, адрес которого известен, достаточное число байтов ассемблерного кода, то мы будем иметь классический пример переполнения буфера, допускающего написание эксплойта. Отметим, что ассемблерный код (его обычно называют shell–кодом, потому что чаще всего задача эксплойта – получить доступ к оболочке (shell)) необязательно размещать именно в перезаписываемом буфере. Это типичный случай, но, вообще говоря, код можно внедрить в любое место вашей программы. Не обольщайтесь, полагая, что переполнению подвержен только очень небольшой участок.

После того как адрес возврата переписан, в распоряжении --">
Комментариев: 1
15-04-2024 в 22:00   #1568
Книга "19 смертных грехов, угрожающих безопасности программ" Дэвида Лебланка посвящена самым распространенным ошибкам в разработке программного обеспечения, которые могут привести к серьезным уязвимостям в безопасности. Это незаменимое руководство для разработчиков и специалистов по безопасности, стремящихся создавать надежные и защищенные приложения.



Книга охватывает широкий спектр уязвимостей, включая:

* Буферные переполнения
* Инъекции SQL
* Межсайтовый скриптинг
* Подделка межсайтовых запросов
* Обход проверки подлинности

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



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



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



Лебланк на протяжении всей книги подчеркивает соответствие стандартам и лучшим практикам безопасности, таким как OWASP Top 10 и NIST Cybersecurity Framework. Он показывает, как применять эти стандарты для создания более безопасных приложений.



Книга предназначена для широкой аудитории, включая:

* Разработчики программного обеспечения
* Специалисты по безопасности
* Тестировщики программного обеспечения
* Руководители проектов



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

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.