Продолжу тему защиты информации на VM.
Зашифрованные диски (luks), обеспечивают защиту от кражи самого диска, а что делать если диск взламывает имеющий контроль над железом, на котором VM? Потенциально он может вытащить ключ шифрования из памяти и расшифровать luks, получив доступ ко всему. Предлогаю продолжить усложнять жизнь любителям чужих секретов.
В посте 3 была использована связка clevis/tang, но эта прочка умеет не только luks расшифровывать, но и много другого полезного. Используем их для защиты локальных секретов. Подготовка секретов:
# Простой секрет
echo -n "MySuperSecretDBPassword123" | clevis encrypt tang '{"url":"http://ip-tang-server"}' > ~/secret.jwe
# Несколько секретов в json
echo -n {"accaunt1": {"active": "active.accaunt", "memo": "memo.accaunt"}, ...} > ~/key.json
clevis encrypt tang '{"url":"http://ip-tang-server"}' < ~/key.json > ~/secret.jwe && rm -f ~/key.json
Для использовании в скриптах написал на python простую функцию:
# Для расшифровки простого секрет:
from pathlib import Path
import subprocess
def get_secret():
path = Path("/path/to/secret.jwe")
encrypted_data = path.read_bytes()
try:
return subprocess.run(
["clevis", "decrypt"],
input=encrypted_data,
capture_output=True,
check=True,
timeout=10,
).stdout.decode("utf-8")
except Exception:
return "Ошибка расшифровки Clevis"
# Для расшифровки json в dict:
from pathlib import Path
import json, subprocess
def get_secret():
path = Path("/path/to/secret.jwe")
encrypted_data = path.read_bytes()
try:
return json.loads(subprocess.run(
["clevis", "decrypt"],
input=encrypted_data,
capture_output=True,
check=True,
timeout=10,
).stdout.decode("utf-8"))
except Exception:
return "Ошибка расшифровки Clevis"
Если полученный секрет из этой функции не сохранять в промежуточные переменные, а сразу отдавать "потребителю" секрета, то Ваш секрет проживёт в памяти доли секунд. А расшифровавший диск, получит лишь зашифрованный файл.
Так же стоит соблюдать гигиену работы на сервере. И это касается, в первую очередь, очистки ~/.bash_history. Сам всегда, при первой настройки сервера, отключаю ведение истории bash и после повторного входа на сервер удаляю .bash_history.
echo 'set +o history' >> ~/.bash_profile
Во вторых, не храните чувствительную информацию на внешних VM/BM. Ну а если храните, то в зашифрованном виде с надёжным паролем. Всем безопасности.





