Newsgroup: it.comp.www.asp
Titolo: file system e sicurezza IIS

ciao a tutti,
ne ho parlato un pò anche sul ng it.comp.www.server, a proposito del
filesystem e della sicurezza di IIS.
riporto il messaggio originale, sperando che qualcuno sappia come risolvere:
provando in locale con iis5 un'applicazione in asp che usa il FileSystem, ho
notato che posso accedere ai drives, tipo c:\ ecc.. e con poche righe di
codice asp (e qualche "on error resume next") riesco a navigare praticamente
dentro TUTTO l'hard disk, comprese cartelle sottocartelle files ecc.. e
addirittura, sempre col FyleSystem e Stream visualizzare il codice sorgente
di ogni file.
ora.... finchè tizio lo fa sul suo server tutto ok, ma... cosa succede se
qualche malintenzionato lo fa su un server condiviso tra chissà quanti
utenti?
praticamente vede TUTTO quello che vuole!!!
porc... !!
c'è un modo per evitare che l'utente "IUSR_SERVER" faccia i propri comodi
impunemente???
sono un pò... anzi MOLTO preoccupato :(
ciao
sp-

 ha scritto nel messaggio
news:sjJVb.280764$_P.96...@news4.tin.it...



Moderatore di it.comp.www.asp - Microsoft .NET MVP
http://www.aspitalia.com/
 Enjoy the .NET community!
http://www.dev2dev.it/
 La rete ha connesso nuove particelle!
http://www.extensible.it/
 XML and beyond

 con poche righe di codice asp (e qualche "on error resume next")
Basta che IUSR non abbia nessun tipo di accesso alle altre cartelle e
naturalmente everyone non ci sia :)
Teoricamente basterebbe aggiungere IUSR e farlo ereditare a tutte le
cartelle con permessi di negazione a tutto.
-- 
RedFoxy
A fox around web
Power at fox for a yiffing world!
La legge del marketing:
Non migliorare il prodotto, cerca un cliente piu' scemo.

 Vincenzo Antolini
