Devsecops: membangun kemampuan soc di dalam devsecops pipeline - Dedi Dwianto
“Hollywood style cracking” pada Block Cipher mode CBC: Analisis and Pencegahan
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