GNU/Linux >> Belajar Linux >  >> Linux

Bisakah saya mempercayai 127.0.0.1 secara membabi buta?

Berkomunikasi melalui 127.0.0.1 dapat dianggap hanya sebagai mekanisme IPC lain, tetapi mekanisme yang menggunakan kembali protokol yang ada. Sama seperti memori bersama atau soket atau pipa domain UNIX, ini adalah salah satu dari banyak cara yang dapat digunakan dua proses untuk berkomunikasi dalam satu sistem. Jika Anda yakin bahwa proses di sistem Anda tidak disusupi, maka Anda dapat "membabi buta" memercayai koneksi melalui 127.0.0.1.


Jika Anda mengetahui bahwa alamat IP di ujung lain dari soket TCP adalah 127.0.0.1, ini menjamin bahwa administrator sistem telah mengonfigurasi firewall untuk mengalihkan sambungan khusus ini, atau ujung lain dari soket TCP adalah proses yang sedang berjalan mesin yang sama. Jadi jika Anda mempercayai mesin server Anda secara keseluruhan, Anda dapat mempercayai 127.0.0.1. Namun, ada keuntungan untuk tidak menggunakan soket TCP, untuk pertahanan yang mendalam.

Anda harus berhati-hati dalam menerapkan pemeriksaan localhost. Localhost adalah 127.0.0.1 hingga hari itu bukan, misalnya karena Anda beralih ke versi beberapa perpustakaan yang menggunakan IPv6 secara default, atau karena Anda memutuskan untuk menambahkan beberapa bentuk penerusan proxy ke campuran untuk memungkinkan Anda menjalankan dua layanan pada mesin atau wadah yang berbeda. Jika Anda mulai menggunakan proxy, berhati-hatilah untuk memeriksa di tempat yang tepat. Dan tentu saja Anda harus memastikan untuk tidak pernah meng-hosting apa pun yang mungkin berbahaya di mesin yang sama (walaupun mengapa Anda melakukannya pada masa itu dengan VM dan kontainer).

Mengetahui bahwa Anda berbicara dengan mesin yang sama hanya memberi tahu Anda beberapa itu proses pada mesin yang sama ada di ujung lain koneksi. Itu tidak memberi tahu Anda bahwa itu adalah proses yang benar. Di bawah operasi normal, mungkin, kedua proses sedang berjalan. Tetapi jika sesuatu yang salah terjadi, seperti satu proses macet setelah kehabisan memori karena serangan denial-of-service, port akan bebas untuk didengarkan oleh proses lain. Dan kapan saja, setiap proses lokal dapat terhubung ke server yang sedang berjalan. Ini mengharuskan penyerang untuk dapat menjalankan beberapa proses secara lokal, tetapi bisa juga beberapa proses yang tidak memiliki hak istimewa yang tidak dapat melakukan banyak hal. Jadi, meskipun mengandalkan 127.0.0.1 bukanlah kerentanan, Anda tetap terbuka untuk peningkatan hak istimewa.

Jika Anda bisa, gunakan soket Unix sebagai gantinya. Soket Unix dan TCP berfungsi sama kecuali untuk menentukan alamat yang akan dihubungkan atau didengarkan, sehingga tidak memerlukan banyak perubahan kode. Soket Unix dapat memiliki izin, atau dapat dibuat oleh pengawas induk, dan tidak ada lagi yang dapat terhubung dengannya. Dengan soket Unix, Anda memiliki jaminan bahwa tidak hanya apa yang ada di ujung soket yang berjalan di mesin yang sama, tetapi juga proses yang diharapkan. Ini hanya membuat Anda rentan terhadap pelanggaran keamanan di layanan autentikator atau layanan utama, daripada pelanggaran apa pun yang berjalan di mesin yang sama.


Linux
  1. Bisakah saya menggunakan GDB untuk men-debug proses yang sedang berjalan?

  2. Bagaimana saya bisa tahu di Linux proses mana yang mengirim sinyal ke proses saya

  3. Bisakah ID utas dari proses multithreaded sama dengan ID proses dari proses lain yang sedang berjalan?

  1. Postgres tidak mengizinkan localhost tetapi berfungsi dengan 127.0.0.1

  2. Bagaimana saya bisa tahu proses mana yang menggunakan swap?

  3. Bagaimana saya bisa menghentikan proses symfony yang mendengarkan di http://127.0.0.1:8000

  1. Mengapa saya tidak bisa mematikan proses ini di Linux?

  2. Bisakah suatu proses berjalan terlepas dari shell apa pun?

  3. Tidak dapat terhubung ke MySQL menggunakan 'localhost' tetapi menggunakan '127.0.0.1' tidak apa-apa?