[PL] Słów kilka o stronach polskich gmin

Wizyta na stronie Wikipedii zawierającej listę gmin w Polsce przerodziła się w przegląd tego, co - bazując na automatycznym zbieraniu danych - można wynioskować o praktykach bezpieczeństwa i prywatności stosowanych przez polski samorząd na swoich stronach. Opracowanie zawierające informacje zbiorcze, przedstawia statystyki użycia popularnych metod zabezpieczeń, bez odwoływania się do konkretnych przypadków.

Wstęp

Badanie obejmuje strony WWW oraz informacje możliwe do pozyskania z ogólnodostępnych źródeł informacji. Strona Wikipedii, podobnie jak GUSu wspomina 2477 gmin. Wikipedia, w momencie ekstrakcji listy, wymieniała jednak 2478 gmin. Pierwszym przeprowadzonym krokiem było zatem sprawdzenie, czy strona Wikipedii dotycząca konkretnej gminy, zawiera informację o jej oficjalnej stronie internetowej. Ustalono, że każda z 2478 gmin posiadała stronę na Wikipedii, 2381 stron na Wikipedii zawierało pole informacyjne wskazujące stronę internetową. Jedna ze stron Wikipedii wymienia archiwalną wersję dostępną w serwisie web.archive.org. Ta strona została pominięta na dalszych etapach badania. Ostatecznie, po odrzuceniu adresów, z którymi nie udało się nawiązać komunikacji 2349 stron kwalifikowało się do dalszego analizowania, tę liczbę należy traktować jako 100%.

HTTP(S)

Anno Domini 2020 ochrona kryptograficzna w postaci użycia protokołu TLS wydaje się standardem. Pierwszym krokiem było sprawdzenie, czy link obecny na stronie Wikipedii prowadzi do w wersji szyfrowanej. Z 2380 stron Wikipedii zawierających link do gminnego serwisu 2296 używa odnośnika nieszyfrowanego, w 84 przypadkach jest to odnośnik rozpoczynający się od https://.

httpsWiki

Udział stron szyfrowanych przedstawia się dużo lepiej po komunikacji ze stroną, tj. odwiedzeniu jej i podążeniu do finalnej destynacji (po przejściu przez wszystkie przekierowania). Przewaga stron bez TLS nie jest tak przytłaczająca. Wciąż (lipiec 2020) większość stron (1329) jest serwowana bez HTTPS. Liczba tych, dla których użyto zabezpieczonego protokołu to 1020. Nadmienić należy o błędzie, który wkradł się w związku z zastosowaną metodą. Do oceny, czy strona otwiera się w połączeniu szyfrowanym czy też nie, wykorzystano bibliotekę Requests. To oprogramowanie działa na poziomie protokołu HTTP. Pominięte zostały więc mechanizmy takie jak przekierowanie z użyciem JavaScript.

httpVsHttps

Szyfrowana wersja strony może istnieć nawet wówczas, gdy nie jest oferowana. Autor ma na myśli sytuację, gdy wersja HTTPS jest dostępna, ale nie następuje na nią przekierowanie. Aby uzyskać tę informację wykorzystano narzędzie nmap, aby sprawdzić czy port 443 jest otwarty. Sam fakt otwartego portu, który standardowo przeznaczony jest dla szyfrowanej wersji protokołu HTTP, nie świadczy oczywiście, że pracuje na nim poprawnie skonfigurowana usługa, której można się spodziewać. Wyniki wskazują, że duża część stron naszych gminnych samorządów jest w fazie przechodzenia na szyfrowaną wersję. Dla 2293 z 2349 stron port jest otwarty, dla 30 zamknięty. Filtrowany jest w 26 przypadkach.

p433Status

Jednym z mechanizmów informujących przeglądarkę, że ma korzystać tylko z szyfrowanego kanału komunikacji jest HTTP Strict Transport Security. Deklarowany jest on w nagłówkach odpowiedzi serwera. Analiza zebranych nagłówków miała miejsce dla tych z serwisów, które ustanawiają szyfrowany kanał na poziomie protokołu HTTP. Dla 1020 stron, które szyfrują połączenie, użycie HSTS zaobserwowano dla 107.

hstsUsage

Przegląd ochrony kryptograficznej kanałów komunikacyjnych dopełniono zbadaniem wersji protokołów TLS wspieranych przez serwisy. Dla ograniczenia ewentualnego wpływu na działanie serwisów, postanowiono sprawdzić tylko jedną domenę dla danego adresu IP (zdarza się sytuacja, że pod tym samym adresem IP serwowana jest większa liczba stron). Teoretycznie możliwa jest konfiguracja, która pozwalałaby na obsłużenie żądań skierowanych do jednego adresu IP przez różne serwery o różnej konfiguracji protokołu TLS. Należy więc powyższe mieć na uwadze.

Ponad jedna trzecia stron oferuje TLS1.3, co należy przyjąć z zadowoleniem. Dominuje wersja 1.2 protokołu TLS, która jest najwyższa oferowaną w 62% procentach stron. Dla trzech serwisów najwyższym oferowanym protokołem jest TLS w wersji 1.0. Piętnaście witryn wciąż wspiera protokół SSL w wersji trzeciej, choć na szczęście dla żadnej nie jest to najwyższy oferowany protokół, uff :).

