=== Виртуальная память в Linux. Часть 3. Трансляция адресов ===
Как мы видели ранее каждый процесс считает, что его адресное пространство начинается с 0 и имеет доступ к огромному объёму памяти (2^64 Б)
Тут приводятся упрощения, что адресное пространство размещено в памяти последовательно (смежно), адресное пространство меньше физической памяти и все адресные пространства одного размера
Для понимания работы трансляции (релокации), обратимся к ранним решениям этой задачи, примененным ещё в 1950-х. Эта техника называется
Как мы видели ранее каждый процесс считает, что его адресное пространство начинается с 0 и имеет доступ к огромному объёму памяти (2^64 Б)
рис. 13.3
. Хотя в физической памяти адресное пространство процесса может располагаться как угодно рис. 13.2
Трансляция адресов:
преобразование виртуального адреса в физический. Обеспечивается ОС вкупе с аппаратной поддержкойТут приводятся упрощения, что адресное пространство размещено в памяти последовательно (смежно), адресное пространство меньше физической памяти и все адресные пространства одного размера
Для понимания работы трансляции (релокации), обратимся к ранним решениям этой задачи, примененным ещё в 1950-х. Эта техника называется
base and bound
(не смог корректно перевести на русский. Что-то вроде "база и граница") или динамическая релокация.Каждое ядро CPU имеет два регистра: base (базовый) и bound (граничный).
- В
Пример:
Проблемы:
- При создании процесса ОС должна найти место в физ памяти для размещения там адресного пространства процесса. То есть нужно иметь список свободного места (free list)
- После завершения процесса нужно освободить его место в физ памяти и записать обратно в free list
- У ЦПУ только одна пара бэйз-баунд регистров. При конекст свитчинге нужно сохранить куда-то бэйз и баунд текущего процесса и считать откуда-то эти регистры нового процесса. Procss Control Block (PCB)
- Доступ к регистрам привилигрованный. Только кернел режим ОС может ими управлять. Если бы это мог делать обычный процесс, он бы мог перезаписать значения регистров и читать/писать чужую память
- Мы смогли создать независимую память для каждого процесса и изолировать её. Но т.к. аллоцируем всё адресное пространство, то аллоцируемое, но неиспользуемое место между хипом и стеком простаивает впустую, как видно на
В следующей части попробуем решить эти проблемы
#OS #OSTEP #memory #vm
- В
base
регистре лежит смещение. Физический адрес = виртуальный адрес + base
- bound
регистр указывает на границу физической памяти процесса. Если адрес, к которому обращается процесс выходит за границу, указанную в bound регистре, вызывается исключение и процесс завершашетсяПример:
Address Space Size 4 KBРегистры - часть CPU и работу по релокации делает CPU. Часть процессора, которая занимается работой с памятью называется
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)
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
А сегодня увидел ссылку на детальный пост о деплое инфры в 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 мы позволим читать из сегмента другим процессам
Для предовтарщения внутренней фрагментации можно вместо одной пары регистров использовать три. По паре на каждый сегмент адресного пространства: код, стек, хип
Получаем такую структуру в MMU
Segment | Base | Size
---——----|—------|-------
Code | 32K | 2K
Heap | 34K | 2K
Stack | 28K | 2K
Я не буду пересказывать тут как система обращается к разным сегментам памяти. Интересующиеся могут почитать об этом в книге
Иногда требуется шарить некоторые сегменты между адрес спейсами. Например шаринг сегмента с кодом. Для этого используется protection bit. Выставив его в read-only мы позволим читать из сегмента другим процессам
Итак, сегментация позволила нам не расходовать впустую огромные куски памяти с минимальным оверхедом на трансляцию
Проблема заключается в том, что сегментация все еще недостаточно гибкая, чтобы поддерживать наше полностью обобщенное, разреженное адресное пространство. Например, после освобождения памяти от закрытых программ мы получим разреженную память как на картинке слева (это и есть внешняя фрагментация). То есть в памяти появляется много неиспользуемых дырок, которые нужно чем-то занять. Но это будет не всегда возможно из-за того, что программам будет требоваться больше места, чем есть в каждой из дырок
Другими словами, наша модель использования адресного пространства не совсем соответствует тому, как работает сегментация. Таким образом, нам необходимо найти новые решения
#OS #OSTEP #memory #vm
Проблема заключается в том, что сегментация все еще недостаточно гибкая, чтобы поддерживать наше полностью обобщенное, разреженное адресное пространство. Например, после освобождения памяти от закрытых программ мы получим разреженную память как на картинке слева (это и есть внешняя фрагментация). То есть в памяти появляется много неиспользуемых дырок, которые нужно чем-то занять. Но это будет не всегда возможно из-за того, что программам будет требоваться больше места, чем есть в каждой из дырок
Другими словами, наша модель использования адресного пространства не совсем соответствует тому, как работает сегментация. Таким образом, нам необходимо найти новые решения
#OS #OSTEP #memory #vm
Слышали про honeypot?
Это специально оставленная брешь в системе, которую с большой вероятностью найдет хакер и наследит там. По этим следам мгновенно будет понятно, что система находится под атакой и админы должны усилить бдительность.
canarytokens - генератор артефактов, при открытии которых приходит алерт на электронную почту
Из артефактов:
- URL
- DNS
- AWS key
- MS Office document
- kubeconfig
- PDF
- EXE/DLL
- WireGuard config
- Дампы баз данных
- ...
#honeypot #security
Это специально оставленная брешь в системе, которую с большой вероятностью найдет хакер и наследит там. По этим следам мгновенно будет понятно, что система находится под атакой и админы должны усилить бдительность.
canarytokens - генератор артефактов, при открытии которых приходит алерт на электронную почту
Из артефактов:
- URL
- DNS
- AWS key
- MS Office document
- kubeconfig
- EXE/DLL
- WireGuard config
- Дампы баз данных
- ...
#honeypot #security
Canarytokens
Know. Before it matters
Canarytokens is a free tool that helps you discover you’ve been breached by having attackers announce themselves.
The tokens allow you to implant traps around your network and notifies you as soon as they are triggered.
The tokens allow you to implant traps around your network and notifies you as soon as they are triggered.
Операционной системе необходимы драйверы для любого устройства, которое потенциально может быть подключено к системе. Неудивительно, что драйверы устройств занимают огромную часть кода ОС. Исследования ядра Linux показали, что 70% кода - драйверы. Когда кто-то говорит, что ОС это миллионы строк кода, это значит, что ОС это миллионы строк кода драйверов. Конечно, для каждой конкретной инсталляции большинство этого кода неактивно.
Что более грустно - драйверы пишутся любителями, в отличие от основного кода ядра, написанного хакерами, в правильном смысле этого слова. Теперь понятно почему драйверы - основная причина крэша ядра
#ostep #linux #os
Что более грустно - драйверы пишутся любителями, в отличие от основного кода ядра, написанного хакерами, в правильном смысле этого слова. Теперь понятно почему драйверы - основная причина крэша ядра
#ostep #linux #os
== Виртуальная память в 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. Сдвиг остается прежним.
Каждая виртуальная страница (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 содержатся не только данные о сопоставлении виртуальных и физических страниц. Например:
-
-
-
-
- ...
Пейджинг гибкий, упрощает управление свободным пространством. С ним нет внешней фрагментации, поскольку используются страницы одинакового размера. Освободившийся физический фрейм легко занимается новой страницей того же размера. Однако пейджинг всё ещё дорогая операция и не всегда эффективная (чтобы занять 1 бит в памяти, требуется выделить целых 4 КБ на страницу)
#OS #OSTEP #memory #vm
-
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
Пейджинг - тяжелая операция. Как это часто бывает с научными и техническими инновациями, в первые годы его считали неэффективным и бесполезным. Понадобилось больше десяти лет, чтобы оптимизировать его и использовать в промышленных системах.
В оптимизации этого процесса помогла, как часто бывает, аппаратная составляющая. Page Table в отдельную структуру внутри CPU - Translation Lookaside Buffer. Это ещё одна функция уже известного нам MMU.
Кроме этого, для оптимизации работы Page Table используются разные её организации: линейная, уменьшенная, инвертированная
#OS #OSTEP #memory #vm
У MS есть полезный обновляющийся портал с гайдам, схемами и полезными ссылками.
Вот, например, по security
https://learn.microsoft.com/en-us/security/
#security
Вот, например, по security
https://learn.microsoft.com/en-us/security/
#security
Docs
Security hub - Security
Cybersecurity documentation, training, and certifications for security engineers, security operations analysts, and identity and access administrators.
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.
Доклад будет про устройство систем DPI и интернет-блокировкам на их основе, историей развития на примере России, способами обхода.
Спикер: известный в СНГ исследователь ValdikSS.
Хабр: https://habr.com/ru/users/ValdikSS/
GitHub: https://github.com/ValdikSS/
Сбор гостей: 19:30
Начало докладов: 20:00
Адрес: г.Астана, пр.Улы-Дала 5/2, KHS HUB.
Исследователи из компании 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
Источник: https://www.anti-malware.ru/news/2022-10-10-111332/39698
Сама CVE
#cve #security
Anti-Malware
В JavaScript-библиотеке и песочнице vm2 нашли критическую уязвимость
Исследователи из компании Oxeye обнаружили критическую уязвимость в популярной JavaScript-библиотеке vm2. Брешь получила имя “SandBreak“ и 10 баллов по шкале CVSS. Специалистам по кибербезопасности,