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()
};
}
}