...

суббота, 6 июля 2013 г.

Oracle 12c Data Redaction. Сокрытие информации от непривилегированных пользователей

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

В статье рассматривается возможность частичного сокрытия информации, доступ к которой строго ограничен. Тут же вспоминаем про 152-ФЗ.



Начиная с версии 8 в Oracle Database существует Virtual Private Database (VPD). VPD позволяет, в зависимости от разных условий, скрывать часть записей таблицы или view от пользователей. Недостаток проистекает из достоинств — сокрытие возможно только полных записей. Делается это через добавление дополнительных условий в where часть sql запроса.

В Oracle 12c добавлена возможность изменять выдаваемые sql запросом значения полей (полностью или частично), в зависимости от условий. Эта возможность получила название Oracle Data Redaction и состоит в применении специальных policy.


Все управление Data Redaction сосредоточено в пакете DBMS_REDACT. Важно то, что для применения policy к объекту, не нужно иметь какого либo доступа к самому объекту. Пользователи обладающие привилегией EXEMPT REDACTION POLICY не подпадают под действие данного механизма.


Рассмотрим использование Data Redaction на следующем примере:


Есть таблица CLIENT_INFO содержащая персональные данные — дату рождения, телефон, email и номер кредитной карты. В базе существует роль R_VIP, обладатели которой видят полную информацию. Остальные должны видеть отредактированный вариант.


таблица и тестовая запись


CREATE TABLE CLIENT_INFO
(
ID NUMBER,
F_NAME VARCHAR2(64), /* фамилия*/
NAME VARCHAR2(64), /* имя */
S_NAME VARCHAR2(64), /* отчество */
BIRTHDAY DATE, /* дата рождения */
PHONE VARCHAR2(32), /* телефон */
EMAIL VARCHAR2(64), /* email */
CCARD VARCHAR2(32), /* номер кредитной карты */
CONSTRAINT "CLIENT_INFO_PK" PRIMARY KEY ("ID")
);
insert into CLIENT_INFO values(1, 'Иванов', 'Иван', 'Иванович', to_date('15-05-1986', 'DD-MM-YYYY'), '79763334589', 'ivan@dom2.ru', '5767881897856776');





Создаем policy под названием redact_client_info и добавляем правило, по которому день в дате рождения заменяется на 1ое число:

policy


BEGIN
DBMS_REDACT.ADD_POLICY(
object_schema => 'TEST',
object_name => 'CLIENT_INFO',
column_name => 'BIRTHDAY',
policy_name => 'redact_client_info',
function_type => DBMS_REDACT.PARTIAL, /* Частичное маскирование */
function_parameters => 'Md01Y', /* Маска изменений */
expression => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''R_VIP'') = ''FALSE''' /* Условие - замена при отсутствии роли R_VIP */
);
END;
/





Добавляем в policy условие показывать только 5 последних цифр телефона:

policy


BEGIN
DBMS_REDACT.ALTER_POLICY(
object_schema => 'TEST',
object_name => 'CLIENT_INFO',
column_name => 'PHONE',
policy_name => 'redact_client_info',
function_type => DBMS_REDACT.REGEXP, /* Маскирование с помощью регулярного выражения */
regexp_pattern => '\d+(\d{5})$',
regexp_replace_string => '******\1',
regexp_position => DBMS_REDACT.RE_BEGINNING,
regexp_occurrence => DBMS_REDACT.RE_ALL,
expression => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''R_VIP'') = ''FALSE''',
action => DBMS_REDACT.ADD_COLUMN
);
END;
/





Добавляем в policy условие скрывать домен email:

policy


BEGIN
DBMS_REDACT.ALTER_POLICY(
object_schema => 'TEST',
object_name => 'CLIENT_INFO',
column_name => 'EMAIL',
policy_name => 'redact_client_info',
function_type => DBMS_REDACT.REGEXP,
regexp_pattern => DBMS_REDACT.RE_PATTERN_EMAIL_ADDRESS, /* Используем готовое */
regexp_replace_string => DBMS_REDACT.RE_REDACT_EMAIL_DOMAIN, /* Используем готовое */
expression => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''R_VIP'') = ''FALSE''',
action => DBMS_REDACT.ADD_COLUMN
);
END;
/





Ну и наконец маскируем номер кредитки:

policy


BEGIN
DBMS_REDACT.ALTER_POLICY(
object_schema => 'TEST',
object_name => 'CLIENT_INFO',
column_name => 'CCARD',
policy_name => 'redact_client_info',
function_type => DBMS_REDACT.REGEXP,
regexp_pattern => DBMS_REDACT.RE_PATTERN_CC_L6_T4,
regexp_replace_string => DBMS_REDACT.RE_REDACT_CC_MIDDLE_DIGITS,
expression => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''R_VIP'') = ''FALSE''',
action => DBMS_REDACT.ADD_COLUMN
);
END;
/





Выполняем select от пользователя не имеющего роли R_VIP:

SQL> select f_name, name, birthday, email, phone, ccard from test.client_info;

F_NAME NAME BIRTHDAY EMAIL PHONE CCARD
---------- ---------- --------------- --------------- --------------- ----------------
Иванов Иван 01-MAY-86 ivan@xxxxx.com ******34589 576788XXXXXX6776




И от пользователя обладающего этой ролью:

SQL> select f_name, name, birthday, email, phone, ccard from test.client_info;

F_NAME NAME BIRTHDAY EMAIL PHONE CCARD
---------- ---------- --------------- --------------- --------------- ----------------
Иванов Иван 15-MAY-86 ivan@dom2.ru 79763334589 5767881897856776




В результате в запросах видны все записи, но значения полей, для пользователя не имеющего роли R_VIP, изменены.

Плюс использования Data Redaction в сохранении семантики данных, но при этом непригодности конкретных значений для несанкционированного использования.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


4К-видео Сатурна и его спутников

Автоматическая межпланетная станция «Кассини» стала искусственным спутником Сатурна 30 июня 2004 года, стартовав с Земли немногим менее чем за 7 лет до этого — 15 октября 1997 года. С самого начала проекта предполагалось, что аппарат совершит 74 витка вокруг планеты и 45 витков вокруг её спутника — Титана, однако НАСА уже несколько раз продлевало миссию и теперь конечным сроком, на который рассчитывает агенство, является 2017 год. Мало того, существуют оценки ресурса трёх двигателей аппарата, которые оценивают сроки их работы по меньшей мере ещё в 200 лет.



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

Главное отличие заключается в техническом (хотя и художественном тоже) качестве видео In Saturn’s Rings, которое представлено ниже — 4К. Оно использует оригинальные материалы миссии «Кассини» в их оригинальном или близком к нему качестве — всего в количестве более миллиона фотографий; при этом автор видео — Stephen van Vuuren — настаивает на том, что при его создании принципиально не применялись компьютерные эффекты.


Чтобы оценить работу, в плеере ниже надо выбрать оригинальное качество (сейчас 360p) и, в случае канала, подходящего на видео такой чёткости и подходящего экрана монитора, можно будет оценить эффект в полной мере. Само видео является трейлером видео, которое должно выйти на экраны IMAX-кинотеатров в следующем году.


Хорошую статью на русском с множеством технических подробностей о миссии «Кассини» можно прочитать здесь.



This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Бирюльки и Гуглосервис


Программировать — не в бирюльки играть.

И. В. Сталин





image

Я хочу напомнить о древней русской игре Бирюльки, об игрушке для iPhone и об Adwhirl, закрывающемся сервисе Google, с которым надо что-то срочно делать.


Предисловие




Ушло прочь деревенское детство, и вместе с ним игры. А на Руси любили играть. Бабки, бирюльки, салки, лапта — все забылось, остались только названия в пословицах и неологизмах. Правила бирюлек очень просты — в ведро насыпают разную утварь и по очереди вытаскивают крючком на нитке. Надо достать очередную цацку так, чтобы не обрушились другие.

Лет 20 назад я сделал компьютерный аналог этой игры и человек 20 знакомых почти год играли в нее на десктопах.

Бирюльки в магазине




Намедни я переписал ее под iOS и выложил в магазин. Увы, игра сложная, не для массового пользователя. Игроку необходим математический склад ума и знание формулы квадрата суммы. Денег на такой игре я не заработаю, но по традиции использую в приложении связку реклам iAd от Apple и Admob от Google. Бесплатное приложение можно посмотреть здесь, в русском магазине.

Заработок от рекламы




Известно, что заработок на рекламе от Apple в три раза больше, чем от Google. Это значит, что если в Вашу игру играют 100 человек в день и смотрят яблочную рекламу, то Вам упадет 3 суточных доллара. Аналогичный просмотр этими же 100 человеками гугловой рекламы принесет Вам ежесуточно 1 доллар дохода.

К сожалению, яблочная реклама действует не во всех странах мира. Америка, Англия, Япония — там конечно цивилизация и Apple помогает разработчикам зарабатывать на хлеб. В России, Китае и Бразилии Вам поможет Google.

Adwhirl закрывается




Как совместить две рекламные площадки в одном приложении? Например, гугловым сервисом Adwhirl.

Увы, неделю назад пришло уведомление от Google, что данный сервис Adwhirl закрывается.

