29
Introducción Introducción a OpenBSD a OpenBSD Sistema Sistema operativo operativo tipo tipo UNIX UNIX Derivado Derivado de NetBSD y 4.4BSD en 1996 de NetBSD y 4.4BSD en 1996 por por Theo DeRaadt Theo DeRaadt Se distingue de Linux Se distingue de Linux por por sus sus fuentes fuentes y y su su licencia licencia Libre Libre , , Funcional Funcional , , Seguro Seguro Base de Base de desarrollo desarrollo en Calgary en Calgary Nueva Nueva versión versión cada cada 6 6 meses meses Acceso Acceso CVS al CVS al código código fuente fuente Actualmente Actualmente en la en la versión versión 3.6 3.6 Colección Colección de de unos unos 2700 ports 2700 ports http://www.openbsd.org http://www.openbsd.org

Introducción a OpenBSD

  • Upload
    aldahir

  • View
    29

  • Download
    1

Embed Size (px)

DESCRIPTION

Sistema Operativo tipo Unix,Derivado de NetBSD

Citation preview

IntroducciónIntroducción a OpenBSDa OpenBSD

�� SistemaSistema operativooperativo tipotipo UNIXUNIX�� DerivadoDerivado de NetBSD y 4.4BSD en 1996 de NetBSD y 4.4BSD en 1996 porpor Theo DeRaadtTheo DeRaadt�� Se distingue de Linux Se distingue de Linux porpor sussus fuentesfuentes y y susu licencialicencia�� ‘‘LibreLibre, , FuncionalFuncional, , SeguroSeguro’’�� Base de Base de desarrollodesarrollo en Calgaryen Calgary�� NuevaNueva versiónversión cadacada 6 6 mesesmeses�� AccesoAcceso CVS al CVS al códigocódigo fuentefuente�� ActualmenteActualmente en la en la versiónversión 3.63.6�� ColecciónColección de de unosunos 2700 ports2700 ports

http://www.openbsd.orghttp://www.openbsd.org

ArquitecturasArquitecturas soportadassoportadas

�� i386 (SMP)i386 (SMP)�� amd64 (SMP)amd64 (SMP)�� vaxvax�� mac68kmac68k�� macppcmacppc�� alphaalpha

�� sparc/sparc64sparc/sparc64�� catscats�� hp300hp300�� hppahppa�� luna88kluna88k�� mvme68k/mvme88kmvme68k/mvme88k

CaracterísticasCaracterísticas de de OpenBSDOpenBSD

GestiónGestión de bugsde bugs�� ““SeguroSeguro porpor defectodefecto””�� AuditadoAuditado activoactivo del del códigocódigo fuentefuente�� ProtecciónProtección de de páginapágina W^X / W^X / ProPoliceProPolice / / SystraceSystrace�� SeparaciónSeparación de de privilegiosprivilegios parapara loslos demoniosdemonios

ServiciosServicios de de comunicacióncomunicación segurasegura�� IPSec con ISAKMPdIPSec con ISAKMPd�� SoporteSoporte parapara NIDS (Snort)NIDS (Snort)

PF+AltQPF+AltQ�� Cortafuegos/Enrutamiento/GestiónCortafuegos/Enrutamiento/Gestión anchoancho de de bandabanda con PF+AltQcon PF+AltQ

Más características…Más características…

CriptografíaCriptografía integradaintegradaspamdspamd integradointegrado con PFcon PF�� listaslistas grisesgrises de de correocorreo

Emulación de binariosEmulación de binarios�� SVR4, SVR4, FreeBSDFreeBSD, , LinuxLinux, BSD/OS, , BSD/OS, SunOSSunOS y HPy HP--UXUX

Filosofía del SistemaFilosofía del Sistema

�� SeguridadSeguridad�� EstandarizaciónEstandarización�� Evolución antes que revolución (!)Evolución antes que revolución (!)�� Limpieza de códigoLimpieza de código�� DocumentaciónDocumentación

