Monday, March 23, 2015

Implementasi Standard Security Hardening di Linux

Pada sistem yang udah besar dan lebih kompleks maka melakukan proteksi terhadap server menjadi sangat penting untuk melindungi data yang kita miliki terutama dari serangan hacker/cracker yang jahil. 

Dibawah ini saya coba share sedikit yah tips untuk implementasi standard hardening di OS linux.

  • Gunakan Fitur 'Komunikasi Data' yang Sudah Terenkripsi.
    Sering di antara kita melakukan aktifitas transfer data tanpa memperhatikan keamanan dari aktifitas itu sendiri, seperti contoh meremote router dari bandara dengan Telnet, dsb. Saran saya untuk alasan security untuk aktifitas remote gunakan 'SSH' karna SSH memiliki fitur enkripsi yang setidaknya mampu melindungi password agan dari serangan seperti Sniffing dan Man-In-The-Middle-Attack.

    Gunakan Fitur yang Sudah Support Enkripsi pada Aktifitas Transfer Data 
    Gak jauh beda sih sama yang sebelumnya cuma saran saya usahakan untuk mengunakan SCP, Rsync, atau SFTP untuk transfer file antar node. Hal ini disebabkan karna command2 tersebut lebih aman ketimbang FTP karna SCP dan SFTP melakukan SSH dulu baru mentransfer file agan ke node tujuan dan ini menjadikan aktifitas transfer data menjadi lebih aman

    Hindari Menggunakan FTP, TFTP, Telnet, RLogin/Rsh Services
    Agan boleh aja melakukan telnet, FTP, dsb kalo masih di internal network agan meskipun enggak recommended, namun alangkah lebih baiknya gak usah digunakan sama sekali. Gunakan SSH untuk menggantikan telnet, gunakan SFTP untuk menggantikan FTP. Itu lebih baik untuk melindungi credentials akun agan.
    Bahkan kalo bisa dalam kondisi tertentu apus aja gan dengan command dibawah ini :
    # yum erase tftp-server telnet-server rsh-serve


  • Jangan Install Sembarangan Software/Services
    Kalo bisa install services/aplikasi yang bener2 dibutuhkan oleh agan di server agan tsb untuk meminimalisasi vulnerability. Gak mau kan kena malware atau aplikasi jahat semacamnya gara2 install aplikasi yang enggak jelas? Kalo bisa malah install paket-paket beserta dependencies agan dari source repository yang terpercaya!


  • Gunakan Security Extensions 
    Pada kebanyakan OS Linux ada security extensions bawaan linux yaitu SELinux, implementasi SELinux biasanya berbasis file context. Meskipun rata-rata di dunia persilatan implementasi SELinux jarang digunakan karna ribet, tapi ini bisa menjadi salah satu solusi kalo agan memang paranoid.

    Standard Implementation Notes :

    Konfigurasi selinux bisa diliat dari /etc/selinux/config Gunakan getenforce utk mengetahui selinux dalam keadaan enforcing/permissive/disabled.
    Gunakan command setenforce 0 untuk set ke permissive.
    Gunakan command setenforce 1 untuk set ke enforcing.


  • Solid Password Policy & Password Aging
    Apabila agan membuat password yang secure untuk sebuah system maka buatlah password yang terdiri dari kombinasi huruf besar-kecil, karakter dan angka. Konon katanya SSH bekerja dengan cara One-Way sehingga mungkin the only way untuk membobol server agan yang dengan cara brute-force (kalo celah lain sudah ditutup yah). Selain itu gunakan password aging, apa itu password aging? Password aging memungkinkan password yang digunakan oleh user-user lain itu kadaluarsa. Hal ini sangat penting loh, kita mana tau kalo sewaktu-waktu ada engineer yang udah resign terus jail matiin services yang sedang production? Who knows?

    Standard Implementation Notes :

    Gunakan command chage -M 99999 'username' untuk disabled password aging.
    Contoh, command chage -m 0 -M 120 -W 10 -I 20 'username'. Parameter yang bisa agan gunakan antara lain :
    -m : Nunggu x hari baru agan bisa ganti password
    -M : Masa aktif password
    -I : Masa tenggang password
    -E : Akun expired
    -W : Warning sebelum M days
    -d : Merupakan parameter last day, agan bisa setting jadi 0 kalo mau force user utk ganti password ketika mereka login lagi.


  • Cegah User Untuk Menggunakan Password yang Sama 
    Nah biasanya implementasi ini digunakan kalo password user sudah expired dan harus di recurring. Biasanya sangat recommended bahwa user sebaiknya tidak menggunakan password yang sama dengan yang dia gunakan sebelumnya.

    Standard Implementation Notes :

    Pada OS CentOS agan bisa ikuti panduan dibawah ini :

    - Pertama buat backup
    # cp /etc/pam.d/system-auth /root/system-auth.bak
    - Edit file system-auth
    # vi /etc/pam.d/system-auth
    ###Tambahin parameter dibawah ini ####
    password sufficient pam_unix.so use_authtok md5 shadow remember=13

    Setelah selesai quit dan save. Nah, konfigurasi diatas membuat OS linux dapat mengingat 13 password terakhir yang digunakan oleh user.


  • Pastikan Hanya User 'ROOT' yang memiliki UID 0
    Ini penting banged gan. pastikan cuma user root saja yang berhak memiliki akses keseluruhan sistem. Gunakan command seperti di screenshot dibawah ini :


    # awk -F: '($3 == "0") (print)' /etc/passwd
    Gimana kalo ada user selain root? Hapus gan! Gak mau kan jadi korban backdoor? hehe


  • Pastikan Semua Akun Memiliki Password
    Gunakan command ini gan
    # awk -F: '($2 == "") {print}' /etc/shadow


    Apa yang harus dilakukan kalo ada akun yang gak punya password? Agan bisa lakukan lock thdp akun tsb.
    # passwd -l accountName

  • Disable Root Login dan Ganti Port Standard Listen SSH 
    Biasanya ada juga hacker yang melakukan brute force dengan username root, gamau juga kan jadi korban beginian? Maka dari itu lakukanlah disabled root login. Gunakan sudo untuk maintain privilege user terhadap command2 tertentu. Selain itu port standard yang digunakan untuk SSH adalah 22, kalo bisa ganti dengan yang lain. Caranya adalah :

    # vi /etc/ssh/sshd_config###Ganti 2 parameter dibawah ini ###
    PermitRootLogin no
    Port 2210  ##2210 bisa diganti dengan angka favorit agan##


  • Limit User SSH 'Access'
    Ini sih kayanya cara strict gan cuma patut dicoba, misal yang boleh ssh ke sistem agan cuma arif dan jono maka kita bisa menambahkan/mengedit parameter di /etc/ssh/sshd_config dengan cara seperti dibawah ini :

    # vi /etc/ssh/sshd_config
    ###tambahkan/edit parameter dibawah ini####
    AllowUsers root arif jono


  • Kalo Bisa Gunakan Centralized Authentication Services
    Kalo di environment mikocok ada Active Directory kan? Di linux agan bisa menggunakan Open-LDAP dan kerberos. Dengan adanya centralize autentikasi service setidaknya user2 di tiap node jadi lebih mudah dikontrol ya gak sih? hehe


  • Pisahkan File dan Disk Partisi
    Maksud saya kalo bisa pisahkan partisi2 penting untuk system dan kebutuhan user. Sangat recommended direktori /var/ dan /home dibuat dengan partisi yang terpisah. Kalo perlu dan mau lebih strict bisa gunakan LUKS yang merupakan fitur untuk mengenkripsi file system.
    Selain itu kalo bisa untuk services yang sifatnya digunakan oleh orang banyak seperti FTP pisahkan saja dengan membuat partisi baru. Misal /ftp lalu mounting ke partisi baru agan, jangan lupa dibuat persistent dengan mengedit /etc/fstab yah dan yang paling penting jangan permission filenya juga harus diperhatikan yah.


  • Disabled IPv6
    Kalo enggak dibutuhkan lebih baik dimatiin, kenapa saya recommended untuk matiin? Karna kebanyakan dari kita kan masih menggunakan IPv4, bukan hal yang mustahil kan hacker ato orang iseng ngirim bad-traffic yang isinya macem-macem ke server kita melalui network IPv6.

    Langkah untuk mematikan IPv6 di CentOS :
    # vi /etc/modprobe.conf

    ###tambahin line dibawah ini#####
    install ipv6 /bin/true

    Setelah itu edit /etc/sysconfig/network
    # vi /etc/sysconfig/network
    ###Update/add line dibawah ini : ####

    NETWORKING_IPV6=no
    IPV6INIT=no


    Lalu reboot.

    Setelah itu pastikan bahwa IPv6 telah disabled.

    # lsmod | grep ipv6
    # ifconfig


  • Install IDS (Instrusion Detections System)
    Ini tahap terakhir gan, agan bisa gunakan IDS untuk memproteksi sistem agan. Banyak IDS yang gratis seperti snort dsb. 

Semoga ada pencerahan yah gan hehe.

No comments:

Post a Comment