В сентябре он перестанет работать и всем разработчикам надо искать аналоги. Гугл предлагает взамен старого использовать сервис admob mediation.

Я воспользовался этим советом. В своей игре я перешел на новый сервис быстро и безболезненно и получил первый доход (1 доллар) от новой связки, о чем Вас и информирую.


Несколько замечаний по переходу




1. Необходимо скачать новую версию Admob SDK 6.4.2

2. Ни в коем случае не использовать документацию с сайта Гугл, а использовать пример, содержащийся в SDK;

3. Не забыть включить iAd и всегла нажимать кнопку save;

4. Расставить таргетинг по странам для admob и iAd.

5. Поменять в коде id Admob на id Admob Mediation

Всем хорошего лета и легкого кода.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Тяжелый FPV-квадрокоптер — продолжение: APM 2.5 и активный подвес для камеры


Часть первая — в которой я придумал и построил свой квадрокоптер.


Продолжаю рассказ о своем квадрокоптере. Со времени опубликования первой статьи я налетал немало часов, и проделал множество модификаций на коптере. Обо всех мелких деталях рассказывать — будет долго, да и малоинтересно. Поэтому ограничусь основными изменениями, а именно:



  • Новый полетный контроллер — простенькая платка Crius MultiWii SE уступила место новому ArduPilot Mega 2.5, резко улучшив летные характеристики и добавив коптеру некое кол-во продвинутых фич.

  • Активный подвес для камеры — GoPro теперь не жестко закреплена, а установлена на стабилизирующем подвесе, который удерживает ее в горизонтальном положении при любом положении коптера.

  • Новые моторы — в связи с выросшим весом коптера (а также с внезапной смертью одного из старых моторов) были установлены новые, болеe мощные и значительно более качественные моторы.

  • Отдельная FPV-камера — GoPro теперь используется толькo для записи, для полета через видеоочки используется отдельная жестко монтированная камера.




Но обо всем по порядку…



ArduPilot Mega 2.5




Итак, первая обновка — это новый полетный контроллер APM 2.5. Чем он отличается от изпользуемого ранее Crius MultiWii SE?









































ArduPilot Mega 2.5

image
Crius MultiWii SE

image
Процессор:Atmel ATmega2560Atmel ATmega328p
Гироскоп, акселерометр:Invensense MPU-6000Invensense ITG-3205

Bosch BMA180
Барометр:Measurement Specialties MS5611-01BA03Bosch BMP-085
Магнетометр:Honeywell HMC5883L-TR
GPS:Прямое подлкючение сенсора через последовательный портПодключение сенсора через дополнительный контроллер и шину I2C
Подключение к PC:USB

Телеметрия через радиомодем (433 МГц)
USB через отдельный FTDI адаптер

Телеметрия через Bluetooth
Встроенная память:4 МБ для записи логов GPS и другой телеметрии-

Вкратце — у APM 2.5 более мощный процессор, болеe точные датчики, более точный GPS (за счет обсчета данных на главном CPU) и более дальнобойная телеметрия. Чего это позволяет добиться:

  • Удержание позиции и высоты с точностью до полуметра (используются данные GPS вместе с инерциальной навигацией)

  • Автоматический возврат в точку вылета и посадка (по сигналу с Д/У либо при потере сигнала или низком заряде батарей)

  • Ограничение максимальной высоты полета и территории, над которой позволено летать

  • Автоматическая навигация по заданным точкам — план полета составляется с помощью PO Mission Planner, и коптер отправляется в автономное плавание. Возможно удаленное управление с PC через 433 МГц радиотелеметрию.




За счет более точных сенсоров и более продвинутых алгоритмов стабилизации, коптер по ощущениям летать стал нa порядок стабильнее чем под управлением MultiWii. А функция автономного возврата на базу придает спокойствия при полетах через FPV — потеря видеосигнала теперь не смертельна, достаточно включить RTH (Return To Home) и дождаться, пока либо коптер прилетит «домой» и приземлится, либо вернется в зону стабильной видеосвязи. При потере сигнала Д/У RTH включается автоматически.

Активный подвес и FPV камера




Для хорошей видеосъемки жестко закрепленная камера не годится — нужна стабилизация, удерживающая камеру в горизонтальном положении независимо от положения коптера. Подвесов для такой стабилизации существует два вида:

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

    Преимущества: просто и недорого.

    Недостатки: плохая стабилизация. Разрешение и скорость реакции сервоприводов недостаточны, чтобы компенсировать движения коптера без видимой задержки.

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

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

    Недостатки: дорого, достаточно непросто в настройке, тяжеловато.




Для меня преимущество бесколлекторных подвесов перевесило все недостатки, и я решил сделать собственный: в конце концов, коптер я уже собрал с нуля, не останавливаться же на достигнутом. Заодно решил интегрировать в подвес крепление для дополнительной камеры: летать через FPV всe же приятнее через жестко закрепленную камеру (иначе не видно положения коптера), плюс у специализированных FPV-камер есть ряд преумиществ перед GoPro: они выдают сигнал без задержки и значительно лучше справляются со сложным освещением (при полете против солнца, например). Были закуплены следующие комплектующие:

  • Контроллер: Martinez v3.1 (€50)

  • Моторы: RCTimer HP2212 70T (2x $17.99)

  • FPV камера: Sony Super HAD 600TVL (€40)




Контроллер Martinez работает на ПО с открытым кодом (BruGi), его разрабатывают несколько человек на моем местном FPV-форуме. Альтернатива — хорошо известный контроллер Алексея Москаленко (Alexmos SimpleBGC). Стоит она, однако, более чем в два раза дороже, а по качеству стабилизации последние версии BruGi уже на абсолютно сравнимом уровне.

Механику для подвеса я разработал самостоятельно, и как и с рамой для самого коптера, попросил хорошего знакомого вырезать мне ее на фрезеровочном станке из стеклопластика. Пока товарищ готовил мои детали, другой коллега с форума вызвался сделать 3D-модель и рендер:



Процесс сборки, а также первый полет после многих часов настройки PID-параметров контроллера:



Всe остальное


В связи с увеличившимся весом коптера после установки подвеса (до: 1950г, после: 2140г), а также в связи с внезапной смертью одного из старых моторов (в полете… к счастью, полет был на малой высоте над полем с метровой травой — коптер при падении не пострадал), были куплены и установлены новые моторы.




До: Turnigy NTM 28-30 750kv. Тяга с Graupner E-Prop 11x5 и 4S батареей: 1кг




После: Tiger Motor MT2216-11 900kv. Тяга с Graupner E-Prop 11x5 и 4S батареей: 1.2кг


Моторы Tiger Motor значительно дороже, чем Hobbyking-овские NTM (€36,50 против €18), но при этом значительно болеe высокого качества. Используемые в них японские подшипники живут намного дольше, чем дешевые китайские в моторах NTM. Все четыре купленных мной мотора были идеально сбалансированы и работают без вибраций в полном диапазоне оборотов — из четырех NTM три были неплохо сбалансированы, но четвертый был явно кривым и давал достаточно сильные вибрации.


Также, поскольку тяжелый подвес камеры сместил центр тяжести коптера вперед, пришлось сдвинуть батарею еще дальше назад. Это негативно подействовало на летные качества: коптер стал значительно более инертным по оси тангажа, чем по оси крена. Обычно PID-параметры полетного контроллера подбираются одинаково под обе оси, так как большинство коптеров симметричны; мне же пришлось вручную подбирать новые параметры по отдельности для обеих осей, чтобы добиться достаточно стабильного полета без вибраций и других нежелательных эффектов.


Общий вид коптера со всеми обновками:



Продолжение следует...


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Устройство файла UEFI BIOS, часть первая: UEFI Capsule и Intel Flash Image

Выпуск материнских плат на чипсетах Intel шестой серии (P67 и его братьях) принес на массовый рынок ПК новый вариант BIOS — UEFI. В этой статье мы поговорим об устройстве файлов UEFI Capsule и Intel Flash Image.

Структура EFI Firmware Volume и полезные в хозяйстве патчи будут описаны во второй части.



UEFI Capsule




В качестве примера файла UEFI Capsule возьмем образ BIOS для ASUS P8Z77-V версии 2003.

Это типичный представитель семейства AMI Aptio4 UEFI с несколькими расширениями ASUS, не сильно влияющими на его формат. В качестве примера он взят потому, что в нем присутствуют все составляющие файла UEFI Capsule, о которых я хотел бы рассказать сегодня.

Для работы с этим файлом в первой части статьи нам понадобятся:



  • Hex-редактор на ваш вкус, я буду использовать HxD

  • Утилита Intel Flash Image Tool подходящей версии, для чипсетов 7 серии — это версия 8.xx




Распаковав архив, получаем файл размером 0х800800 байт с расширением CAP.

Это файл UEFI Capsule, формат которого был описан AMI на одной из конференций UEFI Plugfest и выглядит так:



Открываем файл hex-редактором и проверяем его на соответствие этому формату, в нашем случае заголовок выглядит так:



Размер заголовка действительно 0x0000001C, общий размер файла действительно 0x00800800, начало образа FFS действительно находится по смещению 0x800 — сомнений не остается.

