Обзор моделей распространения программного обеспечения.
Модели распространения:
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];
|
Хакер: с:\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 кода; в случае когда код приложения попадает злоумышл, с помощью процедур можно скрыть часть логики приложении и структуру БД.