Selasa, 24 November 2009

Web Security Appliance With Apache and mod_security

Karena semakin banyak serangan yang sedang dilaksanakan atas lapisan HTTP ada yang berkembang perlu mendorong amplop dan membawa keamanan Web pada tingkatan baru. Sebagian besar alat-alat yang ada bekerja pada TCP / IP tingkat, gagal untuk menggunakan spesifik dari protokol HTTP dalam operasi mereka. Kebutuhan untuk meningkatkan pengamanan telah menyebabkan pembentukan gerbang aplikasi, alat-alat yang pada dasarnya reverse proxy dengan tambahan kemampuan analisis protokol. Banyak solusi komersial yang tersedia. Artikel ini akan menunjukkan bagaimana Anda dapat membangun aplikasi Anda sendiri gateway dengan sedikit usaha, menggunakan komponen open source yang tersedia secara luas.
Kasus untuk reverse proxy
Tugas kita adalah untuk melindungi satu atau lebih Web server yang berada pada jaringan internal, memberikan layanan kepada klien di luar. Klien internal, seperti karyawan juga dianggap berada di luar klien untuk tujuan artikel ini. Kami sedang bekerja di bawah asumsi bahwa Anda memiliki minimal dua atau lebih Web server, database server, dan mungkin server internal lainnya. Semakin server ada, yang lebih berguna sebaliknya menjadi konsep proxy.

Sebuah proxy, menurut definisi, adalah sebuah alat yang berdiri di antara dua entitas yang berpartisipasi dalam percakapan. Apa yang biasanya disebut proxy dalam kehidupan sehari-hari lebih baik ke depan digambarkan sebagai proxy: sebuah perangkat yang berdiri di antara klien dan server lainnya. Sebuah reverse proxy tidak justru sebaliknya: ia berdiri di antara server dan semua klien. Dalam arti yang lebih luas, satu reverse proxy akan digunakan untuk semua server Web internal.

Manfaat utama dari menggunakan reverse proxy adalah salah satu dari sentralisasi. Setelah kita mendapatkan semua lalu lintas untuk pergi melalui satu titik kita dapat menerapkan alat-alat lain dari gudang senjata kita untuk kepentingan kita. Kami akan segera mempertimbangkan sini keuntungan dan kerugian dari menggunakan reverse proxy:

Keuntungan:

    
Dengan satu titik akses yang Anda dapat menerapkan kontrol akses untuk semua web server dengan sedikit usaha. Anda mungkin ingin menerapkan kontrol akses berdasarkan parameter infrastruktur seperti alamat IP di sini. Sebagai manfaat tambahan, Anda juga akan memiliki permintaan terpusat logging di tempat kegiatan membuat pemantauan lebih sederhana.
    
* Tingkat HTTP firewall. Bahkan tanpa usaha lebih lanjut proxy akan membantu karena biasanya tidak lulus permintaan awal ke Web server, melainkan menciptakan permintaan baru berdasarkan itu. Tapi, karena anda akan lihat segera, application gateway memiliki perangkat lunak di sini akan memungkinkan Anda untuk melakukan serangkaian pemeriksaan yang lebih luas, memonitor lalu lintas dan bereaksi terhadap serangan secara real time.
    
* Peningkatan kinerja. Karena proxy sebaliknya diinstal pada mesin yang terpisah ini berarti Anda memiliki sumber daya CPU digunakan. Caching dapat diterapkan untuk kedua statis dan konten dinamis. SSL lalu lintas dapat dihentikan di proxy, membebaskan server Web yang sebenarnya untuk berfokus pada menanggapi permintaan yang masuk. Akhirnya, keluar transparan lalu lintas dapat ditekan, menurunkan total kebutuhan bandwith.
    
* Jaringan isolasi. Dalam hal ini proxy sebaliknya memperkenalkan lapisan firewall lain. Daripada memiliki beberapa Web server dan sistem operasi terbuka secara langsung, Anda menyembunyikan mereka semua di belakang satu proxy.
    
* Topologi jaringan tersembunyi dari dunia luar. Ini bagus untuk setidaknya dua alasan. Pertama, memberikan sedikit informasi kepada para penyerang. Kedua, decouples pelaksanaan dari antarmuka jaringan. Perubahan dapat dibuat ke jaringan seperti yang diperlukan tanpa masyarakat menyadari dari mereka.

Kekurangan:

    
* Peningkatan kompleksitas. Ini adalah bagaimana Anda membayar untuk peningkatan keamanan, dengan meningkatkan kompleksitas jaringan.
    
