02 - Fingerprint Web Server

Description

Web server fingerprinting adalah proses untuk mengidentifikasi jenis dan versi dari web server yang dijalankan oleh target. Meskipun teknik ini sering kali sudah terintegrasi dalam alat uji otomatis, penting bagi para peneliti keamanan untuk memahami dasar-dasar bagaimana alat-alat tersebut melakukan identifikasi perangkat lunak, serta alasan mengapa hal ini bernilai penting.

Menemukan jenis dan versi web server secara akurat memungkinkan penguji keamanan untuk menilai apakah aplikasi yang berjalan di atasnya rentan terhadap serangan. Secara khusus, server yang menjalankan versi perangkat lunak lama tanpa pembaruan keamanan terkini sangat mungkin rentan terhadap eksploitasi yang sudah diketahui berdasarkan versi.

Test Objective

Menentukan jenis dan versi web server yang sedang berjalan untuk memungkinkan dilakukannya penemuan lebih lanjut terkait kerentanan yang telah diketahui.

How to Test

Teknik-teknik yang digunakan dalam web server fingerprinting meliputi:

  • Banner grabbing

  • Mengirim permintaan yang dibentuk secara tidak valid (malformed requests) untuk memicu respons tertentu

  • Menggunakan alat otomatis untuk melakukan pemindaian secara menyeluruh dengan mengombinasikan berbagai taktik

Semua teknik ini bekerja berdasarkan prinsip yang sama: mencoba memicu respons dari web server, yang kemudian dapat dibandingkan dengan basis data yang berisi kumpulan respons dan perilaku dari berbagai server yang sudah diketahui. Dengan cara ini, server target dapat dicocokkan dengan jenis dan versi server tertentu berdasarkan karakteristik respons yang diberikan.

Banner grabbing dilakukan dengan cara mengirimkan permintaan HTTP ke web server dan menganalisis respons header-nya. Proses ini dapat dilakukan menggunakan berbagai alat, seperti telnet untuk permintaan HTTP biasa, atau openssl untuk permintaan melalui protokol SSL.

Sebagai contoh, berikut adalah respons dari sebuah server Apache:

Berikut adalah respons dari server nginx:

Dan ini adalah respons dari lighttpd:

Dari contoh di atas, tipe dan versi server teridentifikasi dengan jelas. Namun, aplikasi yang memperhatikan aspek keamanan dapat menyamarkan informasi server dengan memodifikasi nilai header. Contoh berikut adalah respons dari server yang header-nya telah dimodifikasi:

Dalam kasus di mana informasi server disamarkan, penguji dapat mencoba menebak jenis server berdasarkan urutan field pada header. Sebagai ilustrasi, pada contoh Apache, urutannya adalah:

  • Date

  • Server

  • Last-Modified

  • ETag

  • Accept-Ranges

  • Content-Length

  • Connection

  • Content-Type

Namun, pada contoh nginx dan server yang disamarkan, urutan field umumnya sebagai berikut:

  • Server

  • Date

  • Content-Type

Penguji dapat menduga bahwa server yang disamarkan tersebut kemungkinan menggunakan nginx. Namun, perlu dicatat bahwa beberapa jenis web server mungkin menggunakan urutan field yang sama, dan field header juga dapat diubah atau dihapus, sehingga metode ini tidak dapat dijadikan acuan mutlak.

Sending Malformed Requests

Jenis web server juga dapat diidentifikasi melalui respons error-nya—terutama jika halaman error bawaan (default error page) belum dimodifikasi. Salah satu cara untuk memicu halaman error tersebut adalah dengan mengirim permintaan yang sengaja dibuat salah atau tidak valid.

Sebagai contoh, berikut adalah respons dari server Apache terhadap permintaan dengan metode tidak valid:

Berikut adalah respons dari nginx terhadap permintaan yang sama:

Berikut respons dari lighttpd:

Karena halaman error default memiliki banyak karakteristik pembeda antar jenis web server, analisis terhadap halaman ini tetap dapat menjadi metode fingerprinting yang efektif, bahkan ketika field header telah disamarkan.

Using Automated Scanning Tools

Seperti telah disebutkan sebelumnya, web server fingerprinting sering kali merupakan fitur bawaan dari alat pemindaian otomatis. Alat-alat ini dapat mengirim permintaan serupa seperti yang telah dijelaskan di atas, dan juga mengirimkan probe yang lebih spesifik terhadap jenis server tertentu. Alat otomatis mampu membandingkan respons server dengan lebih cepat dibandingkan pengujian manual, serta menggunakan basis data besar berisi respons yang telah diketahui untuk mengidentifikasi jenis server.

Beberapa alat pemindaian populer yang mendukung fitur fingerprinting web server antara lain:

  • Netcraft – Alat berbasis web yang dapat memindai situs untuk mengumpulkan informasi, termasuk jenis web server

  • Nikto – Alat pemindaian berbasis command-line berbasis open-source

  • Nmap – Alat pemindaian open-source berbasis command-line yang juga memiliki antarmuka GUI bernama Zenmap

Remediation

Meskipun informasi server yang terlihat tidak selalu merupakan sebuah kerentanan, informasi tersebut tetap dapat dimanfaatkan oleh penyerang untuk mengeksploitasi celah keamanan lain yang mungkin ada. Selain itu, informasi versi server dapat digunakan untuk mencari celah keamanan spesifik yang menyerang versi tersebut, terutama jika belum diperbarui.

Oleh karena itu, beberapa tindakan pencegahan disarankan, seperti:

  • Menyembunyikan informasi server pada header (misalnya, menggunakan modul mod_headers pada Apache)

  • Menggunakan reverse proxy server yang telah diperkuat (hardened) sebagai lapisan keamanan tambahan antara server web dan internet

  • Memastikan web server selalu diperbarui dengan versi dan patch keamanan terbaru

Last updated