Pull to refresh
47
0
Сергей Бронников @estet

Пользователь

Send message

Немного про современные технологии Greybox-фаззинга

Reading time20 min
Views8.2K


Автор: Иннокентий Сенновский


Как найти баги, о которых вы и не догадывались, или что такое фаззинг


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


Чтобы справиться с этой проблемой, придумали фаззеры — инструменты тестирования, которые сами пытаются найти баги в программе. В этой статье я рассмотрю, какие они вообще бывают (для C/C++, потому что баги в таких программах особенно болезненны), но сделаю упор на Greybox-фаззеры (почему, расскажу в статье).

Обожаю статьи, где много букв

FUSE: как написать свою файловую систему

Level of difficultyHard
Reading time21 min
Views16K

Меня зовут Максим, я ведущий разработчик в VK. Занимаюсь инфраструктурой доставки электронной почты в проекте Mail.ru. Наша команда разработала и довела до эксплуатации файловую систему (ФС) на FUSE в рамках проекта распределённой почтовой очереди. В проекте требовалось реализовать сетевую ФС, которая сохраняет данные в трёх копиях, в разных ЦОДах. Цель — повысить отказоустойчивость, чтобы даже полный выход из строя одного ЦОДа не приводил к нарушениям SLA. Эта статья для всех, кто интересуется файловыми системами и хранением данных. Мы обсудим:

- зачем писать свою ФС;

- как написать свою ФС с помощью фреймворка FUSE;

- какие подводные камни есть у эксплуатации FUSE в production.

Эта статья — результат трёх лет разработки ФС. Сейчас самое время заварить чай, рассказ будет долгим. 

Заварить чай и читать

Go Channels Internals

Reading time12 min
Views28K
На Go можно реализовать тысячи goroutine одновременно без больших требований к железу. При этом горутины могут легко и просто обмениваться данными между собой и синхронизироваться с помощью каналов. Но как устроены каналы внутри? Об этом написано не так уж много, а в условиях многопоточки и асинхронного кода хорошо бы не просто работать с каналами, а понимать, как их использовать более практично и эффективно.

Егор Гришечко, старший разработчик в Insolar, разрабатывает блокчейн для b2b сегмента (по сути, стартап), и у команды как раз большая многопоточка и много асинхронного кода. Егор не только разобрался на практике, как работают каналы, что это такое и как они вообще устроены внутри. Он еще рассказал о каналах внутри команды, а потом, увидев интерес, поделился на конференции Golang Conf 2019.

Сегодня мы публикуем расшифровку его доклада.


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

Улучшаем BARSiC: как мы проверяли и совершенствовали алгоритм консенсуса в кластере

Reading time6 min
Views2K

Привет, Хабр! В команде ВКонтакте существует система управления репликацией и консенсусом в кластере, которая называется BARSiC (Binary Asynchronous Replication with Simple Consensus). Прежде всего она контролирует состав кластера, определяя, кто реплика, а кто — мастер. А при выходе мастера из строя реплики выбирают нового с непротиворечивой линейной историей. 

Для решения этой задачи команда ВКонтакте совместно с университетом ИТМО работали над научно-исследовательским проектом «Разработка моделей для верификации распределенных алгоритмов в системе BARSiC». В этой статье подробно расскажем о том, как мы в рамках проекта верифицировали выбранный для BARSiC алгоритм, и попутно исправили найденную в нём ошибку. 

Читать далее

Часть 6: Портирование MemTest86+ на RISC-V

Reading time21 min
Views8.5K

Наверное, мало какому айтишнику нужно объяснять, что такое Memtest86+ — пожалуй, он уже стал более-менее стандартом в тестировании оперативной памяти на ПК. Когда в одной из предыдущих частей я наткнулся на битую планку памяти, пришедшую в комплекте с платой, он (вместе с поддерживающим DDR2 нетбуком) казался очевидным решением. Другой вопрос, что там в принципе нестабильная работа системы была видна невооружённым глазом. В более хитрых случаях, слышал, что кроме банального «простукивания» ячеек памяти до бесконечности, этот инструмент использует некоторые специальные паттерны данных, на которых ошибки в работе DDR выявляются с большей вероятностью. В общем чудесная вещь, жаль, что даже в названии указано: 86 — «Только для x86-совместимых систем». Или нет?


