...

суббота, 17 марта 2018 г.

FFMPEG. Загружаем часть видео с YouTube


Иногда мы хотим поделиться с друзьями частью какого то видео на YouTube — время концентрации внимания в современной реальности снижено до предела, и если скидывать ссылку на ролик(даже с таймкодом начала) с комментарием «смотреть с 21:51 по 24:55» — велика вероятность, что видео просмотрено не будет.

Кроме того — куски видео могут потребоваться для монтажа своих роликов — и довольно неудобно скачивать ради нескольких секунд весь ролик и искать/вырезать нужную часть в программе для монтажа.

Как загружать часть видео YouTube при помощи ffmpeg — под катом

Получаем прямую ссылку


Часть реализации моего Telegram бота на Python:
Нам потребуется библиотека pytube.
Создаем объект класса YouTube, которому передаем нашу ссылку, передаем номер нужного потока и получаем прямую ссылку на видео/аудио
from pytube import YouTube
link = "ссылка на видео"
itag = номер_потока
url = YouTube(link).streams.get_by_itag(itag).url


Обратите внимание, что потоки 1080p и 480p не имеют аудиодорожки.

Далее — подаем ссылку на вход (-i) ffmpeg вместе с таймкодами начала (-ss) и конца (-to) в формате «hh:mm:ss.xx». Задаем аудио кодек, битрейт и "-avoid_negative_ts make_zero" для того чтобы избежать подвисания картинки в начале видео из за потери ключевых кадров.

ffmpeg загрузит видео с нужного момента — нам не нужно качать видео на компьютер и обрезать — мы сразу выкачиваем нужный кусок.

process_call_str = 'ffmpeg -ss {1} -to {2} -i "{0}"'\
                            '-acodec aac -b:a 192k -avoid_negative_ts make_zero "{3}"'
                            .format(str(url), str(ss), str(t), download_file_path)
status = subprocess.check_call(process_call_str, shell=True)


Потоки без аудио


А что же делать с потоками без аудио? FFMPEG выручит нас и здесь — он может принимать на вход несколько потоков и объединять их.

Получаем прямую ссылку на видеопоток (например 137 — 1080p) и на поток с аудио/видео — например 18 — 360p

url = YouTube(link).streams.get_by_itag(itag).url
aurl = YouTube(link).streams.get_by_itag(18).url


Далее начинается магия — подаем на вход оба потока и при помощи "-map" берем видео дорожку из первого потока и аудио дорожку из второго потока и объединяем- теперь загрузка и объединение потоков происходит с нужного места из двух источников.
process_call_str = 'ffmpeg -ss {2} -to {3} -i "{0}" -ss {2} -to {3} -i "{1}"' \
                            ' -acodec aac -b:a 192k -avoid_negative_ts ' \
                            'make_zero -map 0:v:0 -map 1:a:0 "{4}"' \
                            .format(str(url), str(aurl), str(ss), str(t), download_file_path)
status = subprocess.check_call(process_call_str, shell=True)


Заключение


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

При помощи ffmpeg в боте реализовано ускорение/замедление звука с тонокомпенсацией, сжатие в формат opus. Теперь вот и загрузка видео/аудио с нужного момента по таймкодам — достаточно прикрепить к ссылке таймкоды и бот оперативно пришлет нужный кусок аудио/видео в нужном формате и качестве:

http://www.youtube.com/watch?v=Qgm36HHDEk0(30:29.5-30:38.5)

Let's block ads! (Why?)

Битва за сетевой нейтралитет: два с половиной года Net Neutrality

23 апреля действующие в США правила сетевого нейтралитета будут окончательно отменены.

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

Теперь обратим внимание на короткий период, в течение которого правила действовали в США.


/ Flickr / Free Press / CC BY

Короткая эпоха сетевого нейтралитета


Наступил 2015 год. FCC находилась в неопределенном положении. Главой Комиссии оставался Том Уилер (Tom Wheeler), «сторонник кабельных компаний». На пост же его назначил президент Обама, который выразил поддержку идеям сетевого нейтралитета. Уже в январе Уилер выбрал сторону — в ходе CES-2015 он анонсировал реклассификацию деятельности интернет-провайдеров. Это означало, что позиция FCC совпала с требованиями сторонников сетевого нейтралитета.

Первая важная дата в истории вопроса в 2015-м — 26 февраля. В этот день Комиссия провела голосование, по итогам которого в США и утвердился действовавший до недавнего времени подход. Члены FCC проголосовали за реклассификацию широкополосной связи и, как отметила инициативная организация Public Knowledge, «против блокировок и дискриминации».

Новые правила провозглашали запрет на:

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

Защитники сетевого нейтралитета добились своей цели, но на стороне противников новых правил все еще оставались республиканцы и интернет-провайдеры, поэтому конфликт не был исчерпан.

Для начала телекоммуникационные компании предприняли попытку договориться с FCC. Правила были одобрены в феврале, но до вступления в силу оставалось несколько месяцев, в течение которых крупные провайдеры предлагали остановить реклассификацию. Компании уже были согласны с тремя главными запретами и, как может показаться, искали компромисса. Комиссия была непреклонна. Как писали в Arstechnica, провайдеры не смогли убедить FCC, что они могут действительно выиграть в суде.

Ассоциация телекоммуникационных компаний США все же подала иск на FCC, когда диалог зашел в тупик. Новые правила представители назвали «произволом и капризом». Джиги Сон (Gigi Sohn), глава Public Knowledge и защитница FCC в то время, сказала, что судебные тяжбы после голосования «были неизбежны», поэтому такой шаг провайдеров не стал сюрпризом.

В июне 2015 года Федеральный суд отклонил попытки телекоммуникационных компаний остановить реклассификацию, и правила сетевого нейтралитета вступили в силу. Впрочем, это не остановило противников идеи в политических и коммерческих кругах — тяжбы продолжались. Слушания в окружном апелляционном суде были назначены на конец года. От них зависело будущее интернета — судьи в тот момент могли отменить решения FCC. На протяжении трех часов защита Комиссии доказывала свое право на реклассификацию. Суд полагался на знаковое решение «Brand X» от 2005 года, которое позволяло FCC самостоятельно выбирать классификацию, однако судьи сомневались в утверждении, что услуги беспроводной и широкополосной связи «функционально эквивалентны».

Слушания завершились, и окончательное решение было вынесено только через полгода. 14 июня 2016 года Федеральный апелляционный суд полностью поддержал правила сетевого нейтралитета. Это был уже третий раз, когда FCC пришлось защищать принципы «равноправного интернета» в суде. Отныне перед правилами сетевого нейтралитета оказались равны как операторы проводной, так и к беспроводной связи. Несмотря на то, что впереди оставалась еще одна судебная инстанция, июньское решение называли «окончательной победой сетевого нейтралитета».

Начало конца сетевого нейтралитета


Телекоммуникационные компании вновь отправились в суд в июле — на этот раз в Апелляционный суд США по округу Колумбия. Их просьба оставалась прежней: отменить правила, запрещающие ограничивать или регулировать доступ к сервисам и сайтам. Вице-президент телекоммуникационного гиганта AT&T по этому поводу сказал: «Мы всегда считали, что этот вопрос будет решен Верховным судом, и мы с нетерпением ждем участия в апелляции».

Вместе с этим подходил к концу президентский срок Барака Обамы, и полным ходом шла подготовка к выборам. В ноябре народ США выбрал главой государства Дональда Трампа, члена Республиканской партии, которая выступала против решения FCC. Через месяц после выборов Том Уилер, председатель Комиссии, при котором были приняты правила сетевого нейтралитета, досрочно отправился в отставку.

СМИ принялись рассуждать о будущем FCC, предполагая, что новой главой Комиссии станет человек, разделяющий взгляды республиканцев. Вероятным претендентом на пост называли члена FCC Аджита Пая (Ajit Pai), известного своей критикой сетевого нейтралитета. Так и случилось — в январе решением Трампа Пай был назначен председателем Комиссии.


/ Wikipedia / Federal Communications Commission / CC

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