Сразу же возникает соблазн разобраться досконально, как именно устроены блоки FW Certificate и OEM Header, но это не нужно. Закрытого ключа ASUS у нас пока нет, а без него подписать модифицированный файл невозможно, даже зная формат блока FW Certificate, а взламывать RSA2048 и SHA256 — дело гиблое.

На самом деле, формат этот в секрете никто и не держит, он описывается знакомой знатокам PE32+ структурой WIN_CERTIFICATE, описание которой можно найти, например, здесь, но в нашем случае это все не важно.

Ни одного байта из этого двухкилобайтного заголовка в микросхему BIOS'а не попадает, и используется этот заголовок только для проверки валидности файла перед прошивкой стандартными утилитами ASUS. При прошивке аппаратным программатором, а также низкоуровневыми утилитами вроде Intel Flash Programming Tool или flashrom этот заголовок нужно просто удалить.

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

Поэтому, если для прошивки не будет использоваться UBF, смело отрезаем 0x800 байт заголовка и сохраняем получившийся файл с расширением ROM.

Если в файле вашего BIOS'а заголовка UEFI Capsule не оказалось, значит он либо достаточно старый, например для платы на P67 или Z68, либо производитель не пожелал его использовать, несмотря на настойчивые рекомендации Intel. Считайте, что производитель уже удалил его за вас и читайте дальше.

А дальше могут быть несколько вариантов.

Если у вас десктопная плата на Intel, как в нашем примере, то получившийся файл будет состоять из нескольких регионов: дескриптора, региона GbE при наличии встроенной сетевой карты Intel, региона ME и региона BIOS.

Если у вас десктопная плата или ноутбук на AMD, то из всего вышеперечисленного остается только регион BIOS.

Если у вас ноутбук на Intel, то в файле BIOS'а, который вы можете скачать с сайта производителя и использовать для обновления, содержатся чаще всего образ только региона BIOS и прошивка для EC, хранящаяся обычно в отдельной микросхеме flash. Сам файл может быть при этом достаточно хитро структурирован или зашифрован, но при этом в микросхеме BIOS он хранится в том же виде, что и на десктопных платах, поэтому все эксперименты лучше проводить не с файлом обновления, а с дампом уже имеющегося BIOS'а, который можно снять при помощи FPT.


Intel Flash Image




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

Intel рассказывает о структуре своих BIOS'ов на страницах даташита на соответствующие чипсеты. Для всех чипсетов, начиная с 6 серии, этот формат в общем не менялся, поэтому его можно смело взять оттуда. Файл делится на 3-5 регионов:



Необязательными являются регионы GbE (используется совместно с встроенными сетевыми картами Intel начального уровня) и PDR (предназначен для данных OEM, но я ни разу не видел, чтобы он где-то использовался).
Descriptor



Этот регион должен находится в первой (из двух поддерживаемых) микросхем flash по нулевому адресу и подразделяется на 11 секций, суммарный размер которых не должен превышать 4 килобайта. Устроен он так:



Первые 16 байт не используются и всегда равны 0xFF, за ними следует сигнатура 0x0FF0A55A, затем секция Descriptor Map, указывающая смещение начальных пяти секций и их размер.

Секция Component содержит информацию об используемых микросхемах flash: их количество (1 или 2), плотность (от 512 Кб до 16 Мб), запрещенные команды (такие как chip erase, например) и частоты чтения, быстрого чтения и стирания/записи.

Секция Region содержит смещения и размеры других регионов.

Секция Master содержит настройки доступа каждого из трех возможных мастеров (BIOS, ME, GbE) к пяти возможным регионам.

Секции PCH/PROC Straps содержат параметры конфигурации процессора и северного моста.

Секция Upper Map содержит смещение и размер таблицы VSCC.

Таблица VSCC содержит идентификаторы JEDEC и данные VSCC всех поддерживаемых Management Engine микросхем flash.

Секция OEM может быть заполнена OEM-производителями по своему усмотрению, но я не видел её заполнения ни разу.

Проверим теперь структуру полученного нами файла ROM на соответствие вышеприведенной:



Легко видно, что структура вполне себе соответствует, но угадать, за что именно отвечает каждый байт каждой секции будет непросто.

К счастью, Intel избавил нас от угадывания, выпустив утилиту FITC, которая позволяет настроить дескриптор (и не только его) и содержит подсказки по каждому доступному для редактирования пункту. Утилита эта входит в набор для разработчиков материнских плат и не предназначена для конечных пользователей, но ссылку на нее всегда можно найти на форумах, посвященных модификации BIOS'ов.

Открываем наш файл ROM в FITC 8.xx и все настройки дескриптора как на ладони:



Я крайне не рекомендую ничего менять, кто не знает, зачем он это делает.

Самыми часто изменяемыми настройками здесь являются настройки доступа к регионам (выделены зеленым на скриншоте hex-редактора), которые в дикой природе встречаются двух видов: вышеприведенные «всем можно всё» и стандартные настройки Intel. Иногда открытость записи в регион МЕ помогает справится с нарушением его работоспособности, просто перезаписав его полностью. На платах со стандартными настройками это невозможно без получения доступа к МЕ, которое на разных платах реализовано по разному и может потребовать достаточно нетривиальных манипуляций (замыкания ног аудиочипа во время загрузки, например).

Обратная сторона открытости — вредоносный код может делать что угодно с дескриптором и всем остальным содержимым микросхемы BIOS. Почему-то об этом говорить не принято, при том, что абсолютно все платы ASUS на P67 с BIOS'ам версий 3ххх и все платы ASUS на Z68 имеют открытый дескриптор. И security никакая, и с obscurity проблемы, о чем инженеры думали — не знаю.

Вторая полезная настройка — плотность микросхемы BIOS, которую приходится менять в случае восстановления испорченного BIOS'а платы с микросхемой большого объема, используя работоспособную плату с микросхемой меньшего.


GbE



Присутствует только на платах со встроенными сетевыми картами Intel начального уровня, вроде 82579.

В даташите на этот чип в разделе 10 имеется описание структуры NVM, которая и хранится в регионе GbE целиком.

Главная настройка, которую может быть интересно изменить — MAC-адрес, находящийся в самом начале региона, в первых 6 байтах. Если вдруг вам нужно сменить аппаратный MAC своей встроенной карты Intel, и регион GbE на вашей плате имеется — вы знаете что делать.

В нашем примере регион GbE находится по смещению 0x1000 от начала и содержит стандартный MAC для всех образов NVM, выпускаемых Intel в качестве обновления — 88:88:88:88:87:88:



При прошивке стандартными средствами регион GbE не обновляется вообще, несмотря на присутствие обновленного NVM в файле с обновлением BIOS'а, поэтому Intel пришлось выпустить отдельную утилиту NVM Update, когда в результате ошибки в версии 1.3 карта переставала работать нормально после установки Windows 8.

Регион содержит кучу других настроек, о которых можно прочесть в указанном выше даташите.
ME



Здесь находится Management Engine Firmware и ее настройки. Про ME можно писать бесконечно, потому что там чего только нет. Лучшее описание структуры этого региона и возможных векторов атаки на него вы можете прочесть в докладе Игоря Скочински на Breakpoint 2012.

Для тех, кто еще не ушел читать его — краткая выжимка:

В чипсетах Intel имеется микроконтролер с архитектурой ARCompact, получающий питание от дежурной линии ATX, имеющий доступ ко всем устройствам, к RAM, собственный сетевой стек и работающий под управлением ОСРВ ThreadX. Вот он то и обеспечивает все рекламируемые Intel технологии, вроде Active Management, AntiTheft, Identity Protection, Rapid Start, Smart Connect, Protected Audio Video Path и так далее и тому подобное. А при помощи Dynamic Application Loader на нем можно даже Java-апплеты запускать.

На наше счастье, с безопасностью МЕ все более или менее в порядке, и пока я не слышал о случаях успешного внедрения вредоносного кода, но само по себе наличие в чипсете МК, исполняющего неизвестные никому, кроме Intel, программы и имеющего полный доступ к RAM и сети — уже повод для паранойи у склонных к ней людей.

Изменить доступные настройки МЕ можно при помощи той же Intel FITC:



В нашем примере регион ME начинается со смещения 0x3000 и имеет размер 1,5 Мб, что указывает на плату без поддержки AMT.
BIOS



Регион состоит из одного или нескольких EFI Firmware Volume, о структуре которых я напишу во второй части этой статьи.

Там же мы затронем процесс загрузки UEFI и полезные в некоторых случаях патчи.
Platform Data Region



Регион предназначен для описания каких-либо зависящих от платформы возможностей и по плану должен использоваться OEM-производителями, но по факту я не видел его ни разу.

Источники информации





  1. Secure Firmware Update, UEFI Plugfest presentation by Zachary Bobroff (AMI)

  2. Intel® 6 Series Chipset and Intel® C200 Series Chipset Datasheet

  3. Intel® 82579 Gigabit Ethernet PHY Datasheet

  4. Rootkit in your laptop, Breakpoint 2012 presentation by Igor Skochinsky (Hex-Rays)




P.S.




Не знаю, в какой хаб следовало бы поместить эту статью. Может быть НЛО создаст для нас хаб UEFI?

Жду ваших комментариев и прошу прощения за возможные ошибки, о которые прошу докладывать в личном сообщении.

