Software and Data Integrity (Yazılım ve Veri Bütünlüğü)

Genel Bakış

Bu güvenlik açığı, yazılım güncellemelerinin, kritik verilerin ve CI/CD süreçlerinin güvenliğinin sağlanamamasından kaynaklanır. Yani, yazılım ve verilerin bütünlüğünün korunamaması durumunda ortaya çıkar.

Yaygın Örnekler

1. Insecure Update Mechanism (Güvensiz Güncelleme Mekanizması)

Örnek: Yazılım güncellemelerinin doğrulanmadan uygulanması.

// Kötü örnek
async function updateSoftware(url) {
    const response = await fetch(url);
    const update = await response.json();
    await installUpdate(update);
}

// İyi örnek
class UpdateManager {
    async updateSoftware(url) {
        const response = await fetch(url);
        const update = await response.json();
        
        // İmza doğrulama
        const isValid = await this.verifySignature(update);
        if (!isValid) {
            throw new Error('Geçersiz güncelleme imzası');
        }
        
        // Hash doğrulama
        const hashValid = await this.verifyHash(update);
        if (!hashValid) {
            throw new Error('Geçersiz güncelleme hash\'i');
        }
        
        await this.installUpdate(update);
    }
}

2. Data Integrity Check (Veri Bütünlüğü Kontrolü)

Örnek: Kullanıcı verilerinin bütünlüğünün kontrol edilmemesi.

// Kötü örnek
async function updateUserData(userId, data) {
    await db.users.update(userId, data);
}

// İyi örnek
class DataIntegrityManager {
    async updateUserData(userId, data) {
        // Veri doğrulama
        this.validateData(data);
        
        // Veri bütünlüğü kontrolü
        const currentData = await this.getUserData(userId);
        const integrityCheck = await this.checkDataIntegrity(currentData, data);
        if (!integrityCheck) {
            throw new Error('Veri bütünlüğü ihlali');
        }
        
        // Güncelleme
        await this.updateData(userId, data);
        
        // Denetim kaydı
        await this.auditLog.update(userId, data);
    }
}

Korunma Yöntemleri

  • Dijital imza doğrulaması yapın
  • Güvenli güncelleme mekanizmaları kullanın
  • Veri bütünlüğü kontrolleri uygulayın
  • CI/CD süreçlerini güvenli hale getirin
  • Denetim kayıtları tutun

Örnek Kod

Secure Data Integrity Example (Güvenli Veri Bütünlüğü Örneği)

class IntegrityManager {
    constructor() {
        this.crypto = require('crypto');
        this.validator = new DataValidator();
    }

    async verifyUpdate(update) {
        // İmza doğrulama
        const signature = update.signature;
        const isValid = await this.verifySignature(update.data, signature);
        if (!isValid) {
            throw new Error('Geçersiz imza');
        }

        // Hash doğrulama
        const hash = this.calculateHash(update.data);
        if (hash !== update.hash) {
            throw new Error('Hash doğrulaması başarısız');
        }

        // Veri doğrulama
        const isValidData = this.validator.validate(update.data);
        if (!isValidData) {
            throw new Error('Geçersiz veri formatı');
        }

        return true;
    }

    async processData(data) {
        // Veri bütünlüğü kontrolü
        const integrityCheck = await this.checkIntegrity(data);
        if (!integrityCheck) {
            throw new Error('Veri bütünlüğü ihlali');
        }

        // Veri işleme
        const processedData = await this.process(data);
        
        // Yeni hash oluştur
        const newHash = this.calculateHash(processedData);
        
        return {
            data: processedData,
            hash: newHash,
            timestamp: Date.now()
        };
    }
}