Horde Day

 
Kali ni aku nak cerita pasal Webmel Horde. Di ofis guna webmel ni sejak 2008. Walaupun skang ni ada zimbra dan kira the most popular, tapi kami still guna Horde sebab dah biasa dan still one of the best Webmel Ever...

Masalah paparan emel dalam horde by default takkan keluar terus emel yang dihantar dalam format HTML. Kalau format plain text ia akan terus paparkan. Ini disebabkan oleh banyak vulnerable dari emel berunsur HTML ni. Boleh trigger XSS attack menerusinya.

Kaedah untuk enable paparan HTML dalam emel Horde :

1) Buka fail ... imp/config/mime_drivers.php
2) Tukar dari berikut :
$mime_drivers['imp']['html'] = array(
    'inline' => false
kepada
$mime_drivers['imp']['html'] = array(
    'inline' => true
3) Save dan lihat semula emel anda yang dihantar menggunakan HTML. Ianya akan terus dipaparkan.

Menapis mesej HTML dipaparkan dalam emel :

1) Menggunakan fungsi tidy PHP extension. Fungsinya adalah untuk menapis paparan output bagi HTML sebelum dipaparkan kepada pengguna dan ianya juga digunakan untuk membersihkan dan memperbaiki mesej yang dihantar menggunakan HTML mesej menggunakan mode HTML compose.
2) Pastikan PECL diinstall dalam server untuk menggunakannya

3) Buka fail .../imp/config/mime_drivers.php
4) Ubah dari :
    'tidy' => false,
kepada
    'tidy' => true,

Semak version dan configuration Horde
http://my.domain.com/horde/test.php
Kaedah konfigurasi selamat untuk Horde :

1) Temporary Files :
Horde banyak menggunakan temporary files bagi memastikan akses kepada Horde pantas. Namun kita kena pastikan semua fail tersebut adalah selamat.

Jangan sesekali menetapkan folder temporary files tersebut writable kepada pengguna web server dan tak writable kepada lain-lain pengguna. Ini kerana ianya akan mendedahkan maklumat-maklumat sensitif dalam server. Seeloknya tetapkan sebagai unreadable kepada pengguna lain. Atau dengan kata lain, tetapkan sebagai readable dan writable hanya kepada pengguna web server sahaja.

2) PHP Session
Untuk memastikan tahap keselamatan Horde, PHP Session cookies perlulah di enable dalam PHP setting session.use_cookies. Juga pastikan cookie path dan cookie domain ditetapkan dalam konfigurasi Horde. Pastikan session cookie ditetapkan dalam konfigurasi Horde dan ianya dah jadi default pun sekarang ni.


Jika guna HTTPS, maka ini akan memaksa cookies di hantar menerusi secure connection yang dapat halang sebarang sidejacking.

Horde yang besar perlu tetapkan maklumat session.entropy_file dan session.entropy_length yang bersesuaian.

Horde akan enkrip maklumat pengguna sebelum disimpan dalam session. Namun ianya akan dikuatkan lagi sekiranya menggunakan PHP extension 'mcrypt' yang membenarkan enkripsi yang lebih kuat.


3) Default Database Password
Pada asasnya apabila install Horde, ia akan guna default user dan password untuk akses kepada horde database. Menggunakannya untuk production mengundang serangan penceroboh kerana penyerang boleh teka password default dengan mudah.

Pastikan password ditukarkan kepada yang lebih selamat

4) Prevent Configuration File Reading and Writing

Fail konfigurasi mengandungi maklumat yang sensitif seperti kata laluan database dan perlu dilindungi daripada read atau write oleh local system user atau remote web user.

Bagi pengguna Unix/Linux, gunakan penetapan permission bagi folder berkenaan berdasarkan user web server. Berikut adalah contoh konfigurasi penetapan permission menggunakan user apache :

$ chown -R apache /home/httpd/html/horde/config
$ chown -R apache /home/httpd/html/horde/*/config
$ chmod -R go-rwx /home/httpd/html/horde/config
$ chmod -R go-rwx /home/httpd/html/horde/*/config

Untuk penetapan permission yang lebih kukuh, tetapkan terus capaian tree Horde HANYA kepada web server user dan root sahaja :

$ chown -R apache /home/httpd/html/horde
$ chmod -R go-rwx  /home/httpd/html/horde
$ chmod -R a-w   /home/httpd/html/horde/

Nota : baris akhir menetapkan semua fail unwritable dari semua pengguna kecuali root sahaja boleh ubah. Ianya akan membuatkan site selamat tetapi agak rumit untuk selenggara. Ianya akan menyebabkan kita tak boleh ubah melalui Horde Web Administrative dan hanya boleh dibuah secara manual terus kepada fail menggunakan akses root.

Konfigurasi atas ini masih lagi belum selamat jika pengguna lain di server yang sama menjalankan script arahan menggunakan apache user. Bagi menghindarkannya, kita perlu tetapkan akaun yang berbeza mengikut setiap pengguna dan run menggunakan module apache suexec. Anda perlu sentiasa memantau modul cgi, mod_php, mod_perl, mod_python dan lain-lain lagi.

5. Restricting test.php files

Fail test.php memaparkan banyak maklumat yang penting dan rahsia tentang sistem horde anda dan amat beruntung apabila hackers menjumpainya. Ianya digunakan oleh developer untuk kenalpasti sama ada modul dan fungsi dalam horde telah berfungsi dengan baik atau tidak. Setelah ianya berfungsi dengan baik, maka disable akses kepada fail tersebut. Untuk melaksanakannya sila laksanakan command berikut :

