Обзор моделей распространения программного обеспечения.

Модели распространения:

1) бесплатные программы или Freeware

2) почти бесплатные программы (cardware, mailware, donationware)

3) программы, показывающие рекламы (adware)

4) коммерческие программы

5) почти работоспособные программы (Demoware Trialware, Nagware)

6) условно-бесплатные программы (Shareware)

29. Атака типа «Переполнение буфера».

5.3 методы противодействия атакам

Основные причины, по которым создаются уязвимые приложения:

1) при проектировании приложения не учитывается, что они могут подвергнуться атакам

2) большинство разработчиков не обучено написанию защищенного кода

3) разработчики – люди, а людям свойственно ошибаться

6.3.1 переполнение буфера

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

Один из наиболее распространенных типов переполнения буфера является – переполнение стека.

Пример:

С:\еуые Hello

Main (int arg c, char * argv[])

{

Sub(argv[1]);

}

Void sub(const char * input) {

Char buf[10];

Buf input address retun     Стек  
Strcpy(buf,input);}

 
 

 

 


Хакер: с:\tast Hello-aaaaaaaa0066ACB1

 
 

 

 


Другими распространенными типами переполнения буфера являются:

1) переполнение динамической кучи

2) ошибки индексации массива

3) ошибки в строках форматирования

4) несовпадение размеров буфера при использовании кодировок юникод и ANSI.

Способ борьбы с переполнением буфера является выполнение след рекомендаций по написанию кода:

1) функция должна всегда завершаться корректно, даже если она получит данные, которые она не ожидала получить

2) строки должны обрабатываться безопасно: нужно проверять на NULL строку источник и строку приемки; строка источник должна заканчиваться символом NULL; длина строки источника не должна превышать длину буфера, выделенного под строку приемки

30. Атака типа «SQL-инъекция».

6.3.2 sql инъекция

Атаки этого типа подразумевают вставку sql команды в качестве значения параметра запроса к БД, в результате чего изменяется логика корректного sql выражения.

Пример:

String sql=”select * from client where name=’ ”+name+ “ ‘ “

String sql=”select * from client where name=’Blake’

“Blake’ or 1=1 --

Тогда

String sql=”select * from client where name=’Blake’ or 1=1 --‘

 

“Blake’ drop table client --“

String sql=”select * from client where name=’Blake’ drop table client --‘

 

Другой проблемой свзязанной с выполнением запросов в БД является использование учетной записи админа для подключения к БД., также слабый пароль.

 

Меры противодействия для безопасной работы с БД.

Включение в ковычки.

Blake’’…

String sql=”select * from client where name=’+name+’ or age=”+age;

name=’Blake” or 1=1--‘ or age=35;

“35 shutdown” (подставиться вместо age)

Char(0x27)

 

Средства номер 2: Хранимые процедуры

String sql=”exec spGetName ‘ “ +name+…

Blake ‘ or 1= --

Exec spGetName ‘Blako’ or 1=1 (не выполниться)

Blake’ drop table client (выполниться)

Пример хранимых процедур:

Create procedure spMyProc @ input varchar(128)

as exec(@input)

 

Средства которые дают защиту:

1) никакие подключения к СУБД под учетной записью админа, использование учетной записи админа-нарушение (позволяет запускать программу ОС xp_cmdshell); для безопасных подключений к БД необходимо создавать специальную учетную запись к БД, имеющую лишь е привилегии на чтении, запись и обновление соответствующих данных, которые необходимы для работы приложений; можно использовать встроенный в ОС механизм авторизации и аутентификации

2) построение параметризованных sql выражений: переложить проверку данных на СУБД

select count (*) from client

where name=? and pwd=?

3) Создание безопасных хранимых процедур: использование хранимых процедур дает след преимущества: возможность ограничении пользовательских привилегий так, чтобы пользователи могли запускать только хранимые процедуры; возможность дополнительной проверки данных; использание параметров при вызове хранимой процедуры снижает риск успешного проведение атаки со вставкой sql кода; в случае когда код приложения попадает злоумышл, с помощью процедур можно скрыть часть логики приложении и структуру БД.