NFsec Logo

Backportowanie patchy z RHEL 6 do CentOS 6 na przykładzie httpd 2.2.15

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

Kategorie K a t e g o r i e : Administracja, Bezpieczeństwo

Tagi T a g i : , , , , , ,

Komentowanie tego wpisu jest zablokowane.