The reason why you see paging by IMSI in real-world GSM networks
During my work on airprobe and OsmocomBB I've been wondering why you see
paging by IMSI in real-world GSM networks.
A quick recap: The IMSI is the world-wide unique serial number of your SIM.
Since it is easy to identify and track people, the TMSI was introduced as
a temporary identifier that is frequently re-allocated over encrypted channels.
The only reason for the TMSI to exist is to prevent tracking of a subscriber
by watching where his IMSI appears on the paging channel.
According to the theory, the IMSI is only used when first registering to any
GSM network. At that time, a TMSI is allocated to the SIM card in the phone,
and this TMSI is used for the next transaction(s). Later, this TMSI is
re-allocated and re-allocated, but the IMSI shouldn't show up again in any
paging requests.
Even if you switch mobile networks (i.e. in the roaming case), you would
once send the IMSI as part of a LOCATION UPDATE REQUEST or IDENTITY RESPONSE,
but the network has no need to page the SIM by IMSI.
So far the theory. If you look at the Paging Channel (PCH) of cells in
real-world networks, you see a significant (10-20%) amount of paging requests
that contain paging by IMSI. This seems strange on first sight, given the
theory described above.
I have the following plausible explanation for this:
-
The VLR keeping the IMSI-TMSI mappings doesn't have non-volatile storage. This
means at a VLR restart, all the TMSI allocations will be lost, and the network
has to resort to paging by IMSI.
-
The VLR has a limited amount of RAM, which can store a limited number of IMSI-TMSI
mappings. Especially if the operator is interested in saving money, the amount of
memory is insufficient for all subscribers in the network. This means, the VLR
will expire some old entries in the mapping table to store new entries. Thus,
mobile phones whose last transaction with the GSM network was relatively long ago
are likely candidates for such VLR expiration. Once a phone for an expired entry
needs to be paged again, paging will happen by IMSI.
-
Last, but not least: GSM networks do not page a phone by the last known cell, but
by the last known location area of the phone. A location area might be relatively
big. This means that at any cell you will see a lot of paging messages, even for
phones that are not even anywhere near this cell. If there is no response within
the location area, the MSC might decide to do paging on a larger radius, possibly
the entire MSC area. Since such MSC-wide paging is likely to occur for phones
that haven't shown activity for a long time (and thus might have moved or
disappeared without properly unregistering from the network), those are the exact
same phones for which the IMSI-TMSI mappings have expired from the VLR. Thus,
the rate of paging-by-IMSI looks disproportionately high.
So the relatively high percentage of paging by IMSI vs. TMSI should not be
taken as a measurement with regard to the total number of transactions or even
the total number of subscribers. It is simply the mechanics of the network
resulting in a distortion of those figures caused by phones that have never
properly unregistered from the network.
[ /gsm |
permanent link ]
Back from OpenBTS workshop
I've just returned back from the First OpenBTS workshop held by David Burgess and hosted by Dieter Spaar in south-east Bavaria (Germany). While I'm not involved with OpenBTS so far (except from using it occasionally), I still thought the community surrounding Free Software / Open Source in the GSM field is small enough to make me participate.
On the request of the participants, I also did a short demonstration of both
OpenBSC and OsmocomBB. And just like I managed to crash OpenBTS by
accidentally sending invalid messages, my OpenBSC demo crashed at some point
[due to a not-yet-known bug regarding SMS delivery. I suppose the intrusive
changes of the BSC/MSC split are to be blamed for that. But I don't mind,
we need that split...
I definitely had a great time meeting the participants of the workshop. There
definitely is a very diverse crowd with equally diverse reasons for their
interest in using and/or deploying OpenBTS.
Finally, there was a chance to discuss the need for a common 'application interface'
in both OpenBSC and OpenBTS. Using that interface, external applications (e.g.
implementing USSD or RRLP) could be written in a way to work with both OpenBTS
and OpenBSC. I hope we can get started on this soon and remove another bit of
fragmentation in what is already a fairly small special interest community...
Given the excellent weather conditions, the motorbike ride to and from the
venue went fine - despite being at 650 km distance from my home.
[ /gsm |
permanent link ]
Adding frequency hopping support to OpenBSC
During the last couple of days, I've been adding the bits required to support
frequency-hopping BTSs in OpenBSC.
Now everything looks great in the protocol traces - but unfortunately it still
doesn't work, at least not with the Siemens BS-11 that I have access to.
Will continue to try to make it work. The big advantage of having a hopping
BTS under our control is that we can define the hopping sequence - something
quite useful once we get to the point where we'd like to add frequency hopping
to the telephone-side stack (OsmocomBB).
The good news is that I had to fix lots of bugs in the A-bis OML dissector
for wireshark that I wrote some time ago. It's now much more complete
and definitely a big step further towards eventually getting it included
in wireshark mainline.
[ /gsm |
permanent link ]
A fairy tale about ICCIDs, IMSIs and iPads
One of the big news of the last week is AT&T's leak of 114,000 iPad customer records including the e-mail address and ICCID
While that leak is certainly a big issue in itself, there are some people,
most notably Chris Paget, who
claim that this is much more serious than generally assumed. The main
claim here seems to be that ...in order to translate an ICCID into an IMSI,
you need to query the HLR.
I have been reading GSM protocol specifications on every level for the past
years, and never have I seen the ICCID being mentioned anywhere. The GSM
specifications do not require this information to be stored in the HLR, and
the MAP protocol (used on the C interface between MSC and HLR, see 3GPP TS 29.002)
does not even know how to encode/specify it.
Also, there is no technical need for it. The ICCID is never used nor needed
in any part of the GSM protocol. Also, the GSM network typically doesn't store
any information that is not absolutely necessary for its operation. The only
identifier of a SIM card that the network protocols care about is the IMSI.
So unless the US operators in question have either some kind of proprietary
extensions to both their HLR and the MAP protocol, there is to the best of
my knowledge no way how you can relate the ICCID to the IMSI.
And thus, as a result, the IMSI-catcher attack described will not work since
you don't know the IMSI of the SIM card (associated with the customer record)
that you want to catch.
If anyone can show me hard technical facts about ICCIDs being used in the HLRs
of the operators in question, I am happy to post here I was wrong. Otherwise,
I would hope everyone else could also come down to the hard technical facts,
i.e. which particular MAP message is used for this alleged ICCID-to-IMSI query.
UPDATE: As some people have discovered, the three US operators
themselves have decided that they use the same
number to generate both the ICCID and the IMSI. So if you have one, you
can compute the other. No need for HLR access, no need for the MAP protocol.
So the information leak is in fact unrelated to the GSM protocol but simply a
matter of how unfortunate those particular three operators assign their unique
identifiers.
[ /gsm |
permanent link ]
More thoughts on FSF action against Apple over GNU Go
Last week, I blogged about the FSF action against Apple. This week, I intend to add a bit to that.
As it has been pointed out to me, Apple has immediately removed the GPL-infringing
software from its app store. This of course means they have refrained from
further infringing the GPL. It is not publicly known if they have made a
declaration to cease and desist or not.
So yes, by removing the software that was distributed in violation of the GPL
terms, Apple has done legally the right thing: Reduce the danger/risk of
committing further (knowing) infringement.
The FSF (and probably the Free Software community in general) of course want
something else: For Apple to alter their app store terms in a way that would
enable software authors to have Apple distribute their GPL licensed software
in it. While this might be possible very easily with small modifications to
their legal terms and to the implementation of the app store, it is probably
not quite easy to make a legal claim and try to force this upon Apple.
Anyone always has the choice to either distribute GPL licensed software
compliant with its license terms - or not distribute it at all. If Apple
prefers the latter, this is very unfortunate (and you might call it anti-social
or even anti-competitive) but something that they can very well do.
The only questions that I see remaining from a legal point of view: What about
the previous GPL infringements? What can (and/or has) Apple to do in return
to the previous distribution of infringing software? This is where the legal
pressure of the copyright holders leaves room for negotiation. Instead of
monetary damages (which don't really resolve what the GPL aims to do), there
could possibly be a solution where Apple has to provide the GPL license text and complete corresponding source code to the Go program through their app store.
And while they're at it, they might just solve the distributing source code
for copyleft style licensed software problem in a generic way. Or they
might just decide that they're stupid and stubborn and not interested in
solving any problems in the first place.
[ /linux/gpl-violations |
permanent link ]
My take on the FSF action against Apple over GNU Go
About two weeks ago, the FSF announced that it has taken action against the Apple App Store over their distribution of GNU Go. This has apparently set off some people like lefty and triggered a length and wide debate.
I personally very much support the action the FSF has taken. Anyone involved
in distribution of copyrighted material is required to do due diligence on
checking that he actually has a license to do so. This is not really related
to the GPL.
Yes, this means that I can take GPL enforcement action to a retail store that
is selling/distributing infringing products, and I can make them provide a
declaration to cease and desist from further infringements. Of course,
that declaration would only be valid for this single retail store. This is
why in our gpl-violations.org work, we always try to go after whatever entity
is responsible for the majority or all of those infringements, rather than
after a single store owner.
The reason for this is simple: In many cases, it is impossible for you as the
rights holder to find out who sold the product to the retail store, and track
the entire supply chain back to whoever caused the GPL violation in the first
place. Also, some of those entities might reside in a different jurisdiction,
so you go after the first element in the supply chain that is in your own
jurisdiction, to minimize the legal risk for you as plaintiff and maximize the
output in terms of your local market.
But the case with Apple is different. They are not a small retailer down the
road, but the entity responsible for providing the infringing software to
(almost?) all of its users. They are running that App store as a commercial
company and earn money from running it (even if individual apps might be free
of charge). Free Software and copyleft licenses like the GPL are a very real
phenomenon in the software industry today, so they should better have thought
about a proper solution, not just for GNU Go but for the tens of thousands of
existing GPL licensed software projects which people might want to port or
re-use in iPhone applications.
They are already doing all kinds of verification/checking/review of software
for other reasons (things many people might call censoring), and as part of
that process they could just as well determine the license of the software,
and provide a source code download link from their store. What is the big deal?
If they (or other similar app store / market / ... providers) had thought
how to address the problem, there are easy and pragmatic solutions to
solve them in the architecture of such a app store / marketplace system.
Also, the fact that the FSF is taking legal steps is not wrong. Even if some
people might dispute whether they actually have a valid case or not (I believe
they do): This is what legal cases are for: To create a clear legal situation
for all participants in the dispute, and to set precedent for future similar
cases. Even only from that point of view it is good that they're doing this case.
At the end of it, the legal situation will be more clear, both for Apple as well
as for people who want to distribute GPL licensed software through their store.
[ /linux/gpl-violations |
permanent link ]
Wanted: Packet traces of the MAP+TCAP based C/Gc interface
I'm looking for any example pcap files (packet traces) of the
so-called "C" and "Gc" Interfaces, i.e. the interfaces of the HLR
(Home Location Register). If anyone has such pcap files or can generate
some, I would very much appreciate it.
The protocol levels I'm interested in is SCCP, TCAP and MAP. The lower
layers (MTP) are not important now.
Specifically, I'm looking for traces of any of the following MAP operations:
- updateLocation
- cancelLocation
- restoreData
- sendParameters
- updateGprsLocation
- sendAuthenticationInfo
- purgeMS
- sendRoutingInfo
- sendRoutingInfoForSM
- reportSM-DeliveryStatus
- readyForSM
- noteSubscriberPresent
- sendRoutingInfo
- anytimeInterrogation
- statusReport
- {register,erase,activate,deactivate,interrogate}SS
- sendIMSI
- sendRoutingInfoForGprs
- insertSubscriberData
- deleteSubscriberData
- checkIMEI
If anyone is able to produce the respective traces, I would appreciate it a
lot. I'd need them as examples to make sure I fully understand the TS 09.02 in
combination with Q.77x before actually starting to implement it...
[ /gsm |
permanent link ]
First functional HTTP transfer in my own GPRS/EDGE network
Today marks the day where finally, after months of (non-full-time) work, I have
made the first successful HTTP connection through my own GPRS/EDGE network.
Ever since we started to seriously get into OpenBSC to run GSM networks, I've been
looking forward to running GPRS networks, too. What most people don't know:
GPRS is radically different from GSM. It basically only shares the frequencies
and timeslot architecture of the physical layer, while having it's own layer1,
layer2 and various other protocol layers. Also, its signalling and data completely
bypass the usual BSC and MSC components of a GSM core network.
So what I've been working on is now called OsmoSGSN. Using
OpenBSC, you can provision an ip.access nanoBTS (or any other BTS with a Gb
Interface) to broadcast the GPRS/EDGE capabilities to the handsets. The BTS
then establishes the Gb interface (consisting of NS and BSSGP) to the SGSN.
The SGSN takes care of GPRS Mobility Management (GMM) and Session Management(SM)
in the signalling plane, as well as the LLC + SNDCP protocol layers. On the
other end, it uses the GTP protocol to connect to a GGSN. In our case, this is
the OpenGGSN project which
I recently adopted.
OpenGGSN then creates a virtual network device (tun0), through which the actual
IP packets are entering/leaving the GPRS network. From there you can route
and/or NAT them just like any other IP packets.
The current code is still incomplete in many places and known to be unstable. But
it's really rewarding that after a long time of development, layer after layer of
the stack, finally actual TCP/IP can be provisioned to phones.
The code is in the current master of the openbsc git repository, but I don't
think there's much point in trying it just yet. I suppose in a week from now
things should be much more stable.
[ /gsm |
permanent link ]
|