umh..... posso farlo da URLscan.
il problema è che magari uno usa i .. per cose del tutto normali e gli viene
impedito :(
e poi dovrei negare anche / perchè basta che all'inizio della querystring ci
sia / anzichè un .. e la festa è finita.
:((
ma davvero IUSR_SERVER (o peggio everyone, di default) ha tutte queste
possibilità?
alle volte rimango sbalordito da certe filosofie microsoft O__O
si tengono ben fuori dall'opensource, quando poi hanno un openfilesystem :-/
sp-

 sito in IIS senza stancarsi nemmeno tanto.
aspč aspč :) approfitto per chiederti qualche info, anche se non č __asp__:
cosa dovrei aspettarmi da un provider?
che crei un *utente internet* per ogni sito web, o ho capito male?
su it.comp.www.server non ho potuto avere altre info, mi sapresti dire dove
posso documentarmi un pņ?
vorrei capire meglio di che si tratta e se del caso fare richieste precise,
cosģ da evitare di spostare l'hosting presso qualcuno che poi si rivela
ugualmente poco affidabile :(
ciao e grazie
sp-

ciao daniele e grazie innanzitutto del consiglio che penso proprio di
seguire.
un caro amico mi ha suggerito questo passaggio. aspettando che mi risponda,
approfitto per chiederti come metterlo in pratica, in quanto ho un altro
dubbio che mi si pone davanti:
"allora la soluzione è semplice, NON BISOGNA MAI UTILIZZARE GLI ACCOUNT DI
DEFAULT, ma è necessario creare un account web anonymous user per ogni sito
web (di default IUSR_netbiosmachinename) e un account web application (di
default IWAM_netbiosmachinename) per ogni application pool.
Pertanto creo il sito 
www.pippo.it
, creo l'utente 
pippo.it
, imposto accesso
Modify sulla root folder NTFS (es. d:\
pippo.it
), creo l'utente 
iusr_pippo.it
imposto accesso Read nelle security NTFS e nella console iis attribuisco
come Anonymous User Account non il solito IUSR_netbiosmachinename ma
iusr_pippo.it
.
In questo modo ogni sito web avrà il suo utente anonimo con relative
security NTFS e non potrà scorazzare per tutti gli hd, non ti scoraggiare
parecchi isp hanno questi orrori e inoltre la cosa si complica con .net"
la mia risposta:
"spulciando nel sito di ms ho visto che "di default" non solo l'utente
IUSR_*** ha TROPPE permissioni, ma oltre tutto gli devono essere date anche
sulla cartella winnt e altre sottocartelle, per eseguire ASP, lavorare con i
DB ecc.
se, per questo motivo, devo creare un nuovo user per il sito xy, allora
dovrò impostare anche al nuovo user quelle permissioni, per le asp ecc?
non sarei punto e a capo?
qua
http://support.microsoft.com:80/support/kb/articles/q271/0/71.asp&NoWebConte
nt=1&NoWebContent=1 c'è la spiegazione di gates company, che parla delle
permissioni sulle cartelle winnt, system32 ecc.
per riprova ho tolto le permissioni di IUSR_SERVER e effettivamente le asp e
quant'altro non fungono, perciò ho dovuto reimpostarle.
quindi mi chiedo cosa dovrei fare per negare l'accesso a quelle cartelle, ma
lasciare che asp e compagnia bella girino tranquillamente."
spero di essere stato chiaro, perchè inizio a sentirmi sento come un cane
che si morde la coda :)
ciao
sp-

 ma lasciare che asp e compagnia bella girino tranquillamente."
ti conviene creare un gruppo in cui inserire tutti gli utenti web ed
associare a questi le permission sui files che sono necessari al
funzionamento di IIS.



    Secondo me, puoi creare un gruppo utenti ad esempio GRUPPOIIS
A questo gruppo dati accesso in lettura esecuzione alle directory che ti
servono per far girare le asp.
Segui le informazioni che trovi su
http://support.microsoft.com:80/support/kb/articles/q271/0/71.asp&NoWebContent=1&NoWebContent=1
Dove trovi IUSR_nomemacchina sostituisci il nome del gruppo.
Inserisci l'utente 
pippo.it
 dentro questo gruppo.
Alla cartella utente assegnata al sito 
www.pippo.it
 dai i diritti solo a
pippo.it
P.S. (questa per favore me la contestate se è una cagata)
 Inserisci un pò di limitazioni a GRUPPOIIS
 Ad esempio togli i diritti di lettura/scrittura al GRUPPOIIS alla cartella
DOCUMENT AND SETTING
Ottieni il risultato che nessun utente appartenente al gruppo può fare un
accesso locale (va bè lo so che la password non la diciamo a nessuno,
però.... meglio prevenire che curare)
Qualcuno invece mi può illuminare su l'utente IWAM_nomemacchina
A chi serve? Che rischi corro?
Grazie
P.S.
    Ho iniziato una discussione sulla cosa con D. Bocchicchio sul sito
www.aspitalia.com
Andate a darci un'occhiata.
http://forum.aspitalia.com/forum/topic.aspx?PostID=199240
Ciao

 ugualmente poco affidabile :(
mmmh secondo te perchč molti isp che offrono hosting su win utilizzano come
sistema frontpage??? Proprio perchč FP utilizza il sistema da me prima
descritto, ovvero crei un account per ogni web site.
-- 
ITHost (your host company)
Technical Manager
C. Paparelli (MCSE,MCSD,MCDBA)
http://www.ithost.ch

 che si morde la coda :)
o forse come tutti hai troppa fretta queste cose vanno provate, riprovate il
 tutto subito non funziona molto bene
Ti anticipo comunque che mamma microsoft non ti aiuta molto e dovrai anche
pensare a come impostare le permission per far funzionare correttamente
mysql, php, perl ecc. quindi armati di santa pazienza oppure contatta un
consulente :-)


 
http://forum.aspitalia.com/forum/topic.aspx?PostID=199240
mo ce vado :-)


 cartelle con permessi di negazione a tutto.
sicuro???? ad esempio devi lasciare accesso in modify a tutti gli account
web anonimi per le cartelle Documents and Settings (utilizzate da MS Access)
devi lasciare accesso in modify alle cartelle TMP e TEMP sempre per Access


 funzionamento di IIS.