$ chmod a-rwx /home/httpd/html/horde/test.php
$ chmod a-rwx /home/httpd/html/horde/*/test.php

6. Preventing Apache from serving configuration and source files

Fail konfigurasi Horde mengandungi pelbagai data sulit ( kata laluan database). Direktori lain juga mengandungi PHP Source code yang tidak sepatutnya dipaparkan kepada pengguna biasa. Horde group telah menyediakan fail .htaccess dalam pelbagai direktori untuk membantu menghalang akses kepada fail tersebut. Walaubagaimanapun, ianya bergantung kepada pemilik server sendiri bagi yang hosting di luar kerana ianya terdapat isu dari segi prestasi server dan juga sesetengahnya tidak membenarkan penggunaannya kerana banyak isu keselamatan.

Site Apache juga boleh menghalang web server dari membenarkan akses kepada fail-fail tersebut dengan memasukkan section berikut ke dalam httpd.conf mengikut contoh berikut :


Ulangi kaedah tersebut pada setiap Horde application. Sebagai contoh untuk IMP seperti berikut :


7. Setup scripts

Terdapat pelbagai skrip yang digunakan untuk setup dan configure Horde. Sekiranya web server dibenarkan akses oleh pelbagai pengguna lain, anda perlu pastikan kawalan dibuat pada fail tersebut. Dalam Unix, kita boleh tetapkan akses kepada fail tersebut hanya kepada pengguna root sahaja dengan comman berikut :

$ chown -R root /home/httpd/html/horde/scripts
$ chown -R root /home/httpd/html/horde/*/scripts
$ chmod -R go-rwx /home/httpd/html/horde/scripts
$ chmod -R go-rwx /home/httpd/html/horde/*/scripts

8. Using a chroot web server setup

Pengguna Unix boleh menggunakan chroot jail untuk mengekang sebarang perubahan kepada fail selain dari folder berkenaan. Bagi tujuan konfigurasinya boleh rujuk :

http://www.cyberciti.biz/tips/chroot-apache-under-rhel-fedora-centos-linux.html

9. Hiding PHP info from the user

Anda perlu pastikan konfigurasi mengikut PHP variable berikut di dalam php.ini bagi menghalang kebocoran maklumat kepada pengguna biasa :

expose_php = Off
display_errors = Off
log_errors = On
register_globals = Off

Anda perlu tetapkan error loggin (menggunakan PHP error_log variable) untuk log kepada fail, syslog, atau destinasi log lain.

10. Using a secure web server

Horde amat bergantung kepada transaksi maklumat sensitif ( kata laluan dan maklumat session) antara web server dan web client. Penggunaan SSL web server amat membantu untuk melindungi maklumat tersebut apabila melalui rangkaian.


11 Using a secure POP3/IMAP server

Sekiranya anda menggunakan POP3/IMAP server dengan Horde, maka Horde akan menghantar maklumat login diantara web server dan mail server.

Sekiranya web server dan IMAP Server dalam satu host yang sama, anda boleh tingkatkan kawalan keselamatan dengan menetapkan semua aliran trafik perlulah hanya melalui loopback atau localhost interface sahaja agar ianya tidak akan terdedah ke dalam rangkaian.

Dalam sesetengah kes, yang mana ianya tidak boleh dilakukan maka gunakan secure mail connection seperti IMAP-SSL atau POP3-SSL untuk memastikan kata laluan seIn cases where that is not possible, we recommend using a secure mail connection such as IMAP-SSL or POP3-SSL to ensure that passwords remain safe.

12. LDAP Security

Kawalan keselamatan LDAP sama seperti dibuat pada POP3/IMAP. Anda perlu pastikan password ldap atau maklumat penting berkenaan LDAP Database tidak didedahkan.

13 Database socket security

Sekiranya database anda (cth:  MySQL atau PostgreSQL) adalah pasa server yang sama dengan web server anda, seeloknya gunakan unix sockets berbanding tcp connections untuk membantu meningkatkan kawalan keselamatan server (dan juga pertingkat prestasi Horde). Sekiranya ia tidak support unix sockets, anda boleh capai kawalan keselamatan lebih baik dengan menetapkan tcp untuk support loopback atau capaian menggunakan localhost sahaja.

Sekiranya database menetapkan socket fail (cth : mysql.sock) di dalam direktori seperti /tmp atau /var/tmp, anda perlu tetapkan permission dengan baik agar local user (jika ada) tidak boleh delete fail tersebut. Anda perlu pastikan fail socket tersebut tidak boleh writable oleh pengguna lain atau pengguna lain boleh delete fail tersebut.

Anda boleh juga pindahkan socket fail tersebut kepada direktori lain seperti /var/run atau top level direktori pada sistem database anda (cth : /var/lib/mysql atau /var/lib/pgsql).

14 Sendmail or SMTP considerations

Dalam sesetengah keadaan, anda boleh tambahkan kawalan keselamatan dengan menghantar emel menggunakan program local command line sendmail pada web server anda berbanding menggunakan SMTP. Bagaimanapun kadang2 ada sebabnya perlu menggunakan SMTP supaya dapat menapis spam atau virus sebelum dihantar kepada penerima emel. Ini kerana local sendmail akan skip semua tu.

Nota ni aku rujuk dari sini dan diterjemahkan dengan bahasa mudah untuk orang kita :
http://www.horde.org/horde/docs/?f=SECURITY.htm

~ Be a Creator Not a User ~

Ulasan