Search
Write a publication
Pull to refresh
5
0
Андрей @cdmnk

User

Send message

Как правильно хешировать пароли в высоконагруженных сервисах. Опыт Яндекса

Reading time8 min
Views40K
Я расскажу о такой проблеме, как хеширование паролей в веб-сервисах. На первый взгляд кажется, что тут все «яснопонятно» и надо просто взять нормальный алгоритм, которых уже напридумывали много, написать чуть-чуть кода и выкатить все в продакшн. Но как обычно, когда начинаешь работать над проблемой, возникает куча подводных камней, которые надо обязательно учесть. Каких именно? Первый из них — это, пожалуй, выбор алгоритма: хоть их и много, но у каждого есть свои особенности. Второй — как выбирать параметры? Побольше и получше? Как быть с временем ответа пользователю? Сколько памяти, CPU, потоков? И третий — что делать с computational DoS? В этой статье я хочу поделиться некоторыми своими мыслями об этих трех проблемах, опытом внедрения нового алгоритма хеширования паролей в Яндексе и небольшим количеством кода.



Attacker & Defender


Прежде чем переходить к алгоритмам и построению схемы хеширования, надо вообще понять, от чего же мы защищаемся и какую роль в безопасности веб-сервиса должно играть хеширование паролей. Обычно сценарий таков, что атакующий ломает веб-сервис (или несколько веб-сервисов) через цепочку уязвимостей, получает доступ к базе данных пользователей, видит там хеши паролей, дампит базу и идет развлекаться с GPU (и, в редких случаях, с FPGA и ASIС).
Читать дальше →

Blockchain

Reading time9 min
Views122K
Данный текст будет являться новой главой для учебного пособия по защите информации кафедры радиотехники и систем управления МФТИ (ГУ). Полностью учебник доступен на github. На хабре я же планирую выкладывать новые «большие» куски, во-первых, чтобы собрать полезные комментарии и замечания, во-вторых, дать сообществу больше обзорного материала по полезным и интересным темам.

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

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

В таких системах есть три группы действующих лиц:

  • источники событий (транзакций)
  • источники блоков (фиксаторы транзакций)
  • получатели (читатели) блоков и зафиксированных транзакций.

В зависимости от реализации эти группы могут пересекаться. В системах типа BitCoin, например, все участники распределённой системы могут выполнять все три функции. Хотя за создание блоков (фиксацию транзакций) обычно отвечают выделенные вычислительные мощности, а управляющими их участников называют майнерами (см. раздел про децентрализованный blockchain далее).

Основное требование к таким журналам таково:

  • Невозможность модификации журнала: после добавления транзакции в журнал должно быть невозможно её оттуда удалить или изменить.
Читать дальше →

Как удалённо отлаживать через WinDbg не включая отладочный режим Windows

Reading time4 min
Views13K
Иногда при анализе какой-нибудь платной программы малвари случается так, что она не хочет нормально работать, если в памяти есть отладчик или включён отладочный режим Windows.
В таких ситуациях помогает использование виртуальной машины с подключённым к ней отладчиком (например, GDB или IDA). Это если программа не пытается «сломаться» и в виртуальной машине тоже.
Читать дальше →

Третий сервис лишний: Telegram и сам дружит с телефонией

Reading time1 min
Views22K


Я всегда восхищался силой коллективного разума. И укреплению моей убежденности в ней послужила недавняя история: я рассказал, как можно интегрировать телефонию с Telegram с помощью сервиса IFTTT, на что коллеги из Voximplant ответили, как это можно сделать проще, а потом господин recompileme в своем комментарии обратил внимание на то, что удобный API телеграма решает задачу без участия каких-либо третьих сервисов.




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


Читать дальше →

Решение проблем с памятью, занимаемой модулем IntelliMemory в Diskeeper и SSDkeeper

Reading time2 min
Views4.6K
После установки SSDkeeper заметил очень странную картину — через некоторое время работы компьютера количество доступной памяти заметно снижается. При стандартном наборе постоянно запущенных приложений (браузеры, торрент и DC++ клиент) из 16Гб остается примерно половина.

Диспетчер задач не давал ответа на вопрос об утечке памяти, поэтому следующей утилитой диагностики была RamMap:

image

На скриншоте приведено состояние системы уже после устранения проблемы, ранее Nonpaged Pool занимал порядка 4-6Гб.
Читать дальше →

Недокументированные возможности Windows: скрываем изменения в реестре от программ, работающих с неактивным реестром

Reading time6 min
Views19K
Можно ли создать такой ключ реестра, который будет виден в Windows в составе активного (подключенного) реестра, но не будет виден программам, работающим с неактивным (отключенным) реестром? Оказывается, если у вас есть возможность изменить лишь одну переменную ядра (например, с помощью драйвера), то да, способ есть.
Читать дальше →

Использование выражений для фильтрации данных из БД

Reading time6 min
Views27K
Статья основана на ответе в StackOverflow. Начну с описания проблемы, с которой я столкнулся. Есть несколько сущностей в базе данных, которые нужно отображать в виде таблиц на UI. Для доступа к базе данных используется Entity Framework. Для этих таблиц есть фильтры, по полям этих сущностей. Нужно написать код для фильтрации сущностей по параметрам.
Читать дальше →

Детектим виртуальную машину на C#: 1 уровень

Reading time14 min
Views26K

Одним жуть каким прохладным январским утром от знакомого прилетел вопрос — как на C# определить, не запущена ли программа в ОС (оконное приложение в ОС Windows 7 или новее) на виртуальной машине.


Требования к такому детектору были достаточно жёсткими:

  1. Должен быть полностью в исходных кодах,
  2. Должен собираться с помощью Visual Studio,
  3. Должен работать из-под аккаунта непривилегированного пользователя (нельзя использовать методы, требующие, к примеру, установки драйверов устройств, или иных операций, для которых нужны права администратора),
  4. Разрешено использовать .NET Framework 4.5 и никаких лишних зависимостей (типа Visual C++ Redistributable Package).


Под катом описание реализованного детектора на C# (в следующей части — с некоторыми элементами C++) и приличным количеством неприличного кода с использованием Visual Studio 2015 Community.


Структура публикации


  • 1 уровень. Изучение матчасти и простейших существующих решений:

    • немного теории касательно виртуализации,
    • реализация проверки ВМ с помощью данных из Windows Management Instrumentation (WMI).

  • 2 уровень. Поиск статей и публикаций про детектирование запуска в виртуальных машинах:

    • допиливаем реализацию с WMI,
    • работа с инструкцией CPUID.

  • 3 уровень. Поиск материалов с хакерских конференций:

    • допиливаем работу с CPUID,
    • делаем сводную таблицу параметров и результатов тестирования.
Читать дальше →

Полная автоматизация «development» среды с помощью docker-compose

Reading time7 min
Views162K

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


Docker в 2017


На конференции Dockercon 2016 CEO компании Docker рассказал, что количество приложений, которые запускаются в Docker выросло на 3100% за последние два года. Боле 460 тысяч приложений по всему миру запускаются в Docker. Это невероятно!


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

Читать дальше →

Как «пробить» человека в Интернет: используем операторы Google и логику

Reading time9 min
Views961K

В очередной статье нашего цикла публикаций, посвященного интернет-разведке, рассмотрим, как операторы продвинутого поиска Google (advanced search operators) позволяют быстро находить необходимую информацию о конкретном человеке.


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


Читать дальше →

Изменение содержимого Web.config в runtime при отладке в Visual Studio и IISExpress

Reading time8 min
Views5.5K
Технологически в этой статье ничего нового, просто еще одно полезное применение winapi-хуков для решения специфичной проблемы.

При работе с веб-проектами в Visual Studio существует одна неприятная мелочь — при использовании в процессе разработки нескольких бранчей, каждый из которых должен использовать свою копию окружения (например базу данных, или какие то внешние сервисы), возникает проблема с конфигурационными файлами в момент отладки — IISExpress использует только основной web.config в папке проекта, где обычно всякие connection strings содержат значения по умолчанию и где нет никаких специфичных для бранча настроек, и никаких трансформаций при запуске к нему не применяется. Можно конечно принудительно либо автоматически, либо вручную, применять трансформации к web.config, но во-первых измененный файл будет постоянно висеть в pending changes, что создает риск коммита нежелательных изменений, которые потом попадут в другие бранчи, а во-вторых это создает массу неудобств при его редактировании, поскольку перед коммитом каких-либо изменений в конфигурационном файле такие трансформации придется вручную убирать.

Рассмотрим как этого избежать.
Читать дальше →

Azure-IaaS-Дайджест №12 (Ноябрь-Декабрь)

Reading time2 min
Views1.1K
Disclaimer: Я пишу в основном про Azure с точки зрения инфраструктуры (DSC, IaaS, Hybrid\Private Cloud, OMS, ASR, Backup и т.д.). Не про разработку под Azure (хотя иногда что-то проскакивает).

Прошу прошения за задержку, но когда я опомнился в декабре, я подумал что уже никому не интересно это читать, а в начале января всем точно не интересно это читать. :)

Поехали!
Новости!

Использование метода интервью для разработки IT-продуктов: можно ли проводить качественные исследования самостоятельно?

Reading time12 min
Views13K
В предыдущих статьях мы рассказывали о том, как и в каких случаях используются качественные методы для разработки IT-продуктов. Логичный вопрос: а можно ли провести качественное исследование самому? Почитать статьи, послушать лекции, посетить мастер-класс и вперед, в поле — проводить наблюдение и брать интервью. Почему нет?

