Мой сайт
Главная
Вход
Регистрация
Четверг, 21.11.2024, 16:14Приветствую Вас Гость | RSS
Меню сайта

Категории раздела
Охрана окружающей среды [4]
Охрана окружающей среды
Гражданская оборона [11]
Гражданская оборона
Безопасность воздушного движения [10]
Безопасность воздушного движения

Мини-чат

Наш опрос
Оцените мой сайт
Всего ответов: 2

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Главная » 2017 » Июль » 1 » Безопасное кодирование
16:05
Безопасное кодирование
Обеспечение кодирования является практикой разработки компьютерного программного обеспечения таким образом , что обеспечивает защиту от случайного внедрения уязвимостей. Дефекты, ошибка и логические недостатки последовательно основная причина часто используемых уязвимостей программного обеспечения.На основе анализа тысяч зарегистрированных уязвимостей, специалисты по безопасности обнаружили , что большинство уязвимостей проистекают из относительно небольшого числа ошибок программирования общего программного обеспечения. Путь выявления небезопасного кодирования практики , которые ведут к этим ошибкам и обучению разработчиков на безопасных альтернативах, организации могут принимать активные меры , чтобы помочь значительно уменьшить или устранить уязвимости в программном обеспечении перед развертыванием.

Buffer Предотвращение перелива


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

INT vulnerable_function ( символ * large_user_input ) { символ ДСТ [ МАЛАЯ ]; зЬгср ( ДСТ , large_user_input ); }

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

INT secure_function ( символ * user_input ) { символ ДСТ [ BUF_SIZE ]; // скопировать максимум BUF_SIZE байт strncpy ( ДСТ , user_input , BUF_SIZE ); }

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

символ * secure_copy ( символ * SRC ) { INT Len = StrLen ( SRC ); символ * ДСТ = ( символ * ) таНос ( Len + 1 ); если ( ДСТ =! NULL ) { strncpy ( ДСТ , ЦСИ , лен ); // добавить нулевой терминатор DST [ LEN ] = '\ 0' ; } Вернуть ДСТ ; }

В приведенном выше фрагменте кода, программа пытается скопировать содержимое ЦСИ в целевой_адрес, в то же время проверять возвращаемое значение таНос ,чтобы обеспечить достаточный объем памяти был в состоянии быть выделены для целевого буфера.

 
Формат строки Предотвращение Attack

Формат атака Строки , когда злонамеренный пользователь предоставляет конкретные материалы , которые в конечном итоге будут введены в качестве аргумента функции , которая выполняет форматирование, такие как Е () . Нападение включает противник чтение или запись в стек .

Функция C Printf записывает выходные данные на стандартный вывод. Если параметр функции PRINTF не отформатирован, некоторые ошибки безопасности могут быть введены. Ниже приводится программа, которая уязвима для формата строка атаки.

INT vulnerable_print ( символ * malicious_input ) { Printf ( malicious_input ); }

Вредоносный аргумент, передаваемый программе может быть «% s% s% s% s% s% s% s», что может привести к сбою программы ненадлежащей памяти читает.

 
Integer Предотвращение перелива

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

BOOL IsValid ( беззнаковый INT х , беззнаковая INT у ) { беззнаковая INT сумма = х + у ; вернуть сумму < MAX ; }

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

BOOL IsValid ( беззнаковый INT х , беззнаковая INT у ) { беззнаковая INT сумма = х + у ; возврат суммы > = х && сумма > = у && суммы < MAX ; }
Просмотров: 492 | Добавил: medergrup | Теги: Безопасное кодирование | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Вход на сайт


Поиск

Календарь
«  Июль 2017  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
24252627282930
31

Архив записей

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • База знаний uCoz