540 likes | 759 Views
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.
E N D
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, HttpHandler • ISAPI Filter UrlScan • RequestFiltering • LogParser 2.2
Definitsioon:Turvalinetarkvara • Programm on turvaline, kui ta teeb seda mida ta peab tegema ja ei midagi muud
Stay in Detect Protect Impact Act Get in Sustain Respond Kuidas vähendada ründaja võimalust meid mõjutada
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
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.
Demo Fiddler
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);
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
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
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
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
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
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=
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
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 ?
Demo BSQL
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 !!
UrlScan, päringu piiramine [RequestLimits] MaxUrl=15 MaxQueryString=20 NB! URL-i võib asendada IP aadressiga või HEX koodis anda
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 - -
UrlScan IIS-ile, päringu piiramine valge nimekirjaga UseAllowExtensions=1 [AllowExtensions] .jpg .gif .aspx .css .png
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 -
UrlScan3.1päringupiiramine musta nimekirjaga UseAllowExtensions=0 [DenyExtensions] .exe .bat .cmd .com .txt UseAllowVerbs=0 [DenyVerbs] PROPFIND PROPPATCH MKCOL DELETE PUT COPY MOVE
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
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 */
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
UrlScan-iga filtreerimine • Sigantuurid (Signatures) • Reeglid (Rules) • Reegliterakendamine
UrlScan signatuurid [SQLKeelatud] DB_ FN_ @@ XP_ SP_ APP_NAME BULK INSERT CAST( DATABASE_ OPENROWSET ORIGINAL_LOGIN PWDCOMPARE PWDENCRYPT
Filtreerimise reegel [SQLSystimine] AppliesTo=.aspx DenyDataSection=SQLKeelatud ScanUrl=0 ScanQueryString=1 ScanHeaders=Referer,Cookie: DenyUnescapedPercent=1
UrlScan filtri reegli rakendamine RuleList=SQLSystimine võib mitut reeglit rakendada RuleList=SQLSystimine, XSSsystimine
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
IIS7 täiendus Requestfiltering Kirjutab piirangudjafiltreerimisreeglid rakenduse WEB.CONFIG faili <system.webServer> <security> <requestFiltering> <requestLimits maxUrl=“50“maxQueryString=“100" /> </requestFiltering> </security>
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>
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="<,>,*,%,&,:,\" /> 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
Web.ConfigRequestFiltering – alamkataloogide keelamine <hiddenSegments> <add segment="BIN"/> </hiddenSegments> http://site.com/bin - keelab http://site.com/binary - sedalubab
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%'
Filtritest möödahiilimine Doubleencoding <script>alert('XSS')</script> %253Cscript%253Ealert('XSS')%253C%252Fscript%253E Tõrje päringu filtreerimisel <requestFilteringallowDoubleEscaping=“false” > </requestFiltering>
UnescapeQueryString=1 HouseName=Maja1+%2f+UNION%2f*+*%2fSELECT+ID+FROM+COUNTY UNION/* */SELECT ID FROM COUNTY UnescapeQueryString=0 puhul minnakse filtrist läbi !!
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
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>
Demo HttpModulekoodinäide
Praktiline elu (Defaultdocument) [AllowExtensions] ; ainut [.] punkt on vajalik selleks .
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 - -
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_
LogParser 2.2 Loeb mitteainultUrlScani logidest • logparser.exe "SELECT * FROM Urlscan.*.log WHERE x-action='Rejected'" -i:w3c
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
LogParser 2.2 DEMO
5K: Kuidas võita kübersõda ?? Ründamine kallis Kaitsmine odav