Mikrotik Ninja
3.55K subscribers
344 photos
8 videos
56 files
1.15K links
Канал по новым компьютерным технологиям и защите компьютерных программ


Блог http://bubnovd.net
https://medium.com/@dbubnov
https://xakep.ru/author/bubnovd/
Мысли неглупых людей https://t.me/channel1name
Книги https://t.me/mreadninja
Download Telegram
=== Виртуальная память в Linux. Часть 3. Трансляция адресов ===

Как мы видели ранее каждый процесс считает, что его адресное пространство начинается с 0 и имеет доступ к огромному объёму памяти (2^64 Б) рис. 13.3. Хотя в физической памяти адресное пространство процесса может располагаться как угодно
рис. 13.2

Трансляция адресов: преобразование виртуального адреса в физический. Обеспечивается ОС вкупе с аппаратной поддержкой

Тут приводятся упрощения, что адресное пространство размещено в памяти последовательно (смежно), адресное пространство меньше физической памяти и все адресные пространства одного размера

Для понимания работы трансляции (релокации), обратимся к ранним решениям этой задачи, примененным ещё в 1950-х. Эта техника называется base and bound (не смог корректно перевести на русский. Что-то вроде "база и граница") или динамическая релокация.
Каждое ядро CPU имеет два регистра: base (базовый) и bound (граничный).

- В base регистре лежит смещение. Физический адрес = виртуальный адрес + base

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

Пример:
Address Space Size 4 KB
Loaded in phys address 16 KB
• Virtual Address 0 → Physical Address 16 KB
• VA 1 KB → PA 17 KB
• VA 3000 → PA 19384
• VA 4400 → Fault (out of bounds)

Регистры - часть CPU и работу по релокации делает CPU. Часть процессора, которая занимается работой с памятью называется Memory Management Unit (MMU). Чем сложнее эта работа, тем более сложным будет MMU

Проблемы:
- При создании процесса ОС должна найти место в физ памяти для размещения там адресного пространства процесса. То есть нужно иметь список свободного места (free list)

- После завершения процесса нужно освободить его место в физ памяти и записать обратно в free list

- У ЦПУ только одна пара бэйз-баунд регистров. При конекст свитчинге нужно сохранить куда-то бэйз и баунд текущего процесса и считать откуда-то эти регистры нового процесса. Procss Control Block (PCB)

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

- Мы смогли создать независимую память для каждого процесса и изолировать её. Но т.к. аллоцируем всё адресное пространство, то аллоцируемое, но неиспользуемое место между хипом и стеком простаивает впустую, как видно на рис. 15.2. Это называется внутренней фрагментацией

В следующей части попробуем решить эти проблемы

#OS #OSTEP #memory #vm
В обзоре KazHackStan я упоминал доклад Вадима Шелест об инфраструктуре для RedTeam.
А сегодня увидел ссылку на детальный пост о деплое инфры в Linode с помощью Terraform. Пост будет полезен как админам/девопсам, так и безопасникам.

- Знакомые с IaC и Terraform могут найти для себя новое про инфру для RedTeam
- А security специалисты поглубже узнают про IaC

#terraform #redteam #security #nebula #cobaltstrike #caddy #iac
=== Виртуальная память в Linux. Часть 4. Сегментация ===

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

Получаем такую структуру в MMU

Segment | Base | Size
---——----|—------|-------
Code | 32K | 2K
Heap | 34K | 2K
Stack | 28K | 2K

Я не буду пересказывать тут как система обращается к разным сегментам памяти. Интересующиеся могут почитать об этом в книге

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

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

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

#OS #OSTEP #memory #vm
Слышали про honeypot?
Это специально оставленная брешь в системе, которую с большой вероятностью найдет хакер и наследит там. По этим следам мгновенно будет понятно, что система находится под атакой и админы должны усилить бдительность.

canarytokens - генератор артефактов, при открытии которых приходит алерт на электронную почту

Из артефактов:
- URL
- DNS
- AWS key
- MS Office document
- kubeconfig
- PDF
- EXE/DLL
- WireGuard config
- Дампы баз данных
- ...

#honeypot #security
Операционной системе необходимы драйверы для любого устройства, которое потенциально может быть подключено к системе. Неудивительно, что драйверы устройств занимают огромную часть кода ОС. Исследования ядра Linux показали, что 70% кода - драйверы. Когда кто-то говорит, что ОС это миллионы строк кода, это значит, что ОС это миллионы строк кода драйверов. Конечно, для каждой конкретной инсталляции большинство этого кода неактивно.

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

