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