Gelişmiş Python Dosya Sistemi Tarama Scripti

Giriş
Siber güvenlikte dosya sistemi tarama, sistemlerde bulunan hassas veya zafiyetli dosyaları tespit etmek için kritik bir çalışmadır. Hassas dosyaların yetkisiz erişime açık olup olmadığını kontrol etmek, sistemlerin güvenliğini sağlamak adına önemlidir. Bu makalede, Python kullanarak sistemdeki hassas dosyaları tespit eden gelişmiş bir dosya tarama scripti hazırlayacağız.
Kullanılan Teknolojiler:
- Python (os, hashlib, logging, argparse)
- Dosya boyutu, izinleri ve ön tanımlı zafiyetli dosya listeleri
Script Amaçları:
- Belirli dizinleri tarama ve alt dizinlerdeki dosyaları kontrol etme.
- Hassas dosyaları (parola dosyaları, yedekleme dosyaları vb.) tespit etme.
- Dosya izinlerini kontrol ederek zafiyetli izinleri raporlama.
- Dosya içeriğini hash’leyerek MD5 ile kontrol sağlama.
- Gelişmiş log sistemiyle detaylı raporlama.
Script Kodu
Aşağıdaki Python scripti, hedef sistemin dosya yapısını tarayarak hassas dosyalarını tespit eder ve raporlar.
import os
import hashlib
import argparse
import logging
from stat import S_IMODE, S_ISREG
# Hassas dosya isimleri listesi
SENSITIVE_FILES = [
'password.txt', 'passwd', 'shadow', 'config.php', '.env', 'backup.sql',
'database.yml', 'secrets.txt', 'id_rsa', 'id_rsa.pub', '.htpasswd'
]
# Loglama sistemi kurulum
logging.basicConfig(
filename='file_scanner.log',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
# Dosyanın hash'ini hesaplayan fonksiyon
def get_file_hash(filepath):
hash_md5 = hashlib.md5()
try:
with open(filepath, 'rb') as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_md5.update(chunk)
return hash_md5.hexdigest()
except Exception as e:
logging.error(f"Hash hesaplanırken hata: {filepath} - {e}")
return None
# Dosya izinlerini kontrol eden fonksiyon
def check_file_permissions(filepath):
try:
mode = S_IMODE(os.stat(filepath).st_mode)
if mode & 0o777 in [0o777, 0o666]:
return True # Zafiyetli izinler (okuma/yazma herkese açık)
except Exception as e:
logging.error(f"İzin kontrolü hatası: {filepath} - {e}")
return False
# Ana tarama fonksiyonu
def scan_directory(directory):
logging.info(f"Taramaya başlanıyor: {directory}")
for root, _, files in os.walk(directory):
for filename in files:
filepath = os.path.join(root, filename)
# Hassas dosya kontrolü
if filename in SENSITIVE_FILES:
logging.warning(f"Hassas dosya bulundu: {filepath}")
print(f"[!] Hassas dosya: {filepath}")
# Dosya izin kontrolü
if check_file_permissions(filepath):
logging.warning(f"Zafiyetli izinler: {filepath}")
print(f"[!] Zafiyetli izinler: {filepath}")
# Hash hesaplama
file_hash = get_file_hash(filepath)
if file_hash:
logging.info(f"Hash hesaplandı: {filepath} - MD5: {file_hash}")
print(f"[*] {filepath} - Hash: {file_hash}")
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Dosya Sistemi Tarama Scripti")
parser.add_argument('target', type=str, help="Taranacak dizin yolu")
args = parser.parse_args()
if not os.path.isdir(args.target):
print("Geçerli bir dizin belirtiniz.")
exit(1)
try:
scan_directory(args.target)
print("Tarama tamamlandı! Rapor: file_scanner.log")
except KeyboardInterrupt:
print("Tarama iptal edildi.")
except Exception as e:
logging.error(f"Bilinmeyen hata: {e}")
print(f"Hata oluştu: {e}")
Script Açıklamaları:
- Hassas Dosya Listesi:
SENSITIVE_FILES
listesinde önceden tanımlı hassas dosya adları bulunur. Tarama esnasında bu dosyaların varlığı kontrol edilir. - Hash Hesaplama: Dosya içeriklerini hash fonksiyonuyla (MD5) kontrol eder ve raporlar. Hash değişiklikleri, dosyanın manipüle edilip edilmediğini tespit etmeye yardımcı olur.
- Dosya İzin Kontrolü: Zafiyetli izinlere sahip dosyalar (herkese okuma ve yazma izinli) tespit edilir.
- Loglama Sistemi: Bütün tespitler
file_scanner.log
dosyasına kaydedilir. - Argument Parsing: Script, bir hedef dizin alır ve o dizin üzerinde tarama yapar.
Kullanım
Komut satırından scripti çalıştırmak için:
python file_scanner.py /hedef/dizin/yolu
Örnek Çıktı:
[!] Hassas dosya: /var/www/html/config.php
[!] Zafiyetli izinler: /home/user/backup.sql
[*] /home/user/secrets.txt - Hash: d41d8cd98f00b204e9800998ecf8427e
Tarama tamamlandı! Rapor: file_scanner.log
Sonuç
Bu gelişmiş Python scripti, sistemlerde hassas dosyaları ve zafiyetli izinleri tespit etmek için kullanılabilir. Özellikle siber güvenlik denetimlerinde ve sistem güvenliği sağlamada etkili bir aracıdır. Geliştirerek özellikle farklı dosya içerik analizleri veya uzaktan tarama yetenekleri ekleyebilirsiniz.