Mostrando entradas con la etiqueta consejos. Mostrar todas las entradas
Mostrando entradas con la etiqueta consejos. Mostrar todas las entradas

domingo, 26 de mayo de 2013

Mi opinión concerniente a la seguridad de la información

 Mucho se habla de que Internet es inseguro, esto es algo que no se puede negar y la realidad es que sin importar cuan complejo sean los mecanismos que implementes en materia de seguridad, solo hace falta tiempo y mucha motivación para lograr romperlos. Cosa que sucede rápidamente si hay ganancias de por medio. 

Sin embargo, es aun mas sencillo romper y violentar sistemas si las personas que lo utilizan y quienes lo configuran se niegan a informarse un mínimo de lo que es la inseguridad actual en redes de datos y software.

Independientemente de que plataforma estés utilizando, sea Android, Windows, Linux, Mac, etc. Todas son susceptibles a ser vulneradas en especial si te empeñas en colocar como contraseña del administrador "Admin123", o no haces backups de datos importantes en unidades externas, utilizas sistemas de cifrado vulnerables como WEP en redes WiFi, le das click a cuanto enlace te manden, revisas cuanto archivo adjunto te envíen por correo, dejas que cualquiera "viole" la intimidad de tu computadora con cualquier dispositivo usb, por solo mencionar algunos casos. 

Algunos consejos

  Estos consejos ya deberian de saberlos, en muchos casos incluso los programas que utilizan se los dan, de cualquier forma aqui les van:

1.- Contraseñas SEGURAS y distintas: con esto me refiero a no utilizar contraseñas del tipo "MinombreAñodeNacimiento", utilicen contraseñas de al menos 10 caracteres mezclen mayúsculas y minúsculas,  utilicen espacios, caracteres especiales como %&{^, no coloquen sus nombres ni fechas de cumpleaños. Ademas procuren que la contraseña sea diferente para cada servicio que utilicen. 

2.- Sistemas de doble autenticacion: una tendencia que se esta marcando actualmente es la del uso de sistemas de autenticacion doble, Gmail por ejemplo lo tiene, cuando se activa, para poder acceder a tu cuenta necesitas a parte de introducir tus datos de usuario y contraseña validos, introducir un código aleatorio que se envía a tu teléfono o es generado por un programa como el Google Autheticator que no solo sirve para los productos google. 

3.- Utilizar antivirus LEGAL y siempre actualizado: y la razón de que debe ser legal, es porque si lo piratean tarde o temprano la compañía se dará cuenta, cuando descargas la base de datos de virus de los servidores web de una empresa el antivirus envía datos referentes a la instalación de este, algo así como su identificación  La compañía dueña del software utiliza esto para darse cuenta de que AV son piratas y cuales no y normalmente te desactivan el AV sin decirte nada para que creas que andas seguro. Solución compren un antivirus o descarguen alguno gratuito, recomiendo el AVG

4.- Actualizaciones de software: existe una razón para que el software se actualice a cada rato y con software también incluyo el sistema operativo. Es código escrito por seres humanos, nosotros no somos perfectos y siempre vamos a cometer algún error, estos errores son tan tontos como por ejemplo que se congele un botón del programa que estés utilizando, pasando por cosas que pueden potencialmente permitir que alguien con suficiente tiempo y conocimiento utilice ese error (bug) para ganar acceso a tu computadora y lógicamente datos. Las actualizaciones y parches de seguridad son precisamente extensiones del software que corrigen esos errores, un error no parcheado es un error que potencialmente alguien puede utilizar para acceder a tu computador y créanme  programas totalmente automatizados y simples de utilizar para lograr esto existen y a montón. Mantengan SIEMPRE actualizado todo el software que utilicen.

5.- Unidades externas: "me encontré un pendrive", "que suerte tengo", "¿mira puedo ver algo que tengo guardado aquí en tu pc?". Las unidades de almacenamiento externas como los pendrives, pueden contener código autoejecutable que puede ser virus o malware, deben tener cuidado con esto a quien le aceptan pendrives (si, como con los caramelos) y nada de estar metiendo pendrives que casualmente se consiguieron en la calle en la PC. Si de verdad quien hacerlo, analicen el pendrive con un antivirus actualizado o abranlo en una PC con Linux, ojo, si existen virus para Linux (y muchos), pero es poco probable que si el pendrive tiene un virus sea para este SO.

6.- Mira esta foto de nosotros: les llegan correos así e incluso mensajes instantáneos de personas que ni conocen con enlaces y seguramente hacen una de dos cosas, si es un correo con un archivo adjunto van y lo abren, listo ahora están infectados. Si es un enlace de chat van y le dan click, nuevamente listo, están infectados. NUNCA abran correos que contengan archivos adjuntos provenientes de direcciones web que NO RECONOZCAN y muchísimo menos abran enlaces de personas que tampoco conozcan. 

7.- Respaldos: mantengan respaldos constantes en unidades externas o en la nube en servicios como Dropbox de modo que si sucede una catástrofe podrán recuperarse, esto es realmente importante con documentos que recopilan cientos de datos, ejemplo, bases de datos de clientes o trabajadores.

8.- Cifrado de datos: los pendrives y datos contenidos en sus discos duros y memorias de smartphones pueden ser cifrados, busquen la documentación al respecto y verán como, no es difícil y en la mayoría de los casos con tan solo ejecutar un asistente paso a paso se puede hacer. Esto evita que personas no autorizadas, aun si poseen físicamente la información, son incapaces de determinar que contiene porque solo verían datos aleatorios y sin sentido. 

9.- Dejar de utilizar cifrado WEP en WiFi: el cifrado WEP fue el primero en aparecer cuando la suite de protocolos 802.11 (WiFi) se hizo presente en el mundo, desde ese entonces el algoritmo que se utiliza para camuflar la información es ampliamente conocido y existen cientos de programas que con tan solo dejarlos una o dos horas trabajando logran romper la clave y con eso ganar acceso a la red. Utilicen cifrado WPA2-PSK o si quieren algo mas complejo (nivel empresarial mas que todo) utilicen algún servicio AAA como Radius, documentación de esto existe y mucha.

10.- Estar al tanto de los certificados: observen que cuando navegan por internet si ven la barra de direcciones apreciaran que la dirección comienza o por HTTP o por HTTPS, este ultimo indica dos cosas, la primera es que se esta navegando de forma cifrada, es decir, que si alguien intercepta el trafico entre tu maquina y la de destino solo vería datos sin sentido alguno y la otra, es que la pagina web esta certificada como segura y "original" por un ente reconocido globalmente. Si por ejemplo van a meterse en la web de un banco o en una cuenta de correo fíjense primero que diga HTTPS y tenga un candadito, sino, salgan de la pagina porque es casi 100% seguro de que es una pagina falsa y serian victimas de un robo de datos. 

 Siendo honestos si siguen con todas estas recomendaciones (que no son todas las que deberían de tomar en cuenta) no van a estar 100% seguros, pero si muchísimo mas que si siguen empeñados en no hacer lo que he descrito arriba, hay que tomar conciencia, la seguridad de datos depende en gran medida del usuario. 

jueves, 27 de octubre de 2011

Consejos para diseño de software

 En esta ocasión les voy a dar algunos consejos sobre el diseño de algoritmos basado en mi experiencia como programador "newbie". La principal razón de que no se logre entender como resolver un problema en programación radica en el hecho de que aun no tienen la "mentalidad de programador" por así decirlo. Espero que con estos tips/consejos puedan mejorar.

 Primeramente, deben pensar en forma esquematizada. Este esquema esta predefinido en un orden que yo denomino O.P.H.A (Objetivo(s), Procesos, Herramientas, Acción). Es una definición propia que decidí tomar cuando comencé a aprender programación por mi cuenta. A pesar de lo enrevesado que pueda parecer es muy sencillo.

Objetivo(s): definido como el cometido de nuestro programa, es la razón de porque lo creamos. Comienza con una idea y termina con un sistema totalmente funcional. Cabe acotar que también pueden existir objetivos propios internos del programa mas allá del resultado que queremos de este, por ejemplo podemos tener un objetivo central y objetivos secundarios para llegar al primero.
Procesos: los pasos inherentes y básicos (en orden jerárquico) a seguir para llegar a la solución del problema. En otras palabras, tu, como ser humano ¿qué realizarias para lograr llegar al objetivo?
Herramientas: selección de palabras claves, código, lenguaje a utilizar.
Acción: montaje y prueba del software (corrida en frió se incluye aquí).

  Cabe acotar que todos estos procesos son retroalimentados, por cada etapa usualmente se darán cuenta que pueden mejorar la anterior, por ejemplo en el desarrollo de mis procesos entonces puede que encuentre una idea para mejorar mi objetivo, ampliarlo, durante la selección de herramientas puedo encontrar formas mas eficaces de realizar los procesos. Pensar como programador no es ser un sabio del lenguaje y conocer cada lenguaje existente en el mundo, no, es saber llevar un orden de ideas, todo lo demás es carpintería.

  Ejemplo practico de este método
Supongamos que queremos realizar un programa que promedie una serie de números. Aquí ya tenemos definido nuestro objetivo (en este caso solo uno).

 Partiendo de esto, nuestros procesos serian los siguientes:

  1. Definir la cantidad de números a promediar, si es definido por el usuario esto conlleva un sub-proceso que es -> Solicitar al usuario la cantidad de números a promediar. 
  2. Ingresar datos, es decir, solicitar al usuario el ingreso de los números que desea promediar. 
  3. Punto de quiebre, aqui podríamos realizar dos posibles acciones a) Sumamos en tiempo real los números a medida que se introducen o b) almacenamos los números para procesarlos luego.
  4. Opcional, sumar los números almacenados. 
  5. Promediar, esto es tomar la suma total y dividirla entre la cantidad de números introducidos.
  6. Mostrar resultado al usuario. 
 En esta primera parte es un acercamiento bastante simple a lo que se podría hacer para llegar a nuestro objetivo, como pueden ver se presta a modificaciones tan simples como definir de serie una cantidad determinada de números a promediar como a cambiar esta cantidad en función de los deseos del usuario, también podriamos decidir entre almacenar numero a numero cada uno o no, para futuras referencias. Queda a discreción del programador adaptar estos procesos a sus gustos, formas de pensar y necesidad propias del programa. 


 Durante esta etapa lo común es representar los procesos en orden de ideas ya sea en listas como la anterior como diagramas de flujo o pseudo código. Nuevamente esto depende ya de los deseos de quien esta programando.

 Ahora pasamos a las herramientas, dependerán de en que lenguaje estamos trabajando, en nuestro caso me enfocare en C, sin embargo esta etapa se admite para cualquier otro lenguaje, lo que cambiaría seria la sintaxis (forma de escribir los comandos). La lógica nos ayudara mucho en esto conociendo que la base para cualquier programa radica única y exclusivamente en dos fundamentos:


  • Variables: o lugares en memoria donde se almacenan datos que pueden cambiar en tiempo real a medida que el código se ejecuta y en función de estímulos externos (como el usuario, un sensor, etc).
  • Condicionales: la programación no seria lo que es sin la aparición de esto, un condicional es algo (una acción o serie de acciones) que depende de que se cumpla o no un suceso. En programación estos son los tan famosos If, While, Do, Repeat, For, etc, que aparecen en cualquier lenguaje que sea minimamente útil. 
 En la selección de herramientas entonces primeramente definimos el numero de variables a utilizar y luego adaptamos nuestros procesos en función de la sintaxis del lenguaje a utilizar. Sea un condiciona, imprimir en pantalla, etc. Desglosar los procesos en comandos es algo que puede llevar mucho tiempo y dependerá de dos cosas imaginación y conocimiento de que es lo que hace cada comando. Por eso como consejo diría que se deben ir buscando leer los comandos en C (en este caso, substituir C por el lenguaje a utilizar como BASIC por ejemplo). En internet hay mucha documentación al respecto muy útil. 

