Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Питер_Гудлиф_Ремесло_программиста_Практика_написания_хорошего_кода.pdf
Скачиваний:
16
Добавлен:
19.04.2024
Размер:
9.23 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

Резюмеm

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

311Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

манды запуска программ и переменные окружения) и «проверяй все вычисления», позволит избавиться от массы уязвимых мест

ввашей программе.

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

С осторожностью порождайте дочерние процессы. Если атакующий сумеет перевести выполнение подзадачи в нужном ему направлении, он сможет получить контроль над любыми средствами. Пользуйтесь

вкоде C функцией system, только если не остается ничего другого.

Тестируйте и отлаживайте программы нещадно. Давите ошибки со всей строгостью. Не пишите код, который допускает аварийное за% вершение; он может остановить всю систему.

Заключите все операции в атомарные транзакции, чтобы атакую% щие не могли воспользоваться состоянием гонки в своих целях. Пример с chmod в разделе «Условия гонки» на стр. 305 можно попра% вить, применив fchmod к дескриптору открытого файла вместо chmod к имени файла: даже если атакующий заменит файл, вы точно знае% те, какой файл нужно модифицировать.

Технологии процедуры

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

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

Резюме

Безопасность – это в своем роде смерть.

Теннесси Уильямс

Программирование – это война.

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