Bagaimana saya bisa melindungi dari intrusi dan malware sebelum menghubungkannya ke internet (terutama pada alamat IP publik)?

60

Dengan sejumlah besar Raspberry Pis di alam liar, dan fakta bahwa kelompok-kelompok besar dari mereka dikonfigurasi secara identik (ketika kartu SD yang baru saja dipasang dengan salah satu dari beberapa gambar yang tersedia), mereka cenderung menjadi target yang menggoda untuk malware, termasuk botnet.

Apa yang bisa dilakukan untuk mengurangi ini?

Sudah cukup dikenal bahwa seseorang harus mengubah kata sandi untuk pengguna "pi" (Debian) dan "root" (Arch.) Tetapi bagaimana dengan akun sistem lain (misalnya "tli", "pnd"?) Apakah ada di antara mereka yang memiliki kata sandi universal yang mungkin sama untuk semua unit?

Dan apakah ada kelemahan yang diketahui dalam paket lain yang diinstal pada gambar SD yang tersedia untuk Pi (misalnya karena keterbatasan perangkat keras, atau versi pengurangan dari paket-paket itu?)

Khususnya saya khawatir ssh, mysql dan layanan lain yang mungkin berjalan pada gambar yang baru diinstal.

menemukan
sumber

Jawaban:

23

Hal-hal yang saya perhatikan sejauh ini tentang stok gambar Squian Debian:

  • / etc / shadow berisi banyak hash kata sandi untuk akun yang bukan akun pi (buildbot, dll). Ubah kata sandi pada akun pi, secara alami, jika Anda belum melakukannya (atau buat akun pengguna baru untuk diri sendiri dan hapus akun pi) tetapi juga edit entri lainnya dan ganti hash dengan * s. Catatan / etc / passwd berisi entri duplikat untuk akun pi, yang membingungkan para adduser / deluser, cukup hapus satu.

  • konfigurasi ssh daemon default memungkinkan login root jarak jauh. Ini harus dinonaktifkan.

  • layak menggunakan netstat untuk memeriksa set hal mendengarkan koneksi; jumlah barang yang mengejutkan berjalan dibandingkan dengan neto Debian minimal. Ini umumnya ide yang baik untuk mengurangi paparan hanya pada hal-hal yang Anda butuhkan , jadi pertama-tama matikan atau matikan semua , kemudian paparkan hanya layanan yang Anda inginkan terlihat di internet publik (biasanya hanya ssh atau ssh + http).

  • Anda ingin mengubah kunci host ssh daripada menggunakan yang ada di gambar (AIUI gambar terbaru sebenarnya dibuat ulang pada boot pertama)

bayangan bulan
sumber
1
Saya tidak melihat masalah dengan pernyataan pertama Anda. Untuk apa pengguna tambahan itu? Tidakkah seharusnya dinonaktifkan untuk login? Anda dapat memeriksa dengan mencoba suke mereka.
Jivings
2
Saya akan memberikan ini -1. Terutama karena Anda menyarankan untuk mengedit file bayangan secara manual. Itu ide yang sangat buruk.
Jivings
@Jivings Tidak, dia tidak. Dia mungkin juga menyiratkan menggunakan vipw; apakah itu ide yang buruk? Bukan itu. +1 untuk menyiratkan penggunaan vipw.
user2497
41

Ada banyak cara untuk mengatasi kerentanan, namun hal pertama yang harus Anda ketahui adalah bahwa Linux tidak rentan terhadap intrusi seperti Sistem Operasi lainnya. Ini terutama karena kurangnya malware yang menargetkan * NIX. Namun demikian, Anda ingin mengetahui cara-cara di mana sistem Anda dapat diakses.

Kata sandi

Pertama, Anda harus mengubah kata sandi default untuk setiap pengguna yang dapat masuk. Untuk Debian ini hanya Pi pengguna default . Untuk Arch Linux ini adalah root super user . Kata sandi diubah saat login sebagai pengguna dengan mengetik passwdpada baris perintah.

Kebijakan kata sandi yang aman dianjurkan, karena akan cukup mudah untuk menjalankan serangan kamus brute force pada pengguna default Anda. Pilih kata sandi yang layak dan panjang sedang.

Ketidakjelasan

Akses jarak jauh mungkin merupakan lubang keamanan yang paling penting. Apa yang bisa kita gunakan di sini dinamai keamanan oleh ketidakjelasan . Metode serangan yang umum adalah memindai serangkaian alamat IP untuk port terbuka. Jadi salah satu penanggulangan paling sederhana yang bisa kita lakukan adalah menjadi pengguna yang tidak menggunakan port default .

Yang perlu dilakukan di sini adalah mengubah port default untuk protokol yang biasa digunakan. Sebagai contoh, port SSH default adalah 22 dan FTP adalah 21. Pada sistem saya SSH menggunakan 222 dan FTP 221, yang seharusnya mengaburkan protokol ini dari serangan otomatis.

Keamanan Koneksi

Pertama, masalah keamanan yang paling penting adalah bahwa akun root seharusnya tidak dapat masuk melalui SSH. Anda dapat menonaktifkan login root dalam /etc/ssh/sshd_configfile dengan mengomentari atau menghapus baris ini:

PermitRootLogin yes

Ini harus diatur ke tidak secara default, tetapi yang terbaik adalah memastikan.


Jika Anda sering menggunakan SSH, dan khawatir tentang man in the middle attacks, serangan kamus terhadap kata sandi Anda, maka Anda dapat menggunakannya SSH Keys.

Otentikasi berbasis kunci memiliki beberapa keunggulan dibandingkan otentikasi kata sandi, misalnya nilai kunci secara signifikan lebih sulit untuk diubah daripada kata sandi biasa.

Untuk mengatur otentikasi kunci SSH, Anda harus terlebih dahulu membuat pasangan kunci. Ini paling mudah dilakukan pada mesin klien Anda (mesin yang Anda inginkan untuk mengakses Pi).

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa):

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/pi/.ssh/id_rsa.
Your public key has been saved in /home/pi/.ssh/id_rsa.pub.

Seperti yang Anda lihat, ini telah membuat dua file, kunci pribadi id_rsadan kunci publik id_rsa.pub.

Kunci pribadi hanya diketahui oleh Anda dan harus dijaga dengan aman . Sebaliknya, kunci publik dapat dibagikan secara bebas dengan server SSH mana pun yang ingin Anda sambungkan.

Jadi yang ingin kita lakukan adalah menyalin kunci publik ke Raspberry Pi. Kita dapat melakukan ini dengan sangat mudah:

ssh-copy-id pi@address

Di mana pinama pengguna Raspberry Pi, dan addressmerupakan alamat IP Pi.

Saya akan tegaskan, kami mendistribusikan kunci publik . Kunci pribadi adalah milik Anda. Pegang erat-erat, untuk melepaskan kunci itu merusak keamanan sistem.

The Arch wiki memiliki deskripsi yang sangat baik tentang bagaimana ini bekerja:

Ketika server SSH memiliki kunci publik Anda di file dan melihat Anda meminta koneksi, itu menggunakan kunci publik Anda untuk membangun dan mengirim Anda tantangan. Tantangan ini seperti pesan kode dan harus dipenuhi dengan respons yang sesuai sebelum server memberi Anda akses. Apa yang membuat pesan kode ini sangat aman adalah bahwa pesan itu hanya dapat dipahami oleh seseorang dengan kunci pribadi. Meskipun kunci publik dapat digunakan untuk mengenkripsi pesan, kunci publik tidak dapat digunakan untuk mendekripsi pesan yang sama. Hanya Anda, pemegang kunci pribadi, yang akan dapat memahami tantangan dengan benar dan menghasilkan respons yang benar.

Untuk informasi lebih lanjut tentang keamanan otentikasi kunci publik, Wikipedia memiliki penjelasan menyeluruh .

Dengan keamanan SSH, Anda dapat melakukan sejumlah besar transfer data terenkripsi dan aman. Praktis setiap koneksi port lain dapat dialihkan melalui SSH jika diperlukan. Anda bahkan dapat meneruskan sesi X melalui SSH sehingga muncul di komputer lain.

Sebagai contoh yang menarik, kemarin saya menjalankan Eclipse di Desktop saya, melihatnya di Raspberry Pi saya, dan mengendalikan mouse dan keyboard dari Netbook saya. Itulah kekuatan SSH.

Izin

Izin file adalah inti dari sistem keamanan Linux. Mereka mempengaruhi siapa yang dapat melihat file dan folder Anda, dan bisa sangat penting dalam melindungi data Anda. Misalnya, masuk ke Raspberry Pi sebagai pengguna normal dan jalankan:

cat /etc/shadow

The shadowfile berisi password terenkripsi untuk pengguna di sistem, sehingga kami tidak ingin hanya tentang siapa pun untuk mengambil melihat hal itu! Jadi Anda harus melihat respons ini:

cat: /etc/shadow: Permission denied

Kita dapat melihat mengapa ini dilakukan dengan melihat izin file:

ls -l /etc/shadow
-rw------- 1 root root 821 Jun 11 22:13 /etc/shadow

Ini memberi tahu kami bahwa file tersebut dimiliki oleh root, dan hanya pemilik yang memiliki izin baca / tulis. Mari kita uraikan output itu.

-rw-------

Ini adalah keadaan izin. Bit pertama memberitahu kita jenis file ( -berarti file biasa). Tiga bit berikutnya mewakili tindakan yang tersedia untuk pemilik file. Tiga bit kedua mewakili grup , dan tiga bit terakhir untuk orang lain atau orang lain. Dengan demikian direktori dengan izin penuh akan terlihat seperti ini:

drwxrwxrwx  10 root root   280 Jun 20 11:40 tmp/

Itu membaca, menulis, dan mengeksekusi izin untuk pemilik, grup, dan semua orang lainnya.

Bagian penting berikutnya adalah dua nama. Dalam kasus kami root root. Pengguna pertama adalah pemilik file. Yang kedua adalah grup pengguna . Misalnya akan umum untuk melihat:

drwxr-xr-x  10 pi users   280 Jun 20 11:40 home/pi

Ini akan memungkinkan akses baca / tulis untuk pengguna pidi direktori rumahnya, dan akses baca untuk semua pengguna lain.

Izin paling sering disebut dan dikendalikan menggunakan nilai oktal. Misalnya, jika kita ingin mengatur rw hanya untuk pemiliknya, kita akan mengetik:

chmod 600 /path/to/file

Ini adalah ikhtisar dasar, untuk detail lebih lanjut tentang izin file Linux, berikut ini adalah artikel yang bagus.


Pemahaman ini penting saat mengamankan file dan folder. Misalnya, kita baru saja mengatur kunci SSH. Kami jelas tidak ingin pengguna lain melihat di dalam ~/.sshdirektori kami , atau mereka akan dapat mengambil kunci pribadi kami. Dengan demikian kami menghapus hak baca mereka:

chmod 700 ~/.ssh
ls -la ~/.ssh 
drwx------   2 james users  4096 Jun 18 03:05 .

Saya harap ini dapat menyelesaikan beberapa masalah Anda dengan mengamankan Linux. Dari sini Anda harus dapat melihat bahwa itu adalah sistem yang cukup aman dan jika Anda berhati-hati Anda tidak akan memiliki masalah keamanan.

Jivings
sumber
10
Saya tidak setuju dengan komentar Obscurity Anda, akan butuh beberapa detik untuk memetakan port yang terbuka di perangkat Anda dan menemukan server ssh Anda. Nonaktifkan login kata sandi dan tetap di port normal. Saya ragu Anda perlu ftp sama sekali, gunakan scp sebagai gantinya.
Alex Chamberlain
2
@AlexChamberlain Ini adalah speed-bump sementara untuk penyerang, tetapi tidak berarti solusi lengkap sendirian.
Jivings
4
Mengubah port default cenderung menurunkan ketukan pintu yang sering mengarah pada serangan kamus. Tentu itu adalah langkah pengamanan yang sangat kecil tetapi memiliki manfaat lain juga yaitu dapat membatasi log kembung. Ini lebih merupakan tindakan pencegahan daripada keamanan tetapi masih layak dipertimbangkan.
Beeblebrox
2
@AlexChamberlain, Selama kegagalan kunci debian ssh kami mencatat banyak upaya di port 22 dan tidak ada tempat lain. Dalam hal itu, menjalankan pada port yang berbeda akan memberi Anda banyak waktu sementara para peretas mencoba untuk mencari tahu dari host mana yang dieksploitasi yang bernilai. SBO tidak banyak membantu jika penyerang menargetkan Anda secara khusus.
John La Rooy
1
Saya setuju. Maksud saya adalah bahwa itu bukan hanya thereotical - telah ada waktu dalam memori baru di mana SBO pasti melakukan bantuan, dan membuat signifikan perbedaan.
John La Rooy
6

Untuk mencegah serangan bruteforce, Anda dapat menginstal dan mengonfigurasi fail2ban. Ini akan mengurai file log (seperti /var/log/auth.log) dan mencoba mendeteksi jika beberapa upaya masuk gagal. Kemudian, itu akan secara otomatis melarang alamat IP sumber dengan iptables.

Ada banyak howto di Internet.

Morgan Courbet
sumber