Post on 19-Apr-2018
FundamentosFundamentos de de seguridadseguridadparapara aplicacionesaplicaciones WebWeb
Jorge OblitasJorge OblitasMicrosoft Regional DirectorMicrosoft Regional Directorwww.icuadrado.comwww.icuadrado.comwww.microsoft.com/rdwww.microsoft.com/rd
Agenda del Agenda del ddííaa
FundamentosFundamentos de de SeguridadSeguridad paraparaaplicacionesaplicaciones WebWeb
SeguridadSeguridad esencialesencial parapara IIS y ASP.NETIIS y ASP.NETAtaquesAtaques y y ModeloModelo de de ataquesataques
A A ququéé temertemer y y porpor ququééIdentificandoIdentificando vulnerabilidadesvulnerabilidadessistemsistemááticamenteticamente
DefensasDefensas y y contramedidascontramedidasEscribiendoEscribiendo ccóódigodigo ASP.NET ASP.NET seguroseguro
UniendoUniendo todotodoAplicaciAplicacióónn referencialreferencial de Microsoft de Microsoft parapara el el OpenHackOpenHack
Agenda de Agenda de estaesta sesisesióónn
PorPor ququéé hablamoshablamos de de seguridadseguridad??SeguridadSeguridad IISIISSeguridadSeguridad ASP.NETASP.NETPersonificaciPersonificacióónnAutenticaciAutenticacióónn ASP.NETASP.NETAutorizaciAutorizacióónn ASP.NETASP.NETAutenticaciAutenticacióónn y y AutorizaciAutorizacióónn en en acciaccióónn
PorPor ququéé hablamoshablamos de de seguridadseguridad??
Reportaron brechas de seguridad en los últimos 12
meses
Tuvieron perdidasfinancieras como resultado
Identificaron la conexión a Internet como fuente frecuente
de ataquesReportaron la intrusión a
las autoridades
90%
i http://www.gocsi.com/press/20020407.html
Encuesta 2002 de crimen y seguridad en computadoras.
80%
74%
34%
Porcentajes de las compañías participantes
CCóómomo paspasóó estoesto??
Administración de la sesión 79%
Vulnerabilidades comunes del softwarePorcentajes de aplicaciones que tuvieron serias deficiencienciasen el diseño en las áreas mostradas en las áreas indicadas
Control de accesos 64%Algoritmos criptográficos 61%
Manipulación de parámetros 73%
Manejo de data sensible 41%
Validación del ingreso 32%Controles administrativos 36%
Manos a la Manos a la obraobrasoftware software seguroseguro requiererequiere personal personal dedicadodedicadoy con y con conocimientoconocimiento..
El Software no El Software no eses seguroseguro sisi la red no lo la red no lo eses..La La administraciadministracióónn eses el el lecholecho de de rocaroca de la de la seguridadseguridad..
El software El software seguroseguro reuqierereuqiere tambitambiéénndesarrolladoresdesarrolladores dedicadosdedicados y con y con conocimientoconocimiento. .
UnaUna administraciadministracióónn apropiadaapropiada no no significasignifica nada nada sisi el el ccóódigodigo no no eses seguroseguro..MuchosMuchos desarrolladoresdesarrolladores no se no se dandan cuentacuenta quequeestestáánn escribiendoescribiendo ccóódigodigo inseguroinseguro..
EstoEsto eses ccóódigodigo inseguroinseguro!!<html>
<body><form runat="server">
<asp:TextBox ID="Input" runat="server" /><asp:Button Text=“Clickeame" OnClick="OnSubmit"
runat="server" /><asp:Label ID="Output" runat="server" />
</form></body>
</html>
<script language="C#" runat="server">void OnSubmit (Object sender, EventArgs e){
Output.Text = "Hola, " + Input.Text;}</script>
Forzando Forzando camposcampos ocultosocultos
SeguridadSeguridad IISIIS
AuthenticaciAuthenticacióónn
AutorizaciAutorizacióónnPermisos de la Metabase de la Web
ACL
AnonymousBasicDigest
SSL/TLSSSL/TLS
Quén envió el request?
Qué puede hacerel usuario quellama?
RestricciRestriccióónn IPIP Las llamadas desdeesta IP son permitidas?
Certificados X.509Integrada con WindowsPassport (IIS 6)
ProtecciProteccióónn y Poolingy PoolingDónde debeejecutarse el código
Debe ser encriptado el tráfico?
Basi
cBa
sic
Dige
stDi
gest
NTLM
NTLM
Kerb
eros
Kerb
eros
X.50
9 X.
509
Certs
Certs
Pass
port
Pass
port
MecanismosMecanismos de de autenticaciautenticacióónn IISIIS
YYYYYYYYNNNNTRansparenteTRansparente al al usuariousuario??YYYYNNNNYYYYPasaPasa a a travtravééss de firewalls?de firewalls?YYYYNNNNYYYYSoportaSoporta browsers no IE?browsers no IE?NNNNNNNNNNYYCredencialesCredenciales en en cleartextcleartext??NNNN
NN****
NNYYYY
NNYY
NNYY
YYSoportaSoporta delegacidelegacióónn?*?*YYNecesitaNecesita cuentascuentas Windows?Windows?
En Windows 2003 Server, la transición y delegación restringida en Kerberos se puede usarpara delegar al margen del mecanismo de autenticación seleccionado.*
Some mapeos de certificados son delegables, pero la mayoría no**
IIS 5 y ASP.NETIIS 5 y ASP.NET
Inetinfo.exe
Aspnet_isapi
Aspnet_wp.exe
AppDomain
AppDomain
HTTPRequests
Named Pipe
Otrascañerías
Las aplicaciones ASP.NET comparten un worker process pero están aisladas en AppDomains* separados.
* ASP.NET también soporta Web gardening,que ubica un worker process por CPU
ASP.NET worker process
IIS 6 y ASP.NETIIS 6 y ASP.NET
Inetinfo.exe
W3wp.exe
AppDomain
Aspnet_isapi
HTTP Requests
W3wp.exe
AppDomain
AppDomain
Aspnet_isapi
Http.sys
I/O Completion PortsModo Kernel Modo Usuario
Application Pool 1 Application Pool 2
IdentidadIdentidad del Worker Processdel Worker Process
En IIS 5, ASP.NET En IIS 5, ASP.NET correcorre comocomo ASPNET ASPNET porpordefectodefecto
CuentaCuenta local local ddéébilbil con con privilegiosprivilegios limitadoslimitados..CreadoCreado al al momentomomento de la de la instalaciinstalacióónn..Password Password autogeneradaautogenerada..
En IIS 6, ASP.NET En IIS 6, ASP.NET correcorre comocomo un un servicioservicio de de red (machine$) red (machine$) porpor defectodefecto
CuentaCuenta local local ddéébilbil con con privilegiosprivilegios limitadoslimitados..TieneTiene credencialescredenciales de red.de red.ConstruidoConstruido en Windows 2003 Serveren Windows 2003 Server
IdentidadIdentidad del del procesoproceso de de cambiocambioIIS 6IIS 6
Configurable Configurable porpor application poolapplication poolLas Las CredencialesCredenciales son son administradasadministradas porpor IISIIS
IIS 5IIS 5La La IdentidadIdentidad eses compartidacompartida porpor todostodos loslos WPsWPsen el Web serveren el Web serverLas Las CredencialesCredenciales se se guardanguardan en en Machine.configMachine.config**
<processModel userName="MiDominio\MiUsuario"password="..." ... />
Ver http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/SecNetHT01.asp ara saber como correr ASP.NET usando una cuenta personalizada.
*
AsegurandoAsegurando laslas credencialescredencialesdel del procesoproceso
En IIS 5, En IIS 5, usausa Aspnet_setregAspnet_setregSSóólolo en ASP.NET 1.1; en ASP.NET 1.1; hotfixhotfix parapara 1.01.0
<processModel ...userName="registry:HKLM\SOFTWARE\MyApp\Identity\ASPNET_SETREG,usuarioe"password="registry:HKLM\SOFTWARE\MyApp\Identity\ASPNET_SETREG,password"
/>
Machine.config
Registry
http://support.microsoft.com/default.aspx?scid=kb;en-us;329290i
SeguridadSeguridad ASP.NETASP.NET
AutenticaciAutenticacióónn
AuthorizaciAuthorizacióónnAutorización ACLAutorización URL
WindowsPassportForms
ImpersonalizaciImpersonalizacióónn
De quein vino el request?
Que tienepermitido hacerel que llama?
Usar identidad de proceso o la identidad del quellama
ImpersonalizaciImpersonalizacióónn
PorPor defectodefecto, el , el ccóódigodigo se se ejecutaejecuta utilizandoutilizandola la identidadidentidad del ASP.NET worker processdel ASP.NET worker process
El El AccesoAcceso eses negadonegado sisi se se intentaintenta accederacceder a un a un recursorecurso parapara el el cualcual el worker process no el worker process no tienetienepermisopermiso..
SiSi la la personificacipersonificacióónn estestáá habilitadahabilitada el el ccóódigodigo se se ejecutaejecuta bajobajo la la identidadidentidad del del quequellama.llama.
El El accesoacceso eses negadonegado sisi se se intentaintenta accederacceder a un a un recursorecurso parapara el el cualcual el el queque llama no llama no tienetienepermisopermiso..TrabajaTrabaja adjuntandoadjuntando el token de el token de accesoacceso al thread al thread asignadoasignado porpor el request.el request.
HabilitandoHabilitando impersonalizaciimpersonalizacióónn
<configuration><system.web>
<authentication mode="Windows" /><identity impersonate="true" />
</system.web></configuration>
Web.config
AutenticaciAutenticacióónn ASP.NETASP.NETAutenticaciAutenticacióónn WindowsWindows
UsaUsa laslas cuentascuentas Windows Windows existentesexistentesIdeal Ideal parapara aplicacionesaplicaciones IntranetIntranet
AutenticaciAutenticacióónn PassportPassportConvenienteConveniente parapara loslos usuariosusuarios (un (un ssóólolo puntopuntoparapara loguearseloguearse))PonerPoner laslas credencialescredenciales en en laslas manosmanos de de otrosotros..
AutenticaciAutenticacióónn porpor formulariosformulariosTipicamenteTipicamente usausa ppááginasginas de Login al de Login al estiloestiloeBay.eBay.Ideal Ideal parapara aplicacionesaplicaciones InternetInternet
AutenticaciAutenticacióónn WindowsWindows
Jorge IIS ASP.NETA A
IIS crea el token de accesoidentificando al caller (Jorge oIUSR_machinename*)
ASP.NET recibe el token de acceso, hace un chequeoACL al recurso pedido, y hace el token disponiblepara impersonalización.
* Por defecto , IIS usa IUSR_machinename para representar usuarios anónimos
El request corre usando la identidad del proceso o la identidad personificada (jorge o IUSR_machinename*)
AutenticaciAutenticacióónn porpor formulariosformulariosDisponible
parausuarios
anónimos?Recurso
Cookie deautenticacion
valida?
Logueoexitoso?Página de Login
cookie
Si
Accessodenegado
Está autorizadoel que hace el
request?
Si
Si
Si
No
No
No
No
EspecificandoEspecificando el el tipotipo de de autenticaciautenticacióónn
<configuration><system.web><!-- mode="Windows|Passport|Forms|None" --><authentication mode="Windows" />
</system.web></configuration>
Web.config
OpcionesOpciones de de autenticaciautenticacióónn porporformulariosformularios<configuration><system.web><authentication mode="Forms"><!--
forms Attributes:name="[cookie name]" – Nombre de la cookie de autenticaciónloginUrl="[url]" - URL de la pagina Loginprotection="[All|None|Encryption|Validation]"timeout="[minutes]" – tiempo de validez de la cookiepath="/" – Ruta de la cookierequireSSL="[true|false]" – Restringir la cookie a SSL? (1.1)slidingExpiration="[true|false]" – Renovar la cookie? (1.1)
--><forms loginUrl="/LoginPage.aspx" />
</authentication></system.web>
</configuration>
Web.config
Security PrincipalsSecurity Principals
Windows Windows representarepresenta loslos security principals security principals con tokens de con tokens de accesoaccesoEl .NET Framework El .NET Framework representarepresenta loslos security security principals con principals con objetosobjetos security principalsecurity principal
AbstraeAbstrae el el tipotipo de de autenticaciautenticacióónnTe Te habilitahabilita a a escribirescribir ((laslas mmááss de de laslas vecesveces) ) ccóódigodigo gengenééricorico parapara buscarbuscar nombresnombres, , revisarrevisarroles, etc.roles, etc.
Los Los ObjetosObjetos Principal Principal exponenexponen data data úútiltilacercaacerca de de loslos usuariosusuarios ((especialmenteespecialmente loslosautenticadosautenticados))
ObjetosObjetos Security PrincipalSecurity Principal
GenericPrincipalWindowsPrincipal
IPrincipalFormsIdentityWindowsIdentityPassportIdentityGenericIdentity
IIdentityA
El Objeto Identidad encapsula el token de acceso Windows si el tipo de accesoes WindowsIdentity
Cada tipo de objeto Identidad expone informaci[onespec[ifica para un tipo de autenticación
UsandoUsando IPrincipalIPrincipal e e IIdentityIIdentity
// Viendo si el caller está autenticadoif (HttpContext.Current.User.Identity.IsAuthenticated) {
// El caller está autenticado}
// Obteniendo el usuario del caller autenticadostring nombre = HttpContext.Current.User.Identity.Name;
// Realiza un chequeo de roles programáticoif (HttpContext.Current.User.IsInRole (“Administrador") {
// El caller es Administrador}
// Se obtiene el token de acceso del caller si estamos usando//autenticación Windowsif (HttpContext.Current.User.Identity is WindowsIdentity) {
IntPtr token =((WindowsIdentity) HttpContext.Current.User.Identity).Token;
...}
AutorizaciAutorizacióónn ASP.NETASP.NETAutorizaciAutorizacióónn ACLACL
Se Se combinacombina ttíípicamentepicamente con con autenticaciautenticacióónnWindows.Windows.UsaUsa permisospermisos NTFS NTFS parapara controlarcontrolar el el accesoacceso a a loslos recursosrecursos basadobasado en la en la identidadidentidad Windows Windows del Caller.del Caller.No No requiererequiere PersonificaciPersonificacióónn
AutorizaciAutorizacióónn URLURLSe Se combinacombina ttíípicamentepicamente con con autenticaciautenticacióónn porporformulariosformulariosControlaControla el el accesoacceso a a loslos recursosrecursos basadobasado en la en la identidadidentidad Windows, Passport, o Windows, Passport, o porpor formulariosformulariosSe Se aplicaaplica en el en el Web.configWeb.config
ACL
AutorizaciAutorizacióónn ACLACL
Jorge IIS ASP.NETA ASPXA
IIS crea el token de acceso identificando a Jorge y se lo pasa a lasASP.NET
ASP.NET revisa el ACL en el archiv pedido y hace fallar el request siJorge no tiene lospermisos necesarios
A
El acceso anónimono está permitido
Authenticationmode="Windows"
AutorizaciAutorizacióónn URLURL
<!– Niega acceso al usuario anónimo (no autenticado) --><deny users="?" />
<!– Da acceso a Jorge y a Mary; pero a nadie más --><allow users=“Jorge, Mary" /><deny users="*" />
<!– Permite acceso a todos, excepto a Jorge y Mary --><deny users=“Jorge, Mary" /><allow users="*" />
<!– Permite el acceso a cualquier Administrador --><allow roles=“Administrador" /><deny users="*" />
Web.config
EscogiendoEscogiendo la la combinacicombinacióónncorrectacorrecta
EscenarioEscenario #1: #1: AplicacionesAplicaciones IntranetIntranetLa La mayormayorííaa de de loslos accesosaccesos ocurrenocurren detrdetrááss del del firewallfirewallSirveSirve a a unauna pobiacipobiacióónn de de usuariosusuarios definidosdefinidos porporcuentascuentas de de usuariousuario WindowsWindows
EscenarioEscenario #2: #2: AplicacionesAplicaciones InternetInternetLa La mayormayorííaa de de loslos accesosaccesos ocurreocurre fuerafuera del del firewallfirewallSirveSirve a a poblacionespoblaciones de de usuariosusuarios no no definidasdefinidas porporcuentascuentas de de usuariousuario WindosWindos ((ejemploejemplo: eBay): eBay)
AplicacionesAplicaciones IntranetIntranet
SQL Server
Jorge
Mary
SebastiánIIS ASP.
NET
TrustedConnection
Servidor Web Servidor de bases de datos
AutenticaciónWindows
Permisos SQL Roles de DB
AutenticaciónIntegrada con
Windows
AutenticaciónWindows
IPSec
A
A
A
A
A
A
AutorizaciAutorizacióónn URLURL
AplicacionesAplicaciones InternetInternet
SQL Server
Jorge
Mary
SebastiánIIS ASP.
NET
TrustedConnection
Servidor Web Servidor de bases de datos
AutenticaciónWindows
Acceso anónimo(no autenticado)
Autenticación porFormularios
IPSec
Firewall
Permisos SQL Roles de DBAutorizaciAutorizacióónn ACLACL
AutenticaciAutenticacióónn Windows y Windows y AutorizaciAutorizacióónn ACLACL
AutenticaciAutenticacióónn porporformulariosyformulariosy autorizaciautorizacióónnURLURL
© 2003-2004 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
ApApééndicendice
SSL/TLSSSL/TLS
ConversacionesConversaciones segurasseguras cliente/servidorcliente/servidorPrivacidadPrivacidad del del mensajemensaje: : TraficoTrafico encriptadoencriptadousandousando llavesllaves y y negociadasnegociadas y y protocolosprotocolosIntegridadIntegridad del del mensajemensaje: : TraficoTrafico validadovalidado usandousandomensajesmensajes validadosvalidados con con ccóódigosdigos de de autenticaciautenticacióónn de de mensajemensaje protegidosprotegidos con con llavesllaves((MACsMACs))
““CCóómomo instalarinstalar SSL en un SSL en un servidorservidor Web"Web"http://msdn.microsoft.com/library/http://msdn.microsoft.com/library/--default.asp?urldefault.asp?url=/library/en=/library/en--us/dnnetsec/us/dnnetsec/--html/SecNetHT01.asphtml/SecNetHT01.asp
i http://www.ietf.org/rfc/rfc2246.txt
IPrincipalIPrincipal e e IIdentityIIdentity
IPrincipal
IIdentity
interface IPrincipal{
IIdentity Identity { get; } // Expone el objeto identidadbool IsInRole (string role); // El usuario pertenece
// a un rol específico?}
interface IIdentity{
string AuthenticationType { get; } // Tipo de autenticación?bool IsAuthenticated (); // Esta el usuario autenticado?string Name { get ; } // Nombre del usuario autenticado
}