El SysAdmin del 3er Mundo

todo lo que expliqué mientras nadie prestaba atención

OpenVAS en Archlinux

| Comments

Login del Greenbone

Recientemente, un “Webmaster” usó en uno de los servidores que patrocino; un escaner de vulnerabilidades. El administrador de red del lugar, le dio acceso al servidor; claro está. El informe reveló un cartapaso de vulnerabilidades. Por ejemplo, la ausencia de una partición swap; podría dar lugar a un kernel-panic por falta de memoria RAM; en un servidor de correo con 4 Gigas de RAM. Además, advertía que la versión de bash (con sus parches puestos) era muy vieja y recomendaba usar una reciente. Como si instalar software reciente en debian fuese jamón.

No vi nada con respecto a postfix o dovecot pero de inmediato me llamaron para que explicara como era posible que mi servidor tuviera semejantes vulnerabilidades. Claro, con acceso a root cualquiera busca vulnerabilidades.

Soy de los que pasa HORAS, intentando penetrar mi propia seguridad; pero el caso llevaba un contra ataque más elaborado.

El sosftware por excelencia para probar la seguridad: OpenVAS

No solo identifica el problema, también te dice como arreglarlo.

Funciona de manera similar a un antivirus. Una base de datos se actualiza y ala las vulnerabilidades conocidas. Luego, una interfaz web, de lo más cómoda; permite llevar a cabo un análisis tanto ligero como exhaustivo del sistema seleccionado como objetivo. Además, se pueden programar análisis de manera automatizada.

Su interfaz web, el llamado “Greenbone Security Assistant”, nos hará la vida muy fácil una vez instalado.

En archlinux todo es un rollo, así que empezemos:

“instalando openvas”
1
pacman -S openvas

La interfaz web de openvas (el greenbone) debe ser contactada por SSL (obligao). Como siempre, crear los certificados es todo una ceremonia.

“creando certificados”
1
2
openvas-mkcert
openvas-mkcert-client -n -i

Ahora lo más importante. Descargarnos la base de datos con las amenazas, o sea, con las vulnerabilidades.

“actualizando las bases”
1
2
3
openvas-nvt-sync
openvas-scapdata-sync
openvas-certdata-sync

El escaner, es un servicio, que en producción, está supuestamente corriendo y realizando escaneos bajo demanda. Lo echamos a andar:

“el servicio”
1
systemctl start openvas-scanner

Una vez que tenemos las bases de datos descargadas, las instalamos en openvas

“instalando las bases”
1
openvasmd --rebuild --progress

Y hasta aquí es donde la wiki de arch está bien. Pues para crear el usuario de openvas y echar a andar el greenbone, se forma la moña.

Primero debemos crear el usuario de openvas. En este caso de ejemplo, el usuario será admin con password admin.

“creando usuarios”
1
2
openvasmd --create-user=admin --role=Admin
openvasmd --user=admin --new-password=admin

Por último, echamos a andar la interfaz web:

“iniciando gsad”
1
2
gsad --http-only --listen=127.0.0.1 -p 9392
openvasmd -p 9390 -a 127.0.0.1

Abre un navegador y apunta para http://127.0.0.1:9392

Una vez dentro, verás la página donde se almacenan los escaneos. Ahí localiza un botón morado con una barita mágica. Vea la imagen de abajo

Botón del Wizard

En la pantalla que le sigue, especificamos el host al que queremos escanear.

Seleccionar objetivo

Apto seguido, comenzará el escaneo. Es posible que el servidor deje de prestar servicios; pues openvas le da con todo.

Finalmente, cuando el escaneo esté terminado, en vez de un tanto por ciento, verás; como en la primera imagen, un letrero que dice “done” sobre la barra azul.

resultado de escaneo

La imagen muestra, el resultado del webmaster que le tiró piedras al tejado del vecino con el suyo de vidrio. Al hacer click en la vulnerabilidad, nos muestra la solución, como es el ejemplo de esta:

solución

Hermosa pareja; el problema y la solución junticos…

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

añadir verbo a un scaffold

| Comments

Cualquiera que sepa como usar debidamente los scaffolds, o sea, cualquiera que sepa como hacerle la paja a ruby on rails para que haga lo que queremos; seguro habrá intentado en algún momento, añadir un nuevo método a un scaffold. Además, de seguro quisiste luego poder llamarlo con los métodos “metodo_user_path” y que la ruta se cree de manera automática.