Aportaciones al Software LibreAportaciones al Software Libre

�� OpenSSHOpenSSH�� OpenNTPDOpenNTPD�� OpenBGPDOpenBGPD�� OpenCVSOpenCVS�� ReimplementaciónReimplementaciónvasta mayoría vasta mayoría utilidades GNU con utilidades GNU con licencia BSDlicencia BSD

GestiónGestión bugsbugs

PrevenciónPrevención de bugsde bugs�� SeguroSeguro porpor defectodefecto�� AuditadoAuditado de de loslos fuentesfuentes

MitigaciónMitigación de bugsde bugs�� W^XW^X�� ProPoliceProPolice�� SystraceSystrace�� SeparaciónSeparación PrivilegiosPrivilegios

““SeguroSeguro porpor defectodefecto””

�� ConfiguraciónConfiguración porpor defectodefecto estrictaestricta�� Cortafuegos rechaza el tráfico de todos los puertos excepto Cortafuegos rechaza el tráfico de todos los puertos excepto

el 22 (el 22 (sshssh))�� DetieneDetiene tantostantos serviciosservicios comocomo sea sea posibleposible..�� DemoniosDemonios configuradosconfigurados de forma de forma segurasegura, con , con todastodas laslas

funcionesfunciones no no vitalesvitales desactivadasdesactivadas..

““SóloSólo un un agujeroagujero de de seguridadseguridad en la en la instalacióninstalaciónporpor defectodefecto, en , en másmás de de ochoocho añosaños” ”

AuditadoAuditado del del CódigoCódigo FuenteFuente

�� EntreEntre 6 y 12 6 y 12 desarrolladoresdesarrolladores encargadosencargados de de elloello�� BúsquedaBúsqueda de de fallosfallos en la en la programaciónprogramación�� SiSi se se encuentraencuentra unauna nuevanueva claseclase de bug, de bug, todotodo el el códigocódigo eses

reauditadoreauditado..�� ReducciónReducción de de binariosbinarios setuid y setuid y setgidsetgid

ProtecciónProtección PilaPila ProPoliceProPolice

�� ExtensiónExtensión de GCC (de GCC (CompiladorCompilador GNU C)GNU C)�� DisponibleDisponible parapara Linux, FreeBSD, Linux, FreeBSD, OpenBSDOpenBSD y y otrosotros……�� El software El software compiladocompilado con GCC+ProPolice con GCC+ProPolice tienetiene protecciónprotección de de pilapila

integradaintegrada�� HaceHace másmás complicadocomplicado explotarexplotar bugs de bugs de DesbordamientoDesbordamiento de Buffer de Buffer

modificandomodificando la forma en la la forma en la queque loslos datosdatos se se almacenanalmacenan en la en la pilapila�� ¿¿CómoCómo funcionafunciona??

¿¿QuéQué eses la la pilapila? (? (BásicoBásico))

�� SecciónSección de de memoriamemoria�� AlmacenaAlmacena datosdatos

DesbordamientoDesbordamiento de Bufferde Buffer

�� SobrecargaSobrecarga laslas fronterasfronteras de un de un registroregistro de de datosdatos..�� VerbigratiaVerbigratia, , cargacarga másmás datosdatos en en unauna cajacaja de de loslos queque fuefue

diseñadadiseñada parapara soportarsoportar..�� La La faltafalta de de comprobacióncomprobación de de laslas fronterasfronteras eses fallofallo del del

códigocódigo�� El El DesbordamientoDesbordamiento de Buffer de Buffer escribiráescribirá códigocódigo ejecutableejecutable

en la en la memoriamemoria, , entoncesentonces modificarámodificará el el punteropuntero de de retornoretornohaciahacia esteeste códigocódigo..

ProPolice (ProPolice (continúacontinúa))

