Strategi Mitigasi #4 – Batasi hak istimewa administratif

Mitigasi

Batasi hak istimewa administratif pada sistem operasi dan aplikasi berdasarkan pada tugas pengguna. Pengguna seperti ini harus menggunakan akun lain yang terpisah dan tidak memiliki hak istimewa, juga sebaiknya stasiun kerja yang terpisah, untuk aktivitas-aktivitas yang bersifat non-administratif atau tidak berisiko seperti membaca surat elektronik, menjelajah web dan mengunduh berkas dari layanan Internet seperti pesan instan.

Pengguna seperti ini harus melakukan aktivitas administratif menggunakan stasiun kerja yang mengimplementasikan setidaknya 4 strategi mitigasi utama.

Dasar Pemikiran

Konsekuensi bahaya akan berkurang jika perangkat jahat berjalan sebagai pengguna dengan hak istimewa yang rendah daripada pengguna dengan hak istimewa administratif.

Panduan Implementasi

Strategi mitigasi ini diterapkan pada:

  • pengguna yang memiliki hak istimewa administratif sistem domain atau lokal, dan hak istimewa administratif yang setara dalam sistem operasi non-Windows.
  • pengguna yang memiliki peningkatan hak istimewa sistem operasi2 3
  • pengguna yang memiliki hak akses istimewa untuk aplikasi-aplikasi seperti basis data4
  • akun administratif yang mengizinkan vendor untuk melakukan akses jarak jauh.

Informasi Lebih Lanjut

Panduan rinci dari 4 strategi mitigasi utama tersedia di:

http://www.asd.gov.au/infosec/top35mitigationstrategies.htm

Kontrol ISM: 0405, 0434, 0445‐0448, 0985, 0709, 1175, 0582‐0583, 0987, 1380‐1383, 1385‐1388.

 

Strategi Mitigasi #3 – Patch kerentanan sistem operasi

Mitigasi

Lakukan patch kerentanan sistem operasi. Lakukan Patch atau mitigasi sistem yang terkena kerentanan “risiko ekstrem” dalam waktu dua hari.

Gunakan sistem operasi versi terbaru yang sesuai dengan kebutuhan bisnis organisasi karena sistem operasi versi terbaru pada umumnya dilengkapi dengan teknologi keamanan tambahan termasuk kemampuan anti-eksploitasi.

Dasar Pemikiran

Kerentanan “risiko ekstrem” dalam perangkat lunak yang digunakan oleh suatu organisasi akan memungkinkan tereksekusinya kode yang tidak berwenang oleh musuh dalam dunia maya menggunakan Internet, yang dapat mengakibatkan konsekuensi-konsekuensi yang signifikan untuk organisasi. Tingkatan risiko dapat dipengaruhi oleh apakah kode eksploitasi untuk suatu kerentanan tersedia secara komersial atau secara publik, misalnya dalam kakas sumber terbuka seperti Metasploit Framework atau dalam kakas eksploitasi kejahatan dunia maya.

Panduan Implementasi

Mengacu pada panduan implementasi untuk strategi mitigasi #2 ‘Patch aplikasi’.

Terapkan Patch perangkat tegar untuk perangkat-perangkat jaringan seperti router dan switch, terutama perangkat-perangkat yang dapat diakses Internet.

Hindari penggunaan Microsoft Windows XP dan versi lama dari Microsoft Windows.

Gunakanlah Microsoft Windows versi 64-bit daripada versi 32-bit karena versi 64-bit dilengkapi dengan teknologi keamanan tambahan.

Informasi Lebih Lanjut

Panduan rinci dari strategi mitigasi Top 4 tersedia di:

http://www.asd.gov.au/infosec/top35mitigationstrategies.htm

Informasi lebih lanjut mengenai teknologi keamanan tambahan pada Microsoft Windows versi 64-bit tersedia di:

http://support.microsoft.com/kb/946765

Kontrol ISM: 0790, 0297, 0298, 0300, 0303, 0304, 0940, 0941, 1143, 1144, 1244, 1298, 1348, 1365‐1366.

 

Strategi Mitigasi #2 – Patch aplikasi

Mitigasi

Lakukan patch aplikasi, terutama Java, PDF viewer, Flash Player, Microsoft Office, peramban web, dan plugin peramban web termasuk ActiveX. Juga lakukan patch aplikasi seperti basis data yang menyimpan informasi sensitif, juga perangkat lunak peladen web yang dapat diakses lewat Internet. Lakukan patch atau mitigasi sistem yang terkena kerentanan “risiko ekstrem” dalam waktu dua hari.

Gunakan versi terbaru dari aplikasi karena aplikasi versi terbaru pada umumnya dilengkapi dengan teknologi keamanan tambahan seperti sandboxing dan kemampuan anti-eksploitasi lainnya. Untuk beberapa perangkat lunak vendor, pembaruan menjadi versi terbaru adalah satu-satunya cara untuk melakukan patch kerentanan.

Dasar Pemikiran

Kerentanan “risiko ekstrem” dalam perangkat lunak yang digunakan oleh suatu organisasi akan memungkinkan tereksekusinya kode yang tidak berwenang oleh musuh siber melalui Internet, yang dapat mengakibatkan konsekuensi-konsekuensi yang signifikan untuk organisasi. Tingkatan risiko dapat dipengaruhi oleh apakah kode eksploitasi untuk suatu kerentanan tersedia secara komersial atau secara publik, misalnya dalam kakas sumber terbuka seperti Metasploit Framework atau dalam kakas eksploitasi kejahatan dunia maya.

Panduan Implementasi

Pendekatan patching

Ada beberapa macam pendekatan untuk menerapkan patch pada aplikasi dan sistem operasi yang berjalan pada stasiun kerja, berdasarkan pada toleransi risiko organisasi serta seberapa banyak aplikasi yang merupakan peninggalan, yang tidak didukung, yang dikembangkan oleh internal organisasi atau yang perancangannya buruk.

  • Beberapa organisasi menggunakan pendekatan yang seimbang yaitu menunggu beberapa jam setelah sebuah patch dirilis sehingga memungkinkan vendor untuk membatalkan patch jika ada laporan bahwa fungsionalitas bisnis terhenti. Organisasi kemudian menerapkan patch pada beberapa stasiun kerja yang merupakan bagian dari administrator sistem atau pengguna dengan keterampilan teknis yang serupa. Jika tidak ada fungsi yang terganggu yang teridentifikasi dalam kurun waktu sehari, organisasi kemudian menerapkan patch pada sebagian kecil stasiun kerja milik pengguna dari setiap bagian bisnis, terutama pada pengguna yang merupakan Target Utama. Jika tidak ada komplain terhentinya fungsionalitas dalam kurun waktu sehari, patch kemudian diterapkan pada semua stasiun kerja sisanya. Pendekatan ini dapat meminimalkan terpaparnya kerentanan organisasi juga meminimalkan biaya pengujian patch, dengan risiko pembatalan patch jika fungsionalitas bisnis terhenti.
  • Beberapa organisasi menghabiskan banyak waktu untuk pengujian patch stasiun kerja sebelum dilakukan penerapan. Walaupun hal ini meminimalkan kemungkinan jika patch yang diterapkan akan mengganggu fungsionalitas bisnis, pengujian semacam ini membutuhkan biaya yang besar dan membiarkannya rentan dalam beberapa minggu atau bulan, serta konsekuensi yang mungkin terjadi memiliki biaya yang lebih besar dibandingkan dengan menghapus sebuah patch yang mengganggu sebagian kecil dari stasiun kerja.
  • Pendekatan yang berbeda yang melibatkan pengujian yang lebih menyeluruh biasanya digunakan untuk memasang patch pada peladen, serta untuk memasang paket layanan yang memiliki fungsionalitas tambahan.

Manajemen Patch

Untuk mengetahui perangkat lunak apa yang membutuhkan patching, jagalah inventori atas perangkat lunak yang dipasang pada setiap stasiun kerja dan server, terutama laptop yang mungkin hanya sesekali terhubung dengan jaringan organisasi, dan memasukkan rincian mengenai versi perangkat lunak dan riwayat patching.

Gunakan mekanisme otomatis untuk mengkonfirmasi dan mencatat bahwa patch sudah terpasang dan berhasil diterapkan.