Спасибо за внимание и до встречи во второй части.

This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


пятница, 5 июля 2013 г.

Для начала внедрим Continuous Integration в мозг

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

Менеджер, как человек, который не должен лезть в технические детали, при виде прошедшего Continuous Integration билда, может однозначно сказать, хороший он или плохой. Зеленый — хороший, красный — плохой. Очень простой индикатор, да и не только для менеджеров, но и для всей команды в целом. Девелоперы на эту ситуацию смотрят немного иначе.



Сейчас я работаю с одной командой, в которой мы потихоньку движемся в сторону непрерывной интеграции и пытаемся сократить время получения фидбека для девелоперов. Немного о том, почему это очень критично именно для этой команды. Мы делаем несколько продуктов, взаимосвязанных, которые используют общие библиотеки. Работа идет разными командами. Естественно, бывают случаи, когда одна команда меняет что-то в общем куске, что ломает соседнее приложение, поэтому получить фидбек через 1 минуту после чекина куда лучше, чем через день от коллеги, который явно недовлен.


Так вот, в команде не редки ситуации, когда я слышу такую фразу, адресованную QA: «Ты последний билд не бери, в нем вот не работает это». Ответ QA: «Хорошо.». И такой диалог я слышал раза 3 за прошедшую неделю после чекинов и перед демонстрацией новой версии заказчику. При этом, все билды в CI-системе, зеленые. Получается, что девелоперы придумывают свой собственный индикатор. Пусть билд и будет зеленым в твоей там системе, но мы-то лучше знаем, что у нас работает, а что нет. При таком подходе ценность вообще построения процесса непрерывной интеграции теряется. А без нее, само собой, можно забыть о непрерывных деплоях на продакшн.


Должно произойти нечто, меняющее порядок вещей в жизни, начать думать как-то иначе. Первое, на что стоит обращать внимание — тесты. Без них непрерывная интеграция невозможна, поскольку она будет врать, говоря, что все хорошо. Мы начнем проверять билды руками, QA инженеры будут тестировать один билд за другим, чтобы найти-таки тот, который максимально подходит для продакшена, особенно если вдруг заказчик прибежит с горящими глазами и требованием немедленного выхода новой версии продукта.


Как начать писать тесты, как это сделать в проектах к кучей легаси-кода — это отдельная тема, но тут девелоперам надо быть чуть храбрее. Не бойтесь провалиться, начните писать тесты. Плохие тесты лучше, чем никакие. Они хоть как-то будут проверять систему, а процесс непрерывной интеграции наконец-то начнет приносить пользу. Прежде всего, пользу именно команде.


Второй момент, который требует некоторого изменения в голове, это отношение к артефактам билда. Если билд зеленый, мы должны быть не просто уверены в том, что код в репозитории на такую-то дату правильно работает. Мы должны научиться вообще не проверять работу через исходный код. Особенно, это касается QA-инженеров (или тестировщиков, как они называются у вас в команде). Они не должны брать код и проверять версию, они должны брать именно то, что выдал билд — финальный пакет с новой версией. Причина проста, мы ведь при деплое не будем брать код и собирать библиотеки. Мы будем брать то, что оставила нам CI-система, ведь она уже сделала часть работы и незачем ее повторять руками. Мне очень нравится фраза, сказанная моим коллегой: «По ночам компьютеры собираются вместе и смеются над людьми, если те делают работу, которую могли бы делать компьютеры».


Ну и, конечно, важным моментом, является команда. Кто должен настраивать CI? Кто разбирается в проблеме, если приложение собирается локально, но на CI системе нет. Да это у вас там, билд инженеров, чего-то сломалось. Не забывайте, что вы — команда. Команда, которая ответственна за продукт, и непрерывная интеграция — это часть вашей повседневной жизни, часть девелопмента. Билд-инженеры, не забывайте, что вы тоже работаете над продуктом, вы без девелоперов никуда.


Получается, что рецептом для применения Continuous Integration будут автоматические тесты, использование артефактов билда и команда, которая будет работать как единый механизм для достижения наивысших целей. Сложив эти три ингредиента вместе, мы сделаем большой шаг к финальной цели — непрерывному деплою на продакшн и доставлению радости нашим пользователям.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Нанософт: мы говорим о nanoCAD


сегодня в 22:11


nanoCAD — российская универсальная САПР-платформа, содержащая мощные инструменты базового проектирования, выпуска чертежей и разработки приложений с помощью открытого API. И в июне 2013 года компания «Нанософт» объявила о выходе пятой версии своего основного продукта, которая стала еще более удобной, быстрой и качественной.


Несмотря на то, что у нас уже выходит пятая версия, мало кто знает, сколько нас… Поэтому мы решили стать более открытыми. Показать, что nanoCAD создает не один-два человека, а большая дружная команда, работающая по разным направлениям. «Для нас это не просто продукт — это наша философия!». И мы делимся этой философией с вами…




Плюс заинтересовавшихся приглашаем к знакомству с nanoCAD:





Developers, stick with Russians – work in London




Переводы без

открытия счета


Переводы

через QR-Код


Новая функция

«Мой контроль»



Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Хакеры в гостях у Микки Мауса


Мы продолжаем серию статей про поездки на разные необычные security-мероприятия. Недавно нам удалось побывать на конференции HackInParis, которая проходила 17–21 июня во Франции, в Париже, в Диснейленде! Да-да, именно в центре детских восторгов, в парке развлечений. Если вам интересно, как вместе уживаются современные киберугрозы и детский писк и визг, прошу под кат.



Мы (Дмитрий Евдокимов и Андрей Часовских) выступили на конференции HackInParis с докладом “Windows Phone 8 Application Security”, в котором рассказали о модели безопасности, используемой в ОС Windows Phone 8, немного о том, как можно исследовать внутренности этой ОС, и непосредственно о самих приложениях – как их можно писать в 8-й версии новой ОС и на что стоит обращать внимание в плане безопасности при их разработке. При этом мы проводили параллели с iOS и Android.

Данная презентация стала логическим продолжением нашего выступления “Inspection Windows Phone applications” на конференции BlacHat AbuDhabi 2012. В том исследовании упор был сделан на безопасность приложений в Windows Phone 7. Тогда мы также представили инструмент для динамического анализа приложений для WP7 под названием Tangerine. Tangerine для выполнения своих функций использует статическую инструментацию CIL байткода. Но сейчас мы не будем углубляться в вопрос безопасности приложений для WP (этому посвятим отдельную статью), а расскажем о конференции HackInParis.

Итак, перелет из Санкт-Петербурга в Париж занял 3 часа, проходил на высоте 10500 метров. После посадки в аэропорту «Шарль де Голль» мы просто зашли в метро и поехали в Диснейленд, на карте обозначенный головой Микки Мауса.



Жили мы в Sequoia Lodge, а сама конференция проходила в отеле New York, в 500 метрах от нашей гостиницы. И все это – на территории Disney Village, по соседству с ресторанами, закусочными, сувенирными лавками и – да! – аттракционами. Рядом с Disney Village – DisneyLand и Disney Studio, вход туда уже платный.



Итак, HackInParis, можно сказать, состоит из двух частей: первая – тренинги, они шли с 17 по 19 июня, вторая часть – непосредственно сама конференция, с 20 по 21 число.

Тренинги были посвящены написанию эксплойтов, digital forensics с помощью open source инструментов, взлому IPv6-сетей и реверсингу приложений Win32.



Сама конференция проходила в один поток. Несомненным плюсом такого решения является большое количество людей на каждом докладе. В течение двух дней было 16 выступлений. В первый день большинство докладов было посвящено мобильной безопасности (BYOD, Android, Windows Phone 8, MDM-решения), а во второй день много говорилось о низкоуровневых исследованиях (virtualization, rootkits, DBI).

На самих докладах останавливаться не будем – их можно скачать в Интернете, а попробуем передать атмосферу.

Мы реально почувствовали себя гостями Микки Мауса и его друзей. Диснеевские герои от Бэмби до Русалочки выглядывали отовсюду: из-за перил зданий, из лифтов, смотрели на нас со стен номеров отеля и с проезжавших мимо автобусов. Кругом были веселые, беззаботные лица детей и уставшие, измученные лица взрослых.



Некоторые из докладчиков и посетителей приехали на конференцию вместе с семьями, а другие говорили, что не дай бог их детям узнать, где они были в командировке. Забавно было утром поговорить с человеком о последних тенденциях руткитостроения, а вечером встретить его с шариком в виде головы Микки Мауса, но в той же футболке с надписью “Nuit Du Hack”.



Nuit Du Hack – еще одна хакерская конференция в Диснейленде, которая идет сразу после HackInParis. И если HackInParis – это международная тусовка с небольшим уклоном в бизнес, то Nuit Du Hack – локальный хакерский фестиваль, где большинство докладов на французском языке. Также там есть выставка различных высокотехнологичных примочек и свой CTF. Кстати, в этом году в CTF участвовало две команды из России – HackerDom и TechnoPands. Своей атмосферой и организацией Nuit Du Hack напоминает наш Chaos Construction. Только вместо голоса, комментирующего демки, на весь фестиваль идет выступление докладчика.

