Криптография для аналитика SOC
Базовые понятия: кодирование, хеширование, шифрование
Кодирование (Encoding)
Кодирование — это преобразование данных в другой формат без цели их скрыть. Оно используется для удобства передачи или хранения информации, но не обеспечивает защиту от несанкционированного доступа.
Примеры алгоритмов кодирования:
Base64 – применяется для передачи бинарных данных в текстовом виде (например, вложения в email или веб-запросах). Обычно выглядит как "бессмысленный" набор букв и цифр. Длина должна быть кратна 4 (иначе дополняется
=
в конце). Используются символы:A-Z
,a-z
,0-9
,+
,/
,=
(padding). Если есть другие символы (например,!
,@
), это не чистый Base64.Чаще всего используется в скриптах Powershell для обфускация вредоносных payload. Может применяться для скрытия данных в логах или DNS-туннелировании.
powershell -EncodedCommand UwB0AGEAcgB0AC0AUAByAG8AYwBlAHMAcwAgACIAYwBhAGwAYwAuAGUAeABlACIA POST /api/data=U3RhcnQtUHJvY2VzcyBjYWxjLmV4ZQ==
Характерно для полезной нагрузки meterpreter, Cobalt и некоторых других инструментов. Хотя может тспользоваться и легитимными инструментами. Например, Ansible дважды кодирует base64 выполняемые команды.
URL-encoding (Percent-encoding) – заменяет спецсимволы в URL на
%
-последовательности (пробел →%20
).http://example.org/index.php/file%3D..%2F..%2F..%2F..%2F..%2F..%2F..%2Fvar%2Flog%2Fauth.log%26c%3Did
Обычно кодировка происхоит автоматически в браузере. Иногда для обхода WAF может применяться двойной URL encode.
Hex (шестнадцатеричное представление) – преобразует байты в ASCII-строку (например,
0x41
→"A"
). Может встречаться как в виде просто чисел:65786563202f62696e2f62617368202d6320226d616c6963696f75732e736822
Так и с
\x
:\x65\x78\x65\x63\x20\x2f\x62\x69\x6e\x2f\x62\x61\x73\x68\x20\x2d\x63\x20\x22\x6d\x61\x6c\x69\x63\x69\x6f\x75\x73\x2e\x73\x68\x22
Важно: Кодирование ≠ Шифрование! Его можно легко обратить стандартными инструментами (например, echo "SGVsbG8=" | base64 -d
).
Base64
"SGVsbG8="
A-Z, a-z, 0-9, +, /, =
HEX
"48656C6C6F"
Только 0-9, A-F
, длина чётная
URL-encoding
"%2Fbin%2Fsh"
Начинается с %
, содержит %XX
Злоумышленники часто используют кодирование (Base64, URL-encoding, HEX и др.) для маскировки вредоносных команд, обхода сигнатур IDS/IPS и сокрытия атак в логах или сетевом трафике.
Например, строка UwB0AGEAcgB0AC0AUAByAG8AYwBlAHMAcwAgACIAYwBhAGwAYwAuAGUAeABlACIA
в логах выглядит как случайный набор символов, но после декодирования из Base64 превращается в команду Start-Process "calc.exe"
.
Раскодирование позволяет увидеть истинное содержимое.
Поэтому важно сначала снять кодирование, а потом применять правила обнаружения к чистому тексту, повышая шансы на обнаружение атаки.
Хеширование (Hashing)
Хеширование — это одностороннее преобразование данных в фиксированную строку (хеш). Основные свойства:
Детерминированность – одинаковые входные данные всегда дают одинаковый хеш.
Необратимость – по хешу нельзя восстановить исходные данные.
Уникальность – даже небольшое изменение входа резко меняет хеш ("лавинный эффект").
Где применяется в безопасности?
Проверки целостности файлов (например, скачанный дистрибутив ПО).
Хранения паролей (в хешированном виде).
Анализа вредоносных файлов (сравнение хешей в базах угроз).
Основные алгоритмы хеширования
MD5 (Message-Digest Algorithm 5)
Длина хеша: 128 бит (32 hex-символа).
Уязвимости: Уже взломан (возможны коллизии — два разных файла с одинаковым хешем).
Пример хеша:
echo -n "hello" | md5sum # Результат: 5d41402abc4b2a76b9719d911017c592
SHA-1 (Secure Hash Algorithm 1)
Длина хеша: 160 бит (40 hex-символов).
Статус: Устарел (Google нашел коллизии в 2017).
Пример хеша:
echo -n "hello" | sha1sum # Результат: aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
SHA-256 (часть семейства SHA-2)
Длина хеша: 256 бит (64 hex-символа).
Применение: Блокчейн (Bitcoin), TLS-сертификаты.
Пример хеша:
echo -n "hello" | sha256sum # Результат: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-3 (Keccak)
Криптографическая хеш-функция, разработанная в 2015 году как часть нового стандарта NIST
Невосприимчив к атакам длины (length-extension), которые возможны в SHA-2. Считается устойчивым к атакам на квантовых компьютерах (в отличие от SHA-2).
Нет известных эффективных коллизий (в отличие от SHA-1 и теоретических уязвимостей SHA-256).
Пример хеша:
echo -n "hello" | sha3sum -a 256 # Результат: 3338be694f50c5f338814986cdf0686453a888b84f424d792af4b9202398f392
Поиск в базах угроз
VirusTotal (поиск по MD5/SHA1/SHA256).
MISP (корреляция хешей с известными атаками).
Всегда проверяйте файлы по нескольким хешам (например, MD5 + SHA-256 + Imphash).
Что такое Imphash?
Imphash (Import Hash) — это специальный хеш, который вычисляется на основе импортируемых функций PE-файла (исполняемых файлов Windows). Это мощный инструмент для кластеризации вредоносных файлов.
Зачем нужен Imphash?
Помогает находить похожие вредоносные файлы, даже если их основной хеш (MD5/SHA1) разный. Два разных файла могут иметь разные SHA-256, но одинаковый Imphash, если используют одни и те же API.
Используется в анализе APT-групп (например, Lazarus, TA505).
Как вычисляется?
Берутся все импортируемые функции (из
kernel32.dll
,user32.dll
и др.).Сортируются в алфавитном порядке.
Хешируются через MD5.
Инструменты:
PEStudio
CAPA (от Mandiant)
Хеширование паролей
Хранение паролей в открытом виде — критическая уязвимость. Вместо этого системы используют хеширование с дополнительными мерами защиты.
Базовый принцип
Пользователь регистрируется: вводит пароль (например,
MyPass123
).Система хеширует пароль (например, SHA-256 →
a2f5...
).Хеш сохраняется в БД, оригинальный пароль не хранится.
При аутентификации:
Введённый пароль хешируется.
Сравнивается с хешом из базы.
Радужные таблицы
Простого хеширования паролей недостаточно: злоумышленники используют радужные таблицы (предвычисленные хеши) для атак.
Решение: Добавление случайной "соли" (salt) к паролю перед хешированием:
hash("password" + "x7gH2") → совсем другой хеш, чем hash("password").
Как работает:
Генерируется уникальная соль для каждого пользователя (например,
x7gH2
).Пароль комбинируется с солью:
hash("MyPass123" + "x7gH2")
.В БД сохраняются и хеш, и соль.
-- Правильно: хранение соли и хеша
INSERT INTO users VALUES ('admin', 'a1b2c3', 'sha256$salt$x7gH2$a2f5d...');
Почему это безопаснее?
Даже одинаковые пароли дают разные хеши.
Невозможно использовать радужные таблицы.
Pepper (Дополнительный секрет)
Pepper — это общий секретный ключ, известный только серверу. Даже при утечке БД без pepper хеши бесполезны.
hash = sha256(password + salt + pepper) # Pepper не хранится в БД!
Медленные хеш-функции
Обычные хеши (SHA-256, MD5) слишком быстрые для паролей и позволяют проводить атаку подбором (Оффлайн-брутфорс). Вместо них используют медленные хеш-функци: PBKDF2, bcpypt, Argon2.
Где хранят хеши паролей?
Локальные системы:
Windows: SAM-файл (NTLM-хеши).
Linux:
/etc/shadow
(используетcrypt()
с солью).
Веб-приложения:
SQL-базы (MySQL, PostgreSQL).
LDAP (Active Directory).
Пример записи в /etc/shadow
(Linux):
user:$6$salt$a2f5d...:19485:0:99999:7:::
$6
— алгоритм (SHA-512).salt
— случайная строка.
Шифрование
Шифрование — это процесс преобразования данных в нечитаемый формат для защиты конфиденциальности. В криптографии используются два основных подхода: симметричное и асимметричное шифрование.
Симметричное шифрование
Используется один ключ для шифрования и расшифровки.
Отправитель и получатель должны заранее обменяться ключом.
Если ключ украден — все данные можно расшифровать.
Где встречается
Зашифрованный трафик (например, malware C2 с AES).
Ransomware (файлы шифруются симметричным алгоритмом).
Шифрование дисков (BitLocker, VeraCrypt)
Kerberos: Использует симметричное шифрование (AES) для билетов (tickets). Ключом выступает хеш пароля пользователя/сервиса.
Асимметричное шифрование
Используется пара ключей:
Публичный (public key) — для шифрования.
Приватный (private key) — для расшифровки.
Не требует предварительного обмена секретом.
Где встречается
SSH-доступ (аутентификация по ключам). Пользователь генерирует пару ключей. Публичный ключ (
id_ed25519.pub
) копируется на сервер в~/.ssh/authorized_keys
. При подключении SSH проверяет подпись закрытым ключом, не передавая его.Если злоумышленник добавит свой публичный ключ в
authorized_keys
, он сможет авторизовываться на сервере по своему закрытому ключу, то есть он получит постоянный доступ к серверу.TLS-сертификаты (проверка подлинности сайтов). Цепочка доверия — это иерархия цифровых сертификатов, которая гарантирует, что сервер или клиент являются теми, за кого себя выдают. При подключении сервер отправляет цифровой сертификат, содержащий подпись CA, подтверждающий его подлинность.
По открытому ключу клиент может удостовериться, что сертификат продписан доверенным CA.
Блокчеин и электронные подписи
Гибридные схемы
На практике часто комбинируют оба метода:
Асимметричное шифрование для обмена симметричным ключом (например, в TLS).
Симметричное шифрование для основного трафика.
Пример в HTTPS:
Клиент получает публичный ключ сервера.
Генерирует временный симметричный ключ (сессионный).
Шифрует его RSA и отправляет серверу.
Дальнейший трафик идёт через AES.
Last updated
Was this helpful?