Wstęp
- 3703
- 1199
- Igor Madej
Dla większości z nas szyfrowanie WEP stało się żartem. WPA szybko idzie w ten sam sposób dzięki wielu narzędziom, takim jak Aircrack-Ng. Ponadto sieci przewodowe nie są obcy również niechcianymi gośćmi. Każdy poważnie o bezpieczeństwie powinien mieć dobry system wykrywania włamań w swoim zestawie narzędzi.
Dostępnych jest już bardzo dobre IDS (systemy wykrywania wtargnięcia). Dlaczego ktokolwiek chciałby wymyślić koło w Bash??? Istnieje kilka powodów. Oczywiście skrypty bash mogą być bardzo lekkie. Szczególnie w porównaniu z niektórymi programami GUI, które są tam. Podczas gdy programy takie jak Etherape wciągają nas ładnymi kolorami, wymagają ciągłego monitorowania, aby wiedzieć, kiedy zmieniła się sieć. Jeśli jesteś jak większość z nas, używasz komputera tylko do dwóch rzeczy, pracy i zabawy. Korzystając z dzwonka systemowego do powiadomienia o nowych klientach online, możesz pozostawić ten skrypt działający i nie musisz mieć stałego oglądania. Jeśli zdecydujesz, że chcesz sprawdzić, co podejrzany klient robi dokładniej, zawsze możesz otworzyć Etherape, Wireshark lub wybrane narzędzie. Ale dopóki nie masz problemu, możesz grać lub pracować nad innymi rzeczami.
Kolejną zaletą tego programu jest to, że będzie on wyświetlał adresy IP tylko w sieciach podłączonych do komputera. Jeśli hostowałeś zatłoczony serwer lub może pobierać najnowszą dystrybucję Linux przez klienta torrentów, identyfikatory mogą być zalane połączeniami. Szukanie nowego złośliwego klienta może być jak szukanie igły w stosie siana. Chociaż ten skrypt może wydawać się prosty w porównaniu z innymi IDS, prostota może mieć również swoje korzyści.
Czego będziesz potrzebować
NMAP jest wymagany, aby ten skrypt działał. Nie będziemy wykonywać żadnego skanowania portów. Jednak aby ten skrypt był szybki, potrzebowaliśmy czegoś lepszego niż zwykłe ping. Parametr NMAP -SP użyje tylko skanowania ping. Istniały pewne różnice w sposób, w jaki NMAP wyświetla informacje między wersjami. Jak dotąd ten skrypt został przetestowany tylko za pomocą NMAP 5.00 (Debian Squeeze) i 5.21 (Debian Sid). Możesz mieć szczęście z innymi dystrybucjami i wersjami NMAP. Jednak ze wszystkimi możliwościami mogłem wesprzeć tylko pary.
Musisz także upewnić się, że używasz Bash wersja 4.0 lub więcej. Powinieneś to znaleźć w dowolnym stabilnym lub nowszym dystrybucie. Ale wszelkie wersje BASH poniżej, które nie będą obsługiwać tablic używanych w tym skrypcie. Wymagany jest również dostęp do root lub polecenie ARP nie będzie blokujące żadnych klientów.
NOTATKA: Ten skrypt nie działa dobrze z wirtualnymi interfejsami sieciowymi, takimi jak VMware, VirtualBox i itp.
Wykonanie skryptu
Aby uruchomić ten skrypt, po prostu uruchom:
# chmod +x piwa.cii; ./Leecher.cii
W tej chwili nie ma parametrów do ustawienia.
Jak działa ten skrypt
Przejdź na razie wszystkie funkcje początkowe, abyśmy mogli zobaczyć rzeczywisty przepływ skryptu. Pierwszą rzeczą, którą robimy, jest sprawdzenie, czy użytkownik to root, a NMAP jest instalowany w bieżącym systemie. Jeśli nie jest to skrypt wyjaśni, że wymagane są prywatne korzenie lub że NMAP jest tutaj zależnością i wyjściem. Jeśli te wymagania zostaną spełnione, skrypt pominą się z powitaniem użytkownika i wyjaśni niektóre funkcje. Użyłem setterm, aby wyłączyć kursor. To był zdecydowanie estetyczny.
Ustawiłem pułapkę Control-C, aby skrypt się zatrzymał. Chociaż możesz pomyśleć „poczekaj, Control-C i tak zatrzymuje program wiersza poleceń!„Chociaż jest to zwykle prawda, znalazłem Forever Pętla, której używamy później, aby spowodować problemy zatrzymujące skrypt z Control-C. Korzystając z pułapki z SIGINT, byliśmy w stanie uczynić tę pracę. Ustawiamy niektóre zmienne w poniższej instrukcji IF, aby sprawdzić, z której obsługiwanej wersji NMAP używamy tutaj. Jest to ważne, ponieważ dane wyjściowe jest zupełnie inne między tymi wersjami. Pierwszą rzeczą, którą tu zrobiliśmy, było stworzenie pętli, która najpierw otrzyma wersję NMAP, której tu używamy. Jest to ważne, ponieważ dane wyjściowe jest zupełnie inne między tymi wersjami. Następną rzeczą, którą tutaj zrobiliśmy, było wykonanie pętli, która najpierw otrzyma adresy IP wszystkich naszych interfejsów, które są obecnie online. Używamy również AWK, aby odfiltrować 127.0.0.1 Ponieważ nie ma potrzeby skanowania adresu pętli. Plus używamy AWK do wycięcia końcowego oktetu w tych adresach IP. Na przykład, jeśli interfejs ETH0 ma adres IP 192.168.1.12 Nie potrzebujemy zakończenia 12. Normalnym skanem takiej podsieci byłoby „NMAP -SP 192.168.1.0/24 ”, więc na razie ta pętla rozebrnie dowolny z adresów IP na dowolnych aktywnych interfejsach i przekazuje je na nmap, dopóki nie skończymy. Wewnątrz pętli otrzymujemy wartość dla interfejsu IP i dołączamy ”.0/24 ”, aby zeskanować całą sieć w tym zakresie.(Lub 0-255) Przekażemy prawidłowe zmienne dla wersji NMAP, więc Awk wie, gdzie zwrócić IP z każdego skanowania. Wszystkie wartości zwrócone z każdego skanowania zostaną podłączone do tablicy. Po pierwszym skanowaniu wszystkich sieci interfejsów po prostu użyjemy innej pętli, aby wyświetlić początkowe wyniki użytkownikowi.
Powinienem tutaj wskazać, co mówi nowa następująca wiadomość dla użytkownika. Jeśli chcesz usłyszeć dzwonek systemowy, musi być włączony w ustawieniach komputerów stacjonarnych. Lokalizacja tego będzie się różnić w zależności od wersji KDE, GNOME, XFAFE lub dowolnego pulpitu, którego używasz. Możesz jednak pomyśleć, że tylko dlatego, że wcześniej słyszałeś dzwonek. Zauważyłem, że mój system ma podobny dzwonek, który dał mi znać, że bateria laptopa ma się umrzeć. Sprawdź, jak włączyć dzwonek systemowy na dystrybucji, jeśli wystąpią jakiekolwiek problemy.
Dalej jest Forever Pętla, która utrzymuje stałe skanowanie i monitorowanie tego skryptu. Jeśli jesteś nowy w Bash lub na zawsze pętle, może to zapytać, dlaczego użylibyśmy czegoś, co jest nieskończoną pętlą. Wielu z was bez wątpienia zostało ostrzeżonych przed niebezpieczeństwem nieskończonych pętli i tego, jak mogą rozbić maszynę. Jak zapewne zauważyłeś, po pierwszym skanowaniu użyliśmy instrukcji snu. Użyjemy tego ponownie w naszej Forever Loop i niektórych funkcjach, które zawiera. Sen pozwoli na zatrzymanie się i tymczasowo zwrócić zasoby komputerowi. Przetestowałem ten skrypt na dość skromnym procesorze i nie miałem żadnych problemów. Ale jeśli jesteś na bardzo starej maszynie lub już pod kątem zasobów, możesz zmienić liczbę sekund, w których snu jest używane.
Pierwszą rzeczą, którą zrobi nasza Forever Loop, jest przeskoczenie do funkcji o nazwie Engine (). To, co tu robimy, jest dokładnie takie samo jak nasz pierwszy skan. Po uruchomieniu tej funkcji wracamy do naszej pętli na zawsze, gdzie instrukcja IF będzie porównywała, czy te dwie tablice są takie same. Jeśli są takie same, tablica z drugiego skanu zostanie opróżniona, aby zapobiec zduplikowaniu wartości na następnej iteracji pętli. Jeśli jednak wartość jest różnicą w tych dwóch tablicach, zeskoczymy do klauzuli innej, która przekierowuje nas do naszej funkcji przerwania.
Funkcja przerwania zatrzyma się i ogłosi użytkownikowi, że lista klientów zmieniła się. Stąd wywołamy funkcję o nazwie „dwa razy”, w której wyświetlamy użytkownikowi zawartość adresów IP w drugiej tablicy. Zapytamy teraz użytkownika, czy chce zablokować adres IP. Może to być dowolny adres IP, a nie tylko wyświetlane. Jeśli użytkownik odpowie „Y” dla tak, poprosi o wprowadzenie adresu IP. Jeśli wprowadzony adres IP nie jest null, będziemy pingować ten adres IP, aby dodać jego adres MAC do naszej pamięci podręcznej ARP. Z jakiegokolwiek powodu, gdy NMAP wypycha sieć, nie robi tego. Następnie używamy ARP, aby podać nam adres MAC klienta. Ponieważ IP mogą być ponownie przypisane przez router, nie chcemy blokować według adresów IP. Po zakończeniu używamy zagnieżdżonej instrukcji IF, aby sprawdzić, czy adres MAC, który teraz zapisaliśmy w $ Mac, jest null. Jest to dobre do sprawdzania błędów na wypadek, gdyby użytkownik wprowadził ciąg śmieci. Jeśli adres MAC nie istnieje, informujemy użytkownika, że klient istnieje lub opuścił sieć i wznowić nasze monitorowanie w pętli Forever. Jeśli istnieje adres MAC. Powinienem tu zauważyć, że nie blokuje cię wysyłania pakietów do tego urządzenia, tylko przychodzący ruch do Ciebie. Nie chroni to jednak całej Twojej sieci. Tylko maszyna, której używasz, dopóki twoje reguły IPTABLES nie zostaną wypłukane. Jeśli przypadkowo zablokujesz klienta, który uważasz, że musisz się z tym połączyć, możesz wydać tę regułę z kilkoma prostymi poleceniami. Instrukcja IF jest kontynuowana poprzez informowanie użytkowników, że adres MAC wprowadzonego adresu IP jest teraz zablokowany i pokazuje obecnych klientów online. Zablokowany klient nadal pojawi się na tej liście, ponieważ zablokowaliśmy go tylko przed nami, a nie sieci. Gdyby użytkownik postanowił nie blokować klienta, po prostu wyświetlilibyśmy zmianę w sieci i wróciliby do naszej pętli na zawsze.
Niezależnie od tego, co użytkownik zrobił w funkcji przerwania, musimy teraz zaktualizować wartości naszych tablic. Ponieważ druga tablica przechowuje obecnie nowe wartości naszej sieci, musimy przekazać to drugiej tablicy, zanim funkcja silnika ponownie ją wypełni. Najpierw wyjaśniamy, że tablica, aby zapobiec dowolnym zduplikowanym wartościom, a następnie skopiuj zawartość drugiej tablicy do pierwszej tablicy. Teraz użyj pustej tablicy, a my jesteśmy gotowi uruchomić pętlę z funkcją silnika.
Oczywiście była jedna funkcja, którą do tej pory pominąłem. Być może zauważyłeś, że nasza pierwsza wiadomość dla użytkownika powiedziała, że w dowolnym momencie uderzył w Control-C, aby zablokować dodatkowych klientów lub wyjść. Nasza pułapka wywołuje pierwszą funkcję o nazwie Control_C (). Wszystko, co tutaj zrobiłem, to zapytać użytkownika w instrukcji IF, czy chce zablokować użytkownika w prawie taki sam sposób, jak poprzednio. Zauważysz, jeśli użytkownik odpowiada tak na instrukcję IF, jest tutaj nowy wiersz. „Bash Leecher.sh ”służy do ponownego uruchomienia tego skryptu. Jeśli nazwałeś ten skrypt coś innego, musisz podać to tutaj. Ponownie wykorzystujemy nasz skrypt, ponieważ pułapka chce nadal wysyłać Siginta i zabić scenariusz. Tworzenie nowej instancji zapobiega niechcianiom skryptu. Jednak utworzenie nowej instancji nie pozwala na zakończenie Sigint.
Być może zauważyłeś również, że też spać trochę dłużej. Ma to tylko dać użytkownikowi czas na przeczytanie tego, co dzieje się przed przejściem na naszą nową instancję skryptu, który przejmie ten terminal. Gdyby użytkownik wybrał „nie” zamiast „tak”, klauzula else po prostu pozwoliłaby scenariuszowi wyjść. Z pewnością użyjemy setterm, aby zwrócić nasz kursor lub nie będziemy mieć go w tym terminalu.
Cel blokowania w locie jest łatwy. Możesz mieć więcej niż jednego klienta do zablokowania, jeśli istnieje wielu agresywnych klientów. Możesz zdecydować później po pominięciu bloku szansy klienta w funkcji przerwania, którego potrzebujesz. A może wiesz, że coś jest nie tak, gdy tylko zaczniesz scenariusz. Gdyby żaden nowi klienci nie przyszli ani nie zostawili w danej sieci.
Jak można poprawić ten skrypt
Oczywiście słyszenie, jak dzwonek systemowy nieustannie wychodzi na fałszywe pozytywy może być denerwujące. Umożliwienie tego scenariusza do klientów białej, której ufasz. Dzwonek systemowy może być zdecydowanie uciążliwy, jeśli jedna osoba ma problemy z utrzymaniem kontaktów przez długi czas.
Czasami możesz zauważyć, że niektórzy klienci przełączają się z IP na nazwy hosta. Wiele programów, takich jak Etherape, robi to samo. Jeśli router działa jako Twój DNS prawdopodobnie pokaże nazwę hosta w sposób ciągły. Nie sądzę, że któryś z was będzie chciał blokować połączenia z routerem. Jednak oferowanie parametru do przejścia na IP może być miłe dla niektórych z was.
Istnieje również niewielki problem z rozwidleniem skryptu, gdy użytkownik blokuje klienta z Control-C. To nie stanowi niebezpieczeństwa, chyba że użytkownik zdecyduje się zablokować tysiące klientów z Control-C. Jednak wszystkie przypadki scenariusza są zabijane po wyjściu. Ale ponieważ wybieramy się tutaj na podstawowe, powinno być w porządku.
System wykrywania wtargnięcia z BASH
#!/bin/bash # conUtt and Exit Funkcja Control_C () Clear Echo -e „Czy chciałbyś zablokować połączenia z klientem?\ n "echo -e" enter y lub n: "czytaj yn if [" $ yn "==" y "]; następnie echo -e" \ nenter adres IP do blokowania: \ n " ip]; następnie echo -e "\ nnow odzyskiwanie adresu MAC do blokowania… \ n" ping -c 1 $ ip> /dev /null mac = "arp $ ip | Grep eter | awk "print 3 $" if [-z $ mac]; Następnie Clear Echo -e "\ n *** Klient nie istnieje lub nie jest już \ w tej sieci ***" echo -e "\ nSKipping Action i wznowienie monitorowania.\ n \ n "sleep 2 bash pijawek.sh exit 0 else iptables -a wejście -m Mac - -Mac -source $ mac -j upuść echo -e "\ nclient z adresem MAC $ mac jest teraz blokowany.\ n „echo -e” będziemy kontynuować monitorowanie zmian \ w.sh exit 0 fi else clear echo -e "\ n \ nleecher opuścił \ n \ n" setterm -cursor na rm -f $ pid exit 0 fi # Wydrukuj skanowanie z silnika () dwa () g = 0 len = $ #second [@] dla ((g = 0; g /dev /null mac = "arp $ ip | grep eter | awk" print 3 "if [-z $ mac]; następnie wyczyść się echo -e "\ n *** Klient nie istnieje lub nie jest już w \ tej sieci ***" echo -e "\ nSKipping Action i wznowienie monitorowania.\ n \ n "else iptables -a input -m Mac - -Mac -source $ mac -j upuść echo -e" \ nclient z adresem MAC $ mac jest teraz blokowany.\ n „echo -e” będziemy kontynuować monitorowanie zmian \ u klientów \ n \ n „echo -e” obecni klienci to: \ n "echem echo -e" \ nResuming Monitoring… "fi else clear echo -e" Obecni klienci to: \ n „dwa razy echo -e” wznowić monitorowanie… „Fi # funkcja, aby nadal monitorować dowolne zmiany Engine () # Scan Networks w celu porównania zmian. dla podsieci w $ (/sbin/ifconfig | awk '/inet addr/&& !/127.0.0.1/ && !a [2 $] ++ \ print substr (2,6) ') do drugiej+= ("$ (nmap -sp $ podsieć%.*.0/24 | AWK 'index (0 $, t) \ print $ i' t = "$ t" i = "$ i") ") sleep 1 dion # upewnij się, że użytkownik jest zalogowany jako root, jeśli [[$ euid -Ne 0]]; następnie echo "Ten skrypt musi być uruchomiony jako root" 1> i 2 exit 1 fi # Sprawdź, czy nmap jest zainstalowany ifnmap = "type -p nmap" Jeśli [-z $ ifnMap]; następnie echo -e "\ n \ nnmap musi być zainstalowany dla tego programu, aby działał \ n „echo -e” tylko nmap 5.00 i 5.21 są obsługiwane w tym czasie \ n „echo -e” Proszę zainstalować i spróbuj ponownie „wyjść 0 fi clear echo -e” \ nnow Znalezienie klientów w sieci lokalnej „echo -e” Press Control -C w dowolnym momencie Aby zablokować dodatkowych klientów lub wyjść \ n " # Usuń pliki tymczasowe na wyjściu i pozwolić na wyjście Control-C. Trap Control_C sigint # wyłącz kursor setterm -Cursor Off # Zrób niektóre tablice i zmienne Deklaruj -A pierwsze zadeklaruj -a Sid = 5.21 # Sprawdź, jaką wersję NMAP, jeśli [5.21 = $ (nmap --version | awk '/ nmap/ print $ 3')]; Następnie i = 5 t = raport else i = 2 t = host fi # Pobierz IP z interfejsów i uruchom pierwszy skanowanie podsieci w $ (/sbin/ifconfig | awk '/inet addr/&& i & !/127.0.0.1/ && !a [2 $] ++ print \ substr (2,6) ') do uprzedni+= ("$ (nmap -sp $ podsieć%.*.0/24 | AWK 'index (0 $, t) print $ i' \ t = "$ t" i = "$ i") ") sleep 1 echo -e„ Obecni klienci to: \ n ”#Display Elementy tablicy i dodaj Nowe linie e = 0 len = $ #First [@] dla ((e = 0; e < $len; e++ )); do echo -e "$first[$e]\n" done echo -e "Leecher is now monitoring for new clients." echo -e "\nAny changes with clients will be reported by the system bell." echo -e "If bell is not enabled details will log to this console." # Forever loop to keep monitoring constant for (( ; ; )) do engine if [[ $first[@] == $second[@] ]]; then second=( ) else interupt sleep 1 first=( ) first=("$second[@]") second=( ) fi done
Przykładowy wyjście
Teraz znajdowanie klientów w sieci lokalnej Control-C w dowolnym momencie, aby zablokować dodatkowych klientów lub wyjść z obecnych klientów: 192.168.12.1 192.168.12.9 192.168.12.43 Meephistolist 10.0.0.121 10.0.0.137 10.0.0.140 Leecher monitoruje teraz nowych klientów. Wszelkie zmiany z klientami zostaną zgłoszone przez system systemu. Jeśli Bell nie jest włączony, szczegóły zalogują się do tej konsoli. ================================================== ============ Lista klientów zmieniła się! 192.168.12.9 192.168.12.43 Meephistolist 10.0.0.140 Czy chciałbyś zablokować połączenia z klientem? Wprowadź Y lub N: Y Wprowadź adres IP, aby zablokować: 192.168.12.9 ================================================= ========== Klient z adresem MAC 7C: ED: 8d: 9c: 93: 8e jest teraz zablokowany. Będziemy kontynuować monitorowanie zmian w klientach =============================================================== ===================
Powiązane samouczki Linux:
- Jak przedłużyć menedżer plików Thunar o niestandardowe działania
- Menedżerowie sieci GUI Linux
- Lista najlepszych narzędzi Kali Linux do testowania penetracji i…
- Jak ulepszyć i debugować skontakt
- Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
- Czy Linux może uzyskać wirusy? Badanie podatności Linuksa…
- Pełne szyfrowanie dysku z Veracrypt na Ubuntu Linux
- Jak zarządzać połączeniami bezprzewodowymi za pomocą IWD w Linux
- Ubuntu 20.04 Monitorowanie systemu za pomocą widżetów study
- Ubuntu 22.04 Monitorowanie systemu za pomocą widżetów study
- « Jak zliczyć występowanie określonego znaku w ciągu lub pliku za pomocą BASH
- Wyjaśniono nawias scenariusza bashu »