Под катом вы увидите мои попытки портировать MemTest86+ v5.1 на RISC-V и промежуточный итог. Спойлер: оно шевелится!

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

Как подружить DynamoRIO и LibFuzzer

Level of difficultyMedium
Reading time15 min
Views1.1K

Приветствую всех обитателей Хабра и случайных гостей!
Этой статьёй я хотел бы начать цикл заметок, посвящённых моей научной работе в вузе, связанной с фаззинг-тестированием. Всего на данный момент я работаю над темой 2 семестра.

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

Надеюсь, кому-нибудь это да пригодится ;-)

Читать далее

Подборка полезностей для программиста под Linux

Reading time44 min
Views17K

Думаю, у каждого программиста есть набор любимых утилит, трюков и знаний. Некоторые он даже использует в работе. Скорее всего, у разных программистов они различаются. Значит, пришло время поделиться. Сегодня я расскажу о своей подборке того, что, вероятно, известно не настолько широко, как оно того заслуживает. Речь пойдёт преимущественно про платформу GNU/Linux.

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

Как мы раскрыли внутреннюю архитектуру Flutter и затащили его на собственную платформу

Reading time13 min
Views8.1K
Если вы разрабатываете мобильные приложения, то почти наверняка сталкивались с Flutter — мегапопулярным открытым фреймворком от Google. Наша команда Mobile SDK and Applications Development, конечно, тоже захотела использовать Flutter при создании приложений для KasperskyOS — собственной микроядерной операционной системы «Лаборатории Касперского» — но был нюанс…



Особенности архитектуры KasperskyOS задают условия, при которых мы не можем пойти проторенными дорожками и свободно интегрировать фреймворк на своей платформе. Подсмотреть решения где-то вовне мы не можем тоже — таких кейсов в индустрии просто не было. А сам Google практически не раскрывает внутреннюю архитектуру Flutter. Так что интеграцию требовалось выстраивать с нуля.

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

Если вы тоже разрабатываете приложения, где требуется разбираться во внутренней архитектуре Flutter, статья точно будет вам полезна — ныряйте под кат!
Читать дальше →

Ленточные накопители: фантастические твари мира архивирования

Reading time8 min
Views66K

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

Читать далее

Старые добрые ленточные хранилища делают камбэк. Откуда взрыв популярности?

Reading time6 min
Views16K

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

Магнитные ленты постепенно отходили на второй план, вытесняемые SSD, HDD и так далее. Олдскульный формат хранения данных находился в упадке. Отгрузки накопителей снизились с 800 000 единиц в 2008 году до 400 000 единиц в 2010 году. И менее чем до 250 000 единиц к концу 2016 года.

И правда, кому он нужен, этот формат прошлого века, если у нас для всего сейчас есть флешки и облака?

Читать далее

Восстанавливаем данные с кассеты от старого стримера

Level of difficultyMedium
Reading time8 min
Views9.3K
Приветствую всех! Многие давно привыкли, что ленточные накопители — что-то высоконадёжное и предназначенное для долговременного использования. Но есть один стандарт, про который сказать так как-то не получается, и имя ему — QIC. Странная конструкция стримера и кассеты, не слишком уж долгий срок хранения — всё это про него.

Так получилось, что как-то раз ко мне попал стример такого типа и кассета к нему, на которой ещё оставались какие-то данные. Что же с ним можно сделать? Давайте разбираться.



Итак, в сегодняшней статье поговорим про стримеры стандарта QIC и miniQIC. Попутно разберёмся, как они работают и в чём их фатальный недостаток, попробуем восстановить данные с архива тридцатилетней давности и узнаем, почему нельзя пользоваться проприетарным софтом для резервного копирования.
Читать дальше →

Ленточные накопители в домашнем ПК

Level of difficultyEasy
Reading time11 min
Views26K
Приветствую всех!
Однажды перед каждым из нас встаёт вопрос: где хранить сотни гигабайт столь важной информации? Кто-то продлевает подписку в облаке, кто-то покупает ещё один винт, кто-то собирает NAS, а кто-то, как и я, присматривается к чуть более экзотическим решениям.
Вдохновившись постом двухгодичной давности про серверное железо в обычном ПК, я решил, что самое время рассказать про ещё один атрибут подобных систем — стримеры.



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

«Врубай на Максиму!» или учимся решать математические задания для 6 и 7 классов в WxMaxima

Reading time4 min
Views9.8K

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

