Apakah mungkin untuk mencegah SCP sementara masih memungkinkan akses SSH?


13

Menggunakan Solaris dan Linux server dan OpenSSH, apakah mungkin untuk mencegah pengguna menyalin file menggunakan "scp" sambil tetap mengizinkan akses shell dengan "ssh"?

Saya menyadari bahwa akses file jenis 'ssh $ server "cat" jauh lebih sulit untuk dicegah, tetapi saya perlu melihat tentang menghentikan "scp" sebagai permulaan.

Gagal, apakah ada cara untuk secara andal mencatat semua akses SCP di sisi server syslog?


Jika Anda ingin menutup ssh tetapi tidak scp Anda bisa menggunakan ini: sublimation.org/scponly/wiki/index.php/Main_Page Sayang sekali Anda menginginkannya sebaliknya: - \

Saya memiliki pertanyaan yang sama tetapi karena alasan lain. Dalam kasus saya, saya ingin mematikan SFTPD dan SCPD di server. Alasannya adalah bahwa kami mengizinkan transfer file tetapi kami ingin pengguna melakukan transfer melalui copy node kami. Ini karena cara kami memisahkan muatan pada tautan kami. Jadi menurut loop ini mudah untuk mematikan SFTPD, tetapi jika saya mengerti benar itu tidak mungkin untuk mematikan SCPD?

Jawaban:


12

Meskipun Anda dapat mengedit Anda /etc/ssh/sshd_configagar terlihat seperti ini:

ForceCommand           /bin/sh
PermitOpen             0.0.0.0
AllowTcpForwarding     no
PermitTunnel           no
# Subsystem sftp       /usr/lib/openssh/sftp-server
PermitUserEnvironment  no

Saya malah akan menentukan untuk apa pengguna menggunakannya. Karena jika hanya ada beberapa perintah yang Anda ingin mereka akses, saya akan menghapus kemampuan mereka bahkan untuk memanggil sshshell normal .

AllowUsers             root
PermitRootLogin        forced-commands-only

PermitUserEnvironment  no

AllowTcpForwarding     no
PermitTunnel           no

# Subsystem sftp       /usr/lib/openssh/sftp-server
Subsystem smb-reload   /usr/bin/smbcontrol smbd reload-config
Subsystem status       /opt/local/bin/status.sh

ssh root@example -s smb-reload

Jika Anda benar-benar harus dapat menjalankan shell normal, hal yang paling Anda harapkan, adalah memperlambatnya, dan membuatnya lebih sulit.


8

Seperti yang telah dicatat orang lain, Anda tidak dapat memblokir scp (well, Anda bisa:, rm /usr/bin/scptetapi itu tidak benar-benar membuat Anda ke mana pun).

Yang terbaik yang dapat Anda lakukan adalah mengubah shell pengguna ke shell terbatas (rbash) dan hanya kemudian menjalankan perintah tertentu.

Ingat, jika mereka dapat membaca file, mereka dapat menyalin / menempelkannya dari layar. File biner? xxd / uuencode / mmencode semua menyiasati ini.

Saya juga menyarankan menggunakan proses akuntansi untuk membantu Anda melacak aktivitas.


Akuntansi proses sedikit membantu, tetapi akuntansi proses historis benar-benar tidak berguna (misalnya hanya mencatat nama dasar dari perintah yang dijalankan). Saya ingin mendengar tentang keberhasilan modern dengan proses akuntansi yang sebenarnya berguna.
carlito

1
Bagaimana kalau menggunakan shell terbatas yang ditambal yang juga mencatat semua perintah yang dijalankan ke pipa di suatu tempat? Jenis gagasan .bash_history yang tersentralisasi.
MikeyB

Sebenarnya di sisi server Anda harus menghapus / usr / lib / openssh / sftp-server, tapi saya pikir sshd memiliki server sftp bawaan.
Brad Gilbert

@Brad: Perintah apa pun yang ditentukan oleh klien masih dijalankan melalui shell; jadi jika sftp-server tidak di PATH default (yang tidak) mengubah shell ke yang terbatas sudah cukup untuk menonaktifkannya, Anda tidak perlu menghapus biner.
MikeyB

6

