Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Ein EAP Supplicant in JavaScript
Wäre es technisch möglich, eduroam Accounts alsWeb-Login
zu verwenden – unter Beibehalten des Ende-zu-Ende-Tunnels?
oder: Wie schwer ist es, einen EAP Supplikanten in JavaScript
zu schreiben?
Steffen Klemer
Gesellschaft fürWissenschaftliche Datenverarbeitung Göttingen
2017-03-21
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 1 / 24
1 eduroam und EAP
2 EAP und dasWeb
3 Sicherheit und Sinnhaftigkeit
4 tl,dl
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 2 / 24
Die GWDG
…ist ein Rechen- und IT-Kompetenzzentrums für die
Max-Planck-Gesellschaft und Hochschulrechenzentrum für die
Universität Göttingen. Ihre wissenschaftlichen
Forschungsaufgaben liegen im Bereich der Angewandten
Informatik. Ferner fördert sie die Ausbildung von Fachkräften für
Informationstechnologie.
Steffen Klemer
– AG Infrastruktur, Netzwerk-Team
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 3 / 24
Die GWDG
…ist ein Rechen- und IT-Kompetenzzentrums für die
Max-Planck-Gesellschaft und Hochschulrechenzentrum für die
Universität Göttingen. Ihre wissenschaftlichen
Forschungsaufgaben liegen im Bereich der Angewandten
Informatik. Ferner fördert sie die Ausbildung von Fachkräften für
Informationstechnologie.
Steffen Klemer
– AG Infrastruktur, Netzwerk-Team
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 3 / 24
eduroam und EAP
Table of Contents
1 eduroam und EAP
2 EAP und dasWeb
3 Sicherheit und Sinnhaftigkeit
4 tl,dl
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 4 / 24
eduroam und EAP
eduroam bietet uns
• ein föderiertes Authentifizierung-Netzwerk (AAI)
• an über 15 000 Orten
• in 76 Ländern
• auf 5 von 6 Kontinenten
• seit jetzt ∼17 Jahren• >1 Milliarde Logins bisher1
1https://www.eduroam.org/2016/05/18/
1-billion-authentications-for-eduroam/
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 5 / 24
eduroam und EAP
Warum erzähle ich das?
Wir haben eine riesige, funktionierende,produktive, föderierte
Authentifizierungs-Infrastruktur!!!
→Warum benutzen wir dieeigentlich nur fürWiFi (Netzwerk)?
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 6 / 24
eduroam und EAP
Warum erzähle ich das?
Wir haben eine riesige, funktionierende,produktive, föderierte
Authentifizierungs-Infrastruktur!!!
→Warum benutzen wir dieeigentlich nur fürWiFi (Netzwerk)?
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 6 / 24
eduroam und EAP
Warum wird eduroam nur fürWiFi
verwendet?
• Weil der Vertrag das sagt.
←wird man sehen
• Weil es an passenderTechnik mangelt.
←dieserVortrag
Zielstellung: Könnte ich mich sicher mit einem eduroam-Account
auf einerWebseite anmelden?
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 7 / 24
eduroam und EAP
Warum wird eduroam nur fürWiFi
verwendet?
• Weil der Vertrag das sagt.
←wird man sehen
• Weil es an passenderTechnik mangelt.
←dieserVortrag
Zielstellung: Könnte ich mich sicher mit einem eduroam-Account
auf einerWebseite anmelden?
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 7 / 24
eduroam und EAP
Warum wird eduroam nur fürWiFi
verwendet?
• Weil der Vertrag das sagt.
←wird man sehen
• Weil es an passenderTechnik mangelt.←dieserVortrag
Zielstellung: Könnte ich mich sicher mit einem eduroam-Account
auf einerWebseite anmelden?
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 7 / 24
eduroam und EAP
Warum wird eduroam nur fürWiFi
verwendet?
• Weil der Vertrag das sagt.←wird man sehen
• Weil es an passenderTechnik mangelt.←dieserVortrag
Zielstellung: Könnte ich mich sicher mit einem eduroam-Account
auf einerWebseite anmelden?
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 7 / 24
eduroam und EAP
Warum wird eduroam nur fürWiFi
verwendet?
• Weil der Vertrag das sagt.←wird man sehen
• Weil es an passenderTechnik mangelt.←dieserVortrag
Zielstellung: Könnte ich mich sicher mit einem eduroam-Account
auf einerWebseite anmelden?
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 7 / 24
eduroam und EAP
Wie funktioniert nochmal eduroam?
EAPoL /IEEE 802.1x
RADIUS
RADIUSor
RADSEC (RADIUS over TLS)
user directory
(might be multiple Hops)(might be multiple Hops)
attribute 79 EAP-Messagee.g. LDAP
RADIUSserver
RADIUSserver
WiFi infrastructure
proxy to federation
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 8 / 24
eduroam und EAP
Wie funktioniert nochmal eduroam? #2
• aWPA2-Enterprise (802.1x) securedWiFi
• access points as 802.1x Network Access Servers NAS• user devices as 802.1x supplicants
• a hierarchic network of RADIUS-servers
• a local RADIUS server (complex…)
• some IDM back end(s) (LDAP, AD…)
EAPoL /IEEE 802.1x
RADIUS
RADIUSor
RADSEC (RADIUS over TLS)
user directory
(might be multiple Hops)(might be multiple Hops)
attribute 79 EAP-Messagee.g. LDAP
RADIUSserver
RADIUSserver
WiFi infrastructure
proxy to federation
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 9 / 24
eduroam und EAP
Extensible Authentication ProtocolEAP und 802.1x
• einfaches transportunabhängiges Protokoll• definiert nur das Nachrichtenformat und magische Zahlen,e.g.
• 4 … MD5 / PAP
• 25 … PEAP – oft genutzt
• 18 … EAP-SIM – GSM / mobile Authentifikation
• 4 wichtige Pakettypen• Request↔ Response
• Success↔ Failure
• 802.1x,WPA2-Enterprise: EAPoL – EAP über Ethernet
EAPoL /IEEE 802.1x
RADIUS
RADIUSor
RADSEC (RADIUS over TLS)
user directory
(might be multiple Hops)(might be multiple Hops)
attribute 79 EAP-Messagee.g. LDAP
RADIUSserver
RADIUSserver
WiFi infrastructure
proxy to federation
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 10 / 24
eduroam und EAP
RADIUSRemote Authentication Dial-In User Service
• weniger einfaches Protokoll über udp oder tls
• gedacht um Authentifizierungs-Informationen zwischen
Netzwerkgeräten und Server zu transportieren
• oft von Netz-Providern genutzt
• besteht aus Attribut-Wert Paaren
• mit einem definierten Attribut für EAP-Nachrichten
EAPoL /IEEE 802.1x
RADIUS
RADIUSor
RADSEC (RADIUS over TLS)
user directory
(might be multiple Hops)(might be multiple Hops)
attribute 79 EAP-Messagee.g. LDAP
RADIUSserver
RADIUSserver
WiFi infrastructure
proxy to federation
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 11 / 24
EAP und dasWeb
Table of Contents
1 eduroam und EAP
2 EAP und dasWeb
3 Sicherheit und Sinnhaftigkeit
4 tl,dl
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 12 / 24
EAP und dasWeb
Naiver AnsatzWie könnte ich mich auf einerWebsite mit meinem eduroam Account anmelden?
HTTP POST with username/password in a html <form>
RADIUS
RADIUSor
RADSEC (RADIUS over TLS)
user directory
(might be multiple Hops)(might be multiple Hops)
attribute 79 EAP-Messagee.g. LDAP
RADIUSserver
RADIUSserver
web server(generates EAP stream;
puts into RADIUS)
proxy to federation
Problem: DerWeb-Server kennt das Passwort
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 13 / 24
EAP und dasWeb
Naiver AnsatzWie könnte ich mich auf einerWebsite mit meinem eduroam Account anmelden?
HTTP POST with username/password in a html <form>
RADIUS
RADIUSor
RADSEC (RADIUS over TLS)
user directory
(might be multiple Hops)(might be multiple Hops)
attribute 79 EAP-Messagee.g. LDAP
RADIUSserver
RADIUSserver
web server(generates EAP stream;
puts into RADIUS)
proxy to federation
Problem: DerWeb-Server kennt das Passwort
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 13 / 24
EAP und dasWeb
Naiver AnsatzWie könnte ich mich auf einerWebsite mit meinem eduroam Account anmelden?
HTTP POST with username/password in a html <form>
RADIUS
RADIUSor
RADSEC (RADIUS over TLS)
user directory
(might be multiple Hops)(might be multiple Hops)
attribute 79 EAP-Messagee.g. LDAP
RADIUSserver
RADIUSserver
web server(generates EAP stream;
puts into RADIUS)
proxy to federation
Problem: DerWeb-Server kennt das Passwort
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 13 / 24
EAP und dasWeb
Richtiger AnsatzWie könnte ich mich auf einerWebsite mit meinem eduroam Account anmelden?
Der EAP supplicant gehört in den Browser!
…und muss dann in JavaScript programmiert werden.
EAPoW /HTTP POST
RADIUS
RADIUSor
RADSEC (RADIUS over TLS)
user directory
(might be multiple Hops)(might be multiple Hops)
attribute 79 EAP-Messagee.g. LDAP
RADIUSserver
RADIUSserver
web server
proxy to federation
Ende-zu-Ende EAPVerbindung vom Browser zum Heimat-RADIUS
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 14 / 24
EAP und dasWeb
Richtiger AnsatzWie könnte ich mich auf einerWebsite mit meinem eduroam Account anmelden?
Der EAP supplicant gehört in den Browser!
…und muss dann in JavaScript programmiert werden.
EAPoW /HTTP POST
RADIUS
RADIUSor
RADSEC (RADIUS over TLS)
user directory
(might be multiple Hops)(might be multiple Hops)
attribute 79 EAP-Messagee.g. LDAP
RADIUSserver
RADIUSserver
web server
proxy to federation
Ende-zu-Ende EAPVerbindung vom Browser zum Heimat-RADIUS
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 14 / 24
EAP und dasWeb
Richtiger AnsatzWie könnte ich mich auf einerWebsite mit meinem eduroam Account anmelden?
Der EAP supplicant gehört in den Browser!
…und muss dann in JavaScript programmiert werden.
EAPoW /HTTP POST
RADIUS
RADIUSor
RADSEC (RADIUS over TLS)
user directory
(might be multiple Hops)(might be multiple Hops)
attribute 79 EAP-Messagee.g. LDAP
RADIUSserver
RADIUSserver
web server
proxy to federation
Ende-zu-Ende EAPVerbindung vom Browser zum Heimat-RADIUS
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 14 / 24
EAP und dasWeb
Richtiger AnsatzWie könnte ich mich auf einerWebsite mit meinem eduroam Account anmelden?
Der EAP supplicant gehört in den Browser!
…und muss dann in JavaScript programmiert werden.
EAPoW /HTTP POST
RADIUS
RADIUSor
RADSEC (RADIUS over TLS)
user directory
(might be multiple Hops)(might be multiple Hops)
attribute 79 EAP-Messagee.g. LDAP
RADIUSserver
RADIUSserver
web server
proxy to federation
Ende-zu-Ende EAPVerbindung vom Browser zum Heimat-RADIUS
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 14 / 24
EAP und dasWeb
EAPoW – Bausteine
Browser
Browser
Web Server
Web Server
RADIUS Server
RADIUS Server
LDAP Server
LDAP Server
GET auth.html
create session
auth.html (with EAPoW js)
POST EAPoW 'Login'
EAP in RADIUS Return
EAP in RADIUS Request 'go on'
EAPoW 'go on'
POST EAPoW 'init handshake'
EAP in RADIUS Return '...'
EAP in RADIUS Request '...'
EAPoW '...'
...many packets...
query password
Password
password correct
EAP in RADIUS Accept 'Hello Alice.'
user logged in
EAPoW 'Hello Alice.'
• Browser
• EAP supplicant
• EAP in HTTP einpacken (nennen wir es doch EAPoW™)
• Web-Server
• EAPoW↔ EAP-in-RADIUS transkodieren
• Einfacher RADIUS Zustandsautomat
• RADIUS Server
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 15 / 24
EAP und dasWeb
EAPoW – Bausteine
Browser
Browser
Web Server
Web Server
RADIUS Server
RADIUS Server
LDAP Server
LDAP Server
GET auth.html
create session
auth.html (with EAPoW js)
POST EAPoW 'Login'
EAP in RADIUS Return
EAP in RADIUS Request 'go on'
EAPoW 'go on'
POST EAPoW 'init handshake'
EAP in RADIUS Return '...'
EAP in RADIUS Request '...'
EAPoW '...'
...many packets...
query password
Password
password correct
EAP in RADIUS Accept 'Hello Alice.'
user logged in
EAPoW 'Hello Alice.'
• Browser
• → EAP supplicant
• EAP in HTTP einpacken (nennen wir es doch EAPoW™)
• Web-Server
• EAPoW↔ EAP-in-RADIUS transkodieren
• Einfacher RADIUS Zustandsautomat
• RADIUS Server
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 15 / 24
EAP und dasWeb
Exkurs: emscriptenc 2 javascript
Emscripten is an LLVM-based project that compiles C and C++ into
highly-optimizable JavaScript in asm.js format. This lets you run C
and C++ on the web at near-native speed, without plugins.
• ein c zu Javascript Compiler!
• Übersetzt große Projekte wie die Unreal-Spiele-Engine
• Kinderleicht: Im Grunde setzt man nur export CC=emcc.
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 16 / 24
EAP und dasWeb
EAP supplicant im Browserwpa_supplicant nach Javascript
• EAP Zustandsautomaten des Unix wpa_supplicant nachJavascript kompilieren und im Browser ausführen
• Das funktioniert tatsächlich!
• Sehr wenige Änderungen nötig.
• OpenSSL fehlt noch⇒bisher nurTLS 1.0
Es gibt jetzt einen funktionierenden Javascript EAP supplicant.
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 17 / 24
EAP und dasWeb
EAP supplicant im Browserwpa_supplicant nach Javascript
• EAP Zustandsautomaten des Unix wpa_supplicant nachJavascript kompilieren und im Browser ausführen
• Das funktioniert tatsächlich!
• Sehr wenige Änderungen nötig.
• OpenSSL fehlt noch⇒bisher nurTLS 1.0
Es gibt jetzt einen funktionierenden Javascript EAP supplicant.
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 17 / 24
EAP und dasWeb
EAP supplicant im Browserwpa_supplicant nach Javascript
• EAP Zustandsautomaten des Unix wpa_supplicant nachJavascript kompilieren und im Browser ausführen
• Das funktioniert tatsächlich.
• Sehr wenige Änderungen nötig.
• OpenSSL fehlt noch⇒bisher nurTLS 1.0
Es gibt jetzt einen funktionierenden Javascript EAP supplicant.
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 17 / 24
EAP und dasWeb
EAP supplicant im Browserwpa_supplicant nach Javascript
• EAP Zustandsautomaten des Unix wpa_supplicant nachJavascript kompilieren und im Browser ausführen
• Das funktioniert tatsächlich.
• Sehr wenige Änderungen nötig.
• OpenSSL fehlt noch⇒bisher nurTLS 1.0
Es gibt jetzt einen funktionierenden Javascript EAP supplicant.
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 17 / 24
EAP und dasWeb
EAP supplicant im Browserwpa_supplicant nach Javascript
• EAP Zustandsautomaten des Unix wpa_supplicant nachJavascript kompilieren und im Browser ausführen
• Das funktioniert tatsächlich.
• Sehr wenige Änderungen nötig.
• OpenSSL fehlt noch⇒bisher nurTLS 1.0
Es gibt jetzt einen funktionierenden Javascript EAP supplicant.
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 17 / 24
EAP und dasWeb
wpa_supplicant im BrowserWas bringt uns das?
• Alle erfundenen und zu erfindenden EAPVerfahren
• Stabile Code-Basis
• Peer-Reviewed Crypto
• Zügige Sicherheitsupdates
• Ich muss nichts selber programmieren…
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 18 / 24
EAP und dasWeb
wpa_supplicant im BrowserWas bringt uns das?
• Alle erfundenen und zu erfindenden EAPVerfahren
• Stabile Code-Basis
• Peer-Reviewed Crypto
• Zügige Sicherheitsupdates
• Ich muss nichts selber programmieren…
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 18 / 24
EAP und dasWeb
EAPoW Software StackNochmal im Überblick
native JavaScript *
eap_auth *
- send / recv EAPoW
wpa_supplicant
- eap state machine
c to JS converted *
browser (plugin or web site)
glue code *
native php *
EAPoW *
- RADIUS state machine
- use tags for roles
- php session
php-radius
- send / recv RADIUS
- also handle EAP *
c library
web server
glue code *
freeradius
- map attributes to
RADIUS tags *
(multiple?) LDAP
- user accounts
- special attributes *
RADIUS server
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 19 / 24
Sicherheit und Sinnhaftigkeit
Table of Contents
1 eduroam und EAP
2 EAP und dasWeb
3 Sicherheit und Sinnhaftigkeit
4 tl,dl
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 20 / 24
Sicherheit und Sinnhaftigkeit
Sicherheits-ÜberlegungenKann und sollte man das machen?
• Warum sollte ich als User dem JS einer beliebigenWebsitetrauen?
• Sollte ich nicht!
• Wo und wie möchte ich EAPoW eigentlich einsetzen?
• Zwischen einzelnen Instituten?
• Stabile, reviewedVersionen
• Vlt. als Browser-Plugin im Store?
• Als eduroam SAML-IdP?
• Ein SAML IdP, der alle eduroam-User authentifizieren könnte
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 21 / 24
Sicherheit und Sinnhaftigkeit
Sicherheits-ÜberlegungenKann und sollte man das machen?
• Warum sollte ich als User dem JS einer beliebigenWebsitetrauen?
• Sollte ich nicht!
• Wo und wie möchte ich EAPoW eigentlich einsetzen?
• Zwischen einzelnen Instituten?
• Stabile, reviewedVersionen
• Vlt. als Browser-Plugin im Store?
• Als eduroam SAML-IdP?
• Ein SAML IdP, der alle eduroam-User authentifizieren könnte
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 21 / 24
Sicherheit und Sinnhaftigkeit
Sicherheits-ÜberlegungenKann und sollte man das machen?
• Warum sollte ich als User dem JS einer beliebigenWebsitetrauen?
• Sollte ich nicht!
• Wo und wie möchte ich EAPoW eigentlich einsetzen?
• Zwischen einzelnen Instituten?
• Stabile, reviewedVersionen
• Vlt. als Browser-Plugin im Store?
• Als eduroam SAML-IdP?
• Ein SAML IdP, der alle eduroam-User authentifizieren könnte
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 21 / 24
Sicherheit und Sinnhaftigkeit
Sicherheits-ÜberlegungenKann und sollte man das machen?
• Warum sollte ich als User dem JS einer beliebigenWebsitetrauen?
• Sollte ich nicht!
• Wo und wie möchte ich EAPoW eigentlich einsetzen?
• Zwischen einzelnen Instituten?
• Stabile, reviewedVersionen
• Vlt. als Browser-Plugin im Store?
• Als eduroam SAML-IdP?
• Ein SAML IdP, der alle eduroam-User authentifizieren könnte
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 21 / 24
Sicherheit und Sinnhaftigkeit
EAPoW und SAML
• → ein einziger, vertrauenswürdiger SAML eduroam IdP (bei
GÉANT?)
• → SAML Attribute könnten auf RADIUS Attribute gemappt
werden
Service Providere.g. ownCloud
browser
Identity ProviderSAML eduroam IdP
(EAPoW on web site)
1 GET
2 REDIRECT
24 GET
3 GET
4 - 22 POST /EAPoW
23 REDIRECT
native php *
EAPoW *
- RADIUS state machine
- use tags for roles
- php session
php-radius
- send / recv RADIUS
- also handle EAP *
c library
glue code *
native JavaScript *
eap_auth *
- send / recv EAPoW
wpa_supplicant
- eap state machine
c to JS converted *
glue code *
freeradius
- map attributes to
RADIUS tags *
(multiple?) LDAP
- user accounts
- special attributes *
RADIUS server
Service Providere.g. ownCloud
Service Providere.g. ownCloud
Service Providere.g. ownCloud
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 22 / 24
tl,dl
Table of Contents
1 eduroam und EAP
2 EAP und dasWeb
3 Sicherheit und Sinnhaftigkeit
4 tl,dl
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 23 / 24
tl,dl
Too long, didn’t listen
• Technisch ist es möglich, eduroam-User Ende-zu-Ende
verschlüsselt anWebseiten anzumelden.
• Es gibt einen Prototypen.
• Möchte man das?
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 24 / 24
tl,dl
Too long, didn’t listen
• Technisch ist es möglich, eduroam-User Ende-zu-Ende
verschlüsselt anWebseiten anzumelden.
• Es gibt einen Prototypen.
• Möchte man das?
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 24 / 24
Anhang
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 25 / 24
A look deeperBrowser
Browser
Web Server
Web Server
RADIUS Server
RADIUS Server
LDAP Server
LDAP Server
GET auth.html
create session
auth.html (with EAPoW js)
POST EAPoW 'Login'
EAP in RADIUS Return
EAP in RADIUS Request 'go on'
EAPoW 'go on'
POST EAPoW 'init handshake'
EAP in RADIUS Return '...'
EAP in RADIUS Request '...'
EAPoW '...'
...many packets...
query password
Password
password correct
EAP in RADIUS Accept 'Hello Alice.'
user logged in
EAPoW 'Hello Alice.'
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 26 / 24
EAPoW – building blocks
Browser
Browser
Web Server
Web Server
RADIUS Server
RADIUS Server
LDAP Server
LDAP Server
GET auth.html
create session
auth.html (with EAPoW js)
POST EAPoW 'Login'
EAP in RADIUS Return
EAP in RADIUS Request 'go on'
EAPoW 'go on'
POST EAPoW 'init handshake'
EAP in RADIUS Return '...'
EAP in RADIUS Request '...'
EAPoW '...'
...many packets...
query password
Password
password correct
EAP in RADIUS Accept 'Hello Alice.'
user logged in
EAPoW 'Hello Alice.'
• client
• EAP supplicant / state machine in browser
• EAP in HTTP encapsulator (let’s call it EAPoW™)
• web server
• transcode EAPoW↔ EAP in RADIUS
• basic RADIUS state machine
• RADIUS server
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 27 / 24
EAPoW – building blocks
Browser
Browser
Web Server
Web Server
RADIUS Server
RADIUS Server
LDAP Server
LDAP Server
GET auth.html
create session
auth.html (with EAPoW js)
POST EAPoW 'Login'
EAP in RADIUS Return
EAP in RADIUS Request 'go on'
EAPoW 'go on'
POST EAPoW 'init handshake'
EAP in RADIUS Return '...'
EAP in RADIUS Request '...'
EAPoW '...'
...many packets...
query password
Password
password correct
EAP in RADIUS Accept 'Hello Alice.'
user logged in
EAPoW 'Hello Alice.'
• client
• → EAP supplicant / state machine in browser
• EAP in HTTP encapsulator (let’s call it EAPoW™)
• web server
• transcode EAPoW↔ EAP in RADIUS
• basic RADIUS state machine
• RADIUS server
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 27 / 24
EAP supplicant in a browser
• send, receive EAPoW via HTTP POST + JSON + jquery
• implement EAP state machine (e.g. RFC 4137)
• implement a zillion EAP auth methods
• md5, PEAP,TTLS,TLS, SIM, MSCHAPv2, PAP, PWD, PSK, GTC…
• in Javascript with reliable, peer reviewed crypto
• …no way!
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 28 / 24
EAP supplicant in a browser
• send, receive EAPoW via HTTP POST + JSON + jquery
• implement EAP state machine (e.g. RFC 4137)
• implement a zillion EAP auth methods
• md5, PEAP,TTLS,TLS, SIM, MSCHAPv2, PAP, PWD, PSK, GTC…
• in Javascript with reliable, peer reviewed crypto
• …no way!
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 28 / 24
EAP supplicant in a browser
UCT
UCTignore
IDLE
SEND_REQUEST
retransCount = 0lastReqData = eapReqDataeapResp = FALSEeapReq = TRUE
UCT
DISABLED
INITIALIZE
currentId = NONEeapSuccess = FALSEeapFail = FALSEeapTimeout = FALSEeapKeyData = NONEeapKeyAvailable = FALSEeapRestart = FALSE
DISCARD
eapResp = FALSEeapNoReq = TRUE
SUCCESS
eapReqData = buildSuccess(currentId)if (eapKeyData != NONE) eapKeyAvailable = TRUEeapSuccess = TRUE
FAILURE
eapReqData = buildFailure(currentId)eapFail = TRUE
NAK
m.reset()Policy.update(<...>)
UCT
decision == FAILURE decision == SUCCESS
methodState == END
SELECT_ACTION
decision = Policy.getDecision()
rxResp &&(respId == currentId) &&
(respMethod == currentMethod)
rxResp &&(respId == currentId) &&
(respMethod==NAK ||respMethod==EXPANDED_NAK) &&
(me t hodSt at e == PROPOSED)
RETRANSMIT
retransCount++if (retransCount <= MaxRetrans) { eapReqData = lastReqData eapReq = TRUE}
elseeapResp
else
retransWhile==0
!portEnabled
retransCount > MaxRetrans
portEnabledUCT
TIMEOUT_FAILURE
eapTimeout = TRUE
INTEGRITY_CHECK
ignore = m.check(eapRespData)
METHOD_RESPONSE
m.process(eapRespData)if (m.isDone()) { Policy.update(<...>) eapKeyData = m.getKey() methodState = END} else methodState = CONTINUE
METHOD_REQUEST
currentId = nextId(currentId)eapReqData = m.buildReq(currentId)methodTimeout = m.getTimeout()
PROPOSE_METHOD
currentMethod = Policy.getNextMethod()m.init()if (currentMethod==IDENTITY || currentMethod==NOTIFICATION) methodState = CONTINUEelse methodState = PROPOSED
else!ignore
else
UCT
retransWhile = calculateTimeout(retransCount, eapSRTT, eapRTTVAR, methodTimeout)
decision==PASSTHROUGH/* SUCCESS, FAILURE, CONTINUE, or PASSTHROUGH */
RECEIVED
(rxResp,respId,respMethod)= parseEapResp(eapRespData)
eapRestart && portEnabled
• send, receive EAPoW via HTTP POST + JSON + jquery
• implement EAP state machine (e.g. RFC 4137)
• implement a zillion EAP auth methods
• md5, PEAP,TTLS,TLS, SIM, MSCHAPv2, PAP, PWD, PSK, GTC…
• in Javascript with reliable, peer reviewed crypto
• …no way!
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 28 / 24
EAP supplicant in a browser
• send, receive EAPoW via HTTP POST + JSON + jquery
• implement EAP state machine (e.g. RFC 4137)
• implement a zillion EAP auth methods
• md5, PEAP,TTLS,TLS, SIM, MSCHAPv2, PAP, PWD, PSK, GTC…
• in Javascript with reliable, peer reviewed crypto
• …no way!
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 28 / 24
EAP supplicant in a browser
• send, receive EAPoW via HTTP POST + JSON + jquery
• implement EAP state machine (e.g. RFC 4137)
• implement a zillion EAP auth methods
• md5, PEAP,TTLS,TLS, SIM, MSCHAPv2, PAP, PWD, PSK, GTC…
• in Javascript with reliable, peer reviewed crypto
• …no way!
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 28 / 24
EAP supplicant in a browser
• send, receive EAPoW via HTTP POST + JSON + jquery
• implement EAP state machine (e.g. RFC 4137)
• implement a zillion EAP auth methods
• md5, PEAP,TTLS,TLS, SIM, MSCHAPv2, PAP, PWD, PSK, GTC…
• in Javascript with reliable, peer reviewed crypto
• …no way!
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 28 / 24
EAP supplicant in a browser #2c 2 javascript
Emscripten is an LLVM-based project that compiles C and C++ into
highly-optimizable JavaScript in asm.js format. This lets you run C
and C++ on the web at near-native speed, without plugins.
• a c to Javascript compiler! yeaahaa
• even projects like the Unreal game engine
• idea: port the EAP state machine from wpa_supplicant
• wpa_supplicant: WiFi auth tool for most Unix systems incl.
Android
• works already!
• few major changes; hope to live in tree later on
• most features available, sadly no OpenSSL atm→ working at it
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 29 / 24
EAP supplicant in a browser #2c 2 javascript
Emscripten is an LLVM-based project that compiles C and C++ into
highly-optimizable JavaScript in asm.js format. This lets you run C
and C++ on the web at near-native speed, without plugins.
• a c to Javascript compiler! yeaahaa
• even projects like the Unreal game engine
• idea: port the EAP state machine from wpa_supplicant
• wpa_supplicant: WiFi auth tool for most Unix systems incl.
Android
• works already!
• few major changes; hope to live in tree later on
• most features available, sadly no OpenSSL atm→ working at it
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 29 / 24
EAP supplicant in a browser #2c 2 javascript
Emscripten is an LLVM-based project that compiles C and C++ into
highly-optimizable JavaScript in asm.js format. This lets you run C
and C++ on the web at near-native speed, without plugins.
• a c to Javascript compiler! yeaahaa
• even projects like the Unreal game engine
• idea: port the EAP state machine from wpa_supplicant
• wpa_supplicant: WiFi auth tool for most Unix systems incl.
Android
• works already!
• few major changes; hope to live in tree later on
• most features available, sadly no OpenSSL atm→ working at it
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 29 / 24
EAP supplicant in a browser #2c 2 javascript
Emscripten is an LLVM-based project that compiles C and C++ into
highly-optimizable JavaScript in asm.js format. This lets you run C
and C++ on the web at near-native speed, without plugins.
• a c to Javascript compiler! yeaahaa
• even projects like the Unreal game engine
• idea: port the EAP state machine from wpa_supplicant
• wpa_supplicant: WiFi auth tool for most Unix systems incl.
Android
• works already!
• few major changes; hope to live in tree later on
• most features available, sadly no OpenSSL atm→ working at it
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 29 / 24
EAP supplicant in browser #3Security considerations
• peer reviewed crypto
• EAP end2end client2home-institute transport
• is our JS trustworthy?
• Open source it for review!• Is the version from our web server reviewed?
• stable browser plugin versions
• also solves storing of settings of EAP methods (credentials,
certificates…)
• how about different browsers and mobile?
• → this is a problem; especially on mobile
• we’ll come to this
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 30 / 24
EAP supplicant in browser #3Security considerations
• peer reviewed crypto
• EAP end2end client2home-institute transport • is our JS trustworthy?
• Open source it for review!• Is the version from our web server reviewed?
• stable browser plugin versions
• also solves storing of settings of EAP methods (credentials,
certificates…)
• how about different browsers and mobile?
• → this is a problem; especially on mobile
• we’ll come to this
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 30 / 24
EAP supplicant in browser #3Security considerations
• peer reviewed crypto
• EAP end2end client2home-institute transport • is our JS trustworthy?
• Open source it for review!
• Is the version from our web server reviewed?
• stable browser plugin versions
• also solves storing of settings of EAP methods (credentials,
certificates…)
• how about different browsers and mobile?
• → this is a problem; especially on mobile
• we’ll come to this
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 30 / 24
EAP supplicant in browser #3Security considerations
• peer reviewed crypto
• EAP end2end client2home-institute transport • is our JS trustworthy?
• Open source it for review!• Is the version from our web server reviewed?
• stable browser plugin versions
• also solves storing of settings of EAP methods (credentials,
certificates…)
• how about different browsers and mobile?
• → this is a problem; especially on mobile
• we’ll come to this
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 30 / 24
EAP supplicant in browser #3Security considerations
• peer reviewed crypto
• EAP end2end client2home-institute transport • is our JS trustworthy?
• Open source it for review!• Is the version from our web server reviewed?
• stable browser plugin versions
• also solves storing of settings of EAP methods (credentials,
certificates…)
• how about different browsers and mobile?
• → this is a problem; especially on mobile
• we’ll come to this
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 30 / 24
EAP supplicant in browser #3Security considerations
• peer reviewed crypto
• EAP end2end client2home-institute transport • is our JS trustworthy?
• Open source it for review!• Is the version from our web server reviewed?
• stable browser plugin versions
• also solves storing of settings of EAP methods (credentials,
certificates…)
• how about different browsers and mobile?
• → this is a problem; especially on mobile
• we’ll come to this
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 30 / 24
EAP supplicant in browser #3Security considerations
• peer reviewed crypto
• EAP end2end client2home-institute transport • is our JS trustworthy?
• Open source it for review!• Is the version from our web server reviewed?
• stable browser plugin versions
• also solves storing of settings of EAP methods (credentials,
certificates…)
• how about different browsers and mobile?
• → this is a problem; especially on mobile
• we’ll come to this
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 30 / 24
EAPoW software stackso, what’s there?
native JavaScript *
eap_auth *
- send / recv EAPoW
wpa_supplicant
- eap state machine
c to JS converted *
browser (plugin or web site)
glue code *
native php *
EAPoW *
- RADIUS state machine
- use tags for roles
- php session
php-radius
- send / recv RADIUS
- also handle EAP *
c library
web server
glue code *
freeradius
- map attributes to
RADIUS tags *
(multiple?) LDAP
- user accounts
- special attributes *
RADIUS server
* part of my thesis
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 31 / 24
EAPoW and Single-Sign-On
Table of Contents
5 EAPoW and Single-Sign-On
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 32 / 24
EAPoW and Single-Sign-On
Single-Sign-On on the webteaser
• idea: marry EAPoW with SAML, Oauth and / or OpenID
• → a single trusted SAML eduroam IdP
• → we could map SAML attributes (e.g. roles) to RADIUS
attributes
Service Providere.g. ownCloud
browser
Identity ProviderSAML eduroam IdP
(EAPoW on web site)
1 GET
2 REDIRECT
24 GET
3 GET
4 - 22 POST /EAPoW
23 REDIRECT
native php *
EAPoW *
- RADIUS state machine
- use tags for roles
- php session
php-radius
- send / recv RADIUS
- also handle EAP *
c library
glue code *
native JavaScript *
eap_auth *
- send / recv EAPoW
wpa_supplicant
- eap state machine
c to JS converted *
glue code *
freeradius
- map attributes to
RADIUS tags *
(multiple?) LDAP
- user accounts
- special attributes *
RADIUS server
Service Providere.g. ownCloud
Service Providere.g. ownCloud
Service Providere.g. ownCloud
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 33 / 24
EAPoW and Single-Sign-On
Single-Sign-On on the webteaser
• idea: marry EAPoW with SAML, Oauth and / or OpenID
• → a single trusted SAML eduroam IdP
• → we could map SAML attributes (e.g. roles) to RADIUS
attributes
Service Providere.g. ownCloud
browser
Identity ProviderSAML eduroam IdP
(EAPoW on web site)
1 GET
2 REDIRECT
24 GET
3 GET
4 - 22 POST /EAPoW
23 REDIRECT
native php *
EAPoW *
- RADIUS state machine
- use tags for roles
- php session
php-radius
- send / recv RADIUS
- also handle EAP *
c library
glue code *
native JavaScript *
eap_auth *
- send / recv EAPoW
wpa_supplicant
- eap state machine
c to JS converted *
glue code *
freeradius
- map attributes to
RADIUS tags *
(multiple?) LDAP
- user accounts
- special attributes *
RADIUS server
Service Providere.g. ownCloud
Service Providere.g. ownCloud
Service Providere.g. ownCloud
Steffen Klemer (GWDG) Ein EAP Supplicant in JavaScript 2017-03-21 33 / 24