Сканери безпеки: автоматична класифікація вразливостей



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

Компанія Positive Technologies розробила власну методологію конкурентного аналізу для тестування і порівняння сканерів за об'єктивними критеріями, таким як типи і кількість знайдених вразливостей, повнота сканування різних цілей. Крім того, була сформована база даних конкурентного аналізу (DBCA — Database of Competitive Analysis), в якій зібрані унікальні уразливості, знайдені в процесі ручних перевірок і автоматичного сканування синтетичних цілей, реальних сайтів CMS, веб-додатків і інших інформаційних систем сканерами безпеки (WebEngine – вбудований в PT AF і PT AI Acunetix, AppScan та ін). DBCA використовується для порівняння результатів сканування новими версіями сканерів Positive Technologies з результатами сторонніх сканерів і відсіювання помилкових спрацьовувань (false positive).

Однак наповнення DBCA вимагає місяців ручної праці висококваліфікованих інженерів-тестувальників. Процеси налаштування оточень сканування займають багато часу, деколи тижня. Ще довше відбувається процес валідації знайдених вразливостей. Так, над заповненням поточної бази працювали три інженера відділу QA протягом року. У зв'язку з цим виникла необхідність прискорення і автоматизації робіт.

Рішенням стало використання математичного апарату нейронних мереж (НС) і нечітких вимірювальних шкал. Про це ми писали в попередній статті «Сканери безпеки: автоматична валідація вразливостей за допомогою нечітких множин і нейронних мереж». Теоретичні дослідження увійшли в основу практичного експерименту, поставленого інженерами Positive Technologies: Тимуром Гильмуллиным, Володимиром Софиным, Артемом Юшковским.

Була вирішена формальна завдання по перетворенню DBCA в базу знань, шляхом використання НС (в якості вирішального правила) і нечітких вимірювальних шкал (для лінгвістичної оцінки результатів класифікації у зрозумілій людині формі). Практично DBCA була доповнена правилами і механізмами відсіювання помилкових спрацьовувань, заздалегідь відсортованих за ступенем впевненості в їх наявності, оцінених на нечіткої вимірювальної шкалою. Це дозволило прискорити роботу інженерів-тестувальників з аналізу результатів сканування і відсіювання помилкових спрацьовувань.

Ретроспектива, критерій приймання та основні результати

Після завершення робіт з первинного заповнення DBCA уразливими, база містила кілька десятків тисяч вразливостей. З них інженери-тестувальники протягом року класифікували лише близько половини. Результати нашого аналізу показали, що вони виконували до 70% зайвих дій з відсіювання помилкових спрацьовувань від всього обсягу робіт.

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

З боку тестування були отримані наступні критерії приймання та вимоги ефективності:

  • Основний критерій: після впровадження автоматичної системи для валідації вразливостей кількість помилкових відмов (false reject) не повинно перевищувати 10% від загальної кількості оброблених вразливостей.
  • Новий алгоритм підтвердження вразливостей збільшить кількість підтверджених вразливостей (confirmed) та зменшить кількість незначно відрізняються від еталонних вразливостей (semi-confirmed) як мінімум на 5-10%.
  • Новий алгоритм підтвердження вразливостей дасть менше помилок, ніж простий алгоритм, який вже є у інженерів з тестування, як мінімум на 10%.
  • Автоматична система валідації вразливостей буде впроваджена у процес конкурентного аналізу.
В ході експерименту інженерами були розроблені:

  • Матриця кодування вразливостей. Це правила перетворення даних про уразливість і подання їх властивостей у вигляді числового або нечіткого вектора. Така матриця унікальна для кожної конкретної предметної області розв'язуваної задачі.
  • Програмні скрипти для отримання даних з DBCA, представлені у форматі XML.
  • Програмні скрипти для кодування отриманих даних про уразливість у вигляді числових або нечітких векторів (зберігаються в текстових файлах формату), згідно матриці кодування. Ці файли використовуються при навчанні нейромережі.
  • Навчена нейронна мережа для задачі класифікації вразливостей з можливостями довчання та перенавчання, в форматі XML програми FuzzyClassificator.
  • Адаптовані для вирішення поставленого завдання скрипти FuzzyClassificator, що реалізують всі етапи роботи з нейромережею, включаючи її створення, навчання і етап класифікації навченої нейромережею.
  • Механізми для управління всіма процесами валідації вразливостей на базі системи безперервної інтеграції TeamCity.

