Действительно ли возможно предотвратить SCP при тихом предоставлении доступа SSH?

(Команды, отправленные здесь, работают над системами UNIX, как это - то, как я решаю большинство этих типов проблем),

Прежде, чем сделать очень, я сделал бы копию текущего состояния Флеш-накопителя:

Кошка $/dev/sdc> drivedump или: $ dd, если =/dev/sdc of=drivedump bs=4k conv=noerror

Замените sdc с адресом Вашего диска. Можно попытаться выяснить то, чем это должно быть, вставив его, и ввод:

$ dmesg | меньше

И наблюдение, что было создано в конце. Должен быть/dev/sd и, вероятно, самая низкая буква, которая существует.

Если память разлагается, Вы хотите получить все от нее как можно скорее, прежде чем она ухудшится. В противном случае копия не причинит боль при выполнении инструментов на ней.

Теперь, когда у Вас есть копия диска, необходимо выяснить то, что было искажено. Вы видите, имеет ли fdisk некоторую идею, на что был похож раздел:

/sbin/fdisk-l drivedump

Если это становится очень запутанным, у Вас есть отказ раздела некоторого вида: необходимо восстановить таблицу разделов файла. Если это знает точно, что произошло, и все это выглядит правильным (один раздел, и это - размер палки), затем, можно попытаться монтировать его, чтобы видеть, работает ли это. При пропавших без вести тонн файлов после монтирования его можно выполнить любого из обычных подозреваемых в средствах восстановления файла. Я не знаю, каковы они, но кто-то еще может помочь с этим :)

Сделайте копии того дампа каждым разом, когда Вы смешиваете с ним... Вы не хотите, чтобы инструмент полил из шланга Вашу единственную копию.

13
задан 29 April 2010 в 12:18
14 ответов

В то время как Вы могли отредактировать Ваш /etc/ssh/sshd_config выглядеть примерно так:

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

Я вместо этого определил бы то, для чего пользователь, вероятно, будет использовать его. Поскольку, если существует только несколько команд, к которым Вы хотите, чтобы у них был доступ, я вместо этого удалил бы способность к ним даже вызвать нормальное ssh оболочка.

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

Если Вы находите, что действительно необходимо смочь выполнить нормальную оболочку, большинство, на которое действительно можно надеяться, должно замедлить их и сделать ее более трудной.

12
ответ дан 2 December 2019 в 21:19

Вы ничего не получаете путем остановки "scp" при тихом разрешении буквально бесконечных дополнительных механизмов передачи файлов. Запрещение scp, но разрешение других механизмов копирования файлов является методом лжи об аудиторах. Часто аудиторы просят лгаться. Обычно я вижу, что аудиторы работать с менеджерами для создания фальшивки фиксируют, так, чтобы они могли заявить, что что-то как "scp команда передачи файлов было отключено, так, чтобы файлы не могли быть скопированы с сервера с помощью scp".

Теперь разумный механизм входа был бы хорош. Возможно, auditd наконец работает над Linux. Возможно, Солярис наконец добавил некоторый механизм, или dtrace мог использоваться безопасно. Разумно хотеть, чтобы ОС зарегистрировалась каждый раз, когда к файлу получают доступ. Конечно, нет никакого различия между "чтением" и "копированием". Но это может удовлетворить аудитора и дать значительную безопасность системе. Ваши журналы могли быть столь шумными, что данные бесполезны, или даже что Вы вынуждены сохранить смехотворно короткий журнал аудита. (например, Вы не можете зарегистрировать каждое чтение () - и одно приложение, которое делает что-то, что удивление может сделать вход каждого открытого () аварией).

6
ответ дан 2 December 2019 в 21:19

Ваш лучший выбор не состоит в том, чтобы заблокировать вниз scp, но использовать файловую систему с ACLs для предотвращения доступа для чтения. Вы могли, вероятно, сделать что-то с SELinux, чтобы препятствовать тому, чтобы определенные приложения читали из определенных файлов.

2
ответ дан 2 December 2019 в 21:19

Как другие отметили, Вы не можете заблокировать scp (хорошо, Вы могли: rm /usr/bin/scp, но это действительно не получает Вас нигде).

Лучшее, которое можно сделать, должно изменить оболочку пользователей на ограниченную оболочку (rbash) и только затем выполнять определенные команды.

Помните, если они могут считать файлы, они могут скопировать/вставить их от экрана. Двоичные файлы? xxd/uuencode/mmencode все обходят это.

Я также предложил бы использовать процесс, считающий, чтобы помочь Вам отследить действие.

8
ответ дан 2 December 2019 в 21:19
  • 1
    Учет процесса помогает немного, но исторический учет процесса был действительно бесполезен (например, вход только базового имени выполненной команды). I' d нравится слышать о любых современных успехах с процессом, считающим, который на самом деле полезен. –  carlito 29 June 2009 в 09:14
  • 2
    Как насчет того, чтобы использовать исправленную ограниченную оболочку, которая также регистрирует все команды, выполненные к каналу где-нибудь? Централизованный .bash_history вид идеи. –  MikeyB 29 June 2009 в 16:43
  • 3
    На самом деле на стороне сервера необходимо было бы удалить/usr/lib/openssh/sftp-server, но я думаю, что sshd имеет созданный в sftp сервере. –  Brad Gilbert 2 July 2009 в 08:04
  • 4
    @Brad: Любые команды, указанные клиентом, все еще выполняются через оболочку; таким образом, если sftp-сервер isn' t в ПУТИ по умолчанию (который it' s не), изменения оболочки к ограниченной - достаточно для отключения его, Вы don' t должны удалить двоичный файл. –  MikeyB 2 July 2009 в 16:31

Нет. scp и ssh воздействуйте на те же порты и используйте тот же протокол. Если Вы открываетесь ssh сессия, можно даже совместно использовать соединение с последующими опциями использования вызовов scp как ControlMaster.

Если Вы не хотите, чтобы люди скопировали конкретные файлы прочь машины, Вы не должны давать им вид доступа оболочки к машине.

1
ответ дан 2 December 2019 в 21:19
  • 1
    Да, очевидный ответ должен был бы запереть систему и не выделить доступ. В действительности однако моя компания имеет аудиторов, которые говорят, что мы должны препятствовать тому, чтобы файлы были скопированы прочь серверов и / или попытки журнала несмотря на то, что мы серьезно ограничиваем ssh доступ и имеем в распоряжении устойчивую систему RBAC. –   19 June 2009 в 21:40
  • 2
    @Jason: Затем Вам нужно к доступу файла журнала. Даже если Вы отключили scp, как был бы Вы мешать кому-то работать: сервер ssh ' кошка/path/to/file' > копия? –  derobert 19 June 2009 в 22:29

Существует способ использовать 'scponly' в качестве оболочки, чтобы отключить интерактивный ssh и позволить scp, но я не знаю ни о чем существующем, которое работает обратным способом.

Вы можете исследовать взламывание оболочки scponly для выполнения реверса.

0
ответ дан 2 December 2019 в 21:19

Это не возможно на самом деле после небольшого поиска с помощью Google.

Проверьте это обсуждение: http://www.mydatabasesupport.com/forums/unix-admin/387261-how-restrict-ssh-users-block-scp-sftp.html

0
ответ дан 2 December 2019 в 21:19

В зависимости от того, для чего необходим SSH, Вы можете достигать этой цели (для нетривиального) файлы при помощи IPTables для завершения сессий, если размер пакета больше затем, скажите 1 400 байтов. Это означает, что интерактивный ssh будет главным образом работать, но как только что-то пытается отправить, 1 500-байтовый пакет - как scp должен для файла, больше затем 1 499 байтов, принимающих стандартный MTU 1500, он завершит соединение.

Это также предотвратит нападение "catting", которое Вы упоминаете.

К сожалению, это означает, что у Вас могут быть проблемы при редактировании некоторых файлов с текстовым редактором, если экран должен потянуть более затем 1 400 символов, или если Вы нуждаетесь кошке в длинном файле или делаете длинный список каталогов.

В самом простом случае команда, чтобы сделать это могло бы посмотреть что-то как

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

Мы можем сделать эту работу лучше путем объединения длины пакета, сверяется с ipt_recent, так, чтобы Вы позволили ограниченное количество пакетов, больше затем 1 400 байтов в установленном сроке (скажите, что 8 пакетов в 5 секунд) - это позволило бы пакетам до 12k проскальзывать через, но может дать Вам интерактивность, в которой Вы будете нуждаться для редактирования файлов и т.д. Можно, конечно, настроить количество пакетов.

Это могло бы посмотреть что-то как

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

Примеры правила выше только защищают от загрузок scp такой как scp myfile.data remote.host:~. Дополнительно защищать от загрузок scp такой как scp remote.host:~/myfile.data /local/path, повторите вышеупомянутые правила, но замену --dport с --sport.

clueful хакер может работать вокруг этих ограничений путем установки MTU меньше затем 1400 на его машине (или вызвать mtu или подобный). Кроме того, в то время как Вы не можете ограничить это определенными пользователями, можно ограничить его IP путем изменения iptables строк как соответствующих!!

С наилучшими пожеланиями, David идет

5
ответ дан 2 December 2019 в 21:19

Как бы то ни было, коммерческий продукт CryptoAuditor утверждает, что может управлять передачей файлов по SSH с помощью MITM подключения и использования глубокая проверка пакетов . Очевидно, что ни одно решение не защищено от копирования + вставки, uuencode / decode, FISH и т. Д. Приятно то, что оно прозрачно (кроме вероятных ошибок сертификата); нет программного агента для установки на обоих концах SSH-соединения и нет портала / прокси для настройки.

Я не использовал продукт, поэтому YMMV.

0
ответ дан 2 December 2019 в 21:19

Блокировка передачи файлов без удаления такого количества системных утилит, чтобы оставить машина совершенно бесполезная невозможна. Вам нужно будет избавиться от всего, что может отображать содержимое файла в stdout, и от всего, что может записывать свой stdin в stdout, и к тому времени, когда вы удалите все это, осталось так мало, что нет смысла разрешать доступ к оболочке

Так что я вместо этого сосредоточусь на вашей альтернативе журналирования:

Есть программа под названием «скрипт», которая включена практически в каждый дистрибутив, и которую должно быть легко установить там, где ее нет. Это регистратор сеансов, который записывает весь ввод и вывод из оболочки, опционально с данными о времени, чтобы его можно было воспроизвести и он выглядел так, как будто вы наблюдали через плечо пользователя, когда он это делал. (Во всяком случае, 95%, иногда при использовании ncurses выводится неверный результат, но не очень часто.)

Его справочная страница содержит инструкции по настройке его в качестве системной оболочки входа в систему. Убедитесь, что журналы находятся куда-то, что пользователь не может просто удалить их (для этого может быть полезен атрибут файловой системы только для добавления (настраиваемый через chattr). Как и списки управления доступом или сценарии inotify)

Это все еще не мешает пользователям от копирования файлов из системы, но позволяет просмотреть, что и когда было сделано какими пользователями. Вероятно, это не невозможно обойти, но обход почти наверняка попадет в журналы, так что вы, по крайней мере, будете знать, что кто-то замышляет ничего хорошего, даже если им удастся точно скрыть, что это было.

0
ответ дан 2 December 2019 в 21:19

Я думаю, что вы можете деинсталлировать openssh-клиенты (или эквивалентные им) на сервере.

Я думаю, что клиент scp вызывает scp на сервере при копировании данных, так что если вы избавитесь от scp на сервере, то все должно быть в порядке.

$ 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
0
ответ дан 2 December 2019 в 21:19

Я не уверен, почему удаление или переименование /usr/bin/scp не считается правильным ответом, поскольку он напрямую касается исходного вопроса.

У нас есть ограниченные серверы, которые существуют для интерактивных сеансов оболочки, но должны экспортировать файлы по утвержденным каналам, и удаление очевидных протоколов передачи имеет большое значение для достижения этой цели. В частности, клиенты Windows, использующие MobaXterm, по умолчанию получат удаленный файловый браузер с использованием SFTP, но пробуют использовать SCP в качестве запасного варианта, и не очень очевидно, что для конечного пользователя что-то отличается.

0
ответ дан 29 May 2020 в 18:13

Решение, данное @Tomas, отлично работает, так как удаление/переименование /usr/bin/scp предотвращает входящую и исходящую scp передачу файлов. Однако вы также должны заблокировать все остальные порты от сервера к клиенту и от клиента к серверу. В противном случае ваши хакерские пользователи могут запустить nc -l для прослушивания на одной стороне и запустить nc для установления соединения TCP/IP и напрямую. передавать данные.

Даже при этом вам все равно необходимо отключить переадресацию X11, иначе продвинутый хакерский пользователь может создать приложение X11 и передавать данные через туннель X11.

1
ответ дан 27 November 2020 в 12:08

scp нуждается в bash of sh или ограниченной версии оболочки. Ограниченные оболочки, rbash или rsh, не позволит пользователям оставить там собственный домашний реж, чтобы они могли рыться в своем содержимом тепла без вреда. Когда пользователям не нужен запрос, вы можете запустить меню из /etc/passwd в качестве их оболочки. Когда вам нужна подсказка и доступ к els, то собственный дом вы можете использовать «экран» для запуска bash. Например: экранный баш. Просто создайте скрипт и поместите скрипт в виде оболочки в /etc/passwd. Scp не может справиться с этим и не будет работать.

Таким образом, вы можете точно определить, кто может и не может использовать scp простым способом.

0
ответ дан 6 December 2021 в 12:56

Теги

Похожие вопросы