abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 16:44 | Komunita

    Richard Hughes oznámil, že po společnostech Red Hat a Framework a organizacích OSFF a Linux Foundation, službu Linux Vendor Firmware Service (LVFS) umožňující aktualizovat firmware zařízení na počítačích s Linuxem, nově sponzorují také společnosti Dell a Lenovo. Do dnešního dne bylo díky LVFS provedeno více než 145 milionů aktualizací firmwarů od více než 100 různých výrobců na milionech linuxových zařízení.

    Ladislav Hagara | Komentářů: 0
    dnes 15:22 | IT novinky

    Americké technologické společnosti Microsoft, Google a xAI souhlasily, že vládě Spojených států poskytnou přístup k novým modelům umělé inteligence (AI) před jejich uvedením na trh. Oznámila to americká vláda, která tak bude moci prověřit, zda modely nepředstavují hrozbu pro národní bezpečnost. Oznámení podtrhuje rostoucí obavy Washingtonu z rizik spojených s výkonnými AI systémy. Americké úřady chtějí v rámci předběžného přístupu

    … více »
    Ladislav Hagara | Komentářů: 0
    dnes 14:11 | IT novinky

    Společnost Valve zveřejnila (GitLab) nákresy ovladače Steam Controller a puku. Pro všechny, kdo by jej chtěli hacknout nebo modifikovat, případně pro ně navrhnout nějaké příslušenství. Pod licencí Creative Commons (CC BY-NC-SA 4.0).

    Ladislav Hagara | Komentářů: 0
    dnes 12:44 | Komunita

    PHP bylo dlouho distribuováno pod vlastní licencí – s výjimkou částí spadajících pod licenci Zend Engine. Po několikaleté práci se povedlo PHP přelicencovat na 3bodovou licenci BSD.

    Ladislav Hagara | Komentářů: 0
    dnes 05:00 | Komunita

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube). Na Linuxu je vedle Qt frontendu nově k dispozici také GTK4 / libadwaita frontend.

    Ladislav Hagara | Komentářů: 17
    včera 20:22 | IT novinky

    Neziskové průmyslové konsorcium Khronos Group vydalo verzi 3.1 specifikace OpenCL (Open Computing Language). OpenCL je průmyslový standard pro paralelní programování heterogenních počítačových systémů.

    Ladislav Hagara | Komentářů: 0
    včera 13:11 | Nová verze

    Homebridge pro integraci chytrých domácích zařízení byl vydán ve verzi 2.0.0. Nově vedle protokolu HomeKit Accessory Protocol (HAP) podporuje standard chytré domácnosti Matter.

    Ladislav Hagara | Komentářů: 0
    včera 04:11 | Nová verze

    Omarchy je linuxová distribuce s dlaždicovým správcem oken Hyprland. Založena je na Arch Linuxu. Vydána byla v nové verzi 3.7.0 - The Gaming Edition. Z novinek lze vypíchnout příkaz omarchy a celou řadu herních možností.

    Ladislav Hagara | Komentářů: 2
    včera 03:11 | Nová verze

    CyberChef byl vydán v nové major verzi 11. Přehled novinek v Changelogu. CyberChef je webová aplikace pro analýzu dat a jejich kódování a dekódování, šifrování a dešifrování, kompresi a dekompresi, atd. Často je využívaná při kybernetických cvičeních a CTF (Capture the Flag).

    Ladislav Hagara | Komentářů: 0
    4.5. 20:11 | Nová verze

    Byla vydána nová verze 2.4.67 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 11 zranitelností.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (14%)
     (9%)
     (2%)
     (14%)
     (31%)
     (4%)
     (7%)
     (3%)
     (16%)
     (24%)
    Celkem 1515 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Léčení pythoních bugů injekcemi do procesu

    17.9.2009 00:42 | Přečteno: 1345× | programování | Výběrový blog

    Pokud vím, neexistuje nástroj jak se attachnout k běžícímu pythonímu procesu, který nebyl původně spuštěn v nějakém debuggeru. Vyjma low-level debugování v GDB. S trochou hackování lze přejít i na python-level debugování.

    Nemožnost attachnout se k pythonímu procesu podobně jak to umí gdb s C/C++ kódem mi dost začla vadit, když jsem měl spoustu pythoních procesů a jenom občas v některém z nich nastala race condition.

    Injekce - ptrace nebo gdb

    Dostal jsem nápad vyzkoušet injectnout pythoní kód, který by se připojil k pythonímu debuggeru, do běžícího pythoního procesu. Možnosti jsou asi dvě, gdb nebo ptrace. Volba padla na gdb, pro vyzkoušení je to jednodušší než přímo přes ptrace (navíc přenositelnější a není potřeba přepisovat kód v paměti).

    Nejdůležitejší věc byla zjistit, kam se může kód injectnout. Když je proces uspán v systémovém volání (třeba přes time.sleep), tak to moc dobře nejde. Něco jsem zjistil experimentováním s gdb nad pythonem a něco z gdbinit, který používají pythoní vývojáři.

    Magic revealed

    Po attachnutí se s gdb na pythoní proces se musí breaknout na místě v pythoním stack frame (funkce PyEval_EvalFrameEx), kde se bude provádět další instrukce virtuálního stroje. V pythonu 2.6.2 se switch na opcode nachází v Python/ceval.c:952.

    V promptu gdb zadám dva příkazy (viz níže definice těch příkazů):

    til Python/ceval.c:952
    callkomodo
    

    Vuala! V Komodo IDE se mi objeví connection (stačí jen dát jednou "step over") a už vidím a debuguju kód, který je interpretován attachnutým pythoním procesem. S jiným debuggerem by to nespíš šlo taky, jenže myslím většina pythoních debuggerů dělá connection obráceně (debugovaný program je server, debugger je klient), asi by se muselo hackovat jinak.

    GDB má machine interface, čímž lze tenhle postup automatizovat.

    Použité předdefinované příkazy v ~/.gdbinit (metoda brk se připojuje na debugger):

    define callkomodo
        call PyRun_SimpleString("import sys; sys.path.append('/opt/Komodo'); from dbgp.client import brk; brk('172.16.1.105', 9000);")
        continue
    end
    
    define til
        tbreak $arg0
        continue
    end
    

    Drobný problém s ladícími symboly

    U sebe jsem měl přeložen python s ladícími symboly, breaknutí na konkrétním řádku není problém. Na ostrém serveru je nutné disassemblovat distribuční python a zjistit správnou adresu pro breakpoint (nebo přeložit ručně znovu). V mém pythonu ten switch(opcode) vypadá takhle:

    0x00000000004a0d83 (PyEval_EvalFrameEx+1367):	cmpl   $0x8f,-0x1c8(%rbp)
    0x00000000004a0d8d (PyEval_EvalFrameEx+1377):	ja     0x4a7026 (PyEval_EvalFrameEx+26618)
    0x00000000004a0d93 (PyEval_EvalFrameEx+1383):	mov    -0x1c8(%rbp),%eax
    0x00000000004a0d99 (PyEval_EvalFrameEx+1389):	mov    0x546270(,%rax,8),%rax
    0x00000000004a0da1 (PyEval_EvalFrameEx+1397):	jmpq   *%rax
    
           

    Hodnocení: 100 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    davida avatar 17.9.2009 08:43 davida | skóre: 13 | blog: Blog
    Rozbalit Rozbalit vše Re: Léčení pythoních bugů injekcemi do procesu

    pekne, precteni takoveho blogu po ranu cloveku hned spravi naladu ;-)

    alblaho avatar 17.9.2009 09:45 alblaho | skóre: 17 | blog: alblog
    Rozbalit Rozbalit vše Re: Léčení pythoních bugů injekcemi do procesu
    Fíha. Respekt!
    limit_false avatar 17.9.2009 22:10 limit_false | skóre: 23 | blog: limit_false
    Rozbalit Rozbalit vše sys.settrace(), ASLR/PIC kód bez debugovacích symbolů

    Pro jiné pythoní debuggery by mělo stačit injectnout volání sys.settrace() se správně nastavenou trace funkcí a výsledek by měl být podobnej.

    Trocha jsem to zkoušel na pythoní binárce bez ladících symbolů - musíte specifikovat adresu. Jenže třeba s ASLR + PIC kódem se adresy pořád mění. Nakonec jsem boj s gdb vyhrál :-) Lze to napsat takhle (samozřejmě je nutné znát správný offset):

    til *(&PyEval_EvalFrameEx+998)

     

    When people want prime order group, give them prime order group.
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.