Níže nabízím překlad z Home > Stable > 4-Web Application Security Testing > 01-Information Gathering > Fingerprint Web Server
Shrnutí
Zjišťování otisků webových serverů je úkolem, který spočívá v identifikaci typu a verze webového serveru, na kterém je cíl spuštěn. Přestože je fingerprinting webových serverů často obsažen v nástrojích pro automatizované testování, je pro výzkumníky důležité pochopit základy toho, jak se tyto nástroje snaží identifikovat software a proč je to užitečné.
Přesné zjištění typu webového serveru, na kterém aplikace běží, může bezpečnostním testerům umožnit zjistit, zda je aplikace zranitelná vůči útokům. Zejména servery se staršími verzemi softwaru bez aktuálních bezpečnostních záplat mohou být náchylné ke známým exploitům specifickým pro danou verzi.
Cíle testu
- Určit verzi a typ spuštěného webového serveru, aby bylo možné dále odhalit všechny známé zranitelnosti.
Jak testovat
K technikám používaným pro získávání otisků webových serverů patří Banner Grabbing (odchytávání obsahu hlaviček), získávání odpovědí na chybné požadavky a používání automatizovaných nástrojů k provádění robustnějších skenů, které využívají kombinaci různých taktik. Základní předpoklad, podle kterého všechny tyto techniky fungují, je stejný. Všechny usilují o získání určité odpovědi od webového serveru, kterou lze následně porovnat s databází známých odpovědí a chování, a přiřadit ji tak ke známému typu serveru.
Banner Grabbing
Banner Grabbing se provádí odesláním požadavku HTTP webovému serveru a prozkoumáním hlavičky odpovědi. To lze provést pomocí různých nástrojů, včetně telnetu pro požadavky HTTP nebo openssl pro požadavky přes SSL.
Zde je například odpověď na požadavek ze serveru Apache.
HTTP/1.1 200 OK
Date: Thu, 05 Sep 2019 17:42:39 GMT
Server: Apache/2.4.41 (Unix)
Last-Modified: Thu, 05 Sep 2019 17:40:42 GMT
ETag: "75-591d1d21b6167"
Accept-Ranges: bytes
Content-Length: 117
Connection: close
Content-Type: text/html
...
Zde je další odpověď, tentokrát od nginxu.
HTTP/1.1 200 OK
Server: nginx/1.17.3
Date: Thu, 05 Sep 2019 17:50:24 GMT
Content-Type: text/html
Content-Length: 117
Last-Modified: Thu, 05 Sep 2019 17:40:42 GMT
Connection: close
ETag: "5d71489a-75"
Accept-Ranges: bytes
...
Takto vypadá odpověď od lighttpd.
HTTP/1.0 200 OK
Content-Type: text/html
Accept-Ranges: bytes
ETag: "4192788355"
Last-Modified: Thu, 05 Sep 2019 17:40:42 GMT
Content-Length: 117
Connection: close
Date: Thu, 05 Sep 2019 17:57:57 GMT
Server: lighttpd/1.4.54
V těchto příkladech je jasně uveden typ a verze serveru. Aplikace, které dbají na bezpečnost, však mohou informace o serveru zakrýt úpravou záhlaví. Zde je například výňatek z odpovědi na požadavek na web s upravenou hlavičkou:
HTTP/1.1 200 OK
Server: Website.com
Date: Thu, 05 Sep 2019 17:57:06 GMT
Content-Type: text/html; charset=utf-8
Status: 200 OK
...
V případech, kdy jsou informace o serveru skryté, mohou testeři odhadnout typ serveru na základě pořadí polí záhlaví. Všimněte si, že ve výše uvedeném příkladu Apache jsou pole v tomto pořadí:
- Date
- Server
- Last-Modified
- ETag
- Accept-Ranges
- Content-Length
- Connection
- Content-Type
V obou příkladech serveru nginx a skrytého serveru však mají pole společné toto pořadí:
- Server
- Date
- Content-Type
Testeři mohou na základě těchto informací odhadnout, že skrytým serverem je nginx. Vzhledem k tomu, že řada různých webových serverů může sdílet stejné pořadí polí a pole mohou být upravena nebo odstraněna, není však tato metoda jednoznačná.
Odesílání chybných požadavků
Webové servery lze identifikovat na základě jejich chybových odpovědí a v případech, kdy nebyly upraveny, na základě jejich výchozích chybových stránek. Jedním ze způsobů, jak donutit server k jejich zobrazení, je odesílání záměrně nesprávných nebo chybně formulovaných požadavků.
Například zde je odpověď na požadavek na neexistující metodu SANTA CLAUS ze serveru Apache.
GET / SANTA CLAUS/1.1
HTTP/1.1 400 Bad Request
Date: Fri, 06 Sep 2019 19:21:01 GMT
Server: Apache/2.4.41 (Unix)
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>
Zde je odpověď na stejný požadavek z nginxu.
GET / SANTA CLAUS/1.1
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.17.3</center>
</body>
</html>
Zde je odpověď na stejný požadavek od lighttpd.
GET / SANTA CLAUS/1.1
HTTP/1.0 400 Bad Request
Content-Type: text/html
Content-Length: 345
Connection: close
Date: Sun, 08 Sep 2019 21:56:17 GMT
Server: lighttpd/1.4.54
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>400 Bad Request</title>
</head>
<body>
<h1>400 Bad Request</h1>
</body>
</html>
Vzhledem k tomu, že výchozí chybové stránky nabízejí mnoho rozlišovacích faktorů mezi typy webových serverů, může být jejich zkoumání účinnou metodou pro určování „fingerprintů“ i v případě, že jsou pole záhlaví serveru zakryta.
Použití nástrojů pro automatizované skenování
Jak již bylo řečeno, otiskování webových serverů je často součástí funkcí automatických skenovacích nástrojů. Tyto nástroje jsou schopny provádět požadavky podobné těm, které byly demonstrovány výše, a také odesílat další specifické sondy serveru. Automatizované nástroje mohou porovnávat odpovědi webových serverů mnohem rychleji než manuální testování a využívat rozsáhlé databáze známých odpovědí k pokusům o identifikaci serveru. Z těchto důvodů je pravděpodobnější, že automatizované nástroje poskytnou přesné výsledky.
Zde jsou uvedeny některé běžně používané skenovací nástroje, které obsahují funkce pro zjišťování otisků webových serverů.
- Netcraft, online nástroj, který skenuje webové stránky a zjišťuje informace včetně webového serveru.
- Nikto, skenovací nástroj s otevřeným zdrojovým kódem pro příkazový řádek.
- Nmap, nástroj s otevřeným zdrojovým kódem pro příkazový řádek, který má také grafické rozhraní Zenmap.
Náprava
Ačkoli odhalené informace o serveru samy o sobě nemusí nutně představovat zranitelnost, jedná se o informace, které mohou útočníkům pomoci při zneužití jiných zranitelností, které mohou existovat. Odhalené informace o serveru mohou také vést útočníky k nalezení zranitelností serveru specifických pro danou verzi, které lze využít ke zneužití neopravených serverů. Z tohoto důvodu se doporučuje přijmout určitá opatření. Mezi tato opatření patří např:
- Zakrytí informací o webovém serveru v hlavičkách, například pomocí modulu mod_headers serveru Apache.
- Použití zabezpečeného reverzního proxy serveru, který vytvoří další vrstvu zabezpečení mezi webovým serverem a internetem.
- Zajištění aktualizace webových serverů pomocí nejnovějšího softwaru a bezpečnostních záplat.