Código en C: 

//Programa que promedia N cantidad de numeros
#include
main(){
int N,ciclo; //Definir las variables donde guardare los datos que necesito
float numeros,resultado=0;
printf("introduzca la cantidad de numeros a promediar: ");scanf("%d",&N); //solicitar y almacenar el numero de digitos
for(ciclo=1;ciclo<=N;ciclo++){ // aqui comienza el proceso de sumado
     printf("\n introduzca cifra numero: %d  ",ciclo);scanf("%f",&numeros);
     resultado=resultado+numeros;
                    }
resultado = resultado/N; //promediacion 
printf("\n su promedio es: %.2f ",resultado); //mostrar el resultado al usuario.
getch();
}
    
 
 El segmento de Acción se reducir a correr el programa y corregirlo en busca de errores y/o optimización-mejora. Para esto basta con correrlo en frió.

Corrida en frió: teniendo ya la secuencia de lo que se hará, sencillamente realicen paso a paso esta secuencia dando valores arbitrarios y posiciones a sus variables (con lápiz y papel), si al llegar al final del programa consiguen el resultado esperado, entonces el código esta bien, si por el contrario no es así, hay un error y les aseguro que lo detectaran rápidamente al hacer esto. Como consejo principal al correr en frió deben es fijarse en todo momento en que sucede con los datos que manejan, si algún dato hace algo extraño verifiquen esa sección de código.

En fin, recapitulando los consejos en si son:

  • Realicen un esquema de lo que harán, empezando por los objetivos.
  • Aprendan que hace cada comando del lenguaje que van a utilizar.
  • Lápiz y papel, no se vayan de una a la pc, primero diseñen todo en una hoja y luego si cuando estén seguros de que eso es lo que quieren, entonces vayan a la PC, esto les servirá de referencia y evitaran perderse. Con diseño me refiero a realizar diagramas de flujo o listas de procesos, no escribir el código. 
  • Después de tener todo escrito, corranlo en frió (nuevamente, lápiz y papel). Si el código es MUY grande, corran en frió cada sección de este antes de proceder a la siguiente. 
 Por ahora esto es todo, espero les sirva. 

nota: por alguna razón el que va al lado del #include, se borra cuando lo edito aquí en blogger, si van a correr este programa recordar agregarlo al código.