Bezpiecze ästwo Linuxa i BSD

background image

Bezpieczeństwo Linuksa i BSD

od podstaw

Karol Przystalski 
alidej at flatpla.net

Mirosław Szot 
mss at kozieglowy.one.pl

http://czlug.icis.pcz.pl/

background image

Źródła problemów

luki w oprogramowaniu

lekkomyślność użytkowników i/lub 
administratorów

błędy w konfiguracji

background image

Polityka bezpieczeństwa

aktualizacje oprogramowania

regularne backupy

analiza logów

audyt automatyczny i ręczny

bez kompromisów

“odrobina paranoi nigdy nie boli”

background image

Skąd intruz czerpie informacje

skanowanie portów (powolne i rozproszone)

fingerprinting

bugtraq

social engineering

google ;)

background image

bugtraq i security advisories

http://securityfocus.com/

 

http://www.cert.org/advisories/

http://cc­team.org/index.php?name=bugtraq

 

http://www.freebsd.org/security/

http://www.freshports.org/

http://slackware.com/security/

 

http://www.debian.org/security/

background image

Użytkownicy i grupy

$ id janek
uid=1001(janek) gid=1000(users) grupy=5(tty),7(lp),10(wheel),20(games),
23(audio),24(video),31(console),1000(users)

janek:x:1001:1000:Jan Kowalski:/home/users/janek:/bin/ksh

wheel::10:root,janek

# ls ­l /dev/sound/mixer
crw­rw­­­­  1 root audio 14, 0 2005­03­15 08:15 mixer

Fragment pliku /etc/group:

Fragment pliku /etc/passwd:

Przykład wykorzystania grup do przydziału uprawnień:

Przydatne polecenia:

usermod(8), vipw(8), vigr(8), pwck(1) ­­ Linux   
pw(8), vipw(8), chpass(8) ­­ FreeBSD

background image

Administrator root

Dlaczego nie powinno się pracować jako użytkownik root: 

# rm ­rf / smieci/*

drobne przeoczenie

auth            required        pam_wheel.so group=wheel

Ograniczanie su(1) z użyciem PAM(8), fragment /etc/pam.d/su:

Sposób na podział zadań administratora:

sudo(8), visudo(8), sudoers(5)

PermitRootLogin no

w openssh

background image

Uprawnienia plików i katalogów

crw-rw----  1 root audio 14, 0 2005­03­15 08:15 /dev/sound/mixer ­­ 0660
­rw

s

r-xr-x

  1 root root 27332 2004­10­23 13:28 /usr/bin/passwd   ­­ 

4

755

drwxrwxrw

t

  8 root root 351 2005­03­15 12:37 /tmp                ­­ 

1

777

7 7 7

 r  = 4
 w = 2 
 x  = 1

właściciel (user) grupa (group)

inni (other)

rwx rwx rwx

7

 suid    = 4000
 sgid    = 2000
 sticky = 1000 

Przydatne polecenia:

chown(1), chgrp(1), chmod(1) ­­ Linux   
chown(8), chgrp(1), chmod(1) ­­ FreeBSD

background image

Programy suid/sgid

 Program suid uruchomiony działa z uprawnieniami właściciela pliku 

wykonywanego.

 Luka w programie suid­root może być wykorzystana do uzyskania 

uprawnień administratora.

# find / ­perm +6000 ­type f

# ls ­l /bin/mount                                         
­rwsr­xr­x  1 root root 72520 2005­01­08 15:54 /bin/mount
# chmod ­s /bin/mount

Tak możemy znaleźć wszystkie programy suid/sgid: 

A tak ­ po zastanowieniu ­ możemy zrezygnować z suid:

background image

umask

0666 & ~022 = 0644 = rw­r­­r­­

$ umask 

022

$

 

touch plik1; ls ­l plik1

-rw-r--r--

  1 janek users 0 2005­03­15 12:41 plik1

$ umask 

000

              

$ touch plik2; ls ­l plik2

-rw-rw-rw-

  1 janek users 0 2005­03­15 12:41 plik2

$ umask 

077

                

$ touch plik3; ls ­l plik3 

-rw-------

  1 janek users 0 2005­03­15 12:42 plik3

 domyślne uprawnienia
 wybierane przez  open(2) 
 dla nowych plików 

 umask wybrany przez użytkownika 

 uprawnienia nowego pliku 

