1 / 54

UrlScan ja ASP.NET filtreerimine

UrlScan ja ASP.NET filtreerimine. Kuido Külm kuidoveeb.blogspot.com 29 . september 2010 K ü berkaitseliit. Sisukord. Kuidas IIS päringut töötleb POST, GET, Fiddler HttpModule , Http Handler ISAPI Filter UrlScan Request Filtering LogParser 2.2. Definitsioon: Turvaline tarkvara.

coby
Télécharger la présentation

UrlScan ja ASP.NET filtreerimine

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. UrlScan ja ASP.NET filtreerimine Kuido Külm kuidoveeb.blogspot.com 29. september 2010 Küberkaitseliit

  2. Sisukord • Kuidas IIS päringut töötleb • POST, GET, Fiddler • HttpModule, HttpHandler • ISAPI Filter UrlScan • RequestFiltering • LogParser 2.2

  3. Definitsioon:Turvalinetarkvara • Programm on turvaline, kui ta teeb seda mida ta peab tegema ja ei midagi muud

  4. Stay in Detect Protect Impact Act Get in Sustain Respond Kuidas vähendada ründaja võimalust meid mõjutada

  5. HttpHandler ja HttpModule HttpHandler vaatab päringut faili laiendi järgi (aspx, php, txt, jpg...) Üks handler võib töödelda mitut faili tüüpi Handlerile võib lisada täiendavaid event-basedHttpModuleid HttpModuleis an event based methodology to inject pre-processing logic before any resource is requested

  6. IS7 ja IIS6

  7. POST ja GET • POST request - Kui on vaja andmeid muuta, korduvalt sama päringut esitades peaks hoiatama andmete muutmisest. Päring kodeeritakse kui multipart/form-data või application/x-www-form-urlencoded. Andmed edastatakse päringu päises GET request – Mõeldud andmete küsimiseks ilma et muudetaks olemasolevaid andmeid. Korduvalt sama päringut esitades ei peaks veebilehitseja hoiatama. Kodeeritakse kui application/x-www-form-urlencoded.

  8. Demo Fiddler

  9. Request ja Response • Request • GET - URL parameetrid • POST - veebivormi väljad, küpsised, peidetud väljad (hiddenfields) • HttpXMLRequest • Response this.LabelViga.Text = Server.HtmlEncode(viga.Message);

  10. Päringu piiramine ja filtreerimine Piiramine – luba/keela päringuid mida IIS töötlema hakkab Filtreerimine – otsi päringu sisust signatuure Valge nimekiri (white list) lubatud asjad Must nimekiri (black list) keelatud asjad

  11. ISAPI Filter UrlScan 3.1 UrlScan 3.1 IIS 5.1, IIS 6.0 ja IIS 7.0, IIS 7.5 ISAPI filters are DLL files that can be used to modify and enhance the functionality provided by IIS. ISAPI filters always run on an IIS server, filtering every request until they find one they need to process

  12. Porte 80(http) ja 443 (https) ei saa kinni panna

  13. UrlScan paigaldada nii, et ta oleks teistest ISAPI filtritest eespool Kaks faili UrlScan.dll ja UrlScan.ini peavad olema koos samas kataloogis, mis ei pea olema veebikataloog NB! Kui ISAPI filtrites on UrlScanpaigaldatudagaUrlScan.ini fail puudu süsteem käima ei lähe NB! Installimisel paigaldatakse UrlScan vaikesätetega DefaultSite peale, sealt võib ta ISAPI filtritest maha võtta

  14. DEMO UrlScan.ini fail UrlScan-i tegevus tekitab logifaile [options] PerDayLogging=1 ; Kui 1, siis iga päeva kohta eraldi fail ;formaadis UrlScan.010101.log ; Kui 0 siis kirjutatakse urlscan.log. LoggingDirectory=D:\URL_SCAN_LOGID ;Kuhukataloogilogifailidtekitame

  15. IIS vastusest SERVER päise ära korjamine / asendamine • DEMO nmap 213.219.123.138 [options] RemoveServerHeader=1 ; eemaldab 'Server' päise serveri poolt saadetavast vastusest

  16. nmap -T4 -A -v -PE -PA21,23,80,3389 RemoveServerHeader=0 AlternateServerName=Apache/2.2.9 (Debian) mod_ssl/2.2.9 OpenSSL/0.9.8g AlternateServerName=

  17. GET RequestUrlScanijaokshttp://www.minusait.ee/index.php?op=news&news_id=767 URL:http://www.minusait.ee/index.php URL enne?QueryStringpärast QueryString:op=news&news_id=767

  18. GETja POST • http://www.minusait.ee?id=34#minesellekohapeale><scripttype=text/javascript>alert(‘XSSme’);</script> • http://www.minusait.ee?id=34&&s=3#minesellekohapeale><scripttype=text/javascript>alert(‘XSSme’);</script> • Kuidas rakendus töötab kui POST päringud keelata ?

  19. Demo BSQL

  20. BSQL päringud … WHERE [ID] =2/**/AND/**/ISNULL(ASCII(SUBSTRING(CAST((SELECT/**/@@version)AS/**/varchar(8000)),1,1)),0)<255 -- URL pikkus 97 … WHERE [ID] =2/**/AND/**/ISNULL(ASCII(SUBSTRING(CAST((SELECT/**/LOWER(db_name(0)))AS/**/varchar(8000)),4,1)),0)>103 -- URL pikkus 105 … WHERE [ID] =2/**/AND/**/ISNULL(ASCII(SUBSTRING(CAST((SELECT/**/LOWER(user))AS/**/varchar(8000)),5,1)),0)>97-- URL pikkus 97 …WHERE [ID] =2/**/AND/**/ISNULL(ASCII(SUBSTRING(CAST((SELECT/**/TOP/**/1/**/C.COLUMN_NAME/**/FROM/**/INFORMATION_SCHEMA.TABLE_CONSTRAINTS/**/AS/**/T/**/INNER/**/JOIN/**/INFORMATION_SCHEMA.KEY_COLUMN_USAGE/**/AS/**/C/**/ON/**/T.CONSTRAINT_TYPE=char(0x50)+char(0x52)+char(0x49)+char(0x4D)+char(0x41)+char(0x52)+char(0x59)+char(0x20)+char(0x4B)+char(0x45)+char(0x59)/**/AND/**/T.CONSTRAINT_NAME=C.CONSTRAINT_NAME/**/WHERE/**/C.TABLE_NAME=char(0x63)+char(0x63)+char(0x74)+char(0x61)+char(0x62)+char(0x6C)+char(0x65)+char(0x32))AS/**/varchar(8000)),10,1)),0)<35--URL pikkus 545 !!

  21. UrlScan, päringu piiramine [RequestLimits] MaxUrl=15 MaxQueryString=20 NB! URL-i võib asendada IP aadressiga või HEX koodis anda

  22. Lubatud HTTP meetodid UseAllowVerbs=1 [AllowVerbs] ; Note that these entries are effective if "UseAllowVerbs=1" ; is set in the [Options] section above. GET ;HEAD ei ole lubatud POST UrlScan logi #Date: 2010-03-04 10:53:01 #Fields: Date Time c-ip s-siteidcs-method cs-uri x-action x-reason x-context cs-data x-control 2010-03-04 15:54:35 95.129.199.36 1 HEAD /https://www.minusait.ee/ Rejected verb+not+allowedHTTP+method - -

  23. UrlScan IIS-ile, päringu piiramine valge nimekirjaga UseAllowExtensions=1 [AllowExtensions] .jpg .gif .aspx .css .png

  24. UrlScan loginäide #Fields: Date Time c-ips-siteidcs-methodcs-urix-actionx-reasonx-contextcs-datax-control 2010-05-14 01:28:54 94.236.164.35 1 GET //chat/messagesL.php3 Rejectedextension+not+allowedfile+extension .php3 - 2010-05-14 01:28:54 94.236.164.35 1 GET /chat//chat/messagesL.php3 Rejectedextension+not+allowedfile+extension .php3 - 2010-05-14 01:28:54 94.236.164.35 1 GET /phpchat//chat/messagesL.php3 Rejectedextension+not+allowedfile+extension .php3 - 2010-05-14 01:28:54 94.236.164.35 1 GET /PhpMyChat//chat/messagesL.php3 Rejectedextension+not+allowedfile+extension .php3 - 2010-05-14 01:28:55 94.236.164.35 1 GET /chatroom//chat/messagesL.php3 Rejectedextension+not+allowedfile+extension .php3 - 2010-05-14 01:28:55 94.236.164.35 1 GET /chats//chat/messagesL.php3 Rejectedextension+not+allowedfile+extension .php3 - 2010-05-14 01:28:55 94.236.164.35 1 GET /forum//chat/messagesL.php3 Rejectedextension+not+allowedfile+extension .php3 - 2010-05-14 01:28:55 94.236.164.35 1 GET /php/phpmychat//chat/messagesL.php3 Rejectedextension+not+allowedfile+extension .php3 - 2010-05-14 01:28:55 94.236.164.35 1 GET /phpMyChat//chat/messagesL.php3 Rejectedextension+not+allowedfile+extension .php3 – #Fields: Date Time c-ips-siteidcs-methodcs-urix-actionx-reasonx-contextcs-datax-control 2010-05-12 16:33:15 193.40.244.205 1 GET /_vti_bin/owssvr.dll?UL=1&ACT=4&BUILD=5207&STRMVER=4&CAPREQ=0 Rejectedextension+not+allowedfile+extension .dll - 2010-05-12 16:33:16 193.40.244.205 1 GET /MSOffice/cltreq.asp?UL=1&ACT=4&BUILD=5207&STRMVER=4&CAPREQ=0 Rejectedextension+not+allowedfile+extension .asp – #Fields: Date Time c-ips-siteidcs-methodcs-urix-actionx-reasonx-contextcs-datax-control 2010-09-22 11:25:28 64.71.180.30 1 POST /_vti_bin/_vti_aut/author.dllRejectedextension+not+allowedfile+extension .dll - 2010-09-22 11:25:34 64.71.180.30 1 POST /_vti_bin/_vti_aut/author.dllRejectedextension+not+allowedfile+extension .dll -

  25. UrlScan3.1päringupiiramine musta nimekirjaga UseAllowExtensions=0 [DenyExtensions] .exe .bat .cmd .com .txt UseAllowVerbs=0 [DenyVerbs] PROPFIND PROPPATCH MKCOL DELETE PUT COPY MOVE

  26. UrlScan 3.1, päringu piiramine [DenyUrlSequences] .. ; Don't allow directory traversals ./ ; Don't allow trailing dot on a directory name \ ; Don't allow backslashes in URL : ; Don't allow alternate stream access % ; Don't allow escaping after normalization & ; Don't allow multiple CGI processes to run on a single request

  27. UrlScan, päringu piiramine [DenyQueryStringSequences] ; If any character sequences listed here appear in the query string for any request, that request will be rejected. aspxerrorpath= ; 17. sep 2010 PaddingOracle < ; Commonly used by script injection attacks > ; Commonly used by script injection attacks /* ; MS SQL süstimisekommentaar */

  28. UrlScan LoggingOnly Mode RejectResponseUrl=/~* Kõik tõbised päringud logitakse aga neid ei piirata ega filtreerita #Remark: UrlScan is in Logging-Only Mode. Request analysis will be logged, but no requests will be rejected. Logged+and+allowedrule+'SQLSystimine'+triggeredquery+string - pwdcompare

  29. UrlScan-iga filtreerimine • Sigantuurid (Signatures) • Reeglid (Rules) • Reegliterakendamine

  30. UrlScan signatuurid [SQLKeelatud] DB_ FN_ @@ XP_ SP_ APP_NAME BULK INSERT CAST( DATABASE_ OPENROWSET ORIGINAL_LOGIN PWDCOMPARE PWDENCRYPT

  31. Filtreerimise reegel [SQLSystimine] AppliesTo=.aspx DenyDataSection=SQLKeelatud ScanUrl=0 ScanQueryString=1 ScanHeaders=Referer,Cookie: DenyUnescapedPercent=1

  32. UrlScan filtri reegli rakendamine RuleList=SQLSystimine võib mitut reeglit rakendada RuleList=SQLSystimine, XSSsystimine

  33. Näide: ligipääsu piiramine veebilehele [KeelatudKood] AppliesTo=.aspx DenyDataSection=KoodKeelatud ScanUrl=1 [KoodKeelatud] Admin/Logs.aspx  Reegel  Signatuur Samas saab midagi alati lubada [AlwaysAllowedUrls] /robots.txt [AlwaysAllowedQueryStrings] ; lubatud QueryStringid mis läbivad filtri ;ei saa märkida ainult osa QueryStringist

  34. IIS7 täiendus Requestfiltering Kirjutab piirangudjafiltreerimisreeglid rakenduse WEB.CONFIG faili <system.webServer> <security> <requestFiltering> <requestLimits maxUrl=“50“maxQueryString=“100" /> </requestFiltering> </security>

  35. Web.ConfigRequestFiltering – päringu filtreerimine (alates IIS 7.0) <filteringRules> <filteringRulename="SQLInjection" scanQueryString="true"> <appliesTo> <addfileExtension=".aspx" /> </appliesTo> <denyStrings> <addstring="--" /> <add string=";" /> <add string="/*" />             <add string=“(0x" /> <addstring="@" /> <addstring="kill" /> <addstring="open" /> <addstring="select" /> <addstring=“drop" /> <addstring="table" /> <addstring="update" /> <addstring=“truncate" /> </denyStrings> </filteringRule> </filteringRules>

  36. ASP.NET 4.0 täiendused Saab suurendada/vähendada RequestPath ja QueryString lubatud pikkust <httpRuntimemaxRequestPathLength="260" maxQueryStringLength="2048" /> aga ei tööta veel … Keelata sümboleid RequestPath-is (web.config failis HtmlEncode < ja >) <httpRuntimerequestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,\" /> The following list contains the default set of invalid characters: <,>,*,%,&,:,\ https://10.0.40.8:4153/Ain/Default.aspx?id=10 kontrollitakse punase osa pealt Sümboleid võib esitada kujul ! ASCII $#x0021; XML encodeunicode %u0021 Unicode

  37. Web.ConfigRequestFiltering – alamkataloogide keelamine <hiddenSegments>     <add segment="BIN"/> </hiddenSegments> http://site.com/bin - keelab http://site.com/binary - sedalubab

  38. Filtreerimine on raske ' OR 2=2 ' OR 1 ' OR TRUE ' OR 'tekst' = 'tek'+'st'‏ ' OR 'tekst' = 'tekst' ' OR 'tekst' IN ('tekst')‏ ' OR 'tekst' LIKE'teks%'

  39. Filtritest möödahiilimine Doubleencoding <script>alert('XSS')</script> %253Cscript%253Ealert('XSS')%253C%252Fscript%253E Tõrje päringu filtreerimisel <requestFilteringallowDoubleEscaping=“false” > </requestFiltering>

  40. UnescapeQueryString=1 HouseName=Maja1+%2f+UNION%2f*+*%2fSELECT+ID+FROM+COUNTY UNION/* */SELECT ID FROM COUNTY UnescapeQueryString=0 puhul minnakse filtrist läbi !!

  41. Filtritest möödahiilimine, 0x filter ei õnnestu kohe kuidagi DECLARE @proc_name VARCHAR(30) SET @proc_name=CAST(0x7379732E73705F77686F AS VARCHAR(300)) EXEC @proc_name ASP.NET võib 0x kasutada seansi küpsises. Küpsis luuakse ühenduse loomisel. Soome isikukood võib lõppeda 0X

  42. UrlScan ja RequestFiltering ei piira POST päringuid (RequestBody) See tuleb rakendusse juurde kirjutada (HttpModule) IIS6 või ASP.NET 4.0 on IIS7 ClassicMode <system.web> <httpModules> <addname="SqlInjectionScreening" type="SqlInjectionScreening"/> </httpModules> </system.web> ASP.NET 4.0 IIS7 IntegratedPipelineMode <system.webServer> <modules> <addname="SqlInjectionScreening" type="SqlInjectionScreening" preCondition="managedHandler"/> </modules> </system.webServer>

  43. Demo HttpModulekoodinäide

  44. Praktiline elu (Defaultdocument) [AllowExtensions] ; ainut [.] punkt on vajalik selleks .

  45. Praktiline elu (. kataloogi nimes) AllowDotInPath=0 ; If 1, allow dots that are not file extensions. #Fields: Date Time c-ips-siteidcs-methodcs-urix-actionx-reasonx-contextcs-datax-control 2010-05-21 05:59:51 10.0.40.8 431161762 POST /Services/v1.0/ServerStatus.asmx RejectedURL+contains+dot+in+path URL - -

  46. Praktiline elu (kataloogi nimed) 2010-05-10 17:43:33 193.40.244.203 1 GET /loginTenant.aspx Rejected rule+'SQLSystimine'+triggeredReferer: http://webmail.laposte.net/webmail/fr_fr/read.html?folder=sf_inbox&idmsg=3564&origin=system_folder system_ 2010-05-11 06:40:15 193.40.240.154 1 GET /loginTenant.aspx Rejected rule+'SQLSystimine'+triggeredReferer: http://mail3.voila.fr/webmail/fr_fr/read.html?folder=sf_inbox&idmsg=434&origin=system_folder system_

  47. LogParser 2.2 Loeb mitteainultUrlScani logidest • logparser.exe "SELECT * FROM Urlscan.*.log WHERE x-action='Rejected'" -i:w3c

  48. LogParser 2.2 päringud logparser "SELECT date, time, c-ip, x-action, cs-data FROM urlscan.*.log WHERE cs-uri <> '/robots.txt'" -i:w3c -o:csv > tulem.txt logparser "SELECT date, time, c-ip, REVERSEDNS(c-ip) AS DNS, x-action, x-reason,cs-data FROM urlscan.*.log WHERE cs-uri <> '/robots.txt' AND (LAST_INDEX_OF(x-reason,'SQLSystimine') > 0)" -i:w3c -o:DATAGRID

  49. LogParser 2.2 DEMO

  50. 5K: Kuidas võita kübersõda ?? Ründamine kallis Kaitsmine odav

More Related