Аудит уязвимостей Linux c Vulners.com

Тема в разделе "Linux", создана пользователем CLAY, 11 мар 2017.

  1. CLAY

    CLAY Member

    Сообщения:
    419
    Симпатии:
    5
    Ссылка доступна только зарегистрированным пользователям задумывался как поисковик для Security Content-а: уязвимостей, бюллетеней безопасности, эксплоитов, плагинов детекта и прочей полезной информации. Но мы подумали: если у нас уже есть разобранные бюллетени безопасности для основных Linux-дистрибутивов, почему бы нам не сделатьСсылка доступна только зарегистрированным пользователям, который будет брать данные о системе, а на выходе отдавать список уязвимостей. Также, как это делают привычные сканеры уязвимостей, только быстрее и бесплатно.



    Откуда мы получаем информацию об уязвимостях Linux? Для этого мы парсим бюллетени вендоров. Покажем процедуру разбора на примере бюллетеня безопасности Debian DSA-3638.Ссылка доступна только зарегистрированным пользователям



    Мы видим, что уязвим source пакет curl на операционной системе версии jessie и уязвимость исправлена в пакете версии 7.38.0-4+deb8u4. Но этой информации не достаточно, чтобы правильно определить уязвимость. curl в данном случае является source-пакетом, то есть на его основе собираются бинарные пакеты. Поэтому нужно найти все бинарные пакеты, собранные из пакета curl:

    Ссылка доступна только зарегистрированным пользователям



    В итоге мы считаем, что уязвимость есть для всех перечисленных пакетов версии меньше 7.38.0-4+deb8u4

    Ссылка доступна только зарегистрированным пользователям

    Код:
    {
    result: OK,
    data: {
    documents: {
    DSA-3638: {
    objectVersion: 1.0,
    modified: 2016-08-03T00:00:00,
    affectedPackage: [
    {
    packageName: libcurl3-nss,
    packageVersion: 7.38.0-4+deb8u4,
    packageFilename: libcurl3-nss_7.38.0-4+deb8u4_all.deb,
    arch: all,
    operator: lt,
    OSVersion: 8,
    OS: Debian GNU/Linux
    },
    {
    packageName: curl,
    packageVersion: 7.38.0-4+deb8u4,
    packageFilename: curl_7.38.0-4+deb8u4_all.deb,
    arch: all,
    operator: lt,
    OSVersion: 8,
    OS: Debian GNU/Linux
    ...
    Как работает Аудит? Сначала нам нужно собрать и отправить на сервер информацию о пакетах и ОС. Версия ос содержится в файлах /etc/os-release, /etc/centos-release и других файлах, специфичных для тех или иных операционных систем. В качестве источника информации об установленных пакетах для rpm-based систем достаточно стандартной команды rpm -qa. В случае deb-based системы нужен вывод команды посложнее — dpkg-query -W -f="${Package} ${Version} ${Architecture} "

    В ответ сервер вернет нам информацию о найденных уязвимостях. Рассчет происходит очень быстро. Мы обрабатываем 750 пакетов за 160ms! Можно подумать, что на сервере происходит какая-то магия. Но это не так, все на самом деле очень просто и так работаю практически все сканеры уязвимостей.

    Рассмотрим пакет — curl 7.38.0-4+deb8u3 amd64 для Debian Linux. Имя пакета curl. Мы ищем в системы все бюллетени, которые содержат это пакет среди списка уязвимых пакетов. После того, как все такие бюллетени найдены, нужно пройтись по каждому из них и проверить, выполняется ли хотя бы одно из условие из перечисленных в поле affectedPackage. Возьмем для примера пакет DSA-3638:

    Код:
    {
    OS: Debian GNU/Linux,
    operator: lt,
    packageFilename: libcurl3-nss_7.38.0-4+deb8u4_all.deb,
    OSVersion: 8,
    packageVersion: 7.38.0-4+deb8u4,
    packageName: libcurl3-nss,
    arch: all
    }
    Здесь указано, что уязвимость имеет место быть в случае, если:

    — Операционная система — Debian GNU/Linux («OS»: «Debian GNU/Linux»)
    — Версия этой операционной системы — 8 («OSVersion»: «8»)
    — Установлен пакет с именем libcurl3-nss («packageName»: «libcurl3-nss»)
    — Архитектура уязвимого пакета — любая
    — И версия этого пакета меньше, чем 7.38.0-4+deb8u4 («operator»: «lt» и «packageVersion»: «7.38.0-4+deb8u4»)

    Если все условия выполнились — пакет подвержен данной уязвимости DSA-3638. Для каждого пакета в системе мы проверяем все условия из бюллетеней и получаем список уязвимостей для системы. Как видите, какой-то сложности или магии в этом нет.

    Важно отметить, ни в коем случае нельзя сравнивать версии как числа или строки. Для каждой из систем (debian, redhat, solaris) структура версий отличается. И соответственно отличается механика их сравнения. Для того, чтобы обеспечить достоверность сканирования, необходимо реализовывать сравнение версий ровно по тому же алгоритму, как он сделан в самой операционной системе. К счастью, какой-то тайны в этом нет, есть готовые примеры Ссылка доступна только зарегистрированным пользователям.

    На сегодняшний день мы готовы вам предложить Ссылка доступна только зарегистрированным пользователям, с помощью которого можно проверить свой сервер на уязвимости, полноценное API для автоматизации и Ссылка доступна только зарегистрированным пользователям для нашего будущего облачного решения по управлению уязвимостями. Поддерживаются следующие дистрибутивы Linux: RedHat, CentOS, Fedora, Oracle Linux, Ubuntu, Debian.

    Графический интерфейс доступен Ссылка доступна только зарегистрированным пользователям.




    Найденные уязвимости:




    Аналогично можно работать через Audit API. Задайте список установленных пакетов и версию ОС, а в ответ получите список уязвимостей и описание того почему мы считаем, что уязвимость действительно есть. Вы можете сравнить результаты с результатами своего сканера и попросите своего вендора объяснить расхождения. Ну или пните нас, что мы где-то накосячили ;-)

    Код:
    curl -H Accept: application/json -H Content-Type: application/json -X POST -d "{os:centos,package:[pcre-8.32-15.el7.x86_64, samba-common-4.2.3-11.el7_2.noarch, gnu-free-fonts-common-20120503-8.el7.noarch, libreport-centos-2.1.11-32.el7.centos.x86_64, libacl-2.2.51-12.el7.x86_64, sos-3.2-35.el7.centos.noarch ],version:7}" https://vulners.com/api/v3/audit/audit/
    {
    result: OK,
    data: {
    reasons: [
    {
    providedPackage: sos-3.2-35.el7.centos.noarch,
    operator: lt,
    bulletinID: CESA-2016:0188,
    providedVersion: 0:3.2-35.el7.centos,
    bulletinPackage: sos-3.2-35.el7.centos.3.noarch.rpm,
    bulletinVersion: 3.2-35.el7.centos.3,
    package: sos-3.2-35.el7.centos.noarch
    },
    {
    providedPackage: pcre-8.32-15.el7.x86_64,
    operator: lt,
    bulletinID: CESA-2016:1025,
    providedVersion: 0:8.32-15.el7,
    bulletinPackage: pcre-8.32-15.el7_2.1.x86_64.rpm,
    bulletinVersion: 8.32-15.el7_2.1,
    package: pcre-8.32-15.el7.x86_64
    },
    {
    providedPackage: samba-common-4.2.3-11.el7_2.noarch,
    operator: lt,
    bulletinID: CESA-2016:1486,
    providedVersion: 0:4.2.3-11.el7_2,
    bulletinPackage: samba-common-4.2.10-7.el7_2.noarch.rpm,
    bulletinVersion: 4.2.10-7.el7_2,
    package: samba-common-4.2.3-11.el7_2.noarch
    },
    {
    providedPackage: samba-common-4.2.3-11.el7_2.noarch,
    operator: lt,
    bulletinID: CESA-2016:0612,
    providedVersion: 0:4.2.3-11.el7_2,
    bulletinPackage: samba-common-4.2.10-6.el7_2.noarch.rpm,
    bulletinVersion: 4.2.10-6.el7_2,
    package: samba-common-4.2.3-11.el7_2.noarch
    },
    {
    providedPackage: samba-common-4.2.3-11.el7_2.noarch,
    operator: lt,
    bulletinID: CESA-2016:0448,
    providedVersion: 0:4.2.3-11.el7_2,
    bulletinPackage: samba-common-4.2.3-12.el7_2.noarch.rpm,
    bulletinVersion: 4.2.3-12.el7_2,
    package: samba-common-4.2.3-11.el7_2.noarch
    }
    ],
    vulnerabilities: [
    CESA-2016:1486,
    CESA-2016:1025,
    CESA-2016:0448,
    CESA-2016:0612,
    CESA-2016:0188
    ],
    cvelist: [
    CVE-2015-5370,
    CVE-2015-7560,
    CVE-2016-2119,
    CVE-2016-2118,
    CVE-2015-7529,
    CVE-2016-2112,
    CVE-2016-2113,
    CVE-2016-3191,
    CVE-2015-8386,
    CVE-2015-8388,
    CVE-2015-8385,
    CVE-2016-2110,
    CVE-2015-5073,
    CVE-2015-8391,
    CVE-2015-2328,
    CVE-2016-2115,
    CVE-2015-3217,
    CVE-2016-2114,
    CVE-2016-2111
    ],
    cvss: {
    vector: AV:NETWORK/AC:LOW/Au:NONE/C:pARTIAL/I:pARTIAL/A:COMPLETE/,
    score: 9.0
    },
    packages: {
    pcre-8.32-15.el7.x86_64: {
    CESA-2016:1025: [
    {
    providedPackage: pcre-8.32-15.el7.x86_64,
    operator: lt,
    bulletinID: CESA-2016:1025,
    providedVersion: 0:8.32-15.el7,
    bulletinPackage: pcre-8.32-15.el7_2.1.x86_64.rpm,
    bulletinVersion: 8.32-15.el7_2.1,
    package: pcre-8.32-15.el7.x86_64
    }
    ]
    },
    sos-3.2-35.el7.centos.noarch: {
    CESA-2016:0188: [
    {
    providedPackage: sos-3.2-35.el7.centos.noarch,
    operator: lt,
    bulletinID: CESA-2016:0188,

Поделиться этой страницей