Phishing-Angriffe stellen eine der hartnäckigsten und sich am schnellsten entwickelnden Bedrohungen in der modernen Cyberlandschaft dar. Während traditionelle Schutzmechanismen wie Blacklists und regelbasierte Filter eine grundlegende Verteidigung bieten, sind sie oft nicht in der Lage, die zunehmend ausgeklügelten Taktiken von Angreifern zu erkennen. Hier setzt die künstliche Intelligenz (KI) an: Durch den Einsatz fortschrittlicher Algorithmen und Modelle können Sicherheitssysteme nicht nur bekannte Phishing-Muster identifizieren, sondern auch neue, unbekannte Bedrohungen proaktiv erkennen und präventiv handeln. Dieser Artikel beleuchtet die technischen Grundlagen und Methoden, wie KI zur effektiven Bekämpfung von Phishing eingesetzt wird.

Die Evolution der Phishing-Bedrohung und die Notwendigkeit von KI

Die Landschaft der Cyberbedrohungen verändert sich rasant. Phishing-Angriffe sind längst keine einfachen Massen-E-Mails mehr, die leicht an offensichtlichen Fehlern oder verdächtigen Absendern zu erkennen sind. Moderne Phishing-Kampagnen sind hochgradig personalisiert (Spear Phishing), verwenden täuschend echte Markennachahmungen, nutzen Zero-Day-Exploits oder tarnen sich als legitime interne Kommunikation (Business Email Compromise – BEC). Diese Raffinesse überfordert herkömmliche statische Erkennungsmethoden, die auf vordefinierten Signaturen oder einfachen Keyword-Filtern basieren.

Regelbasierte Systeme stoßen an ihre Grenzen, da Angreifer ständig neue Varianten entwickeln, um diese Regeln zu umgehen. Ein statischer Filter, der beispielsweise nach dem Wort „Passwort“ in Kombination mit einer externen URL sucht, kann leicht durch Synonyme, Bilder oder intelligente Umformulierungen umgangen werden. Die schiere Menge an täglich generierten E-Mails und Webseiten macht eine manuelle Überprüfung unmöglich. Hier bietet KI einen entscheidenden Vorteil: Sie kann große Datenmengen analysieren, komplexe Muster erkennen und sich kontinuierlich an neue Bedrohungsvektoren anpassen, ohne dass jede neue Variante manuell definiert werden muss. Maschinelles Lernen, insbesondere Deep Learning, ermöglicht es Systemen, aus riesigen Datensätzen zu lernen und Vorhersagen über die Wahrscheinlichkeit eines Phishing-Versuchs zu treffen.

NLP-Modelle zur Analyse von E-Mail-Inhalten

Die Fähigkeit, den Inhalt einer E-Mail zu verstehen und zu interpretieren, ist entscheidend für die Erkennung von Phishing. Hier kommen Natural Language Processing (NLP)-Modelle ins Spiel. Sie analysieren Text auf semantische, syntaktische und stilistische Merkmale, die auf betrügerische Absichten hindeuten könnten.

Merkmalsextraktion und Vektorisierung

Bevor ein NLP-Modell Text analysieren kann, muss der Rohtext in ein numerisches Format umgewandelt werden, das von Algorithmen verarbeitet werden kann. Dieser Prozess wird als Vektorisierung oder Feature Engineering bezeichnet. Gängige Techniken umfassen:

  • Tokenisierung: Zerlegung des Textes in einzelne Wörter oder Phrasen (Tokens).
  • N-Gramme: Sequenzen von N Wörtern oder Zeichen, die kontextuelle Informationen liefern.
  • TF-IDF (Term Frequency-Inverse Document Frequency): Eine statistische Methode, die die Bedeutung eines Wortes in einem Dokument relativ zu einer Sammlung von Dokumenten bewertet.
  • Word Embeddings (z.B. Word2Vec, GloVe, BERT): Diese Modelle lernen dichte Vektorrepräsentationen von Wörtern, bei denen semantisch ähnliche Wörter ähnliche Vektoren haben. BERT (Bidirectional Encoder Representations from Transformers) und andere Transformer-Modelle sind besonders leistungsfähig, da sie den Kontext eines Wortes in einem Satz sehr gut erfassen können.
  • Syntaktische und semantische Analyse: Erkennung von Satzstrukturen, Wortarten, Named Entity Recognition (NER) zur Identifizierung von Personen, Orten, Organisationen oder spezifischen Phrasen, die typisch für Phishing sind (z.B. „Ihr Konto wird gesperrt“).
  • Sentiment-Analyse: Erkennung von Dringlichkeit, Angst oder Autorität, die oft in Phishing-E-Mails verwendet werden, um Empfänger unter Druck zu setzen.

Klassifizierungsmodelle

Nach der Vektorisierung werden diese numerischen Repräsentationen an Maschinelles-Lernen-Modelle übergeben, die den Text als legitim oder Phishing klassifizieren. Häufig verwendete Modelle sind:

  • Support Vector Machines (SVMs): Effektiv bei der Klassifizierung von Text in zwei Kategorien.
  • Random Forests: Ensemble-Methode, die mehrere Entscheidungsbäume kombiniert, um die Genauigkeit zu verbessern.
  • Deep Learning Modelle (RNNs, LSTMs, Transformer): Insbesondere rekurrenten neuronale Netze (RNNs) und Long Short-Term Memory (LSTM)-Netzwerke sind gut geeignet für sequentielle Daten wie Text, da sie den Kontext über längere Distanzen hinweg behalten können. Transformer-Architekturen, wie sie in BERT oder GPT-Modellen verwendet werden, haben sich als besonders leistungsfähig erwiesen, indem sie parallele Verarbeitung und Aufmerksamkeitsmechanismen nutzen, um komplexe Sprachmuster zu erfassen.

Diese Modelle werden auf riesigen Datensätzen von legitimen und Phishing-E-Mails trainiert, um die subtilen Unterschiede zu lernen, die auf einen Betrug hindeuten.

Praktisches Beispiel: E-Mail-Header-Analyse

Neben dem E-Mail-Inhalt sind auch die Header-Informationen reich an Merkmalen für NLP-Modelle. Ein Modell könnte folgende Header-Felder analysieren:

import email from email.header import decode_header import math from collections import Counter def analyze_email_headers(raw_email):     msg = email.message_from_string(raw_email)          features = {         "from_domain": "",         "reply_to_domain": "",         "return_path_domain": "",         "subject_entropy": 0.0,         "x_mailer_present": False,         "spf_status": "none",         "dkim_status": "none",         "dmarc_status": "none"     }     # Absender-Domain     if msg["From"]:         try:             decoded_from = decode_header(msg["From"])[0][0]             if isinstance(decoded_from, bytes):                 decoded_from = decoded_from.decode('utf-8')             features["from_domain"] = decoded_from.split('@')[-1].strip('>')         except:             pass # Fehlerbehandlung     # Reply-To Domain     if msg["Reply-To"]:         try:             decoded_reply_to = decode_header(msg["Reply-To"])[0][0]             if isinstance(decoded_reply_to, bytes):                 decoded_reply_to = decoded_reply_to.decode('utf-8')             features["reply_to_domain"] = decoded_reply_to.split('@')[-1].strip('>')         except:             pass     # Return-Path Domain     if msg["Return-Path"]:         try:             decoded_return_path = decode_header(msg["Return-Path"])[0][0]             if isinstance(decoded_return_path, bytes):                 decoded_return_path = decoded_return_path.decode('utf-8')             features["return_path_domain"] = decoded_return_path.split('@')[-1].strip('>')         except:             pass     # SPF, DKIM, DMARC Status (vereinfacht)     if msg["Authentication-Results"]:         auth_results = msg["Authentication-Results"].lower()         if "spf=pass" in auth_results:             features["spf_status"] = "pass"         elif "spf=fail" in auth_results:             features["spf_status"] = "fail"                  if "dkim=pass" in auth_results:             features["dkim_status"] = "pass"         elif "dkim=fail" in auth_results:             features["dkim_status"] = "fail"                      if "dmarc=pass" in auth_results:             features["dmarc_status"] = "pass"         elif "dmarc=fail" in auth_results:             features["dmarc_status"] = "fail"     # Subjekt-Entropie (Indikator für zufällig generierte Betreffzeilen)     if msg["Subject"]:         subject_str = "".join([s.decode('utf-8') if isinstance(s, bytes) else s for s, cs in decode_header(msg["Subject"])])         counts = Counter(subject_str)         total = sum(counts.values())         if total > 0:             entropy = -sum((float(c)/total) * math.log2(float(c)/total) for c in counts.values())             features["subject_entropy"] = entropy     # X-Mailer Präsenz     if "X-Mailer" in msg:         features["x_mailer_present"] = True     return features # Beispiel-Nutzung (roh-E-Mail-String wäre hier einzufügen) # raw_email_content = """From: "Support" <support@legitimate-bank.com> # To: user@example.com # Subject: Dringend: Ihr Konto wird gesperrt - Bestätigung erforderlich! # Content-Type: text/plain; charset="utf-8" # Authentication-Results: mx.google.com; #        spf=fail (google.com: domain of support@legitimate-bank.com does not designate 1.2.3.4 as permitted sender) smtp.mailfrom=support@legitimate-bank.com; #        dkim=fail header.i=@legitimate-bank.com; #        dmarc=fail (p=quarantine sp=quarantine) header.from=legitimate-bank.com # X-Mailer: Microsoft Outlook 16.0 # Sehr geehrter Kunde, # Ihr Online-Banking-Konto wurde vorübergehend gesperrt aufgrund ungewöhnlicher Aktivitäten. # Um die Sperrung aufzuheben, klicken Sie bitte auf den folgenden Link und bestätigen Sie Ihre Identität: # http://bank-secure-login.xyz.com/verify?id=12345 # Bitte ignorieren Sie diese Nachricht nicht, da Ihr Konto sonst dauerhaft gesperrt werden könnte. # Mit freundlichen Grüßen, # Ihr Bank-Sicherheitsteam""" # header_features = analyze_email_headers(raw_email_content) # print(header_features) 

Dieses Snippet zeigt, wie strukturelle Header-Informationen extrahiert werden können. Diskrepanzen zwischen der From-Domain, Reply-To-Domain und Return-Path-Domain sind starke Indikatoren für Phishing. Ebenso ist ein fehlgeschlagener SPF-, DKIM- oder DMARC-Check ein Warnsignal. Die Entropie der Betreffzeile kann auf zufällig generierte oder verschleierte Texte hinweisen.

Visuelle Ähnlichkeitserkennung für gefälschte Anmeldeseiten

Phishing-Angriffe zielen oft darauf ab, Benutzer auf gefälschte Anmeldeseiten zu locken, die das Design und Layout legitimer Dienste nachahmen. KI-gestützte Systeme können diese Fälschungen durch visuelle Analyse erkennen.

Screenshot-Analyse und DOM-Inspektion

Der erste Schritt besteht darin, die potenziell bösartige Webseite zu rendern und Screenshots davon zu erstellen. Dies geschieht typischerweise in einer isolierten Sandbox-Umgebung, um eine Kompromittierung des Systems zu verhindern. Gleichzeitig wird der Document Object Model (DOM)-Baum der Webseite analysiert. Der DOM-Baum liefert Informationen über die Struktur der Seite, die verwendeten HTML-Elemente, CSS-Stile und eingebettete Ressourcen. Ungewöhnliche oder versteckte Elemente, die in einem legitimen Kontext nicht erwartet werden, können hierbei aufgedeckt werden.

Bildverarbeitung und Merkmalsvergleich

Nachdem Screenshots erstellt wurden, kommen Bildverarbeitungsalgorithmen und Deep Learning zum Einsatz. Techniken wie:

  • Perceptual Hashing (pHash): Erzeugt einen „Fingerabdruck“ eines Bildes, der sich bei geringfügigen Änderungen am Bild nicht stark ändert. Dies ermöglicht den Vergleich von Bildern, auch wenn sie leicht modifiziert wurden (z.B. durch Komprimierung oder leichte Layout-Verschiebungen).
  • Structural Similarity Index (SSIM): Misst die wahrgenommene Ähnlichkeit zwischen zwei Bildern.
  • Convolutional Neural Networks (CNNs): Sind besonders effektiv bei der Merkmalsextraktion aus Bildern. Ein CNN kann darauf trainiert werden, charakteristische Merkmale von Logos, Layouts und UI-Elementen bekannter legitimer Webseiten zu erkennen. Es kann dann einen Screenshot einer verdächtigen Seite mit diesen gelernten Merkmalen vergleichen, um die Wahrscheinlichkeit einer Nachahmung zu bestimmen.

Diese visuellen Merkmale werden oft kombiniert mit der Analyse von Textinhalten auf der Seite (z.B. Tippfehler, ungewöhnliche Formulierungen) und der Untersuchung eingebetteter Ressourcen (Bilder, Skripte), die von nicht-legitimen Domains stammen könnten.

Domain- und Zertifikatsprüfung in Kombination

Die visuelle Ähnlichkeitserkennung wird durch eine Überprüfung der URL und des SSL/TLS-Zertifikats ergänzt. Eine Seite kann visuell perfekt eine Bankseite nachahmen, aber wenn die URL nicht mit der offiziellen Domain der Bank übereinstimmt und/oder das SSL-Zertifikat ungültig ist oder von einer unbekannten Entität ausgestellt wurde, ist dies ein starkes Indiz für Phishing. KI-Systeme können diese verschiedenen Indikatoren gewichten und in einem Gesamtscore zusammenführen.

Praktisches Beispiel: Erkennung eines gefälschten Logins

Ein Benutzer klickt auf einen Link in einer E-Mail, der angeblich von seiner Bank stammt. Das KI-System fängt den Link ab, rendert die Seite in einer Sandbox und erstellt einen Screenshot. Ein trainiertes CNN vergleicht diesen Screenshot mit einer Datenbank bekannter Bank-Login-Seiten. Es erkennt eine hohe visuelle Ähnlichkeit zum Logo und Layout der echten Bank. Gleichzeitig analysiert das System die URL: Statt bank.com lautet sie bank-secure-login.xyz. Das SSL-Zertifikat ist zwar gültig, aber ausgestellt auf bank-secure-login.xyz von einer generischen Zertifizierungsstelle, nicht der üblichen EV-Zertifizierungsstelle der Bank. Das KI-Modell kombiniert diese Indikatoren (hohe visuelle Ähnlichkeit + abweichende URL/Zertifikat) und klassifiziert die Seite als Phishing, bevor der Benutzer Anmeldedaten eingeben kann.

Echtzeit-URL-Analyse und Reputationsdienste

Die URL ist oft der erste und offensichtlichste Indikator für einen Phishing-Versuch. KI-Systeme führen eine mehrstufige Echtzeitanalyse von URLs durch.

Statische und Dynamische Analyse

  • Statische Analyse: Überprüfung der URL-Struktur auf Anomalien wie ungewöhnliche Subdomains, Verwendung von IP-Adressen statt Domainnamen, Homograph-Angriffe (Verwendung von Unicode-Zeichen, die legitimen ähnlich sehen), lange und komplexe Pfade, oder die Verwendung von @-Zeichen zur Tarnung. URLs werden auch gegen bekannte Blacklists und Whitelists abgeglichen. WHOIS-Daten können Aufschluss über das Alter und den Registranten der Domain geben.
  • Dynamische Analyse: Bei verdächtigen URLs wird eine dynamische Analyse in einer Sandbox durchgeführt. Die Seite wird aufgerufen, und das System beobachtet das Verhalten: Gibt es Weiterleitungen? Werden Skripte ausgeführt? Werden Formulare geladen? Versucht die Seite, Downloads zu starten oder Browser-Schwachstellen auszunutzen? Diese Verhaltensmuster sind oft charakteristisch für bösartige Seiten.

Heuristische Ansätze und Maschinelles Lernen

KI-Modelle können aus einer Vielzahl von URL-Merkmalen lernen, welche URLs legitim und welche bösartig sind. Merkmale umfassen:

  • Länge der URL und der Domain
  • Anzahl der Subdomains
  • Präsenz von Sonderzeichen (z.B. -, ., @)
  • Top-Level-Domain (TLD)
  • Entropie der Domain- und Subdomain-Namen (hohe Entropie kann auf zufällig generierte Namen hindeuten)
  • Verwendung von HTTPS (obwohl Phisher zunehmend HTTPS nutzen)
  • Spezifische Keywords im Pfad oder in den Parametern

Modelle wie Random Forests, Gradient Boosting Machines oder neuronale Netze können auf diesen Merkmalen trainiert werden, um bösartige URLs mit hoher Genauigkeit zu identifizieren.

Integration mit Bedrohungsdatenbanken