* Titik tunggal kegagalan. Untuk misi operasi kritis, memiliki titik tunggal kegagalan tidak dapat diterima. Masalah ini bisa diselesaikan dengan memiliki dua reverse proxy di sebuah cluster, tetapi efek yang bahkan lebih kompleksitas ditambahkan ke jaringan.

Memperkenalkan mod_security
ModSecurity adalah modul Apache gangguan yang menambahkan fitur deteksi dan pencegahan ke Web server. Pada prinsipnya itu adalah serupa dengan IDS yang akan Anda gunakan untuk menganalisis lalu lintas jaringan Anda, kecuali bahwa ia bekerja pada tingkat HTTP dan memahami benar-benar baik. Karena ini memungkinkan Anda untuk melakukan hal-hal yang normal dari sudut pandang HTTP tetapi sulit untuk dilakukan dari IDS klasik. Perbedaan ini akan menjadi jelas kemudian, ketika kita mengkaji beberapa contoh dari apa yang dapat dilakukan mod_security.

Selain deteksi, mod_security juga mendukung pencegahan serangan. Karena berdiri di antara klien dan server, jika menemukan bahwa permintaan mengandung payload jahat itu dapat menolak permintaan, melakukan salah satu dari sejumlah tindakan built-in.

Karena ini adalah modul seperti yang lain, Anda dapat menggunakan mod_security sebagai bagian dari instalasi Apache. Biaya overhead yang berasal dari pengolahan tambahan dapat diabaikan jika dikonfigurasi dengan benar. Namun, jika Anda mempertimbangkan bahwa insiden ini jauh lebih mahal dan yang mod_security juga dapat melindungi Anda dari serangan di atas kepala menjadi tidak signifikan.

Jadi, bagaimana mod_security membantu? Kita tidak bisa masuk ke rincian lengkap pada semua kemampuan, tapi di sini adalah gambaran singkat tentang apa yang terjadi pada setiap permintaan (untuk rincian lebih lanjut pergi ke mod_security Website dan men-download referensi manual):

   
1. Parse permintaan. Ini sebagian besar langsung, kecuali ketika Anda harus berurusan dengan permintaan POST di mana mendapatkan tubuh permintaan bisa sulit.
   
2. Lakukan kanonisasi dan anti-penghindaran tindakan. Serangkaian transformasi dilakukan untuk mengubah input menjadi bentuk yang sesuai untuk analisis. Langkah ini akan berperang melawan berbagai teknik mengelak penyerang dapat menggunakan: null byte serangan, direktori referensi diri, beberapa slash karakter, menggunakan karakter garis miring terbalik pada Windows, dll
   
3. Lakukan khusus built-in cek. Langkah ini berisi lebih rumit validasi URL seperti validasi dan encoding penyandian Unicode validasi. Anda juga dapat memilih untuk hanya mengijinkan nilai-nilai byte tertentu dalam permintaan untuk melawan shellcode.
   
4. Execute masukan aturan. Ini adalah aturan-aturan adat di mana Anda datang ke dalam tindakan. Mereka bekerja dengan memungkinkan Anda untuk menganalisa setiap aspek dari permintaan menggunakan ekspresi reguler. Selain ini, beberapa peraturan dapat dikombinasikan untuk analisis yang lebih kompleks.

Permintaan ini kemudian diperbolehkan untuk mencapai penangan di mana dijalankan. Setelah permintaan:

   
1. Execute aturan output. Output aturan yang diterapkan ke respon tubuh. Mereka sangat berguna untuk mencegah kebocoran informasi.
   
2. Log permintaan. Log permintaan lengkap terdiri dari input dan output header, dan permintaan tubuh. Untuk mencegah penebangan hutan yang berlebihan, mod_security dapat dikonfigurasi untuk hanya log apa yang relevan, seperti permintaan yang telah memicu tanggapan dari mod_security.

Instalasi dan konfigurasi
Instalasi mengejutkan sederhana. Kami akan menganggap bahwa server yang Anda ingin melindungi menggunakan alamat 192.168.254.10 swasta, dan bahwa Anda telah mengkonfigurasi nama domain publik (www.modsecurity.org) agar menunjuk ke server proxy reverse.

Pada reverse proxy anda perlu menginstal Apache 2 web server, pastikan Anda kompilasi di mod_proxy, mod_proxy_http, dan mod_security. Kami tidak akan menghabiskan waktu pada langkah ini dengan asumsi Anda sudah akrab dengannya. Jika tidak, kita lihat di bagian link terkait di mana Anda akan menemukan link ke beberapa artikel yang sangat baik yang meliputi proses instalasi Apache. Ini juga akan ide yang baik untuk menambahkan modul mod_rewrite untuk campuran karena dapat bekerja sama dalam peningkatan signifikan mod_proxy apa yang dapat Anda lakukan.

Walaupun ada server Web dapat menjadi sebuah reverse proxy hanya dengan menambahkan modul-modul yang saya sebutkan di atas tidak dianjurkan untuk mencampur dua peran bersama-sama. Proxy sebaliknya akan menjadi satu-satunya server terbuka untuk umum dan Anda akan ingin meminimalkan jumlah kode yang dikandungnya, untuk meminimalkan risiko kerentanan dieksploitasi.

Apache 2.x adalah pilihan yang lebih baik untuk reverse proxy karena mengandung penyaringan baru API, memungkinkan modul untuk melihat dan berinteraksi dengan tubuh, seperti yang permintaan masuk dan dengan tanggapan seperti keluar. Hal ini penting untuk suatu aplikasi gateway karena harus memeriksa informasi yang melewati sebelum mencapai penerima.

Setelah Anda memiliki proxy dipasang di sini adalah bagaimana Anda akan mengkonfigurasi virtual host:



# Hanya telanjang arahan minimum
ServerName www.modsecurity.org
DocumentRoot / rproxy / mana

# Sementara baris berikut ini tidak benar-benar diperlukan, ada di sini untuk menekankan
# Fakta bahwa proxy sebaliknya tidak menggunakan direktif ini. Bahkan, berbalik
# Itu Pada tanpa kontrol akses yang tepat menciptakan proxy terbuka!
ProxyRequests Off
ProxyPass / http://192.168.254.10/
ProxyPassReverse / http://192.168.254.10/

# Ya, kita ingin menggunakan mod_security
SecFilterEngine On

# Scan tubuh permintaan
SecFilterScanPOST On

# Scan tubuh respon
SecFilterScanOutput On

# Periksa URL encoding
SecFilterCheckURLEncoding On

# Pengaturan ini harus ditetapkan ke Aktif hanya jika situs Web
# Menggunakan Unicode encoding. Kalau tidak, dapat mengganggu
# Situs normal operasi.
SecFilterCheckUnicodeEncoding Off

# Hanya mengizinkan nilai-nilai byte tertentu untuk menjadi bagian dari permintaan.
# Ini sangat santai, sebagian besar aplikasi di mana hanya inggris
# Digunakan akan dengan senang hati bekerja dengan kisaran 32-126.
SecFilterForceByteRange 1 255

# Audit log log permintaan lengkap. Dikonfigurasi sebagai berikut ini
# Hanya log request tidak sah untuk analisa lebih lanjut.
SecAuditEngine RelevantOnly
SecAuditLog log / audit_log
# Anda mungkin perlu ini nanti tetapi kami tidak log apa-apa
# Di sini untuk saat ini. Debug penebangan yang berlebihan dapat memperlambat
# Server.
SecFilterDebugLevel 0
SecFilterDebugLog log / modsec_debug_log

# Secara default, menolak permintaan dengan status 500
SecFilterDefaultAction "deny, log, status: 500"

# Taruh aturan mod_security Anda di sini
# ...



Contoh-contoh praktis
Dalam bagian ini saya akan menunjukkan apa yang khas mod_security seperti ketentuan. Anda harus selalu memulai dengan aturan-aturan yang memiliki cakupan yang luas, menyebabkan isu-isu yang lebih spesifik. Semua aturan mod_security (dan opsi konfigurasi) dapat diterapkan pada per-virtual host atau per-direktori dasar sehingga Anda dapat memiliki sepenuhnya daerah dengan konfigurasi keamanan yang berbeda.
Common mendeteksi serangan

Aturan-aturan ini akan menargetkan serangan Common aplikasi Web:

# Command eksekusi serangan
SecFilter / etc / password
SecFilter / bin / ls
# Directory traversal serangan
SecFilter "\. \. /"
# XSS serangan
SecFilter "<(.| \ n) +> "
SecFilter "<[[: space:]] * script "

# Serangan injeksi SQL
SecFilter "delete [[: space:]] + dari"
SecFilter "insert [[: space:]] + menjadi"
SecFilter "pilih. + Dari"

# MS SQL serangan injeksi SQL spesifik
SecFilter xp_enumdsn
SecFilter xp_filelist
SecFilter xp_availablemedia
SecFilter xp_cmdshell
SecFilter xp_regread
SecFilter xp_regwrite
SecFilter xp_regdeletekey

Melindungi script rentan
Beberapa aplikasi PHP yang rentan ketika sebuah opsi konfigurasi register_globals dihidupkan, memungkinkan penyerang untuk menetapkan variabel internal untuk nilai pilihan mereka. Ini biasanya menyebabkan penyerang mengeksekusi beberapa kode pada server. Berikut adalah contoh dari dunia nyata (Cafelog b2, http://www.securityfocus.com/bid/7786):

SecFilterSelective ARG_b2inc "!^$"
Melindungi dari serangan XSS melalui sesi PHP cookie
PHP versi sebelum 4.3.2 rentan terhadap serangan XSS dilaksanakan melalui pengidentifikasi sesi (http://www.securityfocus.com/bid/7761). Jika Anda tidak dapat meng-upgrade versi PHP anda ke versi terbaru Anda masih dapat melindungi diri Anda sendiri:

SecFilterSelective ARG_PHPSESSID "! ^ [0-9a-z] * $"
SecFilterSelective COOKIE_PHPSESSID "! ^ [0-9a-z] * $"

Berhenti FormMail dari yang digunakan untuk mengirim spam
Beberapa versi dari FormMail dapat digunakan untuk mengirim email ke alamat email yang sewenang-wenang. Aturan berikut ini menunjukkan bagaimana Anda dapat memiliki penyaring diterapkan hanya pada lokasi tertentu, dalam hal ini hanya FormMail script. Permohonan akan ditolak jika email yang ditujukan ke alamat apapun kecuali yang berakhiran "@ modsecurity.org":


    
SecFilterSelective "ARG_recipient" "! @ Modsecurity \. Org $"


Batasi administratif login ke alamat IP
Sini adalah nice one. Aku punya aplikasi ini di mana administrator log masuk melalui login yang sama dalam panel sebagai pengguna lain, tapi aku masih ingin membatasi administrasi login ke alamat IP tertentu. Jadi aku menggunakan dua aturan dirantai. Aturan yang kedua akan berlaku hanya jika aturan pertama kesesuaiannya; dalam hal ini - jika masuk username "admin".

ARG_username admin SecFilterSelective rantai
SecFilterSelective REMOTE_ADDR "! ^ ADMIN_IP_ADDRESS_HERE $"

Mencegah kebocoran informasi
Dalam semua versi PHP, jika terjadi kesalahan fatal script akan dihentikan segera (standard error handling rutin tidak akan dipanggil). Kebocoran informasi melalui masalah-masalah ini dapat dicegah dengan memindai output dan mencegahnya dari mencapai pengguna jika berisi pesan kesalahan.

SecFilterSelective OUTPUT "Fatal error:"

Deteksi intrusi
Filter output juga dapat digunakan untuk mendeteksi intrusi sukses. Aturan-aturan ini akan memonitor output dan mendeteksi kata kunci yang khas yang dihasilkan dari eksekusi perintah pada server.

SecFilterSelective OUTPUT "Volume Serial Number"

SecFilterSelective OUTPUT "Command completed"

SecFilterSelective OUTPUT "Bad command or filename"

SecFilterSelective OUTPUT "file (s) disalin"

SecFilterSelective OUTPUT "Index of / cgi-bin /"
 
SecFilterSelective OUTPUT ".* uid \ = \ ("

Lain
Apa aturan lainnya mungkin berguna bagi Anda tergantung pada jenis aplikasi dan web server anda memiliki reverse di belakang proxy. Di mod_security Website Anda dapat menemukan sejumlah besar peraturan secara otomatis dikonversi dari aturan Snort. Download daftar dan hanya mengeluarkan aturan-aturan yang tidak berlaku.
Kesimpulan
Artikel ini baru saja menggaruk permukaan masalah yang kompleks. Saya menyarankan agar Anda menelusuri melalui bagian link terkait, karena berisi daftar Situs-situs Web, peralatan, dan kertas yang dapat Anda gunakan untuk membiasakan diri dengan aspek-aspek lain, kami tidak menutupi di sini, seperti reverse proxy load balancing dan clustering atau sebaliknya transparan konfigurasi proxy. Pergi ke arah lain, men-download manual dan mod_security referensi untuk mengenal fitur-fiturnya. Ini juga berisi fitur lain tidak disebutkan di sini. Akhirnya, hubungi saya untuk meminta fitur mod_security baru jika Anda memiliki kebutuhan yang tidak tercakup oleh apa yang sudah ada.

Tidak ada komentar:

Posting Komentar