4 poin oleh GN⁺ 2024-06-24 | 1 komentar | Bagikan ke WhatsApp

Tujuan

  • Hanya pengguna yang berwenang yang dapat menjalankan perintah dengan hak root
  • Tidak menggunakan eskalasi hak istimewa

Implementasi

  • Membuat kunci SSH khusus untuk digunakan dalam autentikasi root

    mkdir /root/.ssh/
    echo ssh-ed25519 AAAAC3Nza... > /root/.ssh/local_keys
    
  • Menjalankan instance server sshd yang diikat ke soket domain Unix

    mkdir /run/sshd/
    chown root:wheel /run/sshd/
    chmod 750 /run/sshd/
    s6-ipcserver /run/sshd/sshd.sock sshd -ie -o AuthorizedKeysFile=/root/.ssh/local_keys -o PermitRootLogin=yes
    
  • Mengunci akun root dan mengatur agar login dengan kata sandi tidak dimungkinkan

    # Ubah kata sandi root di file /etc/passwd
    
  • Menggunakan opsi ProxyCommand untuk terhubung ke instance sshd lokal

    ssh -o ProxyCommand='socat STDIO UNIX-CONNECT:/run/sshd/sshd.sock' \
        -i .ssh/root-key.pub \
        -t \
        root@root \
        "cd $(pwd); '$SHELL' --login"
    
  • Menulis skrip yang menggunakan opsi ProxyUseFdpass untuk meneruskan file descriptor soket

    #!/usr/bin/env python3
    import sys
    import socket
    import array
    
    s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    s.connect("/run/sshd/sshd.sock")
    
    fds = array.array("i", [s.fileno()])
    ancdata = [(socket.SOL_SOCKET, socket.SCM_RIGHTS, fds)]
    socket.socket(fileno=1).sendmsg([b'\0'], ancdata)
    
  • Pada akhirnya menjalankan perintah ssh

    ssh -o ProxyCommand='/home/hugo/tmp/passfd.py' \
        -i .ssh/root-key.pub \
        -o ProxyUseFdpass=yes \
        -t \
        root@root \
        "cd $(pwd); '$SHELL' --login"
    

Kesimpulan

  • Teknik ini menggunakan OpenSSH untuk menangani detail keamanan
  • Mendukung berbagai metode autentikasi, termasuk kunci SSH berbasis perangkat keras
  • Proses penyiapan di host baru tidak rumit
  • Skrip passfd.py adalah solusi sementara untuk eksperimen; untuk penggunaan sehari-hari, lebih baik ditulis sebagai executable kecil

Opini GN⁺

  • Metode ini dapat meningkatkan keamanan sebagai alternatif untuk sudo atau doas
  • Pendekatan yang menggunakan SSH untuk memperkuat autentikasi mendukung berbagai metode autentikasi, termasuk autentikasi berbasis perangkat keras
  • Konfigurasi sistem relatif sederhana sehingga engineer pemula pun dapat mengikutinya dengan mudah
  • Akan lebih praktis jika skrip passfd.py dijadikan executable kecil dan ditempatkan di /usr/local/bin
  • Metode ini hanya berjalan secara lokal tanpa eksposur jaringan, sehingga keamanannya tinggi

1 komentar

 
GN⁺ 2024-06-24
Komentar Hacker News
  • Masalah kompleksitas tambahan: Alih-alih satu biner suid yang sudah ada, dibutuhkan dua biner yang berjalan sebagai root dan menggunakan soket UNIX. Ini menambah kompleksitas, termasuk operasi kriptografi asimetris.

  • Keamanan sistem: Jika biner sudo dibatasi ke grup tertentu (wheel) dan izinnya disesuaikan, tingkat keamanan yang mirip dengan pendekatan sshd dapat dipertahankan. Jika pengelola paket sistem merusak izin sudo, hal itu juga bisa diperbaiki secara berkala dengan cron atau dengan memasang sudo langsung dari source.

  • run0 milik systemd: Alat run0 milik systemd bekerja mirip sudo, tetapi bukan SUID. Sebagai gantinya, ia meminta manajer layanan untuk menjalankan perintah. Ini menunjukkan perilaku yang lebih mirip ssh.

  • Perbandingan ssh dan sudo: Dipertanyakan apakah login sebagai root melalui ssh benar-benar lebih aman daripada sudo. Perlu ada pembahasan tentang cara mencegah akses pengguna jarak jauh ke sshd. Dibandingkan dengan pembatasan sudo, pendekatan ssh bisa lebih rentan.

  • Masalah layanan jaringan: Jika ssh tidak dimulai saat boot, login konsol pun menjadi tidak mungkin. Ini bisa menimbulkan lebih banyak masalah daripada sudo atau su.

  • Pendekatan yang mirip systemd run0: Ada pendekatan yang serupa dengan alat run0 milik systemd.

  • Kontrol terperinci sudo: sudo dapat mengontrol perintah, argumen, pembuatan sub-shell, dan lain-lain secara rinci. Pendekatan baru akan kehilangan kontrol terperinci ini, dan pengelolaan kunci tepercaya menjadi lebih sulit.

  • Konfigurasi konsol SSH: Cara mengelola akses root dengan menggunakan konsol SSH khusus. Keamanan diperkuat melalui Yubikey dan pengaturan firewall.

  • Batasan protokol SSH: SSH bukan menjadikan pembuatan proses sebagai bagian dari protokol, dan tidak dapat meneruskan resource lokal ke proses anak. Untuk digunakan sebagai pengganti sudo, diperlukan ekstensi yang mirip dengan POSIX spawn.

  • Manajemen pengguna: Penting untuk tidak memperlakukan pengguna seperti anak kecil, melainkan menetapkan default yang masuk akal agar masalah potensial bisa dihindari. Jika akses root diperlukan, masuk melalui konsol lebih disarankan.

  • Masalah mode pengguna tunggal: Jika tidak bisa login sebagai root dalam mode pengguna tunggal, pemulihan sistem menjadi sulit. Ini diperlukan untuk menyelesaikan masalah yang dapat terjadi selama upgrade sistem.