Для изучения методов атак и поведения атакующего часто используют электронные приманки или honeypots. Они похожи на обычные сетевые ресурсы (компьютеры, маршрутизаторы и т.д.), которые установлены для того, чтобы их исследовали, атаковали и компрометировали. Эти электронные приманки заманивают хакеров и помогают оценить уязвимости. Так как honeypots все чаще и чаще развертываются в компьютерных сетях, хакеры начали изобретать методы обнаружения, обхода и отключения механизма ведения логов электронной ловушки.
Торстен Хольц и Фредерик Рейнел, перевод Владимир Куксенок
Для изучения методов атак и поведения атакующего часто используют электронные приманки или honeypots. Они похожи на обычные сетевые ресурсы (компьютеры, маршрутизаторы и т.д.), которые установлены для того, чтобы их исследовали, атаковали и компрометировали. Эти электронные приманки заманивают хакеров и помогают оценить уязвимости. Так как honeypots все чаще и чаще развертываются в компьютерных сетях, хакеры начали изобретать методы обнаружения, обхода и отключения механизма ведения логов электронной ловушки.
Эта статья описывает методы обнаружения и атаки на honeypot. Мы опишем несколько известных техник (или возможно неизвестных) и расскажем о некоторых утилитах, помогающих хакерам обнаруживать и атаковать электронную приманку. Аудитория статьи – группы и отдельные личности, которые хотели бы установить или усилить существующие, основанные на дезинформации, линии защиты, но в настоящее время ограничены в возможности самостоятельного исследования honeypot-технологий. После краткого теоретического введения, мы представим несколько примеров использования различных техник. Эта статья, состоящая из двух частей, фокусируется на уровне системы и приложений, в отличии от первой статьи “Противодействие Honeypots: Сетевые вопросы” [ссылка 1], в которой рассматривался сетевой уровень.Если мы настроим honeypot с высокой степенью взаимодействия, мы будем надеяться получить как можно больше информации о деятельности атакующего. Даже если он поймет, что атакует приманку, его действия после этого также будут ценной информацией. Итак, электронная ловушка должны быть скрытой, но не обязательно скрытой на 100%.
У стеганографии и honeypot есть некоторые сходства: как только вас обнаружили, игра почти закончена. Также как и в стеганографии, вы можете скрыть присутствие чего-либо настолько хорошо, насколько сможете, но всегда найдутся признаки, которые неизбежно приведут к обнаружению. Давайте снова воспользуемся нашей аналогией с надзирателем. Если он внимательней посмотрит на передаваемые картинки, то может заметить различия между несколькими изображениями, что возможно вызовет у него подозрения. В случае с электронной приманкой ситуация сходна: если атакующий будет тщательно следить за возможными признаками ловушки, он рано или поздно обнаружит некоторые из них.С тех пор как электронные приманки стали устанавливать в Интернете, все больше и больше утилит стали включать в себя автоматизированных средства опознавания подозрительных сред. Одной из первых такая техника была применена в сетевом черве AgoBot (также известном как Gaobot) [ссылка 3].
Давай начнем с нескольких примеров, демонстрирующих различные методы обнаружения honeypot.Многие утилиты позволяют создать honeypot с высокой степенью взаимодействия. Мы рассмотрим самые известные и покажем вам, из чего состоит Матрица.
User Mode Linux (UML)Некоторые люди пытаются использовать UML [ссылка 4] в качестве электронной приманки, но чтобы оценить его эффективность, нам нужно вначале понять, что представляет из себя UML. Если кратко, то UML позволяет использовать Linux-систему, запущенную внутри другой Linux-системы. Назовем основное ядро Linux host kernel (или host OS), а систему, запускаемую по команде linux, будем называть guest OS. Она запускается “под” основным ядром в адресном пространстве пользователя. Обратите внимание, UML это всего лишь модифицированное ядро Linux, способное работать в режиме пользователя. Таким образом, вам нужно только предоставить файловую систему, содержащую нужные вам приложения.
По умолчанию UML запускается в режиме TT (Tracing Thread). Один главный поток ptrace()-ит каждый новый процесс, запущенный в guest OS. В host OS вы можете увидеть это с помощью утилиты ps:host$ ps a [...] 1039 pts/6 S 0:00 linux [(tracing thread)] 1044 pts/6 S 0:00 linux [(kernel thread)] 1049 pts/6 S 0:00 linux [(kernel thread)] 1051 pts/6 S 0:00 linux [(kernel thread)] 1053 pts/6 S 0:00 linux [(kernel thread)] 1055 pts/6 S 0:00 linux [(kernel thread)] 1057 pts/6 S 0:00 linux [(kernel thread)] 1059 pts/6 S 0:00 linux [(kernel thread)] 1061 pts/6 S 0:00 linux [(kernel thread)] 1063 pts/6 S 0:00 linux [(kernel thread)] 1064 pts/6 S 0:00 linux [(kernel thread)] 1065 pts/6 S 0:00 linux [(kernel thread)] 1066 pts/6 S 0:00 linux [(kernel thread)] 1068 pts/6 S 0:00 linux [/sbin/init] 1268 pts/6 S 0:00 linux [ile] 1272 pts/6 S 0:00 linux [/bin/sh] 1348 pts/6 S 0:00 linux [dd] [...]Выше вы можете увидеть главный поток (PID 1039) и несколько потоков, которые он ptrace()-ит: несколько потоков ядра (PID 1044-1066), init (PID 1068), ile (PID 1268), командный интерпретатор (PID 1272) и dd (PID 1348).
Вы можете быстро обнаружить, что по умолчанию UML не спроектирован для скрытой работы.
<uml$ dmesg Linux version 2.6.10-rc2 (wstearns@sparrow.stearns.org) (gcc version 3.3.2 20031022 (Red Hat Linux 3.3.2-1)) #1 Tue Nov 16 01:43:27 EST 2004 On node 0 totalpages: 8192 ... Kernel command line: ubd0=/home/raynal/MISC/uml/FS/debian.ext3 eth0=tuntap,tap0 root=98:0 PID hash table entries: 256 (order: 8, 4096 bytes) Dentry cache hash table entries: 8192 (order: 3, 32768 bytes) ... Checking that ptrace can change system call numbers...OK Checking syscall emulation patch for ptrace...missing Checking that host ptys support output SIGIO...Yes Checking that host ptys support SIGIO on close...No, enabling workaround Checking for /dev/anon on the host...Not available (open failed with errno 2) NET: Registered protocol family 16 mconsole (version 2) initialized on /home/raynal/.uml/Es5BHO/mconsole UML Audio Relay (host dsp = /dev/sound/dsp, host mixer = /dev/sound/mixer) Netdevice 0 : TUN/TAP backend - divert: allocating divert_blk for eth0 VFS: Disk quotas dquot_6.5.1 Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) Coda Kernel/Venus communications, v6.0.0, coda@cs.cmu.edu devfs: 2004-01-31 Richard Gooch (rgooch@atnf.csiro.au) ... Initializing software serial port version 1 /dev/ubd/disc0: unknown partition table Initializing stdio console driver ...Красные строки характерны для UML в режиме по умолчанию. Также обратите внимание, что сетевое устройство 0 использует TUN/TAP (отмечено синим цветом), что являлось бы необычным на реальной системе.
Одна из больших проблем UML – использования виртуального устройства ubd*, вместо реального жесткого диска. Если вы посмотрите на /etc/fstab, выполните команду mount или проверите директорию /dev/ubd, вы поймете, что находитесь в UML-системе. Чтобы скрыть эту информацию, можно запустить UML с параметрами fake_ide и fakehd. Но не забывайте, что на самом деле корневой раздел UML будет иметь тип 98 (0x62).
Также UML может быть легко идентифицирован после просмотра /proc. Большинство файлов этой директории при детальном осмотре будут указывать на UML:$ cat /proc/cpuinfo processor : 0 vendor_id : User Mode Linux model name : UML mode : tt [...] $ cat /proc/devices [...] Block devices: [...] 60 cow 90 ubd $ cat /proc/filesystems [...] nodev hostfs $ egrep -i "uml|honey" /proc/ksysms a02eb408 uml_physmem a02ed688 honeypotКроме этого, подозрительно выглядят iomem, ioports, interrupts и многие другие файлы. Для противодействия этому способу идентификации UML вы можете использовать hppfs (Honeypot procfs [ссылка 5]) и настраивать содержимое директории /proc.
Еще один способ идентификации UML – адресное пространство процесса. На host OS адресное пространство выглядит следующим образом:
host$ cat /proc/self/maps 08048000-0804c000 r-xp 00000000 03:01 1058722 /bin/cat 0804c000-0804d000 rw-p 00003000 03:01 1058722 /bin/cat 0804d000-0806e000 rw-p 0804d000 00:00 0 b7ca9000-b7ea9000 r--p 00000000 03:01 171 /usr/lib/locale/locale-archive b7ea9000-b7eaa000 rw-p b7ea9000 00:00 0 b7eaa000-b7fd3000 r-xp 00000000 03:01 781848 /lib/tls/i686/cmov/libc-2.3.2.so b7fd3000-b7fdb000 rw-p 00129000 03:01 781848 /lib/tls/i686/cmov/libc-2.3.2.so b7fdb000-b7fde000 rw-p b7fdb000 00:00 0 b7fe9000-b7fea000 rw-p b7fe9000 00:00 0 b7fea000-b8000000 r-xp 00000000 03:01 782112 /lib/ld-2.3.2.so b8000000-b8001000 rw-p 00015000 03:01 782112 /lib/ld-2.3.2.so bfffe000-c0000000 rw-p bfffe000 00:00 0 ffffe000-fffff000 ---p 00000000 00:00 0Для сравнения, адресное пространство guest OS выглядит примерно так:
uml:~# cat /proc/self/maps 08048000-0804c000 r-xp 00000000 62:00 9957 /bin/cat 0804c000-0804d000 rw-p 00003000 62:00 9957 /bin/cat 0804d000-0806e000 rw-p 0804d000 00:00 0 40000000-40016000 r-xp 00000000 62:00 13907 /lib/ld-2.3.2.so 40016000-40017000 rw-p 00015000 62:00 13907 /lib/ld-2.3.2.so 40017000-40018000 rw-p 40017000 00:00 0 4001b000-4014b000 r-xp 00000000 62:00 21846 /lib/tls/libc-2.3.2.so 4014b000-40154000 rw-p 0012f000 62:00 21846 /lib/tls/libc-2.3.2.so 40154000-40156000 rw-p 40154000 00:00 0 9ffff000-a0000000 rw-p 9ffff000 00:00 0 beffe000-befff000 ---p 00000000 00:00 0Нужно обратить внимание на верхний адрес, указывающий на конец стека (забудьте об отображении динамических библиотек). В зависимости от объема памяти на вашем компьютере, этот адрес обычно имеет значении 0xc0000000. Однако, на UML он равен 0xbefff000. Фактически адресное пространство между 0xbefff000 и 0xc0000000 это отображение ядра UML в памяти. Это означает, что любой процесс может иметь доступ, изменять и делать с ядром UML все, что пожелает.
Для устранения большинства этих проблем вы можете запустить UML с параметром honeypot [ссылка 6, ссылка 7] или в режиме skas (Separate Kernel Address Space) [ссылка 8]. Однако, в режиме skas ядро ведет себя нестабильно (приостановки процессов и многое другое, что ведет к перезагрузке).
VMwareVMware очень эффективная виртуальная машина, эмулирующая x86-систему. Таким образом, вы можете установить почти любую ОС, от Linux или Windows до Solaris 10.
Первым шагом обнаружения VMware будет анализ аппаратных средства, которые виртуальная машина пытается эмулировать. До версии 4.5 некоторые части эмулируемого аппаратного обеспечения были не настраиваемыми:Кроме того, исполняемый файл VMware имеет встроенное средство управления через порты ввода/вывода (I/O backdoor), используемое для настройки VMware в процессе работы. Следующие инструкции используются для вызова функций управления:
MOV EAX, 564D5868h ; Magic Number MOV EBX, COMMAND_SPECIFIC_PARAMETER MOV ECX, BACKDOOR_COMMAND_NUMBER MOV DX, 5658h ; Port Number IN EAX, DXВначале в регистр EAX помещается “магическое” число, которое используется для аутентификации команд. В регистре EBX хранятся параметры команд. Сами команды загружаются в ECX. В следующей таблице дан краткий обзор некоторых команд:
Номер команды | Описание |
---|---|
00h..03h | ? |
04h | Получить текущее положение курсора |
05h | Установить текущее положение курсора |
06h | Получить объем данных в буфере обмена хоста |
07h | Прочитать данные из буфера обмена хоста |
08h | Установить объем данных, отсылаемый в буфер обмена хоста |
09h | Отправить данные в буфер обмена хоста |
0Ah | Получить версию VMware |
0Bh | Получить информацию об устройстве |
С помощью патча Кости Корчинского вы можете изменить “магическое” число и таким образом скрыть возможность управления VMware через порты ввода/вывода от атакующего. Также доступна более подробная информация о VMware backdoor [ссылка 10].
Обнаружение дополнительных линий защиты: chroot и jailsУтилита chroot() никогда не разрабатывалась для решения задач безопасности, но она часто необходима для защиты важных серверов. Обнаружение, что вы находитесь в chroot-окружении, или обход его, является не сложной задачей.
Если chroot-директория находится на определенном разделе и не помещена в его начало, номера inode не такие, какие должны быть у реального корневого каталога:# ls -ial / 2 drwxr-xr-x 24 root root 4096 2004-11-30 08:14 . 2 drwxr-xr-x 24 root root 4096 2004-11-30 08:14 .. ...Здесь inode директорий . и .. одинаковые и равны 2 (что является нормальным значением для корневой директории раздела). Для текущей директории мы получили следующие результаты:
# ls -ail . 1553552 drwxr-xr-x 6 raynal users 4096 2004-12-14 13:58 . 6657574 drwxr-xr-x 6 raynal raynal 4096 2004-12-12 16:25 ..Затем, когда мы выполнили команду chroot для текущей директории, мы получаем те же самые inode-номера:
# chroot . /bin/busybox BusyBox v0.60.5 (2004.10.29-22:08+0000) multi-call binary # ls -ial 1553552 drwxr-xr-x 6 1000 100 4096 Dec 14 12:58 . 1553552 drwxr-xr-x 6 1000 100 4096 Dec 14 12:58 ..Несмотря на то что .. был изменена на соответствие директории . , значения inodes все еще не соответствуют ожидаемым.
Заметьте, существует намного больше способов идентификации нахождения в chroot. Например, вы можете послать сигналы любому процессу вне chroot или подключиться к внешним процессам с помощью ptrace(). С тех пор как ptrace() может быть вызван из chroot для любого процесса вне chroot, атакующий получил простой способ внедрения чего-либо на хост. Подобные проблемы присутствуют в mount(), fchdir(), sysctl() и многих других функциях [ссылка 11].
Когда мы размышляем о виртуальных средах и безопасности, становится ясно, что chroot() это не то, на что можно положиться. Другой вариант создания ограничений, присутствующий в FreeBSD, базирующийся на chroot(), но более надежный, это jail(). Этот инструмент позволяет создавать виртуальные хосты, привязанные к IP адресу, с собственными утилитами, пользователями и т.д. Данный механизм очень удобен для создания виртуального хостинга, но также может использоваться для построения электронных приманок.Однако, несмотря на то, что jail() во FreeBSD более надежен, это не значит, что его применение сложнее обнаружить. Есть несколько приемов, позволяющих определить, находитесь ли вы в jail.
jail# ps PID TT STAT TIME COMMAND 6908 p0 SJ 0:00.02 /bin/sh 6910 p0 R+J 0:00.00 ps
Вы также можете посмотреть на идентификаторы процессов, поскольку они не увеличиваются как обычно.
jail# ping -c 3 miscmag.com ping: socket: Operation not permitted
Имейте в виду, что в последних версиях FreeBSD этот параметр стал настраиваемым.
В следующей части мы продолжим обзор утилит для создания виртуальных электронных приманок, обсудив утилиту сбора данных Sebek, упомянув также способы ее обнаружения. Затем мы рассмотрим некоторые другие техники идентификации honeypot, например анализ, основанный на специфике архитектуры x86, или локальном значении времени.
[ссылка 1]
Противодействие Honeypots: Сетевые вопросы, части 1 и 2
http://www.securitylab.ru/48676.html
http://www.securitylab.ru/53871.html
[ссылка 2]
The prisoners' problem and the subliminal channel
G. J. Simmons
Advances in Cryptology, p51-67
CRYPTO '83, 1984
[ссылка 3]
AgoBot detecting VMware
http://lists.virus.org/honeypots-0411/msg00044.html
[ссылка 4]
User Mode Linux
http://user-mode-linux.sourceforge.net/
[ссылка 5]
Honeypot procfs
http://user-mode-linux.sourceforge.net/hppfs.html
[ссылка 6]
Know Your Enemy: Learning with User-Mode Linux
http://www.honeynet.org/papers/uml/
[ссылка 7]
UML as a honeypot
http://user-mode-linux.sourceforge.net/honeypots.html
[ссылка 8]
Separate Kernel Address Space & UML
http://user-mode-linux.sourceforge.net/skas.html
[ссылка 9]
Patch for VMware
http://honeynet.rstack.org/tools/vmpatch.c
[ссылка 10]
VMware Backdoor I/O Port
http://chitchat.at.infoseek.co.jp/vmware/backdoor.html
[ссылка 11]
chroot(), sйcuritй illusoire ou illusion de sйcuritй ? Bradley Spengler
http://www.miscmag.com/articles/index.php3?page=1008
MISC 9 - Sept./Oct. 2003
Спойлер: она начинается с подписки на наш канал