Tampilkan postingan dengan label Cryptography. Tampilkan semua postingan
Tampilkan postingan dengan label Cryptography. Tampilkan semua postingan

Sabtu, 01 Oktober 2011

Membongkar Proteksi HTML Guardian

Banyak pemilik situs tidak ingin isi situsnya dibajak orang lain. Bermacam-macam cara untuk menghindari pembajakan. Ada yang menggunakan javascript untuk men-disable klik kanan. Cara ini sangat mudah diatasi, cukup dengan mematikan javascript saja. Dalam artikel ini saya akan menunjukkan cara membongkar proteksi html guardian, yaitu software untuk mengenkrip html source agar tidak dicuri orang lain.

Javascript-based Encryption
Cara yang lebih baik adalah dengan menggunakan enkripsi. HTML Guardian (HG) adalah salah satu software yang populer untuk melindungi html dengan enkripsi. Html yang dilindungi dengan HG tidak bisa lagi dibaca dengan mata telanjang (view source). Halaman html yang tadinya rapi, mendadak menjadi kacau balau tak terbaca, penuh dengan kode javascript dan karakter string aneh.
Sebenarnya bagaimana cara kerja HG? Cara kerjanya sederhana. Ketika halaman yang telah dienkrip dengan HG di buka, maka kode javascript yang ada di dalamnya akan melakukan dekripsi menjadi kode html kembali. Kode html ini kemudian ditulis lagi ke browser. Kode html yang telah di-dekrip ini hanya tersimpan di memori browser, tidak di file, sehingga ketika orang mencari di kumpulan file cache tidak ditemukan. Dilihat dengan view source pun tidak akan terbaca.
Generated Source
halaman demo
halaman demo
Dari cara kerjanya, bisa kita ambil kesimpulan bahwa plain-text html nya sebenarnya tersedia, namun hanya beredar di memori browser. Jadi ketika javascript dijalankan, dia akan menghasilkan source, source ini lah yang disebut dengan Generated Source yang disimpan di memori browser.
Khusus pengguna Firefox, telah tersedia addon yang sangat ampuh, yaitu Web Developer. Dengan addon ini, dengan sekali klik saja kita bisa mendapatkan generated source yang tersimpan di memori browser.
Mari kita coba membongkar proteksi HG di halaman demonstrasi. Halaman ini memang khusus dibuat untuk menunjukkan fitur-fitur HG.
Bila kita view source halaman demo tersebut, maka yang kita dapatkan hanyalah kode html dan javascript. Semua konten htmlnya dimasukkan ke dalam kode javascript. Kode javascript untuk contoh demo tersebut adalah sebagai berikut:
1
2
3
4
5
<script type="text/javascript">
//<![CDATA[
l1l=document.all;var naa=true;ll1=document.layers;lll=window.sidebar;naa=(!(l1l&&ll1)&&!(!l1l&&!ll1&&!lll));l11=navigator.userAgent.toLowerCase();function lI1(l1I){return l11.indexOf(l1I)>0?true:false};lII=lI1('kht')|lI1('per');naa|=lII;O0O0=new Array();O0O0[0]='<!DOCTYPE HTML PUBLIC "-//W3C~DTD~   ~~\r4.01 Transitional~EN"><html~9head~9script>ev~3(une~Eape(\'f~Pct%69~1%20\\161~d71%36~a8~a9%7B~]9f~n~d67indo~r7~aE~r3i~d44~]5~]2}1r~p~r~t76}}~b~y~g1~i~k}3D~a}2}}1y~k~o}St~G~]Eg}~]6r~6} 43h}~y2%}8~]F~]}      6}2})~j33~aC~k}H0}3B}}157}8i~k} 3}O}Q}Z~ ~k}=}I~k}3}fB}Z2~t}k}~s}}\'3}"~t}~r}}3~o7}\\B~~c~y}}6}\n}.~y}     2Ew}<}Z7}C}E}z~j7~q}r}n} }{~k}R~e}w}H~m}F}PB\'))</~E~G~I~D~F~H~J~,p=\'This page requi|:|3a b}4wser v|G~-~1 3~% o|H~Qw|G !\';dl=}~ument.lay|K;oe=w~|~~w.o~U~*?1:0|Za|]oc|_|a|c~3l&&!|j;|7|{|}|`|b.|7tEle{tById;|E|l|no|p~-debar?},ue:f~3|F;izN=~2vigat|R.u|FrA|7{{7L{|GCa|F().|nexOf~W~Qt~S~U| >=0{%r{\'{){+e{-{N|E{!{.N){|<og|\\\'iuy\'};~M|Hmsg|.|Y~Yn~[~0n ~Qm{G{|:tur{}{&e{p|m~}{|q~Qr}4|H={~{{^(da{e|^{zd~*gst{#t={y{{|Mzzz{}{*l|F{pz&~/|McIEz({tg);z*z z-z/;z1{| cczz |zc~1t{K~<|au=z4E;|FtTi|`out("zF{G",~b0){pzazgzB~Zz2{}cNS(e{ei{N|[|||Ezt{Ne.w|1ch==2zxz}ziyy3{ez8{uz;z=z,{\\}yz|[z|||~{c~Tz|:E|J|bs(y zJMOUSE~W{d|Zyz~1mz\\|F|onzSzp}ez.e{zI{y2y4eu|-zoS{py?|c~1zL|bzO{zR|T Fzl{|z_yz?{\\"z;zu(|j{ezC|M}4zrz{zry!|cbz]{7y7y{e~3|Gz^\' | z<ey{}0{pyWzyHy0zJyA{:ey6=}4z0yT|Mu0(zzyuz+yXy<x{zzm u1ycxyvzr.z"r{x |6Na|`!{1ul{&z}xxz"gx!|`.|F{#y~W^(IN~T|TEXTAREA|BUTTON|y*LE~)$| x$-1zjy`{}u2xy\\yyzhy=xV{z|o.y~Izey%y"y$yf.y\'y)Ey\'VEz;xdz\ry|Fy3|J=xyxXx3x\\z|z~x_yxbxw|p|:{{Exjyfy#xk|cxpy*xsxu{{|pxy{ox|nx&ly y\\yxcwxfyxiwwxnwEUP|wxoy(y*y,y.w     zy3xzhxxZwzwnw:|FyDx}3y:y<w"{N|7{azy{\ny~wAyBw<1xz\'{}nnzw#lzxzz{{r z$ yI{\ryuSy;ewV{Gz|c{J{L{N\'q|U{Edzxc{Txbwdl||{6{|.h|:f|.abz\\t:b|enk{ozVyuzYz[z]z_wXzbzd0zfyvz;wzhniwZzvxwd~1|F{~[z!z#z%x{}z)x\rz>z@z      vzXzZevvv)zczezg{pvwky\\w8w|yzm.p}4{7zLl{I~}{K{Mz_fi{yZxTwzy}{vBw~~1="vvv      vk"yyx1{    y|cv|G|:rx o{A|Ur{D{Fy[{NrvdvK{ woz_vFotw{#z}zLmyZ<zf{t|1s|dw}vDvef zv\\vz]v_~+va{p|#|%|*~Dty{ |`di|z"vF~|t~8vdy y>|2p|ey:n~1z      uu{~9l~|k|9y;v[z!u~R~@yu" uv"uB{z5xfssuGu~Uv[zNxt/cuP~8|#~@~B~9u+u-bgvI|Rv[#FuiujuRzOugvuo0u\\pzE|euPuA1i~8 <u ~I srcuA~Fox\'.juQ~9|$|)|\'u{u}tutuAz"|ctu\\t|&~Ju{/p~9c||G~9z"v\n|8|mduv[8}uGvr{ rv[uqt"rt"dzEts|5y7"3ur ut{EsuU~HuQ ~3{4t;tyMru\\b~9u~9fzMt7w|t0"uhFup~8&{gt;B~Rtt?tctdt?v|du~[|Qu~.|3k|n,|B{#{~u6.t\\uv};|#tR|bt\ntP|#tN<|CtQtSuetV#upvuzW{!R~Liewt{zMt\ntst4|#t~Css},t5tTt9~+v[t=uHe{4~;v[|t>tGgt;{fu)t@uv"tt-t/6tM>Ma~|~!~ Gu{#u#~+z?~Ay~R:szhu`sx&s2tBuKu<u\\u<sOv[v\nuy>A w|Rlt6v(~}sCz?|Rs[{!w"yMx\'wiz~3|4}4|susmv}sj{||#u<s|bsUsQsX -tFx\' {Kso|3s=|Ubwc~RtHtqruwiz~.u-~+t6u(y;v&skltersqsou-v|zNwVu{|AuIv[|a~Fy~I_{Epvzh~<#pt2<t|tsv[{2yuGcuusPv~8|:u{t6rte~\ns?sAsCu$nst}|#a>.t r1sLrQ<tJzNsr!vr#{zrr&|c~;~=uR~.{v[ErZr\\uH~<ltq|5uPs\\t.sqrtr~-zN .rNu|5|:waot8uGidv[s8swr2tuftWupuir7r9sVo~8Comry|8rC~\rrEt.rGr{|Qu|V{7t8sc|Hrr~.|8rss~1rI~JrKrRr1uu9|kz`qruck;sc|b-|Us\'vu5rm~3~8[|Ft%hu-~.w"|@~~~Ixs[s]dt&|8{EtFsebrsq#vGq%{}s`zt.]q\'t\nrTt!su;isysW~8R||u>strsuiqsyssR>s}qF|msv||slu-r$r[u~{rg~=tqsr^rir uHrXuKt{Qr+uqquxs9tsKq)tF~}tFt9z?vQ~Rtqu5tj{:tqk|`tkwa~@mrNqs@sBq~+\'|3|:vtz]{|{#u-u|t:qeq\r>q{ A~2q{z|G&#}U3tz|$t:>';O00O='fu';OO0O='JFSeuTGQkeMOrOUOSuFG';O00O+='nction __'+'__(_'+'O0){';O0OO='%76\141\162%20l%32%3D\167%69n%64%6Fw%2E\157p\145r\141%3F%31%3A%30%3Bfu%6E%63\164\151%6Fn%20%6C%33%28l%34%29%7B\154%35%3D%2F%7Ah%2F%67%3Bl%36%3D\123tr\151n\147%2E\146\162o%6D\103h\141rC%6F\144e%28%30%29%3Bl%34%3Dl%34%2E%72%65%70\154%61c\145%28l%35%2C\154%36%29%3Bv\141r%20%6C%37%3D%6E\145\167%20%41%72ray%28%29%2C%6C%38%3D%5F%31%3D%6C%34%2E\154%65ng%74%68%2C\154%39%2C%6CI%2C\151l%3D%31%36%32%35%36%2C%5F%31%3D%30%2C\111%3D%30%2C\154\151%3D%27%27%3B\144o%7Bl%39%3Dl%34%2Echa\162\103od%65A%74%28%5F%31%29%3Bl\111%3Dl%34%2E\143\150\141%72\103o\144\145%41t%28%2B%2B%5F%31%29%3B\154%37%5B%49%2B%2B%5D%3Dl%49%2B\151l%2D%28%6C%39%3C%3C%37%29%7Dw%68%69l%65%28%5F%31%2B%2B%3C%6C%38%29%3B\166%61r%20\154%31%3Dne\167';O0O0[0]+='rzhng~||8{ yhz p%|8q}r\\qKrAt?zL{ sgu?~3~/p#ps_|ad|3q tFpqy~G{6|8fex{"q3t7mq>~}peopSpXt?pU~IzD|apM~QrNpy~(u     pKsxi|31v%qLrtopLparzhz|R-f|:pTreqJt6vP{sq^.qbo |A~2|`v[|rzmt   q)<sTr8tAsVqsF{xit$pKr%p||Mo&{|ssJ/sv<x&qcqqqss>rdo6tpsKpotqr)oKp rzhuW|Gp?upotdo ~R(t|3|Q|H.vqT)tq<rWurYoG_phr*r^~8okpprupoWtcoYstqox"~Ryu|@puL|8ppn{Q o[uZs)oOu\novtcYz\\zEsE{+pwp{tqo|Rq>tzNt6{s<vJqnoAo,s3qrsXPqWtjyz\\|HzZ|6~Rs[~.hu{q+r3quoq    p9~8Iq>|7n\rrqsDrH/rPs|pKh~+tt6oepog"n-|7ojn(u\r~<r`trb"n;n.~nR{|s9nO|8n>tdq$wVp/rLrN<zZgtt"|T|OjpguGt&t("25uG~@q:v[~bto>o+qsz~8oFq~t~1q{r~-|:t6rynououoxnho=qoo*qdn#sPn%~8Ts\\wczupm|:sx|`uopdp$nstmqpmv[hg12p~8s}oxo5mqK|mupx{ {*x&tm$hm&ou>oWs=s~rja~Mt-|av{t6|C{{;nnun{}nx|Fpxp^oSw~|JtqnapXy3rz{*z!o|F|}rzmAmCtR|HItK{P Exu1|R|V5|Psd|1g~@|HmymrPmoBsXD|2mP|8~Gmm@yB|Byiz(l\r~;uty   k{Hn!lm-m>l   slot{~|nku<vwa{#{rqYt{:trvllmo-lll!uVp!whwVom+l mm >n\'o|1bqFmfl&|8xzhln4mm/m1m3qt n*znn0srmu>vP~Qs[~@qYqv5l[|2|B|D~-oovlS|HqUtqyhtq u-qwrpmDwIpSrrzl |Jt6os{Yz,}4mov|AovvXrnGrnzi|Jl;ll2n$qsPtArmm\rnRlRn+|4n.|3{:l$rzhn1|V|A{"~-cn>sdnKr""pojk|RdnQsr~[p\rs9r0sq0unn7F~8Ul},a-}+}4lfn\rrkskroqXq^nengnimnktzhnmnotnrntrnvnxnzs&ln}r/l<kmk}4lCqFl&onklhk|7|3oqqlzhuq"u\nl1ml>k]lBo3qFu\'|bkmkD~[qKmkol~8l5o4Cu<pvsb&x"pq5n\'u( S~Fpnv,q z5 5+k"nm         lkZkpl3l?Oo7{}lqrx|?|3p)pZ~Vm:mBz]m7r\\{|jo>/o@o k[o.sXmrfs&q |H|Ale{iplpoM{}||>t%sfqUo^n\r|AoY u<mi{6|Q{zz}lsj7js3qf>ySsr>oslHuyDp|R|cjWsjXj8"j\\L~+gsBn={J~UvL|blKslMm0m2m4s>qp+nAlVrqy|Gm        nklTm6pyu5t?nrUl\\jSy{#ak{liyuim\\z} mWu!|fuHmK|8l7p\\rd{i|2hmcpXC|1~Q|Fi\'pXR{:~-~+tqJ~T~+o}jL~+u-v}kkvjpn.lso jjjZr:k{Br~Yiz#u$rm)z3i5lDu<~/n/n!nEk1sxllNj{~Komju-m%m]m|3kypfj+iv{kFjXiCqekrm6iUs}iWr2jylO~8|<lm      ~Tu1rmupNpbmuncxo9v$k\niAilsjkj\\s;tu"u$ D|:x"sin,yMg~*zmls!zniui[s}p)n@qlbrhpkt6j-pxrms^p.u!omijepx&ts          t?WYSIh:GqSklrtx~.sds}hl~hCah/h~Amh|J|Hh"~"p*rFsEh7t?j;j# Add-Oz,sdhLh~AhPsq{3{ |@t7ny!ssxvi`pw|smplhWul_j0hZhvz"sk|3h+p)hvh$i2psesqQt?{7u{tNnoJifzm"nVq|u#noOooDzNmipfnpWproxoJs=kld|Vu#r=gz?l~pxhchNhe|Gh/riHiimW        yn    {pxopntFh]-|Mkhlkk$p  y6w|~Bk/u`m,k3n6vq      >gGo~BonCiA/snfpJ|5|7os [gEnMg,wshP_np\rlnUnWg,hO|ViNmZg?~1jzhhg-hogpg>h^|M~|v(x\'vY{}~|tRq)q]pH~+rRimlj\\Sq>rtos~Asy-{7-xzhsgrU{*tl;o>lLl3iZlP Vswpk%|%pv}gJistTqsk5pj|af){QnelgZhrJh\nt~~>o uss,s.us1ls5k*|GqoDt`~QvP{Qo<sjXj6o"o|ohm_ptrLl=l3j\\Tv}slhzDmpiq {!qUjwiXh f!s}ijefzDkykdigg7|BlyCy5|Brnn*l[gxy<rNi)jok~L|aqRjAu i~*ip\\sEgopikn/qFou5nq8|RkbrN|0jComY\'tbpTgm9n1j}rzhg|Rkng_We%k*~|p5lU~.h/ixhB{Ehqt7pfyrz#p$ifm&qPpofqFg"pkkoYrNi q>u-t9pcqRw|mup_pOew|pkv(zNg@ff~@-e<og\\|8u2voypru1y      h)oUtid|Hdouupmv\'nsdlSie;eLl_u6oWy;m]|AePp$y3~Qe7{ |JeVpSlfblSn\ns}lljTtinG|Jxmx~BgpXkdljpf{|8fsz"eohCtkdm6n%lizpq xYm]oq lqQkkm}lb{nrNNpweMciL ku5wmQn=sdr|Ghndlb|:ixm;i-rAemZftpzmYl(d |Arxu<vCqKeboy3u#fqElmpwfLuHlbepnm\'ixq3d(n{EvQlqbjzm&|fh/m~hm     rxyu~.ko{3k>{tqulbeKido"e{5~/dgxferi^fclle~RnH{BhPtqzuihcq!zNtqevfsou#sm|2pe~@m]rm~G~RrNWnGth/lhr|3c2rNPdDm&!ikjihiDj9~8lArpcn_|3!u{njnlr4snpkPt\no>jXfs3f uznYn=q s0qGjT|8ie~@h0mir>|McpLefoso|Aq>jsdyLtv/sdptlo{!q>z!|Kg^rVnLuJn_k,rpwon>e n3k2tUk4gOk6gKcU|8gnBgYf7rLgzg@ha|Hh#jqv|hhn/|anGjUnJofuJh_cDgJf`|MofbpfcDp|MkdciItlbsE~|~MlsBo4qrcevodqP|4y        sH {5sir[qSdeunpmi~~nes[~+d#kcDqoe!e8smRe:e{osjecst6o8j>bDkmcupJbhTp,mZz.pwq>erb.qh1~-b5pwg&sjm       kaqkdbQb$g*i;|Vb+kngVf:c<~9fRo$"wcffXrRhqshx"w~yx\'qErZf|8{3rspvcffl<cQsPcSp';O00O+='eva';OOOO='KdksOiiBFIxOkcRv';O00O+='l(unes'                                                    +'cape(_O0))}';eval                                                                     (O00O);OO00='EfdPDZPFUOMMwwOfsZoX';O00O='';O0OO+='%20A%72ra%79%28%29%2C%6C%30%3D%6E%65w%20A\162ray%28%29%2C%49\154%3D%31%32%38%3Bdo%7B\154%30%5BIl%5D%3DStr%69n%67%2E%66%72o%6DC\150a\162Code%28Il%29%7Dw\150i%6Ce%28%2D%2D%49l%29%3B\111%6C%3D%31%32%38%3Bl%31%5B%30%5D%3D%6C\151%3Dl%30%5B%6C%37%5B%30%5D%5D%3Bl\154%3Dl%37%5B%30%5D%3B%5F\154%3D%31%3B\166ar%20\154%5F%3Dl%37%2E\154\145%6E\147\164h%2D%31%3B\167hil\145%28%5F%6C%3Cl%5F%29%7B\163\167\151%74c%68%28l%37%5B%5F\154%5D%3CIl%3F%31%3A%30%29%7B%63\141\163\145%20%30%20%3A%6C%30%5B\111%6C%5D%3D\154%30%5B\154%6C%5D%2BStr%69n%67%28l%30%5Bll%5D%29%2Es%75b%73\164\162%28%30%2C%31%29%3Bl%31%5B%5F\154%5D%3Dl%30%5B%49%6C%5D%3B%69f%28%6C%32%29%7B\154%69%2B%3D\154%30%5B%49l%5D%7D%3Bbre\141';OOO0='l';O0O0[0]+='Js}eef?hph@yLzNsxo rUe*t4 Cg|q,w~z!y       |3f)f%ujS~Q{#m  8}Op$rmS|EklbbJplg*olFy        etq~Pd|rrsypyr|posb||H|exc[x~+{.fzh|3rxz]|KdLraWi_tFut~boaEe{gBuHhxaba+rNBj/d>~B|f|3mfe@r@pya|t7rfma`tqgwoS{o^{5vza`oaNhPrss|@rzkk?pXpfqk-amQ twtyp7sEf\np:a\'a1a*|KupIuRpwu<c%fzFcj&yos<{}roqUnSzZi|us<doMhka(t`\'n,a6mv~uzhp%jSaftv~jqRozL`|Rpk LANopfmrrUmtos~S~,mHh@ebp/|;{\'b\\fxoWxzhaPrN`:jU`cktFrzirm   u1`4wazOnc~@u-fsbTfdnoW``~Qocj`3s=\'{"dyqknIuoyom\'`I{ rpx`|eibSvBh~pxd[ape!eXa1g\npf`kl\\pwdH`gg~.bboi7|?},b>o:`r|8lrj%fb~Bm?o{5msWo`8oMc4noc%lp%u=rNA~[sBaifz`\na^`\ro\'|B_tF`0uPq`8`JtbpylF|VmpNl"phl$pkmu?|egg\nmkcoz{E|1~1tqx{`pfm{Qaer_bl[mp|_efpuzhvlwkm_gg_]tkm!u?d:~UefmB}4~E|roPcfpco_ti9kjqi*pRa9bOmX_Gl~QhfdCk.dpb-h/fe7~Pt/qZjc_jedXl_0_Pn.`       s\\x&ku|Vtmgxqw||gn/lrg\nvcspS|>wav4joiHkpfsbauj/pf|?_<__upzhcc3:tp8`#~8^O`A`&vQa+dSeqssdu-|1p[dq"bzki`zha9{}5a?fpkje`Bd;ahDaPc:fnrQjuevikd`dtq`%a)^c|Kiq,vQr``dlkj/lpoWlZlzfzcbkK{:eWd:y4p(hSb    cYa\'~|tx{:m    _#oggcf{5g}fsqks0^c[eRoot6^seftuqP]3p$s}z|Gi c]e.~2bCb$p`|8v\nqi_hygm6b;ttsqt$l{~/])vz\\m :n\ndpShxkyk|}z!l_aPcfu_xqK2tq3jLdNj^H|`a{my|I|2^<d-pwq ^G_\\as0^eubcsE`nkbhUnc:f;mui]kd$]IcYm[xzhiIlteviida|4j/k~+dRsd^i:b_]7p$~BhP~/xza1b)kqUelzhqPmm^|sqkoTor]`C]\n]hmKnl!(jPid h\\F\\9tqh\\M~Zlzh\\EdSubk:~[_zted7f|M`\\oSiwgmlrtqlAxq~.k>d\\^aXn     \\-i7`Do]py|:x{qPd\\&|2{||3kqK|Md^m!a1|)rUu$rNf#rse)_)ioW^Yd<|np$]1`Hrz]lrqBc{"wXct~  c|Gc]nio]ktqer[e{][\rd.i@aac>jlkrcBkdkaolzszOm`g]IfgitfjzfjpS`s\\0_Qv|h({t^fsvIrjL`t^{wih[Dq5cfspf[+g)kir!rhwcvVts}[Ng\ngRayo4oxtqaXoWm]Icn<oPi{{_yrzhtc\\fl^z[l[fs~-^>r^Rc(n`py[NeE[^b+\\bdUhAnzZvQtsg\nc2n0m;ieqjf\\ipXjS{aMjAcejoe!fK_.olb_8ahbjn/^lrtooaaq~U~/c\naLw"]/qkb@|a|GpkqHgp4rk:c\ry jy_b9ai]Rg\n|5dog_\\bftti^`vnR_Di\\jau=efdqFfsm[`7iid\\p\\g yf^evZ<^J^mZ1vP[jc;[%insX}+|r[}|9~H\\2t fjx[5iva Ze|&Zh`I[<~*[>d9zuei_OhitHdrA[Xd4gHnkw[\nfebamuxj  eky_n2Zsx"]J~(wh_xoWlAtq^OS~2etq{MlG_crtUgo[i\\f`~sE[Y]oQ`twcyDdX`Uky|Ab+\\QtddWyut%e%obbs~[|ReL{&_M`sppzh[/zslm6vim"nImFbgrc\\q#k`m^mZp]`Ic`ahw;jjw~olFjbbSldl!zLeWn/ky\\w]Bsx_\\YgaAw\rt6d={d@]Kw\rZ        rAosz{7pjz.rjb>xib@{dDn/`_pw~1Y"_6u!m?n1h{ ]a~pXfsY%_Pu-d%zZm?i6y4q{r\nx_ew|QhPYzhpx{;hf^t6Za^m~P\\;Zzh[[sd[^^zYunAbhZoZg]o{>Z+rteq<wBtFw:sxie~*Z2k!s}ln[SnpC82} ;pp [SwjgSX\nrAzjS_\'{;zxefXAX\r[y]_/Z?izh]fpa6YOX0`l_0lvlI~2bqp~3ypA]OZ|rm6os]X\reFkdpfd[XAvpd~1vPjpmbRpyv(fZh[#q(f;fZj[qsAp1ru|5m[3syanEc Y@q>vQgzj(Ya{}Zi]`pw`qK[InW t9r|K[IdS]m%{:ridub~|4|Vc"ifuWe   ]/iMWr~Bzcn/ap[" h`deW>W`1olbb[g_|Z%qv]hwu6laYpkj?ph~Ahhwp#s!pskzt#w\rnhg_b-cY`;boo3u g\nzOW;rzhW>kgg*hqK`8Wf<t\ns<W{ss t:s#kUn|"88t>fDtDuGf@v[q`tLgKo?gLbtWuitZ>[IcAW`IWM|@dnke>qa^n/]9XtY3q=_cpf~Yb?YKqStvt]pGf7tgXq*bf.s     t2f#Y9|HBk>zLYj_c~)pcgUf7s/W}st6vIhVrRcHp^v[GpwppvacIu&p0{\rzukQt\'yt<uqs%V}]V\nu<s-v[s/s1~1jlun0w?vzh|2Yul`(xU)acwv[{ y3f+VNk9v[NzO^[wgeTy3uGkLcJuWVXa   n0V[s#V^n{kWV]VbtHv[ls1s6|Gt1a\n<usfDUrs8s~Uz`t V`nqTj\n&U\'t9;U*U(U-Y_yq51997-ze6Y0tcV`Imr[jh[sU`eXxtvU+U)UHU-UJ|#su#vU!VdU#tKUq-m.m00lPf,iYUXlP|gbuJ~;tp:~wUgvEvG]3xfquRl)yuv[_{7lPmB|`q)U_bm.n UdUfUhrUku/Y%gJY%pUxVwk&U{Ue/Ug|pUuzhUlm/cyb"d5on^HnVq.n_kzzm~8T TUwU`UzUcTT\rUiv}Tzhq/k\'kAkczsjb!k)rnc oIgZTk%UbU|TU~UjTT{*qgJT@pT"T       T$U}TT=|:T/nr(t9gJ2TDUyTFT:T&TTKTTNmJmLpgJ3T!TTT9T%T<T(T>T*TNpp\r#ts\nTnWifWi\\oGgTaTTcTHT\'[      uThi]__nUFc}u  VpTvT8T\nTyTXT|TophjfgJS\r_xSp  TxT;TITfTYT*e!ttagJS kpy]*l$UwrOgWUOWzst>|e{1sh[z|fz_s8yd?(|e|"tut t#u:|#V\r~Dp8n|.^ziQr:^j{ bK>wrfwuww`)fu|pt\nS*szhm&yt\nppJ';O0OO+='k%3Bde%66aul%74%3A%6C%31%5B%5F%6C%5D%3Dl%30%5Bl%37%5B%5F\154%5D%5D%3B%69f%28l%32%29%7B%6Ci%2B%3Dl%30%5Bl%37%5B%5F%6C%5D%5D%7D%3Bl%30%5B\111l%5D%3Dl%30%5Bl\154%5D%2B\123t%72i%6Eg%28%6C%30%5B\154%37%5B%5F%6C%5D%5D%29%2E%73u%62st%72%28%30%2C%31%29%3Bb\162e%61%6B%7D%3B\111%6C%2B%2B%3B%6C%6C%3Dl%37%5B%5F\154%5D%3B%5F%6C%2B%2B%7D%3Bif%28%21%6C%32%29%7B%72e%74\165rn%28\154%31%2E%6Aoin%28%27%27%29%29%7De%6C\163e%7Br\145\164u\162n%20%6C%69%7D%7D%3Bv%61\162%20\154%4F%3D%27%27%3B\146o\162%28%69\151%3D%30%3B\151%69%3C\117%30O%30%2El%65ng%74h%3Bi%69%2B%2B%29%7Bl%4F%2B%3D\154%33%28O%30%4F%30%5B%69\151%5D%29%7D%3B%69f%28%6Ea%61%29%7B%64%6F\143%75m\145%6E%74%2E\167\162\151%74e%28\154%4F%29%7D%3B';OO00      ='j8      3,O;SaXs#%VYo.yFj=Lxr';____    (O0OO);OOO0+='x1r%mOO*G=En2n-:.;2Mt04Is@D&ReLq   ?)>';
//]]>
</script>