tlsVersions

DNS

System DNS, pomimo swojego rozproszenia jest systemem hierarchicznym. Domena .pl wydaje się naturalnym miejscem dla witryn samorządowych, nie jest tak jednak we wszystkich przypadkach. Domena .pl została wykorzystana w 2207 na 2349 przypadków, .eu w 100. Mniej popularnymi są .com - występująca w 17 przypadkach, .net - użyta 10 razy. Domena .info znajduje zastosowanie w 8 przypadkach, .org w 5, .biz oraz .cc po jednym. Zasadnym wydaje się zadanie pytania, czy dla samorządów powinna być przewidziana osobna poddomena w ramach .gov.pl. Takie przymiarki zostały odnotowane: 24 witryny działają w poddomenie ug.gov.pl, a 5 w um.gov.pl. Najbardziej złożone nazwy DNS są pięcioczłonowe. Polacy nie gęsi, język ze znakami diakrytycznymi mają. Międzynarodowa pisownia domen jest użyta dla 3 domen. Wskazuje to na niską adopcję domen międzynarodowych - znaki diakrytyczne są obecne w 1265 nazwach własnych miejscowości. Prefiks www., obecnie zdający się odchodzić do lamusa jest użyty dla 1660 (70%) z 2349 nazw domenowych.

tld

Hosting WWW

Utrzymywać stronę WWW można samemu, można też powierzyć to zadanie podmiotowi zewnętrznemu. Nie czas i miejsce, aby roztrząsać wady i zalety tych odmiennych podejść. Analizując to, w jaki sposób realizowany jest hosting, przyjrzano się ich umiejscowieniu geograficznemu. Wykorzystane zostały bazy danych MaxMind GeoIP w wersji Lite, jest to więc miejsce na wspomnienie:

This product includes GeoLite2 data created by MaxMind, available from https://www.maxmind.com

Ponad 85% adresów IP, na których hostowane są gminne strony, znajduje się w Polsce. Drugim popularnym miejscem jest Francja (215 adresów, ponad 9%). Tylko ułamek procenta serwerów znajduje się poza Europą. Szesnaście adresów IP zlokalizowanych jest w USA, jeden w Kanadzie.

hostingCountry

Analizując dane dotyczące tego gdzie strony są hostowane, jedna rzecz zwróciła uwagę. Domen, które udało się rozwiązać na adresy IP jest 2349, jednak niepowtarzalnych adresów IP jest tylko 1301. Zagadkę rozwiązało pogrupowanie i zliczenie domen, które są odwzorowywane na ten sam adres IP. Istnieje adres IP, na którym hostowanych jest 130 serwisów gminnych. Aby pełniej przedstawić trend, należy wspomnieć kolejne pozycje grupowania po liczbie serwisów współdzielących ten sam adres: 121, 65, 54, 45. Bez wątpienia taka koncentracja jest efektywna kosztowo, reperkusje związane z bezpieczeństwem takiej sytuacji dają jednak do myślenia.

Prym pod względem popularności systemów autonomicznych, w obszarze których hostowne są serwisy wiedzie home.pl, choć odnotować należy tu dużą różnorodność.

hostingASN

Hosting poczty

Do uzyskania nazw serwerów, które obsługują pocztę dla domen wykorzystano rekordy MX DNS. Autor ma świadomość niedomagań tej metody, wszak adresy wymienione do korespondencji z urzędami, upublicznione na stronie, mogą być zupełnie inne. Przyjęto jednak tę metodę, jako szybką i pozwalającą na prostą automatyzację całego procesu. Dla wszystkich 2349 domen ustawione są rekordy MX. Ów rekord zakłada możliwość zadeklarowania większej liczby serwerów poczty, co jest preferowane ze względu na niezawodność dostarczania korespondencji. Udział rekordów, które wskazują więcej niż jeden serwer poczty to 190 (8%), pozostałe deklarują jeden.

Poczta jest w zdecydowanej większości hostowana na terenie Polski (89%). Na kolejnych pozycjach jest Francja (6%) oraz Niemcy (prawie 3%). Jedynym krajem spoza UE, w którym gminy hostują swoją pocztę są Stany Zjednoczone Am. Płn. Jest tak dla 21 przypadków, z czego w 20 przypadkach rekordy MX wskazują na korzystanie z usługi Gmail.

Poniżej wymieniono 10 najpopularniejszych systemów autonomicznych w których hostowana jest poczta.

hostingMailASN

Nagłówki HTTP

Z 2349 stron poddanych badaniu, nagłówki HTTP udało się pobrać w 2201 przypadkach. Poniżej krótka analiza użycia niektórych mechanizmów bezpieczeństwa i prywatności. Należy mieć na uwadze, że sprawdzenia były dokonane w najprostszy sposób, to znaczy poprzez zliczenie wystąpień łańcuchów tekstowych, np. “Strict-Transport-Security” w nagłówkach. Sama obecność takiego ciągu oznacza właśnie (i tylko) obecność takiego ciągu w wynikach. Teoretycznie można sobie wyobrazić sytuację, w której zawartość Cookie zawiera taki ciąg znaków.

