image: teaser.webp:100:50 image_alt: "Der Raum der Hacker-AG: drei Laptops mit Code, einem Spiel und einer Webseite auf einem langen Tisch, am Ende sitzt ein kleiner Roboter und winkt" kind: labor duration: 4 Doppelstunden curriculum: "Sek I: Leben in und mit vernetzten Systemen (Gestalten von Internetseiten, Stylesheets; Gefahren bei E-Mails: Phishing); Oberstufe: Softwareprojekt (Ergonomie), Vertiefung Informatik und Gesellschaft" topics: [webseiten, datensicherheit, gesellschaft, zeichenketten] language: HTML / CSS / Ruby / Python languages: [ruby, python] requires: [static-website] reference: [accessibility, dark-patterns, html, css, ruby-python] parts: true

Fair, barrierefrei, sicher

3. Phishing

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.

Hinweise finden

Ausprobieren: Öffne jede Mail und klick auf alles, was dir seltsam vorkommt: den Absender, Sätze, den Anhang. Zeig mit der Maus auf jeden Link, auf dem Handy tipp ihn an, und lies in der Leiste unter der Mail, wohin er führt. Entscheide dann: Phishing oder echt? Findest du in beiden Phishing-Mails alle Hinweise?
Aufgabe 23Was beide gemeinsam haben

Welche Hinweise stecken in beiden Phishing-Mails?

Was beide gemeinsam haben

Wem gehört ein Link?

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.

Vermutung 24Wem gehört der Link?

Wem gehört der Link https://schule-am-see.example.konto-pruefung.example/login?

Wem gehört der Link?

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.

Aufgabe 25Der RechnernameÜbung

Schreib host(url): den Rechnernamen einer Adresse, ohne Protokoll, Pfad, Port und Benutzernamen. Eine Adresse ohne :// beginnt gleich mit dem Rechnernamen.

Tipp

Von Hand: In https://a.example:8080/b steht der Name zwischen :// und dem ersten /, und davon bleibt der Teil vor dem :.

Nächster Tipp

url.split('://', 2) teilt die Adresse beim ersten :// in zwei Teile. Danach: am ersten / teilen, vom @ den letzten Teil nehmen, am : den ersten.

Nächster Tipp

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

Aufgabe 25Der RechnernameÜbung

Schreib host(url): den Rechnernamen einer Adresse, ohne Protokoll, Pfad, Port und Benutzernamen. Eine Adresse ohne :// beginnt gleich mit dem Rechnernamen.

Tipp

Von Hand: In https://a.example:8080/b steht der Name zwischen :// und dem ersten /, und davon bleibt der Teil vor dem :.

Nächster Tipp

url.split('://', 1) teilt die Adresse beim ersten :// in zwei Teile. Danach: am ersten / teilen, vom @ den letzten Teil nehmen ([-1]), am : den ersten.

Nächster Tipp

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.

Aufgabe 26Die DomainEinstieg

Schreib real_domain(url): die letzten beiden Teile des Rechnernamens. Kopiere deine Funktion host aus der Aufgabe darüber dazu.

Tipp

'a.b.c'.split('.') gibt ['a', 'b', 'c'], join('.') setzt eine Liste wieder mit Punkten zusammen.

Nächster Tipp

last(2) gibt die letzten beiden Elemente einer Liste.

Aufgabe 26Die DomainEinstieg

Schreib real_domain(url): die letzten beiden Teile des Rechnernamens. Kopiere deine Funktion host aus der Aufgabe darüber dazu.

Tipp

'a.b.c'.split('.') gibt ['a', 'b', 'c'], '.'.join(parts) setzt eine Liste parts wieder mit Punkten zusammen.

Nächster Tipp

parts[-2:] gibt die letzten beiden Elemente einer Liste.

Für die Endungen .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.

Fast dieselbe Domain

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.

Aufgabe 27Fast dieselbe DomainÜbung

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.

Tipp

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.

Nächster Tipp

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.

Aufgabe 27Fast dieselbe DomainÜbung

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.

Tipp

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.

Nächster Tipp

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.

Ausprobieren: Prüfe mit deinen Funktionen beide Links aus den Phishing-Mails und den Link der AG. Welcher Link würde dein Prüfer melden, wenn er die Domain der Schule kennt? Fällt dir eine Adresse ein, die er nicht erkennt?

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.

Wenn es passiert ist

Vermutung 28Was ein Passwort wert ist

Jemand hat dein Passwort für die Mails der Schule. Was ist das Schlimmste, was er damit tun kann?

Was ein Passwort wert ist

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.

Aufgabe 29Wenn es passiert ist

Du hast auf einer Phishing-Seite dein Passwort eingetippt. Was tust du zuerst?

Wenn es passiert ist

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.

Wie geht es weiter?

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.