Через месяц после вступления в должность Аджит Пай публично заявил, что сетевой нейтралитет «был ошибкой», и Комиссия готова вернуться к гораздо более свободному стилю регулирования отрасли. Подробный план Пай представил в апреле. Стало известно, что FCC откажется от принятой в 2015 году классификации и, возможно, от остальных утвердившихся принципов.

За несколько недель до этого представители таких технологических компаний, как Facebook, Google и Amazon, встретились с Аджитом Паем, чтобы выразить свою поддержку сетевому нейтралитету и добиться его сохранения. Однако Комиссия выбрала другой вектор развития.

Как и двумя годами ранее, общественность остро отреагировала на действия FCC. Ведущий вечернего шоу Джон Оливер (John Oliver) вновь напомнил об угрозе отказа от правил сетевого нейтралитета (впервые он сделал это в эфире в 2014 году). Пользователи снова устроили онлайн-протест, наводнив сайт Комиссии комментариями. Петиция в защиту сетевого нейтралитета собрала свыше 2 млн подписей.

Несмотря на то, что жители США, технологические компании и инициативные группы активно выражали свое несогласие с политикой FCC, уже к ноябрю был готов черновик документа, отменяющего правила 2015 года. Широкополосную связь предлагалось рассматривать не как телекоммуникационную, а как информационную услугу, и три установленных запрета теряли свою силу. Аджит Пай заявил, что с «интернетом все было в порядке в 2015 году», и никакое дополнительное регулирование ему не требовалось. 14 декабря 2017 года большинство членов Комиссии поддержали эту точку зрения и проголосовали за отмену правил сетевого нейтралитета.

Аджит Пай заявил, что «американцы будут по-прежнему иметь доступ к сайтам, которые они хотят посещать, и сервисам, которыми они хотят пользоваться». Однако, не все разделяют оптимизм председателя Комиссии. О том, что изменилось с решением FCC, расскажем в следующей статье.

Статьи по теме из корпоративного блога VAS Experts:


Предыдущие части рассказа о Битве за сетевой нейтралитет:

Let's block ads! (Why?)

Проекту ReactOS требуются студенты для участия в Google Summer of Code 2018

image

Привет, Хабр!

Спешим сообщить, что операционная система ReactOS уже третий год подряд получает слот на Google Summer of Code!

В случае успешной сдачи работы участник Google Summer of Code получит 2 400 евро.


Кто может участвовать?

Участвовать могут любые студенты и аспиранты (т.к. в юрисдикции США аспиранты считаются PhD Students).


Что надо сделать, чтобы участвовать?


  1. Зарегистрироваться на https://summerofcode.withgoogle.com/;
  2. Выбрать вариант участия как студент;
  3. Выбрать ReactOS как проект участия;
  4. Описать в свободной форме то, что вы хотите сделать для проекта;
  5. Подписаться на почтовую рассылку разработчиков и продублировать туда текст из пункта 4;
  6. Обговорить в IRC свое участие;
  7. Взять в вашем учебном заведении Proof of Enrollment – бумагу, которая подтверждает, что вы являетесь студентом (или аспирантом) этого учебного заведения на срок Google Summer of Code.

Поторопитесь! Подача заявок закончится 27 марта!

Возможные идеи для участия – под катом.


Возможные идеи для участия

