Wysyp błędów Y2K10

Data: 6 stycznia, 2010

Rok 2010 przywitał nas prawdziwym wysypem błędów związanych ze zmianą daty. Szereg systemów informatycznych odmówiło współpracy, a inne wykonywały swe zadanie niepoprawnie.

W ciągu kilku ostatnich dni, spore zainteresowanie wzbudził problem roku 2010, z jakim borykali się użytkownicy popularnego rozwiązania antyspamowego SpamAssassin. Okazało się, że filtr ten wyposażony jest w regułę, która każdej wiadomości datowanej na rok 2010 (lub późniejszy) dodaje 3,4 punktu karnego. W efekcie znaczna część poprawnych wiadomości została sklasyfikowana jako spam. Oto jaki komentarz do tejże reguły można było odnaleźć w konfiguracji filtru:

The date is grossly in the future.

Obecnie, problem ten został już rozwiązany.

Komercyjne oprogramowanie również nie ustrzegło się błędów związanych ze zmianą roku. Endpoint Protection Manager, oprogramowanie klasy enterprise służące do zarządzania zabezpieczeniami stacji roboczych odmówiło współpracy z sygnaturami opublikowanymi w roku 2010. W opublikowanym przez producenta oświadczeniu, czytamy między innymi:

An issue has been identified in the Symantec Endpoint Protection Manager (SEPM) server whereby all types of SEP definition content [AV/AS, IPS] with a date greater than December 31, 2009 11:59pm are considered to be “out of date”.

Firma Symantec, jako czasowe obejście problemu, rozpoczęła publikowanie najnowszych sygnatur z zeszłroczną datą.

Poza tym, błąd roku 2010 dotknął również klientów Bank of Queensland oraz kilku banków niemieckich. Tym razem problem polegał na tym, że informatyczne systemy bankowe uznały rok 2010 za rok 2016. Problemy o podobnej naturze (datowanie wiadomości z roku 2010 na rok 2016) spotkały również użytkowników niektórych telefonów komórkowych z systemem Windows Mobile. Problemy z rokiem 2010 miał również sieciowy gigant, firma Cisco. Organizacja Internet Storm Center poinformowała o noworocznych problemach w działaniu modułu Cisco Content Switching Module (CSM).

O ile błędy rozpoznawania roku 2010 jako 2016 wynikają z nieprawidłowej interpretacji zapisu liczbowego, o tyle pozostałe wspomniane błędy skłaniają do refleksji. Okazuje się bowiem, że programista jest w stanie (umyślnie lub nieumyślnie) wprowadzić do oprogramowania (otwartego bądź komercyjnego) funkcję zaburzającą jego działanie przy napotkaniu określonej daty. Jak pokazują powyższe przykłady, niestety istnieje duże prawdopodobieństwo, że taki błąd zostanie wykryty dopiero w momencie jego aktywacji!

Materiał pochodzi z serwisu HARD CORE SECURITY LAB.

Podobne wpisy

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone


  1. Y2K10 = 2K10 = 2K1 = 2.1K = 2100

    1. hcsl.pl pisze:

      A może tak: Y2K10 = year 2000 and (+) 10 = 2010 :)?

      1. barcin pisze:

        Bez wątpienia 2K10 = 2100 a 2010 powinno się oznaczać wyłącznie jako 2K01.
        Kup w sklepie elektronicznym rezystor o oporności 2K1, ciekawe czy dostaniesz 2010 Ohm czy jednaj 2100 Ohm…

        1. hcsl.pl pisze:

          Nie mówimy o oznaczeniach rezystorów, tylko lat. Jeśli chodzi o oznaczanie lat przyjęło się użycie 2K10 jako 2010.

        2. halish pisze:

          od lat, czyli od zeszłego miesiąca?

        3. może podrzućcie to na xkcd 🙂

        4. spaceman pisze:

          @hcsl.pl

          To zle sie przyjelo. Po pierwsze 2010 nie wymawia sie jako two thousand and ten tylko twenty ten, tak po prostu. Po drugie przedpiszcy maja racje a Ty sie mylisz.

        5. borizm pisze:

          K to jest kilo, czyli tysiąc, czyli K jest tu separatorem.
          Opornik 2K2 oznacza 2200Ohm i jest to oczywiste dla wszystkich elektroników (tak jak 2R2, 2u2, 2p2), ale Y2K10 to nie wiedział bym jak odgadnąć – powinno być Y2K1 i oznaczało by to Y2100, lub Y2K01, które było by zapisem bezsensownym, bo normalniej wygląda Y2010.

        6. skrypter pisze:

          Najgorsze jest to, że zapis 2k10 i tak nic nie daje, bo jest ni chu-chu krótszy od 2010…

      2. spookypld pisze:

        wyjaśnię Ci : 1k=1kilo. Widziałem również zapisa 1M, zgadnij co oznacza 🙂

    2. spookypld pisze:

      jak zwykle poziom komentarzy żenujący.

      k = kilo

    3. maciek pisze:

      Proponuję jasny i czytelny zapis „010.M3”, tj. rok 10 3ciego millenium (rok 40000 zapisywalibyśmy 000.M40)

  2. fEnIo pisze:

    2K10 = 2K1

    taa….

    pozdr,
    fEnIo

  3. keee pisze:

    Co złego jest w odfiltrowywaniu wiadomości wysłanych z przyszłości? Ta funkcja nie została dodana w celu zaburzania działania programu, została dodana w celu zapewnienia lepszego działania. Została wprowadzona absolutnie umyślnie. Problem polegał jedynie na tym, że zapomniano o zmianie roku. Zwyczajnie zabrakło jednego testu. A rok 2010 nie ma z tym nic wspólnego, równie dobrze mógłby to być rok 2012. Co do problemów z interpretacją daty, to odsyłam wyżej, bo okazuje się, że ta kwestia też wymaga rozważenia, nie jest tak banalna jak się wydaje.

    1. Low Year pisze:

      Co złego jest w odfiltrowywaniu wiadomości wysłanych z przyszłości?

      To, że funkcja ma arbitralnie ustawiony rok, zamiast brać dzisiejszą datę i dodawać powiedzmy 20 lat.

      1. Compi pisze:

        Robi to ze względów wydajnościowych. Po poprawce regexp też jest wpisany na sztywno, tyle że łapie dopiero od 2020.

  4. czepol pisze:

    A z ciekawości spytam, na czym polega błąd z pomyłką 2010 i 2016? Bo z ciekawości sprawdziłem jak wyglądają te liczby w różnych systemach liczbowych:
    dec | bin | oct | hex
    2016 | 11111100000 | 3740 | 7E0
    2010 | 11111011010 | 3732 | 7DA

    1. hcsl.pl pisze:

      Spotkałem gdzieś takie wyjaśnienie:
      Dzięsiątkę w 2010 można zapisać w ten sposób: 0001 0000.

      Teraz jeśli tę końcówkę 0001 0000 zinterpretujemy jako liczbę binarną, to otrzymamy dziesiętną wartość 16.

      Nie wiem jednak, czy to rzeczywiście prawdziwe wyjaśnienie tych sytuacji.

    2. W części przypadków chodzi o to, że 1) nie jest trzymany cały rok, 2) to '10' jako 0x10 jest nieściśle traktowane – w jednym miejscu jako liczba BCD, w innym zwykła U2.

    3. lmmsci pisze:

      To ja też się dołączę 😉 Jak rozumiem zapis
      2K10
      jest w dec, 1K = 1024. A więc:
      2K = 2*1024 = 2048
      2048 + 10 = 2058
      Hmmmm… Kto poda jeszcze jakąś interpretację? I którą wybrać? 😉
      pzdr.

      1. lmmsci pisze:

        Ps. Ewentualnie:
        2K10 -> 204810 ….

      2. grochu pisze:

        2E10, 2D10 oznacza liczbę zmiennoprzecinkową = 2.0*10^10 z odpowiednio pojedynczą bądź pdwójną precyzją (reprezentacja 32, 64 bitową) to 2K10 musi oznaczać to samo tyle, że z precyzją 1024 (reprezentacja 32768 bitowa czyli 32kbitowa).
        Myslę, że wszystkie problemy roku 2K10 wynikają tylko i wyłącznie ze złej implementacji liczb 32kbitowych w omawianym oprogramowaniu.

    4. blog.szsz.pl/ pisze:

      @czepol "10" szestnastkowo to 16 dziesiętnie
      Wniosek, albo zapisują datę w dwóch znakach, albo mają zaszłości z jakiegoś naprawdę zabytkowego systemu używającego notacji BCD (http://pl.wikipedia.org/wiki/Kod_BCD)

    5. krzy3 pisze:

      Błąd wynika z tego, że istnieje trochę systemów używających kodowania BCD. W systemie BCD w jednym bajcie zapisujemy dwie cyfry dziesiętne, na 4-ch bitach każda. I tak mamy:

      Dec/Hex/BCD
      0 0x00 0x00
      1 0x01 0x01
      …. itd. …
      9 0x09 0x09
      10 0x0A 0x10
      11 0x0B 0x11
      12 0x0C 0x12
      13 0x0D 0x13
      14 0x0E 0x14
      15 0x0F 0x15
      16 0x10 0x16
      17 0x11 0x17
      itd.

      Widać już co się stało, jak licznik przekrecił się z 9 na 10, a programista zapomniał przekonwertować BCD na naturalny kod dwójkowy?

  5. kayo pisze:

    Ładniej wygląda to w formie 2.01k

  6. agent_J pisze:

    To po jakiego wała jest tu K skoro długość napisu przed pseudooptymalizacją jest taka sama ?

    1. No dokładnie. 2k (jako 2000) czy nawet 2k9 (2009) ma jeszcze jakiś sens, oszczędzamy znaki, ale 2k10 to już IMO wydziwianie 😛

      1. hcsl.pl pisze:

        Nie chodzi tu o oszczędność znaków, ale raczej o nawiązanie do błędu y2k :).

    2. Najkrócej jest chyba tak: MMX. Wiedzieli to już nawet twórcy Pentiuma…

      1. a 2016 wzięło się stąd, że system pisali programiści używający vi. Po prostu wpisali 2010 (czyli MMX), a potem chcieli odpalić swój edytor, ale nie zauważyli, że inny terminal jest w focusie i wyszło MMXVI

    3. spacedout pisze:

      „dwa ka dziesięć” lepiej brzmi.

  7. avallash pisze:

    To jest po prostu iteracja.
    Pierwszy problem z datą to był Y-45 (v.0-45) nazwa kodowa "Julius"
    Potem przepisano cały kod i stabilna wersja wyszła jako Y1K582 "Gregorius XIII" (build 1582)
    Potem była wersja alpha Y2K "Millenium", ale nie odniosła skutku
    Po dokonaniu korekt najnowsza wersja to Y2K010 i jest uważana za spory sukces.

    Dla mnie osobiście problemów wiele nie wynikło, jedynie w rozkładach PKP w rozwijanym kalendarzu jako default przyjmuje ten sam dzień i miesiąc, ale rok 2016.

  8. jarek pisze:

    Na szczescie, poniewaz SpamAssasin jest open source,
    problem zostal odpowiednio wczesnie wykryty i usuniety.

    1. hcsl.pl pisze:

      Problem w tym, że właśnie nie został wykryty "odpowiednio wcześnie", czyli jeszcze zanim się uaktywnił w systemach produkcyjnych…

      1. jarek pisze:

        Najwyrazniej nie wyczules ironii.
        Co tylko pokazuje jak realnie przydaje sie dostepnosc kodu.

        1. Paweł Zembrzuski pisze:

          Jak widać jednak jest skuteczne bo błąd od razu poprawiono a w zamkniętym oprogramowaniu symanteka zamiast dać aktualizacje to dają bazy wirusów ze starą datą. Witać jeszcze nie wiedzą gdzie błąd/nie potrafią naprawić.

  9. Bzyk pisze:

    Akurat nieprawidłowo przefiltrowany SPAM to mały problem (o ile ów email nie był zbyt ważny). Dziś rano w radio słyszałem, że co czwarta karta płatnicza w Niemczech nie działa z powodu problemu roku 2010…
    Ja chyba wrócę do trzymania gotówki w skarpecie… 😉

    1. SeeM pisze:

      Co trzecia skarpeta jest dziurawa.

  10. Hydra pisze:

    informatyka to nie elektronika..

    wiem ze 2k10 to 2100 ohmow

    ale..
    jak liczysz ilosc piw w zgrzewce to zaczynasz od 1 czy od 0? komputer zaczyna od zero… Ty od 1.. i kto ma racje?

    w informatyce 2k10 oznaczamy jako 2010

    przeczytaj sobie
    dwa k dziesiec
    a nie
    dwa k sto

    sami spece…

  11. 2k10 to skrót informatyczny? Chyba raczej skrót amerykańskich emo-ludków. Zamiast pisać k piszcie 0 i nikt nie będzie miał wątpliwości. Pozatym to żaden skrót bo ilość znaków jest ta sama. A 2101r napiszecie 2k101 ? I to też pewnie będzie skrót? Przy roku 2000 to miało sens tylko, ale jakieś debile zaczeli przenosić na kolejne lata 200x i teraz zaczyna się idiotyczny problem. Zupełnie jak ci programiści co nie przewidzieli roku 2010.

  12. krzabr pisze:

    Ano , jak widzę ile w niektórych sklepach trwa płacenie kartą to wolę mieć zawsze przy sobie trochę gotówki , ona nigdy nie zawiedzie .

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}

Newsletter OSnews raz w tygodniu. Bez reklam.