LIMB
Вход Регистрация

тема

OS с функцией Amnesia (special for LIMB.cc)

ec5745y · · 5 ответов · 876 просмотров

Привет! В этой статье я начинаю серию материалов о создании дистрибутива, в котором безопасность является основным приоритетом!

Современные дистрибутивы, позиционирующие себя как безопасные, меня не устраивают. У всех есть неприемлемые проблемы: ограниченный функционал без возможности добавляния нового, принуждение к использованию определённого софта, закрытый код и гнилая документация. В этой статье я покажу, как собрать LiveCD с функцией amnesia (полной выгрузкой системы в ram, ramroot). 
Также я расскажу, как избежать некоторых ошибок, допущенных в других дистрибутивах. 
Cтатью пишу на этой ОС. Отныне и выход на форум буду осуществлять исключительно через неё.


Спойлер: Критика
Если вы используете операционную систему, ориентированную на защиту от цифровой криминалистики, то это почти наверняка будет Tails, Whonix или QubesOS.

У каждой ОС основной спонсор - OTF (Open Technology Fund), который получает значительную часть финансирования от государства через USAGM (40 млн в 2023 году). 


		
		
	


	
		
	



Документация расплывчата, разобраться сложно.

Частенько возникает 404 даже на очень важных ссылках.


		
	



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

ОС принуждают использовать Tor. К Tor есть претензии - в ряде случаев его применение неуместно и может критически навредить безопасности, а отключение Tor затруднительно или вовсе невозможно (ломает дистрибутив). Более того, Tor блокируют в ряде стран, что делает дистрибутивы полносью бесполезными.


		
	



При работе в виртуальной машине возможен взлом путём обхода самой виртуализации, ну или если сам хост был взломан.

В случае LiveCD, на примере Tails, при извлечении флешки ОС перестаёт работать, шифруя свою оперативную память и вызывая kernel panic. Да, затирание RAM в случае угрозы - это круто, но вместо индикатора опасности могло бы быть не извлечение флешки, а, например, комбинация клавиш. Если ПК будет взломан во время сессии и в него будет подключена флешка - данные на ней могут быть перезаписаны. 

Этого бы не произошло при её извлечении, чего не позволяет дистрибутив.



Хлам. ОС не должна оставлять следов, поэтому должна полностью работать в RAM. Однако огромное количество ненужного ПО расходует память, а также увеличивает возможности для атаки!



Мои цели: ОС должна быть простой и минималистичной; 

                    всё, что может быть постоянным хранилищем, должно быть изъято после запуска; 

                    установка нового ПО должна быть простой; 

                    всё ПО - open source.



В качестве базового дистрибутива для форка я взял Gentoo Stage3.
Спойлер: Установка ОС
Спойлер: Разметка диска
Смотрим разделы, выбираем имя целевого раздела (в примере /dev/sdX)

lsblk



Создаём новую разметку.

1:EF02 - BIOS 10 мб

2:EF00 - EFI 500мб

3:8300 - всё остальное место под корень

sgdisk -o -n 1:0:+10M -t 1:EF02 -n 2:0:+500M -t 2:EF00 -n 3:0:0 -t 3:8300 /dev/sdX



Форматируем ESP в FAT32 (для UEFI)

mkfs.fat -F32 /dev/sdX2



Создаём EXT4 и ставим метку OS_ROOT

mkfs.ext4 -L OS_ROOT /dev/sdX3



Монтируем корень в /mnt и ESP в /mnt/boot

mkdir /mnt

mount /dev/sdX3 /mnt

mkdir /mnt/boot

mount /dev/sdX2 /mnt/boot
Спойлер: Заливка stage3
Качаем stage3 (минимальный набор) из https://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64-openrc/


		
	

cd /mnt

wget https://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64-openrc/stage3-amd64-openrc-20250817T170357Z.tar.xz

tar xpvf stage3-amd64-openrc-20250817T170357Z.tar.xz --xattrs-include='*.*' --numeric-owner



Пробрасываем proc/sys/dev в корень и копируем DNS.

mount -t proc /proc /mnt/proc

mount --rbind /sys /mnt/sys

mount --rbind /dev /mnt/dev

cp -L /etc/resolv.conf /mnt/etc/



Заходим в окружение и подгружаем переменные профиля.

chroot /mnt /bin/bash

source /etc/profile
Спойлер: Настройка Portage
nano /etc/portage/make.conf
-systemd - без systemd
-elogind - без логин-демона

Code:
USE="-systemd -elogind X dbus udev"

Получаем снапшот ebuild и синхронизируем зеркала
emerge-webrsync
emerge --sync


Ставим OpenRC
emerge -av openrc
rc-update add local default
Спойлер: Ядро
Ставим исходники и настраиваем ядро. 

Включаем:

TMPFS - корень в RAM.

OverlayFS - для оверлея.

BLK_DEV_INITRD - поддержка initramfs

SQUASHFS (на live)

emerge -av gentoo-sources

cd /usr/src/linux*

make menuconfig



Сборка и установка ядра, модулей

make -j$(nproc)

make modules_install

make install
Спойлер: Собираем initramfs
Готовим каркас initramfs и кладём busybox
mkdir -p /root/initramfs/{bin,sbin,etc,proc,sys,newroot,mnt}
emerge -av busybox
cp -a /bin/busybox /root/initramfs/bin/
for i in sh mount switch_root rsync blkid; do ln -s busybox /root/initramfs/bin/$i; done


Скрипт для инициализации initramfs:
nano /root/initramfs/init
Bash:
#!/bin/sh
mount -t proc proc /proc
mount -t sysfs sys /sys
mount -t devtmpfs dev /dev

ROOTDEV="$(blkid -L OS_ROOT)"
[ -z "$ROOTDEV" ] && exec sh
mount -o ro "$ROOTDEV" /newroot || exec sh
echo "Копирование в RAM"
mount -t tmpfs -o size=6G tmpfs /mnt             #Свой размер
rsync -aHx --exclude=/proc --exclude=/sys --exclude=/dev /newroot/ /mnt/ || exec sh
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
echo "Переключение в RAM root"
exec switch_root /mnt /sbin/init
Упаковываем initramfs в newc и кладём в /boot
chmod +x /root/initramfs/init
cd /root/initramfs
find . -print0 | cpio --null -ov --format=newc | gzip -9 > /boot/initramfs.img
Спойлер: Загрузчик
BIOS в MBR диска + раздел EF02
UEFI в ESP как removable (будет грузиться без записи в NVRAM)

Генерируем конфиг

grub-mkconfig -o /boot/grub/grub.cfg
Спойлер: Cервисы и графика
Dbus для desktop софта.
emerge -av sys-apps/dbus
rc-update add dbus default


Драйверы и сервер X, мета xfce.
emerge -av x11-base/xorg-drivers x11-base/xorg-server
emerge -av xfce-base/xfce4-meta


Slim будем использовать как дисплей менеджер.
emerge -av x11-misc/slim
rc-update add slim default


Создаём пользователя, даём права wheel, прописываем запуск XFCE при startx/slim.
useradd -m -G users,wheel neko
passwd neko
echo "exec startxfce4" > /home/neko/.xinitrc
chown neko:neko /home/neko/.xinitrc
chmod 644 /home/neko/.xinitrc


Автовход юзеру и старт XFCE.
nano /etc/slim.conf
Code:
default_user neko
login_cmd exec startxfce4
Спойлер: fstab
nano /etc/fstab
Все данные в этих точках теряются!
Для примера: 

Code:
tmpfs     /tmp      tmpfs defaults,noatime,mode=1777 0 0
tmpfs     /var      tmpfs defaults,noatime,mode=1777 0 0
tmpfs     /home     tmpfs defaults,noatime,mode=1777 0 0
Спойлер: Дополнительное ПО
Установка tor, firefox и kleopatra.
emerge -av net-vpn/tor www-client/firefox app-crypt/kleopatra

В список не стоит добавлять ненужные пакеты, старайтесь избегать этого.
Спойлер: Возможно полезный бонус
Фотографы боятся случайно удалить ценные снимки. Поэтому в SD и адаптерах к microSD всегда есть тумблер Lock, который при включении физически блокирует запись данных, делая карту только ReadOnly. Очень удобная и надежная функция!
Не удалось прогрузить медиа

Я написал небольшой bash скрипт который очень надёжно шифрует данные, хоть и очень медленно (не помеха, если файл, это всего лишь txt пароли :)).

Небольшая фича!
Если в файл добавить новые данные, они будут дозаписаны в зашифрованном виде, при этом уже зашифрованные данные не изменяются.



nano scr.sh
Bash:
#!/bin/bash

read -p "Действие (e/d): " act
read -p "Файл: " file
read -s -p "Пароль: " pass
echo

gen_hash() {
    sec="$pass"; hash=""
    for ((i=0;i<$1;i++)); do
        h=$(echo -n "$sec" | sha512sum | awk '{print $1}')
        hash+=${h:0:1}
        sec=${h:1:128}
    done
    echo "$hash"
}