В общем, HackInParis представляет собой отличное мероприятие, на которое можно съездить всей семьей, где все найдут себе занятие по интересам.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Экспресс-МД1 уже сутки без управления


сегодня в 13:22


В четверг, 4 июля 2013 года, в 13:37 московского времени спутник «Экспресс-МД1» вышел из под контроля центра управления ГПКС. В 19:00 московского времени 4 июля было принято решение о том, что оперативно восстановить работу спутника не удастся.

Без сигнала осталось около 117 млн человек проживающих на Центрально-Европейской части России и Уральском регионе. Недоступны такие телеканалы как «Первый канал», «Пятый канал», группа каналов от ВГТРК и другие (например, «Оружие»).



Похожая ситуация была год назад со спутником ЯМАЛ-201, когда сигнала не было 14 часов. Есть подозрения, что работа спутника «Экспресс-МД1» не восстановится. Обидно, что произошел сбой на таком молодом спутнике (запущен он был совсем недавно — в феврале 2009 года).


Более подробная информация есть по адресу: minsvyaz.ru/ru/news/index.php?id_4=43798






1667


1






Developers, stick with Russians – work in London




Переводы без

открытия счета


Переводы

через QR-Код


Новая функция

«Мой контроль»



Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Тянем, потянем, вытянуть не можем

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

Недавно мне в руки попался буклет довольно известной компании торгующей всяким современным железом – ПК, мобильники и т.д. Буклет довольно откровенно раскрывал изнанку работы и логистики: вплоть до того, во сколько выходят на работу водители, доставляющие заказы, и почему доставка не бесплатна. Моя потенциальная энергия как клиента этой фирмы повысилась.


Через небольшое время понадобилось купить планшет для фирмы. Листал Яндекс.Маркет, увидел фирму, чей буклет напитал меня лояльностью. О, цена лишь чуть выше, чем у неизвестных фирм, клац! Планшет в корзине. Оформляем.


Так, где тут можно предъявить свое юрлицо? Не видать. Где-то в подвале нашлась ссылка «Корпоративные продажи» — полезного мало. Ладно, в дороге разберёмся. Поехали.


Тянем!




Прежде чем вам позволят нажать кнопку «Купить», с вас стребуют телефон. В обмен на телефон подарят учётную запись в магазине. Я указал личный телефон, а заказ на фирму. Незадача, но надеюсь, что потом смогу исправить – если вдруг станем постоянным клиентом.

Предлагают варианты доставки. По умолчанию включён вариант «заберу сам». Да, я люблю забирать сам. Да, именно потому, что мне бывает жалко 300-500 рублей. Но тут за возможность сэкономить с меня попросили… 50 рублей. Варианта бесплатного самовывоза нет. Есть более дорогой самовывоз, а бесплатного нет. Эту пилюлю магазин попытался подсластить иконкой «здорово!» и текстиком «без предоплаты». Ну и на том спасибо – что не потребовали аванс за право приехать к вам на склад.


Хорошо, давайте доставку. Интересно, сколько же она стоит, если наибольшая часть вариантов самовывоза – 128 рублей? Клац! 390 рублей внутри МКАД.


Потянем!




К оплате. Во, наконец-то я могу указать, что лицо у меню юридическое. Нал, безнал – все равно, +4% к цене. Ммм, на Яндекс.Маркете покупочка с такой ценой уползла бы на страницу, до которой я бы никогда не долистал. Примерно на этом месте я заказ бросил и отправился к конкурентам. Но мой телефонный номер уже был в руках у компании. Сперва позвонил менеджер, совершенно бесплатно. Учитывая нижеприведенное, это довольно приятный сюрприз (имеется в виду бесплатность). Шедевральная добавка к заказу, которую я заметил только сейчас:

Выберите, насколько хорошо вас обслужить:



  • Человеческий сервис (49 руб. за СМС-уведомления о статусе заказа + 49 рублей за звонок за час до доставки).

  • Не хочу платить за комфорт — готов к жёсткому сервису по-русски




Честность – лучшая политика. Но вежливость и доброжелательность – тоже не худшая.

Вытянуть не можем…




Менеджеру я сообщил, что заказ более не актуален. Следом пришло СМС-сообщение примерно такого содержания: «Вы отменили заказ. Вас ждёт скидка в размере 500 рублей, если вы сделаете заказ в течение часа! Каждую минуту скидка уменьшается на 10 рублей!». Я стер это сообщение быстрее, чем уменьшилась моя скидка.

Если бы я не ругался, а работал




Будь это отчёт по юзабилити-аудиту, в топ проблем вошли бы следующие (здесь они не препарированы на шаги, даны «пучками»). Решения можно позаимствовать у многих конкурентов, ничего глубокомысленного тут не требуется.

  • Требовать телефон за право нажать кнопку «Купить», ещё не дав ничего взамен – создавать барьер для покупателя и, в общем-то, грубость. Тем более, утверждая, что на него будут приходить уведомления, но не сообщая, что это платная услуга.

    Лучше: не создавать дополнительный барьер в момент принятия решения о покупке, тем более в форме жёсткого условия «дашь телефон – включим кнопку». Лучше нарисовать сразу несколько полей формы заказа – пользователь чувствует свободу и понимает, что он уже оформляет заказ, а не идёт на поводу у магазина в непонятном направлении. Тем более, что это хороший повод подумать о простоте и лаконичности формы.


    Некоторые магазины спрашивают телефон только при оформлении доставки, некоторые – после выбора способа оплаты. Иначе говоря, тогда, когда уже попросту жалко откатываться назад или когда у покупателя естественным путём уже созрел вопрос типа «А как я узнаю о статусе заказа?». И не надо давать ложной надежды на бесплатные уведомления.Если у магазина нет мобильной версии, то лучше просить е-мейл, потому что путь из телефона до сайта будет слишком долгим.



  • Фактический обман с ценой – если нет бесплатного самовывоза, то получить товар по указанной в прайсе цене невозможно (указана цена без самовывоза и доставки). Самовывоз за деньги – абсурд, покупатель как будто платит за то, что он куда-то сам едет.

    Лучше: в случае со стоимостью самовывоза в 50 рублей вполне можно добавить эту сумму к цене всех товаров, а не требовать с покупателя деньги за самообслуживание. Для товаров ценой в 5-10 тысяч рублей такое удорожание вряд ли окажется критичным при выборе магазина. Но зато бывший самым дешёвым самовывоз станет бесплатным.


    Либо не стоит называть «это» самовывозом. Более хитрые магазины используют названия типа «доставка в пункт выдачи» — тут получателю проще убедить себя, что он получили услугу по доставке, хотя финансовые потоки ровно те же. В данном случае поговорка «Хоть горшком назови, только в печь не сажай» не работает. Посадите в печь, но с ласковым словом, которое и кошке приятно.



  • Шантаж со скидкой и счётчиком времени в конце вряд ли вызовет что-то кроме раздражения. Заставлять человека менять своё только что принятое решение – неблагодарное дело. А ещё и ставить при этом жёсткие условия – вдвойне неблагодарное.

    Лучше: выразить сожаление об отмене заказа. Скидку дать меньше, но более долгосрочную. Напомнить о ней при случае или перед истечением ей срока.






Общая рекомендация: ставьте смайлики! Тогда весь угар про «обслужите меня в жёсткой форме» станет восприниматься с юмором хотя бы у части покупателей.

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


Отдел аналитики UIDG


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


[Из песочницы] Практическое применение Cisco FPM или как заблокировать TeamViewer и прочее зло

Немного теории




Теории на эту тему хватает, но все же еще раз, ну на всякий случай. Для тех кому лень читать, и нужно тупо заблокировать TeamViewer – готовый конфиг в конце статьи.

FPM (Flexible Packet Matching) — реализованная в IOS технология, позволяющая идентифицировать трафик по содержанию полей в заголовках и payload пакетов. По сути своей – аналогична ACL, но не имеет ограничений по тому, какую часть пакета можно матчить. В случае с ACL — это три поля в заголовке IP: Source IP Address, Destination IP address, Protocol + 2 поля в заголовке TCP/UDP: Source Port, Destination Port (ну или type/code для ICMP). В случае с FPM матчить можно по любому биту пакета.


Нужно обратить внимание, что FPM ну совсем никак не statefull, не анализирует всю сессию, не анализирует фрагменты, не анализирует пакеты с IP Options. Излишние детали по ограничениям опущу, они все описаны на cisco.com.


FPM для анализа нужен один пакет со всеми заголовками, поскольку, опираясь на эти заголовки и смещения относительно них, и строятся правила. ИМХО – аналогично Atomic IP engine в Cisco IPS, но с большими возможностями.



Что нужно сделать, чтобы это использовать



1. Инициализировать PDHF для интересующих протоколов (лучше для всех).

Поскольку не все — дикие эксперты (хотя и не без оных) в знании всех полей заголовков L3/L4 протоколов, их смещений относительно друг друга, неплохо было бы иметь возможность при написании правил использовать имена полей заголовков, так как они определены в стандартах, а не тупо смещение относительно начала заголовка. И такая возможность есть. Для этого используются т.н. PHDF (Protocol Header Description File) файлы. Например, так выглядит PDHF для заголовка IP:


R1#sh protocols phdf IP

< Protocol ID: 1

Protocol name: IP

