Скачивание ISO-образов Windows с неофициальных источников может привести к установке модифицированных версий с вредоносным ПО. Для обеспечения безопасности рекомендуется проверять контрольные суммы файлов.
Get-FileHash "C:\Path\to\your\file.iso" -Algorithm SHA256
По умолчанию используется алгоритм SHA256, но можно указать другие: SHA1, SHA384, SHA512, MD5.
certutil -hashfile "C:\Path\to\your\file.iso" SHA256
1. На сайте Visual Studio Downloads (требуется учетная запись Microsoft).
2. На ресурсе RG-Adguard, где можно искать по хешу.
$expectedHash = "c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d"
(Get-FileHash "C:\Path\to\your\file.iso" -Algorithm SHA256).Hash -eq $expectedHash
Если результат True, файл подлинный; если False - файл может быть поврежден или подделан.
#windows #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2
Когда вы скачиваете файл из браузера, а потом открываете его свойства, Windows может предупредить: «Файл получен с другого компьютера и может быть небезопасным». Это происходит не случайно.
Файл, скачанный на NTFS-диск, получает специальную метку в альтернативном потоке данных (Alternate Data Stream, ADS) с именем Zone.Identifier. Эта метка добавляется браузером автоматически и никак не зависит от расширения — она будет даже у mp3, .txt или .jpg.
Get-Content -Path ".\hard_rock.mp3" -Stream Zone.Identifier
Или в Блокноте:
notepad.exe hard_rock.mp3:Zone.Identifier
[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://ya.ru
HostUrl=https://ya.ru/file.mp3
0 - Мой компьютер
1 - Локальная интрасеть
2 - Доверенные сайты
3 - Интернет (по умолчанию для всего, что скачано)
4 - Ограниченные сайты
Даже если вы переименуете файл или перенесёте его, метка сохраняется. Некоторые антивирусы и скрипты используют эту информацию для усиленной проверки.
1. Через свойства файла → Разблокировать
2. Через PowerShell:
Unblock-File .\hard_rock.mp3
#windows #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥7🤔3❤1
Python - язык простой и удобный, но в плане безопасности исходников у него есть слабое место: скрипты легко читаются, модифицируются и анализируются. Если ты разрабатываешь утилиту, обрабатываешь конфиденциальные данные или просто хочешь защититься от «любопытных», стоит продумать меры защиты. Разберём основные подходы:
Python автоматически компилирует .py в .pyc, но и их можно дизассемблировать. Более надёжный способ - сборка в .pyd/.so (динамическую библиотеку):
pip install cython
cythonize -i myscript.py
На выходе - скомпилированный бинарник. Исходный код спрятан, но не полностью защищён от реверса.
Использовать PyArmor, который шифрует байткод:
pip install pyarmor
pyarmor obfuscate myscript.py
Использовать Nuitka или PyInstaller - обфускация + упаковка в исполняемый файл:
pyinstaller --onefile myscript.py
Для чувствительных задач - запускай скрипты через Docker, изолируя переменные окружения и доступ к файловой системе.
📍 Используй .env файл + библиотеку python-dotenv📍 Храни секреты в HashiCorp Vault, AWS SSM или аналогах📍 Шифруй конфиги с GPG, если нужно хранить локально
Полной защиты от реверса не будет - Python не компилируемый в машинный код язык. Но затруднить анализ, защитить данные и повысить безопасность вполне реально.
#python #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤2🔥1
Три базовых, но эффективных подхода, которые стоит внедрить в любом API:
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
}
const rateLimit = require("express-rate-limit");
const limiter = rateLimit({
windowMs: 15 * 60 * 1000,
max: 100
});
app.use("/api/", limiter);
const cors = require('cors');
app.use(cors({
origin: 'https://yourfrontend.com'
}));
Не забудьте запретить * в production - это дырка в безопасности.
const jwt = require('jsonwebtoken');
function authenticateToken(req, res, next) {
const token = req.headers['authorization']?.split(' ')[1];
if (!token) return res.sendStatus(401);
jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user) => {
if (err) return res.sendStatus(403);
req.user = user;
next();
});
}
Итого:
Rate Limiting - спасает от злоупотреблений.
CORS - управляет доступом между доменами.
Token-based доступ - дает безопасность и гибкость.
Правильная комбинация этих механизмов - основа для защиты любого публичного API.
#API #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
Security-Enhanced Linux (SELinux) - это механизм управления доступом на уровне ядра, разработанный NSA и Red Hat. Он добавляет ещё один уровень защиты поверх традиционной модели прав доступа в Linux и дает системе возможность жестко контролировать, кто и что может делать в ОС, даже если у процесса уже есть root-доступ.
SELinux реализует модель Mandatory Access Control (MAC) - обязательного управления доступом. В отличие от Discretionary Access Control (DAC), где владелец объекта определяет права, MAC применяет централизованные политики, которым обязаны следовать все процессы и пользователи.
Каждому процессу и файлу присваивается контекст безопасности. Контекст включает в себя:
SELinux определяет, может ли процесс с данным контекстом взаимодействовать с файлом по текущей политике. Если нет - доступ будет заблокирован, даже если пользователь - root.
Enforcing - политика активна, запрещенные действия блокируются
Permissive - действия не блокируются, но журналируются
Disabled - SELinux отключен
Проверить режим можно так:
getenforce
Или через:
sestatus
Если безопасность - ваш приоритет, SELinux однозначно стоит включать. Но как и с любым инструментом, важно сначала его понять.
#SELinux #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤3
В любой продвинутой системе администрирования важнейшая задача - контроль за правами пользователей. Добавление в группу sudo, изменение состава wheel, docker или других критичных групп может дать пользователю слишком много полномочий. И если такие изменения проходят незамеченными - это уже уязвимость. Разберемся, как отслеживать такие события в Linux.
auditctl -w /etc/sudoers -p wa -k sudoers-change
auditctl -w /etc/sudoers.d/ -p wa -k sudoers-include
Потом смотрим:
ausearch -k sudoers-change
ausearch -k sudoers-include
inotifywait -m /etc/sudoers /etc/sudoers.d/ -e modify,create,delete
auditctl -w /etc/group -p wa -k group-change
auditctl -w /etc/gshadow -p wa -k group-shadow
И проверяем, кто добавлен в sudo:
grep sudo /etc/group
auditctl -a always,exit -F arch=b64 -S usermod -S groupadd -S groupdel -S gpasswd -k group-admin
#linux #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Многие думают, что VLAN - это только для крупных корпоративных сетей, но на практике он может оказаться крайне полезным и в небольшом офисе или даже дома. Виртуальные локальные сети позволяют разделить трафик по логике, повысить безопасность и упростить администрирование.
VLAN (Virtual LAN) - это способ логического разделения одной физической сети на несколько изолированных друг от друга сегментов. Устройства в разных VLAN не видят друг друга, пока не настроен маршрутизатор.
Пример на Cisco:
interface FastEthernet0/1
switchport mode access
switchport access vlan 10
Настройка маршрутизации между VLAN при необходимости.
ip link add link eth0 name eth0.10 type vlan id 10
ip addr add 192.168.10.2/24 dev eth0.10
ip link set up eth0.10
Даже в домашних условиях VLAN дает возможность для наведения порядка, контроля и повышения безопасности в сети.
#vlan #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥4🤔2❤1🗿1
Если вы регулярно работаете с Ansible - важно не только писать рабочие плейбуки, но и контролировать, когда, кем и как они были запущены. Особенно, если в вашей инфраструктуре Ansible используется как часть CI/CD или централизованного управления.
/etc/ansible/ansible.cfg (или в локальной копии ansible.cfg) пропишите:
[defaults]
log_path = /var/log/ansible.log
Ansible начнет писать все свои действия в указанный файл. Убедитесь, что у пользователя, запускающего Ansible, есть права на запись.
- name: Установка nginx
apt:
name: nginx
state: present
tags:
- web
- nginx
Это поможет фильтровать задачи в логах, запускать только нужные части и документировать назначение.
- name: Показываем значение переменной
debug:
var: some_variable
Также можно логировать hostname, пользователя и дату запуска, добавляя кастомную задачу:
- name: Логируем запуск
shell: echo "{{ ansible_date_time.iso8601 }}: {{ inventory_hostname }} - {{ ansible_user }}" >> /var/log/ansible_run.log
Например, json или yaml:
[defaults]
stdout_callback = yaml
А если хотите логировать в файл в формате JSON, можно использовать:
[defaults]
callback_whitelist = json
stdout_callback = json
log_path = /var/log/ansible-json.log
ansible-playbook site.yml | tee -a /var/log/ansible-run-$(date +%F-%T).log
Так у вас будет отдельный лог под каждое выполнение.
#ansible #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Слабые пароли - одна из важных и актуальных тем. В linux можно усилить требования к паролям через PAM и модуль libpwquality, чтобы пользователи не ставили что-то вроде qwerty123.
yum install libpwquality #centOS
apt install libpam-pwquality #ubuntu/debian
/etc/security/pwquality.conf
Пример строгих настроек:
minlen = 12
minclass = 3
maxrepeat = 2
maxsequence = 3
dictcheck = 1
minlen - минимальная длина пароля
minclass - количество обязательных классов символов (строчные, заглавные, цифры, спецсимволы)
maxrepeat - максимум одинаковых символов подряд
maxsequence - длина допустимой последовательности (abc, 123 и т.д.)
dictcheck - проверка на словарные пароли
/etc/pam.d/common-password # debian/ ubuntu
/etc/pam.d/system-auth # centOS
Находим строку с
pam_pwquality.so и добавляем параметры:
password requisite pam_pwquality.so retry=3 enforce_for_root
retry=3 - количество попыток ввода
enforce_for_root - применить правила даже для root
passwd user
Если пароль не соответствует правилам, PAM выдаст сообщение с указанием, что именно не так.
#security #password
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤2
Если существует риск кражи носителей с данными, стоит задуматься о шифровании. На linux это проще всего реализовать через LUKS, который позволяет зашифровать раздел и работать с ним как с обычным блочным устройством.
apt install cryptsetup # debian
cryptsetup luksFormat /dev/sdb1
cryptsetup luksOpen /dev/sdb1 lukscrypt
После этого появится устройство /dev/mapper/lukscrypt.
mkfs.ext4 /dev/mapper/lukscrypt
mkdir /mnt/crypt
mount /dev/mapper/lukscrypt /mnt/crypt
Теперь раздел доступен в системе, а при следующем подключении для расшифровки нужно будет выполнить
cryptsetup luksOpen и ввести пароль.#LUKS #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
nftables - это замена iptables, встроенная в ядро linux. Она объединяет фильтрацию, NAT и маршрутизацию в единую подсистему и считается более быстрой и удобной. Разберемся, как можно построить базовую защиту сервера.
sudo nft add table inet filter
sudo nft 'add chain inet filter input { type filter hook input priority 0; policy drop; }'
Мы сразу задали policy drop, то есть по умолчанию все запрещено. Теперь разрешим только нужное.
sudo nft add rule inet filter input ct state established,related accept
sudo nft add rule inet filter input iif lo accept
sudo nft add rule inet filter input ip protocol icmp accept
sudo nft add rule inet filter input tcp dport {22,80,443} accept
Что тут происходит:
принимаем все соединения в состоянии ESTABLISHED и RELATED
разрешаем локальный интерфейс (lo)
разрешаем ping (ICMP)
открываем SSH, HTTP и HTTPS
sudo nft add rule inet filter input tcp dport 22 ct state new limit rate 10/minute accept
sudo nft add rule inet filter input tcp dport 22 drop
Теперь на SSH можно будет открыть не более 10 новых подключений в минуту.
# блокируем пакеты без флагов (NULL scan)
sudo nft add rule inet filter input tcp flags == 0 drop
# блокируем XMAS-скан
sudo nft add rule inet filter input tcp flags & (fin|psh|urg) == (fin|psh|urg) drop
sudo nft list ruleset
Сохранить конфиг:
sudo sh -c "nft list ruleset > /etc/nftables.conf"
sudo systemctl enable nftables
sudo systemctl restart nftables
#nftables #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤1
Если нужно показать работу скрипта, но не отдавать исходники - можно скомпилировать его в бинарник через shc. Инструмент преобразует .sh в C-код и собирает исполняемый файл, на выходе пользователь получит работающий бинарник, но не читаемый скрипт.
apt install shc gcc
script.sh:#!/bin/bash
v=$1
echo "Simple BASH script. Entered VARIABLE: $v"
Компилируем:
shc -f -r script.sh
Появятся
script.sh.x (бинарник) и script.sh.x.c (сгенерированный C). Запуск:./script.sh.x 123
# Simple BASH script. Entered VARIABLE: 123
-e DD/MM/YYYY - срок годности; после даты бинарник не запустится.
-m "msg" - сообщение при истечении срока.
Пример с истечением:
shc -e 31/12/2025 -m "Срок истек" -f -r script.sh
./script.sh.x # Выдаст сообщение о просрочке
📌 Важное замечание по безопасности
shc - это обфускация, а не криптография. В конечном бинарнике содержимое может быть восстановлено (есть утилиты вроде UnSHc). Также секреты, записанные в скрипт, при выполнении будут лежать в памяти и их можно попытаться снять дампом. Это защита от случайного копирования, но не от целенаправленного анализа.
#script #security
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍8❤4🤡1
Бывает такое, что сервер уже настроен и работает, но не покидает ощущение - вдруг что-то упустил, оставил какую-то уязвимость - незащищенные параметры SSH, лишние службы, слабые настройки sysctl. Чтобы быстро проверить систему, удобно использовать Lynis, инструмент для аудита безопасности и оценки соответствия стандартам.
Lynis - это утилита с открытым исходным кодом, которая выполняет анализ конфигурации linux и unix подобных систем и выдает рекомендации по усилению безопасности. Она проверяет десятки аспектов системы:
настройки ядра и PAM,
файрвол и службы,
права на файлы,
SSH, cron, логирование,
пакеты и обновления.
apt install lynis #debian или ubuntu
yum install lynis #CentOS
lynis audit system
После выполнения вы получите подробный отчет с результатами и рекомендациями.
Файл отчета по умолчанию сохраняется в:
/var/log/lynis.logа краткий отчет в:
/var/log/lynis-report.datВ конце проверки Lynis показывает оценку безопасности - чем она выше, тем лучше.
Также будут даны рекомендации, например:
[WARNING] SSH root login is enabled
[SUGGESTION] Install a firewall management tool (ufw/firewalld)
Просто проходите по списку и исправляйте. После доработок можно снова запустить аудит и посмотреть, насколько улучшился индекс.
Официальный сайт
#linux #security
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍16❤1
Решил посмотреть, как на практике сбрасывается пароль root, и заодно поделиться с вами. Это классическая задача, которую часто дают на собеседованиях.
Цель - получить доступ к системе с правами root, даже если пароль неизвестен. Сделать это можно, изменив параметры загрузки ядра в GRUB.
1. Включаем сервер и ждем появления меню загрузки GRUB.
2. Выбираем нужный пункт и нажимаем
e (латинскую).3. В открывшемся редакторе ищем строку, начинающуюся с linux или linux16.
4. В самый конец этой строки добавляем:
rw init=/bin/bash
Это позволит запустить оболочку bash вместо стандартного systemd.
5. Нажимаем
Ctrl+X или F10 для загрузки. После старта вы сразу окажетесь в консоли под пользователем root без пароля. Теперь можно просто задать новый пароль:
passwd
и перезагрузить систему:
exec /sbin/init
или
reboot -f
Параметр
init= сообщает ядру, какой процесс нужно запустить первым.Обычно это
/sbin/init (или systemd), который отвечает за загрузку системы.Когда мы подменяем его на
/bin/bash, система вместо полноценной инициализации попадает прямо в консоль.Фактически, вы оказываетесь в самой ранней стадии загрузки с полными правами root.
В системах вроде RHEL, CentOS, AlmaLinux, RockyLinux используется немного другой вариант:
rw rd.break enforcing=0
После загрузки окажетесь в emergency shell, где также сможете сбросить пароль через passwd.
#linux #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23
GnuPG (GNU Privacy Guard) - это открытая реализация стандарта OpenPGP (RFC 4880). Она позволяет:
шифровать и расшифровывать данные;
подписывать файлы и сообщения;
проверять подлинность данных;
управлять ключами (создавать, экспортировать, отзывать и т.д.).
Работает на всех системах - linux, macOS, windows, и не требует никаких внешних сервисов.
gpg --full-generate-key
Тут нужно указать тип ключа (обычно RSA), длину (2048–4096), срок действия и e-mail для идентификации. После этого ключ сохраняется в
~/.gnupg/.
gpg --list-keys
gpg --export -a user@networkadmin.ru > public.key
gpg --export-secret-keys -a user@networkadmin.ru > private.key
gpg --import public.key
Шифрование файла:
gpg -e -r user@networkadmin.ru secret.txt
Создается файл secret.txt.gpg, который можно расшифровать только соответствующим приватным ключом.
Расшифровка:
gpg -d secret.txt.gpg > secret.txt
Подпись файла:
gpg -s file.txt
Проверка подписи:
gpg --verify file.txt.sig file.txt
Проверить, какой ключ используется по умолчанию:
gpg --list-secret-keys --keyid-format LONG
Удалить ключ:
gpg --delete-key user@networkadmin.ru
Создать зашифрованный архив с tar:
tar cz folder | gpg -c > archive.tar.gz.gpg
#gpg #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
DNS - это всегда один из самых уязвимых элементов сети. Каждый раз, когда вы вводите сайт в браузере, ваш компьютер отправляет незашифрованный запрос к DNS-серверу, спрашивая: какой IP-адрес у этого домена? Эти запросы можно перехватить, подменить или использовать для слежки. Чтобы защитить пользователей и инфраструктуру, появились две технологии: DNSSEC и DNS over HTTPS (DoH).
Задача DNSSEC гарантировать целостность и подлинность данных, а не шифровать трафик.
Принцип работы:
Каждый домен имеет криптографическую пару ключей (DNSKEY).
Ответ DNS подписывается приватным ключом.
Клиент или DNS-сервер-посредник проверяет подпись с помощью публичного ключа, опубликованного в зоне.
Если подпись не сходится - ответ считается поддельным.
Пример проверки DNSSEC с помощью dig:
dig linux.org +dnssec
Если в ответе есть флаг ad (Authenticated Data), значит, подпись проверена и валидна.
Преимущества:
Скрывает DNS-запросы от провайдера и промежуточных узлов.
Устойчив к подмене (например, от провайдерских фильтров).
Легко использовать в корпоративных и домашних сетях.
Пример настройки DoH в Linux с systemd-resolved. Для этого редактируем
/etc/systemd/resolved.conf:
[Resolve]
DNS=1.1.1.1#cloudflare-dns.com
DNSOverTLS=yes
или используем
dnscrypt-proxy, который поддерживает и DoH, и DoT (DNS over TLS).Совместное использование этих технологий обеспечивает:
Проверку подлинности ответов DNS;
Защиту от MITM-атак и подмены записей;
Конфиденциальность и шифрование всех запросов.
Где это работает:
Cloudflare (1.1.1.1) - поддерживает DNSSEC и DoH;Google Public DNS (8.8.8.8) - поддерживает DNSSEC;Quad9 (9.9.9.9) - DoH + фильтрация вредоносных доменов.Проверить поддержку DoH можно через:
curl -s https://cloudflare-dns.com/dns-query?name=example.com -H 'accept: application/dns-json'
#DNS #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤2👎1
Хочу поделиться полезным инструментом, который часто упоминают в контексте пентестов, но который одинаково удобен и администраторам: Chisel. Это один бинарник (на Go) и для сервера, и для клиента доступный для linux, windows, macOS. Работает поверх HTTP, поэтому его очень просто поднять там, где открыт веб-порт.
./chisel server --port 80 --socks5
На клиенте (локальная машина, откуда хотите выходить в интернет через сервер):
./chisel client http://server.example.com:80 socks
После этого в браузере можно указать SOCKS5 proxy 127.0.0.1:1080, трафик пойдет через сервер.
На публичном сервере:
./chisel server --port 80 --reverse
На внутреннем хосте (тот, к которому хотим подключиться):
./chisel client http://server.example.com:80 R:2222:localhost:22
Теперь на публичном сервере можно подключиться к внутреннему хосту:
ssh -p 2222 root@127.0.0.1
--reverse. На внутреннем клиенте даем правило:
./chisel client http://server.example.com:80 33306:127.0.0.1:3306
После этого на клиенте MySQL будет доступен локально на порту 33306.
Аутентификация: есть опция
--auth user:pass и на сервере, и на клиенте, используйте для защиты туннеля.Маскировка:
--backend позволяет прятать chisel-сервер за обычным веб-сервером (перенаправлять чужие HTTP-запросы), что облегчает развертывание в средах с ограничениями.Один бинарник, удобно распространять и для разных ОС.
#network #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤3