
La información que ofrece en ocasiones MSDN sobre la plataforma .NET se puede decir, eufemísticamente, que "no es todo lo buena que debiera ser". Un buen ejemplo de ello es la documentación de la clase FileSystemAccessRule y más en concreto lo que se refiere a los indicadores sobre propagación y herencia de permisos en el acceso al sistema de archivos. Consideremos este ejemplo. Necesitas controlar desde tu aplicación el acceso a un carpeta llamada "docs" de forma que te asegures de que el usuario "DOMINIO\Usuario" tendrá acceso de lectura a la carpeta y todas sus subcarpetas (y las hijas de éstas), pero sin embargo no tendrá acceso a ninguno de los archivos contenidos en éstas. Dejemos de lado la utilidad exacta de esto. Lo que quiero es mostrar lo retorcidas que han puesto las opciones correspondientes en la plataforma .NET :-S El código en C# que necesitaríamos incluir es este: 1: DirectorySecurity dirSec = Directory.GetAccessControl(@&quo...
[Más]
Tags: Programación, Seguridad, Sistemas operativos
4e5a6170-fd33-4318-871c-5e73c84cb22c|0|.0

Como todo programador de ASP.NET sabe, la mayor parte de las API de esta plataforma de desarrollo web están basadas en el modelo de proveedores. Para explicarlo de manera rápida, básicamente esto significa que entre la funcionalidad que el programador utiliza y el almacenamiento relacionado con ésta, existe un elemento intermedio llamado "proveedor" que desacopla ambas partes. De esta manera, si queremos utilizar otro tipo de almacenamiento basta con cambiar el proveedor en la configuración y listo. no es necesario tocar el código en absoluto, por lo que resulta muy cómodo y útil. El siguiente esquema (sacado de MSDN) ilustra la arquitectura de este modelo: Como vemos muchos servicios como los de seguridad (Membership y Roles), la personalización (Profile) u otros como el almacenamiento de la sesión o los WebParts, están basados en este modelo, representados por las cajas de la parte superior. Así, la información de los usuarios, los roles, los perfiles, las sesiones, etc...
[Más]
Tags: ASP.NET, Seguridad
da142e27-8600-4923-9bb5-ec55658d964d|0|.0

Si disponemos de un servicio Web en nuestro servidor que está destinado a ser utilizado por nuestras aplicaciones pero no queremos facilitar que otros programadores le puedan sacar partido: ¿para qué queremos dejar publicado su archivo de descripción WSDL?
El WSDL (Web Services Description Language) describe cómo es un servicio Web: qué tipos usa, qué métodos expone, etc… y es lo que usan Visual Studio y otras herramientas para crear un proxy que nos permita usar un determinado servicio. Se puede visualizar para cualquier servicio de .NET añadiendo ?wsdl al final de su URL, por ejemplo:
http://www.miservidor.com/Servicios/miServicio.asmx?wsdl
Cuando añadimos una nueva referencia Web a nuestro proyecto, en el diálogo que aparece podemos inspeccionar el servicio gracias a su descripción WSDL:
Sin ese WSDL no podríamos inspeccionarlo ni tampoco añadir la clase proxy correspondiente.
Un proxy es una serie de clases .NET que actúan de intermediarias entre nuestro código y el servi...
[Más]
Tags: ASP.NET, Seguridad
cf76263f-51c4-470f-836c-38c9ea341302|1|4.0

Esta es una cuestión bastante habitual y es que es muy útil, siendo administrador de una aplicación, poder entrar como cualquier otro usuario para ver lo mismo que éste ve y poder hacer cosas en su nombre. Sobre todo a la hora de dar soporte técnico, poder atender mejor a los usuarios, ayudarles o detectar posibles problemas en sus cuentas.
La idea es la de poder entrar haciéndonos pasar por otros usuarios, como si fuésemos ellos, pero sin conocer sus credenciales. El otro día un alumno de mi curso de Desarrollo Web con ASP.NET me preguntó precisamente esto, por lo que me he decidido a grabar un vídeo práctico explicando como hacerlo.
Como verás es muy fácil, pero interesante. Dejo el vídeo a continuación y te recomiendo que, antes, te leas este post que escribí hace tiempo sobre el funcionamiento de las cookies de autenticación.
¡Espero que te resulte &...
[Más]
Tags: ASP.NET, Desarrollo Web, Seguridad
9934e00b-c51b-4359-8b04-722831cf9211|0|.0

Entre los Web Clips para mostrar en la barra superior de GMail, tengo añadidas las noticias de Baquia.com. Me parece una publicación on-line muy interesante y me acabé de aficionar definitivamente a ellos cuando tuve oportunidad de conocerlos en persona hace unos meses, que estuve en sus oficinas para entrevistarme para su televisión. Mparecieron muy profesionales y las noticias y artículos resultan casi siempre de interés.
Hace un rato, leyendo mi cuenta de GMail, me he fijado en una cosa que por poco se me pasa inadvertida y es que una de las noticias de la barra de Web Clips era de Baquia pero se veía "rara":
Bufff, parece un hacking clarísimo. Si pulsas en el enlace te lleva a una página que no existe ya:
O sea, que los amigos de Baquia han andado rápidos por fortuna. Pero por rápido que seas, Google estos días parece que lo es mucho más:
http://www.google.es/search?hl=es&source=hp&q=ozzmadark+site%3Abaquia.com
si bien parece que, en e...
[Más]
Tags: Seguridad
42e35a2f-aa38-4376-86fd-af18bd187b39|0|.0

Por si alguno no estaba convencido aún de la importancia de escribir código pensando en la seguridad que se lea este artículo sobr eel último fallo de seguridad de Internet Explorer:
http://blogs.msdn.com/sdl/archive/2009/07/28/atl-ms09-035-and-the-sdl.aspx
Y si el tema te interesa de verdad: ya sabes.
Foto por Gui Tavares, Flickr
Tags: Programación, Seguridad
9c442edb-1ebf-4f75-a057-d9f34262e295|0|.0

Ya he hablado en otras ocasiones de aplicaciones Web de gran impacto y que están rematadamente mal hechas y sin pensar en el usuario. Ésta vez me toca hablar de la Oficina Virtual de Correos.es, el operador nacional de correo en España.
Hace unos días tuve que enviar un Burofax y me dije: "Ya que esta gente tiene una oficina on-line que incluso ha llevado premios, vamos a hacerlo directamente por Internet, que será coser y cantar". ¡Qué error cometí!.
El problema más grave fue sin duda el que se refiere a los pagos on-line. Resulta que estableces los parámetros del servicio que quieres utilizar y cuando ya lo tienes en el carrito de la compra te da la opción depagarlo on-line inmediatamente. Para ello debes introducir el número de tu tarjeta de crédito y, en teoría, se procesa el pago y el servicio queda listo para ser gestionado or un atento funcionario (perdón, ahora desde que no son monopolio del Estado son "personal laboral fijo",aunque algún funcionario queda). El problema es qu...
[Más]
Tags: Mundo TIC, Seguridad
decdf232-a257-4534-aec0-2dc5618de843|0|.0

En los últimos posts he estado hablando sobre la seguridad de ASP.NET basada en Forms. Esto ha traído algunas preguntas por parte de los visitantes. Una de ellas, bastante común, es la de cómo almacenar información adicional atada a los usuarios que hemos autenticado.La API de Membership que viene con ASP.NET, y en concreto el proveedor de Membership para trabajo contra SQL Server (SqlMembershipProvider) nos provee de los medios suficientes para almacenar la información básica sobre los usuarios, esto es, el nombre, su login y su clave, que es lo mínimo necesario para trabajar. En este gráfico puedes ver la estructura completa creada por ASP.NET (más bien por aspnet_regsql.exe) en nuestra base de datos para dar soporte a SqlMembershipProvider y relacionados.Obviamente casi siempre necesitaremos almacenar mucha más información sobre ellos, relacionándola de manera directa y sencilla para poder extraerla. Así, por ejemplo, podemos necesitar almacenar sus datos de contacto, infromac...
[Más]
Tags: ASP.NET, Seguridad
441a3cd1-d947-4686-b2fc-234f02178877|1|5.0

En mi anterior post hablaba sobre el funcionamiento de las cookies en los navegadores y de cómo podíamos usar una extensión estándar (HttpOnly) para intentar impedir que las cookies sean accesibles desde el lado cliente y sólo se puedan manejar desde el servidor.
No obstante se trata de una medida que, de funcionar, complica un poco a los posibles piratas, pero no es una verdadera barrera de seguridad. Para empezar ni siquiera está soportada por todos los navegadores. Las cookies residen en el disco duro del usuario por lo que son fáciles de manipular por cualquiera. Además se envían al servidor en cada petición, por lo que cualquiera con un proxy estilo Fiddler puede leerlas y manipularlas antes de enviarlas al servidor.
Es decir, las cookies son elementos realmente inseguros.
A raíz de estas disquisiciones alguien me escribió preguntándome por la seguridad de la autenticación Forms de ASP.NET (la más habitual). Ésta se basa precisamente en la existencia de una cookie que identific...
[Más]
Tags: ASP.NET, Seguridad
0bee94e4-61fb-47fa-a908-4f837660e11b|0|.0

Una de las técnicas de hacking de páginas web más conocidas es la de Cross-Site-Scripting o XSS. Mediante esta técnica, las aplicaciones Web vulnerables pueden ser atacadas para multitud de propósitos: servir de zombies para atacar a otras Webs inundándolas con peticiones, ejecutar código en zonas de seguridad menos restrictivas (como la local) o, sobre todo, robar la identidad de los usuarios del sitio vulnerable. Ha sido utilizado tradicionalmente en combinación con correos electrónicos maliciosos para entrar en sitios Web protegidos suplantando la identidad de usuarios autenticados. En mi curso de Desarrollo de aplicaciones seguras y seguridad de .NET monto un ejemplo completo de cómo utilizarlo en un supuesto sitio de banca electrónica (muy mal hecha y vulnerable), para robar la sesión del usuario y entrar en su cuenta.
Este robo de sesiones se basa en la obtención mediante XSS de la cookie de sesión de un usuario, enviándola a un servidor bajo el control del atacante. Éste al rec...
[Más]
Tags: ASP.NET, JavaScript, Seguridad
813409d2-5ec7-43a7-8474-4a9b94d228bb|0|.0

Ya de regreso por España aprovecho para comentar un truquillo que he aprendido estos días sobre como configurar el cortafuegos para que admita FTP pasivo. Resulta que en una máquina instalamos un servidor FTP, el cual admite los modos de trabajo Activo y Pasivo.
En el modo Activo los clientes se conectan al puerto 21 del servidor FTP usando un puerto cualquiera no privilegiado. Tras hacerlo el cliente se pone a escuchar peticiones a través del puerto inmediatamente superior al que ha usado para la conexión, recibiendo datos a través del puerto 20 del servidor (es decir el 21 es un puerto para comandos y el 20 el puerto para datos). El problema de esto es que si el cliente se encuentra a su vez detrás de un cortafuegos la conexión no será posible y fallará.
En el modo Pasivo todas las conexiones son del cliente al servidor, por lo que no hay problemas con los cortafuegos en el lado cliente, y es el modo más habitual de funcionar.
Puedes econtrar todos los detalles en el ar...
[Más]
Tags: Seguridad, Sistemas operativos
4fb3ba50-2568-4b17-9ee5-461ccf95ff50|0|.0

Esta es de las cosas que me deja "flipado" leer. Y lo cierto es que no pasa sólo con Adobe sino con otras empresas muy conocidas. Si hubiese salido una noticia similar con Microsoft ya se habría liado.
El caso es que la Shadow Server Foundation avisó el pasado día 19 de una vulnerabilidad en Acrobat Reader que permite la ejecución de código arbitrario en el equipo de los usuarios, dando algunos detalles más el día 21. Por lo visto no se trata de algo realmente nuevo. Ellos simplemente lo han hecho público destacando además que está siendo ampliamente aprovechado en Internet para realizar ataques a usuarios. Adobe reconoció el fallo sacando un artículo en su KB unas horas después. El parche afecta a todas las versiones de Acrobat Reader y en todas las plataformas.
El caso es que Adobe ha dicho que no va a tener disponible ningún parche para este problema hasta por lo menos el 11 de marzo. Y eso para la versión 9 del producto. Para las otras tardará aún más, sin especificar cuando...
[Más]
Tags: Seguridad
736ee0d9-0888-44d0-98f4-2dd1adcad825|0|.0

