URL-Scan in VirusTotal

Lesedauer: 12 Minuten

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.

Die kostenlose Variante ist in der Leistung und teilweise auch in der Funktionalität eingeschränkt, der Funktionsumfang ist jedoch für einen Proof of Concept in vielen Fällen ausreichend. Unternehmenslizenzen oder Premium-Accounts bieten jedoch einen deutlich umfassenderen Funktionsumfang.

Bei Standardinstallationen von macOS und Minimalinstallationen von Linux (Debian/Ubuntu) muss für die folgenden Skripte das Paket JSON Query (jq) geladen werden.

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:

Achten Sie darauf Ihren persönlichen API Key einzufügen (Zeile 10).

#!/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.

Achten Sie darauf Ihren persönlichen API Key einzufügen (Zeile 17).

#!/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

Bitte beachten, dass das Skript keinen neuen Scan auslöst, sondern lediglich die Daten der letzten Analyse bei VirusTotal verwendet. Dies erfolgt aus Gründen der Performance und um das Kontingent der API-Token zu schonen. Das Datum der letzten Analyse wird in den Daten angezeigt. Sie können selbst entscheiden, ob Sie eine neue Analyse durchführen möchten. Eine erneute Analyse kann durch einen Klick auf den Button ⟳ Reanalyze auf der Seite des VirusTotal Analyse-Link ausgelöst werden.

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.

  1. https://techjury.net/blog/how-many-spyware-and-malware-attacks-are-there/ ↩︎

Loading

Updated on 18. Juni 2024
Was this article helpful?

Related Articles