SA-06:14.fpu

sobota, 23 września 2006 02:28

FreeBSD-SA-06:14.fpu                                Security Advisory
                                                        The FreeBSD Project
  Temat:            Odkrycie informacji FPU
Kategoria:        core
  Moduł:            sys
  Ogłoszono:        2006-04-19
  Podziękowania:    Jan Beulich
  Podatne wersje:   All FreeBSD/i386, FreeBSD/amd64
  Poprawiono:       2006-04-19 07:00:35 UTC (RELENG_6, 6.1-STABLE)
                2006-04-19 07:00:50 UTC (RELENG_6_1, 6.1-RELEASE)
                2006-04-19 07:01:12 UTC (RELENG_6_0, 6.0-RELEASE-p7)
                2006-04-19 07:01:30 UTC (RELENG_5, 5.5-STABLE)
                2006-04-19 07:01:53 UTC (RELENG_5_4, 5.4-RELEASE-p14)
                2006-04-19 07:02:23 UTC (RELENG_5_3, 5.3-RELEASE-p29)
                2006-04-19 07:02:43 UTC (RELENG_4, 4.11-STABLE)
                2006-04-19 07:03:01 UTC (RELENG_4_11, 4.11-RELEASE-p17)
                2006-04-19 07:03:14 UTC (RELENG_4_10, 4.10-RELEASE-p23)
 
Nazwa CVE:    CVE-2006-1056

W celu pogłębienia informacji dotyczącej Ogłoszeń Bezpieczeństwa FreeBSD, włączając opisy pól powyżej, gałęzi bezpieczeństwa oraz poniższych sekcji proszę odwiedzić:
[URL:http://www.freebsd.org/security/]

I.    Podstawy
Jednostka zmienno-przecinkowa (FPU), w procesorach o architekturze i386 oraz amd64, jest pochodną oryginalnego zmienno-przecinkowego co-procesora - 8087. W rezultacie, FPU zawiera takie same wpisy FOP, FIP oraz FDP, które przechowują opcode, adres instrukcji oraz adres danych instrukcji najczęściej wykonywanych poprzez FPU.

Procesory, posiadające implementację zbioru instrukcji "SSE", posiadają nową parę instrukcji fxsave/fxrstor, zastępując wcześniejszą parę fsave/fxstor, wykorzystywaną do zapisywania oraz przywracania stanu FPU. Nowe instrukcje, również zapisują oraz przywracają zawartość dodatkowych rejestrów wykorzystywanych poprzez instrukcje SSE.
II.    Opis problemu
W procesorach "7 generacji" oraz "8 generacji" produkowanych przez AMD, włączając AMD Athlon, Duron, Athlon MP, Athlon XP, Athlon64, Athlon64 FX, Opteron, Turion oraz Sempron, instrukcje fxsave i fxrstor nie przechowywały FOP, FIP i FDP, dopóki status ES (exception summary bit) w x87 nie zostanie ustawiony na 1, wskazując odkrycie wyjątku x87.

To zachowanie jest zgodne z dokumentacja dostarczaną przez AMD, lecz jest różne od procesorów innych producentów, w których zapisywanie i przywracanie registrantów FOP, FIP oraz FDP nie biorą pod uwagę wartości bitu ES. W rezultacie, pozostałe różnice zostały pominięte i ujawnione teraz, jądro FreeBSD nie przywraca zawartości registrantów FOP, FIP oraz FDP pomiędzy przełącznikami kontekstu.
III.    Wpływ
Na maszynie posiadającej podatny procesor, lokalnie atakujący może monitorować wykonywaną ścieżkę procesów, które wykorzystują operacje zmienno-przecinkowe. Umożliwia to atakującemu wykraść klucz lub inna ważną informację.
IV.    Obejście
Brak, lecz dla systemów które nie używają procesorów AMD Athlon, Duron, Athlon MP, Athlon XP, Athlon64, Athlon64 FX, Opteron, Turion, lub Sempron nie są podatne.
V.    Rozwiązanie
Wykonać jedno z poniższych:

1) Uaktualnić wadliwy system do 4-STABLE, 5-STABLE, 6-STABLE lub do RELENG_6_0, RELENG_5_4, RELENG_5_3, RELENG_4_11, RELENG_4_10 z danej gałęzi bezpieczeństwa wydanej po dacie poprawki.
2) Aby załatać obecny system:
Poniższe poprawki zostały sprawdzone w działaniu z FreeBSD 4.10, 4.11, 5.3, 5.4, 6.0.
a) Pobrać odpowiednią łatkę z lokalizacji podanych poniżej. Sprawdzić podpis PGP, narzędziem jakie posiadasz.

