Практики DevSecOps для C
11 ноября 2025 г.·180 views

🛠 Практики DevSecOps для C

Салют,

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

Для указателей необходимо учитывать:

- Подделку указателей, где нельзя использовать их не по назначению для доступа, дублирования или изменения переменных объекта

- Адресную арифметику, где осуществляется динамического выделения памяти массиву, что может привести к ошибкам чтения смежных областей памяти

- Висячие указатели, где происходит удаление/ освобождение объекта без изменения значения связанного с ним указателя

- Блуждающие указатели, где запрещено использование указателя без предварительной инициализации для любого состояния, так как аналогичное поведение как у висячих указателях

А теперь смотри, есть не типовые вещи как рекомендации:

- Использование принудительной инициализации указателей для удаления диких указателей

- После удаления указателя необходимо установить его на нулевой или недействительный адрес

- Вместо перебора массива с использованием адресной арифметики необходимо использовать отдельную индексную переменную и проверить, что бы индекс не превышал размер массива

- Использовать Garbage Collector для освобождения памяти, используемую объектами, на которые больше нет ссылок с system.gc, delete

- Контролировать вызов операций суперкласса для исключения type confusion из-за нестрогой проверки типов в языке

- Необходимо исключить использование функций, которые не выполняют проверку границ, таких как strcpy(), strcat(), sprintf(), vsprintf() и gets() с заменой на strncpy(), strncat(), snprintf() и fgets()

- При использовании функций scanf(), scanf(), fscanf(), sscanf(), vscanf(), vsscanf() и vfscanf() должна контролироваться длина

- Необходимо исключить использование функций позволяющих реализовать возможности переполнения буфера: realpath(3), getopt(3), getpass(3), stradd(3), strecpy(3) и strtrns(3)

- Использовать calloc() вместо malloc() для динамического выделения памяти

- Реализовать проверку диапазона целых чисел как часть проверки ввода из-за усечения

- Объявлять переменную как volatile для удаления

- Использовать системный вызов mlock() для UNIX и VirtualLock() для Windows, который предотвращает выгрузку заблокированной памяти на диск

- Использовать IndexOutOfRangeException для отслеживания попыток обращения по некорректному индексу

- Использовать небезопасный контекст с unsafe для работы с указателями, что отключает автоматические проверки безопасности при условии их зачистки после и контроля проверки границ, корректного управление памятью

- Доступ к unsafe строго регламентируется и используется как исключение

- Исключить формирование SQL-запросов путём конкатенации строк

- Делать ориентацию на параметризированные запросы

- Использовать современные криптографические алгоритмы BCrypt или Argon2 с солью и итерациями для хранения хэшей паролей

- Избегать прямого вывода пользовательского ввода

- Стараться использовать контекстно-зависимую очистку

- Использовать потокобезопасные коллекции (ConcurrentDictionary, ConcurrentQueue)

Вот теперь отличия для C#, что именно следует игнорировать:

- Работа с указателями: подделка, висячие и блуждающие указатели, принудительная инициализация, обнуление после удаления

- Адресная арифметика для массивов

- Использование malloc(), calloc(), free(); ручное управление памятью

- Использование функций типа strcpy(), sprintf(), gets(), scanf() и подобных для ввода/вывода

- Системные вызовы mlock() и VirtualLock() (кроме специфичных случаев с секретами)

- Использование volatile для управления удалением объектов

- Проверка type confusion через вызов суперкласса (C# строго типизирован)

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

#appsec #devsecops #reco #specialty #pmcases

#appsec#devsecops#reco#specialty#pmcases
Открыть в Telegram