AppSECT.A.
377 subscribers
427 photos
9 videos
126 links
Блог Ильи Шмакова

geminishkv.tech

- AppSec Toolchain
- DevOps
- Процессы DevSecOps
- Infosec Risks
- PMI
- Кулуарный ИБ

AppSec Teamlead СберСпасибо @sberbank

Лидер findevsecops.ru @fintechassociation

Преподаватель @bmstu1830, @miptru
Download Telegram
🤔 Нетривиальная база безопасности для Docker

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

Не всегда видно не тривиальные вещи, как например из под капота ставится тип сети host, но пока человек не заметит это - профилирование не изменяется при его использовании.

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

#reco #containersecurity #secrets
❤‍🔥5🔥5
🤔 Терминология MITM

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

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

Начнем с атаки "человека по середине" и отметим, что есть такие виды как:

- Подслушивание Wi-Fi
- "Злой двойник"
- Мошенническая точка доступа
- "Человек-в-браузере"
- Перехват сеанса (рассмотрели в примере)
- Сниффинг пакетов
- и тд


#term #pmcases
🔥4❤‍🔥32
🛠 Grype как SCA для артефактов

Салют, сегодня предлагаю посмотреть на еще один open source инструмент для сканирования уязвимостей в образах контейнеров и файловых системах.

Grype работает на уровне артефактов, а не исходного кода и сканирует программные пакеты.

Поддерживает Python, JavaScript (NPM, Yarn), Java, Ruby, Golang, PHP, Rust, .NET. Образы Docker, OCI, Singularity (SIF).

Тип лицензии: Apache 2.0
Форматы отчетов: JSON, SARIF, CycloneDX


Grype используется в связке с Syft

Syft создает список всех зависимостей, который проверяет Grype на наличие уязвимостей. Это позволяет проводить быстрые повторные сканирования без доступа к исходному коду или образу

Применение



curl -sSfL https://get.anchore.io/grype | sh -s -- -b /usr/local/bin # Разворачивание
grype <image:tag> # Сканирование контейнерного образа
grype <image> --scope all-layers # Сканирование с учетом слоев образа
grype dir:path/to/yourproject # Сканирование директории
grype sbom:./sbom.json # Сканирование с использованием SBOM, созданного Syft
grype <image> -o sarif > results.sarif # Сканирование с выводом в SARIF
grype <image> -o json > results.json # Сканирование с выводом в JSON
grype --add-cpes-if-none --distro alpine:3.10 sbom:./sbom.json # Генерация CPE и указание дистрибутива

docker run --rm \ # Запуск сканирования docker
  -v /var/run/docker.sock:/var/run/docker.sock \
  anchore/grype:latest \
  <image:tag>



Gitlab CI



stages:
  - security
 
Syft:
  stage: security
  image: nixos/nix:latest
  script:
    - nix-shell -p syft --run "syft ${DOCKER_IMAGE}:latest -o cyclonedx-json=sbom.json"
  artifacts:
    paths:
      - sbom.json
 
Grype:
  stage: security
  image: nixos/nix:latest
  needs: ["Syft"]
  script:
    - nix-shell -p grype --run "grype --fail-on high sbom:sbom.json"



Jenkins




pipeline {
  agent any
  stages {
    stage('Grype Scan') {
      steps {
        sh '''
          docker run --rm --volume $(pwd):/tmp/results anchore/grype:latest \
          your-image:tag -o json > /tmp/results/grype_report.json
        '''
      }
    }
  }
  post {
    always {
      archiveArtifacts artifacts: 'grype_report.json'
    }
  }
}



Итого:

- локально разработчиком можно использовать для проверки образов перед их отправкой в registry
- имеет интеграции: SARIF, JSON в GitLab Vulnerability Report, DefectDojo, Jira и т.д.
- может сканировать образы контейнеров, файловые системы, docker save и SBOM
- помимо стандартной Severity CVSS, Grype использует EPSS - вероятность эксплуатации и индикатор KEV, чтобы помочь расставить приоритеты
- достаточно часто покрывает false positive, но после исключений срабатывания более точечные если настроить файл .grype.yaml для подавления не влияющих на конкретный проект уязвимостей
- подходит с лету для проектов с Docker-образами и/ или OCI-артефактами
- охватывает и ОС, и языковые пакеты
- политики можно настраивать с помощью флага --fail-on, указывая минимальный уровень Severity, при котором пайплайн должен быть остановлен
- результаты по умолчанию сортируются по Risk Score, но можно изменить сортировку с помощью --sort-by, как пример, по severity, epss, package


