Всем известно что самым главным при взломе является получение информации. Информация правит миром как говорится =) Ведь действительно чтобы сломать sendmail нужно знать его версию, чтобы использовать локальный эксплоит или ещё чего необходимо узнать версию системы. Что делает взломщик первый раз оказавшись в системе? Могу поспорить что его первой командой будет uname -a. Что это такое? Во всех без исключения системах unix есть программа uname, цель её вывод имени оси. Находится она в /usr/bin/ , /bin/ в зависимости от системы. uname -a покажет вам самую полную информацию: имя системы, версию ядра, имя машины, архитектуру и т.д.
Значит надо переделать эту программу чтобы она выводила то что нам надо, тем самым сбивая взломщика с толку. Ну что приступим? Сделаем из Linux'a например FreeBSD =)
Немного помучившись я написал фейковую прогу uname (не ругайте за ошибки я C вообще не знаю ;)
Поехали:
/* fake uname.c */
void usage (void)
{
printf(«Usage: uname [OPTION]…
Print certain system information. With no OPTION, same as -s.
-a, --all print all information
-m, --machine print the machine (hardware) type
-n, --nodename print the machine's network node hostname
-r, --release print the operating system release
-s, --sysname print the operating system name
-p, --processor print the host processor type
-v print the operating system version
--help display this help and exit
--version output version information and exit
Report bugs to .»);
}
void version (void)
{
printf(«uname (GNU sh-utils) 2.0.11
Written by David MacKenzie.
Copyright © 2000 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.»);
}
main (int argc, char **argv)
{
/* No options run */
if (!strncmp(argv[1],"",1))
{
printf(«FreeBSDn»);
}
/* Run via -a options */
if (!strncmp(argv[1],"-a",2))
{
printf(«FreeBSD 4.2.2 localhost.localdomain 2.2.14-11src #1 Sun Sep 23 17:06:39 CEST 2001 i686 unknownn»); }
/* Run via -m options */
if (!strncmp(argv[1],"-m",2))
{
printf(«i686n»);
}
if (!strncmp(argv[1],"-n",2))
{
printf(«localhost.localdomainn»);
}
if (!strncmp(argv[1],"-r",2))
{
printf(«2.2.14-11src #1n»);
}
if (!strncmp(argv[1],"-s",2))
{
printf(«FreeBSDn»);
}
if (!strncmp(argv[1],"-p",2))
{
printf(«unknownn»);
}
if (!strncmp(argv[1],"-v",2))
{
printf(«#1 Sun Sep 23 17:06:39 CEST 2001n»);
}
/* print information about version of uname if options --version */
if (!strncmp(argv[1],"--version",9))
{
version();
}
/* print help */
if (!strncmp(argv[1],"--help",6))
{
usage();
}
}
/* EOF */
Теперь зафигачиваем код в файлик uname2.c и проделываем следующее:
Сначала посмотрим что у нас за система =) [1dtw0lf@localhost 1dtw0lf]$ uname -a Linux localhost.localdomain 2.4.8-26mdk #1 Sun Sep 23 17:06:39 CEST 2001 i686 unknown
Компилим нашу фейковую прогу:
[1dtw0lf@localhost 1dtw0lf]$ gcc -o uname2 uname2.c
Рутимся =)
[1dtw0lf@localhost 1dtw0lf]$ su
Password:
Копируем нашу новую прогу в каталог /bin/ [root@localhost 1dtw0lf]# cp uname2 /bin/uname Заменять? кАнЭчна =)
cp: overwrite `/bin/uname'? y
Шо у нас за система получилась?
[root@localhost 1dtw0lf]# su 1dtw0lf
[1dtw0lf@localhost 1dtw0lf]$ uname -a
FreeBSD 4.2.2 localhost.localdomain 2.2.14-11src #1 Sun Sep 23 17:06:39 CEST 2001 i686 unknown
Вуаля… вот у нас и фрибздя образовалась =)))
На этом всё. В следующей статье я продолжу рассказ о файлах и прогах с помощью которых можно собрать информацию о системе и естественно расскажу как администраторам избежать сбора инфы о их системе. cya…