Webseiten sind für viele Benutzer das Tor zum Internet. Sie werden für die Abwicklung von Online-Banking, E-Mail-Diensten und Videokonferenzsystemen genutzt. Auch Social-Media-Plattformen und Streaming-Dienste verwenden Webseiten. Bildungsangebote und behördliche Dienstleistungen werden online angeboten. Die drei Buchstaben www sind aus dem modernen Leben nicht mehr wegzudenken. Aufgrund ihrer enormen Verbreitung, ihrer zunehmenden Komplexität und der Kritikalität der verarbeiteten Informationen werden Webseiten auch zu einem bevorzugten Werkzeug für Kriminelle. Die Server die solche Online-Dienste bereitstellen sind dabei häufig Täter und Opfer zugleich. Einer Studie von Techjury.net zufolge waren im Jahr 2022 etwa 7% der getesteten Webseiten mit Malware infiziert1. Dies unterstreicht die Notwendigkeit solider Schutzmaßnahmen.
Web-Filter
Moderne Firewalls und Virenscanner ermöglichen den Betreibern, ganze Kategorien von Webseiten zu sperren, wie etwa solche mit Inhalten zu Alkohol, Drogen oder pornografischen Inhalten. Dabei geht es häufig gar nicht darum, kriminelle Aktivitäten einer Webseite zu verhindern, sondern vielmehr darum bestimmte Inhalte von bestimmten Personengruppen fernzuhalten oder andere Compliance-Vorgaben der Institution einzuhalten. Jugendschutz, Arbeitsschutz oder Suchtprävention sind beispielsweise Zielgruppen solcher Filter.
Es kann jedoch vorkommen, dass bestimmte Seiten aus gesperrten Kategorien von Mitarbeitern benötigt werden. Ein Suchtberater hat beispielsweise ein berechtigtes Interesse daran, sich mit szenetypischen Webseiten vertraut zu machen oder sich in Selbsthilfegruppen zu engagieren. In solchen Fällen wird häufig eine Whitelist
in den Systemen gepflegt, in der solche Inhalte individuell freigegeben werden können.
URL-Scan
Bei einer Einzelfallentscheidung zur Freigabe einer gesperrten Webseite ist je nach Größe und Auftrag einer Institution ein standardisierter Prozess erforderlich, der die Entscheidungsfindung verbindlich regelt. Ein umfangreicher URL-Scan
, wie er mit VirusTotal
durchgeführt werden kann, bietet hierbei eine solide Basis und kann ein wichtiges Kriterium im Entscheidungsprozess sein. Sofern keine höher gewichteten Richtlinien der Institution eine Freigabe ausschließen, spricht bei einem unauffälligen URL-Scan
zumindest sicherheitstechnisch nichts gegen eine Freigabe.
VirusTotal
bietet daher die Möglichkeit, die Reputation einer Webseite zu überprüfen. Ein URL-Scan
hilft, potenzielle Bedrohungen zu identifizieren und Nutzer vor gefährlichen Websites zu schützen. VirusTotal
bietet eine umfassende Überprüfung von URLs. Dabei kommen mehrere Antiviren-Engines, Reputationsdatenbanken und Blacklist-Services zum Einsatz, um Malware, Phishing-Seiten und andere Bedrohungen zu erkennen. Darüber hinaus werden verdächtige Verhaltensweisen analysiert, die URL kann in einer Sandbox-Umgebung ausgeführt und Metadaten wie Domain-Registrierungsdetails, IP-Adressen und SSL-Zertifikate untersucht werden.
VirusTotal GUI
Die GUI
von VirusTotal
bietet Ihnen die Möglichkeit, sich einen schnellen Überblick über den sicherheitstechnischen Zustand einer Webseite zu verschaffen. Der Dienst ist kostenlos und intuitiv zu bedienen. Sie können VirusTotal
nicht nur für die bereits erwähnten Prozesse zur individuellen Freigabe von Inhalten verwenden, sondern auch Ihren Benutzern den Umgang mit solchen Diensten im Rahmen von Awareness
-Schulungen näherbringen. Auf diese Weise binden Sie Ihre Benutzer aktiv in den Gesamtprozess der Cybersecurity
ein. Darüber hinaus kann ein Antragsteller einer möglicherweise abgelehnten Freigabe die Gründe für diese Entscheidung nachvollziehen.
Öffnen Sie die Seite https://www.virustotal.com/gui/home/url
und geben Sie in das Eingabefeld die zu untersuchende Seite ein. Das Ergebnis der Untersuchung wird Ihnen ähnlich wie im folgenden Screenshot angezeigt:
Sie können diesen Report als PDF ausdrucken und Ihrer Dokumentation beifügen. Leider ist dies nur über die Druckfunktion des Betriebssystems möglich, VirusTotal
selbst erzeugt in der GUI keinen Report zum Download. Aber Sie haben alle wesentlichen Parameter wie Scan-Score
, gescannte URL und Datum festgehalten und können so nachweisen, auf welcher Grundlage Sie Ihre Entscheidung getroffen haben.
VirusTotal API
Die VirusTotal API
ist eine leistungsfähige Programmierschnittstelle zur automatisierten Analyse und Erkennung von Malware. Mit der API können Dateien, URLs, Domains und IP-Adressen von zahlreichen Antiviren-Engines und anderen Sicherheitstools gescannt werden. Diese Schnittstelle ermöglicht eine schnelle Integration in bestehende Sicherheitslösungen und unterstützt Sie bei dem Prozess der Bedrohungsanalyse. Die VirusTotal API
steht nur registrierten Nutzern zur Verfügung und wird in verschiedenen Abonnements angeboten, die sich in Umfang und Funktionalität unterscheiden. Im folgenden Abschnitt werden die Funktionen, Einsatzmöglichkeiten und Best Practices des URL-Scanners
mit der VirusTotal API
beschrieben.
Analysieren von URLs
Die Syntax zum API Aufruf eines URL Scans
:
curl --request POST \ --url https://www.virustotal.com/api/v3/urls \ --form url=<Your URL here> --header 'x-apikey: <your API key>'
Ein Bash-Skript kann auf diese Weise erstellt werden, welches beim Aufruf eine URL als Parameter entgegennimmt, den API-Aufruf startet und die Ausgabe in der Standardausgabe ausgibt:
#!/bin/bash # Überprüfen, ob eine URL als Parameter übergeben wurde if [ -z "$1" ]; then echo "Bitte eine URL als Parameter angeben." exit 1 fi # Setze API-Key api_key="<api key hier einfügen>" # URL, die analysiert werden soll (als Parameter übergeben) url=$1 # API-Aufruf zum Anstoßen einer neuen Analyse response=$(curl --silent --request POST \ --url 'https://www.virustotal.com/api/v3/urls' \ --form "url=$url" \ --header "x-apikey: $api_key") # Überprüfen, ob eine Fehlermeldung vorliegt error_code=$(echo "$response" | jq -r '.error.code // empty') error_message=$(echo "$response" | jq -r '.error.message // empty') if [ -n "$error_code" ]; then echo "Fehler bei der API-Anfrage: $error_code - $error_message" exit 1 fi # ID der eingeleiteten Analyse extrahieren analysis_id=$(echo "$response" | jq -r '.data.id') echo "Die Analyse für die URL $url wurde erfolgreich eingeleitet." echo "Analyse ID: $analysis_id" # Link zur VirusTotal Analyse encoded_url=$(echo -n "$url" | base64 | tr -d '=' | tr '/+' '_-') vt_link="https://www.virustotal.com/gui/url/$encoded_url" echo "Link zur VirusTotal Analyse: $vt_link"
Die Ausgabe des Skripts:
$ ./analyze_url.sh https://example.net
Die Analyse für die URL https://example.net wurde erfolgreich eingeleitet.
Analyse ID: u-04d89a35136f61dca2ee99383c604e8ae9281450cbd32cfb30a872b5d94d9fa8-1718567315
Link zur VirusTotal Analyse: https://www.virustotal.com/gui/url/aHR0cHM6Ly9leGFtcGxlLm5ldA
Analyse-Report bereits freigegebener URLs
Neben einer Dokumentation des Zustandekommens der Entscheidung, die den Antragsteller, die beantragte URL, den Score des Online-Scanners sowie das Datum und weitere spezifische Metadaten enthält, sollten die einmal freigegebenen URLs weiterhin regelmäßig überprüft und die Ergebnisse ebenfalls dokumentiert werden. Neben den Aspekten der kontinuierlichen Sicherstellung der Betriebssicherheit schafft dieser Vorgang auch ein Bewusstsein für welche und wie viele Zielobjekte eine Ausnahmeregelung erteilt wurden.
Sie Syntax zum API Aufruf eines Analyse-Reports
:
curl --request GET \ --url https://www.virustotal.com/api/v3/urls/{id} \ --header 'x-apikey: <your API key>'
Ein Bash-Skript kann auf diese Weise erstellt werden, welches eine Liste von Zielobjekten in Form einer Datei entgegennimmt und der API gemäß oben genannter Syntax zuführt. Anschließend werden die zurückgegebenen JSON-Daten extrahiert und auf der Standardausgabe angezeigt. Das Ergebnis wird zudem in eine Datei geschrieben.
#!/bin/bash # Überprüfen, ob eine Datei als Parameter übergeben wurde if [ -z "$1" ]; then echo "Bitte eine Datei mit URLs als Parameter angeben." exit 1 fi # Datei mit URLs als Parameter datei=$1 # Aktuelles Datum für den Dateinamen current_date=$(date -u +"%Y-%m-%dT%H-%M-%SZ") output_file="scan_results_$current_date.log" # API Key api_key="<api key hier einfügen>" # VirusTotal Base URL vt_base_url="https://www.virustotal.com/gui/url/" # Funktion zum Analysieren einer URL analysiere_url() { local webseite=$1 local encoded_url=$(echo -n "$webseite" | base64 | tr -d '=' | tr '/+' '_-') # API Aufruf zum Abrufen der Analysedaten response=$(curl --silent --request GET \ --url https://www.virustotal.com/api/v3/urls/"$encoded_url" \ --header "x-apikey: $api_key") # Überprüfen, ob eine Fehlermeldung vorliegt error_code=$(echo "$response" | jq -r '.error.code // empty') error_message=$(echo "$response" | jq -r '.error.message // empty') if [ -n "$error_code" ]; then echo "Fehler bei URL $webseite: $error_code - $error_message" | tee -a "$output_file" return fi # Ergebnisstatus extrahieren status=$(echo "$response" | jq -r '.data.attributes.last_analysis_stats') # Überprüfen, ob die Felder vorhanden sind if [ "$status" == "null" ]; then echo "Fehler: Ungültige Antwort oder die Analyseergebnisse sind für URL $webseite nicht verfügbar." | tee -a "$output_file" return fi # Standardwerte auf 0 setzen, wenn null harmless=$(echo "$status" | jq '.harmless // 0') malicious=$(echo "$status" | jq '.malicious // 0') suspicious=$(echo "$status" | jq '.suspicious // 0') undetected=$(echo "$status" | jq '.undetected // 0') timeout=$(echo "$status" | jq '.timeout // 0') # Datum des Scans scan_date=$(date -u +"%Y-%m-%dT%H:%M:%SZ") # Anzahl der Engines, die analysiert haben engine_count=$(echo "$response" | jq -r '.data.attributes.last_analysis_results | length') # VirusTotal Analyse Link vt_link="${vt_base_url}${encoded_url}" # Ergebnisbewertung und Ausgabe if [ "$malicious" -gt 0 ] || [ "$suspicious" -gt 0 ]; then echo "Die Webseite $webseite wird als Malicious oder Suspicious eingestuft." | tee -a "$output_file" else echo "Die Webseite $webseite wird als Harmless oder Clean eingestuft." | tee -a "$output_file" fi # Details ausgeben echo "Details:" | tee -a "$output_file" echo "Harmless: $harmless" | tee -a "$output_file" echo "Malicious: $malicious" | tee -a "$output_file" echo "Suspicious: $suspicious" | tee -a "$output_file" echo "Undetected: $undetected" | tee -a "$output_file" echo "Timeout: $timeout" | tee -a "$output_file" echo "Datum der letzten Analyse: $scan_date" | tee -a "$output_file" echo "Anzahl Engines: $engine_count" | tee -a "$output_file" echo "VirusTotal Analyse Link: $vt_link" | tee -a "$output_file" echo "" | tee -a "$output_file" } # Datei zeilenweise lesen und jede URL analysieren while IFS= read -r url; do analysiere_url "$url" done < "$datei"
Das Skript verarbeitet eine Datei, die URLs, Domains oder IP-Adressen als Zielobjekte enthält. Anschließend wird jedes Zielobjekt Base64
kodiert und für einen API-Aufruf vorbereitet. Die Funktion analysiere_url
ruft die VirusTotal API auf, um die Sicherheitsanalyse jedes Zielobjekts abzurufen. Die erhaltenen Daten umfassen Statistiken wie harmlose und bösartige Klassifizierungen, das Datum der letzten Analyse und die Anzahl der verwendeten Engines. Basierend auf diesen Ergebnissen wird entschieden, ob die Webseite als harmlos oder potenziell gefährlich eingestuft wird. Die Ausgabe enthält auch einen direkten Link zur detaillierten VirusTotal-Analyse für jedes Zielobjekt. Die Ergebnisse werden sowohl in der Standardausgabe als auch in einer Datei ausgegeben, die im gleichen Pfad wie das Skript abgelegt wird. Der Dateiname beinhaltet das Datum der Laufzeit des Skripts.
https://example.com https://example.net https://example.org beispiel.de 142.251.36.195 185.216.178.34
$ ./bulk_check_urls.sh urls.txt
Die Webseite https://example.com wird als Malicious oder Suspicious eingestuft.
Details:
Harmless: 70
Malicious: 0
Suspicious: 2
Undetected: 23
Timeout: 0
Datum der letzten Analyse: 2024-06-16T18:35:00Z
Anzahl Engines: 95
VirusTotal Analyse Link: https://www.virustotal.com/gui/url/aHR0cHM6Ly9leGFtcGxlLmNvbQ
Die Webseite https://example.net wird als Harmless oder Clean eingestuft.
Details:
Harmless: 70
Malicious: 0
Suspicious: 0
Undetected: 22
Timeout: 0
Datum der letzten Analyse: 2024-06-16T18:35:01Z
Anzahl Engines: 92
VirusTotal Analyse Link: https://www.virustotal.com/gui/url/aHR0cHM6Ly9leGFtcGxlLm5ldA
Die Webseite https://example.org wird als Harmless oder Clean eingestuft.
Details:
Harmless: 71
Malicious: 0
Suspicious: 0
Undetected: 24
Timeout: 0
Datum der letzten Analyse: 2024-06-16T18:35:02Z
Anzahl Engines: 95
VirusTotal Analyse Link: https://www.virustotal.com/gui/url/aHR0cHM6Ly9leGFtcGxlLm9yZw
Die Webseite beispiel.de wird als Harmless oder Clean eingestuft.
Details:
Harmless: 69
Malicious: 0
Suspicious: 0
Undetected: 26
Timeout: 0
Datum der letzten Analyse: 2024-06-16T18:35:02Z
Anzahl Engines: 95
VirusTotal Analyse Link: https://www.virustotal.com/gui/url/YmVpc3BpZWwuZGU
Die Webseite 142.251.36.195 wird als Malicious oder Suspicious eingestuft.
Details:
Harmless: 70
Malicious: 1
Suspicious: 0
Undetected: 21
Timeout: 0
Datum der letzten Analyse: 2024-06-16T18:35:03Z
Anzahl Engines: 92
VirusTotal Analyse Link: https://www.virustotal.com/gui/url/MTQyLjI1MS4zNi4xOTU
Fehler bei URL 185.216.178.34: NotFoundError - URL "MTg1LjIxNi4xNzguMzQ" not found
Die Fehlermeldung Fehler bei URL 185.216.178.34: NotFoundError - URL
weist darauf hin, dass für das betreffende Zielobjekt noch keine Analyse durchgeführt wurde und daher kein Eintrag in der Datenbank von VirusTotal
vorhanden ist. Da es sich bei dem Zweck dieses Skripts jedoch um einen Rescan
handelt, kann davon ausgegangen werden, dass zuvor bereits einmal eine Analyse für jedes Zielobjekt durchgeführt wurde. Der Eintrag ist exemplarisch für eine Fehlermeldung.