IRC/Skrypty i boty

< IRC

Tematyka skryptów i botów IRC jest z sobą silnie powiązana, dlatego oba te zagadnienia są przedstawione w jednym rozdziale.

Skryptem nazywa się w IRC specjalne fragmenty kodu programowego, które nie mogą funkcjonować samodzielnie, lecz stanowią dodatek do klienta IRC, poprawiający jego funkcjonalność, zwiększający jego możliwości lub wykonujący automatycznie pewne czynności.

Najbardziej lapidarna definicja ircowego bota to "klient IRC, który służy do automatycznego wykonywania zaplanowanych czynności". Można powiedzieć, że zwykły klient IRC, zaopatrzony w skrypt, który automatycznie wykonuje określone czynności, w czasie gdy jego właściciel zostawi go zalogowanego do serwera staje się rodzajem prymitywnego bota. Na ogół jednak mówiąc o ircowym bocie ma się na myśli specjalny, samodzielny program, który nie służy do rozmawiania, lecz tylko prawie wyłącznie do wykonywania pewnych, automatycznych czynności, bez bezpośredniej ingerencji użytkownika. Obraz ten gmatwa dodatkowo fakt, że wiele uniwersalnych botów ircowych konfiguruje się poprzez dodawanie do nich odpowiednich skryptów, podobnie jak zwykłe klienty IRC.

Skrypty

edytuj

Możliwość pisania skryptów do klientów IRC pojawiła się wraz z programem ircII. Większość innych klientów IRC, które posiadają wbudowane własne języki skryptowe jest w mniejszym lub większym stopniu wzorowana na języku ircII. Obecnie coraz więcej klientów IRC odchodzi od stosowania wewnętrznych języków skryptowych na rzecz możliwości dołączania do nich skryptów pisanych w uniwersalnych językach, działających także poza światem IRC.