Por ejemplo, en este caso, tengo el scaffold user y le agregué el método cambiar aparte de los clásicos PUT y DELETE.

“scope de users_controller.rb”
1
2
3
4
5
6
7
8
9
10
11
  # cambia el estado de habilitación del usuarios
  def cambiar
     @user.enabled=!@user.enabled
     @user.save
     redirect_to :back
  end

  # GET /users
  def index
    @users = User.all
  end

Pero el método cambiar no aparece en rails hasta que no hagas lo siguiente en el fichero de las rutas.

“config/routes.rb”
1
2
3
4
5
6
7
8
9
10
11
   # el scaffold de los usuarios
   resources :users do

      # agregamos el verbo cambiar usado para
      # @user.enabled=!@user.enabled
      # para que exista: cambiar_user_path
      member do
         get 'cambiar'
      end

   end

Ahora existirá el método cambiar_user_path que toma como argumento el usuario.

cambiar_user_path(user)

De esta manera, se le manda el objeto usuario y genera una URL como

/users/345/cambiar

Dicha ruta macheará el método User#cambiar

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

bootstrap en rails 4

| Comments

Pensaba escribir una entrada sobre como hacer que se vean los glyphicons luego de instalar la gema de boostrap en rails 4; pero, recientemente he recibido numerosas críticas, sobre entradas de mi blog. Dicen que hablo sobre como solucionar problemas de cosas que ni si quiera conocen pero al parecer están muy buenas.

Bootstrap es un framework CSS patrocinado por Twitter y es el fin de los dolores de cabeza para todo el que como yo, le tiene terror a programar CSS. Por supuesto, como todo en materia de framework, tiene sus pro y sus contras.

La ventaja de usar un framework, es que te ahorras un mundo de código. La ventaja además; de usar un framework CSS, es que estás de manera automática arriba de los último en materia de CSS.

La desventaja de usar un Framework (cea CSS o no) es que en la mayoría de los casos, carga mil y un elemento que nunca usarás. Por ejemplo, tengo una aplicación que NO usa carrousel; pero como está hecha a la carrera, no he tenido tiempo de determinar que elementos o no cargar con bootstrap. Por definición, se cargan todos.

En nuestro Gemfile, debemos declarar que use bootstrap así:

“scope del Gemfile”
1
gem "twitter-bootstrap-rails"

Luego, procedemos a la instalación del tema CSS, en mi caso, como no uso less ni nada de eso, lo hago así:

“instalando el engine”
1
rails generate bootstrap:install static

Con eso, supuestamente ya está listo. Pero como todo en ruby on rails se queda atrás, resulta que el asset pipeline moderno no carga las fuentes y en el fichero application.css hay que añadirle el siguiente código:

“app/assets/stylesheets/application.css”
1
2
3
4
5
6
7
8
9
10
/* Esto va al final de la CSS */