[FreeBSD 4.x]
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-06:14/fpu4x.patch
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-06:14/fpu4x.patch.asc

[FreeBSD 5.x and 6.x]
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-06:14/fpu.patch
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-06:14/fpu.patch.asc

b) Wykonać będąc zalogowanym jako root:

# cd /usr/src
# patch < /path/to/patch

c) Przebudować cały system jak opisano w dokumentacji na stronie:
<URL:http://www.freebsd.org/handbook/kernelconfig.html>

VI. Szczegóły poprawki
Poniższa lista zawiera numery poszczególnych wersji plików które zostały poprawione.

Gałąź
     Ścieżka                      Przegląd
- -------------------------------------------------------------------------
RELENG_4
  src/sys/i386/isa/npx.c                                         1.80.2.4
RELENG_4_11
  src/UPDATING                                             1.73.2.91.2.18
  src/sys/conf/newvers.sh                                  1.44.2.39.2.21
  src/sys/i386/isa/npx.c                                    1.80.2.3.14.1
RELENG_4_10
  src/UPDATING                                             1.73.2.90.2.24
  src/sys/conf/newvers.sh                                  1.44.2.34.2.25
  src/sys/i386/isa/npx.c                                    1.80.2.3.12.1
RELENG_5
  src/sys/amd64/amd64/fpu.c                                     1.154.2.2
  src/sys/i386/isa/npx.c                                        1.152.2.4
RELENG_5_4
  src/UPDATING                                            1.342.2.24.2.23
  src/sys/conf/newvers.sh                                  1.62.2.18.2.19
  src/sys/amd64/amd64/fpu.c                                 1.154.2.1.2.1
  src/sys/i386/isa/npx.c                                    1.152.2.3.2.1
RELENG_5_3
  src/UPDATING                                            1.342.2.13.2.32
  src/sys/conf/newvers.sh                                  1.62.2.15.2.34
  src/sys/amd64/amd64/fpu.c                                     1.154.4.1
  src/sys/i386/isa/npx.c                                        1.152.4.1
RELENG_6
  src/sys/amd64/amd64/fpu.c                                     1.157.2.1
  src/sys/i386/isa/npx.c                                        1.162.2.2
RELENG_6_1
  src/UPDATING                                             1.416.2.22.2.1
  src/sys/conf/newvers.sh                                   1.69.2.11.2.1
  src/sys/amd64/amd64/fpu.c                                     1.157.6.1
  src/sys/i386/isa/npx.c                                    1.162.2.1.2.1
RELENG_6_0
  src/UPDATING                                             1.416.2.3.2.12
  src/sys/conf/newvers.sh                                    1.69.2.8.2.8
  src/sys/amd64/amd64/fpu.c                                     1.157.4.1
  src/sys/i386/isa/npx.c                                        1.162.4.1
- -------------------------------------------------------------------------

VII. Odnośniki
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-1056

Najnowsza wersja jest dostępna pod adresem:
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-06:14.fpu.asc

The FreeBSD Security Team, chciałby podziękować firmie AMD, oraz w szczególności Richard’owi Brunner’owi za natychmiastową odpowiedź wraz z udostępnieniem obszernej analizy w związku z tym problemem.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (FreeBSD)

iD8DBQFEReGUFdaIBMps37IRAnmUAJ4lsl3bpH6duA5u/wssIa01o98BlwCgleWn
a1vJCiLwkkfqHtmBDKxaQ+A=
=4yls
-----END PGP SIGNATURE-----