Інструмент, який автоматично знаходить уразливості в Python-коді

0 Коментарі
Інструмент, який автоматично знаходить уразливості в Python-коді
Позиция на странице статьи, сразу после главного изображения статьи
Тип статті:
Переклад

TL; DR

  У січні 2019 роки запустили інструмент, який ефективно знаходить уразливості в Python-коді.  Розробники створили автоматизовану систему, в якій об'єднали алгоритми аналізу потоку даних з новим ML-компонентом. Таким чином,  інструмент знаходить набагато більше вразливостей, ніж інші, традиційні інструменти. Запустивши його в декількох репозиторіях з відкритим вихідним кодом, розробники знайшли і повідомили про 35 критичних загроз безпеки зі списку OWASP Top Ten. На скріншоті показана одна із загроз:

   Неухильно зростає інтерес до безпеки веб-додатків. Одночасно з цим, зростає інтерес до уразливостей з боку зловмисників. В таких умовах розробникам стає складніше працювати, проте інструменти для автоматичної перевірки коду повинні полегшити ситуацію. Саме тому розробники вирішили поліпшити алгоритми автоматичного пошуку вразливостей. 
   Найпоширеніший метод аналізу коду називається taint-аналіз: він допомагає виявити такі уразливості, як міжсайтовий скриптинг (XSS), впровадження SQL-коду (SQLi), обхід каталогу (PT), віддалене виконання коду (RCE) і т. д. Здається, що популярність taint-аналізу пов'язана з простотою його основної ідеї: «щоб зробити код безпечним, спочатку потрібно переконатися, що екранування призначеного для користувача введення пройшло успішно».
Візьмемо для прикладу цей надскладний фрагмент коду:

#from django.http import HttpResponse

#def hello(request):

#name = request.GET.get(«name») 

#return HttpResponse(«Hello » + name)

  Тут для користувача введення з HTTP-запиту потрапляє в ім'я змінної -name, а потім в виклик -django.http.HttpResponse. 

Тому, якщо додати скрипт script  «evil_code» / script,  то evil_code почне виконуватися в браузері жертви.

 Якщо ви все ще не зрозуміли, як це працює, то ось неофіційний короткий опис цього методу.

 
При taint-аналізі виділяють три категорії об'єктів (змінних, викликів функцій і т. Д.):
Sources (джерела) — містять введену користувачем інформацію (наприклад, request.GET.get ( «name»));
Sanitizers (САНІТАЙЗЕР) — обробляють небезпечну введену користувачем інформацію, перетворюють її в безпечну (наприклад, django.utils.html.escape ());
Sinks (накопичувачі даних) — запускають вразливість, якщо зловмисникові вдасться ввести дані (наприклад, django.http.HttpResponse ()).
Головна мета аналізу-переконатися, що всі введені користувачем дані пройдуть через САНІТАЙЗЕР на шляху з джерела в накопичувач. Кожен потік даних, який не пройшов через САНІТАЙЗЕР, вважається потенційною вразливістю.
На жаль, taint-аналіз залежить від специфікації: списку всіх джерел, накопичувачів даних і САНІТАЙЗЕР. Щоб вручну скласти таку специфікацію, потрібен «експерт з безпеки», який повинен розбиратися і в базі вихідного коду проекту, і у всіх використовуваних сторонніх середовищах. В ідеалі «експерт з безпеки» повинен скласти список всіх джерел, накопичувачів і САНІТАЙЗЕР, присутні в коді, і запустити інструмент taint-аналізу. Досить очевидно, що у цього підходу є деякі недоліки.
По-перше, уявіть, наскільки складно вручну зібрати таку специфікацію: потрібно переглянути тонну документації та коду, як проекту, так і фреймворків. А тепер згадайте знамениту цитату Ларрі Уолла: «Лінь і нетерплячість — це справжні чесноти великого програміста», і відчуйте жалість до бідолахи, якому доручили таке завдання.
По-друге, кожен втрачений елемент в специфікації стане потенційно ігнорованої вразливістю. Люди часто помиляються, особливо коли займаються рутинною роботою. Чи можна з упевненістю сказати, що складений список буде повним?
По-третє, це не разова подія. Складений список потрібно переробляти і доповнювати кожен раз, коли оновлюється інфраструктура або в код вносяться значні зміни. Це набагато збільшує вартість обслуговування проекту.
По-четверте, цей підхід не масштабується. Кожен проект і кожна інфраструктура унікальні: отримані специфікації безпеки не вийде використовувати повторно на 100%.
Ці чотири вади також означають, що в цьому випадку не вийде ефективно використовувати такий поширений інструмент, як Code Review. Більш того, консультантів з безпеки занадто мало, їх не вистачить на всі проекти.
Розробники вирішили цю проблему за допомогою DeepCode і відкритого вихідного коду. Вони створили інструмент, який аналізує викладений у відкритий доступ код, збирає статистику про всі API, об'єднує їх в єдину модель і автоматично складає список нових джерел, накопичувачів і САНІТАЙЗЕР. Він також аналізує, які саме уразливості найчастіше зустрічаються в накопичувачах певного типу. На основі цього аналізу він пропонує САНІТАЙЗЕР, який допоможе впоратися з цією проблемою.
Очевидно, що розроблений підхід усуває перший, третій і четвертий недолік. Але щодо другого? Розробники провели експериментальний пошук помилок. За допомогою розробленого інструмента (викладений у відкритий доступ) вони вивчили репозиторії з відкритим вихідним кодом на GitHub. Розробники спеціально вибирали веб-додатки, які використовуються (або будуть використовуватися) безліччю людей (в тому числі, зловмисниками).
Результатом цього експерименту став список виявлених і виправлених вразливостей. Більш того, вони довели, що інструмент знаходить цікаві, нетривіальні і несподівані помилки.
  1. Межсайтовый скриптинг в mozilla/pontoon
  2. Внедрение SQL-кода в earthgecko/skyline
  3. Межсайтовый скриптинг в earthgecko/skyline
  4. Межсайтовый скриптинг в DataViva/dataviva-site
  5. Внедрение SQL-кода в DataViva/dataviva-site
  6. Внедрение SQL-кода в lmfdb/LMFDB
  7. Межсайтовый скриптинг в lmfdb/LMFDB
  8. Межсайтовый скриптинг в gestorpsi/gestorpsi
  9. Внедрение SQL-кода в sharadbhat/VideoHub
  10. Удаленное внедрение кода в UDST/urbansim
  11. Межсайтовый скриптинг в viaict/viaduct
  12. Межсайтовый скриптинг в MLTSHP/mltshp
  13. Межсайтовый скриптинг в kylewm/woodwind
  14. Межсайтовый скриптинг в kylewm/silo.pub
  15. Межсайтовый скриптинг в anyaudio/anyaudio-server
  16. Внедрение SQL-кода в MinnPost/election-night-api
  17. Обход каталога в mitre/multiscanner
  18. Внедрение SQL-кода в PadamSethia/shorty

Слайдер записей slider

Комментарии 0

Предпросмотр
Завантаження...
Будьте первым, кто оставит комментарий.