background image

Atrybuty plików

schg, uchg

sappnd, uappnd

sunlnk, uunlnk

i – immutable

a – append only

# chattr +i /boot/vmlinuz
# chattr ­i /boot/vmlinuz

FreeBSD

Linux (ext2/ext3)

# chflags schg /boot/kernel/* /boot/kernel
# touch /boot/kernel/kernel 
touch: /boot/kernel/kernel: Operation not permitted
# ls ­lo /boot/kernel/kernel 
­r­xr­xr­x  1 root  wheel  schg  3,6M 10 Gru 17:10 /boot/kernel/kernel*
# chflags noschg /boot/kernel/* /boot/kernel

chattr(1), lsattr(1), lcap(8)

background image

Poziomy bezpieczeństwa FreeBSD

­1 – insecure – domyślnie po instalacji

0 – zmieniany na 1 po wejściu w tryb wielu użytkowników

1 – zakaz ładowania/usuwania modułów, zakaz zmian znaczników plików, 
zakaz bezpośredniego zapisu do pamięci (/dev/mem) i zamontowanych 
dysków.

2 – zakaz bezpośredniego zapisu do niezamontowanych dysków, zakaz 
zmiany czasu więcej niż o 1 sekundę

3 – tryb sieciowy – zakaz zmian reguł filtrów IPFW i IPFilter

background image

Przykład wykorzystania

# sysctl ­a | grep securelevel
kern.securelevel: 1

# chflags noschg /boot/kernel/kernel 
chflags: /boot/kernel/kernel: Operation not permitted

# sysctl kern.securelevel=­1
kern.securelevel: 1
sysctl: kern.securelevel: Operation not permitted

Wady:

 nie wolno pominąć żadnego z plików uruchamianych przy starcie!!

 zarządzanie jest uciążliwe

 na poziomie 3 nie można przerwać aktywnego ataku przez dodanie 

reguły do firewalla

background image

Access Control Lists

# /sbin/tunefs -a enable /home

/dev/ad0s1g   /home    ufs    rw,nosuid,nodev,acls    1 2

 Zapewniają bardziej szczegółową kontrolę uprawnień plikowych

 Nie ograniczają konta root!

 Samba z obsługą ACL pozwala na ich edycję z poziomu systemu 

Windows

Uaktywnienie ACL w systemie FreeBSD (tryb single­user):

Uaktywnienie przez edycję /etc/fstab:

background image

Wykorzystanie ACL

/home# chmod 

og-rwx

 janek/

/home# setfacl ­m 

u:www:x

 janek/

/home# ls ­ldo janek/
d

rwx--x---

+

 2 janek  users  ­  1,5K 15 Mar 19:00 janek/

/home# getfacl janek
#file:janek
#owner: 1001
#group: 1000
user::rwx

user:www:--x

group::­­­
mask::­­x
other::­­­
/home# id rysio
uid=1009(rysio) gid=1000(users) groups=1000(users)
/home# sudo ­u rysio ls ­l janek/public_html/index.html
ls: janek/public_html/index.html: 

Permission denied

/home# sudo ­u www ls ­l janek/public_html/index.html  
­rw­r­­r­­  1 janek  users  2012 11 Mar 13:12 janek/public_html/index.html

Chcemy lepiej zabezpieczyć katalogi użytkowników posiadających strony

background image

Demony samodzielne

