Zum Inhalt springen
Neuer Bericht: Holen Sie sich Ihr Exemplar des State of the Internet Report 2024! | Heute herunterladen
Blogs

Fuzzy Matching zum Auffinden von Phishy Domains

Zusammenfassung

  • Gefälschte Domains und Marken-Imitatoren sind nach wie vor ein weit verbreitetes Problem, und eine der Schwierigkeiten besteht darin, die Imitatoren rechtzeitig zu finden.
  • Durch den Einsatz von "Fuzzy Matching" mit Censys Daten und BigQuery können Unternehmen proaktiv Domain-Impersonatoren finden und blockieren und so ihre Nutzer schützen.

Das Internet ist ein weites Feld, und es kann viele Fallstricke für die Nutzer geben. Die Technologie hat es böswilligen Akteuren erleichtert, schnell und einfach betrügerische Websites zu erstellen, und Bedrohungsakteure können diese gefälschten Domänen oder Markenimitationen nutzen, um Benutzer dazu zu bringen, vertrauliche Informationen preiszugeben. Bedrohungsakteure zielen oft auch auf bestimmte Organisationen ab, indem sie vorgeben, die Organisation selbst zu sein, und so ahnungslose Mitarbeiter austricksen und sich Zugang zur internen Infrastruktur verschaffen.

Unternehmen verfügen oft über Tools, mit denen sie ihre Mitarbeiter proaktiv vor dieser Art von Angriffen schützen können, aber dazu müssen sie die Domänen kennen und sie so schnell wie möglich blockieren. Mit anderen Worten: Zeit und Wissen sind entscheidend, um den Schaden durch Domain-/Marken-Impersonatoren zu verringern.

Mit Censys, BigQuery und ein wenig Hilfe durch die Levenshtein-Distanz wird dieses Problem jedoch so einfach wie eine Abfrage und ermöglicht es Ihnen, verdächtige Domains schneller zu blockieren.

Auf Censys scannen wir ständig das Internet, was bedeutet, dass wir in der Lage sind, viele Informationen schnell zu finden, einschließlich potenzieller Nachahmer. Die Untersuchung all dieser Daten durch Search kann jedoch eine Herausforderung sein, vor allem wenn man versucht, nach mehreren verschiedenen Datenfeldern zu filtern. In diesem Anwendungsfall verwenden wir BigQuery, das serverlose Data Warehouse von Google, um verdächtige Domains zu finden. Eine Anleitung zum Durchsuchen von Censys Daten mit BigQuery ist hier verlinkt.

Mit den in BigQuery integrierten benutzerdefinierten Javascript-Funktionen (UDFs) können wir den Levenshtein-Distanz-Algorithmus implementieren und alle bekannten Hosts in unserem Datensatz für eine bestimmte Domäne "unscharf abgleichen". Die Levenshtein-Distanz ist ein Maß für den Abstand zwischen zwei Zeichenketten. Sie ist eine einfache und ideale Berechnung für uns, wenn wir versuchen, Imitator-Domains zu finden, die einer legitimen Domain ähnlich sehen. In diesem Bericht verwenden wir bankofamerica[.]com, ein großes US-Finanzinstitut, als Beispiel.

Verwendung von Levenshtein zum Untersuchen verschiedener Aspekte einer URL in BigQuery

Da die Levenshtein-Distanz empfindlich auf kleine Änderungen in den Zeichenketten reagiert, werden wir verschiedene Teile der URL tokenisieren und untersuchen, insbesondere die vollständige URL und die Domäne. Es ist möglich, diese Abfragen noch weiter aufzuschlüsseln, um speziell Subdomains zu untersuchen, aber der Einfachheit halber betrachten wir nur diese beiden Iterationen der URL. Außerdem lassen wir die TLD-Informationen weg, da es für einen Angreifer trivial ist, eine alternative TLD zu erwerben, deren Beibehaltung im Vergleich die Ergebnisse jedoch drastisch verändern kann.

