aboutsummaryrefslogtreecommitdiff
path: root/es/security/security.sgml
blob: 3448bae4f0108f5d1ccd2533ac417c7bc14b6b73 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
<!DOCTYPE HTML PUBLIC "-//FreeBSD//DTD HTML 4.01 Transitional-Based Extension//EN" [
<!ENTITY base CDATA "..">
<!ENTITY date "$FreeBSD: www/es/security/security.sgml,v 1.9 2005/10/04 07:56:23 murray Exp $">
<!ENTITY title "Informaci&oacute;n de Seguridad en FreeBSD">
<!ENTITY % navinclude.support "INCLUDE">
]>
<!-- $FreeBSD: www/es/security/security.sgml,v 1.9 2005/10/04 07:56:23 murray Exp $ -->

<html>
    &header;

<H2>Introducción</H2>

<P>El objetivo de esta p&aacute;gina es orientar a los usuarios, tanto noveles
como experimentados, en el &aacute;rea de seguridad del Sistema Operativo
FreeBSD. El equipo de Desarrollo de FreeBSD se toma la seguridad muy en
serio y trabaja constantemente para hacer el Sistema Operativo tan
seguro como sea posible.</P>

<P>Aqu&iacute; podr&aacute;s encontrar informaci&oacute;n adicional, o enlaces
a informaci&oacute;n, acerca de c&oacute;mo proteger tu sistema contra varios
tipos de ataque del exterior, con qui&eacute;n contactar si encuentra un error
de software relacionado con la seguridad, etc. Tambi&eacute;n hay una
secci&oacute;n que trata de las distintas formas en que el programador de
sistemas puede concienciarse acerca de la seguridad, de modo que sea menos
probable la introducci&oacute;n de defectos de seguridad en el software.</P>

<H2>Contenidos</H2>
<UL>
<LI><A HREF="#sec">Informaci&oacute;n acerca del FreeBSD Security Officer</A></LI>
<LI><A HREF="#adv">FreeBSD Security Advisories</A></LI>
<LI><A HREF="#ml">Informaci&oacute;n sobre Listas de Distribuci&oacute;n sobre seguridad en FreeBSD</A></LI>
<LI><A HREF="#tat">Consejos sobre seguridad en FreeBSD</A></LI>
<LI><A HREF="#spg">Pautas para la programaci&oacute;n segura</A></LI>
<LI><A HREF="#misc">Otra informaci&oacute;n relacionada con la seguridad</A></LI>
</UL>

<A NAME=sec></A>
<H2>El FreeBSD Security Officer</H2>

<P>Con el objetivo de coordinar mejor el intercambio de informaci&oacute;n con
otras personas o entidades relacionadas con el &aacute;mbito de la seguridad,
FreeBSD tiene un punto focal para las comunicaciones relacionadas con la
seguridad: el FreeBSD <a href="mailto:security-officer@FreeBSD.org">security officer</a>.
El puesto est&aacute; actualmente ocupado por un equipo de security officers
dedicados, siendo sus tareas principales emitir advisories cuando hay
defectos de seguridad conocidos y actuar ante los informes de posibles
problemas de seguridad con FreeBSD.</P>

<P>Si necesitas contactar con alguien del equipo de FreeBSD acerca
de un posible error de software relacionado con la seguridad por favor
hazlo por <A HREF="mailto:security-officer@FreeBSD.org"> correo al
Security Officer</A>, incluyendo una descripci&oacute;n de lo que has encontrado
y el tipo de vulnerabilidad que representa. El Security Officer tambi&eacute;n
est&aacute; en contacto con los diferentes equipos <A HREF="http://www.cert.org">
CERT </A>y <A HREF="http://www.first.org/"> FIRST</A> en todo el mundo,
con los que comparte informaci&oacute;n acerca de posibles vulnerabilidades en
FreeBSD o programas de utilidad usados por FreeBSD. Los Security Officers
tambi&eacute;n son miembros activos de dichas organizaciones.</P>