Penggunaan versi terbaru

Hindari penggunaan perangkat lunak yang tidak lagi mendapatkan patch keamanan untuk kerentanan dari vendornya. Hal ini penting terutama untuk perangkat lunak yang berinterkasi dengan data yang tidak terpercaya dan data yang berpotensi jahat.

Hindari penggunaan Adobe Reader sebelum versi X, serta versi-versi Internet Explorer sebelum versi 8 untuk mengakses situs web Internet.

Informasi Lebih Lanjut

Panduan rinci dari strategi mitigasi Top 4 tersedia di:

http://www.asd.gov.au/infosec/top35mitigationstrategies.htm

Kontrol ISM: 0790, 0297, 0298, 0300, 0303, 0304, 0940, 0941, 1143, 1144, 1244, 1298, 1348‐1349, 1350‐1351, 1362, 1365‐1366.

 

Strategi Mitigasi #1 – Daftar-putih aplikasi

Mitigasi

Implementasikan daftar-putih aplikasi yang terdiri dari program-program yang diperbolehkan/terpercaya setidaknya pada stasiun-stasiun kerja yang digunakan oleh Target Utama. Daftar-putih aplikasi ini bertujuan untuk mencegah eksekusi program-program jahat atau program-program yang tidak diinginkan.

Dasar Pemikiran

Implementasi daftar-putih aplikasi dengan konfigurasi yang tepat dapat membantu mencegah eksekusi perangkat lunak yang tidak diinginkan terlepas dari apakah perangkat lunak diunduh dari situs web, diunduh sebagai lampiran surat elektronik, atau diperoleh melalui memori stik USB atau CD/DVD.

Implementasi daftar-putih aplikasi pada peladen yang penting seperti Active Directory dan peladen otentikasi lain dapat membantu mencegah musuh siber menjalankan perangkat jahat untuk memperoleh hash kata sandi. Sebaliknya, jika implementasi ini tidak dilakukan, musuh siber dapat memperoleh hak istimewa tambahan.

Panduan Implementasi

Kemampuan daftar-putih aplikasi dalam memberikan pertahanan terhadap intrusi siber dengan tingkat kecanggihan rendah sampai tinggi bergantung pada produk vendor yang dipilih untuk mengimplementasikan daftar-putih aplikasi, pengaturan konfigurasinya, serta pengendalian hak akses berkas terhadap direktori pengguna (atau mungkin perangkat jahat) yang dapat menulis dan mengeksekusi berkas di dalamnya.

Konfigurasikan mekanisme daftar-putih aplikasi untuk mencegah berjalannya program yang tidak diinginkan apapun ekstensi berkasnya.

Jika memungkinkan, cegah pengguna (atau perangkat jahat yang berjalan sebagai pengguna) untuk menjalankan sistem eksekutabel yang biasa digunakan untuk pengintaian sebagaimana tercantum dalam strategi mitigasi #15 ‘Sentralisasi dan sinkronisasi logging waktu pada computer event yang berhasil maupun gagal’.

Hanya mencegah pengguna memasang aplikasi-aplikasi baru pada stasiun kerjanya bukanlah merupakan penerapan dari daftar-putih aplikasi.

Sangat disarankan untuk menerapkan daftar-putih aplikasi secara bertahap, daripada menerapkannya ke seluruh organisasi sekaligus. Sebagai contoh, setelah pengujian dan pemahaman mekanisme daftar-putih aplikasi dilakukan untuk mencegah positif palsu, satu pendekatan adalah menerapkan daftar-putih aplikasi pada stasiun-stasiun kerja yang digunakan eksekutif senior dan asistennya. Pengguna-pengguna tersebut merupakan Target Utama yang biasanya hanya menjalankan beberapa aplikasi perangkat lunak seperti Microsoft Office, program surat elektronik dan peramban web. Manfaat lainnya adalah ketika pengguna-pengguna ini paham bahwa daftar-putih aplikasi akan melakukan mitigasi bahaya yang diakibatkan ketika mereka mengunduh lampiran surat elektronik yang jahat atau mengunjungi situs web jahat, mereka akan memberikan dukungan lebih untuk proses pemasangan daftar-putih aplikasi pada lebih banyak lagi stasiun kerja pengguna dalam organisasi.

Penerapan daftar-putih aplikasi akan lebih mudah jika organisasi memiliki proses manajemen perubahan yang baik dan oleh karenanya organisasi tahu perangkat lunak apa saja yang dipasang pada stasiun kerja dan peladen. Pengujian awal daftar-putih aplikasi dalam mode “audit”/”logging only” dapat membantu organisasi mengembangkan inventori dari perangkat lunak yang terpasang. Ketika inventori dibangun, daftar-putih aplikasi dapat dikonfigurasikan dengan tepat dalam mode “paksa” untuk mencegah berjalannya program yang tidak diinginkan.

Ketika memasang perangkat lunak baru, hindari pembuatan hash pada berkas-berkas yang tidak bersifat eksekutabel. Sebaliknya jika setiap berkas baru dimasukkan ke dalam daftar-putih, daftar-putih akan menjadi terlalu besar dan jika didistribusikan lewat kebijakan kelompok, akan sangat memperlambat logging pengguna pada stasiun kerjanya.

Installer, atau paket pemasangan, dapat memasang, memodifikasi atau menghapus program. Kerangka kerja installer pada umumnya berisi Windows Installer dan InstallShield. Installer seringkali memuat informasi pemasangan dan berkas-berkas yang akan dipasang dalam satu paket. Berkas-berkas paket Windows Installer memiliki ekstensi penamaan berkas MSI dan pada umumnya disebut sebagai berkas MSI. Berkas MSI pada umumnya digunakan untuk pemasangan tanpa pengawasan atau modifikasi program dalam lingkungan Microsoft Windows.

Titik-akhir proteksi atau perangkat lunak anti-perangkat jahat dari beberapa vendor disertai daftar-putih aplikasi sebagai salah satu fungsionalitasnya.

Informasi Lebih Lanjut

Panduan rinci dari strategi mitigasi Top 4 tersedia di:

http://www.asd.gov.au/infosec/top35mitigationstrategies.htm

Kontrol ISM: 0843, 0845, 0846, 0848, 0849, 0851, 0955, 0956‐0957.

 

Audit Log dalam FreeBSD

Log Sistem

FreeBSD menyediakan logger sistem yaitu syslogd untuk mengelola log. Berkas konfigurasi syslogd ada di /etc/syslog.conf. Konfigurasi ini mengendalikan apa yang syslogd lakukan dengan entri log ketika entri log diterima. Parameter fasilitas mendeskripsikan subsistem mana yang menghasilkan pesan, misalnya kernel atau suatu daemon, dan parameter level mendeskripsikan kondisi dari kejadian yang terjadi.

Nama fasilitas Program apa yang direpresentasikan
AUTH Sistem otorisasi: login(1), su(1), getty(8), dan sebagainya.
AUTHPRIV Sama seperti AUTH, tapi log disimpan ke sebuah berkas yang hanya bisa dibaca oleh pengguna terpilih.
CRON Daemon cron: cron(8).
DAEMON Daemon sistem, seperti routed(8), yang tidak disediakan secara eksplisit oleh fasilitas lain.
FTP Daemon ftp: ftpd(8), tftpd(8).
KERN Pesan yang dihasilkan oleh kernel. Pesan ini tidak dapat dihasilkan oleh proses pengguna apapun.
LOCAL0-LOCAL7 Disediakan untuk penggunaan lokal.
LPR Sistem line printer spooling: lpr(1), lpc(8), lpd(8), dan lain-lain.
MAIL Sistem surat-menyurat.
NEWS Sistem berita jaringan.
SECURITY Subsistem keamanan.
SYSLOG Pesan yang dihasilkan secara internal oleh syslogd(8).
USER Pesan yang dihasilkan oleh proses pengguna yang acak (random user processes).
UUCP Sistem uucp. ipfw(4).
* Semua fasilitas atau program kecuali MARK.
MARK Fasilitas khusus yang digunakan oleh syslogd.
Nama level Apa yang direpresentasikan
EMERG Kondisi panik, biasanya di-broadcast ke semua pengguna.
ALERT Sebuah kondisi yang harus diperbaiki sesegera mungkin, seperti basis data sistem rusak.
CRIT Kondisi kritis, misalnya kesalahan pada perangkat keras.
ERR Kesalahan-kesalahan.
WARNING Pesan peringatan.
NOTICE Kondisi yang bukan merupakan kondisi salah, namun kemungkinan harus ditangani secara khusus.
INFO Pesan informatif.
DEBUG Pesan-pesan yang berisi informasi yang umumnya digunakan ketika men-debug program.
NONE Level khusus untuk menonaktifkan fasilitas.

Dalam FreeBSD, biasanya berkas-berkas log berada di direktori /var/log. Namun kita dapat mengubahnya dalam berkas konfigurasi /etc/syslog.conf. Berkas konfigurasi ini berisi satu baris setiap aksinya, dimana sintaks untuk setiap baris adalah selector field yang diikuti oleh action field. Sintaks untuk selector field adalah fasilitas.level yang berarti pesan log diambil dari fasilitas pada tingkat level atau lebih tinggi. Berikut contoh berkas konfigurasi /etc/syslog.conf:

Rotasi Log

Dalam FreeBSD, newsyslog digunakan untuk mengelola berkas-berkas log. Program bawaan ini secara periodik merotasi dan mengkompresikan berkas log, dan secara opsional membuat berkas log yang hilang dan memberi tahu program ketika berkas log dipindahkan. Dalam konfigurasi default, newsyslog berjalan setiap jam. Berkas konfigurasi newsyslog adalah /etc/newsyslog.conf, yang isinya seperti berikut:

Setiap baris dimulai dengan nama dari log yang dirotasi, diikuti dengan pemilik dan grup untuk berkas log yang dirotasi. Kolom mode untuk menetapkan perizinan pada berkas log dan kolom count untuk mengatur berapa banyak berkas rotasi log harus disimpan. Kolom size dan when untuk mengatur kapan newsyslog merotasi berkas. Berkas log dirotasi ketika ukurannya lebih besar dari size (dalam KB) atau ketika waktu dalam when sudah lewat. Ada dua format waktu:

  1. Format waktu ISO 8601 (dengan prefiks ‘@’):[[[[[cc]yy]mm]dd][T[hh[mm[ss]]]]]
  2. Format waktu hari, minggu, bulan (dengan prefiks ‘$”):[Dhh], [Ww[Dhh]], dan [Mdd[Dhh]]

Kolom flags untuk memberikan instruksi lebih lanjut, misalnya bagaimana mengkompresikan berkas rotasi atau untuk membuat berkas log jika hilang. Dua kolom terakhir adalah opsional, yaitu untuk menspesifikasikan nama berkas Process ID (PID) dari sebuah proses dan nomor sinyal untuk dikirim ke proses tersebut jika berkas dirotasi.

Log Aplikasi

Aplikasi Berkas konfigurasi log Berkas log
Apache /usr/local/etc/apache24/httpd.conf /var/log/httpd-access.log /var/log/httpd-error.log
MySQL /usr/local/my.cnf /var/db/mysql/hostname.err
WordPress (custom) /usr/local/etc/apache24/Includes/wordpress.conf (custom) /var/log/wordpress-access_log /var/log/wordpress-error_log

Contoh Log Apache /var/log/httpd-access.log:

Contoh Log Apache /var/log/httpd-error.log:

Contoh Log MySQL /var/db/mysql/foo.err:

Contoh Log WordPress /var/log/wordpress-access_log:

Contoh Log WordPress /var/log/wordpress-error_log:

Log pada WordPress

Tidak ada mekanisme log secara khusus untuk aplikasi WordPress, namun kita dapat memanfaatkan fasilitas log Apache untuk melakukan log WordPress. Pertama, buat sebuah VirtualHost. Buat berkas /usr/local/etc/apache24/Includes/wordpress.conf. Kemudian tulis baris-baris berikut:

  • DocumentRoot = lokasi berkas-berkas PHP/HTML WordPress
  • ServerName = nama domain tempat dimana VirtualHost ini merespon
  • ServerAlias = opsional – digunakan jika kita ingin VirtualHost ini merespon ke lebih dari satu nama domain
  • ErrorLog adan CustomLog = fasilitas log dari Apache

Kemudian ubah berkas /usr/local/etc/apache24/httpd.conf, beri tanda komentar pada baris-baris berikut:

sehingga menjadi terlihat seperti berikut:

Hidupkan kembali Apache:

service apache24 restart

 

Log akses pengguna WordPress

WordPress menyediakan plugin Simple History [5] untuk melalukan beberapa log, termasuk log akses pengguna. Ada juga plugin lainnya seperti WP Security Audit Log [5]. Cari plugin ‘Simple History’ pada menu Search Plugins kemudian klik Install Now:

Jika menemukan pesan ‘Abort class-pclzip.php: Missing zlib extensions” seperti gambar di bawah, artinya instalasi gagal karena modul php zlib belum terinstal (secara default tidak masuk dalam instalasi php). Modul php zlib dapat diinstal menggunakan port /usr/ports/archivers/php56-zlib. Setelah modul php zlib diinstal, instalasi plugin Simple History sudah bisa dilakukan:

Setelah instalasi berhasil, aktivasikan plugin Simple History seperti berikut:

Simple History akan menampilkan pesan berapa banyak kejadian di hari itu:

Sayangnya, dalam WordPress kita tidak dapat melihat informasi kejadian apa saja yang dilog oleh Simple History. Namun kita dapat melihatnya dalam basis data wordpress sebagai berikut:

Tabel wp_simple_history menyimpan setiap kejadian dengan id yang berbeda, waktu kejadian, level kejadian (seperti level pada syslogd), pesan (kejadiannya, misalnya log in/log out), dan sebagainya. Tabel wp_simple_history_contexts menyimpan informasi detil kejadian, history_id dalam tabel ini mengacu ke id dalam tabel wp_simple_history.

Melewatkan log aplikasi ke Syslog

Log Apache dapat dilewatkan ke syslog [2], begitu juga log MySQL (sejak versi 5.1.20) [4]. Log akses pengguna WordPress juga dapat dilewatkan ke syslog dengan mengubah kode fungsi log dalam plugin Simple History. Keuntungan dan kerugiannya adalah sebagai berikut:

Keuntungan Kerugian
Keuntungan sentralisasi log secara umum yaitu kemudahan dalam manajemen log. Kerugian sentralisasi log secara umum yaitu single point of failure.
Jika ada yang menyerang aplikasi, penyerang tidak bisa menghapus jejaknya (lognya). Harus ada konfigurasi tambahan agar log juga ter-backup secara lokal (piped logging)
Tidak perlu menghentikan dan menghidupkan kembali aplikasi untuk sekadar mengkompresikan log.

 

Konfigurasi log Apache ke Syslog

Buat berkas /usr/local/bin/apache_syslog yang berisi kode perl berikut. Kode perl ini intinya memanggil fungsi openlog() untuk membuka koneksi ke syslog dan untuk menggunakan fasilitas local2, fungsi syslog() untuk mengirimkan log dengan level info atau lebih tinggi, dan terakhir fungsi closelog() untuk menutup koneksi.

Pastikan bahwa berkas /usr/local/bin/apache_syslog bersifat eksekutabel:

Kemudian instal p5-Sys-Syslog melalui port sysutils/p5-Sys-Syslog.

# cd /usr/ports/sysutils/p5-Sys-Syslog
# make install clean

Dalam berkas konfigurasi Apace /usr/local/apache24/httpd.conf ganti direktif ErrorLog dan CustomLog seperti berikut:

Arti dari baris tersebut adalah kita memerintahkan ErrorLog untuk dilewatkan ke Syslog dengan menggunakan fasilitas local1 dan memerintahkan CustomLog (log akses) untuk mengeksekusi kode perl yang sudah dibuat sebelumnya. Namun karena sebelumnya kita menggunakan VirtualHost untuk log pada WordPress, maka log akan disimpan ke berkas-berkas yang ditetapkan di VirtualHost. Oleh karena itu, kita nonaktifkan VirtualHost dengan risiko log pada /var/log/wordpress-access_log dan /var/log/wordpress-error_log tidak akan aktif lagi.

Tambahkan beberapa baris pada berkas konfigurasi Syslog /etc/syslog.conf sebagai berikut. Artinya log dengan fasilitas local1 (yang telah ditetapkan untuk ErrorLog) dan dengan level apapun akan disimpan dalam berkas /var/log/httpd-error1.log. Begitu pula log dengan fasilitas local2 (yang telah ditetapkan untuk CustomLog) dan dengan level apapun akan disimpan dalam berkas /var/log/httpd-access1.log.

Buat berkas-berkas log dengan perintah berikut:

# touch /var/log/httpd-error.log /var/log/httpd-access.log

Tambahkan baris-baris berikut pada berkas /etc/newsyslog.conf untuk menentukan rotasi log:

Hidupkan kembali syslogd dan apache24:

Berikut isi berkas log /var/log/httpd-access1.log:

Dan berikut isi berkas log /var/log/httpd-error1.log:

 

Konfigurasi log MySQL ke Syslog

Log pada MySQL secara default menggunakan fasilitas daemon, kita dapat menggantinya dengan fasilitas yang lain (local0-local7) agar tidak tercampur dengan log yang lain. Sayangnya fasilitas log pada MySQL di-hard-code dalam mysqld_safe. Oleh karena itu kita harus melakukan beberapa perubahan dalam berkas /usr/local/bin/mysqld_safe sebagai berikut. Intinya adalah kita mendefinisikan fasilitas log sebagai variabel syslog_facility (yang nilai defaultnya daemon) sehingga kita dapat menetapkan nilainya sesuka hati.

Sekarang, kita perintahkan mysqld_safe untuk melewatkan log ke Syslog dan mengganti fasilitas log menjadi local3 dengan menambahkan tiga baris berikut pada berkas konfigurasi MySQL /usr/local/my.cnf. Kemudian mulai/hidupkan mysqld_safe dengan perintah berikut:

# mysqld_safe --defaults-file=/usr/local/my.cnf

Tambahkan baris berikut berkas konfigurasi Syslog /etc/syslog.conf. Baris ini berarti bahwa log dengan fasilitas local3 (yang telah ditetapkan untuk log MySQL) dan dengan level apapun akan disimpan dalam berkas /var/log/mysqld.log.

Buat berkas log dengan perintah berikut, kemudian hidupkan kembali syslogd.

# touch /var/log/mysqld.log

Berikut isi dari berkas log /var/log/mysqld.log:

 

Konfigurasi log akses pengguna WordPress ke Syslog

Dengan mengetahui fakta bahwa terdapat fungsi openlog(), syslog(), dan closelog() dalam PHP (PHP 4 dan PHP 5) mirip seperti pada kode perl sebelumnya, kita dapat menyelipkan kode tersebut ketika plugin Simple History melakukan kueri insert ke basis data. Fungsi dimana plugin Simple History melakukan kueri insert ke basis data adalah fungsi log() dari kelas SimpleLogger dalam berkas /usr/local/www/apache24/data/wp-content/plugins/simple-history/loggers/SimpleLogger.php. Untuk jaga-jaga, salinan berkas SimpleLogger.php.old dibuat sebelum melakukan perubahan.

Dalam fungsi log() ada dua kali kueri insert karena plugin Simple History memiliki dua tabel yaitu tabel wp_simple_history dan tabel wp_simple_history_contexts. Agar tidak terjadi redudansi log, penyelipan kode syslog() dilakukan di satu tempat saja yaitu setelah kueri insert ke tabel wp_simple_history_contexts karena tabel ini menyimpan informasi detil setiap kejadian. Kode yang ditambahkan adalah yang diberi komentar “TAMBAHKAN …” sebagai berikut.

Dalam kode di atas terlihat bahwa fasilitas local0 yang ditetapkan. Tambahkan baris berikut berkas konfigurasi Syslog /etc/syslog.conf. Baris ini berarti bahwa log dengan fasilitas local0 (yang telah ditetapkan untuk log akses pengguna WordPress) dan dengan level apapun akan disimpan dalam berkas /var/log/wordpress.log.

Buat berkas log dengan perintah berikut, kemudian hidupkan kembali syslogd.

# touch /var/log/wordpress.log

 

Berikut isi dari berkas log /var/log/wordpress.log. Kita dapat menentukan pesan apa yang ingin ditampilkan dalam log agar mudah untuk dibaca. Namun karena keterbatasan waktu, pesan yang ditampilkan adalah semua key:value kejadian yang disimpan dalam tabel wp_simple_history_contexts sehingga ada nilai value yang NULL atau redundan. Intinya adalah bahwa log akses pengguna WordPress yang disimpan dalam basis data terbukti dapat dilewatkan ke Syslog, yaitu dengan menyelipkan kode ke dalam plugin Simple History.

Remote Logging

Dalam FreeBSD, pengumpulan, penggabungan, dan rotasi berkas log tersentralisasi dapat dikonfigurasikan menggunakan syslogd dan newsyslog. Untuk mensimulasikan remote logging, kita dapat menggunakan dua jendela VMware, satu untuk mesin virtual server log dan satu untuk mesin virtual klien log. Misalkan server log yang bernama fooserver akan mengumpulkan informasi log untuk jaringan lokal. Klien log yang bernama foo akan dikonfigurasikan untuk mengirimkan informasi log ke server log. Kedua mesin virtual menggunakan sistem operasi FreeBSD 10.1.

Konfigurasi Server Log

Sebelum mengkonfigurasikan server log, perhatikan hal-hal berikut:

  1. Jika terdapat firewall antara server log dan klien log, pastikan bahwa ruleset firewall mengizinkan UDP port 514 untuk kedua klien dan server.
    Berikut adalah contoh ruleset firewall dari klien log foo (server log fooserver tidak dipasang firewall) dalam berkas /etc/pf.conf. Setelah dilakukan perubahan ruleset, jangan lupa bahwa ruleset harus dimuat agar dapat digunakan.
  2. Server log dan semua mesin klien harus memiliki entri dalam DNS lokal.
    Berikut adalah berkas /etc/hosts pada server log fooserver: Dan berikut adalah berkas /etc/hosts pada klien log foo:

Pada server log fooserver, ubah /etc/syslog.conf untuk menspesifikasikan nama klien yang mengirimkan entri, fasilitas log yang digunakan, dan nama log untuk menyimpan log klien. Kemudian hidupkan kembali syslogd. Berikut contoh ditambahkannya hostname foo, log semua fasilitas, dan simpan entri log dalam /var/log/logfoo.log:

Kemudian konfigurasikan /etc/rc.conf dan hidupkan kembali jaringan:

Entri pertama untuk memulai syslogd ketika sistem boot. Entri kedua untuk mengizinkan entri log dari klien foo, meningkatkan verbosity dari pesan log (-vv), dan mengizinkan log dari banyak klien (-a). Terakhir buat berkas log:

# touch /var/log/logfoo.log

Konfigurasi Klien Log

Selain mengirimkan entri log ke server log fooserver, klien log foo juga menyimpan entri log secara lokal. Setelah server log dikonfigurasi, ubah /etc/rc.conf pada klien log sebagai berikut kemudian hidupkan kembali jaringan:

Entri pertama untuk memulai syslogd ketika sistem boot. Entri kedua untuk mencegah klien foo menerima entri log dari klien lain (-s) dan meningkatkan verbosity dari pesan log (-vv). Kemudian, definisikan server log fooserver dalam /etc/syslog.conf klien foo. Dalam contoh berikut, semua fasilitas log dikirim ke server log fooserver. Setelah perubahan disimpan, jangan lupa untuk menghidupkan kembali syslogd.

Untuk menguji apakah pesan log berhasil dikirim melalui jaringan, gunakan logger(1) pada klien untuk mengirimkan sebuah pesan ke syslogd. Pesan ini seharusnya muncul dalam /var/log/messages pada klien log foo dan /var/log/logfoo.log pada server log fooserver.

# logger "halooooo fooserver"

Berikut isi dari berkas log /var/log/logfoo.log dalam server log fooserver:

Referensi:

  1. https://www.freebsd.org/doc/en/books/handbook/configtuning-syslog.html
  2. http://www.blissfulidiot.com/2011/09/if-you-need-to-use-syslog-to-send.html
  3. http://archive.oreilly.com/pub/a/sysadmin/2006/10/12/httpd-syslog.html
  4. http://shinguz.blogspot.com/2010/01/mysql-reporting-to-syslog.html
  5. https://wordpress.org/plugins/wp-security-audit-log/screenshots/

