BEST PRACTICES
Draft
Version 0.1
Drafted by
Indarko Wiyogo, CISSP
Semi Yulianto, CISSP
Page 2 of 22
5.4 Rekomendasi ..................................................................................................................................... 15
6. Sensitive Data Exposure (A06) ................................................................................................................ 16
6.1 Pola Kerentanan ................................................................................................................................ 16
6.2 Cara Mengecek Kerentanan .............................................................................................................. 16
6.3 Contoh Serangan............................................................................................................................... 16
6.4 Rekomendasi ..................................................................................................................................... 16
7. Missing Function Level Access Control (A07).......................................................................................... 17
7.1 Pola Kerentanan ................................................................................................................................ 17
7.2 Mengecek Kerentanan ...................................................................................................................... 17
7.3 Contoh Serangan............................................................................................................................... 17
7.4 Rekomendasi ............................................................................................................................... 17
8. Cross-Site Request Forgery (CSRF) (A08) ................................................................................................ 18
8.1 Pola Kerentanan ................................................................................................................................ 18
8.2 Contoh Kerentanan ........................................................................................................................... 18
8.3 Cara Mengecek Kerentanan Aplikasi ................................................................................................ 18
8.4 Rekomendasi ..................................................................................................................................... 18
9. Using Components with Known Vulnerabilities (A09) ............................................................................ 19
9.1 Pola Kerentanan ................................................................................................................................ 19
9.2 Contoh Kerentanan ........................................................................................................................... 19
9.3 Rekomendasi ............................................................................................................................... 20
10. Un-validated Redirects and Forwards (A10) ......................................................................................... 21
10.1 Pola Kerentanan .............................................................................................................................. 21
10.2 Contoh Kerentanan ......................................................................................................................... 21
10.3 Cara Mengecek Kerentanan Aplikasi .............................................................................................. 21
10.4 Rekomendasi................................................................................................................................... 22
Page 3 of 22
1. Injection (A01)
Kelemahan injeksi, seperti SQL, OS, dan LDAP injection terjadi ketika data yang tidak dapat
dipercaya dikirim ke aplikasi sebagai bagian dari suatu perintah atau query. Penyerang bisa
mengelabui aplikasi untuk mengeksekusi perintah yang tidak direncanakan atau mengakses
data yang tidak terotorisasi.
Contoh 2
//tidak ada validasi input
$clas=$_POST['clas'];
$query="SELECT * FROM $clas ";
Page 4 of 22
Contoh PHP Code yang Disarankan
Contoh 1
<?php
$db = mysqli_connect(getServer(),getUid(),getPwd());
$stmt = mysqli_prepare($link, "SELECT ccnum FROM cust WHERE id = ?");
$id = $HTTP_GET_VARS["id"];
// hanya dibolehkan IDs (1-8 digits)
if (preg_match('/^\d{1,8}$/',$id)) {
mysqli_stmt_bind_param($stmt, "s", $id);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $result);
mysqli_stmt_fetch($stmt);
if (empty($name)) {
echo "No result!";
} else {
echo $result;
}
} else {
echo "Invalid ID. Try again.";
}
?>
Contoh 2
//menggunakan fungsi str_replace `','\\`
$clas = str_replace('`','\\`',$_POST['clas']);
$query = "SELECT * FROM \`{$clas}\`";
Page 5 of 22
"//localhost:1433", "sa", "$3cre+");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(
" SELECT ccnum FROM cust WHERE id = " + Id);
while (rs.next()) {
// Party on results
}
rs.close();
st.close();
}
catch (SQLException e)
{
// OOPS!
return false;
}
catch (ClassNotFoundException e2)
{
// Class not found
return false;
}
finally
{
try
{
con.close();
} catch(SQLException e) {}
}
return true;
}
Page 6 of 22
{
con.close();
} catch(SQLException e) {}
}
return true;
}
1.8 Rekomendasi
Cara untuk mencegah injeksi mensyaratkan data yang tidak dapat dipercaya tetap terpisah
dari perintah-perintah dan queries.
1. Fungsi berikut bisa digunakan untuk membuat prepared statements. Hal ini
memungkinkan sebuah aplikasi untuk membuat SQL query yang mengandung
parameter dan men-set nilai parameter di tempat yang aman :
mysqli-> prepare
stmt-> prepare
stmt-> bind_param
stmt-> execute
odbc_prepare
2. Ada dua metode untuk memvalidasi input
a. Blacklisting, membiarkan semua karakter masukan kecuali yang secara eksplisit
didefinisikan didalam blacklist.
b. Whitelisting, memblok semua karakter masukan kecuali yang secara eksplisit
didefinisakan pada Whitelist.
3. Contoh ekspresi reguler alpanumerik di PHP,
preg_replace( "/[^a-zA-Z0-9_]/", "", $stringToFilter );
4. Jangan menggunakan user System Administrator seperti “sa” untuk web aplikasi.
Page 7 of 22
2. Broken Authentication and Session Management (A02)
Fungsi-fungsi aplikasi yang berhubungan dengan otentikasi dan pengelolaan sesi seringkali
tidak dimplementasikan dengan benar. Hal ini memungkinkan penyerang mendapatkan
password, key, dan token-token sesi, atau mengeksploitasi implementasi lainnya untuk
memperoleh identitas pengguna yang lain.
seorang pengguna di konfirmasi oleh situs diatas untuk menyebarkan link tersebut
kepada teman-temannya tanpa mengetahui apabila mengklik situs tersebut, maka
session id dari pengguna akan terambil. Bayangkan apabila di session id tersebut ada
nomor kartu kredit yang tersimpan.
Contoh 2 :
Pengaturan timeout aplikasi tidak dilakukan dengan benar, pengguna menggunakan
komputer umum untuk mengakses aplikasi. Pada saat pengguna akan keluar dari aplikasi
seharusnya memilih tombol “Logout” tetapi pengguna tidak memilih tombol logout
tersebut malah hanya menutup tab dan langsung pergi. Penyerang menggunakan
browser yang sama dan browser masih ter-otentikasi.
Contoh 3:
Insider atau Penyerang Eksternal memperoleh akses ke sistem database password.
Password pengguna tidak terenkripsi, dan memperlihatkan seluruh isi database password
ke penyerang.
Contoh 4:
Untuk otentikasi di website , password yang dimasukan sangat sederhana untuk diingat,
yaitu misalnya tanggal lahir pemilik akun. Pemilik akun tersebut akan merubah password
menjadi tanggal lahir istrinya. Dan pemilik akun menerima email dari website sebagai
berikut :
Dear Pemilik Account,
Tanda pengenal Anda adalah: Pemilik Account
Password baru Anda adalah: 01021975
Salam,
Admin Website
Page 8 of 22
Setiap penyerang dapat dengan mudah menebak password pemilik account. Jika
penyerang tahu situs website memerlukan sandi 8-digit, dengan social enginering, mudah
untuk memiliki tanggal lahir semua anggota keluarga pemilik akun (orangtua, pasangan,
anak, dll)
Dan bahkan jika password pemilik akun tidak mudah ditebak, seorang penyerang
berpengalaman juga bisa mencegat email pemilik akun dan mendapatkan tanda pengenal
dan password pemilik akun.
Contoh 5:
Berikut ini contoh kesalahan respon yang seharusnya tidak ditampilkan :
Respon yang benar tidak menunjukan bahwa Id Pengguna atau password adalah parameter
yang salah dan menampilkan user id yang valid.
2.4 Rekomendasi
a. Password strength (Mengacu S.E. no 53/Dirtekjaskug/0711 tentang tatacara pengamanan
password pada sistem teknologi perusahaan)
Aplikasi harus memberikan level minimal dari keamanan sebuah password, dimana dapat dilihat
dengan cara melihat panjang dari password dan kompleksitasnya. Contohnya sebuah aplikasi
dimana terdapat user baru yang akan mendaftar, aplikasi tidak mengijinkan password dengan
panjang 3-4 karakter atau kata-kata simpel yang dapat mudah ditebak oleh hacker.
[ X ] Aman123
[ √ ] 64ruda@P4nc45il4
b. Penggunaan Password
Aplikasi harus membatasi user yang mengakses aplikasi dan melakukan login kembali ke
sistem pada tenggang waktu tertentu. Dengan cara ini aplikasi dapat dilindungi dari
serangan brute force dimana hacker bisa menyerang berulang kali untuk berhasil login ke
sistem. Selain itu, log in yang gagal sebaiknya dicatat sebagai informasi kepada
administrator untuk mengindikasikan kemungkinan serangan yang terjadi.
c. Penyimpanan Password
Password tidak boleh disimpan (Hardcode) di dalam aplikasi. Password harus disimpan
dalam format terenkripsi dan disimpan di file lain seperti file database atau file password.
Hal ini dapat memastikan bahwa informasi yang sensitif seperti password tidak
disebarkan ke dalam aplikasi.
d. Melindungi Session ID
Page 9 of 22
Server biasanya menggunakan session ID untuk mengidentifikasi user yang masuk ke
dalam session. Akan tetapi jika session ID ini dapat dilihat oleh seseorang pada jaringan
yang sama, orang tersebut dapat menjadi seorang client. Salah satu cara yang dapat
digunakan untuk mencegah terlihatnya session ID oleh seseorang pada suatu jaringan
yang sama adalah menghubungkan komunikasi antara sever dan client pada sebuah SSL-
protected channel.
e. Upaya-upaya yang kuat juga harus dilakukan untuk menghindari kelemahan XSS yang
dapat digunakan untuk mencuri session ID.
f. Untuk pengguna yang memiliki akses ke informasi sensitif dan operasi, harus mempunyai
minimal 2 otentikasi (multi factor authentication). Contoh :
- password
- token
- fingerprint
- Penggunaan Captcha
Page 10 of 22
3. Cross Site Scripting (A03)
Kelemahan XSS terjadi ketika aplikasi mengambil data yang tidak dapat dipercaya dan
mengirimnya ke suatu web browser tanpa validasi yang memadai. XSS memungkinkan
penyerang mengeksekusi script-script di dalam browser korban, yang dapat membajak sesi
pengguna, mengubah tampilan website, atau mengarahkan pengguna ke situs-situs jahat.
3.1 Pola Kerentanan
Setiap aplikasi yang memiliki pola berikut ini beresiko terkena cross-site scripting:
a. Aplikasi web mengambil input dari suatu entitas HTTP seperti querystring, header, atau
from.
b. Aplikasi ini tidak memeriksa validitas input.
c. Aplikasi ini mengembalikan data ke browser, baik dalam HTML atau header HTTP.
3.6 Rekomendasi
1. Mem-filter semua data yang tidak dapat dipercaya dengan tepat berdasarkan konteks
HTML (body, atribut, JavaScript, CSS, atau URL) tempat diletakkannya data. Pengembang
perlu menyertakan filter ini dalam aplikasi mereka.
2. Seorang pengembang dapat mengatur karakter set untuk halaman web, terlepas dari
lingkungan server pemrograman web, dengan menambahkan kode berikut ke awal
halaman web:
Page 11 of 22
<meta http-equiv="Content Type" content="text/html; charset=ISO-8859-1" />
ISO-8859-1 seringkali disebut juga dengan Latin-1, adalah standar character
encoding dari 191 karakter dalam tulisan latin.
Page 12 of 22
4. Insecure Direct Object References (A04)
Adalah suatu celah yang terjadi saat pembuat aplikasi web meng-ekspos referensi internal
penggunaan objek seperti file, direktori, database record, dan lainnya. Celah ini dapat
memaksa target browser yang sudah log-in untuk mengirimkan "pre-authenticated request"
terhadap suatu aplikasi website dan memaksa browser target untuk melakukan perintah
penyusup.
PreparedStatement pstmt =
connection.prepareStatement(query , … );
pstmt.setString( 1, request.getparameter("acct"));
Penyerang cukup memodifikasi parameter ‘acct’ di browsernya untuk mengirim nomor akun
apapun yang diinginkan. Jika tidak diverifikasi, penyerang dapat mengakses sembarang akun
pengguna lain.
http://example.com/app/accountInfo?acct=notmyacct
4.4 Rekomendasi
Seperti biasa , pengembang aplikasi web dapat mencegah serangan ini melalui perencanaan
yang baik. Pengembang harus menggunakan peta referensi tidak langsung, karena pemetaan
referensi secara langsung dapat dengan mudah ditebak oleh penyerang . Pengembang harus
menghindari mengekspos resource yang bersifat privat kepada pengguna. Nama file,
eksternal / internal URL, dan kunci basis data merupakan contoh hal-hal yang tidak boleh
ditampilkan kepada pengguna
Page 13 of 22
5. Security Miss Configuration (A05)
Keamanan yang baik mensyaratkan dimilikinya suatu konfigurasi keamanan (yang terdefinisi
dan diterapkan) untuk aplikasi, framework, server aplikasi, web server, server database, dan
platform. Semua pengaturan ini harus didefinisikan, diimplementasikan, dan dipelihara,
karena terdapat banyak aplikasi yang dirilis tanpa konfigurasi default yang aman. Hal ini juga
mencakup menjaga semua software up-to-date, termasuk semua pustaka kode yang
digunakan aplikasi tersebut.
Contoh 2:
Konsol admin server aplikasi terinstalasi otomatis dan tidak dibuang. Akun standar tidak
diubah. Penyerang menemukan page admin, login dengan password standar, lalu
mengambil alih sistem.
Contoh 3:
Listing direktori ditampilkan. Penyerang dapat mendownload seluruh source kemudian
menemukan kelemahan dalam aplikasi.
Page 14 of 22
d. Apakah penanganan kesalahan diset untuk mencegah stack traces dan pesan kesalahan
informatif bocor?
e. Apakah seting keamanan dalam pustaka dan framework pengembangan (misal Struts,
Spring, ASP.NET) telah dipahami dan dikonfigurasi?
Proses menyeluruh dan berulang dibutuhkan untuk memelihara konfigurasi keamanan yang
tepat.
5.4 Rekomendasi
a. Melakukan update patch yang terbaru untuk seluruh aplikasi, Termasuk OS, Server
Web/App, DBMS, dan seluruh referensi kode.
b. Menonaktifkan, menghapus, atau melakukan un-install untuk fasilitas port, layanan,
halaman, akun dan hak akses yang tidak diperlukan.
Sebagai contoh jika yang terbuka adalah port 23 (telnet), maka anda dapat mematikkan
service ini pada Start=>control panel=>administrative tool=>services=>telnet.. Pastikan
pada bagian service status menjadi stopped atau disable.
c. Mengubah Password default dan username bawaan aplikasi atau database.
d. Penanganan pesan error
e. Menghapus konfigurasi / Installer File
f. Lakukan audit terhadap Akses Kontrol
g. Secara rutin memantau log yang terdapat di web server
Page 15 of 22
6. Sensitive Data Exposure (A06)
Banyak aplikasi web yang tidak memberikan perlindungan terhadap data yang sensitif, seperti
kartu kredit, ID pajak, dan autentifikasi. Penyerang dapat mengambil atau memodifikasi data
yang tidak dilindungi untuk melakukan penipuan kartu kredit, pencurian identitas, atau
kejahatan lainnya. Data sensitif layak mendapatkan perlindungan ekstra seperti enkripsi saat
perpindahan data atau pada saat penyimpanan, serta tindakan pencegahan khusus bila dibuka
dengan browser yang berbeda.
6.4 Rekomendasi
a. Hindari password plain-text atau data sensitif lainnya dalam file konfigurasi.
b. Enkripsi menggunakan kunci publik,
c. Hanya mengizinkan aplikasi back-end untuk mendekripsi mereka dengan kunci pribadi.
d. Minimalkan paparan rahasia dalam memori.
e. Gunakan Internet Protocol Security (IPSec) atau SSL untuk mengirimkan informasi penting
karena menambah perlindungan terhadap kesengajaan penyadapan dan modifikasi
selama data in transit.
Page 16 of 22
7. Missing Function Level Access Control (A07)
Sebagian besar aplikasi web memverifikasi fungsi tingkat hak akses sebelum membuat fungsi
yang terlihat di user interface. Namun, aplikasi perlu melakukan pemeriksaan kontrol akses
yang sama pada server ketika masing-masing fungsi diakses. Jika permintaan tidak diverifikasi,
penyerang akan dapat memaksa permintaan untuk mengakses fungsi tanpa otorisasi yang
tepat.
http://example.com/app/changepasswd.php
7.4 Rekomendasi
Aplikasi yang dikembangkan harus memiliki konsistensi dan kemudahan untuk menganalisis
modul otorisasi yang di panggil dari keseluruhan fungsi bisnis aplikasi tersebut. Biasanya
beberapa proteksi adalah seperti menyediakan satu atau lebih komponen eksternal kedalam
script.
a. Buatlah proses untuk mengatur hak akses dan pastikan pengembang dapat melakukan
update dan audit tersebut dengan mudah.
b. Secara default, mekanisme user pada aplikasi seharusnya dapat menolak seluruh akses
yang masuk, maka dari itu berikan hak akses yang jelas untuk setiap role yang khusus
diseluruh fungsi.
c. Jika suatu fungsi terlibat dalam proses, lakukan pengecekan untuk memastikan kondisi
fungsi tersebut mendapatkan akses yang tepat.
Page 17 of 22
8. Cross-Site Request Forgery (CSRF) (A08)
Suatu serangan CSRF memaksa browser korban yang sudah log-on untuk mengirim HTTP
request yang dipalsukan, termasuk di dalamnya session cookie korban dan informasi otentikasi
lain yang otomatis disertakan, ke suatu aplikasi web yang rentan. Hal ini memungkinkan
penyerang untuk memaksa browser korban menghasilkan request yang dianggap sah oleh
aplikasi rentan tadi.
http://example.com/app/transferFunds?amount=1500 &destinationAccount=4673243243
Penyerang dapat membuat permintaan yang akan mentransfer uang dari akun korban ke
akunnya, dan memasukkan serangan ini dalam sebuah permintaan image yang disimpan di
site dalam kendali penyerang.
Jika korban mengunjungi site tersebut ketika sudah terotentikasi ke example.com, maka
sembarang permintaan palsu akan menyertakan info sesi pengguna, dan mengotorisasi
permintaan.
8.4 Rekomendasi
Pencegahan CSRF membutuhkan penyertaan unpredictable token dalam body atau URL
setiap permintaan HTTP. Token tersebut harus unik untuk setiap sesi pengguna, atau juga
untuk setiap permintaan.
a. Opsi yang bisa dipilih adalah menyertakan token unik dalam field tersembunyi. Hal ini
membuat nilai yang akan dikirim dalam permintaan HTTP, tidak terdapat di dalam
URL, yang rentan terekspos.
b. Token unik dapat juga disertakan dalam URL, atau parameter URL. Namun,
penempatan tersebut berisiko karena URL akan terlihat oleh penyerang.
c. Mewajibkan pengguna untuk me-otentikasi ulang. Misalkan menggunakan Captcha
Page 18 of 22
9. Using Components with Known Vulnerabilities (A09)
Sebagian besar komponen tidak membuat patch kerentanan untuk versi lama, tetapi hanya
memperbaiki masalah dalam versi berikutnya. Maka sangat penting untuk melakukan update
ke versi yang terbaru.
Page 19 of 22
9.3 Rekomendasi
a. Identifikasi semua komponen dan versi yang digunakan, termasuk semua dependensi.
(misalnya, versi plugin)
b. Memantau keamanan komponen ini dalam database publik, milis proyek, dan milis
keamanan, dan menjaga agar tetap up to date.
c. Menetapkan kebijakan keamanan yang mengatur penggunaan komponen, untuk
pengembangan perangkat lunak tertentu, melewati tes keamanan, dan lisensi.
d. Apabila diperlukan, pertimbangkan untuk menambahkan fungsi keamanan.
e. Uninstall dan remove template, component, module, plugins dan extenstion yang tidak
digunakan
f. Jangan gunakan software bajakan atau trial, biasanya software tersebut telah disusupi
oleh kode jahat yang bisa digunakan untuk hack web dan server Anda.
g. Hapus file dan folder yang tidak dikenal di hosting. Anda bisa bandingkan file dan folder
tersebut dengan software yang asli atau dengan backup.
h. Pastikan permission (hak akses) file adalah 644 dan untuk folder adalah 755 (os linux)
i. Permission File config yang berisi informasi username dan password db (contoh :
configuration.php di Joomla, wp-config.php di WordPress) di set menjadi 444 (os linux)
j. Proteksi folder admin anda dengan password (Password Protect Directories) Tambahkan
rule ke robot.txt dan .htaccess supaya search engine tidak bisa mengakses ke direktori
admin atau direktori yang tidak diinginkan.
Page 20 of 22
10. Un-validated Redirects and Forwards (A10)
http://www.example.com/redirect.jsp?url=evil.com
Contoh 2:
Aplikasi menggunakan penerusan untuk membuat rute request antar bagian yang
berbeda dari suatu situs. Untuk memfasilitasi hal ini, beberapa halaman menggunakan
parameter untuk mengindikasikan ke mana pengguna harus dikirim jika transaksi
berhasil. Dalam kasus ini, penyerang membuat URL yang akan melewati pemeriksaan
kendali akses aplikasi dan kemudian meneruskan penyerang ke suatu fungsi administratif
yang tidak dapat diaksesnya dalam kondisi normal.
http://www.example.com/boring.jsp?fwd=admin.jsp
Page 21 of 22
bagian dari URL. Jika demikian, ubah URL target dan cek apakah situs tersebut mengarah
ke target baru atau tidak.
10.4 Rekomendasi
Semaksimal mungkin hindari penggunaan redirects dan forwards.
a. Jika digunakan, jangan tampilkan parameter pengguna dalam URL tujuan.
b. Jika parameter tujuan tidak dapat dihindari, pastikan nilai yang diberikan valid dan
terotorisasi untuk pengguna.
c. Direkomendasikan agar setiap parameter tujuan berupa nilai pemetaan, URL aktual
atau bagian dari URL, dan kode di sisi server menerjemahkan pemetaan ini ke URL
target.
d. Aplikasi dapat menggunakan ESAPI untuk meng-override metode sendRedirect() untuk
memastikan semua tujuan redirects aman. Kelemahan semacam ini sangatlah penting
untuk dihindari karena merupakan target favorit pelaku phishing untuk memperoleh
kepercayaan pengguna.
Page 22 of 22