1. 程式人生 > >Android研發安全2-Activity元件安全(下)

Android研發安全2-Activity元件安全(下)

       這篇文章是Android研發安全之Activity元件安全第二篇,本文將給大家分享Activity介面劫持方面的預防知識。

什麼是Activity劫持

       簡單的說就是APP正常的Activity介面被惡意攻擊者替換上仿冒的惡意Activity介面進行攻擊和非法用途。介面劫持攻擊通常難被識別出來,其造成的後果不僅會給使用者帶來嚴重損失,更是移動應用開發者們的惡夢。舉個例子來說,當用戶開啟安卓手機上的某一應用,進入到登陸頁面,這時,惡意軟體偵測到使用者的這一動作,立即彈出一個與該應用介面相同的Activity,覆蓋掉了合法的Activity,使用者幾乎無法察覺,該使用者接下來輸入使用者名稱和密碼的操作其實是在惡意軟體的Activity上進行的,最終會發生什麼就可想而知了。

Activity介面被劫持的原因

       很多網友發現,如果在啟動一個Activity時,給它加入一個標誌位FLAG_ACTIVITY_NEW_TASK,就能使它置於棧頂並立馬呈現給使用者。針對這一操作,假使這個Activity是用於盜號的偽裝Activity呢?在Android系統當中,程式可以列舉當前執行的程序而不需要宣告其他許可權,這樣子我們就可以寫一個程式,啟動一個後臺的服務,這個服務不斷地掃描當前執行的程序,當發現目標程序啟動時,就啟動一個偽裝的Activity。如果這個Activity是登入介面,那麼就可以從中獲取使用者的賬號密碼。

常見的攻擊手段

  • 監聽系統Logocat日誌,一旦監聽到發生Activity介面切換行為,即進行攻擊,覆蓋上假冒Activity介面實施欺騙。開發者通常都知道,系統的Logcat日誌會由ActivityManagerService打印出包含了介面資訊的日誌檔案,惡意程式就是通過Logocat獲取這些資訊,從而監控客戶端的啟動、Activity介面的切換。

  • 監聽系統API,一旦惡意程式監聽到相關介面的API元件呼叫,即可發起攻擊。

  • 逆向APK,惡意攻擊者通過反編譯和逆向分析APK,瞭解應用的業務邏輯之後針對性的進行Activity介面劫持攻擊

Activity元件已知產生的安全問題

  1. 惡意盜取使用者賬號、卡號、密碼等資訊
  2. 利用假冒介面進行釣魚欺詐

烏雲網漏洞報告例項

研發人員該如何預防

針對使用者

      Android手機均有一個HOME鍵(即小房子的那個圖示),長按可以檢視到近期任務。使用者在要輸入密碼進行登入時,可以通過長按HOME鍵檢視近期任務,比如說登入微信時長按發現近期任務出現了微信,那麼我現在的這個登入介面就極有可能是一個惡意偽裝的Activity,切換到另一個程式,再檢視近期任務,就可以知道這個登入介面是來源於哪個程式了。

針對開發人員

      研發人員通常的做法是,在登入視窗或者使用者隱私輸入等關鍵Activity的onPause方法中檢測最前端Activity應用是不是自身或者是系統應用,如果發現惡意風險,則給使用者一些警示資訊,提示使用者其登陸介面以被覆蓋,並給出覆蓋正常Activity的類名。

下面參考網友分享,給出一個研發人員常用的activity介面劫持防範措施程式碼:

首先,在前正常的登入Activity介面中重寫onKeyDown方法和onPause方法,這樣一來,當其被覆蓋時,就能夠彈出警示資訊,程式碼如下:
@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        //判斷程式進入後臺是否是使用者自身造成的(觸控返回鍵或HOME鍵),是則無需彈出警示。
        if((keyCode==KeyEvent.KEYCODE_BACK || keyCode==KeyEvent.KEYCODE_HOME) && event.getRepeatCount()==0){
            needAlarm = false;
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    protected void onPause() {
       //若程式進入後臺不是使用者自身造成的,則需要彈出警示
        if(needAlarm) {
            //彈出警示資訊
            Toast.makeText(getApplicationContext(), "您的登陸介面被覆蓋,請確認登陸環境是否安全", Toast.LENGTH_SHORT).show();
            //啟動我們的AlarmService,用於給出覆蓋了正常Activity的類名
            Intent intent = new Intent(this, AlarmService.class);
            startService(intent);
        }
        super.onPause();
    }
然後實現AlarmService.java,並在在AndroidManifest.xml中註冊
import android.app.ActivityManager;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.widget.Toast;

public class AlarmService extends Service{

    boolean isStart = false;
    Handler handler = new Handler();

    Runnable alarmRunnable = new Runnable() {
        @Override
        public void run() {
            //得到ActivityManager
            ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
            //getRunningTasks會返回一個List,List的大小等於傳入的引數。
            //get(0)可獲得List中的第一個元素,即棧頂的task
            ActivityManager.RunningTaskInfo info = activityManager.getRunningTasks(1).get(0);
            //得到當前棧頂的類名,按照需求,也可以得到完整的類名和包名
            String shortClassName = info.topActivity.getShortClassName(); //類名
            //完整類名
            //String className = info.topActivity.getClassName();
            //包名
            //String packageName = info.topActivity.getPackageName();
            Toast.makeText(getApplicationContext(), "當前執行的程式為"+shortClassName, Toast.LENGTH_LONG).show();
        }
    };
    @Override
    public int onStartCommand(Intent intent, int flag, int startId) {
        super.onStartCommand(intent, flag, startId);
        if(!isStart) {
            isStart = true;
            //啟動alarmRunnable
            handler.postDelayed(alarmRunnable, 1000);
            stopSelf();
        }
        return START_STICKY;
    }
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

參考連結:

相關推薦

Android研發安全2-Activity元件安全

       這篇文章是Android研發安全之Activity元件安全第二篇,本文將給大家分享Activity介面劫持方面的預防知識。 什麼是Activity劫持        簡單的說就是APP正常的Activity介面被惡意攻擊者替換上仿冒的惡意A

Android研發安全1-Activity元件安全

       Activity元件是使用者唯一能看見的元件,作為軟體所有功能的顯示載體,其安全性不言而喻。針對Activity元件安全,作為一個安卓開發者來講需要在日常開發過程中注意兩點: - Activity訪問許可權的控制 - Activity被劫持

Android進階2之 陰影製作Shadow

dx:X軸方向的偏移量dy:Y軸方向的偏移量color:陰影顏色注意:如果半徑被設定為0,意思就是去掉陰影。具體實現:package xiaosi.textShadow;import android.app.Activity;import android.content.Context;import andr

Android系統程序之Activity管理——ActivityManagerServiceAMS

一. 為什麼會有AMS 對於Android app開發人員來說,Activity是其打交道最多的元件了:App的每一個介面都對應於一個Activity。每個Activity都有他的生命週期(那幾個生命週期應該已經爛熟於心了吧),所以我們應該有一種機制來記錄並管理這些Acti

2018-3-27 14周2次課 NFS、FTP

NFS FTP 14.4 exportfs命令·更改nfs配置文件後,重啟nfs服務,那麽此時如果有遠程客戶端正在掛載共享目錄,那麽先停止nfs服務,就會導致遠程客戶端掛起。exportfs這個命令是和nfs-utils這個包一起安裝的exportfs:-a 全部掛載或者全部卸載-r

2.5d向量插畫|-繪製

上篇主要介紹了一下2.5d向量插畫,這篇咱們來說說它的繪製吧! 使用軟體:illustrator (AI原始檔可以在文末進群向管理員索要哦~免費視訊課程在文末,點選即可進入,11月6日晚19:00準時直播哦~) 難度:★★★☆☆ 我們從天貓開始。 1.選中圖形,選擇選單欄上的效果-3D-

vuex 2.0學習心得--- getter

vuex2.0基本使用(3) --- getter   1. Getter 就是把元件中共有的對state的操作進行了提取,它就相當於對state的computed.所以它會獲得state作為第一個引數。 2. 有的元件中獲取到 store中的state,&nb

2018年Android面試題含答案--適合中高階

1、Activity生命週期? onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDetroy() 2、Service生命週期? service 啟動方式有兩種,一種是通過

Android開發者編寫自己的API介面

前言 在上一篇Android開發者編寫自己的API介面(上)中,已經介紹瞭如何搭建一個基本的開發環境,以及介面的編寫,最後是能夠成功執行的。 這一篇將更進一步,主要解決下面兩個問題: ①:如何讓後臺專案執行在TomCat上 ②:如何在雲伺服器上部署自己的

Vuex 2.0 原始碼分析

輔助函式 Vuex 除了提供我們 Store 物件外,還對外提供了一系列的輔助函式,方便我們在程式碼中使用 Vuex,提供了操作 store 的各種屬性的一系列語法糖,下面我們來一起看一下: mapState mapState 工具函式會將 store 中的 state 對映到區域性計算

Spring Boot 2.x 快速入門HelloWorld示例詳解

esc 入門 無敵 depend alt 簡單的 net 自動管理 clean 上篇 Spring Boot 2.x 快速入門(上)HelloWorld示例 進行了Sprint Boot的快速入門,以實際的示例代碼來練手,總比光看書要強很多嘛,最好的就是邊看、邊寫、邊記、邊

Android研發安全-Activity元件安全

       Activity元件是使用者唯一能看見的元件,作為軟體所有功能的顯示載體,其安全性不言而喻。針對Activity元件安全,作為一個安卓開發者來講需要在日常開發過程中注意兩點: - Activity訪問許可權的控制 - Activity被劫持 本篇文章將分享Activity訪問許可權控制方面

Android靜態安全檢測 -> Activity元件暴露

Activity元件暴露 - exported屬性 一、android:exported 該屬性用來標示,當前Activity是否可以被另一個Application的元件啟動 1. true 表示

Activity組件安全

android 原因 ted string 用途 androi 打開 service 界面切換 什麽是Activity劫持 簡單的說就是APP正常的Activity界面被惡意攻擊者替換上仿冒的惡意Activity界面進行攻擊和非法用途。界面劫持攻擊通常難被識別

Android安全/開發基礎--11--圖形介面UI和碎片Fragment

10-9、UI fragment與fragment管理器 採用fragment而不是activity來管理應用UI,可繞開Android系統activity使用規則的限制。fragment是一種控制器物件,activity可委派它執行任務。這些任務通常就是管理使

Android安全攻防戰,反編譯與混淆技術完全解析

http://blog.csdn.net/guolin_blog/article/details/50451259 http://blog.csdn.net/guolin_blog/article/details/50451259 http://blog.csdn

android permission許可權與安全機制解析

  剛建了一個QQ群,感興趣的大家一起多多交流:544645972   在android permission許可權與安全機制解析(上)篇部落格中,我已經詳細介紹了android相關係統permission和自定義permission,以及一些許可權機制和安全

Android Studio之Activity切換動畫

文章 oid out size ref intel tar studio anim 1、上一篇文章“Android Studio之多個Activity的滑動切換(二)”中實現了多個activity之間的滑動切換,可是新切換出的activity大多是從右側進入 2、我們能

安全類工具制作第005篇:進程管理器

btn creat lan 控件 lookup 包括 lln create tdi 一、前言 這次的程序是為了完好上一次所編寫的進程管理器。使得當我們選中某一個進程的時候。能夠查看其DLL文件,而且能夠對可疑的模塊進行卸載操作。這樣就能夠有效對抗DLL的

安全技能樹簡版

lap tin kmp ioc document scp jsf rc4 bug Expand - Collapse 安全技能樹簡版 說明 V1 By @余弦 201706 聯系我:[email protected]/* */ 更新動態關註