<P>Si necesitas contactar con el Security Officer acera de alg&uacute;n
asunto especialmente delicado, usa su <A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/public_key.asc">
clave PGP</A> para encriptar el mensaje antes de enviarlo.</P>

<A NAME=adv></A>
<H2>FreeBSD Security Advisories</H2>

<P>Los FreeBSD Security Officers proporcionan security advisories para las
releases de FreeBSD siguientes:</P>

<UL>
<LI>	La release oficial de FreeBSD m&aacute;s reciente.
<LI>	FreeBSD-current.
<LI>	FreeBSD-stable, cuando hay al menos 2 releases basadas en &eacute;l.
<LI>	FreeBSD-stable anterior cuando un "nuevo stable" aun no tiene
        2 releases basadas en &eacute;l.
</UL>

En este momento hay disponibles security advisories para:
<UL>
<LI>	FreeBSD 2.2.8
<LI>	FreeBSD 3.1
<LI>	FreeBSD 3.2
<LI>	FreeBSD-current
<LI>	FreeBSD-stable
</UL>

<P>No hay mantenimiento para releases anteriores a estas. Se recomienda
a los usuarios se actualicen a una de las releases arriba mencionadas.
</P>

<P>Como todos los esfuerzos de desarrollo, las reparaciones de seguridad
se incorporan primero en la rama
<A HREF="../../handbook/cutting-edge.html#CURRENT">FreeBSD-current</A>.
Despu&eacute;s de un par de d&iacute;as de prueba la reparaci&oacute;n se
incorpora en las ramas FreeBSD-stable soportadas y se emite un advisory. </P>

<P>Los advisories se env&iacute;an a las siguientes listas de
distribuci&oacute;n de FreeBSD:
<UL>
<LI>FreeBSD-security-notifications@FreeBSD.org
<LI>FreeBSD-security@FreeBSD.org
<LI>FreeBSD-announce@FreeBSD.org
</UL>


<P>Los advisories se firman siempre usando la
<A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/public_key.asc">
clave PGP</A> del FreeBSD Security Officer y se archivan, junto con los
patches asociados, en nuestro
<A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/index.html">
repositorio FTP CERT</A>. En el momento de escribir esto est&aacute;n
disponibles los advisories siguientes:</P>

<UL>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:01.sliplogin.asc">FreeBSD-SA-96:01.sliplogin.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:02.apache.asc">FreeBSD-SA-96:02.apache.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:03.sendmail-suggestion.asc">FreeBSD-SA-96:03.sendmail-suggestion.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:08.syslog.asc">FreeBSD-SA-96:08.syslog.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:09.vfsload.asc">FreeBSD-SA-96:09.vfsload.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:10.mount_union.asc">FreeBSD-SA-96:10.mount_union.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:11.man.asc">FreeBSD-SA-96:11.man.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:12.perl.asc">FreeBSD-SA-96:12.perl.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:13.comsat.asc">FreeBSD-SA-96:13.comsat.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:14.ipfw.asc">FreeBSD-SA-96:14.ipfw.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:15.ppp.asc">FreeBSD-SA-96:15.ppp.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:16.rdist.asc">FreeBSD-SA-96:16.rdist.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:17.rzsz.asc">FreeBSD-SA-96:17.rzsz.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:18.lpr.asc">FreeBSD-SA-96:18.lpr.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:19.modstat.asc">FreeBSD-SA-96:19.modstat.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:20.stack-overflow.asc">FreeBSD-SA-96:20.stack-overflow.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:21.talkd.asc">FreeBSD-SA-96:21.talkd.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:01.setlocale">FreeBSD-SA-97:01.setlocale</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:02.lpd.asc">FreeBSD-SA-97:02.lpd.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:03.sysinstall.asc">FreeBSD-SA-97:03.sysinstall.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:04.procfs.asc">FreeBSD-SA-97:04.procfs.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:05.open.asc">FreeBSD-SA-97:05.open.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:06.f00f.asc">FreeBSD-SA-97:06.f00f.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:01.land.asc">FreeBSD-SA-98:01.land.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:02.mmap.asc">FreeBSD-SA-98:02.mmap.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:03.ttcp.asc">FreeBSD-SA-98:03.ttcp.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:04.mmap.asc">FreeBSD-SA-98:04.mmap.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:05.nfs.asc">FreeBSD-SA-98:05.nfs.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:06.icmp.asc">FreeBSD-SA-98:06.icmp.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:07.rst.asc">FreeBSD-SA-98:07.rst.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:08.fragment.asc">FreeBSD-SA-98:08.fragment.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-99:01.chflags.asc">FreeBSD-SA-99:01.chflags.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-99:02.profil.asc">FreeBSD-SA-99:02.profil.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-99:03.ftpd.asc">FreeBSD-SA-99:03.ftpd.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-99:04.core.asc">FreeBSD-SA-99:04.core.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-99:05.fts.asc">FreeBSD-SA-99:05.fts.asc</A></LI>
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-99:06.amd.asc">FreeBSD-SA-99:06.amd.asc</A></LI>
</UL>

<A NAME=ml></A>
<H2>Informaci&oacute;n acerca de las Listas de Distribuci&oacute;n sobre
Seguridad en FreeBSD</H2>

<P>Si eres administrador o usuario de uno o m&aacute;s sistemas FreeBSD,
quiz&aacute;s quieras suscribirte a alguna de las listas siguientes:</P>

<PRE>
FreeBSD-security                Discusiones relacionadas con la seguridad en general
FreeBSD-security-notifications  Notificaciones sobre seguridad (lista moderada)
</PRE>

Envíe un mensaje a <A HREF="mailto:majordomo@FreeBSD.org">
majordomo@FreeBSD.ORG</A> con
<PRE>
     subscribe &lt;nombre_de_la_lista&gt;  [&lt;direcci&oacute;n_email_opcional&gt;]
</PRE>
en el cuerpo del mensaje para suscribirse.
Por ejemplo:
<PRE>
% echo "subscribe FreeBSD-security" | mail majordomo@FreeBSD.org
</PRE>
y si quieres desuscribirte de una lista de distribuci&oacute;n:
<PRE>
% echo "unsubscribe FreeBSD-security" | mail majordomo@FreeBSD.org
</PRE>

<A NAME=spg></A>
<H2>Pautas para la Programaci&oacute;n Segura</H2>
<P><P><UL>
<LI>Nunca te f&iacute;es de ninguna fuente de entrada, i.e. argumentos en la
l&iacute;nea de comando, variables de entorno, ficheros de
configuraci&oacute;n, paquetes TCP/UDP/ICMP entrantes, argumentos de funciones,
 etc. Si la longitud o el contenido de los datos recibidos est&aacute;n
sujetos, siquiera m&iacute;nimamente, al control desde el exterior, el
programa o la funci&oacute;n deber&iacute;a tenerlo en cuenta cuando maneja
dichos datos. Podemos considerar los apartados siguientes desde el punto de
vista de la seguridad:

<P></P>
  <UL>

<LI>Llamadas a strcpy() y sprintf() para datos de longitud ilimitada.
Usa strncpy() y snprintf() cuando la longitud sea conocida (o implementa
algun otro m&eacute;todo de control de l&iacute;mites cuando sea desconocida).
No uses nunca gets() ni sprintf(), punto.  Si lo haces, te acosar&aacute;n sin
tregua duendes malvados.<P></P></LI>

<LI>Si tienes que validar los datos de entrada del usuario para evitar que
contengan caracteres err&oacute;neos de cualquier clase, NO valides la presencia
de dichos caracteres err&oacute;neos.  Simplemente verifica que la entrada
consiste SOLO en los caracteres permitidos.  La idea es: todo lo que no
est&aacute; expl&iacute;citamente permitido est&aacute; prohibido.
<P></P></LI>

<LI>Lee las p&aacute;ginas del manual para las llamadas strncpy() y strncat().
Aseg&uacute;rate de entender c&oacute;mo funcionan!!!  As&iacute; como
strncpy() puede no a&ntilde;adir un \0 final, strncat() s&iacute; lo
a&ntilde;ade.
<P></P></LI>