Anda tidak mendapatkan apa-apa dengan menghentikan "scp" ketika Anda masih mengizinkan mekanisme tambahan yang benar-benar tak terbatas untuk mentransfer file. Melarang scp tetapi mengizinkan mekanisme lain untuk menyalin file adalah metode berbohong kepada auditor. Seringkali auditor meminta dibohongi. Biasanya saya melihat auditor bekerja dengan manajer untuk membuat perbaikan palsu, sehingga mereka dapat menyatakan sesuatu seperti "perintah transfer file scp telah dinonaktifkan, sehingga file tidak dapat disalin dari server menggunakan scp".

Sekarang mekanisme logging yang masuk akal akan lebih baik. Mungkin auditd akhirnya berfungsi di Linux. Mungkin Solaris akhirnya menambahkan beberapa mekanisme atau dtrace yang bisa digunakan dengan aman. Masuk akal untuk menginginkan OS untuk login setiap kali file diakses. Tentu saja tidak ada perbedaan antara "membaca" dan "menyalin". Tetapi ini dapat memuaskan auditor dan memberikan keamanan yang signifikan terhadap sistem. Log Anda bisa sangat berisik sehingga datanya tidak berguna, atau bahkan Anda terpaksa menyimpan jejak audit yang sangat pendek. (mis. Anda tidak dapat mencatat setiap read () - dan satu aplikasi yang melakukan sesuatu yang mengejutkan dapat membuat logging setiap open () menjadi bencana).


5

Tergantung pada apa SSH diperlukan untuk, Anda mungkin dapat mencapai tujuan ini (untuk non-sepele) file dengan menggunakan IPTable untuk mengakhiri sesi jika ukuran paket lebih besar, katakanlah 1.400 byte. Ini berarti bahwa ssh interaktif sebagian besar akan berfungsi, tetapi segera setelah sesuatu mencoba mengirim paket 1500 byte - seperti scp seharusnya untuk file yang lebih besar daripada 1499 byte dengan asumsi MTU standar 1500, itu akan memutuskan koneksi.

Ini juga akan mencegah serangan "catting" yang Anda sebutkan.

Sayangnya ini berarti bahwa Anda mungkin memiliki masalah mengedit beberapa file dengan editor teks, jika layar perlu menggambar lebih dari 1400 karakter, atau jika Anda perlu menyimpan file yang panjang atau melakukan daftar direktori yang panjang.

Dalam kasus paling sederhana perintah untuk melakukan ini mungkin terlihat seperti

iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff -j DROP

Kita dapat membuat ini bekerja lebih baik dengan menggabungkan cek panjang paket dengan ipt_recent, sehingga Anda mengizinkan jumlah paket lebih besar dari 1400 byte dalam jangka waktu yang ditetapkan (katakanlah 8 paket per 5 detik) - ini akan memungkinkan paket hingga 12k untuk tergelincir melalui, tetapi dapat memberi Anda interaktivitas yang Anda perlukan untuk mengedit file, dll. Anda dapat, tentu saja, mengubah jumlah paket.

Ini mungkin terlihat seperti

iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff \
         -m recent --name noscp --rdest --set 
iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff \
         -m recent --name noscp --rdest --update --seconds 5 --hitcount 8 \
         -j REJECT --reject-with tcp-reset

Contoh aturan di atas hanya melindungi dari unggahan scp seperti scp myfile.data remote.host:~. Untuk melindungi tambahan terhadap unduhan scp seperti scp remote.host:~/myfile.data /local/path, ulangi aturan di atas tetapi ganti --dportdengan --sport.

Seorang peretas yang cerdas dapat mengatasi keterbatasan ini dengan menetapkan MTU kurang dari 1400 pada mesinnya (atau memaksa mtu atau serupa). Selain itu, meskipun Anda tidak dapat membatasi ini untuk pengguna tertentu, Anda dapat membatasinya dengan IP dengan memodifikasi jalur iptables yang sesuai !!

Cheers, David Go



1

Tidak. scpDan sshoperasikan pada port yang sama dan gunakan protokol yang sama. Jika Anda membuka sshsesi, Anda bahkan dapat membagikan koneksi Anda dengan panggilan scp berikutnya menggunakan opsi seperti ControlMaster.

Jika Anda tidak ingin orang menyalin file tertentu dari mesin, Anda tidak boleh memberi mereka segala jenis akses shell ke mesin.


Ya, jawaban yang jelas adalah mengunci sistem dan tidak memberikan akses. Namun pada kenyataannya, perusahaan saya memiliki auditor yang mengatakan bahwa kami perlu mencegah file tidak disalin dari server dan / atau upaya log terlepas dari kenyataan bahwa kami serius membatasi akses ssh dan memiliki sistem RBAC yang kuat di tempat.

2
@Jason: Maka Anda perlu mencatat akses file. Bahkan jika Anda menonaktifkan scp, bagaimana Anda menghentikan seseorang dari menjalankan: ssh 'cat / path / to / file'> salin?
derobert

0

Ada cara untuk menggunakan 'scponly' sebagai shell untuk menonaktifkan ssh interaktif dan memungkinkan scp, tetapi saya tidak mengetahui adanya sesuatu yang ada yang bekerja secara terbalik.

Anda mungkin dapat menjelajahi peretasan shell scponly untuk mencapai yang sebaliknya.


0

Ini tidak mungkin sebenarnya setelah sedikit googling.

Lihatlah diskusi ini: http://www.mydatabasesupport.com/forums/unix-admin/387261-how-restrict-ssh-users-block-scp-sftp.html


Tautan ini sudah mati.
rox0r

0

Untuk apa nilainya, produk komersial CryptoAuditor mengklaim dapat mengontrol transfer file melalui SSH, dengan MITM ing koneksi dan menggunakan inspeksi paket dalam . Jelas tidak ada solusi yang aman dari copy + paste, uuencode / decode, FISH , dll. Yang menyenangkan adalah bahwa itu transparan (selain dari kemungkinan kesalahan sertifikat); tidak ada perangkat lunak agen untuk diinstal pada kedua ujung koneksi SSH, dan tidak ada portal / proxy untuk mengkonfigurasi.

Saya belum menggunakan produk, jadi YMMV.


0

Memblokir transfer file tanpa menghapus begitu banyak utilitas sistem sehingga meninggalkan mesin sama sekali tidak berguna adalah mustahil. Anda harus menyingkirkan semua yang mampu menampilkan konten file ke stdout, dan semua yang mampu menulis stdin ke stdout, dan pada saat Anda telah menghapus semua yang ada begitu sedikit yang tersisa sehingga tidak ada titik untuk memungkinkan akses shell sama sekali.

Jadi saya akan fokus pada alternatif logging Anda:

Ada sebuah program yang disebut "skrip" yang termasuk dalam hampir setiap distro, dan yang seharusnya mudah dipasang pada yang tidak. Ini adalah sesi logger yang merekam semua input dan output dari shell, opsional dengan data waktu sehingga dapat diputar ulang dan terlihat seperti Anda sedang mengawasi dari bahu pengguna ketika mereka melakukannya. (Lagi pula, 95%, kadang-kadang outputnya bobbles ketika ncurses terlibat, tetapi tidak terlalu sering.)

Halaman manualnya mencakup instruksi untuk mengaturnya sebagai shell login sistem. Pastikan log pergi ke suatu tempat di mana pengguna tidak bisa menghapusnya (atribut sistem file append-only (settable via chattr) dapat berguna untuk ini. Seperti halnya ACL atau skrip inotify)

Ini masih tidak mencegah pengguna menyalin file dari sistem, tetapi memungkinkan Anda meninjau apa yang dilakukan oleh pengguna mana dan kapan. Mungkin bukan tidak mungkin untuk memotong, tetapi memotong hampir pasti akan berakhir di log sehingga Anda setidaknya akan tahu ada yang tidak baik, bahkan jika mereka berhasil menyembunyikan persis apa itu.


0

Saya percaya Anda dapat menghapus instalan openssh-klien (atau yang setara) di server.

Saya pikir klien scp memanggil scp di server saat menyalin data jadi jika Anda menyingkirkan scp di server, maka Anda harus baik-baik saja.

$ scp bla server:/tmp/
...
debug1: Sending environment.
debug1: Sending env LC_ALL = en_US.utf8
debug1: Sending env LANG = en_US.utf8
debug1: Sending env XMODIFIERS = @im=ibus
debug1: Sending env LANGUAGE = en_US.utf8
debug1: Sending command: scp -v -t /tmp/
bash: scp: command not found
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
lost connection
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.