Функціональна схема класифікації вразливостей

Весь комплекс автоматизації процесів для класифікації вразливостей був описаний функціональної IDEF0-схемою.



Рис. 1 Функціональна IDEF0-схема

На схемі відображено основні етапи класифікації вразливостей:

  1. Сканування CMS.
  2. Занесення результатів у DBCA.
  3. Отримання всіх даних з DBCA, включаючи раніше знайдені вразливості і результати поточного сканування.
  4. Кодування вразливостей в числові вектори у форматі, понимаемом програмою FuzzyClassificator.
  5. Навчання НС за допомогою FuzzyClassificator на раннє знайдені вразливості.
  6. Отримання результатів класифікації нових вразливостей, знайдених в поточній ітерації сканування.
  7. Публікація результатів в DBCA.
Докладні описи всіх елементів функціональної схеми наведені під спойлером

Елементи функціональної схеми
ID на схемі Назва елемента схеми Опис
Керуючі елементи:
C1 Automation engineer Інженер-автоматизатор, ініціюючий всі процеси конкурентного аналізу: запуск сканування CMS, аналіз результатів, навчання і експерименти з нейромережею, класифікацію вразливостей
C2 Method Методика — загальні підходи і правила, формалізують управління процесом класифікації за допомогою НС
Елементи механізми:
M1 PT ACA
Tool
Основний інструмент для автоматизації збору даних і управління всіма процесами конкурентного аналізу
M2 TeamCity Конфігурації в TeamCity для автоматизації сканування через різні сканери
M3 Pusher
scan results to DBCA
Скрипт, обробний XML-результати сканування CMS через різноманітні сканери і заносить їх в DBCA. Реалізований усередині додатку для управління процесом конкурентного аналізу PT PASSWORD Tool
M4 Receiver data
from DBCA
Скрипт, який отримує поля записів з DBCA у вигляді XML-файлів
M5 Support
scripts
Безліч допоміжних скриптів для пошуку унікальних властивостей вразливостей в DBCA. Допомагають відновити матрицю
кодування, у разі появи нових значущих властивостей
M6 FuzzyClassificator Універсальний
інструмент, що реалізує нечіткі нейронні мережі
M7 Pusher
classification results to DBCA
Скрипт, який обробляє результати класифікації вразливостей нейромережею і заносить їх в DBCA. При цьому до вразливостей додається інформація про нечітких значеннях впевненості в тому, що вразливість реальна або уявна
Вхідні елементи:
I1 Scan
targets
Налаштовані стенди з цілями сканування. Це можуть бути різні CMS, сайти або синтетичні мети, підготовлені силами QA-відділу для завдань конкурентного аналізу
I2 Scan
config
установки для сканування. Наприклад, настроєні файли конфігурації WebEngine або файли з налаштуваннями сканування для Acunetix
I3 Coding
Matrix
Матриця кодування — файл формату JSON, який описує правила кодування і перетворення полів записів DBCA в
числовий вектор. Містить безліч різних властивостей вразливостей і їх кодів
I4 FC Config Параметри конфігурації для нейронної мережі, що задаються як трійка значень:
Config = <N, {N, N/2}, 2>
, де N — кількість актуальних властивостей вразливостей, що задаються матрицею кодування. Перший елемент трійки відповідає за кількість вхідних нейронів, другий — це безліч,
складається з двох елементів, які вказують на число нейронів у кожному з двох прихованих шарів нейронної мережі. Третій елемент вказує на число вихідних нейронів — їх два, так як на виході ми хочемо знати про кожну вразливості-кандидата значення двох рівнів: Level Confirm і Level Reject — це ступені впевненості в тому, що вразливість реальна або уявна
Вихідні елементи:
O1 Scan
results
Результати,
одержувані від сканерів, зазвичай у вигляді XML-файлів. Зберігаються агентів для сканування тільки на час тестування
O2 Scan
results in DBCA
Результати сканування, збережені у вигляді типових елементів DBCA
O3 All
data from DBCA
Дані, одержувані з DBCA у вигляді файлів формату XML
O4 Encoded
vectors
Файли з векторами-еталонами (це все реальні і помилкові уразливості з DBCA) і векторами-кандидатами (це нові та нерозібрані уразливості), закодовані у форматі програми FuzzyClassificator
O5 Neuronet Нейронна мережа у форматі XML бібліотеки PyBrain, одержувана в процесі навчання за допомогою програми FuzzyClassificator
O6 FC Report Стандартний файл зі звітом за класифікацією від програми FuzzyClassificator, а також звіти по класифікації в людино-читається формі (приклад HTML-файлу з звітом — далі)
O7 Classification
result in DBCA
Два нових спеціальних властивості вразливості в DBCA: Level Confirm і Level Reject — це оцінка впевненості в тому, що вразливість реальна або уявна. Вона дається на універсальній шкалі лінгвістичних змінних: FuzzyScale = {Min, Low, Med, High, Max}

