Finding Entry Points To SS7 Networks
Finding Entry Points To SS7 Networks
Philippe Langlois
Telecom Security Task Force
[email protected]
Agenda
History of telecommunications security
Review of digital telephony concepts
Discovering the backbone
SIGTRAN: From SS7 to TCP/IP
Attacking SIGTRAN
Q&A
Lab - BYOL
The origins
Phreaking is a slang term for the action of
making a telephone system do something
that it normally should not allow.
Reliability
US: 911, Europe: 112
How much lost revenue is one
minute of downtime?
21st century telecom attacks
VoIP GW hacking
Remember ”PBX hacking”?
SS7 SIGTRAN
SCTP Specs & Advantages
RFC2960
SCTP: Stream Control Transmission
Protocol
Advantages
Multi-homing
DoS resilient (4-way handshake, cookie)
Multi-stream
Reliable datagram mode
Some TCP & UDP, improved
SCTP in the wild
Software
Tons of proprietary implementations
Open source implementations (Linux, BSD…)
Network presence
Stack widespread with Linux 2.6 support
Scarcity on the open Internet
Rising in telco backbones / intranet
Adoption by other worlds: MPI clusters,
high speed transfers, …
SCTP Ports & Applications
http://sctp.tstf.net/index.php/SCTPscan/SCTPports
Common ports from IANA and RFCs
Augmented with open source package ports
Updated based on SCTPscan results
Open to contribution
INIT
INIT-ACK
CO O K IE-ECH O
CO O K IE-ACK
Scanning vs. Stealth Scanning
Attacker Servers
INIT
INIT
INIT
INIT-ACK
Tool Demo: SCTPscan
Like nmap for SCTP ports (-sS)
New realm
Same Rules
New fun!
Lots of references
RFC 2960, 4166, 4666
ITU (Now free)
Q&A
Thanks a lot!
http://sctp.tstf.net/index.php/SCTPscan/Workshop
Notes on VMware images
Make sure to select "Bridged mode" for your
ethernet connector.
Hands-on Tests
Who scans who?
Scanners vs. Targets
Scanning types
Scanning conflicts & Kernel impact
Analyze a SCTP exchange
Ethereal
Common problems
Q: I try to run the Dummy SCTP server for testing, and I get: "socket:
Socket type not supported"
A: Your kernel does not support SCTP sockets.
SCTP sockets are supported by Linux Kernel 2.6 or Solaris 10.
For Linux, you may want to try as root something like: modprobe sctp
Then rerun: sctpscan --dummyserver
Note: you only need a SCTP-aware kernel to run dummyserver.
Scanning is ok with 2.4 linux kernels!
For Mac Os X, you may add support for SCTP in Tiger 10.4.8 by
downloading:
http://sctp.fh-muenster.de/sctp-nke.html
Install the software package and run as root:
kextload /System/Library/Extensions/SCTP.kext
Then you can run "sctpscan -d" to run the dummy server.
Note that "netstat" won't report the use of the SCTP socket, use
instead:
lsof -n | grep -i '132?'
Kernel conflicts: Linux 2.6
[root@nubuntu] ./sctpscan -s -r 192.168.0 -p 10000
Netscanning with Crc32 checksumed packet
192.168.0.3 SCTP present on port 10000
SCTP packet received from 192.168.0.4 port 10000 type 1 (Initiation (INIT))
End of scan: duration=5 seconds packet_sent=254 packet_rcvd=205 (SCTP=2,
ICMP=203)
[root@nubuntu] uname -a
Linux nubuntu 2.6.17-10-386 #2 Fri Oct 13 18:41:40 UTC 2006 i686 GNU/Linux
[root@nubuntu]
If after this scan, we test the dummy server SCTP daemon built in SCTPscan, we'll notice that further scans from
this host will have different behavior:
[root@nubuntu] ./sctpscan -d
Trying to bind SCTP port
Listening on SCTP port 10000
^C
[root@nubuntu]
[root@nubuntu]
[root@nubuntu] ./sctpscan -s -r 192.168.0 -p 10000
Netscanning with Crc32 checksumed packet
192.168.0.3 SCTP present on port 10000
SCTP packet received from 192.168.0.4 port 10000 type 1 (Initiation (INIT))
SCTP packet received from 192.168.0.4 port 10000 type 6 (Abort (ABORT))
End of scan: duration=5 seconds packet_sent=254 packet_rcvd=206 (SCTP=3,
ICMP=203)
[root@nubuntu]
Kernel conflicts: MacOS X
localhost:~/Documents/sctpscan/ root# kextload
/System/Library/Extensions/SCTP.kext
kextload: /System/Library/Extensions/SCTP.kext loaded successfully
localhost:~/Documents/sctpscan/ root# ./sctpscan -s -r 192.168.0 -p 10000
Netscanning with Crc32 checksumed packet
End of scan: duration=9 seconds packet_sent=254 packet_rcvd=3 (SCTP=0, ICMP=3)
localhost:~/Documents/sctpscan/ root# kextunload
/System/Library/Extensions/SCTP.kext
kextunload: unload kext /System/Library/Extensions/SCTP.kext succeeded
localhost:~/Documents/sctpscan/ root# ./sctpscan -s -r 192.168.0 -p 10000
Netscanning with Crc32 checksumed packet
SCTP packet received from 127.0.0.1 port 10000 type 1 (Initiation (INIT))
192.168.0.4 SCTP present on port 10000
End of scan: duration=9 seconds packet_sent=254 packet_rcvd=5 (SCTP=2, ICMP=3)
localhost:~/Documents/sctpscan/ root#
You saw in this example that loading the SCTP kernel module prevents
SCTPscan to receive the response packets, and thus is not capable to detect
presence of a remote open port.
Thanks
Thank you very much!
Contact / Questions:
Philippe Langlois - [email protected]
QuickTime™ and a
TIFF (Uncompressed) decompressor
are needed to see this picture.