Перейти до вмісту

Блог ·

Збіг, який відмовляється бути певним

Чотири факти з чотирьох джерел, тримані нарізно. Чому запис KEV ніколи не підвищує тяжкості й чому лише обмежений діапазон версій справді щось означає.

Автор: Provibr

Сканер банерів читає SSH-2.0-OpenSSH_8.9p1 із порту й записує продукт і версію. Стрічка вразливостей каже, що діапазон версій цього продукту має відому проблему. Скласти ці двоє докупи є одним рядком коду й одним із найлегших способів побудувати екран безпеки, якому за місяць уже ніхто не довірятиме.

Причина в тому, що ці дві фрази не є твердженнями одного роду. Одне є вимірюванням служби, яка може вам брехати. Друге є твердженням сторонньої особи про діапазон версій, який, можливо, написали ще до того, як зʼявилося виправлення. Екран, що подає їх як одне число, викинув саме те, що дало б клієнтові змогу вирішити, що робити.

Чотири факти з чотирьох джерел

У фразі ця машина має CVE-1234 міститься чотири окремі твердження.

  • Досяжність виміряна. У певну мить встановилося зʼєднання TCP.
  • Версія виведена. Ми вирізали ознаку з привітання, і службу можна налаштувати казати будь-що, і дистрибутив міг перенести латку, не змінивши номера.
  • Бюлетень належить комусь іншому. NVD каже, що діапазон версій продукту вражений.
  • Активно експлуатується є вже третьою стороною. CISA каже, що це CVE вживають у дикій природі.

Це лишаються чотири стовпці. Перемножити їх у бал є саме тим позбавленим змісту складником, який специфікація цієї можливості забороняє, а вважати запис у каталозі експлуатованих вразливостей підвищенням тяжкості є тією самою помилкою в малому.

Тому запис KEV ніколи не підвищує тяжкості. Тяжкість походить із базового бала CVSS і ні з чого іншого, певність лишається низькою, бо доказом є банер, а експлуатація є власним стовпцем із трьома станами: так, ні й незастосовно для знахідок, які взагалі не спираються на бюлетень. Виміряно на пробних даних: бюлетень Exim із CVSS 9,8 є критичним і несе познаку KEV; бюлетень OpenSSH із 8,1 є високим і не несе жодної. Той із 9,8 є критичним через свій бал, а не через познаку.

Каталог до того ж за побудовою не може дати збігу власними силами. Він несе ідентифікатор CVE, постачальника, назву продукту й дату, і жодних діапазонів версій. Прикласти Apache HTTP Server до банера означало б угадувати. Він лише коли-не-коли ставить познаку на бюлетень, який NVD уже привʼязав до діапазону версій.

Стрічки є платформними таблицями

Обидві стрічки живуть у таблицях без стовпця організації. CVE не належить нікому: це не персональні дані, це не дані клієнтки, і це той самий рядок для кожного облікового запису на платформі. Тому його немає ні в очищенні, що йде при закритті організації, ні у вивантаженні персональних даних. Звʼязок між знахідкою та бюлетенем належить клієнтові, і він є в обох.

Збирач має дозвільний перелік за вузлом, а не за адресою, і самі адреси стоять у коді. Робітник, що читає адресу з середовища чи з бази даних, є примітивом підробки запитів із розкладом навколо: той, хто може задати це значення, змушує наш шлюз зробити запит із нашої мережі й нашими вихідними адресами. Вузол кожної остаточної адреси теж перевіряється, тож і перенаправлення на інший вузол відхиляється, а не супроводжується.

Таблиця істинності

За назви продукту, що збігається, і правила CPE з бюлетеня є рівно три можливі відповіді, і більшість цікавих рядків дає середню.

Спостережена версіяПравило CPEНаслідок
будь-яканазва продукту відрізняєтьсянічого
нечитнабудь-якеможливий збіг, неперевірений
читнаточна версія, рівна, оновлення підходитьзбіг бюлетеня
читнаточна версія, рівна, оновлення відрізняєтьсяможливий збіг, неперевірений
читнаточна версія, нерівнанічого
читнадіапазон із верхньою межею, усерединізбіг бюлетеня
читнадіапазон із верхньою межею, поза нимнічого
читналише нижня межа, вище неїможливий збіг, неперевірений
читнажодних межможливий збіг, неперевірений

