[Информационная безопасность, Программирование, Разработка под Android] Android — запрещенные приемы
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
В данной статье проведем попытку изучения используемых конструкций языка программирования для работы вредоносного программного обеспечения. Основная задача — выяснить, содержат ли вредоносы для ОС Android какие-либо полезные и интересные недокументированные возможности ОС или же это просто приложения, которые ловко выполняют свой функционал при помощи стандартных приемов.ВПО может состоять из десятков тысяч строк исходного кода, если не больше. Поэтому для ориентира в этом море кода будем рассматривать следующие характеристики:
- используемый язык программирования;
- набор привилегий, которые доступны ПО;
- процедура предоставления удаленного доступа;
- особенности реализации программного обеспечения (если есть).
Disclamer: Статья не претендует на полноту описываемой информации и предоставляет информацию только в образовательных целях.Вредоносное программное обеспечение и ОСКак известно, система Android своим ядром обязана Linux. И как свой прародитель, ОС Android считалась неприступной для вредоносного программного обеспечения. По мере развития системы в нее добавлялись новые функции, которые должны были еще больше обезопасить систему. Среди них:
- песочница для каждого отдельного приложения;
- организация доступа к ресурсам ОС за счет большого количества правил SELinux подсистемы;
- использование нотификации для пользователей с перечнем необходимых для работы приложения привилегий.
Однако и это не помогло на 100% защитить систему. Почему? Наиболее распространенный способ инфицирования данной ОС — использование патченного софта и социальная инженерия. Причем обычно пользователям предлагается работать с интерфейсом, который неотличим от системного — то есть любое приложение ОС Android может использовать нотификации и Intent`ы, которыми пользуется сама ОС. ВПО под Android развивается отчасти по пути open source: в сеть периодически попадают исходные коды вредоносов, которое использовалось злоумышленниками, что в свою очередь помогает менее квалифицированным «вирусописателям» ускорить создание своих зловредов. Попробуем раздобыть эти исходники из публичных источников.Первым подопытным будет троян Anubis. Вот тут есть относительно свежая новость о том, с чем и как работает этот троян.AnubisИспользуемый язык программирования: Java. Для этого даже не нужно вычитывать исходники проекта, поскольку почти все файлы имеют расширение Java.
Набор требуемых привилегий на самом деле зашкаливает. Приведем часть AndroidManifest:
...
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
...
Похоже, что приложение будет системным, а также будет практически 24/7 мониторить активность пользователя и получать необходимые данные для своих целей. ОС не должна препятствовать деятельности этого приложения, если пользователь согласился с таким набором привилегий.ВПО представляет собой троян, который может предоставлять доступ к зараженному устройству. Это осуществляется через создание сервиса, который имеет говорящее название "ServiceRAT". Регистрируется он стандартно — через манифест. Часть исходника самого сервиса:
...
public class ServiceRAT extends IntentService {
String botid="";
UtilsClass utilsClass = new UtilsClass();
Constants const_ = new Constants();
RequestHttp http = new RequestHttp();
StoreStringClass storeStringClass = new StoreStringClass();
...
Никаких изысков, используем http для передачи данных, и «шифруем» всё через RC4. Можно бы было придраться к code style, но похоже, что злоумышленники не парятся о подобном. Сам вредонос работает классически — получает зашифрованные данные от сервера и выполняет:
...
UtilsClass utilsClass = new UtilsClass();
try
{
byte[] data = Base64.decode(textDE_C, Base64.DEFAULT);
textDE_C = new String(data, "UTF-8");
byte[] detext = utilsClass.hexStringToByteArray(textDE_C);
ClassRC4 rcd = new ClassRC4(key.getBytes());
return new String(rcd.decrypt(detext));
...
Если смотреть код управления устройством полностью, то глаз зацепится за вот такой фрагмент:
...
responce = utilsClass.trafDeCr(responce);
utilsClass.Log("RATresponce",""+responce);
if(responce!="**"){
utilsClass.Log("RAT_command", "" + responce);
if(responce.contains("opendir:")){
String opendir = responce.replace("opendir:","");
opendir = opendir.split("!!!!")[0];
if(opendir.contains("getExternalStorageDirectory"))opendir = Environment.getExternalStorageDirectory().getAbsolutePath();
String getFileFolder = utilsClass.listFilesWithSubFolders(new File(opendir));
...
Похоже, у автора была 100% уверенность, что любая команда для вредоноса будет введена всегда 100% корректно. Поэтому можно не переживать о наполнении opendir и просто выполнить команду.Вывод: данный зловред никаких интересных «трюков» не использует. Разрешенные действия, которые описаны полностью в манифесте подчиняют практически полностью всю ОС. Все функции реализованы в рамках стандартного использования функций ОС и её библиотек. Отсутствует code style.CerberЕщё один зловред, исходный код которого утёк в сеть. Недавняя новость о его функционале. Данная малвара имеет интересную особенность: практически все функции реализованы в отдельном файле, видимо разработчик таким образом хотел вынести весь алгоритм и иметь возможность обфусцировать его автоматическими средствами. Возможно, так было бы удобнее еще добавлять дополнительный функционал, но если задуматься, вероятно это один из методов обхода механизма проверки приложений для Google Play, так как вредонос достаточно часто светится в официальном магазине.Используемый язык программирования: Java. Набор привилегий:
...
<application
android:allowBackup="true"
android:label="module"
android:supportsRtl="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.app.role.SMS" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
...
Объявления привилегий нет, у приложения всего лишь один Intent. Фрагмент исходника обработчика:
...
import java.lang.reflect.Method;
public class MainActivity extends Activity {
mod tt = new mod();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tt.checkProtect(this);
try {
Class c = Class.forName("com.example.modulebot.MainActivity");
Method m = c.getMethod("ssss");
m.invoke(c.newInstance());
} catch (Throwable t) {
}
tt.main(this,"");
}
...
Как было упомянуто ранее, основной алгоритм ВПО записан в отдельный модуль. Отследить работу алгоритма можно по объекту "tt". Автор вредоноса также не особенно переживает за поддержку данного кода, все объекты не имеют четкого именования. Видимо, данный модуль не планировали использовать долго. Функционал вредоноса не ограничивается отправкой СМС, в нем так же есть работа с апдейтом модуля приложения:
...
case "updateModule":
utl.SettingsWrite(context, "statDownloadModule", "0");
try {
new File(context.getDir("apk", Context.MODE_PRIVATE), "system.apk").delete();
}catch (Exception ex){
utl.SettingsToAdd(context, consts.LogSMS , "(MOD5) | updateModule " + ex.toString() +"::endLog::");
}
....
Дополнительный файл "system.apk", к сожалению, отсутствует среди исходников, но вероятно он загружался с управляющего сервера. Удаленного доступа данный вредонос не предоставляет совсем. Весь функционал реализуется на основании конфига, который автоматически выполняет операции, которые ему передал злоумышленник на этапе запуска.Вывод: ВПО работает только с СМС, которые проксируются в лог и пересылаются на конкретный номер. Снова полное отсутствие code style.DefensorIdЕще одно ВПО, которое распространялось на ОС Android. Относительно свежую новость о нем можно найти здесь. Снова язык программирования — Java, похоже зловреды категорически не хотят использовать Kotlin.Набор запрашиваемых привилегий:
...
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
<uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"
tools:ignore="ProtectedPermissions" />
<service
android:name=".CoreService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
...
ВПО славится тем, что может работать с пользовательским интерфейсом и воровать данные пользователя. Для подобного функционала в ОС Android необходимо обладать специальными привилегиями, которые выдаются только специальному функционалу — «Расширенные возможности ввода» (ACCESSIBILITY). Ниже приведен фрагмент кода, который старается такие привилегии запросить для возможности рисовать свой Intent поверх других приложений:
...
public void overayPermission(){
if (!Settings.canDrawOverlays(this)) {
Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivityForResult(myIntent, WIN_REQ_CODE);
}
}
public void AccessibilityAllow() {
AlertDialog.Builder gsDialog = new AlertDialog.Builder(this);
gsDialog.setTitle("Message");
gsDialog.setCancelable(false);
gsDialog.setMessage("please need to allow the permission");
gsDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
startActivityForResult(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS),CORE_REQ_CODE);
}
}).create().show();
}
...
Социальная инженерия во всей красе. Если система не дала запустить приложение с возможностью помещать свой Intent поверх других приложений — запросить у пользователя эту возможность. С высокой долей вероятности нотификацию от системы будет им подтверждена без подозрений. Удаленный доступ к устройству в этом ВПО не предоставляется, весь функционал обрабатывается автоматически.Вывод: Код создавался более опытным программистом, есть осмысленное именование объектов. Функционал реализуется за счет возможностей самой ОС и применяется для социальной инженерии.ВыводКод вредоносного программного обеспечения в большинстве случаев не выходит за рамки обычного программирования для ОС Android. Более того, можно сказать, что большинство ВПО пишется самоучками, которые собирают функции по официальной документации. В коде отсутствует четкое определение объектов их функционала, нет обработки данных от пользователя, так как реализация функционала пишется «чтобы работало». По итогу «недокументированные функции ОС» — это лишь умелые манипуляции злоумышленников по вводу пользователя в заблуждение.
Автор статьи — Александр Колесников.
Статья подготовлена в рамках курсов "Android Developer. Basic"и "Android Developer. Professional".
Также приглашаем на открытый вебинар на тему «Рисуем свой график котировок в Android». На занятии участники вмеcте с экспертом:
— рассмотрят основные инструменты для рисования;
— изучат возможности классов Canvas, Path, Paint;
— нарисуют кастомизируемый график котировок и добавим в него анимаций.
Присоединяйтесь!
===========
Источник:
habr.com
===========
Похожие новости:
- [Реверс-инжиниринг] Исполняемый обвес. Часть 2
- [JavaScript, Программирование] Как написать интерфейс пользователя (UI) PlayStation 5 на JavaScript (перевод)
- [Разработка мобильных приложений, Разработка под Android] Материалы митапа для андроид-инженеров: поиск проблем сборки, защита от них и работа с Gradle
- [Программирование, IT-инфраструктура, Go] Онлайн-митап для бэкенд-разработчиков
- [Программирование, Go] И еще один сервис проверки паспортов или опять вопрос сколько гигабайт в одном мегабайте
- [Информационная безопасность, Системное администрирование, Софт, IT-компании] Microsoft выпустила инструмент для устранения уязвимости в серверах Exchange
- [Информационная безопасность, JavaScript] JavaScript prototype pollution: практика поиска и эксплуатации
- [Программирование, C++, Распределённые системы, Микросервисы] С чего начать писать микросервис на C++
- [Системное администрирование, Программирование, IT-инфраструктура, Apache] 5 вещей, о которых должен знать любой разработчик Apache Kafka (перевод)
- [Программирование, Терминология IT, Управление разработкой] Энтерпрайз разработка с нуля
Теги для поиска: #_informatsionnaja_bezopasnost (Информационная безопасность), #_programmirovanie (Программирование), #_razrabotka_pod_android (Разработка под Android), #_android_development, #_vredonosy (вредоносы), #_bezopasnost_vebprilozhenij (безопасность веб-приложений), #_anubis, #_cerber, #_blog_kompanii_otus (
Блог компании OTUS
), #_informatsionnaja_bezopasnost (
Информационная безопасность
), #_programmirovanie (
Программирование
), #_razrabotka_pod_android (
Разработка под Android
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 17:35
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
В данной статье проведем попытку изучения используемых конструкций языка программирования для работы вредоносного программного обеспечения. Основная задача — выяснить, содержат ли вредоносы для ОС Android какие-либо полезные и интересные недокументированные возможности ОС или же это просто приложения, которые ловко выполняют свой функционал при помощи стандартных приемов.ВПО может состоять из десятков тысяч строк исходного кода, если не больше. Поэтому для ориентира в этом море кода будем рассматривать следующие характеристики:
Набор требуемых привилегий на самом деле зашкаливает. Приведем часть AndroidManifest: ...
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.WRITE_SMS" /> <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" /> ... ...
public class ServiceRAT extends IntentService { String botid=""; UtilsClass utilsClass = new UtilsClass(); Constants const_ = new Constants(); RequestHttp http = new RequestHttp(); StoreStringClass storeStringClass = new StoreStringClass(); ... ...
UtilsClass utilsClass = new UtilsClass(); try { byte[] data = Base64.decode(textDE_C, Base64.DEFAULT); textDE_C = new String(data, "UTF-8"); byte[] detext = utilsClass.hexStringToByteArray(textDE_C); ClassRC4 rcd = new ClassRC4(key.getBytes()); return new String(rcd.decrypt(detext)); ... ...
responce = utilsClass.trafDeCr(responce); utilsClass.Log("RATresponce",""+responce); if(responce!="**"){ utilsClass.Log("RAT_command", "" + responce); if(responce.contains("opendir:")){ String opendir = responce.replace("opendir:",""); opendir = opendir.split("!!!!")[0]; if(opendir.contains("getExternalStorageDirectory"))opendir = Environment.getExternalStorageDirectory().getAbsolutePath(); String getFileFolder = utilsClass.listFilesWithSubFolders(new File(opendir)); ... ...
<application android:allowBackup="true" android:label="module" android:supportsRtl="true" android:theme="@android:style/Theme.Translucent.NoTitleBar"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.app.role.SMS" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> ... ...
import java.lang.reflect.Method; public class MainActivity extends Activity { mod tt = new mod(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); tt.checkProtect(this); try { Class c = Class.forName("com.example.modulebot.MainActivity"); Method m = c.getMethod("ssss"); m.invoke(c.newInstance()); } catch (Throwable t) { } tt.main(this,""); } ... ...
case "updateModule": utl.SettingsWrite(context, "statDownloadModule", "0"); try { new File(context.getDir("apk", Context.MODE_PRIVATE), "system.apk").delete(); }catch (Exception ex){ utl.SettingsToAdd(context, consts.LogSMS , "(MOD5) | updateModule " + ex.toString() +"::endLog::"); } .... ...
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" /> <uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" tools:ignore="ProtectedPermissions" /> <uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES"/> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <uses-permission android:name="android.permission.WRITE_SETTINGS" tools:ignore="ProtectedPermissions" /> <service android:name=".CoreService" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" ... ...
public void overayPermission(){ if (!Settings.canDrawOverlays(this)) { Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); startActivityForResult(myIntent, WIN_REQ_CODE); } } public void AccessibilityAllow() { AlertDialog.Builder gsDialog = new AlertDialog.Builder(this); gsDialog.setTitle("Message"); gsDialog.setCancelable(false); gsDialog.setMessage("please need to allow the permission"); gsDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { startActivityForResult(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS),CORE_REQ_CODE); } }).create().show(); } ... Автор статьи — Александр Колесников.
Статья подготовлена в рамках курсов "Android Developer. Basic"и "Android Developer. Professional". Также приглашаем на открытый вебинар на тему «Рисуем свой график котировок в Android». На занятии участники вмеcте с экспертом: — рассмотрят основные инструменты для рисования; — изучат возможности классов Canvas, Path, Paint; — нарисуют кастомизируемый график котировок и добавим в него анимаций. Присоединяйтесь! =========== Источник: habr.com =========== Похожие новости:
Блог компании OTUS ), #_informatsionnaja_bezopasnost ( Информационная безопасность ), #_programmirovanie ( Программирование ), #_razrabotka_pod_android ( Разработка под Android ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 17:35
Часовой пояс: UTC + 5