banyak kerentanan hasil dari praktek pemrograman yang buruk
Sepuluh besar Keamanan Aplikasi Open Web termasuk 5 kelemahan perangkat lunak terkait
Kurang pengecekan / validasi input Program
Pentingnya kesadaran akan keamanan
Software Kualitas vs Keamanan
kualitas perangkat lunak dan keandalan
• Kegagalan disengaja program
• dari input yang tak terduga secara teoritis acak
• meningkatkan menggunakan desain terstruktur dan pengujian
• tidak berapa banyak bug, tapi seberapa sering dipicu
keamanan perangkat lunak terkait
• tetapi penyerang memilih distribusi input, khusus menargetkan kode buggy untuk mengeksploitasi
• dipicu oleh input sering sangat tidak mungkin
• yang tes umum don 't mengidentifikasi
Defensive Programming
bentuk desain defensif untuk memastikan fungsi lanjutan dari perangkat lunak meskipun penggunaan yang tak terduga
membutuhkan perhatian semua aspek eksekusi program, lingkungan, data diolah
juga disebut pemrograman aman
berasumsi apa-apa, periksa semua potensi kesalahan
bukan hanya berfokus pada pemecahan tugas
harus memvalidasi semua asumsi
Keamanan oleh Desain
keamanan dan keandalan desain umum gol dalam kebanyakan disiplin ilmu teknik
masyarakat tidak toleran jembatan / pesawat kegagalan dll
pengembangan perangkat lunak tidak matang
tingkat kegagalan yang jauh lebih tinggi ditoleransi
walaupun memiliki sejumlah pengembangan perangkat lunak dan kualitas standar
Fokus utama adalah pengembangan umum siklus hidup
semakin mengidentifikasi keamanan sebagai tujuan utama
Penanganan Program Masukan
salah menangani gagal sangat umum
input sumber data dari luar
Data dibaca dari keyboard, berkas, jaringan
juga lingkungan eksekusi, data config
harus mengidentifikasi semua sumber data
dan eksplisit memvalidasi asumsi pada ukuran dan jenis nilai sebelum digunakan
Masukan Ukuran & Buffer Overflow
sering memiliki asumsi tentang ukuran buffer
misalnya. bahwa input pengguna hanya baris teks
ukuran buffer sesuai tetapi gagal untuk memverifikasi ukuran
sehingga buffer overflow
pengujian mungkin tidak mengidentifikasi kerentanan
karena fokus pada "normal, diharapkan" input
aman coding memperlakukan semua masukan sebagai berbahaya
maka harus proses sehingga untuk melindungi Program
Interpretasi Masukan
masukan Program mungkin biner atau teks
interpretasi biner tergantung pada encoding dan biasanya aplikasi spesifik
teks dikodekan dalam karakter set misalnya ASCII
internasionalisasi telah meningkat berbagai
juga perlu memvalidasi interpretasi sebelum digunakan
misalnya nama file, URL, alamat email, identifier
kegagalan untuk memvalidasi dapat mengakibatkan kerentanan dieksploitasi
Serangan injeksi
kelemahan yang berkaitan dengan penanganan yang tidak valid masukan yang kemudian mempengaruhi pelaksanaan program
sering ketika lulus sebagai parameter untuk program pembantu atau utilitas lain atau subsistem
paling sering terjadi pada bahasa scripting
mendorong penggunaan kembali program lain / modul
sering terlihat di skrip CGI web
Perl Script Tidak Aman
Script Aman
kontra serangan dengan memvalidasi masukan
dibandingkan dengan pola yang menolak masukan tidak valid
lihat contoh penambahan skrip:
SQL Injection
serangan injeksi lain secara luas dieksploitasi
ketika input digunakan dalam query SQL ke database
mirip dengan perintah injeksi
SQL meta-karakter keprihatinan
harus memeriksa dan memvalidasi masukan untuk ini
Kode Injeksi
Varian lanjut
masukan termasuk kode yang kemudian dieksekusi
jenis serangan secara luas dieksploitasi
Menyeberangi Serangan Site Scripting
serangan di mana masukan dari satu pengguna output kemudian ke pengguna lain
XSS sering terlihat di scripted aplikasi web
dengan kode script termasuk dalam output ke browser
script didukung, misalnya Javascript, ActiveX
diasumsikan berasal dari aplikasi di situs
XSS refleksi
kode berbahaya ke situs yang disediakan
kemudian ditampilkan ke pengguna lain
XSS Contoh
Buku tamu, wiki, blog dll
di mana komentar termasuk kode script
• misalnya untuk mengumpulkan rincian cookie melihat pengguna
perlu memvalidasi data yang diberikan
termasuk menangani berbagai pengkodean mungkin
Serangan kedua input dan output yang penanganan
Memvalidasi input Sintaks
untuk memastikan input data memenuhi asumsi
• misalnya adalah dicetak, HTML, email, userid dll
dibandingkan dengan apa yang dikenal diterima
tidak diketahui berbahaya
• seperti dapat melewatkan masalah, metode memotong baru
biasanya menggunakan kalimat biasa
• pola karakter menggambarkan masukan yang diijinkan
• Rincian bervariasi antara bahasa
masukan buruk baik ditolak atau diubah
Encodings alternatif
mungkin memiliki beberapa alat encoding teks
• karena bentuk terstruktur data, misalnya HTML
• atau melalui penggunaan beberapa set karakter besar
Unicode digunakan untuk internasionalisasi
• menggunakan 16-bit nilai karakter
• UTF-8 encode sebagai urutan byte 1-4
• memiliki varian berlebihan
- misalnya / 2F adalah, C0 AF, AF 80 E0
- maka jika memblokir nama file mutlak periksa semua!
harus canonicalize masukan sebelum memeriksa
Memvalidasi Numeric ( angka ) Masukan
mungkin memiliki data mewakili nilai-nilai numeric
internal disimpan dalam nilai berukuran tetap
• misalnya 8, 16, 32, bilangan bulat 64-bit atau 32, 64, 96 pelampung
• ditandatangani atau unsigned
harus benar menginterpretasikan bentuk teks
dan kemudian memproses secara konsisten
• telah masalah yang membandingkan menandatangani ke unsigned
• misalnya besar positif unsigned negatif ditandatangani
• dapat digunakan untuk buffer overflow cek
Masukan Fuzzing
Metode pengujian kuat menggunakan berbagai macam input secara acak
• untuk menguji apakah program / fungsi benar menangani input yang abnormal
• sederhana, bebas dari asumsi, murah
• assist dengan keandalan serta keamanan
juga dapat menggunakan template untuk menghasilkan kelas input masalah yang diketahui
• maka bisa kehilangan bug
No comments:
Post a Comment