В этом году в качестве идей предлагаются следующие варианты (взято из Wiki ReactOS и свободно переведено с добавлением справочной информации):


  1. Ваша идея. Если вы уже немного разбираетесь в инфраструктуре ReactOS, то вы можете предложить свою идею для реализации в рамках GSoC.
  2. NDIS-драйверы для распространённых современных версий виртуальных машин. Это упростит установку ReactOS на последних версиях виртуальных машин, на которых уже не используются сетевые карты, для которых в проекте уже есть драйверы (такие, как AMD PCnet, Realtek RTL8139 и NE2000).
  3. Разработка фундаментальных компонентов для поддержки Wi-Fi. Сейчас в проекте есть поддержка открытых сетей Wi-Fi и сетей с шифрованием WEP, однако отсутствует поддержка большинства API, необходимых для работы с защищенными сетями. Для улучшения поддержки таких сетей предлагается реализовать API из Windows Vista+, также добавленное в Windows XP SP3, про которое можно почитать по этой ссылке.
  4. Поддержка технологии Plug-and-Play для стека устройств хранения. Это улучшит поддержку SCSI- и SATA-устройств. Предлагается начать задачу с улучшения драйвера scsiport, а потом улучшить поддержку PnP в драйвере UniATA.
  5. Стек поддержки протокола Bluetooth. Сейчас в ReactOS нет поддержки протокола Bluetooth. Предлагается начать задачу с менеджера устройств и поддержки профиля Bluetooth для поддержки передачи файлов (OBEX-FTP).
  6. Драйвер для шины Intel High Definition Audio. В ReactOS уже есть начальная поддержка этой спецификации для звуковых карт, и надо ее доработать, чтобы такой драйвер мог работать и на Windows, и на ReactOS. Подробнее про интерфейс шины – по ссылке.
  7. Драйвер для Wine Audio. В контексте проекта Wine драйвер – это модуль, реализующий некоторый набор COM-интерфейсов поверх различных Linux-библиотек (в контексте звука таких, как ALSA, OSS или PulseAudio). Наличие такого модуля позволит использовать последние библиотеки Wine, связанные со звуковым API, позволит локализовать весь интерфейс в одном месте и сделать совместимый с Vista и более новыми Windows звуковой стек.
  8. Аудиомикшер – позволит улучшить поддержку аудиодрайверов, которым мешает отсутствие этого компонента. По завершению этого проекта должна появиться возможность воспроизведения множества звуковых потоков в одно и то же время. Об аудиомикшере Windows можно почитать тут.
  9. Автонастройка прокси, используя файлы PAC (Proxy Auto-Configuration) и протокол WPAD (Web Proxy Auto-Discovery Protocol), что позволит системе проще подключаться к локальным сетям, где используются прокси-серверы.
  10. Удаленное управление Windows (Windows Remote Management, WinRM) – используется для удаленного администрирования систем под управлением Windows, концептуально немного похож на SSH.
  11. Дальнейшая интеграция поддержки протокола SMB (Server Message Block, в народе известно как "Сетевое окружение"). Несмотря на то, что уже существует Samba, ее код в некоторых местах специфичен для Unix-подобных операционных систем. Эта возможность очень востребована среди новых пользователей ReactOS (к примеру, передача файлов из хоста в гостевую ОС в VirtualBox завязана на поддержке сетевого окружения), и ее реализация приведет к общему улучшению поддержки сетевого окружения Windows. В качестве стартовой точки участнику предлагается начать с проекта Samba-TNG. Спецификация протокола SMB доступна по ссылке.
  12. Службы терминалов (Terminal Services). Один из ключевых компонентов для работы протокола для подключений к удаленному рабочему столу RDP. Необходимо доработать имеющуюся реализацию (об имеющейся функциональности см. вики), дополнив ее поддержкой входящих подключений удаленного рабочего стола.
  13. Расширение наборов тестов ядра ReactOS – покрытие тестами некоторых частей ядра, таких как менеджер кэша ядра, Plug and Play и другие. Основная цель – в экстенсивном тестировании Native API (немного подробнее о нём можно посмотреть тут: http://hex.pp.ua/native-api.php). В качестве эталонных результатов необходимо рассматривать поведение ядра Windows.
  14. Написание тестов для подсистемы Win32. Ядро NT поддерживает различные интерфейсы между User-mode-программами и функциями ядра. Такие интерфейсы называются подсистемами, и в теории (и на практике) можно написать такую подсистему, которая может реализовать набор API другой операционной системы. В рамках этой задачи вам надо будет написать различные тесты для взаимодействия ядра и подсистемы Win32. В качестве эталонной реализации необходимо рассматривать поведение ядра и подсистемы Win32 самой Windows. Необязательным заданием может быть запуск другой подсистемы (такой, как OS/2, или Interix) внутри ReactOS. Подробнее об подсистемах ядра NT можно посмотреть на английской википедии и в книжке Марка Руссиновича "Windows Internals".
  15. API автоматизации UI, связанное со специальными возможностями (Accessibility) Windows. Сейчас этот программный интерфейс не реализован в ReactOS, хотя он является важной частью ОС Windows, т.к. на нем основаны различные инструменты для людей с ограниченными возможностями (такие, как экранный диктор, к примеру). После реализации этого API участнику предлагается проверить его работу с помощью открытой утилиты NVDA (Non Video Desktop Access), помогающей слепым людям или людям с нарушениями зрения пользоваться компьютером. Также после реализации этого API оно будет предложено для слияния в проект Wine.
  16. Расширение оболочки для поиска. В рамках этой задачи необходимо написать Shell Extension для Проводника ReactOS, которое будет искать файлы, т.к. сейчас пока такое расширение еще не реализовано. Также это расширение должно предоставлять совместимые API для других поставщиков поиска, как это делает Windows. О расширениях оболочки можно почитать здесь, о расширениях, которые расширяют поиск – здесь.
  17. Поддержка паравиртуализации. Для улучшения опыта взаимодействия с ReactOS и повышения производительности предлагается реализовать некоторый набор API для поддержки различных гипервизоворов. В рамках GSoC предлагается выбрать одно из возможных направлений паравиртуализации:
    • Заставить работать открытые драйверы гипервизора Xen;
    • Реализовать набор драйверов, реализующих подмножество API гипервизора HyperV (такие улучшения также называются "Enlightenments";
    • Улучшить ядро, чтобы использовать VMI (virtual machine interface), интерфейс паравиртуализации, предложенный компанией VMWare;
    • Тестировать и интегрировать драйвера VirtIO, или гостевые дополнения VirtualBox, или open-vm-tools в ReactOS.
  18. Поддержка возможностей корзины из Windows Vista (NT v6.0+). В Windows Vista расширение оболочки, отвечающее за корзину, было расширено, и его внутренний интерфейс изменился. Предлагается в рамках проекта задокументировать изменения API и реализовать его в ReactOS. По оболочке Windows можно почитать здесь.
  19. Реализация компонента MSHTML поверх WebKit. В рамках этого проекта необходимо сделать адаптер между API WebKit, и API компонента MSHTML, который позволяет отображать HTML-страницы. Об интерфейсе MSHTML можно почитать тут, об интерфейсе WebKit – тут.
  20. Улучшить реализацию реестра. Для улучшения реализации предлагаются два возможных направления:
    • Улучшить отказоустойчивость реализации, чтобы при сбое реестр не повреждался;
    • Улучшить бинарную совместимость с реестром Windows. Сейчас в реализации реестра не реализованы до конца дескрипторы безопасности. Их реализация поможет интероперабельности с Windows и улучшит общую надежность системы;
      Детали внутреннего строения реестра можно найти по этой ссылке.
  21. Куст реестра, связанный с данными счетчиков производительности. Немногие знают, что в реестре Windows есть специальный куст, называемый HKEY_PERFORMANCE_DATA. Этот куст содержит множество различных счетчиков производительности, но работать с ними бывает довольно неудобно. В ReactOS пока отсутствует этот куст, и его реализация поможет многим приложениям (в том числе и от Microsoft) запускаться. Подробнее о том, как использовать счетчики производительности можно здесь.
  22. Консоль управления. Именно через неё работают почти все графические утилиты администрирования в Windows. В ReactOS есть зачаточная поддержка оснасток консоли управления, и в рамках этой задачи необходимо улучшить эту поддержку. Подробнее о консоли управления можно почитать тут.
  23. Поддержка файлов PDB в реализации библиотеки dbghelp. Эти файлы содержат отладочную информацию для приложения, а dbghelp содержит в себе API для работы с такими файлами. Поддержка этих файлов в ReactOS позволит отлаживать компоненты режима пользователя в таких утилитах, как WinDBG, Process Explorer, и других. О dbghelp можно почитать подробнее тут.
  24. Кроссплатформенная реализация отладчика уровня ядра (Kernel Debugger, KD). Утилиты для отладки Windows (и ReactOS также) от Microsoft являются проприетарными и работают только под Windows. Реализация таких кроссплатформенных утилит позволит отлаживать ReactOS в режиме ядра под другой хостовой ОС, а также позволит отказаться от более простого отладочного протокола KDBG, который поддерживается в сборках от компилятора GCC.
  25. Поддержка других портов для отладки ReactOS. Сейчас ReactOS поддерживает отладку через последовательный порт (COM-порт, RS-232), хотя многие компьютеры уже не имеют такого порта. Поддержка современных портов (типа 1394, Ethernet или USB) поможет отлаживать ReactOS на новых компьютерах, не используя на них режим режим отладки Screen, при котором все выводится на монитор компьютера с ReactOS. Также в рамках этой задачи в качестве альтернативы предлагается исследовать и реализовать недокументированный протокол отладки KDVM, поддерживаемый Hyper-V и другими гипервизорами.
  26. Поддержка отчетов об ошибках. Когда Windows падает, она записывает свое состояние в дамп памяти, и потом такой дамп можно проанализировать в отладчике. Поддержка дампов памяти в ReactOS упростит отладку и отправку отчетов об ошибках разработчикам. Подробнее о дампах памяти можно почитать тут.
  27. Поддержка нескольких мониторов. Сейчас в ReactOS есть поддержка перечисления мониторов, благодаря реализованному API HwVidGetVideoChildDescriptor в драйвере videoprt.sys. Этот драйвер дальше передает информацию драйверу подсистемы Win32 (win32k.sys), и уже именно win32k.sys решает, как необходимо отображать картинку на втором мониторе – дублировать, или расширить рабочий стол, или не использовать монитор. Реализация такого API позволит использовать ReactOS на нескольких мониторах, что бывает очень полезно для разработчиков, дизайнеров и простых пользователей. Подробнее можно почитать на MSDN.
  28. Поддержка драйверов печати режима пользователя. В рамках архитектуры Windows существует множество интерфейсов для драйверов принтера (PostScript, Plotter, GDI/win32k). В рамках этой задачи необходимо реализовать базовую поддержку для драйверов печати пользовательского режима, использующих интерфейсы GDI. Подробнее о таких интерфейсах можно почитать тут.
  29. Многопользовательская поддержка нескольких сессий. В современной Windows эта служба называется "Служба удаленного рабочего стола" (Remote Desktop Services) и реализация поддержки множественных сессий позволит каждому пользователю работать в своём изолированном окружении, запуск от другого пользователя (с созданием отдельной сессии) и улучшит совместимость с возможностями удаленной работы с Windows. Почитать про службу терминалов можно тут.
  30. Web-интерфейс для разработчиков. После перехода на git некоторые старые утилиты непрерывной интергации (такие, как buildbot, testman) стали хуже работать друг с другом. Поэтому предлагается реализовать улучшенную версию Web-интерфейса для разработчиков, который позволит показывать коммиты, билды, пулл-реквесты и пр. и сможет связывать их друг с другом, в том числе с использованием фильтров поиска. Это поможет ориентироваться в кодовой базе новым и старым разработчикам. Идеи по Web-интерфейсу детально расписаны в соответствующем разделе ReactOS wiki.

Как видите, идей для Google Summer of Code полно. Не упустите свой шанс поработать в интересном проекте с первоклассными наставниками и менторами в самых разных областях. Выбирайте любую вам понравившуюся идею (или предложите свою), регистрируйтесь на сайте и отправляйте свою заявку!

P.S. Спасибо всем, кто дочитал до этого момента. Огромная просьба писать об ошибках (грамматических, пунктуационных, синтаксических, речевых, и, что самое главное, – фактических) в личку мне, или в наш Telegram-чат.

Let's block ads! (Why?)

Наш путь ресайза изображений

image

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

Проблема


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

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

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

В качестве примера, как делать не нужно можно посмотреть на главную страницу такого известного сайта, как github.com. При весе страницы 2 Мб, 1.2 из них занимают бесполезные картинки, которые можно оптимизировать и не загружать.

image

Второй пример — наш Хабр. Скриншот приводить не буду, что бы не растягивать статью, результаты по ссылке. На хабре картинкам изменяют разрешение на нужное, но не оптимизируют их. Это позволило бы сократить их размер на 650 Кб (50%).

Распространенные решения


Все, что будет сказано далее относится к JPEG и PNG изображениям, т.к. это наиболее популярные форматы в интернете.

Вбив в google что-то вроде «image resize backend» вы увидите, что в половине случаев предлагается использовать Nginx, другая часть— это различные самописные сервисы, чаще всего Node.js.

Из nginx, а точнее из libgd, которая используется в модуле nginx’а мы смогли выжать на тестовой картинке 63 RPS, что неплохо, но хотелось бы быстрее и больше гибкости. Graphicsmagick тоже не подходит, т.к. его скорость работы слишком низкая. К тому же оба эти решения выдают не оптимизированные изображения. Большинство других решений, например на Node предлагают использовать Sharp для ресайза, MozJPEG для оптимизации JPEG изображений и pngquant для оптимизации PNG.

Мы и сами достаточно долгое время пользовались самописной связкой из Nod’ы, Libvips и MozJPEG c pngquant, но в один из дней задались вопросом— «А можно ли сделать ресайз быстрее и менее требовательным к ресурсам?».

Спойлер: можно. ;)

Теперь хорошо бы выяснить, как можно ускорить наше приложение. Изучив код приложения мы выяснили, что imagemin, который использовался для оптимизации, а в частности его плагины MozJPEG и pngquant при работе дергают одноименные утилиты через os.Exec. Будем это дело однозначно выпиливать и использовать только биндинги к Cи'шным либам. Для ресайза использовался модуль Sharp, который представляет собой биндинг к С библиотеке Libvips.

Наша реализация


Гуглеж показал, что Libvips по прежнему лидер по скорости и конкурировать с ним может только OpenCV. Значит будем использовать Libvips и в нашей реализации, это уже проверенное решение и он имеет готовый биндинг для Go. Пора попробовать написать прототип и посмотреть что из этого выйдет.

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

Быстро написали прототип, протестировали и поняли, что несмотря на большее, чем в Sharp, количество внутренних крутилок, Libvips по-прежнему выдает на выход не оптимизированные изображения. С этим надо что-то делать. Опять обращаемся ко всемогущему гуглу и узнаем, что лучший вариант это по-прежнему MozJPEG. Тут начинают закрадываться сомнения, что мы сейчас напишем то же самое, что было на Node, только на Go. Но внимательно почитав описание MoZJPEG узнаем, что она является форком libjpeg-turbo и совместима с ней.

Выглядит очень многообещающе. Дело за малым — собрать свою версию Libvips, в которой jpeg-turbo заменен на версию от Mozila. Для сборки мы выбрали Alpine Linux, т.к. приложение все равно планировалось публиковать с помощью Докера и Alpine имеет очень приятный формат конфига пакета, очень похожий на используемый в Arch Linux.

Оптимизация картинки уменьшила ее размер в 4 раза без видимой потери качества.
Оригинальный JPEG
351x527
79 Кб
Оптимизированный
351x527
17 Кб
greece_origin greece_optimized

Собрали, протестировали. Теперь Libvips сразу при ресайзе выдает оптимизированную версию. То есть в Node версии версии мы сначала делали ресайз, а потом еще раз пропускали картинку через decoder-encoder. Теперь мы только делаем ресайз.

С JPEG разобрались, а что делать с png. Для решения этой задачи была найдена библиотека libpngquant. Она не очень популярная, несмотря на то, что консольная утилита pngquant, которая базируется на ней, используется во многих решениях. Так же к ней был найден биндинг на Go, немного заброшенный и с утечкой памяти, пришлось его форкнуть починить, дополнить документацией и всем остальным, что подобает приличному проекту. Libpngquant мы тоже собрали в виде Alpine пакета для простой установки.

Благодаря тому, что теперь изображение не требуется сохранять в файл для обработки c помощью pngquant мы можем немного оптимизировать процесс. Например не сжимать картинку при ресайзе в Libvips, а только после обработки в pngquant. Это позволит сохранить немного драгоценного процессорного времени. Надо ли говорить, что мы так же очень экономим благодаря тому, что вызов C библиотеки гораздо быстрее запуска консольной утилиты.

Разница в размере в 3 раза, но возможно появление артефактов (зависит от картинки).
Оригинальный PNG
450x300
200 Кб
Оптимизированный
450x300
61 Кб
bird_origin bird_optimized

Пример не очень удачной картинки, на которой появляются артефакты при сжатии.
Оригинальный PNG
351x527
270 Кб
Оптимизированный
351x527
40 Кб
greece_origin greece_optimized

После того, как прототип был написан, протестирован на моем пк и выдавал приличные 25 RPS на мобильном двух ядерном проце, сжирая весь CPU, захотелось увидеть сколько можно выжать из него на нормальном железе. Запускаем код на шести ядерной машине, натравливаем Jmeter и WTF??? Получаем 30 RPS. Пробуем разобраться что за фигня.

Libvips сам реализует многопоточность, то есть нам нужно только инициализировать библиотеку и в дальнейшем мы можем безопасно обращаться к ней из любого потока. Но у нас почему-то Libvips работает в 1 поток, что ограничивает нас одним ядром. Еще 1 ядро занимает pngquant. Итого получается, что наша супер быстрая ресайзилка отлично работает только на ноутбуке разработчика, а на остальных машинах не может утилизировать все ресурсы. ;)