MD5 itu Berbahaya, Titik!

MD5 adalah salah satu fungsi hash yang sangat populer. Di usianya yang mencapai sweet seventeen, semakin banyak serangan yang makin efektif terhadap MD5. Kalau dulu di tahun 1995 ilmuwan hanya sebatas mempublikasikan kelemahan di tataran teoretis, kini semakin banyak orang yang mampu meng-exploit kelemahan itu dengan sangat efektif. Sudah saat MD5 dijauhi sebagai sesuatu yang berbahaya, jangan ditunda lagi!

Cryptographic Hash Basics
Untuk mudahnya anggap saja cryptographic hash sebagai semacam signature atau segel yang unik dari sebuah file. Setiap file yang berbeda akan memiliki signature yang berbeda. Perbedaan satu bit saja pada file akan menghasilkan signature yang berbeda. Sehingga dua file yang identik (seluruh bitnya sama), akan memiliki signature yang sama.
Sebelumnya mari kita lihat bagaimana fungsi hash MD5 in action. Input:
Bayangkan dalam satu pesawat umum terdapat dua kelas penumpang, yaitu kelas VIP dan kelas ekonomi. Prosedur dan proses security harus menjamin agar penumpang menempati tempat duduk sesuai haknya. Untuk itu penumpang harus menunjukkan bukti berupa tiket yang di situ tertera namanya. Kemudian dari daftar penumpang pramugari akan tahu bahwa anda berhak duduk di kelas VIP atau ekonomi. Bila anda memegang tiket ekonomi mencoba duduk di kelas VIP maka pramugari akan menolak anda. Apalagi bila anda tidak memegang tiket, mencoba naik pesawat itu, sudah pasti anda akan ditendang.
Input paragraf tersebut memiliki nilai hash:
Hexa:11ee98b599338ae66458f9b86ab4a6fb
Binary:00010001 11101110 10011000 10110101 10011001 00110011 10001010 11100110 01100100 01011000 11111001 10111000 01101010 10110100 10100110 11111011
Input di atas adalah teks sepanjang 578 karakter, sedangkan outputnya hanya 32 karakter, sangat timpang bukan? Mari kita lihat kalau inputnya hanya satu karakter saja, ‘X’, maka nilai hashnya adalah 02129bb861061d1a052c592e2dc6b383 atau dalam binary 00000010 00010010 10011011 10111000 01100001 00000110 00011101 00011010 00000101 00101100 01011001 00101110 00101101 11000110 10110011 10000011. Terlihat kan inputnya berapapun panjangnya, nilai hashnya tetap 128 bit atau 32 karakter hexa. Bahkan string kosong “” memiliki nilai hashnya sendiri sepanjang 32 karakter, yaitu 02129bb861061d1a052c592e2dc6b383.
MD5 bukan Enkripsi!
Seringkali orang menganggap MD5 sebagai enkripsi. Memang MD5 dipakai dalam kriptografi, namun MD5 bukanlah algoritma enkripsi. Enkripsi mengubah plain-text menjadi ciphertext yang ukurannya berbanding lurus dengan ukuran file aslinya. Semakin panjang plain-text maka hasil enkripsinya juga semakin panjang. Hasil enkripsi bisa dikembalikan ke plain-text semula dengan proses dekripsi. Jadi enkripsi adalah fungsi dua arah dan reversible. Selain itu dalam enkripsi dibutuhkan kunci, tanpa kunci itu namanya bukan enkripsi, melainkan hanya encoding/decoding.
Berbeda dengan enkripsi, fungsi hash tidak butuh kunci dan sifatnya hanya satu arah, yaitu dari teks masukan menjadi nilai hash yang panjangnya selalu sama. Setelah menjadi nilai hash, tidak ada fungsi yang bisa mengembalikan nilai hash itu menjadi teks semula.
Penggunaan Hash
Hash digunakan untuk banyak hal yang terkait dengan kriptografi dan security.
  1. Verifying file integrity
  2. MD5 integrity checksum
    MD5 integrity checksum
    Karena setiap file yang berbeda memiliki nilai hash yang berbeda, maka fungsi hash dimanfaatkan untuk verifikasi integritas file. Yang dimaksud dengan intergritas file adalah keaslian file, apakah file sudah diubah atau belum. Bila sebuah file berubah walaupun satu bit saja, maka nilai hashnya akan berbeda sehingga orang bisa menyadari bahwa file tersebut sudah tidak asli lagi. Kalau anda sering download file dari internet anda akan diberikan nilai MD5 yang bisa anda pakai untuk memverifikasi apakah file yang anda download masih asli atau tidak.
    MD5 juga dipakai untuk mendeteksi perubahan file, salah satu contonya adalah Tripwire di Linux. Ini adalah bagian dari Intrusion Detection System, bila ada file yang berubah nilai hashnya, maka IDS akan menyalakan alarm bahwa telah terjadi perubahan file.
  3. Storing password
  4. MD5 sering juga dipakai untuk menyimpan password di database. Daripada menyimpan password dalam bentuk plain-text, lebih baik yang disimpan bukan password tapi hash dari password itu. Ketika pengguna memasukkan password maka password tersebut akan dihitung nilai hashnya. Nilai hash dari password yang dimasukkan pengguna ketika login dibandingkan dengan nilai hash yang di database. Bila cocok, maka authentication sukses.
    courtesy of 