В идеальном мире качественные исследования проводят специалисты, вооруженные необходимыми навыками и компетенциями. Социологи, социальные антропологи, психологи — все они не один год изучали, как проводить такие исследования, разрабатывать инструментарий, собирать и анализировать качественные данные. Есть возможность нанять специалиста? Сделайте это, и не нужно самостоятельных экспериментов. Почему? Слишком высок риск получить некачественные данные: нерелевантные целям и задачам проекта, недостаточно подробные или вовсе бессмысленные (да-да, такое тоже случается).
Читать дальше →

BLE под микроскопом

Reading time6 min
Views99K
image

BLE под микроскопом. Часть 1

часть 2, часть 3
В мире существует большое разнообразие способов передачи информации «по воздуху». В последнее время всё большую популярность обретает формат BLE. Сегодня мы рассмотрим особенности этого протокола и поговорим о том, почему же он так востребован в современном мире. Так же мы рассмотрим средства разработки и особенности работы вспомогательных приложений на windows, android от фирмы Nordic.
Читать дальше →

Публикация десктоп-приложения в Windows Store c помощью Desktop Application Converter

Reading time8 min
Views7.6K

Не так давно мы опубликовали разработанное нами корпоративное приложение для десктопов, которое дополняет функционал Skype for Business. Например, может «по-человечески» сохранять историю переписки, как это делают все «приличные» мессенджеры, умеет отправлять сообщения в оффлайн, позволяет упорядочить контакты и ещё много всего, чего не хватало в Skype for Business. И когда появилась возможность поделиться приложением с помощью Windows Store, мы решили этой возможностью воспользоваться. В статье мы расскажем, как это происходило и чего нам это стоило.

Читать дальше →

Как выбирать алгоритмы для машинного обучения Microsoft Azure

Reading time12 min
Views36K
В статье вы найдете шпаргалку по алгоритмам машинного обучения Microsoft Azure, которая поможет вам выбрать подходящий алгоритм для ваших решений предиктивной аналитики из библиотеки алгоритмов Microsoft Azure. А также вы узнаете, как ее использовать.


Читать дальше →

Конвертируем десктопное приложение в appx с помощью Desktop Bridge

Reading time7 min
Views13K

С выходом Visual Studio 2017 должна появиться возможность конвертировать существующие .NET/Win32 проекты в Windows Store приложения более комфортным образом.

Впрочем, сейчас для создания appx пакета из .NET приложения совсем не обязательно устанавливать 2017-ую студию. Достаточно установленного пакета SDK для Windows 10 и Visual Studio 2015 с Developer Command Prompt. Что радует, так это то, что после Anniversary Update уже не обязательно скачивать образ десятки и производить установку какого-то стороннего софта, если у вас есть исходный код проекта или исполняемый файл.

Предлагаю создать из .NET приложения appx пакет с помощью Desktop Bridge (ex. Project Centennial).
Читать дальше →

Устранение дублирования Where Expressions в приложении

Reading time4 min
Views22K
Допустим, у вас есть товары и категории. В какой-то момент клиент сообщает, что для категорий с рейтингом > 50 необходимо использовать другие бизнес-процессы. У вас достаточно опыта и вы понимаете, что где сегодня 50 завтра будет 127.37 и хотите избежать появления магических чисел в коде, поэтому делаете так:

    public class Category : HasIdBase<int>
    {
        public static readonly Expression<Func<Category, bool>> NiceRating = x => x.Rating > 50;

       //...
    }

    var niceCategories = db.Query<Category>.Where(Category.NiceRating);

К сожалению, этот номер не пройдет, если вы хотите выбрать продукты из соответствующих категорий, потому что NiceRating имеет тип Expression<Func<Category, bool>>, а в случае с Product нам потребуется Expression<Func<Product, bool>>. То есть, необходимо осуществить преобразование Expression<Func<Category, bool>> => Expression<Func<Product, bool>>.

    public class Product: HasIdBase<int>
    {
        public virtual Category Category { get; set; }

       //...
    }

    var niceProductsCompilationError = db.Query<Product>.Where(Category.NiceRating); // так нельзя!

К счастью, осуществить это довольно просто!
Код под катом

Книга «Распределенные алгоритмы. Интуитивный подход»

Reading time5 min
Views18K
image Эта книга рассчитана на курс по распределенным алгоритмам для студентов старших курсов и аспирантов по специальностям, связанным с информатикой и программной инженерией. Она также может быть использована в качестве справочника исследователями в этих областях. Книга делает упор на базовые алгоритмы и результаты, полученные в сфере распределенных вычислений. Рассматриваемые в ней алгоритмы в основном относятся к «классическим» и были выбраны в первую очередь потому, что поучительны с точки зрения проектирования алгоритмов для распределенных систем или проливают свет на ключевые проблемы в распределенном и параллельном программировании.

Книга состоит из двух частей. Первая часть посвящена взаимодействию процессов посредством передачи сообщений. Она сформировалась на основе курса, читаемого в университете Врийе (Амстердам), изначально основанного на учебнике «Введение в распределенные алгоритмы» Герарда Теля. Вторая часть посвящена архитектурам с общей памятью.
Читать дальше →

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Date of birth
Registered
Activity