В якості вимірювальних шкал для оцінки властивостей інформаційних систем була використана універсальна нечітка вимірювальна шкала (рис. 2).



Рис. 2. Розподіл рівнів нечіткої універсальній шкалі

Нечітка шкала (FuzzyScale) — це набір упорядкованих нечітких змінних, представлених у вигляді лінгвістичних змінних, що описують деякі властивості об'єкта:

FuzzyScale = {Min, Low, Med, High, Max}


Тут:

  • Min — це нечітке значення, що означає мінімальну ступінь впевненості в чому-небудь;
  • Low — це трохи більшого значення ступеня впевненості;
  • Med — це середній ступінь впевненості;
  • High — це більш висока ступінь впевненості;
  • Max — це нечіткий рівень, що означає максимальну ступінь впевненості в чому-небудь.
Порівняно з іншими використовуваними алгоритмами валідації вразливостей, в основі яких лежить чітка вимірювальна шкала, такий підхід допомагає вирішити проблему пріоритизації вразливостей на більш зрозумілою людині шкалою, що складається з рівнів, що значно скорочує їх подальший розбір.

Матриця кодування властивостей вразливостей і формат її зберігання

Будь-який спосіб класифікації вразливостей передбачає кодування, тому одним з важливих етапів класифікації вразливостей було кодування вхідних даних. В якості основного елемента ми використовували матрицю кодування властивостей вразливостей (Coding Matrix). Вона застосовується для перетворення вразливостей, отриманих з бази TFS у форматі XML, текстовий DAT-файл спеціального формату, що подається на вхід нейромережі програми FuzzyClassificator. Після побудови матриці написати скрипти (support scripts) для кодування за допомогою матриці не складає ніяких труднощів. Детальніше читайте в блозіКодування вхідних даних).

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

Coding Matrix json-format:
{
"<PROPERTY_NAME_1>": {
"values": {
"unknown": 0,
"<value_1>": 1,
"<value_2>": 2,
...,
<value_N>: N
},
"comment": "Довільний коментар до властивості, наприклад спосіб отримання його значення. PROPERTY_NAME - унікальне ім'я окремого властивості вразливості"
},

...,

"<PROPERTY_NAME_M>": {
"values": {
"unknown": 0,
"<value_1>": 1,
"<value_2>": 2,
...,
<value_K>: K
},
"comment": "Кожне властивість містить унікальне ім'я і набір всіх можливих значень, що кодуються по порядку: 0 (невідоме значення), 1, 2, ..."
},

"<PROPERTY_NAME_X>": {
"values": {
"unknown": 0,
"exists": 1
},
"comment": "Так має виглядати кодування тих властивостей, про які досить знати тільки те, що вони існують (exists = 1) або не існують (unknown = 0) у конкретній уразливості"
}
}

Автоматизація процесу класифікації вразливостей в TeamCity

Для зручності інженерів-тестувальників весь процес, представлений на функціональній схемі, був автоматизований у системі інтеграції TeamCity. Частина конфігурації, наведена на рис. 3, ілюструє точку входу для реалізації блоків 4, 5, 6 (7) функціональної схеми.



Рис. 3. Конфігурація в TeamCity, яка запускає процес класифікації вразливостей

Після завершення процесу аналізу вразливостей TeamCity видає текстові файли із звітами за класифікацією вразливостей-кандидатів і статистику з оцінкою якості навчання нейромережі на еталонах.

Крім того, до отримання підсумкових результатів можна оцінювати якість навчання нейромережі щодо помилок, які вона видає на еталонних векторах. Процес навчання проходить в зручному для інженера форматі: вся необхідна інформація виводиться в конфігурації Training network (див. рис. 4) в реальному часі.



Рис. 4. Висновок проміжних результатів за якістю навчання нейромереж

Параметри на рис. 4 відображають основні показники навчання на еталонних векторах:

  • Epoch — поточна доба навчання (або остання по закінченні навчання);
  • False — загальне число помилково класифікованих еталонних вразливостей (правила підрахунку статистики при навчанні наведено нижче);
  • Best — кількість помилково класифікованих еталонних вразливостей для кращої нейромережі в цьому навчанні.

Приклади звітів

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

Блоки звітуУ заголовку звіту Огляд:

Neuronet — використовується мережа;
Input file with encoded vectors — файл з вхідними даними для навчання або класифікації (залежно від звіту);
Network configuration — конфігурація нейронної мережі;
Report legend — опис нечітких рівнів, що використовуються для оцінки належності уразливості до класів підтверджених або непідтверджених вразливостей.
В таблиці Main statistics:

Total classificated vectors' count — кількість оброблених вразливостей при класифікації;
Allocation table of sorted by levels vectors' count — таблиця розподілу кількості векторів вразливостей за різними нечітким рівнів.
В таблиці Neural network quality statistics (for ethalon vectors only):

False classificated vectors' count — кількість помилково класифікованих векторів вразливостей при навчанні на еталонах, згідно з правилами підрахунку статистики за якістю навчання нейромережі (неповний збіг зараховується як вірний результат);
  • a) False confirmed vectors' count — кількість векторів вразливостей, у яких з еталоном не тільки збігся рівень Level Confirm,
  • b) False rejected vectors' count — кількість векторів вразливостей, у яких з еталоном не тільки збігся рівень Level Reject,
  • c) Both of false confirmed and rejected vectors' count — кількість векторів вразливостей, у яких з еталоном не збіглися одночасно обидва рівня Level Confirm і Level Reject;
Allocation table of sorted by levels false classificated vectors — кількість помилок класифікації згрупованих за різними нечітким рівнів.
В таблиці Classification Result:
TFSID — посилання на уразливість в DBCA;
Level Confirm — результат класифікації уразливості нейромережею, що показує ступінь впевненості в тому, що вразливість підтверджується;
Level Reject — результат класифікації уразливості нейромережею, що показує ступінь впевненості в тому, що вразливість не підтверджується;
Interpreting as — як інтерпретувати результат композиції двох рівнів (Level Confirm, Level Reject), чіткий підсумковий результат класифікації:
  • Confirmed — нейромережа вважає, що уразливість швидше підтверджується,
  • Rejected — нейромережа вважає, що уразливість швидше відкинута,
  • ERROR — помилка класифікації, яка означає, що нейромережа не може однозначно класифікувати вразливість і потрібно її ручна валідація.



Рис. 5. Приклад звіту по класифікації вразливостей-еталонів, що містить статистику за якістю навчання нейромережі

На рис. 5 представлений приклад звіту по класифікації вразливостей-еталонів. Дані, отримані нейромережею після навчання (блок Classification Result), порівнюють з еталоном і видається результат — True або False (зарахувати відповідь як правильний або як помилковий). За підсумками класифікації підраховується число помилково класифікованих вразливостей при навчанні на еталонах, згідно з правилом підрахунку статистики за якістю навчання нейромережі. Це правило ми звели в табл. 1, де вказали рівні, які можна вважати правильним результатом при класифікації, виходячи з практичних міркувань.

Табл. 1. Інтерпретація відповідей нейромережі при навчанні