<LI>Vigila el abuso de strvis() y getenv(). Con strvis() es f&aacute;cil cometer
un error con la cadena de destino, y getenv() podr&iacute;a devolver cadenas
mucho m&aacute;s largas de lo que el programa espera. Estas dos funciones son,
a menudo, una de las v&iacute;as principales de ataque contra un programa,
provocando que este sobreescriba la pila o las variables al recibir variables
de entorno con valores no contemplados. Si tu programa lee variables de
entorno, se paranoico. Se muy paranoico!
<P></P></LI>

<LI>Cada vez que uses las llamadas open() o stat() preg&uacute;ntate: " Y si es
un enlace simb&oacute;lico ?"
<P></P></LI>

<LI>Aseg&uacute;rate de usar mkstemp() en lugar de mktemp(), tempnam(),
etc. Aseg&uacute;rate tambi&eacute;n de buscar problemas de acceso
concurrente en general en /tmp, teniendo en cuenta que hay muy pocas
cosas que pueden ser at&oacute;micas en /tmp:
	<UL>
	<LI>Crear un directorio.  O funciona o no funciona.</LI>
	<LI>Abrir un fichero O_CREAT | O_EXECL</LI>
	</UL>
Si se usa mkstemp() la funci&oacute;n tratar&aacute; por t&iacute; estos casos
adecuadamente.  De aqu&iacute; que todos los ficheros temporales
deber&iacute;an usar mkstemp() para garantizar que no se produzcan problemas
de acceso concurrente y que los permisos son correctos.
<P></P></LI>

<LI>Un atacante que consiga que los paquetes vayan a/vengan de un
sistema arbitrario tendr&aacute; el control completo de los datos que recibimos,
por lo tanto <B>NINGUNO</B> de estos datos ser&aacute; de fiar.
<P></P></LI>

<LI>Nunca d&eacute;s por hecho que un fichero de configuraci&oacute;n
estar&aacute; correctamente formateado o que habr&aacute; sido generado por
el programa de utilidad apropiado. No conf&iacute;es en que las entradas del
usuario tales como nombres de terminal o cadenas del lenguaje estar&aacute;n
libres de '/' o '../../../' si hay la m&iacute;nima posibilidad de que puedan
ser usadas en un nombre de path. No conf&iacute;es en <B>NINGUN</B> path
proporcionado por el usuario cuando el programa se ejecuta setuid root.
<P></P></LI>

<LI>Busca fallos o puntos d&eacute;biles en la forma de almacenar los datos.
Todos los ficheros temporales deber&iacute;an tener permisos de la forma
600 para protegerlos de ojos curiosos.
<P></P></LI>

<LI>No te limites a buscar con grep los sospechosos habituales en
programas que se ejecutan con privilegios elevados. Busca los
posibles desbordamientos l&iacute;nea a l&iacute;nea, hay much&iacute;simas
m&aacute;s formas de provocar un desbordamiento de memoria adem&aacute;s de
mediante el abuso de strcpy() y sus amigos.
<P></P></LI>

<LI>El simple hecho de restringir privilegios en alg&uacute;n punto no
significa que no haya manera de explotar el recurso en cuesti&oacute;n.
El atacante podr&iacute;a colocar el c&oacute;digo necesario en la pila para
recuperar los privilegios antes de ejecutar /bin/sh.</LI></UL>
<P></P></LI>

<LI>Administra los uid. Elimina privilegios tan pronto como sea posible,
y elim&iacute;nalos de verdad.  Cambiar entre euid y uid NO es suficiente. Usa
setuid() siempre que puedas.
<P></P></LI>

<LI>Nunca muestres el contenido de ficheros de configuraci&oacute;n cuando
ocurra un error. Un n&uacute;mero de l&iacute;nea y quiz&aacute;s un contador
de posici&oacute;n es suficiente.
Esto mismo es igualmente cierto para todas las librer&iacute;as y todos los
programas suid/gid.
<P></P></LI>

<LI>Consejos para quienes revisen c&oacute;digo existente debido a problemas de
seguridad:<P></P><UL>

<LI>Si no est&aacute;s seguro de tus reparaciones de seguridad, env&iacute;alas
 para ser revisadas a alguien con quien as&iacute; lo hayas acordado
previamente. No entregues c&oacute;digo del que no est&aacute;s seguro, llegar
a estropear algo en nombre de las reparaciones de seguridad resulta bastante
embarazoso.
<P></P></LI>

<LI>Aquellos con privilegios de entrega ("commit") para CVS deber&iacute;an
asegurarse de que alguien con dichos privilegios est&eacute; entre los
&uacute;ltimos en revisar los cambios. Dicha persona revisar&aacute; e
incorporar&aacute; la versi&oacute;n final que se desea tener en el
&aacute;rbol.
<P></P></LI>

<LI>Cuando distribuyas cambios para ser revisados usa siempre diffs con
formato context o unidiff. De este modo los diffs pueden ser f&aacute;cilmente
proporcionados como entrada a patch(1). No te limites a enviar los ficheros
enteros. Los diffs son m&aacute;s f&aacute;ciles de leer y aplicar al
c&oacute;digo fuente local (especialmente a aquel en el que podr&iacute;an
tener lugar m&uacute;ltiples cambios simult&aacute;neamente). Todos los cambios
 deber&iacute;an referirse a la rama de desarrollo -current.
<P></P></LI>

<LI>Prueba tu mismo todos los cambios (i.e. compila y ejecuta el
c&oacute;digo fuente afectado) antes de enviarlos a otra persona para que los
revise. A nadie le gusta que le env&iacute;en material averiado para revisar,
y adem&aacute;s produce la impresi&oacute;n de que el remitente ni siquiera se
fij&oacute; en lo que estaba haciendo (lo que no contribuye precisamente a dar
una sensaci&oacute;n de confianza). Si necesita una cuenta en una
m&aacute;quina donde hay una versi&oacute;n espec&iacute;fica que no tienes a
mano, simplemente pregunta. El proyecto tiene recursos asignados para ese
prop&oacute;sito en concreto.
<P></P></LI>

<LI>Nota para los responsables de la entrega de c&oacute;digo ("commit"): no
se debe olvidar incorporar a la rama -stable los patches hechos sobre
-current, de la forma que sea adecuada.
<P></P></LI>

<LI>No reescribas c&oacute;digo innecesariamente para acomodarlo a tu estilo/
gustos. Esto s&oacute;lo hace el trabajo de quienes lo revisan m&aacute;s
dif&iacute;cil.
Hazlo s&oacute;lo si hay razones claras para ello.</LI></UL
<P></P></LI>

<LI>Busca programas que hagan cosas complicadas con los gestores de
se&ntilde;ales. Muchas rutinas en varias bibliotecas no son lo suficientemente
reentrantes como para hacerlo con seguridad.
<P></P></LI>

<LI>Presta especial atenci&oacute;n al uso de realloc(). Lo habitual es no
usar la funci&oacute;n correctamente.
<P></P></LI>

<LI>Cuando uses &aacute;reas de memoria de longitud fija use sizeof() para
evitar p&eacute;rdidas cuando se cambia el tama&ntilde;o del &aacute;rea pero
no el c&oacute;digo que la usa. Por ejemplo:
<PRE>
        char buf[1024];
        struct foo { ... };
        ...
MAL:
        xxx(buf, 1024)
        xxx(yyy, sizeof(struct foo))
BIEN:
        xxx(buf, sizeof(buf))
        xxx(yyy, sizeof(yyy))
</PRE>
Ten cuidado al aplicar sizeof a un puntero cuando lo que quieres es
el tama&ntilde;o del objeto referenciado!
<P></P></LI>

<LI>Siempre que veas "char foo[###]", comprueba cada uso de foo para
asegurarte de que no se desbordar&aacute;. Si no puedes evitar el desbordamiento
(se han dado casos), usa malloc como mal menor para ubicar el &aacute;rea de
memoria, de este modo evitar&aacute;s sobreescribir la pila.
<P></P></LI>

<LI>Cierra siempre los descriptores de ficheros tan pronto como puedas, lo
que har&aacute; m&aacute;s probable que los contenidos del &aacute;rea de
memoria de entrada de stdio() sean desechados. En rutinas de biblioteca,
dispon siempre los descriptores de ficheros que abras de modo que se cierren
tras lanzar con &eacute;xito otro proceso.
<P><P></LI>
</UL>

<A NAME=tat></A>
<H2>Consejos sobre seguridad en FreeBSD</H2>
<P>Se deben ejecutar varios pasos para hacer seguro un sistema FreeBSD
(para el caso, cualquier sistema Unix):
<UL>

<LI>Inhabilitar todo software potencialmente peligroso<BR><P></P>
Gran cantidad de software debe ser ejecutado con un usuario privilegiado
especial para poder hacer uso de recursos espec&iacute;ficos, haciendo el
ejecutable set-uid. Un ejemplo es el software UUCP o PPP, que hacen uso
del puerto serie, o sendmail, que tiene que escribir en el spool de correo
y conectar con un puerto de red privilegiado. Si no usas UUCP de poco
sirve tener en su sistema el software asociado; ser&iacute;a prudente
inhabilitarlo.
Desde luego, esto requiere saber a ciencia cierta lo que puede ser eliminado
y lo que no, as&iacute; como tener claro si se va a necesitar o no dicha
funcionalidad en el futuro.<BR><P></P>
Lo mismo se puede decir de aquellos programas de utilidad que no consideres
lo bastante &uacute;tiles y que supongan un posible riesgo para la seguridad,
como swapinfo. Si elminas el bit set-uid del ejecutable (por medio del
comando "chmod ug-s nombre-de-fichero") siempre habr&aacute; la posibildad de
que el usuario root pueda usar swapinfo. Sin embargo no es una buena idea
elminar tantos sbits que se haga necesario ser root cont&iacute;nuamente.<BR><P></P>
No s&oacute;lo elimines programas que no uses, elimina tambi&eacute;n servicios
 que no quieras o necesites suministrar. Esto se puede hacer editando los
ficheros <TT>/etc/inetd.conf</TT> y <TT>/etc/rc.conf</TT> e inhabilitando los
servicios que no quieras usar.<P></P>

<LI>Reparar el software con errores que afecten a la seguridad (o c&oacute;mo
mantenerse un paso por delante de los crackers)
<BR><P></P>
Aseg&uacute;rate de suscribirte a las diferentes <A HREF="#ml">Listas de
ditribuci&oacute;n sobre seguridad en FreeBSD</A> para obtener actualizaciones
relacionadas con los errores que afectan a la seguridad y reparaciones.
Aplica las reparaciones inmediatamente.<P></P>

<LI>Copias de seguridad. Repare su sistema si una violación de la seguridad
llegara a ocurrir<BR><P></P>
Disponga siempre de copias de seguridad y de una versión limpia del sistema
operativo (por ejemplo en CD-Rom). Asegúrese de que sus copias de seguridad
no contienen datos alterados o modificados por el atacante.<P></P>

<LI>Instala software pare vigilar el estado del sistema<BR><P></P>
Programas como tcp wrappers y tripwire (ambos en packages/ports) pueden
ayudarte a monitorizar la actividad en tu sistema. Esto hace m&aacute;s
f&aacute;cil la detecci&oacute;n de irrupciones. Lee tambi&eacute;n la salida
de los scripts de /etc/security, que se ejecutan diariamente y se env&iacute;an
 por correo a la cuenta root.<P></P>

<LI>Educa a la gente que trabaja en el sistema<BR><P></P>
Los usuarios deber&iacute;an ser conscientes de lo que hacen. Deber&iacute;as
indicarles que nunca revelen su password a nadie y que usen passwords
dif&iacute;ciles de adivinar. Hazles entender que la seguridad del
sistema/de la red est&aacute; parcialmente en sus manos.<P></P>
</UL>