#ostep #linux #os
Оказывается, Большая Медведица - не просто ковш.
Как теперь с этим жить?
https://stellarium-web.org/
== Виртуальная память в Linux. Часть 5. Пейджинг ==

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

На помощь приходит пейджинг. Вместо деления адресного пространства на три логических сегмента (каждый - динамического размера) делим адресное пространство на фиксированные блоки - страницы
Физическая память тоже делится на страницы. В них будут размещаться страницы адресного пространства. Страницы физической памяти называются page frame

Каждая виртуальная страница (VPN - Virtual Page Number) указывает на физический фрейм (PFN - Physical Frame Number). Для их сопоставления используется Page Table - таблица страниц. Для каждого процесса она своя и находится по адресу /proc/PID/pagemap. Но открывать этот файл бесполезно - каждая страница это 64-битное (для 64-битных систем) значение. Для страниц размером 4 КБ это 2^52 страниц по 8 байт каждая. Это очень много данных и открытие такого файла займет годы. В /proc/PID/maps можно увидеть все используемые страницы.

Сам виртуальный адрес состоит из двух частей: VPN и offset (сдвиг). VPN указывает на страницу, а сдвиг - на смещение байт в этой странице. В трансляции адресов участвует толкьо VPN. Сдвиг остается прежним.
На самом деле в Page Table содержатся не только данные о сопоставлении виртуальных и физических страниц. Например:
- valid bit - указывает на корректность трансляции - что такая страница существует

- protection bits - уровевнь доступа (read/write/executable)

- present bit - есть ли страница в физической памяти или в свопе (swap)

- dirty bit - изменялась ли страница после её помещения в своп

- ...

Пейджинг гибкий, упрощает управление свободным пространством. С ним нет внешней фрагментации, поскольку используются страницы одинакового размера. Освободившийся физический фрейм легко занимается новой страницей того же размера. Однако пейджинг всё ещё дорогая операция и не всегда эффективная (чтобы занять 1 бит в памяти, требуется выделить целых 4 КБ на страницу)

#OS #OSTEP #memory #vm
== Виртуальная память в Linux. Часть 6. Translation Lookaside Buffer (TLB) ==

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

В оптимизации этого процесса помогла, как часто бывает, аппаратная составляющая. Page Table в отдельную структуру внутри CPU - Translation Lookaside Buffer. Это ещё одна функция уже известного нам MMU.

Кроме этого, для оптимизации работы Page Table используются разные её организации: линейная, уменьшенная, инвертированная

#OS #OSTEP #memory #vm
У MS есть полезный обновляющийся портал с гайдам, схемами и полезными ссылками.
Вот, например, по security

https://learn.microsoft.com/en-us/security/

#security
Forwarded from KazHackStan HUB
10 октября в 20:00 в нашем баре пройдёт бесплатный митап от ValdikSS.

Доклад будет про устройство систем DPI и интернет-блокировкам на их основе, историей развития на примере России, способами обхода.

Спикер: известный в СНГ исследователь ValdikSS.

Хабр: https://habr.com/ru/users/ValdikSS/
GitHub: https://github.com/ValdikSS/

Сбор гостей: 19:30
Начало докладов: 20:00
Адрес: г.Астана, пр.Улы-Дала 5/2, KHS HUB.
Вы, конечно, уже прочитали что думает о WhatsApp Павел Дуров. Но не всегда есть возможность удалить приложение с телефона. Можно установить его в отдельный профиль с помощью Shelter

Осторожно! Не работает с MIUI другими аддонами к UI

#android #sandbox
Исследователи из компании Oxeye обнаружили критическую уязвимость в популярной JavaScript-библиотеке vm2. Брешь получила имя “SandBreak“ и 10 баллов по шкале CVSS. Специалистам по кибербезопасности, использующим vm2, стоит незамедлительно пропатчить библиотеку. Библиотека vm2 является наиболее популярной JavaScript-песочницей, которую за один месяц скачивают 16,5 млн раз. Она предоставляет фреймворк для тестов, с помощью которого можно запускать подозрительный код в одном процессе.

Источник: https://www.anti-malware.ru/news/2022-10-10-111332/39698

Сама CVE

#cve #security