En mi anterior post os hablaba sobre la forma de poder utilizar varios certificados SSL en un mismo servidor y las posibilidades y limitaciones técnicas que existían.
Un certificado de servidor para SSL suele ser un producto caro. El precio en una entidad certificadora decente van desde unos pocos cientos a más de 1.000 euros, dependiente del tipo de certificado. Además es un proceso tedioso ya que hay que demostrar fehacientemente que somos quiénes decimos ser (que es de lo que va todo esto realmente, claro), lo que implica envío de papeles para su verficación, llamadas, faxes, etc... Conviene seleccionar una entidad certificadora conocida ya que de este modo su certificado raíz, que la verifica a ella primeramente, estará ya instalada en nuestro equipo, cosa que no ocurre con otras menos comunes (y supone una barrera comercial importante para éstas últimas). Todo el sistema de infraestructura de clave pública (PKI) se sustenta en esas relaciones de confianza jerarquizadas.
El objet...
[Más]
Tags: ASP.NET, Seguridad, Sistemas operativos
309b4e95-3c99-460a-9150-6c673097af38|2|5.0

El título es así de largo proque realmente trato varios temas que están relacionados yq ue a muchos programadores Web les pueden a resultar útiles.
Primeramente, pregunta típica: ¿puedo utilizar varios certificados SSL (Secure Sockets Layer) en un mismo servidor Internet Information Server (IIS)?
Respuesta: Sí y No.
Un servidor IIS 6.0 permite por defecto asignar varios certificados a servidores virtuales diferentes siempre y cuando éstos funcionen cada uno en un puerto distinto. Así, si usamos en alguno un puerto no estándar (distinto al 443), pues entonces sí nos deja, pero vamos, esto dista bastante de ser una buena solución. También nospermite tener dos certificados en dos servidores virtuales diferentes si cada uno de ellos utiliza una IP distinta. Tampoco es muy útil.
Si vamos al diálogo "Avanzadas" de la pestaña general de propiedades de un sitio Web de IIS, veremos que aunque en peticiones sin encriptar nos permite definir tantos encabezados de host como queramos en la mism...
[Más]
Tags: ASP.NET, Seguridad, Sistemas operativos
ced79dc5-03f9-4400-9c0e-7683bb016d02|2|3.0

El otro día os hablaba de un problemilla con un NAS que tenemos y alguno me ha comentado que cómo podía hacer para lanzar la línea de comandos ya que este tipo de sistema vienen completamente cerrados a cal y canto. Voy a explicar cómo hackearlo y veremos que esta es la prueba evidente de que cualquier chorrada por pequeña que sea puede ser un agujero de seguridad.
Resulta que en efecto el NAS viene completamente "capado". Lleva Windows XP Embedded y te deja acceder a través de Terminal Server pero te saca una interfaz muy restringida de administración que la verdad no merece la pena puesto que desde la interfaz web que trae se pueden hacer más cosas aún. Esta interfaz reducida tiene el aspecto de una página Web y es en realidad una pequeña aplicación ejecutable que es lo único que se ejecuta al arrancar. no tienes acceso a minimizarla, ni al escritorio, ni responde a las teclas rápidas de sacar el explorador (Windows + E), ni nada similar. Pero sí hay una tecla rápida que responde: C...
[Más]
Tags: Seguridad
a1265d46-937d-46b8-a1ca-5cf9936d2c01|0|.0