Działanie skryptów jest oparte zwykle na:

  • definiowaniu nowych aliasów, czyli komend nie występujących oryginalnie w kliencie; w najprostszym wariancie aliasy te skracają nazwy istniejących normalnie komend (np: zamiast /join #kanał możemy pisać /j #kanał); w bardziej złożonym wykonują ich całe sekwencje, mające prowadzić do wykonania określonej akcji; w najbardziej skomplikowanym wariancie alias może uruchamiać cały program z wieloma instrukcjami warunkowymi, który realizuje określone zadanie; np. alias /takeover #kanał może uruchamiać program, który najpierw tworzy listę nicków operatorów kanału, a następnie wykonuje serię komend /mode #kanał -ooo nick1 nick2 nick3, aż do pozbawienia statusu operatora wszystkich oprócz siebie
  • automatycznego reagowania na określone zdarzenia tzw events lub remotes w postaci wysłania określonego tekstu na kanał lub na prywatny chat, wejście i wyjście z kanału, zmiana nicka, zmiana trybu kanału lub użytkownika itp; proste reakcje programuje się stosunkowo łatwo, bardziej złożone wymagają posiadania zdolności programistycznych i dobrej znajomości protokołu IRC
  • definiowaniu wygodnych skrótów klawiaturowych dla najczęściej wykonywanych komend i aliasów
  • w przypadku klientów działających w środowisku graficznym - dodawanie nowych rozwijalnych menu i zmieniania wyglądu okien.

Jakkolwiek skrypty można pisać samemu, to jednak w internecie można bez większego trudu znaleźć obszerne biblioteki skryptów, liczące tysiące pozycji, przynajmniej do najbardziej popularnych klientów IRC. Na ogół można więc bez trudu znaleźć gotowy skrypt, który realizuje te funkcje, które są nam akurat potrzebne. Zwykle, aby znaleźć bibliotekę skryptów do danego klienta IRC, wystarczy wyszukać hasło "nazwa_klienta scripts", aby uzyskać ich długą listę.

Przy pobieraniu skryptów z sieci należy uważać na czasami dołączane do nich wirusy i trojany. Najlepiej pobierać je tylko ze sprawdzonych bibliotek skryptów - polecanych na oficjalnych stronach twórców klientów IRC. Z drugiej jednak strony, wiele atrakcyjnych skryptów "bojowych" jest często niedostępnych w oficjalnych bibliotekach, gdyż mają one "zakazane" funkcje, takie jak możliwość wysyłania floodów jedną komendą, czy narzędzia do bezpośredniego ataku na system operacyjny "wroga". Tego rodzaju skrypty są często rozprowadzane przez samych użytkowników lub można je znaleźć na zakamuflowanych serwerach ftp lub XDCC.

Po ściągnięciu z sieci i rozpakowaniu skryptu, należy go zwykle umieścić w odpowiednim katalogu i uruchomić w sposób opisany w instrukcji. W przypadki ircII i wszystkich jego mutacji skrypty ładuje się komendą /load nazwa_pliku. Aby tego nie robić za każdym razem po włączeniu programu, można tę komendę na stałe dodać do pliku konfiguracyjnego programu (w ircII jest to plik .irc). W programach w środowisku graficznym komenda "/load" też często działa tak samo jak w ircII. Najczęściej jednak rozbudowane skrypty do programów pracujących w środowisku graficznym są rozprowadzanie w formie samoinstalującego się pliku.

Skrypty do programów pracujących w środowisku tekstowym zwykle wyświetlają na początku swojego działania ASCII-art z informacją o autorach i rodzajem skróconej instrukcji obsługi. Rozbudowane skrypty do programów pracujących w środowisku graficznym zwykle modyfikują menu programu, zmieniają nieco wygląd okien i "witają" użytkownika oknem z jakąś grafiką.

Skrypty do IRC można ogólnie podzielić na:

  • poszerzające funkcjonalność - dodające listę aliasów ułatwiającą wysyłanie komend, narzędzia do pracy z funkcjami dostępnymi w określonej sieci itp.
  • zabawowe - są to skrypty wysyłające automatyczne, zabawne komunikaty na kanał, skrypty z bibliotekami ANSI i ASCII-artów, skrypty do przeprowadzania quizów, gier, ułatwiających flirtowanie itp.
  • serwery DCC i baz danych - są to skrypty które ułatwiają postawienie DCC serwera lub udostępniające określone bazy danych - np. gromadzące i udostępniające listy użytkowników kanału wraz z datami ich ostatniej bytności na kanale - tego rodzaju skrypty najczęściej są dołączane do botów - można jednak znaleźć też tego rodzaju skrypty do zwykłych klientów IRC
  • obronne i bojowe - są to skrypty służące do obrony przed atakami innych użytkowników i/lub posiadające funkcje służące do atakowania innych
  • pakiety uniwersalne - są to najpopularniejsze skrypty, które zawierają w sobie jak najwięcej udogodnień - od poszerzania funkcjonalności, przez elementy zabawowe po złożone funkcje obronne i bojowe.

Słynne skrypty

edytuj

Poniżej opisane są w skrócie, wybrane "legendarne" skrypty do ircII i ich klonów oraz do mIRC-a:

LiCe był prawdopodobnie pierwszym w historii uniwersalnym skryptem do klienta IRC. Nie wiadomo dokładnie kiedy powstał, ale pierwsze jego wersje istniały już na pewno w 1992 r. Pierwotnie był stworzony do "czystego" ircII, potem rozwijano go głównie do EPIC-a. W dużym stopniu swoją popularność zawdzięcza temu, że był od początku dostępny na licencji GPL, podczas gdy inne skrypty nie posiadały określonej licencji. Za jego głównego twórcę uchodzi anonimowy programista używający nicka srfrog. LiCe posiada w zasadzie wszystko, czego można by oczekiwać od skryptu: ochronę przed atakami i floodami, gromadzenie "białej" i "czarnej" listy nicków, narzędzia do ochrony i nadzorowania kanałów, wiele użytecznych aliasów i skrótów klawiaturowych oraz inne udogodnienia. Mimo, że posiada pewne narzędzia "ofensywne" jest to raczej skrypt dla ludzi nastawionych pokojowo. Wiele późniejszych skryptów tego rodzaju było w dużym stopniu wzorowanych na LiCe. LiCe jest wciąż popularny, zwłaszcza wśród osób przywiązanych do EPIC-a.

BitchX, który obecnie jest osobnym klientem IRC pierwotnie był najbardziej popularnym "bojowym" skryptem do ircII i EPIC-a. Był on nastawiony nie tyle na ułatwianie użytkownikowi życia, lecz na skuteczne prowadzenie wojen i kontrolowanie kanałów. To prawdopodobnie ten skrypt wprowadził takie pojęcia jak "massdeop", "masskick" i podobne. Nie wiadomo dokładnie, kiedy powstała pierwsza wersja skryptu, ale przed 1996 r. był on już bardzo popularny. Za jego autorów uważa się zwykle "Trencha" i "HappyCrappy". Od 1996 r. "panasync" (Colten Edwards) zaczął przekształcać ten skrypt w osobnego klienta IRC, poprzez dodanie większości jego funkcji do kodu EPIC-a.

7thSphere to legendarny, piracki skrypt "bojowy" do mIRC-a, który oprócz typowych aliasów i komend dla skryptu służącego do "walki" posiadał też wbudowane małe, zewnętrzne programiki, które można było używać niezależnie od skryptu i mIRC-a. Programikami tymi można było próbować zawiesić system operacyjny przeciwnika, takie jak portfuck (wysyłanie na przypadkowe porty zgłoszeń uruchomienia rozmaitych usług), "pestilence" (zawieszający atak na port 195 Windowsów 95), assault (floodujący ICMP ECHO oraz UDP) i kilka innych tego rodzaju "zabawek". Skrypt ten powstał ok 1996 r. i był dostępny ze strony http://www.7thSphere.com. Szacuje się, że pobrało go i używało nie mniej niż milion ludzi. Skrypt ten został tak znienawidzony, że za jego używanie na niektórych serwerach dostawało się od razu k-linię. Jego ostatnia wersja (3.0), wypuszczona w 2000 r. została wykorzystana do utworzenia jednej z największych w historii sieci komputerów zarażonych trojanem (rodzajem programu działającego podobnie do wirusa, który przejmuje kontrolę nad zarażonym komputerem). Nie jest do końca jasne, czy trojan był dołączony przez autorów skryptu, czy też ktoś rozpowszechnił jego dystrybucję z załączonym wirusem, w każdym razie spowodowało to, że skrypt stracił reputację, a 7thSphere.com zniknęła z rynku. Do dziś istnieją strony, które proponują do ściągnięcia ten skrypt, jest to jednak zawsze obciążone ryzykiem zainstalowania sobie wirusa.

ircN to prawdopodobnie najbardziej przemyślany skrypt do mIRC-a, o charakterystyce zbliżonej do LiCe, tzn. nastawiony głównie na funkcjonalność i bezpieczeństwo. W porównaniu do innych popularnych skryptów do mIRC-a posiada stosunkowo mało "wodotrysków", ale ma za to wiele pożytecznych narzędzi przydatnych przy pilnowaniu kanału, pracy z serwisami itp. Dostępny jest na licencji GPL, rozwijany jest przez kilkunastoosobowy zespół programistów. Jest szczególnie popularny wśród użytkowników EFnetu, używa go nawet kilku ircopów.

eXtreme to solidnie napisany skrypt do mIRC-a, przeznaczony dla osób nie mających ambicji stałego zarządzania dużymi kanałami. Posiada dość dobrą podstawową funkcjonalność, ale najbardziej jest znany z dużej liczby "wodotrysków", takich jak kanałowy mp3 player, rozbudowana książka adresowa, efektowne przywitania itp. Był to prawdopodobnie pierwszy w historii skrypt z obsługą mp3 playera.

NoNameScript to kolejny solidnie napisany skrypt do mIRC-a, posiadający wyjątkowo dużo "wodotrysków", jednak dość przydatnych i przejrzyście przygotowanych. Są to m.in: obsługa kanałów RSS, wykonywanie wykresów działania sieci (statystyka lagów i splitów), dobry system ostrzegania o splitach, obsługę serwisów "Q" i "L" QuakeNetu. Jest szczególnie popularny właśnie wśród użytkowników QuakeNetu i jego "mroczny klimat" jest dobrze dopasowany do gustów graczy Quake'a.

Krótka lista bibliotek skryptów

edytuj

Boty są niemal tak samo stare jak sama sieć IRC. Prawdopodobnie pierwszym botem ircowym był GM napisany przez Grega Lindahla, który służył do prowadzenia przez IRC gry typu M.U.L.E Hunt the Wumpus. Współcześnie boty służą przede wszystkim do nadzorowania kanałów w sieciach, które nie oferują serwisu ich rejestrowania. W sieciach z serwisami można jednak spotkać boty oferujące rozmaite dodatkowe usługi, takie jak tworzenie baz danych użytkowników, zbieranie statystyk kanałowych, prowadzenie gier i quizów, dostarczanie rozmaitych informacji, prowadzenie sztucznych konwersacji i wiele innych usług.

Zanim podejmie się decyzję o postawieniu własnego bota warto się zastanowić nad sensownością takiego działania. Bot z zasady jest zalogowany do sieci 24 godziny na dobę. Zakładając, że przeciętny użytkownik IRC-a spędza na nim 2-3 godziny na dobę, jeden bot obciąża serwer i łącza w sposób odpowiadający 8-10 zwykłym użytkownikom. Stąd wielu administratorów serwerów IRC zwalcza aktywnie stawianie zbędnych botów. W niektórych sieciach istnieje obowiązek rejestrowania botów, co wymaga dobrego uzasadnienia ich postawienia, w innych z kolei użytkownicy mogą donosić ircopom o zbędnych botach i są one następnie "likwidowane" poprzez założenie dla nich k-, lub g-linii. Wreszcie istnieją sieci, w których stawianie botów jest całkowicie zabronione.

Do postawienia bota trzeba mieć odpowiednie warunki. Zaliczają się do nich:

  • posiadanie stabilnego i dobrze skonfigurowanego systemu operacyjnego (MS Windows raczej odpada)
  • posiadanie stabilnego łącza ze stałym numerem IP i zwrotnym DNS
  • odpowiednie kwalifikacje programistyczne i dużo wolnego czasu na poprawne skonfigurowanie i nadzorowanie bota.

Boty od strony funkcji, jakie spełniają, można podzielić na:

  • infoboty - gromadzące i później udostępniające rozmaite informacje, np. boty zbierające i udostępniające dane statystyczne na temat kanału, boty tworzące bazy danych użytkowników itp.
  • boty usługowo-specjalistyczne - które zazwyczaj są rodzajem łącznika między rozbudowanymi programami a określonym kanałem IRC; typowy przykład to bot Eliza poprzez którego można prowadzić konwersację ze słynnym programem Eliza udającym zwykłą konwersację
  • boty "rozrywkowe" - boty do przeprowadzania quizów, gier, boty z bibliotekami żartów itp.
  • boty "serwery plików" - spełniające rolę ircowych serwerów ftp - udostępniające publicznie lub tylko dla wybranych zasoby plików multimedialnych lub warezu.
  • boty "nadzorcy" - najczęściej spotykane - służą do ochrony i pilnowania porządku na kanałach

Infoboty

edytuj

Prawzorem wszystkich infobotów był bot o nazwie url, który gromadził adresy stron WWW, a następnie podawał je na kanał po zadaniu na kanale odpowiedniego pytania. Np: chcąc, aby url zapamiętał adres Wikipedii należało napisać:

wikipedia is http://pl.wikipedia.org

na co bot odpowiadał:

The Infobot at this point silently remembers the statement

po czym przy każdym pojawieniu się w czyjejś wypowiedzi słowa "wikipedia" ze znakiem zapytania otrzymuje się odpowiedź:

somebody said wikipedia is http://pl.wikipedia.org/

Bardzo często spotykanymi infobotami są boty gromadzące informacje o użytkownikach kanału, zwane seenami (od seen - widziałem). Rejestrują one wejścia wszystkich użytkowników oraz to, kiedy ostatni raz coś powiedzieli na kanale. Później można im zadawać pytania, pisząc na kanale:

!seen Nick

na co się otrzymuje odpowiedź w rodzaju:

Nick was here 7 hrs 31 min ago

albo

I don't know nick

albo

Nick is here now, don't U see it?

Jednym z najbardziej rozwiniętych infobotów jest blootbot rozwijany przez zespół pod kierownictwem Tima Rikera. Bot ten, w zależności od konfiguracji, może być nauczony gromadzenia wielu różnych danych oraz automatycznego przetwarzania prostych pytań na zapytania SQL kierowane do określonej bazy danych MySQL, na podstawie czego formułuje on określoną odpowiedź w języku naturalnym.

Era Eggdropa

edytuj

Początkowo (mniej więcej do 1994 r.) większość botów nadzorujących kanały IRC była unikalnymi programami pisanymi w różnych językach programowania. Każdy z botów posiadał własne cechy, które odróżniały go od innych. Napisanie ciekawego bota stanowiło rodzaj nobilitacji w światku programistów interesujących się IRC. Era "indywdualnych" botów-nadzorców dość szybko jednak się skończyła, gdyż okazało się, że prawie wszystkie one wykonują bardzo podobne zadania. Wydawało się więc sensowne napisanie uniwersalnego programu, który można by dowolnie konfigurować w taki sposób aby wykonywał on wszystkie niezbędne akcje oczekiwane od tego rodzaju bota.

Najbardziej popularnym tego rodzaju programem stał się Eggdrop napisany przez Robeya Pointera i Jamiego Rishawa w 1993 r. Jest to program napisany w języku C, który umożliwia:

  • konfigurowanie go na różne sposoby na różnych kanałach
  • ochronę kanału - poprzez stworzenie listy "przyjaciół i wrogów", odzyskiwanie statusu opa po splicie i rozłączeniu, możliwość zablokowania kanału i tworzenie list banów, które się uaktywniają dopiero po tym jak ktoś z listy zbanowanych pojawi się na kanale
  • tworzenie botnetów z kilku botów i możliwość tworzenia w nich wewnętrznych botlinii
  • dodawanie rozmaitych dodatkowych funkcji (np: podobnych w działaniu do infobotów) poprzez możliwość ładowania skryptów pisanych w języku tcl - skrypty pierwotnie pisane do Eggdropa można też używać w klientach IRC obsługujących język tcl.

Eggdrop bardzo szybko stał się niezwykle popularny i utworzone z Eggdropów botlinie można było spotkać pod koniec lat 90. XX w. na większości dużych kanałów w IRCnecie, EFnecie i innych sieciach nie posiadających serwisu rejestrowania kanałów. Ze względu na to, że poprawne skonfigurowanie botnetu złożonego z Eggdropów nie jest takie proste, zaczęły do niego powstawać gotowe zestawy plików konfiguracyjnych i pakiety skryptów tcl, o najprzeróżniejszych nazwach i zastosowaniach. Użycie tego samego pakietu konfiguracyjnego we wszystkich Eggdropach nadzorujących dany kanał gwarantowało, że nie robił się na nim bałagan, polegający na przypadkowo zaczętych na skutek niezgodności konfiguracji bitwach między botami. Często właściciele Eggdropów mających kontrolować dany kanał uzgadniali konstrukcję takiego pakietu i utrzymywali ją w tajemnicy, aby utrudnić konkurencji przejęcie kanału.

Jednym z najbardziej znanych tego rodzaju zestawów był Bear autorstwa Macieja Freudenheima, przy pomocy którego nadzorowano kanał #AGH i #plug na IRCnecie. Eggdrop z Bearem był jednak zbyt powolny i czasami zdarzało mu się przegrywać bitwy nawet z dobrze skonfigurowanym BitchX-em. Stąd zdecydowano dodać do kodu Eggdropa większość dodatkowych funkcji z pakietu Beara i w ten sposób ok. 1999 r. powstał nowy program o nazwie Void. Void nie był początkowo dostępny publicznie, lecz był rozpowszechniany wśród zaufanych znajomych Freudenheima, którzy nadzorowali największe polskie kanały w IRCnecie. W końcu jednak został upubliczniony i stał się popularny nie tylko wśród polskich użytkowników IRC, ale na całym świecie. W 2002 r. znaleziono w nim błąd krytyczny pozwalający na przejęcie całego botnetu opartego na Voidach, co spowodowało, że program ten stracił nimb "niezwyciężonego". Później powstało wiele podobnych pakietów konfiguracyjnych do Eggdropa, aVersE, diVersE, Abuse 1, Abuse 2, DetoX i kilkanaście innych, z których każdy ma rozmaite wady i zalety.

Inne boty uniwersalne, mniej lub bardziej podobne do Eggdropa to:

  • Winbot - mutacja Eggdropa działająca pod systemem MS Windows - zawodna
  • ghost - tajemnicza mutacja Eggdropa - nastawiona na kontrolę kanału - podobna nieco do Voida
  • EnergyMech - napisany w C o podobnej funkcjonalności co Eggdrop - nie ma jednak możliwości zestawiania hierarchicznego botnetu, a tylko wewnętrzny DCC chat, bez możliwości centralnego sterowania całością - nie ma też możliwości dynamicznego włączania i wyłączania skryptów
  • Supybot - napisany w języku python - posiada szereg typowych funkcji nadzorczych, ale jest bardziej nastawiony na przyjazność i łatwość w obsłudze oraz możliwość dodawania wtyczek niż na kwestie bezpieczeństwa - działa w każdym systemie operacyjnym, w którym da się zainstalować kompilator Pythona.

Lista popularnych botów IRC

edytuj
blootbot
infobot o szerokich możliwościach współpracy z MySQL
Botnix
napisany w perlu bot nadzorca przystosowany do pracy z IPv6, posiada m.in. moduł pozwalający przekształcić go w klona Elizy - nie obsługuje botnetów
ComBOT
rodzaj infobota umożliwiającego przeszukiwanie stron WWW przez komendy wydawane na kanale IRC lub na query
Eggdrop
omówiony już wyżej
Darkbot
gadatliwy bot, potrafiący prowadzić rodzaj konwersacji, odpowiadać na pytania zebrane w bibliotece FAQ-ów, posiada także elementarne funkcje potrzebne do nadzorowania kanału - napisany w C - działa pod Windowsami i pod Linuxem
EnergyMech
opisany wyżej
InfoBot
oryginalny infobot opisany wyżej
Mozbot
napisany w Perlu - bot usługowy stworzony na potrzeby społeczności projektów Mozilli - przekazuje strumień informacji z bugzilli, potrafi na różne sposoby przeszukiwać strony WWW i przekazywać na kanał rezultaty oraz posiada podstawowe funkcje potrzebne do nadzorowania kanału
YB-Bot
podobny do Darkbota - posiada funkcję seen, odpowiadanie na pytania z listy FAQ oraz podstawowe narzędzia do nadzoru nad kanałem
WinBot
opisany już wyżej klon Eggdropa pod MS Windows
Supybot
opisany już wyżej bot o funkcjonalności zbliżonej do Eggdropa
Ghost
już opisany wyżej bojowy klon Eggdropa

Źródło: Artykuł IRC bot w anglojęzycznej Wikipedii

Miejsca skąd można pobrać popularne boty:

Botnety i nadzór nad kanałami

edytuj

Do postawienia Eggdropa trzeba mieć dostęp do tzw. konta shelowego na komputerze zaopatrzonym w jakiś system operacyjny podobny do Uniksa (np: Linuksa albo FreeBSD), który jest włączony 24 godziny na dobę do stałego łącza internetowego, oraz pewien zasób podstawowych umiejętności pracy na koncie shelowym. Jeden Eggdrop, czy nawet jeden Void zazwyczaj nie wystarcza jednak do skutecznego kontrolowania kanału, ze względu na splity oraz możliwość zrywania się łącza między botem i serwerem IRC. Z tego względu na kanale musi zwykle przebywać grupa botów, najlepiej przyłączona przez różne serwery danej sieci IRC, które powinny z sobą współpracować, nawzajem się wspierając.

Problemy z nieskoordynowanymi grupami botów

edytuj

Tego typu grupy botów powstają zazwyczaj spontanicznie - odpowiednio zaawansowani technicznie użytkownicy kanału stopniowo wstawiają na kanał kolejne boty, czasami z powodów praktycznych, a czasami z powodów czysto ambicjonalnych, gdyż posiadanie własnego bota jest rodzajem ircowej nobilitacji. Każdy nowy bot musi być odpowiednio skonfigurowany, aby nie "gryzł" się z innymi. Np: musi mieć dopisane do "listy przyjaciół" wszystkie wcześniejsze boty, nie może forsować innego trybu kanału, niż uzgodniony wcześniej itp. Jednak, nawet przy dobrym zgraniu botów, gdy są one pozostawione same sobie dochodzi wcześniej czy później do samozapętlających się konfliktów. Typowy scenariusz konfliktu wygląda tak:

  • jeden z botów dopisuje z jakiegoś powodu kogoś do "czarnej listy" (np: dlatego, że rozrabiał na innym kanale)
  • drugi bot o tym "nie wie" i gdy pierwszy założy bana po wejściu osoby z "czarnej listy" drugi zdejmie tego bana, bo nie ma danej osoby na swojej "czarnej liście"
  • pierwszy ponownie założy tego bana, drugi go zdejmie i tak w kółko, co uniemożliwi normalną rozmowę na kanale, gdyż kanał będzie wyglądał następująco:
bot1 has banned !*.hostxxx.neostrada.adsl.pl
bot2 has changed channel mode to -b !*.hostxxx.neostrada.adsl.pl
bot1 has banned !*.hostxxx.neostrada.adsl.pl
bot2 has changed channel mode to -b !*.hostxxx.neostrada.adsl.pl
bot1 has banned !*.hostxxx.neostrada.adsl.pl
bot2 has changed channel mode to -b !*.hostxxx.neostrada.adsl.pl
bot1 has banned !*.hostxxx.neostrada.adsl.pl
bot2 has changed channel mode to -b !*.hostxxx.neostrada.adsl.pl
bot1 has banned !*.hostxxx.neostrada.adsl.pl
bot2 has changed channel mode to -b !*.hostxxx.neostrada.adsl.pl
itd...

  • jeśli na kanale nie będzie właścicieli botów, którzy ręcznie uzgodnią "czarną listę" na obu botach, jedynym rozwiązaniem będzie wykopać i zbanować jednego z tych dwóch botów; to jednak często pogorszy jeszcze sytuację, gdyż kolejne boty mają dopisanego tego bota do "białej listy", będą więc go chroniły
  • w rezultacie boty zaczną nawzajem wykopywać się kanału, banować, zabierać sobie opa, aż wreszcie na "placu boju" ostanie się jeden.

Stawianie botnetów

edytuj

Aby zapobiec tego rodzaju kłopotom boty muszą między sobą automatycznie wymieniać podstawowe informacje, takie jak białe i czarne listy, forsowanie określonego topicu, listy operatorów botów itd. W przypadku Eggdropów rozwiązano ten problem pisząc specjalny skrypt tcl o nazwie "botnet", który umożliwił zestawianie grup tych botów w sieci, w których wymieniają one między sobą podstawowe pliki konfiguracyjne. Sieci te konstruowane są albo poprzez stale utrzymywane połącznie DCC CHAT albo w bardziej zaawansowanych przypadkach połączenia telnet lub nawet ssh. Połączenia te zwane są botliniami i tworzą one rodzaj wewnętrznego chata całego botnetu. Chat ten jest głównie używany do automatycznej wymiany podstawowych danych konfiguracyjnych, ale może też być stosowany do prowadzenia rozmów między osobami, które zostały do botlinii dopuszczone.

Wewnątrz botnetu istnieją flagi hierarchizujące boty. Np: botnet można tak zestawić, aby jeden, główny bot gromadzil czarną i białą listę od pozostałych botów, a następnie zwrotnie uzgadniał ją z nimi. Można jedna ustalić, że np. białe listy będą różne na każdym z botów, zaś czarna będzie narzucana przez głównego bota. Wewnątrz botnetu odpowiednie flagi nadaje się też osobom dopuszczonym do poszczególnych botów. Np: część osób może sobie tylko "pogadać" w botlinii, inni mogą w pewnym zakresie sterować jednym botem, ale nie mają prawa ingerowania w działanie pozostałych, wreszcie są też tacy, którzy otrzymują flagi "globalne" pozwalające sterować całą botlinią.

Botnety mogą posiadać rozmaite topologie:

  • Rozproszoną - w której nie występuje wyróżniony główny bot, lecz boty wymieniają stale między sobą dane i pewna grupa użytkowników (zwykle właścicieli botów) otrzymuje jednakowe uprawnienia sterowania całością - jeśli boty są dobrze skonfigurowane (np: w oparciu o jeden pakiet konfiguracyjny) i żaden z ich właścicieli nie zrobi czegoś "głupiego", to taki botnet jest całkiem efektywny w nadzorowaniu kanału - niestety w praktyce często się zdarza, że któryś z właścicieli botów, zrobi coś, co zdesynchronizuje cały botnet.
  • Scentralizowaną - w której występuje główny bot, zwany hubem, który narzuca wszelkie "reguły gry" pozostałym botom. Całym botnetem zarządza się z huba. Taki botnet jest dość łatwo skonfigurować, ale można go całkowicie zniszczyć przez atak na huba. Z tego powodu często hub nie jest w ogóle logowany do serwera, dzięki czemu jest "ukryty", nie można go zaatakować z poziomu IRC, a jego wytropienie i zniszczenie wymaga wyśledzenia, na jakim koncie jest umieszczony i dokonanie włamania na to konto.
  • Mieszaną - w której występują boty "węzłowe" i boty częściowo ubezwłasnowolnione, przy czym węzłowe mogą z kolei być "ubezwłasnowolnione" przez boty węzłowe "wyższego rzędu", w wyniku czego tworzy się złożony, częściowo zhierarchizowany graf, nie posiadający jednak łatwo wyróżnialnego centralnego punktu. Tego typu botnety jest niezwykle ciężko skonstruować w sposób zapobiegający konfliktom - gdy jednak to się uda - botnet taki jest bardzo trudny do pokonania, gdyż osobom z zewnątrz bardzo trudno jest się zorientować w jego strukturze i znaleźć w nim słabe punkty.

Ogólnie "przepis" na zorganizowanie skutecznego botnetu na dużym kanale w IRCnecie, na którym bywa ponad 100 osób na raz może wyglądać tak:

  • Stawiamy scentralizowany botnet z ukrytym hubem - oparty na jednym z klonów Eggdropa np. diVersE, składający się z 8 botów - po jednym na każdym polskim serwerze IRCnetu + 3 na różnych zagranicznych + hub.
  • Na kanale akceptujemy inne boty - które włączamy do botnetu pod warunkiem zgody na kontrolowanie ich whitelisty i shitlisty, pozostawiając resztę spraw ich właścicielom.
  • Na kanale akceptujemy też wspierające botnet sesje BitchX-a - pod warunkiem, że są one ustawione w niegresywny tryb.

Społeczny aspekt botnetów

edytuj

Jak widać, kontrolowanie kanałów przy pomocy botnetów to bardzo złożona sprawa, angażująca wiele osób i wiele wysiłku. Wydawałoby się, że w tej sytuacji sieci z centralnym serwisem rejestrowania kanałów w rodzaju chanserva - powinny już dawno całkowicie zdominować IRC. Zdaniem zwolenników sieci "dzikich", bez możliwości rejestrowania kanałów, mają one tę przewagę, że powstaje w nich swoista subkultura ircowa, której bardzo ważnym aspektem jest "walka o utrzymanie kanału" i budowanie botnetów.

Botnety oprócz funkcji pilnowania kanałów mają szereg aspektów społecznych - można je rozbudowywać nie tylko w oparciu o boty z danego kanału, lecz także tworzyć botnety międzykanałowe, a nawet między różnymi sieciami IRC - celem takich rozbudowanych botnetów nie jest już zarządzanie kanałami, lecz tworzenie rodzaju "podsieci", dostępnej dla grona "wybranych" - czyli tych, którzy potrafią postawić, poprawnie skonfigurować i utrzymać bota. Botlinie w tego rodzaju botnetach - liczących czasami setki botów, stają się rodzajem "wewnętrznego kręgu IRC-a", do którego dostęp "nobilituje", daje poczucie wyższości i władzy. Dla osób z dostępem do botlinii dużych botnetów rozmawianie na zwykłych kanałach IRC staje się "lamerstwem" i "stratą czasu", zaś sieci, w których chanserv załatwia sprawę pilnowania kanału, bez korowodów ze stawianiem botów - to "zabijanie ducha prawdziwego IRC-a".

Botnety oparte na trojanach

edytuj

Botnety tego rodzaju służą do zmasowanego ataku na określone kanały, serwery lub nawet całe sieci IRC. Botnety tego rodzaju powstają w następujący sposób:

  • Do pliku dystrybucyjnego klienta IRC, skryptu lub bota dodaje się trojana i tak spreparowany plik dystrybuuje się w sieci. Czasami trojany tworzące botnety są też dodawane do programów nie mających żadnego związku z IRC.
  • Trojan ten po zainstalowaniu na komputerze ofiary uruchamia prymitywnego bota IRC, który loguje się do wybranej przez twórcę trojana sieci i wysyła do niego ustalony komunikat ctcp, że jest już gotowy do pracy, po czym zostaje włączony do botnetu.
  • Właściciel komputera, z którego został uruchomiony bot-trojan nie ma zazwyczaj o tym zielonego pojęcia.
  • Osoba kontrolująca botnet ma zatem dostęp do dużej liczby botów, którymi na określoną komendę może wejść na dowolny kanał i próbować go przejąć.
  • Często tego rodzaju botnety są też wykorzystywane do "oślepiania" serwerów, w celu spowodowania splitu i przejęcia danego kanału "zwykłymi" botami.
  • Najgorszą rzeczą, jaką robią tego rodzaju botnety, jest atakowanie nie tyle użytkowników czy serwerów IRC, lecz innych pozaircowych celów, np. określonych serwerów znienawidzonych przez siebie instytucji czy firm, najczęściej przez zmasowany atak typu DDoS (Distributed Denial of Service attack); w tym przypadku IRC służy wyłącznie do wygodnego koordynowania całego ataku.

Z poziomu pojedynczych użytkowników IRC obrona przed tego rodzaju botnetami może polegać wyłącznie na chronieniu swojego komputera przed zainstalowaniem na nim trojana, oraz informowanie IRCopów w momencie, gdy zauważy się tego rodzaju botnet. Botnety trojanowe siedzące na kanałach jest stosunkowo łatwo rozpoznać, gdyż nicki poszczególnych botów są tworzone automatycznie wg jakiegoś algorytmu - ponadto wszystkie one milczą jak zaklęte lub prowadzą nienaturalne, automatyczne rozmowy. Przykłady zrzutów ekranowych zainfekowanych kanałów można zobaczyć na stronie programu SwatIt (http://swatit.org/bots/gallery.html). Sami IRCopowie stale nadzorują swoje serwery w poszukiwaniu tego rodzaju botnetów i starają się zlokalizować źródło ich dowodzenia, a następnie zgłaszają do firmy dostarczającej internet właścicielowi botnetu poważne naruszenie netykiety.