introducción a openbsd
DESCRIPTION
Sistema Operativo tipo Unix,Derivado de NetBSDTRANSCRIPT
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