Смотрим исходники биндинга к Libvips и видим, что там CONCURRENCY по умолчанию выставляется в 1 из-за возникавших в Libvips гонок данных. Но судя по баг трекеру эти проблемы давно исправлены. Выставили CONCURRENCY обратно, тестируем. Ничего не поменялось, Libvips по-прежнему отказывался ресайзить изображения многопоточно. Все попытки побороть эту проблему потерпели неудачу и сказать по правде, я запарился ее решать и решил обойти проблему на другом уровне.

Все более или менее современные ядра Linux (3.9+ и 2.6.32-417+ в CentOS 6) поддерживают опцию SO_REUSE, которая позволяет использовать один порт нескольким экземплярам приложения. Данный подход удобнее, чем балансировка средствами стороннего ПО, такого как HAProxy, т.к. не требует конфигурации и позволяет быстро добавлять и убирать инстансы.
Поэтому мы использовали SO_REUSE и опцию "--scale" в Docker compose, которая позволяет указать количество запускаемых экземпляров.

Время мерить


Пришло время оценить результат наших трудов.

Конфигурация:

  • CPU: Intel Xeon E5-1650 v3 @ 3.50GHz 6 cores (12 vCPU)
  • RAM: 64 Gb (используется около 1-2 Gb)
  • Кол-во воркеров: 12

Результаты:

Больше бенчмарков (правда без сравнения с Node версией) на wiki странице.
Как видно переделывали ресайз мы не напрасно, увеличение скорости составило от 30 до 400% (в некоторых случаях). Если требуется ресайзить еще быстрее, то можно покрутить ручки «speed» и «quality» в libimagequant. Они позволят дополнительно сократить размер или увеличить скорость кодирования ценой потери качества изображения.

Код проекта на GitHub.
Биндинг Go к libimagequant так же на GitHub.

Let's block ads! (Why?)

SIP <-> Telegram: sip.tg

Уверен, многие задавались вопросом: вот есть Телеграм, год назад он обзавёлся звонками, у него открытое API, но почему-то до сих пор никто не сделал связку с протоколом SIP. Ведь это даёт неограниченные возможности: от замены SIP-звонилок до организации ещё одного канала коммуникации с пользователями Вашего бизнеса. Сегодня я расскажу историю появления первого такого шлюза, который теперь доступен абсолютно всем!
Когда-то давно я попал на ресурс Talk37 (ныне это ruVoIP.net) и мне он очень понравился. Несмотря на то, что в последнее время он приобрёл дурную славу благодаря стараниям любителей даркнета, активное сообщество проекта — это всё-таки люди, которые болеют за него душой. Я отдельно благодарю его создателя Дмитрия Серова за отзывчивость и упорный труд.

