01 September 2008

Trust Boundaries Identification на прикладі Architects.in.ua

Architects.in.ua дуже простий сайт, виявилось що розробниками написано лише 316 рядків коду. У той самий час сайт має достатньо коду щоб показати деякі проблеми з безпекою. Сьогодні не буде дірок які можна використовувати прямо не виходячи із браузера, сьогодні я хочу розповісти про вельми теоретичне - Trust Boundaries Identification (Кордони Довіри), і як за допомогою цих кордонів зробити додаток більш безпечним.

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

Декомпозиція

З точки зору моделювання небезпек(Threat Modeling), одна за перших активностей це віртуальна декомпозиція додатку на субсистеми.

Діаграмма Architects.in.ua декомпозованна на субсистеми.В прикладі з Architects.in.ua, це може виглядати так. Користувач - це браузер користувача, середній чотирикутник - сам сайт, і декілька джерел даних у вигляді RSS Feedів.

Кордон Довіри (Trust Boundaries)

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

Поточна реалізація Architects.in.ua будує Кордон Довіри  так що сайт повністю довіряє фідам.

Наслідки

Проблема може виникнути якщо хоча б одне джерело даних буде скомпрометовано. Просто картинка зкомпроментованого джерелаВ прикладі з Architects.in.ua це достатньо легко уявити, адже джерелом даних для них являється Live Spaces.

Далі припустимо що одне з джерел таки cкомпроментовано. Що це означає для нас? Тут вже залежить від того як джерело використовується. В Architects.in.ua  є декілька шляхів як цим скористатися.

Діаграма показує зкомпроментований додаток

По-перше, так само як і з попередніми уразливостями, це може використовуватись для DoS атак, дефейсу тощо. Але це не цікаво.

Набагато цікавіше те що інформація з джерела після невеличкого очищення (sanitation) просто передається на бік користувача! Тобто скомпрометувавши джерело, атакуючий за допомогою Architects.in.ua компрометує користувача! Діаграма показує зкомпроментованого користувача

Приклад коду який опікується очисткою інформації та опис як його обійти можна знайти в попередньому огляді (Шукати по RemoveTags).

Як протистояти

Що ж робити? По-перше виправити Кордон Довіри. Сайт повинен довіряти тільки собі. Діаграма де сайт довіряє тільки собіЦе нам допоможе зробити переоцінку довіри до джерел.

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

Схоже саме цей шлях і обрали розробники:

>> Про XSS не согласен, т.к. источники полностью контролируются, а значит не писать любителей подсунуть скрипт.

Другий шлях дещо складніший... все ж таки не довіряти інформації з джерела, і просто пропустити результати через щось на кшталт HttpUtility.HtmlEncode (або ще краще через Anti-Cross Site Scripting Library). Дуже складно?

Висновок

Я тут багато написав, і може скластися уява достатньо робити енкодінг результатів(Encode Output)…  Це не так, головне це реально бачити такі проблеми. Випадок з атакою за допомогою XPath дуже вдалий приклад коли всі знають про SQL Injection, а ось про XPath Injection..

Декілька посилань

Провідник від Microsoft - Threat Modeling Web Applications – відносно стисло і зрозуміло викладено процес;

Частина книги - Chapter 3 – Threat Modeling – детально викладено весь процес, без залежностей від вебу.

Пісемістична заміна для HttpUtility.HtmlEncode - Anti-Cross Site Scripting Library;


Якщо тема моделювання небезпек та Security Development Lifecycle взагалі для вас цікава, вітаю до коментарів, інакше я нічого писати не буду, бо ця тема мені здається досить нудною для викладання в блозі.

Коментарі

# Ivan Kolodyazhny said:

Цікавий пост, дякую. Тема безпеки веб-сайтів є дуже актуальною, але, нажаль, їй виділяється мало уваги.

01 September 08 at 10:31 AM
# mormat said:

Особисто мені - цікаво

01 September 08 at 10:42 AM
# Brand said:

Менi теж цiкаво :)

01 September 08 at 5:00 PM
# slash said:

Пишите еще!

02 September 08 at 1:13 AM
# Mike Chaliy said:

Хи, кул, реально не чекав, що ця тема цікавить.

Потрібно буде попрохати наших експертів ще щось написати ;)....

02 September 08 at 4:02 AM
# status_alexus said:

Очень простая и доступная статья.

Большое спасибо. Для меня по-правде говоря не было большого открытия в сути "границ доверия", однако по данной тематике очень мало попадалось источников.

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

Михаил, ты бы не мог порекомендовать какой нибудь системный источник (книга, цикл статей) на русском языке в котором бы это все системно излагалось?

Еще раз спасибо.

12 September 08 at 2:00 AM
Анонімні коментарі деактивовані. Увійдіть або Зареєструйтесь щоб мати доступ до ресурсів Спільноти.

About Mike Chaliy

Вчу українську, багато працюю. Цікавлюсь моделюванням небезпек. Більшість часу витрачаю на .Net.