@font-face {
  font-family: 'Glyphicons Halflings';
  src: url('../assets/glyphicons-halflings-regular.eot');
  src: url('../assets/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),
       url('../assets/glyphicons-halflings-regular.woff') format('woff'),
       url('../assets/glyphicons-halflings-regular.ttf') format('truetype'),
       url('../assets/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}

¿Qué como conseguí eso? Ni preguntes, me lo mandó por correo un salvaje de la materia.

Otra cosa:

Si no sabes usar boostrap, te recomiendo que le eches un vistazo. Si sabes escribir CSS, te recomiendo que lo veas igual, pues tiene una buena API para personalizarlo como te de la gana.

pero está la gema bootstrap-sass

Sí, ya se que está bootstrap-sass, que es además es el port oficial de bootstrap y que rails usa SASS; pero te imaginarás el criterio que tengo sobre sass.

Por mi, coffe-script y sass pueden cogerlos, doblarlos bien y meterselos ambos en el…. BOLSILLO. El programador web que no quiera aprender JavaScript y CSS está embarcao. Por otra parte, para aprender SASS y CoffeScript hay que saber CSS y JavaScript :D ¿Que problema verdad?

Helpers de utildad

La diferencia entre bootstrap-sass y twitter-bootstrap-rails es que boostrap-sass la hizo la gente de bootstrap y la segunda, la hicieron usuarios de ruby on rails…

Te explico:

“fulanito.erb.html”
1
2
3
<%= nav_bar brand: "Páfata" do %>
    <%= menu_text "El texto de la barra" %>
<% end %>

Eso generará un navbar como este:

“render output”
1
2
3
4
5
<nav class="navbar navbar-default" role="navigation">
  <div class="container">
  <a class="navbar-brand" href="http://127.0.0.1:3000/">Páfata</a>
  <p class="navbar-text">El texto de la barra</p>
</div></nav>

Si eso no te pareció emocionante, mira el helper de flash. Ponte tu que halla un error y lo metes en el flash.

“ejemplo_controller.rb”
1
2
3
4
def fulanito
   flash[:error]='Bofatás! El error del milenio'
   render :fulanito
end

En la vista, pones está simple linea:

“fulanito.erb.html”
1
<%= bootstrap_flash %>

Y se renderiza:

“render output”
1
2
3
4
<div class="alert fade in alert-danger ">
<button class="close"data-dismiss="alert">&times;</button>
Bofatás! El error del milenio
</div>

Échale un vistazo al link de abajo, pa que veas como renderizan breadcumb declarando los componentes en los controladores.

Mas detalles aquí: https://github.com/seyhunak/twitter-bootstrap-rails

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

se dice DIOS, no alá

| Comments

Aunque el islam es algo poco común en cuba, cada día en el mundo, va tomando más fuerza. Nunca falta un curioso que se cree culto y te dice.

“yo creo en dios, no en alá”.

Sin darse cuenta el disparate que están diciendo.

Alá es la hispanización de la palabra árabe Al-lāh (الله), que en español significa Dios.

Wikipedia

De hecho, los cristianos árabes (que hay) llaman a dios Alá, porque repito, significa dios LITERALMENTE

Claro, como en todas las religiones, siempre hay extremistas y aquí los hay, que andan por la habana, disfrazados de árabes y dicen Alá en vez de dios.

Por otra parte, el idioma litúrgico del islam es el árabe, razón por la cual el término suena más o menos como al laaj y mucha gente lo agarra por el mango.

Existen dos grandes traducciones del corán al español, la Julio Cortés y la Isa García. La primera, en mi opinión, es bastante mala; comparada con la segunda, que es más completa, ya que incluye una interpretación contextual [entre corchetes] de las oraciones más complejas. Esto nos da la medida que la traducción es más fiel. En esta traducción, se usa el término Dios en lugar de Alá (casi siempre con inicial mayúscula).

Por esta razón, mucha gente hablando en español dice “alá”. Y yo pregunto:

¿Has visto algún testigo de Jehová diciendo GOD?

Claro que no, todos dicen dios. Porque cuando la religión salió de Estados Unidos, medio mundo sabía inglés.

Sin embargo, cuando el islam salió del mundo árabe, la palabra Alá empezó a sonar en España, donde no convenía que Alá y Dios fueran la misma cosa. A los Españoles había que convencerlos de que adorar a alá era adorar a un dios diferente. Problemas políticos de aquel entonces, por una bobería ahí llamada reconquista.

Hoy, en el siglo XXI, sabemos que dios en árabe se dice “al laj” (Al-Lāh o الله).

Dios y Alá, son la misma cosa, solo cambia la manera en que las vemos… Dios es uno solo, onmipotente y omnisapiente; nosotros los mortales, dadas nuestras diferencias políticas, culturales e idiomáticas, necesitamos ponerle nombre a dios para poder comprenderlo.

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

pacman bajo el microscopio

| Comments

En este post, me propongo mostrarle algunas de las bondades de pacman. Cualquier que conozca Arch Linux, sabe de lo que estoy hablando.

Veremos bien de cerca el engranaje de está compleja maquinaria.

Pacman, es una herramienta lo suficientemente versátil como para llevar el nombre de “administrador de paquetes”. Su nombre es un juego de palabras que proviene de juntar las palabras “PACkage MANager”.

A diferencia de ciertas y determinadas distribuciones (entiéndase debian); que requieren más de 3 softwares para esa pincha. Pacman solo es autosuficiente para gestionar la paquetería. La herramienta repo-add, está incluída dentro del paquete de pacman y se usa para crear repositorios personalizados.

“huevo de pascua de pacman”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[lazaro@artema ~]$ repo-elephant 
     __
    '. \
     '- \
      / /_         .---.
     / | \\,.\/--.//    )
     |  \//        )/  /
      \  ' ^ ^    /    )____.----..  6
       '.____.    .___/            \._)
          .\/.                      )
           '\                       /
           _/ \/    ).        )    (
          /#  .!    |        /\    /
          \  C// #  /'-----''/ #  /
       .   'C/ |    |    |   |    |mrf  ,
       \), .. .'OOO-'. ..'OOO'OOO-'. ..\(,

Como ya sabrán (o se darán por enterado) Arch Linux no es por release, si no que un canal en constante desarrollo, hace como upstream, donde se depositan los paquetes consideraros estables. Esto es lo que en distribuciones estáticas se llamara “repo”. Pacman lleva la ardua tarea de mantener el sistema debidamente actualizado. Nuestro sistema no tendrá “actualizaciones” si no que evolucionará constantemente desde el “core”, escalando horizontalmente el sistema completo.

De esta manera se logra el mítico equilibrio entre estabilidad y novedad.

Para ello, pacman debe tener constancia local de la lista de paquetes que hay en el upstream. Estas listas son ficheros de textos, comprimidos con gzip, que contienen información acerca de lo que hay arriba. Por ejemplo, contiene la URL de como descargarlos.

Para pacman, instalar un paquete o alar está lista, es casi la misma operación. Se llama “sync” (sincronizar)

“-Sy”
1
pacman -Sy

Pero puedes de un solo viaje, sincronizar y actualizar todo el sistema.

“lo úlitmo que trajo el barco
1
pacman -Syu

Buscar un paquete también es una operación de sincronización.

“buscar fulanito”
1
pacman -Ss fulanito

También puedes, bajar la lista, actualizar el sistema e instalar algo de un solo golpe.

“todo junto”
1
pacman -Syu fulanito

Pacman irá a los sitios que tiene declarado en el fichero: /etc/pacman.d/mirrorlist y bajará esos ficheros. Seguidamente los depositará en el directorio /var/lib/pacman/sync/

“bases de datos”
1
2
3
4
5
[lazaro@artema ~]$ file /var/lib/pacman/sync/*.db
/var/lib/pacman/sync/archlinuxfr.db: gzip compressed data, last modified: Thu May 21 04:31:59 2015, from Unix
/var/lib/pacman/sync/community.db:   gzip compressed data, last modified: Fri May 29 08:47:01 2015, from Unix
/var/lib/pacman/sync/core.db:        gzip compressed data, last modified: Wed May 27 19:02:40 2015, from Unix
/var/lib/pacman/sync/extra.db:       gzip compressed data, last modified: Fri May 29 04:27:15 2015, from Unix

Ahora nuestro sistema sabe lo que hay “arriba” (en el repo) y está listo para compararlo con lo que está “abajo” (instalado). La información sobre todo los paquetes que el sistema tiene instalado, se almacena en el directorio /var/lib/pacman/local/

La lista es muy grande para mostrarla. Pero dentro hay directorios con la versión de cada programa instalado. Dentro de ese subdirectorio, hay 4 ficheros que contiene la información del paquete instalado.

Por ejemplo, el paquete ruby, en su versión 2.2.2-1 responde al directorio /var/lib/pacman/local/ruby-2.2.2-1

Cada directorio, contiene 4 ficheros:

“metainfo de un paquete instalado”
1
2
[lazaro@artema ~]$ ls /var/lib/pacman/local/ruby-2.2.2-1/
desc  files  install  mtree

El fichero desc contiene la información que describe al paquete, versión, nombre, etc..

El fichero files contiene la lista de ficheros que instala dicho paquete.

El fichero install contiene una serie de comando disparadores, como post_install. Dentro de install, se declaró una función llamada post_install() que será llamada cuando el paquete termine de ser instalado.

Por último, mtree (que está comprimido con gz) contiene lo mismo que files, pero con la suma MD5 de cada fichero. Esto es usado por pacman para verificar la integridad de los archivos instalados.

Por ejemplo, si quisiéramos ver que ficheros contiene el paquete ruby, podríamos ver el contenido del fichero files pero sería más fácil usar el comando Query con el argumento list

“pacman -Ql fulano”
1
2
3
4
5
6
7
8
9
[lazaro@artema ~]$ pacman -Ql ruby|grep '/usr/bin/'
ruby /usr/bin/
ruby /usr/bin/erb
ruby /usr/bin/gem
ruby /usr/bin/irb
ruby /usr/bin/rake
ruby /usr/bin/rdoc
ruby /usr/bin/ri
ruby /usr/bin/ruby

El principal fichero de pacman, es /etc/pacman.conf y a diferencia de otros package managers, este es bien sencillo. Además, es MUY personalizable.

Por ejemplo, la cláusala XferCommand, permite especificar que comando usar para bajar los paquetes. Las variables, %u y %o serán enviadas como URL del paquetes y fichero en disco.

“scope de pacman.conf”
1
2
3
[lazaro@artema ~]$ cat /etc/pacman.conf|grep Xfer
#XferCommand = /usr/bin/curl --retry-delay 5 --progress-bar -C - -f %u > %o
XferCommand = /usr/bin/wget --no-cache -t 0 -T 10 --max-redirect=0 -w 5 --passive-ftp -c -O %o %u

Ese es un buen ejemplo de una configuración para wget en conexiones “hostiles”. Para que tengas una idea de cuan personalizable puede llegar a ser:

“NoExtract”
1
2
[lazaro@artema ~]$ cat /etc/pacman.conf|grep NoEx
NoExtract = *.mo

En este caso, los ficheros .mo no serán extraídos de los paquetes durante el proceso de instalación. Como yo uso el sistema en inglés, no me interesa tener las traducciones de sepetecientos idiomas.

Los paquetes que instales, irán al directorio /var/cache/pacman/pkg/ y podrías usar dicho directorio como repo para compartirlo con aquellos que no tiene acceso a internet; o bien, llevártelo para tu casa, lugar donde te integras al grupo antes mencionado.

Quizás te interese crear tu propio repo. La idea de crear un repo a partir de la cache, le ha tirado un cabo a una pila de gente. En un viaje reciente que hice por el oriente de la isla, cargué mi laptop con todo el software necesario he instalé 3 servidores con arch sin conectarme a internet (vergonzosa hazaña).

Con esta opción:

“mantener paquetes”
1
2
[lazaro@artema ~]$ cat /etc/pacman.conf|grep Clea
CleanMethod = KeepCurrent

Aquellos paquetes que una vez fuero instalados se mantienen. Por tanto, supón que quieres tener en la otra máquina (la de tu casa) “geary” el cliente de correo. Simplemente lo instalas y lo desinstalas en la máquina privilegiada.

“cacheando paquetes”
1
pacman -S geary && pacman -R geary

Ahora el paquete está en la cache, y aunque ya no está en el sistema, se conservará en la cache hasta que no lo borres. Claro, esto tiene como desventaja que no se bajarán actualizaciones para ese paquete.

En mi caso, yo tengo este escripcito al que llamo mkrepo.sh

mkrepo.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash

# elimina esa base de datos
rm /var/cache/pacman/pkg/custom.db.tar.gz

# crea una nueva
repo-add /var/cache/pacman/pkg/custom.db.tar.gz /var/cache/pacman/pkg/*.pkg.tar.xz

# dime que tengo que poner
echo '''
[mirepo]
SigLevel = Optional TrustAll
Server = http://localhost:8080
'''
# sírvelo con darkhttpd
darkhttpd /var/cache/pacman/pkg/ --chroot --port 8080

Al correrlo, la cache se indexa; lista para ser usada como repo. El script hace un echo, para recordarte como sería la configuración que debes poner en /etc/pacman.conf para usar ese repo.

Finalmente, darkhttpd (un servidor web que viene con el Live de arch) sirve ese repo.

Quizás tengas una memoria flash donde creas el repo. En ese caso, bastaría con especificar una linea Server con la dirección file:///

Server = file:///media/MEMORIA/repo/

Simple verdad?

Pensé hacer esta entrada más larga, pero sería aburrir al lector. En cambio, ahora ya sabes una parte, te dejo que investigues el resto.

Happy Hacking!

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

cambiar user agent con squid

| Comments

En esta sofocante tarde de verano cubano y en un lugar que no diré, me encontré detrás de un proxy administrador por la Schutzstaffel. Lo que no se parezca a un navegador, NO PASA. Por tanto, Ruby, Wget y demás, NO pinchan.

Por suerte, tengo la costumbre de usar un squid local, para no tener que estar configurando el navegador. En ese squid declaro como padre el squid del momento (ya sea salud u otro) y ahí pongo el nombre de usuario con la contraseña una sola vez. Si estás en cuba y tienes una laptop con linux, te aconsejo que acates esa costumbre.

Solución:

Reescribir el encabezado User-Agent de las peticiones en el squid local. Así todas salen de un supuesto firefox.

“/etc/squid/squid.conf”
1
2
request_header_access User-Agent deny all
request_header_replace User-Agent Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4

Al carajo albañiles que se acabó la mezcla.

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