Speicherung von Dateien mit sensiblen Daten unter dem FTP-Root
Beschreibung
Speicherung von Dateien mit sensiblen Daten unter dem FTP-Root ist eine Schwachstelle, die auftritt, wenn ein Produkt sensible Daten in Dateien speichert, die sich im FTP-Server-Root-Verzeichnis befinden, ohne ausreichende Zugriffskontrollen zu implementieren. Ähnlich wie bei der Web-Root-Offenlegung ist das FTP-Root das Basisverzeichnis, aus dem ein FTP-Server Dateien an verbindende Clients ausliefert. Dateien, die in diesem Verzeichnis oder seinen Unterverzeichnissen platziert werden, können für FTP-Benutzer zugänglich sein, einschließlich anonymer Benutzer, wenn anonymer FTP-Zugriff aktiviert ist. Diese Schwachstelle ist besonders besorgniserregend, weil FTP-Server historisch erfordern, dass Passwortdateien und Konfigurationsdaten aufgrund von Chroot-Jail-Implementierungen unter dem FTP-Root liegen, was inhärente Konflikte zwischen Sicherheitsisolation und Datenschutzanforderungen erzeugt.
Risiko
Die Speicherung sensibler Daten unter dem FTP-Root erzeugt erhebliche Sicherheitsrisiken, besonders in Umgebungen, die anonymen FTP-Zugriff unterstützen. Datenbankdateien, Konfigurationsdateien mit Anmeldedaten, Backup-Archive und Logdateien werden für jeden Benutzer zugänglich, der eine FTP-Verbindung herstellen kann. Anonymes FTP, das für Software-Distribution und öffentliches Filesharing immer noch üblich ist, ermöglicht vollständig unauthentifizierten Zugriff auf offengelegte sensible Dateien. Selbst in authentifizierten FTP-Szenarien können Benutzer breiteren Dateizugriff als beabsichtigt haben, wenn Verzeichnisberechtigungen falsch konfiguriert sind. Das Risiko wird durch den Mangel an Verschlüsselung bei Standard-FTP verstärkt, was bedeutet, dass sensible Dateien, die über FTP heruntergeladen werden, während der Übertragung abgefangen werden können. Automatisierte Scanning-Tools durchsuchen routinemäßig FTP-Server nach sensiblen Dateien, und offengelegte Anmeldedaten werden schnell für weitere Angriffe geerntet.
Lösung
Speichern Sie alle sensiblen Daten außerhalb des FTP-Root-Verzeichnisses an Orten, die nicht über FTP-Verbindungen zugänglich sind. Konfigurieren Sie den FTP-Server, um Verzeichnistraversierung einzuschränken und den Zugriff auf bestimmte Unterverzeichnisse zu beschränken. Wenn sensible Dateien aufgrund von Chroot-Anforderungen unter dem FTP-Root sein müssen, implementieren Sie strenge Dateiberechtigungen, die den Zugriff nur auf den FTP-Daemon-Benutzer beschränken. Deaktivieren Sie anonymen FTP-Zugriff, es sei denn, er ist absolut erforderlich, und wenn aktiviert, stellen Sie sicher, dass anonyme Benutzer nicht auf Verzeichnisse mit sensiblen Daten zugreifen können. Verwenden Sie SFTP oder FTPS anstelle von Klartext-FTP, um Daten während der Übertragung zu schützen. Überprüfen Sie regelmäßig FTP-zugängliche Verzeichnisse auf sensible Dateien. Erwägen Sie containerisierte FTP-Bereitstellungen, die das Dateisystem von sensiblen Anwendungsdaten isolieren.
Häufige Auswirkungen
| Auswirkung | Details |
|---|---|
| Vertraulichkeit | Bereich: Vertraulichkeit Angreifer mit FTP-Zugriff können sensible Anwendungsdaten lesen, einschließlich Konfigurationsdateien, Datenbankinhalte, Anmeldedaten und persönliche Informationen, die unter dem FTP-Root-Verzeichnis gespeichert sind. |
Beispielcode
Anfällige Konfiguration (Verzeichnisstruktur)
Die folgende Konfiguration demonstriert ein anfälliges FTP-Server-Setup:
/var/ftp/ # FTP-Root (vsftpd chroot)
├── pub/ # Öffentliche Downloads - beabsichtigt
│ ├── software/
│ └── documentation/
├── incoming/ # Upload-Verzeichnis - beabsichtigt
├── config/ # ANFÄLLIG: Sensible Konfiguration
│ ├── database.conf # DB-Anmeldedaten offengelegt
│ └── app.ini # API-Schlüssel offengelegt
├── backups/ # ANFÄLLIG: Backup-Dateien
│ ├── db_dump_2024.sql # Vollständiger Datenbank-Dump
│ └── users.tar.gz # Benutzerdaten-Backup
├── .passwd # ANFÄLLIG: FTP-Passwortdatei
├── .htpasswd # ANFÄLLIG: HTTP-Auth-Datei
└── logs/ # ANFÄLLIG: Logdateien
└── access.log # Kann sensible Daten enthalten
# /etc/vsftpd.conf - Unsichere Konfiguration
anonymous_enable=YES
anon_root=/var/ftp
local_enable=YES
write_enable=YES
# Keine Verzeichnisbeschränkungen konfiguriert
# Alle Dateien unter /var/ftp für anonyme Benutzer zugänglich
# Angreifer-Ausnutzung
$ ftp [email protected]
ftp> cd config
ftp> get database.conf
ftp> cd ../backups
ftp> get db_dump_2024.sql
ftp> cd ..
ftp> get .passwd
Korrigierte Konfiguration (Verzeichnisstruktur)
/var/ # System-Root
├── ftp/ # FTP-Root (nur öffentlich)
│ ├── pub/ # Öffentliche Downloads
│ │ ├── software/
│ │ └── documentation/
│ └── incoming/ # Uploads (nur Schreiben)
│
├── app/ # SICHER: Außerhalb FTP-Root
│ ├── config/
│ │ ├── database.conf
│ │ └── app.ini
│ └── data/
│ └── database.db
│
├── backups/ # SICHER: Außerhalb FTP-Root
│ └── db_dump_2024.sql
│
└── log/ # SICHER: Außerhalb FTP-Root
└── app/
└── access.log
# /etc/vsftpd.conf - Sichere Konfiguration
# Anonymen Zugriff deaktivieren, es sei denn erforderlich
anonymous_enable=NO
# Falls anonym benötigt, stark einschränken
# anonymous_enable=YES
# anon_root=/var/ftp/pub
# anon_upload_enable=NO
# anon_mkdir_write_enable=NO
# Authentifizierte Benutzer chrooten
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
# Lokale Benutzereinstellungen
local_enable=YES
local_root=/var/ftp
# Auf bestimmtes Verzeichnis beschränken
user_sub_token=$USER
local_root=/var/ftp/users/$USER
# Verzeichnistraversierung verhindern
allow_writeable_chroot=NO
chmod_enable=NO
# FTPS für Verschlüsselung verwenden
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
# Logging für Audit
xferlog_enable=YES
xferlog_std_format=NO
log_ftp_protocol=YES
# Richtige Berechtigungen für FTP-Verzeichnisse setzen
chmod 755 /var/ftp/pub
chmod 1733 /var/ftp/incoming # Sticky-Bit + nur Schreiben für andere
# Sicherstellen, dass sensible Verzeichnisse nicht unter FTP-Root sind
chmod 700 /var/app/config
chown app:app /var/app/config
# Falls Passwortdatei im FTP-Root sein muss (Chroot-Anforderung)
chmod 600 /var/ftp/.passwd
chown root:root /var/ftp/.passwd
# Anwendungscode: Dateien außerhalb FTP-Root speichern
import os
class SecureFileStorage:
# Niemals unter FTP-Root speichern
FTP_ROOT = '/var/ftp'
APP_DATA = '/var/app/data'
BACKUP_DIR = '/var/backups'
def store_config(self, config_data):
"""Konfiguration außerhalb FTP-Root speichern"""
config_path = os.path.join(self.APP_DATA, 'config.json')
# Verifizieren, dass Pfad NICHT unter FTP-Root ist
assert not config_path.startswith(self.FTP_ROOT), \
"Konfiguration darf nicht unter FTP-Root gespeichert werden"
with open(config_path, 'w') as f:
f.write(config_data)
os.chmod(config_path, 0o600)
def create_backup(self, backup_data):
"""Backup außerhalb FTP-Root erstellen"""
backup_path = os.path.join(self.BACKUP_DIR, 'backup.tar.gz')
assert not backup_path.startswith(self.FTP_ROOT), \
"Backups dürfen nicht unter FTP-Root gespeichert werden"
# Backup erstellen...
Die Korrektur speichert alle sensiblen Daten außerhalb des FTP-Roots, konfiguriert strenge Zugriffskontrollen, verwendet Chroot-Isolation und aktiviert optional FTPS-Verschlüsselung.
Ausgenutzt in der Praxis
Anonyme FTP-Anmeldedaten-Offenlegung (Mehrere Organisationen, 1990er-2000er)
Während der frühen Internet-Ära legten zahlreiche Organisationen Passwortdateien, Datenbank-Dumps und Konfigurationsdateien durch falsch konfigurierte anonyme FTP-Server offen. Angreifer verwendeten einfache FTP-Clients, um Verzeichnisse zu enumerieren und sensible Dateien herunterzuladen. Der Chaos Computer Club demonstrierte bekanntermaßen das Herunterladen klassifizierter Dokumente von Regierungs-FTP-Servern, die versehentlich sensible Verzeichnisse offengelegt hatten.
FTP-Server-Fehlkonfigurationen im Gesundheitswesen (Gesundheitsorganisationen, 2018)
Sicherheitsforscher entdeckten mehrere Gesundheitsorganisationen, die Patientendaten durch anonyme FTP-Server offenlegten. Sensible Dateien einschließlich medizinischer Aufzeichnungen, Versicherungsinformationen und Patientenverzeichnisse waren ohne Authentifizierung zugänglich. Diese Vorfälle führten zu HIPAA-Verstoßuntersuchungen und hoben die Risiken veralteter FTP-Infrastruktur hervor.
ProFTPD-Backup-Offenlegung (Verschiedene Organisationen, Fortlaufend)
Organisationen, die ProFTPD verwenden, haben versehentlich Backup-Dateien offengelegt, als Administratoren Datenbank-Dumps in FTP-zugänglichen Verzeichnissen für einfacheren Transfer zwischen Systemen speicherten. Diese Backups enthielten oft vollständige Datenbanken mit Anmeldedaten und Benutzerdaten, die für jeden mit FTP-Zugriff zugänglich waren.
Tools zum Testen/Ausnutzen
-
Nmap FTP-Skripte — Nmap-Skripte zur Erkennung von anonymem FTP-Zugriff und Enumeration zugänglicher Dateien.
-
Metasploit FTP-Module — Scanning-Module zur Identifizierung von FTP-Fehlkonfigurationen und zugänglichen sensiblen Dateien.
-
FileZilla — FTP-Client, nützlich für manuelle Erkundung von FTP-Servern während Sicherheitsbewertungen.
CVE-Beispiele
-
CVE-2001-0934 — FTP-Server legte sensible Dateien aufgrund unsachgemäßer Verzeichnisbeschränkungen in der Chroot-Konfiguration offen.
-
CVE-2005-0503 — Anwendung speicherte Datenbank-Anmeldedaten in FTP-zugänglicher Konfigurationsdatei.
-
CVE-2010-2632 — FTP-Server erlaubte Verzeichnistraversierung, die Zugriff auf Dateien außerhalb des beabsichtigten Verzeichnisses ermöglichte.
Referenzen
-
MITRE Corporation. "CWE-220: Storage of File With Sensitive Data Under FTP Root." Common Weakness Enumeration. https://cwe.mitre.org/data/definitions/220.html
-
vsftpd Documentation. "Chroot and Security." https://security.appspot.com/vsftpd.html
-
NIST. "Guidelines on Active Content and Mobile Code." Special Publication 800-28. https://csrc.nist.gov/publications/detail/sp/800-28/final
-
OWASP Foundation. "File System Security." https://owasp.org/www-community/attacks/Path_Traversal