Serverless.com Security
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Організація є найвищим рівнем сутності в екосистемі Serverless Framework. Вона представляє колективну групу, таку як компанія, відділ або будь-яка велика сутність, яка охоплює кілька проектів, команд і додатків.
Команда - це користувачі з доступом всередині організації. Команди допомагають організувати учасників на основі ролей. Співпрацівники
можуть переглядати та розгортати існуючі додатки, тоді як Адміністратори
можуть створювати нові додатки та керувати налаштуваннями організації.
Додаток - це логічна група пов'язаних сервісів в організації. Він представляє собою повний додаток, що складається з кількох безсерверних сервісів, які працюють разом для забезпечення єдиної функціональності.
Сервіс є основним компонентом безсерверного додатку. Він представляє ваш весь безсерверний проект, інкапсулюючи всі функції, конфігурації та ресурси, які потрібні. Зазвичай він визначається у файлі serverless.yml
, сервіс включає метадані, такі як назва сервісу, конфігурації постачальника, функції, події, ресурси, плагіни та користувацькі змінні.
Це резюме офіційного навчального посібника з документації:
Створіть обліковий запис AWS (Serverless.com починає в інфраструктурі AWS)
Створіть обліковий запис на serverless.com
Створіть додаток:
Це повинно було створити додаток під назвою tutorialapp
, який ви можете перевірити на serverless.com, а також папку під назвою Tutorial
з файлом handler.js
, що містить деякий JS код з кодом helloworld
, і файлом serverless.yml
, що оголошує цю функцію:
Створіть постачальника AWS, перейшовши в панель управління за адресою https://app.serverless.com/<org name>/settings/providers?providerId=new&provider=aws
.
Щоб надати serverless.com
доступ до AWS, буде запропоновано запустити стек cloudformation, використовуючи цей конфігураційний файл (на момент написання): https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml
Цей шаблон генерує роль під назвою SFRole-<ID>
з arn:aws:iam::aws:policy/AdministratorAccess
для облікового запису з довірчою ідентичністю, яка дозволяє обліковому запису Serverless.com
AWS отримати доступ до ролі.
У посібнику пропонується створити файл createCustomer.js
, який в основному створить нову точку доступу API, оброблювану новим JS файлом, і пропонується змінити файл serverless.yml
, щоб він генерував нову таблицю DynamoDB, визначав змінну середовища, роль, яка буде використовувати згенеровані лямбди.
Розгорніть його, запустивши serverless deploy
Розгортання буде виконано через стек CloudFormation
Зверніть увагу, що lambdas доступні через API gateway і не через прямі URL
Протестуйте це
Попередній крок виведе URL-адреси, де ваші функції lambda API були розгорнуті
Занадто широкі ролі IAM можуть надати несанкціонований доступ до ресурсів хмари, що призводить до витоків даних або маніпуляцій з ресурсами.
Принцип найменших привілеїв: Призначайте лише необхідні дозволи для кожної функції.
Використовуйте окремі ролі: Розрізняйте ролі на основі вимог функцій.
Зберігання чутливої інформації (наприклад, API ключів, облікових даних бази даних) безпосередньо в serverless.yml
або коді може призвести до витоку, якщо репозиторії будуть скомпрометовані або якщо доступ до AWS буде скомпрометований, оскільки вони будуть читабельні з конфігурацій lambdas.
Змінні середовища: Впроваджуйте секрети під час виконання без хардкодування.
Інтеграція з Secrets Manager: Використовуйте сервіси, такі як AWS Secrets Manager, Azure Key Vault або HashiCorp Vault.
Зашифровані змінні: Використовуйте функції шифрування Serverless Framework для чутливих даних.
Контроль доступу: Обмежте доступ до секретів на основі ролей.
Уникайте ведення журналів секретів: Переконайтеся, що секрети не розкриваються в журналах або повідомленнях про помилки.
Застарілі або небезпечні залежності можуть ввести вразливості, тоді як неналежна обробка введення може призвести до атак ін'єкції коду.
Управління залежностями: Регулярно оновлюйте залежності та скануйте на вразливості.
Валідація введення: Реалізуйте сувору валідацію та санітизацію всіх введень.
Огляди коду: Проводьте ретельні огляди для виявлення вразливостей безпеки.
Статичний аналіз: Використовуйте інструменти для виявлення вразливостей у кодовій базі.
Без належного ведення журналів і моніторингу зловмисні дії можуть залишитися непоміченими, затримуючи реагування на інциденти.
Централізоване ведення журналів: Агрегуйте журнали, використовуючи сервіси, такі як AWS CloudWatch або Datadog.
Увімкніть детальне ведення журналів: Захоплюйте важливу інформацію без розкриття чутливих даних.
Налаштуйте сповіщення: Налаштуйте сповіщення для підозрілих дій або аномалій.
Регулярний моніторинг: Постійно моніторте журнали та метрики на предмет потенційних інцидентів безпеки.
Відкриті або неналежно захищені API можуть бути використані для несанкціонованого доступу, атак відмови в обслуговуванні (DoS) або атак між сайтами.
Аутентифікація та авторизація: Реалізуйте надійні механізми, такі як OAuth, API ключі або JWT.
Обмеження швидкості та обмеження: Запобігайте зловживанням, обмежуючи швидкість запитів.
Безпечна конфігурація CORS: Обмежте дозволені джерела, методи та заголовки.
Використовуйте веб-додатки брандмауерів (WAF): Фільтруйте та моніторте HTTP запити на наявність шкідливих шаблонів.
Спільні ресурси та недостатня ізоляція можуть призвести до ескалації привілеїв або ненавмисних взаємодій між функціями.
Ізолюйте функції: Призначайте окремі ресурси та ролі IAM для забезпечення незалежної роботи.
Розподіл ресурсів: Використовуйте окремі бази даних або сховища для різних функцій.
Використовуйте VPC: Розгорніть функції в межах віртуальних приватних хмар для покращеної мережевої ізоляції.
Обмежте дозволи функцій: Переконайтеся, що функції не можуть отримати доступ або заважати ресурсам один одного, якщо це не є явною вимогою.
Незашифровані дані в спокої або в русі можуть бути розкриті, що призводить до витоків даних або підробки.
Шифруйте дані в спокої: Використовуйте функції шифрування хмарних сервісів.
Шифруйте дані в русі: Використовуйте HTTPS/TLS для всіх передач даних.
Забезпечте безпечну комунікацію API: Вимагайте шифрувальні протоколи та перевіряйте сертифікати.
Безпечно управляйте ключами шифрування: Використовуйте керовані сервіси ключів і регулярно змінюйте ключі.
Детальні повідомлення про помилки можуть розкрити чутливу інформацію про інфраструктуру або кодову базу, тоді як необроблені виключення можуть призвести до збоїв у додатку.
Загальні повідомлення про помилки: Уникайте розкриття внутрішніх деталей у відповідях на помилки.
Централізована обробка помилок: Керування та санітизація помилок послідовно по всіх функціях.
Моніторинг і ведення журналів помилок: Відстежуйте та аналізуйте помилки внутрішньо, не розкриваючи деталей кінцевим користувачам.
Відкриті конфігурації розгортання або несанкціонований доступ до CI/CD конвеєрів можуть призвести до розгортання шкідливого коду або неправильних налаштувань.
Забезпечте CI/CD конвеєри: Реалізуйте суворі контролі доступу, багатофакторну аутентифікацію (MFA) та регулярні аудити.
Зберігайте конфігурацію безпечно: Тримайте файли розгортання без хардкодування секретів і чутливих даних.
Використовуйте інструменти безпеки інфраструктури як коду (IaC): Використовуйте інструменти, такі як Checkov або Terraform Sentinel, для забезпечення політик безпеки.
Незмінні розгортання: Запобігайте несанкціонованим змінам після розгортання, приймаючи практики незмінної інфраструктури.
Використання неперевірених або шкідливих сторонніх плагінів може ввести вразливості у ваші безсерверні додатки.
Ретельно перевіряйте плагіни: Оцінюйте безпеку плагінів перед інтеграцією, віддаючи перевагу тим, що походять з надійних джерел.
Обмежте використання плагінів: Використовуйте лише необхідні плагіни, щоб зменшити поверхню атаки.
Моніторинг оновлень плагінів: Тримайте плагіни оновленими, щоб скористатися патчами безпеки.
Ізолюйте середовища плагінів: Запускайте плагіни в ізольованих середовищах, щоб обмежити потенційні компрометації.
Функції, доступні публічно, або необмежені API можуть бути використані для несанкціонованих операцій.
Обмежте доступ до функцій: Використовуйте VPC, групи безпеки та правила брандмауера для обмеження доступу до надійних джерел.
Реалізуйте надійну аутентифікацію: Переконайтеся, що всі відкриті кінцеві точки вимагають належної аутентифікації та авторизації.
Використовуйте API Gateways безпечно: Налаштуйте API Gateways для забезпечення політик безпеки, включаючи валідацію введення та обмеження швидкості.
Вимкніть невикористовувані кінцеві точки: Регулярно переглядайте та вимикайте будь-які кінцеві точки, які більше не використовуються.
Надання надмірних дозволів членам команди та зовнішнім співробітникам може призвести до несанкціонованого доступу, витоків даних і зловживання ресурсами. Цей ризик зростає в середовищах, де кілька осіб мають різні рівні доступу, що збільшує поверхню атаки та потенціал внутрішніх загроз.
Принцип найменших привілеїв: Переконайтеся, що члени команди та співробітники мають лише ті дозволи, які необхідні для виконання їхніх завдань.
Ключі доступу та ліцензійні ключі є критично важливими обліковими даними, які використовуються для аутентифікації та авторизації взаємодій з CLI Serverless Framework.
Ліцензійні ключі: Це унікальні ідентифікатори, необхідні для аутентифікації доступу до Serverless Framework версії 4, що дозволяє входити через CLI.
Ключі доступу: Облікові дані, які дозволяють CLI Serverless Framework аутентифікуватися з панеллю управління Serverless Framework. Коли ви входите за допомогою CLI serverless
, ключ доступу буде згенеровано та збережено на ноутбуці. Ви також можете встановити його як змінну середовища з назвою SERVERLESS_ACCESS_KEY
.
Витік через кодові репозиторії:
Хардкодинг або випадкове коммітування ключів доступу та ліцензійних ключів у системи контролю версій може призвести до несанкціонованого доступу.
Небезпечне зберігання:
Зберігання ключів у відкритому тексті в змінних середовища або конфігураційних файлах без належного шифрування підвищує ймовірність витоку.
Неправильне розповсюдження:
Обмін ключами через незахищені канали (наприклад, електронна пошта, чат) може призвести до перехоплення зловмисниками.
Відсутність ротації:
Нерегулярна ротація ключів подовжує період їхнього витоку, якщо ключі скомпрометовані.
Надмірні дозволи:
Ключі з широкими дозволами можуть бути використані для виконання несанкціонованих дій на кількох ресурсах.
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)