С каждым годом пользователям мобильных устройств становится все сложнее избежать заражения. За первое полугодие «Лаборатория Касперского» с помощью своего антивируса зафиксировала (читай: не дала установить) более 3 миллионов вредоносных приложений. И хотя статистически по сравнению с 2016 годом особого роста нет, отчетов о мобильных зловредах стало гораздо больше. После прочтения таких отчетов не остается ощущения «мыльного пузыря», проблема действительно есть: без использования каких-либо уникальных техник людям удается сколачивать миллионные ботнеты.

WARNING

Материал адресован специалистам по безопасности и тем, кто собирается ими стать. Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.

 

Источник эпидемии

Кстати, а откуда вообще берется андроид-ориентированная малварь? Наверное, из пиратских программ? С пиратских дискет? С пиратских компакт-дисков? Нет, погоди-ка, ведь сейчас у нас не 1997 год, а целый 2017-й… наверное, с подпольных репозиториев? Ан нет, оказывается, самый популярный репозиторий мобильных приложений, Google Play, серьезно подпортил свою репутацию — в 2017 году все самые успешные мобильные трояны и вирусы распространялись через него. Похоже, проблема в слишком богатом выборе для пользователя. На любой запрос найдется несколько десятков приложений, и большинство из них будет мусором.

Малоинформативные и подозрительные отзывы
Малоинформативные и подозрительные отзывы

Даже если внимательно изучать описание приложения, до его установки все равно трудно понять, что именно оно делает. Опираться на опыт других пользователей тоже не получается — в Google Play очень много приложений с купленными отзывами. Как ты понимаешь, стоит один раз запустить троян и потом будет очень сложно от него избавиться. А если же у трояна будет еще и полезная нагрузка, то простому пользователю вычислить наличие вредоносного контента практически невозможно.

INFO

Прошлогодняя статья «Анатомия Android-малвари» во многом еще актуальна.

 

Где я?

Эффективность трояна во многом зависит от того, насколько хорошо он умеет адаптироваться под разные устройства. Начинать приходится с малого — определения версии ОС на устройстве жертвы, эта информация есть в классе Build.

Build.VERSION.SDK_INT

Но этой информации будет недостаточно, вендоры любят модифицировать прошивку так, что без падений не удается обойтись даже легальным приложениям. Наверняка ты знаком с оболочкой MIUI, которая серьезно поменяла принципы работы ОС, а китайских телефонов сейчас очень много. Больше данных об устройстве доступно из консольной команды getprop.

public static String fullSystemProperties() {
    java.lang.Process p = Runtime.getRuntime().exec("getprop");
    input = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024);
    while (input.readLine()!=null) {
        line = line + "n" + input.readLine();
    }
    ...

Вызов getprop даст много информации, можно отбросить часть с помощью grep (более подробные исходники смотри здесь).

Довольно часто «продвинутый пользователь» получает права суперпользователя в системе. Рут открывает не только расширенные возможности для юзера, но и раздолье для трояна. Стратегий определения наличия прав на устройстве много. Самое простое — пройтись по директориям в поисках бинарника su. Вот примерный набор подходящих для него путей:

String[] places = { "/sbin/", "/system/bin/", "/system/xbin/",
    "/data/local/xbin/", "/data/local/bin/",
    "/system/sd/xbin/", "/system/bin/failsafe/", "/data/local/"
};

Наличие его хотя бы в одном месте с высокой вероятностью укажет, что на устройстве доступны права суперпользователя.

for (String where : places) {
    if (new File(where + “su”).exists()) {
        found = true;
        break;
    }
}

Если троян сможет внедриться в пространство других приложений, то пользователя спасет только полная переустановка ОС. Root-права позволяют инжектить в системные вызовы, вставляя вредоносный код в самые неожиданные места. Для таких «хуков» есть готовые фреймворки, более подробно можешь посмотреть в нашей статье про Xposed.

Если кратко, то подобные инжекты предоставляют злохакерам самые широкие возможности — от замены ID рекламных баннеров, что позволяет получать деньги за чужой показ рекламы, до модификации системных утилит.

 

