Переписать системный вызов в пространстве пользователя

Хорошо, я знаю, почему это происходит. В /etc/rc.local есть скрипт:

#!/bin/sh
rm -f etc/ssh/ssh_host_*
/usr/bin/ssh-keygen -t rsa -N '' -f /etc/ssh/ssh_host_rsa_key
/usr/bin/ssh-keygen -t dsa -N '' -f /etc/ssh/ssh_host_dsa_key
/usr/bin/ssh-keygen -t rsa1 -N '' -f /etc/ssh/ssh_host_key
/usr/bin/ssh-keygen -t ecdsa -N '' -f /etc/ssh/ssh_host_ecdsa_key
/usr/bin/ssh-keygen -t ed25519 -N '' -f /etc/ssh/ssh_host_ed25519_key
systemctl restart ssh

DHCP6CCTLKEY=/etc/wide-dhcpv6/dhcp6cctlkey

# The key mustn\'t be world readable
umask 066

echo "Generating ${DHCP6CCTLKEY}..." >&2
dd if=/dev/random bs=32 count=1 2>/dev/null |   uuencode -m ${DHCP6CCTLKEY} | head -n 2 | tail -n 1 > ${DHCP6CCTLKEY}

umask 022
mv -f /etc/rc.local.orig /etc/rc.local
1
26.07.2017, 21:29
1 ответ

Проще говоря, привилегированные инструкции обычно связаны с вводом-выводом с аппаратными устройствами или защитой памяти. Доступ к ним из произвольных процессов без прохождения какой-либо центральной логики позволит процессам уничтожить память других процессов, испортить файловую систему и т. д. Либо случайно, либо намеренно.

Если мы рассмотрим некоторые распространенные системные вызовы, например,. open(), read(), write()и другие, которые обращаются к файлам и в конечном итоге приводят к вводу-выводу на диск или другое устройство. Или fork()и mmap(), которые влияют на память процесса или других процессов.

Конечно, что-то вроде превращения процесса , а не в системный вызов, не требует привилегий и может быть выполнено с помощью библиотеки. То же самое для подделки результатов системного вызова.Хотя, конечно, что-то вроде изменения всех отметок времени на две недели назад (, как в примере libfaketime), требует сначала выяснить правильное время, и это должно произойти через системный вызов. В дополнение к libfaketimeи libeatmydataесть, например. fakerootкоторый делает вид, что процесс выполняется под UID 0.

1
27.01.2020, 23:45

Теги

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