Manualna weryfikacja pakietu deb w debianie

Spis treści

W dobie całego tego świata informatycznego zwykliśmy polegać na osobach, których nigdy w życiu na oczy nie wiedzieliśmy, nie wspominając o jakimkolwiek kontakcie fizycznym. Zaufanie to obecnie chyba najbardziej krytyczna luka bezpieczeństwa jeśli chodzi o oprogramowanie, z którego korzystamy na co dzień. My, którzy używamy debiana w swojej pracy, polegamy na mechanizmach jakie oferuje nam apt czy aptitude przy weryfikacji pakietów przed ich instalacją w systemie. Co się jednak by stało gdyby w tych menadżerach pojawił się błąd, który by uniemożliwiał poprawną weryfikację pakietów? Skąd wiemy czy te mechanizmy zabezpieczające w ogóle działają? Może one nam dają jedynie fałszywe poczucie bezpieczeństwa, a tak naprawdę przez niczym nas nie chronią? W tym wpisie postaramy się odpowiedzieć na te powyższe pytania i sprawdzimy czy manualna weryfikacja pakietu jest w ogóle możliwa

Dlaczego weryfikacja pakietu jest możliwa

Każde repozytorium, z którego możemy pobierać pakiety zwykle jest podpisane. Wszystkie repozytoria, które nie są podpisane, powinniśmy omijać szerokim łukiem. Podobnie sprawa ma się w przypadku tych źródeł pakietów, gdzie nie możemy zweryfikować właścicieli klucza, którym podpisane jest takie repozytorium. W tym wpisie skupimy się jedynie na tych repozytoriach, które są podpisane, a możemy to poznać po obecności plików Release , Release.gpg lub InRelease . Gdy dodajemy adres nowego repozytorium do pliku /etc/apt/sources.list i aktualizujemy listy pakietów via apt-get update , te pliki powinny zostać pobrane do katalogu /var/lib/apt/lists/ .

Pliki Release, Release.gpg oraz InRelease

Pierwszym krokiem będzie zatem zweryfikowanie danych zawartych w pliku Release przy pomocy sygnatury przechowywanej w pliku Release.gpg . Plik InRelease różni się od tych dwóch wyżej tylko tym, że zarówno dane jak i sygnatura są przechowywane w jednym pliku, a nie dwóch. W zależności od tego z jakim repozytorium mamy do czynienia, weryfikację danych możemy przeprowadzić w poniższy sposób:

# cd /var/lib/apt/lists/

# gpg --verify ftp.de.debian.org_debian_dists_sid_InRelease
# gpg --verify dl.google.com_linux_chrome_deb_dists_stable_Release.gpg dl.google.com_linux_chrome_deb_dists_stable_Release

Pamiętajmy, że by zweryfikować podpis złożony w pliku, potrzebujemy klucza publicznego osoby, która podpisała plik. Jeżeli przy weryfikacji otrzymamy informację, że gpg: Good signature from , oznacza to, że proces weryfikacji danych w powyższych plikach zakończył się powodzeniem.

Suma kontrolna pliku Packages

Plik Packages zawiera opisy poszczególnych pakietów, które są dostępne w repozytorium. Są też tam ich sumy kontrolne. Musimy zatem zweryfikować czy plik Packages nie został w żaden sposób zmieniony. Wyciągamy zatem jego sumy kontrolne (md5, sha1, sha256):

# sed -n "s,main/binary-amd64/Packages$,,p" ftp.de.debian.org_debian_dists_sid_InRelease
 585d2dfeeae78e0c6065a6d489c8e36a 38576950
 cc0e8217c2c133f8baff38790c0d8b44d5248cd7 38576950
 896abb4c2c12db3c18c7b87a87efaeecc9b8cbeb541dae650468549e443a1b5b 38576950

Tworzymy sumy kontrolne pliku Packages , który mamy w cache i porównujemy je z tymi zapisanymi w pliku, w tym przypadku, InRelease :

# sha256sum ftp.de.debian.org_debian_dists_sid_main_binary-amd64_Packages
896abb4c2c12db3c18c7b87a87efaeecc9b8cbeb541dae650468549e443a1b5b  ftp.de.debian.org_debian_dists_sid_main_binary-amd64_Packages

Nie musimy sprawdzać wszystkich sum kontrolnych, wystarczy jedna i jak widzimy wyżej, plik Packages nie został zmieniony.

Suma kontrolna pakietu

Pozostało nam jeszcze zweryfikowanie sumy kontrolnej samego pakietu .deb . Weźmy dla przykładu pakiet gajim. Wyciągamy pierw sumę kontrolną tego pakietu z opisu przy pomocy apt-cache :

# apt-cache show gajim | sed -n "s/SHA256: //p"
823a3d7b034a6cb4531f8ff790cbc9af18ae66b65be67b9c4e0a2c203142da89

Musimy teraz jeszcze uzyskać sumę kontrolną paczki, która trafiła do cache APT:

# sha256sum /var/cache/apt/archives/gajim_0.16-1_all.deb
823a3d7b034a6cb4531f8ff790cbc9af18ae66b65be67b9c4e0a2c203142da89  /media/Kabi/backup_packages/apt/archives/gajim_0.16-1_all.deb

Sumy się zgadzają zatem możemy mieć pewność, że ten plik trafił do nas w takiej formie w jakiej został wgrany do repozytorium debiana. Mając na uwadze powyższe informacje, weryfikacja pakietu zakończyła się sukcesem.

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.