http://mitroko.com
:: Защищаем свой десктоп при помощи usb-флеш-накопителя.

Защита десктопа начинается с самого десктопа.

Идея такая:
Включается компьютер, загружается runlevel 2 или 3, как кривая хакерской мечты ляжет, а вместо привычного /etc/issue и getty на экран "наползает матрица".
Собственно, ничего с этой матрицей поделать нельзя будет до тех пор, пока в компьютер не будет воткнуто "определенное заранее устройство", например, флешка.
Сунул флэш-накопитель - и, на тебе, выкидывает приглашение на ввод логина и пароля (ну, можно и автологин сунуть, опять-таки, как кривая хакерской души лежит).

От слов к делу:

Нам потребуется:

Определим UID ключа-флешки:
для этого поправим /etc/hotplug/usb.agent
После блока кода:

if [ -f $SYSFS/$DEVPATH/manufacturer ]; then
	LABEL="USB `cat $SYSFS/$DEVPATH/manufacturer` `cat $SYSFS/$DEVPATH/product`"
else
	LABEL="USB product $PRODUCT"
fi

вставим наш кусок кода:

echo $PRODUCT > ~/dev.id

Сохраним файл и воткнем флешку в порт.
Теперь, снова корректируем файл /etc/hotplug/usb.agent
и вместо нашей строчки вставим другой код:

# BOF: Autologin Script.
if [ "$PRODUCT" = "xxx/yyyy/zzz" ]; then
	/bin/init_mangle;
fi
# EOF: Autologin Script.

Где xxx/yyyy/zzz это идентификатор устройства, который засветился в ~/dev.id
Удалим dev.id

Опять-таки, init_mangle - это скрипт подмены.
Так как версия хотплуга оставляет желать лучшего, то вызов init_mangle произойдет аж два раза. Нам это ни к чему и мы в скрипте это обработаем.


Теория запуска.

Когда ядро передает управление init, второй по своей натуре начинает искать inittab, и если он его находит, то ищет initdefault итд.

Когда система загружена и работает, init может ожидать лишь трех явлений:

Для "бессмертия" потомства в /etc/inittab можно указать параметр respawn.

Например,: 1:2345:respawn:/sbin/mingetty tty1
Скажет init что на уровнях 2,3,4,5 при смерти mingetty запустить его снова.
Таким образом достигается "перезапуск" getty для перелогинивания другими пользователями.

Если необходимо просто перечитать /etc/inittab, то посылается комманда "init Q".
Но, при этом, потомки продолжают жить.

Значит, скрипт init_mangle должен:

Однако, после четвертого пункта мы не делаем перечитки inittab и все процессы, которые раньше были в режиме respawn более не будут подвержены этому правилу.

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

[lilo@Fiesta ~]$ cat /bin/init_mangle
#!/bin/sh
FNAME='/tmp/bitlock-'$(whoami);
if ! [ -e "$FNAME" ]; then
	echo -e "0">"$FNAME";
fi;

case $(cat "$FNAME") in
	0)
	echo -e "1">"$FNAME";
	;;

	1)
	echo -e "0">"$FNAME";
	;;

	*)
	rm -f "$FNAME";
	;;
esac;

if [ -e $FNAME ]; then
	if [ "$(cat $FNAME)" = "0" ]; then
		/bin/zmatrix &
	fi;
fi;

[lilo@Fiesta ~]$ cat /bin/zmatrix
#!/bin/sh
cat /etc/inittab.base /etc/inittab.addon.mingetty /etc/inittab.addon.xdm>/etc/inittab.complex
ln -fs /etc/inittab.complex /etc/inittab
init Q
cat /etc/inittab.base /etc/inittab.addon.matrix>/etc/inittab.complex
ln -fs /etc/inittab.complex /etc/inittab
killall cmatrix 2>/dev/null >/dev/null

Где:
cmatrix - это программа симулирующая с ключем s скринсейвер.
Ее вывод необходимо направлять в нужные нам терминалы.
А /etc/inittab постоянно линкуется на вновь создаваемый /etc/inittab.complex

Все файлы доступны у меня на сайте.

Happy hacking...







This site is better to surf with Mozilla Firefox.

Mozilla Firefox Project