Your SlideShare is downloading. ×
“Hollywood style cracking” pada Block Cipher mode CBC: Analisis and Pencegahan
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

“Hollywood style cracking” pada Block Cipher mode CBC: Analisis and Pencegahan

921
views

Published on

“Hollywood style cracking” pada Block Cipher mode CBC: Analisis and Pencegahan - Rizki Wicaksono

“Hollywood style cracking” pada Block Cipher mode CBC: Analisis and Pencegahan - Rizki Wicaksono


1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total Views
921
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
56
Comments
1
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. “Hollywood  style  cracking”  pada  Block  Cipher  mode  CBC:  Analisis  and  Pencegahan    Rizki  Wicaksono  ilmuHacking.com,  email:  rizki@ilmuHacking.com        Abstrak   -­‐   Algoritma   enkripsi   standar   seperti   AES   sampai   sekarang   dikenal  sebagai   algoritma   enkripsi   yang   kuat   dan   sangat   direkomendasikan   sebagai  algoritma   yang   aman.   Namun   apakah   hanya   dengan   menggunakan   algoritma  kuat  seperti  AES  menjamin  data  akan  aman  ?  Jawabnya  adalah  tidak.  Algoritma  yang   kuat   hanya   satu   bagian   kecil   saja   dari   sistem   kriptografi   yang   utuh,  kekuatan   algoritma   tidak   akan   berarti   apa-­‐apa   tanpa   didukung   dengan  implementasi  algoritma  yang  aman.    Paper   ini   mencoba   menganalisa   serangan   praktis   terhadap   algoritma   enkripsi  block  cipher  dalam  mode  CBC.  Serangan  ini  menyerang  semua  algoritma  block  cipher  dalam  mode  operasi  CBC  termasuk  algoritma  standar  AES.  Tidak  hanya  mendekripsi   pesan   rahasia,   dalam   kondisi   tertentu   serangan   ini   juga   bisa  diaplikasikan  untuk  mengenkripsi  pesan  palsu.  Kemampuan  untuk  mendekripsi  sekaligus   mengenkripsi   pesan   tanpa   mengetahui   kunci   membuat   serangan   ini  sangat  berbahaya.    1.  PENDAHULUAN    Algoritma  enkripsi  block  cipher  sebenarnya  hanya  dirancang  untuk  memproses  satu  blok  plaintext  atau  blok  ciphretext  saja.  Sebagai  contoh,  algoritma  enkripsi  AES   hanya   dirancang   untuk   mengubah   plaintext   berukuran   128   bit   menjadi  ciphertext  berukuran  128  bit  juga.      Gambar  1:  Block  cipher    Enkripsi   dan   dekripsi   dapat   dilakukan   secara   langsung   bila   pesan   berukuran  tepat   satu   blok.   Namun   bila   ciphertext/plaintextnya   berukuran   lebih   dari   satu  blok,   tentu   harus   ada   cara   untuk   memproses   data   tersebut   agar   bisa   diterima  oleh   algoritma   block   cipher,   prosedur   ini   disebut   mode   operasi.   Dalam   mode  operasi   diatur   bagaimana   data   dipecah   menjadi   blok,   bagaimana   hubungan  antara  satu  blok  dengan  blok  lainnya,  blok  manakah  yang  harus  dienkrip/dekrip  duluan  dan  sebagainya.    
  • 2. 1.1  MODE  OPERASI  CBC    Dalam   mode   operasi   CBC   (cipher   block   chaining),   suatu   blok   dengan   blok  berikutnya   saling   terkait.   Setiap   blok   plaintext   diXOR   dengan   ciphertext   hasil  enkripsi   blok   plaintext   sebelumnya   baru   kemudian   hasil   operasi   XOR   ini  dienkrip   untuk   menghasilkan   blok   ciphertext.   Begitu   pula   sebaliknya   ketika  dekripsi.  Dekripsi  yang  dilakukan  terhadap  suatu  blok  ciphertext  tidak  langsung  menghasilkan  blok  plaintext,  hasil  dekripsi  tersebut  harus  di-­‐XOR  dulu  dengan  blok  ciphertext  sebelumnya  untuk  menghasilkan  blok  plaintext.        Gambar  2:  CBC  mode  Khusus   untuk   blok   pertama,   diperlukan   suatu   data   yang   berfungsi   sebagai   C0,  data   ini   disebut   dengan   IV   (initialization   vector).     Jadi   formula   matematika  enkripsi  dan  dekripsi  block  cipher  dalam  mode  operasi  CBC  adalah:    Ci  =  Ek(Pi  ⊕  Ci-­‐1)    Pi  =  Dk(Ci)  ⊕  Ci-­‐1    C0  =  IV    1.2  PADDING    Dalam  block  cipher  plaintext  dan  ciphertext  harus  dipotong-­‐potong  dan  disusun  dalam   blok-­‐blok   data   berukuran   sama.   Sebagai   contoh,   DES   dan   Blowfist  menggunakan  blok  berukuran  64  bit,  AES  menggunakan  blok  berukuran  128  bit.  Karena   data   harus   masuk   dalam   blok   berukuran   sama,   maka   dibutuhkan  padding   byte   sebagai   pengganjal   untuk   menggenapi   data   agar   pas   dengan  ukuran  blok.    Aturan   mengenai   padding   untuk   mode   CBC   dijelaskan   dalam   standar   PKCS#7  dan   PKCS#5   (Public   Key   Cryptographic   Standard).   Padding   dilakukan   dengan  mengisi   byte   bernilai   N   bila   dibutuhkan   padding   sebanyak   N   byte.   Sebagai  contoh,  bila  dibutuhkan  padding  3  byte,  maka  paddingnya  berisi  ’03  03  03′,  bila  dibutuhkan  padding  5  byte,  maka  paddingnya  berisi  ’05  05  05  05  05′.  
  • 3.  Gambar  3  dan  4  menunjukkan  beberapa  contoh  padding  yang  valid  dan  padding  yang  tidak  valid.      Gambar  3:  Contoh  valid  padding      Gambar  4:  Contoh  invalid  padding  2.  PADDING  ORACLE  ATTACK    Padding  oracle  attack  pertama  kali  dipublikasikan  pada  tahun  2002  oleh  Sergey  Vaudenay[1].   Kemudian,   pada   tahun   2010   Thai   Duong   and   Juliano   Rizzo[2]    mempublikasikan   paper   yang   menjelaskan   padding   oracle   attack   terhadap  banyak  framework  aplikasi  web  yang  populer  seperti  JavaServer  Faces,  Ruby  on  Rails  dan  ASP.NET.    Dalam   padding   oracle   attack,   yang   dimaksud   dengan   Oracle   disini   tidak   ada  hubungannya   sama   sekali   dengan   SQL   dan   database   Oracle.   Oracle   yang  dimaksud  adalah  validation  oracle,  dimana  client  bisa  bertanya  dan  dijawab  oleh  oracle  dengan  jawaban  boolean,  ya  atau  tidak,  benar  atau  salah.      Apapun  dan  bagaimanapun  cara  oracle  merespons  bila  client  bisa  membedakan  mana   respons   yang   berarti   ya,   dan   mana   respons   yang   berarti   tidak,   artinya  server  itu  telah  menjadi  ‘the  oracle’.    Gambar   5   menunjukkan   cara   kerja   padding   oracle   attack.   Seorang   attacker  mengirimkan   2   blok   ciphertext   ke   oracle   kemudian   mengamati   responsnya,  apakah  2  blok  ciphertext  tersebut  ketika  didekrip  memiliki  byte  padding  yang  valid  atau  tidak.    Blok  ciphertext  yang  akan  didekrip  adalah  blok  ciphertext  yang  kedua.  Blok  ini  tidak  perah  berubah  dalam  setiap  request.  Blok  ciphertext  pertama  selalu  diubah  
  • 4. setiap  dikirim  ke  oracle  untuk  menemukan  byte  yang  membuat  padding  menjadi  valid.   Jadi   attacker   mengirimkan   banyak   request   berisi   2   blok   ciphertext  tersebut   sampai   menemukan   blok   ciphertext   pertama   yang   mendapatkan  respons  padding  valid.      Gambar  5:  Padding  oracle  attack  Walaupun  oracle  tidak  pernah  memberitahukan  hasil  enkripsinya,  informasi  dari  oracle  bahwa  padding  valid  atau  invalid  saja  sudah  cukup  menjadi  petunjuk  bagi  attacker  untuk  menebak  hasil  dekripsinya.    2.1  CONTOH  KASUS    Bagaimana  padding  oracle  attack  ini  bekerja  akan  saya  jelaskan  dalam  sebuah  contoh   kasus.   Attacker   telah   berhasil   mendapatkan   2   blok   ciphertext   berikut:  2D7850F447A90B87   dan   123B36A038A8682F.   Ciphertext   tersebut   bisa  dikirimkan  ke  suatu  aplikasi  web  yang  bertindak  sebagai  Oracle.  Bila  ciphertext  tersebut  ketika  didekrip   oracle  menghasilkan  padding  yang  valid,  maka  oracle  akan   mengirimkan   response   “200   OK”,   sebaliknya   akan   mengirimkan   respons  “500  Internal  Server  Error”.      2.2  MENDEKRIP  BYTE  TERAKHIR    Seorang   attacker   bisa   memanfaatkan   oracle   untuk   mendekrip   ciphertext  tersebut.  Dalam  contoh  ini  attacker  mencoba  mendekrip  blok  C2  terlebih  dahulu  (mencari   P2).   Cara   melakukan   serangan   padding   oracle   attack   adalah   dengan  mengirimkan  banyak  ciphertext  ke  oracle  sampai  mendapatkan  respons  padding  valid  (brute  force).    Dekripsi  dilakukan  dimulai  dari  blok  terakhir.  Dua  blok  yang  dikirim  ke  oracle  adalah:  • Blok   pertama   C1   adalah   blok   ciphertext   yang   dipakai   untuk   mencari  padding  yang  valid.  Dalam  mendekrip  byte  terakhir,  blok  ciphertext  yang  dikirim   adalah   00-­‐00-­‐00-­‐00-­‐00-­‐00-­‐00-­‐XX   dengan   XX   nanti   bernilai   dari  00  sampai  FF.  
  • 5. • Blok   kedua   C2   adalah   blok   ciphertext   yang   ingin   didekrip  123B36A038A8682F    Gambar   6   menunjukkan   proses   dekripsi   dua   blok   ciphertext   yang   dikirim  attacker  dalam  mode  CBC.  Attacker  ingin  mengetahui  byte  terakhir  hasil  dekripsi  C2  (warna  hijau  dalam  gambar  6).  Kondisi  yang  diinginkan  attacker  adalah  ketika  byte   terakhir   P2   (warna   kuning   dalam   gambar   6)   bernilai   01.     Karena   byte  terakhir   P2  (kuning)   adalah   hasil   XOR   antara   byte   terakhir   C1   (biru)   dan   hasil  dekrip  C2  (hijau)  maka  bisa  dituliskan  A  XOR  B  =  01.        Gambar  6:  Dekripsi  byte  terakhir  A  dan  B  adalah  variabel  yang  tidak  diketahui.  Kita  butuh  bantuan  oracle  untuk  menyelesaikan   persamaan   ini.   Kita   bisa   menginterogasi   oracle   menanyakan  pertanyaan:  • Apakah  A  XOR  00  =  01  ?  • Apakah  A  XOR  01  =  01  ?  • Apakah  A  XOR  02  =  01  ?  • Apakah  A  XOR  03  =  01  ?  • Dan  seterusnya  sampai  255    Bila  oracle  menjawab  dengan  valid  padding,  artinya  attacker  mendapat  jawaban  Ya,  sebaliknya  berarti  attacker  mendapat  jawaban  Tidak.    Gambar   7   menunjukkan   bagaimana   cara   attacker   mengirimkan   ciphertext   ke  oracle   dan   menerima   respons   dari   oracle   sampai   suatu   saat   dia   akan  mendapatkan  jawaban  valid  padding.    
  • 6.  Figure  7:  Brute  force  byte  terakhir  Ketika   attacker   mendapatkan   jawaban   valid   padding   dari   oracle,   artinya   dia  sudah  mengetahui  byte  terakhir  C1  yang  membuat  byte  terakhir  P2  bernilai  01.  Dalam   contoh   ini   setelah   mencoba   dari   00,   01,   02   dan   seterusnya   sampai  akhirnya  diketahui  bahwa  bila  byte  terakhir  C1  bernilai  87,  maka  respons  yang  didapat   adalah   valid   padding.   Karena   respons   yang   diterima   adalah   valid  padding,    maka  attacker  yakin  bahwa  byte  terakhir  P2  bernilai  01.      Figure  8:  Byte  terakhir  ditemukan  Gambar  8  menunjukkan  situasi  yang  terjadi  ketika  byte  terakhir  C1  bernilai  87  dan  byte  terakhir  P2  bernilai  01.  Dalam  situasi  ini  hasil  dekrip  C2  (warna  hijau)  bisa  diketahui  dengan  mudah  yaitu  87  XOR  01  =  86.  Dengan  teknik  sederhana  ini,  dalam  maksimal  256  kali  percobaan,  seorang  attacker  bisa  mengetahui  hasil  dekrip  C2.    Setelah   mengetahui   hasil   dekrip   C2   seorang   attacker   bisa   mendapatkan   P2  dengan  mengXOR  dengan  byte  terakhir  ciphertext  sebelumnya.    2.3  MENDEKRIP  BYTE  KE-­‐7    Setelah   berhasil   mendekrip   byte   terakhir,   attacker   bisa   melanjutkan   untuk  mendapatkan   byte   ke-­‐7.   Caranya   mirip   dengan   sebelumnya,   namun   kali   ini  attacker   harus   mencari   byte   ke-­‐7   C1   yang   membuat   byte   ke-­‐7   P2   bernilai   02.  
  • 7. Attacker  juga  membuat  byte  terakhir  C1  bernilai  84  agar  byte  terakhir  P2  bernilai  02.    Gambar  7  menunjukkan  situasi  ketika  attacker  mencoba  mendekrip  byte  ke-­‐7.      Figure  9:  Mendekrip  byte  ke-­‐7    Gambar   10   menunjukkan   proses   ketika   attacker   melakukan   brute   force   untuk  mencari   byte   ke-­‐7.   Setelah   mencoba   beberapa   kali   akhir   attacker   berhasil  mendapatkan  respons  padding  valid  ketika  byte  ke-­‐7  bernilai  0A.        Gambar  10:  Percobaan  mencari  byte  ke-­‐7  Setelah   mengetahui   bahwa   ketika   2   byte   terakhir   C1   bernilai   0A-­‐84  menghasilkan   2   byte   terakhir   P2   02-­‐02,   maka   otomatis   attacker   juga   langsung  bisa   menghitung   byte   ke-­‐7   hasil   dekrip   C2  yaitu   08.   Gambar   10   menunjukkan  situasi  ketika  attacker  berhasil  mendekripsi  2  byte  terakhir  C2.      
  • 8.  Figure  11:  Dekripsi  byte  ke-­‐7  Sampai  tahap  ini  attacker  sudah  berhasil  mengetahui  2  byte  terakhir  hasil  dekrip  C2  .      Proses   ini   bisa   dilanjutkan   terus   untuk   mencari   byte   berikutnya   dengan   cara  yang  sama  dari  byte  terakhir  sampai  byte  pertama:  • Mencari   byte   ke-­‐6   dilakukan   dengan   mencari   3   byte   terakhir   C1   yang  membuat  3  byte  terakhir  P2  bernilai  03-­‐03-­‐03  • Mencari   byte   ke-­‐5   dilakun   dengan   mencari   4   byte   terakhir   C1   yang  membuat  4  byte  terakhir  P2  bernilai  04-­‐04-­‐04-­‐04.  • Dan  seterusnya.    3.  PENCEGAHAN    Sebagai  algoritma  enkripsi,  AES  sampai  saat  ini  masih  dianggap  algoritma  yang  aman.  Namun  ternyata  bila  tidak  diimplementasikan  dengan  baik  bisa  berakibat  fatal.  Dalam  serangan  yang  dibahas  dalam  paper  ini  sebenarnya  bukan  algoritma  enkripsinya   yang   bermasalah,   namun   implementasi   dalam   mode   CBC   yang  bermasalah.    Tadi   kita   sudah   melihat   bagaimana   mengubah   ciphertext   bisa   membuat   hasil  dekripsinya  menjadi  berubah  juga.  Gambar  12  menunjukkan  ketika  byte  terakhir  C1  diubah  dari  85  menjadi  87,  menghasilkan  pesan  yang  sama-­‐sama  valid  namun  isinya  berbeda.    Ketika  byte  terakhir  C1  bernilai  85,  hasil  dekripsinya  adalah  ‘ABCDEFGHIJKLM’,  namun   ketika   byte   terakhir   C1   diubah   sedikit   menjadi   87   hasil   dekripsinya  berubah   menjadi   ‘ABCDEFGHIJKLM’+03+03   (kini   03   dianggap   sebagai   data  karena  paddingnya  adalah  01).    
  • 9.  Figure  12:  Malleability  Bayangkan  bila  ada  attacker  yang  berperan  sebagai  man-­‐in-­‐the-­‐middle  mencegat  suatu   ciphertext,   kemudian   mengubah   satu   byte   saja   dari   ciphertext   tersebut  sebelum   meneruskan   ke   tujuan.   Setelah   tiba   di   tujuan,   ciphertext   yang   sudah  diubah   tadi   ketika   didekrip   menghasilkan   pesan   yang   berbeda   dengan   yang  dimaksud   dalam   pesan   aslinya.   Hal   ini   tentu   berbahaya   bila   isi   pesannya  berubah  dari  “kirim  uang  1  juta  ke  rekening  123″  berubah  menjadi  “kirim  uang  1  juta  ke  rekening  124″.    Serangan   ini   bisa   terjadi   karena   server   melakukan   dekripsi   pada   semua  ciphertext  yang  diterimanya  tanpa  peduli  apakah  ciphertext  tersebut  valid  atau  tidak.   Bila   server   bersedia   mendekrip   semua   ciphertext   yang   masuk,   maka  attacker   bisa   memanfaatkannya   untuk   mengirimkan   tampered   ciphertext   ke  server  dan  mengamati  respons  hasil  dekripsinya.    Serangan   padding   oracle   ini   bisa   dicegah   dengan   menempelkan   Message  Authentication   Code   pada   ciphertext.   Server   hanya   boleh   melakukan   dekripsi  pada   ciphertext   yang   authenticated,   artinya   ciphertext   yang   dijamin   integritas  dan  otentisitasnya  dengan  MAC.      Dengan   adanya   MAC,   attacker   tidak   bisa   lagi   mengubah   ciphertext   dengan  harapan  mengorek  informasi  dari  server  apakah  ciphertext  yang  dia  kirim  valid  atau  tidak  paddingnya.  Server  boleh  mengirimkan  response  pada  client  apakah  MAC   valid   atau   tidak   tanpa   ada   resiko   kebocoran   informasi   karena   tidak   ada  operasi   dekripsi   yang   dilakukan   dan   MAC   tidak   ada   hubungan   sama   sekali  dengan  plaintext.    4.  REFERENSI    [1]   S.   Vaudenay.   Security   Flaws   Induced   by   CBC   Padding   Applications   to   SSL,  IPSEC,  WTLS…  -­‐  2002  [2]  T.  Duong,  J.  Rizzo.  Practical  Padding  Oracle  Attacks  -­‐  2010