Как стать автором
Обновить
0
@DFoozread⁠-⁠only

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

Отправить сообщение

Абстрактные анонимные сети

Время на прочтение27 мин
Количество просмотров6.1K

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

Читать далее

Не обновлениями едиными: как получить привилегии администратора домена без эксплуатации уязвимостей

Время на прочтение7 мин
Количество просмотров11K

Всем привет. Я чуть больше полутора лет занимаюсь внутренним пентестом. И вроде бы уже многое знаю, но всегда кажется, что этого недостаточно и хочется знать больше. Когда часто делаешь похожую работу, привыкаешь к одним и тем же действиям, инструментам, и нет идей, что бы еще попробовать. Иногда я черпаю вдохновение в отчетах своих коллег, но всегда интересно почитать о том, как работают и что используют другие команды. А раз это интересно мне, может, это интересно кому-то еще. Мы c командой решили тоже поделиться несколькими интересными киллчейнами. В этой статье я расскажу о последовательности шагов, которая привела к получению привилегий администратора домена в компании, в которой «почти все безопасно».

Подробнее — под катом.

Читать далее

Разбираемся с EXCEPTION_CONTINUE_EXECUTION

Время на прочтение6 мин
Количество просмотров3.2K

Механизм структурированной обработки исключений (Structured Exception Handling, SEH) позволяет не только "отловить" сгенерированное исключение, но и вернуться к инструкции, вызвавшей сбой и попробовать выполнить ее заново.

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

Читать далее

Как применять Linux epoll в Python

Время на прочтение23 мин
Количество просмотров25K
В статье описывается:
  • Примеры использования блокирующих сокетов
  • Преимущества асинхронных сокетов и Linux epoll
  • Примеры асинхронного использования сокетов через epoll
  • Вопросы производительности
  • Исходный код
Читать дальше →

Kernel Queue: The Complete Guide On The Most Essential Technology For High-Performance I/O

Время на прочтение65 мин
Количество просмотров21K

When talking about high-performance software we probably think of server software (such as nginx) which processes millions requests from thousands clients in parallel. Surely, what makes server software work so fast is high-end CPU running with huge amount of memory and a very fast network link. But even then, the software must utilize these hardware resources at maximum efficiency level, otherwise it will end up wasting the most of the valuable CPU power for unnecessary kernel-user context switching or while waiting for slow I/O operations to complete.

Thankfully, the Operating Systems have a solution to this problem, and it's called kernel event queue. Server software and OS kernel use this mechanism together to achieve minimum latency and maximum scalability (when serving a very large number of clients in parallel). In this article we are going to talk about FreeBSD, macOS and kqueue, Linux and epoll, Windows and I/O Completion Ports. They all have their similarities and differences which we're going to discuss here. The goal of this article is for you to understand the whole mechanism behind kernel queues and to understand how to work with each API.

Read more

Реализация epoll, часть 4

Время на прочтение5 мин
Количество просмотров2.6K
Это — последний материал из серии четырёх статей (часть 1, часть 2, часть 3), посвящённой реализации epoll. Тут речь пойдёт о том, как epoll передаёт события из пространства ядра в пользовательское пространство, и о том, как реализованы режимы срабатывания по фронту и по уровню.



Эта статья написана позже остальных. Когда я начинал работу над первым материалом, самой свежей стабильной версией ядра Linux была 3.16.1. А во время написания данной статьи это уже версия 4.1. Именно на коде этой версии ядра и основана данная статья. Код, правда, изменился не особенно сильно, поэтому читатели предыдущих статей могут не беспокоиться о том, что что-то в реализации epoll очень сильно изменилось.
Читать дальше →

select / poll / epoll: практическая разница

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

В этой статье мы рассмотрим:

  • select()
  • poll()
  • epoll()
  • libevent
Читать дальше →

С++ exception handling под капотом или как же работают исключения в C++

Время на прочтение15 мин
Количество просмотров74K

От переводчика


