Mac OS X: Bezpečí za dvojitou zdí - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se narodil známý fotograf František Drtikol?

V dnešní soutěži hrajeme o:

Seriály

Více seriálů



Agregator

Mac OS X: Bezpečí za dvojitou zdí

pf

18. ledna 2012, 00.00 | V OSX si uživatel může jedním kliknutím vztyčit ochrannou zeď aplikačního firewallu. Někomu to stačí, ale méně lidí tuší, anebo dokonce využívá možnost druhé ochranné zdi, kvalitní a velmi mocné. Lze ji využít k rozličným věcem a její jméno je firewall pf. Naším cílem je se s ním seznámit a vytvořit postup hodící se těm, kteří by rádi dosáhli vyšší bezpečnosti svého stroje.

Pro klidnější a bezpečnější život s naším oblíbeným operačním systémem bychom mohli investovat trochu času do lepšího porozumění a prozkoumání možností, které nám skýtá. Vlastně máme na výběr: cestu do zákoutí příkazové řádky nebo koupi některého nástroje, jako například Little Snitch.

Když už zde mluvíme o zdi druhé, neškodilo by se nejprve zmínit o zdi první. Je jím aplikační firewall, který je vlastně jediný zakomponován do GUI prostřednictvím panelu Security & Privacy v Systémových preferencích.


První ochranná zeď

Na úrovni systému je aplikační firewall realizován modulem jádra neboli rozšířením com.apple.nke.applicationfirewall. Lze ho ovládat binárkou socketfilterfw, což ilustruje následující obrázek.


socketfilterfw na příkazové řádce

Cesta, která zde byla pro vybudování druhé ochranné zdi vybrána, se jeví jako přirozená. Vyžaduje se pouze znalost syntaxe firewallových pravidel a trocha povšechných vědomostí souvisejících s používaným systémem. Po přechodu na Mac se u verzí 10.5 a 10.6 dalo spolehnout na nástroj WaterRoof (WR), který graficky spravoval pravidla firewallu ipwf. Nyní u 10.7 se situace změnila. Ne že by WR nešlo používat, ale firewall ipfw zde byl označen za zastaralý a nahrazen nástrojem pf. Oba původně pocházející z OpenBSD, přičemž pf lze pokládat za to nejlepší z oboru. Jeho možnosti jsou obrovské. Bohatou studnicí informací je kniha The Book of pf od Petera N.M. Hansteena. V OSX 10.7 je pf dokonce implicitně aktivní! Ale bohužel bez aktivních pravidel. V konfiguračním souboru /etc/pf.conf lze sice zahlédnout náznak budoucích pravidel přímo od výrobce, ale skutek utek, možná proto, že nezbyl čas. Snad se někdy dočkáme nativní podpory pf v GUI.

Nyní nezbývá, než se do úprav pustit sami. Jako první krok před námi stojí plná aktivace pf. Toho docílíme prostřednictvím následujících kroků.


  1. Plnou aktivaci pf docílíme drobnou úpravou souboru /System/Library/LaunchDaemons/com.apple.pfctl.plist, kde v řádku argumentů programu je nutno přidat písmeno e, takže vznikne řetězec -ef místo původního -f.
  2. Abychom mohli zaznamenávat vybrané události ve filtračních pravidlech, musíme vytvořit patřičné virtuální zařízení, jenž bude pf používat pro potřeby logování. Pomůžeme si pomocí skriptu spouštěného v rámci launchd. Za tímto účelem umístíme do adresáře /Library/LaunchDaemons soubor cz.malina.pflog.plist, který odkazuje na skript pflog.sh pro výrobu logovacího rozhraní. Ten patří do adresáře /usr/local/bin.

Nyní jsme připraveni a můžeme se pustit do tvorby vlastních pravidel pro druhou ochrannou zeď.

Předem je nutno si uvědomit, že pravidla nebývají na různých počítačích stejná, obvykle si je každý přizpůsobuje obrazu svému. Pro desktop jsou podstatně jednodušší než pro server. Pro úpravu pravidel je třeba, abychom věděli něco o službách které nabízíme a vyžadujeme. Má pravidla jsou zaměřena na desktop a snaží se být maximálně jednoduchá. Odpovídají následujícím zásadám.

  1. Odděl zrno od plev. To jest zahodit pakety, které jsou podvržené, nemají směr návratu, neprojdou normalizací a nebo pocházejí z běžného skenování,
  2. Povol odchozí pakety, tedy ty, které jsou iniciovány z našeho stroje,
  3. Povol příchozí pakety směřující ke službám, které vystavuji, například vzdálený přístup pomocí SSH,
  4. Povol pakety nezbytné pro bezproblémovou existenci v síti. Zde například ICMP, DHCP atd.

Jako další si musíme uvědomit přechodnou rozpolcenost dnešní počítačové komunikace plynoucí z faktu, že svět počítačů je nucen změnit místo pobytu, a přejít ze světa IPv4 do světa IPv6. Máme je oba ve svém stroji, je tedy vhodné je oddělit do dvou separátních souborů. Pravidla pro IPv4 jsou následující.

# Packet normalization
scrub in on { en0, en1 } no-df

# Basic policy
block return log all
pass out all keep state

# Do not allow garbage in
antispoof quick for { lo0, en0, en1 }

# Block NMAP scans and scans with weird flags
block in log quick from any os "NMAP" to any label ExtNMAPScan
block in quick proto tcp flags FUP/WEUAPRSF
block in quick proto tcp flags WEUAPRSF/WEUAPRSF
block in quick proto tcp flags SRAFU/WEUAPRSF
block in quick proto tcp flags /WEUAPRSF
block in quick proto tcp flags SR/SR
block in quick proto tcp flags SF/SF

# Block anything coming form source we have no back routes for
block in quick from no-route to any

# No rules for localhost
set skip on lo0

# Open SSH
pass in proto tcp from any to any port = ssh flags S/SA keep state

# Open DHCP
pass in proto udp from any to any port = bootpc keep state
pass in proto udp from any to any port = bootps keep state
pass in proto udp from any to any port = ssdp keep state

# Netbios
pass in proto udp from any to any port = netbios-ns keep state
pass in proto udp from any to any port = netbios-dgm keep state
pass in proto udp from any to any port 49500:65245 keep state

# Zeroconfig
pass in proto udp from any to any port = llmnr keep state

# mDNS
pass in proto udp from any to any port = mdns keep state

# ICMP
pass in inet proto icmp all icmp-type {echoreq, echorep, unreach, timex, paramprob}

# IGMP
pass in proto igmp all allow-opts

A pravidla pro IPv6 jsou pak obdobná.

block return log all
pass out inet6 proto udp keep state
pass out inet6 proto tcp keep state

# Open SSH
pass in inet6 proto tcp from any to any port = ssh flags S/SA keep state

# Open DHCP
pass in inet6 proto udp from any to any port = bootps keep state

# DHCPv6
pass in inet6 proto udp from any to fe80::d561 port 547 keep state
pass out inet6 proto udp from any to any port 546 keep state

# mDNS Bonjour
pass in inet6 proto udp from any to any port 5353 keep state
pass out inet6 proto udp from any to any port 5353 keep state

# ICMP
pass in inet6 proto ipv6-icmp all icmp6-type {echoreq, echorep, unreach, timex, paramprob, neighbradv, neighbrsol, routeradv}

Ovládání druhého valu a jeho konfigurace
Ovládání pf je realizováno pomocí nástroje pfctl, který má celou řadu přepínačů. Nejdůležitější jsou přepínač pro aktivaci –e a přepínač –d pro deaktivaci. Typický příkaz pro zapnutí je pfctl –vvv –ef /etc/pf.conf, kdy pf předkládáme také konfigurační soubor. Tento soubor nám mimo jiné umožňuje rozdělování pravidel dle jmen, kterým se říká kotvy - anchors. Tyto kotvy také dělí pravidla dle účelu na ta pro přesměrování nebo samotnou filtraci a třeba NAT1. My si do něj pouze přidáme definici logovacího zařízení, které pak můžeme všude využít. Dělá se přidáním řádky set loginterface pflog0. Pro vlastní pravidla využijeme kotvu com.apple, která je realizována pomocí stejně pojmenovaného souboru. Po úpravě vypadá ve zkrácené verzi následovně.

...
#
# Application Firewall anchor point.
#
anchor "250.ApplicationFirewall/*"
anchor "910.CustomLocalRules/*"
load anchor "910.CustomLocalRules" from "/etc/pf.anchors/910.CustomLocalRules"
anchor "911.CustomLocalRules/*"
load anchor "911.CustomIPv6LocalRules" from "/etc/pf.anchors/911.CustomIPv6LocalRules"

Všimněme si kotev 910 a 911, které nám umožňují definovat lokální pravidla pro IPv4 a IPv6. Jako elementární úvod k pf nám to musí postačit. Ti, kteří budou chtít vědět víc, odkáži na v textu zmiňovanou knihu, manové stránky nebo internet.

K čemu nám to je?
Nyní jsme významně posílili bezpečnost našeho systému. K pozorování chování pf pravidel využijeme logovací zařízení a klasických technik, využitelných pro pozorování síťové komunikace obecně. K dispozici máme různé nástroje. Příznivci příkazové řádky ocení „starý dobrý“ tcpdump, který postačí. Příklad použití (sudo tcpdump -nv -e -ttt -i pflog0) ilustruje následující screenshot.


tcpdump někdy postačí

Pokud máte raději GUI anebo vás pozorování síťové komunikace baví, nainstalujte si program Wireshark z wireshark.org. Běží sice jako X-Window aplikace, ale jeho schopnosti jsou obrovské. Použijeme-li ho pro pozorování logovaných událostí z firewallu, vypadá to následovně.


Wireshark v akci

Wireshark se hodí také pokud například chcete zjistit, co dělá Photoshop při aktivaci atp.

Potíže se stabilitou
Během hrátek s pf a ladění pravidel jsem zaznamenal několik situací, které asi indikují, že portace na OSX není ještě zcela odladěna. Můžeme si všimnout chybějící podpory front, což není ještě tak hrozné. Hrátky s pf v mém případě někdy ovlivňovaly i stabilitu stroje, respektive jeho síťového subsystému. Problémy se projevují náhodně s minimální frekvencí, bohužel však o to fatálněji. I když celý stroj žije, síťová volání nefungují. Pro stroje, které slouží jako pracovní, není tedy popsaný postup zatím vhodný. Doufejme, že s verzí 10.7.3 se situace zlepší a problémy budou odstraněny. Pokud akceptujete popsaná rizika, je uvedený popis použitelný. Osobně ho využívám již několik týdnů. Snad se bude hodit i vám.

Tématické zařazení:

 » Rubriky  » Mac OS X CZ  

 » Rubriky  » Agregator  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: