Postfix Overview - Security


Up one level | Introduction | Goals and features | Global architecture | Queue Management | Security

Introduction

Pada dasarnya, software email memproses informasi dari sumber-sumber  potensial yang tidak dipercaya. Maka dari itu, software email harus ditulis dengan perhatian yang lebih, meskipun ketika ia berjalan dengan hak (privilege) dari user biasa, dan meskipun ia tidak berhubungan langsung dengan suatu network (jaringan).

Postfix merupakan sistem yang rumit. Rilis permulaan Postfix mempunyai sekitar 30.000 baris kode (setelah penghapusan komentar). Dengan sistem yang rumit tersebut, sistem keamanan tidak harus bergantung kepada mekanisme tunggal. Jika iya, sebuah kesalahan sudah cukup untuk mengambil alih keseluruhan sistem email. Maka dari itu, Postfix menggunakan pertahanan multi layer untuk mengontrol kerusakan dari software dan kesalahan yang lainnya.

Least privilege

Kebanyakan program daemon di Postfix dapat dijalankan dengan hak yang rendah (low privilege) tetap pada suatu lingkungan yang dipenjara (chrooted environment). Ini benar, terutama untuk program yang tidak disembunyikan dari suatu network: server SMTP dan client SMTP. Meski menggunakan chroot(2), dan digabungkan dengan hak rendah, tidak ada jaminan terhadap pengambilan terhadap suatu sistem, tapi akan menambah rintangan/hambatan. Dan seperti yang kita tahu, hal itu akan sedikit membantu.

Insulation

Postfix menggunakan proses yang terpisah untuk menyekat berbagai aktifitas tersebut. Dalam kondisi tertentu, tidak ada jalan langsung dari network terhadap program deliveri lokal. Seorang penyusup pertama kali harus mengacaukan berbagai program. Beberapa bagian dari sistem Postfix adalah multi-threaded. Meskipun demikian, semua program yang berinteraksi dengan dunia luar adalah single-threaded. Proses-proses yang terpisah memberikan sistem penyekatan yang lebih baik daripada multiple threads dengan shared address space.

Controlled environment

Tidak ada program deliveri di Postfix yang berjalan dibawah kendali dari user process. Kebalikannya, kebanyakan program-program dijalankan dibawah kendali dari resident daemon master yang berjalan dengan environment terkontrol, tanpa ada hubungan parent-child dengan user processes. Pendekatan ini mengurangi eksploit yang melibatkan signals, open files, environment variables, dan atribut proses yang dilewatkan oleh sistem UNIX dari kemungkinan malicious parent ke child.

Set-uid

Tidak ada program di Postfix yang ber-set-uid. Pengenalan terhadap konsep merupakan kesalahan besar yang pernah dibuat dalam sejarah UNIX. Set-uid (dan saudaranya yang lebih lemah, set-gid) menyebabkan masalah yang lebih banyak. Setiap kali fitur baru ditambahkan ke sistem UNIX, set-uid merupakan penyebab suatu masalah (sedikit contoh):  shared libraries, sistem file /proc, dukungan multi bahasa. Set-uid membuatnya menjadi tidak mungkin untuk mengenalkan beberapa fitur sehingga membuat pengganti UNIX seperti plan9 menjadi begitu menarik, sebagai contoh adalah per-process file system name spaces.

Pada mulanya, direktori queue maildrop adalah world-writable, sehingga proses lokal dapat memasukkan email tanpa bantuan dari perintah dengan set-uid atau set-gid atau dari proses daemon email. Maildrop direktori tidak digunakan untuk email yang datang melalui network, dan file-file queuenya tidak bisa dibaca oleh user yang tidak berhak.

Direktori yang bisa ditulis membuat beberapa gangguan: suatu user lokal dapat membuat hard links ke file maildrop ouser lain sehingga tidak bisa dikirimkan dan/atau diteruskan beberapa kali; suatu user lokal dapat memenuhi direktori maildrop dengan sampah dan mencoba membuat sistem email crash; dan user lokal dapat membuat file hard link ke file milik user lain kedalam maildrop direktori dan mencoba mengirimkannya sebagai suatu email. Meskipun demikian, file queue di Postfix mempunyai bentuk yang spesifik; kurang dari satu per 10^12 file bukan Postfix yang akan dikenali sebagai file queue Postfix yang benar.

Karena kemungkinan kesalahan perilaku tersebut, Postfix telah membuang direktori maildrop yang world-writable, dan menggunakan program pembantu set-gid postdrop untuk memasukkan email dari lokal.

Trust

Seperti yang dijelaskan pada bab lain, program-program di Postfix tidak mempercayai isi dari file queue atau Postfix internal IPC messages. File-file queue tidak mempunya on-disk record untuk deliveri ke tujuan-tujuan yang sensitif seperti file atau perintah. Kebalikannya, program-program seperti agen deliveri local mencoba membuat keputusan yang peka terhadapat keamanan berdasar pada informasi pertama.

Tentu saja, program-program postfix juga tidak mempercayai data yang diterima dari network. Dalam beberapa hal tertentu, Postfix menyaring data yang diberikan oleh pengirim sebelum mengekspornya melalui variabel environment. Jika terdapat suatu pelajaran yang didapat dari bencana kemanan suatu Website: jangan mengijinkan data dari network dekat suatu shell. Penyaringan adalah hal terbaik yang bisa kita lakukan.

Large inputs

Other defenses


Up one level | Introduction | Goals and features | Global architecture | Queue Management | Security