Аудитор правил межсетевого экрана

Проверка списка правил ACL на избыточность, затенение (shadowing) и противоречия. Правила обрабатываются сверху вниз, побеждает первое совпавшее.

Firewall ACL Shadowing Курсовая 9

Список правил

№ДействиеПротокол SrcSportDstDport Комментарий

Результаты аудита

Нажмите «Проверить», чтобы запустить анализ.

Что проверяется

ТипОпределениеПоследствие
Избыточность Правило полностью покрыто более ранним правилом с тем же действием Мёртвый код, путаница в поддержке
Затенение Правило покрыто более ранним с противоположным действием Правило никогда не сработает — это ошибка или потенциальная уязвимость
Достижимость Существует хотя бы один пакет, который попадёт в правило Если нет — правило бесполезно
Проверка покрытия
// Правило A покрывает B, если каждое поле A шире или равно полю B
function fieldCovers(a, b) {
  if (a === 'any') return true;    // any покрывает всё
  if (b === 'any') return false;   // конкретное значение не покрывает any
  return String(a) === String(b);
}

function covers(A, B) {
  return fieldCovers(A.proto, B.proto)
      && fieldCovers(A.src,   B.src)
      && fieldCovers(A.sport, B.sport)
      && fieldCovers(A.dst,   B.dst)
      && fieldCovers(A.dport, B.dport);
}

Задание

  1. Найдите в примере правило, которое никогда не срабатывает. Объясните, почему.
  2. Добавьте правило allow tcp any any 443 в конец списка и посмотрите, как изменится вердикт.
  3. Постройте политику из 10 правил для веб-сервера, где нет ни избыточных, ни затенённых строк.
  4. Объясните, почему порядок правил критичен для безопасности: приведите пример, когда перестановка двух строк открывает доступ нарушителю.