�� InsertaInserta códigocódigo protector en la protector en la aplicaciónaplicación en en tiempotiempo de de compilacióncompilación(Un (Un canariocanario))

�� DetecciónDetección de de DesbordamientoDesbordamiento de Buffer (de Buffer (ConceptoConcepto StackGuardStackGuard))�� ReordenaciónReordenación de variables de variables –– ReordenaReordena datosdatos y variables de forma y variables de forma

queque sobreescribirsobreescribir un un punteropuntero se se hacehace muymuy difícildifícil cuandocuando loslos datosdatos se se desbordandesbordan..

http://www.research.ibm.com/trl/projects/security/ssp/http://www.research.ibm.com/trl/projects/security/ssp/

ProtecciónProtección de de PáginaPágina W^XW^X

�� ‘‘EscribirEscribir o o EjecutarEjecutar’’�� Se Se puedenpueden escribirescribir o o ejecutarejecutar datosdatos en en unauna páginapágina dada, dada, peropero nuncanunca

ambasambas cosascosas simultaneamentesimultaneamente..�� PrevienePreviene a un a un atacanteatacante escribirescribir códigocódigo arbitrarioarbitrario en en lugareslugares de la de la

memoriamemoria dondedonde pudierapudiera ser ser ejecutadoejecutado..�� SoportadoSoportado en en plataformasplataformas Sparc, Sparc64, Alpha, HPPA, i386Sparc, Sparc64, Alpha, HPPA, i386

y PowerPCy PowerPC�� SoporteSoporte nativonativo en Sparc, Sparc64, Alpha, x86en Sparc, Sparc64, Alpha, x86--6464�� PowerPC y i386 PowerPC y i386 necesitaronnecesitaron hacks hacks espantososespantosos

SystraceSystrace

�� Políticas de acceso para llamadas al sistemaPolíticas de acceso para llamadas al sistemaPolicyPolicy: /: /binbin//lsls, , EmulationEmulation: : nativenative

nativenative--munmapmunmap: : permitpermit[...][...]

