TUTORIAL INTERAKTIF KEAMANAN APLIKASI DAN SERVER DATABASE BERBASIS OPEN SOURCE
Direktorat Sistem Informasi, Perangkat Lunak Dan Konten Direktorat Jenderal Aplikasi Telematika Departemen Komunikasi Dan Informatika 2006
KATA PENGANTAR
Kemajuan teknologi informasi yang pesat serta potensi pemanfaatannya secara luas, membuka peluang bagi pengaksesan, pengelolaan, dan pendayagunaan informasi dalam volume yang besar secara cepat dan akurat. Kenyataan telah menunjukkan bahwa penggunaan media elektronik merupakan faktor yang sangat penting dalam berbagai transaksi data nasional maupun internasional. Oleh karena itu pemanfaatan media elektronik harus dilengkapi dengan sistem keamanan yang memadai. Selama ini sistem keamanan lebih banyak terfokus pada antivirus dan keamanan jaringan, namun kurang memperhatikan kerawanan dan ancaman yang berbahaya pada aplikasi dan database server. Sistem keamanan pada aplikasi dan database server merupakan kebutuhan yang tidak dapat dihindarkan lagi. Untuk membantu masyarakat khususnya pengguna teknologi informasi dalam menangani masalah keamanan aplikasi dan server database, maka Direktorat Sistem Informasi, Perangkat Lunak dan Konten membuat ”Tutorial Interaktif Keamanan Aplikasi dan Server Database berbasis Open Source”. Buku ini disusun secara interaktif dan tahap demi tahap, sehingga pembaca dengan bantuan CD-ROM interaktif terlampir dapat langsung membuat aplikasi keamanan aplikasi dan server database yang telah disiapkan tanpa harus bertanya kepada instruktur.
Departemen Komunikasi dan Informatika akan terus memperbaiki dan mengembangkan Tutorial Interaktif ini guna memenuhi aspek keamanan informasi dalam menghadapi berbagai ancaman serangan terhadap teknologi informasi. Saran dan masukan terhadap buku ini sangat diharapkan sehingga dapat membantu untuk menyempurnakan penulisan selanjutnya. Korespondensi ditujukan ke alamat e-mail: ksi_ditsiplk@depkominfo.go.id Semoga bermanfaat! Jakarta, Desember 2006
Lolly Amalia Abdullah
Direktur Sistem Informasi, Perangkat Lunak dan Konten
DAFTAR ISI
DAFTAR ISI ............................................................................................ 3 DAFTAR GAMBAR ................................................................................. 6 ARSITEKTUR KEAMANAN APLIKASI DAN SERVER DATABASE ...... 7 SECURE SOCKET LAYER ...................................................................... 9 Instalasi Secure Socket Layer ................................................. 13 Konfigurasi Secure Socket Layer ............................................ 14 Pembuatan Certificate of Authority (CA) ............................ 18 Pembuatan Certificate Signing Request (CSR) .................... 21 Pengesahan CSR oleh Certificate Authority ........................ 23 Certificate Revocation List ..................................................... 25 REFERENSI .................................................................................. 27 FILE SERVER .................................................................................... 28 Instalasi Samba File Server ..................................................... 31 Konfigurasi Samba File Server ............................................... 31 Penggunaan File Server Pada Client Windows ..................... 37 Pengelolaan Pengguna Samba ................................................ 39 REFERENSI .................................................................................. 41 ENCRYPTED FILE SYSTEM ................................................................ 42 Instalasi Encrypted File System ............................................. 44 Penggunaan Encrypted File System ....................................... 45 Integrasi EncFS dengan sistem authentikasi ........................ 49 REFERENSI .................................................................................. 59
SECURE APPLICATION SERVER ........................................................ 60
Instalasi Apache Web Server .................................................. 61 Konfigurasi Apache Web Server ............................................. 61 Pembuatan SSL Certificate ..................................................... 64 Penggunaan Modul SSL Pada Apache2 ................................... 66 Konfigurasi Web Server dengan SSL ...................................... 67 Penggunaan Client Certificate pada Client ......................... 71 REFERENSI .................................................................................. 73 SECURE DATABASE SERVER ............................................................. 74 Instalasi MySQL Database ........................................................ 79 Konfigurasi MySQL Database .................................................. 80 Penggunaan SSL untuk koneksi client - server .................... 82 Setting Firewall dan Pembatasan Akses ............................... 85 REFERENSI .................................................................................. 87
DAFTAR GAMBAR
GAMBAR 1 - ARSITEKTUR KEAMANAN APLIKASI DAN DATABASE .......... 8 GAMBAR 2 - STRUKTUR ORGANISASI .................................................... 29 GAMBAR 3 - MANAJEMEN SSL CERTIFICATE BROWSER FIREFOX .......... 71 GAMBAR 4 - IMPORT SSL CERTIFICATE BROWSER FIREFOX .................. 72 GAMBAR 5 - ARSITEKTUR KEAMANAN KONEKSI DATABASE ................ 76
ARSITEKTUR KEAMANAN APLIKASI DAN SERVER DATABASE
`
AUTHENTICATED USER
SECURE CONNECTION
Client
FIREWALL PROTECTION
SERVER APLIKASI ` Client
USER AUTHENTICATION
SERVER DATABASE
SERVER ACCOUNT
Gambar 1 - Arsitektur Keamanan Aplikasi dan Database
SECURE SOCKET LAYER
Secure Sockets Layer (SSL) merupakan protokol kemanan (security protocol) yang biasa digunakan untuk menyampaikan informasi antara web server dan client. SSL memberikan koneksi TCP yang aman antara server dan client, serta mampu menjaga privasi dari client. SSL menggunakan metode enkripsi untuk memberikan keamanan di Internet yang dikembangkan oleh Netscape. SSL mendukung beberapa protokol enkripsi dan memberikan autentikasi client dan server. SSL beroperasi pada layer transpor, menciptakan saluran enkripsi yang aman untuk data, dan dapat mengenkripsi banyak tipe data. Hal ini dapat dilihat ketika mengunjungi site yang aman untuk melihat dokumen online dengan aman dengan data Communicator, dan berfungsi sebagai dasar komunikasi yang aman dengan Communicator, juga Netscape Communication lainnya. SSL dapat digunakan bersama dengan protokol pada layer yang lebih tinggi, termasuk HTTP, File Transfer Protocol (FTP), dan Net News Transfer Protocol (NNTP). Hampir semua web browser dan web server mendukung SSL, biasanya penggunaan SSL adalah untuk mengamankan koneksi antara server dan client. SSL menghasilkan koneksi yang aman melalui halaman web yang bisa diakses melalui HTTP server. Operasi dari SSL bersifat transparan bagi user, kecuali jika protokol HTTP digantikan enkripsi
dengan HTTPS. SSL memungkinkan client untuk memeriksa identitas server sebelum mengirimkan informasi. SSL juga mencegah pihak ketiga yang berusaha mengintip pesan karena hanya peralatan yang dipercaya yang mampu mengakses data yang dilindungi. Dalam prosesnya SSL SSL memungkinkan server) server yang telah
mengaktifkan client),
(SSL-enable juga
mengautentikasikan client untuk
dirinya ke client yang telah mengaktifkan SSL juga (SSL-enable sebaliknya memungkinkan mengautentikasikan dirinya ke server, dan mengijinkan kedua mesin (komputer) untuk berkomunikasi dengan data yang terenskripsi. Data yang akan dikirim, dipecahkan kedalam blok-blok yang teratur, kemudian dikompres jika perlu, menerapkan MAC, dienkripsi, dan hasilnya dikirimkan. Di tempat tujuan, data didekripsi, verifikasi, dekompres, dan disusun kembali. Hasilnya dikirimkan ke klien di atasnya. SSL hanya mengenkripsikan data yang dikirim lewat http. Pada saat pengiriman data mulai dilakukan, klien dan server membuat dan mempertukarkan untuk mengenkripsi kunci data rahasia, yang yang akan dipergunakan
dikomunikasikan. Meskipun sesi antara klien dan server „diintip‟
pihak lain, namun data yang terlihat sulit untuk dibaca karena sudah dienkripsi. SSL mendukung kriptografi public key, sehingga server dapat melakukan autentikasi dengan metode yang sudah dikenal umum seperti RSA dan Digital Signature Standard (DSS). Selain itu SSL dapat melakukan verifikasi integritas sesi yang sedang berjalan dengan menggunakan algoritma digest seperti MD5 dan SHA. Hal ini menghindarkan pembajakan suatu sesi. Komponen – komponen yang ada pada implementasi Secure Socket Layer antara lain : o Certificate Authority (CA) CA adalah sebuah entitas pada Public Key Infrastructure (PKI) yang berfungsi untuk melakukan legalisasi terhadap Certificate SSL yang akan digunakan pada suatu organisasi. o Certificate Signing Request (CSR) CSR adalah sebuah permintaan dengan format PKCS10 yang merupakan sebuah salinan dari certificate yang belum disahkan. Informasi yang terdapat pada sebuah CSR antara lain : 1. Informasi Organisasi seperti nama organisasi, negara, propinsi, kota dan lain sebagainya. 2. Public Key dari entitas yang akan menggunakan certificate tersebut seperti web server, email server, vpn server dan lain sebagainya.
Instalasi Secure Socket Layer
Implementasi Secure Socket Layer yang digunakan pada tutorial ini adalah OpenSSL (http://www.openssl.org). root@WebServer:~# apt-get install openssl
Konfigurasi Secure Socket Layer
name_opt cert_opt = ca_default # Subject Name options = ca_default # Certificate field options
# Extension copying option: use with caution. # copy_extensions = copy # # # # # # # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs so this is commented out by default to leave a V1 CRL. crlnumber must also be commented out to leave a V1 CRL. crl_extensions = crl_ext 365 30 sha1 no # # # # 1 tahun 1 bulan which md to use. keep passed DN ordering
default_days = default_crl_days= default_md = preserve =
default_days merupakan attribut konfigurasi openssl yang berfungsi untuk memberikan informasi jumlah hari yang akan digunakan sebagai masa aktif dari sebuah certificate. default_crl_days merupakan attribut konfigurasi openssl yang berfungsi untuk memberikan informasi jumlah hari yang akan digunakan sebagai masa aktif dari sebuah certificate revocation list. default_md merupakan attribut konfigurasi openssl yang
berfungsi untuk memberikan informasi algoritma standard yang digunakan sebagai algoritma message digest standard.
[ req_distinguished_name ] countryName countryName_default countryName_min countryName_max stateOrProvinceName
= Nama Negara (2 letter code) = ID = 2 = 2 = Nama Propinsi (full name)
stateOrProvinceName_default = DKI Jakarta localityName 0.organizationName 0.organizationName_default = Nama Lokasi (eg, city) = Nama Organisasi (eg, company) = DEPKOMINFO
countryName merupakan salah satu attribut distinguished Name (DN) yang akan digunakan pada saat pembuatan sebuah certificate. Attribut countryName berfungsi untuk memberikan informasi nama negara tempat organisasi pembuat certificate berada. countryName_default merupakan attribut yang berfungsi untuk memberikan nilai standard terhadap attribut countryName. countryName_min merupakan attribut yang berfungsi untuk mengatur jumlah karakter minimal yang harus diberikan pada saat mengisi nilai variabel countryName.
countryName_max merupakan attribut yang berfungsi untuk mengatur jumlah karakter maksimal yang harus diberikan pada saat mengisi nilai variabel countryName. stateOrProvinceName merupakan attribut yang berfungsi untuk memberikan informasi nama propinsi tempat organisasi pembuat certificate berada. stateOrProvinceName_default attribut yang berfungsi untuk menentukan nilai umum yang dapat digunakan pada mengisi nilai variabel stateOrProvinceName. localityName merupakan attribut yang berfungsi untuk saat
memberikan informasi nama lokasi tempat organisasi pembuat certificate berada. organizationName merupakan attribut yang berfungsi untuk memberikan informasi nama organisasi pembuat certificate. organizationName_default merupakan attribut yang berfungsi untuk memberikan informasi nilai umum yang dapat digunakan sebagai nama organisasi pembuat certificate.
organizationalUnitName = Nama Unit Organisasi organizationalUnitName_default = SIPLK commonName commonName_max emailAddress emailAddress_max # SET-ex3 = Common Name (eg, YOUR name) = 64 = Alamat Email = 64 = SET extension number 3
organizationalUnitName untuk memberikan pembuat certificate.
merupakan attribut yang berfungsi nama unit divisi organisasi
informasi
organizationalUnitName_default
merupakan
attribut
yang
berfungsi untuk memberikan informasi nilai umum yang dapat digunakan pada variabel organizationalUnitName. commonName merupakan attribut yang berfungsi untuk
memberikan informasi nama pembuat certificate atau pada umumnya variabel tersebut dapat disamakan dengan nama host sebuah komputer. commonName_max merupakan attribut yang berfungsi untuk memberikan informasi nilai maksimum yang dapat diberikan untuk variabel commonName. emailAddress merupakan attribut yang berfungsi untuk
memberikan informasi alamat email pembuat certificate.
Pembuatan Certificate of Authority (CA)
Langkah pertama adalah membuat sebuah RSA key dengan panjang key yang dapat disesuaikan dengan kebutuhan.
root@server:~# openssl genrsa -des3 -out ca.key 2048 Generating RSA private key, 2048 bit long modulus .................................................. ...+++ .................................................. .+++e is 65537 (0x10001) Enter PEM pass phrase: Verifying password - Enter PEM pass phrase:
Langkah kedua adalah membuat sebuah X.509 certificate berdasarkan key yang telah dibuat pada langkah sebelumnya.
root@server:~/CA# openssl req -new -x509 -days 3650 key ca.key -out ca.crt
Masukkan kunci pelindung yang telah diberikan kepada private key.
Using configuration from /usr/share/ssl/openssl.cnf Enter PEM pass phrase:
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----Nama Negara (2 letter code) [ID]:ID Nama Propinsi (full name) [DKI Jakarta]:DKI Jakarta Nama Lokasi (eg, city) [Jakarta Pusat]:Jakarta Pusat Nama Organisasi (eg, company) [DEPKOMINFO]:DEPKOMINFO Nama Unit Organisasi (eg, section) []:Certificate of Authority Common Name (eg, your name or your server's hostname) []:depkominfo.go.id Alamat Email []:admin@depkominfo.go.id
Nama Negara (Country Name) merupakan variabel yang akan digunakan untuk menyimpan sebuah nilai attribut C pada certificate SSL. Nama Propinsi (Province Name) merupakan variabel yang akan digunakan untuk menyimpan sebuah nilai attribut ST pada certificate SSL.
Nama Kota (Location Name) merupakan variabel yang akan digunakan untuk menyimpan sebuah nilai attribut L pada Certificate SSL. Nama Organisasi (Organization) merupakan variabel yang akan digunakan untuk menyimpan sebuah nilai attribut O pada Certificate SSL. Nama Unit Organisasi (Organization Unit) merupakan variabel yang digunakan untuk menyimpan sebuah nilai attribut OU pada Certificate SSL. Common Name merupakan variabel yang digunakan untuk menyimpan sebuah nilai attribut CN pada Certificate SSL. Pada umumnya nilai CN dialokasikan untuk nama host dari suatu mesin komputer atau nama pemegang certificate SSL. Email Address merupakan variabel yang digunakan untuk menyimpan nilai attribut E pada Certificate SSL. Pada umumnya nilai E akan digunakan untuk melakukan verifikasi jika certificate tersebut digunakan untuk mengamankan sebuah konten email dengan metode SMIME ( Secure Multipurpose Internet Message Extension ).
Pembuatan Certificate Signing Request (CSR)
Langkah pertama dalam membuat Certificate Signing Request (CSR) adalah dengan membuat sebuah key yang mempunyai panjang key sesuai dengan yang dibutuhkan. Pada saat pembuatan kunci telah selesai dilakukan, sistem akan menanyakan kata yang dijadikan sebagai pelindung apabila kunci tersebut digunakan.
root@server:~/CA# openssl genrsa -des3 -out certreq.key 2048 Generating RSA private key, 2048 bit long modulus .................................................. ...+++ .................................................. .+++ e is 65537 (0x10001) Enter PEM pass phrase: Verifying password - Enter PEM pass phrase:
Langkah selanjutnya adalah membuat sebuah Certificate Signing Request (CSR) berdasarkan key yang telah dibuat dengan menjalankan perintah sebagai berikut:
root@server:~/CA# openssl req –new –key certreq.key –out cert.csr
Selanjutnya sistem akan menanyakan kata pelindung yang digunakan oleh kunci privat.
Using configuration from /etc/ssl/openssl.cnf Enter PEM pass phrase:
Apabila nilai yang diberikan sesuai dengan kata pelindung dari kunci privat tersebut maka sistem akan menanyakan beberapa informasi yang dibutuhkan untuk membuat sebuah Certificate Signing Request.
Nama Negara (2 letter code) [ID]:ID Nama Propinsi (full name) [DKI Jakarta]:DKI Jakarta Nama Lokasi (eg, city) [Jakarta Pusat]:Jakarta Pusat Nama Organisasi (eg, company) [DEPKOMINFO]:DEPKOMINFO Nama Unit Organisasi (eg, section) []:Direktorat Sistem Informasi Perangkat Lunak dan Konten Common Name (eg, your server's hostname) []:www.depkominfo.go.id
Alamat Email []:webmaster@depkominfo.go.id
Pengesahan CSR oleh Certificate Authority
Pengesahan CSR oleh Certificate of Authority berfungsi agar certificate tersebut dapat digunakan sebagai alat authentikasi dengan certificate lain yang disahkan oleh CA yang sama. Hal tersebut dapat diimplementasikan pada authentikasi apache web server dengan menggunakan mekanisme client certificate authentication.
root@server:~# openssl x509 -req -in cert.csr -out cert.crt -sha1 –CA ca.crt -CAkey ca.key -CAcreateserial -days 3650
-req merupakan parameter untuk memberikan informasi kepada openssl untuk melakukan pengelolaan terhadap Certificate Signing Request (CSR) -in merupakan parameter untuk memberikan informasi kepada openssl untuk menggunakan file Certificate Signing Request yang ingin ditandatangani. -out merupakan parameter untuk memberikan informasi kepada openssl agar menyimpan hasil Certificate Signing Request yang sudah ditandatangani pada suatu file.
-sha1 merupakan parameter untuk memberikan informasi kepada openssl agar menggunakan algoritma SHA1 sebagai algoritma hash. -CA merupakan parameter untuk memberikan informasi lokasi file Certificate Authority yang akan digunakan untuk menandatangani sebuah Certificate Signing Request. -CAKey Authority. -CACreateserial merupakan parameter yang digunakan untuk memberikan tidak -days merupakan parameter yang digunakan untuk memberikan informasi jumlah hari yang diberikan sebelum Certificate SSL tersebut tidak dapat digunakan. informasi apakah pada saat proses penandatanganan terjadi, sebuah nomor seri akan dibuat atau merupakan parameter yang digunakan untuk
memberikan informasi lokasi file kunci private dari Certificate
Certificate Revocation List
Certificate Revocation List adalah salah satu komponen Public Key Infrastructure yang berfungsi sebagai acuan untuk melakukan pencabutan validasi terhadap sebuah certificate SSL. CRL merupakan suatu daftar yang berisi nomor seri certificate SSL yang ingin dihilangkan status validitasnya. Pada umumnya sebuah CRL disimpan pada sebuah application server maupun sebuah server direktori yang dapat diakses oleh publik. Selain menggunakan CRL, hal yang dapat mengakibatkan sebuah certificate SSL tidak lagi dapat digunakan adalah jika attribut expire date dari certificate tersebut telah lewat. Definisi revocation atau pencabutan hak akses menurut RFC 3280 antara lain: HOLD, merupakan status yang dapat diubah sewaktu – waktu. Pada umumnya fungsi tersebut digunakan untuk melakukan pencabutan akses secara sementara. Contoh: jika seorang user secara tidak sengaja menghilangkan private key yang dimiliki maka user tersebut tidak dapat menggunakan certificate tersebut. Jika pada kasus tersebut sang user menemukan kembali private key yang hilang dan terdapat indikasi bahwa tidak ada satupun yang menggunakan private key tersebut maka sistem
dapat memberikan kembali status aktif yang pernah dicabut. REVOKED, merupakan status dari sebuah certificate yang sudah tidak dapat diubah – ubah. Contoh yang mungkin terjadi adalah jika sebuah Certificate Authority secara tidak sengaja atau melakukan kesalahan dalam memberikan authority dari certificate kepada user yang salah maka CRL dapat digunakan untuk menghilangkan fungsi atau validitas dari certificate tersebut.
REFERENSI
1. Certificate Revocation List – Wikipedia, the free encyclopedia. http://en.wikipedia.org/wiki/CRL 2. Certificate Signing Request – Wikipedia, the free encyclopedia. http://en.wikipedia.org/wiki/CSR 3. 4. 5. Certificate Authority – Wikipedia, the free encyclopedia. http://en.wikipedia.org/wiki/CA Secure Socket Layer – Wikipedia, the free encyclopedia. http://en.wikipedia.org/wiki/SSL Emery, Van. Van's Apache SSL/TLS mini-HOWTO . 11 November 2006. http://www.vanemery.com/Linux/Apache/openSSL.html
FILE SERVER
Selain berfungsi sebagai domain controller, samba juga dapat digunakan sebagai File server, dimana file server digunakan sebagai perantara berbagi file/direktori antara Linux dengan Microsoft Windows. Sharing file bisa dengan mudah dilakukan dengan tingkat keamanan yang relatif baik. Berikut ini adalah skenario penggunaan samba sebagai file server pada sebuah organisasi.
Kepala
Kabag Keuangan
Kabag Personalia
Kabag Operational
Staf Keuangan
Staf Personalia
Staf Operational
Direktori Keuangan
Direktori Personalia
Direktori Operational
Gambar 2 - Struktur Organisasi
Skenario yang yang akan dibuat adalah sebagai berikut : seorang kepala mempunyai akses penuh terhadap semua direktori yang di share setiap kabag mempunyai akses penuh pada direktori masingmasing dan mepunyai akses read dan execute untuk direktori lainnya setiap staf mempunyai akses penuh pada direktori masingmasing
Instalasi Samba File Server
root@FileServer:~# apt-get install samba samba-common
Konfigurasi Samba File Server
Lalu tambahkan pada file konfigurasi yang terdapat pada /etc/samba/smb.conf sesuai dengan entry berikut:
[global] ## SAMBA sebagai Domain Controller workgroup = DEPKOMINFO # nama domain netbios name = DCSAMBA # nama netbios SAMBA encrypt passwords = yes domain logons = yes security = domain os level = 35 # lebih besar dari 32 domain master = yes local master = yes preferred master = yes server string = SAMBA sebagai File Server enable privileges = yes
workgroup adalah attribut yang berfungsi untuk memberikan informasi nama domain yang akan digunakan oleh domain controller.
netbios name adalah attribut samba yang berfungsi untuk memberikan informasi nama dari komputer domain controller. encrypt passwords adalah attribut samba yang berfungsi untuk memberikan informasi apakah password yang dikirimkan antara client dan domain controller akan dienkripsi atau tidak. domain logons adalah attribut samba yang berfungsi untuk memberikan informasi apakah diperlukan mekanisme authentikasi pada saat seorang user aktif pada sebuah domain. security adalah attribut samba yang berfungsi untuk
memberikan informasi konteks security yang digunakan pada saat seorang user ingin aktif pada sebuah domain. domain master adalah attribut samba yang berfungsi untuk memberikan informasi apakah server samba tersebut akan aktif sebagai sebuah primary domain controller atau tidak. local master adalah attribut samba yang berfungsi untuk memberikan informasi apakah server samba tersebut akan menjadi domain controller bagi dirinya sendiri atau tidak.
[shares] comment = All Users Share Directory path = /home/shares valid users = @users force group = users create mask = 0660 directory mask = 0771 writable = yes [dkeuangan] comment = finance share path = /home/shares/dkeuangan valid users = ceo @keuangan force group = users create mask = 0660 directory mask = 0771 writable = yes [dpersonalia] comment = personalia share path = /home/shares/dpersonalia valid users = ceo @personalia force group = users create mask = 0660 directory mask = 0771 writable = yes [doperasional] comment = operasional share path = /home/shares/doperasional valid users = ceo @users force group = users create mask = 0660 directory mask = 0771 writable = yes
[doperasional]
adalah
contoh
sebuah
direktori
tempat
menyimpan file yang dapat dimanfaatkan secara khusus oleh grup user operasional. Pada saat seorang user mencoba memanfaatkan direktori tersebut untuk menyimpan file maka samba file server akan secara otomatis memeriksa apakah user tersebut mempunyai hak akses terhadap direktori. Attribut – attribut yang dapat diberikan untuk memperjelas kondisi direktori [doperasional] antara lain: o o comment, merupakan attribut yang berfungsi untuk memberikan keterangan terhadap direktori. path, merupakan attribut yang berfungsi untuk memberikan direktori. o force group, merupakan nama group yang digunakan sebagai acuan group yang mempunyai hak akses terhadap direktori tersebut. o valid users, merupakan daftar user yang dapat mempergunakan direktori tersebut untuk melakukan aktifitas. Untuk mempersingkat daftar user attribut valid users dapat mempergunakan nama group yang terdapat pada database UNIX maupun NIS (Network Information System). Simbol yang dapat menandakan service database apa yang digunakan untuk mencari data group tersebut antara lain : + , & dan @. Simbol “+” menandakan bahwa pencarian data group akan dilakukan dengan menggunakan informasi lokasi secara fisik dari
service database UNIX. Simbol “&” menandakan bahwa pencarian data group akan dilakukan dengan menggunakan service database NIS. Sedangkan simbol “@” menandakan bahwa pencarian data group akan dilakukan secara bergantian dengan pencarian pertama akan dilakukan terhadap service database NIS lalu pencarian kedua akan dilakukan dengan mempergunakan database UNIX. Namun apabila administrator ingin melakukan variasi maka dapat memberikan simbol kombinasi antara “&” dan “+” seperti “+&” maupun “&+”. o create mask, merupakan attribut yang berfungsi untuk memberikan informasi pemberian restriksi terhadap setiap file yang dibuat oleh pengguna. Restriksi tersebut akan secara otomatis dihitung dan disesuaikan antara metode pengamanan file UNIX dan Windows. Sebagai contoh create mask = 0660 akan memberikan file tersebut dapat ditulis dan dijalankan oleh user dan group user namun tidak memberikan akses apapun terhadap user lain yang tidak menjadi anggota group. o directory mask, merupakan attribut yang berfungsi untuk memberikan informasi pemberian restriksi terhadap dihitung setiap dan direktori disesuaikan yang dibuat oleh pengguna. Restriksi tersebut akan secara otomatis antara metode
pengamanan file UNIX dan Windows. Sebagai contoh directory mask = 0660 akan memberikan direktori tersebut dapat ditulis dan digunakan oleh user dan group user namun tidak memberikan akses apapun terhadap user diluar anggota group. o writable, merupakan attribut yang berfungsi untuk memberikan informasi apakah user yang mempunyai hak akses dapat melakukan penambahan yang dan hanya penghapusan file pada direktori tersebut. Attribut writable merupakan attribut memerlukan 2 jenis nilai pilihan yaitu yes atau no.
Penggunaan File Server Pada Client Windows
Gambar 3 - Penggunaan Direktori Samba Gambar diatas adalah tampilan yang timbul apabila pengguna ingin menggunakan direktori yang disimpan pada file server. Drive merupakan parameter yang dibutuhkan untuk memetakan direktori terhadap alamat drive pada komputer lokal. Folder merupakan parameter yang dibutuhkan untuk memberikan informasi direktori pada file server yang akan digunakan. Untuk mengaktifkan pemetaan direktori pada file server secara otomatis, maka aktifkan pilihan “Reconnect at logon”.
Gambar 4 - Otorisasi Penggunaan Samba
Setelah melakukan pemetaan direktori yang tersimpan pada file server terhadap direktori pada komputer lokal, maka sistem operasi akan menanyakan kombinasi username dan password yang benar. Apabila kombinasi tersebut sesuai dengan data yang tersimpan pada database samba, maka sistem operasi akan menampilkan direktori yang akan digunakan.
Pengelolaan Pengguna Samba
Pembuatan Pengguna Perintah berikut ini berfungsi untuk membuat sebuah user pada service linux. root@server:~# smbpasswd –a pengguna samba. Nama user yang ditambahkan sebaiknya disesuaikan dengan data user yang terdapat pada sistem operasi
Perubahan Password Pengguna
Perintah berikut ini berfungsi untuk melakukan perubahan terhadap password yang dimiliki oleh user samba. Jika user yang menjalankan perintah tersebut adalah user biasa maka sistem akan menanyakan password lama samba, namun apabila user yang menjalankan perintah tersebut adalah user administrator maka sistem tidak akan menanyakan password lama user. Setelah memasukkan password baru maka sistem akan menanyakan kembali password untuk melakukan konfirmasi apakah nilai tersebut merupakan password yang dimaksud. root@server:~# smbpasswd pengguna
Proses Non Aktifasi Data Pengguna Perintah dibawah ini berfungsi untuk melakukan proses non aktifasi pengguna samba. Jika seorang pengguna samba mempunyai status nonaktif maka direktori home dari user tersebut tidak dapat dilihat melalui sistem operasi windows atau samba client. root@server:~# smbpasswd –d pengguna
Proses Aktifasi Data Pengguna Perintah dibawah ini berfungsi untuk melakukan proses aktifasi pengguna samba. root@server:~# smbpasswd -e pengguna
Penghapusan Pengguna Perintah berikut ini berfungsi untuk menghapus pengguna samba dari database. Proses penghapusan hanya berpengaruh terhadap database saja sehingga direktori home user tersebut tidak akan terhapus dari sistem operasi. root@server:~# smbpasswd -x pengguna
REFERENSI 1. Auer, Karl . Samba Configuration Manual Page
(smb.conf). 2. SAMBA sebagai File Server dan Print Server Windows. http://ariya.pandu.org/articles.htm
ENCRYPTED FILE SYSTEM
Enkripsi adalah sebuah teknik untuk melakukan perubahan isi data menjadi bentuk yang tidak dapat dibaca tanpa menggunakan prosedur – prosuder yang sesuai. Teknik tersebut digunakan untuk melakukan pengamanan terhadap data baik data yang dikirimkan melalui jaringan komputer maupun data yang disimpan pada sebuah hard disk. Teknologi yang dapat memberikan fasilitas untuk melindungi data yang tersimpan pada sebuah hard disk adalah Encrypted File System.
Instalasi Encrypted File System
root@server:~# apt-get install encfs fuse-utils libfuse2 librlog1c2a Preconfiguring packages ... Selecting previously deselected package libfuse2. (Reading database ... 60050 files and directories currently installed) Unpacking libfuse2 (from .../libfuse2_2.4.20ubuntu3_i386.deb) ... Selecting previously deselected package libbrlog1c2a. Unpacking librlog1c2a (from .../librlog1c2a_1.3.71_i386.deb) ... Selecting previously deselected package fuseutils. Unpacking fuse-utils (from .../fuse-utils_2.4.20ubuntu3_i386.deb) ... Selecting previously deselected package encfs. Unpacking encfs (from .../encfs_1.2.5-11_i386.deb) ... Setting up libfuse2 (2.4.2-0ubuntu3) ... Setting up librlog1c2a (1.3.7-1) ... Setting up fuse-utils (2.4.2-0ubuntu3) ... Creating config file /etc/default/fuse-utils with new version Adding group `fuse` (116) ... Done * Reloading kernel event manager ... Setting up encfs (1.2.5-1-1) ... [ ok ]
Penggunaan Encrypted File System
Untuk melakukan proteksi terhadap direktori agar tidak dapat secara umum dibaca oleh orang lain, maka terlebih dahulu harus dipersiapkan sepasang direktori yang berfungsi untuk menyimpan file yang mempunyai bentuk terenkripsi dan normal. Misalkan pengguna akan menyimpan seluruh file yang berbentuk normal pada direktori ~/krip/dekrip, maka untuk memetakan file tersebut diperlukan direktori lain yaitu ~/krip/enkrip. Berikut ini adalah langkah awal untuk mempergunakan encrypted file system. root@server:~# mkdir –p ~/krip/enkrip [enter] root@server:~# mkdir –p ~/krip/dekrip [enter]
Setelah sepasang direktori untuk menyimpan file tersebut berhasil dibuat maka hal yang harus dilakukan selanjutnya adalah menghubungkan kedua direktori tersebut dengan menggunakan program encfs. Apabila kedua direktori tersebut berhasil dihubungkan dengan menggunakan program encfs, maka seluruh file yang dimasukkan kedalam direktori ~/krip/dekrip akan mengalami proses enkripsi dan disimpan pada direktori ~/krip/enkrip. Berikut ini adalah langkah untuk menghubungkan kedua direktori tersebut.
root@server:~# encfs ~/krip/enkrip ~/krip/dekrip [enter] Creating new encrypted volume. Please choose from one of the following options: Enter “x” for expert configuration mode, Enter “p” for pre-configured paranoia mode, Anything else, or an empty line will select standard mode. ?> [enter]
Dengan hanya memberikan input kosong maka konfigurasi yang digunakan pada tutorial ini adalah konfigurasi standard yang menggunakan algoritma blowfish untuk mengacak isi dari setiap berkas yang tersimpan. Program akan menanyakan password yang ingin digunakan untuk melindungi data direktori kepada pengguna dan hal yang harus diperhatikan adalah JANGAN MELUPAKAN direktori password yang digunakan tidak ada untuk melindungi untuk tersebut karena mekanisme
menyelamatkan data yang telah mengalami pengacakan kecuali dengan password.
Standard configuration selected. Configuration finished. The filesystem to be created has the following properties: Filesystem cipher: “ssl/blowfish”, version 2:1:1 Filename encoding: “nameio/block”, version 3:0:1 Key Size: 160 bits Block Size: 512 bytes Each file contains 8 byte header with unique IV data. Filenames encoded using IV chaining mode. Now you will need to enter a password for your filesystem. You will need to remember this password, as there is absolutely no recovery mechanism. However, the password can be changed later using encfsctl New Encfs Password: [Masukkan kata rahasia anda disini] Verify Encfs Password: [Masukkan kata rahasia anda disini]
Apabila langkah – langkah diatas telah dilakukan dengan benar maka secara otomatis direktori ~/krip/enkrip akan terhubung dengan direktori ~/krip/dekrip. Untuk memeriksa apakah langkah – langkah diatas berhasil dilakukan maka lakukan perintah berikut.
root@server:~# mount
Lalu periksa apakah entry berikut ini muncul pada layar, apabila entry berikut ini muncul maka langkah – langkah diatas berhasil dilakukan.
encfs on /root/krip/dekrip type fuse (rw, nosuid, nodev, default_permissions)
Untuk melakukan pemeriksaan kebeneran dari langkah – langkah yang telah dilakukan maka buatlah sebuah file dengan isi berbentuk plain text pada direktori /root/krip/dekrip. Setelah file tersebut sukses dibuat maka sistem akan secara otomatis membuat sebuah file dengan nama yang acak dan isi yang teracak pada direktori /root/krip/enkrip. Berikut ini adalah contoh hasil penggunaan encrypted file system yang berhasil dilakukan oleh penulis.
root@server:~# echo “Departemen Komunikasi dan Informatika” > /root/krip/dekrip/filerahasia Lalu lihat pada direktori /root/krip/enkrip/ root@server:~# ls –al /root/krip/enkrip/ cORwUt#\.Yha^7(w,G%7Ba*
Integrasi EncFS dengan sistem authentikasi
Penggunaan Encrypted File System hanya dapat dilakukan secara manual sehingga proses enkripsi dan dekripsi harus selalu dilakukan oleh user pada saat user yang bersangkutan ingin membuka dan melindungi file yang bersangkutan. Untuk mengurangi proses – proses yang harus dijalankan secara manual, sistem harus dikonfigurasi sehingga pada saat user yang bersangkutan melakukan proses login seluruh file yang dimiliki oleh user tersebut secara otomatis dapat dibaca. Sebaliknya pada saat user tersebut logout maka file yang dimiliki oleh user yang bersangkutan secara otomatis dilindungi oleh sistem. root@server:~# apt-get install libpam-encfs
Penanganan Authentikasi Encrypted File System Penggunaan encrypted file system sebaiknya dimulai pada saat user melakukan proses login atau authentikasi pada saat pertama kali ingin menggunakan sistem operasi. Untuk mengatur sinkronisasi antara proses authentikasi sistem operasi dan authentikasi encrypted file system yang berpengaruh terhadap bentuk data yang dimiliki oleh masing – masing user, maka dibutuhkan koordinasi dengan menggunakan Pluggable Authentication Module. Secara teknis, sistem operasi akan melakukan authentikasi terhadap username dan password yang diberikan dan apabila kombinasi kedua data tersebut sesuai dengan yang tercantum pada database maka sistem operasi akan memberikan data tersebut kepada Encrypted File System. Setelah mendapatkan data username dan password, encrypted file system akan menggunakan kedua data tersebut untuk melakukan enkripsi dan dekripsi terhadap direktori home yang dimiliki oleh masing masing user.
Untuk menggunakan encrypted file system pada saat user melakukan proses authentikasi maka ubahlah file /etc/pam.d/login dan tambahkan konfigurasi seperti berikut ini:
auth required pam_shells.so auth required pam_script.so expose=1 auth sufficient pam_unix.so use_first_pass auth sufficient pam_ldap.so use_first_pass auth required pam_script.so onauth=/etc/security/onauth.failed auth required pam_deny.so
Script PAM Encrypted File System Berikut ini adalah potongan dari script PAM Encrypted File System.
#!/bin/bash retcode=0; uid=$1 service=$2 authtok=$3 if [ -z "$authtok" ]; then authtok=$PAM_AUTHTOK fi; userproperties=$(getent passwd | grep -m 1 -E "^$uid") if [-z "$userproperties" ]; then # userproperties not found: something wrong echo "User not found." exit fi; homedir=$(echo $userproperties | cut -d ":" -f 6); gidnr=$(echo $userproperties | cut -d ":" -f 4); uidnr=$(echo $userproperties | cut -d ":" -f 3); if [ -d /var/lib/encfs ]; then # create a safe if [ ! -d /var/lib/encfs/$uid ]; then install -m700 -o $uidnr -g $gidnr -d /var/lib/encfs/$uid fi; if [! -d /var/lib/encfs/$uid/encrypted]; then install -m700 -o $uidnr -g $gidnr –d /var/lib/encfs/$uid/encrypted fi; if [ ! -d /var/lib/encfs/$uid/unencrypted ]; then install -m700 -o $uidnr -g $gidnr -d /var/lib/encfs/$uid/unencrypted fi; if [ ! -d /var/lib/encfs/$uid/run ]; then install -m700 -o $uidnr -g $gidnr -d /var/lib/encfs/$uid/run fi;
# test the encrypted directory is not already # mounted # if [ -z "$(mount | grep -w /var/lib/encfs/$uid/unencrypted )" ]; then # create a password-provide-program cd /var/lib/encfs/$uid md5authsum=$(echo $authtok | md5sum | cut -d " " -f 1) echo "$md5authsum" > run/tmp echo "$md5authsum" >> run/tmp chown $uidnr:$gidnr run/tmp rm -rf encrypted/* rm -f encrypted/.encfs* cat run/tmp | encfs -S /var/lib/encfs/$uid/encrypted /var/lib/encfs/$uid/unencrypted -- -o allow_root 1>>/dev/null fi; # # this is what's all about: storing the credentials # in a file in this case the password # if [ -n "$(mount | grep -w /var/lib/encfs/$uid/unencrypted )" ]; then cd /var/lib/encfs/$uid/unencrypted/ if [ -f password.tmp ]; then rm password.tmp fi; echo $authtok > password.tmp fi; fi;
#!/bin/bash uid=$1 service=$2 userproperties=$(getent passwd | grep -m 1 -E "^$uid") if [ -z "$userproperties" ]; then # # userproperties not found: something wrong # echo "User not found." exit fi; homedir=$(echo $userproperties | cut -d ":" -f 6); gidnr=$(echo $userproperties | cut -d ":" -f 4); uidnr=$(echo $userproperties | cut -d ":" -f 3); # # this script is run when the authentication failed # a safe encrypted is still created # so it's important to remove this safe again # if [ -d /var/lib/encfs ]; then if [ -d /var/lib/encfs/$uid/unencrypted ]; then # # test the encrypted directory is not already mounted # if [ -n "$(mount | grep -w /var/lib/encfs/$uid/unencrypted )" ]; then if [ $(w -h $uid | wc -l) -eq 0 ]; then # # this user is not logged in on more tty's # just remove everything and umount the encrypted directory # rm -rf /var/lib/encfs/$uid/unencrypted/* fusermount -u /var/lib/encfs/$uid/unencrypted rm -rf /var/lib/encfs/$uid/encrypted/* rm -f /var/lib/encfs/$uid/encrypted/.encfs* else
# # this user is still logged in # rm -f /var/lib/encfs/$uid/unencrypted/password.tmp fi; fi; if [ -z "$(mount | grep –w /var/lib/encfs/$uid/unencrypted )" ]; then rm -rf /var/lib/encfs/$uid/encrypted/* rm -f /var/lib/encfs/$uid/encrypted/.encfs* rm -rf /var/lib/encfs/$uid/unencrypted/* fi; fi; fi;
Pengaturan Sesi Encrypted File System Pada saat menggunakan Encrypted File System, sistem operasi linux harus melakukan pengelolaan terhadap seluruh sesi yang dilakukan oleh pengguna pada saat pengguna tersebut dalam keadaan login. Pengelolaan tersebut bertujuan untuk melakukan sinkronisasi terhadap aksi – aksi yang dilakukan selama sesi login masih berlaku. Untuk mengatur sesi sistem operasi dalam keadaan login maka ubahlah file /etc/pam.d/login dan tambahkan konfigurasi seperti berikut:
session
required
pam_mkhomedir.so pam_motd.so pam_mail.so empty pam_lastlog.so pam_env.so pam_script.so pam_unix.so pam_ldap.so
session required session optional dir=/var/mail session session session session session optional required required required required
#!/bin/bash uid=$1 service=$2 userproperties=$(getent passwd | grep -E "^$uid") if [ -z "$userproperties" ]; then # # userproperties not found: something wrong # echo "User not found." exit fi; homedir=$(echo $userproperties | cut -d ":" -f 6); gidnr=$(echo $userproperties | cut -d ":" -f 4); uidnr=$(echo $userproperties | cut -d ":" -f 3); # # this script is run when the authentication failed # a safe encrypted is still created # so it's important to remove this safe again # if [ -d /var/lib/encfs ]; then if [ -d /var/lib/encfs/$uid/unencrypted ]; then # # test the encrypted directory is already mounted # if [ -n "$(mount | grep -w /var/lib/encfs/$uid/unencrypted )" ]; then if [ $(w -h $uid | wc -l) -eq 0 ]; then rm -rf /var/lib/encfs/$service.$uid/unencrypted/* fusermount -u /var/lib/encfs/$uid/unencrypted rm -rf /var/lib/encfs/$uid/encrypted/* rm -f /var/lib/encfs/$uid/encrypted/.encfs* fi; else rm -rf /var/lib/encfs/$uid/encrypted/* fi;
if [ -d /etc/session.d/pam/onsessionclose ]; then for script in /etc/session.d/pam/onsessionclose/*.sh; do if [ -x $script ]; then eval $script $uid $service fi done; fi; fi; fi;
REFERENSI
1. Creating A Safe Directory With PAM and EncFS (http://howtoforge.com/encrypting_encfs_pam_script)
SECURE APPLICATION SERVER
Instalasi Apache Web Server
Untuk melakukan instalasi apache web server dapat mengikuti perintah sebagai berikut: root@WebServer:~# apt-get install apache2 apache2-mpm-worker
Konfigurasi Apache Web Server
Untuk mencegah pengguna menjalankan perintah tertentu yang dapat mempengaruhi keamanan server, maka web server sebaiknya dijalankan dengan menggunakan nama user yang berbeda dengan service – service lainnya. Untuk melakukan perubahan konfigurasi nama user dan group yang akan digunakan oleh apache sebagai eksekutornya, ikuti entry sebagai berikut:
User apache Group apache
Variabel Timeout pada file konfigurasi apache berfungsi untuk memberikan waktu maksimal koneksi yang terjalin antara komputer pengguna terhadap web server
Timeout 45
Variabel
LimitRequestBody
pada
file
konfigurasi
apache
berfungsi untuk membatasi besarnya maksimum request dalam satuan bytes yang dikirimkan kepada webserver.
LimitRequestBody 1048576
Matikan fitur directory browsing karena pengguna dapat melihat struktur direktori tempat disimpannya file – file aplikasi. Hal tersebut dapat dilakukan dengan menambahkan konfigurasi berikut: Options -Indexes
Menurut dokumentasi apache, dengan menggunakan konfigurasi HTTP Keep Alive akan mempunyai hasil yang dapat meningkatkan kinerja apache web server terhadap client yang telah terhubung sebelumnya. Namun apabila penggunaan variabel KeepAlive tidak dilakukan dengan bijak maka web server akan mempunyai resiko terkena Denial of Service (DoS).
Untuk itu diperlukan sebuah kombinasi yang baik dan benar antara MaxKeepAliveRequest dan KeepAliveTimeout. MaxKeepAliveRequest adalah variabel yang menangani jumlah permintaan koneksi yang dikirimkan oleh pengguna, dan KeepAliveTimeout adalah variabel yang menangani lama waktu yang digunakan oleh web server untuk membebaskan beban untuk memelihara koneksi yang telah terbentuk.
Pembuatan SSL Certificate
Setiap SSL Certificate akan mempunyai sebuah private key yang berfungsi untuk melakukan enkripsi terhadap data yang dikirimkan. Untuk membuat sebuah SSL Certificate yang hal harus terlebih dahulu dilakukan adalah membuat private key dengan panjang key yang dapat disesuaikan. Untuk membuat sebuah private yang disimpan pada file yang bernama ca.key, dapat dilakukan dengan perintah sebagai berikut:
root@WebServer:~ # openssl genrsa -des3 -out ca.key 2048 Generating RSA private key, 2048 bit long modulus .................................................. ...+++ .................................................. .+++ e is 65537 (0x10001) Enter PEM pass phrase: Verifying password - Enter PEM pass phrase:
Untuk melindungi private key yang telah berhasil dibuat agar tidak dapat digunakan oleh orang lain, maka pengguna dapat memberikan sebuah kata kunci. Setiap kali file private key akan digunakan, maka sistem akan secara otomatis menanyakan kata kunci untuk membuka file private key tersebut.
root@WebServer:~ # openssl req -new -x509 -days 3650 -key ca.key -out ca.crt Using configuration from /usr/share/ssl/openssl.cnf Enter PEM pass phrase: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----Country Name (2 letter code) [GB]:ID State or Province Name (full name) [Berkshire]:DKI Jakarta Locality Name (eg, city) [Newbury]:Jakarta Pusat Organization Name (eg, company) [My Company Ltd]:DEPKOMINFO Organizational Unit Name (eg, section) []:Direktorat Jenderal APTEL Common Name (eg, your name or your server's hostname) []:www.depkominfo.go.id Email Address []:webmaster@depkominfo.go.id
Penggunaan Modul SSL Pada Apache2
Periksa apakah terdapat sebuah file yang bernama “ssl.load” pada direktori /etc/apache2/mods-available. Apabila file tersebut tersedia pada direktori yang dimaksud, maka buatlah sebuah link yang mengacu pada file yang bersangkutan pada /etc/apache2/mods-enabled.
root@server:~# ln –s /etc/apache2/modsavailable/ssl.load /etc/apache2/mods-enabled/ssl.load
Setelah menambahkan mekanisme penggunaan library SSL pada apache2 maka hal yang selanjutnya dilakukan adalah membuat sebuah konfigurasi apache dengan modul SSL pada direktori /etc/apache2/sites-enabled.
Konfigurasi Web Server dengan SSL
DocumentRoot /var/www/ ServerName www.depkominfo.go.id ServerAlias depkominfo.go.id ServerAdmin admin@depkominfo.go.id ErrorLog /var/www/log/error_log TransferLog /var/www/log/transfer_log SSLEngine on SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key SSLCACertificateFile /etc/apache2/ssl/ca.crt #Hanya Memerlukan Client Certificate SSLVerifyClient require SSLVerifyDepth 1
ErrorLog adalah attribut pada konfigurasi apache yang berfungsi untuk memberikan informasi lokasi file yang digunakan untuk menyimpan seluruh informasi yang berhubungan dengan error dari web server. DocumentRoot adalah attribut pada konfigurasi apache yang berfungsi untuk memberikan informasi tempat penyimpanan dokumen web yang ingin ditampilkan melalui web server.
ServerName adalah attribut pada konfigurasi apache yang berfungsi untuk memberikan informasi nama server yang akan digunakan sebagai web server. ServerAlias adalah attribut pada konfigurasi apache yang berfungsi untuk memberikan informasi nama pendek dari server yang akan digunakan sebagai web server. Attribut ini pada umumnya berfungsi untuk menyingkat nama server yang telah diberikan pada attribut ServerName. ServerAdmin adalah attribut pada konfigurasi apache yang berfungsi untuk memberikan informasi administrator yang bertanggung jawab atas web server tersebut. Pada umumnya informasi yang diberikan pada attribut ServerAdmin adalah alamat email dari administrator. SSLEngine adalah attribut pada konfigurasi apache yang berfungsi menandakan apakah web server akan menggunakan fitur Secure Socket Layer sebagai mekanisme pengamanan komunikasi data. Untuk mengaktifkan fitur SSL maka nilai yang harus diberikan kepada attribut SSLEngine adalah on. SSLCACertificateFile adalah attribut pada konfigurasi apache yang berfungsi untuk memberikan informasi lokasi dari Certificate Authority yang digunakan untuk melakukan validasi terhadap SSL Certificate.
SSLCertificateFile adalah attribut pada konfigurasi apache yang berfungsi untuk memberikan informasi lokasi dari SSL Certificate yang digunakan pada Web Server. SSLCertificateKeyFile adalah attribut pada konfigurasi apache yang berfungsi untuk memberikan informasi lokasi dari private key yang dimiliki oleh SSL Certificate. Private key tersebut akan digunakan untuk melakukan enkripsi data yang dikirimkan antara client dan server. SSLVerifyClient adalah attribut pada konfigurasi apache yang berfungsi untuk memberikan informasi penggunaan mekanisme pemeriksaan SSL Certificate yang dimiliki oleh client. Pilihan nilai yang dapat dialokasikan untuk attribut SSLVerifyClient antara lain: o none, nilai ini akan mengarahkan web server untuk tidak melakukan verifikasi terhadap SSL Certificate yang dimiliki oleh client pada saat melakukan akses. o require, nilai ini akan mengarahkan web server untuk melakukan verifikasi terhadap SSL Certificate yang dimiliki oleh client pada saat melakukan akses. SSL Certificate yang dimiliki oleh client akan divalidasi dengan menggunakan Certificate Authority yang telah menandatangani SSL Certificate Server.
o
optional, jika nilai tersebut digunakan maka web server dapat melakukan proses verifikasi terhadap SSL Certificate berdasarkan Certificate Authority maupun tidak menggunakan Certificate Authority.
o
optional_no_ca, jika nilai tersebut digunakan maka client dapat memberikan SSL Certificate namun server tidak akan melakukan verifikasi terhadap Certificate yang dimiliki oleh client.
Penggunaan Client Certificate pada Client
Untuk melakukan pengelolaan terhadap Certificate SSL pada browser Firefox, pilihlah menu options pada toolbar tools. Apabila tampilan option muncul pada layar, maka pilihlah submenu encryption pada menu advanced.
Gambar 5 - Manajemen SSL Certificate browser Firefox
Untuk
menambahkan
sebuah
Certificate
SSL
baru
pada
repository certificate yang ada pada browser firefox, maka tekanlah tombol import. Firefox akan menanyakan lokasi file certificate dengan format PKCS#12 yang ingin dimasukkan kedalam database browser.
Gambar 6 - Import SSL Certificate browser Firefox
REFERENSI 1. Freitag, Pete. 20 ways to Secure Your Apache Configuration
9 December 2005. 10 November 2006. http://www.petefreitag.com/item/505.cfm
2. Emery, Van. Van's Apache SSL/TLS mini-HOWTO . 11
November 2006. http://www.vanemery.com/Linux/Apache/openSSL.html
SECURE DATABASE SERVER
Database server adalah sebuah perangkat lunak yang dirancang dan diperuntukkan sebagai media untuk menyimpan data – data transaksi yang dihasilkan pada sebuah proses bisnis. proses bisnis mempunyai sifat yang rahasia dan Pada hanya umumnya data – data yang dihasilkan pada saat melakukan diperuntukkan kepada pihak – pihak internal organisasi. Oleh karena itu diperlukan sebuah mekanisme untuk melakukan pengamanan terhadap server database. Pada kesempatan ini akan dibahas langkah - langkah yang harus diperhatikan untuk melakukan pengamanan pada MySQL database server. Faktor – faktor yang harus diperhatikan dalam melakukan pengamanan pada database server MySQL antara lain : 1. Penggunaan informasi yang tidak mempunyai izin dilakukan oleh client yang dapat membuka koneksi ke database dan mempergunakannya sebagai cara untuk memperoleh akses terhadap informasi yang dirahasiakan. Hal tersebut dapat terjadi apabila terdapat account – account MySQL yang memperbolehkan Hal yang client untuk membuka untuk dengan koneksi ke database tanpa menggunakan username maupun password. dapat dilakukan adalah menanggulangi menghilangkan permasalahan tersebut
account – account anonim dan secara rutin memeriksa bahwa setiap account dilindungi oleh sebuah kata kunci /password.
2. Akses yang tidak mempunyai izin yang dapat dilakukan oleh client dan dapat menimbulkan eksploitasi dengan menggunakan izin akses yang ada pada level file system. Untuk mengatasi permasalahan tersebut maka sebuah mysql server yang telah terinstall dapat dijalankan dengan menggunakan sebuah account yang tidak mempunyai izin akses terlalu luas pada sistem operasi. 3. Pada sebuah sistem operasi yang mempunyai banyak user, ada kemungkinan penyerangan terhadap hasil instalasi mysql oleh user yang sedang login pada server. Untuk melakukan pencegahan terhadap potensi perusakan tersebut, hal yang dapat dilakukan adalah dengan memberikan batasan akses direktori tempat data disimpan hanya untuk account yang digunakan oleh MySQL server pada saat beroperasi.
PACKET FILTERING
USER ACCESS LIMITATION
WEB SERVER
ENCRYPTED CONNECTION
DATABASE SERVER
Gambar 7 - Arsitektur Keamanan Koneksi Database
Gambar diatas menerangkan bahwa arsitektur keamanan yang direkomendasikan mempergunakan beberapa mekanisme antara lain : 1. Menggunakan mekanisme Packet Filtering antara network server aplikasi dan server database. Hal tersebut dilakukan untuk membatasi server dengan ip address mana saja yang dapat melakukan pembuatan koneksi terhadap server database. 2. Menggunakan mekanisme enkripsi pada koneksi antara server aplikasi dan server database. Hal tersebut dilakukan dengan menggunakan Secure aplikasi dan server database. 3. Menggunakan mekanisme dengan melakukan user access limitation yaitu jumlah user maupun Socket Layer antara server
pembatasan
tingkatan hak akses dari masing – masing user. Untuk melakukan pengamanan pada level akses user maka diperlukan tahapan sebagai berikut: a. Hapus semua account user yang tidak pernah digunakan b. Pastikan bahwa semua account user yang terdapat pada database mempunyai password. c. Berikan akses tak terbatas hanya pada account user tertentu
d. Ubahlah nama account user database administrator standard dengan menggunakan nama yang sulit untuk ditebak. e. Hindari pemberian akses user dengan menggunakan wildcard pada bagian hostname.
Instalasi MySQL Database
root@server:~# apt-get install mysql-server mysql-common
mysql-server
merupakan
paket debian
yang
terdiri
dari
perangkat lunak database mysql. mysql-common merupakan paket debian yang terdiri dari file – file konfigurasi standard yang diperlukan oleh server database mysql.
Konfigurasi MySQL Database
File konfigurasi mysql terletak pada /etc/mysql/my.cnf, untuk melakukan pengamanan lihat konfigurasi berikut : [mysqld] user=mysqld bind-address=192.168.1.200
user adalah attribut pada konfigurasi mysql server yang berfungsi untuk memberikan informasi nama user yang akan digunakan pada saat layanan mysql server sedang berjalan. bind-address adalah attribut pada konfigurasi mysql server yang berfungsi untuk memberikan informasi alamat IP Address yang akan digunakan pada saat layanan mysql server sedang berjalan.
Setelah maka
melakukan diperlukan
konfigurasi pengubahan
terhadap terhadap
mysql, user
untuk
menambahkan tingkat keamanan terhadap data yang disimpan, database administrator sehingga menjadi nama user yang tidak mudah ditebak oleh pengguna. Selain melakukan perubahan dari segi nama user dan password database administrator, diperlukan pembersihan terhadap seluruh user yang terdaftar pada database namun tidak digunakan dalam sistem informasi.
Setelah pembersihan user dilakukan, hapus database yang tidak pernah digunakan seperti database „test‟.
# hapus semua access user anonim mysql> use mysql; mysql> delete from db where User=‟‟; mysql> delete from user where User=‟‟; # ubah user database admin „root‟ dengan # nama user lain mysql> update user set user="nimda" where user="root"; # ubah password database admin mysql> SET PASSWORD FOR nimda@localhost=PASSWORD(„password baru’) # hapus database „test‟ mysql> drop database test;
Penggunaan SSL untuk koneksi client - server
Untuk mencegah pihak yang tidak bertanggung jawab melakukan penyadapan terhadap data yang ditransmisikan antara komputer client dan server dibutuhkan metode enkripsi. Metode yang digunakan untuk melakukan enkripsi kanal komunikasi antara client server adalah dengan menggunakan Secure Socket Layer (SSL). Untuk mengamankan database mysql dengan menggunakan SSL, lakukan langkah – langkah berikut: 1. Membuat direktori untuk menyimpan SSL certificate.
root@server:~# mkdir /etc/mysql/ssl/
2. Membuat Certificate of Authority (CA)
root@server:~# openssl req –x509 –new –days 3650 – newkey rsa:2048 –nodes –keyout ca-key.pem – out ca-cert.pem
3. Membuat Certificate Request untuk Server Certificate
root@server:~# openssl req –new –newkey rsa:2048 – nodes –keyout server-key.pem –out servercsr.pem
4. Melakukan pengesahan X.509 Certificate Request dengan menggunakan Certificate of Authority (CA).
root@server:~# openssl x509 –req –days 3650 –CA ca-cert.pem –Cakey ca-key.pem –CAcreateserial –CAserial ca-srl.txt –in server-csr.pem –out server-cert.pem
5. Ubah file konfigurasi pada /etc/mysql/my.cnf dengan entry seperti berikut:
[mysqld] ssl-key=/etc/mysql/ssl/server-key.pem ssl-cert=/etc/mysql/ssl/server-cert.pem ssl-ca=/etc/mysql/ssl/ca-cert.pem
Buat SSL Certificate untuk aplikasi client dengan langkah – langkah sebagai berikut: 1. Membuat Certificate Signing Request (CSR) untuk Client Certificate
root@server:~# openssl req –new –newkey rsa:2048 –nodes –keyout client-key.pem –out client-csr.pem
2.
Melakukan
pengesahan
Certificate
Request
dengan
menggunakan Certificate of Authority (CA)
root@server:~# openssl x509 –req –days 3650 –CA ca-cert.pem –Cakey ca-key.pem –Cacreateserial –Caserial ca-srl.txt –in client-csr.pem –out client-cert.pem
3. Ubah file konfigurasi /etc/mysql/my.cnf yang terletak di komputer client dengan entry seperti berikut:
[client] ssl-key=/home/client/client-key.pem ssl-cert=/home/client/client-cert.pem
ssl-key adalah attribut
konfigurasi yang berfungsi untuk
memberikan informasi lokasi file tempat penyimpanan kunci SSL yang akan digunakan untuk melakukan pengacakan terhadap data yang dikirimkan antara server dan client. ssl-cert adalah attribut konfigurasi yang berfungsi untuk memberikan informasi lokasi file tempat penyimpanan Certificate SSL yang akan digunakan untuk mengamankan komunikasi data antara server dan client.
Setting Firewall dan Pembatasan Akses
Salah satu bentuk penyerangan yang dapat dilakukan terhadap database server adalah Denial of Service (DoS) attack. Penyerangan tersebut dilakukan terhadap port – port tertentu dengan frekuensi yang sangat tinggi. Apabila sebuah server database mengalami serangan DoS maka seluruh resource yang ada pada server tersebut akan digunakan oleh aplikasi database. Dan apabila resource server tersebut tidak tersedia lagi, maka hal terburuk yang dapat terjadi adalah berhenti beroperasinya server dengan kondisi file – file tempat menyimpan data terkunci oleh Penguncian proses aplikasi MySQL yang sedang berjalan. file – file yang menyimpan data dapat
mengakibatkan data – data tersebut tidak dapat lagi digunakan. Untuk mengatasi percobaan – percobaan penyerangan dalam bentuk DoS maka mekanisme pengamanan dengan menggunakan firewall harus dilakukan. Pada prakteknya, firewall akan melakukan filterisasi terhadap packet – packet yang dikirimkan kepada server database sehingga dapat dirancang sebuah skenario pemilihan komputer client mana saja yang dapat membuka koneksi dengan komputer server. Pada paparan berikut ini akan diperlihatkan perintah – perintah yang harus dilakukan untuk memfilterisasi packet – packet yang dikirimkan kepada server database.
root@server:~# iptables –A INPUT –p tcp -i eth0 -s 192.168.1.3 --sport 1024:65535 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT root@server:~# iptables –A OUTPUT –p tcp -o eth0 -sport 3306 -d 192.168.1.3 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT root@server:~# iptables –A INPUT –p tcp -i eth0 -s 192.168.1.2 --sport 1024:65535 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT root@server:~# iptables –A OUTPUT –p tcp -o eth0 -sport 3306 -d 192.168.1.2 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT root@server:~# iptables –A INPUT –p tcp -i eth0 -s 192.168.1.0/24 --sport 1024:65535 --dport 3306 -m state --state NEW,ESTABLISHED -j REJECT root@server:~# iptables –A OUTPUT –p tcp -o eth0 -sport 3306 -d 192.168.1.0/24 --dport 1024:65535 m state --state ESTABLISHED -j REJECT
Aturan – aturan firewall yang dibuat diatas bertujuan untuk memberikan izin hanya kepada application server yang mempunyai IP Address 192.168.1.3 dan server database dengan IP Address 192.168.1.2 sedangkan komputer – komputer lain tidak diberikan izin untuk membuka koneksi.
REFERENSI
1. Dubois, Paul. Securing Your MySQL Instalation, 25
January 2003. 10 November 2006. http://www.kitebird.com/articles/ins-sec.html.
2. Certificate Signing Request – Wikipedia, the free
encyclopedia. http://en.wikipedia.org/wiki/CSR
3. Certificate Authority – Wikipedia, the free encyclopedia.
http://en.wikipedia.org/wiki/CA
4. Secure Socket Layer – Wikipedia, the free encyclopedia.
http://en.wikipedia.org/wiki/SSL