Требования, уровни соответствия, сертификация, практическое внедрение

PCI DSS: требования, уровни соответствия, сертификация и практическое внедрение. Стандарт безопасности платежных карт, соответствие требованиям.

PCI DSS - Стандарт безопасности индустрии платежных карт

Что такое PCI DSS?

Payment Card Industry Data Security Standard (PCI DSS) — это набор требований безопасности, разработанный крупнейшими платежными системами (Visa, MasterCard, American Express, Discover, JCB) для защиты данных держателей карт.

Ключевые особенности

  • Обязательный стандарт для всех организаций, обрабатывающих данные карт
  • 12 основных требований безопасности
  • 4 уровня соответствия в зависимости от объема транзакций
  • Ежегодная сертификация и регулярные проверки

Кому применяется PCI DSS?

Обязательное применение

  • Торговцы — принимающие платежи по картам
  • Сервис-провайдеры — обрабатывающие данные карт
  • Банки — выпускающие и обслуживающие карты
  • Любые организации — хранящие, передающие или обрабатывающие данные карт

Исключения

  • Организации не обрабатывающие данные карт
  • Только наличные расчеты
  • Только криптовалюты (не карты)

12 основных требований PCI DSS

1. Установка и поддержка файрвола

Защита периметра сети

Требования:

  • Установка файрвола между интернетом и внутренней сетью
  • Документирование всех правил файрвола
  • Регулярное обновление правил
  • Запрет прямого доступа из интернета к данным карт

Примеры реализации:

// Пример конфигурации файрвола для защиты данных карт
const firewallRules = {
  // Блокируем прямой доступ к базе данных с картами
  blockDirectDB: {
    source: "0.0.0.0/0",
    destination: "10.0.1.100:3306",
    action: "DENY",
  },

  // Разрешаем только HTTPS трафик
  allowHTTPS: {
    source: "0.0.0.0/0",
    destination: "10.0.1.10:443",
    action: "ALLOW",
  },

  // Блокируем неиспользуемые порты
  blockUnusedPorts: {
    source: "0.0.0.0/0",
    destination: "10.0.1.0/24",
    action: "DENY",
    ports: [21, 23, 135, 139, 445],
  },
};

2. Не использование паролей по умолчанию

Уникальные пароли для всех систем

Требования:

  • Изменение всех паролей по умолчанию
  • Уникальные пароли для каждой системы
  • Сложные пароли (минимум 8 символов)
  • Регулярная смена паролей

Примеры реализации:

// Генерация безопасных паролей для PCI DSS
const crypto = require("crypto");

