restructure, last slides
[ach-master.git] / presentations / HACK.LU-2014 / presentation / agenda.md
1 % Bettercrypto - Applied Crypto Hardening for Sysadmins
2 % L. Aaron Kaplan <kaplan@cert.at> ;  David Durvaux <david.durvaux@gmail.com>; Aaron Zauner <azet@azet.org>
3 % 2014/10/21
4 ---------------------------
5
6
7
8 # Part 1:  Intro to the project
9
10
11 ![logo](img/logo)
12
13
14 ---
15 # Overview 
16
17 Part 1:
18   1. Intro & Motivation
19   2. How we got started, how we work, what's there, what's missing, 
20      how to use the guide
21   3. History of Crypto in a nutshell
22   4. Theory
23   4. 10:10 __break__
24   5. Theory (cont.)
25   5. Practical settings
26 Part 2:
27   6. Attacks
28   7. Current trends (IETF, ...)
29   7. wrap up
30   8. next steps
31   9. 11:45 __lunch__
32     
33
34 # Prerequisites
35
36   * Participants should have a basic knowledge of System administration and be
37 familiar with configuring Apache, nginx, etc.
38   * know git/github
39   * a basic knowledge of crypto will help.
40
41 # Motivation
42
43 ![NSA](img/nsa.png)
44
45 # Motivation (2)
46
47 Please note:
48
49   * the leaks also revealed to non-democratic countries precise recipies on how to do country wide or even Internet-wide surveillance, traffic inspection and -modification, etc.
50   * If politicians in other countries did not know how to do this, now they know!
51   * If criminals did not know how to do this, now they know!
52
53 # The reaction
54
55 \centering { \textbf{Don't give them anything for free}\par
56   It's your home, you fight! }
57
58
59 # The reaction (2)
60
61   * We as humans are used to certain **modes** in communications:
62 spoken words tend to:
63     * be forgotten over time ("data expires")
64     * get modified/changed whenever "copied" (repeated)
65     * get changed/modified over time  ("forgetfullness")
66     * we tend to be not so harsh about them ("forgive")
67     * have a limited geographic range ("town talk")
68     * be very decentralized ("accoustic range")
69   * digital traces/data tends to be:
70     * stored for ever. Never modified by default
71     * used against you in the future
72     * very centralized
73     * copied very easily
74     * always searchable in O(log(n)) 
75     
76   
77 # The reaction (3)
78
79 \centering { \textbf{Crypto is the only thing that might still help}
80 \par
81 a.k.a.:\par
82         ``\textit{The Bottom Line Is That Encryption Does Work}'', Edward Snowden
83 }
84
85 # But where?
86
87   * Ca. August 2013: Adi Kriegisch asks Aaron where he could find good recommendations on SSL settings.
88   * Does that exist? At that time:
89     - no ssllabs cookbook
90     - only theoretical recommendations (ENISA, eCrypt II, NIST)
91     - ioerror's duraconf settings are outdated
92     - no practical copy & paste-able settings exist?
93
94
95 # Project plan
96
97 ![Project plan](img/metalab-world-domination.jpg)
98
99
100 # Project plan  (srsly)
101
102   * Do at least something against the **Cryptocalypse**
103   * Check SSL, SSH, PGP crypto SeIngs in the most common services and certificates:
104     –  Apache, Nginx, lighthNp
105         –  IMAP/POP servers (dovecot, cyrus, ...) –  openssl.conf
106         –  Etc.
107   * Write down our experinces as guide
108   * Create easy, copy & paste-able settings which are "OK" (as far as we know) for sysadmins.
109   * Keep the guide short. There are many good recommendations out there written by cryptographers for cryptographers
110   * Many eyes must check this!
111   * Make it open source
112
113   
114
115
116 # Why is this relevant for you?
117
118   * You run networks and services. These are targets. If you believe it or not.
119   * You produce code. Make sure it uses good crypto coding practices
120
121   * However good crypto is hard to achieve
122   * Crypto does not solve all problems, but it helps
123
124
125 # Who?
126
127 Wolfgang Breyha (uni VIE), David Durvaux (CERT.be), Tobias Dussa (KIT-CERT), L. Aaron Kaplan (CERT.at), Christian Mock (coretec), Daniel Kovacic (A-Trust), Manuel Koschuch (FH Campus Wien), Adi Kriegisch (VRVis), Ramin Sabet (A-Trust), Aaron Zauner (azet.org), Pepi Zawodsky (maclemon.at), IAIK, A-Sit, ...  
128
129
130 # Contents so far
131
132   * Intro
133   * Disclaimer 
134   * Methods 
135   * Theory
136     * Elliptic Curve Cryptography 
137     * Keylengths 
138     * Random Number Generators 
139     * Cipher suites – general overview & how to choose one
140   * Recommendations on practical settings 
141   * Tools 
142   * Links 
143   * Appendix
144
145
146 # Methods and Principles
147
148 C.O.S.H.E.R principle:
149   * **C**ompletely
150   * **O**pen 
151   * **S**ource
152   * **H**eaders
153   * **E**ngineering and
154   * **R**esearch
155
156 Methods:
157   * Public review
158   * commits get **discussed**
159   * recommendations **need** references (like wikipedia)
160   * Every commit gets logged & we need your review!
161
162 # How to commit
163
164   * https://git.bettercrypto.org (master, read-only)
165   * https://github.com/BetterCrypto/ (please clone this one & send PRs)
166
167 How?
168   1. discuss the changes first on the mailinglist
169   2. clone 
170   3. follow the templates 
171   3. send pull requests
172   3. **split the commit into many smaller commits **
173   4. don't be cross if something does not get accepted. 
174   5. be ready for discussion
175  
176 # History part
177
178 Pre-history
179   * Scytale (7h century BC)
180   * Caesar 
181   * Vigenère (in a cifra del. Sig. Giovan Battista Bellaso, 1533)
182
183 ![Scytale](img/scytale.png)
184
185 # How you can loose your head
186   * Mary Queen of Scots (1542 - 1587)
187     * Queen of Scotland until 1567
188     * Try to regain the throne 
189     * Was found guilty of plotting to assassinate Queen Elizabeth I of England
190     * Prooven after his code get broken...
191
192 ![Mary](img/mary.jpg)
193
194 # How it can change a war
195   * II World War
196     * Enigma in use by German Army
197     * Broken by the first comuter (Alan Turing)
198     * Sign the end of U-Boat supremacy on the sea
199
200 ![Enigmae](img/enigma.jpg)
201
202 # A sort of Steganography 
203   * Navajos Code Talkers (Pacific War - US Navy)
204
205 ![Navajo](img/navajo.jpg)
206
207 # Nowadays
208   * Asymetric cryptography
209     * RSA (River - Shamir - Adleman) - 1977
210     * GPG (Phil Zimmerman) - 1991
211   * AES (Rijdael) - 1998
212
213 # Famous names
214   * Cryptography was an hot topic for a lot of people
215     * Thomas Jefferson (1790) - ciphering cylinder (used for 150 years)
216     * Charles Babbage - break the Vigenère Cipher (1854, unknown until 20th Century)
217     * Gilbert S. Vernam (AT&T, 1917) - polyalphatic cipher with random key without repetition
218       * Only ciphersuite impossible to break both in theory and in practice!
219
220 # Theory part
221
222 \[
223  \hbar \frac{\partial}{\partial t}\Psi = \hat H \Psi
224 \]
225
226
227 # Some thoughts on ECC
228
229   * Currently this is under heavy debate
230   * Trust the Math
231     * eg. NIST P-256 (http://safecurves.cr.yp.to/rigid.html)
232     * Coefficients generated by hashing the unexplained seed c49d3608 86e70493 6a6678e1 139d26b7 819f7e90.
233   * Might have to change settings tomorrow
234   * Most Applications only work with NIST-Curves
235   * Bottom line: we leave the choice of ECC yes or no to the reader. You might have to adapt again.
236   * However, many server operators tend towards ECC  (speed)
237
238 # Keylengths
239
240   * http://www.keylength.com/ 
241   * Recommended Keylengths, Hashing algorithms, etc.
242   * Currently:
243     * RSA: >= 3248 bits (Ecrypt II)     
244     * ECC: >= 256       
245     * SHA 2+ (SHA 256,…)
246     * AES 128 is good enough
247
248 # AES 128? Is that enough?
249
250 \centering{,,On the choice between AES256 and AES128: I would never consider using AES256, just like I don’t wear a helmet when I sit inside my car. It’s too much bother for the epsilon improvement in security.''\par
251 — Vincent Rijmen in a personal mail exchange Dec 2013
252 }
253   * Some theoretical attacks on AES-256
254
255
256 # (Perfect) Forward Secrecy
257
258 Motivation:
259
260 * Three letter agency (TLA) stores all ssl traffic
261 * Someday TLA gains access to ssl-private key (Brute Force, Physical Force)
262 * TLA can decrypt all stored traffic
263
264 Solution:
265 * **Ephemeral** session keys via Diffie Hellman (**DHE**)
266
267 # Review of Diffie Hellman
268
269 Let g be a primitive root mod p. p is a Prime.
270
271 Alice to Bob: \[ X = g^x \mod p  \]
272 Bob to Alice:  \[ Y = g^y \mod p  \]
273 Alice calculates: \[  k_1 = Y^x \mod p \]
274 Bob calculates:   \[ k_2 = X^y \mod p  
275 \text{. Therefore, } k_1 = k_2 \]
276
277 Proof:
278 \[ k_1 = Y^x = (g^y)^x = g^{(x*y)} = (g^x)^y = X^y = k_2  \mod p \qed \]
279
280
281 # Reality 
282
283 \centerline{\includegraphics[width=2cm]{img/xkcd-TLA.png}}
284
285 # Well...
286
287 We still recommend perfect forward secrecy.
288
289  * Ephemeral: new key for each execution of a key exchange process
290  * SSL private-Key only for authentication
291  * Alternative new ssl private key every x days months
292  * Pro:
293     - Highest Security against future attacks
294  * Contra: 
295     - Elliptic Curve
296     - Processing costs
297
298 # (P)RNGs
299
300   * (P)RNGs **are** important!
301   * Nadia Heninger et al / Lenstra et al
302 ,,… to identify apparently vulnerable devices from 27 manufacturers.''
303 ![mining P's and Q's](img/mining-ps-and-qs.png)
304   * Entropy after startup: embedded devices quite bad
305
306
307 # (P)RNGs - recommendations
308   * Look out for known weak RNG
309     * Dual EC_DRBG is weak (slow, used in RSA-toolkit)
310     * Intel RNG ? Recommendation: add System-Entropy (Network). Entropy only goes up.
311   * Use tools (e.g. haveged/HaveGE http://dl.acm.org/citation.cfm?id=945516)
312   * RTFM 
313     * when is the router key generated
314     * Default Keys ?
315   * Re-generate keys from time to time
316
317
318 # Cipher suites
319
320   * What is a SSLCipherSuite?
321   * vs. SSLProtocol
322
323   * Example:
324
325         SSLProtocol All -SSLv2 -SSLv3
326         SSLCipherSuite 'EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA'
327
328 # Some general thoughts on settings
329
330   * General:
331     * Disable SSL 2.0 (weak algorithms)
332     * Disable SSL 3.0 (BEAST vs IE/XP)
333     * Enable TLS 1.0 or better
334     * Disable TLS-Compression (SSL-CRIME Attack)
335     * Implement HSTS (HTTP Strict Transport Security)
336   * Variant A: fewer supported clients
337   * Variant B: more clients, weaker settings
338
339
340
341 # Variant **A**
342
343     EECDH+aRSA+AES256:EDH+aRSA+AES256:!SSLv3
344
345 ![Variant A](img/variantA.png)
346
347 Compatibility: 
348
349 Only clients which support TLS1.2 are covered by these cipher suites (Chrome 30, Win 7 and Win 8.1, Opera 17, OpenSSL >= 1.0.1e, Safari 6 / iOS 6.0.1, Safari 7 / OS X 10.9) 
350
351 # Variant **B**
352
353   * weaker ciphers, many clients 
354
355 ![Variant B](img/variantB.png)
356
357 # Variant B compatibility
358
359 ![Compatibility](img/variantBcompatibility.png)
360
361 # Choosing your own CipherSuite string
362
363   * Rolling your own cipher suite string involves a trade-off between:
364     * Compatibility (server <-> client), vs.
365     * Known weak ciphers/hashes/MACs
366     * The choice ECC or not, vs.
367     * Support by different ssl libs (gnutls, openssl,...) vs.
368     * Different versions of ssl libs
369   * In case of ssl lib version issues: do you want to re-compile the whole server for a newer version?
370   * Be aware of these issues before choosing your own cipher suite. Have test suites!
371
372
373 # Choosing your own CipherSuite string (2)
374
375   * Complexity 
376   * It is a multi-dimensional optimisation problem
377   * Consider strong alternativesto de-facto standards (pros/cons - CAMELLIA vs. AES)
378   * _WISHLIST_: generator for settings? click-dropdown boxes on the webserver -> gernate config
379
380 # Practical settings
381
382 ![Tools](img/rusty_tools.jpg)
383
384 # What we have so far
385
386 * Web server: Apache, nginx, MS IIS, lighttpd
387 * Mail: Dovecot, cyrus, Postfix, Exim
388 * DBs: Mysql, Oracle, Postgresql, DB2
389 * VPN: OpenVPN, IPSec, Checkpoint, ...
390 * Proxies: Squid, Pound
391 * GnuPG
392 * SSH
393 * IM servers (jabber, irc)
394 * _DANE_
395 * _Configuration code snippets_
396
397
398 # What are we missing
399
400 _WISHLIST_:
401
402   * Mail: Exchange, Sendmail
403   * SIP
404   * RDP
405
406   * Everything as HTML (easier to copy & paste)
407   * Config generator on the website
408   * Automatic testing suite
409
410
411
412
413 # Example Apache
414
415   * Selecting cipher suites:
416
417 ![Example Apache](img/exampleApache.png)
418
419   * Additionally mod\_rewrite:
420
421 ![Example Apache rewrite](img/exampleApache-rewrite.png)
422
423
424 # Testing
425
426 ![Testing](img/medical-test.jpg)
427
428
429 # How to test - Tools
430
431   * openssl s_client  (or gnutls-cli)
432   * **ssllabs.com**: checks for servers as well as clients
433   * xmpp.net
434   * sslscan
435   * SSLyze
436
437
438 # Tools: openssl s_client
439
440    openssl s_client -showcerts –connect git.bettercrypto.org:443
441
442 ![openssl s_client](img/openssl-s_client.png)
443
444 # Tools: sslscan
445
446 ![sslscan](img/sslscan.png)
447
448
449 # Tools: ssllabs.com
450
451 ![ssllabs.com](img/ssllabs.png)
452
453
454 # Tools: sslllabs.com (2)
455
456 ![ssllabs.com](img/ssllabs2.png)
457
458
459 # Tools: sslllabs.com (3)
460
461 ![ssllabs.com](img/ssllabs3.png)
462
463 # /End of Part 1
464
465
466 # Begin Part 2: Attacks, current topics, reactions from the Internet community
467
468 -> azet
469
470
471
472
473 # Wrap-up
474
475
476 ![Wrap-up](img/wrap-up.jpg)
477
478
479 # Current state as of 2014/10/06
480
481   * OK: More or less solid basis with Variant (A) and (B)
482 ( Some minor modifications needed - maybe)
483   * Public draft was presented at the CCC Dec 2013. 
484 Well received. Good feedback (Dan Bernstein, ...)
485
486 # What's still needed?
487
488   * Need to convert to HTML and have the whole guide on the web
489   * fix the \texttt{@@@CIPHERSTRINGB@@@} macro in the configuration/ dir
490   * re-review  the configuration/\* files. Maybe crap slipped in 
491 due to large commits :(
492   * _WISHLIST_: config generator
493   * _WISHLIST_: automatic compatibility testing
494   * long term maintenance / upkeep strategy
495
496
497 # How to participate?
498
499 1. We need: cryptologists, sysadmins, hackers
500 1. Read the document, find bugs
501 1. Master git repo (git.bettercrypto.org) is world-readable. 
502 1. Subscribe to the mailing list
503 1. look at the TODO.md file
504 1. Understand the cipher strings Variant (A) and (B) before proposing some changes
505
506 # How to participate? (2)
507 1. If you add content to a subsection, make a sample config with variant (B)
508 1. **use the \texttt{@@@CIPHERSTRINGB@@@} macro !** :
509   * edit config snippets in \texttt{configuration/\*}
510   * \texttt{make config} to copy over the template from \texttt{configuration/} to \texttt{stage/}
511   * \texttt{make config} basically does: \texttt{sed -i "s/@@@CIPHERSTRINGB@@@/\$cipherstringB/g"}
512 1. Use the github.com repo for pull requests
513 1. **important:** please do many smaller commits! It's easier to review and merge.
514
515 # How to participate? (3)
516 We need: 
517   * Add content to an subsection from the TODO list -> send us diffs
518   * Reviewers!
519
520 Accept that  your commit might be under quite some scrutiny, that's the game.
521   * **C**ompletely
522   * **O**pen
523   * **S**ource
524   * **H**eaders
525   * **E**ngineering and
526   * **R**esearch
527
528 # Links
529
530   * Website: www.bettercrypto.org
531   * Master (read-only) Git repo: https://git.bettercrypto.org
532   * Public github repo for PRs: https://github.com/BetterCrypto/Applied-Crypto-Hardening
533   * Mailing list: http://lists.cert.at/cgi-bin/mailman/listinfo/ach 
534   * IRC: #bettercrypto on freenode
535
536
537
538
539 # Thanks
540
541 \centerline{Thanks}
542