Bloqueando el Conficker Virus

Resúmen:

La siguiente script fue creada con la finalidad de ayudar a identificar en la red privada (LAN) los host que están infectados con el virus Conficker. Obvio que hay muchas formas de prevenir la infección en redes administradas y centralizadas pero el script fue creado para identificar las computadoras no-administradas en un entorno de tránsito.

Los script están en formato que pueda ser pegado directamente en la ventaja de Winbox ya que se ha encontrado un problema en el formato cuando se copia y pega desde el wiki. El scheduler puede ser copiado y pegado en la ventana terminal.

Notar que debido a la limitación de 4096 caracteres en una variable string el sistema únicamente bloqueará la variante A y B en este momento. La variante C genera una lista de 50.000 dominios cada día de los cuales usa solo 500. Sin embargo, aunque se pueda identificar esos 500, la limitación de 14 caracteres por nombre de dominio,  hará exceder los 4096 caracteres limites. Se esta trabajando en este momento en esto.

El ánalisis de la variante  Conficker.C esta disponible en mtc.sri.com.

Usando la lista de domonios:

Se ha separado la lista de dominios (originalmente desde Technet en una lista que  MikroTik no puede importar por la cantidad superior de 4096 caracteres. Si quiere bajar la copía de la lista completa, puede ser accedida directamente desde epicwinrar.com o las copias diarias desde este enlace.

El Script:

El script realiza lo siguiente:

  • Chequea la fecha de hoy
  • Baja la lista de dominios ($month-$day-$year.txt)
  • Confirma cuando el archivo bajado contiene datos
  • Resuelve y agrega  la lista de hoy en el address list ‘daily-conficker’
  • Borra el archivo de texto bajado.

La lista puede ser cambiada fácilmente para apuntar una copia de la lista de dominios en uno o mas servidores locales.

script name: daily-conficker-list

:local date [/system clock get date]
:local month [:pick $date 0 3]
:local day [:pick $date 4 6]
:local year [:pick $date 7 11]

#set month to numerical value
:if ([$month] = "jan") do={ :set month "01" }
:if ([$month] = "feb") do={ :set month "02" }
:if ([$month] = "mar") do={ :set month "03" }
:if ([$month] = "apr") do={ :set month "04" }
:if ([$month] = "may") do={ :set month "05" }
:if ([$month] = "jun") do={ :set month "06" }
:if ([$month] = "jul") do={ :set month "07" }
:if ([$month] = "aug") do={ :set month "08" }
:if ([$month] = "sep") do={ :set month "09" }
:if ([$month] = "oct") do={ :set month "10" }
:if ([$month] = "nov") do={ :set month "11" }
:if ([$month] = "dec") do={ :set month "12" }

#download current days domain list
/tool fetch address=www.epicwinrar.com host=www.epicwinrar.com mode=http src-path="conficker/$month-$day-$year.txt"
:log info "Download Complete"
:delay 2

#check to ensure todays file exists before deleting yesterdays list
:log info "Begining Address List Modification"
:if ( [/file get [/file find name="$month-$day-$year.txt"] size] > 0 ) do={

  /ip firewall address-list remove [/ip firewall address-list find list=daily-conficker]

  :local content [/file get [/file find name="$month-$day-$year.txt"] contents] ;
  :local contentLen [ :len $content ] ;

  :local lineEnd 0;
  :local line "";
  :local lastEnd 0;

  :do {
     :set lineEnd [:find $content "n" $lastEnd ] ;
     :set line [:pick $content $lastEnd $lineEnd] ;
     :set lastEnd ( $lineEnd + 1 ) ;

#resolve each new line and add to the address list daily-conficker. updated to list domain as comment
     :if ( [:pick $line 0 1] != "n" ) do={
         :local entry [:pick $line 0 ($lineEnd ) ]
         :if ( [:len $entry ] > 0 ) do={
	   :local listip [:resolve "$entry"]
           :if ($listip != "failure" ) do={
             /ip firewall address-list add list=daily-conficker address=$listip comment=$entry
             :log info "$listip"
           }
       }
     }
   } while ($lineEnd < $contentLen)
}
:log info "Address List Modification Complete"
#cleaning up
/file remove "$month-$day-$year.txt"

El scheduler (puede ser pegado en el terminal)

/system scheduler
add comment=»» disabled=no interval=1d name=Conficker-daily on-event=»/system script run daily-conficker-list» start-date=jan/01/1970 start-time=00:00:01

El resultado:

Esto le da la lista de los ips que el conficket intentará conectar cada día. El uso se lo dará cada uno, pero se puede crear una simple regla que busque las peticiones de esos server y loguea ese IP.

/ip firewall filter
add action=add-src-to-address-list address-list=conficker-infected address-list-timeout=1d chain=forward comment=»label conficker-infected» disabled=no dst-address-list=
daily-conficker dst-port=80 protocol=tcp

Traducción: Maximiliano Dobladez Fuente: Mikrotik 
Bajo Licencia CC 2.5 - Attribution-Noncommercial-No Derivative