w Slackware (/etc/rc.d/*) kontrolowane przez 
atrybut +x 

/etc/rc[0­6].d z System V kontrolowane przez 
chkconfig (redhat, pld), update­rc.d (debian)

/etc/rc.conf.* w BSD

background image

Przykład użycia

# chkconfig ­­list httpd                                 
httpd           0:nie   1:nie   2:nie   3:tak 4:tak 5:tak   6:nie
# chkconfig ­­del httpd
# chkconfig ­­list httpd 
httpd           0:nie   1:nie   2:nie   3:nie 4:nie 5:nie   6:nie

Należy wyłączyć niepotrzebne usług lub je odinstalować

chkconfig(8)

Narzędzia debiana: update­rc.d(8), invoke­rc.d(8), rcconf

background image

Zapracowany root i nobody

należy ograniczyć liczbe demonów działających 
na prawach root i nobody

usługi powinne mieć przydzielonych 
użytkowników o minimalnych przywilejach

do poszukiwań można wykorzystać lastcomm(1) 
i sa(8) z BSD System Accounting

background image

super­serwer inetd

pozwala na łatwą, zcentraliziowaną kontrolę 
drobnych usług

sam inetd nie jest niebezpieczny

pop3 stream tcp nowait  root /usr/sbin/spop3d spop3d ­f /etc/spop3d.conf

 nazwa usługi z pliku /etc/services

stream, dgram, raw...

 przy dgram np. wait.40

 może być user.group

 pełna ścieżka do demona

 argv[]

background image

TCP Wrappers

pośredniczy w komunikacji między inetd a 
serwerem

może byc wykorzystany w samodzielnych 
demonach za pomocą biblioteki libwrap

pozwala na szczegółową kontrolę dostępu za 
pomocą prostych reguł

background image

tcpd lub libwrap

comsat  dgram   udp     wait    root    /usr/sbin/tcpd  in.comsat

# ldd /usr/sbin/inetd | grep wrap
        libwrap.so.3 => /usr/lib/libwrap.so.3 (0x2808d000)

comsat  dgram   udp     wait    tty:tty /usr/libexec/comsat comsat

W Linuksie musimy jawnie użyć pośrednika tcpd: 

We FreeBSD inetd został połączony z bilioteka libwrap:

Przykładowa konfiguracja demona w FreeBSD: 

Uwaga: zależnie od dystrybucji z tą biblioteką może być połączony 
demon sshd.

background image

Konfiguracja w Linuksie

ALL : localhost 127.0.0.1 [::1]
vsftpd: ALL EXCEPT 192.168.1.15
sshd : ALL
fingerd : 192.168.1.
auth : ALL

vsftpd : ALL : (/usr/sbin/safe_finger ­l @%h | /usr/bin/mail ­s %d­%h root) &
ALL : ALL

hosts.allow

hosts.deny

hosts_access(5)

background image

Konfiguracja w FreeBSD

ALL : PARANOID : RFC931 20 : deny
ALL : localhost 127.0.0.1 [::1] : allow 
vsftpd: ALL : allow 
sshd : ALL : allow 
comsat : 127.0.0.1 : allow
fingerd : 192.168.1. : allow 
auth : ALL : allow 

fingerd : ALL \
        : spawn (echo Finger. | \
         /usr/bin/mail ­s "tcpd\: %u@%h[%a] fingered me!" root) & \
        : deny

ALL : ALL : severity auth.info \
          : twist /bin/echo "You are not welcome to use %d from %h."

FreeBSD używa tylko jednego pliku ­ hosts.allow

hosts_access(5)

background image

jak testować?

# tcpdmatch auth@1.2.3.4 rysio@jego­domena.pl
client:   hostname jego­domena.pl
client:   address  2.3.4.5
client:   username rysio
server:   hostname serwer.moja­domena.pl
server:   address  1.2.3.4
server:   process  auth
matched:  /etc/hosts.allow line 5
option:   allow 
access:   granted

tcpdcheck(8) sprawdza poprawność plików konfiguracyjnych 
a tcpdmatch(8) pozwala przetestować reguły

background image

xinetd ­ ulepszony inetd

kontrola dostępu bez użycia tcpwrappers

kontrola logowania 

reguły przekazywania

kontrola dostępu na podstawie czasu, 
obciążenia, itp.

i dużo więcej

background image

konfiguracja xinetd.conf

service ftp
{
        socket_type     = stream
        protocol        = tcp
        flags           = NOLIBWRAP
        disable         = no
        port            = 21
        user            = root
        server          = /usr/sbin/vsftpd
        wait            = no
        nice            = 10
        only_from       = 192.168.1. 127.0.0.1
        no_access       = 192.168.1.15
        access_times    = 7:00­19:00
        log_type        = SYSLOG local3 notice
        instances       = 15
        log_on_success  = USERID DURATION TRAFFIC

bind            = 192.168.1.1

        load            = 2.5 
}

background image

Niepotrzebne usługi

sendmail

nfs, rpc: portmap, statd, idmapd

telnetd

rzadko używane usługi z inetd.conf: tftpd, time, 
finger, talkd, chargen, echo, itp.

r­użytki (rsh, rcp...)

background image

Zabezpieczanie X Window System

Jeżeli nie korzystamy z sieciowych funkcji Xów możemy wyłączyć
nasłuch tcp:

alias x='startx ­­ -nolisten tcp &'

# cat /usr/lib/X11/xdm/Xservers
:0 local /usr/X11R6/bin/X vt9 -nolisten tcp

Można też przekazać parametry do używanego X Display Managera:

background image

Pomocne narzędzia

netstat – informacje związane z siecia

# netstat ­tnelp 
Active Internet connections (only servers)
Proto Recv­Q Send­Q Local Address Foreign Address State  User Inode PID/Program name
tcp        0      0 0.0.0.0:8010  0.0.0.0:*       LISTEN 1001 14999 6768/psi
tcp        0      0 0.0.0.0:21    0.0.0.0:*       LISTEN 0    2348  1403/xinetd
...

t – tcp, u – udp, w ­ raw

# netstat ­­unix ­p    
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type   State     I­Node PID/Program name Path
unix  2      [ ]   DGRAM            1696   808/udevd        @udevd
unix  3      [ ]   STREAM CONNECTED 16545  6748/Xwrapper    /tmp/.X11­unix/X0
unix  3      [ ]   STREAM CONNECTED 16544  7141/rxvt   
...

fuser(1), netstat(8)

# fuser ­uvn tcp 8010
                     UŻYTKOWNIK  PID DOSTĘP POLECENIE
8010/tcp             janek       6768 f....  psi

background image

Narzędzia w FreeBSD

FreeBSD dysponuje sporą liczbą narzędzi posiadających bardzo dużo 
ciekawych opcji:

 netstat – potężne narzędzie ;)

 sockstat – informacje otwartych gniazdkach

 fstat – informacje o otwartych plikach

# sockstat ­4l ­p 60­80 
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS
dhcpd    dhcpd      28450 5  udp4   192.168.1.1:67        *:*
www      httpd      21151 3  tcp46  *:80                  *:*
www      httpd      21140 3  tcp46  *:80                  *:*
root     httpd      20579 3  tcp46  *:80                  *:*

background image

Inne

lsof(8) – lista otwartych plików

sa(8) i lastcomm(1) – rozliczanie systemowe

nessus

nmap

background image

Monitoring i audyt

kontrola integralności plików (integrit, tripwire, 
aide)

John the ripper – lepiej znajdźmy złe hasła 
zanim znajdzie je intruz

analiza logów – swatch, logcheck lub własne 
rozwiązania w Perlu

snort, prelude – Intrusion Detection System

background image

Bind DNS

ograniczyć rekurencyjne zapytania do autoryzowanych 
hostów (np. tylko z LAN)

zezwolić na transfery stref tylko z serwerów podrzędnych

zadbać o konfiguracje serwerów podrzędnych

zabezpieczyć dynamiczne aktualizacje

zabezpieczyć klasę CHAOS za pomocą widoków

TSIG i DNSSEC

# dig @ns1.twoja­domena.pl txt chaos version.BIND
# dig @ns1.twoja­domena.pl txt chaos authors.BIND

background image

Apache httpd

wyłączyć wszystkie zbędne i nieużywane moduły

ukryć wersje za pomoca ServerTokens i ServerSignature

ograniczyć automatyczne indeksowanie do śledzonych 
przez nas katalogów

ograniczyć lub wyłączyć konfigurację na poziomie 
plików .htaccess

zabezpieczyć się przed źle skonfigurowanymi klientami 
SSL za pomocą SSLRequireSSL

background image

Gdy musimy zezwolić

SymlinksIfOwnerMatch zamiast FollowSymLinks

IncludesNOEXEC zamiast Includes

Ostrożnie z AllowOverride

Zabezpieczyć CGI i SSI za pomocą suEXEC

Pliki z hasłami tylko poza katalogami serwowanymi

background image

PHP

php_admin_flag i php_admin_value

engine = On tylko dla potrzebujących

safe_mode = On

expose_php = Off

display_errors = Off i log_errors = On

register_globals = Off

file_uploads = Off

allow_url_fopen = Off

disable_functions = system,exec,passthru,popen,phpinfo,ini_set

background image

Ściany ogniowe w warstwie sieci

w Linuxie

netfilter/iptables

w *BSD

ipfw

ipfilter ­ 

http://coombs.anu.edu.au/~avalon/

pf – ulepszony ipfilter dla OpenBSD

 także dla Linux

background image

Serwery proxy

Squid

Privoxy

DNRD

Jftpgw

mod_proxy (moduł apache)

http://www.squid­cache.org/

http://www.privoxy.org/
http://dnrd.nevalabs.org/

http://www.mcknight.de/jftpgw

background image

Iptables – Zasada działania

FORWARD

OUTPUT

INPUT

 Proces lokalny 

 Wychodzący

 [Decyzja rutingu] 

Ruch 
przychodzący

background image

Stateful inspection

Śledzi i zapamiętuje sesje

Zapobiega spoofingowi

Defragmentuje pakiety

Może działać również z UDP i ICMP

background image

Ściana ogniowa dla stacji roboczej

insmod ip_conntrack
insmod ip_conntrack_ftp

iptables ­N access
iptables ­A access ­m state ­­state ESTABLISHED,RELATED ­j ACCEPT
iptables ­A access ­m state ­­state NEW ­i ! eth0 ­j ACCEPT

iptables ­P INPUT DROP
iptables ­P FORWARD DROP

iptables ­A INPUT ­j access
iptables ­A FORWARD ­j access

http://lukasz.bromirski.net/docs/translations/linux24­pf.html

background image

Do czego nie służy firewall?

Firewall nie służy jako zabezpieczenie z 
zewnątrz.
Funkcją firewalla jest przede wszystkim 
filtracja pakietów.

background image

Przed czym nie chroni nas firewall?

Sniffing

Ataki typu DoS

Ataki typu Man in the middle

hijacking

Dziury (exploity)

background image

Wykrywanie skanowania

scanlogd

Portsentry

Scan­detector

icmpinfo

http://www.psionic.com/tools/
ftp://coast.cs.purdue.edu/pub/COAST/tools/

ftp://hplyot.obspm.fr/net/

background image

Metody skanowania

Ping scanning

TCP connect() scan

TCP SYN scan

TCP FIN scan

FTP bounce attack

UDP scan

ACK scan

IP.ID scan

background image

Wady i zalety Portsentry

Zalety:

Wykrywa skanowanie 

Zapobiega dalszemu skanowaniu

Wady:

Nie zapobiega atakom 

background image

Wykryj dziury zanim ktoś zrobi to 

za Ciebie ;)

Skanery:

SAINT (Security Administrator's Integrated Network Tool )

ISS (Internet Security Scanner)

Nessus 

Nmap (the Network Scanner)

http://www.wwdsi.com/saint
http://iss.net/
http://www.nessus.org/
http://www.insecure.org/nmap

background image

Security by obscurity ;)

Ignorowanie pingów

Ignorowanie skanowania portów

Close Source­Software

Hasła :)

background image

Wady

reverse­engineering

rezygnacja z funkcjonalności

background image

Fingerprinting – jak to działa?

Metody:

Passive fingerprinting

Active fingerprinting

Pola według których identyfikujemy system:

Window

TTL (Time To Live)

DF (Don't fragmentation bit)

TOS (Type Of Service)

background image

Fingerprinting ­ ochrona

The Kernel OS faker

Portsentry

http://www.hit2000.org/kosf/

http://www.psionic.com/abacus/portsentry

background image

p0f – Teraz Polska

Wykrywanie maskarady:

# p0f ­M ­i eth0

lub dodając kilka opcji można też tak:

# p0f ­Mlp ­i eth0

A tak uruchamiamy p0f jako demona:

# p0f ­i eth0 ­o /var/log/p0f.log ­qdMF \

“not dst port ( 135 or 137 or 139 or 445 )”

background image

Public Key Infrastructure

Urzędy certyfikujące (Certification Authority)

Urzędy rejestracyjne (Registration Authority)

Subskrybenci certyfikatów

Oprogramowanie

background image

Zasada działania dwóch kluczy.

1. Osoba A generuje swój klucz publiczny i wysyła go do osoby B.
2. Osoba B wysyła zaszyfrowaną wiadomość M oraz zaszyfrowaną 

wartość C do osoby A.

3. Osoba A mając wartość C odszyfrowywuje wiadomość  

wykorzystując klucz prywatny.

background image

Co zawiera certyfikat?

Podpisany klucz publiczny

Nazwa (nazwa firm, osoby, komputera)

Termin ważności

URL

http://openssl.org/

background image

Zasada działania 

Secure Sockets Layer

Ustanawianie parametrów sesji

Klient wysyła żądanie do serwera

Serwer wysyła proponowane parametry

Klient odsyła odpowiedź 

Ustanawianie klucza sesyjnego

Serwer wysyła swój certyfikat

Klient weryfikuje autentyczność certyfikatu

Klient wydobywa klucz publiczny serwera

Klient generuje losową wartość i tworzy z niej pojedyńczą, dużą 
liczbę 

background image

Zasada działania SSL cd.

Klient szyfruje losową liczbę kluczem publicznym serwera

Klient wysyła wysyła zaszyfrowaną liczbę

Serwer używając swojego klucza prywatnego (RSA) 
odszyfrowuje liczbę  wygenerowaną  przez klienta

Zaszyfrowana losowa liczba jest używana do niezależnego 
generowania tajnych kluczy sesji (RC4)

Serwer uwierzytelnia się wobec klienta, udowiadniając, że 
wygenerował identyczny tajny klucz

background image

Zasada działania SSL cd.

Szyfrowana sesja

Komunikacja klient­serwer przy użyciu tajnego 
klucza RC4

background image

Pułapki SSL

Wirusy, trojany, spyware (w Linuksie :D)

Ataki typu Man in the Middle

Osoba A

Osoba B

Osoba C (?)

background image

Pretty Good Privacy na przykładzie 

GNU Privacy Guard

Otwarty zamiennik PGP rozwijany przez Free 
Software Foundation i wspierany przez rząd 
niemiecki. 

Używany algorytm szyfrowania to obecnie 

przede wszystkim AES.

http://www.gnupg.org/

background image

GPG w praktyce

Generujemy swoją  parę  kluczy.

Wybieramy typ klucza.

Wybieramy długość klucza.

Wybieramy kiedy klucz ma 

wygasnąć.

Podajemy identyfikator klucza.

Podajemy hasło do klucza 

prywatnego.

gpg –gen­key
(1) DSA and ElGamel (default)

What keysize do you want? (1024)

Key is valid for ? (0)

Is this correct?

background image

Pozostałe bezpieczne protkoły

SSL (Secure Sockets Layer)

TLS (Transport Layer Security)

SASL (Simple Authentication and Security 
Layer)

SSH (Secure Socket Shell)

background image

Szyfrowane systemy plików

Ncryptfs

Avfs

Cryptoloop

vnd (OpenBSD)

EFS

StegFS

http://www.filesystems.org/

background image

co dalej?

chroot, jail, user­mode Linux

stackguard, openwall, grsecurity, libsafe 

NSA SELinux, TrustedBSD MAC Framework

rexec i CerbNG


Wyszukiwarka

Podobne podstrony:
BEZPIECZE STWO SYSTEM W INF
bezpieczeL,,stwo id 83362 Nieznany (2)
Bezpiecze stwo Pa stwa. Rozdzia Bezpieczenstwo wewn trzne i jego uwarunkowania, Bezpieczeństwo Naro
bezpiecze stwo pracy, Studia polsl
Zagadnienia egzaminacyjne z przedmiotu Nauka o Pa stwie i Prawie Bezpiecze stwo Wewn trzne(2)(1)
Bezpiecze stwo rozpocz cie kursu
Praca Dyplomowa BezpieczeĹ stwo SystemĂłw Komputerowych A Hakerzy, prace doktorskie, magisterskie, P
K Czainski Bezpiecze stwo wyj! Nieznany
BEZPIECZE STWO PO AROWE
Dz U 1998 148 973 R Bezpiecze stwo i higiena pra 1
BEZPIECZE STWO PRZEDE WSZYSTKIM
BEZPIECZE STWO SYSTEM W INF
bezpieczeL,,stwo id 83362 Nieznany (2)
B H P techniczne bezpiecz¦Ö ästwo Pracy
temat 5 2 bezpiecze stwo w warunkach postzimnowojennego, adu, wiatowego

więcej podobnych podstron