Cum să pătrundem kernel-ul fără a reporni livepatch, kpatch și canonical livepatch

Cum să pătrundem kernel-ul fără a reporni livepatch, kpatch și canonical livepatch

Și Canonical a prezentat recent serviciul Canonical Livepatch. cu care poți să patch-uri fără a reporni kernelul Ubuntu.

Mai multe detalii despre unele dintre instrumentele moderne pentru adăugarea de patch-uri vor fi acoperite în acest articol.







Cel mai simplu exemplu: livepatch


Să începem cu un experiment foarte simplu. Pentru a face acest lucru, avem nevoie de orice distribuție Linux cu versiunea kernel 4.0 sau mai mare (în cazul nostru este Ubuntu 16.04, aici și mai jos toate exemplele de comenzi sunt date pentru această distribuție). În noile versiuni de kernel, funcția de adăugare a patch-urilor "în zbor" (numită - livepatch) este activată în mod implicit.

Pentru a verifica modul în care funcționează, avem nevoie, în primul rând, să setăm anteturile kernel-ului:


Apoi, instalați simbolurile kernel-ului de depanare:


Când executați această comandă în Ubuntu 16.04, este posibil să primiți următorul mesaj de eroare:


După aceasta, comanda anterioară va fi executată fără erori. Totul este gata pentru experiment, puteți începe:


Am descărcat codul modulului de kernel, care modifică codul principal al kernelului și modifică ieșirea comenzii cat / proc / cmdline. Acum acest modul trebuie asamblat. Pentru a face acest lucru, creați următorul set de fișiere:


Colectăm modulul și îl introducem în kernel:


Să vedem ce sa întâmplat. Să executăm:


În locul informațiilor standard despre parametrii kernelului, vom vedea următorul text:


După cum puteți vedea, plasturele a fost aplicat cu succes.

Toate informațiile despre patch-urile descărcate sunt stocate în directorul / sys / kernel / livepatch:


Puteți să dezactivați patch-ul cu comanda:

Să începem prin stabilirea dependențelor cerute:








Pentru o muncă deplină cu kpatch, este de asemenea recomandat să instalați cache:


Asta este, dependențele sunt fixe. Puteți instala kpatch:


În experimentul nostru, vom modifica sursele kernel-ului. Clonem repozitoriul cu codul sursă al versiunii curente a Ubuntu:


Când clonarea este completă, copiem sursele în directorul ubuntu-xenial-kpatch (este necesar să se facă modificări în codul sursă și apoi să se creeze patch-uri pe baza acestor modificări):


Deschideți fișierul ubuntu-xenial-kpatch / ubuntu-xenial / fs / proc / version.c și efectuați următoarele modificări:


Creați un patch folosind comanda:


Patch-ul este un fișier text simplu, care prezintă modificările făcute:


Pentru a adăuga un patch la kernel, executați:


După cum puteți vedea din concluzia citată, la ieșire obținem modulul de kernel. Pentru a aplica un patch, trebuie doar să adăugați acest modul într-un mod standard:


Să vedem ce sa întâmplat ca rezultat:

Servicii Canon LivePatch


Cu câteva luni în urmă, Canonical a lansat serviciul oficial Canonical LivePatch Service, care permite patcharea kernel-ului "în zbor" cu ajutorul unor comenzi simple. Acest serviciu se concentrează în primul rând pe utilizatorii de la nivel de întreprindere și, prin urmare, este exigibil.

Dar utilizatorii obișnuiți pot primi rapid și toate cele mai recente actualizări ale kernel-ului. Pentru a face acest lucru, trebuie să vă înregistrați la Ubuntu One și să primiți un simbol. Token vă permite să instalați pe 3 mașini programul canonical-livepatch, care încarcă și adaugă patch-uri.

Să vedem cum funcționează serviciul Canonical Livepatch. Să trecem sub linkul de mai sus, vom primi un simbol și vom executa în continuare:


Când instalarea este finalizată, ieșim din sistem, apoi ne logam din nou și executăm:


Dacă totul a fost făcut corect, vom primi următorul mesaj:


Apoi rulați comanda:


Concluzia arată că canonical-livepatch funcționează și că toate cele mai recente actualizări sunt instalate în kernel. Pentru mai multe informații, utilizați opțiunea --verbose:


De asemenea, informațiile despre patch-urile instalate pot fi obținute prin căutarea în directorul / sys / kernel / livepatch deja menționat mai sus:


Kpatch_livepatch_Ubuntu_4_4_0_47_68_generic_14 - acesta este ultimul patch descarcat. Ultimele cifre din numele patch-ului (14) sunt aceleași cu numărul de versiune specificat în ieșirea comenzii canonice-livepatch (vezi mai sus).

Asigurați-vă că noul patch a fost adăugat și puteți folosi comanda lsmod:

concluzie

Și dacă doriți să studiați mai profund acest subiect, acordați atenție următoarelor linkuri:

Modulele care rezolvă problemele sunt încărcate, modulele încărcate preiau funcțiile necesare asupra lor, în loc de vechiul cod vulnerabil.
În timp ce rulez versiunea canonică pe serverul meu personal, sunt foarte mulțumit de faptul că problemele din kernel au fost reparate fără rebușuri.

Ora este specificată în fusul orar setat pe dispozitiv.







Trimiteți-le prietenilor: