it-swarm-id.com

Mengeras Server Linux

Kami sudah memiliki pertanyaan di sini tentang Hardening Apache , Hardening PHP dan Mengamankan SSH .

Untuk melanjutkan tren ini, saya tertarik pada langkah apa yang dilakukan orang untuk mengeraskan server Linux. Seperti pada langkah apa yang selalu dilakukan orang ketika mengatur server baru, itu tidak spesifik untuk aplikasi. Seperti mengatur partisi tmp menjadi noexec, mencopot/menonaktifkan layanan tertentu, mis.

88
Mark Davidson

Identifikasi aplikasi dan proses yang diperlukan dan terapkan daftar periksa untuk menghindari menginstalnya, atau menghapus instalan terburuk setelah pembuatan awal.

Di sini saya sedang memikirkan penyebab umum yang tampaknya masih terlalu banyak distro secara default!

  • Layanan NFS: nfsd, lockd, mountd, statd, portmapper
  • server telnet dan server ftp
  • Layanan R: rlogin, rsh, rcp, rexec
  • BIND dan DNS server kecuali diperlukan
  • server surat seperti sendmail
  • X11 (kecuali desktop diperlukan)
  • daemon jari dll

Langkah selanjutnya adalah melalui layanan lemah potensial dan membatasi akses ke sana

  • gunakan at.allow dan cron.allow untuk membatasi akses ke crontab
  • Pastikan semua perangkat tidak dapat dibaca dan tidak dapat ditulis oleh pengguna biasa (tidak termasuk yang seperti/dev/tty dan/dev/null dll)
  • File kunci - izin ini harus dimiliki oleh root:/etc/fstab,/etc/password,/etc/shadow
  • Hati-hati memeriksa hosts.equiv - sumber akses hebat di sini :-)
  • Demikian pula, konfigurasi NFS dikunci jika diperlukan
  • Nonaktifkan akun sistem yang tidak dibutuhkan.
  • Lihatlah filesystem - bit lengket untuk semua executable dan direktori publik.
  • Periksa semua persyaratan root (variabel lingkungan PATH, tidak ada akses jarak jauh sebagai root, keanggotaan grup, persyaratan kata sandi)
  • Periksa semua persyaratan pengguna (keanggotaan dalam grup istimewa, shell yang valid, umask, SUID, persyaratan SGID
  • dan tentu saja panduan SANS adalah sumber yang sangat bagus!
57
Rory Alsop

Ruang "Linux Server" termasuk besar kisaran distribusi , masing-masing dengan strategi pembaruan konfigurasi default mereka sendiri, rantai alat manajemen paket, dan pendekatan ke layanan default dan port terbuka. Ada juga berbagai skenario penyebaran: pengerasan server web sangat berbeda dari pengerasan router berbasis linux. Anda mungkin mendapatkan saran yang lebih baik dengan bertanya tentang distribusi dan menggunakan kasing yang paling Anda pedulikan.

Dalam nada itu, saya hanya akan membahas Keamanan Ubuntu di sini dengan menunjuk ke beberapa sumber yang relevan, meskipun banyak dari ini akan berguna untuk situasi lain.

Pengantar yang baik ada di sini: http://www.andrewault.net/2010/05/17/securing-an-ubuntu-server/

Komunitas telah menjelaskan beberapa standar yang lebih ketat dan tips pengerasan di sini yang lebih condong ke keamanan bahkan jika kegunaan terpengaruh: https://help.ubuntu.com/community/StricterDefaults

Berikut ini adalah matriks dan ringkasan fitur keamanan Ubuntu, untuk membantu orang meneliti daftar periksa yang Anda temukan di tempat lain: https://wiki.ubuntu.com/Security/Features

Untuk melihat bagaimana Anda dapat melakukan beberapa tes sendiri, lihat transkripnya di http://people.canonical.com/~kees/demo/ec2-session.log didorong oleh kode demo di http://people.canonical.com/~kees/demo/

Ringkasan tentang apa yang diperlukan untuk melakukan apa yang ada di: https://wiki.ubuntu.com/Security/Privileges

Tim keamanan untuk Ubuntu memiliki beberapa hal berguna lainnya di wiki mereka: https://wiki.ubuntu.com/Security/

25
nealmcb

Poin dalam pengerasan sistem waktu adalah hal yang menguntungkan, tetapi yang benar-benar mendefinisikan pengerahan server dengan aman adalah apa yang dilakukan terhadap pertahankan status itu.

Pilih salah satu daftar periksa kualitas (lihat tautan di bawah) yang merinci modifikasi konfigurasi yang disarankan untuk memperkuat keamanan server Anda dan menerapkan perubahan yang masuk akal untuk pengaturan Anda. Lebih baik lagi, kodifikasikan rekomendasi melalui Wayang ( http://www.puppetlabs.com/ ): ini adalah win-win, Anda akan menggunakan lebih aman dan Anda Saya akan memberi diri Anda kesempatan berjuang mempertahankan konfigurasi yang diperkeras seiring waktu.

Bonus : Lakukan pemodelan serangan/pemodelan ancaman ( http://taosecurity.blogspot.com/2007/06/threat-model-vs -attack-model.html ) untuk memfokuskan upaya pertahanan Anda. Misalnya, ajukan pertanyaan pada diri sendiri seperti:

Bagaimana penyerang bisa mendapatkan akses ke server ini?
Apa hal yang dapat saya lakukan untuk mengurangi peluang mereka untuk berhasil?

Terjemahkan jawaban Anda ke pertanyaan kedua untuk perubahan konfigurasi spesifik (pengerasan) atau dengan menerapkan kontrol tambahan. Permainan, tentu saja, adalah untuk meminimalkan kemungkinan keberhasilan salah satu ancaman. Ini membutuhkan waktu, tetapi Anda akan merasa lebih baik tentang perubahan yang Anda buat dan mengapa dibandingkan melakukan perubahan secara sembarangan karena seseorang mengatakan itu baik untuk dilakukan.

Dapatkan hebat dalam log dan meninjau . Pencegahan selalu gagal - untuk mengatasi kenyataan ini Anda ingin meningkatkan penebangan sehingga Anda dapat mengidentifikasi dan bereaksi lebih cepat terhadap insiden dan pulih lebih cepat. Alat favorit saya untuk meningkatkan pertahanan dan meningkatkan logging di Linux adalah OSSEC ( http://www.ossec.net/ ). Menghabiskan waktu ekstra untuk menyesuaikan aturan yang disertakan dengan OSSEC untuk mengawasi hal-hal yang Anda khawatirkan adalah kegiatan yang bermanfaat (misalnya mendaftar direktori dan file tambahan untuk disiagakan aktif jika mereka dimodifikasi, menambahkan aturan atau meningkatkan keparahan aturan yang ada untuk mengingatkan Anda tentang anomali otentikasi, menambahkan aturan untuk melihat perubahan pada tabel pengguna mysql ( http://blog.rootshell.be/2011/ 01/07/audit-mysql-db-integrity-with-ossec / ), tak terhingga). Richard Bejtlich baru saja memposting entri blog tepat waktu berjudul Tujuh proyek open source keren untuk pembela ( http://taosecurity.blogspot.com/2011/01/seven-cool-open- source-projects-for.html )

Untuk mendukung verifikasi berkelanjutan dari pertahanan server Anda, Anda dapat menjalankan Nessus ( http://www.nessus.org/nessus/ ) secara berkelanjutan dengan Pusat untuk template audit Linux Keamanan Internet (CIS). Gunakan hasilnya sebagai garis dasar, perhatikan perubahan, dan remediasi kelemahan yang ditemukan.

Untuk rekap:

1) Gambarlah pada daftar periksa pengerasan keamanan dihormati yang ada untuk membantu Anda menyusun kustom yang berfungsi untuk lingkungan Anda (mudah-mudahan setelah melakukan kegiatan pemodelan serangan/ancaman dan memilih kerangka kerja manajemen konfigurasi)

2) Tingkatkan kemampuan pengamatan: tingkatkan pencatatan (mis. Setel sistem untuk menghasilkan log yang cukup untuk kegiatan yang ingin Anda amati), gunakan HIDS (mis. OSSEC ), menggunakan alat analisis log (mis. logwatch - http://sourceforge.net/projects/logwatch/ ), mungkin menangkap aliran jaringan (mis. via softflowd =)

3) Jadikan tanggung jawab seseorang untuk menjadi pembela tekun sistem

4) Terus mengaudit dan menguji untuk memverifikasi apa yang Anda pikir sedang dilakukan

sumber benchmark/daftar periksa :.

http://cisecurity.org/ Centre for Internet Security (CIS) adalah perusahaan nirlaba yang Divisi Pembandingan dan Metriknya membantu organisasi mengurangi risiko gangguan bisnis dan e-commerce yang diakibatkan oleh tidak memadainya teknis kontrol keamanan. Divisi ini memberikan perusahaan dengan standar praktik terbaik konsensus untuk konfigurasi keamanan, serta sumber daya untuk mengukur status keamanan informasi dan untuk membuat keputusan rasional tentang investasi keamanan.

http://iase.disa.mil/stigs/checklist/ Badan Sistem Informasi Pertahanan (DISA)

http://web.nvd.nist.gov/view/ncp/repository
http://csrc.nist.gov/fdcc/faq-common_security_configurations.html
Program Checklist Nasional (NCP), yang didefinisikan oleh NIST SP 800-70 Rev. 1, adalah repositori pemerintah AS dari daftar periksa keamanan yang tersedia untuk umum (atau tolok ukur) yang menyediakan panduan tingkat rendah terperinci tentang pengaturan konfigurasi keamanan sistem operasi dan aplikasi.

21
Tate Hansen

Anda bisa melakukan jauh lebih buruk daripada memulai dengan daftar periksa Sans .

Satu-satunya kritik saya terhadap hal ini adalah bahwa hal itu tidak memberi tekanan yang cukup pada pengelolaan keamanan sistem yang digunakan - khususnya memastikan tambalan vendor diperbarui, merencanakan model izin yang baik, mengelola pelaporan pengecualian IDS, dll.

17
symcbean

Pertama, Anda harus mengetahui tujuan dari server dan model ancaman yang Anda coba pertahankan. Apakah ini server sekali pakai? Apakah banyak pengguna memiliki akses? Jika banyak pengguna memiliki akses, apakah Anda mempercayai mereka semua, atau tidak?

Biarkan saya berasumsi bahwa server ini hanya digunakan untuk layanan jaringan, dan Anda tidak harus berurusan dengan ancaman serangan dari seseorang yang memiliki akun di mesin Anda. Berikut langkah-langkah yang saya ambil:

  • Mengaktifkan firewall. Saya menggunakan iptables untuk mengatur firewall lokal. Saya menggunakan kebijakan default-deny: semua koneksi yang masuk diblokir secara default, kecuali diizinkan secara eksplisit dalam kebijakan firewall. Saya mengaktifkan koneksi masuk ke layanan yang dimaksudkan untuk diekspor ke dunia (mis., Port 25 jika ini adalah server mail, port 80/443 jika ini adalah server web, dan sebagainya). iptables memiliki dukungan yang sangat baik untuk pemfilteran stateful, sehingga begitu koneksi dibuat, semua paket dikaitkan dengan koneksi yang diizinkan.

  • Tingkatkan semua paket, dan aktifkan pembaruan otomatis. Saya memperbarui distribusi Linux saya ke versi terbaru dari semua paket (yum upgrade di Fedora, tetapi gunakan apa pun yang sesuai untuk konfigurasi Anda). Saya juga mengatur skrip cron untuk secara otomatis mengambil dan menginstal pembaruan sekali sehari (yum -y upgrade di Fedora). Saya menyadari bahwa beberapa sysadmin berpengalaman mungkin merekomendasikan pembaruan otomatis, karena ada risiko bahwa pembaruan merusak beberapa layanan; Anda harus mempertimbangkan risiko tersebut terhadap risiko pelanggaran keamanan karena paket yang kedaluwarsa. Secara pribadi, saya menemukan kemudahan dan kenyamanan dari pembaruan otomatis yang sebanding dengan risiko layanan yang rusak, tetapi ini mungkin bukan jawaban yang tepat di semua pengaturan operasional.

  • Aktifkan SELinux. SELinux menyediakan lapisan pertahanan kedua terhadap serangan pada layanan yang terbuka. Kadang-kadang bisa sedikit menyakitkan (kadang-kadang menyebabkan masalah bagi saya, melanggar layanan dengan cara yang sulit untuk debug), tetapi untuk pengaturan yang kritis terhadap keamanan, saya pikir itu sepadan.

  • Atur SSH untuk administrasi jarak jauh. Anda harus mengatur SSH, sehingga Anda dapat mengatur mesin dari jarak jauh. Saya sarankan Anda membuat kunci pribadi DSA di sisi klien, mengenkripsinya dengan frasa sandi, menginstal kunci publik yang sesuai dalam file otor_keys di server, dan masuk menggunakan kunci pribadi. Anda mungkin ingin menyesuaikan sshd_config file konfigurasi di server juga. Pertimbangkan menonaktifkan PasswordAuthentication dan mengharuskan orang untuk masuk menggunakan kunci publik. Otentikasi kata sandi dapat menjadi cadangan yang berguna jika terjadi kesalahan dengan kunci pribadi Anda, tetapi juga risiko yang lebih besar, karena manusia sering memilih kata sandi yang dapat ditebak. Jika Anda memiliki pengguna lain di sistem Anda yang tidak dapat Anda andalkan untuk memilih kata sandi yang sangat berkualitas tinggi, Anda dapat menonaktifkan Kata sandi autentikasi. Jika itu hanya Anda dan Anda memiliki kepercayaan diri yang sangat tinggi pada semua kata sandi Anda, Anda mungkin membiarkannya diaktifkan. Saya tidak mencegah root masuk melalui SSH, tetapi Anda mungkin merasa berbeda.

  • Jika Anda memiliki beberapa sysadmin, atur akun untuk mereka. Berikan masing-masing dari mereka Sudo akses, atau buat akun root terpisah untuk setiap sysadmin.

  • Aktifkan DNSSEC. Saya mengkonfigurasi server saya untuk menjalankan server DNS caching lokal yang memvalidasi nama host dengan DNSSEC sedapat mungkin, untuk mengurangi risiko spoofing DNS.

Kemudian, untuk setiap layanan yang terpapar ke dunia, saya mengambil tindakan pencegahan untuk mengamankan layanan itu. Misalnya, saya mengaktifkan kriptografi (mis., STARTTLS untuk server surat) dan server chroot atau kotak pasir sedapat mungkin. Namun, spesifikasinya akan berbeda dari satu layanan ke layanan lainnya. Karena itu, saya sarankan untuk mengajukan pertanyaan terpisah untuk setiap layanan yang ingin Anda jalankan, meminta saran tentang cara mengunci layanan itu.

Jika Anda mencari distribusi Linux yang sudah banyak menerapkan pengerasan, saya sangat merekomendasikan Openwall Linux .

(Komentar: Jika Anda memberikan pengguna yang tidak tepercaya di server Anda, maka menjadi jauh lebih sulit untuk memperketat keamanan: permukaan serangan jauh lebih besar. Jika itu menjadi masalah bagi Anda, saya sarankan mengajukan pertanyaan terpisah tentang cara mengunci Anda server untuk melindungi terhadap serangan oleh pengguna lokal dengan akun di server Anda, karena serangkaian teknik untuk melakukannya sangat berbeda.)

13
D.W.

Dan bagaimana dengan patch kernel Grsecurity/PAX, ini termasuk fitur yang sangat bagus untuk pengerasan server pada level kernel.

Ringkasan:

  • Lindungi tumpukan dan tumpukan luapan
  • Sembunyikan proses pengguna lain
  • Daftar kontrol akses berbasis peran
  • Pengerasan chroot
  • / proc, FIFO dan pembatasan dmesg
  • Kemampuan logging tingkat lanjut
6
Jerry Jacobs

Untuk Red Hat , NSA memiliki saran untuk pengerasan. Lihat Panduan konfigurasi untuk Red Hat Enterprise Linux 5 - NSA/CSS .

Mereka juga harus membantu CentOS dan turunan lainnya.

4
nealmcb

Untuk RHEL, the Tolok Ukur Perusahaan Red Hat Enterprise Linux 5 dari Pusat Keamanan Internet terlihat seperti sumber yang bagus.

3
nealmcb

Jika Anda mencoba untuk mengamankan sistem Anda dengan menghapus paket/layanan yang tidak dibutuhkan daripada Anda sudah memiliki masalah yang lebih besar. Paket-paket ini seharusnya tidak diinstal sejak awal.

Anda harus menginstal sistem minimalis dan hanya menambahkan paket yang benar-benar Anda butuhkan. Hal yang sama berlaku untuk kernel Anda. Kompilasi kernel Anda sendiri dengan hanya fitur yang Anda butuhkan. Jangan gunakan kernel distribusi Anda dengan dukungan untuk semuanya (Anda tidak akan memerlukan 95% dari itu)

2
Martin Vegter