INTRODUCERE
Metode practice de injectare de cod in BIOS
Persistenta adevarata
Comportamentul fluxului de date ROOTKIT
Independenta fata de OS
PUTINA ISTORIE
• Cele mai folosite metode de a obtine
persistenta sunt……..
• BACKDOOR-ul prin USER
• BACKDOOR-ul prin KERNEL
• Cum putem eficientiza aceste metode???
Bios- Soft cu caracteristici ciudate?
• Preia controlul inaintea oricarei alte aplicatii
• Nu prezinta interes pentru NICI UN SOFT
ANTIVIRUS
• Independent de OS (Nu tine cont de nimic, si
de nici o instructiune a sistemului)
• REZULTA…
De fapt ce e BIOS-UL??
• BIOS –ul se traduce prin BASIC INPUT OUTPUT
SYSTEM
• El initializeaza transferul de date(RAM, North
Bridge, etc.)
• Capacitatea cipului:MINIM 256 Kb
• De obicei este stocat in format EEPROM sau
flash
STRUCTURA BIOS-ULUI
• Este compus din diverse linii de tip LZH
Compresate in module de 8 bit (un octet)
• Exista si module necompresate..cum ar fi:
– Bootblock:Cand incarca afisajul POST poate bloca
anumite actiuni, pentru a pastra integritatea
sistemului
– Boot-area de tip URGENTA:Decompreseaza restul
moduleleor pentru a facilita anumite actiuni de tip
RECOVERY sau MotherBord FLASH SAFE DISK
• Face verificari aleatorii a valorilor nominale ale
sistemelor prezente pe masina de calcul..
CUM FUNCTIONEAZA??
• Prima comanda executata de CPU este un cod
operational de 16 byte localizat la adresa
F000:FFF0
• Bootblock POST (Power On Self Test) urmeaza in
executie.
• Urmeaza decompresia fiecarui modul si se
executa.
• Se verifica si se executa modulele de tip PCI
ROMs.
• Se verifica sectoarele de boot de pe HDD si se
executa, pornind OS-ul.
Procesul de Update/Flash
• BIOS –ul suporta update.
• Producatorii ofera update-uri pentru a asigura
o cat mai buna functionare
• Update-urile se bazeaza, paradoxal pe cipul
de South-Bridge si nu pe cipul vizat de update
• Interfata CoreBOOT intervine in procesul de
update al BIOS-ului
Unde putem face un pach?
• BIOS –ul contine cateva linii de verificare a integritatii
• Orice modificare in acele linii aduce dupa sine un sistem
care nu mai poate porni
• Eu folosesc doua technici
• 1) Folosesc un soft de generare a fisierului
• 2) Aletrez codul original si il codez in pachete de un octet
• Cum pot obtine un pach in trei pasi simpli:
• 1) Obtin validarea chipului folosind flashrom
• 2) Fac un pach cu bypass si il compresez
• 3) Re-flash
Unde putem interveni?
• Practic oriunde:
• f000:fff0: Este prima linie executata
INT 0x19: Cheie rulata EXACT inaintea initializarii OS-ului
• Inserarea unui modul ROM : Valoarea executata inaintea
verificarii POST
• Cea mai practica metoda gasita de mine: Nu compresati
liniile care ar trebui compresate! (overload memory)
• Nu va chinuiti sa gasiti cheile in sistem, toti le pun in acelasi
loc
• Solicitati aceleasi date de mai multe ori in timpul aceluiasi
proces
Ce putem face de fapt?
• Depinde. Ce resurse avem la dispozitie?
Acces standard la HDD(Int 13h)
Memory Manager (PMM)
• network access ,modem sau alta piesa(Trebuie
driver)
• Eu am o metoda pt a altera datele de pe HDD:
• 1) Modific fisierele de tip shadow (unix)
• 2) Injectie de cod in datele binare ale
Windows-ului
Codurile Shell
• Aceste coduri sunt toate create in 16 biti
• Partea proasta este ca folosim sistemul bios-ul mereu,
si aceste coduri actioneaza fara a le putea controla.
• Usor de decompresat: BIOS-ul executa un mediu de
lucru care poate fi emulat cu fisiere COM sub DOS
• Pseudocod-uri:
• 1) Verifica semnalele de READY/STOP
• 2) Verifica initializarea codurilor de sistem
• 3) Ruleaza codul
Ce putem imbunatati?
• Putem folosi vulnerabilitatile sistemului BIOS
pentru a insera comenzi si parametrii proprii.
• Folosind o metoda proprie si cu ajutorul unui
HEX editor,am modificat cipul, pentru a obtine
o facilitate pe care o doream de mult
• CONTROLUL PROPRIULUI PC, DE LA DISTANTA,
CU TELEFONUL MOBIL.
CE CONTINE UN FISIER ROM??
• Fisierul de update al bios-ului, este cu extensia
ROM sau WPH (mai sunt si altele, dar acestea
doua sunt cele mai intalnite)
• In realitate fisierul nostru de update este O
ARHIVA.
• CAM ASA ARATA DACA O DECOMPRIMAM
Pe ce lucram in definitiv????
• BIOSCODE0(1,2,3).ROM-aceste fisiere contin “inima” bios-
ului. Aici vom defini si implementa functiiile
• SETUPS0.ROM- aici vom edita modul in care bios-ul isi face
setup-ul. Acest fisier este executat defapt cand facem
update
• STRINGS0.ROM –Aici confirmam valabilitatea si
aranjamentul de string-uri, tot aici adaugam informatiile
despre noile meniuri (Menu+Submenu)
• TEMPLAT0.ROM- Aici avem pratea grafica. Aici definim
textul, pozitia si help-ul noului meniu
• UPDATE0.ROM- Acest fisier ajuta la RESTORE. Modificam
data din el DATA si versiunea de release. Il comprimam in
cadrul unei arhive functionale, si facem update.
Pe ce lucram in definitiv????
• LOGO0.PGX- acest fisier contine brogress bar-ul
de boot (prezent DOAR in anumite cazuri. NU
este obilgatoriu sa existe)
• LOGO1.PGX- ACEASTA este IMAGINEA care
apare pe ecran.O editem, si punem ce poza vrem
noi, cu conditia sa pastram proprietatile pozei
originale
• ROBOEX32.DLL – Acest fisier stie sa “spuna”
sistemului de operare ca are un nou BIOS, cu noi
parametri. ESTE OBLIGATORIU corelat cu
UPDATE0.ROM.