Кращі практики створення безпечних API

Ракеш Таланкі та Віджер Гадікота

Дизайнери та розробники API (інтерфейс програмування додатків) зазвичай розуміють важливість дотримання принципів проектування під час впровадження інтерфейсу. Ніхто не хоче розробляти або впроваджувати поганий API!

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

Розробники повинні пам’ятати, надягаючи шапку хакера API перед розгортанням. Якщо розробник нехтує виявленням уразливих сторінок в API, API може стати відкритим шлюзом для зловмисної активності.

Визначення та усунення вразливостей API

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

Ін’єкції

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

Наприклад, у жовтні 2014 року Drupal оголосив про вразливість ін'єкцій SQL, яка надала зловмисникам доступ до баз даних, коду та файлових каталогів. Атака була настільки жорстокою, що, можливо, зловмисники скопіювали всі дані з сайтів клієнтів. Існує багато видів загроз для ін'єкцій, але найпоширенішими є SQL Injection, RegEx Injection та XML Injection. Не раз ми бачили, як API працюють без захисту від загрози - це не рідкість.

API без автентифікації

API, побудований без захисту від зловмисних загроз за допомогою аутентифікації, представляє збій в дизайні API, який може загрожувати базам даних організації. Ігнорування належної аутентифікації - навіть якщо використовується шифрування транспортного шару (TLS) - може спричинити проблеми. Наприклад, з дійсним мобільним номером у запиті API, наприклад, будь-яка людина може отримати особисті адреси електронної пошти та ідентифікаційні дані пристрою. Отже, сильні механізми аутентифікації та авторизації, такі як OAuth / OpenID Connect, спільно з TLS, є критичними.

Чутливі дані на відкритому повітрі

Як правило, операційні команди та інші внутрішні команди мають доступ до інструментів відстеження проблем налагодження, які можуть забезпечити чіткий вигляд інформації про корисне навантаження API. В ідеалі дані власників карткових карт PCI (ІХС) та дані про особисте здоров'я (PHI) шифруються з того місця, де дані фіксуються аж до споживання даних, хоча це не завжди так.

З ростом занепокоєння щодо безпеки API, шифрування конфіденційних та конфіденційних даних має бути головним пріоритетом. Наприклад, у червні 2016 року було розкрито вразливість проксі-сервера http, яка надала декілька способів для зловмисників проксі-сервер вибирати вихідний запит на обраний сервер, захоплювати конфіденційну інформацію із запиту та отримувати інформацію про внутрішні дані. Крім використання TLS, важливо захищати трафік API, шифруючи конфіденційні дані, здійснюючи маскування даних для відстеження / ведення журналів та використання токенізації для інформації картки.

Повторна атака

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

Зловмисники користуються цим недостовірним довірою, намагаючись відтворити або відтворити законний запит користувача (в деяких випадках, використовуючи методи грубої сили), поки вони не будуть успішними. У 2016 році хакери потрапили в акаунти Github через атаку відтворення, використовуючи електронні адреси та паролі інших інтернет-служб, які були піддані компрометації, та приміряли їх на акаунти Github.

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

  • HMAC, який містить часові позначки, щоб обмежити термін дії транзакції визначеним періодом часу
  • двофакторна аутентифікація
  • включення короткочасного маркера доступу за допомогою OAuth

Несподівані сплески використання API

Оцінити використання API завжди важко. Хороший приклад - додаток, який ненадовго збив API National Weather Service. У цьому конкретному API не було жодного механізму запобігання перенапруженням трафіку чи дроселювання, тож несподіваний приплив трафіку безпосередньо потрапив у задній план.

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

Ключі в URI

Для деяких випадків використання достатньо хороша реалізація ключів API для аутентифікації та авторизації. Однак надсилання ключа як частини Уніфікованого ідентифікатора ресурсу (URI) може призвести до порушення клавіші. Як пояснено в IETF RFC 6819, оскільки дані URI можуть з’являтися в журналах браузера або системних журналів, інший користувач може переглядати URI з історії браузера, завдяки чому ключі, паролі та чутливі дати API в URI-інтерфейсах API легко доступні.

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

Стек стежка

Багатьом розробникам API стає зручно використовувати 200 для всіх запитів на успіх, 404 - за всі помилки, 500 - для деяких внутрішніх помилок сервера, а в деяких крайніх випадках - 200 із повідомленням про помилку в тілі, крім детального сліду стека. Трасування стека потенційно може стати витоком інформації для зловмисного користувача, коли він виявить основні реалізації дизайну чи архітектури у вигляді імен пакетів, назв класів, назв фреймів, версій, імен серверів та SQL запитів.

Зловмисники можуть використовувати цю інформацію, подаючи розроблені запити URL-адрес, як це пояснено в цьому прикладі Cisco. Це хороша практика повернення "збалансованого" об'єкта помилок з правильним кодом статусу HTTP, з мінімально необхідними повідомленнями про помилки та "відсутністю стеку" під час помилок. Це покращить обробку помилок та захистить деталі реалізації API від зловмисника. Шлюз API може бути використаний для перетворення повідомлень про помилки в стандартні повідомлення, щоб усі повідомлення про помилки виглядали однаково; це також виключає відкриття структури резервного коду.

Безпека API

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

[Хочете дізнатися більше про безпеку API? Отримайте свою копію нашої недавньої електронної книги, всередині продуктового набору API API: Створення та керування безпечними API.]