Backportowanie patchy z RHEL 6 do CentOS 6 na przykładzie httpd 2.2.15
Napisał: Patryk Krawaczyński
22/09/2011 w Administracja, Bezpieczeństwo Brak komentarzy. (artykuł nr 327, ilość słów: 461)
Z
e względu na opóźnienia w wydawaniu aktualizacji bezpieczeństwa w dystrybucji CentOS – w przypadku krytycznych błędów aplikacji istnieje możliwość skorzystania z łatek dostarczonych przez jego protoplastę, czyli RedHat Enterprise. Za przykład może posłużyć niedawna luka znaleziona w serwerze Apache umożliwiająca przeprowadzenie ataku DoS, w tym wersji Apache’a 2.2.15 dostarczonego wraz z 6’stą wersją tej dystrybucji, a do której do dziś nie została wydana poprawka.
Pierwszym krokiem jest stworzenie na naszym serwerze środowiska umożliwiającego budowę własnych pakietów. Drugim – jest pobranie pakietu źródłowego serwera httpd z dowolnego serwera lustrzanego CentOS i jego instalacja:
wget ftp://mirror/centos/6.0/os/SRPMS/Packages/httpd-2.2.15-5.el6.centos.src.rpm rpm -i rpm -i httpd-2.2.15-5.el6.centos.src.rpm
Znając ID luki z bazy Common Vulnerabilities and Exposures List (CVE-2011-3192) możemy wykorzystać Red Hat vulnerabilities by CVE name, aby upewnić się czy Red Hat wydał już stosowne aktualizacje. Jeśli na liście “Updated packages” znajduje się wersja oprogramowania naszego serwera możemy skorzystać z RHSA-announce Archives w celu pobrania źródeł zaktualizowanego pakietu: httpd-2.2.15-9.el6_1.2.src.rpm
. Po pobraniu paczki z repozytorium Red Hat’a możemy ją rozpakować w celu porównania plików httpd.spec
i dodania brakujących patchy:
[root@stardust ~]# mkdir httpd-rhel [root@stardust ~]# mv httpd-2.2.15-9.el6_1.2.src.rpm httpd-rhel/ [root@stardust ~]# cd httpd-rhel/ [root@stardust httpd-rhel]# rpm2cpio httpd-2.2.15-9.el6_1.2.src.rpm | cpio -idmv [root@stardust httpd-rhel]# sdiff httpd.spec /usr/src/rpmbuild/SPECS/httpd.spec | more
Po przejrzeniu różnic możemy zobaczyć, że w wydaniu 9’tym zostały dodane patche:
httpd-2.2.15-sslfips.patch httpd-2.2.15-pr49328.patch httpd-2.2.15-aboverflow.patch httpd-2.2.15-pr45444.patch httpd-2.2.15-ssldupkeys.patch httpd-2.2.15-ldapcache.patch httpd-2.2.3-pr41743.patch httpd-2.2.15-CVE-2011-3192.patch
Gdzie patch httpd-2.2.15-CVE-2011-3192.patch
naprawia podatność CVE-2011-3192 httpd: multiple ranges DoS. Powyższe patche należy przekopiować do katalogu /usr/src/rpmbuild/SOURCES
. Poniżej znajduje się patch dla pliku httpd.spec
CentOS’a dodający aplikację patchy z RHEL.
cat > rhel_to_centos.patch << EOF 35a36 > Patch26: httpd-2.2.15-sslfips.patch 48a50,55 > Patch73: httpd-2.2.15-pr49328.patch > Patch74: httpd-2.2.15-aboverflow.patch > Patch75: httpd-2.2.15-pr45444.patch > Patch76: httpd-2.2.15-ssldupkeys.patch > Patch77: httpd-2.2.15-ldapcache.patch > Patch78: httpd-2.2.3-pr41743.patch 50a58 > Patch201: httpd-2.2.15-CVE-2011-3192.patch 149a158,163 > %patch73 -p1 -b .pr49328 > %patch74 -p1 -b .aboverflow > %patch75 -p1 -b .pr45444 > %patch76 -p1 -b .ssldupkeys > %patch77 -p1 -b .ldapcache > %patch78 -p1 -b .pr41743 151a166 > %patch201 -p1 -b .cve3192 EOF
Patch możemy zaaplikować w następujący sposób:
[root@stardust ~]# mv rhel_to_centos.patch /usr/src/rpmbuild/SPECS/ [root@stardust ~]# cd /usr/src/rpmbuild/SPECS/ [root@stardust SPECS]# patch -p0 httpd.spec < rhel_to_centos.patch patching file httpd.spec
Następnie kompilujemy pakiet serwera httpd z nowymi łatkami:
rpmbuild -ba httpd.spec
Po poprawnej kompilacji:
Zapisano: /usr/src/rpmbuild/SRPMS/httpd-2.2.15-5.el6.src.rpm Zapisano: /usr/src/rpmbuild/RPMS/i686/httpd-2.2.15-5.el6.i686.rpm Zapisano: /usr/src/rpmbuild/RPMS/i686/httpd-devel-2.2.15-5.el6.i686.rpm Zapisano: /usr/src/rpmbuild/RPMS/noarch/httpd-manual-2.2.15-5.el6.noarch.rpm Zapisano: /usr/src/rpmbuild/RPMS/i686/httpd-tools-2.2.15-5.el6.i686.rpm Zapisano: /usr/src/rpmbuild/RPMS/i686/mod_ssl-2.2.15-5.el6.i686.rpm Zapisano: /usr/src/rpmbuild/RPMS/i686/httpd-debuginfo-2.2.15-5.el6.i686.rpm
Możemy podmienić zainstalowany pakiet serwera httpd na naszą przekompilowaną wersję:
rpm -Uvh --force httpd-2.2.15-5.el6.i686.rpm
W tym przykładzie specjalnie zachowano taki sam numer wydania (5), ze względu na fakt, iż jego podniesienie do wersji z pakietu RHEL mogłoby później kolidować z oficjalnym wydaniem aktualizacji przez zespół developerów CentOS. Jeśli nie zależy nam na tej kompatybilności, możemy w pliku httpd.spec
podnieść liczbę w polu Release:
np. do 6’stego wydania i wykorzystać do instalacji nowych pakietów narzędzie yum.
Więcej informacji: CentOS 5, RHEL 5.6, and security updates