Содержание статьи
- Q: Крис Касперски в свое время приводил дельный способ урезать Windows — удалить все файлы, у которых дата и время обращения к ним не отличаются от даты установки системы. Я попытался написать прогу, которая делала бы это автоматически, но, как оказалось, извлечь MAC (Modified, Access, and Change) — не такая тривиальная задача. Обычные функции для управления файлами с этим справиться не могут. Как быть?
- Q: Как проще всего установить модуль к Python'у?
- Q: Как проще всего определить, что PDF-файл заражен, не заморачиваясь с хитрыми утилитами, которые не дают четкого ответа, а выплевывают промежуточную информацию для анализа специалистом. Хочу простого ответа — заражен файл или нет.
- Q: Говорят, в чате Skype есть команды а-ля IRC. Так ли это?
- Q: Во многих местах стал встречать векторные графики и рисунки, которые здорово выглядят и при этом созданы без применения Flash- и Silverlight-технологий. Все, что используется — JavaScript. Но неужели все это пишется с нуля?
- Q: Можно ли по PCAP-дампу с отснифанным в локалке трафиком построить схему локальной сети?
- Q: Дано: embedded-девайс, который надо перепрошить. По идее, можно кинуть на флешку файл с прошивкой и вставить его в USB-разъем устройства. Однако девайс ее почему-то не видит. Первая мысль — флешка на NTFS, поэтому, наверное, и не может прочитаться. Но, отформатировав в FAT с помощью винды, я так ничего не добился. Есть идеи, как решить проблему?
- Q: Экспериментируя с малварью, уперся в тупик. Тело загрузчика определяет, что запущено в виртуальном окружении (я юзаю VMware Workstation) и не заражает систему. Меня интересует методика. Хочу также использовать подобные механизмы в своих разработках. Есть ли конкретные рецепты, как определить присутствие виртуалки?
- Q: Заметил следующий факт: многие самодельные CAPTCHA совершенно нечитаемы. Абсолютно непонятно, какой конкретно изображен символ: то ли это l, то ли 1, то ли I. Получается, разрабатывая свою капчу, лучше вообще вовремя исключить эти символы?
- Q: Мне очень понравилась ваша статья про взлом CAPTCHA. Но все-таки, если не писать самому нейронную сеть и не обучать ее, не реализовывать сложные алгоритмы, ковыряясь в премудростях OCR, есть ли какие-нибудь движки для распознавания, которые могли бы помочь во взломе CAPTCHA?
- Q: Подскажи простой, но надежный способ защититься от SQL-инъекций.
- Q: Что такое SHSH, если говорить об iPhone/iPad, и почему рекомендуют его сохранять? Как это сделать?
Q: Крис Касперски в свое время приводил дельный способ урезать Windows — удалить все файлы, у которых дата и время обращения к ним не отличаются от даты установки системы. Я попытался написать прогу, которая делала бы это автоматически, но, как оказалось, извлечь MAC (Modified, Access, and Change) — не такая тривиальная задача. Обычные функции для управления файлами с этим справиться не могут. Как быть?
A: Если тебя не переполняет желание ковыряться с таблицей MFT и ее структурами (а там есть подводные камни, поверь мне), то лучше в качестве помощника использовать утилиту mac-robber (www.sleuthkit.org).
Тулза mac-robber четко занимается тем, что считывает атрибут MAC для всех файлов в системе. К тому же она написана автором известного набора приложений The Sleuth Kit (TSK), предназначенных для самого подробного изучения жесткого диска. Они тебе тоже пригодятся: если все же захочешь поковыряться с MFT, то для лучшего понимания хорошо бы сначала поработать со структурированными отчетами, который подготовят TSK и прога ProDiscover (www.techpathways.com/DesktopDefault.aspx?tabindex=3&tabid=12).
Q: Как проще всего установить модуль к Python'у?
A: Для того, чтобы скачать, собрать, установить или обновить модули, есть специальный инструмент setuptools. Необходимые инструкции и файлы-инсталляторы для разных ОС ты всегда найдешь на сайте pypi.python.org/pypi/setuptools. Под виндой подключения нового модуля к интерпретатору выглядит следующим образом:
- После установки setuptools в папке со сценариями у тебя появляется скрипт easy_install, а также его скомпилированная версия в виде exe’шника. Название говорит само за себя — решение используется для простой инсталляции новых модулей. Это как менеджер пакетов для системы.
- С этого момента любой модуль устанавливается простой командой через консоль: easy_install [название модуля]. В этом случае все необходимые файлы закачиваются из репозитория. Помимо этого, можно указать ссылку на архив и/или egg-пакет (специальный формат для библиотек Python) с модулем: easy_install example.com/path/to/ MyPackage-1.2.3.tgz.
Q: Как проще всего определить, что PDF-файл заражен, не заморачиваясь с хитрыми утилитами, которые не дают четкого ответа, а выплевывают промежуточную информацию для анализа специалистом. Хочу простого ответа — заражен файл или нет.
A: Самый простой инструмент в этом плане — утилита PDF Scanner (blogs.paretologic.com/malwarediaries/CL_PDF_Scanner.zip). На вход ей подается документ в формате PDF, а на выходе она выдает один из трех вердиктов:
- «nothing found» (файл чист);
- «potential risk — JavaScript code» (в файле есть JS-вставки, которые могут быть опасны);
- «suspicious file» (файл содержит опасные вставки, используемые, как правило, малварью). Если есть желание поэкспериментировать, попробуй скормить программе пару «плохих» файлов с зараженных доменов из списка, обновляемого на сайтах malwaredomainlist.com и mdl.paretologic.com.
Q: Говорят, в чате Skype есть команды а-ля IRC. Так ли это?
A: На самом деле чат в Skype — это почти тот же самый IRC-канал. Многие средства для управления каналом реализованы в самом GUI-интерфейсе, но некоторые вещи можно сделать только с помощью специальных команд. Ниже — наиболее важные из них:
- /add [username] — добавить пользователя username к чату.
- /leave — покинуть чат.
- /topic [text] — установить топик канала.
- /get guidelines — просмотр так называемых guideline'ов, то есть правил чата
- /kick [username] — удаление пользователя из чата.
- /kickban [username] — собственно, kick и бан.
- /set и /set banlist — управление списком пользователей, которым запрещено присоединяться к чату.
- /set и /get allowlist — управлением списком пользователей, которым разрешено присоединяться к чату.
- /setrole [username] MASTER | USER | LISTENER — установка определенной роли для пользователя.
Последняя команда требует пояснения: что означают роли в Skype? CREATOR и MASTER — это чтото вроде модераторов. USER — самый обычный пользователь чата. LISTENER — юзер, который участвует в чате в режиме «только чтение».
Q: Во многих местах стал встречать векторные графики и рисунки, которые здорово выглядят и при этом созданы без применения Flash- и Silverlight-технологий. Все, что используется — JavaScript. Но неужели все это пишется с нуля?
A: Специально для того, чтобы упростить работу с векторной графикой, разработан приятный фреймворк Raphael (raphaeljs.com). Разработка учитывает рекомендации W3G по формату SVG, а также использует стандартизированный Vector Markup Language (язык векторной разметки). Это означает, что любой графический объект, созданный с помощью Raphael, является привычным DOM-объектом. Ты можешь легко обращаться к нему из любого JavaScriptсценария, назначать обработки событий — короче говоря, без проблем использовать его.
Для примера создадим на странице окружность красного цвета:
// Создаем полотно для рисунка 320 x
200 в начальной точке с координатами 10, 50
var paper = Raphael(10, 50, 320, 200);
// Рисуем на полотне окружность в x,y
= (50, 40) и радиусом = 10 var circle = paper.circle(50, 40, 10);
// Заливаем окружность красным (цветом #f00)
circle.attr("fill", "#f00");
Ни на грамм не сложнее создать с помощью Raphael любую другую фигуру, а потом манипулировать ею. Столь простой подход позволяет, например, реализовать красивые динамические графики и диаграммы, используя чистый JavaScript в той области, где традиционно использовался Flash. Это общий тренд технологии HTML 5.
Q: Можно ли по PCAP-дампу с отснифанным в локалке трафиком построить схему локальной сети?
A: Если речь идет о сложной сети, то, вероятнее всего — нет. Но эти данные могут стать отличной отправной точкой для анализа. По крайней мере, они содержат данные о валидных диапазонах IP-адресов. Кстати, автоматизировать сбор данных о локальной сети, имея дамп с трафиком, умеет перловый скрипт nwmap (nwmap.sourceforge.net). Для работы ему потребуется установленный сканер Nmap и сниффер Tshark.
Q: Дано: embedded-девайс, который надо перепрошить. По идее, можно кинуть на флешку файл с прошивкой и вставить его в USB-разъем устройства. Однако девайс ее почему-то не видит. Первая мысль — флешка на NTFS, поэтому, наверное, и не может прочитаться. Но, отформатировав в FAT с помощью винды, я так ничего не добился. Есть идеи, как решить проблему?
A: Скорее всего, девайс понимает только FAT/ FAT32. Чтобы правильно отформатировать флешку, часто недостаточно встроенного в винду. А вот кто точно справится — это утилиты HP USB Disk Storage Format Tool или PE2USB. У них нет домашних страниц, но бинарники легко ищутся через Google.
Q: Экспериментируя с малварью, уперся в тупик. Тело загрузчика определяет, что запущено в виртуальном окружении (я юзаю VMware Workstation) и не заражает систему. Меня интересует методика. Хочу также использовать подобные механизмы в своих разработках. Есть ли конкретные рецепты, как определить присутствие виртуалки?
A: Многие загрузчики проверяют, выполняются ли они в среде виртуальной машины, просто считывая содержимое регистра LDTR. В нем содержится селектор сегмента, в котором располагается локальная таблица дескрипторов сегмента, необходимая для вычисления линейного адреса из пары «селектор сегмента — смещение». Сама Windows давно не использует локальные таблицы дескрипторов сегментов, и поэтому заполняет регистр LDTR нулевым значением. А вот виртуальные машины, в том числе VMware — используют. Получается совсем простая проверка: есть значение регистра LDTR, отличное от нуля, значит, выполнение процесса осуществляется в виртуальном окружении. К тому же для получения значения регистра используется инструкция SLDT (Store Local Descriptor Table Register), которая не является привилегированной и поэтому может быть выполнена в ring-3 любым приложением.
Резюме вышесказанного: для определения виртуалки программе достаточно вызвать инструкцию SLDT и посмотреть, отличается ли полученное значение от нуля.
Q: Заметил следующий факт: многие самодельные CAPTCHA совершенно нечитаемы. Абсолютно непонятно, какой конкретно изображен символ: то ли это l, то ли 1, то ли I. Получается, разрабатывая свою капчу, лучше вообще вовремя исключить эти символы?
A: За основу лучше всего взять следующий диапазон символов: [A-Z][a-z][0-9] и дальше исключать из него проблемные элементы. Многое зависит от алгоритма и, в частности, от используемого шрифта: он может быть с засечками или без них, и это сильно повлияет на читаемость. Главная проблема в том, что после деформаций, искажений и накладывания шумов многие буквы сложно однозначно идентифицировать. Например:
- «l», «1», «I» — все символы слишком похожи друг на друга;
- «W», «w» —«w» очень просто спутать с «v» или «vv»;
- «O»,«0», «Q» — очень похожи, особенно если на капче добавляются шумы;
- «g», «9» — практически один символ, особенно после деформации;
- «3», «8» — могут быть спутаны друг с другом и «B»;
- «4» — часто похожа на «A»;
- «5» — при наклоне неотличим от «S»;
- «L» — после наклона может быть спутан с «V»;
- «r» — может быть перепутан с «n»;
- «h» — после скручивания похоже на «n»;
- «Y», y», «v» — часто неотличимы после деформаций.
Но даже если вообще исключить эти символы, построить надежную капчу более чем возможно.
Q: Мне очень понравилась ваша статья про взлом CAPTCHA. Но все-таки, если не писать самому нейронную сеть и не обучать ее, не реализовывать сложные алгоритмы, ковыряясь в премудростях OCR, есть ли какие-нибудь движки для распознавания, которые могли бы помочь во взломе CAPTCHA?
A: По большому счету, нужно то же самое, что и для оцифровки обычного текста, то есть эффективное OCR-решение. Технологий, которые открыты, бесплатны и при этом даже работают, не так много.
GOCR (jocr.sourceforge.net) — предельно простой и открытый OCR-пакет, которому не нужно обучение. Работает очень быстро, но не так точно, как другие более сложные движки.
Tesseract (code.google.com/p/tesseract-ocr) — другой бесплатный OCR-движок, который разрабатывался компанией HP с 1985 по 1995 год. Для того, чтобы начать распознавание, потребуется более сложная настройка, но и результат будет намного точнее, чем у GOCR. ocropus (code.google.com/p/ocropus) — а это уже основанная на Tesseract система для распознавания текста, но от любимого и одновременно нелюбимого Google :). Проект еще молодой, но уже сейчас легко интегрируемый в своих решениях, который очень неплохо работают.
Gamera (ldp.library.jhu.edu/projects/gamera) — это не просто движок, а целый фреймворк для написания систем эффективного распознавания сложных образов (в том числе CAPTCHA), который несложно заставить работать.
Q: Подскажи простой, но надежный способ защититься от SQL-инъекций.
A: Один из самых эффективных способов (ну, кроме толковой головы программиста) являются так называемые файерволы для веб-приложений. У нас был подробный материал о WAF в одном из номеров ][ (www.xakep.ru/magazine/xa/130/056/1.asp). Но если говорить о надежном и, в тоже время, простом способе уберечь свои разработки от SQL-инъекций, то следует отметить прием Interpolique. Не так давно он был представлен Деном Каминским, который стал известен после обнаружения серьезной уязвимости в технологии DNS. Общая идея Interpolique заключается в том, чтобы при передаче пользовательских данных в запросе к СУБД фигурировали не открытые данные, а зашифрованная в base64 строка.
Что это дает? Очень просто — в хеше строки по умолчанию отсутствуют специальные символы, которые могут привести к инъекции. Что бы хакер ни передавал, в запросе будет валидная строковая переменная. Для примера посмотрим на самый простейший запрос:
$conn->query("select * from table where fname=^^fname;");
Допустим, что программист — полный олух и никак не фильтрует и не экранирует значение $fname. Таким образом, имеем стандартную уязвимость SQL Injection. Но если использовать прием Interpolique, то даже при таком раскладе у атакующего ничего не выйдет. Посмотрим почему:
$conn->query(eval(b('select * from table where fname=^^fname;')));
Здесь функция b — это функция-обертка для подстановки операций base64-кодирования для переменных, отмеченных символами ^^.
После несложных преобразований к базе данных формируется следующий запрос:
select * from table where fname=b64d("Veh.....=")
Здесь-то и видна самая главная фишка этого приема. Какое бы значение не было у переменной fname (даже если оно никак не фильтруется, и хакер туда поставил спецсимволы), при обращении к СУБД она всегда будет представлена безобидной строкой-хешем, а значит, возможность инъекции исключена. Оригинальная презентация от автора подхода с более подробным описанием доступна на www.scribd.com/doc/33001026/Interpolique. Оттуда, в частности, можно почерпнуть функции для обработки строк base64 в MySQL. В другой популярной СУБД — PostgreSQL — поддержка base64 реализована через штатные функции encode/decode.
Q: Что такое SHSH, если говорить об iPhone/iPad, и почему рекомендуют его сохранять? Как это сделать?
A: Apple — это очень умная компания, которая думает не только о качестве своей продукции, но и о том, как ее защитить. Любой девайс можно обновить, но при этом по умолчанию нет возможности вернуть прошивку назад. Это может сыграть злую шутку, если в новой firmware Apple реализует какую-нибудь хитрую защиту, предотвратив возможность сделать Jailbreak (доступ к системным файлам и полная свобода действия на устройстве). При попытке прошить iPhone, iPod Touch или iPad, программа iTunes обращается на сервер компании Apple, передавая так называемый номер ECID (уникальный идентификатор чипа девайса) и номер текущей прошивки.
Сервер в свою очередь отправляет в отчет тот самый SHSH — специальный идентификатор для модуля iBoot, который отвечает за загрузку устройства. В зависимости от идентификатора iBoot либо разрешает прошить девайс, либо не разрешает. Так зачем нужно бэкапить SHSH? Резон есть: какую бы новую защиту не придумала Apple, отключив возможность добраться до системных файлов девайса (то есть сделать Jailbreak), пользователь всегда может откатить прошивку до той версии, где такая возможность имеется. Но это возможно только в том случае, если у него есть правильный SHSH, который когда-то был выдан Apple. Сделать бэкап SHSH позволяет утилита TinyUmbrella (thefirmwareumbrella.blogspot.com).