ciao daniele cia xabaras,
faccio un attimo il punto della situazione perchè temo di non aver ben
capito qualche cosa, mi scuserete se sono ripetitivo ma, quando non capisco,
di norma chiedo ;)
mi rivolgo anche a xabaras, proprio in merito alla pagina che mi hai
segnalato, che se ci hai fatto caso è la stessa che avevo già scritto :)
allora microsoft "consiglia" passo-passo dove e come impostare le
permissioni NTFS, ma io continuo ad avere dei dubbi.
e mi spiego.
i passaggi che mi lasciano perplesso di
http://support.microsoft.com:80/support/kb/articles/q271/0/71.asp&NoWebConte
nt=1&NoWebContent=1
sono:
"Grant Ownership and Permission to Administrators and System" (punto 14).
c'è da dare delle permissioni a IUSR_NETBIOSNAME (e anche USERS? ma perchè?
che bisogno c'è?) sulla cartella common files: mi chiedo allora cosa cambia
se io dò le permissioni ad un utente anonimo default rispetto ad un utente
anonimo "mioutente" ?
sempre anonimi sono! avranno cmq le medesime permissioni, no?
"Disable Inheritance in System Directories" (punti 1,3,4,6).
anche qua non capisco: che differenza c'è se copio le permissioni e le
lascio invariate, quando sono già ederidate uguali?
poi "i dolori":
"Disable Inheritance in System Directories" (punto 7a).
dare le permissioni ad un utente IUSR_NETBIOSNAME, a IWAM_NETBIOSNAME e
persino USERS alla cartella WINNT: ma visto che dovrei fare un altro utente
anonimo, che senso ha dare a tanti utenti anonimi (o a un gruppo di utenti
anonimi) le stesse permissioni che ha IUSR_NETBIOSNAME?
cioè, da quel che capisco così facendo ottengo il solito risultato che
propone MS, ma non mi apre sia molto sicuro, no?
e allora vado nel caos e non capendo la necessità di altri utenti anonimi
con identiche permissioni, non capisco quindi perchè crearne altri dello
stesso genere :(
insomma, mettiamo che io creo un gruppo di utentu anonimi, chiamato
"utentianonimi", e dentro ci metto IUSR_dominio.it , IUSR_miosito.com, ecc..
e imposto l'accesso alle cartelle SUL GRUPPO, allora, visto che si tratta
comunque di utenti anonimi.... anche gli utenti del suddetto gruppo potranno
spulciare sull'hdd con filesystem.
o no?
c'è qualcosa che mi sfugge? :(
ciao
sp-

 servono per far girare le asp.
si, certo.
ma il problema non è fare un gruppo e schiaffarci dentro degli utenti... ;)
il problema nasce perchè, da quel che ho capito, QUALSIASI utente anomimo
(che sia di default o no) DEVE avere le permissioni di lettura sulle
cartelle di sistema, perchè IIS possa girare correttamente.
e quindi, con due righe due di codice asp e filesystem, farsi una bella
tournè dentro winnt, system32, inetsrv e compagnia bella
O__o
e se malauguratamente la cartella dove risiede il file asp è in scrittura
(quindi molto facile, come ad esempio con accesso FTP) un malintenzionato
può fare davvero una gran festa, là dentro :(
e la cosa mi preoccupa perchè, come ho scritto a daniele, non capisco a
questo punto che differenza faccia se è l'utente anonimo default o l'utente
"mioanonimo" a fare il browsing delle cartelle di sistema di windoz.
o forse c'è qualcosa che non ho ancora afferrato :-/
ciao
sp-

 c'è qualcosa che mi sfugge? :(
mmmh che casotto facciamo un po' d'ordine vedi prossimo post


allora chiariamo un po' le idee a tutti:
1 - windows conserva nel metadb di iis l'account e la password dell'utente
web anonimo utilizzato da ogni web site di default IUSR_netbiosmachinename
2a - se la modalità di isolazione del sito è high all'attivazione il
processo inetinfo.exe (IISADMIN) attiverà un processo dllhost.exe
utilizzando l'account IWAM_netbiosmachinename (account specificato e
modificabile nelle proprietà com+)
2b - se la modalità di isolazione del sito è medium all'attivazione il
processo inetinfo.exe (IISADMIN) utilizzerà il processo già esistente
dllhost.exe inserendo il web site in oggetto in un pool
3 - il sito attivato utilizzerà l'account specificato nel metadb di iis per
la navigazione degli utenti anonimi, gli utenti anonimo del sito 1 sono
diversi e devo poter attingere a file diversi dagli utenti del sito 2 è vero
che sono tutti anonimi ma gli utenti del sito 1 posso accedere ai dati del
sito 1 mentre quelli del sito 2 devo poter accedere solo ai dati del sito 2.
4 - Le impostazioni ntfs vanno impostate pertanto per singolo sito
impostando accesso in Read per gli account anonimi del sito 1
5 - Tutti gli account anonimi verranno raggruppati nel gruppo web anonymous
users in modo da impostare le security a livello globale ad esempio per le
cartelle TMP e TEMP, ecc.
Buon lavoro


 cartelle TMP e TEMP sempre per Access
Access crea il file temporaneo .lbm nella cartella del db, con IIS puo'
crearlo in una temp specificata o di sistema, e' normale che le cartelle
generiche come temp e global-user devono avere everyone attivo... Mi sembra
logico :P


 cartelle TMP e TEMP, ecc.
e sulle TMP e TEMP ci siamo.
ma su winnt, system32 ecc.. ?
deve esserci qualcosa che non capisco perchè sono ancora al punto di inizio
^___^
grazie di nuovo boss ;)
sp-

Ciao ITHost
Sta discussione mi sta a piacè un casino.
Non mi è chiaro il discorso di IWAM_MACHINENAME
Infatti io ho tutti i siti settati come isolamento alto.
In effetti il sistema crea un processo DLLHOST per ogni sito.
Il tutto funziona correttamente ma alle cartelle del singolo sito i diritti
sono solo IUSR_MACHINENAME.
Non ci sono diritti a IWAM_MACHINENAME, tranne quelli che ci devono essere
per forza (secondo quando riportato dal documento microsoft, che non prevede
l'accesso alla cartella del sito)
Ora che senso ha creare un utente IWAM    per ogni utente quando alla fine
gli unici diritti che gli dovrò dare sono quelli minimi. Il discorso non fa
una grinza su IUSR poichè per ogni sito l'utente anonimo specifico ha
accesso ai diritti minimi ereditati dal gruppo ed in più ai file della sua
cartella HTTP.
Non so se mi sono spiegato?

 logico :P
si è no in quanto di default TEMP e TMP si trovano in c:\winnt consigliabile
quindi eliminarle e crearle in c:\ in questo modo si isola maggiormente
c:\winnt


 grazie di nuovo boss ;)
de nada


 isola maggiormente c:\winnt
Questo, a mio avviso, e' uno dei primi passi da effettuare _in ogni caso_,
prima ancora che il server venga messo in lavorazione, diversi lavori, come
ad es. la sistemazione dei permessi e le posizioni delle cartelle di base.
Tutto dipende poi dal sistemista e dal suo grado di preparazione -.-
Ciao ;^)=


 Tutto dipende poi dal sistemista e dal suo grado di preparazione -.-