ruVoIP.net — это бесплатная виртуальная АТС, причём её функционалу позавидовала бы почти любая коммерческая АТС. Каждый зарегистрированный в ней пользователь получает при регистрации свой внутренний номер, на который можно дозвониться множеством способов. И вот, 24 сентября 2017 года, первый прототип шлюза увидел свет: теперь стало возможно дозвониться до пользователей ruVoIP.net через Телеграм! Вернее… что значит возможно? Мы создали отдельного пользователя Телеграм, который научился принимать звонки и приветствовать звонящих с просьбой ввести внутренний номер. Но куда ввести? Как ввести? Вообщем, что-то заработало и вызвало у всех активных участников огромную радость сродни запуску ракеты в космос. И не важно, что оно часто падало, не было никакого DTMF, а звук напоминал старый КВ-приёмник.

Время шло, шлюз улучшался, а ruVoIP.net вышел в ТОП поисковых систем по запросу «sip телеграм». Мне начали поступать запросы от разных людей, которые хотят сделать такой же шлюз; были в том числе и коммерческие предложения. К сожалению, архитектура прототипа не позволяла его расширение и была слишком сложна для использования конечными пользователями, поэтому я был вынужден всем отказывать с обещаниями что-то сделать. Я очень хотел что-то отрелизить к новому году, но мне это оказалось не под силу.

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


Я не могу утверждать, что удалось исправить абсолютно все баги. В процессе работы я активно общался с желающими сделать такой же шлюз и у меня выстраивалась картина того что нужно пользователям. С другой же стороны, каждая функция очень сильно зависит от возможностей самого Телеграм. Далеко не всё удалось сделать удобно (а что-то не удалось сделать вовсе) из-за ограничений платформы.

В результате получилось два основных режима: Операторы и Шлюзы. Настройки обоих режимов производятся через бота @siptg_bot.

Операторы


Это режим замены SIP Softphone мессенджером Телеграм. Если у Вас уже есть аккаунт у какого-то SIP-провайдера, но Вы не хотите устанавливать (на телефон) очередной Softphone, который занимает память, расходует батарею, требует тонкой настройки кодеков и плохо подстраивается под качество канала передачи данных, то этот режим для Вас. Разрешается создавать до 20 независимых подключений к SIP-провайдерам с одного аккаунта Телеграм (ограничение искусственное, возможно позже будет скорректировано). Звонки для каждого провайдера работают в обе стороны: возможны как входящие, так и исходящие звонки. Редактирование аккаунта выглядит примерно так:

Кнопки содержат либо текущее значение опции, либо её название, если значение не задано (исключение составляет Пароль). На каждой странице настроек есть справка, которая вызывается по нажатию кнопки Помощь.

Как принимать звонки?


Поскольку боты в Телеграм не умеют звонить, у сервиса имеется отдельный аккаунт @siptg, который выполняет эту функцию. При входящем звонке номер и имя звонящего абонента берутся из SIP-заголовков и приходят в виде отдельного сообщения; вместе с сообщением также приходит DTMF-клавиатура:

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

Как звонить?


Здесь мы снова сталкиваемся с ограничениями Телеграм: нельзя набрать произвольный номер телефона, можно только позвонить другому пользователю. Поэтому для звонка на произвольный номер предусмотрено два способа:
  • отправить номер телефона в виде сообщения;
  • приложить к сообщению контакт, содержащий номер телефона.

Для удобства, оба способа можно применять как к боту (@siptg_bot), так и к аккаунту для звонков (@siptg). Если настроено несколько аккаунтов операторов, то появится запрос о выборе оператора для звонка:

Далее поступает входящий звонок в Телеграм и, после поднятия трубки, начинается соединение с набранным номером.

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

Шлюзы


Наиболее интересным режимом работы является режим Шлюзы. Этот режим позволяет использовать аккаунт Телеграм через SIP: принимать звонки и звонить со своего аккаунта Телеграм другим пользователям. Например, Вы можете создать для своего бизнеса специальный аккаунт Телеграм, сообщить его своим клиентам в качестве контактного и принимать звонки, интегрируя их в общую очередь виртуальной АТС. А поскольку звонки возможны в обе стороны, у Ваших операторов также будет возможность перезвонить клиенту при необходимости; при этом клиент увидит звонок от имени Вашей компании.

Для чего нужна отдельная сессия Телеграм?


Мессенджер Телеграм разрешает использование одного аккаунта с разных утройств, при этом на каждом устройстве создаётся отдельная сессия. Поскольку при использовании sip.tg в режиме шлюза интеграция с SIP выполняется от имени Вашего аккаунта, необходимо создать новую сессию Телеграм. Создание сессии доступно через настройки бота: в разделе Шлюзы нужно нажать кнопку Войти и следовать инструкциям.

Примечание. API Телеграм не позволяет получить ограниченный доступ к Вашему аккаунту, в связи с чем, создавая новую сессию, Вы даёте своё согласие на передачу полных прав над своим аккаунтом Телеграм сервису sip.tg. Администрация сервиса прилагает все усилия, чтобы ограничить использование Вашего аккаунта Телеграм третьими лицами, не передаёт информацию о Вашей сессии Телеграм третьим лицам и не использует Ваш аккаунт Телеграм для целей, отличных от заявленных, однако не несёт ответственности за возможный ущерб, который может возникнуть в результате хищения данной информации третьими лицами путём взлома, либо физического доступа к оборудованию сервиса.

Как подключить Телеграм к виртуальной АТС?


После создания сессии, можно настроить подключение своего аккаунта Телеграм к виртуальной АТС. Для этого нужно создать новое SIP-подключение в разделе Шлюзы настроек бота:

Имеется два способа подключения: входящее (кнопка Новый вх.: Вы настраиваете виртуальную АТС для подключения к серверам sip.tg) и исходящее (кнопка Новый исх.: сервера sip.tg подключаются к виртуальной АТС). Можно создать несколько как входящих, так и исходящих подключений и использовать их независимо на разных устройствах (при этом, общее число подключений не должно превышать 20). Флажки DTMF вх. и DTMF исх. позволяют управлять отображением клавиатуры донабора внутреннего номера и отображением номера звонящего абонента при входящем звонке.

Как звонить и принимать звонки?


Вне зависимости от выбранного способа подключения к виртуальной АТС, входящие и исходящие звонки производятся одинаково: при входящем звонке виртуальной АТС передаётся номер и имя звонящего пользователя Телеграм, а для исходящего звонка достаточно набрать номер пользователя Телеграм. В качестве номера пользователя Телеграм можно использовать одно из следующих значений:
  • реальный номер телефона пользователя, привязанный к его аккаунту;
  • username пользователя;
  • *ID пользователя.

Здесь также отмечу следующие особенности:
  1. При входящем звонке, если о пользователе известна только часть данных, в качестве номера указываются первое из доступных значений: номер телефона, username или ID. Т.е., если номер телефона пользователя не известен, но пользователь указал username, то в качестве номера будет возвращён username. Если у пользователя не известен ни номер телефона, ни установлено username, то в качестве номера будет указан *ID.
  2. Звонить пользователю по его ID можно только в том случае, если ранее было прямое или косвенное с ним взаимодействие: обмен сообщениями, предыдущие звонки и т.п.

Аккаунт для звонков @siptg зарегистрирован на реальный номер телефона. Почему бы его не использовать для чего-нибудь ещё? Первое что приходит в голову — это организовать шлюз доступа в Телеграм из ТфОП. Да, я над этим уже думал, но пока его делать не стал. А сделал следующее.

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

Для переадресации входящих звонков в Телеграм нужно выполнить USSD-запрос **21*+79581006789# перед поездкой. После поездки выполните команду ##21# для отключения переадресации.

Примечания:

  1. Стоимость услуги переадресации оплачивается согласно Вашему тарифному плану как звонок на мобильный номер города Москвы.
  2. Номер телефона, на который зарегистрирован аккаунт Телеграм, должен совпадать с номером телефона, на котором устанавливается переадресация.
  3. Корректная работа данной функции зависит от Вашего оператора связи. В частности, работа с нероссийскими операторами связи не гарантируется.

Говоря откровенно, неопределённость в отношении Телеграм в России как была, так и остаётся. Кроме того, судьба проекта целиком зависит и от команды Телеграм. Я не знаю какой будет реакция команды, поскольку, имея неудачный опыт обращения в техническую поддержку ранее, я не стал обращаться вновь. В случае одобрения можно будет существенно улучшить текущую реализацию и я вижу от этого абсолютную пользу для всех: проект открывает новые возможности Телеграм как платформы, что, в конечном счёте, должно привлечь и новую аудиторию.