Пришло время сдуть пыль с "комплюхтера" установить себе Maxima и попутно еще раз напомнить сообществу о ней.

Сегодня мы не будем всё усложнять и бегло рассмотрим простейшие примеры для 6 и 7 классов по следующим темам:

наименьшее общее кратное

наибольший общий делитель

операции с дробями

упрощение выражений с одночленами и многочленами

линейные уравнение

системы линейных уравнений

построение графиков функции

Читать далее

Свой S3-server: что делать, если ваши десятки петабайт уже не лезут в коробочные объектные хранилища

Level of difficultyMedium
Reading time24 min
Views30K

В 2024 году уже незачем рассказывать об S3-интерфейсе и сравнивать его с другими вариантами организации объектного хранилища. Вот и мы в Ozon, конечно, предоставляем такое платформенное решение широкому спектру внутренних потребителей. От сервисов, которые хранят картинки товаров для каталога, до бэкапов баз данных. От собственных внутренних разработок, до open-source-решений, таких как Gitlab и Thanos.

Пока у вас десятки терабайт и сотни RPS, вас устраивают такие решения, как MinIO. Но по мере роста объёмов и запросов приходится смотреть в сторону таких решений, как Ceph с RGW (RADOS Gateway / Object Gateway). Ну, а когда у вас 3 дата-центра, десятки петабайт данных, миллиарды объектов и десятки тысяч запросов в секунду — в таких условиях и у RGW начинаются проблемы.

Эта история началась с того, что и мы с проблемами масштабирования столкнулись. Под хабракатом вы узнаете, как мы прошли через отрицание проблемы, гнев на Ceph, торг с CTO и разработку собственного решения. Как выбирали технологии, на какие грабли наступили, и что в итоге получилось.

Читать далее

Ремонт игрушечного локомотива PIKO

Level of difficultyEasy
Reading time4 min
Views16K
TL;DR: Друзья иногда обращаются ко мне с просьбой починить какой-нибудь прибор или технику. Однажды ко мне попала электромеханическая игрушка — модель локомотива фирмы PIKO. Мне удалось вернуть ей возможность двигаться по рельсам. Но не удалось заменить утерянные шестерни редуктора, которые пытался напечатать на оптическом 3D-принтере.


▍ Анамнез


Игрушечный локомотив был выпущен, предположительно, в 80–90-е годы немецкой фирмой PIKO (от Pionier Konstruktor) и принадлежал ребёнку. Комплект набора (рельсы, упаковка и пр.) сохранился неплохо и не утратил целостность, проблема была только в локомотиве.
Читать подробности и смотреть внутренности

Как я делаю опенсорсную статусную панель «я занят»

Reading time8 min
Views28K

Прототип моего проекта светодиодной таблички, которая показывает что я занят — Busy StatusBar

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

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

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

Приглашаю всех желающих поучаствовать в разработке.
Читать дальше →

Микро-UPS на ионисторах

Reading time8 min
Views33K
Доброго времени суток всему уважаемому сообществу. Имею честь предложить хабровчанам, заинтересованным в радиоэлектронике, несколько рассуждений и конкретную реализацию блока резервного питания на ионисторах (они же суперконденсаторы с двойным электрическим слоем), предназначенного обеспечить корректное завершение работы процессорного модуля на ARM-микроконтроллере, работающего под стандартным Linux Debian.
Читать дальше →

Заточка кухонных ножей мусатом

Level of difficultyEasy
Reading time9 min
Views77K

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

Читать далее

Миллион домашних фотографий: наводим порядок

Reading time5 min
Views35K

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

Пришло время навести порядок.

30k аудиозаписей: наводим порядок

Level of difficultyMedium
Reading time7 min
Views2.2K

Зачем писать дневник, если можно его надиктовывать? Казалось бы, здравая мысль, но как потом с ним работать? И нужен ли он вообще в таком виде? Сейчас есть довольно большое количество программ, которые сразу сделают speech‑to‑text, и проблемы не будет. А что, если такая идея возникла «‑дцать» лет назад, когда деревья были большими, а в телефонах только‑только появилась функция «диктофон»? За многие годы в нашей домашней видеотеке накопилось более 30 000 таких записей. Пришла пора разложить всё по полкам, конечно же, с «преферансом и куртизанками».

Читать далее
1
23 ...

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Works in
Registered
Activity