K
olejnym pakietem (obok base-files), który wysyła informacje o naszym serwerze do firmy Ubuntu jest pollinate. Jest to klient, który łączy się z conajmniej jednym serwerem Pollen (entropia-jako-usułga) za pośrednictwem zaszyfrowanego (HTTPS) lub nie (HTTP) protokołu i pobiera losowe ziarno. Jest to szczególnie przydatne przy pierwszym uruchomieniu obrazów w chmurze i na maszynach wirtualnych, aby zainicjować systemowy generator liczb losowych. Może być również używany na fizycznych maszynach, aby uzupełniać nastawienie pseudogeneratora liczb losowych. Sprawdźmy, co jest wysyłane do serwerów entropy.ubuntu.com, które są wpisane w standardowej konfiguracji tego programu:
sudo su - pollinate -s /bin/bash pollinate --print-user-agent cloud-init/22.2-0ubuntu1~22.04.3 curl/7.81.0-1ubuntu1.4 pollinate/4.33-3ubuntu2 Ubuntu/22.04.1/LTS GNU/Linux/5.15.0-48-generic/x86_64 Intel(R)/Core(TM)/i7-9750H/CPU/@/2.60GHz uptime/5857.69/22860.70 virt/oracle subiquity/22.06.1_3584 curtin/21.3-13-g15ecdeab1Od strony komunikacji HTTP wygląda to następująco:
192.168.056.005.33532-192.168.056.005.00080: POST / HTTP/1.1 Host: 192.168.56.5 User-Agent: cloud-init/22.2-0ubuntu1~22.04.3 curl/7.81.0-1ubuntu1.4 pollinate/4.33-3ubuntu2 Ubuntu/22.04.1/LTS GNU/Linux/5.15.0-48-generic/x86_64 Intel(R)/Core(TM)/i7-9750H/CPU/@/2.60GHz uptime/7324.70/28696.41 virt/oracle subiquity/22.06.1_3584 curtin/21.3-13-g15ecdeab1 Accept: */* Content-Length: 138 Content-Type: application/x-www-form-urlencoded challenge=d40e7f5fa5bef2abe46ac601a13f5e88597c5617ef3a4ded1b01ec7c073 93e1200f4f1aa30a944f2f775ad1e80b8f1d3247a8666f87b9d9e8afcd5c998db22d2 192.168.056.005.00080-192.168.056.005.33532: HTTP/1.1 200 OK Server: nginx Date: Sun, 25 Sep 2022 17:06:15 GMT Content-Type: text/plain; charset=utf-8 Content-Length: 258 Connection: keep-alive 7eb8e509ddb36f58901ecbf8ba01aa9ea34ab4f151a7d31f99545628b8bcf3da 31b9fa1ea2511eca95ec9fde19b7f967db0b7e4b7db68ebd3fba2abbdb5bf5ac 51518a24862a20323be8bd2c015b4b3e56d9ab16580a17e3c8a09584ca44c25e a4f47e7741dd41e30f0562d7e54eba485b2f7fd692759f73eb1d7ca25a34ac6aSpójrzmy, jakie dane są przekazywane do „obcego serwera”:
- Wersje konkretnych pakietów zainstalowanych na systemie (cloud-init, curl, pollinate),
- Wersja systemu operacyjnego wraz z wersją jądra systemu i architekturą (Ubuntu...),
- Dane o platformie procesora, z którego został uruchomiony system (Intel(R)...),
- Czas działania systemu w sekundach (uptime/7324.70),
- Czas bezczynności systemu zsumowany dla wszystkich rdzeni w czasie działania (/28696.41),
- Wykryty silnik wirtualizacji (virt/oracle)
- Dane dodane do pliku /etc/pollinate/add-user-agent (subiquity, curtin),
Jak powstrzymać ten wyciek?
Jeśli spojrzymy dowolnym edytorem na plik /usr/bin/pollinate to zobaczymy, iż jest on skryptem powłoki, który pod maską wywołuje narzędzie curl i podaje pobrane 64 bajty do /dev/urandom wzbogacając w ten sposób entropię systemu z zewnętrznego źródła (entropy.ubuntu.com). Opcje do programu curl są pobierane z pliku /etc/default/pollinate, a dokładniej ze zmiennej: CURL_OPTS. Dlatego, jeżeli chcemy zachować zewnętrzny serwer Ubuntu jako źródło doładowania generatorów wystarczy, iż nadpiszemy User-Agent zamieniając linię:
CURL_OPTS="--cacert /etc/pollinate/entropy.ubuntu.com.pem --capath /dev/null"na
CURL_OPTS="--cacert /etc/pollinate/entropy.ubuntu.com.pem --capath /dev/null --A Pollinate"Wówczas nasz serwer odbije się w logach tylko z informacją:
192.168.56.5 - - [25/Sep/2022:16:28:20 +0000] "POST / HTTP/1.1" 200 258 "-" "Pollinate"Innym sposobem jest postawienie w naszej wewnętrznej infrastrukturze serwera Pollen, zasłonięcie go reverse proxy (ponieważ nie oferuje on logowania komunikacji HTTP(S)) i przekierowanie na niego wszystkie żądania pochodzące od pakietu pollinate (opcja: SERVER w pliku /etc/default/pollinate).
Więcej informacji: [Cryptography] Security of Ubuntu RNG pollinate?