Към съдържанието
N1
Legacy · сигурност · одитна следа

Сигурност на on-premise Bitrix24 и одитна следа по изискванията на регулатора

Клиент: Финансова компания, NDA Категория: Legacy Стек: PHP 8, Bitrix24 D7, .env, RSA-OAEP (WebCrypto), syslog, cron, gzip, JavaScript Срок: около месец
Проблем

On-premise Bitrix24 на финансовата компания с години обрастваше със скриптове: част от тях при анонимна заявка даваха администраторска сесия, API пропускаше заявки без токен, достъпите стояха в кода, а логовете с ИИН и телефони се трупаха без ротация. Изискванията на регулатора на финансовия пазар за одитна следа при това не се изпълняваха.

Ограничения

Продукцията не може да се спира, от текущото поведение зависят десетки интеграции; одитът трябва да се включва с флагове с безопасни стойности по подразбиране, а личните данни не бива да попадат нито в отговорите, нито в логовете.

Какво направих
  • Затворени са 6 места, даващи администраторска сесия при анонимна заявка, и заобикалянето на автентикацията в 6 API endpoint-а; stack trace е премахнат от отговорите
  • Анонимните endpoint-и получиха rate limit, ИИН се валидира преди платените външни извиквания; затворени са IDOR и CSRF в работните интерфейси
  • Паролата във формата за вход се криптира в браузъра (RSA-OAEP, ключ 4096 бита); около 50 хардкоднати достъпа са изнесени в .env
  • Одитна следа зад флагове: неуспешни входове, дневник на API обръщенията, копие в syslog; ежедневен наблюдател за ротацията на логовете и за регресия на задължителната 2FA
  • Логерът маскира ИИН, телефони и карти; ротация 90 дни плюс архив 400 дни; фалшивото маскиране на хешове — от 5,1% до 0% върху 200 000 стойности
  • Преглед на логове с графики и търсене по id на заявката; health API улавя скок на грешките спрямо медианата, тишина и спряла ротация
Архитектура
Входни точки на портала и API → Автентикация, лимити, CSRF → Логер с маскиране на лични данни → Ротация и архив → Преглед на логове и health API
Резултат

Натрупаните логове са архивирани: 6344 файла с обем 2041 МБ са компресирани в архив от 120 МБ с контролни суми, директорията local/ намаля от 2,6 ГБ на 578 МБ. Критичните пропуски в достъпа са затворени, а в логовете се вижда инцидентът, а не шумът.

Какво може да се преизползва
Логер с маскиране на лични данни и защита на хешовете Ротация на логове с архив и наблюдател Health API за логове: скок спрямо медианата и тишина