Die folgende Abfrage fragt also die IPv4/IPv6-Adresse eines Hosts und alle dns.names[] ab, unterteilt die dns.names[] in eine URL ohne TLD und eine Domäne mit TLD und berechnet dann den Levenshtein-Abstandsalgorithmus auf einer Skala von 0 bis 1 (0 ist keine Übereinstimmung, 1 ist exakte Übereinstimmung). Diese Abfrage untersucht nur die Fälle, in denen der Levenshtein-Algorithmus 0,8 oder höher (und nicht 1) ergibt, aber dieser Schwellenwert kann auch für Ihre Zwecke geändert werden.

Kombination von Levenshtein in einer BigQuery UDF mit Censys Daten
CREATE TEMPORARY FUNCTION levenshtein(a STRING, b STRING)
RETURNS FLOAT64
LANGUAGE js AS """
if(a == null) return 0;
if(b == null) return 0;
if(a.length == 0) return b.length;
if(b.length == 0) return a.length;
var matrix = [];
var i;
for(i = 0; i <= b.length; i++){
 matrix[i] = [i];
}
var j;
for(j = 0; j <= a.length; j++){
 matrix[0][j] = j;
}
for(i = 1; i <= b.length; i++){
 for(j = 1; j <= a.length; j++){
   if(b.charAt(i-1) == a.charAt(j-1)){
     matrix[i][j] = matrix[i-1][j-1];
   } else {
     matrix[i][j] = Math.min(matrix[i-1][j-1] + 1,
                             Math.min(matrix[i][j-1] + 1,
                                      matrix[i-1][j] + 1));
   }
 }
}
var strlen = Math.max(a.length, b.length);
return 1.0 - (matrix[b.length][a.length] / strlen);
""";
WITH
uids_token AS (
SELECT
  host_identifier.ipv4,
  host_identifier.ipv6,
  dns_name as url,
  NET.PUBLIC_SUFFIX(dns_name) as tld,
  SPLIT(NET.REG_DOMAIN(dns_name), ".")[SAFE_OFFSET(0)] AS domain_no_tld,
FROM
  `censys-io.universal_internet_dataset_v2.base`,
  UNNEST(dns.names) dns_name
WHERE
  DATE(snapshot_date) = '2023-10-31'
),  uids_token_no_tlds AS (
SELECT
  *,
  REPLACE(url, CONCAT('.', tld), '') as url_no_tld
FROM uids_token
), uids_score AS (
SELECT
  *,
  levenshtein(LOWER(domain_no_tld),"bankofamerica") domain_no_tld_lev_score,
  levenshtein(LOWER(url_no_tld), "bankofamerica") url_no_tld_lev_score,
FROM
  uids_token_no_tlds )
SELECT
*
FROM
uids_score
WHERE
domain_no_tld_lev_score != 1 AND
(domain_no_tld_lev_score > 0.8 OR url_no_tld_lev_score > 0.8)
ORDER BY
domain_no_tld_lev_score DESC,
url_no_tld_lev_score DESC

BigQuery-Ausgabe

Ein Bildschirmfoto zeigt die Ausgabe der ersten BigQuery-Abfrage.

Wie wir sehen, gibt es eine Reihe interessanter URLs/Domains, die eine weitere Untersuchung oder Sperrung wert sind. Die Analyse muss jedoch nicht hier enden.

Wir können zusätzliche Censys Daten über diese Hosts anhängen, um die Filterung weiter zu verbessern. Durch eine geringfügige Änderung dieser Abfrage werden der Name des autonomen Systems, die Standortdaten und der Aussteller des Zertifikats an die Ergebnisse angehängt, was eine schnellere Identifizierung verdächtiger Infrastrukturen ermöglichen könnte. Die Ausgabe dieser Abfrage zeigt beispielsweise eine Reihe von Hosts, die sich im ASN von Proofpoint befinden, was nicht unbedingt auffällig ist, da die Bank of America ein Kunde von Proofpoint sein könnte. Allerdings gibt es auch eine Reihe anderer Ergebnisse in anderen ASNs, deren Zertifikatsaussteller sich von der Homepage der Bank of America (Entrust, Inc.) unterscheiden. Diese Ergebnisse könnten es wert sein, blockiert oder weiter untersucht zu werden.