httpHeaders

Pozwolono sobie również na elementarną analizę nagłówka Server:. Fraza “apache” jest obecna w 1059 przypadkach (48%), “nginx” w 325 (14%), “IIS” w 249 (11%).

Użycie narzędzia Whatweb pozwala na zgrubne szacowanie użycia popularnych systemów zarządzania treścią. Fraza “WordPress” jest obecna w 406 (18%) wynikach, Joomla w 356 (16%), Drupal w 71 (3%).

Trackery

Serwis Risk IQ udostępnia API pozwalające zebrać informacje o trackerach wykorzystywanych na zadanych stronach. Z 2349 sprawdzonych domen, w 1209 przypadkach API wymieniało co najmniej jeden rekord w zasobie trackers. Prym wiedzie analityka Google - GoogleAnalyticsTrackingId stwierdzono na 694 stronach, FacebookPixelId na 12, YandexMetricaCounterId na jednej. Należy mieć na względzie, że dla części stron Risk IQ mogło nie zwrócić wyników, gdyż ich silnik mógł ich nigdy nie analizować.

Media społecznościowe

Podobnie jak w przypadku trackerów wykorzystano API Risk IQ. FacebookId było obecne w 851 wynikach, YouTubeId w 169, TwitterId w 145, InstagramId w 119, GooglePlusId w 60, PinterestId w 10.

Zewnętrzne źródła wiedzy o zagrożeniach

Dla wszystkich 2349 domen, o które zapytano API RiskIQ żadna z odpowiedzi nie wskazuje, by któraś ze stron została skompromitowana (https://api.passivetotal.org/v2/actions/ever-compromised).

Odpytano również VirusTotal. Dla wszystkich 2349 domen API dało odpowiedź. W 45 przypadkach (niecałe 2%) przynajmniej jeden z systemów przeprowadzających analizę URL oznaczył stronę jako złośliwą. Należy uspokoić, że silników jest ponad 70, a sortowanie malejące wg liczby zgłoszeń przedstawia się następująco:

  • 3 silniki oznaczały jako złośliwe - 2 domeny
  • 2 silniki oznaczały jako złośliwe - 12 domen
  • 1 silnik oznaczył jako złośliwe - 30 domen

Jako podejrzane zostało oznaczonych 18 stron (0,77%), z czego w 2 przypadkach serwis został zaklasyfikowany zarówno jako “złośliwy” oraz “podejrzany”.

API VT pozwala również na pobranie informacji o rankingu strony, dostarczając danych ze znanych serwisów mierzących popularność. Wyniki były obecne dla 456 stron z 2349. Jakość wyników, a dokładniej różnica między pozycją w rankingu odsyłaną przez API, a wartością na stronie Alexa skłoniła autora do zgłoszenia sprawy do VT. Problem objawia się tym, że strony polskich gmin, nie ujmując im, zajmują, wg API dość wysokie pozycje w rankingu Alexa (około 70-tysięcznego miejsca). Zdarza się to również dla gmin, których serwisy trudno posądzić o przyciąganie bardzo dużej liczby odwiedzających.

W ramach pozyskania informacji o gminnych stronach skorzystano również z serwisu Shodan. Po przyjrzeniu się wynikom, zdecydowano się pominąć je. O ile mogą być przydatne w poszczególnych, jednostkowych sytuacjach, zawieranie statystyk sugerujących, że zgoła duży odsetek stron posiada podatności wydaje się niewiele wnosić. Autor opracowania nie twierdzi, że nie jest tak w żadnym przypadku, jednak wartość poznawcza wskazuje, że są te ew. delikatne przesłanki by przyjrzeć się danemu serwisowi bliżej.

Osobliwości

Mimo przyjętego na wstępie prac założenia o maksymalnej automatyzacji zbierania i analizowania informacji, nie obyło się bez ręcznego przeglądania wyników (oczywiście ich części). Pozwoliło to na wychwycenie kilku smaczków.

Zasób robots.txt zawierający wpis:

Disallow: /zdjecia-z-drona.zip

Bardziej przerażająca wydaje się jednak zawartość odesłana dla żądania o ten zasób (robots.txt) w innym przypadku:

jos-Warning: exception 'RuntimeException' with message 'Unknown column 'header' in 'field list' SQL=SELECT `new_url`,`header`,`published`
FROM ... 

brzmi jak problem z Joomlą.

W innym przypadku, również GET na robots.txt skutkuje odpowiedzią:

<?
	system("unzip Joomla33.zip");
?>

Odnotowano też specyficzne użycie rekordu TXT w DNS, który przyjmuje wartość:

Piwniczka/K5 - (Web server proxy 4 nabor) 

cóż, przynajmniej wiadomo gdzie go szukać.

Written on October 19, 2020 by Adam Piontek

Zapraszamy do kontaktu

poprzez formularz:

LogicalTrust sp. z o.o.
sp. komandytowa

al. Aleksandra Brücknera 25-43
51-411 Wrocław

NIP: 8952177980
KRS: 0000713515