nativenative--statstat: : permitpermitnativenative--fsreadfsread: : filenamefilename match "/match "/usrusr/*" /*" thenthen permitpermitnativenative--fsreadfsread: : filenamefilename eqeq "/"/tmptmp" " thenthen permitpermitnativenative--fsreadfsread: : filenamefilename eqeq "/"/etcetc" " thenthen deny[enotdirdeny[enotdir]]nativenative--fchdirfchdir: : permitpermitnativenative--fstatfstat: : permitpermitnativenative--fcntlfcntl: : permitpermit

[...][...]nativenative--closeclose: : permitpermitnativenative--writewrite: : permitpermitnativenative--exitexit: : permitpermit

SeparaciónSeparación PrivilegiosPrivilegios

�� ConceptoConcepto del del privilegioprivilegio menormenor..�� SeparaciónSeparación de de loslos demoniosdemonios de red en dos de red en dos nivelesniveles�� Un Un procesoproceso ejecutadoejecutado comocomo root root parapara todotodo lo lo queque requierarequiera eseese

privilegioprivilegio..�� SubprocesosSubprocesos ejecutadosejecutados comocomo usuariousuario sin sin privilegiosprivilegios..�� EstoEsto minimizaminimiza loslos dañosdaños causadoscausados porpor atacantesatacantes remotosremotos..�� EjemploEjemplo: sshd, : sshd, syslogdsyslogd, , pppoepppoe, , dhclientdhclient, , dhcpddhcpd……

SeparaciónSeparación PrivilegiosPrivilegios (cont.)(cont.)

rootroot 28740 14036 0 17:35 ?28740 14036 0 17:35 ? 00:00:00 sshd:duncajam [priv]00:00:00 sshd:duncajam [priv]duncajamduncajam 28743 28740 0 17:35 ?28743 28740 0 17:35 ? 00:00:0000:00:00 sshd:duncajam@pts/4sshd:duncajam@pts/4duncajamduncajam 28744 28743 0 17:35 ?28744 28743 0 17:35 ? 00:00:00 00:00:00 ––tcshtcsh

�� sshdsshd se se desdobladesdobla a a nivelnivel de root de root parapara manejarmanejar la la conexiónconexión entranteentrante�� EsteEste procesoproceso se se desdobladesdobla comocomo un un procesoproceso sin sin privilegiosprivilegios parapara manejarmanejar el el

restoresto de la de la comunicacióncomunicación

SistemaSistema de de DetecciónDetección de de IntrusiónIntrusión

�� SoporteSoporte total total parapara Snort NIDS (Network IntrusionSnort NIDS (Network IntrusionDetection System)Detection System)

�� QuizásQuizás parapara otraotra presentaciónpresentación… … : ): )

IPSec con ISAKMPdIPSec con ISAKMPd

�� SeguridadSeguridad IPIP�� AH AH –– Authentication HeaderAuthentication Header�� ESP ESP –– Encapsulated Security ProtocolEncapsulated Security Protocol

�� Compatible con Compatible con otrasotras implementacionesimplementaciones IPSecIPSec, , comocomo laslas disponiblesdisponiblesparapara Linux y WindowsLinux y Windows

CortafuegosCortafuegos

�� ¿¿QuéQué eses un un cortafuegoscortafuegos??�� ¿¿QuéQué eses un un enrutadorenrutador??�� ¿¿QuéQué son son laslas colas?colas?

�� TodasTodas estasestas laboreslabores laslas ejecutaejecuta el el subsistemasubsistema PF+AltQPF+AltQ�� Se Se configuraconfigura en /etc/pf.confen /etc/pf.conf�� Se Se manejamaneja con el con el comandocomando pfctlpfctl ((comocomo root)root)

CaracterísticasCaracterísticas de PFde PF

�� Stateful filtering, “modulate state”Stateful filtering, “modulate state”�� Pass / Block / DropPass / Block / Drop�� CoincidenciasCoincidencias en en direccióndirección, , puertospuertos entradaentrada / / salidasalida, y flags de , y flags de

paquetespaquetes�� SintaxisSintaxis sencillasencilla, con , con tablastablas, , listaslistas y y opcionesopciones altamentealtamente

configurablesconfigurables..�� Scrub Scrub –– NormalizaciónNormalización de de paquetespaquetes�� RDR / NAT / BINATRDR / NAT / BINAT�� RegistroRegistro de de paquetespaquetes –– tcpdumptcpdump�� DetecciónDetección pasivapasiva OSOS�� AnclasAnclas y y subconjuntossubconjuntos de de reglasreglas�� SpamdSpamd

EjemploEjemplo pf.confpf.conf

int_if = "fxp0" int_if = "fxp0" ext_if = "ep0" ext_if = "ep0" set blockset block--policy returnpolicy returnset loginterface ep0set loginterface ep0scrub in all scrub in all

block all block all pass quick on lo0 all pass quick on lo0 all block drop in quick on $ext_if from $priv_nets to any block drop in quick on $ext_if from $priv_nets to any block drop out quick on $ext_if from any to $priv_nets block drop out quick on $ext_if from any to $priv_nets pass in inet proto icmp all icmppass in inet proto icmp all icmp--type $icmp_types keep state type $icmp_types keep state pass in on $int_if from $int_if:network to any keep state pass in on $int_if from $int_if:network to any keep state pass out on $int_if from any to $int_if:network keep state pass out on $int_if from any to $int_if:network keep state

pass out on $ext_if proto tcp all modulate state flags S/SA pass out on $ext_if proto tcp all modulate state flags S/SA

pass out on $ext_if proto { udp, icmp } all keep statepass out on $ext_if proto { udp, icmp } all keep state

CaracterísticasCaracterísticas EnrutadoEnrutado

�� EnrutadoEnrutado básicobásico�� RedirecciónRedirección de de TráficoTráfico�� NAT (Network Address Translation)NAT (Network Address Translation)�� BalanceoBalanceo de de cargacarga sourcesource--hash, roundhash, round--robinrobin

EjemploEjemplo EnrutadoEnrutado

nat on $ext_if from $int_if:network to any nat on $ext_if from $int_if:network to any --> ($ext_if) > ($ext_if) rdr on $int_if proto tcp from any to any port 21 rdr on $int_if proto tcp from any to any port 21 --> 127.0.0.1 port 8021> 127.0.0.1 port 8021

nat on $ext_if inet from any to any nat on $ext_if inet from any to any --> { 192.0.2.5, 192.0.2.10 } source> { 192.0.2.5, 192.0.2.10 } source--hashhash

rdr on $ext_if proto tcp from any to any port 80 rdr on $ext_if proto tcp from any to any port 80 --> > \\{10.0.0.10, 10.0.0.11, 10.0.0.13} {10.0.0.10, 10.0.0.11, 10.0.0.13}

CaracterísticasCaracterísticas de Colasde Colas

�� SistemaSistema de Control de de Control de AnchoAncho de Bandade Banda�� ÚtilÚtil parapara manejarmanejar tráficotráfico salientesaliente�� VerbigraciaVerbigracia, , limitarlimitar el el usouso de de algunosalgunos protocolosprotocolos o o darlesdarles prioridadprioridad

sobresobre otrosotros�� PRIQ, CBQ, HFSCPRIQ, CBQ, HFSC�� BasadoBasado en AltQen AltQ�� OfreceOfrece unauna funcionalidadfuncionalidad semejantesemejante a la de a la de algunosalgunos productosproductos

comercialescomerciales, , comocomo Packeteer.Packeteer.

EjemploEjemplo de Colasde Colas

altq on fxp0 priq bandwidth 610Kb queue altq on fxp0 priq bandwidth 610Kb queue \\{ std_out, ssh_im_out, dns_out, tcp_ack_out } { std_out, ssh_im_out, dns_out, tcp_ack_out }

queue std_out priq(default)queue std_out priq(default)queue ssh_im_out priority 4 priq(red)queue ssh_im_out priority 4 priq(red)queue dns_out priority 5queue dns_out priority 5queue tcp_ack_out priority 6queue tcp_ack_out priority 6

pass out on fxp0 inet proto tcp from (fxp0) to any flags S/SA pass out on fxp0 inet proto tcp from (fxp0) to any flags S/SA \\keep state queue(std_out, tcp_ack_out)keep state queue(std_out, tcp_ack_out)

¡No encuentro ¡No encuentro HOWTOsHOWTOs!!

�� La mayor fuente de información para La mayor fuente de información para configurar configurar OpenBSDOpenBSD suele estar suele estar instaladainstalada en el propio sistemaen el propio sistema

�� Ejemplo:Ejemplo:–– helphelp–– manman afterbootafterboot–– manman vpnvpn–– //usrusr//shareshare, /, /usrusr/local//local/shareshare//examplesexamples

SumarioSumario

ProsPros�� LibreLibre y y SeguroSeguro�� ExcelenteExcelente documentacióndocumentación�� PreparadoPreparado parapara la la empresaempresa�� DisponibleDisponible parapara muchasmuchas

plataformasplataformas

ContrasContras�� No No optimizadooptimizado parapara rendimientorendimiento�� SacrificioSacrificio soportesoporte de hardware de hardware

productivoproductivo (Scanners, (Scanners, tarjetastarjetas 3d, 3d, etc)etc)

�� ActualizaciónActualización de ports de ports relativamenterelativamente lentalenta ((unauna vezvez porporcadacada nuevanueva versiónversión))

http://www.openbsd.orghttp://www.openbsd.org

Q&AQ&A