MAKALAH SEMINAR TUGAS AKHIR PERIODE Januari 2010 IMPLEMENTASI REMOTE SERVER MENGGUNAKAN METODE PORT KNOCKING DENGAN ASYMMETRIC ENCRYPTION M. Fahru Rozi – Royyana Muslim I., S.Kom, M.Kom., Radityo Anggoro, S.Kom, M.Eng.Sc. Jurusan Teknik Informatika, Fakultas Teknologi Informasi, Institut Teknologi Sepuluh Nopember, Email: [email protected] Abstrak Seorang Administrator harus menyeimbangkan antara fleksibilitas dan keamanan ketika membuat rule firewall. Sebuah firewall seharusnya mampu memberi perlindungan terhadap pihak-pihak yang tidak berhak mengakses suatu sumber daya. Namun mengizinkan pihak yang dapat dipercaya untuk mengakses sumber daya yang ada. Tetapi, pihak tersebut bisa berasal dari alamat IP yang dipercaya, karena alamat IP tidak menggambarkan pihak yang melakukan koneksi. Siapapun pihak yang melakukan koneksi melalui IP yang bisa dipercaya tersebut akan diizinkan oleh firewall. Oleh karena itu, usaha untuk memfilter pihak yang dapat dan tidak dapat mengakses sumber daya pada suatu komputer kurang baik jika menggunakan IP filtering. Solusi untuk mengatasi masalah di atas adalah port knocking. Port knocking metode untuk mengakses remote computer dengan mengirim paket pada port-port tertentu. Ketika urutan port tersebut sesuai dengan urutan port di server, server akan meng-overwrite aturan firewall dan client bisa terkoneksi. Adanya tugas akhir ini diharapkan administrator dapat mengatur siapa yang dapat mengakses komputer. Kata Kunci : Port Knocking, Socket, Firewall, UFW kelemahan yang ada. Perluasan dari penggunaan firewall ini salah satunya dengan menggunakan metode port knocking. Port Knocking adalah suatu bentuk komunikasi host-to-host dimana informasi tersalur melalui port yang tertutup. Pada dasarnya port knocking dapat didefinisikan sebagai suatu metode komunikasi antara dua komputer, dimana informasi yang dikirimkan di-encode dalam bentuk usaha koneksi ke port-port dalam urutan tertentu. Usaha membangun koneksi ini bisa disebut juga ketukan-ketukan (knocks) 2. Firewall dan UFW Firewall adalah istilah yang biasa digunakan untuk menunjuk pada suatu komponen atau sekumpulan komponen jaringan, yang berfungsi membatasi akses antara dua jaringan, lebih khusus lagi, antara jaringan internal dengan jaringan global Internet.[1] Tugas firewall antara lain : Harus dapat mengimplementasikan kebijakan security di jaringan (site security policy). Jika aksi tertentu tidak diperbolehkan oleh kebijakan ini, maka firewall harus meyakinkan bahwa semua usaha yang mewakili operasi tersebut harus gagal atau digagalkan. Dengan demikian, semua akses ilegal antar jaringan (tidak diotorisasikan) akan ditolak. Melakukan filtering: mewajibkan semua traffik yang ada untuk dilewatkan melalui firewall bagi semua proses pemberian dan pemanfaatan layanan informasi. Dalam konteks ini, aliran paket data dari/menuju firewall, diseleksi berdasarkan IP-address, nomor port, atau arahnya, dan disesuaikan dengan kebijakan security. Firewall juga harus dapat merekam/mencatat even-even mencurigakan serta memberitahu administrator terhadap segala usaha-usaha menembus kebijakan security. UFW adalah packet-filtering semacam iptables yang hanya terdapat pada Ubuntu 8.04 ke atas. Alasan penggunaan UFW adalah untuk mengkonfigurasi packet-filter pada firewall menjadi lebih mudah dan lebih aman bagi user 1. Pendahuluan Saat ini keamanan telah menjadi hal yang sangat penting, terutama dalam bidang Teknologi Informasi. Statistik tingkat eksploitasi keamanan terhadap banyak server dan jaringan makin hari semakin meningkat. Hal tersebut dapat terjadi seiring dengan maraknya public vulnerable disclosure. Bahkan seseorang yang tidak memiliki pengetahuan yang cukup dalam masalah keamanan jaringan dapat melakukan penetrasi terhadap sebuah sistem jaringan dengan hanya mendownload exploit untuk sistem yang diserangnya dan kemudian menggunakannya untuk kepentingan sendiri. Salah satu upaya yang dilakukan untuk mengamankan sebuah server adalah dengan menggunakan firewall. Penggunaan firewall saat ini masih memiliki kelemahan. Sehingga dicari suatu cara atau metode untuk mengurangi 1 M. FAHRU ROZI - 5105100164 MAKALAH SEMINAR TUGAS AKHIR PERIODE Januari 2010 awam. UFW sama dengan iptables linux pada umumnya, namun sintaks-nya lebih “manusiawi” dari pada iptables. Oleh karena itu UFW dibuat untuk memudahkan mengkonfigurasi firewall. UFW merupakan tool front-end iptables yang secara default terinstall pada Ubuntu. Ubuntu yang mengintegrasikan UFW ke dalam paket instalasinya dimulai dari Ubuntu 8.04(Hardy Heron) sampai saat ini (Ubuntu 9.10[Karmic Koala]). Jadi, UFW ini tidak akan ditemui pada ubuntu versi 7.10 ke bawah. UFW lebih mudah digunakan daripada IPTABLES karena menggunakan command-line yang sangat sederhana dan mudah diingat. Namun, back-core dari UFW adalah iptables-restore yang ada pada iptables. UFW hanya bisa dijalankan melalui previlege root. Selain IPv4, UFW juga mendukung IPv6. Sintaks dari UFW : root@sapphire:~# ufw COMMAND COMMAND enable | disable Turn the firewall ON or OFF default allow|deny Set the default policy, allow is open, whereas deny is restricted logging on|off Turn logging on or off allow service Allow or deny access deny service by service. Services are defined in /etc/services which spesifies the ports for that service. allow port- Allow or deny access number/protocol on a particular port deny port- using specified number/protocol protocol delete rule Delete an installed rule, use allow or deny and include rule specifies. status Display status along with services allowed or denied version Display version information proto protocol Specify protocol in allow or deny rule from address Specify source address in allow or deny to address Specify destination address in allow or deny port port Specify port in allow or deny rule for from and to address operations dimana cryptos memiliki arti rahasia, sedangkan graphien berarti gambar atau tulisan. Jadi, secara etimologi atau berdasarkan asal katanya, kriptografi berarti tulisan rahasia. Namun, jika dilihat lebih jauh, definisi kriptografi adalah ilmu dan seni untuk menjaga kerahasiaan pesan dengan cara menyandikan kedalam benuk yang tidak dapat dimengerti lagi maknanya, sehingga pesan menjadi aman dan tidak dapat dibaca oleh orang yang tidak berkepentingan. Macam-macam sistem kriptografi : 1. Kriptografi Kunci – Asimetris 2. Kriptografi Kunci – Simetris 3. Python Python adalah sebuah bahasa pemrograman berbasis object yang dinamis dan dapat digunakan dalam berbagai pengembangan software. Python menawarkan dukungan yang kuat terhadap berbagai bahasa pemrograman lain dan alat-alat pengembangan software[5]. Python didesain untuk mempertinggi produktivitas programmer dan kemudahan kode program untuk dibaca. Meski syntax python dibuat minimalis, dukungan berupa standart librarinya sangat luas dan lengkap. Python menggunakan cara yang unik untuk memisahkan satu blok program dengan blok program yang lain, yaitu dengan menggunakan spasi atau tab. Hal ini sangat berbeda dengan bahasa-bahasa pemrograman yang lain. Python mendukung banyak paradigma pemrograman, utamanya pemrograman berbasis object, pemrograman terstrurktur dan berbasis fungsi. Python adalah bahasa yang umum dipakai dalam bentuk script (tanpa harus melalui proses kompilasi terlebih dulu). Seperti halnya bahasa lain yang berbentuk script, python menggunakan dynamic type (penggunaan variable tanpa harus menentukan tipe variabel secara eksplisit) dan secara unik juga mengatur penggunaan memori secara otomatis seperti pada Java Virtual Machine (JVM). 3. Kriptografi Kriptografi (Cryptography) berasal dari bahasa Yunani yaitu dari kata cryptos + graphien, 2 M. FAHRU ROZI - 5105100164 MAKALAH SEMINAR TUGAS AKHIR PERIODE Januari 2010 Dalam sejarahnya, python pertama kali dipublikasikan pada tahun 1991 oleh Van Rossum dengan versi 0.9.0. Python mencapai versi 1.0 pada Januari 1994 [6]. Sekarang python telah dipublikasikan pada dua versi, yaitu versi 2.x dan 3.x. Hal ini dilakukan karena sejak versi 3.0, python melakukan perubahan yang sebagian diantaranya tidak compatible dengan versi sebelumnya. Oleh karena itu, python dipublikasikan dengan dua versi bersamaan karena untuk masalah kompabilitas dengan programprogram yang telah dibuat menggunakan python sebelumnya. Python versi 3.0 mulai dilepas ke publik sejak tanggal 3 Desember 2008[7]. integer pada string. Tipe-tipe yang dikenal oleh python, antara lain str, bytes, list, tuple, set, dict, int, float, complex, bool[38]. Python menggunakan whitespaces (spase dan tabulasi) sebagai indent (jarak dari tepi kiri penulisan) untuk memisahkan satu blok program dengan blok program lainnya. Fitur tersebut juga dikenal dengan aturan off-side. Kenaikan indent setelah suatu statement tertentu dan penurunan indent untuk mengakhiri blok program tersebut. 4. import sys def print_tulisan(): print „hello world‟ if __name__ == “__main__” : print_tulisan() sys.exit(0) Gambar 1 Contoh Kode Python DESAIN DAN IMPLEMENTASI Tugas akhir ini dirancang untuk mengimplementasikan metode port knocking pada proses autentikasi host yang akan mengakses server. Seperti dikatakan pada bab sebelumnya bahwa pada dasarnya port knocking dapat didefinisikan sebagai suatu metode komunikasi antara dua komputer, dimana informasi yang dikirimkan di-encode dalam bentuk usaha koneksi ke port-port dalam urutan tertentu. Jadi metode port knocking ini didasarkan pada urutan port yang ada di server. Sistem ini terdiri dari client dan server. Client hanya bertugas untuk mengirim paket melalui port yang diinginkan. Apabila urutan port yang dipilih client sesuai dengan urutan port yang telah dispesifikasikan di server, maka server akan melakukan perubahan ke aturan firewall melalui daemon yang sebelumnya berjalan di server untuk memonitor urutan port dimana data itu dikirim oleh client. Client minimal harus memasukkan jumlah port sebanyak 2 buah. Untuk statement-statement yang bersifat flow-control, python menggunakan keyword seperti, if, for dan while. Python tidak mengenal case atau switch-case, seperti halnya dikenal dalam bahasa lain yang merupakan keturunan C, untuk melakukan branching. Keyword class digunakan untuk mendifinisikan sebuah class yang dapat diinstance menjadi suatu objek. Tentunya sudah sangat jelas jika keyword ini digunakan ketika python menggunakan object-oriented. Python menggunakan keyword def untuk mendefinisikan suatu fungsi. Sepert halnya dalam defnisi variabel yang tidak menyebutkan tipe variabel secara eksplisit, fungsi juga tidak memiliki return value yang didefinisikan secara eksplisit. Oleh karena itu, tipe suatu fungsi, baik void atau tidak memberikan return, apakah integer, double atau yang lain, sangat bergantung pada isi fungsi tersebut. 4.1. Desain Sistem Secara Umum Secara garis besar seperti yang terlihat pada gambar 6.1, aplikasi ini dibagi menjadi tiga bagian, bagian yang terhubung dengan database (eksekusi query), bagian yang berhubungan dengan file system (contoh : penambahan folder, penghapusan file, dll), dan aplikasi itu sendiri (contoh : parser untuk query yang diberikan). Python dapat menggunakan keyword with untuk menutup suatu blok program tertentu dengan suatu konteks. Hal ini dapat terjadi pada kondisikondisi tertentu, misalnya mendapatkan lock sebelum menjalankan suatu blok kode program yang mengakses suatu resource yang digunakan bersama sebelum melepasnya ketika selesai running. Service:port Service:p LUNELESS [isolated server] Secara umum, python memiliki tipe-tipe objek meski python mengizinkan deklarasi variable secara untyped. Pengecekan tipe-tipe objek ini dilakukan saat melakukan kompilasi terhadap source code. Meskipun tidak memaksakan pemberian tipe secara statis, python tetap menggunakan tipe-tipe objek untuk memproses objek-objek yang didefinisikan. ort data:port data:port data:port data:port UFW firewall Destrarastra Some Actions Altering firewall rule daemon Gambar 2. Desain Umum Cara kerja aplikasi ini secara umum, pertama server menjalankan daemon, kemudian menunggu usaha koneksi dari luar. Pihak luar melakukan usaha-usaha koneksi ke server dengan mengirim paket ke urutan port tertentu. Apabila Python juga mengingkari operasi-operasi yang tidak mungkin, seperti halnya penambahan 3 M. FAHRU ROZI - 5105100164 MAKALAH SEMINAR TUGAS AKHIR PERIODE Januari 2010 urutan port yang dikirim pihak luar sesuaia dengan yang urutan port di server, maka pihak luar akan dapat terkoneksi dengan server. status server yang telah mengubah rule firewall . Gambar 6. daemon running Gambar 7. client melakukan knocking Berikut hasil dari enkripsi server dan aturan yang telah diubah pada firewall . Gambar 3. Cara Kerja Aplikasi Secara Umum 5.2. Uji Performansi 5. UJI COBA Pada bab ini akan dibahas mengenai pengujian terhadap sistem. Pertama-tama akan dibahas mengenai uji fungsionalitas dan uji kecepatan, kemudian dijabarkan pula bagaimana penulis melakukan pengujian tersebut. Setelah itu pembahasan berlanjut ke hasil pengujian. Performansi sistem bisa dilihat dari waktu eksekusi pada jalannya fungsionalitas sistem atau bisa juga dilihat dari seberapa besar resource yang diperlukan CPU ketika menjalankan aplikasi tersebut. Pada ujicoba ini, setelah menjalankan daemon server akan menunggu setelah selang waktu tertentu client akan melakukan knocking . Pada saat client melakukan knocking tersebut diliat apakah resource yang digunakan server bertambah atau malah berkurang, stabil atau tidak. Dari serangkaian uji coba yang dilakukan diperoleh data sebagai berikut : 5.1. Uji fungsionalitas Dalam uji coba fungsionalitas, aplikasi diuji sedemikian rupa sehingga bisa menjalankan semua fungsi yang telah diuraikan di pada bab sebelumnya. Untuk melakukan pengujian tersebut tersebut penulis melakukan hal-hal berikut : 1. 2. Menjalankan daemon pada server. 3. Menunggu usaha koneksi yang dialamatkan kepadanya dengan memonitor interface yang ada. 4. 5. Table 1 Tabel hasil ujicoba Menyediakan server yang bersifat isolated (semua port tertutup). Selang waktu (detik) VITR (KB) RES (KB) 0.45 8388 4944 0.55 24780 5116 0.7 24780 5132 Mengecek urutan port client dengan server 0.89 24780 5176 1.02 25036 5184 Kalau sama dilanjutkan dengan mengirim pesan konfirmasi ke client. Pesan tersebut telah dienkripsi. Pesan tersebut berisi 1.15 25036 5184 1.31 25036 5184 1.57 25036 5184 4 M. FAHRU ROZI - 5105100164 MAKALAH SEMINAR TUGAS AKHIR PERIODE Januari 2010 Dari tabel 1 dapat diketahui bahwa aplikasi yang dijalankan bersifat stabil dalam penggunaan resource server (tidak fluktuatif) meski dilakukan secara terus menerus. Resource disini adalah jumlah memori yang digunakan (RES) dalam satuan KiloByte, dan ukuran virtual dari aplikasi (VIRT) yang meliputi proses pengeksekusian file binary, data area dan semua share-library yang digunakan aplikasi tersebut. 6. KESIMPULAN Dari hasil pengamatan selama perancangan, implementasi dan proses uji coba perangkat lunak yang dilakukan, dapat diambil kesimpulan sebagai berikut: 1. Metode port knocking bisa menjadi sebuah security-layer tambahan pada suatu host. 2. Tingkat penggunaan sumber daya oleh server ketika menjalankan daemon relatif stabil, sehingga kinerja server tidak terganggu. 3. Aplikasi ini memungkinkan administrator mampu melakukan koneksi server meskipun server memblok semua port yang ada. 7. DAFTAR PUSTAKA [1] http://www.klikkanan.com/fokus/firewall.shtml [2] Krzywinski, M. (2003). Port Knocking: Network Authentication Across Closed Ports. SysAdmin Magazine 12: 12-17. [3] Port Knocking : A Stealthy System for Network Authentication Across Closed Ports http://www.portknocking.org, 2003. (Januari 2010). [4] KrzywinskiM. (2003). „PortKnocking‟. Linux Journal, June2003. http://www.linuxjournal.com/article/6811 (Januari 2010) [5] "What is Python Good For?". General Python FAQ. Python Foundation. http://www.python.org/doc/faq/general/# what-is-python-good-for. 2008-09-05. [6] "A Brief Timeline of Python". Guido van Rossum. http://pythonhistory.blogspot.com/2009/01/brieftimeline-of-python.html. 2009-01-20. [7] Guido Van Rossum. 2006. “Python Documentation”. Release 2.5 5 M. FAHRU ROZI - 5105100164