Также у меня есть чёткое понимание того, что нужно делать дальше, я хорошо знаю узкие места, которыми нужно будет заняться. Я также понимаю, что в результате хабраэффекта всё может сломаться, поскольку я не выделил на старте больших мощностей, но надеюсь, что заложенная возможность масштабирования позволит сократить время восстановления. Тем не менее, если всё будет действительно плохо — заходите дня через 2-3 :).

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

В заключении оставлю ссылки на все ресурсы проекта:

Let's block ads! (Why?)

Операционные системы с нуля; Уровень 1 (младшая половина)

[Перевод] Срыв масштабной хакерской атаки на пользователей Windows в России

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

Использованные в атаке трояны были новыми разновидностями Dofoil (также известного как Smoke Loader). Они пытались заразить устройства вредоносной программой для майнинга криптовалют. В следующие 12 часов было зарегистрировано более 400 000 случаев атаки, из которых 73 % приходится на Россию, 18 % — на Турцию и 4 % — на Украину.

Географическое распределение компонентов атаки Dofoil.

В самом начале атаки с помощью поведенческого мониторинга антивирус Windows Defender выявил необычный механизм стойкости и устойчивости атаки. Антивирус сразу же отправил соответствующий сигнал в нашу облачную службу защиты.

  1. Через несколько миллисекунд многочисленные облачные модели машинного обучения на основе метаданных уже блокировали обнаруженную угрозу при ее появлении.
  2. Еще через пару секунд наши модели машинного обучения на основе анализа образцов и детонации подтвердили, что программа обоснованно отнесена к вредоносным. Через несколько минут подключились модели на основе детонации и дополнительно подтвердили выводы предыдущих механизмов.
  3. Через несколько минут после начала атаки служба обнаружения аномалий уведомила наших специалистов о новой потенциальной вспышке заражения.
  4. Проведя анализ, группа Microsoft по реагированию на инциденты присвоила угрозам этой новой волны имя, соответствующее классификации семейств вредоносных программ. Таким образом, в самом начале компании пользователи получали предупреждение о блокировке этой угрозы, в котором она фигурировала под названиями, присвоенными системами машинного обучения (например, Fuery, Fuerboos, Cloxer или Azden). Те, у кого угроза была заблокирована позже, видели ее под именем семейства вредоносного ПО, к которому она принадлежит, то есть Dofoil или Coinminer.

Пользователи Windows 10, Windows 8.1 и Windows 7 с антивирусной программой Windows Defender или Microsoft Security Essentials полностью защищены от этой вспышки зловреда.

Многоуровневая система защиты на основе машинного обучения в антивирусной программе Защитника Windows

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

Внедрение кода и майнинг криптовалюты


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

Отправной точкой кампании Dofoil, которую мы обнаружили 6 марта, стал троян, выполняющий замену процесса explorer.exe. Замена процесса — это метод внедрения кода, при котором создается новый экземпляр подлинного процесса (в данном случае c:\windows\syswow64\explorer.exe) и его код заменяется вредоносным.

Обнаружение замены процесса службой Windows Defender ATP (SHA-256: d191ee5b20ec95fe65d6708cbb01a6ce72374b309c9bfb7462206a0c7e039f4d, обнаружен антивирусом Windows Defender под именем TrojanDownloader:Win32/Dofoil.AB)

Фиктивный процесс explorer.exe затем создает второй экземпляр вредоносного кода, который запускает майнинговую программу, маскирующуюся под безопасный двоичный файл Windows, wuauclt.exe.

Обнаружение вредоносного ПО для майнинга криптовалюты службой Widows Defender ATP (SHA-256: 2b83c69cf32c5f8f43ec2895ec9ac730bf73e1b2f37e44a3cf8ce814fb51f120, обнаружен антивирусом Windows Defender под именем Trojan:Win32/CoinMiner.D)

Хотя вредоносная программа использует имя надежного двоичного файла Windows, она запускается из другого расположения. Командная строка выглядит не так, как для исходного двоичного файла. Кроме того, подозрения вызывает сетевой трафик от этого двоичного файла.

Дерево процессов оповещения Windows Defender ATP: аномальный обмен данными по IP-протоколу

Подозрительная сетевая активность, отображаемая в службе ATP в Защитнике Windows

Дерево процессов оповещения Windows Defender ATP: фиктивный процесс explorer.exe, создающий подозрительные подключения

Dofoil использует специализированное приложение для майнинга. Судя по коду, это приложение поддерживает NiceHash, то есть может вести майнинг разных криптовалют. Проанализированные нами образцы использовались для майнинга криптовалюты Electroneum.

Устойчивость


Устойчивость — важная особенность вредоносного майнингового ПО. Такие программы используют разнообразные приемы, чтобы оставаться незамеченными в течение длительного времени и вести майнинг криптовалюты с помощью украденных вычислительных ресурсов.

Чтобы уклониться от обнаружения, Dofoil изменяет реестр. Фиктивный процесс explorer.exe создает копию исходного вредоносного ПО в папке Roaming AppData и переименовывает его в файл ditereah.exe. Затем он создает раздел реестра или изменяет существующий, чтобы указать на недавно созданную копию вредоносного ПО. В проанализированном нами образце был изменен раздел OneDrive Run.


Дерево процессов оповещения Windows Defender ATP: создание нового вредоносного процесса (SHA-256: d191ee5b20ec95fe65d6708cbb01a6ce72374b309c9bfb7462206a0c7e039f4d) и изменение реестра

Обмен информацией с серверами управления и контроля


Dofoil — устойчивое семейство загрузчиков-троянов. Они подключаются к серверам управления и контроля (C&C), с которых получают команды для загрузки и установки вредоносного ПО. В кампании 6 марта для обмена информацией с серверами управления и контроля трояны Dofoil использовали децентрализованную сетевую инфраструктуру Namecoin.

Фиктивный процесс explorer.exe записывает и запускает еще один двоичный файл, D1C6.tmp.exe (SHA256: 5f3efdc65551edb0122ab2c40738c48b677b1058f7dfcdb86b05af42a2d8299c), в папке Temp. Этот файл затем создает и запускает свою копию под именем lyk.exe. Запущенный файл lyk.exe подключается к IP-адресам, которые действуют как прокси-серверы DNS для сети Namecoin. Потом файл пытается связаться с сервером управления и контроля vinik.bit в инфраструктуре NameCoin. Сервер управления и контроля дает вредоносному ПО команду подключиться к IP-адресу или отключиться от него, загрузить файл по определенной ссылке, запустить конкретный файл или прервать его выполнение либо перейти в спящий режим на некоторое время.

Дерево процессов оповещения Windows Defender ATP: создание временного файла D1C6.tmp.exe (SHA256: 5f3efdc65551edb0122ab2c40738c48b677b1058f7dfcdb86b05af42a2d8299c)

Дерево процессов оповещения в Windows Defender ATP: подключение файла lyk.exe к IP-адресам

Постоянная защита в Windows 10


По мере роста стоимости криптовалют группы киберпреступников совершают все больше атак с целью проникновения в сети и незаметного майнинга.

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

Как видно на примере этого случая, служба Windows Defender Advanced Threat Protection (WDATP) сигнализирует о вредоносном поведении, связанном с установкой ПО, внедрением кода, механизмами обеспечения устойчивости и операциями для майнинга криптовалюты. Службы безопасности могут использовать обширные библиотеки WDATP, чтобы обнаруживать аномальные действия в сети и принимать необходимые меры. WDATP также включает средства защиты из антивирусной программы Windows Defender Antivirus, Windows Defender Exploit Guard и Windows Defender Application Guard, упрощая управление безопасностью.

Let's block ads! (Why?)

пятница, 16 марта 2018 г.

Конференция DEFCON 16. «Игры с баркодами». Феликс Линднер, глава Recurity Labs

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

Мой доклад состоит из следующих пунктов:

  • быстрое введение в суть баркодов;
  • кодировка и чтение баркодов;
  • сканеры;
  • простые трюки с баркодами;
  • скрытые атаки;
  • чтение выбранных образцов;
  • нерешённые проблемы и вызовы;
  • принципы безопасного использования баркода.

Баркод был придуман в 1948 году Сильвером и Вудландом из Технологического института Дрексель. Первая попытка использования баркода была предпринята в 1950 году – Ассоциация Американских Железных дорог решила использовать его для идентификации вагонов и потребовалось свыше 17 лет для того, чтоб пометить 95% составов и после система так и не заработала. В это время люди считали баркоды бесполезными.

Но уже в 1966 году Национальная Ассоциация продуктов питания предложила наносить баркоды на продукты, чтобы ускорить процесс их идентификации на кассе и заработать побольше денег. В 1969 году эта же Ассоциация создала промышленный стандарт Универсального Продуктового Идентификационного кода (позже UPC), который стал использоваться с 1970 года.

В 1981 году Министерство обороны США потребовало, чтобы все продукты, поставляемые для армии, маркировались Code 39 – штрихкодом, позволяющим кодировать большие латинские буквы, цифры и символы и Вы далее увидите, почему это было плохой идеей.

Штрих-коды делятся на одномерные и двумерные. Вот так выглядят одномерные штрих-коды разного стандарта:

Некоторые из них содержат только цифры, некоторые и цифры, и буквы. Существует несколько стандартов изображения информации на штрих-коде.

Они различаются интервалом между полосками, разрешением для печати и так далее. На следующей картинке Вы видите особый штрих-код, который часто встречается на почтовых конвертах. Это код Postnet, вместо него в Великобритании используют похожий код BPO 4. В них содержится маршрутная информация для писем.

Вот так выглядят двухмерные коды – скажите мне, какой из этих кодов напечатан на Ваших бейджах? Правильно, он называется Data Matrix. Он отличается от других своеобразным крестом, который делит этикетку на 4 равных части. В них закодированы 4 блока разной информации.

MAXICOD и Aztec code редко используются в США, я однажды видел MAXICOD на посылке от Cisco. PDF417 широко распространён в Европе, например, для билетных систем.

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

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

Большинство сканеров подсоединяются к компьютеру через USB и содержат модуль расшифровки внутри себя. Поэтому Вам не нужно использовать специальное ПО для сканера.

Также существует разное программное обеспечение для создания штрих-кодов. С помощью бесплатных GNU программ можно создавать только одномерные штрих-коды, причём в неограниченном количестве. Можно использовать различные онлайн генераторы баркода, которые создают его с помощью PHP-скриптов, а число коммерческих программ бесконечно. Писать генераторы штрих-кодов не трудно, обычно нужно заплатить только за скрипты, или спецификации, большинство из которых стоят меньше $20. Например, я покупал спецификации для Aztec code, чтобы написать свою собственную программу.

Баркоды в основном используют для трёх целей, и пусть меня немцы простят, но я не могу подать это в другом свете, применив другие слова для описания:

  • для идентификации, в качестве этикетки;
  • для быстрой передачи данных с визуального носителя (визитной карточки) в физическое устройство, например, в смартфон;
  • для всяческого хулиганства, например для обмена зашифрованными ругательствами, я называю это GGU, Ganz Grober Unfug, что в переводе с немецкого означает «очень грубая выходка».

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

Как Вам поступить, чтобы сконфигурировать сканер? Нужно зайти на страницу продавца Вашей модели сканера, или на сайт производителя, или на сайт технической поддержки или, в конце концов, позвонить им и получить таблицу конфигурации. Для того, чтобы перенастроить сканер на чтение другого кода, нужно поменять тип совместимого баркода, поменять CRLF или характер дешифровки. Большинство сканеров поддерживают клавиатурные коды, такие как «Выйти» ESC, «страница вверх» PageUp, «страница вниз» PageDown, «удаление» DEL и так далее, благодаря этому Вы можете использовать команду ESC на сканере так же, как будто нажали эту клавишу на клавиатуре компьютера. Некоторые сканеры позволяют обновить собственную прошивку с помощью чтения соответствующего штрих-кода. Потому может быть довольно просто взломать систему целого торгового центра.

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

Самым простым способом взломать штрих-код является его копирование. Вам не нужно расшифровывать код, если Вы знаете, что он Вам даёт. Для копирования понадобится хорошая цифровая камера и принтер.

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

В прошлом году в Европе, в Германии, я некоторое время жил в одном отеле в Дрездене. Так вот, на подземном паркинге отеля автомат не видит разницы между въездным и выездным талончиком. На них одинаковые штрих-коды. Вы можете бесплатно пользоваться паркингом, если скопируете такой талончик. Кроме того, у них есть бессрочные парковочные талоны, они дают Вам такой, когда Вы останавливаетесь в отеле. Мне не нужно распознавать код на таком талоне – я просто копирую его, печатаю кучу таких талончиков и раздаю их как право на бесплатную парковку в центре города, что я и сделал, и Вы можете пользоваться бесплатной парковкой вечно.

А ещё там есть автоматы, принимающие пустую тару, например, пластиковые бутылки, для последующей переработки. Сделать такой автомат было плохой идеей. Вам требуется как правило больше времени, чтоб положить бутылки по одной в приёмочный отсек, нежели уйдёт на то, чтоб выпить бутылку пива. Вы кладёте в него бутылку, она исчезает внутри и это всё происходит чрезвычайно медленно, а взамен автомат выдаёт вам ваучер со штрих-кодом. Этот ваучер можно обменять на деньги или использовать при покупке продуктов в супермаркете. Так вот, достаточно скопировать один ваучер и напечатать сотню, предъявить их на кассе и получить деньги.

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

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

Следующие 6 цифр являются командой кассовому аппарату на возврат денег, ещё 5 цифр указывают на объём или количество продуктов. Последняя цифра – это проверочный код EAN13 (контрольная сумма), он равен значению 10 минус сумма всех предыдущих цифр. В целом это позволяет вернуть до 999 евро, что весьма порядочно.

Зная это, Вы можете сгенерировать свой собственный баркод и наклеить его на нужный товар. Замечу, что в Берлине живёт множество людей, которые не очень любят работать, зато любят выпивать. Если Вы подадите им эту идею, они будут Вам очень благодарны и побегут в магазин, чтобы получить дармовые деньги.

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

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

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

Рассмотрим эту операцию на примере билета в Берлинский зоопарк. Под штрих-кодом напечатаны одни цифры, например, 3711679, а расшифровка самого кода даёт такие цифры – 49864088922304. Поэтому если Вы копируете такой билет, помните, что эти последовательности цифр должны отличаться друг от друга.

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

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

Точно таким же образом Вы можете получить доступ к сети или к данным, которых у Вас нет. Допустим, для входа в сеть используется MAC-адрес компьютера, который принадлежит другому сотруднику, или его инвентарный номер. MAC-адрес обычно нанесён на само устройство, здесь же находится серийный номер и наклейка собственника со штрих-кодом. Скопировав баркод с бейджа законного владельца, Вы можете завладеть информацией коллеги или нанести на этот баркод броадкаст МАС, который содержит только F, и положить сеть.

Какие ещё трюки можно проделывать со штрих-кодами? В Германии Вы сможете бесплатно пользоваться круглосуточной автоматической системой проката DVD-дисков Video24, которая находится, в том числе и в моём доме, без присмотра, и мне интересно было разобраться с ней. Что нужно обычному пользователю, чтобы за деньги посмотреть фильм на DVD-диске? Членскую карточку с баркодом, ПИН-код или даже биометрическую аутентификацию по отпечатку пальца. Процедура проката такова: Вы сканируете карту, вводите ПИН, выбираете фильм, выходите из сеанса, а затем смотрите фильм на компьютере или телевизоре. Так можно заказать фильм через веб-сайт.

Если Вы хотите взять фильм на физическом носителе, DVD-диске на прокат из автомата, достаточно просто отсканировать карту и забрать его. Чтобы вернуть диск, нужно снова «прокатать» карту, ввести ПИН-код и положить диск обратно в автомат. В чём тут проблема? Вам не нужно вводить пин-код.