<P>Tambi&eacute;n hay un documento PASO a PASO ("HowTo") sobre seguridad en
FreeBSD disponible que proporciona algunos consejos avanzados acerca de
c&oacute;mo mejorar la seguridad de su sistema.  Puede ser consultado en
<A HREF="http://www.FreeBSD.org/~jkb/howto.html">
http://www.FreeBSD.org/~jkb/howto.html</A>.</P>

<p>La seguridad es un proceso cont&iacute;nuo.  Aseg&uacute;rate de estar al
d&iacute;a con los avances en el campo de la seguridad.</P>

<A NAME=misc></A>
<H2>Qu&eacute; hacer si detectas que la seguridad ha sido comprometida</H2>

<UL>
<LI><B>Determina el alcance de la violaci&oacute;n de seguridad</B><BR>
 Qu&eacute; privilegios consigui&oacute; el atacante ?   Consigui&oacute;
acceso de root ?
 Consigui&oacute; acceso s&oacute;lo en el nivel de usuario ?</LI>

<LI><B>Determina si se ha alterado el estado del sistema (&aacute;mbito del
kernel o de usuario)</B><BR>
 Qu&eacute; software ha sido alterado? Se instal&oacute; un nuevo kernel ?
Ha sido modificado alguno de los archivos binarios del sistema (tales como
telnetd, login, etc.) ?   Si sospechas que un atacante puede haber
causado cualquier alteraci&oacute;n en un sistema operativo, podr&iacute;as
considerar conveniente reinstalar el sistema operativo desde un medio seguro.</LI>

<LI><B>Averigua c&oacute;mo se logr&oacute; la irrupci&oacute;n</B><BR>
 Ocurri&oacute; por medio de un error de seguridad bien conocido ?   Si este es
el caso, aseg&uacute;rate de instalar los patches correctos. Tuvo &eacute;xito
la irrupci&oacute;n debido a una mala configuraci&oacute;n ?  Fue el resultado
de un error desconocido hasta el momento ?   Si sospechas que la
irrupci&oacute;n ocurri&oacute; por medio de un error nuevo, deber&iacute;as
advertir al <A HREF="mailto:security-officer@FreeBSD.org"> FreeBSD Security
Officer</A>.</LI>

<LI><B>Repara el defecto de seguridad</B><BR>
Instala nuevo software o aplica patches al antiguo para reparar los
problemas.  Inhabilita las cuentas que ya han sido comprometidas.</LI>

<LI><B>Otros recursos</B><BR>
<A HREF="http://www.cert.org">CERT</A> tambi&eacute;n ofrece
<A HREF="http://www.cert.org/nav/recovering.html">informaci&oacute;n detallada</A>
acerca de qu&eacute; pasos seguir en caso de que un sistema se vea comprometido.
</LI>
</UL>

<H2>Otra Informaci&oacute;n Relacionada Con La Seguridad</H2>
<UL>
<LI><A href="http://www.cs.purdue.edu/coast/archive/index.html">El archivo
COAST</A> contiene una vasta colecci&oacute;n de materiales relacionados con la
securidad.</LI>

<LI><A href="http://www.cs.purdue.edu/coast/hotlist/">La COAST Security
Hotlist</A> es el lugar donde empezar a buscar materiales relacionados con
la seguridad. Contiene cientos de enlaces &uacute;tiles.  Todo lo que siempre
quiso saber sobre seguridad ...  y m&aacute;s.</LI>

<LI>Los diferentes equipos CERT tales como <A href="http://www.cert.org">
http://www.cert.org</A> y <A href="http://www.auscert.org.au">
http://www.auscert.org.au</A>.</LI>

<LI>Listas de distribuci&oacute;n como <A HREF="http://www.ecurityfocus.com/forums/bugtraq/intro.html">
Bugtraq</A> y <A HREF="http://www.nfr.net/forum/firewall-wizards.html">
Firewall Wizards</A>.</LI>
</UL>

	&footer
    </body>
</html>