function generatePCIPassword(length = 12) {
  const charset =
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*";
  let password = ";

  // Гарантируем наличие разных типов символов
  password += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[Math.floor(Math.random() * 26)];
  password += "abcdefghijklmnopqrstuvwxyz"[Math.floor(Math.random() * 26)];
  password += "0123456789"[Math.floor(Math.random() * 10)];
  password += "!@#$%^&*"[Math.floor(Math.random() * 8)];

  // Заполняем остальные символы
  for (let i = 4; i < length; i++) {
    password += charset[Math.floor(Math.random() * charset.length)];
  }

  // Перемешиваем символы
  return password
    .split(")
    .sort(() => Math.random() - 0.5)
    .join(");
}

// Проверка соответствия пароля требованиям PCI DSS
function validatePCIPassword(password) {
  const requirements = {
    minLength: password.length >= 8,
    hasUppercase: /[A-Z]/.test(password),
    hasLowercase: /[a-z]/.test(password),
    hasNumber: /\d/.test(password),
    hasSpecial: /[!@#$%^&*]/.test(password),
    noDefault: !isDefaultPassword(password),
  };

  return Object.values(requirements).every((req) => req === true);
}

3. Защита хранимых данных карт

Шифрование и защита данных

Требования:

  • Шифрование всех данных карт в покое
  • Удаление данных после истечения срока хранения
  • Ограничение доступа к данным
  • Маскирование PAN (Primary Account Number)

Примеры реализации:

// Шифрование данных карт для PCI DSS
const crypto = require("crypto");

class CardDataEncryption {
  constructor(masterKey) {
    this.masterKey = masterKey;
    this.algorithm = "aes-256-gcm";
  }

  // Шифрование номера карты
  encryptCardNumber(cardNumber) {
    const iv = crypto.randomBytes(16);
    const cipher = crypto.createCipher(this.algorithm, this.masterKey);
    cipher.setAAD(Buffer.from("card-number"));

    let encrypted = cipher.update(cardNumber, "utf8", "hex");
    encrypted += cipher.final("hex");

    const authTag = cipher.getAuthTag();

    return {
      encrypted: encrypted,
      iv: iv.toString("hex"),
      authTag: authTag.toString("hex"),
    };
  }

  // Расшифровка номера карты
  decryptCardNumber(encryptedData) {
    const decipher = crypto.createDecipher(this.algorithm, this.masterKey);
    decipher.setAAD(Buffer.from("card-number"));
    decipher.setAuthTag(Buffer.from(encryptedData.authTag, "hex"));

    let decrypted = decipher.update(encryptedData.encrypted, "hex", "utf8");
    decrypted += decipher.final("utf8");

    return decrypted;
  }

  // Маскирование PAN для отображения
  maskPAN(pan) {
    if (pan.length < 8) return pan;
    const firstFour = pan.substring(0, 4);
    const lastFour = pan.substring(pan.length - 4);
    const masked = "*".repeat(pan.length - 8);
    return `${firstFour}${masked}${lastFour}`;
  }
}

4. Шифрование передачи данных карт

Защита данных в передаче

Требования:

  • Шифрование всех передач данных карт
  • Использование TLS 1.2 или выше
  • Запрет незашифрованных передач
  • Валидация сертификатов

Примеры реализации:

// Настройка HTTPS для PCI DSS
const https = require("https");
const fs = require("fs");

// Конфигурация TLS для PCI DSS
const tlsOptions = {
  // Минимальная версия TLS 1.2
  minVersion: "TLSv1.2",

  // Поддерживаемые шифры
  ciphers: [
    "ECDHE-RSA-AES256-GCM-SHA384",
    "ECDHE-RSA-AES128-GCM-SHA256",
    "ECDHE-RSA-AES256-SHA384",
    "ECDHE-RSA-AES128-SHA256",
  ].join(":"),

  // Отключаем слабые протоколы
  honorCipherOrder: true,
  secureProtocol: "TLSv1_2_method",

  // Валидация сертификатов
  rejectUnauthorized: true,
  requestCert: true,
};

// Создание HTTPS сервера
const server = https.createServer(tlsOptions, (req, res) => {
  // Обработка запросов с данными карт
  if (req.url === "/payment") {
    // Логирование для аудита
    console.log(
      `PCI DSS Audit: ${new Date().toISOString()} - Payment request from ${
        req.connection.remoteAddress
      }`
    );

    // Обработка платежа
    processPayment(req, res);
  }
});

// Проверка безопасности соединения
function validateSecureConnection(req) {
  const isSecure = req.secure || req.headers["x-forwarded-proto"] === "https";
  const tlsVersion = req.connection.getProtocol();

  if (!isSecure) {
    throw new Error("PCI DSS Violation: Non-secure connection");
  }

  if (tlsVersion !== "TLSv1.2" && tlsVersion !== "TLSv1.3") {
    throw new Error("PCI DSS Violation: Weak TLS version");
  }

  return true;
}

5. Использование антивирусного ПО

Защита от вредоносного ПО

Требования:

  • Установка антивируса на все системы
  • Регулярное обновление сигнатур
  • Автоматическое сканирование
  • Логирование событий

Примеры реализации:

// Интеграция с антивирусом для PCI DSS
const { exec } = require("child_process");

class AntivirusIntegration {
  constructor(antivirusPath) {
    this.antivirusPath = antivirusPath;
    this.lastUpdate = null;
  }

  // Проверка файла на вирусы
  async scanFile(filePath) {
    return new Promise((resolve, reject) => {
      const command = `${this.antivirusPath} --scan "${filePath}"`;

      exec(command, (error, stdout, stderr) => {
        if (error) {
          reject(new Error(`Antivirus scan failed: ${error.message}`));
          return;
        }

        const result = {
          file: filePath,
          clean: !stdout.includes("Infected"),
          threats: this.parseThreats(stdout),
          timestamp: new Date().toISOString(),
        };

        // Логирование для PCI DSS аудита
        this.logScanResult(result);

        resolve(result);
      });
    });
  }

  // Обновление антивирусных сигнатур
  async updateSignatures() {
    return new Promise((resolve, reject) => {
      const command = `${this.antivirusPath} --update`;

      exec(command, (error, stdout, stderr) => {
        if (error) {
          reject(new Error(`Signature update failed: ${error.message}`));
          return;
        }

        this.lastUpdate = new Date().toISOString();
        console.log("PCI DSS: Antivirus signatures updated");
        resolve();
      });
    });
  }

  // Парсинг результатов сканирования
  parseThreats(output) {
    const threats = [];
    const lines = output.split("\n");

    for (const line of lines) {
      if (line.includes("Infected") || line.includes("Threat")) {
        const parts = line.split(":");
        if (parts.length >= 2) {
          threats.push({
            file: parts[0].trim(),
            threat: parts[1].trim(),
          });
        }
      }
    }

    return threats;
  }

  // Логирование результатов для аудита
  logScanResult(result) {
    const logEntry = {
      timestamp: result.timestamp,
      file: result.file,
      clean: result.clean,
      threats: result.threats,
      compliance: "PCI DSS Requirement 5",
    };

    console.log(JSON.stringify(logEntry));
  }
}

6. Разработка и поддержка безопасных систем

Безопасная разработка

Требования:

  • Безопасная разработка приложений
  • Тестирование на уязвимости
  • Обновление систем безопасности
  • Документирование процессов

Примеры реализации:

// Безопасная разработка для PCI DSS
class SecurePaymentProcessor {
  constructor() {
    this.validationRules = this.initializeValidationRules();
    this.securityHeaders = this.initializeSecurityHeaders();
  }

  // Инициализация правил валидации
  initializeValidationRules() {
    return {
      cardNumber: {
        pattern: /^[0-9]{13,19}$/,
        luhnCheck: true,
        required: true,
      },
      expiryDate: {
        pattern: /^(0[1-9]|1[0-2])\/([0-9]{2})$/,
        futureDate: true,
        required: true,
      },
      cvv: {
        pattern: /^[0-9]{3,4}$/,
        required: true,
      },
    };
  }

  // Инициализация заголовков безопасности
  initializeSecurityHeaders() {
    return {
      "Strict-Transport-Security": "max-age=31536000; includeSubDomains",
      "X-Content-Type-Options": "nosniff",
      "X-Frame-Options": "DENY",
      "X-XSS-Protection": "1; mode=block",
      "Content-Security-Policy": "default-src 'self'",
      "Referrer-Policy": "strict-origin-when-cross-origin",
    };
  }

  // Валидация данных карты
  validateCardData(cardData) {
    const errors = [];

    // Валидация номера карты
    if (!this.validateCardNumber(cardData.number)) {
      errors.push("Invalid card number");
    }

    // Валидация даты истечения
    if (!this.validateExpiryDate(cardData.expiry)) {
      errors.push("Invalid expiry date");
    }

    // Валидация CVV
    if (!this.validateCVV(cardData.cvv)) {
      errors.push("Invalid CVV");
    }

    return {
      valid: errors.length === 0,
      errors: errors,
    };
  }

  // Валидация номера карты с проверкой Луна
  validateCardNumber(number) {
    const rule = this.validationRules.cardNumber;

    if (!rule.pattern.test(number)) {
      return false;
    }

    if (rule.luhnCheck && !this.luhnCheck(number)) {
      return false;
    }

    return true;
  }

  // Алгоритм Луна для проверки номера карты
  luhnCheck(number) {
    let sum = 0;
    let isEven = false;

    for (let i = number.length - 1; i >= 0; i--) {
      let digit = parseInt(number.charAt(i));

      if (isEven) {
        digit *= 2;
        if (digit > 9) {
          digit -= 9;
        }
      }

      sum += digit;
      isEven = !isEven;
    }

    return sum % 10 === 0;
  }

  // Валидация даты истечения
  validateExpiryDate(expiry) {
    const rule = this.validationRules.expiryDate;

    if (!rule.pattern.test(expiry)) {
      return false;
    }

    if (rule.futureDate) {
      const [month, year] = expiry.split("/");
      const expiryDate = new Date(2000 + parseInt(year), parseInt(month) - 1);
      const now = new Date();

      if (expiryDate <= now) {
        return false;
      }
    }

    return true;
  }

  // Валидация CVV
  validateCVV(cvv) {
    const rule = this.validationRules.cvv;
    return rule.pattern.test(cvv);
  }
}

Уровни соответствия PCI DSS

Уровень 1: Более 6 млн транзакций в год

Самые строгие требования

  • Ежегодный аудит QSA (Qualified Security Assessor)
  • Ежеквартальное сканирование ASV (Approved Scanning Vendor)
  • Ежемесячное сканирование уязвимостей
  • Непрерывный мониторинг

Уровень 2: 1-6 млн транзакций в год

Строгие требования

  • Ежегодный самоаудит (SAQ)
  • Ежеквартальное сканирование ASV
  • Ежемесячное сканирование уязвимостей

Уровень 3: 20,000-1 млн транзакций в год

Стандартные требования

  • Ежегодный самоаудит (SAQ)
  • Ежеквартальное сканирование ASV

Уровень 4: Менее 20,000 транзакций в год

Базовые требования

  • Ежегодный самоаудит (SAQ)
  • Ежеквартальное сканирование ASV

Процесс сертификации

1. Подготовка к сертификации

  • Аудит текущего состояния
  • Выявление пробелов в соответствии
  • Планирование исправлений
  • Реализация мер безопасности

2. Самооценка (SAQ)

  • Заполнение анкеты самооценки
  • Документирование мер безопасности
  • Подготовка доказательств соответствия
  • Подача отчета

3. Аудит QSA (для уровня 1)

  • Выбор сертифицированного аудитора
  • Планирование аудита
  • Проведение аудита
  • Получение отчета о соответствии

4. Сканирование ASV

  • Выбор утвержденного сканера
  • Проведение сканирования
  • Исправление найденных уязвимостей
  • Повторное сканирование

Практические шаги по внедрению

1. Аудит текущего состояния

// Скрипт для аудита соответствия PCI DSS
class PCIDSSAudit {
  constructor() {
    this.requirements = this.initializeRequirements();
    this.findings = [];
  }

  // Инициализация требований PCI DSS
  initializeRequirements() {
    return {
      1: "Install and maintain a firewall configuration",
      2: "Do not use vendor-supplied defaults",
      3: "Protect stored cardholder data",
      4: "Encrypt transmission of cardholder data",
      5: "Use and regularly update anti-virus software",
      6: "Develop and maintain secure systems",
      7: "Restrict access by business need-to-know",
      8: "Assign a unique ID to each person",
      9: "Restrict physical access to cardholder data",
      10: "Track and monitor all access",
      11: "Regularly test security systems",
      12: "Maintain a policy that addresses information security",
    };
  }

  // Проверка соответствия требованию 1
  async checkFirewallConfiguration() {
    const findings = [];

    // Проверка наличия файрвола
    const firewallStatus = await this.checkFirewallStatus();
    if (!firewallStatus.active) {
      findings.push({
        requirement: "1.1",
        severity: "HIGH",
        description: "Firewall not configured or not active",
        recommendation: "Install and configure firewall",
      });
    }

    // Проверка правил файрвола
    const rules = await this.getFirewallRules();
    if (rules.length === 0) {
      findings.push({
        requirement: "1.2",
        severity: "HIGH",
        description: "No firewall rules configured",
        recommendation: "Configure firewall rules to protect cardholder data",
      });
    }

    return findings;
  }

  // Проверка соответствия требованию 3
  async checkDataProtection() {
    const findings = [];

    // Проверка шифрования данных
    const encryptionStatus = await this.checkDataEncryption();
    if (!encryptionStatus.encrypted) {
      findings.push({
        requirement: "3.4",
        severity: "CRITICAL",
        description: "Cardholder data not encrypted",
        recommendation: "Implement encryption for all stored cardholder data",
      });
    }

    // Проверка маскирования PAN
    const maskingStatus = await this.checkPANMasking();
    if (!maskingStatus.masked) {
      findings.push({
        requirement: "3.3",
        severity: "HIGH",
        description: "PAN not masked when displayed",
        recommendation: "Implement PAN masking for display purposes",
      });
    }

    return findings;
  }

  // Проверка соответствия требованию 10
  async checkLoggingAndMonitoring() {
    const findings = [];

    // Проверка логирования
    const loggingStatus = await this.checkLoggingConfiguration();
    if (!loggingStatus.enabled) {
      findings.push({
        requirement: "10.1",
        severity: "HIGH",
        description: "Logging not enabled",
        recommendation: "Enable logging for all system components",
      });
    }

    // Проверка мониторинга
    const monitoringStatus = await this.checkMonitoringConfiguration();
    if (!monitoringStatus.enabled) {
      findings.push({
        requirement: "10.6",
        severity: "HIGH",
        description: "Monitoring not configured",
        recommendation: "Implement monitoring and alerting",
      });
    }

    return findings;
  }

  // Проверка статуса файрвола
  async checkFirewallStatus() {
    // Реализация проверки статуса файрвола
    return { active: true };
  }

  // Получение правил файрвола
  async getFirewallRules() {
    // Реализация получения правил файрвола
    return [];
  }

  // Проверка шифрования данных
  async checkDataEncryption() {
    // Реализация проверки шифрования
    return { encrypted: false };
  }

  // Проверка маскирования PAN
  async checkPANMasking() {
    // Реализация проверки маскирования
    return { masked: false };
  }

  // Проверка конфигурации логирования
  async checkLoggingConfiguration() {
    // Реализация проверки логирования
    return { enabled: false };
  }

  // Проверка конфигурации мониторинга
  async checkMonitoringConfiguration() {
    // Реализация проверки мониторинга
    return { enabled: false };
  }
}

2. Внедрение мер безопасности

  • Настройка файрвола и сетевой безопасности
  • Внедрение шифрования данных
  • Настройка логирования и мониторинга
  • Обновление систем и приложений

3. Документирование процессов

  • Политики безопасности
  • Процедуры обработки данных
  • Инструкции для персонала
  • Планы реагирования на инциденты

4. Обучение персонала

  • Осведомленность о требованиях PCI DSS
  • Безопасная обработка данных карт
  • Процедуры реагирования на инциденты
  • Регулярное обновление знаний

Штрафы и последствия нарушений

Финансовые штрафы

  • $5,000 - $100,000 за нарушение
  • $50 - $90 за каждую скомпрометированную карту
  • Потеря права принимать карты
  • Компенсация ущерба держателям карт

Репутационные потери

  • Публичное разглашение нарушений
  • Потеря доверия клиентов
  • Снижение объема продаж
  • Правовые последствия

Заключение

PCI DSS — это критически важный стандарт безопасности для всех организаций, работающих с платежными картами. Соблюдение требований PCI DSS:

  • Защищает данные держателей карт
  • Снижает риски финансовых потерь
  • Повышает доверие клиентов
  • Обеспечивает соответствие требованиям

Помните: PCI DSS — это не разовое мероприятие, а постоянный процесс обеспечения безопасности. Успех зависит от системного подхода, правильного понимания требований и эффективного внедрения мер безопасности.


Совет: Начните с аудита текущего состояния, определите уровень соответствия и разработайте план поэтапного внедрения требований PCI DSS. Не пытайтесь внедрить все сразу — это может привести к хаосу в организации.