В мире победили языки высокого уровня и в мирах руби-питон-js разработчиков остается только разглагольствовать, что в плюсах не стоит использовать то или иное. Например, исключения, потому что они медленные и генерируют много лишнего кода. Стоило спросить "и какой же код он генерирует", как в ответ получил мямленье и мычание. А и правда — как же они работают? Ну что ж, компилируем в g++ с флагом -S, смотрим что получилось. Поверхностно разобраться не сложно, однако то, что остались недопонимания — не давали мне спать. К счастью, готовая статья нашлась.

На хабре есть несколько статей, подробных и не очень (при этом все равно хороших), посвященных тому, как работают exceptions в C++. Однако нет ни одной по-настоящему глубокой, поэтому я решил восполнить этот пробел, благо есть подходящий материал. Кому интересно как работают исключения в C++ на примере gcc — запаситесь pocket-ом или evernote, свободным временем и добро пожаловать под кат.
Читать дальше →

C++ и копирование перекрывающихся областей памяти

Время на прочтение3 мин
Количество просмотров25K
Программируя на Си многие сталкивались с такими функциями как memcpy() и memmove(), по сути, функции делают одно и тоже, но вторая корректно отрабатывает ситуацию, когда области памяти перекрываются (на что появляются дополнительные накладные расходы).

В мире С++ никто не запрещает пользоваться этими функциями (часто эти функции используют различные механизмы оптимизации и могут статься быстрее своих собратьев из мира C++), но есть и более родное средство, работающее через итераторы: std::copy. Это средство применимо не только к POD типам, а к любым сущностям, поддерживающим итераторы. О деталях реализации в стандарте ничего не сказано, но можно предположить, что разработчики библиотеки не настолько глупы, что бы не использовать, оптимизированные memcpy()/memmove() когда это возможно.
Читать дальше →

C++20. Coroutines

Время на прочтение33 мин
Количество просмотров68K

В этой статье мы подробно разберем понятие сопрограмм (coroutines), их классификацию, детально рассмотрим реализацию, допущения и компромиссы, предлагаемые новым стандартом C++20.


image

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

C++17. Функция стандартной библиотеки std::launder и задача девиртуализации

Время на прочтение34 мин
Количество просмотров33K

В этой статье мы попробуем разобраться с одним из самых неоднозначных и непонятных нововведений стандарта C++17 — функцией стандартной библиотеки std::launder. Мы посмотрим на std::launder с другой стороны, посмотрим на источник. Разберем что лежит в основе функции на примере решения задачи девиртуализации и реализации виртуальных указателей в LLVM.


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

Python: Работа с базой данных, часть 2/2: Используем ORM

Время на прочтение14 мин
Количество просмотров117K
часть 1/2: Используем DB-API часть 2/2: Используем ORM
Это вторая часть моей статьи по работе с базой данных в Python. В первой части мы рассмотрели основные принципы коммуникации с SQL базой данных, а в этой познакомимся с инструментарием, позволяющим облегчить нам это взаимодействие и сократить количество нашего кода в типовых задачах.

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


Требуемый уровень подготовки: базовое понимание SQL и Python (код статьи проверялся под Python 3.6). Желательно ознакомится с первой частью, так как к ней будут неоднократные отсылки и сравнения. В конце статьи есть весь код примеров под спойлером в едином файле и список ссылок для более углубленного изучения материала.
Читать дальше →

Python: Работа с базой данных, часть 1/2: Используем DB-API

Время на прочтение6 мин
Количество просмотров539K
часть 1/2: Используем DB-API часть 2/2: Используем ORM
Python DB-API – это не конкретная библиотека, а набор правил, которым подчиняются отдельные модули, реализующие работу с конкретными базами данных. Отдельные нюансы реализации для разных баз могут отличаться, но общие принципы позволяют использовать один и тот же подход при работе с разными базами данных.

В статье рассмотрены основные методы DB-API, позволяющие полноценно работать с базой данных. Полный список можете найти по ссылкам в конец статьи.

Требуемый уровень подготовки: базовое понимание синтаксиса SQL и Python.
Читать дальше →

Способы переписать логические параметры в С++

Время на прочтение8 мин
Количество просмотров9.5K

Программисты читают код намного чаще, чем пишут его, поэтому важно писать понятный, последовательный, однозначный код. Автор книги С++17 in detail написал о способах избегать путаницы. Делимся его материалом к старту курса по разработке на С++.

Читать далее

Чек-лист по безопасности контейнеров

Время на прочтение4 мин
Количество просмотров9.6K

Fortress of the Arch by JeremyPaillotin

Команда разработки Kubernetes aaS VK Cloud Solutions перевела чек-лист по безопасности контейнеров, составленный на основе выступления Лиз Райс на конференции GOTOpia Europe 2020. Чек-лист проясняет специфику некоторых наиболее вероятных уязвимостей и помогает их избежать.

1. Отделили ли вы сборки от продуктового кластера?


Сначала вы наверняка будете создавать образы контейнеров при помощи того или иного конвейера CI/CD. Это может быть служба хостинга или, скорее, self-hosted-решение, если мы говорим о корпоративном Kubernetes. 

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

Помните: если вы запустили Docker-файл, то в нем можно выполнять любой произвольный код. То есть любой, кто меняет код в ваших Docker-файлах, может запускать в них что угодно. Поэтому всегда проверяйте, что Docker-файлы может редактировать только команда, которой вы доверяете. Иначе есть риск, что кто-то воспользуется уязвимостью ядра и получит несанкционированный доступ к продакшен-приложениям.
Читать дальше →

Удивительная производительность параллельных алгоритмов C++17. Миф или Реальность?

Время на прочтение8 мин
Количество просмотров22K
Добрый вечер!

От нашего курса «Разработчик C++» предлагаем вам небольшое и интересное исследование про параллельные алгоритмы.

Поехали.

С появлением параллельных алгоритмов в C++17, вы с легкостью можете обновить свой “вычислительный” код и получить выгоду от параллельного выполнения. В этой статье, я хочу рассмотреть STL алгоритм, который естественным образом раскрывает идею независимых вычислений. Можно ли ожидать 10-кратного ускорения при наличии 10-ядерного процессора? А может больше? Или меньше? Поговорим об этом.

Введение в параллельные алгоритмы

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

Atomic operations

Время на прочтение4 мин
Количество просмотров54K
Стало интересно, как же именно достигается атомарность операций. Кому интересно — добро пожаловать под кат.
Читать дальше →

О специальных макро в ассемблере

Время на прочтение10 мин
Количество просмотров7.6K

Много лет назад американским специалистом Гарри Килдэллом (Gary Kildall) в рамках создания системы программирования для персональных компьютеров был разработан транслятор с языка ассемблера для процессора Intel 8086, который он назвал RASM-86 (Relocating ASseMbler). Этот во многом типичный для своего времени продукт имел особенность: он позволял, не меняя транслятора, добавлять описания новых команд процессора с помощью специальных макросредств.

Автор статьи, используя и развивая этот транслятор, успешно применял данные средства по мере появления новых поколений процессоров. Конечно, иногда и сам транслятор требовал ряда доработок, например, при переходе на архитектуру IA-32, а затем и на x86-64 (IA-32e). Тем не менее, изначально заложенная идея позволила легко продолжать эволюцию транслятора до настоящего времени. Некоторые итоги этой работы рассматриваются далее.

Читать далее

Что ты такое, Event Loop? Или как устроен цикл событий в браузере Chrome

Время на прочтение3 мин
Количество просмотров157K
Как думаете, что произойдет, если запустить в консоли браузера этот фрагмент кода?

function foo() {
  setTimeout(foo, 0);
}

foo();

А этот?

function foo() {
  Promise.resolve().then(foo);
}

foo();

Если вы также, как и я, прочитали кучу статей про Event Loop, Main Thread, таски, микротаски и прочее, но затрудняетесь ответить на вопросы выше — эта статья для вас.
Читать дальше →

Математические бэкдоры в алгоритмах шифрования

Время на прочтение17 мин
Количество просмотров25K

Мы привыкли полагаться на современные алгоритмы шифрования. Однако, действительно ли они так безопасно защищают наши данные? Давайте разберёмся с таким понятием как математический бэкдор, что он из себя представляет и как работает.

Читать далее

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность