Szczepienia po raz pierwszy

Kolejna fala pandemii to dobry pretekst do wpisu o tym, jak społeczeństwo się polaryzuje. W tej chwili jest tak, że zaszczepieni są zaszczepieni, niezaszczepieni szczepić się nie chcą, wprowadzane są kolejne obostrzenia, które… raczej nie zmienią sytuacji.

Pamiętam, że na na samym początku pandemii rozmawiałem z jedną osobą z pracy. Moim stanowiskiem było, że „teraz zamkniemy się na 3-4 tygodnie i wyeliminujemy chorobę (globalnie)”. Znajomy natomiast stał na stanowisku, że „mleko się rozlało, to poszło za szeroko, będziemy z tym żyć”. Czas pokazał, że byłem naiwny i nie miałem racji.

Mam wrażenie, że podobną naiwnością wykazują się obecnie tzw. proszczepionkowcy[1]. Argumentują, że to przez nieszczepiących się wirus mutuje, że to im zawdzięczamy kolejne fale itd. Czyli klasyczne „mamy winnego/wroga” i podział na „my i oni”. Tyle, że praktyka pokazuje, że mimo szczepień nie udało się globalnie wyeliminować chorób, na które od dziesięcioleci przeprowadzane są powszechne szczepienia. Odra, różyczka, gruźlica, polio – wszystko to występuje nadal. Mimo szczepienia praktycznie całej populacji, kilkukrotnie w ciągu życia.

Jest jedna choroba, którą udało się wyeliminować globalnie – ospa prawdziwa. I oczywiście powszechne szczepienia miały w to swój wielki wkład. Jednak jest to wyjątek, pozostałe patogeny nadal funkcjonują, mutują, zarażają. Mimo szczepień i leczenia. Albo i dzięki nim, jak w przypadku lekoopornej gruźlicy.

Co nie znaczy, że szczepionki nie działają czy nie mają sensu. Generalnie jest to jedna z lepszych metod minimalizacji wpływu choroby na ludzkość. Tyle, że nie działają zerojedynkowo. Ani zaszczepienie nie daje gwarancji odporności, ani nie jest w 100% bezpieczne. Każda szczepionka to jakieś ryzyko i jakaś odporność. Dlatego niektóre szczepionki podaje się tylko w miarę potrzeb, np. przy wyjazdach do krajów, w których dana choroba jest obecna.

Tymczasem proszczepionkowcy próbują przymusić sceptyków do szczepienia, na przykład próbując ograniczyć dostęp do usług. Wydaje mi się, że mocno przy tym zapominając o rzeczach ważniejszych, takich jak równość obywateli, ochrona prywatności i okolice. Przykładem są lokale, które wymagają okazania certyfikatu szczepienia przy wejściu.

Czemu uważam, że to złe? Ano dlatego, że certyfikat zawiera i dane osobowe[2], i informację o przebytych chorobach. OK, jednej chorobie. Nadal, nic właścicielowi lokalu czy pracodawcy do tego. Dodatkowo, przetwarzanie tych danych odbywa się – wnioskując po zdjęciach – na losowych urządzeniach, być może nawet prywatnych smartfonach pracowników firm. Jeśli komuś wydaje się, że „to tylko odczytanie QR-code, na chwilę” to… niekoniecznie. Absolutnie nic nie stoi na przeszkodzie, by te dane zapisać. Choć może to tylko moje zboczenie zawodowe.

Nie miałem okazji testować osobiście, więc nie wiem, czy dodatkowo należy się wylegitymować dowodem tożsamości. Z jednej strony, bez tego okazywanie certyfikatu nie ma sensu, bo może być ważny i poprawny ale… w zasadzie czyjkolwiek, byle z grubsza wiek i płeć się zgadzały. Z drugiej, rodzi kolejne problemy, bo czy losowa osoba ma prawo nas wylegitymować? Dane z okazywanego dowodu łatwo skopiować choćby ukrytą kamerą i mogą posłużyć do późniejszych nadużyć.

Na sam koniec dodam, że fakt bycia zaszczepionym rodzi fałszywe poczucie bezpieczeństwa. Znacie „po co nam maseczki, przecież jesteśmy zaszczepieni”, albo „skoro pracownicy są zaszczepieni, to niech pracują na miejscu”? Ja znam. Tymczasem zaszczepieni także chorują i przenoszą chorobę, zaś skuteczność szczepionek przeciw covid-19 nie jest ani dobrze zbadana, ani rzetelnie komunikowana. Ale o tym może w kolejnym wpisie…

Mam wrażenie, że zaczynamy – jako społeczeństwo – gubić poczucie solidarności, wspólnoty, tolerancję i głębszy sens. Zamiast tego następują próby narzucania światopoglądu i polaryzacja.

[1] I bardziej chodzi tu o pewną postawę światopoglądową, nie o sam fakt szczepienia lub nie, czy „wiarę” w działanie szczepionek lub jej brak.
[2] Imię, nazwisko, datę urodzenia. Tu można przeczytać, co i jak zapisane zawiera dokładnie certyfikat covidowy.

Advent of Cyber

Jakiś czas temu pisałem o Advent of Code. Uspokajam, że bawię się co roku. W zeszłym nawet z pewnymi sukcesami, przynajmniej według mojej subiektywnej oceny. Jednak nie samym programowaniem człowiek żyje. Jeśli ktoś interesuje się – albo zamierza interesować się – bezpieczeństwem komputerowym, to informuję, że jest coś takiego jak Advent of Cyber.

Wydarzenie ma za zadanie naukę podstaw IT security poprzez codzienne, proste zadania. Czyli nieco podobnie jak w przypadku Advent of Code. Na tym jednak podobieństwa się kończą. Zacząłem korzystać wczoraj, więc mogę nie mieć pełnego oglądu, ale pozwolę sobie na podsumowanie dotychczasowych spostrzeżeń.

Advent of Cyber ma trochę przyległości[1]. W pierwszym zadaniu jest spore parcie na obserwowanie firmy w social media. Co prawda tylko deklaratywne, ale jest. Całość też jest zauważalnie związana z platformą organizatora. Za to, w przeciwieństwie do Advent of Code, są nagrody rzeczowe losowane wśród uczestników.

Kolejna różnica, to zapewnienie pełnych materiałów edukacyjnych. Try Hack Me, czyli organizator to serwis oferujący szkolenia security i nie jest tu inaczej. Do pierwszego zadania było podane pełne wytłumaczenie podatności. Czyli w zasadzie zero wyzwania. Dla przypomnienia w Advent of Code dostajemy tylko treść zadania i trzeba kombinować samodzielnie od początku do końca.

Teoretycznie wymagane jest zestawienie tunelu VPN, ale organizator zapewnia maszynę wirtualną dostępną przez przeglądarkę. Jedyne ograniczenie to czas dostępności dla darmowych kont – jest to jedna godzina dziennie. Wydaje mi się, że powinno w zupełności wystarczyć na zadania z eventu.

Wydarzenie zaczęło się wczoraj, ale nie jest to żadna przeszkoda, by dołączyć. Można traktować je jako wprowadzenie do CTFów. Formuła podobna – zadania do zrobienia, flagi do zdobycia. Planuję się pobawić, trochę dla odświeżenia wiedzy, trochę dla bliższego zapoznania z platformą.

UPDATE: Po pierwszych paru dniach mogę potwierdzić spostrzeżenie po pierwszym dniu. To wydarzenie raczej edukacyjne, z gotowcami lub praktycznie gotowcami, niż wyzwanie. Nie jest to zarzut, a stwierdzenie faktu.

[1] Strings attached byłoby tu idealnym określeniem, nie znam polskiego odpowiednika.

Certstream HOWTO

Do czego można wykorzystać dane pochodzące z certstream można zobaczyć choćby na prezentacji z konferencji z BSides Warsaw z 2019 roku. Ponieważ każdy ma certstream, mam i ja. Nie jest to zbyt zasobożerne, a można popatrzeć pod kątem security i phishingu, co w sieci piszczy.

Problem

Niestety, zauważyłem korzystanie z certstream jak w przykładach, z użyciem biblioteki Pythona nie jest idealne. Problem objawia się tym, że co jakiś czas następuje zerwanie połączenia z serwerem widoczne jako:

[ERROR:certstream] 2021-11-22 17:18:01,171 - Error connecting to CertStream - Connection to remote host was lost. - Sleeping for a few seconds and trying again…
[INFO:certstream] 2021-11-22 17:18:06,564 - Connection established to CertStream! Listening for events…
[ERROR:certstream] 2021-11-22 17:18:51,893 - Error connecting to CertStream - Connection to remote host was lost. - Sleeping for a few seconds and trying again…
[INFO:certstream] 2021-11-22 17:18:57,213 - Connection established to CertStream! Listening for events…

Początkowo nie wydawało się to dramatem. Kilka sekund przerwy, co parę minut nie powinno mocno wpływać na wyniki. Niestety, pominięte certyfikaty okazały się zauważalne, więc zacząłem szukać przyczyny i rozwiązania tego problemu.

Debug

Na pierwszy ogień poszła wyszukiwarka. Okazało się, że ludzie mają ten problem w różnych warunkach. Jedni sugerowali, że zależne jest to od wersji Pythona. Inni nie potwierdzali i sugerowali problem z serwerem certstream.calidog.io. Podejrzewałem także zbyt niską wydajność serwera VPS na którym działa skrypt, ale ten pomysł szybko odrzuciłem – na mocniejszym VPS nie było wielkiej różnicy. Problem nie był palący i przeleżał trochę czasu. Dopiero na którejś konferencji zaczepiłem Adama L., który również korzysta z certstream i zdarza mu się wspominać w prezentacjach o tym. Zasugerował problem z biblioteką, jej debug i zrobienie po swojemu, na wzór.

Zainspirowało mnie to do bliższych oględzin. Nie jest to trudne – biblioteka jest niewielka i prosta. Na pierwszy ogień poszła złożoność operacji wykonywanych w skrypcie podczas sprawdzania domen. Szybko jednak okazało się, że nawet nie wykonując jakichkolwiek operacji, nawet nie wyświetlając domen, nadal obserwuję rozłączenia. Postanowiłem spróbować skorzystać z innego serwera certstream, tym bardziej, że biblioteka wprost przewiduje zmianę URLa. Tyle, że miałem problem ze znalezieniem takowego.

Na szczęście CaliDog udostępnia także kod źródłowy serwera napisany w… Eliksirze. Nie ukrywam, że była to dla mnie nowość. Instalacja na Debianie była pewnym wyzwaniem. Dla leniwych jest dostępny obraz dockera, ale z pewnych względów stwierdziłem, że wolę zainstalować w systemie.

Instalacja serwera certstream na Debianie

Instalacja na Debianie Bullseye jest w zasadzie zgodna z tym, co napisano w instrukcji repo i na stronie Elixir. Czyli nie jest zgodna. Pierwsza sprawa, to brak pakietów dla Bullseye[1]. Bez problemu można jednak skorzystać z pakietów przygotowanych dla starszej wersji, czyli Buster. W pliku /etc/apt/sources.list.d/erlang-solutions.list powinno pojawić się zatem:

deb http://binaries.erlang-solutions.com/debian buster contrib

Kolejna rzecz powodująca problemy z uruchomieniem serwera certstream to konieczność doinstalowania pakietu erlang-dev:

apt-get install erlang-dev

Po tych zabiegach serwer powinien się bez problemu uruchomić. Domyślnie działa bez szyfrowania na porcie 4000, więc jeśli nie postawimy frontu z certyfikatem SSL, to URL serwera certstream zmieni się z domyślnego wss://certstream.calidog.io na ws://NASZ.ADRES:4000 – trzeba podać port i usunąć jedno s.

Po uruchomieniu własnego serwera i podłączeniu tego samego skryptu, z tego samego VPSa, okazało się, że rozłączenia prawie nie występują. Zaś porównując ilość zgubionych domen okazało się, że jest ich znacznie więcej, niż przypuszczałem. Nawet średnie kilkadziesiąt procent.

Serwis

Do pełni szczęścia brakuje tylko, aby wszystko działało automatycznie. Można to uzyskać tworząc serwis. Można np. utworzyć plik:

/etc/systemd/system/certstream-server.service

o zawartości

[Unit]
Description=Certstream server service
After=network.target
StartLimitIntervalSec=3


[Service]
Type=simple
Restart=always
RestartSec=1
User=certstream
WorkingDirectory=/opt/certstream-server
ExecStart=/usr/bin/mix run --no-halt

[Install]
WantedBy=multi-user.target

Następnie należy zarejestrować serwis i można cieszyć się serwisem uruchamiającym się automatycznie podczas startu systemu. A także po ew. awarii. Ścieżki i user do dokonfigurowania we własnym zakresie.

[1] UPDATE: Część o braku pakietów dla Bullseye jest nieaktualna. Ze sporym opóźnieniem, ale się pojawiły. Warto zatem korzystać z wersji dedykowanej dla używanej dystrybucji.