С каждым годом пользователям мобильных устройств становится все сложнее избежать заражения. За первое полугодие «Лаборатория Касперского» с помощью своего антивируса зафиксировала (читай: не дала установить) более 3 миллионов вредоносных приложений. И хотя статистически по сравнению с 2016 годом особого роста нет, отчетов о мобильных зловредах стало гораздо больше. После прочтения таких отчетов не остается ощущения «мыльного пузыря», проблема действительно есть: без использования каких-либо уникальных техник людям удается сколачивать миллионные ботнеты.
Материал адресован специалистам по безопасности и тем, кто собирается ими стать. Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.
Кстати, а откуда вообще берется андроид-ориентированная малварь? Наверное, из пиратских программ? С пиратских дискет? С пиратских компакт-дисков? Нет, погоди-ка, ведь сейчас у нас не 1997 год, а целый 2017-й… наверное, с подпольных репозиториев? Ан нет, оказывается, самый популярный репозиторий мобильных приложений, Google Play, серьезно подпортил свою репутацию — в 2017 году все самые успешные мобильные трояны и вирусы распространялись через него. Похоже, проблема в слишком богатом выборе для пользователя. На любой запрос найдется несколько десятков приложений, и большинство из них будет мусором.
Даже если внимательно изучать описание приложения, до его установки все равно трудно понять, что именно оно делает. Опираться на опыт других пользователей тоже не получается — в Google Play очень много приложений с купленными отзывами. Как ты понимаешь, стоит один раз запустить троян и потом будет очень сложно от него избавиться. А если же у трояна будет еще и полезная нагрузка, то простому пользователю вычислить наличие вредоносного контента практически невозможно.
Прошлогодняя статья «Анатомия 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татьи из последних выпусков журнала можно покупать отдельно только через два месяца после публикации. Чтобы читать эту статью, необходимо купить подписку.
Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке
1 год4570 р. Экономия 1400 рублей! |
1 месяц490 р. 25-30 статей в месяц |
Уже подписан?
Читайте также
Последние новости