Název:

Analýza binárního kódu

Zkratka:IAN
Ak.rok:2018/2019
Semestr:letní
Studijní plán:
ProgramObor/
specializace
RočníkPovinnost
BIT-2.volitelný
IT-BC-3BIT2.volitelný
Vyučovací jazyk:čeština
Kredity:4 kredity
Ukončení:klasifikovaný zápočet
Výuka:
hod./sempřednáškasem./cvič.lab. cvič.poč. cvič.jiná
Rozsah:14001213
 zkouškatestycvičenílaboratořeostatní
Body:0400060
Garant:Vojnar Tomáš, prof. Ing., Ph.D. (UITS)
Zástupce garanta:Rogalewicz Adam, doc. Mgr., Ph.D. (UITS)
Přednášející:Kozina Stanislav, Mgr. (RedHatCZ)
Cvičící:Tesař Michal (RedHatCZ)
Vacek Daniel (RedHatCZ)
Fakulta:Fakulta informačních technologií VUT v Brně
Pracoviště:Ústav inteligentních systémů FIT VUT v Brně
Prerekvizity: 
Operační systémy (IOS), UITS
Programování na strojové úrovni (ISU), UITS
Rozvrh:
DenVýukaTýdenMístnostOdDoPSKSkupiny
Stpřednáška - První přednáška IAN2019-02-13A112 09:0010:50
Stpřednáška - Druha prednaska IAN2019-03-06A112 09:0010:50
Stpřednáška - Treti prednaska IAN2019-03-13A112 09:0010:50
Stpřednáška - Ctvrta prednaska IAN2019-04-03A112 09:0010:50
Stpřednáška - Pátá přednáška IAN2019-04-10G202 09:0010:50
Stpřednáška - Šestá přednáška IAN2019-04-24A112 09:0010:50
Stpoč. lab - Nahradni cviceni misto 19.5.2019-04-17Q305 09:0010:50
 
Cíle předmětu:
  Cílem předmětu je seznámit studenty s fungováním moderních operačních systémů Unixového typu na úrovni blízké binárnímu kódu a s dostupnými nástroji pro pozorování chování takových systémů, a to zejména analýzy situace po jejich pádu.
Anotace:
  Tento předmět rozšiřuje dovednosti a znalosti získané v předmětu Programování na strojové úrovni (ISU) a v předmětu Operační systémy (IOS) s cílem porozumění obrazu systému po pádu (crash dump). Znalost programování na úrovni assembleru a aplikačních binárních rozhraní (ABI) je aplikována na reálný Unixový operační systém. V rámci předmětu jsou podrobně rozebírány binární soubory systému, jejich struktura a zpětně disasemblovaný binární kód. Součástí je podrobné studium výstupu kompilátoru s ohledem na sestavování a běh systémového kódu a diskuse rozdílů a vazeb mezi architekturami procesorů, kompilátory a binárními rozhraními. Dále jsou prezentovány vybrané koncepty typické pro programování jádra operačního systému, jejichž znalost je důležitá pro analýzu činnosti operačního systému. Mezi těmito koncepty jsou mj. detaily zpracování přerušení, fronty úloh, synchronizace vláken a správa paměti v jádře, tzv. SLAB allocator. Takto získané znalosti jsou pak využity jako základ k výkladu možností sledování chování operačního systému na úrovni binárního kódu za jeho běhu a dále také analýzy obrazu systémové paměti po pádu (crash dump analysis). V obou případech je kladen důraz na použití nástrojů běžně dodávaných v Unixových distribucích.
Požadované prerekvizitní znalosti a dovednosti:
  Znalost jazyka C a assembleru pro x86. Pochopení obecných principů operačních systémů, praktická zkušenost s Unixovými systémy.