Description: Definition-for-the-IP-protocol

Original file name: system:fpm/phdf/ip.phdf

Header length: 20

-----some output omitted-------

Total number of fields: 13


Field id: 0, version, IP version

Fixed offset. offset 0

Constant length. Length: 4


Field id: 1, ihl, IP-Header-Length

Fixed offset. offset 4

Constant length. Length: 4


Field id: 2, tos, IP-Type-of-Service

Fixed offset. offset 8

Constant length. Length: 8


Field id: 3, length, IP-Total-Length

Fixed offset. offset 16

Constant length. Length: 16


Field id: 4, identification, IP-Identification

Fixed offset. offset 32

Constant length. Length: 16


Field id: 5, flags, IP-Fragmentation-Flags

Fixed offset. offset 48

Constant length. Length: 3


Field id: 6, fragment-offset, IP-Fragmentation-Offset

Fixed offset. offset 51

Constant length. Length: 13


Field id: 7, ttl, Definition-for-the-IP-TTL

Fixed offset. offset 64

Constant length. Length: 8


Field id: 8, protocol, IP-Protocol

Fixed offset. offset 72

Constant length. Length: 8


Field id: 9, checksum, IP-Header-Checksum

Fixed offset. offset 80

Constant length. Length: 16


Field id: 10, source-addr, IP-Source-Address

Fixed offset. offset 96

Constant length. Length: 32


Field id: 11, dest-addr, IP-Destination-Address

Fixed offset. offset 128

Constant length. Length: 32


Field id: 12, payload-start, IP-Payload-Start

Fixed offset. offset 160

Constant length. Length: 0


Т.е. мы четко видим, из каких 12-ти полей состоит заголовок IP (имя, длина, офсет) и можем использовать эту информацию при написании правил.


PHDF файлы, как правило, уже есть на флеше роутера, и чтобы их загрузить в пямять/инициализировать (без этого их нельзя будет использовать), нужно выполнить команду:


R1(config)#load protocol system:fpm/phdf/[ip.phdf|tcp.phdf|udp.phdf|icmp.phdf|ether.phdf]


2. Определить стек протоколов, подлежащий анализу.


Это, по сути своей, фильтр в крупную клетку. Здесь мы должны определить, что нам для дальнейшего, более детального анализа будет, например, интересен стек, в котором в качестве L3 протокола задействован IP, а в качестве L4 протокола –TCP. Пакеты же, в которых протокол транспортного уровня – UDP или ICMP анализироваться не будут. Следствие – меньший ущерб производительности.


Для написания правил используется стандартный MQC CLI (class-map, policy-map, service-policy). При определении стека, class-map должен быть типа stack. По дефолту стек начинается с заголовка L3 (как правило – IP). Выглядит так:


R1(config) class-map type stack match-all IP_TCP_STACK

R1(config-cmap) match field IP protocol eq 6 next TCP


Строка с match читается: «нам будут интересны пакеты, в IP заголовке которых поле protocol (слово protocol взято из PHDF, загруженного ранее) эквивалентно 6. Следующий протокол в стеке — TCP». Шесть – номер протокола TCP (номера можно посмотреть здесь www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml).


Если бы мы хотели матчить пакеты с какой-нибудь хитрой инкапсуляцией, например UDP over IP over IP, стек выглядел бы так:




class-map type stack match-all IP_IP_UDP_STACK
match field IP protocol eq 4 next IP
match field IP protocol eq 17 next UDP



3. Определить непосредственно правило фильтрации трафика.

Тут мы говорим, что для пакетов, структура заголовков которых соответствует ранее определенному стеку протоколов, мы будем искать что-то конкретное. Например, будем искать строку «danger» в первых 20 байтах payload TCP. Если находим – дропаем такой пакет. Используется тот же MQC CLI, но class-map и policy-map уже будут типа access-control. Выглядит так:



class-map type access-control match-any STRING_IN_TCP_PAYLOAD
match start TCP payload-start offset 0 size 20 string "danger"

policy-map type access-control DROP_STRING_IN_TCP
class STRING_IN_TCP_PAYLOAD
drop



4. Связать воедино ранее созданный стек и правило фильтрации.

Для этого потребуется еще одна policy-map типа access-control. В итоге получим такую конструкцию:



policy-map type access-control OUTSIDE_OUT
class IP_TCP_STACK
service-policy DROP_STRING_IN_TCP



Читается так:

class:«Будем наблюдать за пакетами со стеком IP->TCP».


service-policy:«как только видим такой пакет, изучаем содержание 20-ти байт, начиная с начала payload TCP (с того места, где заголовок TCP заканчивается и начинаются данные). Как только в этих 20-байтах видим строку danger – дропаем такой пакет».


5. Повесить политику на интерфейс.

Например, вешаем политику на внешний интерфейс в исходящем направлении:



interface Fa0/0
description Outside_Interface
service-policy type access-control output OUTSIDE_OUT



На этом по теории все. Че-то длинновато вышло…

Более подробно и детально есть вот в этой замечательной статье (хотя и не все уже актуально): blog.ine.com/2009/06/14/understanding-flexible-packet-matching/


Теперь по делу




С помощью FPM можно заблокировать все что угодно (skype, teamviewer, ammyy admin, etc). Достаточно просто выделить специфичную для конкретного приложения последовательность байт и отбрасывать пакеты, такую последовательность содержащие. Нжуно не дать клиенту приложения подключиться к серверу, какие бы хитроумные приемы тот не предпринимал.

Пример с TeamViewer (TV).


Ну вот возникла у меня задача остановить хождение этого зла в нашу сеть. Пользователи в организации достаточно хитросделанные умные и думают так: «А нафига я буду получать доступ к VPN, писать служебную записку, читать регламент, если есть TV и он меня радует, аж так, что прям не могу?». Поэтому, приходится насильно с этим бороться.


Можно пытаться блокировать TV через закрытие доступа к определенным серверам (по DNS, IP), но, на практике, этот зверь без труда пробирается через подобные механизмы.


Тут то и приходит на помощь FPM.


Первым делом нужно увидеть, что делает TV, как выглядит сессия подключения клиента к серверу. Для этого, проще всего взять всем известный Wireshark, установить его на хост, на котором установлен TV и посмотреть, что будет происходить при старте TV. В идеале нужно чтобы другой трафик не забивал интерфейс и не мешал анализировать нужный трафик. Т.е. такой хост нужно как-то изолировать от LAN, но обеспечить ему интернет-доступ (можно использовать GNS3, или подключить хост к интернету через 3G/4G модем).


Итак, wireshark слушает интерфейс. Запускаем TV. Видим следующее:

image


После установление TCP-сессии с неким сервером (первые 3 пакета – TCP-3WAY-Handshake), в четвертом пакете TV в поле данных передает некую последовательность байт, выглядящую так: 0x17241004. Что это? Да я понятия не имею, но догадываюсь, что это имеет к TV непосредственное отношение и это можно попробовать заблокировать. Так и сделаем, и посмотрим, что получится.


Мы видим, что используется протокол TCP, поэтому определим соответствующий стек:



class-map type stack match-all IP_TCP_STACK
match field IP protocol eq 6 next TCP



Теперь определим class-map, который будет матчить ту самую последовательность:

class-map type access-control match-any MATCH_TCP_PAYLOAD_17241004
match start TCP payload-start offset 0 size 20 string "0x17241004"



Определим правило фильтрации для класса MATCH_TCP_PAYLOAD_17241004:

policy-map type access-control BLOCK_TEAMVIEWER_POLICY
class MATCH_TCP_PAYLOAD_17241004
drop
log



Дальше, создадим политику и повесим ее на один из интерфейсов:

policy-map type access-control OUTSIDE_OUT
class IP_TCP_STACK
service-policy BLOCK_TEAMVIEWER_POLICY

interface FastEthernet0/1
service-policy type access-control output OUTSIDE_OUT



Запустим TV повторно, и посмотрим, что изменилось:

image

Видим, что передача блокированной FPM последовательности не удалась, TV попытался передать ее еще несколько раз (TCP Retransmission), поморгал, подергался, сказал что не может подключиться, но, после нажатия кнопки «Повтор», он все-таки выбрался наружу.


Передать эту последовательность TV пытался на порт 443. Т.е., видимо, это ему было нужно для успешного установления SSL-сессии.


Посмотрим на счетчики (some unrelated output omitted):



R1#sh policy-map type access-control interface fastEthernet 0/1
FastEthernet0/1
Service-policy access-control output: OUTSIDE_OUT
Class-map: IP_TCP_STACK (match-all)
92 packets, 23085 bytes
5 minute offered rate 2000 bps
Match: field IP protocol eq 6 next TCP
Service-policy access-control : BLOCK_TEAMVIEWER_POLICY
Class-map: MATCH_TCP_PAYLOAD_17241004 (match-any)
<b>10 packets, 630 bytes</b>
5 minute offered rate 0 bps
Match: start TCP payload-start offset 0 size 4 string "0x17241004"
drop
log



Видном, что правило работает, и даже, что TV теперь не так уверенно подключается, но тем не менее, пока ему это удается.

Снова запускаем TV, Wireshark и анализируем трафик дальше.

А дальше видим следующее:


image