У ході дослідження ми прийшли до висновку, що вимагати від нейромережі стовідсоткового збігу рівнів при класифікації вразливостей неможливо, так як деякі рівні близькі за значенням один до одного. Приміром, людина, отримавши в результаті класифікації Level Reject = High замість Max, зарахує таку вразливість як опровергнутую. Тому, якщо результат, виданий нейромережею, «близький» до істинного значення (High замість Max і Low/Med замість Min), то ми вважаємо його правильним при навчанні True (weak), якщо значення повністю збігаються, то True (strong). Зазначимо, що правила для реальних вразливостей суворіше, ніж для помилкових, так як виявлення реальних вразливостей є більш пріоритетним завданням. Всі інші варіанти, не зазначені в таблиці, вважаються помилковим відповіддю (False).



Рис. 6. Приклад звіту по класифікації вразливостей-кандидатів, що містить значення нечітких рівнів та їх інтерпретацію

Аналогічно звіту за класифікацією вразливостей-еталонів виглядає звіт з результатами класифікації за кандидатів. Нейромережа видає відповідь, як інтерпретувати нечіткі рівні Level Confirm і Level Reject по кожній уразливості: Confirmed, Rejected або ERROR, згідно з правилами однозначної інтерпретації результатів нечіткої класифікації вразливостей (див. табл. 2).

Табл. 2. Правила однозначної інтерпретації результатів нечіткої класифікації вразливостей



Використання правил дозволяє дати чітку відповідь у зрозумілій людині формі: вразливість підтверджена, спростована або отриманий неоднозначний результат класифікації — помилка. У випадку помилки потрібно ручна класифікація. За аналогією з правилами табл. 1, вразливості-кандидати потрібно вважати відкинутими, якщо за результатами класифікації нечіткий рівень Level Reject буде високим (Max, High), а нечіткий рівень Level Confirm середнім або низьким (Med, Low, Min). Відповідно вразливість буде підтверджена при протилежні результати. Правила для підтверджених вразливостей також більш суворі.

Результати дослідження

Робота з нейромережею включала в себе кілька етапів навчання на еталонах і розбір вразливостей в робочому режимі на нових результатах сканування.

Так, в ході експерименту навчалося одночасно кілька нейромереж, але з різними конфігураціями. На даний момент за результатами навчання в TeamCity отримана найкраща нейромережа з наступною конфігурацією:
Config = <336, 336, 168, 2>
. Її навчання відбувалося протягом 1155 епох на 11004 еталонних векторах вразливостей. При цьому нейромережа, згідно з правилами інтерпретації відповідей (див. табл. 1), в режимі навчання помилково класифікувала всього 555 (5.0%) векторів.

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

В робочому режимі, при класифікації раніше невідомих вразливостей, нейромережа видала наступні результати: 2998 проаналізованих вразливостей помилково класифікувала 595 (19.8%).

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

Повноцінне використання всіх переваг автоматичної класифікації вразливостей за допомогою нейромереж очікується на початку 2016 року. Проте вже зараз результати аналізу вразливостей автоматично проставляються для вразливостей в DBCA.

На рис. 7 наведено приклад типової запису про уразливості з DBCA, для якої нейромережа зробила правильне припущення, що цю уразливість, знайдену сканером PT AI, потрібно спростувати як помилкове спрацьовування. Про це говорять значення полів: «Level Confirm: 5 – Min», «Level Reject: 1 — Max», «Notes: Interpreting as: Reject». Аналогічним чином наводяться результати для всіх інших вразливостей.



Рис. 7. Запис у DBCA з результатами нейромережевої класифікації

Висловлюю подяку своїм колегам: QA-інженерам Positive Technologies Володимиру Софіну і Артему Юшковскому за допомогу в практичній реалізації деяких інструментів і величезний внесок у проведення численних експериментів, а також доценту кафедри математичного аналізу, алгебри та геометрії, к. пед. н. Казанського (Приволзького) федерального університету Мансуру Гильмуллину за допомогу в підготовці теоретичної бази для досліджень і експериментів.

Автор: Тимур Гильмуллин, DevOps-інженер Positive Technologies.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.