Anda di halaman 1dari 5

9/30/2019 Programming dan Penetration Testing | Cinta Programming

Cinta Programming
A hacker does for love what others would not do for money.

Programming dan Penetration Testing


Like Sign Up to see what your friends like.

Pentest adalah kegiatan menyerang sistem komputer untuk mencari kelemahan security, atau dari
Wikipedia:

A penetration test, or the short form pentest, is an attack on a computer system with the intention of
nding security weaknesses, potentially gaining access to it, its functionality and data.

Pentesting dilakukan atas permintaan client, jadi bukan hacking ke sembarang website. Contoh sederhana
pentesting seperti ini: coba jebol website perusahaan kami, apakah ada bug securitinya? atau: coba pergi ke
lobi atau tempat parkir perusahaan kami, apakah ada WIFI terbuka, apakah dari situ bisa masuk ke sistem
internal perusahaan kami?. Kami punya app mobile, apakah bisa “dijebol” (misalnya apakah kita bisa
membuat request ke server supaya memberikan data user lain).

Karena ini blog mengenai programming, saya tidak akan membahas banyak mengenai pentesting, hanya
ingin menunjukkan betapa keahlian programming bisa sangat berguna untuk pentesting. Dari contoh yang
saya sebutkan di atas, scope dari pentesting bisa sangat banyak, mulai dari yang on site: datang dan
mengecek kabel, wireless network, dsb, sampai ke level network dan aplikasi (baik web, desktop, mobile).
Saya hanya ingin membahas aspek programming, untuk mendorong peminat bidang security agar mau
belajar programming.

Perkiraan saya mungkin sekitar 70% pekerjaan pentesting bisa dilakukan dengan tools yang sudah tersedia,
baik yang open source maupun komersial, tanpa butuh keahlian scripting ataupun programming. Sisanya
bakal butuh programming. Bahkan saya yakin 100% beberapa jenis bug tidak bisa ditemukan tanpa
keahlian programming.

https://cintaprogramming.com/2015/05/14/programming-dan-penetration-testing/ 1/5
9/30/2019 Programming dan Penetration Testing | Cinta Programming

Kemampuan programming minimal yang dibutuhkan adalah bisa mengcompile atau menjalankan program
dalam berbagai bahasa. Kadang di sebuah server tidak tersedia tool tertentu, jadi kita perlu mengcompile
dari source karena OS di server itu sudah terlalu lama (misalnya masih banyak yang memakai RHEL 4). Jika
tidak tahu bagaimana menjalankan sesuatu, maka sudah game over di titik ini. Pernah saya baca di blog
pak Budi Rahardjo mengenai kompetisi CDC (Cyber Defense Competition):

Salah satu soal yang disampaikan adalah men-decode data base64 yang kemudian menjadi skrip
Python, yang tinggal dijalankan. Lucunya ada banyak yang gak tahu Python. ha ha ha. Mereka
kebingungan menjalankannya. Padahal tinggal “python namaskrip.py”. Mereka tidak perlu tahu
bahasanya. hi hi hi. Ada yang pura-pura tahu dan me-rename menjadi bahasa C, menambahkan
“#include ” dibagian awalnya, kemudian mencoba compile. Ya gak bakalan jalanlah. he he he.

Kejadian semacam di atas itu yang mendorong saya menulis tulisan seperti ini.

Keahlian lain adalah mencari program atau menulis program kecil dalam bahasa tertentu yang kadang
tidak terlalu umum atau sudah kuno. Contoh: jika sebuah web server bisa menerima upload le, dan web
server itu hanya bisa menjalankan ASP versi klasik, ya kita harus bisa mencari shell dalam ASP Classic
(bukan ASP.NET). Berbeda dengan software development biasa di mana kita bisa memilih bahasa
pemrograman atau teknologi yang ingin kita pakai, di sini kita dipaksa mengikuti apa yang tersetup di
server.

Jika beruntung, sudah ada orang yang menuliskan program standar (web shell) yang memiliki fungsi seperti
“ le manager/ le upload” (untuk mengupload tool tambahan), “shell” (untuk mengeksekusi command
apapun di sisi server), dan “database shell” (untuk mengirimkan query apapun ke database). Jika tidak
beruntung, atau ada batasan tertentu di server, mungkin kita perlu membuat tool baru. Contoh sederhana:
jika server membatasi upload hanya 100 KB saja, sementara binary nmap yang ingin diupload (plus

https://cintaprogramming.com/2015/05/14/programming-dan-penetration-testing/ 2/5
9/30/2019 Programming dan Penetration Testing | Cinta Programming

librarnya) besarnya beberapa megabyte, maka kita perlu membuat program kecil untuk mengupload
parsial lalu menggabungkan hasil uploadnya.

Keahlian membaca kode dalam berbagai bahasa juga diperlukan. Dalam beberapa kasus, kita bisa
mendapatkan akses ke source code aplikasi web (karena bug, karena salah kon gurasi, karena lupa ikut
mengupload direktori “.git”, dsb). Setelah punya source code, kita bisa menemukan bug tambahan dengan
membaca kodenya. Sebagai pentester, tentunya Anda tidak akan bilang: wah ternyata dia pake Python,
saya nggak tau cara ngehack aplikasi web dengan Python.