Kombinieren von Levenshtein in einer BigQuery UDF mit zusätzlichen Censys Daten
CREATE TEMPORARY FUNCTION levenshtein(a STRING, b STRING)
RETURNS FLOAT64
LANGUAGE js AS """
if(a == null) return 0;
if(b == null) return 0;
if(a.length == 0) return b.length;
if(b.length == 0) return a.length;
var matrix = [];
var i;
for(i = 0; i <= b.length; i++){
 matrix[i] = [i];
}
var j;
for(j = 0; j <= a.length; j++){
 matrix[0][j] = j;
}
for(i = 1; i <= b.length; i++){
 for(j = 1; j <= a.length; j++){
   if(b.charAt(i-1) == a.charAt(j-1)){
     matrix[i][j] = matrix[i-1][j-1];
   } else {
     matrix[i][j] = Math.min(matrix[i-1][j-1] + 1,
                             Math.min(matrix[i][j-1] + 1,
                                      matrix[i-1][j] + 1));
   }
 }
}
var strlen = Math.max(a.length, b.length);
return 1.0 - (matrix[b.length][a.length] / strlen);
""";
WITH
uids_token AS (
SELECT
  host_identifier.ipv4,
  dns_name as url,
  NET.PUBLIC_SUFFIX(dns_name) as tld,
  SPLIT(NET.REG_DOMAIN(dns_name), ".")[SAFE_OFFSET(0)] AS domain,
  autonomous_system.name as asn_name,
  location.country as country,
 certificate_issuer_org,
FROM
  `censys-io.universal_internet_dataset_v2.base`,
  UNNEST(dns.names) dns_name,
    UNNEST(services) svc
 LEFT JOIN UNNEST (svc.tls.certificates.leaf_data.issuer.organization) certificate_issuer_org
WHERE
  DATE(snapshot_date) = '2023-10-31'AND
 svc.tls IS NOT NULL
),  uids_token_no_tlds AS (
SELECT
  *,
  REPLACE(url, CONCAT('.', tld), '') as url_no_tld
FROM uids_token
), uids_score AS (
SELECT
  *,
  levenshtein(LOWER(domain),"bankofamerica") domain_lev_score,
  levenshtein(LOWER(url_no_tld), "bankofamerica") url_no_tld_lev_score,
FROM
  uids_token_no_tlds )
SELECT
*
FROM
uids_score
WHERE
domain_lev_score != 1 AND
(domain_lev_score > 0.8 OR url_no_tld_lev_score > 0.8)
ORDER BY
domain_lev_score DESC,
url_no_tld_lev_score DESC
Ein Bildschirmfoto zeigt die Ausgabe der zweiten BigQuery-Abfrage

Dieser Screenshot zeigt, wie zusätzliche Metadaten von Censys hinzugefügt werden können, um legitime Anwendungsfälle schneller herauszufiltern.

Diese Beschreibung ist als Ausgangspunkt für Ihre eigenen Untersuchungen gedacht und kann an die Bedürfnisse Ihrer Organisation angepasst werden. Wenn Sie mehr über die Verwendung von BigQuery mit Censys erfahren möchten, lesen Sie unsere Hilfedokumente und erfahren Sie mehr über BigQuery. Wir hoffen, dass wir Ihrem Unternehmen durch die Kombination von BigQuery und Censys helfen können, Phishing-Angriffe schneller zu erkennen und die Benutzer zu schützen!

Über den Autor

Ariana Mirian
Senior Sicherheitsforscher
Ariana Mirian ist eine leitende Sicherheitsforscherin bei Censys. Sie arbeitet an der Schnittstelle von Internet-Messungen und Sicherheit und nutzt groß angelegte Messungen, um interessante Fragen über das Internet zu beantworten und Censys' Daten zu verbessern.

Ähnlicher Inhalt

Zurück zu Ressourcen Hub
Lösungen für das Management von Angriffsflächen
Mehr erfahren