Итак, на карте имеется баркод, обозначенный буквой и четырьмя цифрами. Буква совпадает с первой буквой фамилии клиента. Вам достаточно отсканировать этот баркод у своего знакомого, поменяв только цифры, и когда он закажет фильм по интернету, получите его Вы! Естественно, друг этот фильм не увидит, но доказать это будет невозможно, поэтому он будет вынужден оплатить просмотр. Так Вы сможете просмотреть DVD и даже получить его в автомате. На сайте ведётся учёт предзаказов, поэтому Вы можете выбрать тот диск, который никто ещё не заказал, и гарантированно его просмотреть.

Следующий трюк называется «Иньъекцирование и мультирасшифровка». Большинство сканеров штрих-кода выпускаются с заводскими настройками. Даже если настройки изменены, Вы всегда сможете их реконфигурировать. Встроенные приложения для расшифровки в большинстве случаев использует тот тип баркода, для которого были написаны, обычно EAN13 или 2о5.

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

Следующий трюк – чтение QR-кодов. Эти коды работают как гиперссылки. Предположим, у Вас есть газета. Настоящая газета, такая, которую мы, хакеры, не видим годами! Вы можете сфотографировать двухмерный баркод с её страницы. Коммерческие программные декодеры конвертируют его в HTTP ссылку, а затем программа заставляет браузер Вашего мобильного устройства открыть страницу, расположенную по этому адресу.

В действительности это очень плохая идея, и я объясню, почему.

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

Но браузер мобильного устройства, пройдя по такой ссылке, может подхватить вирусы или сторонние куки. Он автоматически, без Вашей воли, подхватывает рекламу или кое-что похуже. То есть чтение такого штрих-кода делает Ваш браузер уязвимым. В результате Вы получаете:

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

Вам это нужно? Конечно же, нет! Поэтому никогда не считывайте баркод со страниц газет, это опасно!

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

Итак, чтобы чтение баркода вызывало переполнение буфера сканера и вызвать проблемы, выбирайте большую плотность печати. Вашим любимым кодом для создания штрих-кодов должен стать Code 128, потому что он имеет полноценный 7-ми битный набор кодов ASCII и использует контрольный функциональный код FC4.

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

Рассмотрим ещё одну вещь, которая есть в Германии и которую не удалось сломать. Это станции упаковки, или Pack Station. Вы приходите сюда со своим почтовым конвертом или посылкой, и эта станция печатает Вам наклейку со штрих-кодом, которую Вы наклеиваете на своё почтовое отправление. А потом сюда приходит сотрудник UPS, который не всегда может найти дверь, чтоб забрать Вашу почту.

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

Ещё одно полезное замечание: если мы сможем разгадать предназначение баркода, то мы сможем создать свой собственный код. Это достаточно просто.

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

Что именно проверяют почтовые сканеры, какие данные они верифицируют? Это зависит от предназначения штрих-кода. Рассмотрим конверт письма, которое я получил от одной австралийской компании. Здесь есть код ASCII, состоящий из одних нулей. Стоимость письма нулевая, потому что компания не платила за его отправку, она отправляет письма бесплатно. Если я напечатаю на конверте такой же код и отправлю письмо в Австралию, то мне тоже не придётся за него платить.

Ещё два цифровых кода в кодировке 2о5 обозначают почтовую информацию и к стоимости отправления никакого отношения не имеют.

Почтовые коды в США другие. Система нанесения штрих-кодов называется «Интеллектуальная почта». Здесь используется кодировка Code 128, и её скрипты, или спецификации, можно легко найти в Интернете в виде файла в формате .doc. То есть вся информация штрих-кода легко расшифровывается.

Однако эта информация не содержит никаких указаний, что Вы являетесь получателем данного письма, то есть что оно адресовано именно Вам. Она только указывает, что отправителю письма присвоен уникальный код. И его можно найти по этому коду в течении 30-45 дней, потому что после этого срока информация о человеке, отправившем Вам письмо, удаляется из базы данных почтовой службы. Эта уникальность никак не защищена, потому что находится в общем штрих-коде. То есть цифры с 10 по 18 можно подменить, чтобы отправителя невозможно было отследить. Посмотрим на рекомендации Пентагона, в которых описано, как распознать опасные почтовые отправления, или как уберечься от бомбы в письме. Здесь написано, что к опасным письмам относятся:

  • отправления из-за границы;
  • особые пометки типа «конфиденциально», «персонально для…»;
  • адрес, написанный от руки или плохо пропечатанный;
  • нет адреса отправителя;
  • вес письма больше, чем указано;
  • видны проводки или металлическая фольга, и т.д.

При этом доверие к идентификационному номеру отправителя не подлежит сомнению. Если штрих-код письма содержит ID-отправителя, значит, с ним всё в порядке. Получается, что Вы можете отправить что угодно, кому угодно и куда угодно, причём совершенно бесплатно, если укажите в штрих-коде ID, что отправителем является Пентагон, Министерство обороны США, потому, что ему доверяют.

Рассмотрим теперь билеты на самолёт. Сейчас модным трендом является заказ билетов по Интернету и распечатка на домашнем принтере. Служба безопасности аэропорта Франкфурта-на-Майне требует, чтобы на всех билетах, заказанных через Интернет или купленных в кассе, обязательно был штрих-код. Я часто летаю, поэтому хочу показать Вам свои билеты с баркодами.

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

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

Рассмотрим багажные талончики. Они также снабжены одномерным штрих-кодом и прикрепляются к Вашему посадочному талону, с которым Вы проходите в самолёт. Баркод на талончике обеспечивает маршрутизацию, так как на нём указано, куда отправлять багаж. То есть не существует никаких доказательств, что багаж принадлежит именно Вам, кроме этого талончика, прицепленного к билету. Вы показываете его при получении и забираете свой багаж.
Рассмотрим такой сценарий. Есть человек, Абдул Бен Шузал, потенциальный террорист, только потому, что он носит одеяла. У него имеется посадочный талон. И есть второй человек, агент, Эрнст Аджент, который хочет сделать, чтоб Абдул выглядел, как настоящий террорист. Он копирует его багажный талончик, прикрепляет его к чемодану с бомбой, сдаёт чемодан в багаж, тот просвечивают рентгеном и находят бомбу. Далее понятно — Абдулу задерживают, как террориста, потому что багажный талончик принадлежит ему. Таким образом, можно сделать нелегальным любой багаж. Даже бутылку с водой. Если Вы покупаете её за пределами аэропорта за $1, Вам не разрешат пронести её на борт. Но если Вы покупаете точно такую же бутылку в аэропорте за $5 – всё в порядке, можно взять её с собой.

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

Это баркод Почты Германии, баркод платных немецких автодорог и баркод иммиграционной визы США. Они полностью зашифрованы и не содержат отдельных элементов, подверженных дешифровке.

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

  • считайте, что баркоды похожи на куки браузера: их можно перехватить, скопировать, модифицировать, потерять и т.д.
  • если Вы создаёте только одномерные штрих-коды, Вы должны быть уверены, что они содержат только случайные ID-коды, и не пытайтесь «впихнуть» туда как можно больше информации;
  • если Вы делаете двухмерные коды, пользуйтесь настоящим шифрованием – это не дорого и гарантирует, что такой код не будет отвергнут сканером при дешифровке;
  • убедитесь в работоспособности своего творения: если сканер признает Ваш баркод настоящим, Вы победили! Убедитесь, что есть связь между наклейкой и помеченной ею вещью. Не существует браузера, который мог бы это проверить.
  • никогда не доверяйте напечатанным цифрам!

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

Если Вы хотите «поиграть» с написанием штрих-кодов, или расшифровкой уже имеющихся и всем, что связано с этим, Вы можете посетить lagune.cyphertext.de/twiki.

Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас оформив заказ или порекомендовав знакомым, 30% скидка для пользователей Хабра на уникальный аналог entry-level серверов, который был придуман нами для Вас:Вся правда о VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps от $20 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).

Dell R730xd в 2 раза дешевле? Только у нас 2 х Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 ТВ от $249 в Нидерландах и США! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?

Let's block ads! (Why?)