Dengan membaca source code, hal paling minimal adalah mengerti di mana le kon gurasi supaya bisa
mengekstrasi user/password database, berikutnya adalah mencari bug-bug tambahan seperti SQL
Injection, hidden functionality, dsb.

Dengan maraknya OS Mobile, sekarang pentesting juga masuk ke ranah mobile. Di sini ilmu reverse
engineering sangat diperlukan. Untuk OS Android, reverse engineering bisa dilakukan dengan decompiler
yang bisa mengembalikan kode Java ke bentuk semula (kecuali sudah diobfuscate), jadi kembali keahlian
membaca kode diperlukan.

Setelah mengetahui kodenya, biasanya kita perlu melakukan fuzzing request, alias mencoba-coba berbagai
kemungkinan request. Untuk aplikasi berbasis HTTP, kita masih bisa memakai proxy (misalnya ZAP) dan
mengubah-ubah request untuk tahu reaksi server (bagaimana jika nilaiya negatif, bagaimana jika nama le
mengandung “../”, dsb). Tapi untuk aplikasi yang memakai protokol khusus via SSL, kita perlu memahami,
lalu mengimplementasikan ulang client sendiri yang bisa melakukan fuzzing.

Pengetahuan mengenai best practice dalam sebuah bahasa juga diperlukan dalam membuat aplikasi yang
aman. Contoh: untuk menghasilkan bilangan random untuk kriptogra di Java gunakan SecureRandom
(jangan Random). Di Android untuk melakukan koneksi SSL menggunakan socket, jangan gunakan SSLFactory
tapi gunakan SSLCertificateSocketFactory, dsb. Pekerjaan pentester cukup mudah di sini, hanya
menyarankan saja, dan programmer yang akan mengimplementasikan saran tersebut.

Saya sudah banyak menemukan bug yang memerlukan banyak coding. Ada bug yang terkait dengan
penyimpanan password (terenkripsi) yang disimpan lokal di device yang seharusnya aman, tapi ternyata
saya bisa membuat tool yang cukup optimal untuk bisa mengcrack dalam 1 jam karena banyak hal kecil
yang lupa dilakukan oleh programmer (lupa menginisialisasi IV, memakai EBC). Saya pernah menemukan
bug fatal yang berhubungan dengan menggunakan algoritma hashing yang tidak aman (tidak memakai
Cryptographic Hash Function). Dengan tools yang tersedia saja, tanpa pengetahuan programming (dan
kriptogra ), kedua bug itu tidak akan bisa ditemukan.

Jadi saran saya: untuk mereka yang tertarik di bidang security, pelajari juga bagian programmingnya. Ini
saya masih bicara level pentesting yang kebutuhkan programmingnya masih minimal. Di bagian lagin
security, keahlian programming lebih dibutuhkan lagi, misalnya membuat exploit butuh pemahaman yang
lebih mendalam tentang sistem dan low level programming.

Dalam full security audit, selain pentesting kadang client menginginkan juga review kode mereka, jadi kita
perlu bisa membaca, menjalankan, dan memberi saran yang berkaitan dengan security.

https://cintaprogramming.com/2015/05/14/programming-dan-penetration-testing/ 3/5
9/30/2019 Programming dan Penetration Testing | Cinta Programming

Buat saya sendiri sebagai programmer, saya jadi rajin membaca mengenai best security practice untuk
berbagai bahasa dan framework. Jika ada yang bertanya: buat apa sih belajar bahasa X atau teknologi Y,
saya bisa bilang: mungkin suatu saat ada sistem yang memakai teknologi itu yang perlu saya test.

Like Sign Up to see what your friends like.

Share this:

Related

Matematika dan Cinta Struct vs Union


Programming May 1, 2009 May 1, 2009
May 15, 2018 In "umum" In "bahasa"
In "teknis"

This entry was posted in bahasa, security, umum on May 14, 2015
[https://cintaprogramming.com/2015/05/14/programming-dan-penetration-testing/] .

2 thoughts on “Programming dan Penetration Testing”

aditya
August 7, 2015 at 9:52 am

Saya masih harus banyak belajar nih Om, tentang programming Makasih banyak Om Artikelnya yang selalu
menyadarkan saya tentang pentingnya programming itu..
Kadang saya selalu loncat belajar programming jadi untuk memahami 1 programming jadi kurang bagus.

reyhanvs
May 4, 2017 at 11:35 am

Dear Admin/P.Yohanes,

“sistem dan low level programming”


yang dimaksud di sini itu apa saja ya cakupan ny?
https://cintaprogramming.com/2015/05/14/programming-dan-penetration-testing/ 4/5
9/30/2019 Programming dan Penetration Testing | Cinta Programming

apa betul itu juga termasuk bahasa Assembly?


lalu harus dari mana untuk seorang pemula memulai belajar nya?
apa ada rekomendasi website yang cukup bagus untuk pemula belajar?

Terima kasih,
Reyhan Valdian S

This site uses Akismet to reduce spam. Learn how your comment data is processed.

https://cintaprogramming.com/2015/05/14/programming-dan-penetration-testing/ 5/5

Anda mungkin juga menyukai