mah non mi stupisco più di nulla ormai, ho visto orrore un server web con
partizioni fat, e poi mi vengono a parlare di sicurezza mah :-(


 Non so se mi sono spiegato?
si e no, l'utente IWAM è colui che attiva dllhost.exe e pertanto senza di
lui il sito non parte


 per sito utente per utente
andiamo al pratico, alle ASP.
creo un primo file e lo chiamo "default.asp" :
<%
set fs=server.createObject("Scripting.FileSystemObject")
set fold = fs.getfolder("C:/WINNT/" & request.querystring("dir") & "/")
on error resume next
for each file in fold.subfolders
%>
    <a href="?dir=<%=request.querystring("dir") & "/" &
file.name
%>"><%=
file.name
%></a>
    <br>
<%
next
for each file in fold.files
%>
    - <a href="view.asp?file=<%=request.querystring("dir") & "/" &
file.name
%>" target="_blank"><%=
file.name
%></a>
    <br>
<%
next
for each subfold in fold.subfolders
%>
    <a href="?dir=<%=request.querystring("dir") & "/" &
subfold.name
%>"><%=
fold.name
%></a>
    <br>
<%
    for each file in subfold.subfolders
%>
    <a href="?dir=<%=request.querystring("dir") & "/" & 
subfold.name
 & "/" &
file.name
%>"><%=
file.name
%></a>
    <br>
<%
    next
    for each file in subfold.files
%>
    - <a href="view.asp?file=<%=request.querystring("dir") & "/" &
subfold.name
 & "/" & 
file.name
%>" target="_blank"><%=
file.name
%></a>
    <br>
<%
    next
next
%>
poi creo un altro file "view.asp" :
<%
set fs=server.createObject("Scripting.FileSystemObject")
set fold = fs.getfolder("C:/WINNT/" & request.querystring("dir") & "/")
on error resume next
set fcode = fs.openTextFile(fold & request.querystring("file"))
do while not fcode.AtEndOfStream
    response.write fcode.ReadLine & vbCrLf
loop
fcode.close
%>
in questo modo, che il sito sia su c: o su d: o su quel che ti pare, riesco
a entrare, perchè le permissioni su c:\winnt le ho.
e col secondo file (view.asp) riesco a vedere il codice di qualsiasi file,
sia che si tratti di un compilato (e quindi me ne faccio di poco, sia che si
tratti di altro).
se poi faccio un altro file, posso COPIARMI i files o le cartelle da c:\
alla mia cartella FTP, per poi scaricarmi quel che voglio.
ho provato a fare come dici, come dice xabaras, come dice microsoft, ma le
permissioni alle cartelle di sistema ce le ho lostesso (IUSR_NOMEMACCHINA o
IUSR_pippo.it non cambia, perchè le permissioni per eseguire asp ce le hanno
entrambi).
sp-

 risorse del computer
 > properties
  > advanced
   > enviroment variables
e si imposta la temp su %systemroot%\temp
right?
sp-

 partizioni fat, e poi mi vengono a parlare di sicurezza mah :-(
fat???????
O__o
mon dieu
sp-

 right?
no la imposti o meglio le imposti su C:\TEMP e C:\TMP
ovviamente modificando anche le variabili d'ambiente altrimenti non funziona
nulla


 entrambi).
non fare confusione e leggi bene i link e le guide, l'importante è che
l'utente anonimo del web site 
pippo.it
 non veda il contenuto del web site
pluto.com
 che poi entrambi vedano winnt non è un problema, inoltre leggi
bene il funzionamento di iislockdown che blocca proprio alcuni file
importanti come cmd.exe ecc.



Ba. E' quasi un anno uso tutti i siti come isolamento alto. Ne sono più di
duecento.
Non ho mai avuto ne problemi di stabilità, ne problemi di eccessivo consumo
di memoria.
IIsrecycler è impostato per farsi un giretto un paio di volte al giorno.
Unico problema l'ho avuto con alcuni oggetti com che avevo sviluppato.
In genere li registro nell'MSDTC e li faccio instanziare dal processo
creatore.
Su un paio ho dovuto farli istanziare da MSDTC con un utente creato ad hoc
poichè ogni tanto mi si impallavano.

 poichè ogni tanto mi si impallavano.
mmh misteri di com+ e dcom ogni tanto chi ci capisce è un genio


 nulla
ah si si, mi ero confuso.
%systemroot% č winnt ...gią sotto gli occhi degli anonimi ;)
cmq certo, si cambiano le variabili d'ambiente.
ciao
sp-

 importanti come cmd.exe ecc.
si quello l'ho giŕ attivato e configurato.
approfitto di una cosa di urlscan: blocca anche le cartelle?
cioč, se imposto un deny system32 che succede?
anzi, ci provo subito, ma mi sa che non andrŕ :)))))))))
ciao e grazie (ti sono sempre debitore, come al solito) :)
sp-

 ciao e grazie (ti sono sempre debitore, come al solito) :)
de nada



Si, si.
Mi sono spiegato male io. Non volevo eliminare l'utente IWAM.
La cosa che secondo me č inutile č creare un utente diverso per ogni
application package com+
Non ci guadagno nulla in termini di sicurezza. Infatti questo utente fa
partire la dllhost che perň come accesso al disco usa l'utente anonimo
impostato in IIS

 impostato in IIS
si e no, č utile nel caso che l'utente utilizzi o debba accedere a
determinati servizi, ad esempio se voglio che un utente possa tramite pagina
asp richiamare determinati componenti ad esempio potrei attribuirgli un
utente iwam diverso in modo che quell'utente possa attivare il componente al
quale ho ovviamente dato autorizzazione con dcomcnfg
Per quanto concerne l'utilizzo "normale" di iis effettivamente l'account
iwam non va modificato



Sei stato chiarissimo.
Grazie