OS Fingerprinting ve Güvenliği |
Yanıt Yaz |
Yazar | |
megabros
Security Professional Kayıt Tarihi: 08-06-2009 Konum: Turkey Status: Aktif Değil Points: 752 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı megabros
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
Gönderim Zamanı: 23-08-2009 Saat 23:53 |
Web sunucularına uygulanan parmak izi araştırması ve güvenliğini masaya yatırıyoruz.
Web Sunucusu/Uygulaması Parmak İzi AraştırmasıWeb sunucusu/uygulaması parmak izi araştırması, selefi olan TCP/IP parmak izi araştırmasına (Bugünün en popüler tarama aracı olan Nmap gibi) benzer. Aralarındaki fark web sunucusu/uygulaması parmak izi araştırmasının OSI modelinde Transport katmanının yerine Uygulama katmanına odaklanmış olmasıdır. Web sunucusu/uygulaması parmak izi araştırmasının arkasındaki teori aşağıda sıralananları analiz ederek hedef yazılımı, konfigürasyonları ve muhtemelen network ağı yapıları/topolojisi hakkında doğru bir profil ortaya k****ktır: · HTTP Protokolünün implementasyon farklılıkları · HTTP Cevap başlıkları · Dosya uzantıları (.asp ve .jsp gibi) · Cookiler (ASPSESSIONID) · Hata sayfaları (Kurulum ile beraber gelen) · Dizin yapıları ve isimlendirmeleri (Windows/Unix) · Web Geliştirici ara yüzleri (Frontpage/WebPublisher) · Web Yönetici ara yüzleri (iPlanet/Comanche) · İşletim sistemi parmak izi araştırması uyuşmazlıkları (Linux üzerinde IIS?), Saldırganlar için amaç hedef web olgusunun ayak izini çıkarmak ve mümkün olduğunca bilgiyi ortaya çıkarmaktır. Bu bilgi ile, saldırgan, hedefin kullandığı yazılımın versiyonunda/tipinde bulunan açıklığı gerçekleyebilen doğru bir saldırı senaryosu geliştirebilir. Bu bilgiyi doğru olarak ortaya çıkarmak çok önemlidir çünkü güvenlik açıklıklıkların büyük bölümü (ara bellek taşması, v.b.) belli yazılım sağlayıcılarına ve versiyon numaralarına büyük ölçüde bağlıdır. Buna ek olarak, yazılım versiyonlarını doğru olarak belirlemek ve uygun açıklık gerçeklemesini seçmek saldırının çıkaracağı “kalabalığı” azaltacağı gibi etkisini arttıracaktır. Bu nedenledir ki, kendisini açıkça tanımlayan bir web sunucusu/uygulaması belaya davetiye çıkarmaktadır. Aslında, HTTP RFC 2086 tam da bu meseleden söz eder ve web yöneticilerini HTTP cevabındaki “Server:” başlığında gösterilen yazılım versiyonunu gizlemeleri hakkında uyarır: “Not: Sunucunun yazılım versiyonunu belli etmek bilinen açıklıkları bulunan yazılımları saldırılara karşı daha fazla açık kılar. Sunucu sağlayıcıları bu alanı konfigüre edilebilir şekilde hazırlamaya cesaretlendirilmektedir.” Diğer bilgi ifşa kategorileri tarafından toplanılan bilgiler ile hedef tarafından kullanılıyor olan web sunucuların/uygulamaların versiyon ve türünü çıkarmak mümkün olduğu gerçeği dolayısıyla burda sadece günümüzün web parmak izi araştırma araçlarının kullandığı HTTP Protokolü implementasyonu analizine odaklanacağız. Örnekler Aşağıdaki bütün örnekler hedef web sunucularının ürettikleri ve yorumladıkları HTTP isteklerinin analiz tekniklerini göstermektedir. HTTP Protokolünün implementasyon farklılıkları 1. Leksikal – Leksikal karakteristik kategorileri kullanılan kelimeler/tabirler, gösterilen HTTP Cevap Başlıklarındaki kullanılan büyük/küçük harf ve noktalamalar arasındaki farklılıkları içerir.
2. Cevap Kodu Mesajları – 404 hata kodunda, Apache “Not Found” mesajını bildirirken, Microsoft IIS/5.0 “Object Not Found” mesajını bildirir. Apache 1.3.29 – 404 Microsoft-IIS/4.0 – 404 # telnet target1.com 80 Trying target1.com… Connected to target1.com. Escape character is ’^]’. HEAD /non-existent-file.txt HTTP/1.0 HTTP/1.1 404 Not Found Date: Mon, 07 Jun 2004 14:31:03 GMT Server: Apache/1.3.29 (Unix) mod_perl/1.29 Connection: close Content-Type: text/html; charset=iso- 8859-1 Connection closed by foreign host. # telnet target2.com 80 Trying target2.com… Connected to target2.com. Escape character is ’^]’. HEAD /non-existent-file.txt HTTP/1.0 HTTP/1.1 404 Object Not Found Server: Microsoft-IIS/4.0 Date: Mon, 07 Jun 2004 14:41:22 GMT Content-Length: 461 Content-Type: text/html Connection closed by foreign host. 3. Başlıklarda Kullanılan Kelimeler – “Content-length” yerine geri dönülen “Content-Length” başlığı. Netscape-Enterprise/6.0 – HEAD Microsoft-IIS/4.0 – HEAD # telnet target1.com 80 Trying target1.com… Connected to target1.com. Escape character is ’^]’. HEAD / HTTP/1.0 HTTP/1.1 200 OK Server: Netscape-Enterprise/6.0 Date: Mon, 07 Jun 2004 14:55:25 GMT Content-length: 26248 Content-type: text/html Accept-ranges: bytes Connection closed by foreign host. # telnet target2.com 80 Trying target2.com… Connected to target2.com. Escape character is ’^]’. HEAD / HTTP/1.0 HTTP/1.1 404 Object Not Found Server: Microsoft-IIS/4.0 Date: Mon, 07 Jun 2004 15:22:54 GMT Content-Length: 461 Content-Type: text/html Connection closed by foreign host. 4. Sözdizimi – HTTP RFC tarafından, bütün web haberleşmelerinde haberleşen partilerin birbirlerini anlamaları için önceden belirlenmiş yapılar ve oluşumların kullanılması zorunlu tutulur. Yine de HTTP Cevap başlıklarının sırasında ve formatında farklılıklar vardır.
5. Başlık Sıralaması – Apache sunucuları sürekli olarak “Date” başlığını “Server” başlığından önce yerleştirirken Microsoft-IIS bu başlıkları ters sırada yerleştirir. Apache 1.3.29- HEAD Microsoft-IIS/4.0 – HEAD # telnet target1.com 80 Trying target1.com… Connected to target1.com. Escape character is ’^]’. HEAD / HTTP/1.0 HTTP/1.1 200 OK Date: Mon, 07 Jun 2004 15:21:24 GMT Server: Apache/1.3.29 (Unix) mod_perl/1.29 Content-Location: index.html.en Vary: negotiate,accept-language,accept-charset TCN: choice Last-Modified: Fri, 04 May 2001 00:00:38 GMT ETag: “4de14-5b0-3af1f126;40a4ed5d” Accept-Ranges: bytes Content-Length: 1456 Connection: close Content-Type: text/html Content-Language: en Expires: Mon, 07 Jun 2004 15:21:24 GMT Connection closed by foreign host. # telnet target2.com 80 Trying target2.com… Connected to target2.com. Escape character is ’^]’. HEAD / HTTP/1.0 HTTP/1.1 404 Object Not Found Server: Microsoft-IIS/4.0 Date: Mon, 07 Jun 2004 15:22:54 GMT Content-Length: 461 Content-Type: text/html Connection closed by foreign host. 6. List metodu Sıralaması – Bir HTTP isteğinde OPTIONS metodu yollandığında, istenilen URL için izin verilen metodlar “Allow” başlığı içinde dönülür. Apache sadece “Allow” başlığını dönerken, IIS ayrıca “Public” başlığını da içerir.
Apache 1.3.29- OPTIONS Microsoft-IIS/5.0 – OPTIONS # telnet target1.com 80 Trying target1.com… Connected to target1.com. Escape character is ’^]’. OPTIONS * HTTP/1.0 HTTP/1.1 200 OK Date: Mon, 07 Jun 2004 16:21:58 GMT Server: Apache/1.3.29 (Unix) mod_perl/1.29 Content-Length: 0 Allow: GET, HEAD, OPTIONS, TRACE Connection: close Connection closed by foreign host. # telnet target2.com 80 Trying target2.com… Connected to target2.com. Escape character is ’^]’. OPTIONS * HTTP/1.0 HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Mon, 7 Jun 2004 12:21:38 GMT Content-Length: 0 Accept-Ranges: bytes DASL: <DAV:sql> DAV: 1, 2 Public: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH Allow: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH Cache-Control: private Connection closed by foreign host. 7. Semantic – HTTP cevabında dönülen kelimeler ve ibarelerin yanı sıra, doğru ve yanlış oluşturulmuş isteklerin yorumlarında belirgin farklılıklar vardır.
8. Belli başlıkların bulunması – Bir sunucu, cevabında istediği başlığı kullanabilir. Bazı başlıklar spesifikasyon tarafından zorunlu tutulmuşlarsa da, bir çok başlık (mesela ETag) opsiyoneldir. Aşağıdaki örneklerde, Apache sunucuları cevap başlıklarında IIS tarafından kullanılmayan şu ilave kayıtları içerir; ETag, Vary ve Expires.
Apache 1.3.29- HEAD Microsoft-IIS/4.0 – HEAD # telnet target1.com 80 Trying target1.com… Connected to target1.com. Escape character is ’^]’. HEAD / HTTP/1.0 HTTP/1.1 200 OK Date: Mon, 07 Jun 2004 15:21:24 GMT Server: Apache/1.3.29 (Unix) mod_perl/1.29 Content-Location: index.html.en Vary: negotiate,accept-language,accept-charset TCN: choice Last-Modified: Fri, 04 May 2001 00:00:38 GMT ETag: “4de14-5b0-3af1f126;40a4ed5d” Accept-Ranges: bytes Content-Length: 1456 Connection: close Content-Type: text/html Content-Language: en Expires: Mon, 07 Jun 2004 15:21:24 GMT Connection closed by foreign host. # telnet target2.com 80 Trying target2.com… Connected to target2.com. Escape character is ’^]’. HEAD / HTTP/1.0 HTTP/1.1 404 Object Not Found Server: Microsoft-IIS/4.0 Date: Mon, 07 Jun 2004 15:22:54 GMT Content-Length: 461 Content-Type: text/html Connection closed by foreign host. 9. Normal olmayan Cevap Başlıkları – Aynı istekler hedef web sunucularına gönderilse de, yorumlar farklı olabilir ve bu yüzden değişik cevap kodları üretilebilir. Bu anlamsal (semantik) farklılığa en iyi örnek Whisker tarayıcı aracının kullandığı “Light FingerPrinting” kontrolüdür. Whisker 2.1’in main.test dosyasından alınan aşağıdaki Perl kodu bölümü, hedef sunucunun Apache olup olmadığını anlamak için banner’lerinde görülen bilgilerden bağımsız olarak iki test koşar. İlk istek “GET //” isteğidir ve eğer cevap HTTP durum kodu 200 ise, ikinci istek yollanır. İkinci istek URL kodlanmış ve “GET //” olarak çevrilen “GET /%2f”’dir. Bu sefer Apache sunucusu, 404 – Not Found hatası döner. Diğer web sunucuları (IIS) bu tür istekler için aynı durum kodunu (404) dönmez.
# now do some light fingerprinting… – CUT – my $Aflag=0; $req{whisker}->{uri}=’//’; if(!_do_request(\\\\\\\\\\\\\\\\\\%req,\\\\\\\\\\\\\\\\\\%G_RESP)){ _d_response(\\\\\\\\\\\\\\\\\\%G_RESP); if($G_RESP{whisker}->{code}==200){ $req{whisker}->{uri}=’/%2f’; if(!_do_request(\\\\\\\\\\\\\\\\\\%req,\\\\\\\\\\\\\\\\\\%G_RESP)){ _d_response(\\\\\\\\\\\\\\\\\\%G_RESP); $Aflag++ if($G_RESP{whisker}->{code}==404); } } } m_re_banner(’Apache’,$Aflag); Hedef siteye karşı Whisker koşulduğunda, ön testler ışığında web sunucusunun Apache sunucusu olduğu rapor edilir. Aşağıdaki örnek Whisker raporundan bir bölümdür; ———————————————————————– Title: Server banner Id: 100 Severity: Informational The server returned the following banner: Microsoft-IIS/4.0 ———————————————————————– Title: Alternate server type Id: 103 Severity: Informational Testing has identified the server might be an ’Apache’ server. This Change could be due to the server not correctly identifying itself (the Admins changed the banner). Tests will now check for this server type as well as the previously identified server types. ———————————————————————– Bu rapor saldırgana, sadece sunucu yöneticilerinin web bannerlarını değiştirecek kadar becerikli olduklarını göstermez aynı zamanda Whisker raporun doğruluğunu güçlendirebilecek diğer Apache testlerini de taramasına ekleyecektir. Çözümler Web sunucunuz tarafından sağlanan tanımlayıcı bütün verileri kaldırmak mümkün değildir. Gerçek şudur ki, kararlı bir saldırı web sunucu yazılımınızı tanımlayabilecektir. Amacınız keşif barını olabildiğince yukarıya çekerek saldırganın güvenlik tehlike alarmlarını tetikleyecek kadar fazla uğraşmasını sağlamak olmalıdır. Aşağıdaki adımlar bu iş için yardımcı olacaktır. Öneriler uygulanması kolaydan zora doğu sıralanmışlardır. 1. Sunucu Banner Bilgisinin Değiştirilmesi Web sunucusunun cevap başlıklarındaki “Server” alanı tarafından gösterilen bilgiyi değiştirmek (aldatma amaçlı) mümkündür. HTTP Server alanını değiştirmek ile kazanılacak güvenlik hakkında web güvenlik çevrelerinde bir çok tartışma olmuştur. Sadece banner bilgisinin değiştirilmesi ve yazılım versiyonunu gizleyici diğer önleyici faktörlerin uygulanmaması keşfi düzenleyen gerçek insanlara karşı etkili olmamakla beraber, otomatikleştirilmiş WORM (solucan) programlarına karşı yardımcı olur. Çok miktarda sistemi enfekte etmek için kullanılan solucanların gittikçe artan popülerliği nedeniyle web sunucuların bu şekilde korunması hayati önem taşır. Bu adım organizasyonlara yama üretilme süresinde yeni çıkacak ve banner bilgisine göre hareket eden solucanlara karşı zaman kazandırır. · Apache Sunucuları – Modsecurity’nin Server banner bilgisini Apache kodunun derlemeden önce değiştirilmesi yerine httpd.conf dosyasını edit?? ederek değiştirmesini sağlayan SecServerSignature ayarı vardır.
· IIS Sunucuları – IISLockDown ve URLScan araçlarını kurarak, istemcilere dönen banner bilgisini değiştirebilirsiniz.
2. Başlıklardaki Bilgi Detayının Minimize Edilmesi Cevap başlıklarında dönülen bilgi miktarını kısıtlayın. Mesela, Apache ServerTokens direktifini kullanarak Server banner alanındaki bilginin detaylarının kontrol edilmesini sağlar: ServerTokens Prod[uctOnly] Server sends (e.g.): Server: Apache ServerTokens Min[imal] Server sends (e.g.): Server: Apache/1.3.0 ServerTokens OS Server sends (e.g.): Server: Apache/1.3.0 (Unix) ServerTokens Full (or not specified) Server sends (e.g.): Server: Apache/1.3.0 (Unix) PHP/3.0 MyMod/1.2 Başlıkları minimize ederek, ek olarak kurulmuş Apache modülleri gibi bilgileri gizleyebilirsiniz. 3. Sahte Başlıklar Oluşturun Web sunucu parmak izi araştırmasını engelleyici/şaşırtıcı alternatif tekniklerden bir tanesi sahte bir web topolojisi oluşturmaktır. Saldırganlar genellikle banner elde etme tekniği oturumlarını Parmak İzi araştırması işinin bir parçası olarak kullanırlar. Parmak İzi araştırmasında saldırgan hedefin genel yapısını tanımlamaya çalışır. İlave olarak eklenen sahte başlıklar ile karmaşık bir web yapısı simule edilebilir (Mesela bir DMZ). Ek başlıklar eklenerek sahte bir geri vekilin (reverse proxy) olduğu simule edilebilir. Bu işi başarmak için Apache sunucularında httpd.conf dosyasına aşağıdaki kayıtlar eklenebilir; _ Header set Via “1.1 squid.proxy.companyx.com (Squid/2.4.STABLE6)” _ ErrorHeader set Via “1.1 squid.proxy.companyx.com (Squid/2.4.STABLE6)” _ Header set X-Cache “MISS from www.nonexistenthost.com” _ ErrorHeader set X-Cache “MISS from www.nonexistenthost.com“ Bu kayıtlar aşağıda gösterildiği gibi “Via” ve “X-Cache” ibarelerini bütün HTTP cevap başlıklarına ekler: # telnet localhost 80 Trying 127.0.0.1… Connected to localhost. Escape character is ’^]’. HEAD / HTTP/1.0 HTTP/1.1 200 OK Server: Microsoft-IIS/4.0 Date: Sun, 30 Mar 2003 21:59:46 GMT Content-Location: index.html.en Vary: negotiate,accept-language,accept-charset TCN: choice Via: 1.1 squid.proxy.companyx.com (Squid/2.4.STABLE6) X-Cache: MISS from www.nonexistenthost.com Content-Length: 2673 Connection: close Bu durum sanki Squid Proxy sunucusu kullandığımızı ve web verilerini olmayan bir sunucudan sunduğumuzu gösterir. Bu durum saldırganı ya Apache sunucumuza (tabi ki başarısız olacak) Squid saldırılarını uygulamaya ya da olmayan ve X-Cache başlığında belirtilen bileşene saldırı yapmaya sevk eder. 4. Üçüncü Parti Web Güvenlik Araçlarını Kurulumu Modsecurity veya ServerMask gibi ek üçüncü parti web güvenlik araçlarını kurarak HTTPrint gibi günümüz web sunucu parmak izi araştırma araçlarını şaşırtmak veya tamamen egale etmek mümkündür. Yukarıdaki örnek bölümünde anlatıldığı gibi bu tür araçlar hedef web sunucularını bir çok isteğe boğacak ve belli cevaplar üretmeye zorlayacaklardır. Aşağıda HTTPrint tarafından üretilen bazı anormal istekler bulunmaktadır: 192.168.139.101 – - [08/Jun/2004:11:21:40 -0400] “JUNKMETHOD / HTTP/1.0″ 501 344 “-” “-” 192.168.139.101 – - [08/Jun/2004:11:21:40 -0400] “GET / JUNK/1.0″ 400 381 “-” “-” 192.168.139.101 – - [08/Jun/2004:11:21:40 -0400] “get / HTTP/1.0″ 501 330 “-” “-” 192.168.139.101 – - [08/Jun/2004:11:21:40 -0400] “GET / HTTP/0.8″ 200 1456 “-” “-” 192.168.139.101 – - [08/Jun/2004:11:21:40 -0400] “GET / HTTP/1.2″ 200 1456 “-” “-” 192.168.139.101 – - [08/Jun/2004:11:21:40 -0400] “GET / HTTP/3.0″ 200 1456 “-” “-” 192.168.139.101 – - [08/Jun/2004:11:21:40 -0400] “GET /../../ HTTP/1.0″ 400 344 “-” “-” Eğer Apache sunucuları için ModSecurity gibi bir araç implement etmek istersek bu anormal istekler nedeniyle tetiklenecek HTTP RFC uyumlu filtreler üretebiliriz. İşte kullanılabilecek ModSecurity httpd.conf kayıtları: # This will return a 403 – Forbidden Status Code for all Mod_Security actions SecFilterDefaultAction “deny,log,status:403″ # This will deny directory traversals SecFilter “\\\\\\\\\\\\\\\\\\.\\\\\\\\\\\\\\\\\\./” # This entry forces compliance of the request method. Any requests that do NOT # start with either GET|HEAD|POST will be denied. This will catch/trigger on # junk methods. SecFilterSelective THE_REQUEST “!^(GET|HEAD|POST)” # This entry will force HTTP compliance to the end portion of the request. If # the request does NOT end with a valid HTTP version, then it will be denied. SecFilterSelective THE_REQUEST “!HTTP\\\\\\\\\\\\\\\\\\/(0\\\\\\\\\\\\\\\\\\.9|1\\\\\\\\\\\\\\\\\\.0|1\\\\\\\\\\\\\\\\\\.1)$” 5. Kaynak Kodu Değiştirme Bu parmak izi değiştirme önlemlerinden en zor fakat en etkili olanı budur. Bu işte riskin ödüle oranı programlama becerinizin seviyesine ve web yapınıza göre büyük ölçüde değişebilir. Genel olarak konuşursak, bu işi web sunucunuzun kaynak kodunu derlemeden önce veya makina kodunu bir editör yardımı ile direk olarak değiştirerek yapabilirsiniz. Apache gibi açık kaynak kodlu web sunucuları için bu iş daha kolaydır çünkü kaynak koduna erişiminiz vardır. Başlık Sıralaması – Aşağıdaki Apache 1.3.29 sunucusu için DATE/SERVER sıralamasını düzeltecek ve IIS OPTIONS çıktı bilgisini taklit edecek bir yama kodudur. Bu yama /apache_1.3.29/src/main dizini içerisindeki http_protocol.c dosyasını yeniler. OPTIONS bölümü normal olarak IIS cevap alanları ile ilişkilendirilen başlıkların dönülmelerini sağlar. Bu başlıklar Public, DASL, DAV ve Cache-Control’ü kapsar. — http_protocol.c.orig Mon Apr 26 02:11:58 2004 +++ http_protocol.c Mon Apr 26 02:43:31 2004 @@ -1597,9 +1597,6 @@ /* output the HTTP/1.x Status-Line */ ap_rvputs(r, protocol, ” “, r->status_line, CRLF, NULL); - /* output the date header */ - ap_send_header_field(r, “Date”, ap_gm_timestr_822(r->pool, r->request_time)); - /* keep the set-by-proxy server header, otherwise * generate a new server header */ if (r->proxyreq) { @@ -1612,6 +1609,9 @@ ap_send_header_field(r, “Server”, ap_get_server_version()); } + /* output the date header */ + ap_send_header_field(r, “Date”, ap_gm_timestr_822(r->pool, r->request_time)); + /* unset so we don’t send them again */ ap_table_unset(r->headers_out, “Date”); /* Avoid bogosity */ ap_table_unset(r->headers_out, “Server”); @@ -1716,7 +1716,9 @@ ap_basic_http_header(r); ap_table_setn(r->headers_out, “Content-Length”, “0″); + ap_table_setn(r->headers_out, “Public”, “OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH”); ap_table_setn(r->headers_out, “Allow”, make_allow(r)); + ap_table_setn(r->headers_out, “Cache-Control”, “private”); ap_set_keepalive(r); ap_table_do((int (*) (void *, const char *, const char *)) ap_send_header_field, Saygılar.. Düzenleyen megabros - 23-08-2009 Saat 23:54 |
|
Yanıt Yaz | |
Tweet |
Forum Atla | Forum İzinleri Kapalı Foruma Yeni Konu Gönderme Kapalı Forumdaki Konulara Cevap Yazma Kapalı Forumda Cevapları Silme Kapalı Forumdaki Cevapları Düzenleme Kapalı Forumda Anket Açma Açık Forumda Anketlerde Oy Kullanma |