"www.unixwiz.net/techtips/iguide-crypto-hashes.html"
    courtesy of www.unixwiz.net/techtips/iguide-crypto-hashes.html
    Ketika user mendaftar, password dia akan dihitung nilai hashnya dan disimpan dalam database. Contohnya bila dia mendaftar dengan password “rahasia” maka nilai hashnya adalah ac43724f16e9241d990427ab7c8f4228 dan disimpan dalam database. Bila kemudian dia login dengan password yang lain, maka nilai hashnya akan tidak cocok dengan yang di database sehingga authentication gagal.
  5. Digital signature
  6. Digital signature tidak lain adalah nilai hash yang ter-enkrip dengan kunci private pembuat dokumen. Penerima dokumen bisa memverifikasi signature ini dengan cara menghitung nilai hash dokumen yang dia terima. Kemudian men-dekrip digital signature dengan kunci publik pembuat dokumen sehingga kembali menjadi hash. Kedua nilai hash ini lalu dibandingkan, hasil dekrip dan hasil perhitungan, jika sama maka signature valid.
    Digital signature ini dipakai juga untuk membuat certifikate SSL. Certificate SSL sangat vital peranannnya menjaga confidentiality dan authentication ketika seseorang mengakses web. Browser sudah memiliki daftar trusted Certificate Authority, jadi setiap browser mengakses situs dengan https akan diperiksa apakah certificate server tersebut ditanda-tangani oleh salah satu dari CA yang dipercaya browser.
Collision Vulnerability
Salah satu masalah yang mungkin terjadi dari fungsi hash adalah collision. Maksudnya adalah ada 2 atau lebih teks yang menghasilkan nilai hash yang sama. Anda sendiri telah melihat dengan MD5 bahwa masukan sepanjang berapapun, akan menghasilkan nilai hash sepanjang 128 bit. Itu artinya kemungkinan inputnya sangat banyak jumlahnya, tak terhingga, namun kemungkinan nilai hashnya hanya sejumlah 2^128. Sebagai ilustrasi, bayangkan apa yang terjadi bila dalam suatu negara jumlah wanitanya sangat banyak, hingga 5 kali lipat jumlah pria. Maka kemungkinan akan ada 2 atau lebih wanita yang memiliki suami yang sama. Inilah yang disebut collision. Ada 2 atau lebih input teks yang memiliki nilai hash yang sama.
Sebenarnya 2^128 itu jumlah yang sangat besar, yaitu sebesar: 340.282.366.920.938.463.463.374.607.431.768.211.456 . Saya tidak tahu bagaimana cara menyebutkannya setelah juta, milyar dan triliun. Jika fungsi hashnya secara merata menyebarkan nilai hash di semua ruang yang ada, maka sangat sulit untuk menemukan collision. Namun bila fungsi hashnya mengandung kelemahan sehingga hanya menghasilkan sebagian kecil saja dari semua kemungkinan yang tersedia, maka peluang terjadinya collision akan besar.
MD5 memiilki kelemahan yang memungkinkan dicari 2 file yang memiliki nilai hash yang sama dengan waktu yang singkat. Ilmuwan yang mempublikasikan cara mencari MD5 collision adalah ilmuwan Cina Xiaoyun Wang and Hongbo Yu dari Shandong University.
Kelemahan MD5 adalah IF MD5(X) = MD5(Y) THEN MD5(X+q) = MD5(Y+q)
Nilai hash keduanya: 79054025255fb1a26e4bc422aef54eb4
Nilai hash keduanya: 79054025255fb1a26e4bc422aef54eb4
Dua file binary di atas adalah contoh populer dari MD5 collision. Keduanya adalah dua file yang berbeda namun memiliki nilai hash yang sama. Dalam kedua file di atas hanya berbeda 6 byte saja, tidak terlalu berarti memang karena hanya sebagai proof of concept saja. Berikutnya akan saya tunjukkan contoh-contoh collision lain yang lebih seram dari ini.
Executables File Collision
Sebelumnya sudah saya jelaskan bahwa MD5 digunakan untuk menjaga integritas file contohnya ketika memverifikasi hasil download atau dalam Tripwire IDS. Fungsi hash digunakan untuk menjaga integrity karena perubahan pada file 1 bit saja akan mengubah nilai hashnya. Namun bila terjadi collision seperti pada MD5, maka file integrity tidak lagi bisa terjamin.
executables collision
executables collision
Peter Selinger telah membuat demonstrasi 2 buah file executable yang berbeda tapi memiliki nilai hash MD5 yang sama. Skenarionya adalah dari dua file itu salah satunya adalah file yang asli, satu lagi adalah file yang jahat. Keduanya memiliki ukuran dan nilai hash MD5 yang sama.
Kesamaan hash ini akan mengelabui Tripwire dan orang yang mendownload file itu dari internet. Tripwire akan diam seribu bahasa walaupun file executables telah diubah attacker. Begitu juga orang yang medownload sebuah file executable dari internet ternyata file yang dia terima sudah diubah di tengah perjalanan. Namun karena setelah dihitung nilai hashnya cocok dengan nilai hash file yang asli, korban akan menganggap file itu benar dan asli padahal berbeda.
Law #1: If a bad guy can persuade you to run his program on your computer, it’s not your computer anymore
Law #2: If a bad guy can alter the operating system on your computer, it’s not your computer anymore
Hukum di atas adalah 2 di antara 10 immutable laws of security. Memang benar, jika orang lain bisa menjalankan program atau mengubah program di komputer anda, maka komputer itu bukan milik anda lagi. Collision executables ini sungguh berbahaya!
Postscript File Collision
Postscript sebenarnya adalah bahasa pemrograman/script yang ditujukan khusus untuk membuat dokumen yang akan dicetak mirip sekali dengan PDF. Biasanya scriptnya tidak ditulis manual, namun orang menulis dokumen menggunakan editor WYSIWYG seperti microsoft word, kemudian program yang akan menulis scriptnya.
Mungkin anda lebih familiar dengan PDF. Bayangkan apa yang terjadi bila ada dua file PDF yang isinya bertolak belakang namun memiliki nilai hash yang sama. Karena nilai hashnya sama,maka bila file PDF yang satu di-tandatangani oleh seseorang, maka tandatangan itu akan valid juga untuk file PDF yang lainnya. Ketika diperlihatkan dokumen yang satunya lagi, orang yang menandatangani akan kaget karena dia tidak merasa menandatangani dokumen itu.
Dua orang ilmuwan dari jerman membuat demonstrasi collision dua buah file postscript. File ini isinya sangat jauh berbeda, namun keduanya memiliki nilai hash yang sama.
surat rekomendasi
surat rekomendasi
surat perintah ASPAL
surat perintah ASPAL
Skenarionya adalah Alice yang akan resign dari pekerjaannya meminta surat rekomendasi dari bosnya Caesar. Dalam surat itu dijelaskan bahwa Alice telah bekerja dengan baik selama bekerja di kantornya dan menganjurkan orang lain untuk menghire dia. Surat itu dibuat dalam bentuk digital dan ditandatangani secara digital oleh bosnya Caesar.
Alice membuat satu file lagi yang isinya adalah surat perintah Caesar yang memberi kuasa pada Alice untuk mengakses dokumen rahasia. Agar surat perintah ini dipercaya orang, maka surat perintah ini juga harus ditandatangani (digitally) oleh Caesar. Ingat bahwa tandatangan adalah hash yang di-enkrip dengan private key, jadi untuk menandatangani sebuah dokumen dibutuhkan private key, padahal yang punya private key hanya Caesar.
Kalau Caesar disodori file surat perintah tentu tidak akan mau menandatangani file itu. Maka triknya adalah memakai tanda tangan Caesar untuk file surat rekomendasi. Bagaimana caranya agar tanda tangan Caesar bisa valid untuk dua dokumen yang berbeda?
Caranya adalah dengan membuat file surat perintah memiliki nilai hash yang sama dengan file surat rekomendasi. Karena digital signature adalah hash yang ter-enkrip, maka bila ada dua file dengan nilai hash yang sama, maka digital signature keduanya juga pasti sama.
Dengan berbekal surat perintah aspal ini Alice bisa mengakses dokumen rahasia Caesar. Anak buah Caesar yang melihat tanda tangan digital Caesar pada surat itu tentu tidak berani membantah perintah Caesar.
md5sum file postscript
md5sum file postscript
Pada gambar di atas terlihat bahwa file size dan hash kedua file itu sama, a25f7f0b29ee0b3968c860738533a4b9, padahal diff melaporkan bahwa dua file itu berbeda. Bayangkan bila anda menjadi Caesar, anda tentu marah karena dianggap pernah menandatangani dokumen yang tidak pernah anda tahu.
Dengan digital signature, ketika anda menandatangani suatu file, sebenarnya anda juga mendatangani semua file lain yang memiliki hash yang sama.
SSL Certificate Collision
SSL certificate sangat vital untuk keamanan mengakses situs yang sensitif seperti situs belanja dan internet banking. Dengan menunjukkan certificate SSL yang valid, suatu server membuktikan dirinya pada browser bahwa dia adalah situs yang sah, browser yakin sedang berbicara dengan situs yang benar dan dengan certificate browser yakin akan public key server itu.
Bila attacker berhasil membuat certificate palsu, maka attacker bisa melakukan man in the middle attack (mitm) dan menyadap semua komunikasi antara browser dan server.
Browser hanya percaya dengan certificate yang ditandatangani oleh root CA atau intermediary CA yang terpercaya.
Bila attacker mencoba melakukan mitm attack, namun tidak punya sertifikat yang diterbitkan CA yang dipercaya browser, maka browser akan memunculkan warning bahwa sertifikat ini tidak bisa dipercaya. Bagaimana bila attacker mampu membuat certificate palsu dengan tanda tangan asli dari CA yang dipercaya browser?
Sekelompok hacker di US dan eropa dengan menggunakan 200 mesin PlayStation 3, berhasil membuat sertifikat palsu yang ditandatangani oleh CA yang dipercaya browser. Tidak hanya membuat sertifikat untuk satu website, namun mereka membuat sertifikat sebagai intermediary CA, artinya mereka berhak menerbitkan sertifikat untuk website apapun sebanyak yang mereka mau.
Semua itu bisa terjadi karena collision MD5 sehingga membuat digital signature untuk satu certificate akan valid juga untuk certificate lain yang palsu. Cara mereka melakukannya adalah:
  1. Mereka menyiapkan dua sertifikat yang punya hash yang sama. Sertifikat ini masih belum ditandatangani. Sertifikat yang satu adalah sertifikat untuk website, dan yang satu lagi sertifikat untuk menjadi CA (penerbit sertifikat).
  2. Mereka membeli tanda tangan CA untuk sertifikat yang untuk website.
  3. Setelah sertifikat yang telah ditandatangani CA dikirimkan, mereka mengkopi digital signature sertifikat itu dan dipasangkan pada sertifikat satu lagi yang telah disiapkan untuk menjadi CA.
  4. Karena sertifikat yang untuk website dan sertifikat untuk menjadi CA memiliki hash yang sama, maka tanda tangan di sertifikat satu akan valid juga di sertifikat yang lain.
  5. Dengan cara ini mereka kini berhak menerbitkan sertifikat untuk website lain.
Berikut adalah dua buah sertifikat yang dihasilkan dari serangan ini. Sertifikat yang pertama dalah sertifikat untuk website, yang dikeluarkan oleh CA yang asli. Sertifikat kedua adalah sertifikat yang dibuat sendiri dan tandatangannya dicomot dari sertifikat yang satunya.
Di bawah ini adalah sertifikat yang asli dan resmi dibeli dari CA dan ditujukan untuk website.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 643015 (0x9cfc7)
        Signature Algorithm: md5WithRSAEncryption
        Issuer: C=US, O=Equifax Secure Inc., CN=Equifax Secure Global eBusiness CA-1
        Validity
            Not Before: Nov  3 07:52:02 2008 GMT
            Not After : Nov  4 07:52:02 2009 GMT
        Subject: C=US, O=i.broke.the.internet.and.all.i.got.was.this.t-shirt.phreedom.org, OU=GT11029001, OU=See www.rapidssl.com/resources/cps (c)08, OU=Domain Control Validated - RapidSSL(R), CN=i.broke.the.internet.and.all.i.got.was.this.t-shirt.phreedom.org
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (2048 bit)
                Modulus (2048 bit):
                    00:b2:d3:25:81:aa:28:e8:78:b1:e5:0a:d5:3c:0f:
                    36:57:6e:a9:5f:06:41:0e:6b:b4:cb:07:17:00:00:
                    00:5b:fd:6b:1c:7b:9c:e8:a9:a3:c5:45:0b:36:bb:
                    01:d1:53:aa:c3:08:8f:6f:f8:4f:3e:87:87:44:11:
                    dc:60:e0:df:92:55:f9:b8:73:1b:54:93:c5:9f:d0:
                    46:c4:60:b6:35:62:cd:b9:af:1c:a8:6b:1a:c9:5b:
                    3c:96:37:c0:ed:67:ef:bb:fe:c0:8b:9c:50:2f:29:
                    bd:83:22:9e:8e:08:fa:ac:13:70:a2:58:7f:62:62:
                    8a:11:f7:89:f6:df:b6:67:59:73:16:fb:63:16:8a:
                    b4:91:38:ce:2e:f5:b6:be:4c:a4:94:49:e4:65:51:
                    0a:42:15:c9:c1:30:e2:69:d5:45:7d:a5:26:bb:b9:
                    61:ec:62:64:f0:39:e1:e7:bc:68:d8:50:51:9e:1d:
                    60:d3:d1:a3:a7:0a:f8:03:20:a1:70:01:17:91:36:
                    4f:02:70:31:86:83:dd:f7:0f:d8:07:1d:11:b3:13:
                    04:a5:da:f0:ae:50:b1:28:0e:63:69:2a:0c:82:6f:
                    8f:47:33:df:6c:a2:06:92:f1:4f:45:be:d9:30:36:
                    a3:2b:8c:d6:77:ae:35:63:7f:4e:4c:9a:93:48:36:
                    d9:9f
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment
            X509v3 Subject Key Identifier: 
                CD:A6:83:FA:A5:60:37:F7:96:37:17:29:DE:41:78:F1:87:89:55:E7
            X509v3 CRL Distribution Points: 
                URI:http://crl.geotrust.com/crls/globalca1.crl
 
            X509v3 Authority Key Identifier: 
                keyid:BE:A8:A0:74:72:50:6B:44:B7:C9:23:D8:FB:A8:FF:B3:57:6B:68:6C
 
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Basic Constraints: critical
                CA:FALSE
    Signature Algorithm: md5WithRSAEncryption
        a7:21:02:8d:d1:0e:a2:80:77:25:fd:43:60:15:8f:ec:ef:90:
        47:d4:84:42:15:26:11:1c:cd:c2:3c:10:29:a9:b6:df:ab:57:
        75:91:da:e5:2b:b3:90:45:1c:30:63:56:3f:8a:d9:50:fa:ed:
        58:6c:c0:65:ac:66:57:de:1c:c6:76:3b:f5:00:0e:8e:45:ce:
        7f:4c:90:ec:2b:c6:cd:b3:b4:8f:62:d0:fe:b7:c5:26:72:44:
        ed:f6:98:5b:ae:cb:d1:95:f5:da:08:be:68:46:b1:75:c8:ec:
        1d:8f:1e:7a:94:f1:aa:53:78:a2:45:ae:54:ea:d1:9e:74:c8:
        76:67