if [[ "$act" == "e" ]]; then
    hex=$(base32 "$file" | od -An -tx1 | tr -d ' \n')
    hash=$(gen_hash ${#hex})
    enc=""
    for ((i=0;i<${#hex};i++)); do
        c=$((0x${hex:i:1}+0x${hash:i:1}))
        ((c>15)) && c=$((c-16))
        enc+=$(printf "%x" $c)
    done
    echo "$enc" > enc.txt
    echo "Готово! Принимай enc.txt"

elif [[ "$act" == "d" ]]; then
    hex=$(tr -d '\n' < "$file")
    hash=$(gen_hash ${#hex})
    dec=""
    for ((i=0;i<${#hex};i++)); do
        c=$((0x${hex:i:1}-0x${hash:i:1}))
        ((c<0)) && c=$((c+16))
        dec+=$(printf "%x" $c)
    done
    echo "$dec" | xxd -r -p | base32 -d > dec.txt
    echo "Готово! Принимай dec.txt"
else
    echo "Буквочка 'e' для шифрования, а 'd' для дешифровки."
fi
bash scr.sh
Пример вывода (пароль selfcare):
8e6458f072747e130c847cd0842a5a54cd1e953e34335b4ac1e5d646ca05d91e3a544fe1f6f6a967ee565e767d246fa2affe732d044794e3ac32b28b5eef6ef366f3fb5b0a093604681d5add049f478df2df58e4f2a38dacb961d76d71986c9bb6bd906e49fbe1006561c99f6fb66ffe4d2ea433768943125f50f18707e13ee1569b8315675cecb65bd651675d55b099d749
Пример вывода (пароль - 0; данные - нули):
780f4755cb2dcdce79419ef245cbb40608b31b6ba660b80b11bc5e3a04c7c49dbab9b317c06d3949b62830775e22de2a809d4dd69aee345c0f4d19
Если у вас есть идеи по улучшению этой ОС, я постараюсь реализовать ваши предложения!
Я планирую постепенно совершенствовать эту ОС, добавляя всё новые и новые функции!
👍62 👏14 🤔14 😢13
Интересная статья, правда пока что тут только про базовую настройку ОС.

Но, хотелось бы уточнить по поводу защиты сети, какие аналоги Tor можно более безопасно использовать? i2p? Если да, то он создан для общения внутри сети, а что стоит использовать для внешних сервисов ?

Ещё было бы здорово добавить механизм ввода пароля под принуждением(когда юзер вводит специальный пароль при входе все данные уничтожаются, допустим диск зашифрован и ключи шифрования уничтожается). Так же хорошо бы добавить защиту от физических атак вроде Cold Boot или DMA, том же тейлз она есть.

Так же у меня вызывает сомнение использование grub, как по мне он не особо безопасен . Как альтернативу можно использовать Syslinux, он достаточно простой и меньше поверхность атаки.
👍2
Ответhipeople

Интересная статья, правда пока что тут только про базовую настройку ОС. Но, хотелось бы уточнить по поводу защиты сети, какие аналоги Tor можно более безопасно использовать? i2p? Если да, то он создан для общения внутри…

Привет hipeople! Спасибо большое за комментарий!

Есть несколько интересных вариантов. Я бы посоветовал Mixnet (Nym) (ссылка). Он лучше справляется с защитой от анализа трафика, по сравнению с Tor и даже скрывает метаданные. К сожалению, о нём почти никто не знает.
Ещё один хороший вариант - Yggdrasil (ссылка). Он не предоставляет прямого выхода в интернет, поэтому для доступа во внешний мир придётся предварительно поднять VPN и уже через сеть Yggdrasil осуществлять к нему подключение. Для Yggdrasil существует большое количество модулей и расширений, его можно превратить в hidden service. У него живое сообщество, в том числе русскоязычное (ссылка).

Теперь о системе. На самом деле всё наоборот! 
Окружение, в которое заходит пользователь, абсолютно пустое, а значит, и шифровать в нём нечего. Концепция ОС подразумевает, что работа ведётся на устройстве без возможности persistent хранения. То есть ПК, с которого запускается система, не должен иметь установленных дисков, а сама флешка должна быть извлечена сразу после старта.

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

Добавил LUKS, обновлённый скрипт /root/initramfs/init
Тревожная комбинция - "zxc"

Bash:
#!/bin/sh
mount -t proc proc /proc
mount -t sysfs sys /sys
mount -t devtmpfs dev /dev

ROOTDEV="$(blkid -L OS_ROOT)"
[ -z "$ROOTDEV" ] && exec sh
cryptsetup luksOpen "$ROOTDEV" cryptroot || exec sh
mount -o ro /dev/mapper/cryptroot /newroot

dd if=/dev/urandom of=/tmp/ramkey.bin bs=32 count=1

(
  seq=0
  while true; do
    read -n1 key
    case $seq:$key in
      0:z) seq=1 ;;
      1:x) seq=2 ;;
      2:c)
          while true; do printf '\0%.0s' {1..32768} > /tmp/ramkey.bin; done
          ;;
      *) seq=0 ;;
    esac
  done
) &

echo "Копирование системы в RAM"
mount -t tmpfs -o size=6G tmpfs /mnt
rsync -aHx --exclude=/proc --exclude=/sys --exclude=/dev /newroot/ /mnt/ || exec sh
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys

echo "Переключение в RAM root"
exec switch_root /mnt /sbin/init
Касательно DMA - стоит просто осмотреть технику перед использованием:)

Больше спасибо, ознакимился с информацией касательно grub, он содержал много уязвимостей и плохо подходит.
Уместен будет Linux Kernel EFI stub (ссылка).

mkdir -p /mnt/boot/EFI/Linux
cp /boot/vmlinuz-* /mnt/boot/EFI/Linux/vmlinuz.efi
cp /boot/initramfs.img /mnt/boot/EFI/Linux/initramfs.img
efibootmgr -c -d /dev/sdX -p 2 -L "EFISTUB" -l "\EFI\Linux\vmlinuz.efi" -u "root=/dev/sdX3 initrd=\EFI\Linux\initramfs.img rw quiet"


Спойлер: Хранение ключей
Запоминать ключи в голове невозможно. Если хранить их в зашифрованном виде, под давлением паяльника пароль может быть раскрыт. Любой криптоаналитик обнаружит двойное дно, поэтому понадобится сразу два паяльника.
Повредить данные невозможно - битовая копия.
У меня есть элегантное решение этой проблемы, о котором раньше никто не говорил. Сегодня я напишу об этом статью, и как только она будет готова, дам знать!
👍5
Когда будет достаточно функционала - соберу образ, добавлю этот ханнипот!
В этой статье я расскажу теорию, покажу и сделаю простой ханнипот, который значительно повысит безопастность ваших систем.

Безопасных систем не существует. Что бы ты ни делал, сколько бы дыр ни закрыл - всегда найдутся новые.
Исправить это невозможно, однако можно хотя бы обнаружить! При обнаружении атаки - её успешность стремиться к нулю, в конечном счёте - можно включить компьютер, чтобы наверняка предотвратить вторжение 
:)

Не удалось прогрузить медиа
В начале 2000-х существовал BlackICE на Windows XP, который мог обнаруживать подозрительные подключения к ПК, показывать их...
  • Не удалось прогрузить медиа
👍3
Ответhipeople

Интересная статья, правда пока что тут только про базовую настройку ОС. Но, хотелось бы уточнить по поводу защиты сети, какие аналоги Tor можно более безопасно использовать? i2p? Если да, то он создан для общения внутри…

Привет!
Проблема слива данных под давлением существует уже давно и почему-то до сих пор не имеет универсального решения.

Сперва про проблему касательно хранения данных в зашифрованном виде:
Если хранить данные в зашифрованном виде, всегда остаётся риск раскрытия пароля под давлением. Использование техники двойного дна тоже не помогает, потому что каждый криптоаналитик легко заметит подобный приём. 
Полное уничтожение информации также не гарантирует безопасности, ведь перед вскрытием всегда создаётся битовая копия, и даже если оригинал будет уничтожен, бекап сохранится в резерве...
  • Не удалось прогрузить медиа
👍4
Ответec5745y

Я бы посоветовал Mixnet (Nym) ( ссылка ). Он лучше справляется с защитой от анализа трафика, по сравнению с Tor и даже скрывает метаданные. К сожалению, о нём почти никто не знает.

1. Nym - мусор, достаточно почитать политику пользовательских данных, чтобы это понять
2. Nym платный, что добавляет side-attack вектор при оплате
3. Он никак не защищает от корреляции по объему трафика
4. Как и в торе больше всего нод в US и DE (https://explorer.nymtech.net/)
5. Сейчас токены покупаются и могут использоваться для оплаты только в их оффициальном клиенте, который требует авторизацию с привязкой по почте
6. Вероятность роутинга через ноду зависит от количества стейкнутых монет в сеть, очевидно что опер может просто деньгами закидать свою модифицированную клиентскую ноду чтобы мониторить трафик любителей анонимности и маркировать его

Ответec5745y

Ещё один хороший вариант - Yggdrasil ( ссылка ). Он не предоставляет прямого выхода в интернет, поэтому для доступа во внешний мир придётся предварительно поднять VPN и уже через сеть Yggdrasil осуществлять к нему…

Yggdrasil вообще не предназначен для создания хоть сколько нибудь анонимной сети. Это просто mesh сеть, нормальные поцаны используют его чтобы подключать две ноды за NAT, Сеть вообще никак не анонимизирует трафик, единственное что она добавляет это релей, через который ты ходишь в сеть. Ничем не отличается от бесплатного VPN

Не знаю почему вы вцепились так в физические атаки, если к вам постучали значит что вы проебались с сетевой частью и уже есть доказательная база для обыска. Касательно live образов, я не знаю для каких целей это вообще может быть использовано, вам в любом случае надо будет хранить данные на устройствах для работы. Контакты, учетки, аккаунты, которые все равно будут занесены в дело при выбивании пароля. В любом случае вас могут посадить даже на основании метаданных и анализе сетевого трафика
👍3

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.