Поняв, что установитьSSL сессию сервером у него не получится, TV пытается подключиться к нему по http. После успешного подключения он запрашывает URL, содержащую последовательность «DynGate».


Теперь имеет смысл попытаться заблокировать забросы, содержащие подобную последовательность. Технически, более правильно это сделать с помощью CBAC (http deep packet inspection), поскольку тут уже речь идет о чистом http и никакой проблемы чтобы это зарубить с помощью application inspection я не вижу. Но, т.к. в этой статье говорим о FPM, продолжим в том же ключе, в котором начали.


Итак, нужно заблокировать TCP/http пакет, который содержит в поле payload строку DynGate. Если покликать по полям в Vireshark, видно, что GET занимает три байта, далее несколько байт занимают какие-то каракули, потом идет то самое DynGate. Поэтому, будем инспектировать payload начиная, скажем, с 10-го байта и заканчивая 60-м (диапазон выбран примерно, что называется, на глаз). Конечно, можно (и даже нужно) точно выяснить сколько байт занимает DynGate и сколько у него offset (так будет лучше с точки зрения производительности, поскольку роутеру потребуется анализировать меньшую часть пакета), но лень, лень и еще раз лень.


Создадим еще один class map, в котором будем матчить искомую строку. На всякий случай учтем любой вариант регистра символов:



class-map type access-control match-any MATCH_TCP_PAYLOAD_DYNGATE
match start TCP payload-start offset 10 size 50 regex ".*[dD][yY][nN][gG][aA][tT][eE].*"



Прицепим вновь созданный class-map к уже имеющейся policy map. В итоге BLOCK_TEAMVIEWER_POLICY будет выглядеть так:

policy-map type access-control BLOCK_TEAMVIEWER_POLICY
class MATCH_TCP_PAYLOAD_17241004
drop
log
class MATCH_TCP_PAYLOAD_DYNGATE
drop
log



Попробуем еще раз запустить TV.

И все… TV предпринял несколько отчаянных попыток проскочить, но в итоге сдался, лишь иногда подергиваясь, с мыслью: «а вдруг что-то изменилось?».


Смотрим счетчики еще раз (some unrelated output omitted):



R1#sh policy-map type access-control interface fastEthernet 0/1
FastEthernet0/1
Service-policy access-control output: OUTSIDE_OUT
Class-map: IP_TCP_STACK (match-all)
783 packets, 120803 bytes
5 minute offered rate 0 bps
Match: field IP protocol eq 6 next TCP
Service-policy access-control : BLOCK_TEAMVIEWER_POLICY
Class-map: MATCH_TCP_PAYLOAD_17241004 (match-any)
125 packets, 7926 bytes
5 minute offered rate 0 bps
Match: start TCP payload-start offset 0 size 4 string "0x17241004"
drop
log
Class-map: MATCH_TCP_PAYLOAD_DYNGATE (match-any)
<b> 203 packets, 15875 bytes</b>
5 minute offered rate 0 bps
Match: start TCP payload-start offset 10 size 50 regex ".*[dD][yY][nN][gG][aA][tT][eE].*"
drop
log



Таким образом, так выглядит вся необходимая конфигурация, позволяющая заблокировать TeamViewer (по крайней мере на июль 2013 г):

class-map type access-control match-any MATCH_TCP_PAYLOAD_17241004
match start TCP payload-start offset 0 size 4 string "0x17241004"

class-map type stack match-all IP_TCP_STACK
match field IP protocol eq 6 next TCP

class-map type access-control match-any MATCH_TCP_PAYLOAD_DYNGATE
match start TCP payload-start offset 10 size 50 regex ".*[dD][yY][nN][gG][aA][tT][eE].*"

policy-map type access-control BLOCK_TEAMVIEWER_POLICY
class MATCH_TCP_PAYLOAD_17241004
drop
log
class MATCH_TCP_PAYLOAD_DYNGATE
drop
log

policy-map type access-control OUTSIDE_OUT
class IP_TCP_STACK
service-policy BLOCK_TEAMVIEWER_POLICY

interface FastEthernet0/1
service-policy type access-control output OUTSIDE_OUT

Вместо заключения




Таким образом, FPM – достаточно мощный инструмент, позволяющий заблокировать все что угодно, до того момента пока это «что-угодно» не установило защищенную сессию. Главное, правильно идентифицировать нужное приложение и не заблокировать что-то лишнее.

Конечно, в идеале, для этого нужно использовать решения, реализующие сигнатурный анализ, которые уже научены идентифицировать подобного рода приложения (например, ASA CX), но как временная мера — FPM — вполне приемлемый вариант.


Следует обратить внимание, что фичей нужно пользоваться с осторожностью и без фанатизма. Не нужно инспектировать всю payload на наличие буквы «x». Лучше узнать, где эта буква «x» может встретиться, и инспектировать именно эту часть пакета, иначе роутер может просто умереть от чрезмерной загрузки, вызванной необходимостью инспектировать весь трафик.


К слову



ASA на данный момент не позволяет заблокировать teamviewer/что-то еще что-то из той категории, как ни старайся. Ну нет у нее таких средств/механизмов.

This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Приложения Intel для Android. Информационные ресурсы

В нашем блоге мы стараемся отразить все аспекты разносторонней деятельности компании Intel, и нам это в целом удается. Однако одна тема – приложения Intel, создаваемые для платформы Android, почти всё время ускользала от нашего внимания, что, безусловно, неправильно. Исправляя свою ошибку, мы запускаем сразу серию постов по данному поводу, разделив все приложения на тематики; первый пост будет посвящен информационным и справочным программам.

Конечно же, все приложения Intel для Android, в отличие от процессоров нашей компании, совершенно бесплатны.

В качестве тестовой платформы будет использоваться коммуникатор Orange AZ210A на процессоре Intel Atom.



Intel ARK




Мобильный аналог хорошо многим известной базы знаний Automated Relational Knowledge Base (ARK), содержащей сведения об аппаратных решениях Intel с функционалом поиска и сравнения. Имеет механизм автоматического обновления, в то же время является самостоятельным оффлайновым приложением, не требующим доступа в интернет. Замеченные особенности: при быстром пролистывании «съедает» страницы, если просматриваете список – крутите помедленнее.

Intel Channel Products Guide




Каталог «железа» Intel, содержит информацию о коробочных версиях процессоров для ПК, материнских платах и SSD-дисках, а также инструкции по их монтажу. Имеет возможность подобрать поставщиков оборудования в соответствии с вашим местоположением, причем данный функционал в России работает корректно. К сожалению, в эксплуатации проявил не себя не лучшим образом – склонен к вылетанию (точнее, скорее, не запусканию).

Intel VIP Tech Zone




Под этим громким названием фигурирует веб-приложение для любителей компьютерных игр. Их вниманию предлагается лента новостей, отчеты о событиях, акции с розыгрышами и призами от Intel. Участники VIP Tech Zone могут получить привилегированный доступ на игровые мероприятия, спонсором которых выступает компания. Я, честно говоря, не большой фанат игр, но отметил красивое оформление приложения и большое количество содержащегося в нем материала.

Jobs At Intel




Ну, здесь, как говорится, все понятно – раздел вакансий является едва ли не одним из самых посещаемых на сайте Intel. С фирменным приложением искать интересные предложения еще легче, поскольку имеется возможность сохранить историю поиска и его результаты. Ну а сам поиск можно осуществлять и по направлению деятельности, и по географическому положению. Однозначно полезное приложения для изучающих рынок труда.

Intel Software Adrenaline




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

Intel Capital




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

Intel Free Press




Android версия веб-портала Intel Free Press, известного интернет-издания, рассказывающего о цифровых технологиях и всем, что происходит вокруг них. Своей задачей IFP считает освещение внутренних творческих процессов, происходящих в Intel и индустрии в целом — каким образом выглядит путь от идеи до ее воплощения. Как следует из названия, все материалы сайта свободны для использования.

Intel Processor Advisor (AG Communications Group)




И напоследок — приложение, не принадлежащее Intel, но тесно связанное с ее продуктами. Intel Processor Advisor — исключительно гибкий и настраиваемый каталог процессоров Intel. Графическое представление величин, различные варианты сортировки, развитая система фильтров и поиска — все это облегчает поиск оптимального процессора для каждой конкретной задачи.

This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Подключайтесь к онлайн-конференции «Создание современных приложений с Visual Studio 2013» сегодня в 10:00 (МСК)


сегодня в 08:38


Добрый день!

Приглашаем вас на онлайн-конференцию «Создание современных приложений с Visual Studio 2013» 5 июля в 10:00 (МСК).


image


Сегодня ведущие эксперты Microsoft познакомят вас с новыми инструментами разработки и тестирования Visual Studio 2013. На конференции вы узнаете последние новости из мира разработки приложений, которые вы сможете создавать в Visual Studio 2013, а также будут представлены последние технологии управления жизненным циклом приложений на базе Team Foundation Server 2013.


В программе конференции:

• Новые возможности среды Visual Studio 2013 и .NET Framework 4.5.1

• Разработка клиентских приложений с использованием Visual Studio 2013

• Разработка современных облачных веб-сайтов с Visual Studio 2013

• Обеспечение качества приложений c помощью инструментов Visual Studio 2013

• Управление проектами и совместная работа в Visual Studio 2013 и Team Foundation Server 2013

• Работа c облачным бэкендом мобильных приложений в Visual Studio 2013


Целевая аудитория:

• Разработчики

• Руководители групп разработки

• Руководители проектов

• QA менеджеры


Уже сейчас вы можете загрузить предварительную версию Visual Studio 2013.


Подключайтесь к прямой онлайн-трансляции.


image image




Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Кто возьмет кристаллов пачку

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

Первопричиной изменений стало наше стремление повысить доход на платящего пользователя (ARpPU). И прежде чем броситься в пучину отчаянных реформ, мы предприняли целую серию пробных шагов в виде скидок. Временное снижение цен на контент или на кристаллы (виртуальная валюта «Танков Онлайн) так или иначе подталкивало аудиторию к увеличению своих расходов. В целом эти эксперименты были удачными, но оставались на уровне разовых акций, в то время как нам была нужна система. И мы ее выстроили на основе пакетной продажи кристаллов.


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


Надо сказать, что покупатель выбирать не умеет и не любит. Можно вспомнить доклад Шины Айенгар о проблеме выбора Если вы не смотрели, то настоятельно рекомендуем зайти на YouTube и вбить «Sheena Iyengar» в поисковой строке.

Суть в том, что пользователь, зайдя в супермаркет и увидев там более сотни видов яблок, будет очень рад такой свободе, но в конечном итоге едва ли сделает выбор, которым останется доволен. А если представить, что видов яблок лишь, скажем, семь, то выбор будет сделан довольно быстро и безболезненно.


Так и у нас — до введения механизма пакетной продажи игрок должен был рассчитать, сколько кристаллов ему потребуется. Взять с запасом? Или, наоборот, поменьше, а остальное накопить? Голова лопается от вопросов. И на этом трудности не заканчивались. Определившись с количеством кристаллов, игрок вбивал его в соответствующее поле, оценивал сумму в реальных деньгах и лишь тогда переходил к оплате. Слишком долго. Слишком муторно. Мы хотели свести процесс принятия решения до одного интуитивного клика.


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

1. Пакеты должны быть упорядочены по размеру. Либо сверху вниз, либо снизу вверх – в зависимости от того, какую логику подразумевает дизайн платежной страницы.

2. В пакетах должен быть бонус. Это простая стимуляция пользователей к покупке.

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

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


Дабы не быть голословными…


image



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


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


А дальше – дело техники. Выгрузили размеры всех платежей за определенный период, посмотрели, какое количество кристаллов покупают наши игроки. И к своему удивлению мы обнаружили, что пользователи уже давно определили для себя своего рода «пакеты». Статистика показала, что аудитория с завидным постоянством берет вполне определенные суммы кристаллов. Порции по 500, 1000, 5000 и 10 000 кристаллов оказались наиболее популярны.


Имея под рукой основные принципы и ограничения, количество пакетов, а также размер минимального и максимального пакета, и базируясь на уже имеющейся статистике по предпочтениям игроков, мы свели расчет пакетов к простейшей задаче линейной оптимизации. Такие хорошо решаются, например, в надстройке «Поиск решения» для MS Excel.


Тем немногим, что мы добавили «от себя», было интуитивно предполагавшееся округление до тысяч кристаллов. А после этого мы посмотрели на магазины бытовой техники и вычли рубль из цены каждого пакета. Было 100 рублей, стало 99 рублей. Было 3000, стало 2999 рублей. Минус рубль — древний, но верный прием маркетолога.


Однако не все было гладко, и некоторые нюансы пришлось учитывать, уже выстроив систему в целом.

1. Цены вида «99,9» – это прекрасно, но не с технической точки зрения. Если за 99 рублей мы даем 5000 кристаллов, то сколько мы должны давать за 100 рублей, учитывая, что цена одного кристалла – ровно две копейки? Выходит, тоже 5000. А за 99 рублей 50 копеек? А за 101 рубль? Человеку-то все понятно, но биллинг, к сожалению, не человек. Так что ценой красивых цен для нас стали пусть небольшие, но костыли в коде.

2. А что делать, если человек подошел к терминалу, держа в руке 150 рублей, а у нас пакеты на 100 (99) и 300 (299)? Терминалы в большинстве своем еще не научились сдавать сдачу. А что, если пользователь платит с помощью SMS? Под каждый SMS-прайспойнт пакета не создашь. А что, если у игрока есть предоплаченная карта на 10 долларов, и он намерен потратить их все? Задумавшись над этими вопросами, мы махнули рукой и оставили пользователю возможность ввода произвольной суммы. Теперь введенная сумма оптимальным образом раскидывается по пакетам, а игрок получает сверху бонусы от этих пакетов в полном объеме. Строго говоря, данное правило – не совсем пакетная продажа валюты, а скорее ступенчатая скидка на кристаллы, но мы смирились с этим нарушением изначально заложенных принципов. Также в жертву этой логике и дизайну пришлось принести один из пакетов. Их осталось пять, а шестой кнопкой пользователь может ввести любую нужную ему сумму.

3. Наконец, третья проблема, с которой мы столкнулись – это проблема “красивых” сумм в других валютах. Мы рассчитывали цены вида «9,99» для рублей, а если пользователь платит в долларах или евро, то вся красота исчезает. Но менять цены для разных локализаций мы не хотели. Красота требует жертв, если речь не идет о ценовой дискриминации.


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



Цели своей мы достигли. Покупка кристаллов стала для пользователя и проще, и выгоднее. Ну и мы не в накладе — ARpPU вырос на 30%. Win-win.


Что дальше? Мыслей много. Например, таргетированные пакеты. Зная, сколько платит игрок, формировать пакеты специально под него. Решение очевидно спорное, но есть и его облегченная версия — не показывать большие пакеты игроку, который еще не донатил, чтобы не отпугнуть его большими суммами на этапе привыкания к игре. А еще можно, как в «Киндер-сюрпризы», вкладывать в пакеты более выгодного нам номинала случайный игровой предмет. Но это — уже другая история.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Будущее веб-разработок CAD систем

Откроем Википедию и посмотри что пишут про форматы .DXF и .DWG и развитие их.


DXF — открытый формат файлов для обмена графической информацией между приложениями САПР. Был впервые представлен в декабре 1982 года как часть AutoCAD 1.0, в качестве обменного формата данных, предоставляющего ту же информацию, что и закрытый внутренний формат AutoCAD — DWG, спецификация на который никогда не предоставлялась.










По мере того, как AutoCAD становился всё сложнее и поддерживал всё более сложные типы объектов, DXF становился всё менее полезен. Новые объекты в спецификации формата описывались не полностью либо не описывались вовсе. Большинство разработчиков коммерческих приложений, включая конкурентов Autodesk, в качестве основного формата обмена с AutoCAD используют формат DWG, через библиотеки, предоставляемые некоммерческой организацией Open Design Alliance, которой была выполнена обратная разработка формата DWG.








По мнению участников консорциума Open Design Alliance, это должно способствовать распространению формата DWG в качестве открытого стандарта обмена данными между различными САПР.





Если посмотреть список участников консорциума Open Design Alliance то мы увидим такие организации как Adobe Systems, АСКОН, Nanosoft, Oracle Corporation, Siemens PLM Software, SolidWorks Corporation, Tekla и др. Посмотрим что пишут в Википедии про альянс.


Open Design Alliance продвигает формат DWG в качестве открытого стандарта для обмена данными между различными САПР. В то же время Autodesk не желает открывать спецификации формата DWG и предлагает использовать для обмена данными формат DXF. В качестве альтернативы DWGDirect компанией Autodesk была разработана программная библиотека RealDWG, которая лицензируется для приложений, не конкурирующих с продуктами Autodesk.






Оторвёмся от грешной земли и посмотрим в облака. Заглянув в Википедию посмотрим что пишут про W3C.



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








Миссия W3C: «Полностью раскрыть потенциал Всемирной паутины, путём создания протоколов и принципов, гарантирующих долгосрочное развитие Сети».

Более конкретная цель W3C — помочь компьютерным программам достичь способности ко взаимодействию в Сети. Применение единых стандартов в Сети — это ключевой шаг для достижения такого взаимодействия.






В умах W3C появился новый формат векторной графики — SVG. Прошло больше 10 лет и формат ещё не востребован в разработках CAD систем. Браузеры начали поддерживать в версии 1.1. На форуме сайта DWG.RU попалась фраза.



Формат SVG ИМХО изначально «неправильно» задуман.






Очень смелое заявление, очень трудно согласиться. Реализовано не мало в SVG прекрасной графики.

В интернете можно найти много разной информации о создании чертежей в формате SVG. Чаще сводится к простому экспорту из DXF в SVG c кучей лишнего кода и при этом другим редактором корректно не открыть. Есть Online редакторы SVG. Всюду пишут про недостатки использования SVG. В головах энтузиастов возникают идеи создать Online CAD. Правда пока на идеи и заканчивается. За уши начали ПО с локальных машин затягивать в облака с закрытыми форматами. А может надо получше присмотреться к SVG и придерживаться единого стандарта (рекомендаций) структуры файла для описания чертежей.



Демонстрационный пример чертежа в формате SVG с внешним файлом CSS созданный прямо в Notepad.



This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html