Старая уязвимость лучше новых двух

Если ты не следишь вплотную за статистикой мира Android, то можешь удивиться: еще в апреле каждое третье Android-устройство работало под операционной системой версии 4.4 и ниже. Это старые операционки, для которых уже долгое время в публичном доступе есть множество хакерских утилит.

На GitHub давно выложены исходники хорошо написанного трояна GmBot. Он как раз заточен под четвертую версию ОС и умеет практически все: манипулировать персональной информацией, СМС, камерой и прочее.

GmBot сделан очень качественно, и неудивительно, что появилась целая плеяда малвари, основанной на выложенном исходном коде. Один из наиболее успешных охотников за старыми устройствами — троян CopyCat. По статистике Check Point, у него 14 миллионов заражений и на восьми миллионах из них получен root-доступ. При этом CopyCat не использовал никаких секретных эксплоитов — сплошной паблик. К примеру, вот один из них на GitHub.

 

Гоним рекламу

Согласно статистике, в этом году наибольший рост показали так называемые Adware — вирусы, зарабатывающие на демонстрации рекламы пользователю. Летом в Google Play была обнаружена корейская малварь Judy: для ее распространения создали более сорока приложений, каждое из которых пользовалось большим успехом — миллионы загрузок и активных пользователей.

Приложения действительно работали, это были незатейливые игры, рассчитанные на пользователей школьного возраста. Пока ребенок играл в клон «Веселой фермы», троян самостоятельно кликал по рекламным баннерам, зарабатывая копеечку своим создателям.

Притягательная игра с плохим содержимым
Притягательная игра с плохим содержимым

Чтобы не гонять лишний трафик, троян умел находить ссылки на партнерки и переходил только по ним. Сначала Judy получал с управляющего центра ссылку на страницу с рекламой, на которой висели партнерские баннеры, и загружал себе ее контент. Реализовать это можно, к примеру, с помощью HttpURLConnection.

HttpURLConnection connection = null;
URL url = new URL(ccUrl);
connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream input = connection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(input));
String inputLine;
while ((inputLine = br.readLine()) != null) {output.append(inputLine);}
...
String webPageContent = output.toString();

На загруженной странице открывались не все ссылки подряд, а только рекламные. Для парсинга строк есть класс Pattern, полностью повторяющий синтаксис регулярных выражений языка Perl. Поначалу это похоже на мешанину, а потом разбираешься и парсинг идет на ура. У партнерки будут какие-то общие признаки — один домен, реферер и так далее. Вот такой регуляркой вытаскиваются все ссылки на поддомены google.com:

Pattern urlFinder = Pattern.compile("https://w+.google.com/w+");
Matcher matcher = urlFinder.matcher(test);
List<String> links = new ArrayList<>();
while (matcher.find()) {
    links.add(webPageContent.substring(matcher.start(), matcher.end()));
}

Хозяева рекламной площадки не должны знать, что баннеры загружаются в автоматическом режиме, значит, нужно открывать ссылки настоящим браузером. Это несложно, в Android есть класс WebView — полноценный браузер на движке Chrome. Любопытно, что, открывая страницу, малварь мимикрировала под полноценный компьютер — видимо, для таких переходов стоимость клика выше.

webView.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");

Продолжение статьи доступно только подписчикам

Cтатьи из последних выпусков журнала можно покупать отдельно только через два месяца после публикации. Чтобы читать эту статью, необходимо купить подписку.

Подпишись на журнал «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

3 комментария

Подпишитесь на ][, чтобы участвовать в обсуждении

Обсуждение этой статьи доступно только нашим подписчикам. Вы можете войти в свой аккаунт или зарегистрироваться и оплатить подписку, чтобы свободно участвовать в обсуждении.

Check Also

Безопасность превыше всего. 9 простых трюков, которые сделают жизнь линуксоида секьюрнее

Жизнь обычных людей складывается из мелочей. Жизнь линуксоида складывается из множества ма…