Z punktu widzenia bezpieczeństwa i analizy ruchu sieciowego pole w nagłówku HTTP o nazwie User-Agent może być istotne. Wiele osób podświadomie rozumie jego przeznaczenie, jednak w dzisiejszym artykule postaramy się zagłębić nieco bardziej w genezę, znaczenie i możliwości wykorzystania tego pola.
Co to jest User-Agent?
User-Agent oznacza aplikację lub program, który działa jako wirtualna tożsamość użytkownika uzyskującego dostęp do strony internetowej lub dowolnej platformy sieciowej. Jest to w zasadzie ciąg znaków identyfikujący przeglądarkę internetową i system operacyjny urządzenia, dzięki którego uzyskujemy dostęp do witryny HTTP/HTTPS. Zrozumienie User-Agenta ma najważniejsze znaczenie dla twórców i projektantów witryn internetowych, ponieważ pomaga im zoptymalizować funkcjonalność i wygląd witryny pod kątem różnych urządzeń i przeglądarek internetowych. Jednak drugą stroną jego wykorzystania jest analiza sieciowa ruchu wychodzącego na zewnątrz organizacji.
Według definicji z RFC2616 z 1991 roku „[…] User-Agent zawiera informacje o agencie użytkownika, który wysłał żądanie. Służy to celom statystycznym, śledzeniu naruszeń protokołu i automatycznemu rozpoznawaniu programów użytkownika w celu dostosowania odpowiedzi serwera i uniknięcia określonych ograniczeń od strony użytkownika. Agenci użytkownika POWINNI dołączać to pole do żądań. Pole może zawierać wiele tokenów produktowych oraz komentarze identyfikujące agenta i wszelkie produkty podrzędne, które stanowią znaczną część agenta użytkownika. Tradycyjnie tokeny produktów są wymienione w tym polu w kolejności ich znaczenia dla identyfikacji aplikacji”.
Do czego można wykorzystać to pole?
Powyższy cytat z RFC2616 pokazuje, iż w 1991 roku pole User-Agent spełniało trzy funkcje. Po pierwsze, miało służyć celom statystycznym. Strony internetowe mogą śledzić, jakie programy użytkownika się z nimi łączą, i wykorzystywać te dane, aby pomóc programistom w wyborze najlepszego sposobu wyświetlania informacji użytkownikom. Przykładem może być sytuacja, gdy witryny turystyczne widzą tylko łączące się z nimi User-Agenty iPhone’a – być może programiści będą mogli lepiej dostosować witrynę do iPhone’ów.
Druga funkcja polegała na śledzeniu naruszeń protokołu. Jest to funkcja kontroli błędów dla User-Agentów. jeżeli dany błąd będzie się powtarzał, można skontrolować pole agenta, aby sprawdzić, czy jest ono ograniczone do konkretnego programu użytkownika.
Trzecia funkcja, polegająca na dostosowywaniu odpowiedzi na podstawie klienta użytkownika, jest w tej chwili wykorzystywana głównie do celów klienta użytkownika. Na przykład gdybyśmy mieli przeglądarkę internetową, która nie byłaby w stanie obsłużyć Adobe Flash – moglibyśmy dostosować witrynę internetową w oparciu o klienta, aby zastąpić Flasha statycznym HTML.
Każda z funkcji ma inne zastosowania, a przykłady ograniczają się jedynie do wyobraźni.
RFC stwierdziło również, iż pole User-Agent może zawierać wiele tokenów i komentarzy identyfikujących agenta i wszelkie produkty podrzędne.
Z czego składa się pole User-Agent?
String User-Agenta składa się z kilku części (tokenów), z których każda zawiera informacje o urządzeniu i przeglądarce użytkownika. Struktura ciągu zwykle zawiera informacje o nazwie i wersji przeglądarki lub programu, systemie operacyjnym, typie urządzenia, a często także o szczegółach dotyczących modelu urządzenia. Zrozumienie struktury tego pola może pomóc twórcom witryn internetowych zapewnić, iż ich witryna oferuje najlepszą obsługę użytkownika na szerokiej gamie urządzeń i przeglądarek. Wykrycie w żądaniu HTTP podejrzanego i mało znanego User-Agenta, często innego niż popularne przeglądarki, może świadczyć o nawiązaniu komunikacji lub wysłaniu żądania GET do serwera C&C.
Poniżej przykładowe żądanie i parametry jego nagłówków, w tym pole User-Agent:
Warto pamiętać, iż pole User-Agent nie zawsze musi być przeglądarką internetową. Jest to każdy program od strony klienta, który używa protokołu HTTP. Poniżej przykład analizy w Wireshark z User-Agentem programu iTunes:
Jakie są ograniczenia i wady pola User-Agent?
Pomimo tego, iż jest użytecznym narzędziem dla twórców stron internetowych, User-Agent przez cały czas ma swoje ograniczenia. Jedną z największych wad jest fakt, iż można go łatwo sfałszować lub zmanipulować. Oznacza to, iż podawane w nim informacje mogą być niedokładne, szczególnie jeżeli użytkownik korzysta z niestandardowej lub zmodyfikowanej przeglądarki. Dodatkowo agent nie jest w stanie podać szczegółowych informacji o możliwościach systemu czy urządzenia użytkownika, co może być problematyczne przy próbie optymalizacji strony internetowej pod konkretne urządzenia. Wreszcie są metody, w których atakujący mogą wykorzystać to pole na swoją korzyść, preparując odpowiednio żądanie HTTP.
Jak strony mogą się odwrócić?
Jak myśliwy może stać się zwierzyną, jeżeli chodzi o analizę złośliwych zachowań w ruchu sieciowym? Odpowiedź jest bardzo prosta – poprzez User-Agenta. Agenci użytkownika w dużej mierze polegają na zaufaniu. Serwer ufa, iż użytkownik nie będzie manipulował polem agenta. Jak czytaliśmy z RFC, definicja i struktura tego pola nie była zmieniana od ponad 30 lat, co oznacza, iż jest mocno przestarzała. Zaufanie, które nie jest zweryfikowane, to wymarzony scenariusz dla hakerów. Ponieważ agent użytkownika może zostać zmodyfikowany w drodze do serwera lub na samym kliencie, haker może zmanipulować agenta użytkownika tak, aby stał się dowolnym wymaganym przez serwer polem. To dobra wiadomość dla programistów, ponieważ mogą renderować strony najlepiej dostosowane do urządzeń uzyskujących do nich dostęp i testować je bez konieczności ciągłego instalowania różnych programów. Ale jest to też świetna wiadomość dla hakerów. Mogą wybierać, które ładunki złośliwego systemu dostarczać, właśnie na podstawie User-Agenta.
Podsumowanie
Jak czytamy, User-Agent to pole stworzone prawie na początku istnienia Internetu i cały czas znajdujące się w nagłówku żądań HTTP. Ma wiele zastosowań, zarówno pozytywnych, jak i negatywnych z punktu widzenia bezpieczeństwa sieci. W przypadku systemów Microsoft warto przyglądać się działaniu User-Agenta o nazwie „Microsoft BITS”, który odpowiedzialny jest za wiele procesów pobierania danych z Internetu w tle na komputerach Windows. Pisaliśmy o nim w osobnym artykule.
Podajemy jeszcze dwie przydatne witryny, które mogą pomóc w analizie pola User-Agent w naszej sieci:
https://www.useragentstring.com – baza informacji i wyszukiwarka User-Agentów
https://deviceatlas.com/blog/list-of-user-agent-strings – lista najpopularniejszych User-Agentów występujących na danych urządzeniach