Eine Mail, die aussieht, als käme sie von der Schule, von einem Paketdienst oder einer Bank, und die dich auf eine Seite lockt, die dein Passwort will: Das ist Phishing, von »fishing«, Angeln, nach Passwörtern. Die Seite sieht aus wie die echte, und wer dort sein Passwort eintippt, gibt es dem, der sie gebaut hat.
Fast immer verraten sich solche Mails. Unten ist ein Postfach mit fünf Mails,
zwei davon Phishing. Alle Adressen enden auf .example: Diese Endung gehört
niemandem und ist für Beispiele reserviert, und jeder Dienst und jede Person in
den Mails ist ausgedacht.
Welche Hinweise stecken in beiden Phishing-Mails?
Unten in der Leiste stand bei der ersten Phishing-Mail
https://schule-am-see.example.konto-pruefung.example/login. Vorne steht die
Adresse der Schule, und doch gehört der Link jemand anderem.
Wem gehört der Link
https://schule-am-see.example.konto-pruefung.example/login?
Hier geht es weiter, sobald du deine Antwort oben abgegeben hast.
Eine Adresse besteht aus dem Protokoll (https://), dem Rechnernamen und
dem Pfad (/login). Der Rechnername wird von rechts gelesen: .example ist
die Endung, konto-pruefung.example die Domain, die jemand gekauft hat.
Alles davor sind Namen, die sich ihr Besitzer selbst ausdenkt, so viele er
will, auch schule-am-see.example.konto-pruefung.example. Wem ein Link gehört,
steht also am Ende des Rechnernamens, direkt vor dem ersten einzelnen
Schrägstrich, nicht am Anfang.
Das kannst du programmieren. Ein Link-Prüfer liest aus einer Adresse den
Rechnernamen und daraus die Domain. Zuerst der Rechnername: Er steht hinter
:// und endet vor dem ersten /. Zwei Tricks gibt es dabei. Ein : mit
einer Zahl dahinter ist ein Port (:8080) und gehört nicht zum Namen. Und ein
@ trennt einen Benutzernamen vom Rechner:
https://schule-am-see.example@konto-pruefung.example/ öffnet
konto-pruefung.example, alles vor dem @ ist nur Tarnung.
Schreib host(url): den Rechnernamen einer Adresse, ohne Protokoll,
Pfad, Port und Benutzernamen. Eine Adresse ohne :// beginnt gleich mit
dem Rechnernamen.
Von Hand: In https://a.example:8080/b steht der Name zwischen :// und dem ersten /, und davon bleibt der Teil vor dem :.
url.split('://', 2) teilt die Adresse beim ersten :// in zwei Teile. Danach: am ersten / teilen, vom @ den letzten Teil nehmen, am : den ersten.
Ein Gerüst:
ruby
def host(url)
rest = url.include?('://') ? url.split('://', 2)[1] : url
name = rest.split('/', 2)[0]
# hier: alles bis zum @ weg, dann den Port weg
end
Schreib host(url): den Rechnernamen einer Adresse, ohne Protokoll,
Pfad, Port und Benutzernamen. Eine Adresse ohne :// beginnt gleich mit
dem Rechnernamen.
Von Hand: In https://a.example:8080/b steht der Name zwischen :// und dem ersten /, und davon bleibt der Teil vor dem :.
url.split('://', 1) teilt die Adresse beim ersten :// in zwei Teile. Danach: am ersten / teilen, vom @ den letzten Teil nehmen ([-1]), am : den ersten.
Ein Gerüst:
python
def host(url):
rest = url.split('://', 1)[1] if '://' in url else url
name = rest.split('/', 1)[0]
# hier: alles bis zum @ weg, dann den Port weg
Die Domain sind die letzten beiden Teile des Rechnernamens, die Teile durch Punkte getrennt.
Schreib real_domain(url): die letzten beiden Teile des Rechnernamens.
Kopiere deine Funktion host aus der Aufgabe darüber dazu.
'a.b.c'.split('.') gibt ['a', 'b', 'c'], join('.') setzt eine Liste wieder mit Punkten zusammen.
last(2) gibt die letzten beiden Elemente einer Liste.
Schreib real_domain(url): die letzten beiden Teile des Rechnernamens.
Kopiere deine Funktion host aus der Aufgabe darüber dazu.
'a.b.c'.split('.') gibt ['a', 'b', 'c'], '.'.join(parts) setzt eine Liste parts wieder mit Punkten zusammen.
parts[-2:] gibt die letzten beiden Elemente einer Liste.
.example, .de oder .com stimmt das. Es gibt aber
Endungen aus zwei Teilen, .co.uk in Großbritannien oder .com.au in
Australien: Dort gehören die letzten drei Teile zusammen. Browser haben dafür
eine Liste aller solcher Endungen, die Public Suffix List.
Der Absender der ersten Phishing-Mail war support@schuIe-am-see.example, mit
einem großen I statt eines kleinen l. In vielen Schriften sehen beide gleich
aus. Andere Paare, die leicht zu verwechseln sind: die Ziffer 0 und das
o, die Ziffer 1 und das l, rn und m.
Schreib eine Funktion, die zwei Domains vergleicht und sagt, ob sie verschieden
sind und doch gleich aussehen. Ersetze dafür in beiden jedes Paar durch ein
Zeichen, zum Beispiel alle I, 1 durch l, 0 durch o und rn durch
m, und vergleiche dann.
Schreib looks_like(a, b): true, wenn die Domains a und b
verschieden sind, aber gleich werden, sobald in beiden I und 1 zu l,
0 zu o und rn zu m werden; sonst false.
Von Hand: Aus schuIe-am-see.example wird schule-am-see.example, aus rnensa.example wird mensa.example. Danach sind sie gleich wie die echten.
gsub('rn', 'm') ersetzt jedes rn, tr('I10', 'llo') ersetzt jedes I durch l, jede 1 durch l und jede 0 durch o. Eine eigene Funktion normalize(domain) dafür spart doppelten Code.
Schreib looks_like(a, b): True, wenn die Domains a und b
verschieden sind, aber gleich werden, sobald in beiden I und 1 zu l,
0 zu o und rn zu m werden; sonst False.
Von Hand: Aus schuIe-am-see.example wird schule-am-see.example, aus rnensa.example wird mensa.example. Danach sind sie gleich wie die echten.
replace('rn', 'm') ersetzt jedes rn; für I, 1 und 0 je ein weiteres replace. Eine eigene Funktion normalize(domain) dafür spart doppelten Code.
Echte Mailprogramme und Browser prüfen noch mehr: Schriftzeichen aus anderen Alphabeten, die wie lateinische aussehen (ein kyrillisches а statt eines a), Listen bekannter Phishing-Seiten, die jeden Tag wachsen. Ganz sicher ist kein Filter. Darum zählt, was du selbst tust.
Jemand hat dein Passwort für die Mails der Schule. Was ist das Schlimmste, was er damit tun kann?
Hier geht es weiter, sobald du deine Antwort oben abgegeben hast.
Mit deinem Passwort der Schule kann jemand deine Mails lesen und in deinem Namen schreiben, an deine Klasse und deine Lehrkräfte, mit einem Link, dem sie trauen, weil er von dir kommt. So verbreitet sich Phishing in einer Schule. Und wer dasselbe Passwort auch woanders benutzt, verliert alle Konten auf einmal.
Du hast auf einer Phishing-Seite dein Passwort eingetippt. Was tust du zuerst?
Gegen ein gestohlenes Passwort hilft die Anmeldung mit zweitem Faktor: Zum Passwort kommt ein Code, der jede halbe Minute wechselt und nur auf deinem Handy entsteht, oder eine Bestätigung in einer App. Wer nur das Passwort hat, kommt dann nicht hinein. Wie solche Codes entstehen, zeigt das Labor Zwei-Faktor-Codes.
Gut erklärt für alle, ohne Programmieren, stehen Phishing und andere Gefahren im Netz beim Bundesamt für Sicherheit in der Informationstechnik (BSI) unter Spam, Phishing & Co, mit einer Liste zum Prüfen einer Mail unter Wie erkenne ich Phishing?, und für Jüngere im Internet-ABC im Lernmodul Fiese Tricks, Lügen und Betrug im Internet.
Die Seite der AG ist jetzt fair und für alle benutzbar; mach dasselbe mit deiner eigenen Seite aus Statische Webseiten und lass Lighthouse darüber laufen. Was eine Webseite über dich erfährt, ohne dass du etwas anklickst, zeigt Was eine Webseite über dich erfährt. Und wie ein Server Passwörter aufbewahren muss, damit sie bei einem Einbruch nicht alle offen daliegen, steht in Kryptographie im Terminal.