En mi anterior post hablaba de cómo construir un programa "clon" de la utilidad de línea de comandos Windows RunAs. En esta primera parte vimos cómo se lanzaba un proceso suplantando a un usuario, que era el objetivo principal de la aplicación, si bien es la parte más fácil.
La tarea que nos quedó pendiente de ver es la más complicada y consiste en solicitar al usuario la clave de manera segura, sin que llegue a estar almacenada en claro en la memoria siquiera. Para ello usamos la clase SecureString, que apareció para estos menesteres en la versión 2.0 del framework.
Sin más vueltas vamos a ver directamente cómo se solicita dicha clave y pasamos a explicar los puntos de interés: private static SecureString PideClave(string nomUsuario)
{
Console.WriteLine("Escriba la contraseña para {0}:", nomUsuario);
int top, left;
ConsoleKeyInfo cki;
SecureString clave = new SecureString();
top = Console.CursorTop;...
[Más]
Tags: Programación, Seguridad
3ac799bc-6397-4ee0-80bc-44634eba0351|0|.0

Esta es la primera parte de una serie de dos. El planteamiento es crear un programa que replique la funcionalidad básica de "RunAs", la utilidad de línea de comandos que permite ejecutar cualquier programa suplantando a otro usuario. Nuestro particular RunAs se encargará de solicitarnos de forma segura la clave para el usuario indicado y luego lanzará el .exe indicado suplantando al mismo y por lo tanto permitiéndonos hacer una escalada de privilegios o, por el contrario, ejecutar un programa con menos privilegios que el usuario actualmente autenticado en el sistema.
Su uso básico es este:
runas usuario ejecutable.exe
o bien
runas dominio\usuario ejecutable.exe
si queremos indicar el dominio también.
En este primer post voy a mostrar lo más sencillo que es lanzar el proceso suplantando a un usuario. Dejaré para el próximo la obtención de la clave del usuario y su almacenamiento seguro y pondré el código completo para descarga.
El código principal del programa es el que muest...
[Más]
Tags: Programación, Seguridad
c829e5cf-f3a0-4b48-8f4f-546e3392dfa5|0|.0

Una pregunta muy típica con la que me suelo encontrar es la de: "¿Cómo puedo hacer para proteger la información de mi cadena de conexión a la base de datos si ésta la pongo en mi web.config?".
Bueno, lo primero que he de decir es que siempre conviene usar mejor la seguridad integrada de Windows (cadena de conexión con "Integrated Security=SSPI;") que las cuentas propias de SQL Sever, por lo que en ese caso no sería necesario encriptar nada. Por otro lado existe un manejador de peticiones de IIS que impide que el contenido de los archivos web.config sea accedido mediante HTTP, por lo que sólo debería preocuparnos que alguien viera nuestra configuración en caso de tener un agujero de seguridad en el servidor o bien en nuestro código (por cierto, aprende a evitarlos), en cuyo caso tendríamos un problema mucho mayor que el hecho de que sepan las credenciales de un usuario de SQL Server, que ya de po...
[Más]
Tags: ASP.NET, Seguridad
21746f67-1fcf-4117-a375-33df6b074c25|0|.0

La sabiduría popular suele ser útil para muchas cosas. Sólo hay que darse una vuelta por el rico refranero español para obtener una gran cantidad de sabios consejos grátis. No obstante el saber popular muchas veces que se confunde con lo que son simplemente mitos y leyendas urbanos, que están alejados de la realidad.
En el mundo de la informática existen multitud de estas leyendas urbanas. Algunas están sustentadas en hechos "históricos" acaecidos al principio de los tiempos que sin embargo perduran hasta nuestros días como si las cosas permaneciesen inmutables. Por ejemplo, hay quien sigue comparando Windows 98 con Linux para decir que éste último es más estable, etc... (claro que no dicen nada del nefasto "98" en cuestión, sólo de "Windows"), o SQL Server 6.5 con Oracle, etc...
Una de estas posibles leyendas urbanas es la de que Apache es mucho más seguro que Internet Information Server.
Todo esto viene a raíz de un artículo aparecido en Computer World el pasado día 7, en el que R...
[Más]
Tags: Seguridad
f149933d-0b32-4db9-bc23-3fbae2d86928|0|.0