KI-Systeme sind nicht isoliert. Sie integrieren sich mit globalen Bedrohungsdatenbanken und Reputationsdiensten, die ständig aktualisiert werden. Diese Datenbanken enthalten Listen von bekannten Phishing-Domains, bösartigen IP-Adressen und schädlichen Dateihashes. Die KI kann diese Informationen nutzen, um ihre eigenen Vorhersagen zu untermauern oder zu verfeinern. Eine neu entdeckte Phishing-URL kann sofort in die Datenbank eingespeist und für alle anderen Systeme verfügbar gemacht werden.

Code-Snippet (Konzeptuell): URL Feature Extraction

from urllib.parse import urlparse import re from collections import Counter import math def get_url_features(url):     parsed_url = urlparse(url)          features = {         "url_length": len(url),         "hostname_length": len(parsed_url.hostname) if parsed_url.hostname else 0,         "path_length": len(parsed_url.path) if parsed_url.path else 0,         "query_length": len(parsed_url.query) if parsed_url.query else 0,         "fragment_length": len(parsed_url.fragment) if parsed_url.fragment else 0,         "num_dots_in_hostname": parsed_url.hostname.count('.') if parsed_url.hostname else 0,         "num_dashes_in_hostname": parsed_url.hostname.count('-') if parsed_url.hostname else 0,         "has_ip_address_in_hostname": bool(re.match(r'^d{1,3}.d{1,3}.d{1,3}.d{1,3}$', parsed_url.hostname)) if parsed_url.hostname else False,         "has_https": parsed_url.scheme == 'https',         "num_subdomains": len(parsed_url.hostname.split('.')) - 2 if parsed_url.hostname and len(parsed_url.hostname.split('.')) > 1 else 0, # vereinfacht         "hostname_entropy": 0.0,         "contains_at_symbol": '@' in url,         "contains_double_slash": '//' in url[url.find('://') + 3:] if '://' in url else '//' in url # Nach dem Schema     }     # Hostname Entropie     if parsed_url.hostname:         counts = Counter(parsed_url.hostname)         total = sum(counts.values())         if total > 0:             entropy = -sum((float(c)/total) * math.log2(float(c)/total) for c in counts.values())             features["hostname_entropy"] = entropy     return features # Beispiel-URL # url_example = "https://www.legit-site.com/path/to/resource?param=value#fragment" # phishing_url_example = "http://bank-login.xyz.com@192.168.1.1/login.php?user=admin" # print(get_url_features(url_example)) # print(get_url_features(phishing_url_example)) 

Dieses Python-Pseudocode-Snippet demonstriert, wie verschiedene numerische und boolesche Merkmale aus einer URL extrahiert werden können. Diese Merkmale können dann als Input für ein Klassifikationsmodell dienen, um die Wahrscheinlichkeit eines Phishing-Versuchs zu bestimmen.

Reduzierung von Fehlalarmen (False Positives) und Verbesserung der Genauigkeit

Die größte Herausforderung bei der Phishing-Erkennung ist nicht nur die Identifizierung von Bedrohungen, sondern auch die Minimierung von Fehlalarmen. Ein False Positive (FP) – eine legitime E-Mail oder Webseite, die fälschlicherweise als Phishing eingestuft wird – kann zu erheblichen Produktivitätsverlusten und Frustration bei den Benutzern führen.

Ensemble-Methoden und Multi-Layer-Architekturen

Um die Robustheit und Genauigkeit zu verbessern, werden oft Ensemble-Methoden eingesetzt. Dabei werden die Vorhersagen mehrerer unabhängiger Modelle kombiniert. Ein „Voting Classifier“ könnte beispielsweise eine Mehrheitsentscheidung treffen, oder ein „Stacking Classifier“ könnte die Ausgaben mehrerer Basismodelle als Input für ein Meta-Modell verwenden. Dies reduziert die Wahrscheinlichkeit, dass ein einzelnes Modellfehler zu einem Fehlalarm führt.

Multi-Layer-Architekturen arbeiten in Stufen: Eine erste Schicht identifiziert offensichtliche Phishing-Versuche mit hoher Sicherheit. Verdächtige, aber nicht eindeutige Fälle werden an eine zweite, komplexere Schicht weitergeleitet, die detailliertere Analysen durchführt (z.B. Sandboxing, tiefere NLP-Analyse). Nur wenn mehrere Schichten unabhängig voneinander eine hohe Wahrscheinlichkeit für Phishing melden, wird eine Warnung ausgegeben oder die E-Mail blockiert.

Feedback-Schleifen und menschliche Überprüfung

KI-Systeme lernen am besten durch kontinuierliches Feedback. Benutzer können verdächtige E-Mails melden, und Sicherheitsexperten können Fehlalarme korrigieren oder neue Bedrohungen als solche markieren. Dieses Feedback wird genutzt, um die Modelle neu zu trainieren oder anzupassen. Ansätze wie Active Learning, bei denen das Modell aktiv nach den Beispielen fragt, bei denen es am unsichersten ist, können die Effizienz des menschlichen Feedbacks maximieren.

Kontextuelle Analyse und Benutzerverhalten

Ein weiterer Schritt zur Reduzierung von False Positives ist die Kontextualisierung. Das System kann lernen, was für einen bestimmten Benutzer oder eine Organisation „normal“ ist. Wenn ein Benutzer beispielsweise regelmäßig E-Mails von einem bestimmten Absender mit spezifischen Betreffzeilen erhält, kann das System diese Muster lernen. Eine E-Mail, die von einem bekannten Absender kommt, aber einen ungewöhnlichen Betreff oder einen verdächtigen Link enthält, würde dann als anomal eingestuft. Dies erfordert eine detaillierte Profilerstellung des Benutzerverhaltens, die natürlich datenschutzrechtliche Aspekte berücksichtigen muss.

Erklärbare KI (XAI) für Transparenz

Um Vertrauen in KI-basierte Sicherheitssysteme aufzubauen und Fehlalarme besser zu verstehen und zu beheben, ist Erklärbare KI (XAI) unerlässlich. XAI-Techniken wie LIME (Local Interpretable Model-agnostic Explanations) oder SHAP (SHapley Additive exPlanations) können aufzeigen, welche Merkmale (z.B. bestimmte Wörter, URL-Segmente, visuelle Elemente) am stärksten zur Klassifizierung einer E-Mail oder Webseite als Phishing beigetragen haben. Dies hilft Sicherheitsexperten, die Entscheidungen der KI zu validieren und die Modelle bei Bedarf zu optimieren.

Herausforderungen und Zukunftsperspektiven

Obwohl KI die Phishing-Erkennung revolutioniert hat, bleiben Herausforderungen bestehen. Angreifer passen ihre Taktiken ständig an und nutzen selbst KI-Techniken, um immer raffiniertere Angriffe zu entwickeln (Adversarial AI). Dies erfordert einen kontinuierlichen Wettlauf zwischen Angreifern und Verteidigern.

Zukünftige Entwicklungen umfassen:

  • Verbesserte Adversarial Robustness: Entwicklung von Modellen, die resistenter gegen Angriffe sind, die darauf abzielen, die KI zu täuschen.
  • Deepfakes und Voice Phishing (Vishing): KI wird auch benötigt, um neue Phishing-Formen zu erkennen, die auf manipulierten Audio- oder Videodateien basieren.
  • Verhaltensbiometrie: Analyse des Tippverhaltens, der Mausbewegungen oder anderer biometrischer Daten, um die Legitimität eines Benutzers auf einer Anmeldeseite zu überprüfen.
  • Kollaborative KI-Netzwerke: Globale Zusammenarbeit von KI-Systemen zum schnellen Austausch von Bedrohungsinformationen und zur gemeinsamen Verteidigung.

Die Rolle menschlicher Experten bleibt dabei unverzichtbar. KI-Systeme sind leistungsstarke Werkzeuge, aber sie benötigen die Anleitung, Überwachung und das Fachwissen von Sicherheitsexperten, um effektiv zu funktionieren und sich an neue Bedrohungen anzupassen. Die Symbiose aus menschlicher Intelligenz und künstlicher Intelligenz ist der Schlüssel zu einer robusten und adaptiven Phishing-Abwehr.

Benötigen Sie Cybersecurity-Beratung?

Unser Team hilft Ihnen, Ihre IT-Infrastruktur zu sichern und Bedrohungen proaktiv zu erkennen.

Kontakt aufnehmen

Share this article on LinkedIn with optimized text:

Auf LinkedIn teilen

1. Copy the text above → 2. Click share → 3. Paste in LinkedIn