Рахуються лише записи CPE з частиною a, від застосунку. Літера o для операційної системи чи h для обладнання почепила б Ubuntu 22.04 на банер SSH, і це саме той рід збігу, що виглядає переконливо й нічого не означає: ми бачили службу, а не систему під нею.

Рядок, про який варто сперечатися, це лише нижня межа. Правило, яке каже все від 8.0, без верхньої межі, охоплює версії, що вийшли після бюлетеня й уже розвʼязали проблему. NVD пише діапазони так, коли виправлення ще не було опубліковане, і не завжди їх потім переглядає. Наліпити таке правило на машину означало б повідомити про залатаний сервер як про вразливий, а після двох таких повідомлень клієнт учиться нехтувати цілим екраном. Неперевірений є чесною позначкою, і неперевірений не є меншим різновидом підтвердженого. Це інше твердження.

Коли один бюлетень несе десятки правил CPE, по одному на кожен уражений випуск, перемагає найсильніший наслідок. Якщо одне влучає точно, то це і є відповідь, навіть коли поряд стоїть десяток розмитих.

Переоцінка пише нову ревізію й не торкається доказу

Стрічки змінюються. NVD переглядає бал, діапазон звужується, CVE, що збігалося минулого тижня, більше не збігається. Обхід, який переоцінює відкриті знахідки проти поточних стрічок, має одне жорстке правило: він ніколи не пише й не змінює появи.

Поява є відповіддю на чи було воно о 03:14. Оновлення стрічки нічого в цьому не змінює. Змінюється висновок понад нею, і той дістає новий рядок у таблиці оцінок із власним ідентифікатором ревізії, що називає обидва знімки стрічок. Виміряно: після переміщення бюлетеня з CVSS 9,8 на 7,5 наявні рядки появ повернулися байт у байт однаковими.

Зниклий збіг закриває знахідку як closed_unverified і ніколи як resolved_verified. Друге є твердженням про вимірювання, а вимірювання не було. Змінилося наше власне виведення. Назва є цілою причиною того, що цей стан існує.

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

Жодного обходу без успішної стрічки

Останній засув коштував найменше коду й запобігає найгіршому наслідкові.

Якщо жодна стрічка ніколи не була успішною, поточна ревізія бюлетенів порожня, і обхід повертається одразу, нічого не розглянувши. Без тієї перевірки він працював би, побачив би, що запит кандидатів нічого не дає, і закрив би кожну засновану на бюлетені знахідку в кожного клієнта як таку, що більше не збігається. Цілий парк став би зеленим на підставі стрічки, яка зламана.

Невдале отримання до того ж лишає попередній кеш на місці разом із власною позначкою успіху, тож два питання коли ми востаннє пробували й коли нам востаннє вдалося є двома окремими стовпцями замість одного сповненого надії.

Чого це коштує й що дає

Коштує воно того, що екран показує чимало рядків можливий збіг, неперевірений, а вони задовольняють менше, ніж число. Адміністратор мусить подивитися на один із них і вирішити, чи справді вражена версія, яку він тримає.

Дає воно те, що рядки, позначені як підтверджені, варті дії, і що кожен рядок можна розібрати на чотири факти, з яких його склали: що виміряно, що виведено, що стверджував хтось інший і чого просто не знають. Знахідка, яка не може пояснити, звідки походить кожна її частина, є знахідкою, яку хтось колись навчиться проминати.

З роботи з безпеки Provibr. Чому сканування відкритості, що читає банер, не надсилає жодного корисного навантаження, описано в сканер, який надсилає нуль байтів, а чому інцидент ніколи не закривається тишею, описано в інцидент, який не закривається на мовчанні.

Читати далі

Почніть з одного хоста й одного агента

Створіть обліковий запис, встановіть агента однією командою та підключіть свій перший хост Proxmox. Пробний період триває 14 днів і не потребує платіжних даних.