#toolchain #containersecurity #sca #sbom
🔥4
🤔 Терминология CyberDefend

Салют, начнем рассматривать базу и как работает бизнес в рамках условий рисков ИБ.

#term #pmcases #riskanalys
🔥3
🤔 Терминология Malicious

Салют, тяжкий 6 день недели, поэтому мы с тобой рассмотрим, что такое вредонос и какие виды их внедрения есть.

#term #pmcases
🔥4
🤔 Терминология Security Champion

Салют,
Много получается вопросов по рынку, кто это такие люди и чем они занимаются? Детали я рассказываю вот тут, а этот пост для тебя, что бы ты увидел разницу в явном виде и отметил важное для себя.

#term #pmcases
🔥4
🤔 Терминология Access Control

Салют, давай закончим день с рассмотрения прав доступа и отдельно вынесем take-grant как классный механизм, он тебе поможет разобраться с nix и понять каким образом работает ролевая модель.

А я плавно вкатываюсь обратно и готовлю классный контент для тебя 🙏

#term #pmcases
🔥6
🛠 Практики DevSecOps для Android

Салют,
Во-первых у нас с тобой классная стата роста, а именно нас уже 200 подписчиков. Я очень рад этому. Спасибо тебе, что отслеживаешь материалы в канале 🙏

Во-вторых, сегодня я хочу поделиться практическим опытом работы с платформой Android и практик DevSecOps для нее.

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

Практики для Andriod

- Следует исключать возможность хранения конфиденциальной информации во внешних хранилищах: /sdcard, /mnt/sdcard и тд, так как она может быть изменена или прочитана другим приложением, включая внешнее устройство

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

- Если обмен данными с другими приложениями не требуется, то следует объявить android:exported=”false” в файле манифеста

- export для компонента должен быть помечен как false в файле манифеста, включая ограничение доступа к нему

- Разрешение для ответа вызывающему приложению следует реализовать с использованием методов Context.checkCallingPermission() и Context.enforceCallingPermission()

- Любой URL, полученный через intent, вне доверенной зоны должен быть проверен перед его отображением в WebView

- Для предотвращения возможности перехвата или отказа в обслуживании получатели широковещательных intent должны быть ограничены, а именно:

-- вместо явных intent, следует использовать указание на конкретный компонент, используя setComponent(ComponentName или класс setClass(Context, Class)
-- ограничение трансляции одним приложением с помощью параметра Intent.setPackage() и процессом через Context.sendBroadcast(Intent)
-- после отладки атрибуту android:debuggable должно быть присвоено значение false, чтобы исключить возможность отладки приложения пользователем
-- необходимо исключить предоставление доступа к методу addJavascriptInterface в WebView из-за предполагаемого вредоносного контента

- Метод onGeolocationPermissionsShowPrompt() для геолокации должен запрашивать разрешение

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

- Необходимо исключить использование loopback при обработке конфиденциальных данных путем использования HttpsURLConnectionclass или SSLSocketclass

- Рекомендуется использовать App Security Practices из документации Android Developers


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

#appsec #devsecops #reco #specialty #pmcases
🔥7
🛠 Практики 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
🔥4
Всем привет,
Сегодня будет прикольно посмотреть на вот такой кейс у телемоста, его сравнения с зумчиком и теме секьюрных конфколлов - ну если захотеть 😅😄

Понравился коммент дира по корп безопасности 😕

#кулуарка #lol
🔥3
🤔 Open Source Strong & Weak Copyleft Licenses

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

Сейчас предлагаю посмотреть тебе на open-source типа Unlicense и Strong, Weak Copyleft Licenses. Эти типы лицензий описывают тип свободное распростронения с некоторыми частными случаями и имеют отличия друг от друга.

Что такое Copyleft?

Это свободно распространяемая лицензия, где распространяющий может «делиться» продуктом как в исходном состоянии, так и после внесения в него своих правок. Аналогично пермиссивным лицензиям, в копилефт сохраняется уведомление об авторстве.


Особенность

1. Строгая лицензия - это модификация кода под той же лицензией, где любая программа, созданная на его основе, должна быть также открытой и распространяться под аналогичной лицензией.

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


Во вложении я привел типы лицензий и их особенности, ты можешь это переиспользовать для своих open source проектов при указанных условиях их ограничениях, которые помогут тебе прокачиваться.

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

#toolchain #licenses
🔥4