-----BEGIN CERTIFICATE-----
MIIEMjCCA5ugAwIBAgIDCc/HMA0GCSqGSIb3DQEBBAUAMFoxCzAJBgNVBAYTAlVT
MRwwGgYDVQQKExNFcXVpZmF4IFNlY3VyZSBJbmMuMS0wKwYDVQQDEyRFcXVpZmF4
IFNlY3VyZSBHbG9iYWwgZUJ1c2luZXNzIENBLTEwHhcNMDgxMTAzMDc1MjAyWhcN
MDkxMTA0MDc1MjAyWjCCARwxCzAJBgNVBAYTAlVTMUkwRwYDVQQKE0BpLmJyb2tl
LnRoZS5pbnRlcm5ldC5hbmQuYWxsLmkuZ290Lndhcy50aGlzLnQtc2hpcnQucGhy
ZWVkb20ub3JnMRMwEQYDVQQLEwpHVDExMDI5MDAxMTEwLwYDVQQLEyhTZWUgd3d3
LnJhcGlkc3NsLmNvbS9yZXNvdXJjZXMvY3BzIChjKTA4MS8wLQYDVQQLEyZEb21h
aW4gQ29udHJvbCBWYWxpZGF0ZWQgLSBSYXBpZFNTTChSKTFJMEcGA1UEAxNAaS5i
cm9rZS50aGUuaW50ZXJuZXQuYW5kLmFsbC5pLmdvdC53YXMudGhpcy50LXNoaXJ0
LnBocmVlZG9tLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALLT
JYGqKOh4seUK1TwPNlduqV8GQQ5rtMsHFwAAAFv9axx7nOipo8VFCza7AdFTqsMI
j2/4Tz6Hh0QR3GDg35JV+bhzG1STxZ/QRsRgtjVizbmvHKhrGslbPJY3wO1n77v+
wIucUC8pvYMino4I+qwTcKJYf2JiihH3ifbftmdZcxb7YxaKtJE4zi71tr5MpJRJ
5GVRCkIVycEw4mnVRX2lJru5YexiZPA54ee8aNhQUZ4dYNPRo6cK+AMgoXABF5E2
TwJwMYaD3fcP2AcdEbMTBKXa8K5QsSgOY2kqDIJvj0cz32yiBpLxT0W+2TA2oyuM
1neuNWN/Tkyak0g22Z8CAwEAAaOBvTCBujAOBgNVHQ8BAf8EBAMCBPAwHQYDVR0O
BBYEFM2mg/qlYDf3ljcXKd5BePGHiVXnMDsGA1UdHwQ0MDIwMKAuoCyGKmh0dHA6
Ly9jcmwuZ2VvdHJ1c3QuY29tL2NybHMvZ2xvYmFsY2ExLmNybDAfBgNVHSMEGDAW
gBS+qKB0clBrRLfJI9j7qP+zV2tobDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB
BQUHAwIwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQQFAAOBgQCnIQKN0Q6igHcl
/UNgFY/s75BH1IRCFSYRHM3CPBApqbbfq1d1kdrlK7OQRRwwY1Y/itlQ+u1YbMBl
rGZX3hzGdjv1AA6ORc5/TJDsK8bNs7SPYtD+t8UmckTt9phbrsvRlfXaCL5oRrF1
yOwdjx56lPGqU3iiRa5U6tGedMh2Zw==
-----END CERTIFICATE-----
Sertifikat di atas adalah sertifikat yang resmi di beli dan ditanda tangani oleh CA. Digital signature dari sertifikat tersebut ada pada baris ke-50 sampai baris ke-57. Sekarang perhatikan sertifikat di bawah ini yang dibuat sendiri oleh attacker, sertifikat ini tidak ditandatangani oleh CA, jadi digital signature sertifikat ini dicomot dari sertifikat yang resmi beli dari CA pada baris ke-50 sampai ke-57 di atas.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 65 (0x41)
        Signature Algorithm: md5WithRSAEncryption
        Issuer: C=US, O=Equifax Secure Inc., CN=Equifax Secure Global eBusiness CA-1
        Validity
            Not Before: Jul 31 00:00:00 2004 GMT
            Not After : Sep  2 00:00:00 2004 GMT
        Subject: CN=MD5 Collisions Inc. (http://www.phreedom.org/md5)
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:ba:a6:59:c9:2c:28:d6:2a:b0:f8:ed:9f:46:a4:
                    a4:37:ee:0e:19:68:59:d1:b3:03:99:51:d6:16:9a:
                    5e:37:6b:15:e0:0e:4b:f5:84:64:f8:a3:db:41:6f:
                    35:d5:9b:15:1f:db:c4:38:52:70:81:97:5e:8f:a0:
                    b5:f7:7e:39:f0:32:ac:1e:ad:44:d2:b3:fa:48:c3:
                    ce:91:9b:ec:f4:9c:7c:e1:5a:f5:c8:37:6b:9a:83:
                    de:e7:ca:20:97:31:42:73:15:91:68:f4:88:af:f9:
                    28:28:c5:e9:0f:73:b0:17:4b:13:4c:99:75:d0:44:
                    e6:7e:08:6c:1a:f2:4f:1b:41
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: 
                Digital Signature, Non Repudiation, Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Subject Key Identifier: 
                A7:04:60:1F:AB:72:43:08:C5:7F:08:90:55:56:1C:D6:CE:E6:38:EB
            X509v3 Authority Key Identifier: 
                keyid:BE:A8:A0:74:72:50:6B:44:B7:C9:23:D8:FB:A8:FF:B3:57:6B:68:6C
 
            Netscape Comment: 
                3
    Signature Algorithm: md5WithRSAEncryption
        a7:21:02:8d:d1:0e:a2:80:77:25:fd:43:60:15:8f:ec:ef:90:
        47:d4:84:42:15:26:11:1c:cd:c2:3c:10:29:a9:b6:df:ab:57:
        75:91:da:e5:2b:b3:90:45:1c:30:63:56:3f:8a:d9:50:fa:ed:
        58:6c:c0:65:ac:66:57:de:1c:c6:76:3b:f5:00:0e:8e:45:ce:
        7f:4c:90:ec:2b:c6:cd:b3:b4:8f:62:d0:fe:b7:c5:26:72:44:
        ed:f6:98:5b:ae:cb:d1:95:f5:da:08:be:68:46:b1:75:c8:ec:
        1d:8f:1e:7a:94:f1:aa:53:78:a2:45:ae:54:ea:d1:9e:74:c8:
        76:67
-----BEGIN CERTIFICATE-----
MIIEMjCCA5ugAwIBAgIBQTANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTA0MDczMTAwMDAwMFoXDTA0
MDkwMjAwMDAwMFowPDE6MDgGA1UEAxMxTUQ1IENvbGxpc2lvbnMgSW5jLiAoaHR0
cDovL3d3dy5waHJlZWRvbS5vcmcvbWQ1KTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
gYkCgYEAuqZZySwo1iqw+O2fRqSkN+4OGWhZ0bMDmVHWFppeN2sV4A5L9YRk+KPb
QW811ZsVH9vEOFJwgZdej6C193458DKsHq1E0rP6SMPOkZvs9Jx84Vr1yDdrmoPe
58oglzFCcxWRaPSIr/koKMXpD3OwF0sTTJl10ETmfghsGvJPG0ECAwEAAaOCAiQw
ggIgMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSnBGAf
q3JDCMV/CJBVVhzWzuY46zAfBgNVHSMEGDAWgBS+qKB0clBrRLfJI9j7qP+zV2to
bDCCAb4GCWCGSAGG+EIBDQSCAa8WggGrMwAAACdeOeCJYQ9Oo8VFCza7AdFTqsMI
j2/4Tz6Hh0QR3GDg35JV+bhzG1STxZ/QRsRgtjVizbmvHKhpGslbPJY3wO1n77v+
wIucUC8pvYMino4I+qwTcKJYf2JiihH3ifbftmdZcxb7YxaKtJE4zi71tr5MpJRJ
5GURCkIVycEw4mnVRX2lJru5YexiZPA54ee8aNhQUZ4dYNPRo6cK+AMgoXABF5E2
TwJwMYaD3fcP2AcdEbMTBKXc8K5QsSgOY2kqDIJvj0cz32yiBpLxT0W+2TA2oyuM
1neuNWN/Tkyak0g22Z8CAwEAAaOBvTCBujAOBgNVHQ8BAf8EBAMCBPAwHQYDVR0O
BBYEFM2mg/qlYDf3ljcXKd5BePGHiVXnMDsGA1UdHwQ0MDIwMKAuoCyGKmh0dHA6
Ly9jcmwuZ2VvdHJ1c3QuY29tL2NybHMvZ2xvYmFsY2ExLmNybDAfBgNVHSMEGDAW
gBS+qKB0clBrRLfJI9j7qP+zV2tobDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB
BQUHAwIwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQQFAAOBgQCnIQKN0Q6igHcl
/UNgFY/s75BH1IRCFSYRHM3CPBApqbbfq1d1kdrlK7OQRRwwY1Y/itlQ+u1YbMBl
rGZX3hzGdjv1AA6ORc5/TJDsK8bNs7SPYtD+t8UmckTt9phbrsvRlfXaCL5oRrF1
yOwdjx56lPGqU3iiRa5U6tGedMh2Zw==
-----END CERTIFICATE-----
Perhatikan pada sertifikat yang palsu pada baris ke-29, “CA:TRUE”, itu artinya sertifikat itu adalah sertifikat sebagai CA intermediary. Padahal sebenarnya CA yang asli tidak pernah menandatangani sertifikat itu, tapi tanda tangan untuk sertifikat lain dicomot ke sertifikat itu. Untuk lebih jelasnya kedua sertifikat tersebut saya capture dan saya beri penjelasan pada gambar di bawah ini.
asli vs palsu
asli vs palsu
Setelah saya coba lakukan verifikasi dengan openssl di Linux, ternyata hasilnya valid. Hanya karena tanggal di sertifikat itu sudah expired maka ada warning expired date. Sedangkan untuk sertifikat yang asli (dibeli dari CA) tidak ada warning expired date karena baru akan expired pada November 2009.
Rogue CA Certificate Verified Successfully
Rogue CA Certificate Verified Successfully
Kesimpulan
Saya sudah berikan 3 contoh yang memperlihatkan bahaya collision pada MD5. Jauhilah MD5, gunakan fungsi hash yang lebih strong, contohnya SHA-256. Awalnya vulnerability di kriptografi biasanya hanya teoretis saja sehingga orang tidak merasa perlu mengganti algoritma kriptografi yang dipakainya, namun makin lama serangan makin efektif dan cepat. Sebaiknya begitu ditemukan kelemahan signifikan pada sebuah algoritma, jauhilah algoritma itu.

Sniffing SSL Traffic using oSpy

SSL menjamin confidentiality data dari endpoint ke endpoint, itu artinya di tengah jalan tidak ada pihak ke-3 yang bisa menyadap data yang dikirimkan. Nah, kalau di tengah jalan tidak bisa disniff, bagaimana dengan sniffing di salah satu endpoint, baik di komputer klien atau server? Itulah yang akan saya tunjukkan dalam artikel ini.

SSL: The Secure Tunnel for All
SSL adalah protokol yang menjamin confidentiality dan authentication komunikasi dari satu titik awal ke titik akhir. Data apapun yang dilewatkan melalui SSL dijamin aman dari pengintip di tengah jalan karena semua data dikirim dalam keadaan terenkripsi. Karena itu SSL sering dijadikan terowongan (tunnel) untuk membuat protokol lain yang tidak secure menjadi secure.
Contoh pemakaian SSL sebagai tunnel adalah pada https. Http sejatinya adalah protokol clear text, artinya semua request dan response http yang lewat tidak terenkripsi dan bisa disadap siapapun yang berminat. Namun untuk web tertentu yang sensitif seperti bank memerlukan jaminan confidentiality, oleh karena itu protokol Http ini dibungkus dan dilewatkan tunnel SSL, sehingga menjadi apa yang dikenal sebagai https yaitu http tunneled over SSL. Penjelasan lebih detil tentang https bisa dibaca di understanding https. Masih banyak protokol lain yang bisa dilewatkan tunnel SSL, antara lain IMAP, SMTP, POP, LDAP.
Sniffing at Endpoint
SSL memang menjamin keamanan sepanjang perjalanan dari titik asal menuju titik tujuan. Data yang terkirim dari dan ke komputer klien/server dijamin keamanannya karena terenkripsi. Kalau ada attacker yang mencoba mengintip data di tengah perjalanan, data yang dia dapatkan adalah data yang terenkripsi, bukan plain-text, sehingga tidak ada gunanya mengintip data yang dilindungi SSL.
Jaminan keamanan SSL hanya berlaku dari titik A ke titik B (end-to-end). Pertama saya harus jelaskan dulu apa yang dimaksud dengan titik. Titik disini adalah aplikasi atau program komputer yang berjalan di atas operating system, contohnya adalah browser, instant messenger, outlook. Aplikasi ada yang berfungsi sebagai client dan ada pula yang sebagai server.
Agar data yang dikirimkan aman, aplikasi tersebut harus melakukan enkripsi data terlebih dahulu sebelum mengirimkan data ke tujuan. Begitu pula dari titik penerima, data yang diterima harus dikenakan proses dekripsi agar bisa dimengerti dan bisa diproses. Proses tersebut digambar seperti pada gambar berikut ini:
simplified SSL data flow
simplified SSL data flow
Pada gambar di atas, dicontohkan yang menjadi titik adalah browser sebagai client dan web server sebagai server. Pada saat paket data diserahkan dari aplikasi ke network adapter (ethernet, wifi adapter dsb), paket tersebut sudah dalam keadaan terenkripsi. Jadi dalam aplikasi yang memakai SSL data yang dikirim dan diterima dalam keadaan terenkripsi, namun justru dalam aplikasinya sendiri data masih dalam keadaan tidak terenkripsi.
Data hanya aman ketika berada di luar rumah, justru di dalam rumah data tidak terlindungi enkripsi
Karena data hanya aman ketika berada di luar rumah (proses/aplikasi), maka ada peluang bagi aplikasi/proses lain yang memiliki hak akses yang cukup untuk melakukan sniffing ketika data masih berada di dalam rumah. Salah satu skenario attack yang mungkin adalah: dalam sistem operasi multi user seperti linux dan windows, ada satu user yang dipakai beberapa orang. Dalam kondisi ini ketika ada orang yang sedang browsing, maka orang lain dengan user yang sama bisa mengintip isi rumah browser korban. Hal ini dimungkinkan karena kedua orang tersebut login dengan user yang sama. Jadi walaupun korban sedang login mengggunakan https (SSL) di browser tersebut, attacker tetap bisa melakukan sniffing dengan cara masuk langsung ke dalam rumah proses browser korban.
Sniffing Google Talk SSL Traffic
Agar lebih jelasnya mari kita langsung praktek mencoba sniffing SSL google talk di komputer yang sama. Sebelumnya anda harus sudah berhasil download oSpy. Kemudian silakan extract dan jalankan file oSpy.exe. Untuk dapat melakukan sniffing proses saya harus menginjeksi agen ke dalam proses tersebut. Agen ini mirip dengan mata-mata yang disusupkan ke daerah lawan agar saya bisa mendapatkan informasi segala sesuatu tentang lawan. Agen yang disusupkan ke proses googletalk.exe ini akan memberikan saya informasi fungsi apa saja yang dijalankan oleh sebuah proses.
Untuk menginjeksi agen, di dalam oSpy, klik menu Capture kemudian pilih menu Inject Agent. Silakan pilih proses yang akan diintip, dalam contoh ini saya memilih googletalk.exe. Setelah memilih proses, kemudian klik tombol Inject. Proses injeksi agen diperlihatkan pada gambar di bawah ini.
injecting agent
injecting agent
Setelah agen berhasil disusupkan ke sebuah proses, kini tiba saatnya untuk mengantifkan modus mata-mata, caranya adalah dengan klik menu Capture, kemudian pilih Start. Setelah itu saya coba login ke googletalk,kemudian saya klik Stop Capture untuk melihat hasil capture. Mari kita lihat informasi apa saja yang dikirimkan oleh agen yang saya susupkan ke daerah musuh.
captured information
captured information
Dalam gambar di atas terlihat informasi yang dikirim oleh agen rahasia saya. Google talk menggunakan https untuk melakukan authentication. Walaupun menggunakan https, namun agen rahasia saya mampu membaca paket http yang dikirimkan ke google dan yang diterima dari google.
POST /accounts/ClientAuth HTTP/1.1
Connection: Keep-Alive
Content-Length: 171
Content-Type: application/x-www-form-urlencoded
Host: www.google.com:443
User-Agent: Google Talk
 
Email=rizki.wicaksono%40gmail.com&Passwd=%74%65%73%74%69%6E%67%70%61%73%73%77%6F%72%64&PersistentCookie=false&source=googletalk&accountType=HOSTED_OR_GOOGLE&skipvpage=true
Request POST tersebut mengirimkan username dan password saya dalam bentuk url encoded ke https://www.google.com. Namun karena username dan password salah, maka response yang didapatkan adalah 403 Forbidden. Kalau password benar, response status code adalah 200 OK.
Pada gambar tersebut juga terlihat bahwa sebelum googletalk mengirimkan data, dia memanggil fungsi EncryptMessage() yang gunanya mengenkrip pesan yang akan dikirim ke web server google. Begitu pula sebaliknya, data yang diterima dari web server google diterima oleh fungsi recv() setelah itu diikuti dengan fungsi DecryptMessage() yang gunanya mendekrip pesan yang diterima dari web server google.
Kesimpulan
SSL adalah protokol yang sangat bagus karena bisa menjamin keamanan data dari titik ke titik. Namun keamanan data di titik itu sendiri tidak bisa dijamin SSL karena itu adalah domain dari keamanan sistem operasi. Dengan menggunakan oSpy saya bisa mengintip komunikasi SSL yang dilakukan sebuah aplikasi/proses. Komunikasi SSL tidak bisa diintip dengan menggunakan network sniffer seperti wireshark(ethereal) walaupun sniffer dijalankan di komputer yang sama dengan aplikasi. Kenapa network sniffer tidak berguna walau di komputer yang sama? Hal ini karena sniffer bekerja di layer physical dengan mengubah network adapter ke modus promiscious. Dalam gambar sebelumnya saya jelaskan bahwa data yang dikirimkan melalui network layer (physical layer) adalah hasil dari fungsi EncryptData(), yang artinya data tersebut sudah dalam bentuk terenkripsi, walaupun masih dalam satu komputer yang sama.
Dalam aplikasi yang menggunakan SSL, data hanya aman ketika berada di luar rumah (di luar process address space), sehingga data yang dikirim ke luar melalui network adapter sudah dalam keadaan terenkripsi. Untuk dapat melakukan sniffing SSL saya harus melakukan itu di dalam rumah (di dalam proses itu sendiri). Dalam gambar sebelumnya saya menjelaskan bahwa sebelum memanggil fungsi send(), proses memanggil fungsi EncryptData(). Fungsi inilah yang saya target karena fungsi ini mengubah plaintext menjadi ciphertext, plaintext inilah yang dilaporkan kepada saya oleh agen mata-mata saya (ospy).
Attack dengan oSpy ini akan efektif bila attacker telah mendapatkan akses penuh di sebuah komputer. Untuk menyadap password internet banking pengguna, bila keylogger tidak berguna karena user menggunakan virtual keyboard, bila FFSniff juga tidak berguna karena user tidak memakai Firefox, maka oSpy akan sangat berguna.

Memecahkan Kriptografi dengan Chosen-Plaintext Attack

Beberapa waktu yang lalu saya menemukan sebuah website dengan vulnerability SQL injection. Sengaja nama website tersebut tidak saya publikasikan, karena artikel ini bukan tentang SQL injection melainkan bagaimana memecahkan enkripsi.
Berbeda dengan website lainnya, website tersebut menyimpan password dalam tabel user tidak dalam bentuk one-way hash (contohnya MD5 atau SHA1), melainkan dalam bentuk ter-enkripsi. Enkripsi yang dipakai juga unik karena tidak memakai algoritma enkripsi yang sudah dikenal luas.
Dalam kasus tersebut saya ingin melakukan privilege-escalation dari user dengan hak akses biasa menjadi user dengan hak akses penuh. Sebagai user biasa saya bisa melakukan SQLinjection untuk membaca username dan password dari tabel user. Dengan teknik tersebut saya mendapatkan encrypted password dari seorang user yang memiliki hak admin. Namun saya tidak bisa memakai password itu untuk menjadi admin sebelum saya mengerti pesan tersembunyi dalam chiphertext tersebut.
Analisa Ciphertext
Saya mencoba menggali informasi lebih dalam lagi tentang enkripsi unik di website tersebut. Saya mulai mengumpulkan banyak ciphertext dari user-user lainnya. Berikut beberapa ciphertext yang saya kumpulkan:
  • 804881451156416021528145
  • 9436353935332546555225378546953924846491
  • 11763273927622732276427712808233523172328227
Ada beberapa poin penting yang saya dapatkan dari pengumpulan ciphertext tersebut:
  • Panjang ciphertext bervariasi
Panjang ciphertext yang bervariasi membuat saya yakin bahwa itu bukan fungsi hash, karena ciri khas fungsi hash adalah panjang hash yang selalu tetap. Panjang ciphertext yang bervariasi kemungkinan besar tergantung dari panjang atau pendeknya password user tersebut. Nanti saya akan coba konfirmasi hipotesa ini dengan mengubah password user biasa yang saya pakai.
  • Ciphertext hanya terdiri dari angka
Ciphertext yang semua berupa angka membuat saya curiga bahwa ini adalah kode, semacam kode ASCII namun sudah dikalkulasi dengan formula matematis tertentu.
Chosen-Plaintext Attack
Chosen-Plaintext attack adalah salah satu cara “code breaking” (cryptanalysis) dengan cara membandingkan dan menganalisa contoh plaintext dan ciphertextnya. Dalam chosen plaintext attack, code breaker memiliki kebebasan untuk menentukan plaintext yang diiginkannya.
Untuk mendapatkan contoh plaintext dan ciphertextnya, saya melakukan langkah berikut ini setelah login sebagai seorang user biasa:
  1. Ubah Password
  2. Lihat ciphertext dari tabel user dengan SQLinjection
Pertama saya ubah password menjadi ‘d’, kemudian saya lihat ciphertext untuk plaintext ‘d’. Saya ulangi langkah itu dengan contoh plaintext yang lain berkali-kali.
Apa saja plaintext yang saya pilih? Berikut chosen-plaintext dan ciphertextnya yang saya pilih:
Plaintext Ciphertext
d 92254325
dd 831214121412
ddd 6180128012807280
dddd 15013601660186017601
abcd1234 433034273428242944308379538023819382
Perhatikan bahwa panjang ciphertext tergantung dari panjang plaintext.  Plaintext sepanjang 1 karakter, ciphertext panjangnya 8 digit. Setiap penambahan satu karakter plaintext, ciphertext bertambah 4 digit.
Saya sengaja memilih plaintext berurutan (d,dd,ddd,dddd) untuk melihat apa ada pola yang muncul. Perhatikan pada plaintext “dd”, ciphertextnya adalah 831214121412, terlihat pola berulang pada angka 412 sebanyak 2x. Dalam ciphertext ini saya menyimpulkan bahwa 412 adalah kode untuk karakter ‘d’.
Untuk plaintext “ddd”, ciphertextnya adalah 6180128012807280, terlihat pola berulang pada angka 280 sebanyak 3 kali. Dalam ciphertext ini saya menyimpulkan bahwa 280 adalah kode untuk karakter ‘d’.
Begitu juga pada plaintext “dddd”, ciphertextnya adalah 15013601660186017601, dengan pola berulang pada angka 601 sebanyak 4 kali. Dalam ciphertext ini, saya menyimpulkan bahwa 601 adalah kode untuk karakter ‘d’.
Ingat bahwa untuk setiap penambahan satu karakter plaintext membuat ciphertext bertambah 4 digit. Ternyata 4 digit tersebut adalah satu digit apapun diikuti dengan 3 digit kode karakter. Chosen plaintext dalam contoh sebelumnya saya pecah-pecah menjadi kelompok 4 digit dipisahkan dengan karakter ‘#’ dan dari 4 digit tersebut saya pecah dua menjadi 1 digit dan 3 digit dengan karakter ‘-’.
Plaintext Ciphertext Kode
d 9-225#4-325 325 = ‘d’
dd 8-312#1-412#1-412 412 = ‘d’
ddd 6-180#1-280#1-280#7-280 280 = ‘d’
dddd 1-501#3-601#6-601#8-601#7-601 601 = ‘d’
Oke sampai disini saya sudah mendapatkan titik terang. Saya sudah mengetahui komposisi dan posisi tiap karakter pada plaintext ketika dipetakan pada ciphertext. Tapi masih ada yang belum jelas, dalam contoh tersebut kode untuk krakter ‘d’ ternyata berbeda-beda, pada contoh pertama kodenya adalah 325, pada contoh lain kode untuk ‘d’ adalah 412, 280 dan 601.
Kini saya harus mengetahui bagaimana hubungan antara kode yang berurutan, untuk itu saya memilih plaintext “abcd1234″ dengan ciphertext 433034273428242944308379538023819382. Mari kita pecah ciphertext tersebut menjadi kelompok 4 digit seperti tabel di atas.
4-330#3-427#3-428#2-429#4-430#8-379#5-380#2-381#9-382
Dari pengelompokan tersebut kita bisa simpulkan bahwa:
427 = ‘a’, 428 = ‘b’, 429 = ‘c’, 430 = ‘d’, 379 = ’1′, 380 = ’2′, 381=’3′, 382=’4′
Perhatikan bahwa kode-kode tersebut sengaja saya pilih berurut ‘a’->’b'->’c'->’d’ dan ternyata ciphertextnya pun ikut berurut 427->428->429->430. Begitu juga untuk ’1′->’2′->’3′->’4′, ciphertextnya juga berurut 379->380->381->382. Saya mencurigai bahwa enkripsi ini memakai kode ASCII karena memang kode ASCII untuk ‘abcd’ dan ’1234′ berurutan.Kode ASCII untuk  ‘a’=97, ‘b’=98,’c'=99,’d'=100,’1′=49,’2′=50,’3′=51,’4′=52.
Terlihat ada jarak yang cukup jauh antara kode ASCII dan kode pada ciphertext. Contohnya ‘a’ dengan ASCII 97, dalam ciphertext dikodekan dengan 427, selisihnya 427-97 adalah 330. Begitu juga dengan ’1′ dengan ASCII 49, dalam ciphertext dikodekan menjadi 379, dengan selisih 379-49 adalah 330. Ternyata kalau dilihat semua kode pada ciphertext juga berjarak 330 dengan kode ASCII. Pertanyaannya, darimana angka 330 ini muncul?
Mari kita lihat sekali lagi ciphertext dari ‘abcd1234′ (setelah dikelompokkan 4 digit):
4-330#3-427#3-428#2-429#4-430#8-379#5-380#2-381#9-382
Adakah angka 330 dalam ciphertext tersebut? Aha, ternyata ada! Ingat bahwa plaintext satu karakter, ciphertextnya adalah 8 digit, padahal tiap karakter dikodekan dalam 4 digit, jadi ada kelebihan 4 digit. Ternyata pada kelompok 4 digit pertama mengandung offset dengan kode ASCII, yaitu pada digit ke-2 hingga ke-4.
Jadi sekarang misteri enkripsi ini terpecahkan. Mari kita coba dekrip contoh ciphertext yang saya kumpulkan di awal:
  • 804881451156416021528145
Pertama kita kelompokkan menjadi kelompok 4 digit: 8-048#8-145#1-156#4-160#2-152#8-145. Kelompok 4 digit pertama 8048 menunjukkan offset yaitu 048. Kelompok 4 digit kedua, 8145 menunjukkan kode karakter pertama adalah 145, dikonversi ke kode ASCII menjadi 145-048=97. ASCII 97 ini adalah ‘a’. Jadi kita temukan karakter pertama ‘a’. Berikutnya, 156-48=108, yaitu kode untuk ‘l’. Berikutnya, 160-48=112, yaitu kode untuk ‘p’. Berikutnya 152-48=104, yaitu kode untuk ‘h’. Berikutnya 145, sama dengan karakter pertama, ‘a’. Jadi hasil dekripsinya adalah ‘alpha’.
  • 9436353935332546555225378546953924846491
Kita kelompokkan menjadi kelompok 4 digit: 9-436#3-539#3-533#2-546#5-552#2-537#8-546#9-539#2-484#6-491. Karakter pertama: 539-436=103=’g’. Karakter ke-2: 533-436=97=’a’. Karakter ke-3: 546-436=110=’n’. Karakter ke-4: 552-436=116=’t’. Karakter ke-5: 537-436=110=’e’. Karakter ke-6 sama dengan ke-3, ‘n’. Karakter ke-7 sama dengan karakter ke-1, ‘g’. Karakter ke-8: 484-436=48=’0′. Karakter ke-9: 491-436=55=’7′. Jadi hasil dekripsinya adalah ‘ganteng07′.
Pada akhirnya dengan mengetahui teknik enkripsi yang dipakai, saya berhasil mendapatkan password seseorang dengan hak administrator. Tidak lama kemudian GAME OVER, webshell uploaded :)
Kesimpulan
Pelajaran yang bisa diambil dari kasus tersebut adalah bahwa membuat algoritma kriptografi yang kuat tidaklah mudah, jangan pernah memakai enkripsi buatan sendiri, walaupun algoritmanya anda rahasiakan. Selalu gunakan algoritma enkripsi terbuka yang sudah teruji oleh para ahli.
Sedangkan untuk password, sebaiknya jangan gunakan enkripsi, tapi gunakan one-way hash function yang kuat seperti SHA1. Enkripsi tidak cocok dipakai untuk menyimpan password karena ketika terjadi compromised, maka semua password yang ada di tabel akan bisa diambil attacker dengan cara menjalankan rutin dekripsi yang pasti tersedia di salah satu file script seperti PHP pada web tersebut.
Walaupun algoritma dekripsinya anda rahasiakan, suatu saat ketika terjadi compromised, seorang attacker akan bisa melakukan dekripsi dengan membaca source code php untuk men-dekrip password. Biasanya rutin dekripsinya tidak jauh dari file php yang terkait dengan halaman login.