2aa047f38daf0cb3fb7a6f489fd531a0998f63ef
[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   1. Intro & Motivation
18   2. How we got started, how we work, what's there, what's missing, 
19      how to use the guide
20   3. History of Crypto in a nutshell
21   4. Theory
22   4. 10:10 __break__
23   5. Theory (cont.)
24   6. Attacks
25   7. Current trends (IETF, ...)
26   7. wrap up
27   9. 11:45 __lunch__
28     
29
30 # Prerequisites
31
32   * Participants should have a basic knowledge of System administration and be
33 familiar with configuring Apache, nginx, etc.
34   * know git/github
35   * a basic knowledge of crypto will help.
36
37 # Motivation
38
39 ![NSA](img/nsa.png)
40
41 # Motivation (2)
42
43 Please note:
44
45   * 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.
46   * If politicians in other countries did not know how to do this, now they know!
47   * If criminals did not know how to do this, now they know!
48
49 # The reaction
50
51 \centering { \textbf{Don't give them anything for free}\par
52   It's your home, you fight! }
53
54
55 # The reaction (2)
56
57   * We as humans are used to certain **modes** in communications:
58 spoken words tend to:
59     * be forgotten over time ("data expires")
60     * get modified/changed whenever "copied" (repeated)
61     * get changed/modified over time  ("forgetfullness")
62     * we tend to be not so harsh about them ("forgive")
63     * have a limited geographic range ("town talk")
64     * be very decentralized ("accoustic range")
65   * digital traces/data tends to be:
66     * stored for ever. Never modified by default
67     * used against you in the future
68     * very centralized
69     * copied very easily
70     * always searchable in O(log(n)) 
71     
72   
73 # The reaction (3)
74
75 \centering { \textbf{Crypto is the only thing that might still help}
76 \par
77 a.k.a.:\par
78         ``\textit{The Bottom Line Is That Encryption Does Work}'', Edward Snowden
79 }
80
81 # But where?
82
83   * Ca. August 2013: Adi Kriegisch asks Aaron where he could find good recommendations on SSL settings.
84   * Does that exist? At that time:
85     - no ssllabs cookbook
86     - only theoretical recommendations (ENISA, eCrypt II, NIST)
87     - ioerror's duraconf settings are outdated
88     - no practical copy & paste-able settings exist?
89
90
91 # Project plan
92
93 ![Project plan](img/metalab-world-domination.jpg)
94
95
96 # Project plan  (srsly)
97
98   * Do at least something against the **Cryptocalypse**
99   * Check SSL, SSH, PGP crypto SeIngs in the most common services and certificates:
100     –  Apache, Nginx, lighthNp
101         –  IMAP/POP servers (dovecot, cyrus, ...) –  openssl.conf
102         –  Etc.
103   * Write down our experinces as guide
104   * Create easy, copy & paste-able settings which are "OK" (as far as we know) for sysadmins.
105   * Keep the guide short. There are many good recommendations out there written by cryptographers for cryptographers
106   * Many eyes must check this!
107   * Make it open source
108
109   
110
111
112 # Why is this relevant for you?
113
114   * You run networks and services. These are targets. If you believe it or not.
115   * You produce code. Make sure it uses good crypto coding practices
116
117   * However good crypto is hard to achieve
118   * Crypto does not solve all problems, but it helps
119
120
121 # Who?
122
123 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, ...  
124
125
126 # Contents so far
127
128   * Intro
129   * Disclaimer 
130   * Methods 
131   * Theory
132     * Elliptic Curve Cryptography 
133     * Keylengths 
134     * Random Number Generators 
135     * Cipher suites – general overview & how to choose one
136   * Recommendations on practical settings 
137   * Tools 
138   * Links 
139   * Appendix
140
141
142 # Methods and Principles
143
144 C.O.S.H.E.R principle:
145   * **C**ompletely
146   * **O**pen 
147   * **S**ource
148   * **H**eaders
149   * **E**ngineering and
150   * **R**esearch
151
152 Methods:
153   * Public review
154   * commits get **discussed**
155   * recommendations **need** references (like wikipedia)
156   * Every commit gets logged & we need your review!
157
158 # How to commit
159
160   * https://git.bettercrypto.org (master, read-only)
161   * https://github.com/BetterCrypto/ (please clone this one & send PRs)
162
163 How?
164   1. discuss the changes first on the mailinglist
165   2. clone 
166   3. follow the templates 
167   3. send pull requests
168   3. **split the commit into many smaller commits **
169   4. don't be cross if something does not get accepted. 
170   5. be ready for discussion
171  
172 # History part
173
174 Pre-history
175   * Scytale (7h century BC)
176   * Caesar 
177   * Vigenère (in a cifra del. Sig. Giovan Battista Bellaso, 1533)
178
179 ![Scytale](img/scytale.png)
180
181 # How you can loose your head
182   * Mary Queen of Scots (1542 - 1587)
183     * Queen of Scotland until 1567
184     * Try to regain the throne 
185     * Was found guilty of plotting to assassinate Queen Elizabeth I of England
186     * Prooven after his code get broken...
187
188 ![Mary](img/mary.jpg)
189
190 # How it can change a war
191   * II World War
192     * Enigma in use by German Army
193     * Broken by the first comuter (Alan Turing)
194     * Sign the end of U-Boat supremacy on the sea
195
196 ![Enigmae](img/enigma.jpg)
197
198 # A sort of Steganography 
199   * Navajos Code Talkers (Pacific War - US Navy)
200
201 ![Navajo](img/navajo.jpg)
202
203 # Nowadays
204   * Asymetric cryptography
205     * RSA (River - Shamir - Adleman) - 1977
206     * GPG (Phil Zimmerman) - 1991
207   * AES (Rijdael) - 1998
208
209 # Famous names
210   * Cryptography was an hot topic for a lot of people
211     * Thomas Jefferson (1790) - ciphering cylinder (used for 150 years)
212     * Charles Babbage - break the Vigenère Cipher (1854, unknown until 20th Century)
213     * Gilbert S. Vernam (AT&T, 1917) - polyalphatic cipher with random key without repetition
214       * Only ciphersuite impossible to break both in theory and in practice!
215
216 # Theory part
217
218 \[
219  \hbar \frac{\partial}{\partial t}\Psi = \hat H \Psi
220 \]
221
222
223 # Some thoughts on ECC
224
225   * Currently this is under heavy debate
226   * Trust the Math
227     * eg. NIST P-256 (http://safecurves.cr.yp.to/rigid.html)
228     * Coefficients generated by hashing the unexplained seed c49d3608 86e70493 6a6678e1 139d26b7 819f7e90.
229   * Might have to change settings tomorrow
230   * Most Applications only work with NIST-Curves
231   * Bottom line: we leave the choice of ECC yes or no to the reader. You might have to adapt again.
232   * However, many server operators tend towards ECC  (speed)
233
234 # Keylengths
235
236   * http://www.keylength.com/ 
237   * Recommended Keylengths, Hashing algorithms, etc.
238   * Currently:
239     * RSA: >= 3248 bits (Ecrypt II)     
240     * ECC: >= 256       
241     * SHA 2+ (SHA 256,…)
242     * AES 128 is good enough
243
244 # AES 128? Is that enough?
245
246 \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
247 — Vincent Rijmen in a personal mail exchange Dec 2013
248 }
249   * Some theoretical attacks on AES-256
250
251
252 # (Perfect) Forward Secrecy
253
254 Motivation:
255
256 * Three letter agency (TLA) stores all ssl traffic
257 * Someday TLA gains access to ssl-private key (Brute Force, Physical Force)
258 * TLA can decrypt all stored traffic
259
260 Solution:
261 * **Ephemeral** session keys via Diffie Hellman (**DHE**)
262
263 # Review of Diffie Hellman
264
265 Let g be a primitive root mod p. p is a Prime.
266
267 Alice to Bob: \[ X = g^x \mod p  \]
268 Bob to Alice:  \[ Y = g^y \mod p  \]
269 Alice calculates: \[  k_1 = Y^x \mod p \]
270 Bob calculates:   \[ k_2 = X^y \mod p  
271 \text{. Therefore, } k_1 = k_2 \]
272
273 Proof:
274 \[ k_1 = Y^x = (g^y)^x = g^{(x*y)} = (g^x)^y = X^y = k_2  \mod p \qed \]
275
276
277 # Reality 
278
279 \centerline{\includegraphics[width=2cm]{img/xkcd-TLA.png}}
280
281 # Well...
282
283 We still recommend perfect forward secrecy.
284
285  * Ephemeral: new key for each execution of a key exchange process
286  * SSL private-Key only for authentication
287  * Alternative new ssl private key every x days months
288  * Pro:
289     - Highest Security against future attacks
290  * Contra: 
291     - Elliptic Curve
292     - Processing costs
293
294 # (P)RNGs
295
296   * (P)RNGs **are** important!
297   * Nadia Heninger et al / Lenstra et al
298 ,,… to identify apparently vulnerable devices from 27 manufacturers.''
299 ![mining P's and Q's](img/mining-ps-and-qs.png)
300   * Entropy after startup: embedded devices quite bad
301
302
303 # (P)RNGs - recommendations
304   * Look out for known weak RNG
305     * Dual EC_DRBG is weak (slow, used in RSA-toolkit)
306     * Intel RNG ? Recommendation: add System-Entropy (Network). Entropy only goes up.
307   * Use tools (e.g. haveged/HaveGE http://dl.acm.org/citation.cfm?id=945516)
308   * RTFM 
309     * when is the router key generated
310     * Default Keys ?
311   * Re-generate keys from time to time
312
313
314 # Attacks
315
316 ... next PDF... :)
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
409
410
411
412 # Example Apache
413
414   * Selecting cipher suites:
415
416 ![Example Apache](img/exampleApache.png)
417
418   * Additionally mod\_rewrite:
419
420 ![Example Apache rewrite](img/exampleApache-rewrite.png)
421
422
423 # Testing
424
425 ![Testing](img/medical-test.jpg)
426
427
428 # How to test - Tools
429
430   * openssl s_client  (or gnutls-cli)
431   * **ssllabs.com**: checks for servers as well as clients
432   * xmpp.net
433   * sslscan
434   * SSLyze
435
436
437 # Tools: openssl s_client
438
439    openssl s_client -showcerts –connect git.bettercrypto.org:443
440
441 ![openssl s_client](img/openssl-s_client.png)
442
443 # Tools: sslscan
444
445 ![sslscan](img/sslscan.png)
446
447
448 # Tools: ssllabs.com
449
450 ![ssllabs.com](img/ssllabs.png)
451
452
453 # Tools: sslllabs.com (2)
454
455 ![ssllabs.com](img/ssllabs2.png)
456
457
458 # Tools: sslllabs.com (3)
459
460 ![ssllabs.com](img/ssllabs3.png)
461
462
463 # Wrap-up
464
465
466 # Current state as of 2014/10/06
467
468   * OK: More or less solid basis with Variant (A) and (B)
469 ( Some minor modifications needed - maybe)
470   * Public draft was presented at the CCC Dec 2013. 
471 Well received. Good feedback (Dan Bernstein, ...)
472
473 # What's still needed?
474
475   * Need to convert to HTML and have the whole guide on the web
476   * fix the @@cipherstringB@@ macro in the configuration/ dir
477   * re-review  the configuration/* files. Maybe crap slipped in 
478 due to large commits :(
479   * _WISHLIST_: config generator
480   * _WISHLIST_: automatic compatibility testing
481   * long term maintenance / upkeep strategy
482
483
484 # How to participate?
485
486 1. We need: cryptologists, sysadmins, hackers
487 1. Read the document, find bugs
488 1. Subscribe to the mailing list
489 1. look at the TODO.md file
490 1. Understand the cipher strings Variant (A) and (B) before proposing some changes
491
492 # How to participate? (2)
493 1. If you add content to a subsection, make a sample config with variant (B)
494 1. **use the @@cipherstringB@@ macro !** 
495 1. add a template in the configuration-template/ directory. 
496 It will get copied to configuration/ via sed "s/@@cipherStringB@@/$cipherstringB/g"
497 1. Master git repo (git.bettercrypto.org) is world-readable. 
498 1. Use https://github.com/BetterCrypto/Applied-Crypto-Hardening for pull requests
499 Master git repo gets synced against github
500
501 # How to participate? (3)
502
503  We need: 
504   * Add content to an subsection from the TODO list -> send us diffs
505   * Reviewers!
506
507 Accept that  your commit might be under quite some scrutiny, that's the game.
508
509