Získané dovednosti, znalosti a kompetence z předmětu:
  Praktická zkušenost s analýzou obrazu paměti operačního systému po pádu. Znalost struktury binárních souborů používaných na Unixových systémech (ELF). Porozumění rozdílů a vazeb mezi architekturami procesorů, překladači a ABI standardy. Úspěšní absolventi kurzu budou dále také schopni podrobně sledovat práci operačních systémů na binární úrovni i za jejich běhu.
Dovednosti, znalosti a kompetence obecné:
  Prohloubení znalostí z oblasti operačních systémů, strojových jazyků a možností ladění a analýzy.
Proč je předmět vyučován:
  Předmět seznámí studenty blíže s fungováním jádra Linuxu, s možnostmi analyzovat jeho stav po pádu i sledovat jeho činnost za jeho běhu.
Osnova přednášek:
 
  1. Architektury počítačů, registry, implicitní a explicitní operace na zásobníku. Architektury x86 a x86_64. System V ABI na architektuře x86_64, červená zóna.
  2. Sestavení, linkování a spouštění kódu. Příklady typických optimalizací při sestavování kódu, optimalizace na zásobníku. Porozumění Unixovým spustitelným souborům formátu ELF a objdump.
  3. Analýza obrazů systémové paměti po pádu systému, symboly DWARF, použití nástroje crash(8).
  4. Analýza obrazů systémové paměti po pádu systému, chyby typu Oops, příznaky jádra, sysrq.
  5. Správa procesů a paměti v jádře, task_struct, vmas, SLAB allocator.
  6. Zpracování přerušení, odkládání práce, spodní poloviny, softirqs, tasklets, pracovní fronty.
  7. Živé sledování jádra (SystemTap, ftrace), zámky, problém uváznutí a zamrznutí systému a jejich analýza a opakované vyvolání.
Osnova počítačových cvičení:
 
  1. Dekompozice ELF souboru, dekódóvání jeho sekcí a jeho zpětný překlad do assembleru.
  2. Použití nástroje crash(1) v Linuxu.
  3. Analýza obrazu paměti systému Linux po jeho pádu na architektuře IA-32.
  4. Analýza obrazu paměti systému Linux po jeho pádu na architektuře AMD64.
  5. Trasování systému za běhu pomocí SystemTap a ftrace.
  6. Trasování a analýza uváznutí systému.
Osnova ostatní - projekty, práce:
 
  1. Zjištění příčiny pádu systému z obrazu systémové paměti na architektuře IA-32.
  2. Zjištění příčiny pádu systému z obrazu systémové paměti na architektuře AMD64.
  3. Monitorování běhu systému pomocí SystemTap.
Literatura referenční:
 
  • Ljubuncic, I.: Linux Kernel Crash Book, 2011.
  • Drake, C., Brown, K.: Panic! UNIX System Crash Dump Analysis, Prentice Hall, 1995.
  • Hofmann, F.: The Solaris Operating System on x86 Platforms, Crashdump Analysis, Operating System Internals, 2005.
Literatura studijní:
 
  • Intel Corporation: Intel 64 and IA-32 Architectures Software Developer Manuals, 2015.
  • Matz, M., Hubicka, J., Mitchell, M.: System V Application Binary Interface, AMD64 Architecture Processor Supplement, 2013.
Kontrolovaná výuka:
  Získané znalosti studentů jsou ověřovány prostřednictvím tří projektů zaměřených na zjišťování příčin problémů operačního systému na základě obrazu paměti (3x 20 bodů) a dále písemným závěrečným testem (40 bodů).
Průběžná kontrola studia:
  Hodnocení projektů bude formou technických zpráv s detailním popisem příčiny pádu systému. Zprávy musí být odevzdány v termínu, jinak budou hodnoceny 0 body.
Podmínky zápočtu:
  Podmínkou udělení zápočtu je získání alespoň 50 bodů celkem, přičemž alespoň 24 bodů musí student získat z projektů a alespoň 16 bodů ze závěrečného testu.
 

Vaše IPv4 adresa: 54.87.61.215