serilog - ведення журналу в c# - конфігурація serilog - безпечне ведення журналу

Пастки Serilog: коли логування стає витоком даних

Розуміння ризиків логування Serilog та C# у продакшені

Serilog — один із найпопулярніших фреймворків для логування на C#, відомий своєю гнучкістю, підтримкою структурованих даних та потужними приймачами. Але ця ж гнучкість створює приховані ризики. Надто детальна або неправильно налаштована конфігурація Serilog може ненавмисно розкрити:

  • Ключі або токени API, записані в журналах винятків
  • Внутрішні шляхи до файлів або трасування стека, що розкривають деталі архітектури
  • Конфіденційні корисні навантаження запитів/відповідей від API

Те, що здається корисними даними для налагодження під час розробки, може стати витоком даних у продакшені.
Коли рівні логування C# встановлено занадто високими (Verbose or Debug), вони можуть захоплювати секрети зі змінних середовища або серіалізованих об'єктів. Цей ризик зростає експоненціально в хмарних або багатокористувацьких середовищах, де журнали централізовані та спільно використовуються кількома службами.

Поширені пастки серилогів, що призводять до розкриття даних

Давайте розглянемо найпоширеніші помилки конфігурації та використання Serilog, які призводять до витоку даних у реальних .NET-проектах.

1. Реєстрація конфіденційних даних за замовчуванням

⚠️Небезпечний приклад, лише для освітніх цілей. Не використовувати у продакшені.

/ Insecure Serilog usage Log.Information("User logged in with token {token}", user.Token); 

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

Безпечна версія:

// Secure: never log tokens or secrets Log.Information("User {userId} logged in successfully", user.Id); 

Навчальна примітка: Фільтруйте або маскуйте конфіденційні поля перед записом у журнали.

2. Надмірно детальне ведення журналу у продакшені

Розробники часто йдуть Мінімальний рівень встановлений в Verbose у виробничій конфігурації Serilog:

⚠️Небезпечний приклад, лише для освітніх цілей:

// Insecure Serilog configuration .LogLevel.MinimumLevel.Verbose();  

Це може фіксувати трасування стека, необроблені корисні навантаження або рядки підключення.

Безпечна версія:

// Secure Serilog configuration .MinimumLevel.Information() .Enrich.FromLogContext(); 

Навчальна примітка: Встановіть рівні журналювання на Інформація або вище у виробництві.

3. Нефільтровані дані запитів та відповідей

Деякі розробники налаштовують проміжне програмне забезпечення Serilog для реєстрації повних тіл запитів/відповідей:

⚠️Небезпечний приклад, лише для освітніх цілей:

// Insecure example app.UseSerilogRequestLogging(); 

Хоча це зручно, це може виводити конфіденційні заголовки або корисні навантаження JSON у журнали.

Безпечний підхід полягає у впровадженні користувацьких фільтрів:

app.UseSerilogRequestLogging(options => {     options.MessageTemplate = "Handled {RequestPath}"; }); 

Навчальна примітка: Завжди очищуйте журнал запитів та редагуйте заголовки, такі як Авторизація.

3. Небезпечні методи логування в C# CI/CD і Хмара Pipelines

Вхід у систему CI/CD так само ризиковано, як і у виробництвіКоли розробники використовують ведення журналу C# під час збірки або розгортання, секрети та облікові дані можуть потрапляти в журнали.

⚠️Небезпечний приклад, лише для освітніх цілей:

# .github/workflows/deploy.yml - name: Deploy app   run: dotnet publish /p:ApiKey=$DEPLOY_KEY   env:     DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }} # Never expose real tokens, credentials or internal URLs in pipelines 

Якщо pipeline включає в себе a Log.Information() виклик для друку значень конфігурації, Serilog може зареєструвати DEPLOY_KEY ненавмисно.

Безпечна версія:

- name: Deploy app securely   run: dotnet publish /p:Environment=Production  

Навчальна примітка: Ніколи не записуйте в журнал та не виводьте секрети зі змінних середовища.

Централізовані платформи логування посилюють цю проблему. Коли логи з кількох сервісів об'єднуються, одна неправильно налаштована конфігурація Serilog може розкрити секрети з кількох середовищ.

Безпечне налаштування серілогу та безпечні стратегії ведення журналу

Щоб безпечно налаштувати Serilog, розробники повинні розглядати журнали як частину своїх поза безпеки, а не лише як утиліти налагодження. Нижче наведено практичний контрольний список для запобігання витокам у вашому налаштуванні журналювання C#.

Контрольний список безпечного серілогу

  • Установка Мінімальний рівень до Інформація або вище у виробництві.
  • Використовуйте фільтри, щоб маскувати або пропускати конфіденційні властивості (наприклад, паролі, токени, заголовки).
  • Уникайте запису цілих об'єктів, ідентифікаторів журналів, позначок часу або хешованих посилань.
  • Регулярно ротуйте та шифруйте файли журналів.
  • Використовуйте безпечні приймачі (кінцеві точки HTTPS, захищене сховище або хмарні служби журналів).
  • Застосовуйте обмеження утримання, щоб уникнути надмірного впливу.

Перевірте конфігурацію Serilog за допомогою автоматичного сканування перед розгортанням.

Приклад безпечної фільтрації:

var logger = new LoggerConfiguration()     .Filter.ByExcluding(e => e.MessageTemplate.Text.Contains("token"))     .WriteTo.File("logs/app.log", rollingInterval: RollingInterval.Day)     .CreateLogger(); 

Навчальна примітка: Використовуйте фільтри та ковзні інтервали, щоб зменшити ризик витоку даних.

Автоматизація перевірки журналів та секретного сканування в DevSecOps

Сучасні DevSecOps pipelines має автоматично перевіряти конфігурацію Serilog та вміст журналу перед об'єднанням або розгортанням. Автоматизація допомагає виявляти небезпечні шаблони логування C# та витік секретів на ранній стадії.

Приклад інтеграції:

- name: Run log security validation   run: |     dotnet test --filter Category=LoggingSecurity     xygeni validate --rules logging # Never expose real tokens or internal URLs in pipelines 

Це забезпечує:

  • Жоден журнал не містить облікових даних чи токенів.
  • Рівень логування відповідає середовищу.
  • Фільтри налаштовуються в кожному профілі Serilog.

By включення сканування журналів до CI/CD, команди усувають одну з найпоширеніших, але недооцінених причин витоку даних.

Виявлення таємного розкриття за допомогою Xygeni Secrets Security

Ксігені Секрети безпеки виходить за рамки базового зіставлення регулярних виразів або шаблонів, він виконує контекстний аналіз коду журналювання Serilog та C# для виявлення небезпечних конфігурацій та прихованих вразливостей у репозиторіях, збірках та середовищах.

Ксігені виявляє:

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

Приклад команди:

xygeni scan --detect secrets --context serilog 

На відміну від пасивних сканерів, Ксігені перевіряє поведінку журналювання, співвідносить результати з метаданими розгортання та автоматично застосовує політики в CI/CD.
Якщо виявлено небезпечні шаблони логування C# або Serilog, це блокує commit or pipeline етап, перетворюючи гігієну ведення журналу на проактивний захист DevSecOps, який запобігає викриттю даних до того, як код потрапить у продакшн.

Освітня примітка: інтегрувати Ксігені pre-commit hooks та pipeline правоохоронні заходи для раннього виявлення секретних викриттів та автоматичного припинення небезпечних конфігурацій.

Безпечне ведення журналу є частиною безпечного кодування

Ведення журналу має покращити спостережуваність, а не послабити безпеку. Неправильно налаштовано Серілог або небезпечний Логування на C# може непомітно розкривати облікові дані, дані середовища або внутрішні кінцеві точки.

Щоб створити безпечніші системи:

  • Пригощайте свої Серілог конфігурацію як частину вашої моделі загроз.
  • Застосовуйте фільтри, обертайте журнали та керуйте рівнями деталізації.
  • Перевіряти конфігурації за допомогою автоматизованих CI/CD перевірки.
  • Скористайтеся кнопкою Xygeni Secrets Security для постійного виявлення, перевірки та блокування небезпечних шаблонів.

Ксігені виявляє незахищені налаштування журналювання, перевіряє ризики розкриття секретних даних та застосовує автоматичне забезпечення дотримання правил CI/CD pipelineс, перетворюючи безпечний вхід у систему на постійна практика DevSecOps який захищає ваш код, облікові дані та дані за допомогою задуму.

інструменти-для-аналізу-складу-програмного-засобу-sca
Визначте пріоритети, усуньте та захистіть ризики, пов'язані з програмним забезпеченням
Отримайте свій безкоштовний обліковий запис.
Не потрібна кредитна картка.

Забезпечте розробку та доставку програмного забезпечення

з пакетом продуктів Xygeni