Instalasi WordPress pada FreeBSD 10.1

Stack FAMP (seperti stack LAMP pada Linux) adalah sekumpulan perangkat lunak sumber terbuka yang pada umumnya diinstal bersama untuk mendukung situs web dan aplikasi web pada server FreeBSD. FAMP adalah akronim dari FreeBSD (sistem operasi), Apache (server web), MySQL (server basis data), dan PHP (untuk memproses konten PHP dinamis). Sebelum menginstal WordPress, kita harus menginstal FAMP terlebih dahulu.

Langkah #1 — Menginstal Apache

Untuk menginstal Apache 2.4 menggunakan pkg, jalankan perintah berikut:

$ sudo pkg install apache24

Untuk mengaktifkan Apache sebagai sebuah servis, tambahkan apache24_enable="YES" pada berkas /etc/rc.conf. Kita dapat menggunakan perintah berikut untuk melakukannya:

$ sudo echo 'apache24_enable="YES"' >> /etc/rc.conf

Sekarang mulai jalankan Apache:

$ sudo service apache24 start


Kita dapat memverifikasi apakah Apache sudah berjalan dengan mengunjungi alamat IP publik server kita dalam peramban web lynx. Kita akan melihat halaman web FreeBSD Apache yang default, berkata “It Works!”.

$ sudo pkg install lynx
$ lynx 172.16.109.128

Langkah #2 — Menginstal MySQL

Untuk menginstal MySQL 5.6 menggunakan pkg, jalankan perintah berikut:

$ sudo pkg install mysql56-server

Untuk mengaktifkan MySQL sebagai sebuah servis, tambahkan mysql_enable="YES" pada berkas /etc/rc.conf. Kita dapat menggunakan perintah berikut untuk melakukannya:

$ sudo echo 'mysql_enable="YES"' >> /etc/rc.conf

Sekarang mulai jalankan MySQL:

$ sudo service mysql-server start


Setelah basis data MySQL berjalan, jalankan naskah keamanan berikut untuk menghapus beberapa default yang berbahaya dan sedikit membatasi akses kepada sistem basis data kita:

$ sudo mysql_secure_installation

Langkah #3 — Menginstal PHP

Untuk menginstal PHP 5.6 menggunakan pkg, jalankan perintah berikut:

$ sudo pkg install mod_php56 php56-mysql php56-mysqli


Sekarang salin contoh berkas konfigurasi PHP menggunakan perintah berikut:

$ sudo cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

Sekarang jalankan perintah rehash untuk membangkitkan kembali informasi cache sistem mengenai berkas eksekutabel yang terinstal:

$ rehash

Langkah #4 — Konfigurasi Apache dengan modul PHP

Sebelum Apache dapat memproses halaman PHP, kita harus mengkonfigurasikannya menggunakan mod_php. Buka berkas konfigurasi Apache:

$ sudo vi /usr/local/etc/apache24/httpd.conf

Pertama, kita konfigurasikan Apache untuk membuka berkas index.php secara default. Lihat baris DirectoryIndex index.html dan ubah baris tersebut dengan menambahkan index.php di depan index.html, seperti berikut ini:

Kemudian kita konfigurasikan Apache untuk memproses berkas PHP yang diminta dengan prosesor PHP. Tambahkan baris-baris berikut di akhir berkas:

Sekarang hidupkan kembali Apache:

$ sudo service apache24 restart

Langkah #5 — Uji pemrosesan PHP

Untuk menguji apakah sistem sudah dikonfigurasikan dengan benar untuk memproses PHP, kita dapat membuat naskah PHP yang sangat sederhana. Misalkan kita membuat naskah index.php. Agar Apache dapat mencari berkas dan menyajikannya dengan benar, berkas index.php harus disimpan dalam direktori spesifik–DocumentRoot–dimana Apache akan mencari berkas ketika pengguna mengakses server web. Lokasi DocumentRoot dispesifikasikan dalam berkas konfigurasi Apache yang kita modifikasi sebelumnya (/usr/local/etc/apache24/httpd.conf). Secara default, DocumentRoot ditetapkan pada /usr/local/www/apache24/data. Kita dapat membuat berkas index.php dalam direktori tersebut seperti berikut:

$ sudo echo ''  >> /usr/local/www/apache24/data/index.php

Sekarang kita dapat melakukan pengujian dengan mengunjungi alamat berikut:

$ lynx 172.16.109.128/index.php

atau

$ lynx 172.16.109.128

Langkah #6 — Siapkan basis data MySQL

WordPress menggunakan basis data relasional seperti MySQL untuk mengelola dan menyimpan informasi situs dan pengguna. Pada langkah ini, kita akan menyiapkan basis data dan pengguna MySQL untuk digunakan pada WordPress.

Masuk ke akun administratif MySQL (root) dengan menggunakan perintah ini:

# mysql -u root -p


Buat basis data MySQL dengan menggunakan kueri SQL berikut:

CREATE DATABASE wordpress;


Buat pengguna baru dengan kueri SQL berikut:

CREATE USER wordpressuser@localhost IDENTIFIED BY 'password';


Sekarang berikan izin akses pengguna ke basis data dengan menggunakan kueri SQL berikut:

GRANT ALL PRIVILEGES ON wordpress.* TO wordpressuser@localhost;
FLUSH PRIVILEGES;
exit

Langkah #7 — Unduh WordPress

Unduh berkas WordPress pada direktori home dengan menggunakan perintah berikut:

$ cd ~
fetch http://wordpress.org/latest.tar.gz


Ekstraksi arsip dengan perintah berikut:

$ tar xvf latest.tar.gz


Hasil ekstraksi ada pada direktori bernama wordpress dalam direktori home.

Untuk menghapus arsip WordPress gunakan perintah:

$ rm latest.tar.gz

Langkah #8 — Konfigurasi WordPress

Pertama-tama, masuk ke direktori wordpress:

$ cd ~/wordpress

Agar konfigurasi lebih mudah, kita akan menggunakan contoh konfigurasi yang disediakan WordPress, wp-config-sample.php. Salin contoh ke wp-config.php:

$ cp wp-config-sample.php wp-config.php

Lakukan modifikasi DB_NAME, DB_USER, dan DB_PASSWORD pada berkas konfigurasi:

$ vi wp-config.php

Langkah #9 — Salin berkas-berkas pada DocumentRoot Apache

Setelah aplikasi WordPress kita terkoneksi dengan basis data, kita harus menyalin berkas-berkas WordPress ke direktori DocumentRoot Apache:

$ sudo cp -rp ~/wordpress/* /usr/local/www/apache24/data/

Sekarang ubah kepemilikan berkas-berkas WordPress ke pengguna dan grup www:

$ sudo chown -R www:www /usr/local/www/apache24/data/*

Langkah #10 — Jalankan instalasi WordPress

Sekarang kita kunjungi alamat IP publik kita pada peramban web sebagai berikut:

$ lynx 172.16.109.128


 

Referensi:

  1. https://www.digitalocean.com/community/tutorials/how-to-install-an-apache-mysql-and-php-famp-stack-on-freebsd-10-1
  2. http://www.freebsdmadeeasy.com/tutorials/web-server/install-php-5-for-web-hosting.php
  3. https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-apache-on-freebsd-10-1

Hardening FreeBSD 10.1 (5)

Pada artikel bagian kelima ini, akan dibahas teknik-teknik dasar untuk melakukan langkah keenam yaitu langkah menguji keamanan sistem dengan menggunakan nmap dan nessus.

Nmap

Nmap (“Network Mapper”) adalah kakas open source untuk eksplorasi jaringan dan audit keamanan. Nmap menggunakan paket-paket IP sedemikian sehingga dapat menentukan host apa saja yang tersedia dalam jaringan, servis (nama aplikasi dan versinya) apa saja yang disediakan host tersebut, OS apa (dan versinya) yang dijalankan, tipe packet filter/firewall apa yang digunakan, dan sekian banyak karakteristik lainnya. Nmap dapat diinstal melalui package atau melalui port security/nmap.

Output dari Nmap adalah daftar dari target yang di-scan, dengan informasi tambahan tergantung dari opsi yang digunakan. Tabel port berisi nomor port dan protokol,  nama servis, dan state. Nilai-nilai dari state adalah sebagai berikut:

State Definisi
open Aplikasi pada mesin target sedang mendengarkan untuk koneksi/paket pada port tersebut
filtered Ada firewall, filter, atau penghalang lain yang memblok port sehingga Nmap tidak dapat menentukan apakah port tersebut open atau closed
closed  Port tidak memiliki aplikasi yang mendengar melalui port tersebut
unfiltered Ketika port bersifat responsif terhadap koneksi/paket dari Nmap, namun Nmap tidak dapat menentukan apakah port tersebut open atau closed
open|filtered Ketika Nmap tidak dapat menentukan apakah state dari port adalah open atau filtered
closed|filtered Ketika Nmap tidak dapat menentukan apakah state dari port adalah closed atau filtered

Port scanning dengan Nmap

Nmap mendukung banyak teknik port scanning. Hanya satu teknik yang bisa digunakan pada setiap scan, kecuali scan UDP (-sU) dan tipe scan SCTP (-sY dan -sZ) dapat dikombinasikan dengan satu dari tipe scan TCP. Secara default, nmap melakukan scan dengan teknik TCP SYN.

Berikut ini adalah hasil port scanning yang dilakukan pada server FreeBSD yang sudah dilakukan hardening pada langkah-langkah sebelumnya dan kemudian diinstal WordPress. Dari hasil berikut dapat terlihat bahwa setiap teknik menghasilkan output dan lama scan yang berbeda-beda.

Teknik scan Output Lama scan (s)
TCP SYN
(-sS)
PORT     STATE SERVICE
22/tcp   open  SSH
80/tcp   open  http
3306/tcp open  mysql
 94.14
TCP connect
(-sT)
PORT     STATE SERVICE
22/tcp   open  SSH
80/tcp   open  http
3306/tcp open  mysql
 18.31
TCP ACK
(-sA)
All 1000 scanned ports are unfiltered
 95.15
TCP Window
(-sW)
All 1000 scanned ports are closed  92.07
TCP Maimon (-sM) All 1000 scanned ports are closed  93.08
UDP (-sU) All 1000 scanned ports are closed  5280.99
TCP Null (-sN) PORT     STATE         SERVICE
22/tcp   open|filtered SSH
80/tcp   open|filtered http
3306/tcp open|filtered mysql
 96.19
TCP FIN
(-sF)
PORT     STATE         SERVICE
22/tcp   open|filtered SSH
80/tcp   open|filtered http
3306/tcp open|filtered mysql
 95.64
Xmas (-sX) PORT     STATE         SERVICE
22/tcp   open|filtered SSH
80/tcp   open|filtered http
3306/tcp open|filtered mysql
 96.85
Idle (-sI) PORT        STATE
1-65389/tcp unknown
 15.14
SCTP INIT (-sY) All 52 scanned ports are closed  16.04
SCTP COOKIE ECHO (-sZ) All 52 scanned ports are closed  17.25
IP protocol (-sO) PORT        STATE
1-255/tcp open
 29.64
FTP bounce (-b) -  –










Deteksi versi servis dan versi OS dengan Nmap

Nmap mendukung pendeteksian versi servis yaitu dengan opsi -sV dan pendeteksian versi OS yaitu dengan opsi -O. Opsi -A juga dapat digunakan untuk mendeteksi versi servis (beserta informasi tambahan lainnya) dan versi OS sekaligus.

Berikut ini adalah hasil deteksi versi servis dan versi OS oleh Nmap. Dari hasil berikut dapat terlihat bahwa versi OpenSSH, Apache dan PHP yang terdeteksi oleh Nmap adalah benar. Sedangkan versi FreeBSD yang terdeteksi oleh Nmap adalah salah dan Nmap tidak berhasil mendeteksi versi MySQL.



Nessus

Nessus adalah scanner keamanan yang menelusuri suatu jaringan untuk mencari kerentanan yang diketahui secara umum dan kesalahan konfigurasi yang umum dilakukan. Nessus terdiri dari dua bagian: server dan klien. Server nessusd bertanggung jawab terhadap serangan, sedangkan klien nessus menyediakan antarmuka untuk pengguna. Nessus dapat diinstal melalui package atau melalui port security/nessus.

Pertama, kita buat sebuah pengguna Nessus dengan perintah berikut. Pengguna Nessus digunakan untuk koneksi ke server Nessus.

# nessus-adduser

Sebelum menjalankan daemon Nessus, kita harus membuat sebuah sertifikat SSL lokal dengan menggunakan perintah:

# nessus-mkcert


Sekarang, kita dapat menjalankan daemon Nessus dengan perintah:

# nessusd -D

Berikut ini adalah contoh perintah untuk menjalankan scan Nessus. localhost 1241 merupakan host dan port dari server Nessus. nessuser qwertyuiop merupakan id pengguna Nessus dan kata sandinya. target merupakan nama berkas yang berisi alamat IP target dan result.txt merupakan nama berkas yang akan digunakan untuk menyimpan hasil scan.

# nessus -T txt -qx localhost 1241 nessuser qwertyuiop target result.txt








Hasil scan Nessus menunjukkan bahwa sistem dapat dikatakan aman. Satu-satunya kerentanan yang ada disebabkan oleh Nessus itu sendiri, yaitu karena Nessus yang diinstal belum diregistrasi.

Referensi:

  1. https://www.freebsd.org/cgi/man.cgi?query=nmap&manpath=SuSE+Linux/i386+11.3
  2. https://ws.edu.isoc.org/workshops/2005/SANOG-VI/ip-services/day1/nessus/nessus-install.html
  3. http://hackertarget.com/nessus-scanning-command-line/

Hardening FreeBSD 10.1 (4)

Pada artikel bagian keempat ini, akan dibahas teknik-teknik dasar untuk melakukan langkah kelima yaitu langkah menginstal kontrol keamanan tambahan.

Intrusion Detection System (IDS)

FreeBSD menyediakan dukungan untuk sistem IDS dasar. Kakas bawaan mtree dapat digunakan untuk membangkitkan spesifikasi dari konten-konten pada sebuah direktori, seperti /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /etc, dan /usr/local/etc.

Nilai 3483151339707503 merepresentasikan seed. Nilai ini harus diingat dan tidak dibagikan.
Untuk mensimulasikan perubahan, ubah tanggal modifikasi pada on /bin/cat menggunakan touch dan jalankan lagi perintah verifikasi:

Ada sistem IDS yang lebih canggih, seperti security/aide.

Mendeteksi Rootkits

Rootkit adalah perangkat lunak yang tidak berwenang yang berusaha mengambil akses root pada sebuah sistem. Sekalinya rootkit terinstal, maka rootkit akan membuka celah masuk untuk penyerang. Dalam FreeBSD, terdapat kakas bawaan untuk mendeteksi rootkit yaitu security/rkhunter.
Setelah instalasi package atau port ini, sistem dapat diperiksa menggunakan perintah berikut:

# rkhunter -c

Setelah proses selesai, pesan status akan muncul di layar. Pesan ini berisi jumlah berkas yang diperiksa, berkas-berkas yang dicurigai, kemungkinan rootkit, dan sebagainya.

Firewall

FreeBSD mempunyai tiga firewall bawaan: PF, IPFW, dan IPFILTER (yang juga dikenal sebagai IPF). Setiap firewall menggunakan aturan-aturan untuk mengendalikan akses dari paket yang masuk ke dan keluar dari sistem FreeBSD, walaupun ketiganya memiliki pendekatan yang berbeda dan masing-masing memiliki sintaks aturan yang berbeda. Dalam artikel ini, hanya akan dibahas bagaimana menggunakan firewall PF.
Untuk menggunakan PF, tambahkan baris berikut ke /etc/rc.conf dengan perintah berikut:

pf_enable="YES"

Opsi-opsi tambahan (pfctl) dapat digunakan pada PF ketika PF dimulai, yaitu dengan menambahkan baris berikut ke /etc/rc.conf:

pf_flags=""

Secara default, PF membaca aturan-aturan konfigurasi pada /etc/pf.conf dan memodifikasi, menjatuhkan, atau mengizinkan paket-paket yang masuk atau yang keluar berdasarkan pada aturan-aturan atau definisi-definisi yang dispesifikasikan dalam berkas tersebut. FreeBSD menyediakan contoh ruleset yang ada di /usr/share/examples/pf/pf.conf.

Dukungan logging untuk PF disediakan oleh pflog. Untuk mengaktifkan dukungan logging, tambahkan baris berikut ke /etc/rc.conf:

pflog_enable="YES"

Baris-baris berikut dapat juga ditambahkan untuk mengubah lokasi default dari berkas log atau untuk menspesifikasikan flag tambahan untuk digunakan pada pflog ketika pflog dimulai:

pflog_logfile="/var/log/pflog"
pflog_flags=""

Setelah menyimpan perubahan-perubahan yang dibutuhkan, PF dapat dimulai dengan dukungan logging dengan menggunakan perintah berikut:

# service pf start
# service pflog start

Ruleset PF

Berikut adalah contoh aturan-aturan PF yang sederhana untuk webserver:

# Makro
EXT="em0"

# Izinkan semuanya ke/dari localhost
set skip on lo0

# Blok semuanya secara default
block log all

# Izinkan paket masuk untuk protokol ssh (22) dan http (80)
pass in quick on $EXT proto tcp from any to port {22, 80}

# Izinkan semua paket yang keluar
# 'quick' adalah agar PF menggunakan strategi aturan terakhir yang cocok yang menang
pass out quick on $EXT all

Ruleset dapat dimuat dengan perintah:

# pfctl -e ; pfctl -f /etc/pf.conf

Kapanpun dilakukan perubahan pada ruleset, aturan baru harus dimuat agar dapat digunakan:

# pfctl -f /etc/pf.conf

Jika tidak ada kesalahan sintaks, pfctl tidak akan menampilkan pesan apapun selama aturan dimuat. Ruleset juga dapat diuji sebelum dimuat yaitu dengan perintah berikut:

# pfctl -nf /etc/pf.conf

Dalam contoh ruleset di atas, semua paket yang diblok akan ditampilkan dalam pflog0. Kita dapat melihatnya dengan perintah berikut:

tcpdump -v -eni pflog0

Referensi:
  1. Stallings, William, dan Lawrie Brown. Computer Security: Principles and Practice. Pearson, edisi ke-2, 2012.
  2. https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/index.html
  3. https://forums.freebsd.org/threads/pf-rules-for-webserver-something-missing.10582/

Hardening FreeBSD 10.1 (3)

Pada artikel bagian ketiga ini, akan dibahas teknik-teknik dasar untuk melakukan langkah ketiga dan keempat yaitu langkah konfigurasi pengguna, grup, dan otentikasi serta langkah konfigurasi kontrol sumber daya.

Pengguna dan Dasar Manajemen Akun

Dalam sistem operasi berbasis UNIX, terdapat tiga jenis akun: akun sistem, akun pengguna, dan akun superuser.

Pengelolaan akun

  • Menambah pengguna baru:
    # adduser

    adduser secara otomatis memperbarui /etc/passwd dan /etc/group.

  • Menghapus pengguna:
    # rmuser username
  • Memodifikasi akun pengguna bisa dengan cara: chpass, passwd, atau pw.

Pengelolaan grup

  • Menambah grup baru:
    # pw groupadd groupname
  • Menambahkan akun user ke sebuah grup baru:
    # pw groupmod groupname -M username
  • Menambahkan anggota baru ke dalam sebuah grup:
    # pw groupmod groupname -m username
  • Menampilkan keanggotaan grup:
    # pw groupshow groupname
    # id username

Mencegah Login

Ada dua metode untuk melumpuhkan akun-akun yang tidak membutuhkan akses login:

  1. Mengunci akun
    # pw lock username
  2. Mengganti shell menjadi /sbin/nologin
    # chsh -s /usr/sbin/nologin username

Eskalasi Akun yang Diizinkan

Dalam beberapa kasus, administrasi sistem butuh dibagikan dengan pengguna lain. FreeBSD memiliki dua metode untuk menangani hal ini:

  1. Membagikan kata sandi root kepada anggota dari grup wheel. Cara untuk melakukan eskalasi akun adalah dengan menggunakan perintah:
    % su

    Untuk mengakhiri eskalasi akun, gunakan perintah:

    # exit

  2. Menginstal package atau port dari security/sudo (direcomendasikan)
    Aplikasi ini menyediakan audit tambahan, kontrol pengguna yang baik, dan dapat dikonfigurasikan untuk mengunci pengguna dengan menjalankan perintah istimewa tertentu.
    Gunakan visudo untuk mengubah /usr/local/etc/sudoers:

    # visudo
    username ALL=(ALL) access
    %groupname ALL=(ALL) access

Perizinan

Untuk melihat daftar direktori dan informasi perizinan berkas, gunakan perintah:

# ls -l 
drwxr-xr-x    4 cliff    user        1024 Jun 18 09:40 WAITRON_EARNINGS
-rw-r--r--    1 cliff    user      767392 Jun  6 14:28 scanlib.tar.gz
^ ^  ^  ^     ^   ^       ^           ^      ^    ^      ^
| |  |  |     |   |       |           |      |    |      |  
| |  |  |     | pemilik  grup     ukuran tanggal jam    nama 
| |  |  |     jumlah tautan ke berkas atau direktori
| |  |  izin untuk dunia
| |  izin untuk anggota grup
| izin untuk pemilik berkas: r = read, w = write, x = execute, - = tidak ada izin
tipe berkas: - = berkas normal, d = direktori, l = tautan simbolik, dan lain-lain

Perizinan dalam UNIX

Nilai Izin Daftar Direktori
0 Tidak boleh baca, tidak boleh tulis, tidak boleh eksekusi ---
1 Tidak boleh baca, tidak boleh tulis, boleh eksekusi --x
2 Tidak boleh baca, boleh tulis, tidak boleh eksekusi -w-
3 Tidak boleh baca, boleh tulis, boleh eksekusi -wx
4 Boleh baca, tidak boleh tulis, tidak boleh eksekusi r--
5 Boleh baca, tidak boleh tulis, boleh eksekusi r-x
6 Boleh baca, boleh tulis, tidak boleh eksekusi rw-
7 Boleh baca, boleh tulis, boleh eksekusi rwx

Perizinan secara simbolik

Opsi Huruf Representasi
(siapa) u Pengguna (User)
(siapa) g Pemilik grup (Group owner)
(siapa) o Lainnya (Other)
(siapa) a Semua (All)
(aksi) + Menambahkan izin
(aksi) Menghapus izin
(aksi) = Menetapkan izin secara eksplisit
(izin) r Baca (Read)
(izin) w Tulis (Write)
(izin) x Eksekusi (Execute)
(izin) t Sticky bit
(izin) s Menetapkan UID atau GID

Contoh:

  • blok pengguna dari akses FILE:
    % chmod 700 FILE
    % chmod go= FILE
  • hapus izin tulis grup dan “dunia” pada FILE, dan tambah izin eksekusi untuk semua orang:
    % chmod 755 FILE
    % chmod go-w,a+x FILE

File flags untuk menambah keamanan

Sebagai tambahan pada perizinan berkas, FreeBSD mendukung penggunaan file flags. Flag meningkatkan tingkat keamanan dan kontrol atas berkas, tapi tidak atas direktori. Dengan file flags, root bahkan dapat dicegah dari menghapus atau mengubah berkas. Contoh:

  • Mengizinkan system undeletable flag pada berkas file1:
    # chflags sunlink file1
  • Untuk mematikan system undeletable flag, tambahkan prefiks “no”:
    # chflags nosunlink file1
  • Untuk melihat flags dari sebuah berkas:
    # ls -lo file1

Perizinan setuid, setgid, dan sticky

  • Untuk menetapkan izin setuid pada sebuah berkas, gunakan chmod dengan prefiks angka empat (4):
    # chmod 4755 suidexample.sh
  • Untuk menetapkan izin setgid pada sebuah berkas, gunakan chmod dengan prefiks angka dua (2):
    # chmod 2755 sgidexample.sh
  • Sticky bit ditetapkan pada sebuah direktori, berguna untuk mengizinkan penghapusan berkas hanya oleh pemilik berkas. Hal ini berguna untuk mencegah penghapusan berkas dalam direktori publik, seperti /tmp, oleh pengguna yang bukan pemilik berkas. Untuk menetapkan izin ini, gunakan chmod dengan prefiks angka satu (1):
    # chmod 1777 /tmp

    Untuk melihat perizinan sticky bit, gunakan perintah:

    # ls -al / | grep tmp

Access Control Lists (ACL)

Secara default, dukungan ACL dinonaktifkan pada semua partisi atau titik-titik mount. Kita dapat memverifikasikannya dengan melihat tabel mounting:

Misalkan kita ingin mengaktifkan ACL pada partisi /usr. Hal yang pertama dilakukan adalah melakukan unmount partisi tersebut. Unmount hanya bisa dilakukan dalam single-user mode. Perintah untuk langsung boot ke single-user mode adalah:

# shutdown now

Unmount /usr, aktifkan dukungan ACL, dan mount kembali /usr:

Seperti kita lihat, dukungan ACL pada titik mount /usr sekarang sudah aktif. Sekarang reboot ke multi-user mode:

# shutdown -r now

Menggunakan ACL

Untuk melihat informasi ACL pada file.txt, gunakan getfacl:

Seperti kita lihat, belum ada yang istimewa dari perizinan tersebut. Misalkan kita batasi akses membaca untuk semua orang, namun mengizinkan pemilik dan csh untuk membaca:

# setfacl -m u:csh:r,o:: file.txt

Kita dapat melihat efeknya pada daftar perizinan biasa:

Ada tanda tambah (+) pada akhir daftar perizinan. Hal ini mengindikasikan bahwa ASL ditetapkan untuk berkas/direktori tersebut. Sekarang kita verifikasi apakah ACL yang telah ditetapkan sudah benar:

Menghapus ACL

Untuk menghapus seorang pengguna dari daftar, gunakan perintah:

# setfacl -n -x u:csh: file.txt

Izin csh sekarang telah dihapus. Sekarang misalkan kita ingin menonaktifkan ACL dari berkas, gunakan perintah:

# setfacl -bn file.txt

Penegakan Kebijakan Kata Sandi

Dalam FreeBSD, panjang kata sandi, kekuatan kata sandi, dan kompleksitas kata sandi dapat diimplementasikan menggunakan Pluggable Authentication Modules (PAM). Modul ini ditegakkan ketika pengguna mengganti kata sandinya.
Untuk mengkonfigrasikan modul ini, kita harus menjadi superuser dan hapus simbol komentar pada baris yang berisi pam_passwdqc.so dalam /etc/pam.d/passwd. Kemudian, ubah baris tersebut agar sesuai dengan kebijakan kata sandi, misalnya:

password        requisite       pam_passwdqc.so         min=disabled,disabled,disabled,12,10 similar=deny retry=3 enforce=users

min=N0,N1,N2,N3,N4       where N0>N1>N2>N3>N4

  • N0 digunakan untuk kata sandi yang terdiri dari karakter-karakter dari satu kelas karakter.
  • N1 dan N2 digunakan untuk kata sandi yang terdiri dari karakter-karakter dari dua kelas karakter. N2 digunakan untuk passphrasepassphrase harus terdiri dari kata-kata tertentu.
  • N3 dan N4 digunakan untuk kata sandi yang terdiri dari karakter-karakter dari tiga dan empat kelas karakter.
  • Kelas karakter: angka, huruf kecil, huruf kapital, dan karakter lain. Ketika menghitung banyaknya kelas karakter, huruf kapital yang digunakan sebagai karakter pertama dan angka yang digunakan sebagai karakter terakhir tidak akan dihitung.

Sebahian besar kebijakan kata sandi adalah jika kata sandi akan kadaluarsa setelah beberapa hari. Untuk mengatur waktu hidup kata sandi dalam FreeBSD, tetapkan passwordtime untuk kelas login pengguna dalam /etc/login.conf:

#       :passwordtime=90d:\

Misalkan kita ingin waktu hidup kata sandi adalah 90 hari, hapus simbol komentar pada baris tersebut, simpan, dan jalankan:

cap_mkdb /etc/login.conf

Untuk mengatur tanggal kadaluarsa pada pengguna secara individu, gunakan perintah berikut:

# pw usermod -p 30-apr-2015 -n username
Referensi:
  1. Stallings, William, dan Lawrie Brown. Computer Security: Principles and Practice. Pearson, edisi ke-2, 2012.
  2. https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/index.html
  3. http://freeengineer.org/learnUNIXin10minutes.html
  4. http://www.bsdguides.org/2005/working-with-acls/

Hardening FreeBSD 10.1 (2)

Pada artikel bagian kedua ini, akan dibahas teknik-teknik dasar untuk melakukan langkah kedua yaitu menonaktifkan servis, aplikasi, dan protokol yang tidak perlu.

Menampilkan daftar port yang terbuka

Untuk menampilkan port apa saja yang terbuka, kita dapat menggunakan netstat:

Contoh tersebut menunjukkan bahwa port TCP 22 (ssh) dan 25 (smtp) mendengar pada mesin, juga syslogd mendengar pada port 514 (UDP).
Jika kita punya sebuah proses yang sedang mendengarkan dan kita tidak yakin proses apa yang membuka port, kita dapat menggunakan sockstat untuk menampilkan daftar socket yang terbuka.

Konfigurasi servis

Gunakan rc.conf untuk mengkonfigurasikan mulainya servis secara default, serta naskah awal package lokal yang bisa ditemukan di /usr/local/etc/rc.d.

Sekarang akan dibahas beberapa servis yang umum digunakan dan bagaimana mengamankannya:

  • syslogd
    syslogd secara default terhubung dengan UDP 514. Kita dapat mencegah syslogd untuk menggunakan socket jaringan dengan menambahkan baris berikut ke /etc/rc.conf:

    syslogd_flags="-ss"

    Hidupkan kembali servis syslogd untuk melihat efeknya:

    Verifikasi dengan menggunakan netstat, sekarang syslogd sudah tidak mendengar port UDP 514 lagi:

  • portmap
    portmap digunakan untuk remote procedure calls. Untuk menonaktifkan portmap tambahkan baris berikut ke /etc/rc.conf:

    portmap_enable="NO"

  • telnetd
    Semua data yang ditransfer melalui sesi telnet adalah dalam bentuk teks polos (termasuk nama pengguna dan kata sandi). Oleh karena itu, servis ini harus dinonaktifkan, caranya adalah dengan mematikan inetd seluruhnya, atau dengan menghapus baris telnetd dari /etc/inetd.conf. Dalam FreeBSD, telnetd secara default memang dinonaktifkan. Secara umum, inetd tidak mendukung satupun aplikasi karena semuanya diberi simbol komentar (#) secara default.
  • sshd
    FreeBSD (sejak versi 4.1.1) memiliki dukungan OpenSSH dan sshd sebagai pengganti dari telnetd. Sebagian besar versi OpenSSH terkini menggunakan protokol SSH versi 2. Oleh karena itu, protokol SSH versi 1 harus dinonaktifkan dengan cara menambahkan baris berikut pada /etc/ssh/sshd_config lalu menghidupkan kembali sshd:

    Protocol 2

  • inetd
    inetd didesain untuk mendengarkan koneksi pada socket tertentu. inetd digunakan untuk aplikasi populer seperti telnetd, qpopper dan ftpd. Karena kita tidak menjalankan aplikasi-aplikasi inetd tersebut, matikanlah daemon ini dengan menambahkan baris berikut ke /etc/rc.conf:

    inetd_enable="NO"

  • ftpd
    ftpd harus dinonaktifkan baik dengan mematikan inetd seluruhnya, atau dengan menghapus baris ftpd dari /etc/inetd.conf (sudah secara default).
  • smtp
    Sebaiknya kita tidak menjalankan server smtp. Sendmail incoming mail-service harus dinonaktifkan dengan menambahkan baris berikut ke /etc/rc.conf:

    sendmail_enable="NO"
REFERENSI:
  1. Stallings, William, dan Lawrie Brown. Computer Security: Principles and Practice. Pearson, edisi ke-2, 2012.
  2. https://www.dal.net/?page=Security%20Guidelines