Безпека Linux, Unix / Linux, Security & Hack, статті

Якщо ви їх не бачили, то це ще не означає, що вони за вами не стежать …
Сьогодні ми поговоримо про безпеку вашої Linux-системи. Я думаю, що це буде актуально, особливо якщо згадати про взлом систем через Інтернет. Отже, що ж зробити для безпеки вашої системи?

Напевно майже всім відомо, що перш ніж виробляти злом, треба зібрати інформацію про зламуємо жертві. Наприклад, щоб віддалено використовувати експлойт для, скажімо, Sendmail, треба дізнатися версію Sendmail і знайти експлойт під цю версію. Якщо зломщик не зможе дізнатися версію, то йому доведеться або шукати інший шлях злому, або спробувати (о жах!) все експлоїти. Значить, нам потрібно зробити так, щоб зломщик знав якомога менше про нашу систему. Ну так зробимо це!
В каталозі / etc є файли issue і issue.net, перший видає вітання при доступі з локального терміналу, а другий – при доступі з telnetd. Вміст цих файлів потрібно змінити, наприклад, замість “Welcome to Linux Mandrake 8.1!” написати “Welcome to Linux! “. Причому, можна ще й ввести зломщика в оману, написавши щось типу “Welcome to Suse 6.1” Це навіть буде набагато корисніше, тому що при вигляді вітання Suse зломщик буде орієнтуватися на те, що на зламуємо машині коштує Suse, а от при появі простого “Welcome” зломщик полізе далі, щоб дізнатися про вашу систему більше. У тому ж самому каталозі є ще файл shells. Він зберігає адресу до вашої оболонці. Її краще змінити на недостовірну інформацію, це теж ускладнить злом системи.
При зломі системи, щоб визначити операційну систему віддаленої машини, зазвичай використовують тулзи queso або їй подібні. Дана утиліта надсилає запит на машину і, отримавши відповідь, аналізує його, в результаті чого, залежно від відповіді, визначається операційна система. Ваше завдання полягає в тому, щоб налаштувати свій файрволл таким чином, щоб той не відповідав на такі запити або давав помилковий відповідь.
Є ще дуже корисна для зломщика утиліта uname. Якщо її запустити з опцією “-a”, то хакер отримає достатньо інформації про атакується машині (тип операційної системи, версію ядра і т.д.). Завдання: треба зробити так, щоб тулза виводила тільки те, що ми їй скажемо, і цим самим вона дожна вводити зломщика в оману. Утиліта uname зберігається зазвичай в каталозі / bin. Ліземо в неї і присвоюємо цього файлу такі права доступа: chmod og-rx uname. Далі ліземо в каталог / etc / skel – сховище файлів. bashrc, bash_profile та ін Вони зазвичай копіюються в домашній каталог кожного юзера вашої машини при створенні для нього аккаунта. Відкриваємо файлик / Etc / skel / bash_profile. Даний файл зберігає в собі значення змінних і є чимось на зразок файлу ініціалізації. Для прикладу, файл містить змінну $ PATH, яка зберігає в собі шлях до каталогів з виконуваними файлами; варто згадати, що шляхи до каталогів розділяються символами двокрапки. Також файл містить змінну $ HOME, яка зберігає шлях до домашнього каталогу. А змінна $ PS1 зберігає вид запрошення, яке, до речі, можна змінити. Щоб переглянути значення якої-небудь змінної, використовують команду “echo $ ім’я_змінної”.
Після того, як ми відкрили цей файл, присвоюємо змінної $ PATH в якості першого значення / usr / bin. Це дасть нам те, що якщо буде введена команда uname, то спочатку її будуть шукати в / Usr / bin, але поки її там немає. Йдемо в каталог / usr / bin і створюємо файл uname, після чого пишемо в нього наступний скрипт, наш аналог команди
uname:
#!/usr/bin/perl
while (<@ARGV>) {
if ($_ eq ”)
{
print “FreeBSD\n”;
}
if ($_ eq ‘-a’)
{
$time=scalar(localtime);
print “FreeBSD 4.2.2 localhost.localdomain
2.2.18-11src \#1 $time CERT 2000 i586 unknown\n”;
}
if ($_ eq ‘–help’)
{
print qq{
Використання: uname [КЛЮЧ] …
Друкує певні відомості про систему. За замовчуванням КЛЮЧ = “-s”.
-A, – all надрукувати всю інформацію
-M, – machine надрукувати тип машин
-N, – nodename надрукувати ім’я машини в мережі
-R, – release надрукувати номер випуску операційної системи
-S, – sysname надрукувати назву операційної системи
-p, — processor надрукувати тип процесора
-V надрукувати версію операційної системи
– Help показати цю довідку і вийти
– Version показати інформацію про версію і вийти
Про помилки повідомляйте. \ N};}
if ($_ eq ‘-m’)
{
print “i586\n”;}
if ($_ eq ‘-n’) {
print
“localhost.localdomain\n”;}
if ($_ eq ‘-r’) {
print
“2.2.18-11src\n”;}
if ($_ eq ‘-s’) {
print “FreeBSD\n”;}
if ($_ eq
‘-p’) {
print “unknown\n”;}
if ($_ eq ‘-v’)
{
$time=scalar(localtime);
print “\#1 $time CERT
2000\n”;}
}
Ставимо на цей файл наступні права доступу: chmod og + x uname. Тепер uname буде всім говорити, що у вас стоїть FreeBSD, версія ядра 2.2.18-11src і т.д. Так само ви можете зробити і з іншими командами, якщо хочете, щоб вони виводили тільки те, що вам потрібно.
Йдемо далі. Як відомо, в Юнікс паролі зазвичай зберігаються в спеціальних файлах типу passwd, shadow, master.passwd. В Лінухе паролі лежать в shadow, а все інше – в passwd, тобто файлу master.passwd в системі немає, а ми його зробимо, але не для системи, а для зломщиків, які захочуть отримати ваші паролі і не побачать файлу shadow. Для цього створюємо файл master.passwd в папці / etc і пишемо щось типу наступного:
root:/xDSBsAdco3v.:0:3::/root:/sbin/sh
www:N74jZlzME3vI2:201:200:,,,:/www:/usr/bin/false
Apedaile,CRC,7392,:/home/apedaid:/usr/bin/rksh
bennetg:ral5BQAMbqbRc:208:20:Gary
Далі. За замовчуванням ядро ​​здійснює недостатній рівень безпеки. Для виправлення цього включаємо в ядро ​​всі опції
firewall:
CONFIG_FIREWALL=y
CONFIG_NET_ALIAS=y
CONFIG_INET=y
CONFIG_SYN_COOKIES=y
CONFIG_RST_COOKIES=y
CONFIG_IP_FIREWALL=y
CONFIG_IP_FIREWALL_VERBOSE=y
CONFIG_IP_ALWAYS_DEFRAG=y
CONFIG_IP_ACCT=y
CONFIG_IP_ALIAS=m
Тепер його треба перекомпілювати і перевстановити.
Тепер правимо / Etc / sysctl.conf. Ці установки підвищують стійкість IP-стека до Denial Of Service атакам, зменшують час TCP / IP підключення, щоб можна було обробити більше сполук за той же інтервал. Також буде зменшено час, яке Linux чекає до закриття з’єднання, і час, через який Linux розриває застаріле з’єднання. Ці установки відключать деякі розширення протоколу TCP / IP, які нам не потрібні.
net.ipv4.icmp_ignore_bogus_error_responses=1
net.ipv4.conf.all.log_martians=1
net.ipv4.conf.all.accept_source_route=0
net.ipv4.tcp_syncookies=1
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.all.accept_redirects=0
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=1800
net.ipv4.tcp_window_scaling=0
net.ipv4.tcp_sack=0
net.ipv4.tcp_timestamps=0
net.ipv4.tcp_max_syn_backlog=1280
net.ipv4.conf.all.forwarding=0
net.ipv4.icmp_echo_ignore_broadcasts=1
Це ще далеко не все, що можна зробити для безпеки вашої системи. Варто було б ще настроїти фільтрацію IP, яка допоможе фільтрувати небажані пакети. Фільтрація IP – механізм, який є засобом мережевого рівня, тобто він нічого не знає про додатки, що використовують мережеві з’єднання, визначає, що потрібно робити з прийнятим або відправленим пакетом: обробити нормально або проігнорувати. Набір правил фільтрації IP складається з комбінації критеріїв, які визначають пакети, що підлягають фільтрації, – тип протоколу TCP, UDP, ICMP і т.д., номер сокета, тип пакету (прапори, дані, луна-запит), адреси відправника і одержувача пакетів. Не завадило б також відкрити кілька помилкових портів і повісити на них неправдиві дані. Також слід відфільтрувати ваші порти. Для цього скористаємося PortSentry – це засіб для виявлення сканування портів. Воно практично визначає і блокує спроби віддалених атак. Розпаковуємо завантажений з freshmeat.net архів і встановлюємо:
tar
zxvf portsentry-1.1.tar.gz
Переходимо в створений каталог і робимо наступне:
make -f Makefile
make linux
make install
Тепер треба підправити файл конфігурації / usr / local / psionic / portsentry / portsentry.conf так:
# Задаємо прослуховуються порти
TCP_PORTS=”1,11,15,23,25,79,110,111,119,143,540,635,1080,1524,
2000,5742,6667,12345,12346,20034,27665,31337,32771,32772,32773, 32774,40421,49
724,54320″
UDP_PORTS=”1,7,9,53,69,161,162,513,635,640,641,700,37444,34555,
31335,32770,32771,32772,32773, 32774, 31337,54321″
# Задаємо кордон фільтровану портів для визначення прихованого сканування
ADVANCED_PORTS_TCP=”1024″
ADVANCED_PORTS_UDP=”1024″
# Виключаються порти
ADVANCED_EXCLUDE_TCP=”20,21,22,80,139″
ADVANCED_EXCLUDE_UDP=”138,137″
# Шляху до файлів
IGNORE_FILE=”/usr/local/psionic/
portsentry/portsentry.ignore”
HISTORY_FILE=”/usr/local/psionic/
portsentry/portsentry.history”
BLOCKED_FILE=”/usr/local/psionic/
portsentry/portsentry.blocked”
# Не будемо резолвіть
RESOLVE_HOST =
“0”
# Негайна блокування
BLOCK_UDP=”1″
BLOCK_TCP=”1″
# Створимо правило для ipchains
KILL_ROUTE=”/sbin/ipchains -I input -s $TARGET$ -j
DENY -l”
# Так пропишемо запис в / etc / hosts.deny
KILL_HOSTS_DENY=”ALL:
$TARGET$”
# При виявленні сканування створимо ще один файл
KILL_RUN_CMD=”echo PortSentry detect port scanning from $TARGET$ on
$PORT$ > /root/scan.new”
# Відразу реагуємо на сканування портів
SCAN_TRIGGER=”0″
Можливі варіанти запуску PortSentry:-tcp, -Udp,-stcp,-sudp,-atcp,-audp. Комбінувати варіанти типу-tcp і-stcp не можна. Для автоматичного завантаження тепер в / etc / rc.d / rc.local прописуємо шлях до PortSentry для виявлення прихованого сканування:
/usr/local/psionic/portsentry/ portsentry
-stcp
/usr/local/psionic/portsentry/ portsentry -sudp
Все. Ваші порти захищені.
Вся вищенаведена інформація не претендує на повноту опису, а є скоріше керівництвом до подальших дій.
Так що думайте, робіть і запам’ятайте найголовніше правило: інформація захищена тоді, коли її вартість менше вартості злому системи для її отримання.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*